From a16b3bc7f60b857c2b7b46ca101131d99d25b6d1 Mon Sep 17 00:00:00 2001 From: David Krmpotic Date: Wed, 29 Mar 2023 14:02:19 +0200 Subject: [PATCH] ~ ACCUMULATING FURTHER CONTRIBUTIONS FROM GitHub/DMTSYS ~ --- .version | 2 +- README.md | 8 +- apps/dmt-mobile/appicon.png | Bin 0 -> 154248 bytes apps/dmt-mobile/assets/index-187c6aae.css | 1 - apps/dmt-mobile/assets/index-3c0f37a7.js | 73 - apps/dmt-mobile/assets/index-9bad2e4d.js | 73 + apps/dmt-mobile/assets/index-b31784e1.css | 1 + apps/dmt-mobile/index.html | 10 +- apps/dmt-mobile/manifest.json | 11 + apps/dmt-search/dmt/connectome-next/index.js | 4 + .../contentServer/checkPermission.js | 15 + .../contentServer--full--unused.js | 263 + .../contentServer/contentServer.js | 88 + .../feedBytesIntoChannel/binaryReader.js | 89 + .../feedBytesIntoChannel/streamFile.js | 35 + .../fileTransport/fiberHandle/encodePath.js | 11 + .../fileTransport/fiberHandle/fiberHandle.js | 15 + .../dmt/connectome-next/lib/utils/index.js | 65 + .../connectome-next/lib/utils/mime/HISTORY.md | 325 + .../connectome-next/lib/utils/mime/LICENSE | 23 + .../connectome-next/lib/utils/mime/README.md | 113 + .../connectome-next/lib/utils/mime/db.json | 8060 ++++ .../connectome-next/lib/utils/mime/index.js | 184 + .../lib/utils/mime/package.json | 87 + .../dmt/protocol/searchGUI/index.js | 2 +- .../dmt/protocol/searchGUI/objects/search.js | 2 +- apps/gui/.gitignore | 1 + apps/gui/frontend/+app/public/bundle.css | 32 +- apps/gui/frontend/+app/public/bundle.css.map | 54 +- apps/gui/frontend/+app/public/bundle.js | 31756 +++++++++++++++- apps/gui/frontend/+app/public/bundle.js.map | 2 +- apps/node_modules/.package-lock.json | 41 + apps/node_modules/connectome | 1 + apps/node_modules/connectome-next | 1 + apps/package-lock.json | 49 + apps/package.json | 9 +- ...up--brisi-after-kriptosola-rewrite.svelte} | 2 +- core/lib/dmt-frontend-components/src/index.js | 2 +- core/lib/dmt-gui-kit/colors.css | 4 + core/lib/dmt-gui-kit/components/Noise.svelte | 44 + .../dmt-gui-kit/components/Noise.svelte.d.ts | 23 + core/lib/dmt-gui-kit/index.d.ts | 1 + core/lib/dmt-gui-kit/index.js | 1 + core/lib/dmt-gui-kit/package.json | 3 +- .../apps-load/appFrontendList.js | 4 +- core/node/aspect-extend/apps-load/index.js | 43 +- core/node/aspect-extend/apps-load/loadApps.js | 38 +- core/node/aspect-extend/apps-serve/index.js | 2 +- .../aspect-extend/apps-serve/lib/server.js | 34 +- .../user-engine-load/deviceLoader.js | 44 + .../aspect-extend/user-engine-load/index.js | 34 +- .../user-engine-load/modifyPackageJson.js | 9 + .../abc-connect/lib/initConnection.js | 3 +- core/node/aspect-meta/holidays/index.js | 2 + core/node/aspect-meta/sysinfo/index.js | 2 +- core/node/common/index.js | 34 +- core/node/common/lib/dmtPreHelper.js | 2 + .../setupConnectionsCounter.js | 22 + .../lib/timeutils/formatMilliseconds.js | 30 +- core/node/common/lib/util.js | 74 + core/node/connectome/dist/index.js | 253 +- core/node/connectome/dist/index.mjs | 253 +- core/node/connectome/dist/node/index.js | 2349 +- core/node/connectome/dist/node/index.mjs | 2346 +- .../node_modules/.package-lock.json | 24 +- .../node_modules/bufferutil/build/Makefile | 9 +- .../obj.target/bufferutil/src/bufferutil.o.d | 18 +- .../bufferutil/build/Release/bufferutil.node | Bin 52668 -> 52668 bytes .../obj.target/bufferutil/src/bufferutil.o | Bin 16768 -> 16800 bytes .../bufferutil/build/bufferutil.target.mk | 28 +- .../node_modules/bufferutil/build/config.gypi | 31 +- .../utf-8-validate/build/Makefile | 9 +- .../obj.target/validation/src/validation.o.d | 18 +- .../obj.target/validation/src/validation.o | Bin 8992 -> 9032 bytes .../build/Release/validation.node | Bin 51564 -> 51564 bytes .../utf-8-validate/build/config.gypi | 31 +- .../utf-8-validate/build/validation.target.mk | 28 +- core/node/connectome/node_modules/ws/LICENSE | 27 +- .../node/connectome/node_modules/ws/README.md | 190 +- core/node/connectome/node_modules/ws/index.js | 3 + .../node_modules/ws/lib/buffer-util.js | 62 +- .../node_modules/ws/lib/constants.js | 4 +- .../node_modules/ws/lib/event-target.js | 290 +- .../node_modules/ws/lib/extension.js | 36 +- .../node_modules/ws/lib/permessage-deflate.js | 35 +- .../node_modules/ws/lib/receiver.js | 210 +- .../connectome/node_modules/ws/lib/sender.js | 319 +- .../connectome/node_modules/ws/lib/stream.js | 48 +- .../node_modules/ws/lib/subprotocol.js | 62 + .../node_modules/ws/lib/validation.js | 74 +- .../node_modules/ws/lib/websocket-server.js | 291 +- .../node_modules/ws/lib/websocket.js | 624 +- .../connectome/node_modules/ws/package.json | 25 +- .../connectome/node_modules/ws/wrapper.mjs | 8 + core/node/connectome/package-lock.json | 33 +- core/node/connectome/package.json | 4 +- core/node/connectome/server/index.js | 2145 +- core/node/connectome/server/index.mjs | 2142 +- .../connect/establishAndMaintainConnection.js | 83 +- .../src/client/connector/connector.js | 2 +- .../src/client/connector/handshake.js | 35 +- .../src/client/connector/receive.js | 15 +- .../connectome/src/client/connector/send.js | 2 +- .../connectome/src/server/channel/channel.js | 2 + .../src/server/channel/channelList.js | 4 +- .../connectome/src/server/channel/receive.js | 8 +- .../connectome/src/server/channel/send.js | 6 +- .../src/server/connectome/wsServer.js | 13 +- core/node/connectome/src/stores-node/index.js | 6 +- .../connectome/src/stores-node/syncStore.js | 5 + .../src/stores-node/twoLevelMergeKVStore.js | 4 + core/node/connectome/src/stores/index.js | 6 +- core/node/connectome/stores/index.js | 258 +- core/node/connectome/stores/index.mjs | 259 +- core/node/connectome/stores/node/index.js | 277 +- core/node/connectome/stores/node/index.mjs | 278 +- core/node/connectome/yarn.lock | 454 +- core/node/controller/apiDevice/methods.js | 2 +- core/node/controller/processes/abc/proc.js | 39 +- .../node/controller/processes/abc/startDMT.js | 2 +- core/node/controller/processes/dmt-proc.js | 16 +- core/node/controller/processes/manager.js | 6 + .../controller/program/connectionsAcceptor.js | 9 +- .../controller/program/connectomeLogging.js | 12 + .../program/createStore/createStore.js | 2 +- .../program/interval/onProgramTick.js | 7 +- core/node/controller/program/load.js | 37 +- .../program/peerlist/createFiberPool.js | 10 +- core/node/controller/program/program.js | 53 +- core/node/gui/protocol/dmtGUI/index.js | 24 + .../iot/lib/sensorMessageFormats/index.js | 49 +- core/node/iot/tasks/task.js | 4 +- core/node/node_modules/.bin/node-gyp-build | 1 + .../node_modules/.bin/node-gyp-build-optional | 1 + .../node_modules/.bin/node-gyp-build-test | 1 + core/node/node_modules/.package-lock.json | 95 +- core/node/node_modules/bufferutil/LICENSE | 19 + core/node/node_modules/bufferutil/README.md | 78 + core/node/node_modules/bufferutil/binding.gyp | 18 + core/node/node_modules/bufferutil/fallback.js | 34 + core/node/node_modules/bufferutil/index.js | 7 + .../node/node_modules/bufferutil/package.json | 36 + .../prebuilds/darwin-x64+arm64/node.napi.node | Bin 0 -> 116128 bytes .../prebuilds/linux-x64/node.napi.node | Bin 0 -> 10328 bytes .../prebuilds/win32-ia32/node.napi.node | Bin 0 -> 122368 bytes .../prebuilds/win32-x64/node.napi.node | Bin 0 -> 151552 bytes .../node_modules/bufferutil/src/bufferutil.c | 171 + .../mqtt/node_modules/ws/lib/validation.js | 30 - .../mqtt/node_modules/ws/package.json | 94 - core/node/node_modules/node-gyp-build/LICENSE | 21 + .../node_modules/node-gyp-build/README.md | 58 + core/node/node_modules/node-gyp-build/bin.js | 77 + .../node_modules/node-gyp-build/build-test.js | 19 + .../node/node_modules/node-gyp-build/index.js | 5 + .../node-gyp-build/node-gyp-build.js | 207 + .../node_modules/node-gyp-build/optional.js | 7 + .../node_modules/node-gyp-build/package.json | 29 + core/node/node_modules/utf-8-validate/LICENSE | 30 + .../node_modules/utf-8-validate/README.md | 50 + .../node_modules/utf-8-validate/binding.gyp | 18 + .../node_modules/utf-8-validate/fallback.js | 62 + .../node/node_modules/utf-8-validate/index.js | 7 + .../node_modules/utf-8-validate/package.json | 36 + .../prebuilds/darwin-x64+arm64/node.napi.node | Bin 0 -> 116000 bytes .../prebuilds/linux-x64/node.napi.node | Bin 0 -> 6232 bytes .../prebuilds/win32-ia32/node.napi.node | Bin 0 -> 121856 bytes .../prebuilds/win32-x64/node.napi.node | Bin 0 -> 150528 bytes .../utf-8-validate/src/validation.c | 109 + .../{mqtt/node_modules => }/ws/LICENSE | 0 .../{mqtt/node_modules => }/ws/README.md | 13 +- .../{mqtt/node_modules => }/ws/browser.js | 0 .../{mqtt/node_modules => }/ws/index.js | 0 .../node_modules => }/ws/lib/buffer-util.js | 0 .../node_modules => }/ws/lib/constants.js | 0 .../node_modules => }/ws/lib/event-target.js | 0 .../node_modules => }/ws/lib/extension.js | 0 .../{mqtt/node_modules => }/ws/lib/limiter.js | 0 .../ws/lib/permessage-deflate.js | 16 +- .../node_modules => }/ws/lib/receiver.js | 142 +- .../{mqtt/node_modules => }/ws/lib/sender.js | 6 +- .../{mqtt/node_modules => }/ws/lib/stream.js | 23 +- core/node/node_modules/ws/lib/validation.js | 104 + .../ws/lib/websocket-server.js | 69 +- .../node_modules => }/ws/lib/websocket.js | 368 +- core/node/node_modules/ws/package.json | 56 + core/node/notify/cli/push_notify_all.js | 2 +- core/node/notify/index.js | 7 +- core/node/notify/lib/desktop.js | 65 +- core/node/notify/lib/node-notifier/.eslintrc | 13 + core/node/notify/lib/node-notifier/.gitignore | 4 + core/node/notify/lib/node-notifier/.npmignore | 6 + .../node/notify/lib/node-notifier/.prettierrc | 5 + .../notify/lib/node-notifier/CHANGELOG.md | 369 + .../lib/node-notifier/CODE_OF_CONDUCT.md | 46 + .../notify/lib/node-notifier/CONTRIBUTING.md | 48 + .../notify/lib/node-notifier/DECISION_FLOW.md | 18 + core/node/notify/lib/node-notifier/LICENSE | 21 + core/node/notify/lib/node-notifier/README.md | 485 + .../notify/lib/node-notifier/dmt_readme.txt | 2 + core/node/notify/lib/node-notifier/index.js | 50 + .../lib/node-notifier/lib/checkGrowl.js | 24 + .../notify/lib/node-notifier/lib/utils.js | 500 + .../lib/node-notifier/node-notifier_flow.png | Bin 0 -> 20073 bytes .../node-notifier/node_modules/.bin/is-docker | 1 + .../node_modules/.bin/node-which | 1 + .../node-notifier/node_modules/.bin/semver | 1 + .../lib/node-notifier/node_modules/.bin/uuid | 1 + .../node_modules/.package-lock.json | 114 + .../node_modules/growly/HISTORY.md | 5 + .../node_modules/growly/README.md | 95 + .../node_modules/growly/example/bakery.js | 22 + .../node_modules/growly/example/cake.png | Bin 0 -> 14813 bytes .../node_modules/growly/example/muffin.png | Bin 0 -> 16978 bytes .../node_modules/growly/example/simple.js | 3 + .../node_modules/growly/lib/gntp.js | 200 + .../node_modules/growly/lib/growly.js | 193 + .../node_modules/growly/package.json | 15 + .../node_modules/is-docker/cli.js | 5 + .../node_modules/is-docker/index.d.ts | 15 + .../node_modules/is-docker/index.js | 29 + .../node_modules/is-docker/license | 9 + .../node_modules/is-docker/package.json | 42 + .../node_modules/is-docker/readme.md | 27 + .../node_modules/is-wsl/index.d.ts | 15 + .../node_modules/is-wsl/index.js | 31 + .../node-notifier/node_modules/is-wsl/license | 9 + .../node_modules/is-wsl/package.json | 45 + .../node_modules/is-wsl/readme.md | 36 + .../node_modules/isexe/.npmignore | 2 + .../node-notifier/node_modules/isexe/LICENSE | 15 + .../node_modules/isexe/README.md | 51 + .../node-notifier/node_modules/isexe/index.js | 57 + .../node-notifier/node_modules/isexe/mode.js | 41 + .../node_modules/isexe/package.json | 31 + .../node_modules/isexe/test/basic.js | 221 + .../node_modules/isexe/windows.js | 42 + .../node_modules/lru-cache/LICENSE | 15 + .../node_modules/lru-cache/README.md | 166 + .../node_modules/lru-cache/index.js | 334 + .../node_modules/lru-cache/package.json | 34 + .../node_modules/semver/CHANGELOG.md | 111 + .../node-notifier/node_modules/semver/LICENSE | 15 + .../node_modules/semver/README.md | 566 + .../node_modules/semver/bin/semver.js | 173 + .../node_modules/semver/classes/comparator.js | 135 + .../node_modules/semver/classes/index.js | 5 + .../node_modules/semver/classes/range.js | 510 + .../node_modules/semver/classes/semver.js | 287 + .../node_modules/semver/functions/clean.js | 6 + .../node_modules/semver/functions/cmp.js | 48 + .../node_modules/semver/functions/coerce.js | 51 + .../semver/functions/compare-build.js | 7 + .../semver/functions/compare-loose.js | 3 + .../node_modules/semver/functions/compare.js | 5 + .../node_modules/semver/functions/diff.js | 23 + .../node_modules/semver/functions/eq.js | 3 + .../node_modules/semver/functions/gt.js | 3 + .../node_modules/semver/functions/gte.js | 3 + .../node_modules/semver/functions/inc.js | 15 + .../node_modules/semver/functions/lt.js | 3 + .../node_modules/semver/functions/lte.js | 3 + .../node_modules/semver/functions/major.js | 3 + .../node_modules/semver/functions/minor.js | 3 + .../node_modules/semver/functions/neq.js | 3 + .../node_modules/semver/functions/parse.js | 33 + .../node_modules/semver/functions/patch.js | 3 + .../semver/functions/prerelease.js | 6 + .../node_modules/semver/functions/rcompare.js | 3 + .../node_modules/semver/functions/rsort.js | 3 + .../semver/functions/satisfies.js | 10 + .../node_modules/semver/functions/sort.js | 3 + .../node_modules/semver/functions/valid.js | 6 + .../node_modules/semver/index.js | 48 + .../node_modules/semver/internal/constants.js | 17 + .../node_modules/semver/internal/debug.js | 9 + .../semver/internal/identifiers.js | 23 + .../semver/internal/parse-options.js | 11 + .../node_modules/semver/internal/re.js | 182 + .../node_modules/semver/package.json | 41 + .../node_modules/semver/preload.js | 2 + .../node_modules/semver/range.bnf | 16 + .../node_modules/semver/ranges/gtr.js | 4 + .../node_modules/semver/ranges/intersects.js | 7 + .../node_modules/semver/ranges/ltr.js | 4 + .../semver/ranges/max-satisfying.js | 25 + .../semver/ranges/min-satisfying.js | 24 + .../node_modules/semver/ranges/min-version.js | 60 + .../node_modules/semver/ranges/outside.js | 80 + .../node_modules/semver/ranges/simplify.js | 44 + .../node_modules/semver/ranges/subset.js | 222 + .../semver/ranges/to-comparators.js | 8 + .../node_modules/semver/ranges/valid.js | 11 + .../node_modules/shellwords/LICENSE | 19 + .../node_modules/shellwords/README.md | 19 + .../node_modules/shellwords/lib/shellwords.js | 57 + .../node_modules/shellwords/package.json | 22 + .../node_modules/uuid/CHANGELOG.md | 229 + .../node_modules/uuid/CONTRIBUTING.md | 18 + .../node_modules/uuid/LICENSE.md | 9 + .../node-notifier/node_modules/uuid/README.md | 505 + .../node_modules/uuid/dist/bin/uuid | 2 + .../uuid/dist/esm-browser/index.js | 9 + .../node_modules/uuid/dist/esm-browser/md5.js | 215 + .../node_modules/uuid/dist/esm-browser/nil.js | 1 + .../uuid/dist/esm-browser/parse.js | 35 + .../uuid/dist/esm-browser/regex.js | 1 + .../node_modules/uuid/dist/esm-browser/rng.js | 19 + .../uuid/dist/esm-browser/sha1.js | 96 + .../uuid/dist/esm-browser/stringify.js | 30 + .../node_modules/uuid/dist/esm-browser/v1.js | 95 + .../node_modules/uuid/dist/esm-browser/v3.js | 4 + .../node_modules/uuid/dist/esm-browser/v35.js | 64 + .../node_modules/uuid/dist/esm-browser/v4.js | 24 + .../node_modules/uuid/dist/esm-browser/v5.js | 4 + .../uuid/dist/esm-browser/validate.js | 7 + .../uuid/dist/esm-browser/version.js | 11 + .../node_modules/uuid/dist/esm-node/index.js | 9 + .../node_modules/uuid/dist/esm-node/md5.js | 13 + .../node_modules/uuid/dist/esm-node/nil.js | 1 + .../node_modules/uuid/dist/esm-node/parse.js | 35 + .../node_modules/uuid/dist/esm-node/regex.js | 1 + .../node_modules/uuid/dist/esm-node/rng.js | 12 + .../node_modules/uuid/dist/esm-node/sha1.js | 13 + .../uuid/dist/esm-node/stringify.js | 29 + .../node_modules/uuid/dist/esm-node/v1.js | 95 + .../node_modules/uuid/dist/esm-node/v3.js | 4 + .../node_modules/uuid/dist/esm-node/v35.js | 64 + .../node_modules/uuid/dist/esm-node/v4.js | 24 + .../node_modules/uuid/dist/esm-node/v5.js | 4 + .../uuid/dist/esm-node/validate.js | 7 + .../uuid/dist/esm-node/version.js | 11 + .../node_modules/uuid/dist/index.js | 79 + .../node_modules/uuid/dist/md5-browser.js | 223 + .../node_modules/uuid/dist/md5.js | 23 + .../node_modules/uuid/dist/nil.js | 8 + .../node_modules/uuid/dist/parse.js | 45 + .../node_modules/uuid/dist/regex.js | 8 + .../node_modules/uuid/dist/rng-browser.js | 26 + .../node_modules/uuid/dist/rng.js | 24 + .../node_modules/uuid/dist/sha1-browser.js | 104 + .../node_modules/uuid/dist/sha1.js | 23 + .../node_modules/uuid/dist/stringify.js | 39 + .../node_modules/uuid/dist/umd/uuid.min.js | 1 + .../node_modules/uuid/dist/umd/uuidNIL.min.js | 1 + .../uuid/dist/umd/uuidParse.min.js | 1 + .../uuid/dist/umd/uuidStringify.min.js | 1 + .../uuid/dist/umd/uuidValidate.min.js | 1 + .../uuid/dist/umd/uuidVersion.min.js | 1 + .../node_modules/uuid/dist/umd/uuidv1.min.js | 1 + .../node_modules/uuid/dist/umd/uuidv3.min.js | 1 + .../node_modules/uuid/dist/umd/uuidv4.min.js | 1 + .../node_modules/uuid/dist/umd/uuidv5.min.js | 1 + .../node_modules/uuid/dist/uuid-bin.js | 85 + .../node_modules/uuid/dist/v1.js | 107 + .../node_modules/uuid/dist/v3.js | 16 + .../node_modules/uuid/dist/v35.js | 78 + .../node_modules/uuid/dist/v4.js | 37 + .../node_modules/uuid/dist/v5.js | 16 + .../node_modules/uuid/dist/validate.js | 17 + .../node_modules/uuid/dist/version.js | 21 + .../node_modules/uuid/package.json | 135 + .../node_modules/uuid/wrapper.mjs | 10 + .../node_modules/which/CHANGELOG.md | 166 + .../node-notifier/node_modules/which/LICENSE | 15 + .../node_modules/which/README.md | 54 + .../node_modules/which/bin/node-which | 52 + .../node_modules/which/package.json | 43 + .../node-notifier/node_modules/which/which.js | 125 + .../node_modules/yallist/LICENSE | 15 + .../node_modules/yallist/README.md | 204 + .../node_modules/yallist/iterator.js | 8 + .../node_modules/yallist/package.json | 29 + .../node_modules/yallist/yallist.js | 426 + .../lib/node-notifier/notifiers/balloon.js | 132 + .../lib/node-notifier/notifiers/growl.js | 77 + .../notifiers/notificationcenter.js | 88 + .../lib/node-notifier/notifiers/notifysend.js | 93 + .../lib/node-notifier/notifiers/toaster.js | 126 + .../lib/node-notifier/package-lock.json | 18540 +++++++++ .../notify/lib/node-notifier/package.json | 84 + .../notify/lib/node-notifier/pnpm-lock.yaml | 6058 +++ .../lib/node-notifier/test/_test-matchers.js | 16 + .../lib/node-notifier/test/_test-utils.js | 15 + .../notify/lib/node-notifier/test/balloon.js | 171 + .../node-notifier/test/fixture/coulson.jpg | Bin 0 -> 31737 bytes .../node-notifier/test/fixture/listAll.txt | 3 + .../node-notifier/test/fixture/removeAll.txt | 2 + .../notify/lib/node-notifier/test/growl.js | 42 + .../notify/lib/node-notifier/test/index.js | 42 + .../lib/node-notifier/test/notify-send.js | 109 + .../node-notifier/test/terminal-notifier.js | 279 + .../notify/lib/node-notifier/test/toaster.js | 371 + .../notify/lib/node-notifier/test/utils.js | 86 + .../terminal-notifier.app/Contents/Info.plist | 63 + .../Contents/MacOS/terminal-notifier | Bin 0 -> 68288 bytes .../terminal-notifier.app/Contents/PkgInfo | 1 + .../Contents/Resources/Terminal.icns | Bin 0 -> 369386 bytes .../Contents/Resources/en.lproj/Credits.rtf | 29 + .../Resources/en.lproj/InfoPlist.strings | Bin 0 -> 92 bytes .../Contents/Resources/en.lproj/MainMenu.nib | Bin 0 -> 25790 bytes .../lib/node-notifier/vendor/notifu/LICENSE | 25 + .../node-notifier/vendor/notifu/notifu.exe | Bin 0 -> 245760 bytes .../node-notifier/vendor/notifu/notifu64.exe | Bin 0 -> 296448 bytes .../vendor/terminal-notifier-LICENSE | 9 + core/node/notify/lib/pushover/index.js | 10 +- .../node/notify/lib/pushover/messageSender.js | 14 + core/node/notify/lib/pushover/notifier.js | 103 +- .../notify/lib/pushover/prepareMessage.js | 21 +- core/node/notify/lib/pushover/pushoverDef.js | 10 +- .../notify/lib/pushover/remainingLimits.js | 39 + core/node/notify/lib2/base/defaultNotifier.js | 20 +- core/node/notify/lib2/base/scopedNotifier.js | 51 +- core/node/notify/lib2/dailyNotifier.js | 159 +- core/node/notify/lib2/dateNotifier.js | 201 +- core/node/notify/lib2/lib/describeNearTime.js | 14 +- core/node/notify/lib2/lib/localize.js | 35 +- core/node/notify/lib2/notifier.js | 112 + core/node/notify/lib2/trashTakeoutNotifier.js | 54 +- core/node/notify/lib2/weeklyNotifier.js | 139 +- core/node/package-lock.json | 131 +- core/node/player/apiPlayer/methods.js | 1 + core/node/player/lib/engines/mpv/index.js | 18 + core/node/player/lib/localPlayer.js | 19 +- core/node/player/lib/playlist.js | 5 + core/node/player/lib/userActionHandlers.js | 3 + etc/.abc_version | 2 +- etc/.deployignore | 1 - etc/img/dmt.png | Bin 0 -> 34930 bytes etc/integrate/README.md | 19 +- etc/integrate/dmt-integrate | 12 +- etc/integrate/editBase.js | 37 - etc/integrate/resetBase.js | 23 - .../macos-launchagent-script/dmt-proc.plist | 4 +- .../macos-launchagent-script/instructions.txt | 12 +- .../dmt_apps/package.json | 9 +- .../dmt_user_engine/devDependencies.json | 3 + .../dmt_user_engine/exports.json | 5 +- .../dmt_user_engine/package.json | 1 + .../prepare_apps_and_user_engine/prepare_apps | 67 +- .../prepare_user_engine | 3 + help/DMT_NOTIFIER.md | 297 + ...T_NOTIFIERS.md => DMT_NOTIFIERS_LEGACY.md} | 0 help/DMT_USER_ENGINE_DEVICES.md | 106 + shell/.bash_dep | 21 +- shell/.bash_dmt | 6 +- shell/.bash_dmt_media | 1 + shell/.bash_push_notify | 6 +- shell/.bash_short_useful | 4 + shell/.bash_util | 7 + 449 files changed, 91749 insertions(+), 5180 deletions(-) create mode 100644 apps/dmt-mobile/appicon.png delete mode 100644 apps/dmt-mobile/assets/index-187c6aae.css delete mode 100644 apps/dmt-mobile/assets/index-3c0f37a7.js create mode 100644 apps/dmt-mobile/assets/index-9bad2e4d.js create mode 100644 apps/dmt-mobile/assets/index-b31784e1.css create mode 100644 apps/dmt-mobile/manifest.json create mode 100644 apps/dmt-search/dmt/connectome-next/index.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/checkPermission.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/contentServer--full--unused.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/contentServer.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/fileTransport/feedBytesIntoChannel/binaryReader.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/fileTransport/feedBytesIntoChannel/streamFile.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/fileTransport/fiberHandle/encodePath.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/fileTransport/fiberHandle/fiberHandle.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/utils/index.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/utils/mime/HISTORY.md create mode 100644 apps/dmt-search/dmt/connectome-next/lib/utils/mime/LICENSE create mode 100644 apps/dmt-search/dmt/connectome-next/lib/utils/mime/README.md create mode 100644 apps/dmt-search/dmt/connectome-next/lib/utils/mime/db.json create mode 100644 apps/dmt-search/dmt/connectome-next/lib/utils/mime/index.js create mode 100644 apps/dmt-search/dmt/connectome-next/lib/utils/mime/package.json create mode 100644 apps/gui/.gitignore create mode 100644 apps/node_modules/.package-lock.json create mode 120000 apps/node_modules/connectome create mode 120000 apps/node_modules/connectome-next create mode 100644 apps/package-lock.json rename core/lib/dmt-frontend-components/src/components/{Meetup.svelte => Meetup--brisi-after-kriptosola-rewrite.svelte} (99%) create mode 100644 core/lib/dmt-gui-kit/components/Noise.svelte create mode 100644 core/lib/dmt-gui-kit/components/Noise.svelte.d.ts create mode 100644 core/node/aspect-extend/user-engine-load/deviceLoader.js create mode 100644 core/node/common/lib/protocolHelpers/setupConnectionsCounter.js create mode 100644 core/node/connectome/node_modules/ws/lib/subprotocol.js create mode 100644 core/node/connectome/node_modules/ws/wrapper.mjs create mode 100644 core/node/controller/program/connectomeLogging.js create mode 120000 core/node/node_modules/.bin/node-gyp-build create mode 120000 core/node/node_modules/.bin/node-gyp-build-optional create mode 120000 core/node/node_modules/.bin/node-gyp-build-test create mode 100644 core/node/node_modules/bufferutil/LICENSE create mode 100644 core/node/node_modules/bufferutil/README.md create mode 100644 core/node/node_modules/bufferutil/binding.gyp create mode 100644 core/node/node_modules/bufferutil/fallback.js create mode 100644 core/node/node_modules/bufferutil/index.js create mode 100644 core/node/node_modules/bufferutil/package.json create mode 100644 core/node/node_modules/bufferutil/prebuilds/darwin-x64+arm64/node.napi.node create mode 100644 core/node/node_modules/bufferutil/prebuilds/linux-x64/node.napi.node create mode 100644 core/node/node_modules/bufferutil/prebuilds/win32-ia32/node.napi.node create mode 100644 core/node/node_modules/bufferutil/prebuilds/win32-x64/node.napi.node create mode 100644 core/node/node_modules/bufferutil/src/bufferutil.c delete mode 100644 core/node/node_modules/mqtt/node_modules/ws/lib/validation.js delete mode 100644 core/node/node_modules/mqtt/node_modules/ws/package.json create mode 100644 core/node/node_modules/node-gyp-build/LICENSE create mode 100644 core/node/node_modules/node-gyp-build/README.md create mode 100755 core/node/node_modules/node-gyp-build/bin.js create mode 100755 core/node/node_modules/node-gyp-build/build-test.js create mode 100644 core/node/node_modules/node-gyp-build/index.js create mode 100644 core/node/node_modules/node-gyp-build/node-gyp-build.js create mode 100755 core/node/node_modules/node-gyp-build/optional.js create mode 100644 core/node/node_modules/node-gyp-build/package.json create mode 100644 core/node/node_modules/utf-8-validate/LICENSE create mode 100644 core/node/node_modules/utf-8-validate/README.md create mode 100644 core/node/node_modules/utf-8-validate/binding.gyp create mode 100644 core/node/node_modules/utf-8-validate/fallback.js create mode 100644 core/node/node_modules/utf-8-validate/index.js create mode 100644 core/node/node_modules/utf-8-validate/package.json create mode 100644 core/node/node_modules/utf-8-validate/prebuilds/darwin-x64+arm64/node.napi.node create mode 100644 core/node/node_modules/utf-8-validate/prebuilds/linux-x64/node.napi.node create mode 100644 core/node/node_modules/utf-8-validate/prebuilds/win32-ia32/node.napi.node create mode 100644 core/node/node_modules/utf-8-validate/prebuilds/win32-x64/node.napi.node create mode 100644 core/node/node_modules/utf-8-validate/src/validation.c rename core/node/node_modules/{mqtt/node_modules => }/ws/LICENSE (100%) rename core/node/node_modules/{mqtt/node_modules => }/ws/README.md (95%) rename core/node/node_modules/{mqtt/node_modules => }/ws/browser.js (100%) rename core/node/node_modules/{mqtt/node_modules => }/ws/index.js (100%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/buffer-util.js (100%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/constants.js (100%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/event-target.js (100%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/extension.js (100%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/limiter.js (100%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/permessage-deflate.js (97%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/receiver.js (79%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/sender.js (98%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/stream.js (81%) create mode 100644 core/node/node_modules/ws/lib/validation.js rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/websocket-server.js (84%) rename core/node/node_modules/{mqtt/node_modules => }/ws/lib/websocket.js (74%) create mode 100644 core/node/node_modules/ws/package.json create mode 100644 core/node/notify/lib/node-notifier/.eslintrc create mode 100644 core/node/notify/lib/node-notifier/.gitignore create mode 100644 core/node/notify/lib/node-notifier/.npmignore create mode 100644 core/node/notify/lib/node-notifier/.prettierrc create mode 100644 core/node/notify/lib/node-notifier/CHANGELOG.md create mode 100644 core/node/notify/lib/node-notifier/CODE_OF_CONDUCT.md create mode 100644 core/node/notify/lib/node-notifier/CONTRIBUTING.md create mode 100644 core/node/notify/lib/node-notifier/DECISION_FLOW.md create mode 100644 core/node/notify/lib/node-notifier/LICENSE create mode 100644 core/node/notify/lib/node-notifier/README.md create mode 100644 core/node/notify/lib/node-notifier/dmt_readme.txt create mode 100644 core/node/notify/lib/node-notifier/index.js create mode 100644 core/node/notify/lib/node-notifier/lib/checkGrowl.js create mode 100644 core/node/notify/lib/node-notifier/lib/utils.js create mode 100644 core/node/notify/lib/node-notifier/node-notifier_flow.png create mode 120000 core/node/notify/lib/node-notifier/node_modules/.bin/is-docker create mode 120000 core/node/notify/lib/node-notifier/node_modules/.bin/node-which create mode 120000 core/node/notify/lib/node-notifier/node_modules/.bin/semver create mode 120000 core/node/notify/lib/node-notifier/node_modules/.bin/uuid create mode 100644 core/node/notify/lib/node-notifier/node_modules/.package-lock.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/HISTORY.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/README.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/example/bakery.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/example/cake.png create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/example/muffin.png create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/example/simple.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/lib/gntp.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/lib/growly.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/growly/package.json create mode 100755 core/node/notify/lib/node-notifier/node_modules/is-docker/cli.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-docker/index.d.ts create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-docker/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-docker/license create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-docker/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-docker/readme.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-wsl/index.d.ts create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-wsl/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-wsl/license create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-wsl/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/is-wsl/readme.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/isexe/.npmignore create mode 100644 core/node/notify/lib/node-notifier/node_modules/isexe/LICENSE create mode 100644 core/node/notify/lib/node-notifier/node_modules/isexe/README.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/isexe/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/isexe/mode.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/isexe/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/isexe/test/basic.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/isexe/windows.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/lru-cache/LICENSE create mode 100644 core/node/notify/lib/node-notifier/node_modules/lru-cache/README.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/lru-cache/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/lru-cache/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/CHANGELOG.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/LICENSE create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/README.md create mode 100755 core/node/notify/lib/node-notifier/node_modules/semver/bin/semver.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/classes/comparator.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/classes/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/classes/range.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/classes/semver.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/clean.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/cmp.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/coerce.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/compare-build.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/compare-loose.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/compare.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/diff.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/eq.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/gt.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/gte.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/inc.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/lt.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/lte.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/major.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/minor.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/neq.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/parse.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/patch.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/prerelease.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/rcompare.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/rsort.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/satisfies.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/sort.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/functions/valid.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/internal/constants.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/internal/debug.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/internal/identifiers.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/internal/parse-options.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/internal/re.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/preload.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/range.bnf create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/gtr.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/intersects.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/ltr.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/max-satisfying.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/min-satisfying.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/min-version.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/outside.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/simplify.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/subset.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/to-comparators.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/semver/ranges/valid.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/shellwords/LICENSE create mode 100644 core/node/notify/lib/node-notifier/node_modules/shellwords/README.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/shellwords/lib/shellwords.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/shellwords/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/CHANGELOG.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/CONTRIBUTING.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/LICENSE.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/README.md create mode 100755 core/node/notify/lib/node-notifier/node_modules/uuid/dist/bin/uuid create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/md5.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/nil.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/parse.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/regex.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/rng.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/sha1.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/stringify.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/v1.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/v3.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/v35.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/v4.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/v5.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/validate.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-browser/version.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/md5.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/nil.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/parse.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/regex.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/rng.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/sha1.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/stringify.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/v1.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/v3.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/v35.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/v4.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/v5.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/validate.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/esm-node/version.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/index.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/md5-browser.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/md5.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/nil.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/parse.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/regex.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/rng-browser.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/rng.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/sha1-browser.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/sha1.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/stringify.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuid.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidNIL.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidParse.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidStringify.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidValidate.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidVersion.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidv1.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidv3.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidv4.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/umd/uuidv5.min.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/uuid-bin.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/v1.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/v3.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/v35.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/v4.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/v5.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/validate.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/dist/version.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/uuid/wrapper.mjs create mode 100644 core/node/notify/lib/node-notifier/node_modules/which/CHANGELOG.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/which/LICENSE create mode 100644 core/node/notify/lib/node-notifier/node_modules/which/README.md create mode 100755 core/node/notify/lib/node-notifier/node_modules/which/bin/node-which create mode 100644 core/node/notify/lib/node-notifier/node_modules/which/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/which/which.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/yallist/LICENSE create mode 100644 core/node/notify/lib/node-notifier/node_modules/yallist/README.md create mode 100644 core/node/notify/lib/node-notifier/node_modules/yallist/iterator.js create mode 100644 core/node/notify/lib/node-notifier/node_modules/yallist/package.json create mode 100644 core/node/notify/lib/node-notifier/node_modules/yallist/yallist.js create mode 100644 core/node/notify/lib/node-notifier/notifiers/balloon.js create mode 100644 core/node/notify/lib/node-notifier/notifiers/growl.js create mode 100644 core/node/notify/lib/node-notifier/notifiers/notificationcenter.js create mode 100644 core/node/notify/lib/node-notifier/notifiers/notifysend.js create mode 100644 core/node/notify/lib/node-notifier/notifiers/toaster.js create mode 100644 core/node/notify/lib/node-notifier/package-lock.json create mode 100644 core/node/notify/lib/node-notifier/package.json create mode 100644 core/node/notify/lib/node-notifier/pnpm-lock.yaml create mode 100644 core/node/notify/lib/node-notifier/test/_test-matchers.js create mode 100644 core/node/notify/lib/node-notifier/test/_test-utils.js create mode 100644 core/node/notify/lib/node-notifier/test/balloon.js create mode 100644 core/node/notify/lib/node-notifier/test/fixture/coulson.jpg create mode 100644 core/node/notify/lib/node-notifier/test/fixture/listAll.txt create mode 100644 core/node/notify/lib/node-notifier/test/fixture/removeAll.txt create mode 100644 core/node/notify/lib/node-notifier/test/growl.js create mode 100644 core/node/notify/lib/node-notifier/test/index.js create mode 100644 core/node/notify/lib/node-notifier/test/notify-send.js create mode 100644 core/node/notify/lib/node-notifier/test/terminal-notifier.js create mode 100644 core/node/notify/lib/node-notifier/test/toaster.js create mode 100644 core/node/notify/lib/node-notifier/test/utils.js create mode 100644 core/node/notify/lib/node-notifier/vendor/mac.noindex/terminal-notifier.app/Contents/Info.plist create mode 100755 core/node/notify/lib/node-notifier/vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier create mode 100644 core/node/notify/lib/node-notifier/vendor/mac.noindex/terminal-notifier.app/Contents/PkgInfo create mode 100644 core/node/notify/lib/node-notifier/vendor/mac.noindex/terminal-notifier.app/Contents/Resources/Terminal.icns create mode 100644 core/node/notify/lib/node-notifier/vendor/mac.noindex/terminal-notifier.app/Contents/Resources/en.lproj/Credits.rtf create mode 100644 core/node/notify/lib/node-notifier/vendor/mac.noindex/terminal-notifier.app/Contents/Resources/en.lproj/InfoPlist.strings create mode 100644 core/node/notify/lib/node-notifier/vendor/mac.noindex/terminal-notifier.app/Contents/Resources/en.lproj/MainMenu.nib create mode 100644 core/node/notify/lib/node-notifier/vendor/notifu/LICENSE create mode 100755 core/node/notify/lib/node-notifier/vendor/notifu/notifu.exe create mode 100755 core/node/notify/lib/node-notifier/vendor/notifu/notifu64.exe create mode 100644 core/node/notify/lib/node-notifier/vendor/terminal-notifier-LICENSE create mode 100644 core/node/notify/lib/pushover/remainingLimits.js create mode 100644 core/node/notify/lib2/notifier.js create mode 100644 etc/img/dmt.png delete mode 100644 etc/integrate/editBase.js delete mode 100644 etc/integrate/resetBase.js create mode 100644 etc/scripts/prepare_apps_and_user_engine/dmt_user_engine/devDependencies.json create mode 100644 help/DMT_NOTIFIER.md rename help/{DMT_NOTIFIERS.md => DMT_NOTIFIERS_LEGACY.md} (100%) create mode 100644 help/DMT_USER_ENGINE_DEVICES.md diff --git a/.version b/.version index 09b082787..1c8b7256f 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -1.2.200 · 2023-03-29 +1.2.213 · 2024-04-27 diff --git a/README.md b/README.md index 557be2dc7..34f787e0d 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,6 @@ ## What -[[[ [DMT SYSTEM](https://dmt-system.com/) ]]] is best understood as a set of always-running processes, one per device. The user has total control but also full responsibility for correct setup and specification of his or her needs. - -**DMT ENGINE** is like a canvas to paint desirable software-enabled functionalities on top. The more a user invests into the exploration of DMT SYSTEM, the more they stand to gain. It's hard-ish at first but then smooth as butter. - - Let's try it in another way: DMT SYSTEM is a computing platform for individual power users. Gooosh! Why so mysterious? Can't you just tell me what this is? Well, we could but then you'd have to ... +[[[ [DMT SYSTEM](https://dmt-system.com/) ]]] is a framework for creating powerful decentralized realtime apps. ## Install DMT ENGINE @@ -18,4 +14,4 @@ _The desire for excellence is an essential feature for doing great work. Without such a goal you will tend to wander like a drunken sailor. The sailor takes one step in one direction and the next in some independent direction. As a result the steps tend to cancel each other out, and the expected distance from the starting point is proportional to the square root of the number of steps taken. With a vision of excellence, and with the goal of doing significant work, there is a tendency for the steps to go in the same direction and thus go a distance proportional to the number of steps taken, which in a lifetime is a large number indeed._ -— *dr. [Richard Hamming](https://zetaseek.com/?q=Richard%20Hamming), helped invent the modern software* +— *dr. Richard Hamming, helped invent the modern software* diff --git a/apps/dmt-mobile/appicon.png b/apps/dmt-mobile/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1d9494b7f4d3bed9c53febdce397b42dcf120a0f GIT binary patch literal 154248 zcmeFYWmH^Ew=PO>4es7RaCfJ1C%C&?<8Hy-oj{P_?k>Syf;$QB4uN2&dA}`Z-@VVh z|L-^hdW>Fcmdu*^RMqUr&x%qghy;ib5D+Lb(&8!*5Kv_AA9zUc8#RnXVF(E5AJ%GG zu38H6e5MZeOvYvoCgx0@_KsjW1cZRFr=zi{t+^|iiMgdUNDy$*(E}i}HWLJBaw@PW zIEtBDSxb96o2z;&s+oG*n(~?fgoO|VJo&%_*qgf=lX=?Pfn4}J1p)tz%Lo4c{+by; z_D>U6TS0)9!e=ru2WN9KP9{z!7Jv{UnSisI1)qwzb4}S~<8nxL7$j z{>K9T%M|}X{%;+@;`^Vwcp5wYPmL86{@`! z%qr$C4sOn-<`VAaAXkciB=Ig6zR%X4=5|`**7oKg7qD~%0X!@${|~D6|A{K*VCUeh z3N|ZqK>+JNo!(`~Cu47HX|8E)=4$nyqx~mA-W+84-ze|g*}1)|R~=*xUJu)Uj;8gW zG(iA63k%q?-nIVEfZG2v?LV}^_Ya2(4rX8m+5hSGpClPEvCqy97S?uPnv05*D4C3e z7#Axq7Z)QN)4vu2RvjO>ueF7jxUnm^6&nj13nL2$BO8YrD?1+>J0A-VJqsJ(zsc*L z)?kk?Gj=up|7!nk*JJ|V9tsM4($+4n4$fZxy!w~1tC~Cg>*-&QcGmw`IT_hMy5=)B zeHW7;z|q;k%+1u??4M-0xrSz@Y#f zQ<(oFsDK~-BP^MNz_G{~9CSP|TRI^iJ_K2V74+W}0|7yk=$6m9$H+`yo?6zK$+r+;?oJE!JxdOY6fmQRSU4@L_a&j@(=quoYS%8qO85T(h&&cd_ z9l5|xM%%&e2LR!<`ciERD%AE?-7}Q3hvm8q4NEsTeIPhWYr8-| zFj2gJK6n-hyF);bLCA;$)jYFLyIxw%hLsudl-(S*Kz>>n&535CTxqrDA$F!KBg;cv zkc3e2UKbAE4EL+FCv^HdwUNR?Gx0r*Jb%PYhG(++Rb0O$;3x6}ZnDck>K+?DJ{Lvm ze#hApBO?L_bRK6B6W>YwAM(+lf$#q%{rl@5|Mh*HGrsPp0Pgherxd~R}rbh*@UFH z+WqY7+5%KluxCBVh4`!f-T~mr#Uqm}!V>A-WwO!M#5-hC*(`B<0T? zBh%{sOxG>~&B0^+?n)c1L1gEjq-((wA+OV4`zGQ>2{2!aCLWvwa6bglrb{qMd}BsR zS63I8^=kbYkbGT3Cye>1nVMVnEWc+c@%m!@R~Bu6_($wZ4>=Hx`$M|qHv=?&n(Jp? z%2MiR6}r3j<@ETnZjQ^^aFti}Jwx??;yuf9VRnrB%Q7Eu&ohX3r;f8vOpoeR+1&#$ zpY53^R=9NB-sY7TVI|kk_7)w|KV8>HMJ>)Y&4O7kzgA@wR(~uT6OPo&t%8CEu2X_z zzyLcEBbfR0-#xg~XS2x?MW5%AQx(;JX$lCld#aCBNEmQ-QxU%4(h4tJV=e?FU1O%^ zMlys_Aq2IKll1~3EaB263|7YFrb@pxy+OsC%El-z$f@$}`Hq+29qOvo;6=~+c`5Ho z{8XxlDvi?9^po4A)&cW^DT$4+jo;gF*P|Kax%hea5s>Kw~FI7HAW@`awDPGW)OaZ3r| z3c4aaZgaU;;J7ebk~CTi@iQqaa9u_3bZ-GrbGC;Y-3iUk?Sz#SmujUkTbGuhv8OUs zI+L-5UP`z~x;>~OzAMUAb2e_9nri)6HnL^=sLS{kOOJ`L%@qV4O$Ne@>TFD3iuSc( z&fV=0Cnc2W);Un2=hHCJOxS1wq3uNWW)YVj(gSL+{G`lk_AZ*9wf2TpUXRfE!RE0d z0*>_Dr0G6hP1ogs>72F9wQy?_mm1OHtjQ zuDeI38=tktw`?ByhtLqV!-C%#p^5731T)g9Sa(celC{vSa!u9|rB0w!{$Z$n){&~5 zXYtOo(ZP_@qFdPT_C`XOxqj(7UguSEcUZ^YTYd@bA!F~VAq+h;FxVO|iFzN1_J`)j zF{j_6iIMKu*k#>c#RMC+H2I6zT4-0qiubTjQelQ$Bm(LVD*zYK&uhicT4P&QkGdAN z=mV1F_(m}M?NqvX$m16S`6uZ+_U5mp13A^cTX0S=^x74c zzED-Yb}Z(nRWY3kB3zhlDU%0LzSSdQ8*iy8J@eNdfTvV{bZ95%chgi2hOBA#09k&s zCd=Uyf-(4lkm)ir#B7Aq!opc0O@cOE$+14vg=}n*Q2?%fZ!lh%k zmjK4(#=TMf^yvLr1JW($sgumn&-EkI?-G1f84K{~JjaA~q6A05ZJGR$m#)sH^p>bj zPmm!zI+;2iiu|zDR}6M4W#eOs;5{SiIRAF5vAgQU4SCcH+AcQ-`1LHFb4%rE@>Rer+(Ng3q|Fj$472+qXU< z8F8^ay5nj4n>4>`_&s6|ThOW7iNUcI4uC2mAral#x>R$#U!n3U`$stGx&@gSW5D_y z08xu29>~{wzpi(qp{Tm2Vr-sV0d1NtHHZRferF}#avdH4fD2?{Kr)qV{jz5BVCkc{ z#LdQwQ-}ku+>H}UasTF(x6so7%4>&k6tHff-2?~)*XBr>|pi&^YAepz|ZQS!%59(of z>iKznQ2$1Vr~`e4{?2WDJb*dF?CuwsTR2B~4wfA4)rPUd=pNQ~xYN$lgf$^Uxz@h$ ziMZCQJ-<#436lOe)PhvWqF^C-i9!xPx!cJChq3*)ip8p__D`)w40nQqsCo{gWW9b@_s*FR&h$+XTtuL{~59 z&S<@Ng|w^#lr?L&KdEQzZqhHlU}bCami4iVnfNSc9;c@O2-Rbd?@iMy z?NYoOn1Um*{JQK6(sizPWGcwWH?ot`3|G0mFO+c%rgnL88tevM_F1D#&r2fE1ip@ySZgOB; z@f4qW<}h-<QAA^OK@_mr5HbLI_^Yr85*a;GlB8fp& z!S=_AM`t^|`d}I+EXB=2&`mO#xw?MUIn&R{@CvB#+uA*iTco{hr24m-_BTx00O1pU zAR1UctbylylR3|_iSfB>nA=y0jTI?t{>Uqkusg-8UM*_a#jR~L8pAmReN^}uoAjua zOM-Ane=JEovUA-5IYgT18aC<_!HhS=Ui$T!m0lQY`*Zb=jVS>sFS#SHH5o8UXb9j* z0+-Ks&$>EQcSBu#Lx#rqVrBAe9FgqV~Xshqr*91ed_m|PCXO^CjbdBk0LD?9b4boTp!2ozv{&m2)_ zivC{A7dUMJAf<@-5PW`Kt_vH)JRr#_lEMT=txjrYqI_gh)*i2cVp{=wX@3=!bEKRG zmG6Q!+bf6hgimO>&KfhehXOXbpK>$l$i7_t)0X+$fu5Z-nkd-A0AIm@EBQ~W_F>M4 z^G{idW1_xj-#tyeeFVh`Fbr!k4@dFPQjA}IO&n;0v^G2@a-dnviUN!$x#tdL&Dlbv%&*G5?4x2I2^?Fx4DUB;1D zkq(&Zdpa0Of8b`r@^HD-oNIJRT2bfMl4;2by=nYgkwwYu@H_9}yhfFV% z%!9>ERyFr*SHQFf>*vAlHg}B03ye!cge4B8)<6To#<-=&wLu~n$00a*Kcs2Csspz8 zU=<_DY|E3$nX&JP)q46qX{lsMtfFCOn(m);t3%Y-j}6599oPmnbW9gx)4rg$|JL8 zO#Cng*cF~%u4%$;{jsa@Z_)Bw|Ed?-?|keUk%NKD^`$kf3r&R4lx8|Vykl*9P@pwT z+8}i)BEPBx=ST|?i#m980Z`bF=w=!LkOVL2}OO%`RBT-h;awAt>` zoytC_sr;2k0`rKOl*lj%Q`Dud8;5pB*GVOU<-(~+L=dUcg25A3U`D&9*Z~p4PllDL>^V5;iII23GtiM${# z8ho(fZm4}3gyw;Oyhf^e3}~-6S#; zeHk2R%zG%d>n_!FNIelw+sI{o%W3riM}TvJ`|DN3%>zKMCG>YD&JFWM69Upk9c`NO z5?cKSz=XqMcjLPY+OfVB8 zSR5a8#%D}wI2GZNj@;)szeveX0M7Bis_F;^FrV*M_;~GrL$VSoMIu2u3JF#t_D~*Mjn;%UtPBJ(_lv ztjjI})!LM3^Cty);v80AjR#XZSEZ!40<@U}$ewzbmI5gEa^ve{z(5`B!5cria-NSB zyUFT#Tc`(C65MU1b=8R*(o+sZfxfkDgl76_h?{FDoi-LO%B|N`q_R#J4W&hcsqr{o z1Al%)tQ;o-)fpvO%>yksRWFYymH8yFePMo+zef1s*ALGV9$~rP6mLGIoW3^dz2PPX z7`Dj&YhHUWz&f*itRGnbXX~k$BBFb#4HH+{RGdTc*u%+Kh9$)AKs+_>Jf+{Q{@5t@ zatU8JA375@se-JvUYXCaS%1gxTvaa777-H=4j0-Rqb`r!>u+@GyT4VOzGg>i4^)AV zpPZtVcaxW{-9SXLMxSu1A8zENKpcoj2&~CngK*^g5ppM;ZM>{mP7DX^-*&5Kyjv3D zh6jTq^{I%*|Cr+?H=4{Y?b-)-5B%h>9ijTbI@d#`FTp6ky?oC?etXny;H%nvk#h2; zeIL-X3Es$Qv3wH+@52nnmq^F{j8?-(>axekoYNLruSj#juSiXPWMUtPqD2ckz;&%* z%SK1abPG;O9+wiEnJkqm3x8=WGB#fF{;E8na$^gV!J?g=T zDS_(+rt8_S>j5Qk-0MS7>q=gb#JbSwUTn^@cOu+@dq^v~beZPS^Oa<_#-nCp?Md>4 z_A2FqATfic(;oqcN_BA?XSFJb9;Y<$6srfqQJYK{(G0)r}Z{JvItY<-B-o#x@6`XDMoUr4VgsXhjS_? z?BA}69&Vq)4w5DtJ!=C{=$~*fYGbNntrd^yN%iT1=rC=0cX5?$Vy*wujf^G@e?~#| zE6d|!&vG*bS@WEI09IgmZjMwthh;_`7lF1g{ItimqVM6s(X9p2Zg*jA7+`GnL3#NeErx4x4j zk7TFb#bLXAY%0zm2r$BZT-pBeZA>GoHHE5Qp?BG8EJYK0<#~30vt;a!G<72$=Sc*O z8w@iB7{NHq{kqq{K(K{kAXX&mg}ejfYqRQub$JRyZD4m-ux0BsKs%Nu=21%q_A6^) z?GDuWPco=P9YVNhC_qi$tBtHZ>0VLB0@G#@Ij^u?fZI&nt0*yPkr(ok&eUYwt(v;{ z`O#jB`ICm%LvGRYIO{jG0sLMxa;N@${>Sa6XN!MjRk7cZXRRv>BXu9~kKnqqriDw& zG{4;lVrQmVr5VC`t15VT``;N)-Y7>BaNEK!EOf)#a5o_fJ^t-Ip7_!3yrJ#;S-jAG zf3j6oP;ef*c! z{YQCBf!3z-Rw6LWD2p8O(mjO%|we_h6$|JIK zStX;_Dn4bSc{isk3u8;;)xdri^T@XIp*zuN;D-I(_LAF8+e`nO%-GvkscS%RDh|^o>)huf#UAe*(;kvYRJ7jQR1cQBE!eKb_0Hj3WZ~b}t;vjcy zF2|Z)1?4;aDx2lHkg;V};U(2oa~h#2=Z4=33^T(lbSj8gs)2(rH?){YM;1sv-gImG zJ6|i_fXth?D~P~#0r2LQ`=f+`KaKGEXh*a$^7hJ5tLTi9qKlse&X9i1tZa+%5)JK9 z(g3`X>aSSFhuAY z;&Gb6rip5URfFvwB5i8ox7*`iD}>ej_9%E{(3GIT#uXcMzMB(%-49^S0R!cI6TjX( zh7k1cp&H1lzS+N#d1dY0!y%izr;MdUouL_z9Fh#AZ*=;_$7GY#H#TgzJ}Q>bRhfaCQi&;2NnFlm?U7?vETR;NM;+38--Wlor0#5diYS2qjyxl_5e+uXKE(*EUCREP~KQ9q76elC~#t}#{N*lQF( zALmiY>-vS!4W=S#zCFHA<(CUA1OL9<<6+=psdMREYY1ArYS|_NdSa}Bzp2XwT)}!k zMl053?Uu0;|r+6relNp_8Z0dm+S%lbo;{k*Do{V-)bcA=e4t!Gewj)3rLKIc>Tb z4Kt?h6C{jbNqY{0CgZaeGKSZ}c2%N$8wVF_-7nu-gkbNY^qz*cXO!wh>Zy-HK?A(X zyQ#L18j0~aV0^jwgI8RoTt#THJQQt}9mzZ}BXW4AvmLoo498Q~+9y5QoGg+x5YTRgCDk!Dqh zjFTtkCokS?xDGPd5`HEf|Mry!%@PWmVOtLjnXdAmnO3l`N;6K^T*Z&EA?NYa?euUn zbuN>WA@D88B%Y?ev4|{Ai#r@-8qhnm90jGB8#M)d6)tMYq~{u}Y@naZqMHN?I!^c# zq0f?7g&Y&O=vqxTKV^;=(R~%eoDG|TO%o+0=<8ZT%9F4gk zQX{hzY|%Gff*tu|2*}=?X8K@qM7~emfKC$o^>)FUK4AoJm9SwENYKc@l)jUYQ9xN- zyo&!KN~g>9b-c!*+F$dw?U4p;AQ`%Zd)wNS*+D2p_*XPc3Op>O}Eao0vnHUqo3SS7Ll!_I9Y--(gk%uk>X6)C|8rm z_cJpS;bW!8i^wKUjqa7jrp5#~Jed>fD)?+ANlH=>CY8KP2xIDTkdJW7$=W=bA{XW(aT1Vi9q9nmDRr^hns@R-RKY$(T zHznCNsM`Fwm2WB;bPSIX^jmIP34>ZUqn!g#g?7pc{IJR~x*o-<8r={Y;y7W-cHfR; zr;pT=)>s$%lj|ge$iV$qEb>=T%GB|@Rx%SRi^VV*d;9#QHctnaJE)&e!#rYWq{QH$ zHz$%9FPySvs+HiW#!!W#w^B@w)6eFaCjv?$+8(~4A&=sa8-RL9zR47Mno*Mt$Rczl z*?AJ;nZx7cX@aCNH!hr<{XURx=03ginRGje9e=usA~a6PG|o8x2N^V-3Jo42$BbgC zN!uBdVJxjSSPd`R$HK?^m~tEB5t#34*j^rAL*09l$gq?ZU~|NsERqXn*bV-RBJ>1o zEIYE{uLwkw4?JZ&FH}FamM1c-Q+1vjp<#Hki8O>PoAYdcfE2!g8r5(Uyfs_w74NU5 zkkt7g z`a>?q_IHS#FLDSM6$`;C+a*Qex$~=6+B*3ljOm~~7|8HF{)I0Y#Z4`j?LXFGB9Nz& zCdXA0TvFn_D;@Q4J|9i+9T9F9deR%QP**WHX{10+21y07IvK>sTG!8n!%@*=)3U9r zps(0n_<>D;G4V{68)2IwXpZEn@bhk4_%(QA=m$>oYl!k)-YGiCJMC&{qX{L>AE30N z5fH63k9J4sCSGKGXSk-3GtKCKO5Ris!x1W197)>f|Ij=a@pNfCX22N3ZScUd54Fb{ zNGC1zsV6uOIpwZ924cy_xb!W5u}pLAILl2^3}wS{?SAOnKmH?;E4*wNZ(>MI_#-xO>y~t&KLMUQ-HPX3V)pK8Sg74L4T+uD5vp4z; zyl9SC(cAd}GGA3p3rNtB^bg%~R`%{bg!cvg%v%=1oeZFqFvh|Gp;_pW_sC!4TSWo< zV)IgoP7ku{$bl%y%dR(((G_o{gx!#-o&fMBPcc5H(}%HV&;tpBl-NlouR1%XX%(2Y zZV&kL{0&4|j53Kb#h&wtpSSJulS$TG>u|`D;DqHDxu$uyr3w?1q+{QmKWN1R;`D11 zesw;o9+f=RM7PCchO**j4ViFSB`2sN_bx48d%M;BHrM3T3vq8dD$g1&h|-1%7rJ}8 z-ufr^(&J9~fkdd_1l`!$nYOh)s%e3a8RTh}=euwp(6?0cWdPguZU^7q>JGL@d{~E| z#e;w_%Kpwvc#w3MIR9hSG}8IvWOV|-w3hhaYXNB0HfN~lXDo_m@Q7|R$lyhXhm2Ln z)W+ONeGMWFjwAYfzNlr5yblQ?#|M6hlBy&yVby+ zyYXu8G&}l7S^$61n;Czl*}H%yN2iRmGDQ7tJwRIY!j{E!A)6w#z6OWjmS<-slaiwVt@LU+ zlDT&F@_G4FDdTIa*W>mpsdGBRw%WV(eCg_Z{On%>-y;1<2xGgi-Tzb*6JJNOHtbi9 z_g!gRig=hfB<3|c?Wmx+=I{_}FFn@fx})|l7R7QstE-#y08`j+z51&4pHC3{5Llbm z7gFaNLX$Jr3}gtjAdA_pd&2e7bzR`1Z%YpgU1gvek=N0-D60H;$*;BiYTN$$b+;z) zAb`~rAC=ST!npN2j%@$|9rsvCOOvj_MppbUzdOSpqJDP@>I_Qh{M-5gR2$$E!>qM7 zFBxv=-v+kWOHPA@0)0h^u*r54Ls_0EISB8~7nP51myGU)J4T9`pYgScSmwLsU}l;Y z>o$e0YPiA18xB*%s(OhUTFGS28Cx5QR~L`F<^#q(o*rxj&{s5Iu?Qi$QX8&~J{`CR zw^B%tLpe?AN5RI~;HaJEer{dSE2DuL)^dWq*Q(%g?K4!W2WwP9m+Iwh#2}CYAW3h zaFmt#Q?SykDpci9bfOLvcYnCDnVa<5+uN1@Iob zc7^UZ47q9;=scqzRZ094RMDrO&B&N66kP(`;EB_Wi+-Pe&GKFxKuC=mRFaZDdAu~wma`kKxhy!6-z5* zp)uxpMwT%XB-I6?l_3sss z@TjF0YyRHuB_R@risjiG%rGe|m(=(9tK%yXzq$<0(zt)#K65kIAY%dL-}MGQeLEI= z1STF#oxwX<=0lP8PD;!@Qc=7LWmq-q-zv$WCgs3g~TG`&?|~2)P991 zXNX0MvHy5Z-x-72G4H9a-e83Oi!W)F5@&C|TU~IIIaIC}KFm;cR=rdEQ03};hnK+~ za!(v4X7I_2)HuF9EkA#|QBnLh^lTwuhH)p{P}+&fjEe4wVZHq%G4UiwzD zOLax(ol$O@QawNFx2vA9)(ss{ILXs%n60%!lv3WI^Y~VmF<2mTqx{ z0jHQNiMAz=%CuZmDo67X}r zvtJ@=wm_Tl>}NdlGa?P{?$%)p#e)Gl)alj-@Qw zFf>@^RfM7@*R>vEZ1HAnie{vL{L+N+bkw!F{xp`RYlbcb)|gf}82YWBM)B~fv}4n0 zu@>MKv*zw|6V{MW0$NmQKbk!fp;?DH8cRF0Kvq%N3R=80ny#a6j|f~J#&AeR$edLh zdC8`&M#Jb2%%a5TZu87amN-{->o^l|p9Z6eR$#~^G5(l{(zkb(zslk)y;AMX^XMG@ zd#rU&T(wU12T?49%%q7tRQ|sC&Z;~}@xwD0?#Yk+Yt0tTtxv;%MX<|N8i8}j>bUNE z*bc_StfFgj2L0Bv0St-n!La$P7N?_4AST5xp=s|3(hBjwLYH`F+?m%a2sk&HejyjV zSvC#KF$Xl!pQk=zSphF=$4o)qPKG{2b%}!}VNVJDLYPe)q!}+vVd`<5(PxqKOZyK` zRe{ozdf}X3V(nW>#?^nMec^0iXR9_S7cvHC|L)qZza$5rO<;U^BB<oSFRE?f!TLc zZ5SHIe@0N04nxC|<&S24A}c{%_6ad=z(az}u0SaU)%`D$VKlu~wUTyg!%fjX&o%F^ z{kenzmGLce6@QS=TgxMXhRHh`!NOg-)(6ci3RqK4VJ$&ec-L`6 zL)p`)+eZGDVufY7X1A-(&1u@viC#M@(@*#{50wLQK~4+&8AMcpPB5;0A)`fRsE(@v z_%Dl;EY11W&fT2pO7Luw)O-XE=LW;<>oyi}F#nPg~A4*{-KfOkj zJn&KXempY5YsRo(FQqaJ`WGzA5G7=KmvDU^^_$NV-S=k>5nuW^U&O%v*`uY8QMZVd zm4}^Bl0&87A^gKnNB^gx!57k~O~T7A=%K`Fmyqital!sS1blGhe&QRC62F9+mZguwkK8^&c)e_ncR# zh!V~FqE{2#nw}G+0Kz$Cu_^0Es#lH5ZY$kMe=J6` zeIt6wk%ST~#}ij0n(#KciN^gCpmZw>4+*aNaGlrWxuFUkz#Qah;!h+{uc&jJ%Ko4d z_~|!`tk{k0s>hmugB! zN=Me0ukk)rw<(3=UzPOM-=Mm2vP8h43`OEwN7@Ch*Ae&x&4Xy9h|U{r7$!I)m8had z>kP=3;P5=5MUB_EY?2`p?%vU7@>4|3LjbN~c;CdorD>0Wao;F4gXNoRWo;ftXc{O# zRgR+%XNIv{<1@zTj~Vmr40<4s z+Ev@7(LFXx{wIQ78zGocaqt<##51T9@o}+Kcyj&oXOH%469z^Gbwbx<3=X=)*X`e% zlq^VR-_39!1>q-ol7E1R7!7;L9*n9N@c1+0SW#@tGPdmN6c0G6q<uefJ*p=%2-t zxCp{K?POf6v&!LCV43sV_km@Ss{oi={6}fFxvsOIG)DJ+SAZ^S%MX}N^^)?U`NGp$ z3&$~4If9n+B)64{Pm;I|-@Wm8(&k&sm-0u8A`6tyx$i?)&G2}s?x#Go-)1^DO zk|HV6;78qxt8)LC=44sxak1Zc>8ZOFZhz41pO03Jl40CvmLHgI7raCcf)+6aNA5)P zxX>0e-u6uhh6WLzsb$!pZgMJOCw=~O8nhV-CRRdO*fAE}o>GH)X*41daco3Hp_F5Tr#X~Z%=Ae>lR1PN=9 zIPZ=DfZ7Y?4DQ0S(V3A@SYSOYxnJ#_k@#iqCs-`!e)jQhT1EJ^(8Qya0_rM-b+V?9gF!fXL}SeJs&bF-%GA3f;wqIzYI$lLwG@EqoH*LG>y|s0P6wj<5g%?qc1&+%OG|JUR$XepwUk##VP>_GP z9JtJ;>VH$*^lGl^&QseD9ND@1UfWZOm7=S5Mm11nY>yI0qPB{*o5y8>m?OZ}1Fk0e zTa9UfoK8%1zMDabd)LE+nlGw(vam^)qGBj_7`oX1E!LhBy;9gsIv%^Ps}~M=OVoi> zj$rp8aK zdBxZ=Wf);f3r&tAW#z1O*=?ii$`MfLOn@UKhXj*t>5MIc1IuF+gD8m}L1vs_t2i;? zr|KjeZrF!0sVul$1x5qY+(|Sv$9Q6ph>zF8P;mc}S)GKqSEr6iM$Ufp6NyuX>uQ?3 zXJ4zhAnBKl?100lv_$h}B)w#u8kmElQxVd)4)|`k*ixw>JS0Fau%nuPPuy=RGV)PC zYO{i$T;{-*-(aIJak)Add%N}BNouz-U+)ll zo(QR`O{0W>FRmB3tLx8i@~T3*ZIU=3*{0H2j||6#|8csPu4wRWwYsW03;0EyLu(;( z)WkG8zBqSuvZVbo55%_k* z1RYpc)j8=amPg$wicMCbo#vw>?3lJz4E%PCB(~!Mp-)!+0pHB;;9EOnNRwwNIg*-p zOE&V%ADfw+o!!QXjLk{`dYs2?D9_k~tzC0__ayD6*A)#~TAh9SQM70`XI*(ND9jhH zgAX&bg5st+K}wc1TbXv2@>WDurR@`9paxkued5ulVsrUflc4W4)@UY`*isFdVxx2* zoz+D&WK;BZV)K@r{>onS2r3Zs*2d=3swo~hh#Bl2uav3W5suWHy%VJ(wAp?U?$Zr`yC zP7p+e5fNHrN3d}v7Vm9m#aLZ=W`=iDAw{H&s=YvygW5ijOG1U%)a@m&vAQ?aT08z_ zrA`eNhA@)qFV*UhuepeC)tA2sfAb!KJ;m=+CqRBx-Ccid*L)0lwQ^d)C12hewdpPH zeLeQu*%4Wou*PGaEX8K|eOOItY(wQ~zpxNtsB_U{@gJxZ?)`*Aq*0J8DB4zJPNs5y z$w$}#>$LCoQ^Tj6r?6&+)ah8pYY;7EjrfkuEX^}mQO3{Jjs`||0*zW$#LL~5J*dTK zxb}C-BgxC6%s-(^dMrJ5@fQYn@|vWuJfSoNpLNyPGYR!9a=#bYoV=F}b)}(BoxuR1 z4Yt8oK^mO(MRzm?7zXd=vk1LIEPvfOtz?^Y0hFpis!I2t3@GD z#yvFW=No3uXRi)pFtbx)=j|w<+=~|$I(Yq%W2wuOeq=4ulOQw9gk@k@{9T%VvMDvA z9sgdH2fAm4Q@N+@lKdyUn&V#vT&brSYn z*ERn=5e_QOM9S))pB~`qs_LlQ0BkW66*?z*be~pDb84?6$H65 z`worsn~uNS?ll-fO#@UeZL@N}S!`3(H(;OMCVx7VZ>nHZ;Oz?`Z{?drJFd?9q+9^y zLRN;TAt!vqyQEsp>#eG1>r^(`kh_?p4Ubf?y&W@G-zNDjrEd1Ll5~4#}>f1zjJ@mzVE59QEcov0G$~&kD`QH#$5o#TMY`7bEx~ zFe*D@qir7z-VZupuNWZj=#XKGcgwT=8_|ej;21xQON+qUEdZ<~N!wsPAp_^W>&(Ib z6yfnExCKsF<0R1OU2vrisPqdJM-gA{n3H^2+6V}Rt{=NH8M%x2=x&bAw@_hw;TV5- zheTB@iy)3x^?^Am2LVR@5z$yH0Fv_|yeX^ycel4fgyE7cy=nAVsbHEI`qPKJzkP$j zTYKY(7hGT!v)t-*590D-S_V#S&IDPe#eGloUWjh$%e%rt4@h^cwucGoO&KB?PY*@t z#4EzAL;KCwq%+o2O=9ie5-)!fGUGR2=UcCNp+YcWo|Ove<*y=^B-B0R0yrBt-uf4^`tWkP*%W6m?s1`#!~Gfir30XHb2Fo&jAqGE3+=oF+a zZ69OoC4!c@sC-p$TMo1)kWm^_?4K3Y;jPW2HjJ?}=4hOSr2To_H*!*IQy=AmHj7w~ z;<$&Fd6zhl>|Q)DqcswBVtvFJXGzEiKcdH`4#!#@h2_2;M2-*wzGb2w551_WfQwh% z$_wAIzLna()GX&3$TN4j!Uu_XhXaG$xa*QVTJvd~4CL9PK4b8Ng-|s^%qpYyGF(!| z?ggVK4z6Iv&|nQYk{7Sl;AN88?Zl1+}X2o1+&W-VuN$6;dEeP*_7604JKcqX1ss)*ZxsDX=G@jZg|&<9}; zvUNRM2iBd%FlnzEydK|QYoZcRgDAjCCcD4hSKJhC!5wJ$C~vLgrHMVqvTZ~;y@f+X z&lTDd^tpJPk$|gd4DQG_YBjS_b>dBrl{MAKC1Xa8_O-tASYNX_&eU>9bd_i`)8ZIH zM>nR+Jqc$8<~sP>%Kjbf5t2P(ZJmZP5Zn2wuFkzGtvXQ#6%e=i)LejJtx@uYwu^Y} zSh5qB%R~rJzWu260QIXbL~G>u>+_JKT}^jg+rz2pGBt(TMT122m5|Slq2{TJ|4Bdi0HdBk%=74WtVzgf9V2T^%A_@}=uRo}PfbBOj z(z;{H={C2es9gR+hNoIu`%y4&!Y?L;Z6sSP&ytV18*%J)EAVg#GeKXv)A44RE7|c_ zp)!WU{KrKy>(;*1r8G0P4g|o;j~0axmgD{ro}Z*XV8mzv7sYxYN*J`JT}0VUpTS>M zno?3($A`HwD3emcCB#$lSPx}iFqp*FRk4N>D#(n3=n}K5j_^(22&gY<^fqwvoq49O zM03Tq7U*E`3sHAUe^&8@5%;d&{N>$6P{1+zyOa^O-~bH`x4=0FIbR}PR2Q;p#Nd(V zpHfTSO>KeCOIW|&kV#o)tmt#0OUs6hdlMhhJKX%|R13#9t$;-YP*C6Hc?q@A$#TNw zqzg94bVo17Ek@_Jbr3i%&U#mHus<%;x9jt#;L>jiE8szpkH|6FD#N6q@YQ5B5pmS= z-RPt^CN*~kvFgDO6sW0$&X>;*G|G9puLBAkAi-rTlJAwkFjp}q`ssA{#g=d0rM?e3s;zo>m)V&`9A3yeyzE+t z$HsIG90W`0KYzn2OIg&nT&IO_facGu<}I8^KX?otrIFr#p>phI8f%K1)*raFk>i*R z6asL|nzAMD!M>n6x3f={e{CN2JM-C0p%WL*gw@7Yc`#^rrSrpW1tEGVUf63adTt5WEz~eon>5rcC@jA-c(^~t~2HW2kD;i2gf6fj%ahDg0nMoJxm(%# zyT{m&puynYQ$`b&Vr85MpJ6Yu>Jf9&#QGv3Y8qf)B+|{ps!wyHs~_knznyS{2xy4@ zE`q9bG&(+BoCqOm2UG}P1D5i8ccn>j-|!u;|!3n{4s_(ajG#~Wzl>Eg)d3ZeH%-WGc&C*+h>|BwmfM)DeV|IhGl$HJs9ny z#6WuMO-0)n3?nmGEsM#AjNcy(1=<*-b*r-Bc-A zSF@ybE!#r~48441bW%UWmu&_P*_x{SZHlg_xv`(|0RLF1h2;IX!-4dHTpmpcm&Zj3 zDu^EJ$lqbAf)7&L5Hnq3%v@l0Hn%gG78=TP_)tV>5v;U(gDG%P z9#Z0WjI5tt%k9)OWXt&%U^pGfm{|&sk;@xDC^vq`2-~7a#!>lt--n=O3Fvmsi`0UV zo%)7k$=)gi@nGchA(04RV=ezI4}`n6c(F~gml>8|Ch;8!`SYHz*W%9JYdMa=P7^W$ zX)k(Z5sESpxgM#QteyZTZonC7L*AhyO+v6ib6!a(e?84gWQ$dI{88($IQa{~6=K8l zp=v=?ks2LK6q72MpqNGqXsmWmomzL?OJ8hh=gxIeWlASHHE2b14rZJMI@!HRO0$aD zgra6-r#OaDG7mc=(FA9Kt~klEu(n&xqY<<_r zoG=qa6?y1~)vmr5YUIA`oSst_)l?26j0bzjH1V+&gf%eI2$msxLOFmkwFo7m0V-ce zGuE+p3=Q?JiT~>tf*`BWiBW`Qv9gV*n-#WxNfSPkVTi+&A zj|V2<5EdE#`2o|~!F>=JRJu)1y#Y2seKb(D4)#oko)3sEVlsfJ-gK;icPu78%b%LU%M;f8#bH8AZ;ww= zTHtlR%Vtod<=O@ZrE=jJ52gfdHMllUP|h#WLL=F^W*Dg4gDqX6QEKD=%?E2u3S;77 zI&xQ*+I=WK_^-}I%R|ZG{dM%$aSzx(k-Fe`v=#**?MbW21#b(jq*qhl07^H880`fx z*{6uJk*v033b6-?P>=ZVv5^aOJef7aOv!l7Q)cb%MO=`dG$v9z%Q)xKy#tb3gFu5( zb1nvJ8f(1Rm*?R|^v<%aNYy&n{6p7AFTs8yo!`ksWvMe2)(BM=Ymp|m03&{beKr2n zQjep8@j|yB^dbQ95$zU{!>=P1g7PxRw(_9ww)U^m@B;zJPduhxe=lQ-?xe@11)eE~7*%)9wbVYv zp)dnzgh#g4L)Nn>fL>q!PJyF`;FCV`XYI7 z%wDCEpZ33Kx(4pdx@H;Mwrx9^cw*ajGQktuwr$(CZQC{{nIt#wx7Pg$`}FSK-PKif zK4TP~*?8A=1YW&W?FhYT`?23Sgk2x1{}YqK2b=+^ExpZQ(N<|JL?{>u!S@Zi7#}Ha zG_9?}MW|XVR>%z3ji5vYNKi-0)fgnusMtihSk#?#d4?$v%N1=W)k_4^_ZEVwZ|kB+ z9w;2EW|i<6W=3*?kD@;J;tT>p;=t;PsDZ87$0s&!n^oM3u{ULRmwIg(SNbc_P_^&(ut;!W$}>!p@Nht~!&OxR zh5f5~^ObNA&gG0Xy3k0}lKFj#?Al!Z852P~%tG5dUsm1~nDe|7Mapi$Eu*s=Op z0OcCMr1bXrUCVgT9ePf!MFbjr~_B5ibf_=5!Z5dT=*M zJvo`df_^j`#CM1jRf|BIFp`>57pbZQlle^3Stzx(glC0rLnBIt2%T;u%_9OG<#!>M z?g6fLrl=$7vemx2ISJ0>6a-P5f4K8k5|1H1=oI(bw!m^~a73;{h!&X*1lFSP=&y~wPm0-*!FRWtq zxE2@|l2F3c5=eno_S-v@P_7iFkr&f_?$Td$7OeCYbd2!DW2mT9%@v?jTQ?xkC_W`lj@(HS9zr8Ej=K)&EaRx$ESLjkn3^$ z$vh)?$q6ZKRxa^+pr2*94Bc4Xz@8fRHJR+_IFiQM6p%K@a(^p2d-~8u6QJ16c1ep# zRbuEdpvs8Z>ev$|&xdt#T0PcNC~>Y&Q3iIf3TcKG<3w5qwYaHdr~N>cg1l2cSjt8GRq>8RdN@a;S4_Zf|5cDg z|Fix|si0Zyot%p%&*psiQ-5`Ol+v5R?q`o;2i~&!K)>_D)g~T#gfo=NG|aeRp^t>- z@Ij!Z;9*yyZ45L&u(6dfQvn=|Ybk%S0)%XwwJY%=-4Qqzus-n4l_*7rF;EzSp%&+! zNPYwWx8m@PD^tX0OKUy5i^dyCTsg^%s^3CnC{Vt{=6BktK}>Abs*MlRj2G)NTkPt; zXD~X*NLaa<$V;NLMN5|1+a$-Sx@XSxExMMxmE%3j_X@zKV~Ofu zcR_R})g!&Gw)BuhM_Jryu!6C%*VtBvQ3LrFG=9-iVkxzGIM$;={n9H2nZ~r(Nakp* zD^ZWeWe!UOx^`E0qn|Ga>mqQ2>2hn6*0gum9c95-J}-Q-t?VF-TX!*7B7z=APqo7a zE3D9V_9^#q+D__ITyWXTYit@3y28@j3=3WkYHl3nQwwJ^Z$KX-iTbRFzF6ZPZa5cs z#)aqX*@e94W34OC?+80PIgYGEi~*!^{mi>|JU{#!JptdJ%Ti!SJt+mRXI4e-peG%W zNN(`V&3rNoP%f5%nxi9Hn_VKY7y*rm`;68h_Ur`9ealo(_4B7!4ZS4KQN9wt(0KLk z>G#5$S|PRlh>CPp%R9W(bBRXM8jLtIqeJEborChUoGaswRyeYvF#7v2rGPn}P?=CD zl=pZZuLUqN8oGHUyUB86Ia5%ZIV>OE;nBbeY_l+6Ms z)8NDryK&NoI1uk=E&k_LzScpLSI0x6NW$7lmLMCWY+_%L=+fWA(>R+JV9OdTup8gqrjXC+#_$qd_sq|*aSWDJs6{Sabg0+ zE71WB&qgxe-Cs8xZGt*8Gy69WDX1*zo;n2bX!Xp=m4K8c8s0%Qxe`n^0OD%29}6`B zrxxZG6X!2g4i$;FNTp~cU*1|1bF60Rfc5^WCS#Y_=%Lm5~!s$evhR zqh7k$B~h&k!p0qHNR(I;=fhaw(KukdROQ8^$~09N4F+uTYkU~C7mr&GcLLMZq7z_~ zb2L|-y0duVE!RDVj->GEiIo4G<=X1+uckZb{%VZy)d1RNRVdYqi}yT!3!>8;IW~&iUD+ z*-^AHf;u=cPn!_BcH{I=kQyaOZgTY{#Oi|6uqv0&8!-6{CkTKWtre5$(rczEr_?a9 zl`MyWP|+@b67*%fB}T1a#h0@bgVmQp;$fPiq&q+$1{m7V(ntl2Y7mGEk}eL?TyyO2 z6>K#er2#%`319E)t3_?~|7r9-d8W~a%1+{Ft2*&3oc|WY#YX*JDiVs0Fjy7spHHVJ z9O>EU3jy)9WlN@!1QbJRU#CjMUw5AhpsfoS^@f!K%k6U_^SalLN&h#+h?-3SnO&*@ z4KhQ%_6tkzgpm(_G~xS<$}3w42jjz6H}7w!-_U%fhDn#su>Oz!<=2_Ndop6 zOwD6QE6J)cYg>(&S~Lg?Vbk@eQLY z`kWkD`MSz0_P=`aBZ68V|Bt&BV3Bq+#-t}(WerXpF41}CmkYwWLL_4~do<=~`7L`-Cq2mH_W7U(-hn-7gyn zDpkO@i-y7TpP{6f7W|kTyad&5?Y0ngIj0v{v7VAwQvb+8$={2J)W)=-&{UDh24~1Y z>Bu^FK47@ZIQ`PWVs^!zB7iG&0QsnSLAHIOhcb`@Qx!G!yq)YY&AS`<*^iV6)gA|) z#}Wp#jcZ8uNu4#q(zPvixeAsMFFdM}glZ%;7&%6c8cB7bO~k%9VW&|QJCR006i77A z1Z7FPZ&EAcSk7pz4x}rQAsEkCLC#7!8nOvQ*^*Rg63`fQ^Mk&887*@Wl}%tf0cj87 zW~XwBTJUSOY53XDR|Jy(LV@j9OS;!Fq_4x5jMH^^x}&hL7*O4Ou}O!k1Rbc^SRvC4 zwR*sJh9=_Fds2`Ep`r5LBpM+hl-C15#eK0a|0@mtN~Xp-*`|k(dPmgW>Utna zpmCRGV4MXH?jogLQ{B8_vL;=#uGzfNKOc!IYV03ET6b-~%6CHpZKhd4dXtO-=i*s$ zFl0OhMfrGc7=z+pR!#db7zN`ZrBBZQ{;|w!N`|(AyO5tR43R$u%lr4Cy_+bEz3)X4 z{@g9xCOTXo#~0t4-XXDO)BwmjJ)#ec0%c9m)lG3OgKc*qgs#E@85hx@-G()L@?IrX zM90YAdhp0A%TrDh$NV`Y?u%ienJtZ=zA3S6F|V8`Ud*9t8#vZSsA0*=x{knyet~su ziETiK%e8E;GF`L?d{2#aHD&*Zn#I%Pd-);b`2|XNsL8D~K<3mawffK8j^7%-1L^Y# z+d9(N_3&ry<;n2q8Qp!*PfZN0OGIqL3Thh{9JfkpScw+}QP#;aHcYB23g0qj!|KEF z%9Lhg8f+P-E%Czd8v}peQK#rIxgOdKb%Eiq0MRm|m2(nzzRAlqEMYLqdt-|(*lyx! zIUl$3*%km*Wcy-*BadU2<^JrBvKU;q#S2U@{tOq+^AvQL{1l^1oE%v{ZgSmms+?#S*yLwqE2-F;wbjc zOZi;`U)PPDdt|RF$I1FsM1O&fm;B-`ifIc#yrs7>4n$AnBUisJqa!a{4`i9K$4|NX>34f0jt{$La8)EWVw3!)E z&zUs!wRhYVZ3pRRY=gQwvL<=`Z|^Fzw`9ftVa5MEfe?`*YAR`@Es1+NK>)Q&$^aIb9iVF+XA-YgT%#!`XNC+v*SA#}CJyMsN6 z7ZO{$3Ix&7H+RbGqi0&KP?Oroqdp?Ud^^~<5E&0HlLZSO&NOFSQn{2u^SnXhiwV(8 zkCQHSFVsaYJi4eOT49nzjzZfgmakq;>ydeKW;Asn@hIHzGIWV-2^;vtRQn+9vDd0IHI zLXTcIx|QAq9@f6~oW0amjDqb4-${dBP;R4^{iiraD^$*>mf!u**cBLW>8?07zTQ}} zt)pOgH3)+yKXx%pRgR{9K0j;CF|8ODBc&aW*YsY89{Ums>?|?*88Kxhn->Kv+Zj;_ zO6oA4cg7_e*gyaQXV&Jq?3#9{cXM7kup#j^=^jrqAUxmGLiWWOv?brq)nGio*zlg% z`4h3HMsWp=ESjEDQ9MA7#8wSaD?`{wr^K?etp9}{bq zI^hbMMb8R2($A3Sr< zYhh>_?cacW$PD|7s;x3+KO#W1Bed6hddlJnnjsFJj0?)LeFBPxX2MKK!Q7Uc#HS?& znt%u zDOn#SiRs!wqtRkz#oC2$Fq`?%6+>p_jE}89(WepXnwafXK@npwJDr*I>Lt0TWE$o{ zKkf{(*PudE4x(jt4~-s7C==?o<0Ze2fCZde3BXG24thX$=7O$dE&KYgbrWI59aN$mQOroXDb}h zLRt?Sqq3pWT}hE^NY^wrjsyS5zX{wo{XAhDSI5`?xzxZ0aKV`aNmS@~YRLOTdYA~o zE7w)oWs)9{tu~iE4;2Mh+V&R~jv7n3n$g5gZ-T&RIH$HafHsI8k-1S_Z56ZXM_N#rbLVaD==Xi^-FNf`IjL=vMHXB&uo!xu`+C) zW$bWi!=3uRyu*7sQd+7%cN!eKN}>*YRx%43=xP|g5U_eMXlnHFFytL8nOc>R$}|k4 z9vMH)QjWG}hMj|ZAztqkG2Ybl@f*p1}auZAlN+MC3 z!Us(m8s9b?XD62I)HkFf#S~58E3|wkEV8sdli?Ss~9(gy=0t zM=gVtGSp%eKo{?<6xD1l+Cws9UyK^D>d5*?@ zv8URCZtt%KE!hq(pr$YnB^o_dW`7acQAvS)QV#f#u3$%-HNS(JFp>L3>m^+mTvB@$=+P}Icb3d*1?}=a zgMEm5GZF527NwZ0l-}w4SWlEN0SWtT31_4yk3jT->tojJu3hpT&YN08rLT(x2l^ zu;Z^-Zn7>H80gNpOuOS8H|zN%4eedu(VCcHl&~mOrP1A8EvcOUwHs6QWWS>ymM4}0 zj%Evh_yn_iG@pKqLbxofS? zfMehbXy1?16FXGYFaGY$$XPoEuG{}C7x+!j{^OA#g4IK)3zgt37uxuugMpd|JhOoX zmi&X0ZN|2usmV{-o3CHk<)%t0OKKad`1aOn9GCeJ(iP)!9=4j!TFhZG?ay1b730i) zmpH``8;JX%m3VMo8)j`7YjIAbO24*1x(_-6_d_hFcF7JGy2TFA2qT(7yRfR)M3L9$ zzXL)9cUa72Lr|Ar{0ts|V^|Z114-!1Rs);#DtFt2h67;blnjfE0`D22HU$4cZzVkU-oHPwi#5_U%Y^&aUU15h-E?m+UgJT_0E zoUWnyP40+XPgYkLMlu2;y~(`woKO@avxRb4-Ys2bQbcqH^vV>%E=vooLT{mHe*$Dw zw9M&YuRHQ#q)+_8D|6dT`{>m&queQ|yi{O;^D24EqxBv0z0z{fSs#0LD!hgi)IYNq z$xqMXE&2#rdhez%x6p$quGR=%JqU84S9g=Oi-*v&SLToS`ToPo_teMx5a#3l34*N7 z_0bO^;ZKB+2X|H2_XRS^JcQ&@uf;M{r{&Oyx8a~1?%X!vq|pCxv8)^mhvAkUwb7FS z>3_a<(prKdjaDx@OfIR(z59i<4I3{X2`1)1Za(n0Rn>z=5PW_bBvlJcYTGQ&G{60m zk6pgZ3vU77$`{EM zE2$T0koa&=TC(O$^b#MHs`z}2#HS}jp_e_!#!k14-&8gX`D__3F8BVC6_JOw%j*I$ z`v&+vw#4RnLVoJ24Jb9KP(;*gHuLs===3PGW<*iKYSD^qVx}bTR8gwpI@0AJLR>lj~ zhJ0Ad@Yz2}ssayZhv(*GViLLkk~-+ehV5-b=)lZ43W8*Pz^lqKi3vjVJsk~u2uE5< z=|FYCxqN7LixXIF@rZbn^f0b~NsKSe6xH$uW+4F$UTLw?Bke-sR{@Xlt1vOF z_JW_xCB&~sSUgn4myh|IRQTZ0TsBu>5ZpQi^}Gt(*h(o7oi?c(bSE=SWVmf6*HsTs zC~@!m@L_G87 zla;Q{j}!gz#Bw12og=%e_X{?KXa=NI7Noa#wQ<8a9OD_}bCDdF7h$n|^s9?xCA%CY zyEyF+4L@&ZS`9GGN`NQnyL5IY8HizyN^t}#aX;)@PPVXW^>BFCKn32a?u1O)xnv(Z zKMq(#Sd8-^Icc7RHt4Lqw8VkVA}a>@!6rMo1C-<1C)Qzgai?t$qG%B>@yI??2o*;Z z$%3nkhH*_{ixnMSddC22CXX6VY}0Ib&+4tsZYK%flY*{i^%r>@6=xQtxC0hgcwJ|J zOvm^5*>T`5(n0wTGHq$VSbKZi?BpqggnA@)QKA@rpY&`Gy(C7;ukS`=WnE=7Rp5_} zDjLs+-FYk^tCqw-3`U9Q3Mm|fl8g>#$=$3NuH0OoKLdHm$&IbNeu2-=xSyBZR_4?q1oB}^mRZ$aFAwkY>VO4U~tpI@))$ z@p3SIJ)F6CPyD}|=8vz>E3w5?)Tcj-uNhaRCL3IfWg=8A4UuZA^8Z`_?YV=pXHRCj zGvvM;2|&^`OE%1- znOe#YknFc~*$G?2%dxYg&W1sI-BAulQ=Uf|4u&|5gho}+*DSIAoZvE&zUqZBb&r0DzYHVEfnB!oqA-@h^-F{A+45cRrzMXu8qp z^>O&Vr0ph^14pT%jOp(BaSr|;^|?wE2%J46|KC*7>V>%x6C|adIpa%4A2-3J8=TiIU||LOsicLNWt%(oB7$)fkL63ll*5YMp;4H!e?Zyk6n zh-}z`&`@8Xw1^e*o|$@(TCs>Cy@k$-`2ykMx8Eqw72+ciYzJytDbRdO75V&4#UwvC zT5D>q<}JnjyimY%QGQZw*e1x-=m6_Ml@T`As6Tj823Sdi+W4dlsTpj3PJC0bUYHmM zqUE2!_!?c!R9%y&c z+xfn;e?hhLi6yyjMY9RrG@cy8%vy5ap`*j|b26`F){kqIJcg%x0kw}Nf$?tM%nm@ z6nbd_`Br!~f;##=p0CIx%YSeAp2bgIngO%)N-K*+UqI z7Fls_%V@sFwNI$xX5v?e==Fz@=mp;&CpQ*R6_d`-x0i=hHHgr+vmd^HL7tb`mIc{N zkmmKMiImV!*HHpf$n|XWQC`g@3p=ApZP8L8x^&JIror**B4_+$CvYlf5>+D6|HK%r z80--Cc^22(CTJ=5M3Nb9lr+uLyL|Vx}25zbKNg7uXTFas9k>V)2dwFtX2~*S6DOc zfwNYVkneTey}||MTo*Nn%WUnnQTw}c&*<#jUSYGd>zh47LmurXI7psntdU-I&S%|75*$?c!}YhgMU{0I#y#sTZY*Asv#y;1z=Om(Fh$e3%3^ z1eDJUqo#^eEHUtqP_c%?#pH2fxVtqpa%fyI;Q1(z*Zp=&0BK0^?0k-ZuK#X@#o$1l z(S}aeW+Ih?R)`7OH~9Ctb%J;Eg-GHi0l%Qhv%lFgHwtQ?aKs$bUn?HPk8#%e23&=BK1ZAdeZFI`87xLgR6&&iq#~zG`jrmlCHm`jZ{SZk;AJio zhu3Y2*zL2(_7g_G2;*9U>#IM@{0*a1mDT;_tdw7>(tBcxuq{DvzWbPlJLfYSgc!eE zRhpvfR2fTp54y9T`CN<8(A(QQa@qFA{YgKH>QZOX-S7Wf#?@mDS2$ad-~ViJ0n)33H;a@H1E`BJzt^!zes`wsvl2J^S8nRsS~`8} zeSdnwWGsEsCy8ri(SBj8Me^-{xII4(6LM4gnRS+m9^prFMtKblb2$G!M5C%S?8#rO z_M$CzWqCC-_+^`UJ&F11{Vl<=@jWMBIS zg4<}#T2ez?acq_aB5_%p0irzs$n;R9W1cd_gKfEjyb@D(Tf*6 zA%@m{u`brx`Nm1_Lj?(a4mV)@gYN$IA6db#v23U~&J7rIm}~*#LEo zHURIZbUeuglXMOW-^%}YODc_JH9h)%`>t&CH#o}Eq0ps;-Z|9TO<%B^qatO~Cv2nB;$QCplT2s!`>h69xC4)o}iVbc*42=DB#rr zK&+j}gkzd^w&_>kc6eXoQN6~0;ZV1vfM}NNGoiHo5l1pF0S7Tm);T&d((&Z@uOs9s z3Y+`}UyMiKQqiQ4-p!VDN4)592nYY=>)4N|ZbQqvOTDF7>{;oPn{lRxMCw8JQT56y z_RKn#~^gZsW zJJlS)BH{un;~#=#?1sZV*Z&u@FsP@~Om|*mIyCE50r_{K>|ZY9aV~fQ;Rsc3&7=#d zKkgIklK{8=_2jsWS_kWY`JG_9w1qGxrs?ekOXiV${?cHwlmK~|{s~wTBa6=G(=ZEi z0keg4eG8=Xx2oSK$;c%xo)mw-qs4_|1?eBfjd&YB4s4q^_txlb9#ly?Yp6SJ58VLA z)>KBmf1fvpmutiIWPba(+5AKai`Tt#?DN0&IW~kv#sEDoDLD9&9EsKDC0s^A4S;83 zrAs;}wO|hBtY*$K8-dJLD!?sV!c+!rm62kmcA#JIaCl!yMb4JfwAQK#HG5bcU9YLO zl?0p@W)cXJ+0qHoauX6{sa0&N4opYYy!*$a?2iu>!5apie>o$p_>PlGRE5i=Tr2!$f*BKLdXCECzYMNTUnc0kG1bVqH>r?gg@*WcOQoZt0ik~2e7 zJCjwNmG5Z+r+audGgAzqItf7K$2Bg)PTSzNO{A;C~8C@3m1Dc%ZuBK zzg3-eE#LdM1wN*>4o%gZWzDDgI05Fvk#~bzTclTyvwVE-k)fEvbBlk0{N?l}YfO$Z z%Ku@djP}3NAj2Ti<6(lInBlQc8H<|zK|}+?2Uy)Gmy}ZkpMofZ&}pckFE3W^^1^YZ z@>SFMJ@XyQ^cXo_HZ*HAm?)=Vr3F;n%Zl`b6*inf?nIWOIU6ppCdbRC$`VCk&JAGq>x#*=M#reOu)iWNp1hG@KLAIVlT4A!w)iY6uEro-C&KKguY+r~GqcIoJLb-1=oD ze1be9kH=c>aHRFd%>`B+(+JYWs?(gNwqwix5|BVZmpwe3z4>0efrSn~GjWQU}t(bzko!ozQLxH+N0GE^}0A#YaZTPSKDV7$dTEXfe13X%tM9 zbs$JG+_gemhP)ET*&Q@@VRU$<2&!CkY2hhOn8xTQkv0W;LZ!^w@0V%Jq?Bzldi5NKZ|tB67s6DlGU3DQX939x*X33hC^G7Orr`ql)y zplY9>9j8Bj!dAc&Np`I{%dX}Vo)9go1el5}v9Q&ep;g^o6@M?xAnbX3KXt%tU<(nt zI^!q;J{-bN&e#_|bB-ZM*U`VIfNVzY8SSG&_Eu?B}(%qpg#SfMzbRR(Dr)axd3aL&33|dj0 z+>AI+?CrOV%W5z{G|3UF$vSI-4A3g_Y(LxX%mV8t+(&f5z5RPwHu#-^fD;@3Mj5jw z5sH)UsptUKv|vN_W0ocL=KSe@VRRvO3|G7o1wG^mNjXntwDrMTG>6xH41BNrf;Wt+ z+`yKkP#Gs32rzz<6vUs-S$RVjzR)MA_iJh}~9O-|dD0(YcHS9>6%`@v1^kFilJC9C1 z@XIP4yLiY4!+**V2}7fl9gfQn1=;0}^|Q9N^Wc+F*ji;^t`rXW~~mN_W8 z#LIC^YOrF@veR60=ytjDSNzkGjN+EdTks6%Wa2^$#>UOL*`tmKw8>g3W#|cx^DwLn zENv-~iHRsYfhJib^Yjpr?S%Ws$H<$;cUVNy@%{eg+)WW4(F-tkm`*{gc?8&1~&KM#5Q4!=?m#9oC7S7{2k;vP_R13&-)r0MCOD-#9 zG=+5p225&57=ryh0y0ehT%)1U7-J%GrSp^5k*Qmj=WesO?0fT5Ds*e|uFxUcC>5!3 z10FD&>w4kJtyV$KxN2h?UIi(mC6|0L4+^qc&|*Umzcqy1w(yPuXK`X$k&zOq@>MX0 z<)WRdSfHrkqT;YQm9P1FfB*M*nhIVgP@6T*DO#iVUyYawUc*m}sw`Ox9`28W?^2|# zzzl@$$z^n-%{jWFl5WQJBRhlC%7^1Zf=x!)!=}ShdfzjktY1QfYctf!QAXajH^jD? zR*0Kvk^}}BU@_SbGMe*5;G`5AH{b^{aA|J3DF0rT2p4aM%{|lIpIx~GF@s^%N9Jb|((ts#8PGS3UM~cPvE71Dw#J~w5$j3R+2#verxwU5J=Mr?z zW{qk);To5lTakV9`t>E6Eo^_vwtn86xab=CkiwV!Q`fo0a;yFv(z*KwcTa{Dvp8ma z_76AMz zMq>2Q&8-I^fT5_&dHDD3!H>D+l*XelX_)n6QvA(gA}Kb;hCua!lZ|=ns%$j`M<>}| zE;fFv0)T`oB`!~hDq+Um39Of`UuFN{TWW$}9KeV+QsA@YSOND4Dn|1TpnRoCi)PI^ zzCdVyp3Iqj^~g;2dPvg4VaRB^j9UuciojwA2gF(4zCZp!Mr3(xp=x7PMbZw~ zQak7N(&m)@;{p6l!#Q6sbFsKJJ2f?`{exT?_4 z3ep??v9k(A*5zF(9%X&Vvm`YuH>zV=s-IxH<-;x`9H1W-E;-^xjV+72bBJAiYfZYB(Mo!k^STzDreh4%-%UfI<+dJ}_BsfP;DU|Djs1-9p@l1II2x6eq^M+M=L@)Dl&;_gslCve+0<6ra)r+Qe^k-6ODu6c7Mn(xEHYVIQ~nR zA++$2zv)Od?$-rRivlQ<>`Yi}_9_vox}KwZA}XP{Ji!%FEBT)?+Oaje~FX zIL5}u)d8TEmfL7dBWdQ|9P3zw2NH<7vXWublORG} z`;6_%6vIOAXh3tu*ir5iThN)DV1%UGXcBQ85@=TfbpAOpsCj*)XlXh@WTf=)K^@PI zT8-Rzq;y%tuT!9YuPJgyiNF{{YH69iIN~XrTUtTitA{;|1GU3dv`?L-xrDg>GZK(- z66O7}l+oLZf*Eu}F#_J;=e9C>PE?DoozUN>vr%8dupS3#q@K9foEVz&BCKFBpf4g~ zoJ}w!P-e*1)Ah9Y)%jB~rV3yU=-nMmF5(0=`;jleUCgQ0*O~KzP)2w(!p0zgS(#|h zO~4^xe3|ud%JAtB16o}KNVE9N*SXAgjm^lFbt%|QPaARufomy5R)N5LFFHz|Bm#G#^v_io zWFY8IsqP7DV`Cdsih41v^IK>!!Yn3?30Nj7u0ncQHL1lS+GQ5?Ro4|kl>qC8XK~Xb zVo4(@#($o-V#>LhX@+=;b0;!p>h%6s9nM*Fv7?LCk>tGU*i2$`$-}?1K{~ni;-;_(?t>>Mo;jk&nhIOp^utxQ4JA>x8sSliMw(zi|X{86Cs z|KesbURs4^^cN7?ydue(HubqMot2guVTuE5pTr`FV^7Or%%2Py7uTrjYOA~`Q zK-i?nRBdc(R+|e-2zJ@fR@xd*%wI1Kx^q_>wJsnmv7Mr}7P&#bZ4V!#0pzH#!cdsv zMj_>aChSd7^Jq+)sya5e*K&PiQ}_~pLKWpmvD;yTo1>mhLZ~rd_i_3zbWiJlPl(IA%CRpw}fAC$9@+ifC|>T zG#DwkOtQpf_9xVkoQlSYzgep2cLS4TH9Yk&Dk{@~d!B*VU0~G2Qdmx<9&S5FkGX4} zr-7+jv5}7XC2kpETZ}5@Z(}mhH}@qcekZ32DQ)g&8FC)_J8`-!Q{^E=U4_Y?5JbOh z`M{H_T1Q_;K0KKj1CvIj_uCX}xr)ZL5N3tBQ7vjWYE<@C0X2S+mR9O5>Zi|W3>%MT zb^rL^#N|b;abcOiEZ8yhanMEVWrsMbvIT-tMQ~Yr4xYa(twh{*} zA=|Dqi%PH+YODfORGOP}L0eACLP!j(+b_zRHBq|8M0CW8Th#|T?+9P|ktDPE>{m}k z!QCwUm^e7-kgvbeB0j2hV#n)Qp6eon@I0JihC?6f~!IJ}LcOt{W3z2&yH_swp4(>8OW;ga&0_Ls&x z%@{fqLE9)E5&6Xhl8Vk>m7r?TJ`>gb^oIT|;@<5(JK3s=;dwOgh!9w9m3ieB2t%MX zB9-^z8Su^fH&N;9=gGG=@=_@_Kl8slz4=4Rc=Y6o(RhML0tsUmPGHtTpWE`423FzI z^Va>iPR^(KYWU|inHHFhwK5rnE{se*z!O@6&ONb@uR~? z_M)3vw)C#?Z&dXC&Z|k|4ebtLXv^ExpXcf(~!9PF!syHJ|;?@L(X$m00yeg!T?y{yCnS2zL3=V?;n; zVB;igcvOZ?SU8oC6(P31sX&xq<}pYjh*V|OsmcmOZ1Re-C1t%J>PTOuyI2Tvp#oGK z>M1sd9dHlORz-LpDl#d6eNaT%p)u`G(TJ==Aa|h{hk8p+_?uM|4pWq&Im$B?gh$d$ zwc5q3CaV!NkwYcN4n3|bzKNWNp-Op9Rq>5H)y5J6J_>ehpff*! zY5-$!zY7M^hIHU@;3pJfR|WMt1l(>hz8ZvBd0ha6@nVHIQq1^@uUF9I!Q?su?kPO$ z^s_vvrjaG>UsxB7&5FdgpzdnTY1rfWHnJEt`~}Qrm=n4e+1G-D@uK38jLhN}Ac4cF zAa)OtE*bv+T!4&C09##PuI>>@ziYz9MK|Az+_0?y6Fv{HYlbmvj6p{>-G)tlvWOfS z`@4Cjw~R+$EG3HJbP@aOn4k7Cy}{cixZI;dGYO;~3R1Qn?y0T~}-Kg3?6r zx*WNchZl0jq$oaF%{9BLsTpc1w{z7mZMD`pIDM4TfOY`%5jv*_f{J6ReDX`n-Bg#{ zJU1X&J|fKHqX66>hHQ}^K$3=32;a#)rhYdQ<%-=^`=CEiTQyhYuY;pQ`CE}&^+Q{e z?uj}TR2hwwYXf7C84=t?8idTEsOnj9-J#}BA^V$iiY>^9q9%5b2BEVCMPkGpJrZPK z_7IV#zK3}AtFu2<#3|HuP{)1|wlZ&%lrmOfg+b~yMD(GQ!y#%@gW!roVM?!?3E0TV zZ^6`Ut&6XwpW?qbzR~SH4ojZGp_;3MBNDVJHjV)&Lf>e*%g5~EYXc3;hJ8VJdLE&* zWm(LJ2S)=QkZMW0&aUGwr83|^E}^x=;+p$;6lQ8Y1ARNdM!b&H?CLQHk86r(SSuS8 zK`>(y1VMdRrc@zhE|E%&DpFymS1*V)4^xPAghbm#M#i8C80wnQ20WEnUNGIvy)4c8yda?E}#sU9OsZVgB;^?b>trga){?5%IrA)#V}7bp=%KS3J|)mLV%aT#(Kqd|-hHDW2|BD3iCyi&B+2DJZb z)$egl%9OXmClfozWn&4(uuO4u33fQ*<>-E`1jA#dn^ne4W_D9MKmBiofniuMw{I)D zR0!MPbg425IF3m*C^ZbB7(%P)bH$jfwlC)x^|WF zm+t1-(UR_v&F5SPalWHr`O-5Znuu^=W~nX(WEIW7o9=rIj!bL`RI%&()` z7YE=pz%gqWqZz&C&0?IWjoN*sM^k$1z-{=v?-zNF`7Xj#R>*b91EWF`AvUR!Wfhrg zhT*k5Oe!yGNB68V1~FCeD|Xy)Ro|o^F;cUFoH{ELGlZaktEI=P7*SXx^Tm`C4;9f8 zY`s>w64q=2_?sl(c`9UhO`Lps;AXt5e{wy)>{?ZM^GHpv973bPEFYaJaPhNU$zY;i zH?;6aMRAClRW-f>HA)LD2QB_ZLs*p{@V2jDZhTZ^C_wN;q+5%5<#hhCTU--2iYOd zP4S(;j?3v!)rGRw=r_VUJEi z_w5o9p|V*5&5{S!X|^_lvE@8{Iv!A?^5k08`k9NGpV})>R_59dI5iiqvQo4gMsK@J zAVEMIl+^bz1Ju(i{bxuRbha3lNq4Dev|vN?=a?>*1)_@A&GpoElw*)x^!TAv`DF0q zx#wJo7!b~lmOD~vJe|f){niMyW5gDX@NOVH!gd=fv;$iO-zxVIAE5)4S@rxLI)qZg z+~l~#D!(=pziXjWHqRA7JH2euR1g|%R%&6!VD#KlX+IVj6_XjM0ih+#bObWJTWKL! z!!z$8g~;clq2Wl*jO~kYFe) zQ$Rv_p5)lP4Njo;gvPNV6+{KKWb@`Ee$V`aJ#?nhD2nB(s;5LS}m#$R44DtvFc@-qgZtX?`t|NgU2G1F1a5g(UW#92m4ZZ1R)BfGAnqQDDN zGNFutL12Q}Yq2_ANPW^=$p%c)!?}{!9=>sPQ3=+{wJ~4CphzGBZ(`UZgF--QSmHM0 zm)m&L@(kQvpbDAX47uC}hMlDKX!I7sOXq+>i)rsank>ekJ>Xv^%6=L#G+^#dp7y{k$v-- zmP%=QCgd&prR!^fwc3VHCF%p;_!+x-e zN?!hv42n|r0kjw~pRAly$29x}W#09T1uV&t;~4jv^^x|4dvSqR_f>CWMl&?#Nq@PE zmB_z9Ye53|#NVP?pca;Tt#68Ttz8(~gD#^e8*B;v&7gWNi&VeKe! zRWS6?iVbIq3qpX0U6L%VR_=pWYYP>X{1`Q+dxt~Tiz|R6+U3Obm)%=tqy{*f`LW;l z0ys+D_52C#xwa#5H1k?68BZ-35Aq>WG(K=M=0O-#zMyEql{zTSc4n}XF(YbwTt`*=nt6K=Q;ggZ$M%OL{VkSCqzY(|uu1B$ z)|U?+9Ho~zl_d)$@tZaiRmlptL6ZA|SI;`_gspeaDCZFa%ga`W$>zedsdA1$=u2LL zqfmYLM0cWZtaLSf_>R=S)OyrID(_-}Qk=P|x<+{cSyT#Wd0vyR(pAyt)ndQX-jIlY zF;vAqeVucPy)+&b&;`21*Szi}VamT6P3{kZM3s$+BshCF$18fw2B+$Ol|M4O(77>; ziq?xz!mKk`IBQ8^<*NmO-R`P zMh4E*eJp8CT$$I}vIAwIJLnmbGTQ>K#+)MHTVy#99@3I&DRr*%v`jc|;L`BZYE0)m z_`HLc%+pjWQH@qHqyRS`fG8d|ifeW!!clR*t`3-eoEOio58=aa{m$Tc(xm5M`p!!m7S|xZZ`X4{A`~&;W=WX1q9mgY#tx|5V~75f!6&ffY-Qm49Wgxfm)^YCRYS_p?Df_y5St!q$TZhB(RR;CaME2aI&QL}cUIX3mT7m}OVN zNXX>jF4>=W5P9}zzkm-MESOD{frY!`v3Z?k{FJ*wfOCM}v4!A>Z?etR$FyEfOn9f? z{pV>?vq!m88b%W+$S*L9{ks@V>R`#Y-8>w=SgYZ3Cd7F*b*C#L@xn0nu!b(e=Tp&< zoOf99&-tYS@6(aeJm%#|2Nalw^)+?rEW{&JN#rBq3V#s`37$(L7n;ADh;;F=*(`w` zW-G4F8sS%D@R|;^Hg@0x*};?T2ORy^gCow+g!3uE%3*498aV1wfTP`glySf_%tu<% zijC||m-_XQcI#XNHNrqbv*Qfg=jAhY(EEi6+$Zu#{4nZw25V6O=OcYkXjTC)0Z%<0dnj|}p3eDnDe?eLZG;Ej~DVVq{s z_Uyo?8G|hkb9oq+uM{^Lvf4Ua-r#K!ePC&(uM|p)gF9Rys_|_lzEnC%hTTpFlj&4a3u+_>4DOlu#E-fZ&A(EwUtm##@=n3~;Vl z_|wdd_!!!4K56nmWez=6V(wcj*of4okB(exl?4FqW*0qypM05KJCanKR%@C5#vo7r z?3x%$a`g(X=uOhb!3<9@2q~;SDLjk$6Sf&APA?kd<}BFE(Aq2Z4+g#S5^me`g&a~v zN=I0|&bB%+Qr|0*^^@oc7J-8poYgFZed$m5Q#Z12N(NVhsmFkGVn711{i zH_w0M9vF}l!RrymqY)W8T-UWd$Zx>$nR5R^GAU$)f&Wzo^Mb|s?TN4o6M+)U1f)1* zrY}a0*n-r3rs@U>7AxwU8N_|&GCO%TsVa!xXUwfhVbkt`u&*QyVH)Qty?(a#A-!W7 zRG?fkH)t5!V&NUk>L9KMAH+nlRnkNPai#lEZ=h&*V$6+D>KdM%ScO4cAvzhjC1(Cj z3N-?bcfOcr*|dsL><6~LKsqPmw?DM~`Wfjwpb4!pl{)f@^M!&+)cL|3zH9;exSvhB zXpf&agH%UoYvX#gE-v>RGrR#nL>wbW*Z;X;lIL{l+Act+egRG+v>z$2A`j>aR(@1g zE6kEoV2#3KnD7ZkzS8#*Dl6{T)(E$zZ`5f{Q?DA2^{Mh*jCVt(nKNxZFaXP`Zma@} zD&Ah*Ex2B1!Dp;O0iZ>^2cJU;W~^rT&>h5)72v@)XLs~`QlarLR}^Y4C`i?-OU)jO`j4~q$v9Br=p>UROqjH3s*#3Jt-?jW&>$TA1@RsT-?3$c?ON*DkI5B~ zGCN6?=rWi%h$!%Y;(+ZWraUwp){9)Heb6tXN(4~#(ydy2=ZOknmIuXv9?{8(8tbZl zpYlxCS{FegfCW#SXLkFq^U!gt80CXuj`T)*)zpf-HvEc)TunLz9T+wpUMU3qF7lo1 zDhy`j!j^q&M0{}+11Y7!!vEDDz7`K`X4%iRpzXr}Nv~|CQUq2yOS;HKJfd|+Vj2ny z$@(z+0kSrkHr-QZkIE3i$m_5V6mm{$GR#bcIQs{#(0*rnak#1s?k-w;NSoxMtem+r zaxO#pUuvd!pM)uE0TwMPJyAB7Kvs!$y9$(-*LFyrkdRSg#rlF%z*H)+14uNDw)ZMU zSlM3AD-ynz(3S~!xJ%4vJk*q-ki+79IPpebHR;DhWF+7DR+~x zjC;CbD*fC|zaZHw zg?*J8(zT+CrG4TG&}V_jkbcwJ_JaB;(WOEZ zh-K1!8*O7%;l!0I5u1<+k5S_+Pi7Xq%#$F)lOyIwxb*LPeNlIrf&Q!YHi3c_}Ps)gfex2+_7w3C2}2DLomB ztATVXY-Sr~PW}?x4epY#G}KZVv$8wARt!tKk||?jYVPH1V?)@8NeoIuLl-(NirDs+ zQwLCahi8@@MV54UFP)YcfYMrZ)K3$>u2QFFD&72vsfk=wdx z5}tCO+b6QoVmaF6`kRcUQ>BUJcWJl%hiX5ZE|5LFMR+I)Q?d*RCaAlS1J*)<*uCU~ zX$%ZiCa`SMO8k?{E)N7H;Y11)W+go_)Egcz@6v9O0;IdmlS4Y^R5c~Jr$*`(-DQh% zzmFvl2W-ZIm-R6v?zax>V*)El7AmD;f-XSM(X-L+$Vua#%z8;iLHf zD;lBrlU#Z_XF0o95;_uvuZ-K*O%@C*BaFeYDl%7rLeN&wtymWmpHnjSh;+bP0b@(O z7-sp(KI>d4(0ch_-Lu9h$8|bA;)sxo)ajt`t)$fhvlfnff{0_a0R4zP_NP=XGCDRX z!qM?>*lSsFbO{=O z+sA6u92{j7zZfrETBSA^B$ipG)KYzhdZLi<9O~+WnB*Sl)xm2KL5|pXeW#g<$1{m# zWFt(H9vEgg53b}9w6p7;(g+-b0jxMwrFJzkB!38^Sq+S5roym4Z3e;=67%|No+}5c zW&@_LI^tB{`YXbqOZ4F&+mTahh5uD~!2=6YM8?CSF-Fv%Opl*nL$_K7mT<6CT`!Hf z=zOmB>fW5eihJc_Z?i`iPOWulg9ZRMGk3SvBky}l6f+svXfdL;_Q&xr>Ce`KcTOy= z+IPm=$i7qp{Bm+)qrhn57{)U!SR7%9&Rq($VevC(X}Cp~ma8P}V~;AoJQs}Q?_;+OK?Cq<&|DpMMIpa*hq;Y7u-vmHWtmUf+1G+Rvy`{gM;rJrQHD7reIfA8 zB1x;c1}c*yQ*4P;9a3a#MgL!}Gm8u_;URUG1bpCw3u9*8#~;h?>QVoDJGomxRi-JN z23A^)+3OO};_bWy0>uK7IN_Wr{X8K(2YU0V690=iP%_&LVVQXzg$&Gu&N-)M(|kW| z@nswP{i2!?7+_x%L@C*ZUcB*<~{r5vY?nS^DPDY!o55iF&lA75|_U z+I(I(Q0Qd`PJe)-umpk2W=&cJmbMukR>Y}aT^Qb4H^_VN z7wBHbCw!ORJIsT7pi^sk*m;E+46~!QOc?lr5WS$Hz><1!v|IfHs74&okXoMjY9d(n zC%c|;yZY;S>R6Xg#?t@sxg1jM7D{8rHlVRRiU!sYotwSG1(4YNB4N1$hC(qS56ga<-*EO@!$$GVQw&tZG0SocE=MNbNd4d>E8e# zkQ??*sTEoCF$454iF-&~Wq%i)g@b%tLXB2h9se#jM~xY)Y1Y5aHb`Vw3bs}cVpDxs z0V6|js#XsE@H>GCssn;3LA6z7h^kNg(b(CGIYk_W2H!IS5e6=gwLPLVvYths>Xr)EK*7Hc&JE7Fjv-_(bo)C#ALzn#37S7mU2vDqg zT9mp8%Z|EI*dfwi#QOhU0KPvRW8^mL0Vq1RhzxJO&hAz2oxHs2yvt3r{*F}^<-A=* z?Kl&4XX{ZHChPn>oBS+(rcQTva)j$Q4d+8mU!?Pr7G099KBn(?wl8b$36qzHBwkrG z@LE`TZ5(noW2`+$#OC590y_YqfhOT$dTtvI`X7>Dc=6n>`=+FHW!6m6^PIb8oup*0 z<^sF2gXuB1G=w~-CSq2lk$p{Q%qf3^%5_k~7JH&9^XhL1W_V(H#X7CuGk+`|`bZhg zb{>M^>RWpl98Omd26OV~djSChq^nCnCvGL)lB&0YOE89B8;%YRVz3$8E3+j2c@iYt z3v8?9A-MQlrt~CJUJqfMkCu})TY2JJ*F5%Z&jgqa(Us(Nx(t+RW zUqa(BAS?r5IekYvUq`Qx>*>+_6lH>ez&Rvi?pjmw;79q4NjEIQC+2Q~2g`J6q>9iKe#4A9*H+^Sb3cg5vIv@9uy!J3ESA69!>u2 z2zz>?EStp!q;W}$=!r*c95@;%GS9)iNqQv({A!BpupaEAz8q?X23Nh^-Y4+8TGvKj z;Bp}k_C4GKXv+!e!XIZF8dQe!?MOa2%Q90Ra*LM{_(b=-*o*FvV$SBu$Zf2!u|y<( zy5d&ftbe4y$QspZt3(%w%H?WO=OC>+>5p<0_7~s-mp73ZQ6A*Evf&(mny$0t5A26` z;p=rC-=%SSzBtBGRqnOJ)lGrvF!+;K{~MEFELzhi+}#m$CR+aH?Q)(#ejaOkPH?!s z4LGKmJu?B_v4$)s6a-k%5Dxxn16iM}mY(acT3`a3jF&Q$Ey*%AF*N0i%5q1guvqgG zG_d_ZM=||ZDMhX>lDA3j?;E~<>1DS)e98ZMb@HcG<2%&HHu^!8eUh3~ov-wfINh7V zjMhLHP{_-CsVx-2jM=8|Pa=W-6_849TIsSglrd?^8IYTic?b~~3+ZRR#piz|9UiJs zw9JU1p~AI_39=3%-a1`7)@e=J3S8vi$NZr#0VUw1vaBCUfkUMl3rvNsjZ?@Zv6EeK z9$%;Ah;3e)cBiyUE^e}Vlca(*49fs0Og4&%*-|3*xgPJQEAZxYx;(s=eu+~Qr!%-0 zAsX=dy>6WA@pw761=UiP6Y}@I4;)qtdQ~XG3;+oVmvbD1nB-Ck8>b=)p)-@~?$$JG zP1G5iZwPQ$0yqXHb+&K$e#(%LP**kw@qhv^m*9x>JIHpt15k zux$>sU4ncjTVKj@W(hEUush`o3~!8Oqmw1iJ61lI?CF}~DNz(N z5P&cR>6iiy;<0g+ffev>x z#^nwD+dh}$oz3zG-o^kr&47P*-k>_Sf;6lu!;pvq$-;brxR$*IL-8u(K_HhlA)mq7 zLp24B!T6IYK$mDWa)y;KQwZS=(GNFZn}hD{=NBfXYiHF$(UEnbld*&>uv&L9dCUzfK+~z*;fT3m02{CdT3FPg>CXKWNw9#_|SLQ}> zhi2=V0T41(Dkji-Dc*SG_^)F_JoF5g)aQRHSS6ixZU)J8+CFr-r;)WGg$kC+3rh!7 z$&jh}afQ;GF~ie?0i2t8IlW(JO+R0O50U_s83v%B$sS%;zMB{gzOHhsU;2EHC*sQW zwZCC$@M=R?xp-4Q40^nOsx`$;f9C4G_XeH_`MU3iASns?!ZGQVrif2jFJ+Xn-isPiG$th~oZBF3OfyG&D;bBixvOCTk zz*RO4Ih|V=?lhLq=t((*%ZuLvO>>QPFSmYS^j{b|FCM*{*)$xTk}KL@3HY2|0Gy%c zXLfn4EdgAufr+Zp!8592Jek(}_Hy;c?`z|O+Q=Z?(p0qdtc(hCxo=CpAC!+3u)0P$V7ze@2W9m-S~2X(&^{MXdTf_f%kAj z{CJ*+Z(!=HkJoouHbvVsy6UqKH# zt2)XA41O|5zQk zgj=f8>dy>!_j0fHCfpCex5Jx1J4%Vk2?V?E5g%>60k=oVlt~rf#okE%#wSHnVZ`ue z1CZMiNJ@BXbEed^*Yo{#)2cP>F1t&6nNf@(6SP|)yjYJ4m)M8qa8NcgC*8nOA@E|F zKp>*DiZ}6&Y;>ujP!45gUXS^u1(f*o_=mrxC89DKm8%1digQW1rW}jbsr)GZ;-XBh zm4HPgL$5l8ePwwBv$kN=AnG0HXRa~Tv+Q~pVbh-A7p?(bhQhsnTpOJ6Z+|f_CE@q1tl&p(dfnIE{><%e*BhZ=GNeV;ijd~+xmj7|E4Yz{_Hy3IN#QP@ zjxf5l9=#!11H#4d5lq+!RJBoWJ~al{cgT|^18{V;cYhe@pDWPyK6`BU=&C~Mgt&=T zb@Z@d2uS6V$kN$MlN!^pz=0KlOdaf{TKSmwdw&B1Z*t(#PH4Mke*-2o083gHJONyc zsy)KvA*v`!ABDxzM$uQUd`FwC2v*6$;r1A{l8(qyL10RT2pa{+ml9Cif7_IezWIfj zZIn)Lz^D;D@Llh;T5H z1>+jR&zL6MpT8kGyL}$lgo2Ar%r~g)dk#T3kYGMBK0P51*?Tf2hIjz3HReSG8!QJA zs#7wA(L+uN6Z)8L*auFSxvaMvkM?Ha;7@+D5a^B^gJZBL6dSFJzt(!V18*MgkeL#? zKn7wGje0aV-Z2Y4*8@w`SduSs=W42K8ucRB@xsP>y(c2$15(RCYaJJjGLWB|h>3p= zN-P)Wwv!jG;`d_1rv;Hu7VFKk2O@@*r||kE%O0j z`szoN8AWikyC*F(lgpF)YVgrPRVc^7rKo>E`4FcZFYl(oZ&raEW9rT9{b2Rx;>NrX z5CTox*%B>tM~&9eaRo4b65E+u=U>?cBE}D{1qoznquIc)L6t@nR`x2zS;oUOK|_)0 zBvTqzVQp6TJq@eM|+x*=XU)5Eb(*z1N zj;4*>iII^LwCS~jNfwDsv|U}ho$fE&xcNP9$Bk}Y`=MxIv?ynf z0jc%Jt52K2_fG91A|MQWZ)g8F1_Zpsp1wpxRX5{{`p$6{R;(!*7GQ)gc-K&<-$Itk z;TNPDT)?1?peT2He%0Yh;01-XWIzBt|4s=;T>2HYz(iBz^OQ%!Gyr~3yVkhO4!a%2 zSeV630a47fQd_&RVuF*OV%b&BQf4morJIrlLQ8D|Wl%-QzPB3M9gcyNiF!u`P$ixW zk~dUAZ+XWao4~---`P?zkAlj9p9P76*|`qegTrJW9Y)o?5R_K|Z|D#m^b%Dz?|j4- z-)T1Xc-Tmm6wJXr$N&TbT~}B#D%6WFaHy*Fl@S=tRU4A z3#SQ%GL?}sDadfcKCQTTDUtP`68Bc`f*OMT+;`IGseDb!=h7k567T!`T)w6sP>m ztLHxqfq;~N{n!0~0a^p<*HIUz;QLJWSX03AV^VO#l11l8>fPe5Ub2hf9SnCPxYymX z4I)69IN)dY`p5C5^yhkU`>UyZP^&I*6r;G#Yc*B{)xRRXd~_j0npdhPC6y*c@#~rc z!C750?T^B1Hpr>WF}yZ;brBVD9|!8Nj+1UkEl9pphPw4GC9XzV$7VF@&CXi|>-MzHD;weV&N%7iTEFP& z{5WgVe+T%3{=4AK&bNW!_O73E?`$ZdiZTIz4cyjVV1`Uo>HFrqP~!v`G_Yu=0}I{t z@v?}Ctxc#UWD&oY6DM6kx77H({fhkW3B{zR*W~ycY~VEt*b0{^;iw}=-H=t3Dm)?( zRU7Ck9)((sBq*fIyEeiw{bNcrR8II!n2IE={}nBzhrBopE$T7)6U~*fnN%FLQR=e+3j>$*blP z+&sU4WW`*8YcPN1>2CTxTyhG2KV@Hz^t*%wjsMdtIbz>7v+kYj7MF`jEC^p-7(8@T zr+mMEvH$Of?Yw{ZwEcWhQs(pBNBNJaGzuGti#Gnfa;p6d=A+exEk_JrTK|OjYpMYx z!Igeh#SsJ!N!gJBtoN%|8$p{X0gg|8HgCxQi;Y>IK#i`WlG`LWsBy}DiZMopjGCe} z|E7CUC%FZs%Ah}1h<}8IS`y4ONahBrqIjCuc@Ru|j`TW#l$nZ9!!k#AvxeTdGvu8M z9>;SlD;`^;)dXW|q_`DqUPjJwW6Ga>-qUGaqY zWqp4ng_84`@N0BN@q0p^mz(Qa|A1u>HZr^^vx)X|Nx~_Q8%a?~w+law4j6^liP5k; z-}mK&a<{|l@#E#@^FvV~;Mr45^H&5>wJ~~P(gs)+j24G%tiX-N-J|7 zu#<40sMKN~oeHrC6Iw{$m(+{`9aS+`%{~__p=byC@)I?o4{UOy*URe=7?MWb?Q8qo zTt60@N#qF-jK;HSOeKQ8=ASc82fz1gTpRcgR;gcq5e&(`O$n)r)>-xZ25f6K57r;T z?qp=Gj6DLbM|&K0yYB!$_Uvlfnsr2 z3v&bUupRhZZwZ4IM50lVU0>~kXh{M_gnE=7&W@84zSnF2ONBE$3)O7@CzJ+e2$t`t1Fk}{v$IlxOf7?hX3SYgg0kU+*9Arq~ zE*$J+_a!>ts>rl5RCtYA7$25-*w|EaURIw6t$mytN6k5WQWi}1>x1@R-n1KCbfwyg zQkLzR$p46En0b~qt_@J%`i|QHG#hxmKAP9-#kpjk-{lSGDrH-~IF=qc31tX++?P`}O5jnZ9bZqWk*wE`&FW3S^#%Yywtw~cI$uK~0y=MrgCkgYRe{K-fYsa- z=UyWLCI zrMF;H=SM=%u9(EJJY?G;aUYnG)Td7lG&r$Vg3v*w1kM@jCd(os6&Yg(^$Q$07FrDR zJg;C0FR?pCfN4ocE&ANoWbZu4U%XdmUN3oEWC<5Fyu8UZLJzi+DyHr(9L>s8vFslG zf<tX;T3z*3S{*PfK{NB0t>2tnrM1K=cotRvIRH0yA+(t+U z2!&fR@RMm?0V2PX+X2zhf*lc_`1n6)X(Q<6d3r0*`CJ@9Qgo6R>q+Mn$(kQ<>Ttwd zcTqJP$K>=ATQ`nM&RY12_cuCOhxYeE$6%~d3|igAT=r89CoSf!o!g626Y_Najbch4pHjl^J`ie)2p;CDI$ zNpTq}dbe#U#{IUTFD0JNv;x7w7c176FWzxQ!D$PBMSd4`o0#%`kWTsPx&9xZDCEy(2#5)MWBq|AJQpS z17C3jcYVZ3wD({~FlUdW-K#9@dT$=~;%Eimra0|CzqZqVZid8;pf#1Zhn*aTfSDEd_Y1mr#BDsJ89v=wv(e~ zt53kS1)`d4*S9YBxkzm*fn_h>OE|=Gdz$#16v|u#3BXoW789MN*@%QJ=n_fZ=ZqZi z5^K>8a2c{RRNfrPm->zdf3C?R&oQY3FPjJqnUoUE4r?EG*MQb{!#yS!8Eb)Tp^v(yxA^iN#9cx=jEBq@7;jvum!{LZR z&&*#YKKKKqSLxXwy!#4*EaGW2^^}fI`IS;8z6IZ~{qY?4x7X?G_~-3V=VyPh?0z_1 zm7R2GK3m9$?zNtNt!>1F`*uOCTF23gJT|g9VK^lKXscY}HP`uu#~?sojNpriV_V~6;WcFNq4 za#tH6H((;W*i=!e4=~xx>dRpS#ZjNvM2)Ybf9)Ccegc4Jz*E5I*`yC5WCW&*74D?b zqlWXi+rAUp4c8SUKmEBU5>dGB&~qfTt6M zzu}Nc>Y4aWc+YuTp5f=?gw!tv4hBz|V(v?srt9nw`?Wjy+}uICtCURdRAsd-ve1lW}@rRi6y0y!NWTADlwK(WIzzj|R%l-wmb*d*k1t84xUgx8dO) z`x21<170;~i5!*)AoY2tCu!X5b3X#I`H6GzJ#2JqmjjGzXVoa(V^X%RCiq{LzI@-M zO8&{wZ)NBsV;KcIM8O|U@qnVOKjcWvRme{}FIXC9pa5UySSzNYzvX>8I+-Zn?eTIq z33wVqe2P+U(|HZXMv_~6hyUcvkshOppiav{ft@%wdQDeTxNS#vT)SYDU*(%FT}EqK zd6OvK(40my3}t3AkL#Rw1kZp-!^_f~HI1k>9erjE$E|f+v@f;v^z;dDmVcL8u^kC4 zm7}K^p;_2?Eew?E0UNP_xEJMw!M0;Ht6x*e^hz!4d6mAVahtB+Xm!0JfQtTcBMNh= z6KQ%IUvDwW#6a+jZfa7@<9q*MC|Y2wrh~8vgX-hz_(`oM{G8%VuqXVe@aY|#;=M2? zMP47oTj3--YqHIU`2b6k!aXlNim>dQY&i)8Y>OhU23r$Kjf@;G|2aD8anKKV0|d#p z7Y}fT==PxJ7|uXLmcJPhxX_@O=Ko%sdHqGPv4a(`Bk-&%SA@E*pY~3&2iH z{@gXu67r!WHnQO=WEZDhyr-L^JgKFl?3Wne^!j9IuUDimjSl=N%?|-Kz1T;7h#pJ? z2@;_K@fTmjq3b5A;8B97W0lm?-fY=VlVUGRG5rS{Q@4?Uwm&~C6;gw(y(EKc5MLbzfh9^I#7{s?qp)ZD%eLNKyGqK#c-6lvAX9aMA_JWeI+wEHN zXC|BQ`+LeA=dZ5|d|_Z=0X+dV8m}V@UxB;gVinKQ7ARQgZ1-GXP3+>BHbZaCKhmys z7#?|b9Uf{==6zs7yX*n4OmrKrh`anD zI=YRJ75s#beNTI2v_{JFZMIDD=FYlmf+v;V#pd;L_WG?beMb-LI+_Bn>5PKDPZbgC ze|227t{JWv)J8Jt`_edw``sZHPH&?O&g}!4#<7I(LR_Vjf9;{T&6RR(_!xLW^1mREbtHq!K((#UglF2R~s?h*(Gc56)D%;|Pt?YC=x7xtv zF_eIOfx11;9z|bl#i!uuf9Ub2-0pg<$5c@uBlCjlsDghNL`zVx0oCv4<<|E-7dO3j zoUsoN2o;{l^4`r$8Sb>?3F9B!F<2lzn<`^`0TpUXTZDrbEaAvxVdPPAHl^TKvF0DY zkJ0L%uZRyH#guwdI;0piuE7CtdoAdJnv(M3co1M%VUG3=Cvjh*W#=tFww<)w_4mK_ z$P`F0VZuIaY`cU283xKSH66Rh(YNyv6cRqF`h;v^pkkU)noT2-d$Z|fbEr@O_1SsK zL-H7pQ|HHa!h^iX=s1-Rpv(MSdvF4#h~juY<4>+2O$qAAf#U2_cbX~#$(+qL{-wRMSZcSk|?~Jz$M?&v! z#LT?{Y0&k3*yr~+pjp?T3hlA}8=-=cO7KwcEPdXfIWO07%rRc77%X}ru!L!ko~BhO z+F1q9vZH*c({`+0LpOjCJa?zBmva}R8cB9sbx}NID0eJR8iG#8#p+$By+;doRgfx$ z2Ah0trXa)2hq+xbYLTGYUatLHt!Wf9vy)r?oD3*KRbykbrP5zlSwxxHRZGV(8E%3; zJ$yb2T`vj~{{#iA_z5A-St9kLF9YNrf2R>kE>Rwb-(EC`0`O+yKMCwe!q=NJYY9TW z{p02Ie+7t(c)wLl%;#6j1=D5HMi@iY7+~!FRf4TBR*)vcUzPT+u;{J#h-}LmH}9V}j$=Ax zwT3}g=?`)L4O&JD+2l;0#Tcs-UWR!F`8m24`ZsQ<;_LbbZw=~aW|Tn3FA{~siTPaW zkKCkd99&hEL>qRcoSuY^M`0YR)V?Eg6$ou=Tfyx%?zp4v+#Cm~lp5HeBRmvT{x!Q`k!u4pt?$FoTO z9{{>QMZczg9}w$Sm0Z-UivrcA*@pwcY{%(+lvnhnoxyUVw0(%}cDLs`ABP+{z*-@~ z=OzzdJ^kTdzy9gF>s7&@qcBU9&gbJsP=Th3sl1nh!vY*inwTQvRqgWO=WXGXZ5axM zU4S4QFG_#d_sa7CzWv!(uT2dy+ua&hKFVhFL-7)ek&S!Lr)j!#IPrvl>@7~dUf=FC=G=IhgFrh^VtiwLn zxSwXq%AMNe)kzLlRn4$J0X)iaNU3wkQ{fox8{e-_5~@oJ@7ET2h@fm#jw8UQiK zD8ic)-Y>N`Y{J}VRHWcs)oak$27r*{*zTTzIJ-bsGKoqCI9A6|I#@CNZlluxIsB&= zQ?#k02q+_dq`z#AV%6C_Wdj<_%I5LsWmV9Z*)kI!s}jImlsKp`0JqQpX;DbK^NfI+ zaJv=7s@Ea9KkBW#j~QTH5jpBDI-ZN1o$7o4=9TyV)yuZup7k#I+>*V1Jy1XPX|}NQ zXKp~8wAlG;cYs{u)LHWW4tVrOIS#5uRZ+FXL^!?8#Wiwh3EqMWbw?X6z<#H|u>BFWA6j|@7G z)gm|Gu2g-a(SCXJT|z=Ey&0-0uovwa*}p76Ws-McjfGM{K0%c_NKjOQ{)!fJB8kvc zub4ql8~!~zF)(UeKc*WrC_B?bonNDYxjO>CDh1jGs?)Mn)p2b}tYjM0!`Lf^T^YVp zPFkacxT~zguQa59n{okMuoBsb8T6=$jt4P$FV1q*f zcdYq^IQ1EH&=XA`Rgnj8U;XjlzJ+ihH$mpKi+Jl$x_iMI<`_vIG+8p3;Pgf&DM*c~ z^i#B$5TRG6biOtN+$9fIScd+9 zcyY7zI)G6a8YeuV(X#TX8QNx@&{+H@sUr%C+Zt3-<~d|=XKKUBOcsSra<^M9q(%ez zAQu(A>N6bc*gf!7;)}JID7pkRp2B2dyJn6$(#&sE6VoGJ=YGrp>!@SHpI<)t?u{S* z)t4UKSz*C1P6}OAX4fJy$4x8NTV8+SclW6(c|lcm84-b+`u9YtjZw=EsN%DL@w(B( z*@o+6q@i)qdWnsaX*(q{!m;c7_x|+tkAC;g(>&4)?!QDixgANr?AHPzRiveC5(`b3bN) zwHT~tl(Q@P-XFg5{(rv0f%fl{j6jupw?iBt5$|KfC)(l^C+A zK3faI%wh)bftLP5@emIE#646&1>RDnj|`f0Pe5z9&&+nJpZxai_x|F|C;oOJDO{Cz zCC!c3>l~I|jaj4|yZ2&dVNTeHTa^~$5D~z7&R|Sg#@_LP2X`i`-=J+cyL1ixo8Slh z>XaiXdnWqKi&^YNexhiv(R(<~T>J`f~ERPdBs2qRQ)d{9s{#=n|0EiGQ+9kd`U&>{WaY&WQ$*v&gXUds=puFdtTysQf|1^ zK<*k#%^RN!<l(c5fritPU70sow#p%{o+)-Ylf?ngH zrjFl?p`F2U{**yl)<2AwSw~UtAOPaselb|bCyT*)2Knr*D?j|pFFm@w!h&CfFa}~M zz^JRAK^}j^!^!3cXM_bSlz^8d05?vly@o^1m;*Q>vg?%^RmG3v4hnmf?(GI!h;+I_ zBeEl@CiQpIo?O+R{^=X{-i;f)c%s>wAvAY`3>bWz27AH>K(-Naf;-~vCGCSE2U?uYzs;aV=5C7=3Pk-YjDhWpF{>XeoY`1L!oMWS*%C;2~t|6BP zD{TN%<~Y=mBv;?vr65FT{!y3GcFr?aX`~sTEnf{+eNfmGWrPs>nE-=S&#e4UohV@0 zS{o4&#uE4Wd1;^z2%c0h=|bbk05Xy`Eyxbcs)6OSfI1qzLN%(UAaNQcvo(>DOQ;6m z?Bn3e#3}9oW2BA(9jaLj+JfH7j`QhX^i#}%lHRFAGtvI3!{~(-B0NS}0PCsb({JDS z$$$0gT6Fb=NkuTj)7j%e8F;zx%oBWno&sF(L=~4D&rw(;6<&@Dl{EwwLAiAhl?tF| zIHERY@piYj!Kg6+Vd4e4CXP8m8Br1W=wH0@@qhNR+p{;6g01YWg2b6I70M-KazQ!n znzN(aWNy;;`K4+a8qD=(&lvg1`QZdNHjw-wtH5y$mxyOzBzVa*FdKG+9u$Q91m}X_67TMS&!x-fJiqdUlJ?~9;oOzfyXM|iXV zYcI0mTo;v({@Jac{_B^wrr%3`e!@IfF~5xuS#U^FllIbv=`#N`ud)1vCiF(w-PkZ{7az4_?J{&ba^^pcUhv&4FGbjC3-) z-wL9#Avmduly4^@mBle2MqP7FPOcpX%#u`}m4@*O_mLf8nq;s5t~dOT@E5ay4g(HC zG#(jIW^cJ`l9~V{1hY&LQBR$+`a!~4Qub>F0TZN~5)`4asU6ujAkt?-z3h$Kuv(MC z$#c(Oj@5hyZv2UyAvlRGjlMhQBQLzkBQbfBU+fFvS+}ob2N! zQiy|W=IDXmaHb22me~j;L`7+=2mWaLP`u5CH7@D^p(pEFCddWjFkhuO>;DEy(!9Y3 zbunYG9Q#rnd)t-p>kOiiHH?mcHkc6%Pi?)=fNYHZ0}Qv(=o1Tz#D=J?%eu|`^dMvG zfKD`HFmI&gX5tmfDYsPY0R5qPxk&@VavzNtpN3We;8bD)a)IZm!7<5DQi*3R$>`l2 zWU7|Db9S(eiKym1>W)T^6kv&5xoib~0mOFt-XFa3@%L6N^@|n`z%i8Z$6uN`a+-0L z%=7719M7908U9jf2_`swwXvwVXCUOFQWnZ^UD6-T=AdB&M!jmq3T6?hG+ryhEEeF5 zB$k;x_{NR*|KiQFt2=K!R zXv36F&}9JVz#Nqu?2+1*UPfL3>$qewSm(;wss7}TUtPPjU%E_JZz#JLO2Zt9h%c|n zGs+pLr~#hDcFc6B{x#R$@JI7op-elEc!NjQ+-XdFve7oD$!`Y0&;cz@#LOPPb@iuz z_14*~6UJ4Ftsrw#_{12W8H>-<1L;eJFeLL?eg_M1w$)iWCLqXbsd(Rc6_uwDArew= z1;_I=J1U6;vSc!Ge5ay8K}(C@`>wE26#eyFWv<{&ce;vf)7x*TpD+aM8HE?O?``oL zNG11NqOS_}nF-%A46&u%XoEecqqTs}XbYxT46X7gtQ{aRSqX&H5{BK4c)4~eG2A-E zn!t@1$}!lwZ8dn+Zj9ESyWIj<$0ZA39g-*4c0c~JFWvvjveFkVjjNaj;L_s|uwWK1 z=+CxRR7O9Nv5`MBlbez32GrlPv+!xc2SW2(Pv4*C86FLsj-w-$!GAd(bf;kHk}oJh z5N)K^$kR2KZx3HNdGBxDY@Z}&1aN?po3aK(3r+!v(^;YZo6ap&2tqgf#olX;3diOzwBKI)Qv8+R>y_ZmH-P6+Swh_f&Xg#-6mz z2fy;>V~X0*jhqHO4`-un&BSSFafhZ}o?y{{$Hsdl_<;_FL;7?tJ3cF=D-M|UEC=~m z34NImLh7+kL@*r%#{)oNP*kQ-C|@XyDYj(u_Jm?0zJZ7?fOTZDpu?s-zP10+Uw-Mq z>+4I{mmmdNjUc8;;0cP{BsW4!H*9>?dq#Ld85U{D@YADU5nAGS1hX`t&1&qgKg1gd zhzufBh;%;*tUwHft3_@eF|rb5#4;ccTB)i$xwZf4U%&O}&8uX;;_PHBL@H}A0xx4n z1Q!*pMdSRntU?cvUmPG?6xWyJ1Yeb$Te1-S6NjzQ=*Ny_e4K0nP2zj1WrjEB9H>abr>=R0Z6v2sCpBD#|$BEL$)eIt|@r! zXfNG;O*x+Y(0ws{@0o^R>GwL5!tyZ0U%hu2H~Tc8TPHemoa+$OmDvr@nr9{}M0i}X zLWEoL@YU1xg~2aalpf7+etfA!03|!N^4RXImHL|HoUCAw?v;E+juw5quB~M{1r6ef zo1sX4&NugFLBhdvrV{;4Z;Fr1{hay|t})0+Tu47*CTG`nKmE%$Kl>V<_y)Yl6}bH- zHA=->lSI^0#2cA_T*S~{OB)UdvfDQU#Yz;8Ck0uA`Ar3T`XfD@b{o}^88-;i5F*c?K*mE zcIU1YT|$0;C}+Mz=}DcQ^8Jmi=KQftSfB(7=mE4&lsR#QW_PSYZ`Gw%ce6Q8N`Tc) z^!@+3ZS`($p&IN116WF<170Ja=kjPKT~I&>FF$$i>@Ej3E;uWRR|>hku@(&o!012E zNZiLJK?2YK-3l^_4f+Nk~Vr7R~Z$jS0k+vso0-2ax? z4JU(#^shVf5)iJsAu9DXSQ&3cv5F_H>+3$E(ItYnnM4Ikw#)1A%`uEk;~yp|Pmh=N z>%|68RekA8mYsa~M_;=C?ybqCZOLJu;>C?piFhQ7JBYc1G}q6~?5&Vw)^tH5sS@N8 z^PKj#qco+`2P+eNQxirQphETbhEYx_tFZq^rV*d zSwnJ!a1Z#)WqV}JJe-wl6j7BA|M0a3Upw@k?3C`wt6vx*CLg1@1hmgeCWxhzgne3#_2<9Mbmb);+tXW7);Da52SzpaocKi~86RCZYhaZr2zze{A;5Gvo*Y4-z zU5Au0hPV(gG7-@;5Gfg_$MScFi~{K5W*QNjWdlagwof4l2GIdW`qJ$&>LuQGYHZx; zTV2Bqqv=U>Lfn3q8_`L@ti2mV-IxrmxTc{+beH3$6Dn}6!8$fsYp_@z-`fB9PhM-g z1TFa@Wn5NVxGNlVGO7KhXRbS~fEE4mMh=ilBnn~@?VGDdOO(b0T{(Yx=cn$(1t*YE z`6m-z_=LsCutMKaGeV3Lf(MYpZJ_>;A3TDH?DT_w`})H-4m}NkWI%*s%$u|5xpspp1^Fgehb3_ zjDvBNYDb0XM}K5UZX4}US1C85RDsgc(8xnOZg%w_26WZV^g3#-D1JcUK1i^^-+tURGYCqFT+wvd|W+{-?=wO+&*wU?C>I;cbpx~KG zfdpr#8lQw6c#J*;1FgvawGbPFgiR^-AZQiM<`AX|IiAzqhky3Q<5w>9&Md%5Z({|q z>1F$tkSTy}?#ad)v%11>No;=w)QdA-f#$9pRcx7ItOHgZ)yrv3{XIE}Pceoz7>lSU z%G1CM?OFi}2~;VX(tf4Hp(L(@n(<)>AeX`Ctfi&rhM9so9AxfFeR|XWrb3I!=$O%! zc?pv5;(2L>%q#uPttu)cbe~J^y%{r;irv@-9ec&{!u&kyBh$>sJwWPWu#QUB8muOE zqCfuQSKH1&OD;>MQ8}Mv6E!uB)6rI(Eg9pdn5;`Y2B*{UBGY)KL{XUdrirdE=Afr| z%-;c+2A}G4V514Tq(=E)lj+-nIf|m0YH~Y;A_216=_l8A@BjH5Pj1d1hFrLIm>4n8 ztYT_YG*j`%!DIO7DrFCgezI*gA%;RHMwoeVhM8k`V}ph%O_ftlj@uZ?7-?b$j$t;> zYq39NpI`*z(nCtzh_IZ|4;)1C3KYhhYGPQ1Rg(Sd&a7N#FC!tDb|-rK14TyOL-T=z zs|fBV1kC2%9xD?Z3=rQk8jt+}LU#UBy*sE+((v_5z4H>42<{q@$R5k)*2-eAj!SkT zYm+Cjo&My%eD%Q_3u|7QfF+vlCzO5y&}7CSO`ZL?c}sQx2ly%}j+uiXf$nI&E{Vl) z;z01gr~Ih`_Lc-Tc@4VnHeh~!C@`ysBoql1lj^i`UL6g>sQ{PDA|a7Yl#ukq>Y#CKl%c!%k;<`9 zR=pjhDL^e}_LZaq$f%8_)XCILE2;T*niR|6mHA!S*slG6*mO{$+Ja=u5F9!m;|+xq zRO)7R*jnzYO>;(O&AMt#`@B*g14KObXM>b`=gM({jbm){T7V@YqVoQ~e);}amnkks zO6aZlwsFY|=ag{X+CA$qrLNxFseDno*}{D?*2RuNTw{Oak4fAU8ACUhogYOw@0iY?=lcBs_+g~4RH z5+%$oSN*jt%RnHU;^3tXj$b&3r}A$kS4>L0T(yaE!l1gy8ojMlt= z4Pz4T4EPr_YZ#Wyl$gE&vX|ow)YMy~f>#H8tB}cNxpJf=)-eLC^`&PK`SAB{fBNqF z&fq1;R`ji3%}MJ5a{?>VDK-07b?AWd#wzPm-d_;I1`RctIXwdm@&B{;rp>k;$CX&- z1@JI~00*^1kqWnF%B{g|Np7`!2!|y_`2YU`JHl;uOB4wbAb~gB^oPo|a%EPX3mDCZ z3%qlR;C=h-T|;KpkgGCt*Jij=Oci2l$;HxNi@7+BoY|;x>kf#9SK_ek-r$lWv2<;` znL{r{-#q={TR;29AMmxkQ)+sL_*1o~niH6Ud-?`4S|&NGiS;7FeE}Lh8}m$F)u(8o zz&Fu(2TtBV-wH07|4NfEuilNZ+G7mll#0p`95R7= z^5B)oQ3~-|LA`BlxdE(eN!K3G{qbMC_wir6_t;ciV>)^R51~#9!cG>IzN-x?aB7ND zv|ISh!>V9E@`^2^TBqvMb(bqLtzM{+`YU(2>hTN|A*y-66tD{__(dI6Dyl2H)&xaq z5(>~jT0j5S@BI8fe-8$ma*WF?o9 zqUzR*!|0;;z$VN(f-Vuly6_V`DaKrcKnT8m2kr{Qb-=DHOUde>Z=+kvs;Y8VXePd3D0q`-0C=D*j%cCym+nl%LIE7 zgh%4!tLG}yoV>;f?G_D&=BcxKa!4op8rAL%U|n7MkqH_o@q}3WGV89ct@qg? zGoz22pRjBo4`bxw2H3ZnADR4oy@6j*yEOm+AOJ~3K~%0ioL^*8h;vlGdcx%y3bR7` zg}q+a~T|YDB+Dh_)iI%;PupaN&RH@?S8rAMK z0<5@7u2=f?@4fZU|M|nmrs8_j(KwWk@Hcp3`-K$S+NGYv!A}CBk;vCEqu%eMO`^Vc2PMOu9rA4ssh$xZh|Czww zVoLphgDf#TC%WU4`U_a4YrveAnR5dBE(+OeX}8zsO6Q3uHE%31qxO;ISE+Wdk>_jW z+CKlSC;#p5Kl(Cj^ew%l#PB8~w%{ZDy#yDSjSGGGdMx3|!CWEwU{|L!R;g2R54|eD z7iLY@8a1Y@`b!@;Uf3?1LoWXKc#d1e=2yGgDnI!wrYKrXUT*j%yB7^sm81Y2+==FCqnR`QlIvfdt!*PmJHwd++d97VE z&`jG5T-Yoze+V^-kfW+#OB+h-k92pC6HNHT(AOW3b`HKVBs-PLup;JK3iiQ@mj}K0 za{M?*jItek6(WN1O;BUgJwAHNX1JArVAF#V4iUI^%U^dxvNN(Z;7r3YkMQ+ zs+ys??u6_jFnP`FIwNzg5o%mvPsi*2Pk;a2+sAMoG3^ex;e*SY^3%GBOO$I+>zYKo z8g%Ne6-!%ps%Wwr^xTmWZs@D={KT(r%ERC*DMVIKVE686AV_j|*&swZdku>cg_;)t z>!ylBu_;Jh{7|pEx!?K6|M-I!@4c>ws*yDVhx6a*&$?hHQPr)WYS^w87@ZpZBrV<( zYe$rT)ZTf?8zlqBYIvBy6t(1aIB~j;Xd;84cd7^cZEX-wG^r*Zia5iG00cQV+fXz> zPy>4dZ30d<0dYX?!?IB*xKGBApT=`Rzx@&JM6YCs0#$F-T7@b0+~wZ1vU3637G5I; zW1H2uv#Z)|h&ln-8bw#9cI{dL*41(SFaQ2KPrrLRuKh97csuXtRVm*g?kHlIE`|QI zC9Ko~R~8f1@de2{LuUH!#j(C^6ycgZva)UPmjXi*V>`xc>AH-~Q#FzVp~rTzlFe!VZdL)4dgk7HTWv z`E_yeh0v&@d(Q?Ix*rNRZKxI3XT#3Gt7WOeT1&l{00M9UPipH+!ZLS(!uD01ySuuM zs*18{p}R}#thHaTm1|qWhyw!D8)6pr^ta#q<==iZbfuZi{*x5e>;XP<_dXcT7ec{u ztpatK$aGK5>qMZ=Aa@ylUl_kRNi%2^Gp3?=N0EflR#FALB~w+SM}bU$OL zERn-T85M+wu6#;0@i>v* zhVuk?aDypW4JJT)0Joy6+t9wfMR+YKt|kU6UiW|c z`;Tsc?T?s_FASPBb$F?JPU=FIV0k*0^*eVuiQ0>bZ1js@pU>#$uyyiHS!SUA!vLw| zm;!1tus5tAb@=FDH7?SoMm7Ac_LiP6(~Ch{WbL$j^vWS4RRjP8rGnl4&%j5@VDf;Jl9q8!Hm6FihC^utE}6ra{iP#Abu3 zYf-zJt`T5e57+oaA3treRbos!S*=V#f$A50RBq)~kV0)7Y)%?t23Z8R z@9@YzHxlSL3_eLI92WU{SFYt95X^T5Wi8HvK}bP_BY-33$}B=takl1`JZKN0WL2XM z%}0dm_+)QJ&9^4g9(MoM3dZtLyv#9Rq+0U2*t|)Dk|;*fc;sXIe-cOH(M7!WY}3$@ zhd)k_-n4GEmb&q)VS^5~s)sv(KyjCH`nUEMg{fo+wT#tF=U_S&Gs|K0EC*$rDw*9q zV8>=8);cpow;k@nQr6GbuMJV{z^`MajmJi`g5^+P8SpLAQSYsU^p=}t+?BiqoUP<1 z5Dc|FkmOz98^F4jbQN5G`iF1-@+Y^@t4B+!@YDyVkCtjQ`m^NpYLhjy?H|3)P}a2@ z2q-UrV}zd7;?Tr9+1$tiaHzKAVky2EFB1zqKKZNZS6R!q?~vS)lG9e0X?KFDqE0dz zx>E^s!-~Vd#Qk{hBgvfTaRWX%5Vp^I z!L0g;8%44r1iD05YxTNFy6-{nVtvD`jo0jMyS+ttJ?Yiw`q_70|LK3cgx zKiHOR6w&2)ELo{6#Y4cAt*JyT*_U+b!IIHi0Wq?Aq9A@P^rl<#5Q@zD02S<~eF(2IN(6qiEfb%D zF+o>;m>JefwLxRmt%W2BkII|hq_h6f5i=tJgxp1$^ZmgbQHjsoYmm>gX1De0_7>q) zrB@tE$7}vifB(__8xL(*Z|UVFm)H05CHc(_7Z-lEY~onrhS&sJm0ESYFGkD5gJ}dr zk9KJYlN?yEhvTa4U*)AgF4F}FtIEbK(1hk020vlFKB!`1_gV{mQCd2?={&G!=?L<& zq-kSKG}wOg>CgV*d-w0YR!?e6&v>E@W@;aogqHGKI5OIWTdFL1r*e{4zs2#T7ANBS z2Q|0fo$s5NMySNq@Om0M8+ia#5;oW2rs18eem>qx6rFcOB$ZMV+F3`L^4*2Hn*MI&GKWJc4vrxTnoA_A|wElt!zP>r=B{4U# z81>qwk`@LH{y}l%u#y8oDh5U7YJY{#%DODKrfcApxz3#=p;x49Iweu|Dw33)rIaY# zT@PDGUr2GKF!wp3;~Z6F5k)U`$K_D5Ci&Cg(K&bqRWMu~49T=W7qdc-bI@>pZIsL^ z3lWnZPJ35*p?jT^*{gjlP2q|MoBc?A^zv;+Cdc z(73nkn!s$X)IQcpaSKNOc5j&7!+=prZqpN!j4~(eG~2$aqp7CXoXXJgfAfqB0f@nC z+jW3X;GHb5mAl+Apu8P_)ybn>(1x-r*1}AKx>SKwDSZC7Gs{+_#6gfxfA_6V{^mo6 zr68jBW*1gdLiw-2gdhN20u)h*Q*-dT4<6^s4J?jf(~$ZUS0mE9!zgV*@F!iedipk8 z=tUA~IEG1?Os4SRexf*ALjtFJ3_b3UOie;pg1(j%)k$RxN5v8+miLSp~L*4J3XDGClbWl}q zX>Fk)t47gRi9&!irfzO8Y7-|2501Owcd_AYlpAQriJI_19MF}E?@Nt>D$X#ix3~-7 zkHxvL6LDhA1j${3dY}I7hoArGEhwIBOEB(KIbCoh&w04OB7_ig;JQnie2p;2k+bV! zpmP@kVEcPO2pE=LKiR%mNgBXYh(gndB0^VjDBZ?!-QZN}d{$)>EJSZy!_rFRoCX{O zp(H6Kb=k&eHPS=TtH47@i?tOM1D|OnM}#YNHG1oSiyG;Gu5NMy{-vsNucpH{X0{Bp zD*Kb!8m`gv_d%`}=(TbYV_keV_?1rA2(aAlADe`il5U|_kDC<7G-n($m|1QI6HnCg z*zHp4xk;F|H^-}bV=VKJz4(mSHFNjv;OxC#{yKR^YMrG9JXuJ*)Kzmz3RJ378zzxj z<3fjxlF~ApMWi1t1)Y=%$fyEbG(-FAreKtHl6y1%`9J*N{++%lcPc-Hc}rI{xJGEj zf(5Gd4EMb+LWxGwBWfu|{#CuMf48)pbTW9@#}2am|u}ofLWeE8pC$* z86;3qO;oi_op&@E9F8VMwEB(kHt$3fLkg7PVJ=egz3y3w%O`R4dQ_#8ml+2ZqKr76 z3p5oZ3KeGZRr7?#T#yqaqF;dG4v%U)4{^|QZu|LON{ zp;wQV0%?C#drC1K9W>>7M0H3+f}AsO3id5EJ4p6Z&D*teQ){47*3GE6a^yDPDPdu5 zfW6+3B3^89X0jr8vz%_psb9nDgi@2tHfa;r->`~6#d%>nE2m0Y*9dW>bHomzHphr} zU;oA5|A6u^(Ov>7Nf%(9L#i95)H51p5302y8fTIx;3LW1346Mfzpri;398amxrL7pNM=4qj=_w3_25NZOxMi?hUhWL zNPlNN6@_04Rsuw7|6j=1#elRWgpV(;SA70^Z+-R$@4EDF(boiN#7y2vW8}5fxRAHv zqSdq>>Fu%|sL69^>&xJXS)xu~64=v(v{#bNwy`~)k)0*@LWa#k$KLT?kAhWH$_w9e zxowAP)^i@(G56uTU>3GN&8OI8;^a7TU$xOD6`9;Gb7XH6{= zytVCAT2qvVm*+jRB?{NR5lZSsja*jr;Eh*M?S5gpPJs2wL20+2{)g{e)U>zs@{{g$ z4^L%f4q1_@5ldZgH5Vh012+I$h`kBh^&LFzCqxthpvoNBqJQj6FH+%hKVO0N^`x;{ zb_;&LY}+R%9KvZ~)?t>`=Z$7zqlg^NL*)ZHFA|;L-NSPvwFL3*7^}P2vie{C$M40H z45<%QgtIWMkIiSJV#gB^QryGaV^AOOBTb6pn=) z=_#sKstFE?Qof$Jwn#eop@?4`zXc1dJB0rN{(&tv_;Ub-B3@VII%8iEc=!_1~kHu(;7?j1h2&;z5gxI(-0%MCe|ZP~D+iVTc7BHuZ}BgYgc{S9DU zOM2A+)+c}T&gZ}VU4MoNuLT5@~+%`EXPoHj?CUyYHcgM7(?}5AaA^^XR5~m zm!fN+`W1u^37f_inoBmfxoStLown$&VJO;P9t3lEIZ=Qb+hlXfEAxrUbiB&sqTi^2 zs$~McJ-mIOjn(LjcVGMDZ$50?)t23kDU9a@%y2zGf{p@|Yx)P*$PsYV@PVe25o^E( z8dU|}JLY%szs{TXDgz7dJl_ zXH-Yord4S!tFh)%YWD`3GTIyIo^d%4r52Te`5H`jqNGc_6t8Q{XG~JEQ$he{e@Rv6Yat-@#%C|oEQDq1$x_s;6zDdSNH>QFd{waaV>4_G6?*O06U z5OK4DQ$3TL-G_udFx5!#CO{{8eXKY0GVCuKwsU4DtFG^Ejnr|?7ruwwi>cn6Br z?iO5Iwkg}RVq@Pq*+${Y2M1)$ zjAlt5{jDW;*s4}QH8ojoP|83kl@MC()pDR@RdM>Rvt|ZbBKCBgY=S!iql9GZjyY|; ztwOxgO+wD10Loo71Zz+xP)Z&U7|I>ppNP}{l~TK3GF>CU@>dH=|LkwxfAQ8e_Tx7y z?e?K*C>lOQ>goG?0;1Y9QfsaoW)|UhcUkR-PLe$?K^~!in!7q&gYjlnzR;8?F&G*; zNRoCfHD|L{B(5-Og<7cxJryKUM41SWEB7=`&?3NQV}U;0s13b?lb%@wQZM+WiECN5 z8fHyB7hR{7)bIQk|LJ?vN)W~JoY(N-*e7V~J=|H6yfTedvT>Cnw#sNTtOs z2J3p#s{^G!|G^u#V?`e;T{0J0UvNBEv>1i!Vz>qMDN?JUYej8ww_2T(Iut~|H)}v? z1UDSf4s*nUBhob2Zi}ezml3@*l87}&=#{caJTnXp0_YOab)iJjV^E&KSdcKOZn;9J z59P3>b$Ap>f$eqe(AOcrnM3a~v=#m_vs4 zpA=CxD8$|olRtq1Vha?++=RB>L7fD<9A`a`6cWvijR1yeimnWs3e==nqXw4M5{(Jc zl1VxU*+8{InYwD$PimBo)!KF$1h{-J zc_)l03X89!^;m~8G=0=OSc>QRZeFt_ENHu8agu7G0$~(XZmGQopK#TOwL!P@cp!2T z;uzah1>APpMi7`H4^d9ja6_H-%m4Me_fN2#Ze6Vbzs&{NkPT$gQFDP#{D^Jj*y!sr zj9oC`NKstW*E6Mg@4~uJPZ0wmDJLD%MNi5hVMOP2VYN050Eiyq20~HHH~HY0$Mu*v zHYU^q`=Smp*&{kWbXccY{ERveMGE&X#2Ln5^F|}~4B`rGlnPq*!80D{j0xFr)x=+6 zRkR9E_$$fvvQ8N_x42obt|q-A0PB}OdG~hk)i)~nasBm+ffvRVIl|UES>h%LD_5De zF+4iVU)O+HWh-KoIH<~nx#5vCRdEju-N#QF`x$Hj>r7)_sju=6YH-FD)$R;D6PyX1 zB~1|42p`;kn=&BR4cQGfvn*C~+uZ_`hX^H)nMK^c^V+BX?xPuWRfMJ_oAoXsR{s`w zSuJ?0_z;QWLd_wRKZo1{R!n1-k{b660CJO)2hdgkLRfc3n>xpP54BDfW=T~8NwE4^ z6G@@>ghO8ArTMpt9-DVIMqK2XRr~bojlGQ>fv;KXi<23Q5>eSijchY@tG3}GuoU7d ziK@BRtEzp~z*`sGy9C8eQ8;Bk*xnYlxsgB{uZ-IL|CO#2V7&@Z`o-IKKl|JFADfEn zO@~-33D+nMe)5s%g;OK)o3irX-YQ)TF)HaK9ehT8F;r8J6M(q<2IwkF1XkXrJ_(yn zIH0lpfO1}?B#_zV(91MxX{#N_GA1|SSrA?Eq;Fa4o5(1f8H$yXZn#4a zd8&sUOq&@3i9&d^^2RoLh?`VxJLQ)Fg`F6|$3-2iYcwi{gs#UvcNA%9bz(76=u)$c ze&xW)X?E@u!ODU&Ip$S(4VhI}>AF#j)IT7rqpOI$Ky6fXuT@hJ*j_iT8ZSi_K^K$7UUyci>+4A&AhS-c@PK zTfofX`y$cK#JT~jYf0aFfc4q$Jo)60-+62*t~VXF#p|L2i8$q{N(Pj`;;QT8Ebl(c zK1d$bFz^L8_vL9hm=_R-(c-@GS5;uWRkUDM#LhT(#%db~`2vqv2P~RyTcw5NJZ}?q zY@(o239*Fu2``Xxr-O6rR@{jpZz|i$4#__Itv7%DKYp-@z|=yvw8s+q7sq9I@VHj?ebx_DspgYKS?>4PE(EBd5N!S+jH-r{|%&T7K>GpW> z(4~gid4o^=>iM!Fchsqtr^BQs{mF&&ix^y?T_JxXw+u7wl$?OTLblfLaAdyYH*>3_Jzwm)VXhcXPCQmI|J zf6-@$<=9Qu->yxa=BrccK|=FUVGb;%h*%lRdH!)(?<1i~t>X3apqFCdP1*zIa*R#6 zwB{Q(NgBb%omv+_nY-VK<{>dlzfuqYQ?d7pcHE_x60CA64B&kuJX0gXN}v4QckkbR z&03JZ$v$3ugVrTAXld~@4NbO)Y=KK>b~J3LEB9p)E6bd-HTL1u-XZU&#Hc$%)x%J?)S`iHK0#Y+ z(&Y1DFz(1It!w(^cr3rfe2x#oOi_s26H)MNq6L`&4iXirJ^Xt$u=I(l=UC3|3UEsZV|VH^ziwz(CNW+*v#fz&yaMr(yb=OoThGoZATla8s;vsjsU z-UXgF_;%)nFff0si_qL|F<94=zQsNL{N2}n{@1tI_OCUynCgzMj*hf)uSmQFFO$ZiE-MB4(KNj-1|HsQ2?maaOSG0l2g zoC%@WPO@yY3#TPQ5+xV-*00yS&Wqf;r1R!GdHt!NHdX&)82tJt??3yUw+4jjudJUe zB{BXj^5w_y`iSA=0y}z5?iK+so>Jo~WVu|YT-3+`Eve@tJE((@$(>lcpx$-db7lZR z6}AJOte)yfZIC~R@P1L;4xGA~jYIMu!B#7!roz3~4rI!{!OR%im}?2&Kru5lbyp#! zgiB3?t{d7B0Zbg0@c@NT)pc$<=p2on1_)u6;w`*q@-0@oUpZYTzsnt9|Ed=FeTMd1UNBSbyg?f>CIjFGy>OCwCSUhob zd@0L-jU>H`)WWbQxV#IeEq0T{DlRCH1lzb%W%{M4&Qifm{isxzXDV0uUQa?pV;qkG z1-9m!a-49&6cdnPut!!t`Md9y08+>`gvdriW?KiVQggxCQ%t)|Pif?mfqbCgLAn}Y zVw$XpvDoEU>)z5SROp^5l@{C8Hu$G6gm;5g=P;{OYQQO z-^XWmed!tjmfPo#O~O}9FW!CalRvq|wm(8@R;b-(V|`81A2Uz31XY}XlII-#}#_=97Eu&G> z0R+vvf|@FXNS~D{tHX&JDVPEE8fJv0Jx?ULV^6Q)rfn{0rn9P$5Gy>{9V0!wB^NE1 zGfN`%5PFCcDP&QBHCdQe*|Zgi2V5ACSayxeyTGt(0xEko(YbK?0qY17r3KT?!s7l0 zu&yQDn>~AM8oo;U_%GgzyN5LHExnA?ELHf@p9Yv{&h^h8eN`)7)C#97`&4mjrM}>Z ztPB@vPMe2hE_5aD1~w&`H<)$ZmcMmX?DG?f>){OlCaH>PPAV*{v^x-E$v8piarX^&7z~1Aw%n$ISfnZ$47?g-h06FtkZwhgtct$f|0-HrQ48 zgVvKm0#=bsaT9GSw`7X3q!-4LtJ{*jlQJqF&d>dWe+(TF6vRM&xtfphozDrP= zvz{?0#MtvFAeGD^Wp!#)8+a6>Yl?`(FAKaxe_m7&`S5YsS&8hceW1q1Ai-=iTog!lsks%gPn;EJ`CUeT-O4BH(=D+9=+$7L9K`)W{M~( z{B6U(mA7r%e75G3G1tcj0LGt^zdZhpp~Xvhf_{remFXl!YXt+_s~dr43DK_Ad}UV) zuj9I`bmSUZ~~oS20#h=#kfD;Lc$XsEsW?+i6!P4dXHuYVxn!Q zo*7#_knYGk;8S@}!Jzc+y7l_kjb@ck|N1-DsFn{sb__8pI^t$Px30XuT$;AbopSBG zFI(vtP&x*q-6>G+3cs45o5d1Tr>Jwp3xsGdnG)Kz-v@fDwc6*fDVg9^LGNgttvk84 z1GQ~`GY#9GtaFfKp%8a@{TtG3&LzN@eE&8?MxAx+zilN1r{e;rz7 zWEk733fY0;-Bmq(*@AV@;)zooRysxar0J6VXWoH`p|`6lMF5p2!u*cnlljqF3;khc z@QV?U1q58ko=r5tZh{$4=CG_Q=Prov?T&2TyD2FeeKBVDWhh*GG5Qa&jMQU-(gtQz z@Nn$=sMA8O`5R?j^3r5&0tjRD#_&k@_XPE(+KGjX8^F4*^eqEezxX%r-aom#p5D^S zOmq>}9clyYdQ){u^p(qhnXpm4r^{fZ0u^rkTPV9?pb==iKUm6N^c{T{rW&Fvdu~!C zqC%Pv>ktBqD>kc_Y*D)~-4#j7QQAG@UKTllce!_$(=uDuRu=!ekbG14CR!Yb#LeU^ zOKm5bisHjh|K|@=8^sBj!8Ue4G$Nw}&%R-1x-5#XN2O!yR8%fA3@0& zc4fi|fG{;4Iz&n{&DLjbqfZ;csezYG4(_9sse3xPc01GdGe&W-%Y^3Sbar_=c$$M| z8nijlE)Vi3c`1ctx9Y81dbeDAY%t6!B!GT-V!Il~8?Cu*!U0$MgmLb56NazsrkjiK zs?xVB2J8L}|HYr*%vWD)S}14Ws$-r~0`3;UFzu;KrJg%?F2t_2v0!hvmeFS6Dqmr1 zhktXeRTU{ZyOGE*W?&)RYs~CHyM-zoSKLEtS-b3)p^Qoqu$qC7f_Se$j?|qG`PH*x zoEDD~TH&#oM21Z^#d1RiVRrbkOk*V4jnDt+y%!(80fU})&jD2_qAFf`zn3Ja!UsNR z+-*(3PM) zu$e|%g{#Cv(eewZI);Kp&#aCc-Ium(KC@~KnIW}euK3=9;ww>eOPCVY_<=ONSRP9_ zG$pJ9qE^})0aBn@6t?I4?}0hQ3fQ`97A-e%Czw%1zzT}hmLNX;>kmtB*_lvw42Kqx zADyKHgN=vFhO7M{-x;jPHXAsL-1LIQ+JZDX@}hcc+MK$PhER12q1zI{_reDupelg$ zg``7&Z7lU3C^y`IW}CNt4qmlvVKz2&B~lq_?|IsNnWLnNDYEqkr?c=ylsQ;st~SLn zqA=r5uv)T*8JD^S#%iYLwZjkImy(+W>$=jnCZVrtd zeQ^r_3RWtvCez9bv}xt*x>GftvNq}(N93$w5ri=yDx0o@&b3mS<3F+$hCZIV{E>Dq zAsS76)I3dtPZf{2NzOIO-Kh(SM?-lC(WEVBCt@dw-mKOL{W4Zm6J6!)U;oK_FW!5d zDo0Nus(NrMF)R>3^9hcI)mYNFZWsKkU7+OBathJ3q2Ak!!e3&%%}yO=lr5E%LWbXY znCqQ9m$htf%BCpt>Yt(AMKm1YC5P#4>nsn-V0FfLDy&lu!DeZ_(0$5+t|VzVCsgC- z&6V3C$xSRsC5Jf=0E(q3zM}w~x|PtizyaXe*Wc?nhKef)k-wC+n+5C2(zga+eex&o zym;qoyXkQf4MqHU$gu7GnN({KP_QJgWBeqZ;}@E@MrT8MJd))qDm!~>N~lt-r&%D@ z_S5ZnE)OGB9hhZh6* z#9?!a`N#+b{1_@kd(6=WQ&)HXtH1tG-(NSg`%PAbv&D;Nq-^=NT-<`)ELvvBu7x8% z^~hmJ%&#m*bS*xL_@+E*ekUk2);m^QEQ8lCtL@XR&l)6}Fxl}YkEX<#t z^celHi33F# zRUgDqdc1(%TMi(_8ZD=I29+w>)kOOX;)3pSQ4cP}rC}f)0CSCW$KnY+G~Qxbjqo~7 zpB?OB&DNm|7ies-fhYJ<9jzojm;D4!x^XwzT#uKSfL$o06zT9?wickfM#RqIwRdj* z9WmV1zT0O%c|T~xG9ciAqtQ}GEg+b-4VbmaNs+$~#Ta0ojhN}s4g8!Sc0xzoEe9{g z0kn8clL8?H^o!XX2%adRL|eQIV#8h}Bq+X-FBD#a2SV7wCiSW8OX+~9#_U!Etn%Fq z%==GHeG^n|wCw?~s>>~#zSG8wxCWU}DaO9!%b93iP38L^1Wi?d{k7y@{hK|@g`-{` zJYubzi}0$_x5Y*H=^wrQ{Jqy6n~JMTyD_Gj6UMX4!4_P0S5*7J8oiEkJq)czXjN}4 z?iMx6VriDh)z7UAF#^7`xP3Zz6AbUtjYNN2Qc+G$HS08q?IdnC0-`6lR z>OV_`ocegUw+>QbiONOmVK)m-5TyweGzzVHuI?SB#A{}4Fbma|@yp=PjaF^!ubNIY zLCVIzb=}An>*d+C*DGn@Q5gX|a@J6WDIxZBOdYI#A`)#N=U+sfT#s(kZ4O`G)CM&J z%JydtE@B;DGJ&rEMO{GD)n0$w?vY=PiW(zkw__TvEqxo_B6Pc%ufEPiz12dDx2Fy@ zwXzOR4P!)V`R1GIO+%=PIP7{g1&%(4-9=Y4Gg+Ns7s=bARJ?Lmy=K-zdh0$w*jnX{ zYwHDd?Aw{5e4DZ)Sq7=BDQb1jZ43$xGu{Db>9&zq%=rxkv7&W2CWE(#?$7`D9XC=@T@8K_wwo6gVG6(}JG zy{+tmybj^38k>+Ng}8iG3MM??s|eH1qS#L|IP&8dhleu9P0MyC2uo?)-MxVW-kQ-W z$&p=IkU@ufVRm=SP@R*KD@62|O`0hvrq+H*!^AXI15ShWg{}d!DzN<^D?KFdX2H6$ z^sTU9efs-vKl{$>k4?pOrQPe-H`}-gW762auV=NRHCak~Ggah*jy$>rM+}n>MZ!P| zP_652-~CqrllL{0?I-GiMyj%OZ@KunQVW(m=>AASiI0`UE{)-3NZ1fzgJXpf9gBOk zyv6DWcoM0O3wi*XO~wne4uume+YFMPjk;~`pn<^qH~iOs^+7$m0BKT%!_bri39pxm z-n$5iBn$Tm`jl1j@UUi^botK|)cJb9l~_rgK@+7>tIGgE2i9Txy;WpkS1eN&i!7IJ zc0Eaq-k!=q+Xbksp{VGGQ#Be3S{0!c>#5=pw@O*(xKdKUu?2wP9Cl=f`BFI8(UtYy zN>n?k-we+kx#um2lslU(57RgVi%aD657zzLF%4IjUYI?9Y#P2Gef*a<^VQ2u3a9AC z`hxtjUbo`ZN#3HVc#~>-0VTys$1U~5Qo}d2@)TjkPk{z~f{X(dVGZQB5v6Xd^E>=% zQWEE2c@R>C>6Z|lPaLvIQwX(y)@lEf(Y-R0>wVT-m)&W59HTulhYU*br!|T2>TZ zv3siFLp|g2Z}ytns`42yvyutr?IqLQ8p}>Dla=Ni9J{#?$Y=@z_+n;%N`GGTHZA-$Jee3VF`^ zU9~ri=DH$qOQppCto<#g*v`ZU7GBr)IF^8q9DWFRj=}~>nXQa`N6&@h*jPnZCJcipYM~%5oF*&i+TyFo zPRpRfRZHa?7V+lYvp=}JYogU+J85ikyALgDN6()TdoH8ui;^*hcKt1w3*=`7T~{BJ z-Z$yb&_V=CG%q$qSUn9wpuNwwRD-$Wk9&rlu=LI z2h&yoRM9+@N9$T_*^Ek1UUL%`@RPiN@ale4L&q`p-i;}RASDiwrB?zL#5c$W236P^0 z-}>O`!wXNo2#af~fsjSx&_Q}4YQ#%;h{NI>ZLGJASX2H73^vPora4~)M!#8h-i@xln2L~w9I=oP( z@aV7~-&VR<5i8-cYK=S%gq^ne2V$`EE}aj@Vvo?Ob((v30VO^v^5StX_47m{9T}n1kzzdA-Nz6cQX}>x2$F+3q|Yg#ZSMckJ^&c^_3p1@w?3MFVB{>v(J2(c&Fi^^4KkNk@xClO#|W!9V); zz??4A2xI#3N@DsFVj1AHqA1x#SvXJKtB7oLY5@dde;WF}ocStb7PQLMQ8;e$KAujJ z^k)vpLHoAFXaeiNNNO$TXCktoiI^k60Qk&uQ*@E{nwZ)(J~Jrf)nSW__b+Z1tm{kP zWDC|Oe|$4vz4WB&N28q-jzmX7xZ4&tML@NrdWO0WO+KT$rV6a+;uG=m}ftsO@_+PJfVkv_?G?W)LToTD2kk$acgC)b$4mj6LH^wzaItT->Yul5Y zM6jRKuo#}xjrltV_xCpo*7YU-rdqJ>pZKr-hqoS^idQ_1&HeBd1{Ub00@rohY_GD4 zllsc1DnOxAAhXy%W*Qc$GOfv9Tx6)aSd51DVdk&^7ExeC(nKFJTjNFUwPOa`;*Ol6 z#hMUAe#MqgVub4qLZar`MV9X|UAABiKk#%44+II0HB!F!w<6e*TEPO>5l@qD;RQc4 zGaxu|s)>}1FqPKIjpQbTs$6Yph5Zk>OB7Dd_^fS+K4#ePbe_0N~IoyN24y(H8?pJUeY*E&^aB(B}B~#@f@;Gjq^mrB*X%Y6$&&Q0}~23112; z4I`Hffr$?bVYK!|Rv}lV?n^;cx1?T*5f-)qTa=S?Fb%-mCRN50EV%+O}RE|4^XGjN_8<{2`E1a!^iBqm~n5h znz~eq5VM--ZwS%@eW?vXui7iraxzu|M~(bZ5Y}Lff=Nnn{)u)ch~ra&R^s>vndda0 zZ?w38szE+^G&8@&U|nf?YWD20X*i_Y`-3k#O&f+7v6>wV2x&bYWyj_?U^H;55*j~J zAxjPJp2sX5cH+~zCe3Mrq06_$)wxNg^&qwihBjKS1g0Oc^2myexGUSp?i$@>aTVES zJ%L&qBI9$>J6Nad3qmx%Nl_pe8-dr2o+dw)s@m9~$(w`*6kO;Kmd!;a5AIimr@WSx z12zo%>`&jfyG>Z4$V5=61Ne>!zQYu-GxwXxgQETA3C+VAT3+iOM6_3N6UDs zJ(YKv$qIp>vHCpUajcW~l0w}aWO>CGZp97>7&2NVHYF}>%UBR>Ow$`yh6cHkj5V4B zYOAP9K$MAL6A*TkEFMJFFy>F61tj0QaOG9c7IS&pCb7oqtca%(--2VkUsAeefMwr6 zBi8fxUi<8aZ$35^uXvIL(;xIJ(Gaum3-K4)v(#7L)Qzf}iDiR&E5nE-Vr{M$@Lw`R z00A68g?xv&-UkH1$`adZ?ilLV{N=-kDEng{Ad`)NJciHr!%js56%Xn6^C)kRN-CRP z#JCNTOih!69sn~K6+}#XBMyD(T@IAk6nL1M-wm*?rm(R4cVBz@=#rLf|cgT zH>1E;u9K)Ga5Khuo^|nISX{Ax(5@a}edEHgKE0W*zTR|899LRUp6EhxQ!b;S^}-{c0o*=&ZN#ZhTAfWfs^**>qkMMxpnfrotLWH3kvjwUPf z(hSM<^r0-((ar`t8r3es5=D=#)8sS5$e7f`D9r2P#>rkk>1`x@{-^K9W@|Ys z_zP?tp;x!06t$PU%|c(*5ERQ8(15`?f_@JqhN1i z3kI7s5?}Vi&q_l6o2}`n;F{0}SuGk$M(URz=#={o=3SY&d2wwS^9Un(t|+VC z@%n1za*;EAmpZ@q@!C_fa<$HE;MuR+KWJAEu)c8?tWW;v_Wt14k;FK4Ml;-FMh~`V zE4(^!#yYEJ_inX1U#qoapp((OAgQse4y08cJ!>W)AKD{eDe~I&PH`af*uz`u+$FH+ zQq{$M?6e&Xx9VY*o4TRtSrC~>)Z2Z{HttjexpmP?^9GbekU?g}a*$N3lDc28BQZ2g zXV}BHeu5JE{14uZCwC2oSi!wT@fUgqS(+MOqq&Oj3*+2jmLM+o*(=U`#NckynTkyb zP&(ByWFC}Wh#158p`k#Fo6A|nPJI>8%(#(TfG~u>WUso3e8|_Rg#4V&`bJAbSEpW3 zY2IJ)DWi7f0L#8%0PFMLdh+bU+t-~RKXHw=zJ|E`7hS*2rA9Zh2}-zqJtU24-;lw` zY6+aX#fRJg03ZNKL_t)>ezB;pje9BI-RWp+ZO#A3_D}$s6Fp?L(R2-S4Jt{V97a&P z^`jV!n`!ZWsA^s>Ayog}*gn$t}A9n{u!>&`&=(5=qpJrDo0iUE%?wq_F9bs%IlkPMFU zMS7y1!Je~Vg-ewUyl>(<%G5{Ole9&i1t6<|#t*c2gt1%WmZrG~d(t3@xb9O%?aBex zH_b(O3vd4#(nGeQeqAb5&{BgPEs_Gjt5@ZMbsh+)tq7+JmWCw6ME~HFXa1&^=DyW? z4YsYSQSapixzGhZ(M&YLC=yw+2@pjY=|!!~iEidTJb!p1A$i9>^hwg}L^Eh&beA)h zX{U#ji~0|CFYIVdRY2h7#tO-k8Z1YHH?^dmGW@%0`0OX?B}_d!tZr%``J$9KInRxB z9iD|=dODya(fG8AScP*%4Gs(2UZ2cY4PfOkJ#Cy7*65X)RDdZ8Af!A8pHnt^8^b@i z!B|pl`<87y3=>TK#PneY8LeV87%B}t4&8;%uo|E+((WTOfHsS&z^n&r>=)OPxXN~9 zI*UBftv0MwI^x8dQ=H^ zuEcCd0T^{qQ+7^>mS&22qTy(w=oIZubrt%u+E~VmEwQd`3RJX`v0S&4lkIsT2V89{-d|=-+!H!l9KPn)x2{U&yY}vGxSidSAyyT_7zlwrwv9o zKxK*V!<|JW(n}=@eBrZYW6(5)DThkR(+I=2X`$3$V<2!&zLNe$)2gm@BA?_XGgQq% zmNy!rf^1Evj0t=BSP%Gug;=Ny`PgD@38HTSubSU~*(F$PCpSo>G%bUQd z`YW?0Hy(D?r;OSSU_CYom45wuZ{ELo)!p$@6NASeSZdd@F+?a;#}? zxRGh#&oXsTd;kYd1ol8={hpRzOxO8F626ubjf=xcr_?>=Sfts&S*$aZ51q&_#Rg~* zW{B3Wp7`uf->)G@;p$&7#=iqLuWPZbjP5vtEEmDs_Vy&OcaHrOX~;m6yv?4%T?x4) zuxP~s0~%N`r&co%E-PhWwVq@+W3->Znz{)K2V)Eb&6b`l-z-?yoSvC|Q;z7k zg|~k_$-TXOwm&Y%pWrGpm?H>f=s|E@>I&tog+Ab_BfM)MOr00KD#L1pc6s=Fz4oRM zsTNKeFls4o$UxV01A+<3xGppN`LqC2g$uT9=D@Yj#yShg6IHsDa$&wDc&F~7)>ci( z^?eJvs$U!8O$Mpnyh)^Y-_$sKiyn|c;=zqObx)_~L00WzXz==Mjx?Bdf?kW8ncp37 zf&oq__(x5|I8CDx{IEdvS0f~3=!EuLSMgD5H3S3*a_M;9q>qYVc3K1e16o~}wPX7f z3OUz>8l)k$z1AIRjb`ev&7Qz&kbjkM-FxuC(Xy=cgiLEnf^&Nt20pHkKdhOmTgNLn zmg4Nm2>Bik-iL^pJ8hUb-`i-r|8>MS@vzCSEnPXlvOD|vW0PQJ7I*g9k8a0by{x3s zEgGzCeg9hc$#OSrn;xpoF*eOpQ5X#UU*y?gx)g(43e6K1D6q3ed192c*m3JQRYm!< zKxXhj_5?6wl>ljD!4y%AxGR&rd+pa1dWuM^56~WV#g*<7b2;j){j>;>AcMMg?-l|# zbl*uw6>KtK3vYO?sU*Y?Gb+BKRlt)p;*dmj;QdEWUcCRh5GNFGLuChDGN@_2GeNS{ z%UacZp`n4MqMXlowwd*M2+QQATCh}qPka+J4K|Z4;nnGTHeK{`dowWC_;%l|S;tyk zq%rxl+)UK&3(eJ2+baL=979%!kik{L7(%Yf9G+u-ra=Y!b}Oo__zy{TmOh0=M*)(-y7LQf}qB z@f4@tP|?(7{LfhgRjmxPT8Z)FB0U#Ze;3P5E}CnfnAe-Rr5y)Agiz>d-CjEWWPUT~ zDpGYcU(s;27H(=v8)}K6Ik~zw!^8k(4o$tQ@oLL7%T85*p;1Suypw@5fZ4cB+!5fW zJe?hM8^u+TVFZL=&ng1F;jm{vdZ*qYb+7*}q@mWu{8?EdM$cZb{LF&me%dlNz}hOV zaX2(?>v?uKD&=TRGwlh#+BQnsuXe3o(gvz7?_RW#j+_0^5d&Sd>I$F=aLO4u;gb%A zjy{`!kU3ZbYA%!}qo_mq6bYuJA zP1x2v$*d3#0cbDgR#rOvYR3muk5cUw2-Ef#9+o2|@k|xiGaTvO>9{yZMrfA4GiSz8 zXMNCZ0_YVMly{7c*+V<92)$kMm$wL$k|j*qC^2k0s1jW4TeGFnSDlSLpp>~+Da+6% z%s9${H^sfE)wRiX!R*w$rI?TI-ngw)Qgf+6XH=Unlry9Iq|n_QMXu0QUVfO{1FKx; zpVrzE+WOu_=fL`Ve*;*LO~4~3x1T*W31()u&*QwLRtjd%>5z^K~| ze0ZAFpC#MhT{}HsS98!=P)Bx%4bE(Aoc7nErBKb0taP5%!((O1H{3=Y1<_4V8~GA` z!!0TBGJuU0-PM_?$M95h+Ecr6A?sw5!+o@yB3v5{W8jRdd1I-y^gRi#(H*~F&_b)B znyoec?8omwR-(2qTd*eC8RwVnh%5Y*c|B5=^)c-c*|8m7>@5>d064WRMH^&1|6OB` zDhJU@HrwHi06v+CLUrhDE%PcqP(61cjkg`kv0vL@R+AWQjVGZf_ExyYIgHly!29-% zhicqgou)8Pwj79>GK0OAYaF)`xu8(iIudmOlkd2fxx1r2mDdK<^5*K4n+59zupZw< z7_a$fzkRb{{U%d6xlWkLbRiRs6!Nc|s!#ltRkiFQx}Pph*G>rOjf19q5}H^QPrWjs?4&h(9*$4CN8tBuXj#_3(er5 zq18S{#^re@JeaBBlf(50893}fbS25O9 zI|-om&j7Dc9z&i)>OFUu-Ud82x46H>U_CYgkDgw*J@P>vpa0ey@%nkr-_lo083iR6 zYl|*2>oCi(99Nu;wN<04rb3cEE^B_EBQ?Ihz39}FV+DkEKsZ;oy-EIDZB?lVsN|ou zv=^OI#bG7w)-|b9&hWHeRw=LgWE0M17kVqY^iw8Dhb1IJ2uWf?akB*N2<&L|TVd!j zoP}Zt7$F2rHFW64<_LKdm@8F_nDa*7=55Dm+G+%eu%|zI`=ZIJZ4c_+u%T>5mJm`x z{x&VhjuP0-8iy2zrxhTX5YuZQPUfqgikTK<4md(HWY{5WXh0Cmz6ReSBNSal(`DG< z0R{jtO~@jk1%tD1fO=gh#Et|!tv?0125ou#WKc^SjWw~^Oz87g+_5-0a&oF)gsXMW z`4_b2;BPN&tT|Q#5#06jG}eDFUVI$!{Lt7nr5nJqM-Rig`3HZ4X%EF{E2ivjHAh`{ z_rb{EQa`Ip^dkna9W)IyS>LuJ&)8W41*IAj8iZOksFaf>22-ANhU`$sMYHpXr|BLJ z7hr<@bJU_My+zupkBrN%b<@VGy-6e2aX>COLNq3f-Z{ZoO+3U=PTPZ^4`P$h8zNHZ z-8@b#EIPwN572;co$5_qzN6}@&({dw_WZ{Vm{kTf3m8|&1_jC()@!IzxL8|f$Iqd*c6!=1 zG(8&7eJiUhT~f&z?-N3NWKl4?)?;q7a~bsvgwmG)xVAP-196Ih&rI8(psxDH{KYd71wi9QM8JAqxDn=mk=mA!tIjAFV+df?!zIyHA$X3x`Ff=O8%SC8TQUX>Ey?SkB zH#9}|MsF}kfC!~vE=C&H1MxXG52rM=$6RvOm(RFhYl&X#X#)#CZvj|#16cOh04rYi z&wuNUMK9p=E(!#qM8)kYpKjs1v54#X@m()>ta#BPz`y3VoSYQmd>(P4kk+Zy?E>H`FG#2 zOZmXE7KOTR!&b8stsI6T#tu<#ng9pJcQjo6&hHs@Kb}+18E;f`(7oXw%9BcT3t4bm03qjR0Y&)ywTK^{l{4K=pa(I3^Gzf(T{sh zaAQbTnwuDKh^+>(qV5)k+x;xFRj9Ts$sn<+3pmz&%ZnE`fOP{{j}5Rs`|T&OZGvy< zzdvoBteIr5o@gxZ_iMv~TS^)?snu&`>i)-qXr*Nf@B!QuN>e0P>v4iAtg6nnOg`zO zrZBIT)GnhcA=Lo*sW?`fm09WBq2mN{dxEzuSC%XO`z34Dz9x zMH8NC3@XLUkq2~PpCQ=uoG>A*+6>-~gqS57^h3ckb4w$l>tJ_C{M;l)P2uMHo)UVw z?{ki}w6P1~ux|Gqki;%P-hR_LoV058hwLaIshUx)!U0xlgocPX_k;%T-vF9zR@PV- zk`>JjpP(b|u+2N^Hr|-Tqr8zCyV}hxolKQi-M6&~Nsa;rMh^rfW%qz00 zw0K8XK&9g5Ibfru`@Ep!(y%M1p5h|_cY`w3DD`ZUjRCC^Xi_{5v>Kz26iuZu0%#8= zfu;B^jVrRViWP88@(>b((u%GYUC(~>R>NPXq`(0Vu>lgaT3%Ft?E~03Soj%7X4esP z8v6z9HbmBc@_k!wCrZbgI<1tO6E>Xk*Plxo?uUWS3<~!)mRu_&*d@$*&_$@^P<}Pa zUFxYNCD62|Nyae*faC zKl8lO4PcpBJfacncEsp!FnLeyzFZqt>bY3DENg3jOtZsSxTPwyx$y66ur{hmRpQda zqPr>!*I$8exz0|j5$mh?@tA5MwOSpdb2RnQ0S5~Q%>-j(3}=&1e`Ucjh?Mkq#@*!b zh{cqKe^DO0x>Vzob}?T_OhFZN#(_h_PEZK43p0|Qgb|zVs{Q1-+Z#j{`iH2qgP#BR z9lN^_f!vc9-3;}ijNP`T55t_CY1j|DOCM(-f78;6QHZWMofJEhk{G={ADjW&ue(eGS$r_fn(?IJM z<25}_=LyRrzRa<&Ywm}3)}0s6{&~Y+*O+bq%gpSt0M`AJyU%}c16aSYbm`y&wN#Zc zNzGSgcETAArODs*C^3KkCH|FO(7Q)y>x)s1R)EvmYEUFxd15uzO-0-sZeC8 z{MKeaqgnXQlvA4&-L=IZ5?l0yBDQjL0drc7wLU%zUBnxA&(~6L)T^7KpVkl=nDTdf zVHQ~^vQ+gvC#-~)GHM_OLGMAqF2S?RZ{>)sP{$Z35LPZ%O+|`EjF>ykcCTS$GGFOXjZG{cSp{hP z1Y5G`#+2AnBxM%ZaDjtAj~?wTI&OS$ja9dwp*DZv ziE~4t)!uY=(5m&>kKRcQd0}7*(q%7njkhJe`QfQpE;1T&XKwBh(|T2(($>cnmP60unzT?DT%zkJe* zt1igK4QfnzMipulhtgi9>6FY6z&6HE0jjzb&#w3NO_$l)KzD?aiFaG0w*ah_ZUD>7 z?Cz1ybH4>({RY#~&($&rSn+0#@7sT@jkG`b__`m;rge%KWNR^S#;GE$dMXR)qWwPR z8XBi7I-Ei{$~-3-R78=jH8BjKMVFFWop&`27`0xfCLx9-)(h(v9Z%qJu|ahaT0?$y z&&j*X1xvI}^j@rp$3J54XqE=>&=q<#-BSWYjf?3*6x(1CxRMl1gQnZF-+KqQE=Y+Q zT0+nsKv#$IO~`W8cQwS7N=bSC0>V;(%CPH8#g$@H%&{9jB31Mqvv!E zZ5+D@icA5YLUSckEM##5SV%X3WoGtRUnKnOcW?f||E@Ic;c_R2+Fv(KHOdK@?7&MF zsw&Icq7EQ9Y`lHKlpSU{ql%-kQx&=_hQ*ZNi_$4|1{GIZb!=5b+w0i_0YG(yHgZC+ zS=RPwjA)k#gCYr~X{w*>Bt&67s*r1Gs({2f-iw);9DLKIwHk)wLVsfLdOvPy@18+f|DtfkB5}*9dLr|ZTc$!1L$5T zk|t`P!d^nGyQfJZivui?@?HssLiDQ6(-yOSfZdvyb=dByEHK>=FXpFP+yK@}H-NR$ zv#;Mvc>mVj)9>C+!20TGz?a?d;C8L!{;`T>mEe3dVkddP}!Z$uXRf|-p7Tx_8ybIZ3-s*rsrl}Aac z3C{Ppv>j&wG-Ai5G!#Z%#?%16Azd2QCh|yQsLMMB>?ZA~IT0Eu!i0B1U%dF2h^Mpd zt4ue5mC5a&zUCI6e)Rg++~O;i7|^=gvGSU$M99gH@|2pYl$B#=y#O5kPGz-!Z%63a zgn)VsnOwei9ACtg>bxOZTVKf78ClonY^FR zO3o6g#ky8`J-ETC(T%S(3Rt3UQA^^cUT7YuR>7Yu%yRk9O4GCqxqVM@cGctBfjTxV zRhnQV+*;|y_b$c^$PU8$%}!HscmxO_M32G>EfuDQu4>52Ip99|buy$-g zZ!r_iaLFLQh!6$9XZzZ}Yn@TUl?XXo;Vyy!ku^3u)O9HtttvCK=THBiU9Q)eZU8IO z-PaDVo_%-&SpQvV_Xg_C{0Ysp@~!o60E^&yHyi{~iMF~{_Dk5LsukqdPK9s~W(6pk zLvu8$LErK{xW<4PtpUJ`n@NBxa;@VB6`bKj;?f!rj`q6(l;!&I%DT ztO+)WB~S8K>WM(1h>fx4N5SS`g(*)!YiKf|N2TQQnxRq$y~VZ~&5E%^K`z~lt`K9# z3z)P=&k#b0lQcG2b{!}=Tyh+M81yu6^Oy;Oe7Y0M#A3h}Wjvus2g<5DYh=1{7X!&F zH+>X%XUy52PGonrXKOVoBO)!A|0)kg$u>kAwj-~eu2K=N3r8z2n8UWG)&beO09`e_ zYglc2T8?fwP0(aq`t6wCW#g$CR5R@t=N&L0o%dG=jfyea&$aSR(}ZC~7Tf~J zGjn3699U?V4kLDGOdZ0BW(x5`k!0mRqsBz|E!ck}n?1ZJ;eFlV0&OpCd21|8| z7-iv?mVEgK+nE&*LDiE7WQ*m+81P#bHBt466`+syAT)*R5n8dq2r|&1zxe1)6Y#-$ zh(*Su^?di4&g6hW6{N?1@P(fy(LDQ#0-y5%GU$@#6Tqb$AyUNie^xFyrw9CiiPr6y zhUz1$4`k4a8=R8iH7~61wYukhT@kS<+D?CEp9N-N@+DB#;5cQhO31KLL_-TA;}`WUZB(=q>rZR7an%skPGd`F9|im32C$HB04tN*r*6OgI$OM1u)bRAArmp~ zti+YnC97@M%oel^@V!6g&8)80ubAuK%2H@=MBHo6WsOKZ*Wg6QF~Kk7U;!30k>pfl z!AFEyl|^k=my$R}T;GiBnv2Ie2b4&)ax+f}f2BwyQByThU? zCL_@IrronpNbs*wr4fF$!9nlV5o`~zt}0zX2>R^Bhp!uz8FlOY#?A&Kyb~mk0z-kn z2PA@PO+};dCy1nr#XQbTj8DoB9@2n9(_0Qoor~;p3RaP2G1$c*OJ#Ut z7!9;eu_3rDyQ31tUJA4FDf8>MVC!L9JrjRX$3cw;lznX&X_=8%iX6*v5#}~x$PcbY zBNg7%>X2)mQQ)c!LbYhgy(H!;0kU)XdyzwRO0b+hR31VW`9w)(<{Iu}xrG-1T3;_d z5^_QPU|1CXY`xc2^HRjF?N=BLm9KeN+<)*!yv|-TX~RW$eCr{)YtOW&+Lfxuf-+S0 z#5kHGAJj7x4B)s;=@uegf+c`Z7cgyUSy6Q6wys5UZd-7nx(G{TDn0>yC8@qebJn~Y zw008^YI6*GtqSyV+kn8bj?Fnqxvn_J6&TjBECFhoJsiV(3HXwcsR)F<%5gsXaLtFw zs-S@HM!fWmeM z3MEv3lX7DSjs=M{Ebi)+$hsWNh&*>tyPShVlA~`Ic#$BsP|h6nKs+rQ697Ruf@P0h z9kQXR!eLTTYQ3mIRGLz%9NM{H2`O)qj94h`{=+8_jt;XLrw~oZ&@k!p*gD^q|0#6r z8DUNdQaVa?J+=hWj$l1CbuEsfAZQ=?<%i`hrCm}N&T1%@on~2{;xyf%nI_x-03ZNK zL_t(^5bMCJIxAyN_DJDeI`aN}J0NHs={YoFtv1NztjA}SilTtKX*I^efJ%GmG4^;7 z(fMrbXN`ne?X6gdg_7#Qn%U~WQY;qIpSJ)kO*ep5>F#R`!+QR~YY*);Zt1}k_}on{ zyC;}+>5lW~wgk&^*Vg}1^=4d)FPmOEa6vi6Nqm-oruY(ifKJBl(fKH73t4MrXfV?- z3FtusCz@O6hQdN>OL}DJ_UkPm=TcdP15`Z-JqV2JwjV?ND+5JS(bl!9^Ph$&-1^sD z!kS@XLB&KI%<0niX91~LR>trd{KR2(5Tmr-(1VbfcV2w-hOp1E?cx(-FBl)~*r?H} z)CawE46_&Sm=q)CD(H{u3*ZV~W$)}011v{ARxshh{1BzI0vIh7UYdj5czEtuHAwd& z$5b%s!gEe@#U1=_U!F*qLjr|u*qKNBnGCLAF1)}oDOAwk-GXh~a9|ZZ3PL$($Aal* zai3=au3`54X2Ftl16Y;ZerERk>uKv2fc4c9*VzhP-}5l10Y!DYln))%6_@H2EMcO} zE|{tO!inu+#5HiAL|Sd=#Nf(Y47g$Yihch~r8J=;77JY6rM@(9`Q_MlDjITMv=DzR z*6v&kFG7u13x0HlLWMC2Wjjb!MJ>@Xa`b~2)*Lhkk3+CB6{wtH^(yYtFg2uv zK?Adi3?qecjJ2M4F{YMdJlJhq)k z+i7&;XsLIZ9Cx@I1a&A9R@kz&$=ceJ2D)8@U@}rwMo0FW9HdCj94sSc7`$9h3Bje$ z@TeSu{2PbbbSN0*Gax!dQPZT)$KWcWy@{7PQE?WgfgHJ*o#FN!X6=B~6TQWx1LMlf z?~)=ni~FayBStmd0G6h>v#)7z+yK^BOEg&#)*L+r&ZV=10JD=e@_aWt`qMkLMO^kH zY#y!+E8yP>px}-iKxF0Xik-^4wHrO}f@;EJuCJwybQgPe#+mGztuOgzI8U;mt&Ov{ ziFL~70fi*E2Ex&on242ogLzZ*mIL__1VNcm@3A>ypd2p3{;DF4Hvw0OS9M^>frQ-F zU`T8u?Qf!mvi4olLWl{$IRGfB`;X>PSRCWRWq~CaL=GvSk97#ih?pI1#s2AbkMdzp z6H7}34`G(UA%%LqxV=QP5labX;UE!9Do_y-(t~x#=q9kj8Tn9@Y2!K3wka6sw z7xqXfEG#m|GX6>Mm;hGfm=>mHhjng+NJ_8aKApm0f~&er#GdVFQ&FwTZcPQL27r9N z4D{mpe>J<`o4eX{16VD6ZDCk9fc5ec-qEY2Q-JkBe~;3PP8}gcdC3d zA-RdVYE{=3cmUi$Bfs}KnoAU|n`uC?O&XNtVP#PhUf;B4h9aAq!^XNUSE6c6x}Xd{ z*c{Ilzw0>5AaSP`m{}@Xo+gcG<-Kd=s(*>zD@?6?T4D>Dj?@m4ppl7e^s!TDbt~xpgkZKv{UUmIZ6|( zr&jNEa(p)&7FL4z>|Vk*0XNg+kWihAlBLBfl6&tc}J ztlGekl9-rQ$EoDg+EMhuqUP<|-elKsQ-)O~4kM2Ahc%>yd6*e*{=t!M0IQ|14`AI6 z!TPG{0f&e|nYKLY;Imp2S6#$UCMyy((OS(fX$19GUZi%C4LcSniE54n3uQa>^0`Y! zw!Z9PaU`l!Ku~os589GCm#qyxO*7-U4;#%3ufVtjRqIw+A`y%wPVydxCA3o;uNFJd zfOt?d%}SQGnG`8>J1T?@5Oh)4tRkZ}2wdU_(l79%4uepSG~gd;@s!}MYyoLfWNt4$ zs_&E5AYjN;!x9%qU2P56VTN~5%M=9u1)JYH-PCT1G4L&yfN;fHXGa;^ z7UHu+;Cy*dVbB-31(gr|&&F&WCab>ZDB*R&A^;ZGNL4G^);qESG_tDM#xq8K?rNk_ z${Kj671AbjF$iPm6-&`S*si_Siml?oNwHMIakpE9`<8A1tED^p=>yBwZ!p~~SYItQ z#oSF(D?ypIGIIl3xf^1j`f4hODs)@Zk0JJ>B|<1H<%Jkjos-)V@}q7Z)<@nY+7>tv;kCo$}kyLfk< zhNXa*#mx5J8VH<#Dg+8(w4uSGU9p&;kR|H8Mbk!W61jkb3yg4q=b&G{N;k>O3p zT-j9E$Pvo1NE&omd`M5hRZXRdP2+Y(!$>!PHPSP;k6(5hFW$PlfAc2! zFO>#-(Eu##E8t=KyJ}GUBq(at&bXX{L25FgD@u{pM%x2+tPOq@VyNE|QH8(RVp9+9 z3(C05D_Dcg6WZIOTz!7muN8E{y0Ywfy4VQtv{m>6H7>U)<52U@fke*^l zI$Xe$0S*=xIt>W$lw2LveBbDo@)Z+T4i*VQZ$~Ory@la`2ZH5`KNs0)oV!?3sM7@- zK@L#d-Ha!X1u$CUd6;lKp=YBX{!BHHXdlYdkeQ^i2B9+igCsoBX@j?m}0F zdTZpj1GomWPD$Z=_gp82qQMfQ8E0!1RaFX;25nZeoq!z2I7B{oIBNXjQg-HF(Usoh zWDWE#J%y_egS85_R!msyErkE#`A;LBT@v7Rrkk3d>CXP!%WmR!#ORkyzI|Wp3?PnM zQh8j9g<=LE2bZU2vXr9iAqpxp#;~aAQ|HpXkx^T~tO$q)3e?IR)%VYUg9~HrvH)HT z#3!vPSP83PkPyicfEukfVTCZywRS3gZKB&;mL6TJ_(6w7=dvlBelBawY^4H-I^63n z((#MkAU>+x!9}QOWK^mHNWMai+B93MHx(Wu$_%e*g<05(kDjbeM0xY3KdDzH7dm*O z7l;z$_~k4t5U`ADSz-^vYp@`Cke87dhXS_}Pa{91N)lXtx0BoMV%qWy;H4}#VO>ba z<)&U5@WPsH_RDHwoM!N#8>J6Crp*xe2r5diyE8V?N|FsBJMuOb+M6ZXMBWcfPn*zr zNHbcsyqnT^{`_XXn&}3xW^#M!qvRHV^(B)U24-ZHY7V@DZrec#uDf2TxBg01ngI*p z0mLX7!=h$=tCu;fsp1%mKGr&9Dd1z)*Gk%FtZ%_tn*a}W63zuTm3LFy^xv(uHpppN zSd1z>5gvfVQWFISxaXxc5d55dm#SUVNJf<8Lu4=&0Fo@xg&@HMOAu~xD3$|}yz3T! zzF>v_V!%gH&|6o)nxT-=F&euT_CBJ_?8QfK@FfA%?;U2%q#Cvxq%7s&gUBq!T>(ca z?x)0bToDh-Z-@rH4rfzHU4kJXw^mR8RTt5Y_RWDi*yu7DVFRt%K5dNvu8+S_bLhQX zHe^k}9Hx^LjF(rn25+=(>R8k1%thCyr!}4P*f5DFJ}BE^j2qj4@h)Ls7clHeiJp1V z`>5kU;U4Mv)BnqEsizyjn(5A7`irKw0IV;ch^`JHQ0t#&gm1~ALP{$_U#@U#C&D>sm_++X~blGLmW$6Zf41jBStct=CMY^2! z$px6{@{>Zx9n2dq+SDiIE;Na@ZhMGMP|c2Q(=v%;U7h$1yh$lFW^=e)*nkyBTnP$= z^eJ8MI@DT(twqYA0W~i%wt^0@Aaq0aQOf#+xb%pHJI5;0eSun$3)4WI`XMnTB zsg83m*x&`tTx9D{eF0?{pN1XlG8CK8?s$~lX%j_Q*oIn-8exZ1qO6u3_KeVD0G!unx)X zzr57?pMUV$ORfLaNNOv(WHeG}btf8NEY16>+LXLPF7ZUTtXI0exWrvuOxVWKa?zAr zUm}+(!UEmv==YW}q?v+3pXKwT?JBB%-}R|u1;*aGNjsNc{)hyQY`keBFHay4-HfH9 zRp8F=xLgy~DrL?Oy%84<7jTCHs*YXCOe6}EfdGth#E=<>)v4)oTBo`QRUJEuxrtk_ z2wi=&-d8AV#1hww@4S&fEoBi}b9EwQsc1mOi+zH*{DXlbm>yOfO48N8I{J7f0gxEv zI<%Y*AKn0PEN{D`CS~#6YZI4}_YB0VqfV_5>j^<|qaBTlW!5lJ9lb5cCZrsIIsVaS zx=Kau8S({CMxz0{56E9)yNqIOLN^~5H5u@;BmyCD;SjGt4xVRE|IdpJUvatttV6o9 zmwTAU{Tny2Ka|wF#5?*kIKySFycf4k6buMv3#%>cd>u*jy0a4cs5)&5`|3U`1E^ZN zzudxtYBNjoMpcQJ3!;*0t1(EJlBlsM{Uq7J2eCreCJs%i_6%w6AwQHekK9nTMET=? zE7XN9jxC8=C&ntZRD2Wv0l%?6Ht)0`lwzy$LvxhG__DgQnvO<_FOC!O8EsrC#8G?$ z=sJm5BUL-j%);aTHQ%Z%!5j&*9U-l89;$x9CE*?S4BB3lS*1F;zyyP)rH2;b1Re4n zq=$DRqYCSjuF%~Dmp!@G2RqD=8PH!?C4i&w*9a8PTny@*s4-yPNqOE!^}rxubwY3( z6%5W2hz44trl%Y1%F0KeO&2*okVcUE1<`QP>~!m}(@rJsGqZ?W0M;?xH2opDeeCwD zmskJ&8<%$(SDzHPjBCwSp{D!-hHk1@o8({5Otxa{fo4bpc;GV{Vs~lUC}NsqgfeBO zIRk17t!U1@x89^t3^H!4a7-=ZjP=nbvb4Cm+9&PMd{Iqx>i-{mZ`y51Zd-{0C#yplf|Nk{_=w7Sa?zY>bY|ECc$&#niP*pkHn|bj*5PM?-1P2fV zflYwH=vr1dNnPt=XavyU`33>|0(wgTP&t&3*@1&o0hX?~;VpBslR7?t6O**4R^XOs z%{CX&XsQm(tk?0Ri=dgKCkDLe_yL{V8)apdySY6vWR5_Y&?v%8b|#^ASJp{8q&QGX zfjSHu_q55wPVvSyAFQdF!A_A!F|%2ba%5RmVl{I0cV_A|ZWKq1n}f(*lEN@3^u3UN^5`?br9gmbt1u5q*zilc?T>=KB0c=-I)tKZr!ZRrNE&gs2I z3FDI+z`B}VXF=97_mF`q*;3gOSqRCnr}Tjn{|Lex@yaUF2%-h%KWe9NSU@>-as^6< zTr)H9f^bC}s!zRe6`VRgbZB*|s&7b1ThnssE$h5eBTlOfJ~#eH9^_q)nX%v2eHeyd z^N9~orGUcLd{G`*yMae5+6Xg|{0=G1)x7Rd;bs&EtwhI!S%weh2;aEfYT>YgdN7)6 zk8|e8dX%9>D97646KZC)cr?x>#vD2w+CoxI4)qPOCctz~g%vM|79@5}M8z;P2QI_r z;1v#Q?Zfv_Rc#E=iQN6JZI#gP9}sRwk*(DDJ6h?fFOF)&-K1(Aim=6&4o4v991`ms zaB#fM%bHt`MWH@d+FBgAuNC%~V8{trNk9Jz%es!KhYiHS3s zONI}0T03rXc8U$SlEUyuQKsr!`n`Gn+sMu(%{=+)L;z?R0SY$Z6S zbRRkaoASV{CoG&zhX0Gwv_%Z}Gu%x&f?ndVhyC+}u}R zng)(JLnXV4hvv$)@4Gr;w}N!C2dLwWMjK1DN(>8HS|C|5*Oo3fQHF_!`og}{Xe!Jq z`k3$x#DJFBCnwDfFVNhVk3e_i2xt%{=vMlutZs~Y^cwa`ps_(1J5jx17J`iBLCo45 z;09P~;kQbijm=fO=#PWS2RM}7+{2w6JDYts*~#q!`;ib^C_+gwqLKepm4_R3WaQ@;6kJtyFc3 z;WhV&4|JtQgqVOBPw-RTV7485xgqYx?s_xWu9b>P=DSqvGBxwUOxWjE0I&f>I0+O~ zlb@PK2aEY?A6TZkQKs6+U+lhfoR784mv}%zx(WnDHh4V-T{sa+Ary>j;6+0AEkWuh zmtCw{m+_Z=P#-+vYi+JRR65ceV*(&Gmu^&i-guphD6lo!r&;#%Y3 z_Bt9e_6pNm)dmg5rNv-hv|m+WHc?;xDgUCoxxc*s_3eO$Yv~5Ct|os!QNr6RgnL3L z#OC&<&3jZ@xGzR0-Wto+{rnp!G45w4EZgy!Qn=IB*TdA~K9`94+iB=3bE7_xWX5hW8~7~Zx}UB~wH?0G7aw0vnFpp9I}0mV zj~)L6KP=pys3-R$O#4sNyoXJPs~7qc*2ID-{0PspD9Ii*J?EjSRC(Wt}@%2sg%}1U#MqBE4hqMm zTfr|Zk=x|8u3b)Sz}OV}7FGlwohq2D2@n%@`1P5gDLWJNu7~0GSw{lpHvl>Lrj-;XtCrll-=Z53etx4#E;cV4-*S8$w$B%BWzRP zJy<27CuFX;1gB=z^6{m2Wey-4R8K@TC9fK&Ot!H*S?Gd9zzD=?LPptQN^oc&z12A{ z^1%9@g=lrjt6KD}^HYE}@xa}N&k7%)eh73$^Jj{hwP?HCuPWQ5f@}(b=F}6-8!M_p z#KMezYnR8~iJ4-lB(G*`4z?I{XOr`1A>C@Q_$)EjF~45ExVf($OE+WxSb85(!dr+? zQ;RF%j%KI@upDCEd`nW-D6YD_TV%WhBpH+djZ_Y&T35Dkd(b*yl{*y?F^Zd6Z5IvI z%2w;kwZJ^uLWc#L%hSwAbds1(FpU6~b$WOyQ%6~i!4O=PpKkI&*#Y~$?*=13cMoMV zmgV%&;9xZ!`lIYq+A?+cnU?89N5sX;ZwWpnmQ{pnMqAv_9taisXth%q3e#3Zb&YQF zyta!SA~?1}gvxRO1Szfq34+m{?ms7GLU+i;a9z~1&H(gqHnlG4jCDA`YJ{U_m8(OX zUH%^CxQu~zLAj&Aqv-^K1Hvqoag`yt*(&D@Sr1Xe?1Nq7(g{knP9%vSzT&OiMNn#C zlWH$#l$B4u8d|-NKCFqqW3Zr}){UjCR5~=$dfR~Yc)9_s$I``qZT9lr)_DsNGQq!c z1)*Y$;R~F4-De5IUJ>Uim1Ty>5gGq;AWm-cCi%o=Tlwx>lyWGwsq2w;KYa7;S-t7!26;b^Zu~Jagk+NZ? zD`6bWYTU;*H&)B(5~Bu3*P9#*%07X&3gOI4zk#~O3n(>Bq$;QC zf!qcrX7ZVy#T@3Bw+&d2ryIa}JiWTuuikBqHxCxma2k!LYd$yBwXHsR;rP@b*T1tW zgOL~Y{fH932CZ7tJzOxhUxb1#flb~k$bd*xg)Gns;=kDo{*@R=duLEDrWJ{46^H-@ zFgVq}_j=gJ%Btr}o%xn0XD*T)z>fH?`j%~pA=20EXsCdezz|bxckptI1p8Pk{=yJK zG!DR|sKPZ^Qbssob&xmuBQTkc0=W)KuaXeKC4$~9?rbScN4;)JV|~%Jt>O|&|(!!h1rKtYP`^LOMd6M#ymndrDm+XcL-5Tv@+ zcEV7EFHNO_)JD~dgdIMH1-~B*ayywg`{062pJ@A^n%h9 zwQ0vLTeMVxCN{in8|)hAT>q9!(if8>BJ2}>i?BvS|LRjWEIkBp9iioh2zx!vA-5L? zoG0~$lRF?cA=qOOO5m4dj<~he^t_hX)PCO@z&X9na($h~{L&9*Y%(7eIdcM17rL6~ zP6W3m1OP|Bwg&+X7BP8wOfeLtXW(GplR`=?UeSFkI2YHOQ!0e8inWI<*&gXHkD?xN})Tw zt`ZM=x)-Pcg4%~8sK`?NMO7q5gPK}HCoIN>sZ2Y&42+qU_0s!79|m#4ioH_nt|Ch- zuMQ}grR56^rte4y>sr3f3F@65GRH$x_Ln6*lfC~|+(X+iQ`?%(gI4Beji3dK-XIcTQW>=rdTntQ=lM3lr^hI)oOHxuyD+M z5T`7SND#by(Q)_kwgKzQ(hXpJX?n*|!dr-NrI7SErg17VXY9Y}oYDnwO{qTFGqlRP zmUnCmTO_F;%g5i;i>}JM$JDs~Yo_oRKrw+^ary}Z=K6||FjG5JaK{ETu{7@k#CU&0 z^P$%CW9feYKgBm{`9Pn2lpNh1*D^XVLTSo6mzOv=4rL&_F5Wg4Rn$+v=BCyz1WzD* zx1qy;-6sj?ptY!QZF3RyR}Iyedx@6G)?=cy)x91fR8FZm3}ut%4EZO_ECc9mUWD;A zK%G(a)rk-{jIeNga=vhO`J1~ij$0!`x)8Gpbv1RERr6iuqfQV-OH>rocO^AfyFGc! zh0?A)i9RMpOn{Rrm{R6DSuwh|p@+d$6-0*$9ewq;+x zZW@ynCTQ6l01jP0+S_3UROc`i!xoxhg?c!EFey@`Lf?$nUs23bXmfl7P3rQKUAGf$ z_^x9U&)Pk_T5g&Tjw81x?pQvP=4aO)F~cCo|hC!BJ9E-)?dZVLSGXn!XAU~ z+e|dc_?t!AFlfYi*AE<;@pqq-sU>BYs_%|?yP3J)zxcX`x0E7qcdJYq5y? zG{gMNqSUH=F@)h7bZBG`v*=D}k~jt+wRgeo5RDyMm&Rj46WtIt+D21kc(ajp9Woq+ zaT5e^Wa(!zN&^c-(QIbelb*bimQbKuIJlkIQ!#~-6T--Fjx^k@AFLGEUPd%V1Sji; z+yvNe7V*)O4Ot0$tq^%(SA~Dh2Td#-Pn=y6*eo4)t*9=-Ot!ZV=}>EZb^jt>_;-wC z2|0yR)(WGMn$dz2fDWVnp%Zoe?Q>&F;PEHs6spP@w5~CUw>}C|DOKSt;`@*;Zc&IR zvQejgoH64*H&xQCa3tt&pef6{+}j`=_#kIBSN!3C+9ks$U z4&%ZvouAFv&$`9BlqX4>fi<89h?Rucl29kZMwml#3|R5lQQhg)`bDRuc1j{JMzUO= zk1hEd-wKzRnfv|2(XMJMG0G8^qGv{^Y&Ow=AkV_lDBA&`WG`3+Yzhox{lKv9+SG-| zJlfa2>NCl9zE+yXEM|A4WJ6lB>v`?HETBBbw8>8|>NU>Fz!aP@yC)n^gu@;MUvvTV zIXP}k#)`5w7eX549{H6)0ZiV=>_<1ZH$6qg+~57wZt=m_NH>7>TIn4|2`~2#@2aYA zUD~}?E1gjn9p!!3Ma};R1bED9+fb|5@HCh6+^4mXA-)&4nt4aK&jG63Oagx)=ZPymC4{maONh^jE}6b>sXDjy zUZA17dzmC7fKCJB@O$;ce3nF^nfvrM*_f0mSBn zz-g;FSdFT_%d4t!Ic3A|9)tjK*>%!Vz!Y3hIE4;+{qWPqBppCZvSN6??!YfoIYyyk z40D!;Au;fh`ZG)Qs3e}0P(zE-*ctk+5x z`&YBOcT?5fuG_vZX#@^*+mmsg<8Ij&LZZI9T28BYiXxdusQ zG=99M<}2J6X?+X97=VgH3EKEVi>vZ>OD_Ou2l9f4SWqe$K3xzW}c#=+6H`Rc$-vpou z*jEkB!hvxaLfza~3j5}^DO$l?hJj)7q38~LGReTz2#yX`Uqnn2Yyme(qoHF*Y6YKV zKQ}-nbYHpS+%72&&ghUx+xD%Vz*O~`0@9`G82df1ui~n%qEcuWD5RDW1~thU^$c{W zQka}*8T-;EmsmC9Wa8UD{x8vdY{oOC^mR=*>0M=`! zcNQh|`|l~h8ZIKeZf0{B8>qAeJ&ZZIH%k{-Twe1&8+BKF2F*BKEYr27SAivJQl&U+ zwQ@0jdRa`6;SOC>22DEF|J0ypv)*AG*vadABl#CFi&h8aQb!Y6sJ#>v8)h2LbJ5xx ze;(VWCfTZ@WlW_xXA5F)TzW5l4F`MWMa5yGq_Z<7BA5XZXmx9n&A$Yr)f9!V@LhHR z!XRO;g{o=Z2DUcVupyrH)9)U9-b*GntV(QNc*48&?;WIx*6=Fm6Nws-rcVkvr|sa4 zV}}HDu5Qcon&avq`Et2ZSR(`(R!2ebglb3YdOZj)c&IOsIZUyL7gpU-X(v}OpSP;xnETOr7@e{M}Zye^0(hXp} zZhBWy!tZT}P@O~dMz^dc)A}*$!GijgRY4)vfBT?282pApOcOkdMq6_qL@pY2vtE!?^JNlQ(M>2Yhhs(9i=;RngV~AhPndZy%X5Q?r9xhxMZX zQdfpUU6Gguk`Edpb^)Vjv{q9CQN0Eq>s1?F&GtKYFMd1;x}_`W2C!Z?UF=`YUc7^P zzLy>>Dn4SGcK^6$Vp-}LI*Xv5{G>fb!*CUyY{5nkTg;nf)kBLh4`Vk_hy`Lww|CQ# zZZp9hyIpalRU9^5zl1|4-6&m1E7i4z+z=)#f*c0cO>ylooe$MdP&5f9+4OSpVUC*E z5&|Am)~v{ppa2tMHw+?1LO1-9JYCicaw>vd5QrChO59rS!~_<8gVSS0X9g=kX19f2 z6?CRnayQ2^OiiT1vc?7awO|tq4M{--3oPBZJ;&9@?NGp?Ai2}j9W-?>FvJxX7WBH$ z!yR%J9+IEHeO-G_bDQU&9khY+R6pRdqbd!&w#EYNxH%wXM6-|x;$;lZYWWsm1 zHvCf{c8%k5sDM;CfD1*!r6CPH(56@oS{fphw>!lmOdi@mdBue-_3=z(_ z+va9B9_bnFY`~#m9R@s$Y?{1rw)_kS8c4~0zu~#s6w^1AHWxse4FxSUZ?0KA(Lg!y zlp%?N+{bRM?Ynhl*SjqT35i|2b-`eNG`<6f0~d_dqXsIM#Q_=?xX{=}UmAN~<1?4T z&0v}ETcB7yq3Rc)v;jWuxaZwM4;pnbH;acjI5%)Bhe}`hU)@SMaI)lp2F>6Th5d`; z7oClGZexUTlY4czEVY_LQb44#Z7{0lb`&I2M5V+k(yC)Em|si9*4{a6h?X+v&`!`N%(t-G1sz4)hFeDL+t4Pd=NdSXBO>XlsX zzIW33$k7Z$7y~@?_i}O}iO2Rg&_Oc%dFb*5-4GUbEn;(a#2PCO8r{dyN~b62fy^ zSf_lt*P=axWpXxO_5lJm9alXemTDu^sJ;(?!a9Sklj!F5fG8^MsR8HgTtau?gk180 zP~*Ux=(#xn)&aU%Azi?|3N7KEW;fTBt2`*_toXoi{-?NPGQUFwX<~Z_uu)%hPRUE3 z?%AS`+2j;rb|3^RWhM&w6b2dhzh(V<^a=#sMNFuLmwB-G29q(?LfTUP*@qB z8f4_>Kj-~2qW_&hfxFZ6n2EhmE1#}Ge4MewP^@#}AM=gBAQ@m-m;E)OMUOgHEKRRC zXUX=CA0j*G_YYo`i%|rk3zGrMJJa+Q2RhrkB{eX#laU=w*>iexNO>Q~t;r&*vNRN5 z({sWjlfhti?J9xVE-|gE2g(TiYoXw%4KQBb;~VI%s%aA(d86H6&r@3v)~fskao{Ol zO#E*0NdQY}B8kD;8ulI4MU7q2-e1(^Fc}BF^YG!-?_S>D;)8FHZUF1e(#5{&_rt%3 zd$1JF6v|0!2H-#k!XExVY2La}__d0MXq zZ!80sQdIvFV1Z-+Gz&XmP_Y_(8WS2iFDos-P=khz#G`E61jF2U0RqR4W{5L*Xu#GO?zkUYci^ zKt^7xYr?lqPt?;mZ*s4~1rfZeAYvm{=sm4USfFKWqZWLO*;$Aa|D14sQ34n-y5Xir zqHq>p0Yh3nr_>3Ecri!)SO-}LL!_&oROL8{w{K0z+=E|z;{l;cjn`wLjQ3KkBCj-h z-(cv06Hp6sg9-%bx2En10SoGy15#I=8gDORuRAZE{b(cZmL5wtfc0kSVn4mIWP9xz zzJDP?Gg=+Fg9nayfdZqZwKk`h*dk=xyi+DB##P;HNimF*E_>F##d8ZR$qec)1vXJ!o9XV24yw>{s5eVikl1xAPeKtL{PL^D zpn)x`uj(|N0WhJhIcs*zl{_ZdZQW297Q}@JTtQ*ixy{Vb0pe~MwalW^%tju%vuk#u zSlNqQR(MeZNI{R1Vmc>M5nfb11d3td7iXhm14<#k{Nuzi)l2hXV*1M5RVrP)ZprL| zi<#3&A~NV!x#*l$JGbz7)aU0;IW1fcbAfov#Am^i97K$-AY-z^ ztMfkSo%2h7X{DU(IcdG1L|}bo+lr|AzN-r=3a-j_3W}84EugYR9_mz$$qXj}$mU8L zFCY*_S`oBbf@q*GIN@VEd*y(jIF?wg=*D)-N-C3zDwiJ(cIw4Yw)`ddbzR@z{qw`a z(~Y=WdMw=l)*Gj<7$yAvoaBBj5=Us#R&<={W4&04qb+<7s(l3M>Y=vd`pS|*z)=|% z=w(?{L1(ovS+dzVpQmYe*_suGH~3%<8c(jgvOn1{s90-ZedwU@7FTWQd!XtKJYAaXdxwvW&v!T&65YRnU&2-li+9jV?8~Oh!KS%7POMQ)lgcv} zGQaa-ky@}x*%eKe3TuMPmctQsOv9{(0M83H6AK;1+R;;DL3PBojK#67!9^%PRB&u> zz@mM@qmJsWe4IpFFmorJNQ-`~y;{{0G8c->n7SfyuIc9PLR)^qZ-yCSTZ%$I#5+}~ z6EJI6PtnMUpUMFzXRAa}xq{<;EVAawPm~Mg5dZ~EnZ+iybPHQoLz1N%jlX=+_l|zku>xy zYjs{E!SHNVHzo`XVuf`h5U||As@2XCz%20yy2*E}du&?2d8g5jIUvO-H*@bY-w!;Q&fPxH6FZZup3`l{5ajROiyxhdyQN3d4Pd=Zy4X*? zinM*VUnC41C9sF##8h;*4D4?7ibUy37)y0%Dm;%mzX0`biF<}xBed^nP#H>a$D85J zQJ&@*Nrwbh+Un0BAsk%k9Sig|z30W_vD8?YGEHrG4flXb%bd_sru40`5=pH)3%w1) zizrVSzXE)|B%}>n)b>L1aTQ32!x?kITZ9e#;_%qM4=qu&*MAs&QnP~{Y+l0B263gb z+3asgL*cmdhVC{H$k^_TF{r<%vY@p7#u_a3S1DfB+O99RDx-T!Q~FtJP%v$48Wjo( z!A7f{B8Qu>sx_+-5uRZ`T#npMtT2wNAkxU!ItI%s4~DRDH#DzQut#jwi4|cMch7Fy z+utVL0M^?ix2G5T_1hQ!u78fOUc>Hb>SUOGF5WgP0Gq>_&327!%U%LP*`~6N&`L>y zK3OlFH8iMdv7@mT7MwH**+2-0y0wN2SoNaHp@1Q*c7lc$%gN(jUaE3U25&X7X*OOj0hs1A2$8f0JZLn8QEpO06Ckap0TkL)Jm@Xu0lD}? z{9u;j9u6Go=Mdr{O>8uyur=|OpktN3|5Q&E*J-^fL!V-+-!a((vbFLQLh8Qu(RvWI zfZbFejpI#e72`wrOBh6$-t-9Pg&fep$q0W~n-$j{9ao2Ex+w?qnb2yOhd`l*mU@Nh7Kmu-wP&NFrF&e4 zHlwjDEsA?M&4{+!5?*AiO=~QTn>P-AdqN7`#YHs=+p*J+(qU$oi+Abb-Z- zb&G3sP6*xkp&LR)VcB&#Zy2YBVK>_@V_3N4WyC8v+Kntrqt0#BJ0EoL%a(WCS@Vi5 zgpLNf%reT2gNZ(+%r%&!u{;61)y+{H_gyknw(C{xNUKQL=I9WRRYV+(h0ckSH#iJ* zYFgLWdtOylizL6P5JhJ44V;w2HTFUQn|6^k^ivdsOe>APLtme9s+pPHJ-=;lf6H_O zSZ|pw_A9q%Z&&u?-@kmf#C+{(8tkK!DOXqW(J@z5QUyab-nM_MTqvSpeLy#%geI^q zt`NWUpPFAHs_t&lHTvc-3R?TJ%8jsGU(Qfhhcd0ZJ{h$bSie<6AFi5xXgkNXxdf_f zBlBqlX*9*y5hlX3zzVqnW=Z+c>QEw)+0|*~E$7jLwfjLJW`(_&v$p+cS(lv4KZo0) zzBd|i7`#K&5^__r)X3|0*Wv%et;_H3d|1a`ciHm;(rOrM&;{76M34vcRtlh0`#tuc zZ*LK5#{`vd*ftn+CF%U4ghh3n{qBb%TnANEgafM_sDHu?p}SgML5d_-6J8v0R&7*^ z6UyVRPL+hW0&j-4Sn^d1h8|<>vtg!(hcE75{OtJXmcBII0M=Wl zxY$qLuH<(QV6BuW=SqAqIO`FSX(2Xxm}s7XimdBgM!^EclggwUVl%Uc(@_x*O&6CB zY9Y45ZBU@i^!wR^vZeAnSW|6PQ_nr&j$Ej+tkNxz$(wTBTp6Ig!#*6FM1PgI9Qd-* z=oA>w)>=GIpVwDsjMqDQHMV&Y`V?(7gID2Rj;%l=h1IOgd?8Rrd`f5PHB?NC{T0*+DlX!tJPjv+TE3Pt{<1qeqYlD z7G;R=ZG?9DE1xx1e%a!p;=IE(;(dz`8{bw?yMz_(DmSdKPv?@Y=^p{(&yPeaCQ_0rZ+rnF0ilYV#E4cTjGl~XbsD|FB&=n@3HHw6-LfC3FHZLft6TYjU>am8ze!$e014z?x&YXtOH3yJ5V>l$du z^)w8x!Bd~6u@96J?8s_O+W@?5J67n$Pw&B0m*^8n0@502BpHw!q4MShxF_mM%$V9z zL9N@zA{a+{>2})Dr{>$@BdaJXbm3Wiz5WI`3B>ky*B#JxtBDX;z#O|e}lDO3nPCWhA8NSQyqKMb&nZamlUw&`A~ z@ZK|LudKLycAAO*8}!?X;~@g8@VQZVatg)-RsHb>nydz^U)LC``)V}YLEp=}Up&0} z!>NSr~pk2ynX=!&A5`f4k^3ebB}XDRFL z_=W)p!nBTH8_n=(@6zfFcYx+hZ5U%|ET{lgtvl?pMka|c3pRB>S;mQ=JUg&R1g3rF z!j`Yj9jqd7MjIV>)&#Jr_70|A&>r9R2eKm%4NgEc(sCJvau}1Er&L$gZWO8ua)&_= zV8mpp^B@CQoz;yTS4wP-OY4R8C{jgQPdFpHy&FYAiqYY$nLYXR&bdvEVi8i4!b7RG zHaN3mox=cUj*Gm{Xd~p*Syh2D8Mua*nYEnG001BWNkl#7K`zD3a0U==>qaP8ywp>e@93|$MkP3Fog{iQ) zilL+)F}7~n{8=w z%bE@5ss%)io-|;qmRmX1yq%SR@tt%G1FayejcUWHkUImY9if~MQ%XNylEJ^UVB|PG ztUEv~O4)4VH{wcf<(0#ZqgU`CtIiB%iL!p7I}YSY(bn*6K}nRAjZ zdEi9IVmf(+9~~3sowJ;ojG036p=3l8E%$Tzp)oiU023v*pO$EJoAk7vn zd9)o3waA_W0K@TvE605V|z+&yi z2+8G-T;v%4Gfb1QD%&f>XerJ;G(0>mpdn|)$g6+pkXCRvNotbn#<;csu}O>xZ>wxA zJL<*9j$-K+-FnGU;L;*x$-F36h`3F7m6+gQ@#s|b0(P|e;_3fBDvw)w{d5CZUo~Cq zr)DqSwA8m9U}wCBeh2ewn0nLJp71YD~DBcQMxv&*OV#{J6f>Ga7gYT+kDWQzr*teUx&qI@DC z8}Bx{@MTrPMUdH%-&w_BzH&~)kvnz$7`?r0tGvjnwL?uFoe-?bTk&mwLU7``@LL0e zrQD>JwrVj0BFZ>&fWDnY>cMgxMOO2X6$bspY@v*EX=OTtdc5V;q9_F+Y}?rn+1YdED_r$&Uo%LT}JEf`XUUe z;Knr^@K$i?mJt^dkd7}YOur(c6gh>y%3VgzE2XRXc-AW1LY$B}^m#rf!)^xnQffJV z8o=KY@|UA#cI1&eu87N;#x>%+nQ2f0WFG4_E)~X@-Nypbs7_G1*Cb*lVD4ISLo)rWj zP>jS8+jh7P!4MmcMF+i!U$&g-mLb#oFbLu@@Ki-*s8pdi`~Mx+4K1r%_1Z@dxZ@_P+A^p zF_%BWv*<)U1*_Bs3eIBO0fLGjd;+1->-Ly!CAY%?U^pj;u*QARy0-EZLqS z7^zu=m9-Q&5;c_zp!uv#(A#9lWQc)F+f8vV)W@AcdM*p?TJUacMmi3`SznfHlr$S# z551A0C*o>53%LJH7dg(tyVpiX_}?#+d%0;M?WBo2xUJh6^DMkX=rtCt^8Zq%#EK?PKieFE^8#(W14UaLKJYTo= zV2%c39S}kcDBz&Fr*QrW5$s46}+|3`5*q;CT#q{{5ZlzgZg-V*_nXi@E=%hV@V=s zIoYY7Nolh5|2F1x;W>htLYO?0+$i&<$7~l_dVoUV5mXlzKF6qGo`T8}{6xNPLZyAs zXL>pXmQPfV>zJZW{$ucajL_$$jY)+bio}+}t@; z6pq>Px_&-*nW@Iu^eRxfiQnLn`vQ1=vNSOR5O8?eVnzZ~fo4=iR>dy7^H~d4vkig; zb?l{JfX92KeeSbXRc0vf+a(zg@wzLx7#mC^;fWkymdHAi3e&RxB^02 zVVk)~w;)$4hB4e)L>y&lo2|U_8e@qKJ&~7+8worj83#6R^#2|HjMB_nv^^_-(By`; zyB_sI8;eZEsWP4ul|?>zpA~;ub?!CqejHTIRpVSHdK1%73I({I2@7%>@^2c3jUp_X zs;jt6x)S;)1#K`aldQHdP32@nzO+Yt+-IPLp^l+`Wn^nDb?{Rdh;JkxWCZX(M>jmy z-RnShgmq`xY#E`o&m7_=Va;D{hba_Al?Mi$oGKZoC0vQOrsH(WL>I1IhgdvZQ1*YG zR6QCO^Vnn=)<)IizO3F3g_ zu5e=P|AJ*195qoG>=R%=hhVWnKSUB8d8x!a^{A~7@O#c=)ci-&wL?!zrL?&e`Erp_ zMOv?b?Y^;pS)-o9U5?P>h<~sUjn!8aGhVA$`TEx^etUEDK zNwopGd2}dQ6^mETRv`qnrK6&XJG3S48+{tjnV4|9w(`?6?bcN=3gTXYwQ!vI%+6ps z2jQ(mc0pf0U_6i!KT8naf9wV~^*a#vKJ#~CW7L>2#%VxSKd+!!o#NByUK6a@j&h=p zP`6nv`=bY%8hmi{X{Wc{JN>d_d-jv$e4$&y;b`Pd^W1*3q3*V$YRX>dRI+`R$hKKg zlpMffM#yO69C!FRkNiL-nMWN>htHEIRfQ)^Tkf`mCwWl!xH*pQ5wJv*jcfv3ls-)s zC?KpA_>&m+iTC8f0{z)V&qR(jY$!MmHXh4B`pfCX|?u7u<2L zJS|Y`yA0*{ksE~sy({^;ay_-KIA$kXratEU8{0Jjr!USQCOeDMwt>-d0eVLuHz7OE zJl%45rZE)pfhZMZz09iIl29A0w~SB4?ktN+MJcKsCT+Woum}VMq5j}VWvL%m_x+&w zbpK$Nxd;l^lJT$Ei~K*I@MSJ4sA`vmsh%;TIqs+^@=EMHtk^sgdeR`NU{hi-3SpFO za|XD;Nh|w34??7!ObJG3yPR%+*ljZbK!D}JbYV09f3#YK8Su!o&z2E>n$>^dX`_?w zC$R5s&k=v*QAYp&+&0isSH2u)C~~(y2Caxg?ZmmcCGt9P(GmfMAMfb!a*^-44qbDS zV(QCdtLdF{f)*4tX_MYc?~PLXkT(^izFj3JUL8Sw)eg(cp|)aq@b-ROWgaAZL`o|q z%bz@6(+|oNnX*O3ss8YmY#*};B>RnB z6S0ZzXR8)q6rIo;$9B&AwtcFR5kDVC*L_VJo9F9A`vymshIqWFGBef34D$Jh&R~Q_ zor+T$w05<@c|-JH_bexWnY*cX0fy|0&Hvi^@gh6hDTRa0!^4(|GbiUK-D8JplxOlG zo`DZ=iw#1bnrLR%vO3PtR>@Pqp+#y=R_r~}`dtNi!D*&R7?W4(pnpCu1d5aeuLz}t zmdTm2Sl5cMgYfEsMWoA=8Lb9z*Tg;Yk;0&b5U(|_048*cAP zB5pLU+7d+kx_0l)b+Xpy8*c18;pbNLkhaVHDRtSU>X;uJD^u@-z8(j$SUz;&^u&6x zDt;ELH>x_#+bPlP6i<#x``s|7K^0b{%`PQ_rl5mJ4P-htZeux&cB;-Qdsn(dsbJ>$ zkOHhZcz%=>N{te^(P$MB8LcpRhGjD2mwoi~D`RTxxVr&EB~DEkyxc|ExpHm-OHfC>SJje!G1hW3>3F~yltaQ%8fB}TGnON?R#dQXXa-y%u=2x`4q(xK#vfwA08>elTd zS;ZJ<+9Yx?t~J=+Bjb6%EgAs!#cU)f!f-3(sF+9zO`&_C zt#d1VC6E$p`3ket;>t_4@iLJl8(V65!yFPm4d-Cn&zip>0wzF@epvO=b*K10yA_}j zxSzpm&XcwLk>{+NpLQkz?lubC$X1MicSPggiq^@@6uEw8V!!{Eng(Lw=|f+m{PA<5 zuZ1qFVy#{XAWp!^yXI?ik%G~EZKnm2OW3<(HKEM zD+KK_iM)}&Jz{_!@2BH9Z#2|D)Vm;Q#U|?-WFA{WPg$~my^N38n9^LRxKj0RxS(<&~wC_h~4+tTe&#^=H{nW9I46F?d_aIsz0d_z$5Po3jT zj-nE~wZMB0yQ}M4wB8CP9fi0yPKF%l zsGXJl&EY|TvPCY@Z~o-wWAEesbms}P9eb=QQ72O^JyU>!khFQ+lWWV( zjsvgDC@l~dLe$ZsWs2LRBsJs=eW>&(@)^;(5bq*52#pv%OdZ!K*L+tw|<62sC#gyGiXib0$C?K8mqHW9U04RgE~W z?5fQGqbi;ZR6o=g7}{#XIFIJ|n?Q|9LW{x{St7zkL3+PfUV$+GF-ZmJb)bS3rQm!r zd6$lA81aIlupJ4L~-r~>|XQR(~4i{WC zs-mwqlWBqPlq!U2SKTQ(wEcD_96M=nsVjM~AK8L z&B%flDjN@6o{QcF@aXNB@Hgv5@XQqzT$jXd1s|=6LE#lIv%(%$gZ*Y4EE+GpM>LKIa zU(BXmpjgfBzl;f&L< zttD3D1f@VXlpfXJ_g0XKfQ3EU#Gflz{$p~uq4)vkj~`P;`NkjpjH}Sz_Y(KI_nFLR z{Eqn1ctJ1dBWCKQU?rU-8YpuZNZ3mqNV|__O&td7(BGRa$`F9zj1DtB7jQfT5_8r1 zddHc$1ondtq$v5SqNE2qE3dm+T;7xI%Hfnvd}+qh%LC$-$=D^V{C_|@Gh%e3hJLZT zP$_Vi^J1DWvCB@BsMO?zMLva5nz*^shWX5zzQ57gT%(>?SuCr$Uq+x4_KpKZ(cA74 zXeR)9#*#wm%ZaQ&Jaar5{eK_lXM6Kto4(P@*5P;$Y-` z|I01)gW<``D{P5fis5JpU+!tiTw3c#o}^~DBOR_vA5E0lOZBrnSF(Ch1W|0YWQW8u zw$3Dk%zAGUwaQqr=ISNc6i3~l3V)*SO0c`j76i4;T+R;%QW)kauhrj}(6uz+tE~ZE zY;p7aI69pZ^69pGD~!3^BX*nCp%<{ec}_A(S1H zOp3aVbyEFoiqdSqfF2I4n>dx%oU(p_-8r(~)M|+F>vP}YzHE~rO>!NyoVnNpl_3Aqbs5n{OChbb7x+~tT@5dYZdgiPkEViD@~N-sFb&}=pXk= zCQHh78uCcju+&zDtJ8niaTo^AO*4|7;$e)HnMn0DkS5D&rD2vD9ie5pzIUZ&h~f#h zXO;gMxnqB1rcNK92Oj_WeQq!8bdu~}(3?w_Oy5;zKJpQqXjiq@^t1&FkOeNQ^@aZ~ ztGk738t{q-7B5Oemo)oXTwVwQ6Eb=?tbvq9(~RO6GR|6Cc`!USk1qVBT~r@6eKjB) zid(t}1$291CWh{Es78w6Qw}j~zk$-Q`o+)&R2Jf3c9_9roDu)>Gp2^1AZsh7?kKj` zVoMd2`xZ@@hwH+$hYcvj+R8u?Wit3BXx{-VDdwU8S-P?e?zc?W2kG=MdGn*V>%|27 zGm+k1z1^21tteu{juOSVN}6b7wF?9|_wj}DtqZz6QAaEPwh|wI`0e; z4o}j8duVO0&xneaVWaZG-CmD6W%s(6o(m7MBeaA#z?HGVdPdE~jg@3c@Aqhj;l}az zCx_yvJ^bNh?EbrhRuL4>KhZ;Hv0q1-C}c~{)8BhgU`5c70$gR%FZqVvr{~AK)Q}p0 zML_^tuA2GuE%4k!myT`{|hx!qr8m`lUoL2B1#h=>+HJ8_Z_|J=i9 zaeyt-dDSzuG}K7YcHznO zvunW`dMJwo3ORS^4Y_vA8oFOzrNi*wGa=_pJ5lD`HBP_3KnD$GsS7hP8IXB z09;{pd*B3KpTI1W{nXFMg){0xIdYM{q5Q8T%3^*LZ`=^fK16fFU);4NFeFxOY)_wd zQfJae%6UI^SZJT`mmSnvD+|I%J$}I$^mo9xGgp_Ks|=>CQ#)vc)u(zHvI=xsNH!s{ z!asZpdQ!3Hs&S=cWqNE@wcLQA_1r6~xThMkAar&{cUkXXM8m%#akWczSQbg^Oi%rD1yGP%}D7nx2|`@ z+j_t=HPRTTwmlBKB|02MFAj3<{I(}^Ne4B~Nk44TW7rq#K<`toT?xnJEhv2jFh{f= zdkqm9+XPUOU6Qai?C-%KBuIQ^Ylj%tN}w`6fXd}Sf-gx%y@DFmw1T?2T~K!~#2lI|49At6EjbMoD$mj^{D zS|sb`yQS8k=mT>(13BUB&>C=RVZ#*DkBGIhkhU@grpBSz8?UebE06tQHbOtqreO?i z?88xT(@HH5I&_anyAD9!rC5=ChlJ?lE--Ah9n-6Sq0}ClR zJp(o45kdK*$*KdEM}tOGuH2sRq3EClyWT~t)OljSG))-BT#p34^jl$H=3UmzeX}S{ z-jDci=;if+w=VKN`UWd60J3Leg3kT^T9mZbV)pHg&@YYqp;*ST9uRQ*?TnQESlHYk z_SGVe;Y7_)pat3s(7WhUKBp?hVWBsfb(*eO=RKkaw)!fIcPcG5# z56s5BHv`VRpeZw#yTXgx_I;W3+0nz5AHLnbceCPBwrBVyKMOaI&ZOOpyiw%_VTzuV zm+bcZ(C2YuXtMWA(K&u;@FrwT8o->+2e<~Pm5fk;sByzs6;})~oIfo|eqL~c)OS!@ zR$+;p9uuj?IBz`B5k}uHjh+6EZm}P&7G;mx8v>%tho;m~1~Tycpx?J$U8Cxh6#;|! zgNoY^ms(l9*NI_$`PH@E;of2E`o{M!Hg~4%I^LqO{?JNNYs1;S1jugVjG^o z%#tJvyA9c~2^oN@lfm%%G|!NGY==yIm~s@zcLSw02CQ8$LSy2-D7~@eJ&xPYmsSzL z5CW@`g52Xzl)}}w7r+dj)r!6U)Y?&8_v8045;g7basM?mL|Vj=6u${Xo<$^I^q|N( zM->TwFXc|6A5^W=WxmX5=zTJ5sfvc2#`#Z|OnZxj^I{2wB z@)vce%&Ho`cJ*}EwTnX?|r01BwXms?;Z6Ax_f_!0bK!$nziNDq|3?J%x z$srM~iK)ztog^tuHMDl5qivRN1uBKd#TGYh<#@pIbbPi42-gCCi|~PaPa}xUrZV4% z+u9lkBp7AWOsl>;?e}e+A)nabZi+KZiFueAqiIt)LG2>3rQJ57^Ej>kRhYIU7v!4^ zW}I}YjR93^M0oVOrS)CEy2&rx3+-2}d9UpUCh&|)@Zwf`?P$zU?Gnw$f>XuZ_EJ&6 zt;n6~H1e@Cg{Y2@pwfL?zwJP$}6$UwcL&O^wmg4dtky# z%^T-K*7o>RLkfCMf{Y{_kaT`wT56?T&rYhs_6v4$y@_Li{`m;1GvLTefTkUbQR&f< zSt%V_>^#6@Eda)#4Lf#7MJl!SqJ9?J6t|&dr4A}IMEaJhl(5vZfjtivf8h|% z`g63`E2FwiuAWjN|L=K5G9=2mpSbu!14NME2du3Wg{(W!YG%~XYGgTYmZxziB{S>B zt!}V@OtJMv+HzM|Kkl@!Sm}GX8e|LEaGoWkLy)0M-+Kj2Mq_`g<=hd29@Q$o`e<&^ z(uaI@c*ST_rBIuEN)pl zda=LFR}m86B-;BI3`;(A)$Gw-xyX427wZJHOJ+x3{+iKK7|N>H&Kh==aj415kJ~2j z?c*v)vv<*r(U9ya`sM%j;jttyMF%a03>VQcweY{#bM>A2fEMmj4f=`$^9%8_R5QpL zVeg$>O#~3FXr2P?(^K90oXhGzCgC3Kwxi8-xHBz|Ch*uaNWruNg#N_}tARR3NyU=} zp=PF$-wFF!1}pI|ZrsiH@;v;hMLJUw*d1H&;SQS~E=GNx`+G!E z=BA5GZj}j#buKdodTguK79k4Pyw1NbqxQ9t&P>zg)TWmbTrR3YelqTuc4jcn3$4{e z8uTE|#AhsuR^|?^ilSSfc|5(yWAI-O?Rtr31!v35=u(*(3Ur2E`&}&YU{LQQ{&a!oN;y*X@kX8x?x;gV@TQ#fU#U zAuohWFk>%WzxV8}`Q9&ueH|XKek~2Jru7jyX`sC*oS6$T$WJ1Be{;ilas;`_S$lj#qz z4zPtsn^DKKs&%;}8P&68(WDU0cg!q51J*Q&(_|UEPMO!!=cym#NCK z1vRr33dR#5bgUoDJ3dZgr1oveU$}nabJ^3ZjMsr}URys_n_ejaIjVXqF+B{_@@9oC zdw74t^hH6`moGc~_>a^HETMQl5a-Kz@byBXSY|t!+nZMi*yur_OV_JOcHj{KOx7UH z+OPv&az}aE#k4J(ZbLcfFj;*JIhQw8j^JrUH0;lX=qWpIq>QptIt31wXsEQ*sHEu# zl}T;bL33aX_+l425+abV*;@@oyVsAkoz=hk>-E%?anaixu(eMtf+&{f0-&-g41cP{&2%7qtepXwXcH zR;O2mzW+9Jt-R)%TO%wC1?QQWmJ15H)VPHX+ohvLL4!)&6iEAMFz?~#2GIjJHQo4A z?h95T>0&mvNwsA}2vHSQo)ob;9-uKsb@Xor5Uy^=K613F)2Vkz&eto~Lh2{y&XzpeU zvrChuL9(u@c<{jxkGao9=KMuc>$HJxLuQwV&?~h>RZw)nzx#0;Ev9YP?p{z%`MQq7HfGh7Ym8aO|oA9sWgK_ zu6#;DMPs>cS7j8iG0?5K^^MEhM2i3-$tTYcvbmy`E=3vf>J)2m);Oe9H+W zT_Mu&!RTPt%6|E~23B{Na<$(fRFh5b9J5H~p*QRYT~;>Svia@*D~Z|k&zX^*=dY&+ z{9XV0dwot(#cOTcrT!(E0iYWTQrTFP6`D7few%=fG|)_xJ-XMRHcP2Lfk>+&;I6LM zhHi@%A}>hq8|LQMRycK&=5>0#*c_vcP-;*P~3!V(a$B3z~<(xs=0$v)J6rG zHT%~X8EmGK=z!-T!Xu+F(FntaQQd=oPr!t-D;Y5CYB;{1YUIcet9ibkANYO^$P97= z-(-}7amEuFYl#+N#*UvGnf#^`HT2co!(m(WEVP8fZ}9eTP16o&veZI>iPy|dVn?Wg z=i(Ypmg6Xg4uuP(oTz9A>=i`(%i2vQld2gLW)D3}MxdSjElknF9;M^rxgltm&xouH z0m5JDwx=4m9bJF1^11b2lEOZGSZA?Y{Lclo`cc}=)>f19$s{p~Sm=3o>vzdMC6bGl zHdPgy&z2LLEmrxEK-X&DFksq>mc>&KsUQS+rFh`sJgZQ^o95%PJP00Y?Y7VHr5wo zaEH3W;o0*=uLr%~gH5{);Zi#75c|bHODMYCMC(hDZoOsP&g9;ZTM=d;IN2%8n`bK> zcEp>Fi|!scPd)>tZHtXC*6Ge_^$a?w70Ijvv@wP)--Vbtl zUP3uE!MZILC5D(*vNp~d5^C8ZkN5ncM&^PK3b8eiBe+w*D|1hW{b(17gCFJUGS~9%&CN>kX8f7x0#;>AV!2Fv7&P}AiT&tIj@)rF+-#( zf|F$qn>293Bljqv7^!y%kQ#NpZSeEmHEi6evCG3|gF>oXu+gIr`zU-rLZ{XYXBcBH z^-?9c~7&%^r5KzxW>UgNysbE-WF<2h1E3Tmokha3+FDT#ayH7zy%)|yFg#1pOa+6J(eR+}+sVsoia6ojNpqHLcf^_QWJ$&}vW|C0*$PrL zTuH+T>RA2|i9uAs@vSAp_vq=|^!a;zkR}Uyu zZ@zno<9D07I7}fHkw!-07GjYOz+U{JG=y%cY?&J9(|z)dADy~~8ZqAFj?X=UM>Z`7 zp$pg&;2`lUXng_5-R)(v)J@*!!5Z}EQ$Ae1PO0#(JG!B93s|FD;1K&>CBs=@sV{{R zcs1%pq`zCvNF^|;5gJ@|!dw)N+7I+|WfS;^D;|$H^rb3hgW{%M{9EbEWbobxJ4MOo zgnY9vdtUb3Eq&2vWepn?q|$tudY+^HxtaKSj+uYe9{gs5JrwKA0n?A`KocB4=ORWFuQ9>C=7p4sqK(6`Kkt4 z>W;@0;4#CX2*mN|%CBfkAJy!1kk+o~1-OdaG-yC<8Or8YL`H(~hdBY$B~jJvsfjtr z>K&6t<7~xrH8%J|=R??%iiR5Hc&7H{H0aUgA>)1yl}G68FTjtR!JYWE*jEg;^=nL| zG#G_(A_lE**B9QZp)b&`u;u&AB4(mG?*Oj%O&>zQ3&YHtce#znNuDEor*pjTc1ZXhm$$Y5*XGjV zT<`1nvE}m}>vOk1{^0gq18H;R!*owaD4_p2XF64a(?X{WxMHm8Y*TF@)S*=$pRtDM zTpkFZpBNM5!GkkXF@b49gFEgu#a%aY99G&(FqGpdK&3H=>fp*XBjM8Pa?Fs)7x0tc zqJNwq>+E46t1A(8j3D5!2rHz@6AYo>fqVr1Dgc5Uv{&+_TfDGS`J3LG<+bj-rui<# zsb-#z7pD$y?Za7SSRhBljFgG7GGv8igaGcr_O0IZ9^nH51o?=JrpUiF#rL(b<3@O; z_PZG83I!ZBWw%B{&&~y0Qq#nvvL&}?A^L9%Ou$hWjY}SM#$HmLGH+lT&N0ngMFihi z7EpdQyJjbznTtdC5^#a2W8OMqimD=uL5exk;-x=O3wvd;ci5tR?uw2Zxe9Q3_#?DWHs-0Q*J4c0DO*e2 zy-S*`h~wgCE0srq8ud}I}Mn6YBhW9H3Cv|cm8C?@4Cb&j9c45{)X$Co$^Gmtz3VDQ{IAozkg@&t;quPAjrIK( zvqMH|uaNeXC#KA4sh!Zu|HEXD=6OMPEzedDcWPk^AwG`q_mcXZIa!hu769s|vE zZa$gxEA}NHkxW?1X){2yk>0nmz$a$G)Bc*QM>orSLn4cCDjGselFNGn9TWI?97DM4 zk+0;?TE|TS?OQNQ59q(gswdI(+^ZHTfX}6l&t$36CY9Q>M+L)4oHmZ!4Jdc!gU_?h zHwksD#ns~Ns$}$I3qYnqE$>46@z{-2Ip(lR7O`P}-NpJKqOKlh1Mz&wsBo9W+0#QJ z2#J+irl0v3b>_v`PBKssaUfIOt;zivPlt$l%U-N?sW7f1DnNW&VmaCIwHzj`8fwAw?y#_WF%x;>`+5Jh68a-M z%m1%LPM?u{z_y;%zW4X;`2O%hH+9LMk2s)h`Km->P*f@3#BN2VT4XdKSXt-yt*rO< zrD$bob%^X0HIvS4ji!8;2!_f?d0}Uy$=w9+&Qjiij4O12Xp4gaYBKZ-M<(kuG9pfg zPOeAqf)vjrl)Q^D1cPiw^!y>_OF@0qCTJ*el2Q2DCiNgS@u z3PBXi9u1PZ!9id*yNs?C0{x7p*_szu)YFT7%f~UEPhqE> z@BexWdO$KBB}rZB*TU6sXZd<)G@VQk=-3Vx653hoCkm7jk+13vswnGL{C%D7LZ0;r z?=)pvsjH7(?!qcVjynWIRP77%vMQEfAMQ|I0*0J|_a+LU_@43NW5&qRtUPT>y289B z?TBz8(P|XuKc)P-hOe@X)$q}zgem2l&}^UQWBDICA(fg4Qmj$j}+NhJvMUD1PO%M-cW1&2#K^zGA(YdE)}oeJ~su7MmwFPDwqCoQd? zR{tf6KK)E4&W-qgaqIxtY3tkmsG9c)(71hAh;gV|Oeym&f|ZAFdjWB><#7RA@53;b zeJ6+XH>-0er|9U#tO%NtBglBXK?)jWmMp1wd6E3Lv?L0W*r_miqXN6~Kex6RuIX`< zs7Xa4^(GB!;Qlg%vSkR zd+DO1>4xo;O;);nrmBI^{3qK_hAF6sX|-RV4rl&f4fzr)M7uj>Cqrrg(pGCX>?9NkU77~`3Z(kWm1|D)D^X9a;%~6 zdE`QVnf3Mh-p{>C>AC))E_cFy8qHKqZ5yx0w@Uu^qrJSU+O$(vnDiAo6-!K#E;-;~MS117u$yz~QyHal0V^j}Y+4qlzfjjHlyxl(LFy~qW))KIA*H~h zP+99M8-gI{G$OT6o8pQkTOx9}s7lcKEhjtU^tL-#%Q$rB?nJAZ;6sxBai(a%V;I4d zBuwT83Z&+hddUUoQI;e2oZ>~8q8!mCF=4B@$eofG5$jlOG67?^j*>(dSRI5A(ZJnF z>_fh(j2syN`^3da{8au;-^T|AMmgFNW~VeZW*9C$)`~XSHA-Tm(G|;f^}!+4eTkgv z+?lVfO6zwKZeLk~oMy^}xTwzmiy-0y<>d!=>D|36cpBDL#NI&g~mh}9F zKpyU)ipFg4sGm-C4m_)?CIpZwf5C`0$BMyFWNGfVZ{m+c?SI=#l7x+i*vr|`>F~?q?!rHtKQn{njBh_f>w2u`%l&^cfYA6Tm z3~u0TA5|f46a`Cx370i#J4@Wx`2aS2TB$921G=2J+gYLB9>AxSXFUh0T&DblyQc>#5p#xe0j+P%Rd$f#qF(lTWx zaaBxDJAuEqEp_D!3f`kV-0)%Q+igGTK@m0s>|Zlf(j6k*_z?CDF_froKR?Qy{k`sA zCGOI-i9fY7^GB?f82MSb{kB(oX|59FHF`?fg#d9@Ua{Y&Owr6E)iHQUi7-{W|T+;(?HhhR{LUApj)FmyKBM@ z{RMt^kRFN8x{VQNGVyXiY?-}UJflXql%lyXF^AALuKEbHo7UaC!Ky*XJhW6CEfAn= zZu|8JpzwY8o!{;k#E8^aFuRV2!;qFqSnDB`P!4o8)~@edW3KF3YQi;=WS!oP7+{%J zVe`_4S2v%uTZVcC2xgi6bHUpua$VH+kGBY-ket__EF%8an5>&kc^vp0{|yHCcSmzH zf)n=MjXPqw)BRDT{wD8t=jiDVEBv2h0XHdUH8-t$;kVt%&^j;86&1m4t=P`}z@9hb zD{&Ef#*c@;6LM0@t}0Y@dev6{y_b(eF^6rxT1o!(g^0RyVW&e1u(~o{5@I;0f+NXF z`)9Zn8Az<(GYweF@$|wFAS~(V7a|GineCfsXS3(2BhDbTv95dmTr=D`Ug&@zfcso` zx#XOBO{|1GkrgE5!-x=v?%)U)t-UhmLOH>l4UA))AC5o(CZoFkRX1Uw6 zG@=gpT}{>BSsl}o;qmnN@cnn$U0PrNhkdhCaQyfu`Rz0FGmamo_;&baSGAcTMGZa; zA&fp$G)*Lm3#&1&Ei=~?qT^Vo@r`n^O^aoVgrqZ|PAQ250n*7lW=|XX#iS5@marJL z6KZRMS%_itcNfJl?I;;q8Z-FX^#o=e76GF2PikKG9-GcwNKZjO%?MbsN!&Us9dG#L zHRpArx*o>HIFF$~10v$?;5=Nm1^g9o4_r@0Yl3wNDHpN%M+r^;qES+0a&Yu=UK?>y zT+be{w;Ndk6F#&#D?`{p6NVL(q1*SH5iBR&zfd&3zi;FEpL*7XxbjN7cFgQ)=z(G zuiC|fVBCrS(*pcvDo(5#TlX^p%BX46r_7oxRw;Pa`zOF!L1PHIjl*1Xh~a8A5nfU7 zRQZgXc96z9SXTZ0BZT26(EBv}iT>+p`45q*eh_K--DZt1Y{ zkQ29z;EUmVhZuI8+0BD~MH4{==r|g=qGvu{g70 z%xOTH$Th)59LRbXAx%^V6UO+u3}fg*zpKPZPh^(^+^5kj+xjXr%bjPsU$`w~0!N3g z7cwD|#-`A94+;96H28pn;2>RtSW0JIYuR~7-CR!U6Q~o}{r>fbfBHT=jM#dF<1EAm z7U^K-BaBd4Ff=3+Vf_&-nmd+R?!UECpKrz~-iy1fW@IU_L+EcP58$Q%simxkfM%$_ zD$I%Icq@)+MOZCXyHV&6X*L@9s;NlYTjFl+Z4Ei!x!rCy%U6^$U@SY`v)PegEx
|Ex<%OCP?fC4osN-0)#kVLMY-W+$-MC-Zxo@ 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 literal 0 HcmV?d00001 diff --git a/apps/dmt-mobile/assets/index-187c6aae.css b/apps/dmt-mobile/assets/index-187c6aae.css deleted file mode 100644 index ce8834a28..000000000 --- a/apps/dmt-mobile/assets/index-187c6aae.css +++ /dev/null @@ -1 +0,0 @@ -:root{--warning: #e34042;--dmt-red: var(--warning);--dmt-dark-red: #983128;--dmt-orange: #e46f3c;--dmt-yellow: #dfdb83;--dmt-warm-yellow: #fec83b;--dmt-gray: #8e8d96;--dmt-light-gray: #999;--dmt-dark-gray: #454545;--dmt-silver: #99b1ba;--dmt-black: #333;--dmt-blue: #8592d2;--dmt-navy: #41468f;--dmt-navy2: #292c5a;--dmt-green: #00ffbd;--dmt-green-yellow: #d6f3db;--dmt-green-yellow2: #F0F4C5;--dmt-cool-green: #5df699;--dmt-crypto-green: #00bfb6;--dmt-vibrant-green: #5fe02a;--dmt-cyan: #29b3bf;--dmt-light-cyan: #68f5e7;--dmt-bright-cyan: #3dffec;--dmt-system-cyan: #3effe5;--dmt-system: #27b1be;--dmt-cool-cyan: #51f5c8;--dmt-cool-cyan2: #58e288;--dmt-violet: #986aeb;--dmt-dark-violet: #2e1740;--dmt-pink: #efcaf8;--dmt-warm-pink: #f4b5bd;--dmt-warmer-pink: #eebfc9;--dmt-magenta: #2b294c;--dmt-light-magenta: #9aa9ef;--dmt-lighter-magenta: #cad2ff;--dmt-cool-green-rgb: 93, 246, 153;--dmt-cool-cyan-rgb: 81, 245, 200;--zeta-green: #31e5c1;--zeta-green-highlight: #34fed7;--zeta-green_check: rgb(55, 136, 124);--zeta-dark-green: #248576}html,body{width:100%;height:100%;font-family:Nunito Sans,sans-serif;padding:0;margin:0;touch-action:manipulation}body{color:#333;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;background-color:#291b34}a{text-decoration:underline}a:hover{text-decoration:underline;cursor:pointer;opacity:.9}a:visited{color:#0050a0}label{display:block}input,button,select,textarea{font-family:inherit;font-size:inherit;padding:.4em;margin:0 0 .5em;box-sizing:border-box;border:1px solid #ccc;border-radius:2px}input:disabled{color:#ccc}input[type=range]{height:0}button{color:#333;outline:none}button:hover:not(:disabled){cursor:pointer;opacity:.9}button:disabled{opacity:.5}button:not(:disabled):active{filter:contrast(.9)}button:focus{border-color:#666}.device_title.svelte-5h63c7.svelte-5h63c7{padding:20px 0 5px;color:var(--dmt-silver)}.device_title.svelte-5h63c7 .play_symbol.svelte-5h63c7{color:var(--dmt-light-gray)}h2.svelte-5h63c7.svelte-5h63c7{display:inline-block;color:var(--dmt-light-magenta);margin:0}h2.disconnected.svelte-5h63c7.svelte-5h63c7{color:var(--dmt-silver)}h2.svelte-5h63c7 span.disconnected.svelte-5h63c7:after{color:var(--dmt-red);content:"\2716\fe0e"}.wifi_ap.svelte-5h63c7.svelte-5h63c7,.device_stat.svelte-5h63c7.svelte-5h63c7{font-size:.7rem}.wifi_ap.svelte-5h63c7 span.svelte-5h63c7,.device_stat.svelte-5h63c7 span.svelte-5h63c7{color:var(--dmt-gray)}.wifi_ap.svelte-5h63c7.svelte-5h63c7{margin-bottom:10px}.cpu_usage.warn1.svelte-5h63c7.svelte-5h63c7{color:var(--dmt-warm-yellow)}.cpu_usage.warn2.svelte-5h63c7.svelte-5h63c7{color:var(--dmt-orange)}.cpu_usage.warn3.svelte-5h63c7.svelte-5h63c7{color:var(--dmt-red)}.progress.svelte-b6jwnj.svelte-b6jwnj{color:var(--dmt-green)}.progress.svelte-b6jwnj span.svelte-b6jwnj{font-weight:700}.faded.svelte-b6jwnj.svelte-b6jwnj{color:var(--dmt-silver)}.wrapper.svelte-120eh85.svelte-120eh85{padding:0 10px 20px}.current_media.svelte-120eh85.svelte-120eh85{max-width:700px;color:var(--dmt-silver)}.no_media.svelte-120eh85.svelte-120eh85{color:var(--dmt-pink)}.current_media.svelte-120eh85.svelte-120eh85{padding:1px 2px;border-radius:4px;display:inline-block;font-size:1.5rem;margin:0 0 10px;word-break:break-all;overflow-wrap:anywhere}.no_media.svelte-120eh85.svelte-120eh85{font-size:1.2rem}.current_media.error.svelte-120eh85.svelte-120eh85{color:var(--dmt-red)}.current_media.playing.svelte-120eh85.svelte-120eh85{color:var(--dmt-green)}.current_media.playing.svelte-120eh85 .play_symbol.svelte-120eh85{font-size:.9em;color:var(--dmt-light-gray)}.current_media.within_limit.svelte-120eh85.svelte-120eh85{color:var(--dmt-green-yellow);opacity:.7}.current_media.last_in_limit.svelte-120eh85.svelte-120eh85{color:var(--dmt-green-yellow2);opacity:.7}.current_media.playing.svelte-120eh85.svelte-120eh85{opacity:1}.current_media.svelte-120eh85 .file_path.svelte-120eh85{padding-top:5px;font-size:.5rem;color:var(--dmt-light-gray);word-break:break-all;overflow-wrap:anywhere}section.svelte-p9vgzg.svelte-p9vgzg{max-width:500px;padding:0 10px;margin:0 auto;display:flex;--button-spacing:10px}button.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-silver);border:0;margin-left:var(--button-spacing);border-radius:5px;flex-basis:100%;text-align:center}button.svelte-p9vgzg.svelte-p9vgzg{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}button.svelte-p9vgzg.svelte-p9vgzg:first-child{margin-left:0}button.svelte-p9vgzg.svelte-p9vgzg:disabled{opacity:.5}button.stop.radio.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-lighter-magenta)}.volume_level.svelte-p9vgzg.svelte-p9vgzg{text-align:center;font-weight:700;margin-left:var(--button-spacing);color:var(--dmt-silver);display:flex;align-items:center;justify-content:center;padding-bottom:10px}.volume_level.faded.svelte-p9vgzg.svelte-p9vgzg{color:var(--dmt-light-gray)}button.play.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-green);word-break:keep-all}button.pause.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-navy);color:#fff;word-break:keep-all}button.play.svelte-p9vgzg span.svelte-p9vgzg,button.pause.svelte-p9vgzg span.svelte-p9vgzg{color:var(--dmt-navy2);font-size:.8rem}button.pause.svelte-p9vgzg span.svelte-p9vgzg{color:var(--dmt-silver)}button.set_time_limit.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-dark-violet);color:var(--dmt-silver);font-size:.8rem}button.volume.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-light-cyan)}button.remove_limit.svelte-p9vgzg.svelte-p9vgzg{color:#777;background-color:#fff;font-size:.8rem}button.backward.svelte-p9vgzg.svelte-p9vgzg,button.forward.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-lighter-magenta);font-size:.8rem}button.limit.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-green-yellow)}button.remove_limit.svelte-p9vgzg.svelte-p9vgzg{color:var(--dmt-silver);background-color:var(--dmt-magenta)}button.limit_set.svelte-p9vgzg.svelte-p9vgzg{color:var(--dmt-green-yellow);background-color:var(--dmt-magenta)}button.time_limit_set.svelte-p9vgzg.svelte-p9vgzg,button.remove_time_limit.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-dark-violet);color:#fff}button.time_limit_set.svelte-p9vgzg.svelte-p9vgzg{font-size:.8rem}button.repeat_set.svelte-p9vgzg.svelte-p9vgzg{background-color:#80ccf6}form.svelte-11smw5j.svelte-11smw5j{max-width:500px;margin:0 auto;display:flex;padding:0 10px}.input_wrapper.svelte-11smw5j.svelte-11smw5j{display:inline-block;position:relative;margin-bottom:10px;max-width:500px;width:100%;flex-basis:100%}.input_wrapper.svelte-11smw5j img.magnifying_glass.svelte-11smw5j{position:absolute;top:8px;left:8px;height:15px}.input_wrapper.svelte-11smw5j img.clear_search.svelte-11smw5j{position:absolute;top:8px;right:10px;height:17px;opacity:.7}.input_wrapper.svelte-11smw5j img.clear_search.svelte-11smw5j:hover{cursor:pointer;opacity:1}.input_wrapper.svelte-11smw5j img.clear_search.invisible.svelte-11smw5j{display:none}input.svelte-11smw5j.svelte-11smw5j{background-color:var(--dmt-silver);border:0;border-radius:5px;padding-left:30px;padding-right:30px;width:100%;height:32px}input.svelte-11smw5j.svelte-11smw5j::placeholder{color:#555}input.svelte-11smw5j.svelte-11smw5j:is(:disabled){background-color:#fff;opacity:.5}button.svelte-11smw5j.svelte-11smw5j{border:0;border-radius:5px;margin-left:10px;background-color:var(--dmt-light-magenta);color:var(--dmt-black);width:145px;height:32px}button.svelte-11smw5j.svelte-11smw5j:not(:disabled):hover{cursor:pointer;opacity:.8}button.svelte-11smw5j.svelte-11smw5j:is(:disabled){background-color:gray;color:#aaa}.controls.svelte-27xey9.svelte-27xey9{margin:10px 0}.controls.svelte-27xey9 button.svelte-27xey9{border-radius:5px;padding:5px 10px;border:0}.controls.svelte-27xey9 button.svelte-27xey9{background-color:var(--dmt-cyan)}.entry_wrapper.svelte-5kr8d6.svelte-5kr8d6{padding:0 10px 2px}.entry.svelte-5kr8d6.svelte-5kr8d6{display:inline-block;color:var(--dmt-silver);padding:1px 2px;border-radius:4px;cursor:pointer;word-break:break-all;overflow-wrap:anywhere}.entry.within_limit.svelte-5kr8d6.svelte-5kr8d6{color:var(--dmt-green-yellow)}.entry.just_bumped.svelte-5kr8d6.svelte-5kr8d6{color:var(--dmt-blue)}.entry.within_limit.just_bumped.svelte-5kr8d6.svelte-5kr8d6{color:var(--dmt-green-yellow2)}.entry.is_search_result.svelte-5kr8d6.svelte-5kr8d6{color:var(--dmt-blue)}.entry.error.svelte-5kr8d6.svelte-5kr8d6{color:red}.entry.svelte-5kr8d6 span.duration.svelte-5kr8d6{color:var(--dmt-light-gray);font-size:.6rem}@media (hover: hover) and (pointer: fine){.entry.svelte-5kr8d6.svelte-5kr8d6:hover{background-color:var(--dmt-navy2)}}.entry.selected.svelte-5kr8d6.svelte-5kr8d6{background-color:var(--dmt-green);color:var(--dmt-black)}.entry.selected.svelte-5kr8d6 .file_path.svelte-5kr8d6,.entry.selected.svelte-5kr8d6 .duration.svelte-5kr8d6{color:var(--dmt-black)}.entry.svelte-5kr8d6:not(.selected) .controls.svelte-5kr8d6{display:none}.entry.svelte-5kr8d6 .file_path.svelte-5kr8d6{font-size:.4rem;color:var(--dmt-gray);word-break:break-all;overflow-wrap:anywhere}.result_count.svelte-11vb31n{margin-top:5px;padding-top:5px;padding-bottom:10px;color:#777}h3.svelte-11vb31n{padding:0;margin:0 0 5px;color:var(--dmt-silver)}h3.no_matches.svelte-11vb31n{color:var(--dmt-warmer-pink)}span.deemph.svelte-11vb31n{font-size:.8rem;color:#999}.sublist.svelte-84hcn8.svelte-84hcn8{margin:10px 0}.sublist.svelte-84hcn8 button.svelte-84hcn8{border-radius:5px;padding:10px 20px;border:0}.sublist.svelte-84hcn8 button.svelte-84hcn8{background-color:var(--dmt-green)}a.svelte-146wfrf.svelte-146wfrf{color:var(--dmt-light-cyan)}h3.svelte-146wfrf.svelte-146wfrf{padding:0 0 10px;margin:0 0 5px;color:var(--dmt-silver);display:inline-block;border-bottom:1px solid var(--dmt-silver)}h3.svelte-146wfrf span.svelte-146wfrf{font-size:.8em;color:var(--dmt-gray)}.searchable_playlist.svelte-1op3n77{margin-top:20px}.radios.svelte-tpf42f.svelte-tpf42f{margin:10px 0}.radios.svelte-tpf42f button.svelte-tpf42f{border-radius:5px;padding:5px 10px;border:0}.radios.svelte-tpf42f button.svelte-tpf42f{background-color:var(--dmt-cyan)}.nearby_devices.svelte-f8wsgm.svelte-f8wsgm{padding:10px;margin:0 auto}button.svelte-f8wsgm.svelte-f8wsgm{background-color:#d2effc;border:3px solid #D2EFFC;margin-left:7px;border-radius:5px;color:var(--dmt-black);height:38px;vertical-align:middle}button.active.svelte-f8wsgm.svelte-f8wsgm{background-color:var(--dmt-light-magenta);color:#000;border:3px solid var(--dmt-green)}button.connected.svelte-f8wsgm.svelte-f8wsgm{opacity:1}button.svelte-f8wsgm.svelte-f8wsgm:hover{border:3px solid var(--dmt-green)}button.late_pong1.svelte-f8wsgm.svelte-f8wsgm{opacity:.8}button.late_pong2.svelte-f8wsgm.svelte-f8wsgm{opacity:.7}button.late_pong3.svelte-f8wsgm.svelte-f8wsgm,button.disconnected.svelte-f8wsgm.svelte-f8wsgm{opacity:.5}button.local_device.disconnected.svelte-f8wsgm.svelte-f8wsgm{background-color:var(--dmt-red);color:#fff;opacity:1}button.svelte-f8wsgm .play_symbol.svelte-f8wsgm{font-size:.9em;color:var(--dmt-dark-gray)}button.cpu_usage_warn1.svelte-f8wsgm.svelte-f8wsgm{border:3px solid var(--dmt-warm-yellow)}button.cpu_usage_warn2.svelte-f8wsgm.svelte-f8wsgm{border:3px solid var(--dmt-orange)}button.cpu_usage_warn3.svelte-f8wsgm.svelte-f8wsgm{border:3px solid var(--dmt-red)}.error.svelte-f8wsgm.svelte-f8wsgm{background-color:#983128;color:#fff;padding:2px 5px;margin-right:5px}.options.svelte-xmpa81.svelte-xmpa81{padding-bottom:5px}.entry_door_options.svelte-xmpa81.svelte-xmpa81{margin:20px 0}.invisible.svelte-xmpa81.svelte-xmpa81{display:none}h3.svelte-xmpa81.svelte-xmpa81,h4.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-blue)}h3.countdown.svelte-xmpa81.svelte-xmpa81{color:#fff}h3.countdown_turn_off.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-light-cyan)}h3.countdown_turn_off.warn.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-red)}h3.countdown_turn_off.svelte-xmpa81.svelte-xmpa81{margin-top:5px}h3.countdown.svelte-xmpa81 span.svelte-xmpa81{color:var(--dmt-green)}h3.countdown_turn_off.svelte-xmpa81 span.svelte-xmpa81{color:#fff}h4.suboption.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-silver)}h3.sleep_device.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-red)}h4.suboption.warn.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-pink)}.sleep_device.svelte-xmpa81.svelte-xmpa81{margin-bottom:20px}button.svelte-xmpa81.svelte-xmpa81{background-color:var(--dmt-light-cyan);border:0;padding:10px;margin:0 auto}button.svelte-xmpa81.svelte-xmpa81:disabled{opacity:.4}button.show_more_options.svelte-xmpa81.svelte-xmpa81{background-color:var(--dmt-silver)}button.open_door_show_options.svelte-xmpa81.svelte-xmpa81,.entry_door_options.svelte-xmpa81 button.delayed_open.svelte-xmpa81{background-color:var(--dmt-blue);color:#000}button.cancel.svelte-xmpa81.svelte-xmpa81{background-color:var(--dmt-silver)}.parking_door_options.svelte-xmpa81 button.keep_open_in_progress.svelte-xmpa81,.parking_door_options.svelte-xmpa81 button.personal_entry_in_progress.svelte-xmpa81{color:#fff;background-color:var(--dmt-navy)}.parking_door_options.svelte-xmpa81 h4.svelte-xmpa81{color:var(--dmt-warm-pink)}.parking_door_options.svelte-xmpa81 button.fence_keep_open.svelte-xmpa81{background-color:var(--dmt-warm-pink)}.parking_door_options.svelte-xmpa81 button.close_fence.svelte-xmpa81{background-color:var(--dmt-pink)}h4.volume.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-pink)}button.volume.svelte-xmpa81.svelte-xmpa81{background-color:var(--dmt-pink)}button.personal_entry.svelte-xmpa81.svelte-xmpa81{background-color:var(--dmt-green-yellow)}h3.close_options.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-silver)}button.close_options.svelte-xmpa81.svelte-xmpa81{background-color:var(--dmt-silver)}button.turn_off.svelte-xmpa81.svelte-xmpa81{background-color:#ee6c73;background-color:#eee}.sleep_device.svelte-xmpa81 button.add_time.svelte-xmpa81{background-color:#eee}button.svelte-xmpa81.svelte-xmpa81{border-radius:5px}button.svelte-1u4dkh7{margin-left:5px;border-radius:5px;height:35px;background-color:#f2fafa;border:0}button.svelte-1u4dkh7:focus{outline:none;box-shadow:none}button.present.svelte-1u4dkh7{color:var(--dmt-black);background-color:var(--dmt-bright-cyan)}button.moving.svelte-1u4dkh7{color:var(--dmt-bright-cyan);background-color:var(--dmt-black);border:2px solid var(--dmt-bright-cyan)}button.disconnected.svelte-1u4dkh7{background-color:var(--dmt-red);color:#fff}main.svelte-1kxggon{text-align:center;margin:0 auto}.blinds_ap2.visible.svelte-1kxggon{display:block}.section.svelte-1kxggon{padding:5px 10px}@media (min-width: 640px){main.svelte-1kxggon{max-width:none}}.notifications.svelte-9jalg6.svelte-9jalg6{margin-top:20px}.notification.svelte-9jalg6.svelte-9jalg6{display:block;width:100%;padding:10px 0;margin-bottom:5px}.notification.svelte-9jalg6 .title.svelte-9jalg6{font-weight:700;font-size:.8em;opacity:.8;margin-bottom:3px}.notification.svelte-9jalg6 .time.svelte-9jalg6{font-size:.8em;opacity:.4}.logview.svelte-jdzn25.svelte-jdzn25{color:var(--dmt-light-gray);width:95%;max-width:600px;text-align:left;margin:0 auto;padding-bottom:20px}h2.title.svelte-jdzn25.svelte-jdzn25{color:var(--dmt-light-cyan);text-align:center}.log_entry.svelte-jdzn25.svelte-jdzn25{font-size:.8rem;margin-bottom:1px;color:var(--dmt-silver)}.log_entry.recent.svelte-jdzn25.svelte-jdzn25{color:var(--dmt-cyan)}.log_entry.very_recent.svelte-jdzn25.svelte-jdzn25{color:var(--dmt-green)}.log_entry.svelte-jdzn25 span.time.svelte-jdzn25{color:gray;color:var(--dmt-light-cyan);padding-right:5px;width:50px;text-align:right;display:inline-block;font-size:.9em}.log_entry.svelte-jdzn25 span.time span.diff.svelte-jdzn25{color:var(--dmt-gray)}button.svelte-jdzn25.svelte-jdzn25{background-color:var(--dmt-light-cyan);border:0;padding:10px;width:100px;margin:0 auto;display:block}@media only screen and (max-width: 768px){.log_entry.svelte-jdzn25.svelte-jdzn25{font-size:.4rem}}.dmt.svelte-vrzjix{font-size:1.5rem;font-weight:800;color:var(--dmt-cool-cyan);color:var(--dmt-cyan)}.app.svelte-vrzjix{font-size:1.5rem;font-weight:300;color:var(--dmt-pink);color:var(--dmt-cool-cyan)}.wrapper.svelte-mtqbfw.svelte-mtqbfw{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.wrapper.svelte-mtqbfw p.svelte-mtqbfw{color:var(--dmt-pink)}.wrapper.svelte-mtqbfw p span.svelte-mtqbfw{color:var(--dmt-cyan)}.errors.svelte-1nzvkt5.svelte-1nzvkt5{width:100%;font-size:.6rem;max-width:700px;padding:0 10px;margin:0 auto;box-sizing:border-box}.errors.svelte-1nzvkt5 .error.svelte-1nzvkt5{padding:15px;margin-top:10px;background-color:var(--dmt-dark-red);color:#fff;border-radius:10px;color:#bbb;word-break:break-word}.errors.svelte-1nzvkt5 .error.cors_problem.svelte-1nzvkt5{background-color:#424de6}.error.svelte-1nzvkt5 .header.svelte-1nzvkt5{margin-bottom:5px}.error.svelte-1nzvkt5 .header .title.svelte-1nzvkt5{background-color:var(--dmt-dark-gray);padding:2px 4px;color:#fff}.error.svelte-1nzvkt5 .header .msg.svelte-1nzvkt5{color:#fff}.snackbar.svelte-ccmijj{display:none;background-color:transparent;color:transparent;text-align:start;position:fixed;z-index:9999;width:100%;max-width:60vw;padding-left:2.5rem;bottom:2rem;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s;font-size:17px}.message.svelte-ccmijj{background-color:#333;color:#fff;border-radius:2px;padding:1rem;align-items:flex-start;display:flex!important;gap:20px;justify-content:space-between}.show.svelte-ccmijj{display:flex!important}.danger.svelte-ccmijj{color:var(--dmt-red)}button.svelte-ccmijj{display:grid;place-items:center;padding:0;margin:0;color:#fff;background:transparent;border:transparent;cursor:pointer}button.svelte-ccmijj:active{transform:scale(.75)}main.svelte-gx051d.svelte-gx051d{text-align:center;margin:0 auto;color:var(--dmt-silver)}main.svelte-gx051d.svelte-gx051d{width:100%;height:100%}p.logview_counter.svelte-gx051d.svelte-gx051d{font-size:.8rem}p.logview_counter.svelte-gx051d span.svelte-gx051d{color:var(--dmt-silver)}p.logview_counter.svelte-gx051d span.small.svelte-gx051d{color:var(--dmt-light-gray);font-size:.6rem}@media (min-width: 640px){main.svelte-gx051d.svelte-gx051d{max-width:none}} diff --git a/apps/dmt-mobile/assets/index-3c0f37a7.js b/apps/dmt-mobile/assets/index-3c0f37a7.js deleted file mode 100644 index 4661d50b0..000000000 --- a/apps/dmt-mobile/assets/index-3c0f37a7.js +++ /dev/null @@ -1,73 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const l of s.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();function ge(){}const ti=t=>t;function so(t,e){for(const n in e)t[n]=e[n];return t}function Zf(t){return t()}function di(){return Object.create(null)}function yt(t){t.forEach(Zf)}function Yn(t){return typeof t=="function"}function at(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let tr;function hi(t,e){return tr||(tr=document.createElement("a")),tr.href=e,t===tr.href}function oo(t){return Object.keys(t).length===0}function Rt(t,...e){if(t==null)return ge;const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function lo(t){let e;return Rt(t,n=>e=n)(),e}function wt(t,e,n){t.$$.on_destroy.push(Rt(e,n))}function Gf(t,e,n,r){if(t){const i=Vf(t,e,n,r);return t[0](i)}}function Vf(t,e,n,r){return t[1]&&r?so(n.ctx.slice(),t[1](r(e))):n.ctx}function Qf(t,e,n,r){if(t[2]&&r){const i=t[2](r(n));if(e.dirty===void 0)return i;if(typeof i=="object"){const s=[],l=Math.max(e.dirty.length,i.length);for(let c=0;c32){const e=[],n=t.ctx.length/32;for(let r=0;rwindow.performance.now():()=>Date.now(),ni=ts?t=>requestAnimationFrame(t):ge;const zn=new Set;function rs(t){zn.forEach(e=>{e.c(t)||(zn.delete(e),e.f())}),zn.size!==0&&ni(rs)}function is(t){let e;return zn.size===0&&ni(rs),{promise:new Promise(n=>{zn.add(e={c:t,f:n})}),abort(){zn.delete(e)}}}function O(t,e){t.appendChild(e)}function fs(t){if(!t)return document;const e=t.getRootNode?t.getRootNode():t.ownerDocument;return e&&e.host?e:t.ownerDocument}function co(t){const e=M("style");return ao(fs(t),e),e.sheet}function ao(t,e){return O(t.head||t,e),e.sheet}function C(t,e,n){t.insertBefore(e,n||null)}function T(t){t.parentNode&&t.parentNode.removeChild(t)}function wn(t,e){for(let n=0;nt.removeEventListener(e,n,r)}function ss(t){return function(e){return e.preventDefault(),t.call(this,e)}}function pi(t){return function(e){return e.stopPropagation(),t.call(this,e)}}function L(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function uo(t){return Array.from(t.childNodes)}function Ie(t,e){e=""+e,t.wholeText!==e&&(t.data=e)}function bi(t,e){t.value=e??""}function nr(t,e,n,r){n===null?t.style.removeProperty(e):t.style.setProperty(e,n,r?"important":"")}function ce(t,e,n){t.classList[n?"add":"remove"](e)}function ho(t,e,{bubbles:n=!1,cancelable:r=!1}={}){const i=document.createEvent("CustomEvent");return i.initCustomEvent(t,n,r,e),i}const ir=new Map;let fr=0;function _o(t){let e=5381,n=t.length;for(;n--;)e=(e<<5)-e^t.charCodeAt(n);return e>>>0}function po(t,e){const n={stylesheet:co(e),rules:{}};return ir.set(t,n),n}function os(t,e,n,r,i,s,l,c=0){const u=16.666/r;let h=`{ -`;for(let P=0;P<=1;P+=u){const k=e+(n-e)*s(P);h+=P*100+`%{${l(k,1-k)}} -`}const p=h+`100% {${l(n,1-n)}} -}`,b=`__svelte_${_o(p)}_${c}`,m=fs(t),{stylesheet:y,rules:w}=ir.get(m)||po(m,t);w[b]||(w[b]=!0,y.insertRule(`@keyframes ${b} ${p}`,y.cssRules.length));const S=t.style.animation||"";return t.style.animation=`${S?`${S}, `:""}${b} ${r}ms linear ${i}ms 1 both`,fr+=1,b}function jr(t,e){const n=(t.style.animation||"").split(", "),r=n.filter(e?s=>s.indexOf(e)<0:s=>s.indexOf("__svelte")===-1),i=n.length-r.length;i&&(t.style.animation=r.join(", "),fr-=i,fr||bo())}function bo(){ni(()=>{fr||(ir.forEach(t=>{const{ownerNode:e}=t.stylesheet;e&&T(e)}),ir.clear())})}let Qn;function Vn(t){Qn=t}function vo(){if(!Qn)throw new Error("Function called outside component initialization");return Qn}function mo(t){vo().$$.on_mount.push(t)}const In=[],vi=[];let Kn=[];const mi=[],yo=Promise.resolve();let Br=!1;function go(){Br||(Br=!0,yo.then(ls))}function jt(t){Kn.push(t)}const Sr=new Set;let $n=0;function ls(){if($n!==0)return;const t=Qn;do{try{for(;$nt.indexOf(r)===-1?e.push(r):n.push(r)),n.forEach(r=>r()),Kn=e}let Zn;function cs(){return Zn||(Zn=Promise.resolve(),Zn.then(()=>{Zn=null})),Zn}function sr(t,e,n){t.dispatchEvent(ho(`${e?"intro":"outro"}${n}`))}const rr=new Set;let gn;function kt(){gn={r:0,c:[],p:gn}}function Ct(){gn.r||yt(gn.c),gn=gn.p}function re(t,e){t&&t.i&&(rr.delete(t),t.i(e))}function we(t,e,n,r){if(t&&t.o){if(rr.has(t))return;rr.add(t),gn.c.push(()=>{rr.delete(t),r&&(n&&t.d(1),r())}),t.o(e)}else r&&r()}const as={duration:0};function hn(t,e,n){const r={direction:"in"};let i=e(t,n,r),s=!1,l,c,u=0;function h(){l&&jr(t,l)}function p(){const{delay:m=0,duration:y=300,easing:w=ti,tick:S=ge,css:P}=i||as;P&&(l=os(t,0,1,y,m,w,P,u++)),S(0,1);const k=ns()+m,G=k+y;c&&c.abort(),s=!0,jt(()=>sr(t,!0,"start")),c=is(X=>{if(s){if(X>=G)return S(1,0),sr(t,!0,"end"),h(),s=!1;if(X>=k){const j=w((X-k)/y);S(j,1-j)}}return s})}let b=!1;return{start(){b||(b=!0,jr(t),Yn(i)?(i=i(r),cs().then(p)):p())},invalidate(){b=!1},end(){s&&(h(),s=!1)}}}function Ao(t,e,n){const r={direction:"out"};let i=e(t,n,r),s=!0,l;const c=gn;c.r+=1;function u(){const{delay:h=0,duration:p=300,easing:b=ti,tick:m=ge,css:y}=i||as;y&&(l=os(t,1,0,p,h,b,y));const w=ns()+h,S=w+p;jt(()=>sr(t,!1,"start")),is(P=>{if(s){if(P>=S)return m(0,1),sr(t,!1,"end"),--c.r||yt(c.c),!1;if(P>=w){const k=b((P-w)/p);m(1-k,k)}}return s})}return Yn(i)?cs().then(()=>{i=i(r),u()}):u(),{end(h){h&&i.tick&&i.tick(1,0),s&&(l&&jr(t,l),s=!1)}}}function Ke(t){t&&t.c()}function je(t,e,n,r){const{fragment:i,after_update:s}=t.$$;i&&i.m(e,n),r||jt(()=>{const l=t.$$.on_mount.map(Zf).filter(Yn);t.$$.on_destroy?t.$$.on_destroy.push(...l):yt(l),t.$$.on_mount=[]}),s.forEach(jt)}function Be(t,e){const n=t.$$;n.fragment!==null&&(wo(n.after_update),yt(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function Eo(t,e){t.$$.dirty[0]===-1&&(In.push(t),go(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const w=y.length?y[0]:m;return h.ctx&&i(h.ctx[b],h.ctx[b]=w)&&(!h.skip_bound&&h.bound[b]&&h.bound[b](w),p&&Eo(t,b)),m}):[],h.update(),p=!0,yt(h.before_update),h.fragment=r?r(h.ctx):!1,e.target){if(e.hydrate){const b=uo(e.target);h.fragment&&h.fragment.l(b),b.forEach(T)}else h.fragment&&h.fragment.c();e.intro&&re(t.$$.fragment),je(t,e.target,e.anchor,e.customElement),ls()}Vn(u)}class dt{$destroy(){Be(this,1),this.$destroy=ge}$on(e,n){if(!Yn(n))return ge;const r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(n),()=>{const i=r.indexOf(n);i!==-1&&r.splice(i,1)}}$set(e){this.$$set&&!oo(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Pn=[];function So(t,e){return{subscribe:tn(t,e).subscribe}}function tn(t,e=ge){let n;const r=new Set;function i(c){if(at(t,c)&&(t=c,n)){const u=!Pn.length;for(const h of r)h[1](),Pn.push(h,t);if(u){for(let h=0;h{r.delete(h),r.size===0&&n&&(n(),n=null)}}return{set:i,update:s,subscribe:l}}function Oo(t,e,n){const r=!Array.isArray(t),i=r?[t]:t,s=e.length<2;return So(n,l=>{let c=!1;const u=[];let h=0,p=ge;const b=()=>{if(h)return;p();const y=e(r?u[0]:u,l);s?l(y):p=Yn(y)?y:ge},m=i.map((y,w)=>Rt(y,S=>{u[w]=S,h&=~(1<{h|=1<`opacity: ${s*i}`}}function xn(t,{delay:e=0,duration:n=400,easing:r=To,x:i=0,y:s=0,opacity:l=0}={}){const c=getComputedStyle(t),u=+c.opacity,h=c.transform==="none"?"":c.transform,p=u*(1-l),[b,m]=_i(i),[y,w]=_i(s);return{delay:e,duration:n,easing:r,css:(S,P)=>` - transform: ${h} translate(${(1-S)*b}${m}, ${(1-S)*y}${w}); - opacity: ${u-p*P}`}}function ko(t){function e(r,...i){const s=r.subscribe(...i);return s.unsubscribe?()=>s.unsubscribe():s}function n(r){let i;return e(r,s=>i=s)(),i}return(r,i,s,l,c)=>{const{errors:u}=n(t),h=new Date,p=`${h.getHours()}:${`0${h.getMinutes()}`.slice(-2)}`;c&&c.stack?u.push({msg:r,stacktrace:c.stack,time:p}):u.push({msg:`"${r}" (No more info because of CORS, fix: 1) check for the same error on device where gui runs on :80... 2) if more possible errors from this source, then rethrow - see example in dmt-connect/browser/connect around JSON.parse(msg))`,corsProblem:!0,time:p}),t.set({errors:u})}}function Co(t,e="asc"){return function(r,i){if(!r.hasOwnProperty(t)||!i.hasOwnProperty(t))return 0;const s=typeof r[t]=="string"?r[t].toUpperCase():r[t],l=typeof i[t]=="string"?i[t].toUpperCase():i[t];let c=0;return s>l?c=1:s{localStorage.setItem(e,n.toString())})}function yi(t){console.log(`${new Date().toLocaleString()} → ${t}`)}yi.write=yi;const ds=tn(!0);Ro(ds,"show_all_nearby_devices");const hs=tn({errors:[]}),_s=tn(!1);function or(t,{defaultSymbol:e="",showTimeLimitIndicator:n=!1}={}){return!t||!t.currentMedia||t.paused?e:n&&t.timeLimit>0?"⏱️":t.currentMedia.mediaType=="video"?"▶":"♫"}function No(t){let e;return{c(){e=B("disconnected")},m(n,r){C(n,e,r)},p:ge,d(n){n&&T(e)}}}function Do(t){let e,n=or(t[2])+"",r,i,s,l,c,u=t[4]==!1&&gi();return{c(){e=M("span"),r=B(n),i=F(),s=M("h2"),l=B(t[1]),c=F(),u&&u.c(),L(e,"class","play_symbol svelte-5h63c7"),L(s,"class","svelte-5h63c7"),ce(s,"disconnected",t[4]==!1)},m(h,p){C(h,e,p),O(e,r),C(h,i,p),C(h,s,p),O(s,l),O(s,c),u&&u.m(s,null)},p(h,p){p&4&&n!==(n=or(h[2])+"")&&Ie(r,n),p&2&&Ie(l,h[1]),h[4]==!1?u||(u=gi(),u.c(),u.m(s,null)):u&&(u.d(1),u=null),p&16&&ce(s,"disconnected",h[4]==!1)},d(h){h&&T(e),h&&T(i),h&&T(s),u&&u.d()}}}function gi(t){let e;return{c(){e=M("span"),L(e,"class","disconnected svelte-5h63c7")},m(n,r){C(n,e,r)},d(n){n&&T(e)}}}function xi(t){let e,n,r,i=t[3].ip+"",s;return{c(){e=M("div"),n=M("span"),n.textContent="IP Address",r=F(),s=B(i),L(n,"class","svelte-5h63c7"),L(e,"class","device_stat svelte-5h63c7")},m(l,c){C(l,e,c),O(e,n),O(e,r),O(e,s)},p(l,c){c&8&&i!==(i=l[3].ip+"")&&Ie(s,i)},d(l){l&&T(e)}}}function wi(t){let e,n,r,i=t[3].cpuUsage+"",s,l;return{c(){var c,u,h;e=M("div"),n=M("span"),n.textContent="CPU Usage",r=F(),s=B(i),l=B("%"),L(n,"class","svelte-5h63c7"),L(e,"class","device_stat cpu_usage svelte-5h63c7"),ce(e,"warn1",((c=t[3])==null?void 0:c.cpuUsage)>=50),ce(e,"warn2",((u=t[3])==null?void 0:u.cpuUsage)>=70),ce(e,"warn3",((h=t[3])==null?void 0:h.cpuUsage)>=80)},m(c,u){C(c,e,u),O(e,n),O(e,r),O(e,s),O(e,l)},p(c,u){var h,p,b;u&8&&i!==(i=c[3].cpuUsage+"")&&Ie(s,i),u&8&&ce(e,"warn1",((h=c[3])==null?void 0:h.cpuUsage)>=50),u&8&&ce(e,"warn2",((p=c[3])==null?void 0:p.cpuUsage)>=70),u&8&&ce(e,"warn3",((b=c[3])==null?void 0:b.cpuUsage)>=80)},d(c){c&&T(e)}}}function Ai(t){let e,n,r,i=t[3].cpuTemp+"",s,l;return{c(){e=M("div"),n=M("span"),n.textContent="CPU Temperature",r=F(),s=B(i),l=B("°C"),L(n,"class","svelte-5h63c7"),L(e,"class","device_stat svelte-5h63c7")},m(c,u){C(c,e,u),O(e,n),O(e,r),O(e,s),O(e,l)},p(c,u){u&8&&i!==(i=c[3].cpuTemp+"")&&Ie(s,i)},d(c){c&&T(e)}}}function Ei(t){var l,c;let e,n,r,i=(((l=t[3])==null?void 0:l.wifiAP)||((c=t[3])==null?void 0:c.apssid))+"",s;return{c(){e=M("div"),n=M("span"),n.textContent="Wifi",r=F(),s=B(i),L(n,"class","svelte-5h63c7"),L(e,"class","wifi_ap svelte-5h63c7")},m(u,h){C(u,e,h),O(e,n),O(e,r),O(e,s)},p(u,h){var p,b;h&8&&i!==(i=(((p=u[3])==null?void 0:p.wifiAP)||((b=u[3])==null?void 0:b.apssid))+"")&&Ie(s,i)},d(u){u&&T(e)}}}function $o(t){var S,P,k,G,X;let e,n,r,i,s,l,c;function u(j,q){if(j[1])return Do;if(j[4]!=null)return No}let h=u(t),p=h&&h(t),b=((S=t[3])==null?void 0:S.ip)&&xi(t),m=((P=t[3])==null?void 0:P.cpuUsage)&&wi(t),y=((k=t[3])==null?void 0:k.cpuTemp)&&Ai(t),w=(((G=t[3])==null?void 0:G.wifiAP)||((X=t[3])==null?void 0:X.apssid))&&Ei(t);return{c(){e=M("div"),p&&p.c(),r=F(),b&&b.c(),i=F(),m&&m.c(),s=F(),y&&y.c(),l=F(),w&&w.c(),c=bt(),L(e,"class","device_title svelte-5h63c7")},m(j,q){C(j,e,q),p&&p.m(e,null),C(j,r,q),b&&b.m(j,q),C(j,i,q),m&&m.m(j,q),C(j,s,q),y&&y.m(j,q),C(j,l,q),w&&w.m(j,q),C(j,c,q)},p(j,[q]){var z,be,ye,ue,De;h===(h=u(j))&&p?p.p(j,q):(p&&p.d(1),p=h&&h(j),p&&(p.c(),p.m(e,null))),(z=j[3])!=null&&z.ip?b?b.p(j,q):(b=xi(j),b.c(),b.m(i.parentNode,i)):b&&(b.d(1),b=null),(be=j[3])!=null&&be.cpuUsage?m?m.p(j,q):(m=wi(j),m.c(),m.m(s.parentNode,s)):m&&(m.d(1),m=null),(ye=j[3])!=null&&ye.cpuTemp?y?y.p(j,q):(y=Ai(j),y.c(),y.m(l.parentNode,l)):y&&(y.d(1),y=null),(ue=j[3])!=null&&ue.wifiAP||(De=j[3])!=null&&De.apssid?w?w.p(j,q):(w=Ei(j),w.c(),w.m(c.parentNode,c)):w&&(w.d(1),w=null)},i(j){n||jt(()=>{n=hn(e,xn,{}),n.start()})},o:ge,d(j){j&&T(e),p&&p.d(),j&&T(r),b&&b.d(j),j&&T(i),m&&m.d(j),j&&T(s),y&&y.d(j),j&&T(l),w&&w.d(j),j&&T(c)}}}function Po(t,e,n){let r,i,s=ge,l=()=>(s(),s=Rt(c,y=>n(4,i=y)),c);t.$$.on_destroy.push(()=>s());let{connected:c}=e;l();let{nearbyDevices:u}=e,{deviceName:h}=e,{device:p}=e,{activeDeviceKey:b}=e,{player:m}=e;return t.$$set=y=>{"connected"in y&&l(n(0,c=y.connected)),"nearbyDevices"in y&&n(5,u=y.nearbyDevices),"deviceName"in y&&n(1,h=y.deviceName),"device"in y&&n(6,p=y.device),"activeDeviceKey"in y&&n(7,b=y.activeDeviceKey),"player"in y&&n(2,m=y.player)},t.$$.update=()=>{t.$$.dirty&160&&n(3,r=u.find(y=>y.deviceKey==b))},[c,h,m,r,i,u,p,b]}class Io extends dt{constructor(e){super(),ut(this,e,Po,$o,at,{connected:0,nearbyDevices:5,deviceName:1,device:6,activeDeviceKey:7,player:2})}}function Or(t,e=2){return Array(Math.max(e-String(t).length+1,0)).join(0)+t}function Mn(t){t=Math.round(t);const e=Math.floor(t/3600),n=t%3600,r=Math.floor(n/60);return t=n%60,e?`${e}h ${Or(r)}min ${Or(t)}s`:`${r}:${Or(t)}`}function Mo(t){let e=Mn(t[0].currentMedia.duration)+"",n;return{c(){n=B(e)},m(r,i){C(r,n,i)},p(r,i){i&1&&e!==(e=Mn(r[0].currentMedia.duration)+"")&&Ie(n,e)},d(r){r&&T(n)}}}function Uo(t){let e=Mn(Math.floor(t[0].timeposition))+"",n,r,i=Mn(t[0].currentMedia.duration)+"",s,l,c,u=Math.round(t[0].percentposition)+"",h,p;return{c(){n=B(e),r=B(" / "),s=B(i),l=B(" — "),c=M("span"),h=B(u),p=B("%"),L(c,"class","svelte-b6jwnj")},m(b,m){C(b,n,m),C(b,r,m),C(b,s,m),C(b,l,m),C(b,c,m),O(c,h),O(c,p)},p(b,m){m&1&&e!==(e=Mn(Math.floor(b[0].timeposition))+"")&&Ie(n,e),m&1&&i!==(i=Mn(b[0].currentMedia.duration)+"")&&Ie(s,i),m&1&&u!==(u=Math.round(b[0].percentposition)+"")&&Ie(h,u)},d(b){b&&T(n),b&&T(r),b&&T(s),b&&T(l),b&&T(c)}}}function Lo(t){let e;return{c(){e=B("(radio)")},m(n,r){C(n,e,r)},p:ge,d(n){n&&T(e)}}}function jo(t){let e;function n(s,l){if(s[0].isStream)return Lo;if(s[0].timeposition)return Uo;if(s[0].duration)return Mo}let r=n(t),i=r&&r(t);return{c(){e=M("section"),i&&i.c(),L(e,"class","progress svelte-b6jwnj"),ce(e,"faded",t[0].paused)},m(s,l){C(s,e,l),i&&i.m(e,null)},p(s,[l]){r===(r=n(s))&&i?i.p(s,l):(i&&i.d(1),i=r&&r(s),i&&(i.c(),i.m(e,null))),l&1&&ce(e,"faded",s[0].paused)},i:ge,o:ge,d(s){s&&T(e),i&&i.d()}}}function Bo(t,e,n){let{player:r}=e;return t.$$set=i=>{"player"in i&&n(0,r=i.player)},[r]}class zo extends dt{constructor(e){super(),ut(this,e,Bo,jo,at,{player:0})}}function Si(t){let e,n,r,i;function s(u,h){if(u[2]&&u[6])return qo;if(u[6])return Ko}let l=s(t),c=l&&l(t);return r=new zo({props:{player:t[0]}}),{c(){e=M("div"),c&&c.c(),n=F(),Ke(r.$$.fragment),L(e,"class","wrapper svelte-120eh85")},m(u,h){C(u,e,h),c&&c.m(e,null),O(e,n),je(r,e,null),i=!0},p(u,h){l===(l=s(u))&&c?c.p(u,h):(c&&c.d(1),c=l&&l(u),c&&(c.c(),re(c,1),c.m(e,n)));const p={};h&1&&(p.player=u[0]),r.$set(p)},i(u){i||(re(c),re(r.$$.fragment,u),i=!0)},o(u){we(r.$$.fragment,u),i=!1},d(u){u&&T(e),c&&c.d(),Be(r)}}}function Ko(t){let e,n;return{c(){e=M("section"),e.textContent="[ No media loaded ]",L(e,"class","no_media svelte-120eh85")},m(r,i){C(r,e,i)},p:ge,i(r){n||jt(()=>{n=hn(e,xn,{}),n.start()})},o:ge,d(r){r&&T(e)}}}function qo(t){let e,n,r=or(t[0],{showTimeLimitIndicator:!0})+"",i,s,l,c,u,h,p=t[3]&&Oi(t);return{c(){var b;e=M("section"),n=M("span"),i=B(r),s=F(),l=B(t[2]),c=F(),u=M("div"),p&&p.c(),L(n,"class","play_symbol svelte-120eh85"),L(u,"class","file_path svelte-120eh85"),L(e,"class","current_media svelte-120eh85"),ce(e,"playing",!t[0].paused),ce(e,"within_limit",!t[0].isStream&&t[0].limit),ce(e,"last_in_limit",!t[0].isStream&&t[0].limit==1),ce(e,"error",t[5]==t[3]&&((b=t[4])==null?void 0:b.error))},m(b,m){C(b,e,m),O(e,n),O(n,i),O(e,s),O(e,l),O(e,c),O(e,u),p&&p.m(u,null)},p(b,m){var y;m&1&&r!==(r=or(b[0],{showTimeLimitIndicator:!0})+"")&&Ie(i,r),m&4&&Ie(l,b[2]),b[3]?p?p.p(b,m):(p=Oi(b),p.c(),p.m(u,null)):p&&(p.d(1),p=null),m&1&&ce(e,"playing",!b[0].paused),m&1&&ce(e,"within_limit",!b[0].isStream&&b[0].limit),m&1&&ce(e,"last_in_limit",!b[0].isStream&&b[0].limit==1),m&56&&ce(e,"error",b[5]==b[3]&&((y=b[4])==null?void 0:y.error))},i(b){h||jt(()=>{h=hn(e,xn,{}),h.start()})},o:ge,d(b){b&&T(e),p&&p.d()}}}function Oi(t){let e=Ti(t[3])+"",n;return{c(){n=B(e)},m(r,i){C(r,n,i)},p(r,i){i&8&&e!==(e=Ti(r[3])+"")&&Ie(n,e)},d(r){r&&T(n)}}}function Yo(t){let e,n,r=t[0]&&Si(t);return{c(){r&&r.c(),e=bt()},m(i,s){r&&r.m(i,s),C(i,e,s),n=!0},p(i,[s]){i[0]?r?(r.p(i,s),s&1&&re(r,1)):(r=Si(i),r.c(),re(r,1),r.m(e.parentNode,e)):r&&(kt(),we(r,1,1,()=>{r=null}),Ct())},i(i){n||(re(r),n=!0)},o(i){we(r),n=!1},d(i){r&&r.d(i),i&&T(e)}}}function Ti(t){return t.replace("/root/DMTMountedMedia","")}function Fo(t,e,n){let r,i=ge,s=()=>(i(),i=Rt(c,y=>n(6,r=y)),c);t.$$.on_destroy.push(()=>i());let{player:l}=e,{connected:c}=e;s();let{store:u}=e,{songTitle:h}=e,{songPath:p}=e,{playlistCurrentMedia:b}=e,{playlistSongPath:m}=e;return t.$$set=y=>{"player"in y&&n(0,l=y.player),"connected"in y&&s(n(1,c=y.connected)),"store"in y&&n(7,u=y.store),"songTitle"in y&&n(2,h=y.songTitle),"songPath"in y&&n(3,p=y.songPath),"playlistCurrentMedia"in y&&n(4,b=y.playlistCurrentMedia),"playlistSongPath"in y&&n(5,m=y.playlistSongPath)},[l,c,h,p,b,m,r,u]}class Ho extends dt{constructor(e){super(),ut(this,e,Fo,Yo,at,{player:0,connected:1,store:7,songTitle:2,songPath:3,playlistCurrentMedia:4,playlistSongPath:5})}}function ki(t){let e;function n(s,l){return s[1].paused?Wo:Jo}let r=n(t),i=r(t);return{c(){i.c(),e=bt()},m(s,l){i.m(s,l),C(s,e,l)},p(s,l){r===(r=n(s))&&i?i.p(s,l):(i.d(1),i=r(s),i&&(i.c(),i.m(e.parentNode,e)))},d(s){i.d(s),s&&T(e)}}}function Jo(t){let e,n,r,i=(t[2]||"")+"",s,l,c,u;return{c(){e=M("button"),n=B("● Pause "),r=M("span"),s=B(i),L(r,"class","svelte-p9vgzg"),L(e,"class","pause svelte-p9vgzg"),e.disabled=l=!t[5]},m(h,p){C(h,e,p),O(e,n),O(e,r),O(r,s),c||(u=Se(e,"click",t[8]),c=!0)},p(h,p){p&4&&i!==(i=(h[2]||"")+"")&&Ie(s,i),p&32&&l!==(l=!h[5])&&(e.disabled=l)},d(h){h&&T(e),c=!1,u()}}}function Wo(t){let e,n,r,i=(t[2]||"")+"",s,l,c,u;return{c(){e=M("button"),n=B("▶ Play "),r=M("span"),s=B(i),L(r,"class","svelte-p9vgzg"),L(e,"class","play svelte-p9vgzg"),e.disabled=l=!t[5]},m(h,p){C(h,e,p),O(e,n),O(e,r),O(r,s),c||(u=Se(e,"click",t[7]),c=!0)},p(h,p){p&4&&i!==(i=(h[2]||"")+"")&&Ie(s,i),p&32&&l!==(l=!h[5])&&(e.disabled=l)},d(h){h&&T(e),c=!1,u()}}}function Ci(t){let e,n=t[1].volume+"",r;return{c(){e=M("div"),r=B(n),L(e,"class","volume_level svelte-p9vgzg"),ce(e,"faded",t[1].paused)},m(i,s){C(i,e,s),O(e,r)},p(i,s){s&2&&n!==(n=i[1].volume+"")&&Ie(r,n),s&2&&ce(e,"faded",i[1].paused)},d(i){i&&T(e)}}}function Ri(t){let e,n,r=t[1].isStream?"Close radio":"Stop",i,s,l,c;return{c(){e=M("button"),n=B("■ "),i=B(r),L(e,"class","stop svelte-p9vgzg"),e.disabled=s=!t[5],ce(e,"radio",t[1].isStream)},m(u,h){C(u,e,h),O(e,n),O(e,i),l||(c=Se(e,"click",t[11]),l=!0)},p(u,h){h&2&&r!==(r=u[1].isStream?"Close radio":"Stop")&&Ie(i,r),h&32&&s!==(s=!u[5])&&(e.disabled=s),h&2&&ce(e,"radio",u[1].isStream)},d(u){u&&T(e),l=!1,c()}}}function Ni(t){let e,n,r,i,s,l,c,u,h,p,b=(t[1].repeatCount||"")+"",m,y,w,S;return{c(){e=M("button"),n=B("Shuffle"),i=F(),s=M("button"),l=B("Similar"),u=F(),h=M("button"),p=B("Repeat "),m=B(b),L(e,"class","shuffle svelte-p9vgzg"),e.disabled=r=!t[5],L(s,"class","similar svelte-p9vgzg"),s.disabled=c=!t[5],L(h,"class","repeat svelte-p9vgzg"),h.disabled=y=!t[5],ce(h,"repeat_set",t[1].repeatCount>0)},m(P,k){C(P,e,k),O(e,n),C(P,i,k),C(P,s,k),O(s,l),C(P,u,k),C(P,h,k),O(h,p),O(h,m),w||(S=[Se(e,"click",t[12]),Se(s,"click",t[13]),Se(h,"click",t[14])],w=!0)},p(P,k){k&32&&r!==(r=!P[5])&&(e.disabled=r),k&32&&c!==(c=!P[5])&&(s.disabled=c),k&2&&b!==(b=(P[1].repeatCount||"")+"")&&Ie(m,b),k&32&&y!==(y=!P[5])&&(h.disabled=y),k&2&&ce(h,"repeat_set",P[1].repeatCount>0)},d(P){P&&T(e),P&&T(i),P&&T(s),P&&T(u),P&&T(h),w=!1,yt(S)}}}function Di(t){let e,n,r,i,s,l,c,u,h;return{c(){e=M("button"),n=B("« 20s"),i=F(),s=M("button"),l=B("20s »"),L(e,"class","backward svelte-p9vgzg"),e.disabled=r=!t[5],L(s,"class","forward svelte-p9vgzg"),s.disabled=c=!t[5]},m(p,b){C(p,e,b),O(e,n),C(p,i,b),C(p,s,b),O(s,l),u||(h=[Se(e,"click",t[15]),Se(s,"click",t[16])],u=!0)},p(p,b){b&32&&r!==(r=!p[5])&&(e.disabled=r),b&32&&c!==(c=!p[5])&&(s.disabled=c)},d(p){p&&T(e),p&&T(i),p&&T(s),u=!1,yt(h)}}}function $i(t){let e;function n(s,l){return s[1].isStream?Go:Zo}let r=n(t),i=r(t);return{c(){i.c(),e=bt()},m(s,l){i.m(s,l),C(s,e,l)},p(s,l){r===(r=n(s))&&i?i.p(s,l):(i.d(1),i=r(s),i&&(i.c(),i.m(e.parentNode,e)))},d(s){i.d(s),s&&T(e)}}}function Zo(t){let e,n,r,i,s,l,c=(t[1].limit>0||t[1].timeLimit>0)&&Pi(t),u=t[1].limit>0&&Ii(t);function h(m,y){return m[1].timeLimit>0?Qo:Vo}let p=h(t),b=p(t);return{c(){c&&c.c(),e=F(),u&&u.c(),n=F(),r=M("button"),b.c(),L(r,"class","limit svelte-p9vgzg"),r.disabled=i=!t[5],ce(r,"limit_set",t[1].limit>0),ce(r,"time_limit_set",t[1].timeLimit>0)},m(m,y){c&&c.m(m,y),C(m,e,y),u&&u.m(m,y),C(m,n,y),C(m,r,y),b.m(r,null),s||(l=Se(r,"click",t[6]),s=!0)},p(m,y){m[1].limit>0||m[1].timeLimit>0?c?c.p(m,y):(c=Pi(m),c.c(),c.m(e.parentNode,e)):c&&(c.d(1),c=null),m[1].limit>0?u?u.p(m,y):(u=Ii(m),u.c(),u.m(n.parentNode,n)):u&&(u.d(1),u=null),p===(p=h(m))&&b?b.p(m,y):(b.d(1),b=p(m),b&&(b.c(),b.m(r,null))),y&32&&i!==(i=!m[5])&&(r.disabled=i),y&2&&ce(r,"limit_set",m[1].limit>0),y&2&&ce(r,"time_limit_set",m[1].timeLimit>0)},d(m){c&&c.d(m),m&&T(e),u&&u.d(m),m&&T(n),m&&T(r),b.d(),s=!1,l()}}}function Go(t){let e,n,r,i,s,l=t[1].timeLimit>0&&Mi(t);function c(p,b){return p[1].timeLimit>0?el:Xo}let u=c(t),h=u(t);return{c(){l&&l.c(),e=F(),n=M("button"),h.c(),L(n,"class","limit svelte-p9vgzg"),n.disabled=r=!t[5],ce(n,"time_limit_set",t[1].timeLimit>0)},m(p,b){l&&l.m(p,b),C(p,e,b),C(p,n,b),h.m(n,null),i||(s=Se(n,"click",t[6]),i=!0)},p(p,b){p[1].timeLimit>0?l?l.p(p,b):(l=Mi(p),l.c(),l.m(e.parentNode,e)):l&&(l.d(1),l=null),u===(u=c(p))&&h?h.p(p,b):(h.d(1),h=u(p),h&&(h.c(),h.m(n,null))),b&32&&r!==(r=!p[5])&&(n.disabled=r),b&2&&ce(n,"time_limit_set",p[1].timeLimit>0)},d(p){l&&l.d(p),p&&T(e),p&&T(n),h.d(),i=!1,s()}}}function Pi(t){let e,n,r,i,s;return{c(){e=M("button"),n=B("🗑️ Cancel"),L(e,"class","remove_limit svelte-p9vgzg"),e.disabled=r=!t[5],ce(e,"remove_time_limit",t[1].timeLimit>0)},m(l,c){C(l,e,c),O(e,n),i||(s=Se(e,"click",t[18]),i=!0)},p(l,c){c&32&&r!==(r=!l[5])&&(e.disabled=r),c&2&&ce(e,"remove_time_limit",l[1].timeLimit>0)},d(l){l&&T(e),i=!1,s()}}}function Ii(t){let e,n,r,i,s;return{c(){e=M("button"),n=B("⏱️ Limit"),L(e,"class","set_time_limit svelte-p9vgzg"),e.disabled=r=!t[5]},m(l,c){C(l,e,c),O(e,n),i||(s=Se(e,"click",t[19]),i=!0)},p(l,c){c&32&&r!==(r=!l[5])&&(e.disabled=r)},d(l){l&&T(e),i=!1,s()}}}function Vo(t){let e,n=(t[1].limit||"")+"",r;return{c(){e=B("Limit "),r=B(n)},m(i,s){C(i,e,s),C(i,r,s)},p(i,s){s&2&&n!==(n=(i[1].limit||"")+"")&&Ie(r,n)},d(i){i&&T(e),i&&T(r)}}}function Qo(t){let e,n,r=lr(t[1])+"",i;return{c(){e=M("span"),n=B("⏱️ "),i=B(r)},m(s,l){C(s,e,l),O(e,n),O(e,i)},p(s,l){l&2&&r!==(r=lr(s[1])+"")&&Ie(i,r)},d(s){s&&T(e)}}}function Mi(t){let e,n,r,i,s;return{c(){e=M("button"),n=B("🗑️ Cancel"),L(e,"class","remove_limit svelte-p9vgzg"),e.disabled=r=!t[5],ce(e,"remove_time_limit",t[1].timeLimit>0)},m(l,c){C(l,e,c),O(e,n),i||(s=Se(e,"click",t[17]),i=!0)},p(l,c){c&32&&r!==(r=!l[5])&&(e.disabled=r),c&2&&ce(e,"remove_time_limit",l[1].timeLimit>0)},d(l){l&&T(e),i=!1,s()}}}function Xo(t){let e;return{c(){e=M("span"),e.textContent="⏱️ Limit"},m(n,r){C(n,e,r)},p:ge,d(n){n&&T(e)}}}function el(t){let e,n,r=lr(t[1])+"",i;return{c(){e=M("span"),n=B("⏱️ "),i=B(r)},m(s,l){C(s,e,l),O(e,n),O(e,i)},p(s,l){l&2&&r!==(r=lr(s[1])+"")&&Ie(i,r)},d(s){s&&T(e)}}}function tl(t){let e,n,r,i,s,l,c,u,h,p,b,m,y,w,S,P,k,G,X=t[3]&&ki(t),j=t[5]&&t[1].volume!=null&&Ci(t),q=t[3]&&Ri(t),z=!t[1].isStream&&t[3]&&Ni(t),be=!t[1].isStream&&t[3]&&Di(t),ye=t[3]&&$i(t);return{c(){e=M("section"),X&&X.c(),n=F(),r=M("button"),i=B("Vol ↓"),l=F(),c=M("button"),u=B("Vol ↑"),p=F(),j&&j.c(),b=F(),m=M("section"),q&&q.c(),y=F(),z&&z.c(),w=F(),S=M("section"),be&&be.c(),P=F(),ye&&ye.c(),L(r,"class","volume svelte-p9vgzg"),r.disabled=s=!t[5],L(c,"class","volume svelte-p9vgzg"),c.disabled=h=!t[5],L(e,"class","main svelte-p9vgzg"),L(m,"class","svelte-p9vgzg"),L(S,"class","svelte-p9vgzg")},m(ue,De){C(ue,e,De),X&&X.m(e,null),O(e,n),O(e,r),O(r,i),O(e,l),O(e,c),O(c,u),O(e,p),j&&j.m(e,null),C(ue,b,De),C(ue,m,De),q&&q.m(m,null),O(m,y),z&&z.m(m,null),C(ue,w,De),C(ue,S,De),be&&be.m(S,null),O(S,P),ye&&ye.m(S,null),k||(G=[Se(r,"click",t[9]),Se(c,"click",t[10])],k=!0)},p(ue,[De]){ue[3]?X?X.p(ue,De):(X=ki(ue),X.c(),X.m(e,n)):X&&(X.d(1),X=null),De&32&&s!==(s=!ue[5])&&(r.disabled=s),De&32&&h!==(h=!ue[5])&&(c.disabled=h),ue[5]&&ue[1].volume!=null?j?j.p(ue,De):(j=Ci(ue),j.c(),j.m(e,null)):j&&(j.d(1),j=null),ue[3]?q?q.p(ue,De):(q=Ri(ue),q.c(),q.m(m,y)):q&&(q.d(1),q=null),!ue[1].isStream&&ue[3]?z?z.p(ue,De):(z=Ni(ue),z.c(),z.m(m,null)):z&&(z.d(1),z=null),!ue[1].isStream&&ue[3]?be?be.p(ue,De):(be=Di(ue),be.c(),be.m(S,P)):be&&(be.d(1),be=null),ue[3]?ye?ye.p(ue,De):(ye=$i(ue),ye.c(),ye.m(S,null)):ye&&(ye.d(1),ye=null)},i:ge,o:ge,d(ue){ue&&T(e),X&&X.d(),j&&j.d(),ue&&T(b),ue&&T(m),q&&q.d(),z&&z.d(),ue&&T(w),ue&&T(S),be&&be.d(),ye&&ye.d(),k=!1,yt(G)}}}function lr(t){return t.timeLimit>2?`${Math.round(t.timeLimit)} min`:`${Math.round(t.timeLimit*60)} s`}function nl(t,e,n){let r,i=ge,s=()=>(i(),i=Rt(l,ue=>n(5,r=ue)),l);t.$$.on_destroy.push(()=>i());let{connected:l}=e;s();let{player:c}=e,{deviceName:u}=e,{songTitle:h}=e,{fnAction:p}=e;function b(){c.isStream||c.timeLimit>0?p("time_limit"):p("limit")}const m=()=>p("play"),y=()=>p("pause"),w=()=>p("volume_down"),S=()=>p("volume_up"),P=()=>p("stop"),k=()=>p("shuffle"),G=()=>p("similar"),X=()=>p("repeat"),j=()=>p("backward"),q=()=>p("forward"),z=()=>p("remove_time_limit"),be=()=>p("remove_limit"),ye=()=>p("time_limit");return t.$$set=ue=>{"connected"in ue&&s(n(0,l=ue.connected)),"player"in ue&&n(1,c=ue.player),"deviceName"in ue&&n(2,u=ue.deviceName),"songTitle"in ue&&n(3,h=ue.songTitle),"fnAction"in ue&&n(4,p=ue.fnAction)},[l,c,u,h,p,r,b,m,y,w,S,P,k,G,X,j,q,z,be,ye]}class rl extends dt{constructor(e){super(),ut(this,e,nl,tl,at,{connected:0,player:1,deviceName:2,songTitle:3,fnAction:4})}}const cr=tn(),dn=tn();function ps(){cr.set(""),dn.set(null)}const Gn=tn();function bs(){Gn.set(null)}const il=""+new URL("close-28a6104f.png",import.meta.url).href,fl=""+new URL("magnifying_glass-a4a7aab7.svg",import.meta.url).href;function Ui(t){let e,n,r,i,s,l;return{c(){e=M("button"),n=B("▼ SET NEXT"),e.disabled=r=!t[2],L(e,"class","svelte-11smw5j")},m(c,u){C(c,e,u),O(e,n),s||(l=Se(e,"click",ss(t[5])),s=!0)},p(c,u){u&4&&r!==(r=!c[2])&&(e.disabled=r)},i(c){i||jt(()=>{i=hn(e,xn,{}),i.start()})},o:ge,d(c){c&&T(e),s=!1,l()}}}function sl(t){var P,k;let e,n,r,i,s,l,c,u,h,p,b,m=((P=t[1])==null?void 0:P.trim())&&((k=t[3])==null?void 0:k.length),y,w,S=m&&Ui(t);return{c(){var G;e=M("form"),n=M("div"),r=M("input"),s=F(),l=M("img"),u=F(),h=M("img"),b=F(),S&&S.c(),L(r,"id","search"),L(r,"placeholder","Playlist Search"),L(r,"type","text"),r.disabled=i=!t[2],L(r,"class","svelte-11smw5j"),L(l,"class","magnifying_glass svelte-11smw5j"),hi(l.src,c=fl)||L(l,"src",c),L(h,"class","clear_search svelte-11smw5j"),hi(h.src,p=il)||L(h,"src",p),ce(h,"invisible",!((G=t[1])!=null&&G.trim())),L(n,"class","input_wrapper svelte-11smw5j"),L(e,"class","svelte-11smw5j")},m(G,X){C(G,e,X),O(e,n),O(n,r),bi(r,t[1]),O(n,s),O(n,l),O(n,u),O(n,h),O(e,b),S&&S.m(e,null),y||(w=[Se(r,"input",t[8]),Se(r,"keyup",t[4]),Se(h,"click",ps)],y=!0)},p(G,[X]){var j,q,z;X&4&&i!==(i=!G[2])&&(r.disabled=i),X&2&&r.value!==G[1]&&bi(r,G[1]),X&2&&ce(h,"invisible",!((j=G[1])!=null&&j.trim())),X&10&&(m=((q=G[1])==null?void 0:q.trim())&&((z=G[3])==null?void 0:z.length)),m?S?(S.p(G,X),X&10&&re(S,1)):(S=Ui(G),S.c(),re(S,1),S.m(e,null)):S&&(S.d(1),S=null)},i(G){re(S)},o:ge,d(G){G&&T(e),S&&S.d(),y=!1,yt(w)}}}function ol(t,e,n){let r,i,s=ge,l=()=>(s(),s=Rt(u,k=>n(2,i=k)),u),c;wt(t,cr,k=>n(1,r=k)),wt(t,dn,k=>n(3,c=k)),t.$$.on_destroy.push(()=>s());let{connected:u}=e;l();let{store:h}=e,{fnAction:p}=e,b;function m(k){h.remoteObject("player").call("playlistSearch",{query:r}).then(G=>{G?k==b&&dn.set(G):dn.set(null)}).catch(console.log)}let y;function w(){bs(),clearTimeout(y),r!=null&&r.trim()?(b=Math.random(),y=setTimeout(()=>{m(b)},300)):(b=null,dn.set(null))}function S(){h.remoteObject("player").call("bump",{query:r}).then(()=>{dn.set(null)}).catch(console.log)}function P(){r=this.value,cr.set(r)}return t.$$set=k=>{"connected"in k&&l(n(0,u=k.connected)),"store"in k&&n(6,h=k.store),"fnAction"in k&&n(7,p=k.fnAction)},[u,r,i,c,w,S,h,p,P]}class ll extends dt{constructor(e){super(),ut(this,e,ol,sl,at,{connected:0,store:6,fnAction:7})}}function cl(t){let e,n,r,i,s,l;return{c(){e=M("div"),n=M("button"),n.textContent="Play",r=F(),i=M("button"),i.textContent="Bump",L(n,"class","svelte-27xey9"),L(i,"class","svelte-27xey9"),L(e,"class","controls svelte-27xey9")},m(c,u){C(c,e,u),O(e,n),O(e,r),O(e,i),s||(l=[Se(n,"click",pi(t[4])),Se(i,"click",pi(t[5]))],s=!0)},p:ge,i:ge,o:ge,d(c){c&&T(e),s=!1,yt(l)}}}function al(t,e,n){let{fnAction:r}=e,{entry:i}=e;function s(h){window.scrollTo({top:0,behavior:"smooth"}),ps(),r("next",{songId:h})}function l(h){r("bump",{args:h})}const c=()=>{s(i.id)},u=()=>{l(i.id)};return t.$$set=h=>{"fnAction"in h&&n(3,r=h.fnAction),"entry"in h&&n(0,i=h.entry)},[i,s,l,r,c,u]}class ul extends dt{constructor(e){super(),ut(this,e,al,cl,at,{fnAction:3,entry:0})}}function Li(t){let e,n,r=t[0].metadata.duration+"",i,s;return{c(){e=M("span"),n=B("["),i=B(r),s=B("]"),L(e,"class","duration svelte-5kr8d6")},m(l,c){C(l,e,c),O(e,n),O(e,i),O(e,s)},p(l,c){c&1&&r!==(r=l[0].metadata.duration+"")&&Ie(i,r)},d(l){l&&T(e)}}}function dl(t){var G,X;let e,n,r,i=t[0].title+"",s,l,c,u=ji(t[0].path)+"",h,p,b,m,y,w,S,P,k=((X=(G=t[0])==null?void 0:G.metadata)==null?void 0:X.duration)&&Li(t);return m=new ul({props:{entry:t[0],fnAction:t[1]}}),{c(){e=M("div"),n=M("div"),k&&k.c(),r=F(),s=B(i),l=F(),c=M("div"),h=B(u),p=F(),b=M("div"),Ke(m.$$.fragment),L(c,"class","file_path svelte-5kr8d6"),L(b,"class","controls svelte-5kr8d6"),L(n,"class","entry svelte-5kr8d6"),ce(n,"selected",t[0].id==t[3]),ce(n,"just_bumped",!t[2]&&t[0].justBumped),ce(n,"within_limit",!t[2]&&t[0].withinLimit),ce(n,"is_search_result",t[2]),ce(n,"error",t[0].error),L(e,"class","entry_wrapper svelte-5kr8d6")},m(j,q){C(j,e,q),O(e,n),k&&k.m(n,null),O(n,r),O(n,s),O(n,l),O(n,c),O(c,h),O(n,p),O(n,b),je(m,b,null),w=!0,S||(P=Se(n,"click",t[5]),S=!0)},p(j,[q]){var be,ye;(ye=(be=j[0])==null?void 0:be.metadata)!=null&&ye.duration?k?k.p(j,q):(k=Li(j),k.c(),k.m(n,r)):k&&(k.d(1),k=null),(!w||q&1)&&i!==(i=j[0].title+"")&&Ie(s,i),(!w||q&1)&&u!==(u=ji(j[0].path)+"")&&Ie(h,u);const z={};q&1&&(z.entry=j[0]),q&2&&(z.fnAction=j[1]),m.$set(z),(!w||q&9)&&ce(n,"selected",j[0].id==j[3]),(!w||q&5)&&ce(n,"just_bumped",!j[2]&&j[0].justBumped),(!w||q&5)&&ce(n,"within_limit",!j[2]&&j[0].withinLimit),(!w||q&4)&&ce(n,"is_search_result",j[2]),(!w||q&1)&&ce(n,"error",j[0].error)},i(j){w||(re(m.$$.fragment,j),y||jt(()=>{y=hn(n,xn,{}),y.start()}),w=!0)},o(j){we(m.$$.fragment,j),w=!1},d(j){j&&T(e),k&&k.d(),Be(m),S=!1,P()}}}function ji(t){return t.replace("/root/DMTMountedMedia","")}function hl(t,e,n){let r;wt(t,Gn,h=>n(3,r=h));let{entry:i}=e,{fnAction:s}=e,{isSearchResult:l}=e;function c(h){h==lo(Gn)?Gn.set(null):Gn.set(h)}const u=()=>{c(i.id)};return t.$$set=h=>{"entry"in h&&n(0,i=h.entry),"fnAction"in h&&n(1,s=h.fnAction),"isSearchResult"in h&&n(2,l=h.isSearchResult)},[i,s,l,r,c,u]}class vs extends dt{constructor(e){super(),ut(this,e,hl,dl,at,{entry:0,fnAction:1,isSearchResult:2})}}function Bi(t,e,n){const r=t.slice();return r[7]=e[n],r}function zi(t){let e,n,r,i;const s=[pl,_l],l=[];function c(u,h){return u[2].length?0:1}return e=c(t),n=l[e]=s[e](t),{c(){n.c(),r=bt()},m(u,h){l[e].m(u,h),C(u,r,h),i=!0},p(u,h){let p=e;e=c(u),e===p?l[e].p(u,h):(kt(),we(l[p],1,1,()=>{l[p]=null}),Ct(),n=l[e],n?n.p(u,h):(n=l[e]=s[e](u),n.c()),re(n,1),n.m(r.parentNode,r))},i(u){i||(re(n),i=!0)},o(u){we(n),i=!1},d(u){l[e].d(u),u&&T(r)}}}function _l(t){let e,n;return{c(){e=M("h3"),e.textContent="[ No matches ]",L(e,"class","no_matches svelte-11vb31n")},m(r,i){C(r,e,i)},p:ge,i(r){n||jt(()=>{n=hn(e,xn,{}),n.start()})},o:ge,d(r){r&&T(e)}}}function pl(t){let e,n,r,i,s,l,c;function u(S,P){return S[2].length>yn?vl:bl}let h=u(t),p=h(t),b=t[2].slice(0,yn),m=[];for(let S=0;Swe(m[S],1,1,()=>{m[S]=null});let w=t[2].length>yn&&qi(t);return{c(){e=M("h3"),p.c(),n=F();for(let S=0;Syn?w?w.p(S,P):(w=qi(S),w.c(),w.m(i,s)):w&&(w.d(1),w=null)},i(S){if(!c){for(let P=0;P{r=null}),Ct())},i(i){n||(re(r),n=!0)},o(i){we(r),n=!1},d(i){r&&r.d(i),i&&T(e)}}}const yn=20;function yl(t,e,n){let r,i=ge,s=()=>(i(),i=Rt(c,p=>n(4,r=p)),c),l;wt(t,dn,p=>n(2,l=p)),t.$$.on_destroy.push(()=>i());let{store:c}=e;s();let{connected:u}=e,{fnAction:h}=e;return t.$$set=p=>{"store"in p&&s(n(0,c=p.store)),"connected"in p&&n(3,u=p.connected),"fnAction"in p&&n(1,h=p.fnAction)},t.$$.update=()=>{t.$$.dirty&16&&r.playlist,t.$$.dirty&16&&r.playlistMetadata},[c,h,l,u,r]}class gl extends dt{constructor(e){super(),ut(this,e,yl,ml,at,{store:0,connected:3,fnAction:1})}}function Yi(t){let e,n=t[1]=="tv"&&Fi(t);return{c(){n&&n.c(),e=bt()},m(r,i){n&&n.m(r,i),C(r,e,i)},p(r,i){r[1]=="tv"?n?n.p(r,i):(n=Fi(r),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},d(r){n&&n.d(r),r&&T(e)}}}function Fi(t){let e,n,r,i,s,l,c,u,h,p,b,m,y,w,S,P,k,G;return{c(){e=M("div"),n=M("button"),n.textContent="Celovečerne risanke",r=F(),i=M("button"),i.textContent="Booba",s=F(),l=M("button"),l.textContent="Rusty Rivets",c=F(),u=M("button"),u.textContent="Jellystone",h=F(),p=M("button"),p.textContent="Pajek Lukas",b=F(),m=M("button"),m.textContent="Medvedek Paddington",y=F(),w=M("button"),w.textContent="Wolfoo",S=F(),P=M("button"),P.textContent="Arpo",L(n,"class","svelte-84hcn8"),L(i,"class","svelte-84hcn8"),L(l,"class","svelte-84hcn8"),L(u,"class","svelte-84hcn8"),L(p,"class","svelte-84hcn8"),L(m,"class","svelte-84hcn8"),L(w,"class","svelte-84hcn8"),L(P,"class","svelte-84hcn8"),L(e,"class","sublist svelte-84hcn8")},m(X,j){C(X,e,j),O(e,n),O(e,r),O(e,i),O(e,s),O(e,l),O(e,c),O(e,u),O(e,h),O(e,p),O(e,b),O(e,m),O(e,y),O(e,w),O(e,S),O(e,P),k||(G=[Se(n,"click",t[6]),Se(i,"click",t[7]),Se(l,"click",t[8]),Se(u,"click",t[9]),Se(p,"click",t[10]),Se(m,"click",t[11]),Se(w,"click",t[12]),Se(P,"click",t[13])],k=!0)},p:ge,d(X){X&&T(e),k=!1,yt(G)}}}function xl(t){let e,n=t[2]&&t[3]&&Yi(t);return{c(){n&&n.c(),e=bt()},m(r,i){n&&n.m(r,i),C(r,e,i)},p(r,[i]){r[2]&&r[3]?n?n.p(r,i):(n=Yi(r),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},i:ge,o:ge,d(r){n&&n.d(r),r&&T(e)}}}function wl(t,e,n){let r,i,s=ge,l=()=>(s(),s=Rt(u,X=>n(3,i=X)),u);wt(t,_s,X=>n(2,r=X)),t.$$.on_destroy.push(()=>s());function c(X){h("sublist",{tag:X})}let{connected:u}=e;l();let{fnAction:h}=e,{deviceName:p}=e;const b=()=>{c("cartoons-slo/")},m=()=>{c("Booba")},y=()=>{c("Rusty Rivets")},w=()=>{c("Jellystone")},S=()=>{c("Lucas the spider")},P=()=>{c("Adventure Paddington")},k=()=>{c("Wolfoo")},G=()=>{c("Arpo")};return t.$$set=X=>{"connected"in X&&l(n(0,u=X.connected)),"fnAction"in X&&n(5,h=X.fnAction),"deviceName"in X&&n(1,p=X.deviceName)},[u,p,r,i,c,h,b,m,y,w,S,P,k,G]}class Al extends dt{constructor(e){super(),ut(this,e,wl,xl,at,{connected:0,fnAction:5,deviceName:1})}}function Hi(t,e,n){const r=t.slice();return r[10]=e[n],r}function Ji(t){let e,n,r,i,s,l,c=t[4].playlistLength+"",u,h,p,b,m,y,w,S,P,k=t[7]&&Wi(t);m=new Al({props:{connected:t[1],deviceName:t[3],fnAction:t[2]}});let G=t[5].filter(Vi).slice(0,1.5*Gi),X=[];for(let q=0;qwe(X[q],1,1,()=>{X[q]=null});return{c(){e=M("h3"),n=B("Playlist @ "),r=B(t[3]),i=F(),s=M("span"),l=B("("),u=B(c),h=B(")"),p=F(),k&&k.c(),b=F(),Ke(m.$$.fragment),y=F();for(let q=0;q{r=null}),Ct())},i(s){n||(re(r),n=!0)},o(s){we(r),n=!1},d(s){r&&r.d(s),s&&T(e)}}}const Gi=20,Vi=({current:t,past:e})=>!t&&!e;function Sl(t,e,n){let r,i,s,l=ge,c=()=>(l(),l=Rt(m,k=>n(9,s=k)),m),u,h,p=ge,b=()=>(p(),p=Rt(y,k=>n(7,h=k)),y);wt(t,dn,k=>n(6,u=k)),t.$$.on_destroy.push(()=>l()),t.$$.on_destroy.push(()=>p());let{store:m}=e;c();let{connected:y}=e;b();let{fnAction:w}=e,{deviceName:S}=e;function P(){window.scrollTo({top:0,behavior:"smooth"}),w("next")}return t.$$set=k=>{"store"in k&&c(n(0,m=k.store)),"connected"in k&&b(n(1,y=k.connected)),"fnAction"in k&&n(2,w=k.fnAction),"deviceName"in k&&n(3,S=k.deviceName)},t.$$.update=()=>{t.$$.dirty&512&&n(5,r=s.playlist),t.$$.dirty&512&&n(4,i=s.playlistMetadata)},[m,y,w,S,i,r,u,h,P,s]}class Ol extends dt{constructor(e){super(),ut(this,e,Sl,El,at,{store:0,connected:1,fnAction:2,deviceName:3})}}function Tl(t){let e,n,r,i,s,l,c;return n=new ll({props:{connected:t[1],store:t[0],fnAction:t[2]}}),i=new gl({props:{connected:t[1],store:t[0],fnAction:t[2]}}),l=new Ol({props:{connected:t[1],store:t[0],fnAction:t[2],deviceName:t[3]}}),{c(){e=M("div"),Ke(n.$$.fragment),r=F(),Ke(i.$$.fragment),s=F(),Ke(l.$$.fragment),L(e,"class","searchable_playlist svelte-1op3n77")},m(u,h){C(u,e,h),je(n,e,null),O(e,r),je(i,e,null),O(e,s),je(l,e,null),c=!0},p(u,[h]){const p={};h&2&&(p.connected=u[1]),h&1&&(p.store=u[0]),h&4&&(p.fnAction=u[2]),n.$set(p);const b={};h&2&&(b.connected=u[1]),h&1&&(b.store=u[0]),h&4&&(b.fnAction=u[2]),i.$set(b);const m={};h&2&&(m.connected=u[1]),h&1&&(m.store=u[0]),h&4&&(m.fnAction=u[2]),h&8&&(m.deviceName=u[3]),l.$set(m)},i(u){c||(re(n.$$.fragment,u),re(i.$$.fragment,u),re(l.$$.fragment,u),c=!0)},o(u){we(n.$$.fragment,u),we(i.$$.fragment,u),we(l.$$.fragment,u),c=!1},d(u){u&&T(e),Be(n),Be(i),Be(l)}}}function kl(t,e,n){let{store:r}=e,{connected:i}=e,{fnAction:s}=e,{deviceName:l}=e;return t.$$set=c=>{"store"in c&&n(0,r=c.store),"connected"in c&&n(1,i=c.connected),"fnAction"in c&&n(2,s=c.fnAction),"deviceName"in c&&n(3,l=c.deviceName)},[r,i,s,l]}class Cl extends dt{constructor(e){super(),ut(this,e,kl,Tl,at,{store:0,connected:1,fnAction:2,deviceName:3})}}function Qi(t){let e,n,r,i,s,l,c,u,h,p,b,m,y,w;return{c(){e=M("h3"),n=B("Play internet radio @ "),r=B(t[2]),i=F(),s=M("div"),l=M("button"),l.textContent="Rock",c=F(),u=M("button"),u.textContent="Jazz",h=F(),p=M("button"),p.textContent="Psytrance",b=F(),m=M("button"),m.textContent="Goatrance",L(l,"class","svelte-tpf42f"),L(u,"class","svelte-tpf42f"),L(p,"class","svelte-tpf42f"),L(m,"class","svelte-tpf42f"),L(s,"class","radios svelte-tpf42f")},m(S,P){C(S,e,P),O(e,n),O(e,r),C(S,i,P),C(S,s,P),O(s,l),O(s,c),O(s,u),O(s,h),O(s,p),O(s,b),O(s,m),y||(w=[Se(l,"click",t[4]),Se(u,"click",t[5]),Se(p,"click",t[6]),Se(m,"click",t[7])],y=!0)},p(S,P){P&4&&Ie(r,S[2])},d(S){S&&T(e),S&&T(i),S&&T(s),y=!1,yt(w)}}}function Rl(t){let e,n=t[3]&&Qi(t);return{c(){n&&n.c(),e=bt()},m(r,i){n&&n.m(r,i),C(r,e,i)},p(r,[i]){r[3]?n?n.p(r,i):(n=Qi(r),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},i:ge,o:ge,d(r){n&&n.d(r),r&&T(e)}}}function Nl(t,e,n){let r,i=ge,s=()=>(i(),i=Rt(l,y=>n(3,r=y)),l);t.$$.on_destroy.push(()=>i());let{connected:l}=e;s();let{fnAction:c}=e,{deviceName:u}=e;const h=()=>{c("play_radio",{radioId:"rock"})},p=()=>{c("play_radio",{radioId:"jazz"})},b=()=>{c("play_radio",{radioId:"progressive-trance"})},m=()=>{c("play_radio",{radioId:"goa-trance"})};return t.$$set=y=>{"connected"in y&&s(n(0,l=y.connected)),"fnAction"in y&&n(1,c=y.fnAction),"deviceName"in y&&n(2,u=y.deviceName)},[l,c,u,r,h,p,b,m]}class Dl extends dt{constructor(e){super(),ut(this,e,Nl,Rl,at,{connected:0,fnAction:1,deviceName:2})}}function Xi(t){let e,n;return e=new Dl({props:{connected:t[0],fnAction:t[4],deviceName:t[1]}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p(r,i){const s={};i&1&&(s.connected=r[0]),i&16&&(s.fnAction=r[4]),i&2&&(s.deviceName=r[1]),e.$set(s)},i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function ef(t){let e,n;return e=new Cl({props:{connected:t[0],store:t[3],fnAction:t[4],deviceName:t[1]}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p(r,i){const s={};i&1&&(s.connected=r[0]),i&8&&(s.store=r[3]),i&16&&(s.fnAction=r[4]),i&2&&(s.deviceName=r[1]),e.$set(s)},i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function $l(t){var p;let e,n,r,i,s,l,c;e=new Ho({props:{connected:t[0],store:t[3],player:t[2],songTitle:t[9],songPath:t[8],playlistCurrentMedia:t[6],playlistSongPath:t[5],fnAction:t[4]}}),r=new rl({props:{connected:t[0],player:t[2],fnAction:t[4],songTitle:t[9],deviceName:t[1]}});let u=t[1]!="tv-ap2"&&Xi(t),h=!t[2].isStream&&((p=t[7])==null?void 0:p.length)&&ef(t);return{c(){Ke(e.$$.fragment),n=F(),Ke(r.$$.fragment),i=F(),u&&u.c(),s=F(),h&&h.c(),l=bt()},m(b,m){je(e,b,m),C(b,n,m),je(r,b,m),C(b,i,m),u&&u.m(b,m),C(b,s,m),h&&h.m(b,m),C(b,l,m),c=!0},p(b,[m]){var S;const y={};m&1&&(y.connected=b[0]),m&8&&(y.store=b[3]),m&4&&(y.player=b[2]),m&512&&(y.songTitle=b[9]),m&256&&(y.songPath=b[8]),m&64&&(y.playlistCurrentMedia=b[6]),m&32&&(y.playlistSongPath=b[5]),m&16&&(y.fnAction=b[4]),e.$set(y);const w={};m&1&&(w.connected=b[0]),m&4&&(w.player=b[2]),m&16&&(w.fnAction=b[4]),m&512&&(w.songTitle=b[9]),m&2&&(w.deviceName=b[1]),r.$set(w),b[1]!="tv-ap2"?u?(u.p(b,m),m&2&&re(u,1)):(u=Xi(b),u.c(),re(u,1),u.m(s.parentNode,s)):u&&(kt(),we(u,1,1,()=>{u=null}),Ct()),!b[2].isStream&&((S=b[7])!=null&&S.length)?h?(h.p(b,m),m&132&&re(h,1)):(h=ef(b),h.c(),re(h,1),h.m(l.parentNode,l)):h&&(kt(),we(h,1,1,()=>{h=null}),Ct())},i(b){c||(re(e.$$.fragment,b),re(r.$$.fragment,b),re(u),re(h),c=!0)},o(b){we(e.$$.fragment,b),we(r.$$.fragment,b),we(u),we(h),c=!1},d(b){Be(e,b),b&&T(n),Be(r,b),b&&T(i),u&&u.d(b),b&&T(s),h&&h.d(b),b&&T(l)}}}function Pl(t,e,n){let r,i,s,l,c,u,h,p,b,m,y=ge,w=()=>(y(),y=Rt(G,j=>n(14,m=j)),G);t.$$.on_destroy.push(()=>y());let{connected:S}=e,{deviceName:P}=e,{player:k}=e,{store:G}=e;w();let{fnAction:X}=e;return t.$$set=j=>{"connected"in j&&n(0,S=j.connected),"deviceName"in j&&n(1,P=j.deviceName),"player"in j&&n(2,k=j.player),"store"in j&&w(n(3,G=j.store)),"fnAction"in j&&n(4,X=j.fnAction)},t.$$.update=()=>{t.$$.dirty&4&&n(13,r=k.currentMedia||{}),t.$$.dirty&8192&&n(12,i=r.artist&&r.song?`${r.artist} - ${r.song}`:r.song),t.$$.dirty&8192&&n(10,s=r.songPath),t.$$.dirty&16384&&n(7,l=m.playlist),t.$$.dirty&128&&n(6,c=(l||[]).find(({current:j})=>j)),t.$$.dirty&64&&n(11,u=c==null?void 0:c.title),t.$$.dirty&64&&n(5,h=c==null?void 0:c.path),t.$$.dirty&6144&&n(9,p=i||u),t.$$.dirty&1056&&n(8,b=s||h)},[S,P,k,G,X,h,c,l,b,p,s,u,i,r,m]}class Il extends dt{constructor(e){super(),ut(this,e,Pl,$l,at,{connected:0,deviceName:1,player:2,store:3,fnAction:4})}}function tf(t,e,n){const r=t.slice();return r[15]=e[n],r}function nf(t){let e,n=t[3],r=[];for(let i=0;i2e3),ce(e,"late_pong2",t[4]-t[5][t[15].deviceKey]>2500),ce(e,"late_pong3",t[4]-t[5][t[15].deviceKey]>3500),ce(e,"connected",t[6][t[15].deviceKey]),ce(e,"disconnected",t[6][t[15].deviceKey]==!1),ce(e,"cpu_usage_warn1",t[15].cpuUsage>50),ce(e,"cpu_usage_warn2",t[15].cpuUsage>70),ce(e,"cpu_usage_warn3",t[15].cpuUsage>80)},m(b,m){C(b,e,m),h&&h.m(e,null),O(e,n),p&&p.m(e,null),O(e,r),O(e,s),O(e,l),c||(u=Se(e,"click",function(){Yn(t[7]({store:t[1],device:t[15]}))&&t[7]({store:t[1],device:t[15]}).apply(this,arguments)}),c=!0)},p(b,m){t=b,t[15].hasErrors?h||(h=rf(),h.c(),h.m(e,n)):h&&(h.d(1),h=null),t[15].playing?p?p.p(t,m):(p=ff(t),p.c(),p.m(e,r)):p&&(p.d(1),p=null),m&8&&i!==(i=t[15].deviceName+"")&&Ie(s,i),m&9&&ce(e,"active",t[15].deviceKey==t[0]),m&8&&ce(e,"local_device",t[15].thisDevice),m&8&&ce(e,"playing",t[15].playing),m&56&&ce(e,"late_pong1",t[4]-t[5][t[15].deviceKey]>2e3),m&56&&ce(e,"late_pong2",t[4]-t[5][t[15].deviceKey]>2500),m&56&&ce(e,"late_pong3",t[4]-t[5][t[15].deviceKey]>3500),m&72&&ce(e,"connected",t[6][t[15].deviceKey]),m&72&&ce(e,"disconnected",t[6][t[15].deviceKey]==!1),m&8&&ce(e,"cpu_usage_warn1",t[15].cpuUsage>50),m&8&&ce(e,"cpu_usage_warn2",t[15].cpuUsage>70),m&8&&ce(e,"cpu_usage_warn3",t[15].cpuUsage>80)},d(b){b&&T(e),h&&h.d(),p&&p.d(),c=!1,u()}}}function Ml(t){let e,n=t[3].length&&nf(t);return{c(){n&&n.c(),e=bt()},m(r,i){n&&n.m(r,i),C(r,e,i)},p(r,[i]){r[3].length?n?n.p(r,i):(n=nf(r),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},i:ge,o:ge,d(r){n&&n.d(r),r&&T(e)}}}function Ul(t,e,n){let r,i,s,l,c;wt(t,ds,k=>n(12,i=k));let{nearbyDevices:u}=e,{activeDeviceKey:h}=e,{store:p}=e,{log:b}=e;function m({store:k,device:G}){cr.set(null),dn.set(null),localStorage.setItem("current_device_key",G.deviceKey),k.switch(G)}const y=tn({});wt(t,y,k=>n(5,l=k)),p.on("pong",({deviceKey:k})=>{y.update(G=>(G[k]=Date.now(),G))});const w=tn({});wt(t,w,k=>n(6,c=k)),w.alreadyDone={};const S=tn(Date.now());wt(t,S,k=>n(4,s=k));function P(){S.set(Date.now()),setTimeout(P,300)}return P(),t.$$set=k=>{"nearbyDevices"in k&&n(10,u=k.nearbyDevices),"activeDeviceKey"in k&&n(0,h=k.activeDeviceKey),"store"in k&&n(1,p=k.store),"log"in k&&n(11,b=k.log)},t.$$.update=()=>{t.$$.dirty&7175&&n(3,r=u.filter(({deviceName:k,playing:G,deviceKey:X,thisDevice:j,ip:q,isRPi:z})=>(X==h||G||i)&&(z||j)).map(k=>{const{ip:G,deviceKey:X,deviceName:j,thisDevice:q,playing:z}=k;return w.alreadyDone[X]||(n(2,w.alreadyDone[X]=!0,w),setTimeout(()=>{b(`${G} Preconnecting ${j}`);const ye=p.preconnect({host:G,deviceKey:X,thisDevice:q});ye.__prevSubUnsubscribe?ye.__prevSubUnsubscribe():ye.on("decommission",()=>{b(`dmt-mobile: Decommissioned connector ${j} @ ${G}`),n(2,w.alreadyDone[X]=!1,w),ye.__prevSubUnsubscribe&&ye.__prevSubUnsubscribe()}),ye.__prevSubUnsubscribe=ye.connected.subscribe(ue=>{w.update(De=>(De[X]=ue,De))})},0)),k}))},[h,p,w,r,s,l,c,m,y,S,u,b,i]}class Ll extends dt{constructor(e){super(),ut(this,e,Ul,Ml,at,{nearbyDevices:10,activeDeviceKey:0,store:1,log:11})}}var jl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ms(t,e,n){return n={path:e,exports:{},require:function(r,i){return ys(r,i??n.path)}},t(n,n.exports),n.exports}function Bl(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach(function(n){var r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:function(){return t[n]}})}),e}function ys(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}var zl={},Kl=Object.freeze({__proto__:null,default:zl}),ql=Bl(Kl),Zt=ms(function(t){(function(e){var n=function(o){var d,a=new Float64Array(16);if(o)for(d=0;d>24&255,o[d+1]=a>>16&255,o[d+2]=a>>8&255,o[d+3]=a&255,o[d+4]=f>>24&255,o[d+5]=f>>16&255,o[d+6]=f>>8&255,o[d+7]=f&255}function S(o,d,a,f,_){var g,x=0;for(g=0;g<_;g++)x|=o[d+g]^a[f+g];return(1&x-1>>>8)-1}function P(o,d,a,f){return S(o,d,a,f,16)}function k(o,d,a,f){return S(o,d,a,f,32)}function G(o,d,a,f){for(var _=f[0]&255|(f[1]&255)<<8|(f[2]&255)<<16|(f[3]&255)<<24,g=a[0]&255|(a[1]&255)<<8|(a[2]&255)<<16|(a[3]&255)<<24,x=a[4]&255|(a[5]&255)<<8|(a[6]&255)<<16|(a[7]&255)<<24,N=a[8]&255|(a[9]&255)<<8|(a[10]&255)<<16|(a[11]&255)<<24,U=a[12]&255|(a[13]&255)<<8|(a[14]&255)<<16|(a[15]&255)<<24,Q=f[4]&255|(f[5]&255)<<8|(f[6]&255)<<16|(f[7]&255)<<24,Y=d[0]&255|(d[1]&255)<<8|(d[2]&255)<<16|(d[3]&255)<<24,Ce=d[4]&255|(d[5]&255)<<8|(d[6]&255)<<16|(d[7]&255)<<24,J=d[8]&255|(d[9]&255)<<8|(d[10]&255)<<16|(d[11]&255)<<24,ie=d[12]&255|(d[13]&255)<<8|(d[14]&255)<<16|(d[15]&255)<<24,fe=f[8]&255|(f[9]&255)<<8|(f[10]&255)<<16|(f[11]&255)<<24,he=a[16]&255|(a[17]&255)<<8|(a[18]&255)<<16|(a[19]&255)<<24,ae=a[20]&255|(a[21]&255)<<8|(a[22]&255)<<16|(a[23]&255)<<24,se=a[24]&255|(a[25]&255)<<8|(a[26]&255)<<16|(a[27]&255)<<24,le=a[28]&255|(a[29]&255)<<8|(a[30]&255)<<16|(a[31]&255)<<24,oe=f[12]&255|(f[13]&255)<<8|(f[14]&255)<<16|(f[15]&255)<<24,W=_,ee=g,H=x,Z=N,V=U,K=Q,A=Y,E=Ce,$=J,R=ie,D=fe,I=he,ne=ae,_e=se,ve=le,pe=oe,v,xe=0;xe<20;xe+=2)v=W+ne|0,V^=v<<7|v>>>32-7,v=V+W|0,$^=v<<9|v>>>32-9,v=$+V|0,ne^=v<<13|v>>>32-13,v=ne+$|0,W^=v<<18|v>>>32-18,v=K+ee|0,R^=v<<7|v>>>32-7,v=R+K|0,_e^=v<<9|v>>>32-9,v=_e+R|0,ee^=v<<13|v>>>32-13,v=ee+_e|0,K^=v<<18|v>>>32-18,v=D+A|0,ve^=v<<7|v>>>32-7,v=ve+D|0,H^=v<<9|v>>>32-9,v=H+ve|0,A^=v<<13|v>>>32-13,v=A+H|0,D^=v<<18|v>>>32-18,v=pe+I|0,Z^=v<<7|v>>>32-7,v=Z+pe|0,E^=v<<9|v>>>32-9,v=E+Z|0,I^=v<<13|v>>>32-13,v=I+E|0,pe^=v<<18|v>>>32-18,v=W+Z|0,ee^=v<<7|v>>>32-7,v=ee+W|0,H^=v<<9|v>>>32-9,v=H+ee|0,Z^=v<<13|v>>>32-13,v=Z+H|0,W^=v<<18|v>>>32-18,v=K+V|0,A^=v<<7|v>>>32-7,v=A+K|0,E^=v<<9|v>>>32-9,v=E+A|0,V^=v<<13|v>>>32-13,v=V+E|0,K^=v<<18|v>>>32-18,v=D+R|0,I^=v<<7|v>>>32-7,v=I+D|0,$^=v<<9|v>>>32-9,v=$+I|0,R^=v<<13|v>>>32-13,v=R+$|0,D^=v<<18|v>>>32-18,v=pe+ve|0,ne^=v<<7|v>>>32-7,v=ne+pe|0,_e^=v<<9|v>>>32-9,v=_e+ne|0,ve^=v<<13|v>>>32-13,v=ve+_e|0,pe^=v<<18|v>>>32-18;W=W+_|0,ee=ee+g|0,H=H+x|0,Z=Z+N|0,V=V+U|0,K=K+Q|0,A=A+Y|0,E=E+Ce|0,$=$+J|0,R=R+ie|0,D=D+fe|0,I=I+he|0,ne=ne+ae|0,_e=_e+se|0,ve=ve+le|0,pe=pe+oe|0,o[0]=W>>>0&255,o[1]=W>>>8&255,o[2]=W>>>16&255,o[3]=W>>>24&255,o[4]=ee>>>0&255,o[5]=ee>>>8&255,o[6]=ee>>>16&255,o[7]=ee>>>24&255,o[8]=H>>>0&255,o[9]=H>>>8&255,o[10]=H>>>16&255,o[11]=H>>>24&255,o[12]=Z>>>0&255,o[13]=Z>>>8&255,o[14]=Z>>>16&255,o[15]=Z>>>24&255,o[16]=V>>>0&255,o[17]=V>>>8&255,o[18]=V>>>16&255,o[19]=V>>>24&255,o[20]=K>>>0&255,o[21]=K>>>8&255,o[22]=K>>>16&255,o[23]=K>>>24&255,o[24]=A>>>0&255,o[25]=A>>>8&255,o[26]=A>>>16&255,o[27]=A>>>24&255,o[28]=E>>>0&255,o[29]=E>>>8&255,o[30]=E>>>16&255,o[31]=E>>>24&255,o[32]=$>>>0&255,o[33]=$>>>8&255,o[34]=$>>>16&255,o[35]=$>>>24&255,o[36]=R>>>0&255,o[37]=R>>>8&255,o[38]=R>>>16&255,o[39]=R>>>24&255,o[40]=D>>>0&255,o[41]=D>>>8&255,o[42]=D>>>16&255,o[43]=D>>>24&255,o[44]=I>>>0&255,o[45]=I>>>8&255,o[46]=I>>>16&255,o[47]=I>>>24&255,o[48]=ne>>>0&255,o[49]=ne>>>8&255,o[50]=ne>>>16&255,o[51]=ne>>>24&255,o[52]=_e>>>0&255,o[53]=_e>>>8&255,o[54]=_e>>>16&255,o[55]=_e>>>24&255,o[56]=ve>>>0&255,o[57]=ve>>>8&255,o[58]=ve>>>16&255,o[59]=ve>>>24&255,o[60]=pe>>>0&255,o[61]=pe>>>8&255,o[62]=pe>>>16&255,o[63]=pe>>>24&255}function X(o,d,a,f){for(var _=f[0]&255|(f[1]&255)<<8|(f[2]&255)<<16|(f[3]&255)<<24,g=a[0]&255|(a[1]&255)<<8|(a[2]&255)<<16|(a[3]&255)<<24,x=a[4]&255|(a[5]&255)<<8|(a[6]&255)<<16|(a[7]&255)<<24,N=a[8]&255|(a[9]&255)<<8|(a[10]&255)<<16|(a[11]&255)<<24,U=a[12]&255|(a[13]&255)<<8|(a[14]&255)<<16|(a[15]&255)<<24,Q=f[4]&255|(f[5]&255)<<8|(f[6]&255)<<16|(f[7]&255)<<24,Y=d[0]&255|(d[1]&255)<<8|(d[2]&255)<<16|(d[3]&255)<<24,Ce=d[4]&255|(d[5]&255)<<8|(d[6]&255)<<16|(d[7]&255)<<24,J=d[8]&255|(d[9]&255)<<8|(d[10]&255)<<16|(d[11]&255)<<24,ie=d[12]&255|(d[13]&255)<<8|(d[14]&255)<<16|(d[15]&255)<<24,fe=f[8]&255|(f[9]&255)<<8|(f[10]&255)<<16|(f[11]&255)<<24,he=a[16]&255|(a[17]&255)<<8|(a[18]&255)<<16|(a[19]&255)<<24,ae=a[20]&255|(a[21]&255)<<8|(a[22]&255)<<16|(a[23]&255)<<24,se=a[24]&255|(a[25]&255)<<8|(a[26]&255)<<16|(a[27]&255)<<24,le=a[28]&255|(a[29]&255)<<8|(a[30]&255)<<16|(a[31]&255)<<24,oe=f[12]&255|(f[13]&255)<<8|(f[14]&255)<<16|(f[15]&255)<<24,W=_,ee=g,H=x,Z=N,V=U,K=Q,A=Y,E=Ce,$=J,R=ie,D=fe,I=he,ne=ae,_e=se,ve=le,pe=oe,v,xe=0;xe<20;xe+=2)v=W+ne|0,V^=v<<7|v>>>32-7,v=V+W|0,$^=v<<9|v>>>32-9,v=$+V|0,ne^=v<<13|v>>>32-13,v=ne+$|0,W^=v<<18|v>>>32-18,v=K+ee|0,R^=v<<7|v>>>32-7,v=R+K|0,_e^=v<<9|v>>>32-9,v=_e+R|0,ee^=v<<13|v>>>32-13,v=ee+_e|0,K^=v<<18|v>>>32-18,v=D+A|0,ve^=v<<7|v>>>32-7,v=ve+D|0,H^=v<<9|v>>>32-9,v=H+ve|0,A^=v<<13|v>>>32-13,v=A+H|0,D^=v<<18|v>>>32-18,v=pe+I|0,Z^=v<<7|v>>>32-7,v=Z+pe|0,E^=v<<9|v>>>32-9,v=E+Z|0,I^=v<<13|v>>>32-13,v=I+E|0,pe^=v<<18|v>>>32-18,v=W+Z|0,ee^=v<<7|v>>>32-7,v=ee+W|0,H^=v<<9|v>>>32-9,v=H+ee|0,Z^=v<<13|v>>>32-13,v=Z+H|0,W^=v<<18|v>>>32-18,v=K+V|0,A^=v<<7|v>>>32-7,v=A+K|0,E^=v<<9|v>>>32-9,v=E+A|0,V^=v<<13|v>>>32-13,v=V+E|0,K^=v<<18|v>>>32-18,v=D+R|0,I^=v<<7|v>>>32-7,v=I+D|0,$^=v<<9|v>>>32-9,v=$+I|0,R^=v<<13|v>>>32-13,v=R+$|0,D^=v<<18|v>>>32-18,v=pe+ve|0,ne^=v<<7|v>>>32-7,v=ne+pe|0,_e^=v<<9|v>>>32-9,v=_e+ne|0,ve^=v<<13|v>>>32-13,v=ve+_e|0,pe^=v<<18|v>>>32-18;o[0]=W>>>0&255,o[1]=W>>>8&255,o[2]=W>>>16&255,o[3]=W>>>24&255,o[4]=K>>>0&255,o[5]=K>>>8&255,o[6]=K>>>16&255,o[7]=K>>>24&255,o[8]=D>>>0&255,o[9]=D>>>8&255,o[10]=D>>>16&255,o[11]=D>>>24&255,o[12]=pe>>>0&255,o[13]=pe>>>8&255,o[14]=pe>>>16&255,o[15]=pe>>>24&255,o[16]=A>>>0&255,o[17]=A>>>8&255,o[18]=A>>>16&255,o[19]=A>>>24&255,o[20]=E>>>0&255,o[21]=E>>>8&255,o[22]=E>>>16&255,o[23]=E>>>24&255,o[24]=$>>>0&255,o[25]=$>>>8&255,o[26]=$>>>16&255,o[27]=$>>>24&255,o[28]=R>>>0&255,o[29]=R>>>8&255,o[30]=R>>>16&255,o[31]=R>>>24&255}function j(o,d,a,f){G(o,d,a,f)}function q(o,d,a,f){X(o,d,a,f)}var z=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function be(o,d,a,f,_,g,x){var N=new Uint8Array(16),U=new Uint8Array(64),Q,Y;for(Y=0;Y<16;Y++)N[Y]=0;for(Y=0;Y<8;Y++)N[Y]=g[Y];for(;_>=64;){for(j(U,N,x,z),Y=0;Y<64;Y++)o[d+Y]=a[f+Y]^U[Y];for(Q=1,Y=8;Y<16;Y++)Q=Q+(N[Y]&255)|0,N[Y]=Q&255,Q>>>=8;_-=64,d+=64,f+=64}if(_>0)for(j(U,N,x,z),Y=0;Y<_;Y++)o[d+Y]=a[f+Y]^U[Y];return 0}function ye(o,d,a,f,_){var g=new Uint8Array(16),x=new Uint8Array(64),N,U;for(U=0;U<16;U++)g[U]=0;for(U=0;U<8;U++)g[U]=f[U];for(;a>=64;){for(j(x,g,_,z),U=0;U<64;U++)o[d+U]=x[U];for(N=1,U=8;U<16;U++)N=N+(g[U]&255)|0,g[U]=N&255,N>>>=8;a-=64,d+=64}if(a>0)for(j(x,g,_,z),U=0;U>>13|a<<3)&8191,f=o[4]&255|(o[5]&255)<<8,this.r[2]=(a>>>10|f<<6)&7939,_=o[6]&255|(o[7]&255)<<8,this.r[3]=(f>>>7|_<<9)&8191,g=o[8]&255|(o[9]&255)<<8,this.r[4]=(_>>>4|g<<12)&255,this.r[5]=g>>>1&8190,x=o[10]&255|(o[11]&255)<<8,this.r[6]=(g>>>14|x<<2)&8191,N=o[12]&255|(o[13]&255)<<8,this.r[7]=(x>>>11|N<<5)&8065,U=o[14]&255|(o[15]&255)<<8,this.r[8]=(N>>>8|U<<8)&8191,this.r[9]=U>>>5&127,this.pad[0]=o[16]&255|(o[17]&255)<<8,this.pad[1]=o[18]&255|(o[19]&255)<<8,this.pad[2]=o[20]&255|(o[21]&255)<<8,this.pad[3]=o[22]&255|(o[23]&255)<<8,this.pad[4]=o[24]&255|(o[25]&255)<<8,this.pad[5]=o[26]&255|(o[27]&255)<<8,this.pad[6]=o[28]&255|(o[29]&255)<<8,this.pad[7]=o[30]&255|(o[31]&255)<<8};ot.prototype.blocks=function(o,d,a){for(var f=this.fin?0:2048,_,g,x,N,U,Q,Y,Ce,J,ie,fe,he,ae,se,le,oe,W,ee,H,Z=this.h[0],V=this.h[1],K=this.h[2],A=this.h[3],E=this.h[4],$=this.h[5],R=this.h[6],D=this.h[7],I=this.h[8],ne=this.h[9],_e=this.r[0],ve=this.r[1],pe=this.r[2],v=this.r[3],xe=this.r[4],Re=this.r[5],Ne=this.r[6],me=this.r[7],Te=this.r[8],ke=this.r[9];a>=16;)_=o[d+0]&255|(o[d+1]&255)<<8,Z+=_&8191,g=o[d+2]&255|(o[d+3]&255)<<8,V+=(_>>>13|g<<3)&8191,x=o[d+4]&255|(o[d+5]&255)<<8,K+=(g>>>10|x<<6)&8191,N=o[d+6]&255|(o[d+7]&255)<<8,A+=(x>>>7|N<<9)&8191,U=o[d+8]&255|(o[d+9]&255)<<8,E+=(N>>>4|U<<12)&8191,$+=U>>>1&8191,Q=o[d+10]&255|(o[d+11]&255)<<8,R+=(U>>>14|Q<<2)&8191,Y=o[d+12]&255|(o[d+13]&255)<<8,D+=(Q>>>11|Y<<5)&8191,Ce=o[d+14]&255|(o[d+15]&255)<<8,I+=(Y>>>8|Ce<<8)&8191,ne+=Ce>>>5|f,J=0,ie=J,ie+=Z*_e,ie+=V*(5*ke),ie+=K*(5*Te),ie+=A*(5*me),ie+=E*(5*Ne),J=ie>>>13,ie&=8191,ie+=$*(5*Re),ie+=R*(5*xe),ie+=D*(5*v),ie+=I*(5*pe),ie+=ne*(5*ve),J+=ie>>>13,ie&=8191,fe=J,fe+=Z*ve,fe+=V*_e,fe+=K*(5*ke),fe+=A*(5*Te),fe+=E*(5*me),J=fe>>>13,fe&=8191,fe+=$*(5*Ne),fe+=R*(5*Re),fe+=D*(5*xe),fe+=I*(5*v),fe+=ne*(5*pe),J+=fe>>>13,fe&=8191,he=J,he+=Z*pe,he+=V*ve,he+=K*_e,he+=A*(5*ke),he+=E*(5*Te),J=he>>>13,he&=8191,he+=$*(5*me),he+=R*(5*Ne),he+=D*(5*Re),he+=I*(5*xe),he+=ne*(5*v),J+=he>>>13,he&=8191,ae=J,ae+=Z*v,ae+=V*pe,ae+=K*ve,ae+=A*_e,ae+=E*(5*ke),J=ae>>>13,ae&=8191,ae+=$*(5*Te),ae+=R*(5*me),ae+=D*(5*Ne),ae+=I*(5*Re),ae+=ne*(5*xe),J+=ae>>>13,ae&=8191,se=J,se+=Z*xe,se+=V*v,se+=K*pe,se+=A*ve,se+=E*_e,J=se>>>13,se&=8191,se+=$*(5*ke),se+=R*(5*Te),se+=D*(5*me),se+=I*(5*Ne),se+=ne*(5*Re),J+=se>>>13,se&=8191,le=J,le+=Z*Re,le+=V*xe,le+=K*v,le+=A*pe,le+=E*ve,J=le>>>13,le&=8191,le+=$*_e,le+=R*(5*ke),le+=D*(5*Te),le+=I*(5*me),le+=ne*(5*Ne),J+=le>>>13,le&=8191,oe=J,oe+=Z*Ne,oe+=V*Re,oe+=K*xe,oe+=A*v,oe+=E*pe,J=oe>>>13,oe&=8191,oe+=$*ve,oe+=R*_e,oe+=D*(5*ke),oe+=I*(5*Te),oe+=ne*(5*me),J+=oe>>>13,oe&=8191,W=J,W+=Z*me,W+=V*Ne,W+=K*Re,W+=A*xe,W+=E*v,J=W>>>13,W&=8191,W+=$*pe,W+=R*ve,W+=D*_e,W+=I*(5*ke),W+=ne*(5*Te),J+=W>>>13,W&=8191,ee=J,ee+=Z*Te,ee+=V*me,ee+=K*Ne,ee+=A*Re,ee+=E*xe,J=ee>>>13,ee&=8191,ee+=$*v,ee+=R*pe,ee+=D*ve,ee+=I*_e,ee+=ne*(5*ke),J+=ee>>>13,ee&=8191,H=J,H+=Z*ke,H+=V*Te,H+=K*me,H+=A*Ne,H+=E*Re,J=H>>>13,H&=8191,H+=$*xe,H+=R*v,H+=D*pe,H+=I*ve,H+=ne*_e,J+=H>>>13,H&=8191,J=(J<<2)+J|0,J=J+ie|0,ie=J&8191,J=J>>>13,fe+=J,Z=ie,V=fe,K=he,A=ae,E=se,$=le,R=oe,D=W,I=ee,ne=H,d+=16,a-=16;this.h[0]=Z,this.h[1]=V,this.h[2]=K,this.h[3]=A,this.h[4]=E,this.h[5]=$,this.h[6]=R,this.h[7]=D,this.h[8]=I,this.h[9]=ne},ot.prototype.finish=function(o,d){var a=new Uint16Array(10),f,_,g,x;if(this.leftover){for(x=this.leftover,this.buffer[x++]=1;x<16;x++)this.buffer[x]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(f=this.h[1]>>>13,this.h[1]&=8191,x=2;x<10;x++)this.h[x]+=f,f=this.h[x]>>>13,this.h[x]&=8191;for(this.h[0]+=f*5,f=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=f,f=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=f,a[0]=this.h[0]+5,f=a[0]>>>13,a[0]&=8191,x=1;x<10;x++)a[x]=this.h[x]+f,f=a[x]>>>13,a[x]&=8191;for(a[9]-=1<<13,_=(f^1)-1,x=0;x<10;x++)a[x]&=_;for(_=~_,x=0;x<10;x++)this.h[x]=this.h[x]&_|a[x];for(this.h[0]=(this.h[0]|this.h[1]<<13)&65535,this.h[1]=(this.h[1]>>>3|this.h[2]<<10)&65535,this.h[2]=(this.h[2]>>>6|this.h[3]<<7)&65535,this.h[3]=(this.h[3]>>>9|this.h[4]<<4)&65535,this.h[4]=(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14)&65535,this.h[5]=(this.h[6]>>>2|this.h[7]<<11)&65535,this.h[6]=(this.h[7]>>>5|this.h[8]<<8)&65535,this.h[7]=(this.h[8]>>>8|this.h[9]<<5)&65535,g=this.h[0]+this.pad[0],this.h[0]=g&65535,x=1;x<8;x++)g=(this.h[x]+this.pad[x]|0)+(g>>>16)|0,this.h[x]=g&65535;o[d+0]=this.h[0]>>>0&255,o[d+1]=this.h[0]>>>8&255,o[d+2]=this.h[1]>>>0&255,o[d+3]=this.h[1]>>>8&255,o[d+4]=this.h[2]>>>0&255,o[d+5]=this.h[2]>>>8&255,o[d+6]=this.h[3]>>>0&255,o[d+7]=this.h[3]>>>8&255,o[d+8]=this.h[4]>>>0&255,o[d+9]=this.h[4]>>>8&255,o[d+10]=this.h[5]>>>0&255,o[d+11]=this.h[5]>>>8&255,o[d+12]=this.h[6]>>>0&255,o[d+13]=this.h[6]>>>8&255,o[d+14]=this.h[7]>>>0&255,o[d+15]=this.h[7]>>>8&255},ot.prototype.update=function(o,d,a){var f,_;if(this.leftover){for(_=16-this.leftover,_>a&&(_=a),f=0;f<_;f++)this.buffer[this.leftover+f]=o[d+f];if(a-=_,d+=_,this.leftover+=_,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(a>=16&&(_=a-a%16,this.blocks(o,d,_),d+=_,a-=_),a){for(f=0;f>16&1),g[a-1]&=65535;g[15]=x[15]-32767-(g[14]>>16&1),_=g[15]>>16&1,g[14]&=65535,it(x,g,1-_)}for(a=0;a<16;a++)o[2*a]=x[a]&255,o[2*a+1]=x[a]>>8}function qe(o,d){var a=new Uint8Array(32),f=new Uint8Array(32);return Oe(a,o),Oe(f,d),k(a,0,f,0)}function gt(o){var d=new Uint8Array(32);return Oe(d,o),d[0]&1}function Nt(o,d){var a;for(a=0;a<16;a++)o[a]=d[2*a]+(d[2*a+1]<<8);o[15]&=32767}function We(o,d,a){for(var f=0;f<16;f++)o[f]=d[f]+a[f]}function et(o,d,a){for(var f=0;f<16;f++)o[f]=d[f]-a[f]}function de(o,d,a){var f,_,g=0,x=0,N=0,U=0,Q=0,Y=0,Ce=0,J=0,ie=0,fe=0,he=0,ae=0,se=0,le=0,oe=0,W=0,ee=0,H=0,Z=0,V=0,K=0,A=0,E=0,$=0,R=0,D=0,I=0,ne=0,_e=0,ve=0,pe=0,v=a[0],xe=a[1],Re=a[2],Ne=a[3],me=a[4],Te=a[5],ke=a[6],ze=a[7],Pe=a[8],Me=a[9],Ue=a[10],Le=a[11],Fe=a[12],Ge=a[13],Ve=a[14],Qe=a[15];f=d[0],g+=f*v,x+=f*xe,N+=f*Re,U+=f*Ne,Q+=f*me,Y+=f*Te,Ce+=f*ke,J+=f*ze,ie+=f*Pe,fe+=f*Me,he+=f*Ue,ae+=f*Le,se+=f*Fe,le+=f*Ge,oe+=f*Ve,W+=f*Qe,f=d[1],x+=f*v,N+=f*xe,U+=f*Re,Q+=f*Ne,Y+=f*me,Ce+=f*Te,J+=f*ke,ie+=f*ze,fe+=f*Pe,he+=f*Me,ae+=f*Ue,se+=f*Le,le+=f*Fe,oe+=f*Ge,W+=f*Ve,ee+=f*Qe,f=d[2],N+=f*v,U+=f*xe,Q+=f*Re,Y+=f*Ne,Ce+=f*me,J+=f*Te,ie+=f*ke,fe+=f*ze,he+=f*Pe,ae+=f*Me,se+=f*Ue,le+=f*Le,oe+=f*Fe,W+=f*Ge,ee+=f*Ve,H+=f*Qe,f=d[3],U+=f*v,Q+=f*xe,Y+=f*Re,Ce+=f*Ne,J+=f*me,ie+=f*Te,fe+=f*ke,he+=f*ze,ae+=f*Pe,se+=f*Me,le+=f*Ue,oe+=f*Le,W+=f*Fe,ee+=f*Ge,H+=f*Ve,Z+=f*Qe,f=d[4],Q+=f*v,Y+=f*xe,Ce+=f*Re,J+=f*Ne,ie+=f*me,fe+=f*Te,he+=f*ke,ae+=f*ze,se+=f*Pe,le+=f*Me,oe+=f*Ue,W+=f*Le,ee+=f*Fe,H+=f*Ge,Z+=f*Ve,V+=f*Qe,f=d[5],Y+=f*v,Ce+=f*xe,J+=f*Re,ie+=f*Ne,fe+=f*me,he+=f*Te,ae+=f*ke,se+=f*ze,le+=f*Pe,oe+=f*Me,W+=f*Ue,ee+=f*Le,H+=f*Fe,Z+=f*Ge,V+=f*Ve,K+=f*Qe,f=d[6],Ce+=f*v,J+=f*xe,ie+=f*Re,fe+=f*Ne,he+=f*me,ae+=f*Te,se+=f*ke,le+=f*ze,oe+=f*Pe,W+=f*Me,ee+=f*Ue,H+=f*Le,Z+=f*Fe,V+=f*Ge,K+=f*Ve,A+=f*Qe,f=d[7],J+=f*v,ie+=f*xe,fe+=f*Re,he+=f*Ne,ae+=f*me,se+=f*Te,le+=f*ke,oe+=f*ze,W+=f*Pe,ee+=f*Me,H+=f*Ue,Z+=f*Le,V+=f*Fe,K+=f*Ge,A+=f*Ve,E+=f*Qe,f=d[8],ie+=f*v,fe+=f*xe,he+=f*Re,ae+=f*Ne,se+=f*me,le+=f*Te,oe+=f*ke,W+=f*ze,ee+=f*Pe,H+=f*Me,Z+=f*Ue,V+=f*Le,K+=f*Fe,A+=f*Ge,E+=f*Ve,$+=f*Qe,f=d[9],fe+=f*v,he+=f*xe,ae+=f*Re,se+=f*Ne,le+=f*me,oe+=f*Te,W+=f*ke,ee+=f*ze,H+=f*Pe,Z+=f*Me,V+=f*Ue,K+=f*Le,A+=f*Fe,E+=f*Ge,$+=f*Ve,R+=f*Qe,f=d[10],he+=f*v,ae+=f*xe,se+=f*Re,le+=f*Ne,oe+=f*me,W+=f*Te,ee+=f*ke,H+=f*ze,Z+=f*Pe,V+=f*Me,K+=f*Ue,A+=f*Le,E+=f*Fe,$+=f*Ge,R+=f*Ve,D+=f*Qe,f=d[11],ae+=f*v,se+=f*xe,le+=f*Re,oe+=f*Ne,W+=f*me,ee+=f*Te,H+=f*ke,Z+=f*ze,V+=f*Pe,K+=f*Me,A+=f*Ue,E+=f*Le,$+=f*Fe,R+=f*Ge,D+=f*Ve,I+=f*Qe,f=d[12],se+=f*v,le+=f*xe,oe+=f*Re,W+=f*Ne,ee+=f*me,H+=f*Te,Z+=f*ke,V+=f*ze,K+=f*Pe,A+=f*Me,E+=f*Ue,$+=f*Le,R+=f*Fe,D+=f*Ge,I+=f*Ve,ne+=f*Qe,f=d[13],le+=f*v,oe+=f*xe,W+=f*Re,ee+=f*Ne,H+=f*me,Z+=f*Te,V+=f*ke,K+=f*ze,A+=f*Pe,E+=f*Me,$+=f*Ue,R+=f*Le,D+=f*Fe,I+=f*Ge,ne+=f*Ve,_e+=f*Qe,f=d[14],oe+=f*v,W+=f*xe,ee+=f*Re,H+=f*Ne,Z+=f*me,V+=f*Te,K+=f*ke,A+=f*ze,E+=f*Pe,$+=f*Me,R+=f*Ue,D+=f*Le,I+=f*Fe,ne+=f*Ge,_e+=f*Ve,ve+=f*Qe,f=d[15],W+=f*v,ee+=f*xe,H+=f*Re,Z+=f*Ne,V+=f*me,K+=f*Te,A+=f*ke,E+=f*ze,$+=f*Pe,R+=f*Me,D+=f*Ue,I+=f*Le,ne+=f*Fe,_e+=f*Ge,ve+=f*Ve,pe+=f*Qe,g+=38*ee,x+=38*H,N+=38*Z,U+=38*V,Q+=38*K,Y+=38*A,Ce+=38*E,J+=38*$,ie+=38*R,fe+=38*D,he+=38*I,ae+=38*ne,se+=38*_e,le+=38*ve,oe+=38*pe,_=1,f=g+_+65535,_=Math.floor(f/65536),g=f-_*65536,f=x+_+65535,_=Math.floor(f/65536),x=f-_*65536,f=N+_+65535,_=Math.floor(f/65536),N=f-_*65536,f=U+_+65535,_=Math.floor(f/65536),U=f-_*65536,f=Q+_+65535,_=Math.floor(f/65536),Q=f-_*65536,f=Y+_+65535,_=Math.floor(f/65536),Y=f-_*65536,f=Ce+_+65535,_=Math.floor(f/65536),Ce=f-_*65536,f=J+_+65535,_=Math.floor(f/65536),J=f-_*65536,f=ie+_+65535,_=Math.floor(f/65536),ie=f-_*65536,f=fe+_+65535,_=Math.floor(f/65536),fe=f-_*65536,f=he+_+65535,_=Math.floor(f/65536),he=f-_*65536,f=ae+_+65535,_=Math.floor(f/65536),ae=f-_*65536,f=se+_+65535,_=Math.floor(f/65536),se=f-_*65536,f=le+_+65535,_=Math.floor(f/65536),le=f-_*65536,f=oe+_+65535,_=Math.floor(f/65536),oe=f-_*65536,f=W+_+65535,_=Math.floor(f/65536),W=f-_*65536,g+=_-1+37*(_-1),_=1,f=g+_+65535,_=Math.floor(f/65536),g=f-_*65536,f=x+_+65535,_=Math.floor(f/65536),x=f-_*65536,f=N+_+65535,_=Math.floor(f/65536),N=f-_*65536,f=U+_+65535,_=Math.floor(f/65536),U=f-_*65536,f=Q+_+65535,_=Math.floor(f/65536),Q=f-_*65536,f=Y+_+65535,_=Math.floor(f/65536),Y=f-_*65536,f=Ce+_+65535,_=Math.floor(f/65536),Ce=f-_*65536,f=J+_+65535,_=Math.floor(f/65536),J=f-_*65536,f=ie+_+65535,_=Math.floor(f/65536),ie=f-_*65536,f=fe+_+65535,_=Math.floor(f/65536),fe=f-_*65536,f=he+_+65535,_=Math.floor(f/65536),he=f-_*65536,f=ae+_+65535,_=Math.floor(f/65536),ae=f-_*65536,f=se+_+65535,_=Math.floor(f/65536),se=f-_*65536,f=le+_+65535,_=Math.floor(f/65536),le=f-_*65536,f=oe+_+65535,_=Math.floor(f/65536),oe=f-_*65536,f=W+_+65535,_=Math.floor(f/65536),W=f-_*65536,g+=_-1+37*(_-1),o[0]=g,o[1]=x,o[2]=N,o[3]=U,o[4]=Q,o[5]=Y,o[6]=Ce,o[7]=J,o[8]=ie,o[9]=fe,o[10]=he,o[11]=ae,o[12]=se,o[13]=le,o[14]=oe,o[15]=W}function Ze(o,d){de(o,d,d)}function Dt(o,d){var a=n(),f;for(f=0;f<16;f++)a[f]=d[f];for(f=253;f>=0;f--)Ze(a,a),f!==2&&f!==4&&de(a,a,d);for(f=0;f<16;f++)o[f]=a[f]}function Xt(o,d){var a=n(),f;for(f=0;f<16;f++)a[f]=d[f];for(f=250;f>=0;f--)Ze(a,a),f!==1&&de(a,a,d);for(f=0;f<16;f++)o[f]=a[f]}function St(o,d,a){var f=new Uint8Array(32),_=new Float64Array(80),g,x,N=n(),U=n(),Q=n(),Y=n(),Ce=n(),J=n();for(x=0;x<31;x++)f[x]=d[x];for(f[31]=d[31]&127|64,f[0]&=248,Nt(_,a),x=0;x<16;x++)U[x]=_[x],Y[x]=N[x]=Q[x]=0;for(N[0]=Y[0]=1,x=254;x>=0;--x)g=f[x>>>3]>>>(x&7)&1,it(N,U,g),it(Q,Y,g),We(Ce,N,Q),et(N,N,Q),We(Q,U,Y),et(U,U,Y),Ze(Y,Ce),Ze(J,N),de(N,Q,N),de(Q,U,Ce),We(Ce,N,Q),et(N,N,Q),Ze(U,N),et(Q,Y,J),de(N,Q,u),We(N,N,Y),de(Q,Q,N),de(N,Y,J),de(Y,U,_),Ze(U,Ce),it(N,U,g),it(Q,Y,g);for(x=0;x<16;x++)_[x+16]=N[x],_[x+32]=Q[x],_[x+48]=U[x],_[x+64]=Y[x];var ie=_.subarray(32),fe=_.subarray(16);return Dt(ie,ie),de(fe,fe,ie),Oe(o,fe),0}function $t(o,d){return St(o,d,s)}function Ot(o,d){return r(d,32),$t(o,d)}function Mt(o,d,a){var f=new Uint8Array(32);return St(f,a,d),q(o,i,f,z)}var Ft=Ae,fn=Je;function _n(o,d,a,f,_,g){var x=new Uint8Array(32);return Mt(x,_,g),Ft(o,d,a,f,x)}function pn(o,d,a,f,_,g){var x=new Uint8Array(32);return Mt(x,_,g),fn(o,d,a,f,x)}var Ht=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function At(o,d,a,f){for(var _=new Int32Array(16),g=new Int32Array(16),x,N,U,Q,Y,Ce,J,ie,fe,he,ae,se,le,oe,W,ee,H,Z,V,K,A,E,$,R,D,I,ne=o[0],_e=o[1],ve=o[2],pe=o[3],v=o[4],xe=o[5],Re=o[6],Ne=o[7],me=d[0],Te=d[1],ke=d[2],ze=d[3],Pe=d[4],Me=d[5],Ue=d[6],Le=d[7],Fe=0;f>=128;){for(V=0;V<16;V++)K=8*V+Fe,_[V]=a[K+0]<<24|a[K+1]<<16|a[K+2]<<8|a[K+3],g[V]=a[K+4]<<24|a[K+5]<<16|a[K+6]<<8|a[K+7];for(V=0;V<80;V++)if(x=ne,N=_e,U=ve,Q=pe,Y=v,Ce=xe,J=Re,ie=Ne,fe=me,he=Te,ae=ke,se=ze,le=Pe,oe=Me,W=Ue,ee=Le,A=Ne,E=Le,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=(v>>>14|Pe<<32-14)^(v>>>18|Pe<<32-18)^(Pe>>>41-32|v<<32-(41-32)),E=(Pe>>>14|v<<32-14)^(Pe>>>18|v<<32-18)^(v>>>41-32|Pe<<32-(41-32)),$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,A=v&xe^~v&Re,E=Pe&Me^~Pe&Ue,$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,A=Ht[V*2],E=Ht[V*2+1],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,A=_[V%16],E=g[V%16],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,H=D&65535|I<<16,Z=$&65535|R<<16,A=H,E=Z,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=(ne>>>28|me<<32-28)^(me>>>34-32|ne<<32-(34-32))^(me>>>39-32|ne<<32-(39-32)),E=(me>>>28|ne<<32-28)^(ne>>>34-32|me<<32-(34-32))^(ne>>>39-32|me<<32-(39-32)),$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,A=ne&_e^ne&ve^_e&ve,E=me&Te^me&ke^Te&ke,$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,ie=D&65535|I<<16,ee=$&65535|R<<16,A=Q,E=se,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=H,E=Z,$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,Q=D&65535|I<<16,se=$&65535|R<<16,_e=x,ve=N,pe=U,v=Q,xe=Y,Re=Ce,Ne=J,ne=ie,Te=fe,ke=he,ze=ae,Pe=se,Me=le,Ue=oe,Le=W,me=ee,V%16===15)for(K=0;K<16;K++)A=_[K],E=g[K],$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=_[(K+9)%16],E=g[(K+9)%16],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,H=_[(K+1)%16],Z=g[(K+1)%16],A=(H>>>1|Z<<32-1)^(H>>>8|Z<<32-8)^H>>>7,E=(Z>>>1|H<<32-1)^(Z>>>8|H<<32-8)^(Z>>>7|H<<32-7),$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,H=_[(K+14)%16],Z=g[(K+14)%16],A=(H>>>19|Z<<32-19)^(Z>>>61-32|H<<32-(61-32))^H>>>6,E=(Z>>>19|H<<32-19)^(H>>>61-32|Z<<32-(61-32))^(Z>>>6|H<<32-6),$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,_[K]=D&65535|I<<16,g[K]=$&65535|R<<16;A=ne,E=me,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[0],E=d[0],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[0]=ne=D&65535|I<<16,d[0]=me=$&65535|R<<16,A=_e,E=Te,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[1],E=d[1],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[1]=_e=D&65535|I<<16,d[1]=Te=$&65535|R<<16,A=ve,E=ke,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[2],E=d[2],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[2]=ve=D&65535|I<<16,d[2]=ke=$&65535|R<<16,A=pe,E=ze,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[3],E=d[3],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[3]=pe=D&65535|I<<16,d[3]=ze=$&65535|R<<16,A=v,E=Pe,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[4],E=d[4],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[4]=v=D&65535|I<<16,d[4]=Pe=$&65535|R<<16,A=xe,E=Me,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[5],E=d[5],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[5]=xe=D&65535|I<<16,d[5]=Me=$&65535|R<<16,A=Re,E=Ue,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[6],E=d[6],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[6]=Re=D&65535|I<<16,d[6]=Ue=$&65535|R<<16,A=Ne,E=Le,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[7],E=d[7],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[7]=Ne=D&65535|I<<16,d[7]=Le=$&65535|R<<16,Fe+=128,f-=128}return f}function vt(o,d,a){var f=new Int32Array(8),_=new Int32Array(8),g=new Uint8Array(256),x,N=a;for(f[0]=1779033703,f[1]=3144134277,f[2]=1013904242,f[3]=2773480762,f[4]=1359893119,f[5]=2600822924,f[6]=528734635,f[7]=1541459225,_[0]=4089235720,_[1]=2227873595,_[2]=4271175723,_[3]=1595750129,_[4]=2917565137,_[5]=725511199,_[6]=4215389547,_[7]=327033209,At(f,_,d,a),a%=128,x=0;x=0;--_)f=a[_/8|0]>>(_&7)&1,Et(o,d,f),Tt(d,o),Tt(o,o),Et(o,d,f)}function rt(o,d){var a=[n(),n(),n(),n()];He(a[0],b),He(a[1],m),He(a[2],c),de(a[3],b,m),ct(o,a,d)}function Jt(o,d,a){var f=new Uint8Array(64),_=[n(),n(),n(),n()],g;for(a||r(d,32),vt(f,d,32),f[0]&=248,f[31]&=127,f[31]|=64,rt(_,f),lt(o,_),g=0;g<32;g++)d[g+32]=o[g];return 0}var Ut=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function te(o,d){var a,f,_,g;for(f=63;f>=32;--f){for(a=0,_=f-32,g=f-12;_>4)*Ut[_],a=d[_]>>8,d[_]&=255;for(_=0;_<32;_++)d[_]-=a*Ut[_];for(f=0;f<32;f++)d[f+1]+=d[f]>>8,o[f]=d[f]&255}function $e(o){var d=new Float64Array(64),a;for(a=0;a<64;a++)d[a]=o[a];for(a=0;a<64;a++)o[a]=0;te(o,d)}function nn(o,d,a,f){var _=new Uint8Array(64),g=new Uint8Array(64),x=new Uint8Array(64),N,U,Q=new Float64Array(64),Y=[n(),n(),n(),n()];vt(_,f,32),_[0]&=248,_[31]&=127,_[31]|=64;var Ce=a+64;for(N=0;N>7&&et(o[0],l,o[0]),de(o[3],o[0],o[1]),0)}function sn(o,d,a,f){var _,g=new Uint8Array(32),x=new Uint8Array(64),N=[n(),n(),n(),n()],U=[n(),n(),n(),n()];if(a<64||bn(U,f))return-1;for(_=0;_=0},e.sign.keyPair=function(){var o=new Uint8Array(It),d=new Uint8Array(Kt);return Jt(o,d),{publicKey:o,secretKey:d}},e.sign.keyPair.fromSecretKey=function(o){if(st(o),o.length!==Kt)throw new Error("bad secret key size");for(var d=new Uint8Array(It),a=0;a"u"?typeof Buffer.from<"u"?(e.encodeBase64=function(r){return Buffer.from(r).toString("base64")},e.decodeBase64=function(r){return n(r),new Uint8Array(Array.prototype.slice.call(Buffer.from(r,"base64"),0))}):(e.encodeBase64=function(r){return new Buffer(r).toString("base64")},e.decodeBase64=function(r){return n(r),new Uint8Array(Array.prototype.slice.call(new Buffer(r,"base64"),0))}):(e.encodeBase64=function(r){var i,s=[],l=r.length;for(i=0;i"u"||t==null?[]:Array.isArray(t)?t:[t]}function ar(t){return Array.from(new Uint8Array(t)).map(e=>e.toString(16).padStart(2,"0")).join("")}function zr(t){const e=t.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g);return new Uint8Array(e.map(n=>parseInt(n,16)))}function gs(t,e=8){const n=new Array(e).fill(0);for(let r=0;r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),xs(e)?n.showHidden=e:e&&ic(n,e),Un(n.showHidden)&&(n.showHidden=!1),Un(n.depth)&&(n.depth=2),Un(n.colors)&&(n.colors=!1),Un(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=Ql),ur(n,t,n.depth)}Tn.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};Tn.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function Vl(t,e){return t}function xs(t){return typeof t=="boolean"}function Un(t){return t===void 0}function Ql(t,e){var n=Tn.styles[e];return n?"\x1B["+Tn.colors[n][0]+"m"+t+"\x1B["+Tn.colors[n][1]+"m":t}function kr(t){return typeof t=="function"}function ws(t){return typeof t=="string"}function Xl(t){return typeof t=="number"}function As(t){return t===null}function Es(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Cr(t){return yr(t)&&ii(t)==="[object RegExp]"}function yr(t){return typeof t=="object"&&t!==null}function Rr(t){return yr(t)&&(ii(t)==="[object Error]"||t instanceof Error)}function of(t){return yr(t)&&ii(t)==="[object Date]"}function ii(t){return Object.prototype.toString.call(t)}function ec(t){var e={};return t.forEach(function(n,r){e[n]=!0}),e}function tc(t,e,n,r,i){for(var s=[],l=0,c=e.length;l=0||s.indexOf("description")>=0))return Nr(e);if(s.length===0){if(kr(e)){var c=e.name?": "+e.name:"";return t.stylize("[Function"+c+"]","special")}if(Cr(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(of(e))return t.stylize(Date.prototype.toString.call(e),"date");if(Rr(e))return Nr(e)}var u="",h=!1,p=["{","}"];if(Array.isArray(e)&&(h=!0,p=["[","]"]),kr(e)){var b=e.name?": "+e.name:"";u=" [Function"+b+"]"}if(Cr(e)&&(u=" "+RegExp.prototype.toString.call(e)),of(e)&&(u=" "+Date.prototype.toUTCString.call(e)),Rr(e)&&(u=" "+Nr(e)),s.length===0&&(!h||e.length==0))return p[0]+u+p[1];if(n<0)return Cr(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special");t.seen.push(e);var m;return h?m=tc(t,e,n,l,s):m=s.map(function(y){return Kr(t,e,n,l,y,h)}),t.seen.pop(),rc(m,u,p)}function Kr(t,e,n,r,i,s){var l,c,u;u={value:void 0};try{u.value=e[i]}catch{}try{Object.getOwnPropertyDescriptor&&(u=Object.getOwnPropertyDescriptor(e,i)||u)}catch{}if(u.get?u.set?c=t.stylize("[Getter/Setter]","special"):c=t.stylize("[Getter]","special"):u.set&&(c=t.stylize("[Setter]","special")),Es(r,i)||(l="["+i+"]"),c||(t.seen.indexOf(u.value)<0?(As(n)?c=ur(t,u.value,null):c=ur(t,u.value,n-1),c.indexOf(` -`)>-1&&(s?c=c.split(` -`).map(function(h){return" "+h}).join(` -`).substr(2):c=` -`+c.split(` -`).map(function(h){return" "+h}).join(` -`))):c=t.stylize("[Circular]","special")),Un(l)){if(s&&i.match(/^\d+$/))return c;l=JSON.stringify(""+i),l.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(l=l.substr(1,l.length-2),l=t.stylize(l,"name")):(l=l.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),l=t.stylize(l,"string"))}return l+": "+c}function nc(t,e){if(Un(e))return t.stylize("undefined","undefined");if(ws(e)){var n="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(n,"string")}if(Xl(e))return t.stylize(""+e,"number");if(xs(e))return t.stylize(""+e,"boolean");if(As(e))return t.stylize("null","null")}function rc(t,e,n){var r=t.reduce(function(i,s){return s.indexOf(` -`)>=0,i+s.replace(/\u001b\[\d\d?m/g,"").length+1},0);return r>60?n[0]+(e===""?"":e+` - `)+" "+t.join(`, - `)+" "+n[1]:n[0]+e+" "+t.join(", ")+" "+n[1]}function ic(t,e){if(!e||!yr(e))return t;for(var n=Object.keys(e),r=n.length;r--;)t[n[r]]=e[n[r]];return t}function ln(t,e,...n){try{e==console.log?e(`${new Date().toLocaleString()} → ${Gl(...n).replace(/^'/,"").replace(/'$/,"")}`):typeof e=="function"?e(...n):e&&e.logOutput(t,{source:"connectome"},...n)}catch(r){console.log(r)}}let fc=class{write(e,...n){ln(void 0,e,...n)}red(e,...n){ln("red",e,...n)}green(e,...n){ln("green",e,...n)}yellow(e,...n){ln("yellow",e,...n)}blue(e,...n){ln("blue",e,...n)}cyan(e,...n){ln("cyan",e,...n)}magenta(e,...n){ln("magenta",e,...n)}gray(e,...n){ln("gray",e,...n)}white(e,...n){ln("white",e,...n)}};var tt=new fc;Zt.util=Fn;function sc({data:t,connector:e}){const{log:n}=e;Yl(t)&&(t=JSON.stringify(t));const r=new Uint8Array(gs(2*e.sentCount,24));if(e.closed())tt.red(n,`⚠️ Warning: "${t}" was not sent because connector is not ready`);else if(e.sentCount>1){let i=0;typeof t=="string"&&(i=1);const s=i==1?Zt.util.decodeUTF8(t):t,l=Fl(s,i),c=Zt.secretbox(l,r,e.sharedSecret);e.verbose&&(tt.green(n,`Connector ${e.endpoint} → Sending encrypted message #${e.sentCount} ↴`),tt.gray(n,t)),e.connection.websocket.send(c)}else e.verbose&&(tt.green(n,`Connector ${e.endpoint} → Sending message #${e.sentCount} ↴`),tt.gray(n,t)),e.connection.websocket.send(t)}Zt.util=Fn;function oc(t){return Object.keys(t).includes("result")||Object.keys(t).includes("error")}function Ss({jsonData:t,encryptedData:e,rawMessage:n,wasEncrypted:r,connector:i}){const{log:s}=i;i.lastMessageAt=Date.now();const l=new Uint8Array(gs(2*i.receivedCount+1,24));if(i.verbose&&!r&&tt.magenta(s,`Connector ${i.endpoint} → Received message #${i.receivedCount} ↴`),t)t.jsonrpc?oc(t)?(i.verbose&&!r&&(tt.magenta(s,`Connector ${i.endpoint} received plain-text rpc result ↴`),tt.gray(s,t)),i.rpcClient.jsonrpcMsgReceive(n)):i.emit("json_rpc",n):i.emit("receive",{jsonData:t,rawMessage:n});else if(e){i.verbose=="extra"&&(tt.magenta(s,`Connector ${i.endpoint} received bytes ↴`),tt.gray(s,e),tt.magenta(s,`Connector ${i.endpoint} decrypting with shared secret ${i.sharedSecret}...`));const c=Zt.secretbox.open(e,l,i.sharedSecret),u=c[0],h=c.subarray(1);if(u==1){const p=Zt.util.encodeUTF8(h);i.verbose&&tt.write(s,`Received message: ${p}`);try{const b=JSON.parse(p);b.jsonrpc?Ss({jsonData:b,rawMessage:p,wasEncrypted:!0,connector:i}):b.state?i.emit("receive_state",b.state):b.diff?i.emit("receive_diff",b.diff):b.signal?i.emit(b.signal,b.data):b.stateField?i.emit("receive_state_field",b.stateField):i.emit("receive",{jsonData:b,rawMessage:p})}catch(b){throw tt.red(s,"Couldn't parse json message although the flag was for string ..."),tt.red(s,p),b}}else i.emit("receive_binary",h)}}Zt.util=Fn;function lc({connector:t,afterFirstStep:e=()=>{}}){const{clientPrivateKey:n,clientPublicKey:r,clientPublicKeyHex:i,protocol:s,tag:l,endpoint:c,verbose:u}=t;return new Promise((h,p)=>{t.remoteObject("Auth").call("exchangePubkeys",{pubkey:i}).then(b=>{const m=Zt.box.before(zr(b),n);e({sharedSecret:m,remotePubkeyHex:b}),u&&tt.write(t.log,`Connector ${c} established shared secret through diffie-hellman exchange.`),t.remoteObject("Auth").call("finalizeHandshake",{protocol:s}).then(y=>{if(y&&y.error)console.log(y.error);else{h();const w=l?` (${l})`:"";tt.cyan(t.log,`${c}${w} ✓ Connection [ ${s||'"no-name"'} ] ready`)}}).catch(p)}).catch(p)})}let cc=class extends ri{constructor(e){super(),this.state=e,this.subscriptions=[]}get(){return this.state}subscribe(e){return this.subscriptions.push(e),e(this.state),()=>{this.subscriptions=this.subscriptions.filter(n=>n!==e)}}announceStateChange(){this.subscriptions.forEach(e=>e(this.state))}},dr=class extends cc{set(e){this.state=e,this.announceStateChange()}},ac=class extends ri{constructor(e){super(),this.connector=e}send(...e){this.connector.send(...e)}};var Gt={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,REMOTE_INTERNAL_ERROR:-32603,TIMEOUT:-32701};let Os=class{constructor({transports:e}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transportsToRegister=e,this.methods={}}setMethodPrefix(e){this.methodPrefix=e}expose(e){this.methods=e}registerTransport(e){e.onData(this._processRequest.bind(this,e))}async _processRequest(e,n){const r=JSON.parse(n);let i;return Array.isArray(r)?i=await Promise.all(r.map(s=>this._callMethod(s,e))):i=await this._callMethod(r,e),JSON.stringify(i)}async _callMethod(e,n){if(!e.hasOwnProperty("method"))return;const{method:i,params:s=[],id:l}=e;let c=i;if(c.includes("::")){const[p,b]=c.split("::");if(c=b,this.methodPrefix&&p!=this.methodPrefix)return}const u=!this.methods[c]||typeof this.methods[c]!="function"||c==="constructor"||c.startsWith("_")||this.methods[c]===Object.prototype[c];let h={};if(u)h={jsonrpc:"2.0",id:l,error:{code:Gt.METHOD_NOT_FOUND,message:`Method [${c}] not found on remote target object`}};else{this.currentTransport=n;try{const p=await this.methods[c].apply(this.methods,s);if(!l)return;h={jsonrpc:"2.0",result:typeof p>"u"?null:p,id:l}}catch(p){console.log(`Exposed RPC method ${i} internal error:`),console.log(p),console.log("Sending this error as a result to calling client ..."),h={jsonrpc:"2.0",error:{code:Gt.REMOTE_INTERNAL_ERROR,message:`Method [${i}] internal error: ${p.stack}`},id:l}}}return h}run(){for(const e of this.transportsToRegister)this.registerTransport(e);this.transportsToRegister=[]}},Nn=class extends Error{constructor(e={}){if(super(),!e.code)throw new Error("Code required");if(!e.message)throw new Error("Message required");this.code=e.code,this.message=e.message}},uc=class extends Nn{constructor(e){super({code:Gt.METHOD_NOT_FOUND,message:e||"Method not found"})}},dc=class extends Nn{constructor(){super({code:Gt.INVALID_PARAMS,message:"Invalid params"})}},hc=class extends Nn{constructor(e){super({code:Gt.REMOTE_INTERNAL_ERROR,message:`Error originating at remote endpoint: ${e}`||"Remote Internal error"})}},_c=class extends Nn{constructor(){super({code:Gt.PARSE_ERROR,message:"Parse error"})}},pc=class extends Nn{constructor(){super({code:Gt.INVALID_REQUEST,message:"Invalid request"})}},Ts=class extends Nn{},bc=class extends Ts{constructor(e,n){super({code:Gt.TIMEOUT,message:`Request exceeded maximum execution time (${n}ms): ${e}`})}};var Dr={Base:Nn,MethodNotFound:uc,InvalidRequest:pc,InvalidParams:dc,RemoteInternalError:hc,ServerError:Ts,ParseError:_c,RequestTimeout:bc};let ks=class{constructor({transport:e,requestTimeout:n=2e4}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transport=e,this.requestTimeout=n,this.pendingRequest={},this.initialized=!1}setMethodPrefix(e){this.methodPrefix=e}async callMethod(e,n){this._init();const r=this.methodPrefix?`${this.methodPrefix}::${e}`:e,i=this._makeRequestObject({method:r,params:n});return this._sendRequest({object:i,id:i.id})}notify(e,n){this._init();const r=this._makeRequestObject({method:e,params:n,mode:"notify"});return this.transport.sendData(JSON.stringify(r)),!0}async runBatch(e){const n=this._generateId();let r=!0;const i=[];for(const[s,l,c]of e){const u=this._makeRequestObject({method:s,params:l,mode:c,batchId:n});u.id&&(r=!1),i.push(u)}return r?this.transport.sendData(JSON.stringify(i)):this._sendRequest({object:i,id:n})}_init(){this.initialized||(this.transport.onData(this._processResponse.bind(this)),this.initialized=!0)}_sendRequest({object:e,id:n}){const r=JSON.stringify(e);return new Promise((i,s)=>{this.pendingRequest[n]={resolve:i,reject:s,sentObject:e},setTimeout(()=>{this.pendingRequest[n]&&(delete this.pendingRequest[n],s(new Dr.RequestTimeout(r,this.requestTimeout)))},this.requestTimeout);try{this.transport.sendData(r)}catch(l){delete this.pendingRequest[n],s(l)}})}_processResponse(e){const n=JSON.parse(e);Array.isArray(n)?this._processBatchResponse(n):this._processSingleCallResponse(n)}_processSingleCallResponse(e){const n=e.hasOwnProperty("result")||!1,r=e.hasOwnProperty("error");if(!n&&!r)return;const i=this.pendingRequest[e.id];if(delete this.pendingRequest[e.id],!!i){if(n)i.resolve(e.result);else if(r){const s=this._makeErrorObject(e.error);i.reject(s)}}}_processBatchResponse(e){let n;const r={},i=[];for(const h of e)h.id?(n||(n=h.id.split("|")[0]),r[h.id]=h):h.error&&i.push(h.error);if(!this.pendingRequest[n])return;const{sentObject:s,resolve:l}=this.pendingRequest[n];delete this.pendingRequest[n];const c=[];let u=0;for(const h of s){if(!h.id){c.push(null);continue}const p=r[h.id];p?p.hasOwnProperty("result")||!1?c.push({success:!0,result:p.result}):c.push({success:!1,result:this._makeErrorObject(p.error)}):(c.push({success:!1,error:this._makeErrorObject(i[u])}),u++)}l(c)}_makeRequestObject({method:e,params:n,mode:r,batchId:i}){const s={jsonrpc:"2.0",method:e};return n&&n.length&&(s.params=n),r!=="notify"&&(s.id=i?`${i}|${this._generateId()}`:this._generateId()),s}_makeErrorObject(e){const n={[Gt.METHOD_NOT_FOUND]:()=>new Dr.MethodNotFound(e.message),[Gt.REMOTE_INTERNAL_ERROR]:()=>new Dr.RemoteInternalError(e.message)}[e.code];return n()}_generateId(){const e="bjectSymhasOwnProp-0123456789ABCDEFGHIJKLMNQRTUVWXYZ_dfgiklquvxz";let n=10,r="";for(;0t.setMethodPrefix(s):(...s)=>r.callMethod.call(r,i,s)}})}function lf(t){return new Proxy(t,{get(e,n){return(...r)=>e.call(null,n,r)},apply(e,n,r){return e.apply(null,r)}})}let mc=class extends ks{constructor(...e){return super(...e),vc(this)}},yc=class{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",e)}sendData(e){this.channel.send(e)}},Cs=class{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",async n=>{const r=await e(n);r&&this.channel.send(r)})}};var gc=Object.freeze({__proto__:null,MoleServer:Os,MoleClient:ks,MoleClientProxified:mc,ClientTransport:yc,ServerTransport:Cs});let xc=class extends Error{constructor(e,n){super(e),this.name=this.constructor.name,this.errorCode=n}errorCode(){return this.errorCode}};const{MoleClient:wc,ClientTransport:Ac}=gc;let Ec=class{constructor(e,n,r){this.moleChannel=new ac(e),this.methodPrefix=n,this.connectorOrServersideChannel=e,this.client=new wc({requestTimeout:r,transport:new Ac(this.moleChannel)})}jsonrpcMsgReceive(e){this.moleChannel.emit("json_rpc",e)}call(e,n){return this.connectorOrServersideChannel.closed()?new Promise((r,i)=>{i(new xc(`Method call [${this.methodPrefix}::${e}] on closed channel or connector ignored. Please add a check for closed channel in your code.`,"CLOSED_CHANNEL"))}):this.client.callMethod(`${this.methodPrefix}::${e}`,n)}};const Sc=1e4;let Oc=class{constructor(e,n){this.connectorOrServersideChannel=e,this.remoteObjects={},this.requestTimeout=n||Sc}remoteObject(e){return this.remoteObjects[e]||(this.remoteObjects[e]=new Ec(this.connectorOrServersideChannel,e,this.requestTimeout)),this.remoteObjects[e]}jsonrpcMsgReceive(e){for(const n of Object.values(this.remoteObjects))n.jsonrpcMsgReceive(e)}},Tc=class{constructor({serversideChannel:e,serverMethods:n,methodPrefix:r}){const i=[new Cs(e)];this.server=new Os({transports:i}),this.server.expose(n),this.server.setMethodPrefix(r),this.server.run()}};Zt.util=Fn;function kc(){const t=Zt.box.keyPair(),e=ar(t.publicKey),n=ar(t.secretKey);return{privateKey:t.secretKey,publicKey:t.publicKey,privateKeyHex:n,publicKeyHex:e}}Zt.util=Fn;function Cc(t){return t.publicKeyHex&&!t.publicKey&&(t.publicKey=zr(t.publicKeyHex)),t.privateKeyHex&&!t.privateKey&&(t.privateKey=zr(t.privateKeyHex)),t}/*! - * https://github.com/Starcounter-Jack/JSON-Patch - * (c) 2017 Joachim Wester - * MIT license - */var Rc=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)i.hasOwnProperty(s)&&(r[s]=i[s])},t(e,n)};return function(e,n){t(e,n);function r(){this.constructor=e}e.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),Nc=Object.prototype.hasOwnProperty;function qr(t,e){return Nc.call(t,e)}function Yr(t){if(Array.isArray(t)){for(var n=new Array(t.length),e=0;e=48&&r<=57){e++;continue}return!1}return!0}function Sn(t){return t.indexOf("/")===-1&&t.indexOf("~")===-1?t:t.replace(/~/g,"~0").replace(/\//g,"~1")}function Rs(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function Hr(t){if(t===void 0)return!0;if(t){if(Array.isArray(t)){for(var e=0,n=t.length;e=b){if(n&&e.op==="add"&&y>h.length)throw new _t("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",s,e,t);var l=$c[e.op].call(e,h,y,t);if(l.test===!1)throw new _t("Test operation failed","TEST_OPERATION_FAILED",s,e,t);return l}}else if(y&&y.indexOf("~")!=-1&&(y=Rs(y)),p>=b){var l=Ln[e.op].call(e,h,y,t);if(l.test===!1)throw new _t("Test operation failed","TEST_OPERATION_FAILED",s,e,t);return l}h=h[y]}}}function fi(t,e,n,r,i){if(r===void 0&&(r=!0),i===void 0&&(i=!0),n&&!Array.isArray(e))throw new _t("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");r||(t=qt(t));for(var s=new Array(e.length),l=0,c=e.length;l0)throw new _t('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",e,t,n);if((t.op==="move"||t.op==="copy")&&typeof t.from!="string")throw new _t("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",e,t,n);if((t.op==="add"||t.op==="replace"||t.op==="test")&&t.value===void 0)throw new _t("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",e,t,n);if((t.op==="add"||t.op==="replace"||t.op==="test")&&Hr(t.value))throw new _t("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",e,t,n);if(n){if(t.op=="add"){var i=t.path.split("/").length,s=r.split("/").length;if(i!==s+1&&i!==s)throw new _t("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",e,t,n)}else if(t.op==="replace"||t.op==="remove"||t.op==="_get"){if(t.path!==r)throw new _t("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",e,t,n)}else if(t.op==="move"||t.op==="copy"){var l={op:"_get",path:t.from,value:void 0},c=Ds([l],n);if(c&&c.name==="OPERATION_PATH_UNRESOLVABLE")throw new _t("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",e,t,n)}}}else throw new _t("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",e,t,n)}function Ds(t,e,n){try{if(!Array.isArray(t))throw new _t("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(e)fi(qt(e),qt(t),n||!0);else{n=n||_r;for(var r=0;r0&&(t.patches=[],t.callback&&t.callback(r)),r}function oi(t,e,n,r,i){if(e!==t){typeof e.toJSON=="function"&&(e=e.toJSON());for(var s=Yr(e),l=Yr(t),c=!1,u=l.length-1;u>=0;u--){var h=l[u],p=t[h];if(qr(e,h)&&!(e[h]===void 0&&p!==void 0&&Array.isArray(e)===!1)){var b=e[h];typeof p=="object"&&p!=null&&typeof b=="object"&&b!=null?oi(p,b,n,r+"/"+Sn(h),i):p!==b&&(i&&n.push({op:"test",path:r+"/"+Sn(h),value:qt(p)}),n.push({op:"replace",path:r+"/"+Sn(h),value:qt(b)}))}else Array.isArray(t)===Array.isArray(e)?(i&&n.push({op:"test",path:r+"/"+Sn(h),value:qt(p)}),n.push({op:"remove",path:r+"/"+Sn(h)}),c=!0):(i&&n.push({op:"test",path:r,value:t}),n.push({op:"replace",path:r,value:e}))}if(!(!c&&s.length==l.length))for(var u=0;u{this.wireStateReceived=!0,this.set(n)}),this.connector.on("receive_diff",n=>{this.wireStateReceived&&(Hc(this.state,n),this.announceStateChange())})}field(e){return this.connector.connectionState.get(e)}},Wc=class extends dr{constructor(e){super({}),this.fields={},this.connector=e,this.connector.on("receive_state_field",({name:n,state:r})=>{this.get(n).set(r)})}get(e){return this.fields[e]||(this.fields[e]=new dr),this.fields[e]}};Zt.util=Fn;const Zc=700,Gc=6e4,Vc=1;let Qc=class extends ri{constructor({endpoint:e,protocol:n,keypair:r=kc(),rpcRequestTimeout:i,verbose:s=!1,tag:l,log:c=console.log,autoDecommission:u=!1,dummy:h}={}){super(),this.protocol=n,this.log=c;const{privateKey:p,publicKey:b}=Cc(r);this.clientPrivateKey=p,this.clientPublicKey=b,this.clientPublicKeyHex=ar(b),this.rpcClient=new Oc(this,i),this.endpoint=e,this.verbose=s,this.tag=l,this.autoDecommission=u,this.sentCount=0,this.receivedCount=0,this.successfulConnectsCount=0,h||(this.state=new Jc(this),this.connectionState=new Wc(this)),this.connected=new dr,this.delayedAdjustConnectionStatus(),s&&tt.green(this.log,`Connector ${this.endpoint} created`),this.decommissionCheckCounter=0,this.lastPongReceivedAt=Date.now(),this.on("pong",()=>{this.lastPongReceivedAt=Date.now()})}delayedAdjustConnectionStatus(){setTimeout(()=>{this.connected.get()==null&&this.connected.set(!1)},Zc)}send(e){sc({data:e,connector:this}),this.sentCount+=1}signal(e,n){this.connected.get()?this.send({signal:e,data:n}):tt.write(this.log,"Warning: trying to send signal over disconnected connector, this should be prevented by GUI")}userAction({action:e,scope:n,payload:r}){this.signal("__action",{action:e,scope:n,payload:r})}on(e,n){e=="ready"&&this.isReady()&&n(),super.on(e,n)}getSharedSecret(){return this.sharedSecret?ar(this.sharedSecret):void 0}wireReceive({jsonData:e,encryptedData:n,rawMessage:r}){Ss({jsonData:e,encryptedData:n,rawMessage:r,connector:this}),this.receivedCount+=1}field(e){return this.connectionState.get(e)}isReady(){return this.ready}closed(){return!this.transportConnected}connectStatus(e){if(e){this.sentCount=0,this.receivedCount=0,this.transportConnected=!0,this.successfulConnectsCount+=1,this.verbose&&tt.green(this.log,`✓ Connector ${this.endpoint} connected #${this.successfulConnectsCount}`);const n=this.connection.websocket.__id;lc({connector:this,afterFirstStep:({sharedSecret:i,remotePubkeyHex:s})=>{this.sharedSecret=i,this._remotePubkeyHex=s}}).then(()=>{this.connectedAt=Date.now(),this.connected.set(!0),this.ready=!0,this.emit("ready")}).catch(i=>{this.connection.websocket.__id==n&&this.connection.websocket.readyState==Vc&&i.code==Gt.TIMEOUT&&(tt.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] handshake error: "${i.message}"`),tt.write(this.log,`${this.endpoint} Connector dropping stale websocket after handshake error`),this.connection.terminate()),i.code!=Gt.TIMEOUT&&tt.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] on:ready error: "${i.stack}" — (will not try to reconnect, fix the error and reload this gui)`)})}else{let n;this.transportConnected&&(n=!0),this.transportConnected==null&&tt.write(this.log,`${this.endpoint} Connector was not able to connect at first try`),this.transportConnected=!1,this.ready=!1,this.sharedSecret=void 0,delete this.connectedAt,n&&(this.emit("disconnect"),e==null&&this.delayedAdjustConnectionStatus(),this.connected.set(e))}}checkForDecommission(){this.autoDecommission&&(this.decommissionCheckRequestedAt&&Date.now()-this.decommissionCheckRequestedAt>3e3&&(this.decommissionCheckCounter=0),this.decommissionCheckRequestedAt=Date.now(),this.decommissionCheckCounter+=1,this.decommissionCheckCounter>12&&Date.now()-this.lastPongReceivedAt>Gc&&(tt.write(this.log,`Decommissioning connector ${this.endpoint} (long inactive)`),this.decommission(),this.emit("decommission")))}decommission(){this.decommissioned=!0}remoteObject(e){return{call:(n,r=[])=>this.rpcClient.remoteObject(e).call(n,Zl(r))}}attachObject(e,n){new Tc({serversideChannel:this,serverMethods:n,methodPrefix:e})}clientPubkey(){return this.clientPublicKeyHex}remotePubkeyHex(){return this._remotePubkeyHex}remoteAddress(){return this.endpoint}};const af=typeof window<"u";function Xc({endpoint:t,host:e,port:n}){if(af&&t&&t.startsWith("/")&&(t=`${window.location.protocol.includes("s")?"wss":"ws"}://${window.location.host}${t}`),!t)if(af){e=e||window.location.hostname;const r=window.location.protocol.includes("s")?"wss":"ws";t=`${r}://${e}`,r=="wss"?t=`${r}://${e}/ws`:n?t=`${t}:${n}`:window.location.port&&(t=`${t}:${window.location.port}`)}else{if(!n)throw new Error(`Connectome determineEndpoint: No websocket port provided for ${e}`);t=`ws://${e||"localhost"}:${n}`}return t}const an=typeof window<"u",ea=0,ta=1,na=1e3,ra=3,ia=5;function fa({endpoint:t,host:e,port:n,protocol:r,keypair:i,remotePubkey:s,rpcRequestTimeout:l,autoDecommission:c,log:u,verbose:h,tag:p,dummy:b},{WebSocket:m}){t=Xc({endpoint:t,host:e,port:n});const y=new Qc({endpoint:t,protocol:r,rpcRequestTimeout:l,keypair:i,verbose:h,tag:p,log:u,autoDecommission:c,dummy:b}),w=()=>{oa({connector:y,endpoint:t},{WebSocket:m,reconnect:w,log:u,verbose:h})};y.connection={terminate(){this.websocket._removeAllCallbacks(),this.websocket.close(),y.connectStatus(!1),w()},endpoint:t,checkTicker:0};const S=()=>{y.decommissioned||(sa({connector:y,reconnect:w,log:u}),setTimeout(S,na))};return setTimeout(S,10),y}function sa({connector:t,reconnect:e,log:n}){const r=t.connection;if(ca(r)||t.decommissioned){t.decommissioned?(tt.yellow(n,`${t.endpoint} Connection decommisioned, closing websocket ${r.websocket.__id}, will not retry again `),$s(t)):(t.emit("inactive_connection"),tt.yellow(n,`${t.endpoint} ✖ Terminated inactive connection`)),r.terminate();return}Ps(r)?r.websocket.send("ping"):(t.connected==null&&(tt.write(n,`${t.endpoint} Setting connector status to FALSE because connector.connected is undefined`),t.connectStatus(!1)),e()),r.checkTicker+=1}function oa({connector:t,endpoint:e},{WebSocket:n,reconnect:r,log:i,verbose:s}){const l=t.connection;if(t.checkForDecommission(),t.decommissioned){$s(t);return}if(l.currentlyTryingWS&&l.currentlyTryingWS.readyState==ea){if(l.currentlyTryingWS._waitForConnectCounter{});const u=()=>{t.decommissioned||((s||an)&&tt.write(i,`${e} Websocket open`),l.currentlyTryingWS=null,l.checkTicker=0,la({ws:c,connector:t,openCallback:u,reconnect:r},{log:i,verbose:s}),l.websocket=c,t.connectStatus(!0))};c._removeAllCallbacks=()=>{c.removeEventListener("open",u)},an?c.addEventListener("open",u):c.on("open",u)}function la({ws:t,connector:e,openCallback:n,reconnect:r},{log:i,verbose:s}){const l=e.connection,c=p=>{const b=`${e.endpoint} Websocket error`;console.log(b),console.log(p)},u=()=>{if(tt.write(i,`${e.endpoint} ✖ Connection closed`),e.decommissioned){e.connectStatus(!1);return}e.connectStatus(void 0),r()},h=p=>{if(e.decommissioned)return;l.checkTicker=0;const b=an?p.data:p;if(b=="pong"){e.emit("pong");return}let m;try{m=JSON.parse(b)}catch{}if(m)e.wireReceive({jsonData:m,rawMessage:b});else{const y=an?new Uint8Array(b):b;e.wireReceive({encryptedData:y})}};t._removeAllCallbacks=()=>{t.removeEventListener("error",c),t.removeEventListener("close",u),t.removeEventListener("message",h),t.removeEventListener("open",n)},an?(t.addEventListener("error",c),t.addEventListener("close",u),t.addEventListener("message",h)):(t.on("error",c),t.on("close",u),t.on("message",h))}function $s(t){const e=t.connection;e.currentlyTryingWS&&(e.currentlyTryingWS._removeAllCallbacks(),e.currentlyTryingWS.close(),e.currentlyTryingWS=null),e.ws&&(e.ws._removeAllCallbacks(),e.ws.close(),e.ws=null),t.connectStatus(!1)}function Ps(t){return t.websocket&&t.websocket.readyState==ta}function ca(t){return Ps(t)&&t.checkTicker>ra}function aa(t){return t.log=t.log||console.log,fa(t,{WebSocket})}function uf(t,e,n){const r=t.slice();return r[70]=e[n],r}function df(t,e,n){const r=t.slice();return r[70]=e[n],r}function ua(t){let e,n=(t[0].network||"")+"",r;return{c(){e=M("h3"),r=B(n),L(e,"class","svelte-xmpa81")},m(i,s){C(i,e,s),O(e,r)},p(i,s){s[0]&1&&n!==(n=(i[0].network||"")+"")&&Ie(r,n)},i:ge,o:ge,d(i){i&&T(e)}}}function da(t){let e,n,r,i,s;function l(h,p){return h[11]==0?_a:ha}let c=l(t),u=c(t);return{c(){e=M("h3"),n=B(`Vhod - `),r=M("span"),i=B(`— odpiranje - `),u.c(),L(r,"class","svelte-xmpa81"),L(e,"class","countdown svelte-xmpa81")},m(h,p){C(h,e,p),O(e,n),O(e,r),O(r,i),u.m(r,null)},p(h,p){c===(c=l(h))&&u?u.p(h,p):(u.d(1),u=c(h),u&&(u.c(),u.m(r,null)))},i(h){s||jt(()=>{s=hn(r,us,{}),s.start()})},o:ge,d(h){h&&T(e),u.d()}}}function ha(t){let e,n,r;return{c(){e=B("čez "),n=B(t[11]),r=B("s")},m(i,s){C(i,e,s),C(i,n,s),C(i,r,s)},p(i,s){s[0]&2048&&Ie(n,i[11])},d(i){i&&T(e),i&&T(n),i&&T(r)}}}function _a(t){let e;return{c(){e=B("ZDAJ")},m(n,r){C(n,e,r)},p:ge,d(n){n&&T(e)}}}function hf(t){let e,n,r,i,s,l,c,u,h,p,b,m,y,w;return{c(){e=M("div"),n=M("button"),r=B("ODPRI ZDAJ"),s=F(),l=M("button"),c=B("Zakasnitev +10s"),h=F(),p=M("button"),b=B("Prekliči"),L(n,"class","open svelte-xmpa81"),n.disabled=i=!t[12]||t[11]==0,L(l,"class","delayed_open svelte-xmpa81"),l.disabled=u=!t[12]||t[11]==0,L(p,"class","cancel svelte-xmpa81"),p.disabled=m=!t[12]||t[11]==0,L(e,"class","entry_door_options svelte-xmpa81")},m(S,P){C(S,e,P),O(e,n),O(n,r),O(e,s),O(e,l),O(l,c),O(e,h),O(e,p),O(p,b),y||(w=[Se(n,"click",t[36]),Se(l,"click",t[37]),Se(p,"click",t[38])],y=!0)},p(S,P){P[0]&6144&&i!==(i=!S[12]||S[11]==0)&&(n.disabled=i),P[0]&6144&&u!==(u=!S[12]||S[11]==0)&&(l.disabled=u),P[0]&6144&&m!==(m=!S[12]||S[11]==0)&&(p.disabled=m)},d(S){S&&T(e),y=!1,yt(w)}}}function pa(t){var Jt,Ut;let e,n,r,i,s,l,c,u,h,p,b,m,y,w,S,P=t[6]&&((Jt=t[1])==null?void 0:Jt.find(t[33])),k,G=t[5]&&((Ut=t[1])==null?void 0:Ut.find(t[31])),X,j,q,z,be,ye,ue,De,ot,Xe,ft,Ae,Je,He,ht,it,Oe,qe,gt,Nt,We,et,de,Ze,Dt,Xt,St,$t,Ot,Mt,Ft,fn,_n;function pn(te,$e){return te[3]?va:ma}let Ht=pn(t),At=Ht(t);function vt(te,$e){return te[4]?ya:ga}let Tt=vt(t),Et=Tt(t),lt=P&&pf(t),ct=G&&gf(t),rt=t[12]&&t[8]!=null&&Sf(t);return{c(){e=M("h3"),e.textContent="Ograja — parkirišče",n=F(),r=M("div"),i=M("button"),s=B("ODPRI"),c=F(),u=M("button"),h=B("OSEBNI PREHOD"),b=F(),At.c(),m=F(),y=M("h3"),y.textContent="Dnevna TV",w=F(),Et.c(),S=F(),lt&<.c(),k=F(),ct&&ct.c(),X=F(),j=M("h3"),j.textContent="Luč kabinet",q=F(),z=M("button"),be=B("PRIŽGI LUČ"),ue=F(),De=M("button"),ot=B("🛑 UGASNI"),ft=F(),Ae=M("button"),Je=B("⏱️"),ht=F(),rt&&rt.c(),it=F(),Oe=M("h3"),Oe.textContent="Alarm",qe=F(),gt=M("button"),Nt=B("VKLOPI"),et=F(),de=M("button"),Ze=B("IZKLOPI"),Xt=F(),St=M("h3"),St.textContent="Dodatne možnosti",$t=F(),Ot=M("button"),Mt=B("— ZAPRI VSE —"),L(e,"class","svelte-xmpa81"),i.disabled=l=!t[12]||t[10]||t[9],L(i,"class","svelte-xmpa81"),L(u,"class","personal_entry svelte-xmpa81"),u.disabled=p=!t[12]||t[10],ce(u,"personal_entry_in_progress",t[9]),L(r,"class","parking_door_options svelte-xmpa81"),L(y,"class","svelte-xmpa81"),L(j,"class","svelte-xmpa81"),z.disabled=ye=!t[12],L(z,"class","svelte-xmpa81"),L(De,"class","turn_off svelte-xmpa81"),De.disabled=Xe=!t[12],Ae.disabled=He=!t[12],L(Ae,"class","svelte-xmpa81"),L(Oe,"class","svelte-xmpa81"),gt.disabled=We=!t[12],L(gt,"class","svelte-xmpa81"),de.disabled=Dt=!t[12],L(de,"class","svelte-xmpa81"),L(St,"class","close_options svelte-xmpa81"),L(Ot,"class","close_options svelte-xmpa81"),Ot.disabled=Ft=!t[12]},m(te,$e){C(te,e,$e),C(te,n,$e),C(te,r,$e),O(r,i),O(i,s),O(r,c),O(r,u),O(u,h),O(r,b),At.m(r,null),C(te,m,$e),C(te,y,$e),C(te,w,$e),Et.m(te,$e),C(te,S,$e),lt&<.m(te,$e),C(te,k,$e),ct&&ct.m(te,$e),C(te,X,$e),C(te,j,$e),C(te,q,$e),C(te,z,$e),O(z,be),C(te,ue,$e),C(te,De,$e),O(De,ot),C(te,ft,$e),C(te,Ae,$e),O(Ae,Je),C(te,ht,$e),rt&&rt.m(te,$e),C(te,it,$e),C(te,Oe,$e),C(te,qe,$e),C(te,gt,$e),O(gt,Nt),C(te,et,$e),C(te,de,$e),O(de,Ze),C(te,Xt,$e),C(te,St,$e),C(te,$t,$e),C(te,Ot,$e),O(Ot,Mt),fn||(_n=[Se(i,"click",t[40]),Se(u,"click",t[41]),Se(z,"click",t[63]),Se(De,"click",t[64]),Se(Ae,"click",t[65]),Se(gt,"click",t[66]),Se(de,"click",t[67]),Se(Ot,"click",t[68])],fn=!0)},p(te,$e){var nn,bn;$e[0]&5632&&l!==(l=!te[12]||te[10]||te[9])&&(i.disabled=l),$e[0]&5120&&p!==(p=!te[12]||te[10])&&(u.disabled=p),$e[0]&512&&ce(u,"personal_entry_in_progress",te[9]),Ht===(Ht=pn(te))&&At?At.p(te,$e):(At.d(1),At=Ht(te),At&&(At.c(),At.m(r,null))),Tt===(Tt=vt(te))&&Et?Et.p(te,$e):(Et.d(1),Et=Tt(te),Et&&(Et.c(),Et.m(S.parentNode,S))),$e[0]&66&&(P=te[6]&&((nn=te[1])==null?void 0:nn.find(te[33]))),P?lt?lt.p(te,$e):(lt=pf(te),lt.c(),lt.m(k.parentNode,k)):lt&&(lt.d(1),lt=null),$e[0]&34&&(G=te[5]&&((bn=te[1])==null?void 0:bn.find(te[31]))),G?ct?ct.p(te,$e):(ct=gf(te),ct.c(),ct.m(X.parentNode,X)):ct&&(ct.d(1),ct=null),$e[0]&4096&&ye!==(ye=!te[12])&&(z.disabled=ye),$e[0]&4096&&Xe!==(Xe=!te[12])&&(De.disabled=Xe),$e[0]&4096&&He!==(He=!te[12])&&(Ae.disabled=He),te[12]&&te[8]!=null?rt?(rt.p(te,$e),$e[0]&4352&&re(rt,1)):(rt=Sf(te),rt.c(),re(rt,1),rt.m(it.parentNode,it)):rt&&(rt.d(1),rt=null),$e[0]&4096&&We!==(We=!te[12])&&(gt.disabled=We),$e[0]&4096&&Dt!==(Dt=!te[12])&&(de.disabled=Dt),$e[0]&4096&&Ft!==(Ft=!te[12])&&(Ot.disabled=Ft)},i(te){re(rt)},o:ge,d(te){te&&T(e),te&&T(n),te&&T(r),At.d(),te&&T(m),te&&T(y),te&&T(w),Et.d(te),te&&T(S),lt&<.d(te),te&&T(k),ct&&ct.d(te),te&&T(X),te&&T(j),te&&T(q),te&&T(z),te&&T(ue),te&&T(De),te&&T(ft),te&&T(Ae),te&&T(ht),rt&&rt.d(te),te&&T(it),te&&T(Oe),te&&T(qe),te&&T(gt),te&&T(et),te&&T(de),te&&T(Xt),te&&T(St),te&&T($t),te&&T(Ot),fn=!1,yt(_n)}}}function ba(t){let e,n,r,i,s=t[13]&&Of(t);return{c(){s&&s.c(),e=F(),n=M("button"),n.textContent="Več možnosti",L(n,"class","show_more_options svelte-xmpa81")},m(l,c){s&&s.m(l,c),C(l,e,c),C(l,n,c),r||(i=Se(n,"click",t[39]),r=!0)},p(l,c){l[13]?s?s.p(l,c):(s=Of(l),s.c(),s.m(e.parentNode,e)):s&&(s.d(1),s=null)},i:ge,o:ge,d(l){s&&s.d(l),l&&T(e),l&&T(n),r=!1,i()}}}function va(t){let e,n,r,i,s,l,c,u,h,p,b,m,y,w=t[10]&&_f();return{c(){e=M("h4"),e.textContent="— Odpri in ohrani —",n=F(),r=M("button"),i=B("ODPRI IN OHRANI"),l=F(),c=M("button"),u=B("ZAPRI OGRAJO"),p=F(),w&&w.c(),b=bt(),L(e,"class","suboption svelte-xmpa81"),L(r,"class","fence_keep_open svelte-xmpa81"),r.disabled=s=!t[12]||t[9],ce(r,"keep_open_in_progress",t[10]),L(c,"class","close_fence svelte-xmpa81"),c.disabled=h=!t[12]||t[10]||t[9]},m(S,P){C(S,e,P),C(S,n,P),C(S,r,P),O(r,i),C(S,l,P),C(S,c,P),O(c,u),C(S,p,P),w&&w.m(S,P),C(S,b,P),m||(y=[Se(r,"click",t[43]),Se(c,"click",t[44])],m=!0)},p(S,P){P[0]&4608&&s!==(s=!S[12]||S[9])&&(r.disabled=s),P[0]&1024&&ce(r,"keep_open_in_progress",S[10]),P[0]&5632&&h!==(h=!S[12]||S[10]||S[9])&&(c.disabled=h),S[10]?w||(w=_f(),w.c(),w.m(b.parentNode,b)):w&&(w.d(1),w=null)},d(S){S&&T(e),S&&T(n),S&&T(r),S&&T(l),S&&T(c),S&&T(p),w&&w.d(S),S&&T(b),m=!1,yt(y)}}}function ma(t){let e,n,r;return{c(){e=M("button"),e.textContent="Več",L(e,"class","show_more_options svelte-xmpa81")},m(i,s){C(i,e,s),n||(r=Se(e,"click",t[42]),n=!0)},p:ge,d(i){i&&T(e),n=!1,r()}}}function _f(t){let e;return{c(){e=M("h4"),e.textContent="[ ⚠️ v zadnji sekundi odpiranja ne sme biti prehoda, sicer vrata ne bodo ostala odprta ]",L(e,"class","suboption warn svelte-xmpa81")},m(n,r){C(n,e,r)},d(n){n&&T(e)}}}function ya(t){let e,n,r,i,s,l,c,u,h,p,b,m,y,w,S=(t[14]||"")+"",P,k,G,X,j,q,z,be,ye,ue,De,ot,Xe,ft,Ae,Je,He,ht,it;return{c(){e=M("button"),n=B("TV"),i=F(),s=M("button"),l=B("DMT"),u=F(),h=M("button"),p=B("🛑 UGASNI"),m=F(),y=M("h4"),y.textContent="— TV glasnost —",w=F(),P=B(S),k=F(),G=M("button"),X=B("VOL↑"),q=F(),z=M("button"),be=B("VOL ↓"),ue=F(),De=M("button"),ot=B("PRIVZETO"),ft=F(),Ae=M("button"),Je=B("🔇"),e.disabled=r=!t[12],L(e,"class","svelte-xmpa81"),s.disabled=c=!t[12],L(s,"class","svelte-xmpa81"),L(h,"class","turn_off svelte-xmpa81"),h.disabled=b=!t[12],L(y,"class","suboption volume svelte-xmpa81"),L(G,"class","volume svelte-xmpa81"),G.disabled=j=!t[12],L(z,"class","volume svelte-xmpa81"),z.disabled=ye=!t[12],L(De,"class","volume svelte-xmpa81"),De.disabled=Xe=!t[12],L(Ae,"class","volume svelte-xmpa81"),Ae.disabled=He=!t[12]},m(Oe,qe){C(Oe,e,qe),O(e,n),C(Oe,i,qe),C(Oe,s,qe),O(s,l),C(Oe,u,qe),C(Oe,h,qe),O(h,p),C(Oe,m,qe),C(Oe,y,qe),C(Oe,w,qe),C(Oe,P,qe),C(Oe,k,qe),C(Oe,G,qe),O(G,X),C(Oe,q,qe),C(Oe,z,qe),O(z,be),C(Oe,ue,qe),C(Oe,De,qe),O(De,ot),C(Oe,ft,qe),C(Oe,Ae,qe),O(Ae,Je),ht||(it=[Se(e,"click",t[46]),Se(s,"click",t[47]),Se(h,"click",t[48]),Se(G,"click",t[49]),Se(z,"click",t[50]),Se(De,"click",t[51]),Se(Ae,"click",t[52])],ht=!0)},p(Oe,qe){qe[0]&4096&&r!==(r=!Oe[12])&&(e.disabled=r),qe[0]&4096&&c!==(c=!Oe[12])&&(s.disabled=c),qe[0]&4096&&b!==(b=!Oe[12])&&(h.disabled=b),qe[0]&16384&&S!==(S=(Oe[14]||"")+"")&&Ie(P,S),qe[0]&4096&&j!==(j=!Oe[12])&&(G.disabled=j),qe[0]&4096&&ye!==(ye=!Oe[12])&&(z.disabled=ye),qe[0]&4096&&Xe!==(Xe=!Oe[12])&&(De.disabled=Xe),qe[0]&4096&&He!==(He=!Oe[12])&&(Ae.disabled=He)},d(Oe){Oe&&T(e),Oe&&T(i),Oe&&T(s),Oe&&T(u),Oe&&T(h),Oe&&T(m),Oe&&T(y),Oe&&T(w),Oe&&T(P),Oe&&T(k),Oe&&T(G),Oe&&T(q),Oe&&T(z),Oe&&T(ue),Oe&&T(De),Oe&&T(ft),Oe&&T(Ae),ht=!1,yt(it)}}}function ga(t){let e,n,r;return{c(){e=M("button"),e.textContent="Možnosti TV",L(e,"class","show_more_options svelte-xmpa81")},m(i,s){C(i,e,s),n||(r=Se(e,"click",t[45]),n=!0)},p:ge,d(i){i&&T(e),n=!1,r()}}}function pf(t){let e,n,r,i=t[17],s=[];for(let l=0;l{i=hn(r,us,{}),i.start()})},o:ge,d(u){u&&T(e),c.d()}}}function Ca(t){let e,n;return{c(){e=B("čez "),n=B(t[7])},m(r,i){C(r,e,i),C(r,n,i)},p(r,i){i[0]&128&&Ie(n,r[7])},d(r){r&&T(e),r&&T(n)}}}function Ra(t){let e;return{c(){e=B("ZDAJ")},m(n,r){C(n,e,r)},p:ge,d(n){n&&T(e)}}}function Of(t){let e,n,r=(t[0].network||"")+"",i;return{c(){e=M("h3"),n=B("Več možnosti - "),i=B(r),L(e,"class","svelte-xmpa81")},m(s,l){C(s,e,l),O(e,n),O(e,i)},p(s,l){l[0]&1&&r!==(r=(s[0].network||"")+"")&&Ie(i,r)},d(s){s&&T(e)}}}function Na(t){let e,n,r,i,s,l,c,u,h;function p(k,G){return k[12]&&k[13]?da:ua}let b=p(t),m=b(t),y=t[13]&&hf(t);function w(k,G){return k[2]?pa:ba}let S=w(t),P=S(t);return{c(){e=M("div"),m.c(),n=F(),r=M("button"),i=B("ODPIRANJE VHODNIH VRAT"),l=F(),y&&y.c(),c=F(),P.c(),L(r,"class","open_door_show_options svelte-xmpa81"),r.disabled=s=!t[12],ce(r,"invisible",t[13]),L(e,"class","options svelte-xmpa81")},m(k,G){C(k,e,G),m.m(e,null),O(e,n),O(e,r),O(r,i),O(e,l),y&&y.m(e,null),O(e,c),P.m(e,null),u||(h=Se(r,"click",t[35]),u=!0)},p(k,G){b===(b=p(k))&&m?m.p(k,G):(m.d(1),m=b(k),m&&(m.c(),re(m,1),m.m(e,n))),G[0]&4096&&s!==(s=!k[12])&&(r.disabled=s),G[0]&8192&&ce(r,"invisible",k[13]),k[13]?y?y.p(k,G):(y=hf(k),y.c(),y.m(e,c)):y&&(y.d(1),y=null),S===(S=w(k))&&P?P.p(k,G):(P.d(1),P=S(k),P&&(P.c(),re(P,1),P.m(e,null)))},i(k){re(m),re(P)},o:ge,d(k){k&&T(e),m.d(),y&&y.d(),P.d(),u=!1,h()}}}const Da="192.168.0.20",$a=7780,Pa="david/home";function Ia(t,e,n){let r,i,s,l,c,u,h,p,b,m,y,{localDevice:w}=e,{nearbyDevices:S}=e;const P=aa({host:Da,port:$a,protocol:Pa}),{connected:k,state:G}=P;wt(t,k,Ee=>n(12,b=Ee)),wt(t,G,Ee=>n(30,p=Ee));const X=["kids","eclipse"],j=["david-room","ela-room"];w.deviceName=="turbine"&&X.push("turbine");const q=P.field("tvVolume");wt(t,q,Ee=>n(14,y=Ee));const z=Oo(G,Ee=>{var Ye;return((Ye=Ee.entryDoor)==null?void 0:Ye.counter)!=null});wt(t,z,Ee=>n(13,m=Ee));function be(Ee,Ye){P.userAction({action:Ee,payload:Ye,scope:"tv"})}function ye(Ee,Ye){P.userAction({action:Ee,payload:Ye,scope:"alarm"})}function ue(Ee,Ye){P.userAction({action:Ee,payload:Ye,scope:"entry-door"})}function De(Ee,Ye){P.userAction({action:Ee,payload:Ye,scope:"fence-door"})}function ot(Ee,Ye){P.userAction({action:Ee,payload:Ye,scope:"light-lab"})}function Xe(Ee,Ye){P.userAction({action:Ee,scope:"nearbyDevices",payload:{deviceName:Ye}})}function ft(Ee,Ye){P.userAction({action:Ee,scope:"nearbyDevices",payload:{deviceName:Ye,delay:!0}})}function Ae(Ee,Ye){P.userAction({action:Ee,scope:"nearbyDevices",payload:{deviceName:Ye,cancel:!0}})}let Je=w.deviceName=="turbine",He,ht;function it(){n(2,Je=!1),n(4,ht=!1),n(3,He=!1)}const Oe=({deviceName:Ee})=>j.includes(Ee),qe=(Ee,Ye)=>Ye.deviceName==Ee,gt=({deviceName:Ee})=>X.includes(Ee),Nt=(Ee,Ye)=>Ye.deviceName==Ee,We=()=>{ue("delayed-open")},et=()=>{ue("open")},de=()=>{ue("add-delay")},Ze=()=>{ue("cancel-opening")},Dt=()=>{n(2,Je=!0)},Xt=()=>{De("move")},St=()=>{De("personal-entry")},$t=()=>{n(3,He=!0)},Ot=()=>{De("keep-open")},Mt=()=>{De("close")},Ft=()=>{n(4,ht=!0),be("vol-report")},fn=()=>{be("hdmi1")},_n=()=>{be("hdmi2")},pn=()=>{be("off")},Ht=()=>{be("vol-up")},At=()=>{be("vol-down")},vt=()=>{be("vol-default")},Tt=()=>{be("mute")},Et=Ee=>{ft("sleep",Ee)},lt=Ee=>{Xe("sleep",Ee)},ct=Ee=>{ft("sleep",Ee)},rt=Ee=>{Ae("sleep",Ee)},Jt=(Ee,Ye)=>Ye.deviceName==Ee,Ut=Ee=>{ft("kid_sleep",Ee)},te=(Ee,Ye)=>Ye.deviceName==Ee,$e=Ee=>{Xe("kid_sleep",Ee)},nn=Ee=>{ft("kid_sleep",Ee)},bn=Ee=>{Ae("kid_sleep",Ee)},sn=()=>{ot("on")},on=()=>{ot("off")},en=()=>{ot("off-delay")},Bt=()=>{ye("enable")},Pt=()=>{ye("disable")},zt=()=>{it(),window.scrollTo({top:0,behavior:"smooth"})};return t.$$set=Ee=>{"localDevice"in Ee&&n(0,w=Ee.localDevice),"nearbyDevices"in Ee&&n(1,S=Ee.nearbyDevices)},t.$$.update=()=>{var Ee,Ye,Lt,rn,vn;t.$$.dirty[0]&1073741824&&n(11,r=(Ee=p.entryDoor)==null?void 0:Ee.counter),t.$$.dirty[0]&1073741824&&n(10,i=(Ye=p.parkingDoor)==null?void 0:Ye.keepOpenInProgress),t.$$.dirty[0]&1073741824&&n(9,s=(Lt=p.parkingDoor)==null?void 0:Lt.personalEntryInProgress),t.$$.dirty[0]&1073741824&&n(8,l=(rn=p.lights)==null?void 0:rn.labLightOffDelay),t.$$.dirty[0]&1073741824&&n(7,c=(vn=p.lights)==null?void 0:vn.labLightOffDelayStr),t.$$.dirty[0]&1073741824&&n(6,u=p.deviceSleepStarter),t.$$.dirty[0]&1073741824&&n(5,h=p.kidSleepStarter)},[w,S,Je,He,ht,h,u,c,l,s,i,r,b,m,y,k,G,X,j,q,z,be,ye,ue,De,ot,Xe,ft,Ae,it,p,Oe,qe,gt,Nt,We,et,de,Ze,Dt,Xt,St,$t,Ot,Mt,Ft,fn,_n,pn,Ht,At,vt,Tt,Et,lt,ct,rt,Jt,Ut,te,$e,nn,bn,sn,on,en,Bt,Pt,zt]}class Ma extends dt{constructor(e){super(),ut(this,e,Ia,Na,at,{localDevice:0,nearbyDevices:1},null,[-1,-1,-1])}}function Ua(t){let e,n=Tf(t[2])+"",r,i,s=t[1].replace("blinds","")+"",l,c,u,h;return{c(){e=M("button"),r=B(n),i=F(),l=B(s),e.disabled=c=!t[4],L(e,"class","svelte-1u4dkh7"),ce(e,"moving",t[3]&&t[3][mn(t[0],t[1],t[2])]&&t[3][mn(t[0],t[1],t[2])].blindsStatus=="moving"),ce(e,"present",t[3]&&t[3][mn(t[0],t[1],t[2])]&&t[3][mn(t[0],t[1],t[2])].present),ce(e,"disconnected",t[4]==!1)},m(p,b){C(p,e,b),O(e,r),O(e,i),O(e,l),u||(h=Se(e,"click",t[10]),u=!0)},p(p,[b]){b&4&&n!==(n=Tf(p[2])+"")&&Ie(r,n),b&2&&s!==(s=p[1].replace("blinds","")+"")&&Ie(l,s),b&16&&c!==(c=!p[4])&&(e.disabled=c),b&15&&ce(e,"moving",p[3]&&p[3][mn(p[0],p[1],p[2])]&&p[3][mn(p[0],p[1],p[2])].blindsStatus=="moving"),b&15&&ce(e,"present",p[3]&&p[3][mn(p[0],p[1],p[2])]&&p[3][mn(p[0],p[1],p[2])].present),b&16&&ce(e,"disconnected",p[4]==!1)},i:ge,o:ge,d(p){p&&T(e),u=!1,h()}}}function Tf(t){return t=="up"?"▲":"▼"}function mn(t,e,n){return`${t}-${e}-${n}`}function La(t,e,n){let r,i,s,{connector:l}=e,{placeId:c}=e,{blindsId:u}=e,{blindsDirection:h}=e;const{state:p,connected:b}=l;wt(t,p,S=>n(9,i=S)),wt(t,b,S=>n(4,s=S));function m(S,P){l.signal("action",{action:S,scope:"iot",payload:P})}function y(S,P,k){m("blinds",{placeId:S,blindsId:P,blindsDirection:k,blindsAction:"move"})}const w=()=>y(c,u,h);return t.$$set=S=>{"connector"in S&&n(8,l=S.connector),"placeId"in S&&n(0,c=S.placeId),"blindsId"in S&&n(1,u=S.blindsId),"blindsDirection"in S&&n(2,h=S.blindsDirection)},t.$$.update=()=>{t.$$.dirty&512&&n(3,r=i.blinds)},[c,u,h,r,s,p,b,y,l,i,w]}class mt extends dt{constructor(e){super(),ut(this,e,La,Ua,at,{connector:8,placeId:0,blindsId:1,blindsDirection:2})}}function ja(t){let e,n,r,i,s,l,c,u,h,p,b,m,y,w,S,P,k,G,X,j,q;return s=new mt({props:{placeId:"ap1",blindsId:"blinds4",blindsDirection:"up",connector:t[0]}}),c=new mt({props:{placeId:"ap1",blindsId:"blinds3",blindsDirection:"up",connector:t[0]}}),h=new mt({props:{placeId:"ap1",blindsId:"blinds2",blindsDirection:"up",connector:t[0]}}),b=new mt({props:{placeId:"ap1",blindsId:"blinds1",blindsDirection:"up",connector:t[0]}}),w=new mt({props:{placeId:"ap1",blindsId:"blinds4",blindsDirection:"down",connector:t[0]}}),P=new mt({props:{placeId:"ap1",blindsId:"blinds3",blindsDirection:"down",connector:t[0]}}),G=new mt({props:{placeId:"ap1",blindsId:"blinds2",blindsDirection:"down",connector:t[0]}}),j=new mt({props:{placeId:"ap1",blindsId:"blinds1",blindsDirection:"down",connector:t[0]}}),{c(){e=M("div"),n=M("h2"),n.textContent="Rolete",r=F(),i=M("div"),Ke(s.$$.fragment),l=F(),Ke(c.$$.fragment),u=B(` - — - `),Ke(h.$$.fragment),p=F(),Ke(b.$$.fragment),m=F(),y=M("div"),Ke(w.$$.fragment),S=F(),Ke(P.$$.fragment),k=B(` - — - `),Ke(G.$$.fragment),X=F(),Ke(j.$$.fragment),L(i,"class","iot section svelte-1kxggon"),L(y,"class","iot section svelte-1kxggon"),L(e,"class","blinds_ap1")},m(z,be){C(z,e,be),O(e,n),O(e,r),O(e,i),je(s,i,null),O(i,l),je(c,i,null),O(i,u),je(h,i,null),O(i,p),je(b,i,null),O(e,m),O(e,y),je(w,y,null),O(y,S),je(P,y,null),O(y,k),je(G,y,null),O(y,X),je(j,y,null),q=!0},p(z,be){const ye={};be&1&&(ye.connector=z[0]),s.$set(ye);const ue={};be&1&&(ue.connector=z[0]),c.$set(ue);const De={};be&1&&(De.connector=z[0]),h.$set(De);const ot={};be&1&&(ot.connector=z[0]),b.$set(ot);const Xe={};be&1&&(Xe.connector=z[0]),w.$set(Xe);const ft={};be&1&&(ft.connector=z[0]),P.$set(ft);const Ae={};be&1&&(Ae.connector=z[0]),G.$set(Ae);const Je={};be&1&&(Je.connector=z[0]),j.$set(Je)},i(z){q||(re(s.$$.fragment,z),re(c.$$.fragment,z),re(h.$$.fragment,z),re(b.$$.fragment,z),re(w.$$.fragment,z),re(P.$$.fragment,z),re(G.$$.fragment,z),re(j.$$.fragment,z),q=!0)},o(z){we(s.$$.fragment,z),we(c.$$.fragment,z),we(h.$$.fragment,z),we(b.$$.fragment,z),we(w.$$.fragment,z),we(P.$$.fragment,z),we(G.$$.fragment,z),we(j.$$.fragment,z),q=!1},d(z){z&&T(e),Be(s),Be(c),Be(h),Be(b),Be(w),Be(P),Be(G),Be(j)}}}function Ba(t){let e,n,r,i,s,l,c,u,h,p,b,m,y,w,S,P,k,G,X,j,q,z,be,ye,ue,De,ot,Xe,ft;return s=new mt({props:{placeId:"ap2",blindsId:"blinds6",blindsDirection:"up",connector:t[0]}}),c=new mt({props:{placeId:"ap2",blindsId:"blinds5",blindsDirection:"up",connector:t[0]}}),h=new mt({props:{placeId:"ap2",blindsId:"blinds4",blindsDirection:"up",connector:t[0]}}),b=new mt({props:{placeId:"ap2",blindsId:"blinds3",blindsDirection:"up",connector:t[0]}}),y=new mt({props:{placeId:"ap2",blindsId:"blinds2",blindsDirection:"up",connector:t[0]}}),S=new mt({props:{placeId:"ap2",blindsId:"blinds1",blindsDirection:"up",connector:t[0]}}),G=new mt({props:{placeId:"ap2",blindsId:"blinds6",blindsDirection:"down",connector:t[0]}}),j=new mt({props:{placeId:"ap2",blindsId:"blinds5",blindsDirection:"down",connector:t[0]}}),z=new mt({props:{placeId:"ap2",blindsId:"blinds4",blindsDirection:"down",connector:t[0]}}),ye=new mt({props:{placeId:"ap2",blindsId:"blinds3",blindsDirection:"down",connector:t[0]}}),De=new mt({props:{placeId:"ap2",blindsId:"blinds2",blindsDirection:"down",connector:t[0]}}),Xe=new mt({props:{placeId:"ap2",blindsId:"blinds1",blindsDirection:"down",connector:t[0]}}),{c(){e=M("div"),n=M("h2"),n.textContent="Rolete",r=F(),i=M("div"),Ke(s.$$.fragment),l=F(),Ke(c.$$.fragment),u=B(` - — - `),Ke(h.$$.fragment),p=F(),Ke(b.$$.fragment),m=B(` - — - `),Ke(y.$$.fragment),w=F(),Ke(S.$$.fragment),P=F(),k=M("div"),Ke(G.$$.fragment),X=F(),Ke(j.$$.fragment),q=B(` - — - `),Ke(z.$$.fragment),be=F(),Ke(ye.$$.fragment),ue=B(` - — - `),Ke(De.$$.fragment),ot=F(),Ke(Xe.$$.fragment),L(i,"class","iot section svelte-1kxggon"),L(k,"class","iot section svelte-1kxggon"),L(e,"class","blinds_ap2 svelte-1kxggon"),ce(e,"visible",Ka)},m(Ae,Je){C(Ae,e,Je),O(e,n),O(e,r),O(e,i),je(s,i,null),O(i,l),je(c,i,null),O(i,u),je(h,i,null),O(i,p),je(b,i,null),O(i,m),je(y,i,null),O(i,w),je(S,i,null),O(e,P),O(e,k),je(G,k,null),O(k,X),je(j,k,null),O(k,q),je(z,k,null),O(k,be),je(ye,k,null),O(k,ue),je(De,k,null),O(k,ot),je(Xe,k,null),ft=!0},p(Ae,Je){const He={};Je&1&&(He.connector=Ae[0]),s.$set(He);const ht={};Je&1&&(ht.connector=Ae[0]),c.$set(ht);const it={};Je&1&&(it.connector=Ae[0]),h.$set(it);const Oe={};Je&1&&(Oe.connector=Ae[0]),b.$set(Oe);const qe={};Je&1&&(qe.connector=Ae[0]),y.$set(qe);const gt={};Je&1&&(gt.connector=Ae[0]),S.$set(gt);const Nt={};Je&1&&(Nt.connector=Ae[0]),G.$set(Nt);const We={};Je&1&&(We.connector=Ae[0]),j.$set(We);const et={};Je&1&&(et.connector=Ae[0]),z.$set(et);const de={};Je&1&&(de.connector=Ae[0]),ye.$set(de);const Ze={};Je&1&&(Ze.connector=Ae[0]),De.$set(Ze);const Dt={};Je&1&&(Dt.connector=Ae[0]),Xe.$set(Dt)},i(Ae){ft||(re(s.$$.fragment,Ae),re(c.$$.fragment,Ae),re(h.$$.fragment,Ae),re(b.$$.fragment,Ae),re(y.$$.fragment,Ae),re(S.$$.fragment,Ae),re(G.$$.fragment,Ae),re(j.$$.fragment,Ae),re(z.$$.fragment,Ae),re(ye.$$.fragment,Ae),re(De.$$.fragment,Ae),re(Xe.$$.fragment,Ae),ft=!0)},o(Ae){we(s.$$.fragment,Ae),we(c.$$.fragment,Ae),we(h.$$.fragment,Ae),we(b.$$.fragment,Ae),we(y.$$.fragment,Ae),we(S.$$.fragment,Ae),we(G.$$.fragment,Ae),we(j.$$.fragment,Ae),we(z.$$.fragment,Ae),we(ye.$$.fragment,Ae),we(De.$$.fragment,Ae),we(Xe.$$.fragment,Ae),ft=!1},d(Ae){Ae&&T(e),Be(s),Be(c),Be(h),Be(b),Be(y),Be(S),Be(G),Be(j),Be(z),Be(ye),Be(De),Be(Xe)}}}function za(t){let e,n,r,i;const s=[Ba,ja],l=[];function c(u,h){return u[1].deviceName=="tv-ap2"?0:1}return n=c(t),r=l[n]=s[n](t),{c(){e=M("main"),r.c(),L(e,"class","svelte-1kxggon")},m(u,h){C(u,e,h),l[n].m(e,null),i=!0},p(u,[h]){let p=n;n=c(u),n===p?l[n].p(u,h):(kt(),we(l[p],1,1,()=>{l[p]=null}),Ct(),r=l[n],r?r.p(u,h):(r=l[n]=s[n](u),r.c()),re(r,1),r.m(e,null))},i(u){i||(re(r),i=!0)},o(u){we(r),i=!1},d(u){u&&T(e),l[n].d()}}}let Ka=!1;function qa(t,e,n){let r,i,{connector:s}=e;const{state:l,connected:c}=s;return wt(t,l,u=>n(3,i=u)),t.$$set=u=>{"connector"in u&&n(0,s=u.connector)},t.$$.update=()=>{t.$$.dirty&8&&n(1,r=i.device)},[s,r,l,i]}class Ya extends dt{constructor(e){super(),ut(this,e,qa,za,at,{connector:0})}}function kf(t,e,n){const r=t.slice();return r[3]=e[n],r}function Cf(t){let e,n=t[1].slice(0,4),r=[];for(let i=0;i(s(),s=Rt(c,u=>n(2,i=u)),c);t.$$.on_destroy.push(()=>s());let{store:c}=e;return l(),t.$$set=u=>{"store"in u&&l(n(0,c=u.store))},t.$$.update=()=>{t.$$.dirty&4&&n(1,r=i.notifications.slice().reverse())},[c,r,i]}class Za extends dt{constructor(e){super(),ut(this,e,Wa,Ja,at,{store:0})}}const Wt=tn([]);Wt.LIMIT=300;Wt.log=(t,{dedup:e=!1}={})=>{Wt.update(n=>(e&&n.length>0&&n[n.length-1].entry==t&&n.pop(),n.push({entry:t,createdDate:new Date,createdAt:Date.now(),isRecent:!0,isVeryRecent:!0}),n.slice(-Wt.LIMIT)))};function Is(){const t=Date.now();Wt.update(e=>{for(const n of e)n.isRecent=t-n.createdAt<6e4,n.isVeryRecent=t-n.createdAt<5e3;return e}),setTimeout(Is,1e3)}Is();function Df(t,e,n){const r=t.slice();return r[11]=e[n].time,r[12]=e[n].entry,r[13]=e[n].isRecent,r[14]=e[n].isVeryRecent,r[15]=e[n].createdAt,r[17]=n,r}function $f(t){let e,n;return{c(){e=M("h2"),n=B(t[0]),L(e,"class","title svelte-jdzn25")},m(r,i){C(r,e,i),O(e,n)},p(r,i){i&1&&Ie(n,r[0])},d(r){r&&T(e)}}}function Ga(t){let e,n,r;return{c(){e=M("button"),e.textContent="Show Log",L(e,"class","svelte-jdzn25")},m(i,s){C(i,e,s),n||(r=Se(e,"click",t[8]),n=!0)},p:ge,i:ge,o:ge,d(i){i&&T(e),n=!1,r()}}}function Va(t){let e,n,r;const i=t[7].default,s=Gf(i,t,t[6],null);let l=t[2].map(If),c=[];for(let u=0;u{u[m]=null}),Ct(),i=u[r],i?i.p(p,b):(i=u[r]=c[r](p),i.c()),re(i,1),i.m(e,null))},i(p){s||(re(i),s=!0)},o(p){we(i),s=!1},d(p){p&&T(e),l&&l.d(),u[r].d()}}}const If=t=>{const e=t.createdDate.toLocaleString().split(",")[1];return{...t,time:e}};function ru(t,e,n){let r,i;wt(t,Wt,w=>n(5,i=w));let{$$slots:s={},$$scope:l}=e,{showLogInitially:c=!0}=e,{title:u}=e,{limit:h=0}=e;h>Wt.LIMIT&&(console.log(`Warning: provided LogView line limit (${h}) is larger than logStore limit (${Wt.LIMIT})`),console.log("Utilizing the lower value ..."),h=Wt.LIMIT);let p=c,b;function m(){const w=Date.now();b&&w-b>500&&Wt.log("——— Context switch / App wake ———",{dedup:!0}),b=w,setTimeout(m,300)}m();const y=()=>{n(1,p=!0)};return t.$$set=w=>{"showLogInitially"in w&&n(4,c=w.showLogInitially),"title"in w&&n(0,u=w.title),"limit"in w&&n(3,h=w.limit),"$$scope"in w&&n(6,l=w.$$scope)},t.$$.update=()=>{t.$$.dirty&40&&n(2,r=i.slice(-h).reverse())},[u,p,r,h,c,i,l,s,y]}class Ms extends dt{constructor(e){super(),ut(this,e,ru,nu,at,{showLogInitially:4,title:0,limit:3})}}function iu(t){let e,n,r,i,s;return{c(){e=M("div"),n=M("span"),n.textContent="DMT",r=F(),i=M("span"),s=B(t[0]),L(n,"class","dmt svelte-vrzjix"),L(i,"class","app svelte-vrzjix")},m(l,c){C(l,e,c),O(e,n),O(e,r),O(e,i),O(i,s)},p(l,[c]){c&1&&Ie(s,l[0])},i:ge,o:ge,d(l){l&&T(e)}}}function fu(t,e,n){let{dmtApp:r}=e;return t.$$set=i=>{"dmtApp"in i&&n(0,r=i.dmtApp)},[r]}class su extends dt{constructor(e){super(),ut(this,e,fu,iu,at,{dmtApp:0})}}function ou(t){let e,n,r,i,s,l,c=".".repeat(t[1])+"",u,h,p,b,m;n=new su({props:{dmtApp:t[0]}});const y=t[3].default,w=Gf(y,t,t[2],null);return{c(){e=M("div"),Ke(n.$$.fragment),r=F(),i=M("p"),s=B("Connecting "),l=M("span"),u=B(c),h=F(),w&&w.c(),L(l,"class","svelte-mtqbfw"),L(i,"class","svelte-mtqbfw"),L(e,"class","wrapper svelte-mtqbfw")},m(S,P){C(S,e,P),je(n,e,null),O(e,r),O(e,i),O(i,s),O(i,l),O(l,u),O(e,h),w&&w.m(e,null),m=!0},p(S,[P]){const k={};P&1&&(k.dmtApp=S[0]),n.$set(k),(!m||P&2)&&c!==(c=".".repeat(S[1])+"")&&Ie(u,c),w&&w.p&&(!m||P&4)&&Xf(w,y,S,S[2],m?Qf(y,S[2],P,null):es(S[2]),null)},i(S){m||(re(n.$$.fragment,S),re(w,S),jt(()=>{m&&(b&&b.end(1),p=hn(e,xn,{}),p.start())}),m=!0)},o(S){we(n.$$.fragment,S),we(w,S),p&&p.invalidate(),b=Ao(e,xn,{}),m=!1},d(S){S&&T(e),Be(n),w&&w.d(S),S&&b&&b.end()}}}const lu=5;function cu(t,e,n){let{$$slots:r={},$$scope:i}=e,{dmtApp:s}=e,l=1,c=!0;return mo(()=>{const u=setInterval(()=>{n(1,l=l+(c?1:-1)),l==lu&&(c=!1),l==1&&(c=!0)},500);return()=>clearInterval(u)}),t.$$set=u=>{"dmtApp"in u&&n(0,s=u.dmtApp),"$$scope"in u&&n(2,i=u.$$scope)},[s,l,i,r]}class au extends dt{constructor(e){super(),ut(this,e,cu,ou,at,{dmtApp:0})}}function Mf(t,e,n){const r=t.slice();return r[2]=e[n],r}function Uf(t){let e,n=t[1].errors.slice(0,3),r=[];for(let i=0;i(i(),i=Rt(l,c=>n(1,r=c)),l);t.$$.on_destroy.push(()=>i());let{errorStore:l}=e;return s(),t.$$set=c=>{"errorStore"in c&&s(n(0,l=c.errorStore))},[l,r]}class hu extends dt{constructor(e){super(),ut(this,e,du,uu,at,{errorStore:0})}}function _u({store:t,action:e,payload:n}){console.log(`Action: ${e}`),t.signal("action",{action:e,scope:"player",payload:n})}function pu(t){let e,n;return e=new au({props:{dmtApp:"Mobile",$$slots:{default:[vu]},$$scope:{ctx:t}}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p(r,i){const s={};i&131072&&(s.$$scope={dirty:i,ctx:r}),e.$set(s)},i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function bu(t){let e,n,r,i,s,l,c,u,h=(t[2].deviceKey=="ed4f0a8f470b3024f25c60a54cf832584c2c16081f364fabebc77186ae11d626"||t[2].deviceName=="turbine")&&Bf(t),p=t[2].network=="zaboric"&&zf(t),b=t[2].deviceName!="tv-ap2"&&Kf(t);i=new Io({props:{connected:t[9],device:t[3],nearbyDevices:t[6],deviceName:t[8],activeDeviceKey:t[5],player:t[7]}});let m=t[2].deviceName!="tv-ap2"&&qf(t);return c=new Il({props:{connected:t[9],player:t[7],deviceName:t[8],store:t[0],fnAction:t[12]}}),{c(){h&&h.c(),e=F(),p&&p.c(),n=F(),b&&b.c(),r=F(),Ke(i.$$.fragment),s=F(),m&&m.c(),l=F(),Ke(c.$$.fragment)},m(y,w){h&&h.m(y,w),C(y,e,w),p&&p.m(y,w),C(y,n,w),b&&b.m(y,w),C(y,r,w),je(i,y,w),C(y,s,w),m&&m.m(y,w),C(y,l,w),je(c,y,w),u=!0},p(y,w){y[2].deviceKey=="ed4f0a8f470b3024f25c60a54cf832584c2c16081f364fabebc77186ae11d626"||y[2].deviceName=="turbine"?h?(h.p(y,w),w&4&&re(h,1)):(h=Bf(y),h.c(),re(h,1),h.m(e.parentNode,e)):h&&(kt(),we(h,1,1,()=>{h=null}),Ct()),y[2].network=="zaboric"?p?(p.p(y,w),w&4&&re(p,1)):(p=zf(y),p.c(),re(p,1),p.m(n.parentNode,n)):p&&(kt(),we(p,1,1,()=>{p=null}),Ct()),y[2].deviceName!="tv-ap2"?b?(b.p(y,w),w&4&&re(b,1)):(b=Kf(y),b.c(),re(b,1),b.m(r.parentNode,r)):b&&(kt(),we(b,1,1,()=>{b=null}),Ct());const S={};w&8&&(S.device=y[3]),w&64&&(S.nearbyDevices=y[6]),w&256&&(S.deviceName=y[8]),w&32&&(S.activeDeviceKey=y[5]),w&128&&(S.player=y[7]),i.$set(S),y[2].deviceName!="tv-ap2"?m?(m.p(y,w),w&4&&re(m,1)):(m=qf(y),m.c(),re(m,1),m.m(l.parentNode,l)):m&&(kt(),we(m,1,1,()=>{m=null}),Ct());const P={};w&128&&(P.player=y[7]),w&256&&(P.deviceName=y[8]),w&1&&(P.store=y[0]),c.$set(P)},i(y){u||(re(h),re(p),re(b),re(i.$$.fragment,y),re(m),re(c.$$.fragment,y),u=!0)},o(y){we(h),we(p),we(b),we(i.$$.fragment,y),we(m),we(c.$$.fragment,y),u=!1},d(y){h&&h.d(y),y&&T(e),p&&p.d(y),y&&T(n),b&&b.d(y),y&&T(r),Be(i,y),y&&T(s),m&&m.d(y),y&&T(l),Be(c,y)}}}function vu(t){let e,n;return e=new Ms({props:{showLogInitially:!0,limit:20}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p:ge,i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function Bf(t){let e,n;return e=new Ma({props:{connector:t[10],localDevice:t[2],nearbyDevices:t[6]}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p(r,i){const s={};i&4&&(s.localDevice=r[2]),i&64&&(s.nearbyDevices=r[6]),e.$set(s)},i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function zf(t){let e,n;return e=new Ya({props:{connector:t[10]}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p:ge,i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function Kf(t){let e,n;return e=new Za({props:{store:t[0]}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p(r,i){const s={};i&1&&(s.store=r[0]),e.$set(s)},i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function qf(t){let e,n;return e=new Ll({props:{nearbyDevices:t[6],activeDeviceKey:t[5],store:t[0],log:t[1]}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p(r,i){const s={};i&64&&(s.nearbyDevices=r[6]),i&32&&(s.activeDeviceKey=r[5]),i&1&&(s.store=r[0]),i&2&&(s.log=r[1]),e.$set(s)},i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function Yf(t){let e,n;return e=new Ms({props:{title:"Connectivity log",limit:200,showLogInitially:!1,$$slots:{default:[mu]},$$scope:{ctx:t}}}),{c(){Ke(e.$$.fragment)},m(r,i){je(e,r,i),n=!0},p(r,i){const s={};i&131088&&(s.$$scope={dirty:i,ctx:r}),e.$set(s)},i(r){n||(re(e.$$.fragment,r),n=!0)},o(r){we(e.$$.fragment,r),n=!1},d(r){Be(e,r)}}}function mu(t){let e,n,r,i,s,l,c;return{c(){e=M("p"),n=B("Gui active: "),r=M("span"),i=B(t[4]),s=B("s"),l=F(),c=M("span"),c.textContent="[ also indicates that this app is processing events ]",L(r,"class","svelte-gx051d"),L(c,"class","small svelte-gx051d"),L(e,"class","logview_counter svelte-gx051d")},m(u,h){C(u,e,h),O(e,n),O(e,r),O(r,i),O(r,s),O(e,l),O(e,c)},p(u,h){h&16&&Ie(i,u[4])},d(u){u&&T(e)}}}function yu(t){let e,n,r,i,s,l,c;n=new hu({props:{errorStore:hs}});const u=[bu,pu],h=[];function p(m,y){return m[2]?0:1}i=p(t),s=h[i]=u[i](t);let b=t[2]&&Yf(t);return{c(){e=M("main"),Ke(n.$$.fragment),r=F(),s.c(),l=F(),b&&b.c(),L(e,"class","svelte-gx051d")},m(m,y){C(m,e,y),je(n,e,null),O(e,r),h[i].m(e,null),O(e,l),b&&b.m(e,null),c=!0},p(m,[y]){let w=i;i=p(m),i===w?h[i].p(m,y):(kt(),we(h[w],1,1,()=>{h[w]=null}),Ct(),s=h[i],s?s.p(m,y):(s=h[i]=u[i](m),s.c()),re(s,1),s.m(e,l)),m[2]?b?(b.p(m,y),y&4&&re(b,1)):(b=Yf(m),b.c(),re(b,1),b.m(e,null)):b&&(kt(),we(b,1,1,()=>{b=null}),Ct())},i(m){c||(re(n.$$.fragment,m),re(s),re(b),c=!0)},o(m){we(n.$$.fragment,m),we(s),we(b),c=!1},d(m){m&&T(e),Be(n),h[i].d(),b&&b.d()}}}function gu(t,e,n){let r,i,s,l,c,u,h,p=ge,b=()=>(p(),p=Rt(y,q=>n(13,h=q)),y),m;t.$$.on_destroy.push(()=>p());let{store:y}=e;b();let{log:w}=e;const{connected:S,localConnector:P}=y,{state:k}=P;wt(t,k,q=>n(14,m=q));function G(q,z){bs(),_u({store:y,action:q,payload:z})}k.subscribe(q=>{var be;const z=(be=q==null?void 0:q.device)==null?void 0:be.network;_s.set(["zaboric","borovnjakova"].includes(z))});let X=0;function j(){n(4,X+=1),setTimeout(j,1e3)}return j(),t.$$set=q=>{"store"in q&&b(n(0,y=q.store)),"log"in q&&n(1,w=q.log)},t.$$.update=()=>{t.$$.dirty&8192&&n(3,r=h.device),t.$$.dirty&8192&&n(8,i=h.optimisticDeviceName),t.$$.dirty&16384&&n(2,s=m.device),t.$$.dirty&4&&(s==null||s.devMachine),t.$$.dirty&8192&&n(7,l=h.player||{}),t.$$.dirty&8192&&n(6,c=h.nearbyDevices?h.nearbyDevices.filter(q=>q.hasGui).sort(Co("deviceName")):[]),t.$$.dirty&8192&&n(5,u=h.activeDeviceKey)},[y,w,s,r,X,u,c,l,i,S,P,k,G,h,m]}class xu extends dt{constructor(e){super(),ut(this,e,gu,yu,at,{store:0,log:1})}}function wu(){}class $r{constructor(e,n,r){this.prev=e,this.next=n,this.fn=r||wu}run(e){this.fn(e),this.next&&this.next.run(e)}}class Au{constructor(e){this.head=new $r,this.tail=new $r(this.head),this.head.next=this.tail,this.linkConstructor=e,this.reg={}}insert(e){const n=new $r(this.tail.prev,this.tail,e);return n.next.prev=n,n.prev.next=n,n}remove(e){e.prev.next=e.next,e.next.prev=e.prev}}let Eu=0;class gr{constructor(){this.__events_list={}}on(e,n){const r=this.__events_list[e]||(this.__events_list[e]=new Au),i=n._eev||(n._eev=++Eu);r.reg[i]||(r.reg[i]=r.insert(n))}off(e,n){if(n){const r=this.__events_list[e];if(!r)return;const i=r.reg[n._eev];r.reg[n._eev]=void 0,r&&i&&r.remove(i)}}removeListener(...e){this.off(...e)}emit(e,n){const r=this.__events_list[e];r&&r.head.run(n)}}class Su extends gr{constructor(e){super(),this.state=e,this.subscriptions=[]}get(){return this.state}subscribe(e){return this.subscriptions.push(e),e(this.state),()=>{this.subscriptions=this.subscriptions.filter(n=>n!==e)}}announceStateChange(){this.subscriptions.forEach(e=>e(this.state))}}class qn extends Su{set(e){this.state=e,this.announceStateChange()}}class Ou extends qn{constructor(e={}){super(e)}set(e,{ignore:n=[]}={}){const r={};for(const i of n)r[i]=this.state[i];super.set({...e,...r})}setMerge(e){super.set({...this.state,...e})}clearState({except:e=[]}={}){for(const n of Object.keys(this.state))e.includes(n)||delete this.state[n]}}var Tu=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Us(t,e,n){return n={path:e,exports:{},require:function(r,i){return Ls(r,i??n.path)}},t(n,n.exports),n.exports}function ku(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach(function(n){var r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:function(){return t[n]}})}),e}function Ls(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}var Cu={},Ru=Object.freeze({__proto__:null,default:Cu}),Nu=ku(Ru),Vt=Us(function(t){(function(e){var n=function(o){var d,a=new Float64Array(16);if(o)for(d=0;d>24&255,o[d+1]=a>>16&255,o[d+2]=a>>8&255,o[d+3]=a&255,o[d+4]=f>>24&255,o[d+5]=f>>16&255,o[d+6]=f>>8&255,o[d+7]=f&255}function S(o,d,a,f,_){var g,x=0;for(g=0;g<_;g++)x|=o[d+g]^a[f+g];return(1&x-1>>>8)-1}function P(o,d,a,f){return S(o,d,a,f,16)}function k(o,d,a,f){return S(o,d,a,f,32)}function G(o,d,a,f){for(var _=f[0]&255|(f[1]&255)<<8|(f[2]&255)<<16|(f[3]&255)<<24,g=a[0]&255|(a[1]&255)<<8|(a[2]&255)<<16|(a[3]&255)<<24,x=a[4]&255|(a[5]&255)<<8|(a[6]&255)<<16|(a[7]&255)<<24,N=a[8]&255|(a[9]&255)<<8|(a[10]&255)<<16|(a[11]&255)<<24,U=a[12]&255|(a[13]&255)<<8|(a[14]&255)<<16|(a[15]&255)<<24,Q=f[4]&255|(f[5]&255)<<8|(f[6]&255)<<16|(f[7]&255)<<24,Y=d[0]&255|(d[1]&255)<<8|(d[2]&255)<<16|(d[3]&255)<<24,Ce=d[4]&255|(d[5]&255)<<8|(d[6]&255)<<16|(d[7]&255)<<24,J=d[8]&255|(d[9]&255)<<8|(d[10]&255)<<16|(d[11]&255)<<24,ie=d[12]&255|(d[13]&255)<<8|(d[14]&255)<<16|(d[15]&255)<<24,fe=f[8]&255|(f[9]&255)<<8|(f[10]&255)<<16|(f[11]&255)<<24,he=a[16]&255|(a[17]&255)<<8|(a[18]&255)<<16|(a[19]&255)<<24,ae=a[20]&255|(a[21]&255)<<8|(a[22]&255)<<16|(a[23]&255)<<24,se=a[24]&255|(a[25]&255)<<8|(a[26]&255)<<16|(a[27]&255)<<24,le=a[28]&255|(a[29]&255)<<8|(a[30]&255)<<16|(a[31]&255)<<24,oe=f[12]&255|(f[13]&255)<<8|(f[14]&255)<<16|(f[15]&255)<<24,W=_,ee=g,H=x,Z=N,V=U,K=Q,A=Y,E=Ce,$=J,R=ie,D=fe,I=he,ne=ae,_e=se,ve=le,pe=oe,v,xe=0;xe<20;xe+=2)v=W+ne|0,V^=v<<7|v>>>32-7,v=V+W|0,$^=v<<9|v>>>32-9,v=$+V|0,ne^=v<<13|v>>>32-13,v=ne+$|0,W^=v<<18|v>>>32-18,v=K+ee|0,R^=v<<7|v>>>32-7,v=R+K|0,_e^=v<<9|v>>>32-9,v=_e+R|0,ee^=v<<13|v>>>32-13,v=ee+_e|0,K^=v<<18|v>>>32-18,v=D+A|0,ve^=v<<7|v>>>32-7,v=ve+D|0,H^=v<<9|v>>>32-9,v=H+ve|0,A^=v<<13|v>>>32-13,v=A+H|0,D^=v<<18|v>>>32-18,v=pe+I|0,Z^=v<<7|v>>>32-7,v=Z+pe|0,E^=v<<9|v>>>32-9,v=E+Z|0,I^=v<<13|v>>>32-13,v=I+E|0,pe^=v<<18|v>>>32-18,v=W+Z|0,ee^=v<<7|v>>>32-7,v=ee+W|0,H^=v<<9|v>>>32-9,v=H+ee|0,Z^=v<<13|v>>>32-13,v=Z+H|0,W^=v<<18|v>>>32-18,v=K+V|0,A^=v<<7|v>>>32-7,v=A+K|0,E^=v<<9|v>>>32-9,v=E+A|0,V^=v<<13|v>>>32-13,v=V+E|0,K^=v<<18|v>>>32-18,v=D+R|0,I^=v<<7|v>>>32-7,v=I+D|0,$^=v<<9|v>>>32-9,v=$+I|0,R^=v<<13|v>>>32-13,v=R+$|0,D^=v<<18|v>>>32-18,v=pe+ve|0,ne^=v<<7|v>>>32-7,v=ne+pe|0,_e^=v<<9|v>>>32-9,v=_e+ne|0,ve^=v<<13|v>>>32-13,v=ve+_e|0,pe^=v<<18|v>>>32-18;W=W+_|0,ee=ee+g|0,H=H+x|0,Z=Z+N|0,V=V+U|0,K=K+Q|0,A=A+Y|0,E=E+Ce|0,$=$+J|0,R=R+ie|0,D=D+fe|0,I=I+he|0,ne=ne+ae|0,_e=_e+se|0,ve=ve+le|0,pe=pe+oe|0,o[0]=W>>>0&255,o[1]=W>>>8&255,o[2]=W>>>16&255,o[3]=W>>>24&255,o[4]=ee>>>0&255,o[5]=ee>>>8&255,o[6]=ee>>>16&255,o[7]=ee>>>24&255,o[8]=H>>>0&255,o[9]=H>>>8&255,o[10]=H>>>16&255,o[11]=H>>>24&255,o[12]=Z>>>0&255,o[13]=Z>>>8&255,o[14]=Z>>>16&255,o[15]=Z>>>24&255,o[16]=V>>>0&255,o[17]=V>>>8&255,o[18]=V>>>16&255,o[19]=V>>>24&255,o[20]=K>>>0&255,o[21]=K>>>8&255,o[22]=K>>>16&255,o[23]=K>>>24&255,o[24]=A>>>0&255,o[25]=A>>>8&255,o[26]=A>>>16&255,o[27]=A>>>24&255,o[28]=E>>>0&255,o[29]=E>>>8&255,o[30]=E>>>16&255,o[31]=E>>>24&255,o[32]=$>>>0&255,o[33]=$>>>8&255,o[34]=$>>>16&255,o[35]=$>>>24&255,o[36]=R>>>0&255,o[37]=R>>>8&255,o[38]=R>>>16&255,o[39]=R>>>24&255,o[40]=D>>>0&255,o[41]=D>>>8&255,o[42]=D>>>16&255,o[43]=D>>>24&255,o[44]=I>>>0&255,o[45]=I>>>8&255,o[46]=I>>>16&255,o[47]=I>>>24&255,o[48]=ne>>>0&255,o[49]=ne>>>8&255,o[50]=ne>>>16&255,o[51]=ne>>>24&255,o[52]=_e>>>0&255,o[53]=_e>>>8&255,o[54]=_e>>>16&255,o[55]=_e>>>24&255,o[56]=ve>>>0&255,o[57]=ve>>>8&255,o[58]=ve>>>16&255,o[59]=ve>>>24&255,o[60]=pe>>>0&255,o[61]=pe>>>8&255,o[62]=pe>>>16&255,o[63]=pe>>>24&255}function X(o,d,a,f){for(var _=f[0]&255|(f[1]&255)<<8|(f[2]&255)<<16|(f[3]&255)<<24,g=a[0]&255|(a[1]&255)<<8|(a[2]&255)<<16|(a[3]&255)<<24,x=a[4]&255|(a[5]&255)<<8|(a[6]&255)<<16|(a[7]&255)<<24,N=a[8]&255|(a[9]&255)<<8|(a[10]&255)<<16|(a[11]&255)<<24,U=a[12]&255|(a[13]&255)<<8|(a[14]&255)<<16|(a[15]&255)<<24,Q=f[4]&255|(f[5]&255)<<8|(f[6]&255)<<16|(f[7]&255)<<24,Y=d[0]&255|(d[1]&255)<<8|(d[2]&255)<<16|(d[3]&255)<<24,Ce=d[4]&255|(d[5]&255)<<8|(d[6]&255)<<16|(d[7]&255)<<24,J=d[8]&255|(d[9]&255)<<8|(d[10]&255)<<16|(d[11]&255)<<24,ie=d[12]&255|(d[13]&255)<<8|(d[14]&255)<<16|(d[15]&255)<<24,fe=f[8]&255|(f[9]&255)<<8|(f[10]&255)<<16|(f[11]&255)<<24,he=a[16]&255|(a[17]&255)<<8|(a[18]&255)<<16|(a[19]&255)<<24,ae=a[20]&255|(a[21]&255)<<8|(a[22]&255)<<16|(a[23]&255)<<24,se=a[24]&255|(a[25]&255)<<8|(a[26]&255)<<16|(a[27]&255)<<24,le=a[28]&255|(a[29]&255)<<8|(a[30]&255)<<16|(a[31]&255)<<24,oe=f[12]&255|(f[13]&255)<<8|(f[14]&255)<<16|(f[15]&255)<<24,W=_,ee=g,H=x,Z=N,V=U,K=Q,A=Y,E=Ce,$=J,R=ie,D=fe,I=he,ne=ae,_e=se,ve=le,pe=oe,v,xe=0;xe<20;xe+=2)v=W+ne|0,V^=v<<7|v>>>32-7,v=V+W|0,$^=v<<9|v>>>32-9,v=$+V|0,ne^=v<<13|v>>>32-13,v=ne+$|0,W^=v<<18|v>>>32-18,v=K+ee|0,R^=v<<7|v>>>32-7,v=R+K|0,_e^=v<<9|v>>>32-9,v=_e+R|0,ee^=v<<13|v>>>32-13,v=ee+_e|0,K^=v<<18|v>>>32-18,v=D+A|0,ve^=v<<7|v>>>32-7,v=ve+D|0,H^=v<<9|v>>>32-9,v=H+ve|0,A^=v<<13|v>>>32-13,v=A+H|0,D^=v<<18|v>>>32-18,v=pe+I|0,Z^=v<<7|v>>>32-7,v=Z+pe|0,E^=v<<9|v>>>32-9,v=E+Z|0,I^=v<<13|v>>>32-13,v=I+E|0,pe^=v<<18|v>>>32-18,v=W+Z|0,ee^=v<<7|v>>>32-7,v=ee+W|0,H^=v<<9|v>>>32-9,v=H+ee|0,Z^=v<<13|v>>>32-13,v=Z+H|0,W^=v<<18|v>>>32-18,v=K+V|0,A^=v<<7|v>>>32-7,v=A+K|0,E^=v<<9|v>>>32-9,v=E+A|0,V^=v<<13|v>>>32-13,v=V+E|0,K^=v<<18|v>>>32-18,v=D+R|0,I^=v<<7|v>>>32-7,v=I+D|0,$^=v<<9|v>>>32-9,v=$+I|0,R^=v<<13|v>>>32-13,v=R+$|0,D^=v<<18|v>>>32-18,v=pe+ve|0,ne^=v<<7|v>>>32-7,v=ne+pe|0,_e^=v<<9|v>>>32-9,v=_e+ne|0,ve^=v<<13|v>>>32-13,v=ve+_e|0,pe^=v<<18|v>>>32-18;o[0]=W>>>0&255,o[1]=W>>>8&255,o[2]=W>>>16&255,o[3]=W>>>24&255,o[4]=K>>>0&255,o[5]=K>>>8&255,o[6]=K>>>16&255,o[7]=K>>>24&255,o[8]=D>>>0&255,o[9]=D>>>8&255,o[10]=D>>>16&255,o[11]=D>>>24&255,o[12]=pe>>>0&255,o[13]=pe>>>8&255,o[14]=pe>>>16&255,o[15]=pe>>>24&255,o[16]=A>>>0&255,o[17]=A>>>8&255,o[18]=A>>>16&255,o[19]=A>>>24&255,o[20]=E>>>0&255,o[21]=E>>>8&255,o[22]=E>>>16&255,o[23]=E>>>24&255,o[24]=$>>>0&255,o[25]=$>>>8&255,o[26]=$>>>16&255,o[27]=$>>>24&255,o[28]=R>>>0&255,o[29]=R>>>8&255,o[30]=R>>>16&255,o[31]=R>>>24&255}function j(o,d,a,f){G(o,d,a,f)}function q(o,d,a,f){X(o,d,a,f)}var z=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function be(o,d,a,f,_,g,x){var N=new Uint8Array(16),U=new Uint8Array(64),Q,Y;for(Y=0;Y<16;Y++)N[Y]=0;for(Y=0;Y<8;Y++)N[Y]=g[Y];for(;_>=64;){for(j(U,N,x,z),Y=0;Y<64;Y++)o[d+Y]=a[f+Y]^U[Y];for(Q=1,Y=8;Y<16;Y++)Q=Q+(N[Y]&255)|0,N[Y]=Q&255,Q>>>=8;_-=64,d+=64,f+=64}if(_>0)for(j(U,N,x,z),Y=0;Y<_;Y++)o[d+Y]=a[f+Y]^U[Y];return 0}function ye(o,d,a,f,_){var g=new Uint8Array(16),x=new Uint8Array(64),N,U;for(U=0;U<16;U++)g[U]=0;for(U=0;U<8;U++)g[U]=f[U];for(;a>=64;){for(j(x,g,_,z),U=0;U<64;U++)o[d+U]=x[U];for(N=1,U=8;U<16;U++)N=N+(g[U]&255)|0,g[U]=N&255,N>>>=8;a-=64,d+=64}if(a>0)for(j(x,g,_,z),U=0;U>>13|a<<3)&8191,f=o[4]&255|(o[5]&255)<<8,this.r[2]=(a>>>10|f<<6)&7939,_=o[6]&255|(o[7]&255)<<8,this.r[3]=(f>>>7|_<<9)&8191,g=o[8]&255|(o[9]&255)<<8,this.r[4]=(_>>>4|g<<12)&255,this.r[5]=g>>>1&8190,x=o[10]&255|(o[11]&255)<<8,this.r[6]=(g>>>14|x<<2)&8191,N=o[12]&255|(o[13]&255)<<8,this.r[7]=(x>>>11|N<<5)&8065,U=o[14]&255|(o[15]&255)<<8,this.r[8]=(N>>>8|U<<8)&8191,this.r[9]=U>>>5&127,this.pad[0]=o[16]&255|(o[17]&255)<<8,this.pad[1]=o[18]&255|(o[19]&255)<<8,this.pad[2]=o[20]&255|(o[21]&255)<<8,this.pad[3]=o[22]&255|(o[23]&255)<<8,this.pad[4]=o[24]&255|(o[25]&255)<<8,this.pad[5]=o[26]&255|(o[27]&255)<<8,this.pad[6]=o[28]&255|(o[29]&255)<<8,this.pad[7]=o[30]&255|(o[31]&255)<<8};ot.prototype.blocks=function(o,d,a){for(var f=this.fin?0:2048,_,g,x,N,U,Q,Y,Ce,J,ie,fe,he,ae,se,le,oe,W,ee,H,Z=this.h[0],V=this.h[1],K=this.h[2],A=this.h[3],E=this.h[4],$=this.h[5],R=this.h[6],D=this.h[7],I=this.h[8],ne=this.h[9],_e=this.r[0],ve=this.r[1],pe=this.r[2],v=this.r[3],xe=this.r[4],Re=this.r[5],Ne=this.r[6],me=this.r[7],Te=this.r[8],ke=this.r[9];a>=16;)_=o[d+0]&255|(o[d+1]&255)<<8,Z+=_&8191,g=o[d+2]&255|(o[d+3]&255)<<8,V+=(_>>>13|g<<3)&8191,x=o[d+4]&255|(o[d+5]&255)<<8,K+=(g>>>10|x<<6)&8191,N=o[d+6]&255|(o[d+7]&255)<<8,A+=(x>>>7|N<<9)&8191,U=o[d+8]&255|(o[d+9]&255)<<8,E+=(N>>>4|U<<12)&8191,$+=U>>>1&8191,Q=o[d+10]&255|(o[d+11]&255)<<8,R+=(U>>>14|Q<<2)&8191,Y=o[d+12]&255|(o[d+13]&255)<<8,D+=(Q>>>11|Y<<5)&8191,Ce=o[d+14]&255|(o[d+15]&255)<<8,I+=(Y>>>8|Ce<<8)&8191,ne+=Ce>>>5|f,J=0,ie=J,ie+=Z*_e,ie+=V*(5*ke),ie+=K*(5*Te),ie+=A*(5*me),ie+=E*(5*Ne),J=ie>>>13,ie&=8191,ie+=$*(5*Re),ie+=R*(5*xe),ie+=D*(5*v),ie+=I*(5*pe),ie+=ne*(5*ve),J+=ie>>>13,ie&=8191,fe=J,fe+=Z*ve,fe+=V*_e,fe+=K*(5*ke),fe+=A*(5*Te),fe+=E*(5*me),J=fe>>>13,fe&=8191,fe+=$*(5*Ne),fe+=R*(5*Re),fe+=D*(5*xe),fe+=I*(5*v),fe+=ne*(5*pe),J+=fe>>>13,fe&=8191,he=J,he+=Z*pe,he+=V*ve,he+=K*_e,he+=A*(5*ke),he+=E*(5*Te),J=he>>>13,he&=8191,he+=$*(5*me),he+=R*(5*Ne),he+=D*(5*Re),he+=I*(5*xe),he+=ne*(5*v),J+=he>>>13,he&=8191,ae=J,ae+=Z*v,ae+=V*pe,ae+=K*ve,ae+=A*_e,ae+=E*(5*ke),J=ae>>>13,ae&=8191,ae+=$*(5*Te),ae+=R*(5*me),ae+=D*(5*Ne),ae+=I*(5*Re),ae+=ne*(5*xe),J+=ae>>>13,ae&=8191,se=J,se+=Z*xe,se+=V*v,se+=K*pe,se+=A*ve,se+=E*_e,J=se>>>13,se&=8191,se+=$*(5*ke),se+=R*(5*Te),se+=D*(5*me),se+=I*(5*Ne),se+=ne*(5*Re),J+=se>>>13,se&=8191,le=J,le+=Z*Re,le+=V*xe,le+=K*v,le+=A*pe,le+=E*ve,J=le>>>13,le&=8191,le+=$*_e,le+=R*(5*ke),le+=D*(5*Te),le+=I*(5*me),le+=ne*(5*Ne),J+=le>>>13,le&=8191,oe=J,oe+=Z*Ne,oe+=V*Re,oe+=K*xe,oe+=A*v,oe+=E*pe,J=oe>>>13,oe&=8191,oe+=$*ve,oe+=R*_e,oe+=D*(5*ke),oe+=I*(5*Te),oe+=ne*(5*me),J+=oe>>>13,oe&=8191,W=J,W+=Z*me,W+=V*Ne,W+=K*Re,W+=A*xe,W+=E*v,J=W>>>13,W&=8191,W+=$*pe,W+=R*ve,W+=D*_e,W+=I*(5*ke),W+=ne*(5*Te),J+=W>>>13,W&=8191,ee=J,ee+=Z*Te,ee+=V*me,ee+=K*Ne,ee+=A*Re,ee+=E*xe,J=ee>>>13,ee&=8191,ee+=$*v,ee+=R*pe,ee+=D*ve,ee+=I*_e,ee+=ne*(5*ke),J+=ee>>>13,ee&=8191,H=J,H+=Z*ke,H+=V*Te,H+=K*me,H+=A*Ne,H+=E*Re,J=H>>>13,H&=8191,H+=$*xe,H+=R*v,H+=D*pe,H+=I*ve,H+=ne*_e,J+=H>>>13,H&=8191,J=(J<<2)+J|0,J=J+ie|0,ie=J&8191,J=J>>>13,fe+=J,Z=ie,V=fe,K=he,A=ae,E=se,$=le,R=oe,D=W,I=ee,ne=H,d+=16,a-=16;this.h[0]=Z,this.h[1]=V,this.h[2]=K,this.h[3]=A,this.h[4]=E,this.h[5]=$,this.h[6]=R,this.h[7]=D,this.h[8]=I,this.h[9]=ne},ot.prototype.finish=function(o,d){var a=new Uint16Array(10),f,_,g,x;if(this.leftover){for(x=this.leftover,this.buffer[x++]=1;x<16;x++)this.buffer[x]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(f=this.h[1]>>>13,this.h[1]&=8191,x=2;x<10;x++)this.h[x]+=f,f=this.h[x]>>>13,this.h[x]&=8191;for(this.h[0]+=f*5,f=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=f,f=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=f,a[0]=this.h[0]+5,f=a[0]>>>13,a[0]&=8191,x=1;x<10;x++)a[x]=this.h[x]+f,f=a[x]>>>13,a[x]&=8191;for(a[9]-=1<<13,_=(f^1)-1,x=0;x<10;x++)a[x]&=_;for(_=~_,x=0;x<10;x++)this.h[x]=this.h[x]&_|a[x];for(this.h[0]=(this.h[0]|this.h[1]<<13)&65535,this.h[1]=(this.h[1]>>>3|this.h[2]<<10)&65535,this.h[2]=(this.h[2]>>>6|this.h[3]<<7)&65535,this.h[3]=(this.h[3]>>>9|this.h[4]<<4)&65535,this.h[4]=(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14)&65535,this.h[5]=(this.h[6]>>>2|this.h[7]<<11)&65535,this.h[6]=(this.h[7]>>>5|this.h[8]<<8)&65535,this.h[7]=(this.h[8]>>>8|this.h[9]<<5)&65535,g=this.h[0]+this.pad[0],this.h[0]=g&65535,x=1;x<8;x++)g=(this.h[x]+this.pad[x]|0)+(g>>>16)|0,this.h[x]=g&65535;o[d+0]=this.h[0]>>>0&255,o[d+1]=this.h[0]>>>8&255,o[d+2]=this.h[1]>>>0&255,o[d+3]=this.h[1]>>>8&255,o[d+4]=this.h[2]>>>0&255,o[d+5]=this.h[2]>>>8&255,o[d+6]=this.h[3]>>>0&255,o[d+7]=this.h[3]>>>8&255,o[d+8]=this.h[4]>>>0&255,o[d+9]=this.h[4]>>>8&255,o[d+10]=this.h[5]>>>0&255,o[d+11]=this.h[5]>>>8&255,o[d+12]=this.h[6]>>>0&255,o[d+13]=this.h[6]>>>8&255,o[d+14]=this.h[7]>>>0&255,o[d+15]=this.h[7]>>>8&255},ot.prototype.update=function(o,d,a){var f,_;if(this.leftover){for(_=16-this.leftover,_>a&&(_=a),f=0;f<_;f++)this.buffer[this.leftover+f]=o[d+f];if(a-=_,d+=_,this.leftover+=_,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(a>=16&&(_=a-a%16,this.blocks(o,d,_),d+=_,a-=_),a){for(f=0;f>16&1),g[a-1]&=65535;g[15]=x[15]-32767-(g[14]>>16&1),_=g[15]>>16&1,g[14]&=65535,it(x,g,1-_)}for(a=0;a<16;a++)o[2*a]=x[a]&255,o[2*a+1]=x[a]>>8}function qe(o,d){var a=new Uint8Array(32),f=new Uint8Array(32);return Oe(a,o),Oe(f,d),k(a,0,f,0)}function gt(o){var d=new Uint8Array(32);return Oe(d,o),d[0]&1}function Nt(o,d){var a;for(a=0;a<16;a++)o[a]=d[2*a]+(d[2*a+1]<<8);o[15]&=32767}function We(o,d,a){for(var f=0;f<16;f++)o[f]=d[f]+a[f]}function et(o,d,a){for(var f=0;f<16;f++)o[f]=d[f]-a[f]}function de(o,d,a){var f,_,g=0,x=0,N=0,U=0,Q=0,Y=0,Ce=0,J=0,ie=0,fe=0,he=0,ae=0,se=0,le=0,oe=0,W=0,ee=0,H=0,Z=0,V=0,K=0,A=0,E=0,$=0,R=0,D=0,I=0,ne=0,_e=0,ve=0,pe=0,v=a[0],xe=a[1],Re=a[2],Ne=a[3],me=a[4],Te=a[5],ke=a[6],ze=a[7],Pe=a[8],Me=a[9],Ue=a[10],Le=a[11],Fe=a[12],Ge=a[13],Ve=a[14],Qe=a[15];f=d[0],g+=f*v,x+=f*xe,N+=f*Re,U+=f*Ne,Q+=f*me,Y+=f*Te,Ce+=f*ke,J+=f*ze,ie+=f*Pe,fe+=f*Me,he+=f*Ue,ae+=f*Le,se+=f*Fe,le+=f*Ge,oe+=f*Ve,W+=f*Qe,f=d[1],x+=f*v,N+=f*xe,U+=f*Re,Q+=f*Ne,Y+=f*me,Ce+=f*Te,J+=f*ke,ie+=f*ze,fe+=f*Pe,he+=f*Me,ae+=f*Ue,se+=f*Le,le+=f*Fe,oe+=f*Ge,W+=f*Ve,ee+=f*Qe,f=d[2],N+=f*v,U+=f*xe,Q+=f*Re,Y+=f*Ne,Ce+=f*me,J+=f*Te,ie+=f*ke,fe+=f*ze,he+=f*Pe,ae+=f*Me,se+=f*Ue,le+=f*Le,oe+=f*Fe,W+=f*Ge,ee+=f*Ve,H+=f*Qe,f=d[3],U+=f*v,Q+=f*xe,Y+=f*Re,Ce+=f*Ne,J+=f*me,ie+=f*Te,fe+=f*ke,he+=f*ze,ae+=f*Pe,se+=f*Me,le+=f*Ue,oe+=f*Le,W+=f*Fe,ee+=f*Ge,H+=f*Ve,Z+=f*Qe,f=d[4],Q+=f*v,Y+=f*xe,Ce+=f*Re,J+=f*Ne,ie+=f*me,fe+=f*Te,he+=f*ke,ae+=f*ze,se+=f*Pe,le+=f*Me,oe+=f*Ue,W+=f*Le,ee+=f*Fe,H+=f*Ge,Z+=f*Ve,V+=f*Qe,f=d[5],Y+=f*v,Ce+=f*xe,J+=f*Re,ie+=f*Ne,fe+=f*me,he+=f*Te,ae+=f*ke,se+=f*ze,le+=f*Pe,oe+=f*Me,W+=f*Ue,ee+=f*Le,H+=f*Fe,Z+=f*Ge,V+=f*Ve,K+=f*Qe,f=d[6],Ce+=f*v,J+=f*xe,ie+=f*Re,fe+=f*Ne,he+=f*me,ae+=f*Te,se+=f*ke,le+=f*ze,oe+=f*Pe,W+=f*Me,ee+=f*Ue,H+=f*Le,Z+=f*Fe,V+=f*Ge,K+=f*Ve,A+=f*Qe,f=d[7],J+=f*v,ie+=f*xe,fe+=f*Re,he+=f*Ne,ae+=f*me,se+=f*Te,le+=f*ke,oe+=f*ze,W+=f*Pe,ee+=f*Me,H+=f*Ue,Z+=f*Le,V+=f*Fe,K+=f*Ge,A+=f*Ve,E+=f*Qe,f=d[8],ie+=f*v,fe+=f*xe,he+=f*Re,ae+=f*Ne,se+=f*me,le+=f*Te,oe+=f*ke,W+=f*ze,ee+=f*Pe,H+=f*Me,Z+=f*Ue,V+=f*Le,K+=f*Fe,A+=f*Ge,E+=f*Ve,$+=f*Qe,f=d[9],fe+=f*v,he+=f*xe,ae+=f*Re,se+=f*Ne,le+=f*me,oe+=f*Te,W+=f*ke,ee+=f*ze,H+=f*Pe,Z+=f*Me,V+=f*Ue,K+=f*Le,A+=f*Fe,E+=f*Ge,$+=f*Ve,R+=f*Qe,f=d[10],he+=f*v,ae+=f*xe,se+=f*Re,le+=f*Ne,oe+=f*me,W+=f*Te,ee+=f*ke,H+=f*ze,Z+=f*Pe,V+=f*Me,K+=f*Ue,A+=f*Le,E+=f*Fe,$+=f*Ge,R+=f*Ve,D+=f*Qe,f=d[11],ae+=f*v,se+=f*xe,le+=f*Re,oe+=f*Ne,W+=f*me,ee+=f*Te,H+=f*ke,Z+=f*ze,V+=f*Pe,K+=f*Me,A+=f*Ue,E+=f*Le,$+=f*Fe,R+=f*Ge,D+=f*Ve,I+=f*Qe,f=d[12],se+=f*v,le+=f*xe,oe+=f*Re,W+=f*Ne,ee+=f*me,H+=f*Te,Z+=f*ke,V+=f*ze,K+=f*Pe,A+=f*Me,E+=f*Ue,$+=f*Le,R+=f*Fe,D+=f*Ge,I+=f*Ve,ne+=f*Qe,f=d[13],le+=f*v,oe+=f*xe,W+=f*Re,ee+=f*Ne,H+=f*me,Z+=f*Te,V+=f*ke,K+=f*ze,A+=f*Pe,E+=f*Me,$+=f*Ue,R+=f*Le,D+=f*Fe,I+=f*Ge,ne+=f*Ve,_e+=f*Qe,f=d[14],oe+=f*v,W+=f*xe,ee+=f*Re,H+=f*Ne,Z+=f*me,V+=f*Te,K+=f*ke,A+=f*ze,E+=f*Pe,$+=f*Me,R+=f*Ue,D+=f*Le,I+=f*Fe,ne+=f*Ge,_e+=f*Ve,ve+=f*Qe,f=d[15],W+=f*v,ee+=f*xe,H+=f*Re,Z+=f*Ne,V+=f*me,K+=f*Te,A+=f*ke,E+=f*ze,$+=f*Pe,R+=f*Me,D+=f*Ue,I+=f*Le,ne+=f*Fe,_e+=f*Ge,ve+=f*Ve,pe+=f*Qe,g+=38*ee,x+=38*H,N+=38*Z,U+=38*V,Q+=38*K,Y+=38*A,Ce+=38*E,J+=38*$,ie+=38*R,fe+=38*D,he+=38*I,ae+=38*ne,se+=38*_e,le+=38*ve,oe+=38*pe,_=1,f=g+_+65535,_=Math.floor(f/65536),g=f-_*65536,f=x+_+65535,_=Math.floor(f/65536),x=f-_*65536,f=N+_+65535,_=Math.floor(f/65536),N=f-_*65536,f=U+_+65535,_=Math.floor(f/65536),U=f-_*65536,f=Q+_+65535,_=Math.floor(f/65536),Q=f-_*65536,f=Y+_+65535,_=Math.floor(f/65536),Y=f-_*65536,f=Ce+_+65535,_=Math.floor(f/65536),Ce=f-_*65536,f=J+_+65535,_=Math.floor(f/65536),J=f-_*65536,f=ie+_+65535,_=Math.floor(f/65536),ie=f-_*65536,f=fe+_+65535,_=Math.floor(f/65536),fe=f-_*65536,f=he+_+65535,_=Math.floor(f/65536),he=f-_*65536,f=ae+_+65535,_=Math.floor(f/65536),ae=f-_*65536,f=se+_+65535,_=Math.floor(f/65536),se=f-_*65536,f=le+_+65535,_=Math.floor(f/65536),le=f-_*65536,f=oe+_+65535,_=Math.floor(f/65536),oe=f-_*65536,f=W+_+65535,_=Math.floor(f/65536),W=f-_*65536,g+=_-1+37*(_-1),_=1,f=g+_+65535,_=Math.floor(f/65536),g=f-_*65536,f=x+_+65535,_=Math.floor(f/65536),x=f-_*65536,f=N+_+65535,_=Math.floor(f/65536),N=f-_*65536,f=U+_+65535,_=Math.floor(f/65536),U=f-_*65536,f=Q+_+65535,_=Math.floor(f/65536),Q=f-_*65536,f=Y+_+65535,_=Math.floor(f/65536),Y=f-_*65536,f=Ce+_+65535,_=Math.floor(f/65536),Ce=f-_*65536,f=J+_+65535,_=Math.floor(f/65536),J=f-_*65536,f=ie+_+65535,_=Math.floor(f/65536),ie=f-_*65536,f=fe+_+65535,_=Math.floor(f/65536),fe=f-_*65536,f=he+_+65535,_=Math.floor(f/65536),he=f-_*65536,f=ae+_+65535,_=Math.floor(f/65536),ae=f-_*65536,f=se+_+65535,_=Math.floor(f/65536),se=f-_*65536,f=le+_+65535,_=Math.floor(f/65536),le=f-_*65536,f=oe+_+65535,_=Math.floor(f/65536),oe=f-_*65536,f=W+_+65535,_=Math.floor(f/65536),W=f-_*65536,g+=_-1+37*(_-1),o[0]=g,o[1]=x,o[2]=N,o[3]=U,o[4]=Q,o[5]=Y,o[6]=Ce,o[7]=J,o[8]=ie,o[9]=fe,o[10]=he,o[11]=ae,o[12]=se,o[13]=le,o[14]=oe,o[15]=W}function Ze(o,d){de(o,d,d)}function Dt(o,d){var a=n(),f;for(f=0;f<16;f++)a[f]=d[f];for(f=253;f>=0;f--)Ze(a,a),f!==2&&f!==4&&de(a,a,d);for(f=0;f<16;f++)o[f]=a[f]}function Xt(o,d){var a=n(),f;for(f=0;f<16;f++)a[f]=d[f];for(f=250;f>=0;f--)Ze(a,a),f!==1&&de(a,a,d);for(f=0;f<16;f++)o[f]=a[f]}function St(o,d,a){var f=new Uint8Array(32),_=new Float64Array(80),g,x,N=n(),U=n(),Q=n(),Y=n(),Ce=n(),J=n();for(x=0;x<31;x++)f[x]=d[x];for(f[31]=d[31]&127|64,f[0]&=248,Nt(_,a),x=0;x<16;x++)U[x]=_[x],Y[x]=N[x]=Q[x]=0;for(N[0]=Y[0]=1,x=254;x>=0;--x)g=f[x>>>3]>>>(x&7)&1,it(N,U,g),it(Q,Y,g),We(Ce,N,Q),et(N,N,Q),We(Q,U,Y),et(U,U,Y),Ze(Y,Ce),Ze(J,N),de(N,Q,N),de(Q,U,Ce),We(Ce,N,Q),et(N,N,Q),Ze(U,N),et(Q,Y,J),de(N,Q,u),We(N,N,Y),de(Q,Q,N),de(N,Y,J),de(Y,U,_),Ze(U,Ce),it(N,U,g),it(Q,Y,g);for(x=0;x<16;x++)_[x+16]=N[x],_[x+32]=Q[x],_[x+48]=U[x],_[x+64]=Y[x];var ie=_.subarray(32),fe=_.subarray(16);return Dt(ie,ie),de(fe,fe,ie),Oe(o,fe),0}function $t(o,d){return St(o,d,s)}function Ot(o,d){return r(d,32),$t(o,d)}function Mt(o,d,a){var f=new Uint8Array(32);return St(f,a,d),q(o,i,f,z)}var Ft=Ae,fn=Je;function _n(o,d,a,f,_,g){var x=new Uint8Array(32);return Mt(x,_,g),Ft(o,d,a,f,x)}function pn(o,d,a,f,_,g){var x=new Uint8Array(32);return Mt(x,_,g),fn(o,d,a,f,x)}var Ht=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function At(o,d,a,f){for(var _=new Int32Array(16),g=new Int32Array(16),x,N,U,Q,Y,Ce,J,ie,fe,he,ae,se,le,oe,W,ee,H,Z,V,K,A,E,$,R,D,I,ne=o[0],_e=o[1],ve=o[2],pe=o[3],v=o[4],xe=o[5],Re=o[6],Ne=o[7],me=d[0],Te=d[1],ke=d[2],ze=d[3],Pe=d[4],Me=d[5],Ue=d[6],Le=d[7],Fe=0;f>=128;){for(V=0;V<16;V++)K=8*V+Fe,_[V]=a[K+0]<<24|a[K+1]<<16|a[K+2]<<8|a[K+3],g[V]=a[K+4]<<24|a[K+5]<<16|a[K+6]<<8|a[K+7];for(V=0;V<80;V++)if(x=ne,N=_e,U=ve,Q=pe,Y=v,Ce=xe,J=Re,ie=Ne,fe=me,he=Te,ae=ke,se=ze,le=Pe,oe=Me,W=Ue,ee=Le,A=Ne,E=Le,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=(v>>>14|Pe<<32-14)^(v>>>18|Pe<<32-18)^(Pe>>>41-32|v<<32-(41-32)),E=(Pe>>>14|v<<32-14)^(Pe>>>18|v<<32-18)^(v>>>41-32|Pe<<32-(41-32)),$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,A=v&xe^~v&Re,E=Pe&Me^~Pe&Ue,$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,A=Ht[V*2],E=Ht[V*2+1],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,A=_[V%16],E=g[V%16],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,H=D&65535|I<<16,Z=$&65535|R<<16,A=H,E=Z,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=(ne>>>28|me<<32-28)^(me>>>34-32|ne<<32-(34-32))^(me>>>39-32|ne<<32-(39-32)),E=(me>>>28|ne<<32-28)^(ne>>>34-32|me<<32-(34-32))^(ne>>>39-32|me<<32-(39-32)),$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,A=ne&_e^ne&ve^_e&ve,E=me&Te^me&ke^Te&ke,$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,ie=D&65535|I<<16,ee=$&65535|R<<16,A=Q,E=se,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=H,E=Z,$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,Q=D&65535|I<<16,se=$&65535|R<<16,_e=x,ve=N,pe=U,v=Q,xe=Y,Re=Ce,Ne=J,ne=ie,Te=fe,ke=he,ze=ae,Pe=se,Me=le,Ue=oe,Le=W,me=ee,V%16===15)for(K=0;K<16;K++)A=_[K],E=g[K],$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=_[(K+9)%16],E=g[(K+9)%16],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,H=_[(K+1)%16],Z=g[(K+1)%16],A=(H>>>1|Z<<32-1)^(H>>>8|Z<<32-8)^H>>>7,E=(Z>>>1|H<<32-1)^(Z>>>8|H<<32-8)^(Z>>>7|H<<32-7),$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,H=_[(K+14)%16],Z=g[(K+14)%16],A=(H>>>19|Z<<32-19)^(Z>>>61-32|H<<32-(61-32))^H>>>6,E=(Z>>>19|H<<32-19)^(H>>>61-32|Z<<32-(61-32))^(Z>>>6|H<<32-6),$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,_[K]=D&65535|I<<16,g[K]=$&65535|R<<16;A=ne,E=me,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[0],E=d[0],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[0]=ne=D&65535|I<<16,d[0]=me=$&65535|R<<16,A=_e,E=Te,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[1],E=d[1],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[1]=_e=D&65535|I<<16,d[1]=Te=$&65535|R<<16,A=ve,E=ke,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[2],E=d[2],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[2]=ve=D&65535|I<<16,d[2]=ke=$&65535|R<<16,A=pe,E=ze,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[3],E=d[3],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[3]=pe=D&65535|I<<16,d[3]=ze=$&65535|R<<16,A=v,E=Pe,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[4],E=d[4],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[4]=v=D&65535|I<<16,d[4]=Pe=$&65535|R<<16,A=xe,E=Me,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[5],E=d[5],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[5]=xe=D&65535|I<<16,d[5]=Me=$&65535|R<<16,A=Re,E=Ue,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[6],E=d[6],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[6]=Re=D&65535|I<<16,d[6]=Ue=$&65535|R<<16,A=Ne,E=Le,$=E&65535,R=E>>>16,D=A&65535,I=A>>>16,A=o[7],E=d[7],$+=E&65535,R+=E>>>16,D+=A&65535,I+=A>>>16,R+=$>>>16,D+=R>>>16,I+=D>>>16,o[7]=Ne=D&65535|I<<16,d[7]=Le=$&65535|R<<16,Fe+=128,f-=128}return f}function vt(o,d,a){var f=new Int32Array(8),_=new Int32Array(8),g=new Uint8Array(256),x,N=a;for(f[0]=1779033703,f[1]=3144134277,f[2]=1013904242,f[3]=2773480762,f[4]=1359893119,f[5]=2600822924,f[6]=528734635,f[7]=1541459225,_[0]=4089235720,_[1]=2227873595,_[2]=4271175723,_[3]=1595750129,_[4]=2917565137,_[5]=725511199,_[6]=4215389547,_[7]=327033209,At(f,_,d,a),a%=128,x=0;x=0;--_)f=a[_/8|0]>>(_&7)&1,Et(o,d,f),Tt(d,o),Tt(o,o),Et(o,d,f)}function rt(o,d){var a=[n(),n(),n(),n()];He(a[0],b),He(a[1],m),He(a[2],c),de(a[3],b,m),ct(o,a,d)}function Jt(o,d,a){var f=new Uint8Array(64),_=[n(),n(),n(),n()],g;for(a||r(d,32),vt(f,d,32),f[0]&=248,f[31]&=127,f[31]|=64,rt(_,f),lt(o,_),g=0;g<32;g++)d[g+32]=o[g];return 0}var Ut=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function te(o,d){var a,f,_,g;for(f=63;f>=32;--f){for(a=0,_=f-32,g=f-12;_>4)*Ut[_],a=d[_]>>8,d[_]&=255;for(_=0;_<32;_++)d[_]-=a*Ut[_];for(f=0;f<32;f++)d[f+1]+=d[f]>>8,o[f]=d[f]&255}function $e(o){var d=new Float64Array(64),a;for(a=0;a<64;a++)d[a]=o[a];for(a=0;a<64;a++)o[a]=0;te(o,d)}function nn(o,d,a,f){var _=new Uint8Array(64),g=new Uint8Array(64),x=new Uint8Array(64),N,U,Q=new Float64Array(64),Y=[n(),n(),n(),n()];vt(_,f,32),_[0]&=248,_[31]&=127,_[31]|=64;var Ce=a+64;for(N=0;N>7&&et(o[0],l,o[0]),de(o[3],o[0],o[1]),0)}function sn(o,d,a,f){var _,g=new Uint8Array(32),x=new Uint8Array(64),N=[n(),n(),n(),n()],U=[n(),n(),n(),n()];if(a<64||bn(U,f))return-1;for(_=0;_=0},e.sign.keyPair=function(){var o=new Uint8Array(It),d=new Uint8Array(Kt);return Jt(o,d),{publicKey:o,secretKey:d}},e.sign.keyPair.fromSecretKey=function(o){if(st(o),o.length!==Kt)throw new Error("bad secret key size");for(var d=new Uint8Array(It),a=0;a"u"?typeof Buffer.from<"u"?(e.encodeBase64=function(r){return Buffer.from(r).toString("base64")},e.decodeBase64=function(r){return n(r),new Uint8Array(Array.prototype.slice.call(Buffer.from(r,"base64"),0))}):(e.encodeBase64=function(r){return new Buffer(r).toString("base64")},e.decodeBase64=function(r){return n(r),new Uint8Array(Array.prototype.slice.call(new Buffer(r,"base64"),0))}):(e.encodeBase64=function(r){var i,s=[],l=r.length;for(i=0;i"u"||t==null?[]:Array.isArray(t)?t:[t]}function pr(t){return Array.from(new Uint8Array(t)).map(e=>e.toString(16).padStart(2,"0")).join("")}function Wr(t){const e=t.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g);return new Uint8Array(e.map(n=>parseInt(n,16)))}function js(t,e=8){const n=new Array(e).fill(0);for(let r=0;r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),Ks(e)?n.showHidden=e:e&&qu(n,e),jn(n.showHidden)&&(n.showHidden=!1),jn(n.depth)&&(n.depth=2),jn(n.colors)&&(n.colors=!1),jn(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=Uu),br(n,t,n.depth)}Cn.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};Cn.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function Mu(t,e){return t}function Ks(t){return typeof t=="boolean"}function jn(t){return t===void 0}function Uu(t,e){var n=Cn.styles[e];return n?"\x1B["+Cn.colors[n][0]+"m"+t+"\x1B["+Cn.colors[n][1]+"m":t}function Pr(t){return typeof t=="function"}function qs(t){return typeof t=="string"}function Lu(t){return typeof t=="number"}function Ys(t){return t===null}function Fs(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Ir(t){return xr(t)&&li(t)==="[object RegExp]"}function xr(t){return typeof t=="object"&&t!==null}function Mr(t){return xr(t)&&(li(t)==="[object Error]"||t instanceof Error)}function Ff(t){return xr(t)&&li(t)==="[object Date]"}function li(t){return Object.prototype.toString.call(t)}function ju(t){var e={};return t.forEach(function(n,r){e[n]=!0}),e}function Bu(t,e,n,r,i){for(var s=[],l=0,c=e.length;l=0||s.indexOf("description")>=0))return Ur(e);if(s.length===0){if(Pr(e)){var c=e.name?": "+e.name:"";return t.stylize("[Function"+c+"]","special")}if(Ir(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(Ff(e))return t.stylize(Date.prototype.toString.call(e),"date");if(Mr(e))return Ur(e)}var u="",h=!1,p=["{","}"];if(Array.isArray(e)&&(h=!0,p=["[","]"]),Pr(e)){var b=e.name?": "+e.name:"";u=" [Function"+b+"]"}if(Ir(e)&&(u=" "+RegExp.prototype.toString.call(e)),Ff(e)&&(u=" "+Date.prototype.toUTCString.call(e)),Mr(e)&&(u=" "+Ur(e)),s.length===0&&(!h||e.length==0))return p[0]+u+p[1];if(n<0)return Ir(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special");t.seen.push(e);var m;return h?m=Bu(t,e,n,l,s):m=s.map(function(y){return Zr(t,e,n,l,y,h)}),t.seen.pop(),Ku(m,u,p)}function Zr(t,e,n,r,i,s){var l,c,u;u={value:void 0};try{u.value=e[i]}catch{}try{Object.getOwnPropertyDescriptor&&(u=Object.getOwnPropertyDescriptor(e,i)||u)}catch{}if(u.get?u.set?c=t.stylize("[Getter/Setter]","special"):c=t.stylize("[Getter]","special"):u.set&&(c=t.stylize("[Setter]","special")),Fs(r,i)||(l="["+i+"]"),c||(t.seen.indexOf(u.value)<0?(Ys(n)?c=br(t,u.value,null):c=br(t,u.value,n-1),c.indexOf(` -`)>-1&&(s?c=c.split(` -`).map(function(h){return" "+h}).join(` -`).substr(2):c=` -`+c.split(` -`).map(function(h){return" "+h}).join(` -`))):c=t.stylize("[Circular]","special")),jn(l)){if(s&&i.match(/^\d+$/))return c;l=JSON.stringify(""+i),l.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(l=l.substr(1,l.length-2),l=t.stylize(l,"name")):(l=l.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),l=t.stylize(l,"string"))}return l+": "+c}function zu(t,e){if(jn(e))return t.stylize("undefined","undefined");if(qs(e)){var n="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(n,"string")}if(Lu(e))return t.stylize(""+e,"number");if(Ks(e))return t.stylize(""+e,"boolean");if(Ys(e))return t.stylize("null","null")}function Ku(t,e,n){var r=t.reduce(function(i,s){return s.indexOf(` -`)>=0,i+s.replace(/\u001b\[\d\d?m/g,"").length+1},0);return r>60?n[0]+(e===""?"":e+` - `)+" "+t.join(`, - `)+" "+n[1]:n[0]+e+" "+t.join(", ")+" "+n[1]}function qu(t,e){if(!e||!xr(e))return t;for(var n=Object.keys(e),r=n.length;r--;)t[n[r]]=e[n[r]];return t}function cn(t,e,...n){try{e==console.log?e(`${new Date().toLocaleString()} → ${Iu(...n).replace(/^'/,"").replace(/'$/,"")}`):typeof e=="function"?e(...n):e&&e.logOutput(t,{source:"connectome"},...n)}catch(r){console.log(r)}}class Yu{write(e,...n){cn(void 0,e,...n)}red(e,...n){cn("red",e,...n)}green(e,...n){cn("green",e,...n)}yellow(e,...n){cn("yellow",e,...n)}blue(e,...n){cn("blue",e,...n)}cyan(e,...n){cn("cyan",e,...n)}magenta(e,...n){cn("magenta",e,...n)}gray(e,...n){cn("gray",e,...n)}white(e,...n){cn("white",e,...n)}}var nt=new Yu;Vt.util=Hn;function Fu({data:t,connector:e}){const{log:n}=e;$u(t)&&(t=JSON.stringify(t));const r=new Uint8Array(js(2*e.sentCount,24));if(e.closed())nt.red(n,`⚠️ Warning: "${t}" was not sent because connector is not ready`);else if(e.sentCount>1){let i=0;typeof t=="string"&&(i=1);const s=i==1?Vt.util.decodeUTF8(t):t,l=Pu(s,i),c=Vt.secretbox(l,r,e.sharedSecret);e.verbose&&(nt.green(n,`Connector ${e.endpoint} → Sending encrypted message #${e.sentCount} ↴`),nt.gray(n,t)),e.connection.websocket.send(c)}else e.verbose&&(nt.green(n,`Connector ${e.endpoint} → Sending message #${e.sentCount} ↴`),nt.gray(n,t)),e.connection.websocket.send(t)}Vt.util=Hn;function Hu(t){return Object.keys(t).includes("result")||Object.keys(t).includes("error")}function Hs({jsonData:t,encryptedData:e,rawMessage:n,wasEncrypted:r,connector:i}){const{log:s}=i;i.lastMessageAt=Date.now();const l=new Uint8Array(js(2*i.receivedCount+1,24));if(i.verbose&&!r&&nt.magenta(s,`Connector ${i.endpoint} → Received message #${i.receivedCount} ↴`),t)t.jsonrpc?Hu(t)?(i.verbose&&!r&&(nt.magenta(s,`Connector ${i.endpoint} received plain-text rpc result ↴`),nt.gray(s,t)),i.rpcClient.jsonrpcMsgReceive(n)):i.emit("json_rpc",n):i.emit("receive",{jsonData:t,rawMessage:n});else if(e){i.verbose=="extra"&&(nt.magenta(s,`Connector ${i.endpoint} received bytes ↴`),nt.gray(s,e),nt.magenta(s,`Connector ${i.endpoint} decrypting with shared secret ${i.sharedSecret}...`));const c=Vt.secretbox.open(e,l,i.sharedSecret),u=c[0],h=c.subarray(1);if(u==1){const p=Vt.util.encodeUTF8(h);i.verbose&&nt.write(s,`Received message: ${p}`);try{const b=JSON.parse(p);b.jsonrpc?Hs({jsonData:b,rawMessage:p,wasEncrypted:!0,connector:i}):b.state?i.emit("receive_state",b.state):b.diff?i.emit("receive_diff",b.diff):b.signal?i.emit(b.signal,b.data):b.stateField?i.emit("receive_state_field",b.stateField):i.emit("receive",{jsonData:b,rawMessage:p})}catch(b){throw nt.red(s,"Couldn't parse json message although the flag was for string ..."),nt.red(s,p),b}}else i.emit("receive_binary",h)}}Vt.util=Hn;function Ju({connector:t,afterFirstStep:e=()=>{}}){const{clientPrivateKey:n,clientPublicKey:r,clientPublicKeyHex:i,protocol:s,tag:l,endpoint:c,verbose:u}=t;return new Promise((h,p)=>{t.remoteObject("Auth").call("exchangePubkeys",{pubkey:i}).then(b=>{const m=Vt.box.before(Wr(b),n);e({sharedSecret:m,remotePubkeyHex:b}),u&&nt.write(t.log,`Connector ${c} established shared secret through diffie-hellman exchange.`),t.remoteObject("Auth").call("finalizeHandshake",{protocol:s}).then(y=>{if(y&&y.error)console.log(y.error);else{h();const w=l?` (${l})`:"";nt.cyan(t.log,`${c}${w} ✓ Connection [ ${s||'"no-name"'} ] ready`)}}).catch(p)}).catch(p)})}class Wu extends gr{constructor(e){super(),this.connector=e}send(...e){this.connector.send(...e)}}var Qt={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,REMOTE_INTERNAL_ERROR:-32603,TIMEOUT:-32701};class Js{constructor({transports:e}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transportsToRegister=e,this.methods={}}setMethodPrefix(e){this.methodPrefix=e}expose(e){this.methods=e}registerTransport(e){e.onData(this._processRequest.bind(this,e))}async _processRequest(e,n){const r=JSON.parse(n);let i;return Array.isArray(r)?i=await Promise.all(r.map(s=>this._callMethod(s,e))):i=await this._callMethod(r,e),JSON.stringify(i)}async _callMethod(e,n){if(!e.hasOwnProperty("method"))return;const{method:i,params:s=[],id:l}=e;let c=i;if(c.includes("::")){const[p,b]=c.split("::");if(c=b,this.methodPrefix&&p!=this.methodPrefix)return}const u=!this.methods[c]||typeof this.methods[c]!="function"||c==="constructor"||c.startsWith("_")||this.methods[c]===Object.prototype[c];let h={};if(u)h={jsonrpc:"2.0",id:l,error:{code:Qt.METHOD_NOT_FOUND,message:`Method [${c}] not found on remote target object`}};else{this.currentTransport=n;try{const p=await this.methods[c].apply(this.methods,s);if(!l)return;h={jsonrpc:"2.0",result:typeof p>"u"?null:p,id:l}}catch(p){console.log(`Exposed RPC method ${i} internal error:`),console.log(p),console.log("Sending this error as a result to calling client ..."),h={jsonrpc:"2.0",error:{code:Qt.REMOTE_INTERNAL_ERROR,message:`Method [${i}] internal error: ${p.stack}`},id:l}}}return h}run(){for(const e of this.transportsToRegister)this.registerTransport(e);this.transportsToRegister=[]}}class Dn extends Error{constructor(e={}){if(super(),!e.code)throw new Error("Code required");if(!e.message)throw new Error("Message required");this.code=e.code,this.message=e.message}}class Zu extends Dn{constructor(e){super({code:Qt.METHOD_NOT_FOUND,message:e||"Method not found"})}}class Gu extends Dn{constructor(){super({code:Qt.INVALID_PARAMS,message:"Invalid params"})}}class Vu extends Dn{constructor(e){super({code:Qt.REMOTE_INTERNAL_ERROR,message:`Error originating at remote endpoint: ${e}`||"Remote Internal error"})}}class Qu extends Dn{constructor(){super({code:Qt.PARSE_ERROR,message:"Parse error"})}}class Xu extends Dn{constructor(){super({code:Qt.INVALID_REQUEST,message:"Invalid request"})}}class Ws extends Dn{}class e0 extends Ws{constructor(e,n){super({code:Qt.TIMEOUT,message:`Request exceeded maximum execution time (${n}ms): ${e}`})}}var Lr={Base:Dn,MethodNotFound:Zu,InvalidRequest:Xu,InvalidParams:Gu,RemoteInternalError:Vu,ServerError:Ws,ParseError:Qu,RequestTimeout:e0};class Zs{constructor({transport:e,requestTimeout:n=2e4}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transport=e,this.requestTimeout=n,this.pendingRequest={},this.initialized=!1}setMethodPrefix(e){this.methodPrefix=e}async callMethod(e,n){this._init();const r=this.methodPrefix?`${this.methodPrefix}::${e}`:e,i=this._makeRequestObject({method:r,params:n});return this._sendRequest({object:i,id:i.id})}notify(e,n){this._init();const r=this._makeRequestObject({method:e,params:n,mode:"notify"});return this.transport.sendData(JSON.stringify(r)),!0}async runBatch(e){const n=this._generateId();let r=!0;const i=[];for(const[s,l,c]of e){const u=this._makeRequestObject({method:s,params:l,mode:c,batchId:n});u.id&&(r=!1),i.push(u)}return r?this.transport.sendData(JSON.stringify(i)):this._sendRequest({object:i,id:n})}_init(){this.initialized||(this.transport.onData(this._processResponse.bind(this)),this.initialized=!0)}_sendRequest({object:e,id:n}){const r=JSON.stringify(e);return new Promise((i,s)=>{this.pendingRequest[n]={resolve:i,reject:s,sentObject:e},setTimeout(()=>{this.pendingRequest[n]&&(delete this.pendingRequest[n],s(new Lr.RequestTimeout(r,this.requestTimeout)))},this.requestTimeout);try{this.transport.sendData(r)}catch(l){delete this.pendingRequest[n],s(l)}})}_processResponse(e){const n=JSON.parse(e);Array.isArray(n)?this._processBatchResponse(n):this._processSingleCallResponse(n)}_processSingleCallResponse(e){const n=e.hasOwnProperty("result")||!1,r=e.hasOwnProperty("error");if(!n&&!r)return;const i=this.pendingRequest[e.id];if(delete this.pendingRequest[e.id],!!i){if(n)i.resolve(e.result);else if(r){const s=this._makeErrorObject(e.error);i.reject(s)}}}_processBatchResponse(e){let n;const r={},i=[];for(const h of e)h.id?(n||(n=h.id.split("|")[0]),r[h.id]=h):h.error&&i.push(h.error);if(!this.pendingRequest[n])return;const{sentObject:s,resolve:l}=this.pendingRequest[n];delete this.pendingRequest[n];const c=[];let u=0;for(const h of s){if(!h.id){c.push(null);continue}const p=r[h.id];p?p.hasOwnProperty("result")||!1?c.push({success:!0,result:p.result}):c.push({success:!1,result:this._makeErrorObject(p.error)}):(c.push({success:!1,error:this._makeErrorObject(i[u])}),u++)}l(c)}_makeRequestObject({method:e,params:n,mode:r,batchId:i}){const s={jsonrpc:"2.0",method:e};return n&&n.length&&(s.params=n),r!=="notify"&&(s.id=i?`${i}|${this._generateId()}`:this._generateId()),s}_makeErrorObject(e){const n={[Qt.METHOD_NOT_FOUND]:()=>new Lr.MethodNotFound(e.message),[Qt.REMOTE_INTERNAL_ERROR]:()=>new Lr.RemoteInternalError(e.message)}[e.code];return n()}_generateId(){const e="bjectSymhasOwnProp-0123456789ABCDEFGHIJKLMNQRTUVWXYZ_dfgiklquvxz";let n=10,r="";for(;0t.setMethodPrefix(s):(...s)=>r.callMethod.call(r,i,s)}})}function Hf(t){return new Proxy(t,{get(e,n){return(...r)=>e.call(null,n,r)},apply(e,n,r){return e.apply(null,r)}})}class n0 extends Zs{constructor(...e){return super(...e),t0(this)}}class r0{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",e)}sendData(e){this.channel.send(e)}}class Gs{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",async n=>{const r=await e(n);r&&this.channel.send(r)})}}var i0=Object.freeze({__proto__:null,MoleServer:Js,MoleClient:Zs,MoleClientProxified:n0,ClientTransport:r0,ServerTransport:Gs});class f0 extends Error{constructor(e,n){super(e),this.name=this.constructor.name,this.errorCode=n}errorCode(){return this.errorCode}}const{MoleClient:s0,ClientTransport:o0}=i0;class l0{constructor(e,n,r){this.moleChannel=new Wu(e),this.methodPrefix=n,this.connectorOrServersideChannel=e,this.client=new s0({requestTimeout:r,transport:new o0(this.moleChannel)})}jsonrpcMsgReceive(e){this.moleChannel.emit("json_rpc",e)}call(e,n){return this.connectorOrServersideChannel.closed()?new Promise((r,i)=>{i(new f0(`Method call [${this.methodPrefix}::${e}] on closed channel or connector ignored. Please add a check for closed channel in your code.`,"CLOSED_CHANNEL"))}):this.client.callMethod(`${this.methodPrefix}::${e}`,n)}}const c0=1e4;class a0{constructor(e,n){this.connectorOrServersideChannel=e,this.remoteObjects={},this.requestTimeout=n||c0}remoteObject(e){return this.remoteObjects[e]||(this.remoteObjects[e]=new l0(this.connectorOrServersideChannel,e,this.requestTimeout)),this.remoteObjects[e]}jsonrpcMsgReceive(e){for(const n of Object.values(this.remoteObjects))n.jsonrpcMsgReceive(e)}}class u0{constructor({serversideChannel:e,serverMethods:n,methodPrefix:r}){const i=[new Gs(e)];this.server=new Js({transports:i}),this.server.expose(n),this.server.setMethodPrefix(r),this.server.run()}}/*! - * https://github.com/Starcounter-Jack/JSON-Patch - * (c) 2017 Joachim Wester - * MIT license - */var d0=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)i.hasOwnProperty(s)&&(r[s]=i[s])},t(e,n)};return function(e,n){t(e,n);function r(){this.constructor=e}e.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),h0=Object.prototype.hasOwnProperty;function Gr(t,e){return h0.call(t,e)}function Vr(t){if(Array.isArray(t)){for(var n=new Array(t.length),e=0;e=48&&r<=57){e++;continue}return!1}return!0}function On(t){return t.indexOf("/")===-1&&t.indexOf("~")===-1?t:t.replace(/~/g,"~0").replace(/\//g,"~1")}function Vs(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function Xr(t){if(t===void 0)return!0;if(t){if(Array.isArray(t)){for(var e=0,n=t.length;e=b){if(n&&e.op==="add"&&y>h.length)throw new pt("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",s,e,t);var l=p0[e.op].call(e,h,y,t);if(l.test===!1)throw new pt("Test operation failed","TEST_OPERATION_FAILED",s,e,t);return l}}else if(y&&y.indexOf("~")!=-1&&(y=Vs(y)),p>=b){var l=Bn[e.op].call(e,h,y,t);if(l.test===!1)throw new pt("Test operation failed","TEST_OPERATION_FAILED",s,e,t);return l}h=h[y]}}}function ci(t,e,n,r,i){if(r===void 0&&(r=!0),i===void 0&&(i=!0),n&&!Array.isArray(e))throw new pt("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");r||(t=Yt(t));for(var s=new Array(e.length),l=0,c=e.length;l0)throw new pt('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",e,t,n);if((t.op==="move"||t.op==="copy")&&typeof t.from!="string")throw new pt("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",e,t,n);if((t.op==="add"||t.op==="replace"||t.op==="test")&&t.value===void 0)throw new pt("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",e,t,n);if((t.op==="add"||t.op==="replace"||t.op==="test")&&Xr(t.value))throw new pt("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",e,t,n);if(n){if(t.op=="add"){var i=t.path.split("/").length,s=r.split("/").length;if(i!==s+1&&i!==s)throw new pt("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",e,t,n)}else if(t.op==="replace"||t.op==="remove"||t.op==="_get"){if(t.path!==r)throw new pt("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",e,t,n)}else if(t.op==="move"||t.op==="copy"){var l={op:"_get",path:t.from,value:void 0},c=Xs([l],n);if(c&&c.name==="OPERATION_PATH_UNRESOLVABLE")throw new pt("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",e,t,n)}}}else throw new pt("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",e,t,n)}function Xs(t,e,n){try{if(!Array.isArray(t))throw new pt("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(e)ci(Yt(e),Yt(t),n||!0);else{n=n||mr;for(var r=0;r0&&(t.patches=[],t.callback&&t.callback(r)),r}function ui(t,e,n,r,i){if(e!==t){typeof e.toJSON=="function"&&(e=e.toJSON());for(var s=Vr(e),l=Vr(t),c=!1,u=l.length-1;u>=0;u--){var h=l[u],p=t[h];if(Gr(e,h)&&!(e[h]===void 0&&p!==void 0&&Array.isArray(e)===!1)){var b=e[h];typeof p=="object"&&p!=null&&typeof b=="object"&&b!=null?ui(p,b,n,r+"/"+On(h),i):p!==b&&(i&&n.push({op:"test",path:r+"/"+On(h),value:Yt(p)}),n.push({op:"replace",path:r+"/"+On(h),value:Yt(b)}))}else Array.isArray(t)===Array.isArray(e)?(i&&n.push({op:"test",path:r+"/"+On(h),value:Yt(p)}),n.push({op:"remove",path:r+"/"+On(h)}),c=!0):(i&&n.push({op:"test",path:r,value:t}),n.push({op:"replace",path:r,value:e}))}if(!(!c&&s.length==l.length))for(var u=0;u{this.wireStateReceived=!0,this.set(n)}),this.connector.on("receive_diff",n=>{this.wireStateReceived&&(k0(this.state,n),this.announceStateChange())})}field(e){return this.connector.connectionState.get(e)}}class R0 extends qn{constructor(e){super({}),this.fields={},this.connector=e,this.connector.on("receive_state_field",({name:n,state:r})=>{this.get(n).set(r)})}get(e){return this.fields[e]||(this.fields[e]=new qn),this.fields[e]}}Vt.util=Hn;const N0=700,D0=6e4,$0=1;class P0 extends gr{constructor({endpoint:e,protocol:n,keypair:r=Bs(),rpcRequestTimeout:i,verbose:s=!1,tag:l,log:c=console.log,autoDecommission:u=!1,dummy:h}={}){super(),this.protocol=n,this.log=c;const{privateKey:p,publicKey:b}=zs(r);this.clientPrivateKey=p,this.clientPublicKey=b,this.clientPublicKeyHex=pr(b),this.rpcClient=new a0(this,i),this.endpoint=e,this.verbose=s,this.tag=l,this.autoDecommission=u,this.sentCount=0,this.receivedCount=0,this.successfulConnectsCount=0,h||(this.state=new C0(this),this.connectionState=new R0(this)),this.connected=new qn,this.delayedAdjustConnectionStatus(),s&&nt.green(this.log,`Connector ${this.endpoint} created`),this.decommissionCheckCounter=0,this.lastPongReceivedAt=Date.now(),this.on("pong",()=>{this.lastPongReceivedAt=Date.now()})}delayedAdjustConnectionStatus(){setTimeout(()=>{this.connected.get()==null&&this.connected.set(!1)},N0)}send(e){Fu({data:e,connector:this}),this.sentCount+=1}signal(e,n){this.connected.get()?this.send({signal:e,data:n}):nt.write(this.log,"Warning: trying to send signal over disconnected connector, this should be prevented by GUI")}userAction({action:e,scope:n,payload:r}){this.signal("__action",{action:e,scope:n,payload:r})}on(e,n){e=="ready"&&this.isReady()&&n(),super.on(e,n)}getSharedSecret(){return this.sharedSecret?pr(this.sharedSecret):void 0}wireReceive({jsonData:e,encryptedData:n,rawMessage:r}){Hs({jsonData:e,encryptedData:n,rawMessage:r,connector:this}),this.receivedCount+=1}field(e){return this.connectionState.get(e)}isReady(){return this.ready}closed(){return!this.transportConnected}connectStatus(e){if(e){this.sentCount=0,this.receivedCount=0,this.transportConnected=!0,this.successfulConnectsCount+=1,this.verbose&&nt.green(this.log,`✓ Connector ${this.endpoint} connected #${this.successfulConnectsCount}`);const n=this.connection.websocket.__id;Ju({connector:this,afterFirstStep:({sharedSecret:i,remotePubkeyHex:s})=>{this.sharedSecret=i,this._remotePubkeyHex=s}}).then(()=>{this.connectedAt=Date.now(),this.connected.set(!0),this.ready=!0,this.emit("ready")}).catch(i=>{this.connection.websocket.__id==n&&this.connection.websocket.readyState==$0&&i.code==Qt.TIMEOUT&&(nt.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] handshake error: "${i.message}"`),nt.write(this.log,`${this.endpoint} Connector dropping stale websocket after handshake error`),this.connection.terminate()),i.code!=Qt.TIMEOUT&&nt.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] on:ready error: "${i.stack}" — (will not try to reconnect, fix the error and reload this gui)`)})}else{let n;this.transportConnected&&(n=!0),this.transportConnected==null&&nt.write(this.log,`${this.endpoint} Connector was not able to connect at first try`),this.transportConnected=!1,this.ready=!1,this.sharedSecret=void 0,delete this.connectedAt,n&&(this.emit("disconnect"),e==null&&this.delayedAdjustConnectionStatus(),this.connected.set(e))}}checkForDecommission(){this.autoDecommission&&(this.decommissionCheckRequestedAt&&Date.now()-this.decommissionCheckRequestedAt>3e3&&(this.decommissionCheckCounter=0),this.decommissionCheckRequestedAt=Date.now(),this.decommissionCheckCounter+=1,this.decommissionCheckCounter>12&&Date.now()-this.lastPongReceivedAt>D0&&(nt.write(this.log,`Decommissioning connector ${this.endpoint} (long inactive)`),this.decommission(),this.emit("decommission")))}decommission(){this.decommissioned=!0}remoteObject(e){return{call:(n,r=[])=>this.rpcClient.remoteObject(e).call(n,Du(r))}}attachObject(e,n){new u0({serversideChannel:this,serverMethods:n,methodPrefix:e})}clientPubkey(){return this.clientPublicKeyHex}remotePubkeyHex(){return this._remotePubkeyHex}remoteAddress(){return this.endpoint}}const Wf=typeof window<"u";function I0({endpoint:t,host:e,port:n}){if(Wf&&t&&t.startsWith("/")&&(t=`${window.location.protocol.includes("s")?"wss":"ws"}://${window.location.host}${t}`),!t)if(Wf){e=e||window.location.hostname;const r=window.location.protocol.includes("s")?"wss":"ws";t=`${r}://${e}`,r=="wss"?t=`${r}://${e}/ws`:n?t=`${t}:${n}`:window.location.port&&(t=`${t}:${window.location.port}`)}else{if(!n)throw new Error(`Connectome determineEndpoint: No websocket port provided for ${e}`);t=`ws://${e||"localhost"}:${n}`}return t}const un=typeof window<"u",M0=0,U0=1,L0=1e3,j0=3,B0=5;function z0({endpoint:t,host:e,port:n,protocol:r,keypair:i,remotePubkey:s,rpcRequestTimeout:l,autoDecommission:c,log:u,verbose:h,tag:p,dummy:b},{WebSocket:m}){t=I0({endpoint:t,host:e,port:n});const y=new P0({endpoint:t,protocol:r,rpcRequestTimeout:l,keypair:i,verbose:h,tag:p,log:u,autoDecommission:c,dummy:b}),w=()=>{q0({connector:y,endpoint:t},{WebSocket:m,reconnect:w,log:u,verbose:h})};y.connection={terminate(){this.websocket._removeAllCallbacks(),this.websocket.close(),y.connectStatus(!1),w()},endpoint:t,checkTicker:0};const S=()=>{y.decommissioned||(K0({connector:y,reconnect:w,log:u}),setTimeout(S,L0))};return setTimeout(S,10),y}function K0({connector:t,reconnect:e,log:n}){const r=t.connection;if(F0(r)||t.decommissioned){t.decommissioned?(nt.yellow(n,`${t.endpoint} Connection decommisioned, closing websocket ${r.websocket.__id}, will not retry again `),eo(t)):(t.emit("inactive_connection"),nt.yellow(n,`${t.endpoint} ✖ Terminated inactive connection`)),r.terminate();return}to(r)?r.websocket.send("ping"):(t.connected==null&&(nt.write(n,`${t.endpoint} Setting connector status to FALSE because connector.connected is undefined`),t.connectStatus(!1)),e()),r.checkTicker+=1}function q0({connector:t,endpoint:e},{WebSocket:n,reconnect:r,log:i,verbose:s}){const l=t.connection;if(t.checkForDecommission(),t.decommissioned){eo(t);return}if(l.currentlyTryingWS&&l.currentlyTryingWS.readyState==M0){if(l.currentlyTryingWS._waitForConnectCounter{});const u=()=>{t.decommissioned||((s||un)&&nt.write(i,`${e} Websocket open`),l.currentlyTryingWS=null,l.checkTicker=0,Y0({ws:c,connector:t,openCallback:u,reconnect:r},{log:i,verbose:s}),l.websocket=c,t.connectStatus(!0))};c._removeAllCallbacks=()=>{c.removeEventListener("open",u)},un?c.addEventListener("open",u):c.on("open",u)}function Y0({ws:t,connector:e,openCallback:n,reconnect:r},{log:i,verbose:s}){const l=e.connection,c=p=>{const b=`${e.endpoint} Websocket error`;console.log(b),console.log(p)},u=()=>{if(nt.write(i,`${e.endpoint} ✖ Connection closed`),e.decommissioned){e.connectStatus(!1);return}e.connectStatus(void 0),r()},h=p=>{if(e.decommissioned)return;l.checkTicker=0;const b=un?p.data:p;if(b=="pong"){e.emit("pong");return}let m;try{m=JSON.parse(b)}catch{}if(m)e.wireReceive({jsonData:m,rawMessage:b});else{const y=un?new Uint8Array(b):b;e.wireReceive({encryptedData:y})}};t._removeAllCallbacks=()=>{t.removeEventListener("error",c),t.removeEventListener("close",u),t.removeEventListener("message",h),t.removeEventListener("open",n)},un?(t.addEventListener("error",c),t.addEventListener("close",u),t.addEventListener("message",h)):(t.on("error",c),t.on("close",u),t.on("message",h))}function eo(t){const e=t.connection;e.currentlyTryingWS&&(e.currentlyTryingWS._removeAllCallbacks(),e.currentlyTryingWS.close(),e.currentlyTryingWS=null),e.ws&&(e.ws._removeAllCallbacks(),e.ws.close(),e.ws=null),t.connectStatus(!1)}function to(t){return t.websocket&&t.websocket.readyState==U0}function F0(t){return to(t)&&t.checkTicker>j0}function H0(t){return t.log=t.log||console.log,z0(t,{WebSocket})}class J0{constructor({mcs:e,foreground:n,connectToDeviceKey:r}){this.mcs=e,this.foreground=n,this.connectToDeviceKey=r}createConnector({host:e,autoDecommission:n=!1}){const{port:r,protocol:i,rpcRequestTimeout:s,log:l,verbose:c,keypair:u}=this.mcs;return H0({host:e,port:r,protocol:i,keypair:u,rpcRequestTimeout:s,autoDecommission:n,log:l,verbose:c})}getDeviceKey(e){var n;return(n=e==null?void 0:e.device)==null?void 0:n.deviceKey}connectThisDevice({host:e}){const n=this.createConnector({host:e});let r=!1;return n.state.subscribe(i=>{var l;i.nearbyDevices||(i.nearbyDevices=[]),i.notifications||(i.notifications=[]);const s=this.getDeviceKey(i);if(s){r||(n.on("pong",()=>{this.mcs.emit("pong",{deviceKey:s})}),r=!0),this.thisDeviceAlreadySetup||(this.mcs.set({activeDeviceKey:s}),this.initNewConnector({deviceKey:s,connector:n}));const c=this.connectToDeviceKey&&this.connectToDeviceKey!=s;if(!c&&this.mcs.activeDeviceKey()==s){const u=(l=i.device)==null?void 0:l.deviceName;this.foreground.set(i,{optimisticDeviceName:u})}this.foreground.setSpecial(i),this.thisDeviceAlreadySetup||(c&&(this.mcs.switch({deviceKey:this.connectToDeviceKey}),delete this.connectToDeviceKey),this.thisDeviceAlreadySetup=!0)}}),n}connectOtherDevice({host:e,deviceKey:n}){if(!this.mcs.connectors[n]){const r=this.createConnector({host:e,autoDecommission:!0});r.on("decommission",()=>{delete this.mcs.connectors[n],r.__removeListeners&&r.__removeListeners()});const i=()=>{this.mcs.emit("pong",{deviceKey:n})};r.on("pong",i),this.initNewConnector({deviceKey:n,connector:r});const s=r.state.subscribe(l=>{if(this.mcs.activeDeviceKey()==n){const c=l.device?l.device.deviceName:null;this.foreground.set(l,{optimisticDeviceName:c})}});r.__removeListeners=()=>{r.off("pong",i),s()}}return this.mcs.connectors[n]}initNewConnector({deviceKey:e,connector:n}){this.mcs.connectors[e]=n,this.setConnectedStore({deviceKey:e,connector:n})}setConnectedStore({deviceKey:e,connector:n}){n.connected.subscribe(r=>{this.mcs.activeDeviceKey()==e&&this.mcs.connected.set(r)})}}function no(t,e=0,n={}){const r=["day","h","min","s"],i=[24,60,60,1e3];if(e==r.length)return n.ms=t,n;e==0&&(n.totalSeconds=t/1e3);const s=i.slice(e).reduce((l,c)=>l*c,1);return n[r[e]]=Math.floor(t/s),no(t%s,e+1,n)}function W0(t){const e=["day","h","min","s"];let n="";for(const r of e)t[r]>0&&(r!="s"||r=="s"&&t.totalSeconds<60)&&(n=`${n} ${t[r]} ${r}`);return n.trim()}function ro(t){if(t){const e=Date.now(),n=3e3;return t.filter(r=>e({...r,relativeTimeAdded:e-r.addedAtc.deviceKey==n&&!c.thisDevice);if(l){const{deviceKey:c,deviceName:u,ip:h}=l;this.switch({host:h,deviceKey:c,deviceName:u})}else this.emit("connect_to_device_key_failed"),this.switchState(i.device)}}}const V0=500;class Q0 extends Ou{constructor({host:e,port:n,protocol:r,keypair:i=Bs(),connectToDeviceKey:s,rpcRequestTimeout:l=3e3,log:c,verbose:u}){super();const h=["time","environment","nearbyDevices","nearbySensors","notifications"],{publicKey:p,privateKey:b}=zs(i);this.publicKey=p,this.privateKey=b,this.keypair=i,this.port=n,this.protocol=r,this.log=c,this.rpcRequestTimeout=l,this.verbose=u,this.connectors={},this.connected=new qn;const m=new Z0({mcs:this,thisDeviceStateKeys:h}),y=new J0({mcs:this,foreground:m,connectToDeviceKey:s});this.connectDevice=y,this.switchDevice=new G0({mcs:this,connectDevice:y,foreground:m}),this.switchDevice.on("connect_to_device_key_failed",()=>{this.emit("connect_to_device_key_failed")}),this.localConnector=y.connectThisDevice({host:e}),this._notificationsExpireAndCalculateRelativeTime()}_notificationsExpireAndCalculateRelativeTime(){const{notifications:e}=this.get();this.setMerge({notifications:ro(e)}),setTimeout(()=>{this._notificationsExpireAndCalculateRelativeTime()},V0)}signal(e,n){this.activeConnector()?this.activeConnector().signal(e,n):console.log(`MCS: Error emitting remote signal ${e} / ${n}. Debug info: activeDeviceKey=${this.activeDeviceKey()}`)}signalLocalDevice(e,n){this.localConnector.signal(e,n)}remoteObject(e){if(this.activeConnector())return this.activeConnector().remoteObject(e);console.log(`Error obtaining remote object ${e}. Debug info: activeDeviceKey=${this.activeDeviceKey()}`)}preconnect({host:e,deviceKey:n,thisDevice:r}){return r?this.localConnector:this.connectDevice.connectOtherDevice({host:e,deviceKey:n})}switch({host:e,deviceKey:n,deviceName:r}){this.switchDevice.switch({host:e,deviceKey:n,deviceName:r})}activeConnector(){if(this.activeDeviceKey())return this.connectors[this.activeDeviceKey()]}activeDeviceKey(){return this.get().activeDeviceKey}}const X0=7780,e1="dmt/gui",io=localStorage.getItem("current_device_key");console.log(`connectToDeviceKey: ${io}`);const fo=new Q0({port:X0,protocol:e1,connectToDeviceKey:io,log:Wt.log});fo.on("connect_to_device_key_failed",()=>{console.log("connect_to_device_key_failed FAILED"),localStorage.removeItem("current_device_key")});window.onerror=ko(hs);new xu({target:document.body,props:{store:fo,log:Wt.log}}); diff --git a/apps/dmt-mobile/assets/index-9bad2e4d.js b/apps/dmt-mobile/assets/index-9bad2e4d.js new file mode 100644 index 000000000..bf2627320 --- /dev/null +++ b/apps/dmt-mobile/assets/index-9bad2e4d.js @@ -0,0 +1,73 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const l of s.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();function me(){}const fi=t=>t;function po(t,e){for(const n in e)t[n]=e[n];return t}function ts(t){return t()}function vi(){return Object.create(null)}function yt(t){t.forEach(ts)}function qn(t){return typeof t=="function"}function ot(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let rr;function mi(t,e){return rr||(rr=document.createElement("a")),rr.href=e,t===rr.href}function bo(t){return Object.keys(t).length===0}function St(t,...e){if(t==null)return me;const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function vo(t){let e;return St(t,n=>e=n)(),e}function mt(t,e,n){t.$$.on_destroy.push(St(e,n))}function ns(t,e,n,r){if(t){const i=rs(t,e,n,r);return t[0](i)}}function rs(t,e,n,r){return t[1]&&r?po(n.ctx.slice(),t[1](r(e))):n.ctx}function is(t,e,n,r){if(t[2]&&r){const i=t[2](r(n));if(e.dirty===void 0)return i;if(typeof i=="object"){const s=[],l=Math.max(e.dirty.length,i.length);for(let c=0;c32){const e=[],n=t.ctx.length/32;for(let r=0;rwindow.performance.now():()=>Date.now(),si=os?t=>requestAnimationFrame(t):me;const zn=new Set;function cs(t){zn.forEach(e=>{e.c(t)||(zn.delete(e),e.f())}),zn.size!==0&&si(cs)}function as(t){let e;return zn.size===0&&si(cs),{promise:new Promise(n=>{zn.add(e={c:t,f:n})}),abort(){zn.delete(e)}}}function k(t,e){t.appendChild(e)}function us(t){if(!t)return document;const e=t.getRootNode?t.getRootNode():t.ownerDocument;return e&&e.host?e:t.ownerDocument}function mo(t){const e=M("style");return yo(us(t),e),e.sheet}function yo(t,e){return k(t.head||t,e),e.sheet}function T(t,e,n){t.insertBefore(e,n||null)}function C(t){t.parentNode&&t.parentNode.removeChild(t)}function gn(t,e){for(let n=0;nt.removeEventListener(e,n,r)}function ds(t){return function(e){return e.preventDefault(),t.call(this,e)}}function gi(t){return function(e){return e.stopPropagation(),t.call(this,e)}}function U(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function go(t){return Array.from(t.childNodes)}function De(t,e){e=""+e,t.wholeText!==e&&(t.data=e)}function wi(t,e){t.value=e??""}function ir(t,e,n,r){n===null?t.style.removeProperty(e):t.style.setProperty(e,n,r?"important":"")}function le(t,e,n){t.classList[n?"add":"remove"](e)}function wo(t,e,{bubbles:n=!1,cancelable:r=!1}={}){const i=document.createEvent("CustomEvent");return i.initCustomEvent(t,n,r,e),i}const lr=new Map;let cr=0;function xo(t){let e=5381,n=t.length;for(;n--;)e=(e<<5)-e^t.charCodeAt(n);return e>>>0}function Ao(t,e){const n={stylesheet:mo(e),rules:{}};return lr.set(t,n),n}function hs(t,e,n,r,i,s,l,c=0){const a=16.666/r;let h=`{ +`;for(let $=0;$<=1;$+=a){const A=e+(n-e)*s($);h+=$*100+`%{${l(A,1-A)}} +`}const p=h+`100% {${l(n,1-n)}} +}`,b=`__svelte_${xo(p)}_${c}`,m=us(t),{stylesheet:y,rules:E}=lr.get(m)||Ao(m,t);E[b]||(E[b]=!0,y.insertRule(`@keyframes ${b} ${p}`,y.cssRules.length));const x=t.style.animation||"";return t.style.animation=`${x?`${x}, `:""}${b} ${r}ms linear ${i}ms 1 both`,cr+=1,b}function qr(t,e){const n=(t.style.animation||"").split(", "),r=n.filter(e?s=>s.indexOf(e)<0:s=>s.indexOf("__svelte")===-1),i=n.length-r.length;i&&(t.style.animation=r.join(", "),cr-=i,cr||Eo())}function Eo(){si(()=>{cr||(lr.forEach(t=>{const{ownerNode:e}=t.stylesheet;e&&C(e)}),lr.clear())})}let er;function Xn(t){er=t}function So(){if(!er)throw new Error("Function called outside component initialization");return er}function Oo(t){So().$$.on_mount.push(t)}const Pn=[],xi=[];let Bn=[];const Ai=[],ko=Promise.resolve();let Yr=!1;function Co(){Yr||(Yr=!0,ko.then(_s))}function Tt(t){Bn.push(t)}const Tr=new Set;let Dn=0;function _s(){if(Dn!==0)return;const t=er;do{try{for(;Dnt.indexOf(r)===-1?e.push(r):n.push(r)),n.forEach(r=>r()),Bn=e}let Zn;function ps(){return Zn||(Zn=Promise.resolve(),Zn.then(()=>{Zn=null})),Zn}function ar(t,e,n){t.dispatchEvent(wo(`${e?"intro":"outro"}${n}`))}const fr=new Set;let mn;function xt(){mn={r:0,c:[],p:mn}}function At(){mn.r||yt(mn.c),mn=mn.p}function te(t,e){t&&t.i&&(fr.delete(t),t.i(e))}function ge(t,e,n,r){if(t&&t.o){if(fr.has(t))return;fr.add(t),mn.c.push(()=>{fr.delete(t),r&&(n&&t.d(1),r())}),t.o(e)}else r&&r()}const bs={duration:0};function pn(t,e,n){const r={direction:"in"};let i=e(t,n,r),s=!1,l,c,a=0;function h(){l&&qr(t,l)}function p(){const{delay:m=0,duration:y=300,easing:E=fi,tick:x=me,css:$}=i||bs;$&&(l=hs(t,0,1,y,m,E,$,a++)),x(0,1);const A=ls()+m,B=A+y;c&&c.abort(),s=!0,Tt(()=>ar(t,!0,"start")),c=as(ee=>{if(s){if(ee>=B)return x(1,0),ar(t,!0,"end"),h(),s=!1;if(ee>=A){const z=E((ee-A)/y);x(z,1-z)}}return s})}let b=!1;return{start(){b||(b=!0,qr(t),qn(i)?(i=i(r),ps().then(p)):p())},invalidate(){b=!1},end(){s&&(h(),s=!1)}}}function No(t,e,n){const r={direction:"out"};let i=e(t,n,r),s=!0,l;const c=mn;c.r+=1;function a(){const{delay:h=0,duration:p=300,easing:b=fi,tick:m=me,css:y}=i||bs;y&&(l=hs(t,1,0,p,h,b,y));const E=ls()+h,x=E+p;Tt(()=>ar(t,!1,"start")),as($=>{if(s){if($>=x)return m(0,1),ar(t,!1,"end"),--c.r||yt(c.c),!1;if($>=E){const A=b(($-E)/p);m(1-A,A)}}return s})}return qn(i)?ps().then(()=>{i=i(r),a()}):a(),{end(h){h&&i.tick&&i.tick(1,0),s&&(l&&qr(t,l),s=!1)}}}function Be(t){t&&t.c()}function Le(t,e,n,r){const{fragment:i,after_update:s}=t.$$;i&&i.m(e,n),r||Tt(()=>{const l=t.$$.on_mount.map(ts).filter(qn);t.$$.on_destroy?t.$$.on_destroy.push(...l):yt(l),t.$$.on_mount=[]}),s.forEach(Tt)}function ze(t,e){const n=t.$$;n.fragment!==null&&(Ro(n.after_update),yt(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function Do(t,e){t.$$.dirty[0]===-1&&(Pn.push(t),Co(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const E=y.length?y[0]:m;return h.ctx&&i(h.ctx[b],h.ctx[b]=E)&&(!h.skip_bound&&h.bound[b]&&h.bound[b](E),p&&Do(t,b)),m}):[],h.update(),p=!0,yt(h.before_update),h.fragment=r?r(h.ctx):!1,e.target){if(e.hydrate){const b=go(e.target);h.fragment&&h.fragment.l(b),b.forEach(C)}else h.fragment&&h.fragment.c();e.intro&&te(t.$$.fragment),Le(t,e.target,e.anchor,e.customElement),_s()}Xn(a)}class ct{$destroy(){ze(this,1),this.$destroy=me}$on(e,n){if(!qn(n))return me;const r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(n),()=>{const i=r.indexOf(n);i!==-1&&r.splice(i,1)}}$set(e){this.$$set&&!bo(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const $n=[];function $o(t,e){return{subscribe:en(t,e).subscribe}}function en(t,e=me){let n;const r=new Set;function i(c){if(ot(t,c)&&(t=c,n)){const a=!$n.length;for(const h of r)h[1](),$n.push(h,t);if(a){for(let h=0;h<$n.length;h+=2)$n[h][0]($n[h+1]);$n.length=0}}}function s(c){i(c(t))}function l(c,a=me){const h=[c,a];return r.add(h),r.size===1&&(n=e(i)||me),c(t),()=>{r.delete(h),r.size===0&&n&&(n(),n=null)}}return{set:i,update:s,subscribe:l}}function Po(t,e,n){const r=!Array.isArray(t),i=r?[t]:t,s=e.length<2;return $o(n,l=>{let c=!1;const a=[];let h=0,p=me;const b=()=>{if(h)return;p();const y=e(r?a[0]:a,l);s?l(y):p=qn(y)?y:me},m=i.map((y,E)=>St(y,x=>{a[E]=x,h&=~(1<{h|=1<`opacity: ${s*i}`}}function yn(t,{delay:e=0,duration:n=400,easing:r=Io,x:i=0,y:s=0,opacity:l=0}={}){const c=getComputedStyle(t),a=+c.opacity,h=c.transform==="none"?"":c.transform,p=a*(1-l),[b,m]=yi(i),[y,E]=yi(s);return{delay:e,duration:n,easing:r,css:(x,$)=>` + transform: ${h} translate(${(1-x)*b}${m}, ${(1-x)*y}${E}); + opacity: ${a-p*$}`}}function Mo(t){function e(r,...i){const s=r.subscribe(...i);return s.unsubscribe?()=>s.unsubscribe():s}function n(r){let i;return e(r,s=>i=s)(),i}return(r,i,s,l,c)=>{const{errors:a}=n(t),h=new Date,p=`${h.getHours()}:${`0${h.getMinutes()}`.slice(-2)}`;c&&c.stack?a.push({msg:r,stacktrace:c.stack,time:p}):a.push({msg:`"${r}" (No more info because of CORS, fix: 1) check for the same error on device where gui runs on :80... 2) if more possible errors from this source, then rethrow - see example in dmt-connect/browser/connect around JSON.parse(msg))`,corsProblem:!0,time:p}),t.set({errors:a})}}function Uo(t,e="asc"){return function(r,i){if(!r.hasOwnProperty(t)||!i.hasOwnProperty(t))return 0;const s=typeof r[t]=="string"?r[t].toUpperCase():r[t],l=typeof i[t]=="string"?i[t].toUpperCase():i[t];let c=0;return s>l?c=1:s{localStorage.setItem(e,n.toString())})}function Ei(t){console.log(`${new Date().toLocaleString()} → ${t}`)}Ei.write=Ei;const ms=en(!0);jo(ms,"show_all_nearby_devices");const ys=en({errors:[]}),gs=en(!1);function ur(t,{defaultSymbol:e="",showTimeLimitIndicator:n=!1}={}){return!t||!t.currentMedia||t.paused?e:n&&t.timeLimit>0?"⏱️":t.currentMedia.mediaType=="video"?"▶":"♫"}function Lo(t){let e;return{c(){e=K("disconnected")},m(n,r){T(n,e,r)},p:me,d(n){n&&C(e)}}}function zo(t){let e,n=ur(t[2])+"",r,i,s,l,c,a=t[4]==!1&&Si();return{c(){e=M("span"),r=K(n),i=Y(),s=M("h2"),l=K(t[1]),c=Y(),a&&a.c(),U(e,"class","play_symbol svelte-5h63c7"),U(s,"class","svelte-5h63c7"),le(s,"disconnected",t[4]==!1)},m(h,p){T(h,e,p),k(e,r),T(h,i,p),T(h,s,p),k(s,l),k(s,c),a&&a.m(s,null)},p(h,p){p&4&&n!==(n=ur(h[2])+"")&&De(r,n),p&2&&De(l,h[1]),h[4]==!1?a||(a=Si(),a.c(),a.m(s,null)):a&&(a.d(1),a=null),p&16&&le(s,"disconnected",h[4]==!1)},d(h){h&&C(e),h&&C(i),h&&C(s),a&&a.d()}}}function Si(t){let e;return{c(){e=M("span"),U(e,"class","disconnected svelte-5h63c7")},m(n,r){T(n,e,r)},d(n){n&&C(e)}}}function Oi(t){let e,n,r,i=t[3].ip+"",s;return{c(){e=M("div"),n=M("span"),n.textContent="IP Address",r=Y(),s=K(i),U(n,"class","svelte-5h63c7"),U(e,"class","device_stat svelte-5h63c7")},m(l,c){T(l,e,c),k(e,n),k(e,r),k(e,s)},p(l,c){c&8&&i!==(i=l[3].ip+"")&&De(s,i)},d(l){l&&C(e)}}}function ki(t){let e,n,r,i=t[3].cpuUsage+"",s,l;return{c(){var c,a,h;e=M("div"),n=M("span"),n.textContent="CPU Usage",r=Y(),s=K(i),l=K("%"),U(n,"class","svelte-5h63c7"),U(e,"class","device_stat cpu_usage svelte-5h63c7"),le(e,"warn1",((c=t[3])==null?void 0:c.cpuUsage)>=50),le(e,"warn2",((a=t[3])==null?void 0:a.cpuUsage)>=70),le(e,"warn3",((h=t[3])==null?void 0:h.cpuUsage)>=80)},m(c,a){T(c,e,a),k(e,n),k(e,r),k(e,s),k(e,l)},p(c,a){var h,p,b;a&8&&i!==(i=c[3].cpuUsage+"")&&De(s,i),a&8&&le(e,"warn1",((h=c[3])==null?void 0:h.cpuUsage)>=50),a&8&&le(e,"warn2",((p=c[3])==null?void 0:p.cpuUsage)>=70),a&8&&le(e,"warn3",((b=c[3])==null?void 0:b.cpuUsage)>=80)},d(c){c&&C(e)}}}function Ci(t){let e,n,r,i=t[3].cpuTemp+"",s,l;return{c(){e=M("div"),n=M("span"),n.textContent="CPU Temperature",r=Y(),s=K(i),l=K("°C"),U(n,"class","svelte-5h63c7"),U(e,"class","device_stat svelte-5h63c7")},m(c,a){T(c,e,a),k(e,n),k(e,r),k(e,s),k(e,l)},p(c,a){a&8&&i!==(i=c[3].cpuTemp+"")&&De(s,i)},d(c){c&&C(e)}}}function Ti(t){var l,c;let e,n,r,i=(((l=t[3])==null?void 0:l.wifiAP)||((c=t[3])==null?void 0:c.apssid))+"",s;return{c(){e=M("div"),n=M("span"),n.textContent="Wifi",r=Y(),s=K(i),U(n,"class","svelte-5h63c7"),U(e,"class","wifi_ap svelte-5h63c7")},m(a,h){T(a,e,h),k(e,n),k(e,r),k(e,s)},p(a,h){var p,b;h&8&&i!==(i=(((p=a[3])==null?void 0:p.wifiAP)||((b=a[3])==null?void 0:b.apssid))+"")&&De(s,i)},d(a){a&&C(e)}}}function Bo(t){var x,$,A,B,ee;let e,n,r,i,s,l,c;function a(z,j){if(z[1])return zo;if(z[4]!=null)return Lo}let h=a(t),p=h&&h(t),b=((x=t[3])==null?void 0:x.ip)&&Oi(t),m=(($=t[3])==null?void 0:$.cpuUsage)&&ki(t),y=((A=t[3])==null?void 0:A.cpuTemp)&&Ci(t),E=(((B=t[3])==null?void 0:B.wifiAP)||((ee=t[3])==null?void 0:ee.apssid))&&Ti(t);return{c(){e=M("div"),p&&p.c(),r=Y(),b&&b.c(),i=Y(),m&&m.c(),s=Y(),y&&y.c(),l=Y(),E&&E.c(),c=_t(),U(e,"class","device_title svelte-5h63c7")},m(z,j){T(z,e,j),p&&p.m(e,null),T(z,r,j),b&&b.m(z,j),T(z,i,j),m&&m.m(z,j),T(z,s,j),y&&y.m(z,j),T(z,l,j),E&&E.m(z,j),T(z,c,j)},p(z,[j]){var q,ue,ae,be,$e;h===(h=a(z))&&p?p.p(z,j):(p&&p.d(1),p=h&&h(z),p&&(p.c(),p.m(e,null))),(q=z[3])!=null&&q.ip?b?b.p(z,j):(b=Oi(z),b.c(),b.m(i.parentNode,i)):b&&(b.d(1),b=null),(ue=z[3])!=null&&ue.cpuUsage?m?m.p(z,j):(m=ki(z),m.c(),m.m(s.parentNode,s)):m&&(m.d(1),m=null),(ae=z[3])!=null&&ae.cpuTemp?y?y.p(z,j):(y=Ci(z),y.c(),y.m(l.parentNode,l)):y&&(y.d(1),y=null),(be=z[3])!=null&&be.wifiAP||($e=z[3])!=null&&$e.apssid?E?E.p(z,j):(E=Ti(z),E.c(),E.m(c.parentNode,c)):E&&(E.d(1),E=null)},i(z){n||Tt(()=>{n=pn(e,yn,{}),n.start()})},o:me,d(z){z&&C(e),p&&p.d(),z&&C(r),b&&b.d(z),z&&C(i),m&&m.d(z),z&&C(s),y&&y.d(z),z&&C(l),E&&E.d(z),z&&C(c)}}}function Ko(t,e,n){let r,i,s=me,l=()=>(s(),s=St(c,y=>n(4,i=y)),c);t.$$.on_destroy.push(()=>s());let{connected:c}=e;l();let{nearbyDevices:a}=e,{deviceName:h}=e,{device:p}=e,{activeDeviceKey:b}=e,{player:m}=e;return t.$$set=y=>{"connected"in y&&l(n(0,c=y.connected)),"nearbyDevices"in y&&n(5,a=y.nearbyDevices),"deviceName"in y&&n(1,h=y.deviceName),"device"in y&&n(6,p=y.device),"activeDeviceKey"in y&&n(7,b=y.activeDeviceKey),"player"in y&&n(2,m=y.player)},t.$$.update=()=>{t.$$.dirty&160&&n(3,r=a.find(y=>y.deviceKey==b))},[c,h,m,r,i,a,p,b]}class qo extends ct{constructor(e){super(),lt(this,e,Ko,Bo,ot,{connected:0,nearbyDevices:5,deviceName:1,device:6,activeDeviceKey:7,player:2})}}function Rr(t,e=2){return Array(Math.max(e-String(t).length+1,0)).join(0)+t}function In(t){t=Math.round(t);const e=Math.floor(t/3600),n=t%3600,r=Math.floor(n/60);return t=n%60,e?`${e}h ${Rr(r)}min ${Rr(t)}s`:`${r}:${Rr(t)}`}function Yo(t){let e=In(t[0].currentMedia.duration)+"",n;return{c(){n=K(e)},m(r,i){T(r,n,i)},p(r,i){i&1&&e!==(e=In(r[0].currentMedia.duration)+"")&&De(n,e)},d(r){r&&C(n)}}}function Fo(t){let e=In(Math.floor(t[0].timeposition))+"",n,r,i=In(t[0].currentMedia.duration)+"",s,l,c,a=Math.round(t[0].percentposition)+"",h,p;return{c(){n=K(e),r=K(" / "),s=K(i),l=K(" — "),c=M("span"),h=K(a),p=K("%"),U(c,"class","svelte-b6jwnj")},m(b,m){T(b,n,m),T(b,r,m),T(b,s,m),T(b,l,m),T(b,c,m),k(c,h),k(c,p)},p(b,m){m&1&&e!==(e=In(Math.floor(b[0].timeposition))+"")&&De(n,e),m&1&&i!==(i=In(b[0].currentMedia.duration)+"")&&De(s,i),m&1&&a!==(a=Math.round(b[0].percentposition)+"")&&De(h,a)},d(b){b&&C(n),b&&C(r),b&&C(s),b&&C(l),b&&C(c)}}}function Ho(t){let e;return{c(){e=K("(radio)")},m(n,r){T(n,e,r)},p:me,d(n){n&&C(e)}}}function Jo(t){let e;function n(s,l){if(s[0].isStream)return Ho;if(s[0].timeposition)return Fo;if(s[0].duration)return Yo}let r=n(t),i=r&&r(t);return{c(){e=M("section"),i&&i.c(),U(e,"class","progress svelte-b6jwnj"),le(e,"faded",t[0].paused)},m(s,l){T(s,e,l),i&&i.m(e,null)},p(s,[l]){r===(r=n(s))&&i?i.p(s,l):(i&&i.d(1),i=r&&r(s),i&&(i.c(),i.m(e,null))),l&1&&le(e,"faded",s[0].paused)},i:me,o:me,d(s){s&&C(e),i&&i.d()}}}function Wo(t,e,n){let{player:r}=e;return t.$$set=i=>{"player"in i&&n(0,r=i.player)},[r]}class Zo extends ct{constructor(e){super(),lt(this,e,Wo,Jo,ot,{player:0})}}function Ri(t){let e,n,r,i;function s(a,h){if(a[2]&&a[6])return Vo;if(a[6])return Go}let l=s(t),c=l&&l(t);return r=new Zo({props:{player:t[0]}}),{c(){e=M("div"),c&&c.c(),n=Y(),Be(r.$$.fragment),U(e,"class","wrapper svelte-120eh85")},m(a,h){T(a,e,h),c&&c.m(e,null),k(e,n),Le(r,e,null),i=!0},p(a,h){l===(l=s(a))&&c?c.p(a,h):(c&&c.d(1),c=l&&l(a),c&&(c.c(),te(c,1),c.m(e,n)));const p={};h&1&&(p.player=a[0]),r.$set(p)},i(a){i||(te(c),te(r.$$.fragment,a),i=!0)},o(a){ge(r.$$.fragment,a),i=!1},d(a){a&&C(e),c&&c.d(),ze(r)}}}function Go(t){let e,n;return{c(){e=M("section"),e.textContent="[ No media loaded ]",U(e,"class","no_media svelte-120eh85")},m(r,i){T(r,e,i)},p:me,i(r){n||Tt(()=>{n=pn(e,yn,{}),n.start()})},o:me,d(r){r&&C(e)}}}function Vo(t){let e,n,r=ur(t[0],{showTimeLimitIndicator:!0})+"",i,s,l,c,a,h,p=t[3]&&Ni(t);return{c(){var b;e=M("section"),n=M("span"),i=K(r),s=Y(),l=K(t[2]),c=Y(),a=M("div"),p&&p.c(),U(n,"class","play_symbol svelte-120eh85"),U(a,"class","file_path svelte-120eh85"),U(e,"class","current_media svelte-120eh85"),le(e,"playing",!t[0].paused),le(e,"within_limit",!t[0].isStream&&t[0].limit),le(e,"last_in_limit",!t[0].isStream&&t[0].limit==1),le(e,"error",t[5]==t[3]&&((b=t[4])==null?void 0:b.error))},m(b,m){T(b,e,m),k(e,n),k(n,i),k(e,s),k(e,l),k(e,c),k(e,a),p&&p.m(a,null)},p(b,m){var y;m&1&&r!==(r=ur(b[0],{showTimeLimitIndicator:!0})+"")&&De(i,r),m&4&&De(l,b[2]),b[3]?p?p.p(b,m):(p=Ni(b),p.c(),p.m(a,null)):p&&(p.d(1),p=null),m&1&&le(e,"playing",!b[0].paused),m&1&&le(e,"within_limit",!b[0].isStream&&b[0].limit),m&1&&le(e,"last_in_limit",!b[0].isStream&&b[0].limit==1),m&56&&le(e,"error",b[5]==b[3]&&((y=b[4])==null?void 0:y.error))},i(b){h||Tt(()=>{h=pn(e,yn,{}),h.start()})},o:me,d(b){b&&C(e),p&&p.d()}}}function Ni(t){let e=Di(t[3])+"",n;return{c(){n=K(e)},m(r,i){T(r,n,i)},p(r,i){i&8&&e!==(e=Di(r[3])+"")&&De(n,e)},d(r){r&&C(n)}}}function Qo(t){let e,n,r=t[0]&&Ri(t);return{c(){r&&r.c(),e=_t()},m(i,s){r&&r.m(i,s),T(i,e,s),n=!0},p(i,[s]){i[0]?r?(r.p(i,s),s&1&&te(r,1)):(r=Ri(i),r.c(),te(r,1),r.m(e.parentNode,e)):r&&(xt(),ge(r,1,1,()=>{r=null}),At())},i(i){n||(te(r),n=!0)},o(i){ge(r),n=!1},d(i){r&&r.d(i),i&&C(e)}}}function Di(t){return t.replace("/root/DMTMountedMedia","")}function Xo(t,e,n){let r,i=me,s=()=>(i(),i=St(c,y=>n(6,r=y)),c);t.$$.on_destroy.push(()=>i());let{player:l}=e,{connected:c}=e;s();let{store:a}=e,{songTitle:h}=e,{songPath:p}=e,{playlistCurrentMedia:b}=e,{playlistSongPath:m}=e;return t.$$set=y=>{"player"in y&&n(0,l=y.player),"connected"in y&&s(n(1,c=y.connected)),"store"in y&&n(7,a=y.store),"songTitle"in y&&n(2,h=y.songTitle),"songPath"in y&&n(3,p=y.songPath),"playlistCurrentMedia"in y&&n(4,b=y.playlistCurrentMedia),"playlistSongPath"in y&&n(5,m=y.playlistSongPath)},[l,c,h,p,b,m,r,a]}class el extends ct{constructor(e){super(),lt(this,e,Xo,Qo,ot,{player:0,connected:1,store:7,songTitle:2,songPath:3,playlistCurrentMedia:4,playlistSongPath:5})}}function $i(t){let e;function n(s,l){return s[1].paused?nl:tl}let r=n(t),i=r(t);return{c(){i.c(),e=_t()},m(s,l){i.m(s,l),T(s,e,l)},p(s,l){r===(r=n(s))&&i?i.p(s,l):(i.d(1),i=r(s),i&&(i.c(),i.m(e.parentNode,e)))},d(s){i.d(s),s&&C(e)}}}function tl(t){let e,n,r,i=(t[2]||"")+"",s,l,c,a;return{c(){e=M("button"),n=K("● Pause "),r=M("span"),s=K(i),U(r,"class","svelte-p9vgzg"),U(e,"class","pause svelte-p9vgzg"),e.disabled=l=!t[5]},m(h,p){T(h,e,p),k(e,n),k(e,r),k(r,s),c||(a=Ae(e,"click",t[8]),c=!0)},p(h,p){p&4&&i!==(i=(h[2]||"")+"")&&De(s,i),p&32&&l!==(l=!h[5])&&(e.disabled=l)},d(h){h&&C(e),c=!1,a()}}}function nl(t){let e,n,r,i=(t[2]||"")+"",s,l,c,a;return{c(){e=M("button"),n=K("▶ Play "),r=M("span"),s=K(i),U(r,"class","svelte-p9vgzg"),U(e,"class","play svelte-p9vgzg"),e.disabled=l=!t[5]},m(h,p){T(h,e,p),k(e,n),k(e,r),k(r,s),c||(a=Ae(e,"click",t[7]),c=!0)},p(h,p){p&4&&i!==(i=(h[2]||"")+"")&&De(s,i),p&32&&l!==(l=!h[5])&&(e.disabled=l)},d(h){h&&C(e),c=!1,a()}}}function Pi(t){let e,n=t[1].volume+"",r;return{c(){e=M("div"),r=K(n),U(e,"class","volume_level svelte-p9vgzg"),le(e,"faded",t[1].paused)},m(i,s){T(i,e,s),k(e,r)},p(i,s){s&2&&n!==(n=i[1].volume+"")&&De(r,n),s&2&&le(e,"faded",i[1].paused)},d(i){i&&C(e)}}}function Ii(t){let e,n,r=t[1].isStream?"Close radio":"Stop",i,s,l,c;return{c(){e=M("button"),n=K("■ "),i=K(r),U(e,"class","stop svelte-p9vgzg"),e.disabled=s=!t[5],le(e,"radio",t[1].isStream)},m(a,h){T(a,e,h),k(e,n),k(e,i),l||(c=Ae(e,"click",t[11]),l=!0)},p(a,h){h&2&&r!==(r=a[1].isStream?"Close radio":"Stop")&&De(i,r),h&32&&s!==(s=!a[5])&&(e.disabled=s),h&2&&le(e,"radio",a[1].isStream)},d(a){a&&C(e),l=!1,c()}}}function Mi(t){let e,n,r,i,s,l,c,a,h,p,b=(t[1].repeatCount||"")+"",m,y,E,x;return{c(){e=M("button"),n=K("Shuffle"),i=Y(),s=M("button"),l=K("Similar"),a=Y(),h=M("button"),p=K("Repeat "),m=K(b),U(e,"class","shuffle svelte-p9vgzg"),e.disabled=r=!t[5],U(s,"class","similar svelte-p9vgzg"),s.disabled=c=!t[5],U(h,"class","repeat svelte-p9vgzg"),h.disabled=y=!t[5],le(h,"repeat_set",t[1].repeatCount>0)},m($,A){T($,e,A),k(e,n),T($,i,A),T($,s,A),k(s,l),T($,a,A),T($,h,A),k(h,p),k(h,m),E||(x=[Ae(e,"click",t[12]),Ae(s,"click",t[13]),Ae(h,"click",t[14])],E=!0)},p($,A){A&32&&r!==(r=!$[5])&&(e.disabled=r),A&32&&c!==(c=!$[5])&&(s.disabled=c),A&2&&b!==(b=($[1].repeatCount||"")+"")&&De(m,b),A&32&&y!==(y=!$[5])&&(h.disabled=y),A&2&&le(h,"repeat_set",$[1].repeatCount>0)},d($){$&&C(e),$&&C(i),$&&C(s),$&&C(a),$&&C(h),E=!1,yt(x)}}}function Ui(t){let e,n,r,i,s,l,c,a,h;return{c(){e=M("button"),n=K("« 20s"),i=Y(),s=M("button"),l=K("20s »"),U(e,"class","backward svelte-p9vgzg"),e.disabled=r=!t[5],U(s,"class","forward svelte-p9vgzg"),s.disabled=c=!t[5]},m(p,b){T(p,e,b),k(e,n),T(p,i,b),T(p,s,b),k(s,l),a||(h=[Ae(e,"click",t[15]),Ae(s,"click",t[16])],a=!0)},p(p,b){b&32&&r!==(r=!p[5])&&(e.disabled=r),b&32&&c!==(c=!p[5])&&(s.disabled=c)},d(p){p&&C(e),p&&C(i),p&&C(s),a=!1,yt(h)}}}function ji(t){let e;function n(s,l){return s[1].isStream?il:rl}let r=n(t),i=r(t);return{c(){i.c(),e=_t()},m(s,l){i.m(s,l),T(s,e,l)},p(s,l){r===(r=n(s))&&i?i.p(s,l):(i.d(1),i=r(s),i&&(i.c(),i.m(e.parentNode,e)))},d(s){i.d(s),s&&C(e)}}}function rl(t){let e,n,r,i,s,l,c=(t[1].limit>0||t[1].timeLimit>0)&&Li(t),a=t[1].limit>0&&zi(t);function h(m,y){return m[1].timeLimit>0?sl:fl}let p=h(t),b=p(t);return{c(){c&&c.c(),e=Y(),a&&a.c(),n=Y(),r=M("button"),b.c(),U(r,"class","limit svelte-p9vgzg"),r.disabled=i=!t[5],le(r,"limit_set",t[1].limit>0),le(r,"time_limit_set",t[1].timeLimit>0)},m(m,y){c&&c.m(m,y),T(m,e,y),a&&a.m(m,y),T(m,n,y),T(m,r,y),b.m(r,null),s||(l=Ae(r,"click",t[6]),s=!0)},p(m,y){m[1].limit>0||m[1].timeLimit>0?c?c.p(m,y):(c=Li(m),c.c(),c.m(e.parentNode,e)):c&&(c.d(1),c=null),m[1].limit>0?a?a.p(m,y):(a=zi(m),a.c(),a.m(n.parentNode,n)):a&&(a.d(1),a=null),p===(p=h(m))&&b?b.p(m,y):(b.d(1),b=p(m),b&&(b.c(),b.m(r,null))),y&32&&i!==(i=!m[5])&&(r.disabled=i),y&2&&le(r,"limit_set",m[1].limit>0),y&2&&le(r,"time_limit_set",m[1].timeLimit>0)},d(m){c&&c.d(m),m&&C(e),a&&a.d(m),m&&C(n),m&&C(r),b.d(),s=!1,l()}}}function il(t){let e,n,r,i,s,l=t[1].timeLimit>0&&Bi(t);function c(p,b){return p[1].timeLimit>0?ll:ol}let a=c(t),h=a(t);return{c(){l&&l.c(),e=Y(),n=M("button"),h.c(),U(n,"class","limit svelte-p9vgzg"),n.disabled=r=!t[5],le(n,"time_limit_set",t[1].timeLimit>0)},m(p,b){l&&l.m(p,b),T(p,e,b),T(p,n,b),h.m(n,null),i||(s=Ae(n,"click",t[6]),i=!0)},p(p,b){p[1].timeLimit>0?l?l.p(p,b):(l=Bi(p),l.c(),l.m(e.parentNode,e)):l&&(l.d(1),l=null),a===(a=c(p))&&h?h.p(p,b):(h.d(1),h=a(p),h&&(h.c(),h.m(n,null))),b&32&&r!==(r=!p[5])&&(n.disabled=r),b&2&&le(n,"time_limit_set",p[1].timeLimit>0)},d(p){l&&l.d(p),p&&C(e),p&&C(n),h.d(),i=!1,s()}}}function Li(t){let e,n,r,i,s;return{c(){e=M("button"),n=K("🗑️ Cancel"),U(e,"class","remove_limit svelte-p9vgzg"),e.disabled=r=!t[5],le(e,"remove_time_limit",t[1].timeLimit>0)},m(l,c){T(l,e,c),k(e,n),i||(s=Ae(e,"click",t[18]),i=!0)},p(l,c){c&32&&r!==(r=!l[5])&&(e.disabled=r),c&2&&le(e,"remove_time_limit",l[1].timeLimit>0)},d(l){l&&C(e),i=!1,s()}}}function zi(t){let e,n,r,i,s;return{c(){e=M("button"),n=K("⏱️ Limit"),U(e,"class","set_time_limit svelte-p9vgzg"),e.disabled=r=!t[5]},m(l,c){T(l,e,c),k(e,n),i||(s=Ae(e,"click",t[19]),i=!0)},p(l,c){c&32&&r!==(r=!l[5])&&(e.disabled=r)},d(l){l&&C(e),i=!1,s()}}}function fl(t){let e,n=(t[1].limit||"")+"",r;return{c(){e=K("Limit "),r=K(n)},m(i,s){T(i,e,s),T(i,r,s)},p(i,s){s&2&&n!==(n=(i[1].limit||"")+"")&&De(r,n)},d(i){i&&C(e),i&&C(r)}}}function sl(t){let e,n,r=dr(t[1])+"",i;return{c(){e=M("span"),n=K("⏱️ "),i=K(r)},m(s,l){T(s,e,l),k(e,n),k(e,i)},p(s,l){l&2&&r!==(r=dr(s[1])+"")&&De(i,r)},d(s){s&&C(e)}}}function Bi(t){let e,n,r,i,s;return{c(){e=M("button"),n=K("🗑️ Cancel"),U(e,"class","remove_limit svelte-p9vgzg"),e.disabled=r=!t[5],le(e,"remove_time_limit",t[1].timeLimit>0)},m(l,c){T(l,e,c),k(e,n),i||(s=Ae(e,"click",t[17]),i=!0)},p(l,c){c&32&&r!==(r=!l[5])&&(e.disabled=r),c&2&&le(e,"remove_time_limit",l[1].timeLimit>0)},d(l){l&&C(e),i=!1,s()}}}function ol(t){let e;return{c(){e=M("span"),e.textContent="⏱️ Limit"},m(n,r){T(n,e,r)},p:me,d(n){n&&C(e)}}}function ll(t){let e,n,r=dr(t[1])+"",i;return{c(){e=M("span"),n=K("⏱️ "),i=K(r)},m(s,l){T(s,e,l),k(e,n),k(e,i)},p(s,l){l&2&&r!==(r=dr(s[1])+"")&&De(i,r)},d(s){s&&C(e)}}}function cl(t){let e,n,r,i,s,l,c,a,h,p,b,m,y,E,x,$,A,B,ee=t[3]&&$i(t),z=t[5]&&t[1].volume!=null&&Pi(t),j=t[3]&&Ii(t),q=!t[1].isStream&&t[3]&&Mi(t),ue=!t[1].isStream&&t[3]&&Ui(t),ae=t[3]&&ji(t);return{c(){e=M("section"),ee&&ee.c(),n=Y(),r=M("button"),i=K("Vol ↓"),l=Y(),c=M("button"),a=K("Vol ↑"),p=Y(),z&&z.c(),b=Y(),m=M("section"),j&&j.c(),y=Y(),q&&q.c(),E=Y(),x=M("section"),ue&&ue.c(),$=Y(),ae&&ae.c(),U(r,"class","volume svelte-p9vgzg"),r.disabled=s=!t[5],U(c,"class","volume svelte-p9vgzg"),c.disabled=h=!t[5],U(e,"class","main svelte-p9vgzg"),U(m,"class","svelte-p9vgzg"),U(x,"class","svelte-p9vgzg")},m(be,$e){T(be,e,$e),ee&&ee.m(e,null),k(e,n),k(e,r),k(r,i),k(e,l),k(e,c),k(c,a),k(e,p),z&&z.m(e,null),T(be,b,$e),T(be,m,$e),j&&j.m(m,null),k(m,y),q&&q.m(m,null),T(be,E,$e),T(be,x,$e),ue&&ue.m(x,null),k(x,$),ae&&ae.m(x,null),A||(B=[Ae(r,"click",t[9]),Ae(c,"click",t[10])],A=!0)},p(be,[$e]){be[3]?ee?ee.p(be,$e):(ee=$i(be),ee.c(),ee.m(e,n)):ee&&(ee.d(1),ee=null),$e&32&&s!==(s=!be[5])&&(r.disabled=s),$e&32&&h!==(h=!be[5])&&(c.disabled=h),be[5]&&be[1].volume!=null?z?z.p(be,$e):(z=Pi(be),z.c(),z.m(e,null)):z&&(z.d(1),z=null),be[3]?j?j.p(be,$e):(j=Ii(be),j.c(),j.m(m,y)):j&&(j.d(1),j=null),!be[1].isStream&&be[3]?q?q.p(be,$e):(q=Mi(be),q.c(),q.m(m,null)):q&&(q.d(1),q=null),!be[1].isStream&&be[3]?ue?ue.p(be,$e):(ue=Ui(be),ue.c(),ue.m(x,$)):ue&&(ue.d(1),ue=null),be[3]?ae?ae.p(be,$e):(ae=ji(be),ae.c(),ae.m(x,null)):ae&&(ae.d(1),ae=null)},i:me,o:me,d(be){be&&C(e),ee&&ee.d(),z&&z.d(),be&&C(b),be&&C(m),j&&j.d(),q&&q.d(),be&&C(E),be&&C(x),ue&&ue.d(),ae&&ae.d(),A=!1,yt(B)}}}function dr(t){return t.timeLimit>2?`${Math.round(t.timeLimit)} min`:`${Math.round(t.timeLimit*60)} s`}function al(t,e,n){let r,i=me,s=()=>(i(),i=St(l,be=>n(5,r=be)),l);t.$$.on_destroy.push(()=>i());let{connected:l}=e;s();let{player:c}=e,{deviceName:a}=e,{songTitle:h}=e,{fnAction:p}=e;function b(){c.isStream||c.timeLimit>0?p("time_limit"):p("limit")}const m=()=>p("play"),y=()=>p("pause"),E=()=>p("volume_down"),x=()=>p("volume_up"),$=()=>p("stop"),A=()=>p("shuffle"),B=()=>p("similar"),ee=()=>p("repeat"),z=()=>p("backward"),j=()=>p("forward"),q=()=>p("remove_time_limit"),ue=()=>p("remove_limit"),ae=()=>p("time_limit");return t.$$set=be=>{"connected"in be&&s(n(0,l=be.connected)),"player"in be&&n(1,c=be.player),"deviceName"in be&&n(2,a=be.deviceName),"songTitle"in be&&n(3,h=be.songTitle),"fnAction"in be&&n(4,p=be.fnAction)},[l,c,a,h,p,r,b,m,y,E,x,$,A,B,ee,z,j,q,ue,ae]}class ul extends ct{constructor(e){super(),lt(this,e,al,cl,ot,{connected:0,player:1,deviceName:2,songTitle:3,fnAction:4})}}const hr=en(),dn=en();function ws(){hr.set(""),dn.set(null)}const Gn=en();function xs(){Gn.set(null)}const dl=""+new URL("close-28a6104f.png",import.meta.url).href,hl=""+new URL("magnifying_glass-a4a7aab7.svg",import.meta.url).href;function Ki(t){let e,n,r,i,s,l;return{c(){e=M("button"),n=K("▼ SET NEXT"),e.disabled=r=!t[2],U(e,"class","svelte-11smw5j")},m(c,a){T(c,e,a),k(e,n),s||(l=Ae(e,"click",ds(t[5])),s=!0)},p(c,a){a&4&&r!==(r=!c[2])&&(e.disabled=r)},i(c){i||Tt(()=>{i=pn(e,yn,{}),i.start()})},o:me,d(c){c&&C(e),s=!1,l()}}}function _l(t){var $,A;let e,n,r,i,s,l,c,a,h,p,b,m=(($=t[1])==null?void 0:$.trim())&&((A=t[3])==null?void 0:A.length),y,E,x=m&&Ki(t);return{c(){var B;e=M("form"),n=M("div"),r=M("input"),s=Y(),l=M("img"),a=Y(),h=M("img"),b=Y(),x&&x.c(),U(r,"id","search"),U(r,"placeholder","Playlist Search"),U(r,"type","text"),r.disabled=i=!t[2],U(r,"class","svelte-11smw5j"),U(l,"class","magnifying_glass svelte-11smw5j"),mi(l.src,c=hl)||U(l,"src",c),U(h,"class","clear_search svelte-11smw5j"),mi(h.src,p=dl)||U(h,"src",p),le(h,"invisible",!((B=t[1])!=null&&B.trim())),U(n,"class","input_wrapper svelte-11smw5j"),U(e,"class","svelte-11smw5j")},m(B,ee){T(B,e,ee),k(e,n),k(n,r),wi(r,t[1]),k(n,s),k(n,l),k(n,a),k(n,h),k(e,b),x&&x.m(e,null),y||(E=[Ae(r,"input",t[8]),Ae(r,"keyup",t[4]),Ae(h,"click",ws)],y=!0)},p(B,[ee]){var z,j,q;ee&4&&i!==(i=!B[2])&&(r.disabled=i),ee&2&&r.value!==B[1]&&wi(r,B[1]),ee&2&&le(h,"invisible",!((z=B[1])!=null&&z.trim())),ee&10&&(m=((j=B[1])==null?void 0:j.trim())&&((q=B[3])==null?void 0:q.length)),m?x?(x.p(B,ee),ee&10&&te(x,1)):(x=Ki(B),x.c(),te(x,1),x.m(e,null)):x&&(x.d(1),x=null)},i(B){te(x)},o:me,d(B){B&&C(e),x&&x.d(),y=!1,yt(E)}}}function pl(t,e,n){let r,i,s=me,l=()=>(s(),s=St(a,A=>n(2,i=A)),a),c;mt(t,hr,A=>n(1,r=A)),mt(t,dn,A=>n(3,c=A)),t.$$.on_destroy.push(()=>s());let{connected:a}=e;l();let{store:h}=e,{fnAction:p}=e,b;function m(A){h.remoteObject("player").call("playlistSearch",{query:r}).then(B=>{B?A==b&&dn.set(B):dn.set(null)}).catch(console.log)}let y;function E(){xs(),clearTimeout(y),r!=null&&r.trim()?(b=Math.random(),y=setTimeout(()=>{m(b)},300)):(b=null,dn.set(null))}function x(){h.remoteObject("player").call("bump",{query:r}).then(()=>{dn.set(null)}).catch(console.log)}function $(){r=this.value,hr.set(r)}return t.$$set=A=>{"connected"in A&&l(n(0,a=A.connected)),"store"in A&&n(6,h=A.store),"fnAction"in A&&n(7,p=A.fnAction)},[a,r,i,c,E,x,h,p,$]}class bl extends ct{constructor(e){super(),lt(this,e,pl,_l,ot,{connected:0,store:6,fnAction:7})}}function vl(t){let e,n,r,i,s,l;return{c(){e=M("div"),n=M("button"),n.textContent="Play",r=Y(),i=M("button"),i.textContent="Bump",U(n,"class","svelte-27xey9"),U(i,"class","svelte-27xey9"),U(e,"class","controls svelte-27xey9")},m(c,a){T(c,e,a),k(e,n),k(e,r),k(e,i),s||(l=[Ae(n,"click",gi(t[4])),Ae(i,"click",gi(t[5]))],s=!0)},p:me,i:me,o:me,d(c){c&&C(e),s=!1,yt(l)}}}function ml(t,e,n){let{fnAction:r}=e,{entry:i}=e;function s(h){window.scrollTo({top:0,behavior:"smooth"}),ws(),r("next",{songId:h})}function l(h){r("bump",{args:h})}const c=()=>{s(i.id)},a=()=>{l(i.id)};return t.$$set=h=>{"fnAction"in h&&n(3,r=h.fnAction),"entry"in h&&n(0,i=h.entry)},[i,s,l,r,c,a]}class yl extends ct{constructor(e){super(),lt(this,e,ml,vl,ot,{fnAction:3,entry:0})}}function qi(t){let e,n,r=t[0].metadata.duration+"",i,s;return{c(){e=M("span"),n=K("["),i=K(r),s=K("]"),U(e,"class","duration svelte-5kr8d6")},m(l,c){T(l,e,c),k(e,n),k(e,i),k(e,s)},p(l,c){c&1&&r!==(r=l[0].metadata.duration+"")&&De(i,r)},d(l){l&&C(e)}}}function gl(t){var B,ee;let e,n,r,i=t[0].title+"",s,l,c,a=Yi(t[0].path)+"",h,p,b,m,y,E,x,$,A=((ee=(B=t[0])==null?void 0:B.metadata)==null?void 0:ee.duration)&&qi(t);return m=new yl({props:{entry:t[0],fnAction:t[1]}}),{c(){e=M("div"),n=M("div"),A&&A.c(),r=Y(),s=K(i),l=Y(),c=M("div"),h=K(a),p=Y(),b=M("div"),Be(m.$$.fragment),U(c,"class","file_path svelte-5kr8d6"),U(b,"class","controls svelte-5kr8d6"),U(n,"class","entry svelte-5kr8d6"),le(n,"selected",t[0].id==t[3]),le(n,"just_bumped",!t[2]&&t[0].justBumped),le(n,"within_limit",!t[2]&&t[0].withinLimit),le(n,"is_search_result",t[2]),le(n,"error",t[0].error),U(e,"class","entry_wrapper svelte-5kr8d6")},m(z,j){T(z,e,j),k(e,n),A&&A.m(n,null),k(n,r),k(n,s),k(n,l),k(n,c),k(c,h),k(n,p),k(n,b),Le(m,b,null),E=!0,x||($=Ae(n,"click",t[5]),x=!0)},p(z,[j]){var ue,ae;(ae=(ue=z[0])==null?void 0:ue.metadata)!=null&&ae.duration?A?A.p(z,j):(A=qi(z),A.c(),A.m(n,r)):A&&(A.d(1),A=null),(!E||j&1)&&i!==(i=z[0].title+"")&&De(s,i),(!E||j&1)&&a!==(a=Yi(z[0].path)+"")&&De(h,a);const q={};j&1&&(q.entry=z[0]),j&2&&(q.fnAction=z[1]),m.$set(q),(!E||j&9)&&le(n,"selected",z[0].id==z[3]),(!E||j&5)&&le(n,"just_bumped",!z[2]&&z[0].justBumped),(!E||j&5)&&le(n,"within_limit",!z[2]&&z[0].withinLimit),(!E||j&4)&&le(n,"is_search_result",z[2]),(!E||j&1)&&le(n,"error",z[0].error)},i(z){E||(te(m.$$.fragment,z),y||Tt(()=>{y=pn(n,yn,{}),y.start()}),E=!0)},o(z){ge(m.$$.fragment,z),E=!1},d(z){z&&C(e),A&&A.d(),ze(m),x=!1,$()}}}function Yi(t){return t.replace("/root/DMTMountedMedia","")}function wl(t,e,n){let r;mt(t,Gn,h=>n(3,r=h));let{entry:i}=e,{fnAction:s}=e,{isSearchResult:l}=e;function c(h){h==vo(Gn)?Gn.set(null):Gn.set(h)}const a=()=>{c(i.id)};return t.$$set=h=>{"entry"in h&&n(0,i=h.entry),"fnAction"in h&&n(1,s=h.fnAction),"isSearchResult"in h&&n(2,l=h.isSearchResult)},[i,s,l,r,c,a]}class As extends ct{constructor(e){super(),lt(this,e,wl,gl,ot,{entry:0,fnAction:1,isSearchResult:2})}}function Fi(t,e,n){const r=t.slice();return r[7]=e[n],r}function Hi(t){let e,n,r,i;const s=[Al,xl],l=[];function c(a,h){return a[2].length?0:1}return e=c(t),n=l[e]=s[e](t),{c(){n.c(),r=_t()},m(a,h){l[e].m(a,h),T(a,r,h),i=!0},p(a,h){let p=e;e=c(a),e===p?l[e].p(a,h):(xt(),ge(l[p],1,1,()=>{l[p]=null}),At(),n=l[e],n?n.p(a,h):(n=l[e]=s[e](a),n.c()),te(n,1),n.m(r.parentNode,r))},i(a){i||(te(n),i=!0)},o(a){ge(n),i=!1},d(a){l[e].d(a),a&&C(r)}}}function xl(t){let e,n;return{c(){e=M("h3"),e.textContent="[ No matches ]",U(e,"class","no_matches svelte-11vb31n")},m(r,i){T(r,e,i)},p:me,i(r){n||Tt(()=>{n=pn(e,yn,{}),n.start()})},o:me,d(r){r&&C(e)}}}function Al(t){let e,n,r,i,s,l,c;function a(x,$){return x[2].length>vn?Sl:El}let h=a(t),p=h(t),b=t[2].slice(0,vn),m=[];for(let x=0;xge(m[x],1,1,()=>{m[x]=null});let E=t[2].length>vn&&Wi(t);return{c(){e=M("h3"),p.c(),n=Y();for(let x=0;xvn?E?E.p(x,$):(E=Wi(x),E.c(),E.m(i,s)):E&&(E.d(1),E=null)},i(x){if(!c){for(let $=0;${r=null}),At())},i(i){n||(te(r),n=!0)},o(i){ge(r),n=!1},d(i){r&&r.d(i),i&&C(e)}}}const vn=20;function kl(t,e,n){let r,i=me,s=()=>(i(),i=St(c,p=>n(4,r=p)),c),l;mt(t,dn,p=>n(2,l=p)),t.$$.on_destroy.push(()=>i());let{store:c}=e;s();let{connected:a}=e,{fnAction:h}=e;return t.$$set=p=>{"store"in p&&s(n(0,c=p.store)),"connected"in p&&n(3,a=p.connected),"fnAction"in p&&n(1,h=p.fnAction)},t.$$.update=()=>{t.$$.dirty&16&&r.playlist,t.$$.dirty&16&&r.playlistMetadata},[c,h,l,a,r]}class Cl extends ct{constructor(e){super(),lt(this,e,kl,Ol,ot,{store:0,connected:3,fnAction:1})}}function Zi(t){let e,n=(t[1]=="televizija"||t[1]=="tv")&&Gi(t);return{c(){n&&n.c(),e=_t()},m(r,i){n&&n.m(r,i),T(r,e,i)},p(r,i){r[1]=="televizija"||r[1]=="tv"?n?n.p(r,i):(n=Gi(r),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},d(r){n&&n.d(r),r&&C(e)}}}function Gi(t){let e,n,r,i,s,l,c,a,h,p,b,m,y,E,x,$,A,B,ee,z,j,q,ue,ae,be,$e;return{c(){e=M("div"),n=M("button"),n.textContent="Celovečerne risanke",r=Y(),i=M("button"),i.textContent="Blaze",s=Y(),l=M("button"),l.textContent="Booba",c=Y(),a=M("button"),a.textContent="Rattic",h=Y(),p=M("button"),p.textContent="Rusty Rivets",b=Y(),m=M("button"),m.textContent="Jellystone",y=Y(),E=M("button"),E.textContent="Oddbods",x=Y(),$=M("button"),$.textContent="SunnyBunnies",A=Y(),B=M("button"),B.textContent="OmNomCutTheRope",ee=Y(),z=M("button"),z.textContent="Pika Nogavicka",j=Y(),q=M("button"),q.textContent="Pajek Lukas",ue=Y(),ae=M("button"),ae.textContent="Medvedek Paddington",U(n,"class","svelte-84hcn8"),U(i,"class","svelte-84hcn8"),U(l,"class","svelte-84hcn8"),U(a,"class","svelte-84hcn8"),U(p,"class","svelte-84hcn8"),U(m,"class","svelte-84hcn8"),U(E,"class","svelte-84hcn8"),U($,"class","svelte-84hcn8"),U(B,"class","svelte-84hcn8"),U(z,"class","svelte-84hcn8"),U(q,"class","svelte-84hcn8"),U(ae,"class","svelte-84hcn8"),U(e,"class","sublist svelte-84hcn8")},m(rt,We){T(rt,e,We),k(e,n),k(e,r),k(e,i),k(e,s),k(e,l),k(e,c),k(e,a),k(e,h),k(e,p),k(e,b),k(e,m),k(e,y),k(e,E),k(e,x),k(e,$),k(e,A),k(e,B),k(e,ee),k(e,z),k(e,j),k(e,q),k(e,ue),k(e,ae),be||($e=[Ae(n,"click",t[6]),Ae(i,"click",t[7]),Ae(l,"click",t[8]),Ae(a,"click",t[9]),Ae(p,"click",t[10]),Ae(m,"click",t[11]),Ae(E,"click",t[12]),Ae($,"click",t[13]),Ae(B,"click",t[14]),Ae(z,"click",t[15]),Ae(q,"click",t[16]),Ae(ae,"click",t[17])],be=!0)},p:me,d(rt){rt&&C(e),be=!1,yt($e)}}}function Tl(t){let e,n=t[2]&&t[3]&&Zi(t);return{c(){n&&n.c(),e=_t()},m(r,i){n&&n.m(r,i),T(r,e,i)},p(r,[i]){r[2]&&r[3]?n?n.p(r,i):(n=Zi(r),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},i:me,o:me,d(r){n&&n.d(r),r&&C(e)}}}function Rl(t,e,n){let r,i,s=me,l=()=>(s(),s=St(a,ue=>n(3,i=ue)),a);mt(t,gs,ue=>n(2,r=ue)),t.$$.on_destroy.push(()=>s());function c(ue){h("sublist",{tag:ue})}let{connected:a}=e;l();let{fnAction:h}=e,{deviceName:p}=e;const b=()=>{c("cartoons-slo/")},m=()=>{c("Blaze")},y=()=>{c("Booba")},E=()=>{c("Rattic")},x=()=>{c("Rusty Rivets")},$=()=>{c("Jellystone")},A=()=>{c("Oddbods")},B=()=>{c("SunnyBunnies")},ee=()=>{c("OmNomCutTheRope")},z=()=>{c("Pika Nogavicka")},j=()=>{c("Lucas the spider")},q=()=>{c("Adventure Paddington")};return t.$$set=ue=>{"connected"in ue&&l(n(0,a=ue.connected)),"fnAction"in ue&&n(5,h=ue.fnAction),"deviceName"in ue&&n(1,p=ue.deviceName)},[a,p,r,i,c,h,b,m,y,E,x,$,A,B,ee,z,j,q]}class Nl extends ct{constructor(e){super(),lt(this,e,Rl,Tl,ot,{connected:0,fnAction:5,deviceName:1})}}function Vi(t,e,n){const r=t.slice();return r[10]=e[n],r}function Qi(t){let e,n,r,i,s,l,c=t[4].playlistLength+"",a,h,p,b,m,y,E,x,$,A=t[7]&&Xi(t);m=new Nl({props:{connected:t[1],deviceName:t[3],fnAction:t[2]}});let B=t[5].filter(nf).slice(0,1.5*tf),ee=[];for(let j=0;jge(ee[j],1,1,()=>{ee[j]=null});return{c(){e=M("h3"),n=K("Playlist @ "),r=K(t[3]),i=Y(),s=M("span"),l=K("("),a=K(c),h=K(")"),p=Y(),A&&A.c(),b=Y(),Be(m.$$.fragment),y=Y();for(let j=0;j{r=null}),At())},i(s){n||(te(r),n=!0)},o(s){ge(r),n=!1},d(s){r&&r.d(s),s&&C(e)}}}const tf=20,nf=({current:t,past:e})=>!t&&!e;function $l(t,e,n){let r,i,s,l=me,c=()=>(l(),l=St(m,A=>n(9,s=A)),m),a,h,p=me,b=()=>(p(),p=St(y,A=>n(7,h=A)),y);mt(t,dn,A=>n(6,a=A)),t.$$.on_destroy.push(()=>l()),t.$$.on_destroy.push(()=>p());let{store:m}=e;c();let{connected:y}=e;b();let{fnAction:E}=e,{deviceName:x}=e;function $(){window.scrollTo({top:0,behavior:"smooth"}),E("next")}return t.$$set=A=>{"store"in A&&c(n(0,m=A.store)),"connected"in A&&b(n(1,y=A.connected)),"fnAction"in A&&n(2,E=A.fnAction),"deviceName"in A&&n(3,x=A.deviceName)},t.$$.update=()=>{t.$$.dirty&512&&n(5,r=s.playlist),t.$$.dirty&512&&n(4,i=s.playlistMetadata)},[m,y,E,x,i,r,a,h,$,s]}class Pl extends ct{constructor(e){super(),lt(this,e,$l,Dl,ot,{store:0,connected:1,fnAction:2,deviceName:3})}}function Il(t){let e,n,r,i,s,l,c;return n=new bl({props:{connected:t[1],store:t[0],fnAction:t[2]}}),i=new Cl({props:{connected:t[1],store:t[0],fnAction:t[2]}}),l=new Pl({props:{connected:t[1],store:t[0],fnAction:t[2],deviceName:t[3]}}),{c(){e=M("div"),Be(n.$$.fragment),r=Y(),Be(i.$$.fragment),s=Y(),Be(l.$$.fragment),U(e,"class","searchable_playlist svelte-1op3n77")},m(a,h){T(a,e,h),Le(n,e,null),k(e,r),Le(i,e,null),k(e,s),Le(l,e,null),c=!0},p(a,[h]){const p={};h&2&&(p.connected=a[1]),h&1&&(p.store=a[0]),h&4&&(p.fnAction=a[2]),n.$set(p);const b={};h&2&&(b.connected=a[1]),h&1&&(b.store=a[0]),h&4&&(b.fnAction=a[2]),i.$set(b);const m={};h&2&&(m.connected=a[1]),h&1&&(m.store=a[0]),h&4&&(m.fnAction=a[2]),h&8&&(m.deviceName=a[3]),l.$set(m)},i(a){c||(te(n.$$.fragment,a),te(i.$$.fragment,a),te(l.$$.fragment,a),c=!0)},o(a){ge(n.$$.fragment,a),ge(i.$$.fragment,a),ge(l.$$.fragment,a),c=!1},d(a){a&&C(e),ze(n),ze(i),ze(l)}}}function Ml(t,e,n){let{store:r}=e,{connected:i}=e,{fnAction:s}=e,{deviceName:l}=e;return t.$$set=c=>{"store"in c&&n(0,r=c.store),"connected"in c&&n(1,i=c.connected),"fnAction"in c&&n(2,s=c.fnAction),"deviceName"in c&&n(3,l=c.deviceName)},[r,i,s,l]}class Ul extends ct{constructor(e){super(),lt(this,e,Ml,Il,ot,{store:0,connected:1,fnAction:2,deviceName:3})}}function rf(t){let e,n,r,i,s,l,c,a,h,p,b,m,y,E;return{c(){e=M("h3"),n=K("Play internet radio @ "),r=K(t[2]),i=Y(),s=M("div"),l=M("button"),l.textContent="Rock",c=Y(),a=M("button"),a.textContent="Jazz",h=Y(),p=M("button"),p.textContent="Psytrance",b=Y(),m=M("button"),m.textContent="Goatrance",U(l,"class","svelte-tpf42f"),U(a,"class","svelte-tpf42f"),U(p,"class","svelte-tpf42f"),U(m,"class","svelte-tpf42f"),U(s,"class","radios svelte-tpf42f")},m(x,$){T(x,e,$),k(e,n),k(e,r),T(x,i,$),T(x,s,$),k(s,l),k(s,c),k(s,a),k(s,h),k(s,p),k(s,b),k(s,m),y||(E=[Ae(l,"click",t[4]),Ae(a,"click",t[5]),Ae(p,"click",t[6]),Ae(m,"click",t[7])],y=!0)},p(x,$){$&4&&De(r,x[2])},d(x){x&&C(e),x&&C(i),x&&C(s),y=!1,yt(E)}}}function jl(t){let e,n=t[3]&&rf(t);return{c(){n&&n.c(),e=_t()},m(r,i){n&&n.m(r,i),T(r,e,i)},p(r,[i]){r[3]?n?n.p(r,i):(n=rf(r),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},i:me,o:me,d(r){n&&n.d(r),r&&C(e)}}}function Ll(t,e,n){let r,i=me,s=()=>(i(),i=St(l,y=>n(3,r=y)),l);t.$$.on_destroy.push(()=>i());let{connected:l}=e;s();let{fnAction:c}=e,{deviceName:a}=e;const h=()=>{c("play_radio",{radioId:"rock"})},p=()=>{c("play_radio",{radioId:"jazz"})},b=()=>{c("play_radio",{radioId:"progressive-trance"})},m=()=>{c("play_radio",{radioId:"goa-trance"})};return t.$$set=y=>{"connected"in y&&s(n(0,l=y.connected)),"fnAction"in y&&n(1,c=y.fnAction),"deviceName"in y&&n(2,a=y.deviceName)},[l,c,a,r,h,p,b,m]}class zl extends ct{constructor(e){super(),lt(this,e,Ll,jl,ot,{connected:0,fnAction:1,deviceName:2})}}function ff(t){let e,n;return e=new zl({props:{connected:t[0],fnAction:t[4],deviceName:t[1]}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&1&&(s.connected=r[0]),i&16&&(s.fnAction=r[4]),i&2&&(s.deviceName=r[1]),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function sf(t){let e,n;return e=new Ul({props:{connected:t[0],store:t[3],fnAction:t[4],deviceName:t[1]}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&1&&(s.connected=r[0]),i&8&&(s.store=r[3]),i&16&&(s.fnAction=r[4]),i&2&&(s.deviceName=r[1]),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function Bl(t){var p;let e,n,r,i,s,l,c;e=new el({props:{connected:t[0],store:t[3],player:t[2],songTitle:t[9],songPath:t[8],playlistCurrentMedia:t[6],playlistSongPath:t[5],fnAction:t[4]}}),r=new ul({props:{connected:t[0],player:t[2],fnAction:t[4],songTitle:t[9],deviceName:t[1]}});let a=t[1]!="tv-ap2"&&ff(t),h=!t[2].isStream&&((p=t[7])==null?void 0:p.length)&&sf(t);return{c(){Be(e.$$.fragment),n=Y(),Be(r.$$.fragment),i=Y(),a&&a.c(),s=Y(),h&&h.c(),l=_t()},m(b,m){Le(e,b,m),T(b,n,m),Le(r,b,m),T(b,i,m),a&&a.m(b,m),T(b,s,m),h&&h.m(b,m),T(b,l,m),c=!0},p(b,[m]){var x;const y={};m&1&&(y.connected=b[0]),m&8&&(y.store=b[3]),m&4&&(y.player=b[2]),m&512&&(y.songTitle=b[9]),m&256&&(y.songPath=b[8]),m&64&&(y.playlistCurrentMedia=b[6]),m&32&&(y.playlistSongPath=b[5]),m&16&&(y.fnAction=b[4]),e.$set(y);const E={};m&1&&(E.connected=b[0]),m&4&&(E.player=b[2]),m&16&&(E.fnAction=b[4]),m&512&&(E.songTitle=b[9]),m&2&&(E.deviceName=b[1]),r.$set(E),b[1]!="tv-ap2"?a?(a.p(b,m),m&2&&te(a,1)):(a=ff(b),a.c(),te(a,1),a.m(s.parentNode,s)):a&&(xt(),ge(a,1,1,()=>{a=null}),At()),!b[2].isStream&&((x=b[7])!=null&&x.length)?h?(h.p(b,m),m&132&&te(h,1)):(h=sf(b),h.c(),te(h,1),h.m(l.parentNode,l)):h&&(xt(),ge(h,1,1,()=>{h=null}),At())},i(b){c||(te(e.$$.fragment,b),te(r.$$.fragment,b),te(a),te(h),c=!0)},o(b){ge(e.$$.fragment,b),ge(r.$$.fragment,b),ge(a),ge(h),c=!1},d(b){ze(e,b),b&&C(n),ze(r,b),b&&C(i),a&&a.d(b),b&&C(s),h&&h.d(b),b&&C(l)}}}function Kl(t,e,n){let r,i,s,l,c,a,h,p,b,m,y=me,E=()=>(y(),y=St(B,z=>n(14,m=z)),B);t.$$.on_destroy.push(()=>y());let{connected:x}=e,{deviceName:$}=e,{player:A}=e,{store:B}=e;E();let{fnAction:ee}=e;return t.$$set=z=>{"connected"in z&&n(0,x=z.connected),"deviceName"in z&&n(1,$=z.deviceName),"player"in z&&n(2,A=z.player),"store"in z&&E(n(3,B=z.store)),"fnAction"in z&&n(4,ee=z.fnAction)},t.$$.update=()=>{t.$$.dirty&4&&n(13,r=A.currentMedia||{}),t.$$.dirty&8192&&n(12,i=r.artist&&r.song?`${r.artist} - ${r.song}`:r.song),t.$$.dirty&8192&&n(10,s=r.songPath),t.$$.dirty&16384&&n(7,l=m.playlist),t.$$.dirty&128&&n(6,c=(l||[]).find(({current:z})=>z)),t.$$.dirty&64&&n(11,a=c==null?void 0:c.title),t.$$.dirty&64&&n(5,h=c==null?void 0:c.path),t.$$.dirty&6144&&n(9,p=i||a),t.$$.dirty&1056&&n(8,b=s||h)},[x,$,A,B,ee,h,c,l,b,p,s,a,i,r,m]}class ql extends ct{constructor(e){super(),lt(this,e,Kl,Bl,ot,{connected:0,deviceName:1,player:2,store:3,fnAction:4})}}function of(t,e,n){const r=t.slice();return r[15]=e[n],r}function lf(t){let e,n=t[3],r=[];for(let i=0;i2e3),le(e,"late_pong2",t[4]-t[5][t[15].deviceKey]>2500),le(e,"late_pong3",t[4]-t[5][t[15].deviceKey]>3500),le(e,"connected",t[6][t[15].deviceKey]),le(e,"disconnected",t[6][t[15].deviceKey]==!1),le(e,"cpu_usage_warn1",t[15].cpuUsage>50),le(e,"cpu_usage_warn2",t[15].cpuUsage>70),le(e,"cpu_usage_warn3",t[15].cpuUsage>80)},m(b,m){T(b,e,m),h&&h.m(e,null),k(e,n),p&&p.m(e,null),k(e,r),k(e,s),k(e,l),c||(a=Ae(e,"click",function(){qn(t[7]({store:t[1],device:t[15]}))&&t[7]({store:t[1],device:t[15]}).apply(this,arguments)}),c=!0)},p(b,m){t=b,t[15].hasErrors?h||(h=cf(),h.c(),h.m(e,n)):h&&(h.d(1),h=null),t[15].playing?p?p.p(t,m):(p=af(t),p.c(),p.m(e,r)):p&&(p.d(1),p=null),m&8&&i!==(i=t[15].deviceName+"")&&De(s,i),m&9&&le(e,"active",t[15].deviceKey==t[0]),m&8&&le(e,"local_device",t[15].thisDevice),m&8&&le(e,"playing",t[15].playing),m&56&&le(e,"late_pong1",t[4]-t[5][t[15].deviceKey]>2e3),m&56&&le(e,"late_pong2",t[4]-t[5][t[15].deviceKey]>2500),m&56&&le(e,"late_pong3",t[4]-t[5][t[15].deviceKey]>3500),m&72&&le(e,"connected",t[6][t[15].deviceKey]),m&72&&le(e,"disconnected",t[6][t[15].deviceKey]==!1),m&8&&le(e,"cpu_usage_warn1",t[15].cpuUsage>50),m&8&&le(e,"cpu_usage_warn2",t[15].cpuUsage>70),m&8&&le(e,"cpu_usage_warn3",t[15].cpuUsage>80)},d(b){b&&C(e),h&&h.d(),p&&p.d(),c=!1,a()}}}function Yl(t){let e,n=t[3].length&&lf(t);return{c(){n&&n.c(),e=_t()},m(r,i){n&&n.m(r,i),T(r,e,i)},p(r,[i]){r[3].length?n?n.p(r,i):(n=lf(r),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},i:me,o:me,d(r){n&&n.d(r),r&&C(e)}}}function Fl(t,e,n){let r,i,s,l,c;mt(t,ms,A=>n(12,i=A));let{nearbyDevices:a}=e,{activeDeviceKey:h}=e,{store:p}=e,{log:b}=e;function m({store:A,device:B}){hr.set(null),dn.set(null),localStorage.setItem("current_device_key",B.deviceKey),A.switch(B)}const y=en({});mt(t,y,A=>n(5,l=A)),p.on("pong",({deviceKey:A})=>{y.update(B=>(B[A]=Date.now(),B))});const E=en({});mt(t,E,A=>n(6,c=A)),E.alreadyDone={};const x=en(Date.now());mt(t,x,A=>n(4,s=A));function $(){x.set(Date.now()),setTimeout($,300)}return $(),t.$$set=A=>{"nearbyDevices"in A&&n(10,a=A.nearbyDevices),"activeDeviceKey"in A&&n(0,h=A.activeDeviceKey),"store"in A&&n(1,p=A.store),"log"in A&&n(11,b=A.log)},t.$$.update=()=>{t.$$.dirty&7175&&n(3,r=a.filter(({deviceName:A,playing:B,deviceKey:ee,thisDevice:z,ip:j,isRPi:q})=>(ee==h||B||i)&&(q||z)).map(A=>{const{ip:B,deviceKey:ee,deviceName:z,thisDevice:j,playing:q}=A;return E.alreadyDone[ee]||(n(2,E.alreadyDone[ee]=!0,E),setTimeout(()=>{b(`${B} Preconnecting ${z}`);const ae=p.preconnect({host:B,deviceKey:ee,thisDevice:j});ae.__prevSubUnsubscribe?ae.__prevSubUnsubscribe():ae.on("decommission",()=>{b(`dmt-mobile: Decommissioned connector ${z} @ ${B}`),n(2,E.alreadyDone[ee]=!1,E),ae.__prevSubUnsubscribe&&ae.__prevSubUnsubscribe()}),ae.__prevSubUnsubscribe=ae.connected.subscribe(be=>{E.update($e=>($e[ee]=be,$e))})},0)),A}))},[h,p,E,r,s,l,c,m,y,x,a,b,i]}class Hl extends ct{constructor(e){super(),lt(this,e,Fl,Yl,ot,{nearbyDevices:10,activeDeviceKey:0,store:1,log:11})}}var Jl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Es(t,e,n){return n={path:e,exports:{},require:function(r,i){return Ss(r,i??n.path)}},t(n,n.exports),n.exports}function Wl(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach(function(n){var r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:function(){return t[n]}})}),e}function Ss(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}var Zl={},Gl=Object.freeze({__proto__:null,default:Zl}),Vl=Wl(Gl),Yt=Es(function(t){(function(e){var n=function(o){var d,u=new Float64Array(16);if(o)for(d=0;d>24&255,o[d+1]=u>>16&255,o[d+2]=u>>8&255,o[d+3]=u&255,o[d+4]=f>>24&255,o[d+5]=f>>16&255,o[d+6]=f>>8&255,o[d+7]=f&255}function x(o,d,u,f,_){var g,w=0;for(g=0;g<_;g++)w|=o[d+g]^u[f+g];return(1&w-1>>>8)-1}function $(o,d,u,f){return x(o,d,u,f,16)}function A(o,d,u,f){return x(o,d,u,f,32)}function B(o,d,u,f){for(var _=f[0]&255|(f[1]&255)<<8|(f[2]&255)<<16|(f[3]&255)<<24,g=u[0]&255|(u[1]&255)<<8|(u[2]&255)<<16|(u[3]&255)<<24,w=u[4]&255|(u[5]&255)<<8|(u[6]&255)<<16|(u[7]&255)<<24,N=u[8]&255|(u[9]&255)<<8|(u[10]&255)<<16|(u[11]&255)<<24,L=u[12]&255|(u[13]&255)<<8|(u[14]&255)<<16|(u[15]&255)<<24,Q=f[4]&255|(f[5]&255)<<8|(f[6]&255)<<16|(f[7]&255)<<24,H=d[0]&255|(d[1]&255)<<8|(d[2]&255)<<16|(d[3]&255)<<24,ke=d[4]&255|(d[5]&255)<<8|(d[6]&255)<<16|(d[7]&255)<<24,W=d[8]&255|(d[9]&255)<<8|(d[10]&255)<<16|(d[11]&255)<<24,ie=d[12]&255|(d[13]&255)<<8|(d[14]&255)<<16|(d[15]&255)<<24,fe=f[8]&255|(f[9]&255)<<8|(f[10]&255)<<16|(f[11]&255)<<24,he=u[16]&255|(u[17]&255)<<8|(u[18]&255)<<16|(u[19]&255)<<24,de=u[20]&255|(u[21]&255)<<8|(u[22]&255)<<16|(u[23]&255)<<24,se=u[24]&255|(u[25]&255)<<8|(u[26]&255)<<16|(u[27]&255)<<24,ce=u[28]&255|(u[29]&255)<<8|(u[30]&255)<<16|(u[31]&255)<<24,oe=f[12]&255|(f[13]&255)<<8|(f[14]&255)<<16|(f[15]&255)<<24,Z=_,X=g,J=w,G=N,V=L,F=Q,S=H,O=ke,P=W,R=ie,D=fe,I=he,ne=de,_e=se,ve=ce,pe=oe,v,we=0;we<20;we+=2)v=Z+ne|0,V^=v<<7|v>>>32-7,v=V+Z|0,P^=v<<9|v>>>32-9,v=P+V|0,ne^=v<<13|v>>>32-13,v=ne+P|0,Z^=v<<18|v>>>32-18,v=F+X|0,R^=v<<7|v>>>32-7,v=R+F|0,_e^=v<<9|v>>>32-9,v=_e+R|0,X^=v<<13|v>>>32-13,v=X+_e|0,F^=v<<18|v>>>32-18,v=D+S|0,ve^=v<<7|v>>>32-7,v=ve+D|0,J^=v<<9|v>>>32-9,v=J+ve|0,S^=v<<13|v>>>32-13,v=S+J|0,D^=v<<18|v>>>32-18,v=pe+I|0,G^=v<<7|v>>>32-7,v=G+pe|0,O^=v<<9|v>>>32-9,v=O+G|0,I^=v<<13|v>>>32-13,v=I+O|0,pe^=v<<18|v>>>32-18,v=Z+G|0,X^=v<<7|v>>>32-7,v=X+Z|0,J^=v<<9|v>>>32-9,v=J+X|0,G^=v<<13|v>>>32-13,v=G+J|0,Z^=v<<18|v>>>32-18,v=F+V|0,S^=v<<7|v>>>32-7,v=S+F|0,O^=v<<9|v>>>32-9,v=O+S|0,V^=v<<13|v>>>32-13,v=V+O|0,F^=v<<18|v>>>32-18,v=D+R|0,I^=v<<7|v>>>32-7,v=I+D|0,P^=v<<9|v>>>32-9,v=P+I|0,R^=v<<13|v>>>32-13,v=R+P|0,D^=v<<18|v>>>32-18,v=pe+ve|0,ne^=v<<7|v>>>32-7,v=ne+pe|0,_e^=v<<9|v>>>32-9,v=_e+ne|0,ve^=v<<13|v>>>32-13,v=ve+_e|0,pe^=v<<18|v>>>32-18;Z=Z+_|0,X=X+g|0,J=J+w|0,G=G+N|0,V=V+L|0,F=F+Q|0,S=S+H|0,O=O+ke|0,P=P+W|0,R=R+ie|0,D=D+fe|0,I=I+he|0,ne=ne+de|0,_e=_e+se|0,ve=ve+ce|0,pe=pe+oe|0,o[0]=Z>>>0&255,o[1]=Z>>>8&255,o[2]=Z>>>16&255,o[3]=Z>>>24&255,o[4]=X>>>0&255,o[5]=X>>>8&255,o[6]=X>>>16&255,o[7]=X>>>24&255,o[8]=J>>>0&255,o[9]=J>>>8&255,o[10]=J>>>16&255,o[11]=J>>>24&255,o[12]=G>>>0&255,o[13]=G>>>8&255,o[14]=G>>>16&255,o[15]=G>>>24&255,o[16]=V>>>0&255,o[17]=V>>>8&255,o[18]=V>>>16&255,o[19]=V>>>24&255,o[20]=F>>>0&255,o[21]=F>>>8&255,o[22]=F>>>16&255,o[23]=F>>>24&255,o[24]=S>>>0&255,o[25]=S>>>8&255,o[26]=S>>>16&255,o[27]=S>>>24&255,o[28]=O>>>0&255,o[29]=O>>>8&255,o[30]=O>>>16&255,o[31]=O>>>24&255,o[32]=P>>>0&255,o[33]=P>>>8&255,o[34]=P>>>16&255,o[35]=P>>>24&255,o[36]=R>>>0&255,o[37]=R>>>8&255,o[38]=R>>>16&255,o[39]=R>>>24&255,o[40]=D>>>0&255,o[41]=D>>>8&255,o[42]=D>>>16&255,o[43]=D>>>24&255,o[44]=I>>>0&255,o[45]=I>>>8&255,o[46]=I>>>16&255,o[47]=I>>>24&255,o[48]=ne>>>0&255,o[49]=ne>>>8&255,o[50]=ne>>>16&255,o[51]=ne>>>24&255,o[52]=_e>>>0&255,o[53]=_e>>>8&255,o[54]=_e>>>16&255,o[55]=_e>>>24&255,o[56]=ve>>>0&255,o[57]=ve>>>8&255,o[58]=ve>>>16&255,o[59]=ve>>>24&255,o[60]=pe>>>0&255,o[61]=pe>>>8&255,o[62]=pe>>>16&255,o[63]=pe>>>24&255}function ee(o,d,u,f){for(var _=f[0]&255|(f[1]&255)<<8|(f[2]&255)<<16|(f[3]&255)<<24,g=u[0]&255|(u[1]&255)<<8|(u[2]&255)<<16|(u[3]&255)<<24,w=u[4]&255|(u[5]&255)<<8|(u[6]&255)<<16|(u[7]&255)<<24,N=u[8]&255|(u[9]&255)<<8|(u[10]&255)<<16|(u[11]&255)<<24,L=u[12]&255|(u[13]&255)<<8|(u[14]&255)<<16|(u[15]&255)<<24,Q=f[4]&255|(f[5]&255)<<8|(f[6]&255)<<16|(f[7]&255)<<24,H=d[0]&255|(d[1]&255)<<8|(d[2]&255)<<16|(d[3]&255)<<24,ke=d[4]&255|(d[5]&255)<<8|(d[6]&255)<<16|(d[7]&255)<<24,W=d[8]&255|(d[9]&255)<<8|(d[10]&255)<<16|(d[11]&255)<<24,ie=d[12]&255|(d[13]&255)<<8|(d[14]&255)<<16|(d[15]&255)<<24,fe=f[8]&255|(f[9]&255)<<8|(f[10]&255)<<16|(f[11]&255)<<24,he=u[16]&255|(u[17]&255)<<8|(u[18]&255)<<16|(u[19]&255)<<24,de=u[20]&255|(u[21]&255)<<8|(u[22]&255)<<16|(u[23]&255)<<24,se=u[24]&255|(u[25]&255)<<8|(u[26]&255)<<16|(u[27]&255)<<24,ce=u[28]&255|(u[29]&255)<<8|(u[30]&255)<<16|(u[31]&255)<<24,oe=f[12]&255|(f[13]&255)<<8|(f[14]&255)<<16|(f[15]&255)<<24,Z=_,X=g,J=w,G=N,V=L,F=Q,S=H,O=ke,P=W,R=ie,D=fe,I=he,ne=de,_e=se,ve=ce,pe=oe,v,we=0;we<20;we+=2)v=Z+ne|0,V^=v<<7|v>>>32-7,v=V+Z|0,P^=v<<9|v>>>32-9,v=P+V|0,ne^=v<<13|v>>>32-13,v=ne+P|0,Z^=v<<18|v>>>32-18,v=F+X|0,R^=v<<7|v>>>32-7,v=R+F|0,_e^=v<<9|v>>>32-9,v=_e+R|0,X^=v<<13|v>>>32-13,v=X+_e|0,F^=v<<18|v>>>32-18,v=D+S|0,ve^=v<<7|v>>>32-7,v=ve+D|0,J^=v<<9|v>>>32-9,v=J+ve|0,S^=v<<13|v>>>32-13,v=S+J|0,D^=v<<18|v>>>32-18,v=pe+I|0,G^=v<<7|v>>>32-7,v=G+pe|0,O^=v<<9|v>>>32-9,v=O+G|0,I^=v<<13|v>>>32-13,v=I+O|0,pe^=v<<18|v>>>32-18,v=Z+G|0,X^=v<<7|v>>>32-7,v=X+Z|0,J^=v<<9|v>>>32-9,v=J+X|0,G^=v<<13|v>>>32-13,v=G+J|0,Z^=v<<18|v>>>32-18,v=F+V|0,S^=v<<7|v>>>32-7,v=S+F|0,O^=v<<9|v>>>32-9,v=O+S|0,V^=v<<13|v>>>32-13,v=V+O|0,F^=v<<18|v>>>32-18,v=D+R|0,I^=v<<7|v>>>32-7,v=I+D|0,P^=v<<9|v>>>32-9,v=P+I|0,R^=v<<13|v>>>32-13,v=R+P|0,D^=v<<18|v>>>32-18,v=pe+ve|0,ne^=v<<7|v>>>32-7,v=ne+pe|0,_e^=v<<9|v>>>32-9,v=_e+ne|0,ve^=v<<13|v>>>32-13,v=ve+_e|0,pe^=v<<18|v>>>32-18;o[0]=Z>>>0&255,o[1]=Z>>>8&255,o[2]=Z>>>16&255,o[3]=Z>>>24&255,o[4]=F>>>0&255,o[5]=F>>>8&255,o[6]=F>>>16&255,o[7]=F>>>24&255,o[8]=D>>>0&255,o[9]=D>>>8&255,o[10]=D>>>16&255,o[11]=D>>>24&255,o[12]=pe>>>0&255,o[13]=pe>>>8&255,o[14]=pe>>>16&255,o[15]=pe>>>24&255,o[16]=S>>>0&255,o[17]=S>>>8&255,o[18]=S>>>16&255,o[19]=S>>>24&255,o[20]=O>>>0&255,o[21]=O>>>8&255,o[22]=O>>>16&255,o[23]=O>>>24&255,o[24]=P>>>0&255,o[25]=P>>>8&255,o[26]=P>>>16&255,o[27]=P>>>24&255,o[28]=R>>>0&255,o[29]=R>>>8&255,o[30]=R>>>16&255,o[31]=R>>>24&255}function z(o,d,u,f){B(o,d,u,f)}function j(o,d,u,f){ee(o,d,u,f)}var q=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function ue(o,d,u,f,_,g,w){var N=new Uint8Array(16),L=new Uint8Array(64),Q,H;for(H=0;H<16;H++)N[H]=0;for(H=0;H<8;H++)N[H]=g[H];for(;_>=64;){for(z(L,N,w,q),H=0;H<64;H++)o[d+H]=u[f+H]^L[H];for(Q=1,H=8;H<16;H++)Q=Q+(N[H]&255)|0,N[H]=Q&255,Q>>>=8;_-=64,d+=64,f+=64}if(_>0)for(z(L,N,w,q),H=0;H<_;H++)o[d+H]=u[f+H]^L[H];return 0}function ae(o,d,u,f,_){var g=new Uint8Array(16),w=new Uint8Array(64),N,L;for(L=0;L<16;L++)g[L]=0;for(L=0;L<8;L++)g[L]=f[L];for(;u>=64;){for(z(w,g,_,q),L=0;L<64;L++)o[d+L]=w[L];for(N=1,L=8;L<16;L++)N=N+(g[L]&255)|0,g[L]=N&255,N>>>=8;u-=64,d+=64}if(u>0)for(z(w,g,_,q),L=0;L>>13|u<<3)&8191,f=o[4]&255|(o[5]&255)<<8,this.r[2]=(u>>>10|f<<6)&7939,_=o[6]&255|(o[7]&255)<<8,this.r[3]=(f>>>7|_<<9)&8191,g=o[8]&255|(o[9]&255)<<8,this.r[4]=(_>>>4|g<<12)&255,this.r[5]=g>>>1&8190,w=o[10]&255|(o[11]&255)<<8,this.r[6]=(g>>>14|w<<2)&8191,N=o[12]&255|(o[13]&255)<<8,this.r[7]=(w>>>11|N<<5)&8065,L=o[14]&255|(o[15]&255)<<8,this.r[8]=(N>>>8|L<<8)&8191,this.r[9]=L>>>5&127,this.pad[0]=o[16]&255|(o[17]&255)<<8,this.pad[1]=o[18]&255|(o[19]&255)<<8,this.pad[2]=o[20]&255|(o[21]&255)<<8,this.pad[3]=o[22]&255|(o[23]&255)<<8,this.pad[4]=o[24]&255|(o[25]&255)<<8,this.pad[5]=o[26]&255|(o[27]&255)<<8,this.pad[6]=o[28]&255|(o[29]&255)<<8,this.pad[7]=o[30]&255|(o[31]&255)<<8};rt.prototype.blocks=function(o,d,u){for(var f=this.fin?0:2048,_,g,w,N,L,Q,H,ke,W,ie,fe,he,de,se,ce,oe,Z,X,J,G=this.h[0],V=this.h[1],F=this.h[2],S=this.h[3],O=this.h[4],P=this.h[5],R=this.h[6],D=this.h[7],I=this.h[8],ne=this.h[9],_e=this.r[0],ve=this.r[1],pe=this.r[2],v=this.r[3],we=this.r[4],Ce=this.r[5],Te=this.r[6],ye=this.r[7],Se=this.r[8],Oe=this.r[9];u>=16;)_=o[d+0]&255|(o[d+1]&255)<<8,G+=_&8191,g=o[d+2]&255|(o[d+3]&255)<<8,V+=(_>>>13|g<<3)&8191,w=o[d+4]&255|(o[d+5]&255)<<8,F+=(g>>>10|w<<6)&8191,N=o[d+6]&255|(o[d+7]&255)<<8,S+=(w>>>7|N<<9)&8191,L=o[d+8]&255|(o[d+9]&255)<<8,O+=(N>>>4|L<<12)&8191,P+=L>>>1&8191,Q=o[d+10]&255|(o[d+11]&255)<<8,R+=(L>>>14|Q<<2)&8191,H=o[d+12]&255|(o[d+13]&255)<<8,D+=(Q>>>11|H<<5)&8191,ke=o[d+14]&255|(o[d+15]&255)<<8,I+=(H>>>8|ke<<8)&8191,ne+=ke>>>5|f,W=0,ie=W,ie+=G*_e,ie+=V*(5*Oe),ie+=F*(5*Se),ie+=S*(5*ye),ie+=O*(5*Te),W=ie>>>13,ie&=8191,ie+=P*(5*Ce),ie+=R*(5*we),ie+=D*(5*v),ie+=I*(5*pe),ie+=ne*(5*ve),W+=ie>>>13,ie&=8191,fe=W,fe+=G*ve,fe+=V*_e,fe+=F*(5*Oe),fe+=S*(5*Se),fe+=O*(5*ye),W=fe>>>13,fe&=8191,fe+=P*(5*Te),fe+=R*(5*Ce),fe+=D*(5*we),fe+=I*(5*v),fe+=ne*(5*pe),W+=fe>>>13,fe&=8191,he=W,he+=G*pe,he+=V*ve,he+=F*_e,he+=S*(5*Oe),he+=O*(5*Se),W=he>>>13,he&=8191,he+=P*(5*ye),he+=R*(5*Te),he+=D*(5*Ce),he+=I*(5*we),he+=ne*(5*v),W+=he>>>13,he&=8191,de=W,de+=G*v,de+=V*pe,de+=F*ve,de+=S*_e,de+=O*(5*Oe),W=de>>>13,de&=8191,de+=P*(5*Se),de+=R*(5*ye),de+=D*(5*Te),de+=I*(5*Ce),de+=ne*(5*we),W+=de>>>13,de&=8191,se=W,se+=G*we,se+=V*v,se+=F*pe,se+=S*ve,se+=O*_e,W=se>>>13,se&=8191,se+=P*(5*Oe),se+=R*(5*Se),se+=D*(5*ye),se+=I*(5*Te),se+=ne*(5*Ce),W+=se>>>13,se&=8191,ce=W,ce+=G*Ce,ce+=V*we,ce+=F*v,ce+=S*pe,ce+=O*ve,W=ce>>>13,ce&=8191,ce+=P*_e,ce+=R*(5*Oe),ce+=D*(5*Se),ce+=I*(5*ye),ce+=ne*(5*Te),W+=ce>>>13,ce&=8191,oe=W,oe+=G*Te,oe+=V*Ce,oe+=F*we,oe+=S*v,oe+=O*pe,W=oe>>>13,oe&=8191,oe+=P*ve,oe+=R*_e,oe+=D*(5*Oe),oe+=I*(5*Se),oe+=ne*(5*ye),W+=oe>>>13,oe&=8191,Z=W,Z+=G*ye,Z+=V*Te,Z+=F*Ce,Z+=S*we,Z+=O*v,W=Z>>>13,Z&=8191,Z+=P*pe,Z+=R*ve,Z+=D*_e,Z+=I*(5*Oe),Z+=ne*(5*Se),W+=Z>>>13,Z&=8191,X=W,X+=G*Se,X+=V*ye,X+=F*Te,X+=S*Ce,X+=O*we,W=X>>>13,X&=8191,X+=P*v,X+=R*pe,X+=D*ve,X+=I*_e,X+=ne*(5*Oe),W+=X>>>13,X&=8191,J=W,J+=G*Oe,J+=V*Se,J+=F*ye,J+=S*Te,J+=O*Ce,W=J>>>13,J&=8191,J+=P*we,J+=R*v,J+=D*pe,J+=I*ve,J+=ne*_e,W+=J>>>13,J&=8191,W=(W<<2)+W|0,W=W+ie|0,ie=W&8191,W=W>>>13,fe+=W,G=ie,V=fe,F=he,S=de,O=se,P=ce,R=oe,D=Z,I=X,ne=J,d+=16,u-=16;this.h[0]=G,this.h[1]=V,this.h[2]=F,this.h[3]=S,this.h[4]=O,this.h[5]=P,this.h[6]=R,this.h[7]=D,this.h[8]=I,this.h[9]=ne},rt.prototype.finish=function(o,d){var u=new Uint16Array(10),f,_,g,w;if(this.leftover){for(w=this.leftover,this.buffer[w++]=1;w<16;w++)this.buffer[w]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(f=this.h[1]>>>13,this.h[1]&=8191,w=2;w<10;w++)this.h[w]+=f,f=this.h[w]>>>13,this.h[w]&=8191;for(this.h[0]+=f*5,f=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=f,f=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=f,u[0]=this.h[0]+5,f=u[0]>>>13,u[0]&=8191,w=1;w<10;w++)u[w]=this.h[w]+f,f=u[w]>>>13,u[w]&=8191;for(u[9]-=1<<13,_=(f^1)-1,w=0;w<10;w++)u[w]&=_;for(_=~_,w=0;w<10;w++)this.h[w]=this.h[w]&_|u[w];for(this.h[0]=(this.h[0]|this.h[1]<<13)&65535,this.h[1]=(this.h[1]>>>3|this.h[2]<<10)&65535,this.h[2]=(this.h[2]>>>6|this.h[3]<<7)&65535,this.h[3]=(this.h[3]>>>9|this.h[4]<<4)&65535,this.h[4]=(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14)&65535,this.h[5]=(this.h[6]>>>2|this.h[7]<<11)&65535,this.h[6]=(this.h[7]>>>5|this.h[8]<<8)&65535,this.h[7]=(this.h[8]>>>8|this.h[9]<<5)&65535,g=this.h[0]+this.pad[0],this.h[0]=g&65535,w=1;w<8;w++)g=(this.h[w]+this.pad[w]|0)+(g>>>16)|0,this.h[w]=g&65535;o[d+0]=this.h[0]>>>0&255,o[d+1]=this.h[0]>>>8&255,o[d+2]=this.h[1]>>>0&255,o[d+3]=this.h[1]>>>8&255,o[d+4]=this.h[2]>>>0&255,o[d+5]=this.h[2]>>>8&255,o[d+6]=this.h[3]>>>0&255,o[d+7]=this.h[3]>>>8&255,o[d+8]=this.h[4]>>>0&255,o[d+9]=this.h[4]>>>8&255,o[d+10]=this.h[5]>>>0&255,o[d+11]=this.h[5]>>>8&255,o[d+12]=this.h[6]>>>0&255,o[d+13]=this.h[6]>>>8&255,o[d+14]=this.h[7]>>>0&255,o[d+15]=this.h[7]>>>8&255},rt.prototype.update=function(o,d,u){var f,_;if(this.leftover){for(_=16-this.leftover,_>u&&(_=u),f=0;f<_;f++)this.buffer[this.leftover+f]=o[d+f];if(u-=_,d+=_,this.leftover+=_,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(u>=16&&(_=u-u%16,this.blocks(o,d,_),d+=_,u-=_),u){for(f=0;f>16&1),g[u-1]&=65535;g[15]=w[15]-32767-(g[14]>>16&1),_=g[15]>>16&1,g[14]&=65535,at(w,g,1-_)}for(u=0;u<16;u++)o[2*u]=w[u]&255,o[2*u+1]=w[u]>>8}function Ye(o,d){var u=new Uint8Array(32),f=new Uint8Array(32);return Ee(u,o),Ee(f,d),A(u,0,f,0)}function Mt(o){var d=new Uint8Array(32);return Ee(d,o),d[0]&1}function Rt(o,d){var u;for(u=0;u<16;u++)o[u]=d[2*u]+(d[2*u+1]<<8);o[15]&=32767}function Je(o,d,u){for(var f=0;f<16;f++)o[f]=d[f]+u[f]}function tt(o,d,u){for(var f=0;f<16;f++)o[f]=d[f]-u[f]}function xe(o,d,u){var f,_,g=0,w=0,N=0,L=0,Q=0,H=0,ke=0,W=0,ie=0,fe=0,he=0,de=0,se=0,ce=0,oe=0,Z=0,X=0,J=0,G=0,V=0,F=0,S=0,O=0,P=0,R=0,D=0,I=0,ne=0,_e=0,ve=0,pe=0,v=u[0],we=u[1],Ce=u[2],Te=u[3],ye=u[4],Se=u[5],Oe=u[6],Ke=u[7],Ne=u[8],Me=u[9],Ue=u[10],je=u[11],qe=u[12],Ge=u[13],Ve=u[14],Qe=u[15];f=d[0],g+=f*v,w+=f*we,N+=f*Ce,L+=f*Te,Q+=f*ye,H+=f*Se,ke+=f*Oe,W+=f*Ke,ie+=f*Ne,fe+=f*Me,he+=f*Ue,de+=f*je,se+=f*qe,ce+=f*Ge,oe+=f*Ve,Z+=f*Qe,f=d[1],w+=f*v,N+=f*we,L+=f*Ce,Q+=f*Te,H+=f*ye,ke+=f*Se,W+=f*Oe,ie+=f*Ke,fe+=f*Ne,he+=f*Me,de+=f*Ue,se+=f*je,ce+=f*qe,oe+=f*Ge,Z+=f*Ve,X+=f*Qe,f=d[2],N+=f*v,L+=f*we,Q+=f*Ce,H+=f*Te,ke+=f*ye,W+=f*Se,ie+=f*Oe,fe+=f*Ke,he+=f*Ne,de+=f*Me,se+=f*Ue,ce+=f*je,oe+=f*qe,Z+=f*Ge,X+=f*Ve,J+=f*Qe,f=d[3],L+=f*v,Q+=f*we,H+=f*Ce,ke+=f*Te,W+=f*ye,ie+=f*Se,fe+=f*Oe,he+=f*Ke,de+=f*Ne,se+=f*Me,ce+=f*Ue,oe+=f*je,Z+=f*qe,X+=f*Ge,J+=f*Ve,G+=f*Qe,f=d[4],Q+=f*v,H+=f*we,ke+=f*Ce,W+=f*Te,ie+=f*ye,fe+=f*Se,he+=f*Oe,de+=f*Ke,se+=f*Ne,ce+=f*Me,oe+=f*Ue,Z+=f*je,X+=f*qe,J+=f*Ge,G+=f*Ve,V+=f*Qe,f=d[5],H+=f*v,ke+=f*we,W+=f*Ce,ie+=f*Te,fe+=f*ye,he+=f*Se,de+=f*Oe,se+=f*Ke,ce+=f*Ne,oe+=f*Me,Z+=f*Ue,X+=f*je,J+=f*qe,G+=f*Ge,V+=f*Ve,F+=f*Qe,f=d[6],ke+=f*v,W+=f*we,ie+=f*Ce,fe+=f*Te,he+=f*ye,de+=f*Se,se+=f*Oe,ce+=f*Ke,oe+=f*Ne,Z+=f*Me,X+=f*Ue,J+=f*je,G+=f*qe,V+=f*Ge,F+=f*Ve,S+=f*Qe,f=d[7],W+=f*v,ie+=f*we,fe+=f*Ce,he+=f*Te,de+=f*ye,se+=f*Se,ce+=f*Oe,oe+=f*Ke,Z+=f*Ne,X+=f*Me,J+=f*Ue,G+=f*je,V+=f*qe,F+=f*Ge,S+=f*Ve,O+=f*Qe,f=d[8],ie+=f*v,fe+=f*we,he+=f*Ce,de+=f*Te,se+=f*ye,ce+=f*Se,oe+=f*Oe,Z+=f*Ke,X+=f*Ne,J+=f*Me,G+=f*Ue,V+=f*je,F+=f*qe,S+=f*Ge,O+=f*Ve,P+=f*Qe,f=d[9],fe+=f*v,he+=f*we,de+=f*Ce,se+=f*Te,ce+=f*ye,oe+=f*Se,Z+=f*Oe,X+=f*Ke,J+=f*Ne,G+=f*Me,V+=f*Ue,F+=f*je,S+=f*qe,O+=f*Ge,P+=f*Ve,R+=f*Qe,f=d[10],he+=f*v,de+=f*we,se+=f*Ce,ce+=f*Te,oe+=f*ye,Z+=f*Se,X+=f*Oe,J+=f*Ke,G+=f*Ne,V+=f*Me,F+=f*Ue,S+=f*je,O+=f*qe,P+=f*Ge,R+=f*Ve,D+=f*Qe,f=d[11],de+=f*v,se+=f*we,ce+=f*Ce,oe+=f*Te,Z+=f*ye,X+=f*Se,J+=f*Oe,G+=f*Ke,V+=f*Ne,F+=f*Me,S+=f*Ue,O+=f*je,P+=f*qe,R+=f*Ge,D+=f*Ve,I+=f*Qe,f=d[12],se+=f*v,ce+=f*we,oe+=f*Ce,Z+=f*Te,X+=f*ye,J+=f*Se,G+=f*Oe,V+=f*Ke,F+=f*Ne,S+=f*Me,O+=f*Ue,P+=f*je,R+=f*qe,D+=f*Ge,I+=f*Ve,ne+=f*Qe,f=d[13],ce+=f*v,oe+=f*we,Z+=f*Ce,X+=f*Te,J+=f*ye,G+=f*Se,V+=f*Oe,F+=f*Ke,S+=f*Ne,O+=f*Me,P+=f*Ue,R+=f*je,D+=f*qe,I+=f*Ge,ne+=f*Ve,_e+=f*Qe,f=d[14],oe+=f*v,Z+=f*we,X+=f*Ce,J+=f*Te,G+=f*ye,V+=f*Se,F+=f*Oe,S+=f*Ke,O+=f*Ne,P+=f*Me,R+=f*Ue,D+=f*je,I+=f*qe,ne+=f*Ge,_e+=f*Ve,ve+=f*Qe,f=d[15],Z+=f*v,X+=f*we,J+=f*Ce,G+=f*Te,V+=f*ye,F+=f*Se,S+=f*Oe,O+=f*Ke,P+=f*Ne,R+=f*Me,D+=f*Ue,I+=f*je,ne+=f*qe,_e+=f*Ge,ve+=f*Ve,pe+=f*Qe,g+=38*X,w+=38*J,N+=38*G,L+=38*V,Q+=38*F,H+=38*S,ke+=38*O,W+=38*P,ie+=38*R,fe+=38*D,he+=38*I,de+=38*ne,se+=38*_e,ce+=38*ve,oe+=38*pe,_=1,f=g+_+65535,_=Math.floor(f/65536),g=f-_*65536,f=w+_+65535,_=Math.floor(f/65536),w=f-_*65536,f=N+_+65535,_=Math.floor(f/65536),N=f-_*65536,f=L+_+65535,_=Math.floor(f/65536),L=f-_*65536,f=Q+_+65535,_=Math.floor(f/65536),Q=f-_*65536,f=H+_+65535,_=Math.floor(f/65536),H=f-_*65536,f=ke+_+65535,_=Math.floor(f/65536),ke=f-_*65536,f=W+_+65535,_=Math.floor(f/65536),W=f-_*65536,f=ie+_+65535,_=Math.floor(f/65536),ie=f-_*65536,f=fe+_+65535,_=Math.floor(f/65536),fe=f-_*65536,f=he+_+65535,_=Math.floor(f/65536),he=f-_*65536,f=de+_+65535,_=Math.floor(f/65536),de=f-_*65536,f=se+_+65535,_=Math.floor(f/65536),se=f-_*65536,f=ce+_+65535,_=Math.floor(f/65536),ce=f-_*65536,f=oe+_+65535,_=Math.floor(f/65536),oe=f-_*65536,f=Z+_+65535,_=Math.floor(f/65536),Z=f-_*65536,g+=_-1+37*(_-1),_=1,f=g+_+65535,_=Math.floor(f/65536),g=f-_*65536,f=w+_+65535,_=Math.floor(f/65536),w=f-_*65536,f=N+_+65535,_=Math.floor(f/65536),N=f-_*65536,f=L+_+65535,_=Math.floor(f/65536),L=f-_*65536,f=Q+_+65535,_=Math.floor(f/65536),Q=f-_*65536,f=H+_+65535,_=Math.floor(f/65536),H=f-_*65536,f=ke+_+65535,_=Math.floor(f/65536),ke=f-_*65536,f=W+_+65535,_=Math.floor(f/65536),W=f-_*65536,f=ie+_+65535,_=Math.floor(f/65536),ie=f-_*65536,f=fe+_+65535,_=Math.floor(f/65536),fe=f-_*65536,f=he+_+65535,_=Math.floor(f/65536),he=f-_*65536,f=de+_+65535,_=Math.floor(f/65536),de=f-_*65536,f=se+_+65535,_=Math.floor(f/65536),se=f-_*65536,f=ce+_+65535,_=Math.floor(f/65536),ce=f-_*65536,f=oe+_+65535,_=Math.floor(f/65536),oe=f-_*65536,f=Z+_+65535,_=Math.floor(f/65536),Z=f-_*65536,g+=_-1+37*(_-1),o[0]=g,o[1]=w,o[2]=N,o[3]=L,o[4]=Q,o[5]=H,o[6]=ke,o[7]=W,o[8]=ie,o[9]=fe,o[10]=he,o[11]=de,o[12]=se,o[13]=ce,o[14]=oe,o[15]=Z}function Xe(o,d){xe(o,d,d)}function Nt(o,d){var u=n(),f;for(f=0;f<16;f++)u[f]=d[f];for(f=253;f>=0;f--)Xe(u,u),f!==2&&f!==4&&xe(u,u,d);for(f=0;f<16;f++)o[f]=u[f]}function Wt(o,d){var u=n(),f;for(f=0;f<16;f++)u[f]=d[f];for(f=250;f>=0;f--)Xe(u,u),f!==1&&xe(u,u,d);for(f=0;f<16;f++)o[f]=u[f]}function bt(o,d,u){var f=new Uint8Array(32),_=new Float64Array(80),g,w,N=n(),L=n(),Q=n(),H=n(),ke=n(),W=n();for(w=0;w<31;w++)f[w]=d[w];for(f[31]=d[31]&127|64,f[0]&=248,Rt(_,u),w=0;w<16;w++)L[w]=_[w],H[w]=N[w]=Q[w]=0;for(N[0]=H[0]=1,w=254;w>=0;--w)g=f[w>>>3]>>>(w&7)&1,at(N,L,g),at(Q,H,g),Je(ke,N,Q),tt(N,N,Q),Je(Q,L,H),tt(L,L,H),Xe(H,ke),Xe(W,N),xe(N,Q,N),xe(Q,L,ke),Je(ke,N,Q),tt(N,N,Q),Xe(L,N),tt(Q,H,W),xe(N,Q,a),Je(N,N,H),xe(Q,Q,N),xe(N,H,W),xe(H,L,_),Xe(L,ke),at(N,L,g),at(Q,H,g);for(w=0;w<16;w++)_[w+16]=N[w],_[w+32]=Q[w],_[w+48]=L[w],_[w+64]=H[w];var ie=_.subarray(32),fe=_.subarray(16);return Nt(ie,ie),xe(fe,fe,ie),Ee(o,fe),0}function Ct(o,d){return bt(o,d,s)}function Ut(o,d){return r(d,32),Ct(o,d)}function Ot(o,d,u){var f=new Uint8Array(32);return bt(f,u,d),j(o,i,f,q)}var tn=Pe,bn=pt;function nn(o,d,u,f,_,g){var w=new Uint8Array(32);return Ot(w,_,g),tn(o,d,u,f,w)}function Et(o,d,u,f,_,g){var w=new Uint8Array(32);return Ot(w,_,g),bn(o,d,u,f,w)}var rn=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function jt(o,d,u,f){for(var _=new Int32Array(16),g=new Int32Array(16),w,N,L,Q,H,ke,W,ie,fe,he,de,se,ce,oe,Z,X,J,G,V,F,S,O,P,R,D,I,ne=o[0],_e=o[1],ve=o[2],pe=o[3],v=o[4],we=o[5],Ce=o[6],Te=o[7],ye=d[0],Se=d[1],Oe=d[2],Ke=d[3],Ne=d[4],Me=d[5],Ue=d[6],je=d[7],qe=0;f>=128;){for(V=0;V<16;V++)F=8*V+qe,_[V]=u[F+0]<<24|u[F+1]<<16|u[F+2]<<8|u[F+3],g[V]=u[F+4]<<24|u[F+5]<<16|u[F+6]<<8|u[F+7];for(V=0;V<80;V++)if(w=ne,N=_e,L=ve,Q=pe,H=v,ke=we,W=Ce,ie=Te,fe=ye,he=Se,de=Oe,se=Ke,ce=Ne,oe=Me,Z=Ue,X=je,S=Te,O=je,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=(v>>>14|Ne<<32-14)^(v>>>18|Ne<<32-18)^(Ne>>>41-32|v<<32-(41-32)),O=(Ne>>>14|v<<32-14)^(Ne>>>18|v<<32-18)^(v>>>41-32|Ne<<32-(41-32)),P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,S=v&we^~v&Ce,O=Ne&Me^~Ne&Ue,P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,S=rn[V*2],O=rn[V*2+1],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,S=_[V%16],O=g[V%16],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,J=D&65535|I<<16,G=P&65535|R<<16,S=J,O=G,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=(ne>>>28|ye<<32-28)^(ye>>>34-32|ne<<32-(34-32))^(ye>>>39-32|ne<<32-(39-32)),O=(ye>>>28|ne<<32-28)^(ne>>>34-32|ye<<32-(34-32))^(ne>>>39-32|ye<<32-(39-32)),P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,S=ne&_e^ne&ve^_e&ve,O=ye&Se^ye&Oe^Se&Oe,P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,ie=D&65535|I<<16,X=P&65535|R<<16,S=Q,O=se,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=J,O=G,P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,Q=D&65535|I<<16,se=P&65535|R<<16,_e=w,ve=N,pe=L,v=Q,we=H,Ce=ke,Te=W,ne=ie,Se=fe,Oe=he,Ke=de,Ne=se,Me=ce,Ue=oe,je=Z,ye=X,V%16===15)for(F=0;F<16;F++)S=_[F],O=g[F],P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=_[(F+9)%16],O=g[(F+9)%16],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,J=_[(F+1)%16],G=g[(F+1)%16],S=(J>>>1|G<<32-1)^(J>>>8|G<<32-8)^J>>>7,O=(G>>>1|J<<32-1)^(G>>>8|J<<32-8)^(G>>>7|J<<32-7),P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,J=_[(F+14)%16],G=g[(F+14)%16],S=(J>>>19|G<<32-19)^(G>>>61-32|J<<32-(61-32))^J>>>6,O=(G>>>19|J<<32-19)^(J>>>61-32|G<<32-(61-32))^(G>>>6|J<<32-6),P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,_[F]=D&65535|I<<16,g[F]=P&65535|R<<16;S=ne,O=ye,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[0],O=d[0],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[0]=ne=D&65535|I<<16,d[0]=ye=P&65535|R<<16,S=_e,O=Se,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[1],O=d[1],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[1]=_e=D&65535|I<<16,d[1]=Se=P&65535|R<<16,S=ve,O=Oe,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[2],O=d[2],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[2]=ve=D&65535|I<<16,d[2]=Oe=P&65535|R<<16,S=pe,O=Ke,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[3],O=d[3],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[3]=pe=D&65535|I<<16,d[3]=Ke=P&65535|R<<16,S=v,O=Ne,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[4],O=d[4],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[4]=v=D&65535|I<<16,d[4]=Ne=P&65535|R<<16,S=we,O=Me,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[5],O=d[5],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[5]=we=D&65535|I<<16,d[5]=Me=P&65535|R<<16,S=Ce,O=Ue,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[6],O=d[6],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[6]=Ce=D&65535|I<<16,d[6]=Ue=P&65535|R<<16,S=Te,O=je,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[7],O=d[7],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[7]=Te=D&65535|I<<16,d[7]=je=P&65535|R<<16,qe+=128,f-=128}return f}function nt(o,d,u){var f=new Int32Array(8),_=new Int32Array(8),g=new Uint8Array(256),w,N=u;for(f[0]=1779033703,f[1]=3144134277,f[2]=1013904242,f[3]=2773480762,f[4]=1359893119,f[5]=2600822924,f[6]=528734635,f[7]=1541459225,_[0]=4089235720,_[1]=2227873595,_[2]=4271175723,_[3]=1595750129,_[4]=2917565137,_[5]=725511199,_[6]=4215389547,_[7]=327033209,jt(f,_,d,u),u%=128,w=0;w=0;--_)f=u[_/8|0]>>(_&7)&1,st(o,d,f),ft(d,o),ft(o,o),st(o,d,f)}function Re(o,d){var u=[n(),n(),n(),n()];Ze(u[0],b),Ze(u[1],m),Ze(u[2],c),xe(u[3],b,m),re(o,u,d)}function zt(o,d,u){var f=new Uint8Array(64),_=[n(),n(),n(),n()],g;for(u||r(d,32),nt(f,d,32),f[0]&=248,f[31]&=127,f[31]|=64,Re(_,f),Lt(o,_),g=0;g<32;g++)d[g+32]=o[g];return 0}var Zt=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function on(o,d){var u,f,_,g;for(f=63;f>=32;--f){for(u=0,_=f-32,g=f-12;_>4)*Zt[_],u=d[_]>>8,d[_]&=255;for(_=0;_<32;_++)d[_]-=u*Zt[_];for(f=0;f<32;f++)d[f+1]+=d[f]>>8,o[f]=d[f]&255}function ln(o){var d=new Float64Array(64),u;for(u=0;u<64;u++)d[u]=o[u];for(u=0;u<64;u++)o[u]=0;on(o,d)}function Ie(o,d,u,f){var _=new Uint8Array(64),g=new Uint8Array(64),w=new Uint8Array(64),N,L,Q=new Float64Array(64),H=[n(),n(),n(),n()];nt(_,f,32),_[0]&=248,_[31]&=127,_[31]|=64;var ke=u+64;for(N=0;N>7&&tt(o[0],l,o[0]),xe(o[3],o[0],o[1]),0)}function fn(o,d,u,f){var _,g=new Uint8Array(32),w=new Uint8Array(64),N=[n(),n(),n(),n()],L=[n(),n(),n(),n()];if(u<64||et(L,f))return-1;for(_=0;_=0},e.sign.keyPair=function(){var o=new Uint8Array(kt),d=new Uint8Array($t);return zt(o,d),{publicKey:o,secretKey:d}},e.sign.keyPair.fromSecretKey=function(o){if(it(o),o.length!==$t)throw new Error("bad secret key size");for(var d=new Uint8Array(kt),u=0;u"u"?typeof Buffer.from<"u"?(e.encodeBase64=function(r){return Buffer.from(r).toString("base64")},e.decodeBase64=function(r){return n(r),new Uint8Array(Array.prototype.slice.call(Buffer.from(r,"base64"),0))}):(e.encodeBase64=function(r){return new Buffer(r).toString("base64")},e.decodeBase64=function(r){return n(r),new Uint8Array(Array.prototype.slice.call(new Buffer(r,"base64"),0))}):(e.encodeBase64=function(r){var i,s=[],l=r.length;for(i=0;i"u"||t==null?[]:Array.isArray(t)?t:[t]}function _r(t){return Array.from(new Uint8Array(t)).map(e=>e.toString(16).padStart(2,"0")).join("")}function Fr(t){const e=t.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g);return new Uint8Array(e.map(n=>parseInt(n,16)))}function Os(t,e=8){const n=new Array(e).fill(0);for(let r=0;r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),ks(e)?n.showHidden=e:e&&dc(n,e),Mn(n.showHidden)&&(n.showHidden=!1),Mn(n.depth)&&(n.depth=2),Mn(n.colors)&&(n.colors=!1),Mn(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=sc),pr(n,t,n.depth)}On.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};On.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function fc(t,e){return t}function ks(t){return typeof t=="boolean"}function Mn(t){return t===void 0}function sc(t,e){var n=On.styles[e];return n?"\x1B["+On.colors[n][0]+"m"+t+"\x1B["+On.colors[n][1]+"m":t}function Dr(t){return typeof t=="function"}function Cs(t){return typeof t=="string"}function oc(t){return typeof t=="number"}function Ts(t){return t===null}function Rs(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function $r(t){return Ar(t)&&li(t)==="[object RegExp]"}function Ar(t){return typeof t=="object"&&t!==null}function Pr(t){return Ar(t)&&(li(t)==="[object Error]"||t instanceof Error)}function df(t){return Ar(t)&&li(t)==="[object Date]"}function li(t){return Object.prototype.toString.call(t)}function lc(t){var e={};return t.forEach(function(n,r){e[n]=!0}),e}function cc(t,e,n,r,i){for(var s=[],l=0,c=e.length;l=0||s.indexOf("description")>=0))return Ir(e);if(s.length===0){if(Dr(e)){var c=e.name?": "+e.name:"";return t.stylize("[Function"+c+"]","special")}if($r(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(df(e))return t.stylize(Date.prototype.toString.call(e),"date");if(Pr(e))return Ir(e)}var a="",h=!1,p=["{","}"];if(Array.isArray(e)&&(h=!0,p=["[","]"]),Dr(e)){var b=e.name?": "+e.name:"";a=" [Function"+b+"]"}if($r(e)&&(a=" "+RegExp.prototype.toString.call(e)),df(e)&&(a=" "+Date.prototype.toUTCString.call(e)),Pr(e)&&(a=" "+Ir(e)),s.length===0&&(!h||e.length==0))return p[0]+a+p[1];if(n<0)return $r(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special");t.seen.push(e);var m;return h?m=cc(t,e,n,l,s):m=s.map(function(y){return Hr(t,e,n,l,y,h)}),t.seen.pop(),uc(m,a,p)}function Hr(t,e,n,r,i,s){var l,c,a;a={value:void 0};try{a.value=e[i]}catch{}try{Object.getOwnPropertyDescriptor&&(a=Object.getOwnPropertyDescriptor(e,i)||a)}catch{}if(a.get?a.set?c=t.stylize("[Getter/Setter]","special"):c=t.stylize("[Getter]","special"):a.set&&(c=t.stylize("[Setter]","special")),Rs(r,i)||(l="["+i+"]"),c||(t.seen.indexOf(a.value)<0?(Ts(n)?c=pr(t,a.value,null):c=pr(t,a.value,n-1),c.indexOf(` +`)>-1&&(s?c=c.split(` +`).map(function(h){return" "+h}).join(` +`).substr(2):c=` +`+c.split(` +`).map(function(h){return" "+h}).join(` +`))):c=t.stylize("[Circular]","special")),Mn(l)){if(s&&i.match(/^\d+$/))return c;l=JSON.stringify(""+i),l.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(l=l.substr(1,l.length-2),l=t.stylize(l,"name")):(l=l.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),l=t.stylize(l,"string"))}return l+": "+c}function ac(t,e){if(Mn(e))return t.stylize("undefined","undefined");if(Cs(e)){var n="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(n,"string")}if(oc(e))return t.stylize(""+e,"number");if(ks(e))return t.stylize(""+e,"boolean");if(Ts(e))return t.stylize("null","null")}function uc(t,e,n){var r=t.reduce(function(i,s){return s.indexOf(` +`)>=0,i+s.replace(/\u001b\[\d\d?m/g,"").length+1},0);return r>60?n[0]+(e===""?"":e+` + `)+" "+t.join(`, + `)+" "+n[1]:n[0]+e+" "+t.join(", ")+" "+n[1]}function dc(t,e){if(!e||!Ar(e))return t;for(var n=Object.keys(e),r=n.length;r--;)t[n[r]]=e[n[r]];return t}function an(t,e,...n){try{e==console.log?e(`${new Date().toLocaleString()} → ${ic(...n).replace(/^'/,"").replace(/'$/,"")}`):typeof e=="function"?e(...n):e&&e.logOutput(t,{source:"connectome"},...n)}catch(r){console.log(r)}}let hc=class{write(e,...n){an(void 0,e,...n)}red(e,...n){an("red",e,...n)}green(e,...n){an("green",e,...n)}yellow(e,...n){an("yellow",e,...n)}blue(e,...n){an("blue",e,...n)}cyan(e,...n){an("cyan",e,...n)}magenta(e,...n){an("magenta",e,...n)}gray(e,...n){an("gray",e,...n)}white(e,...n){an("white",e,...n)}};var Fe=new hc;Yt.util=Yn;function _c({data:t,connector:e}){const{log:n}=e;Ql(t)&&(t=JSON.stringify(t));const r=new Uint8Array(Os(2*e.sentCount,24));if(e.closed())Fe.red(n,`⚠️ Warning: "${t}" was not sent because connector is not ready`);else if(e.sentCount>1){let i=0;typeof t=="string"&&(i=1);const s=i==1?Yt.util.decodeUTF8(t):t,l=Xl(s,i),c=Yt.secretbox(l,r,e.sharedSecret);e.verbose&&(Fe.green(n,`Connector ${e.endpoint} → Sending encrypted message #${e.sentCount} ↴`),Fe.gray(n,t)),e.connection.websocket.send(c)}else e.verbose&&(Fe.green(n,`Connector ${e.endpoint} → Sending message #${e.sentCount} ↴`),Fe.cyan(n,t)),e.connection.websocket.send(t)}Yt.util=Yn;function pc(t){return Object.keys(t).includes("result")||Object.keys(t).includes("error")}function Ns({jsonData:t,encryptedData:e,rawMessage:n,wasEncrypted:r,connector:i}){const{log:s}=i;i.lastMessageAt=Date.now();const l=new Uint8Array(Os(2*i.receivedCount+1,24));if(i.verbose&&!r&&Fe.magenta(s,`Connector ${i.endpoint} → Received message #${i.receivedCount} ↴`),t)t.jsonrpc?pc(t)?(i.verbose&&!r&&(Fe.magenta(s,`Connector ${i.endpoint} received plain-text rpc result ↴`),Fe.gray(s,t)),i.rpcClient.jsonrpcMsgReceive(n)):i.emit("json_rpc",n):i.emit("receive",{jsonData:t,rawMessage:n});else if(e){i.verbose=="extra"&&(Fe.magenta(s,`Connector ${i.endpoint} received bytes ↴`),Fe.cyan(s,e),Fe.green(s,JSON.stringify(e)),Fe.gray(s,`Connector ${i.endpoint} decrypting with shared secret ${i.sharedSecret}...`)),i.sharedSecret||Fe.red(s,`Connector ${i.endpoint} missing sharedSecret - should not happen...`);const c=Yt.secretbox.open(e,l,i.sharedSecret),a=c[0],h=c.subarray(1);if(a==1){const p=Yt.util.encodeUTF8(h);i.verbose&&Fe.yellow(s,`Connector ${i.endpoint} received message: ${p}`);try{const b=JSON.parse(p);b.jsonrpc?Ns({jsonData:b,rawMessage:p,wasEncrypted:!0,connector:i}):b.state?i.emit("receive_state",b.state):b.diff?i.emit("receive_diff",b.diff):b.signal?i.emit(b.signal,b.data):b.stateField?i.emit("receive_state_field",b.stateField):i.emit("receive",{jsonData:b,rawMessage:p})}catch(b){throw Fe.red(s,"Couldn't parse json message although the flag was for string ..."),Fe.red(s,p),b}}else i.verbose&&Fe.yellow(s,`Connector ${i.endpoint} received binary data`),i.emit("receive_binary",h)}}Yt.util=Yn;const bc=1;function vc({connector:t,afterFirstStep:e=()=>{}}){const{clientPrivateKey:n,clientPublicKey:r,clientPublicKeyHex:i,protocol:s,tag:l,endpoint:c,verbose:a}=t;return new Promise((h,p)=>{t.remoteObject("Auth").call("exchangePubkeys",{pubkey:i}).then(b=>{const m=Yt.box.before(Fr(b),n);if(e({sharedSecret:m,remotePubkeyHex:b}),a&&Fe.write(t.log,`Connector ${c} established shared secret through diffie-hellman exchange.`),t.connection.websocket.readyState==bc)t.remoteObject("Auth").call("finalizeHandshake",{protocol:s}).then(y=>{if(y&&y.error)console.log(y.error);else{h();const E=l?` (${l})`:"";Fe.cyan(t.log,`☑️ ${c}${E} ✓ Connection #${t.connection.websocket.__id} [ ${s||'"no-name"'} ] ready`)}}).catch(p);else{const y=l?` (${l})`:"";Fe.yellow(t.log,`${c}${y} ✖ Connection [ ${s||'"no-name"'} ] closed just before finalizeHandshake step`)}}).catch(p)})}let mc=class extends oi{constructor(e){super(),this.state=e,this.subscriptions=[]}get(){return this.state}subscribe(e){return this.subscriptions.push(e),e(this.state),()=>{this.subscriptions=this.subscriptions.filter(n=>n!==e)}}announceStateChange(){this.subscriptions.forEach(e=>e(this.state))}},br=class extends mc{set(e){this.state=e,this.announceStateChange()}},yc=class extends oi{constructor(e){super(),this.connector=e}send(...e){this.connector.send(...e)}};var Ft={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,REMOTE_INTERNAL_ERROR:-32603,TIMEOUT:-32701};let Ds=class{constructor({transports:e}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transportsToRegister=e,this.methods={}}setMethodPrefix(e){this.methodPrefix=e}expose(e){this.methods=e}registerTransport(e){e.onData(this._processRequest.bind(this,e))}async _processRequest(e,n){const r=JSON.parse(n);let i;return Array.isArray(r)?i=await Promise.all(r.map(s=>this._callMethod(s,e))):i=await this._callMethod(r,e),JSON.stringify(i)}async _callMethod(e,n){if(!e.hasOwnProperty("method"))return;const{method:i,params:s=[],id:l}=e;let c=i;if(c.includes("::")){const[p,b]=c.split("::");if(c=b,this.methodPrefix&&p!=this.methodPrefix)return}const a=!this.methods[c]||typeof this.methods[c]!="function"||c==="constructor"||c.startsWith("_")||this.methods[c]===Object.prototype[c];let h={};if(a)h={jsonrpc:"2.0",id:l,error:{code:Ft.METHOD_NOT_FOUND,message:`Method [${c}] not found on remote target object`}};else{this.currentTransport=n;try{const p=await this.methods[c].apply(this.methods,s);if(!l)return;h={jsonrpc:"2.0",result:typeof p>"u"?null:p,id:l}}catch(p){console.log(`Exposed RPC method ${i} internal error:`),console.log(p),console.log("Sending this error as a result to calling client ..."),h={jsonrpc:"2.0",error:{code:Ft.REMOTE_INTERNAL_ERROR,message:`Method [${i}] internal error: ${p.stack}`},id:l}}}return h}run(){for(const e of this.transportsToRegister)this.registerTransport(e);this.transportsToRegister=[]}},Rn=class extends Error{constructor(e={}){if(super(),!e.code)throw new Error("Code required");if(!e.message)throw new Error("Message required");this.code=e.code,this.message=e.message}},gc=class extends Rn{constructor(e){super({code:Ft.METHOD_NOT_FOUND,message:e||"Method not found"})}},wc=class extends Rn{constructor(){super({code:Ft.INVALID_PARAMS,message:"Invalid params"})}},xc=class extends Rn{constructor(e){super({code:Ft.REMOTE_INTERNAL_ERROR,message:`Error originating at remote endpoint: ${e}`||"Remote Internal error"})}},Ac=class extends Rn{constructor(){super({code:Ft.PARSE_ERROR,message:"Parse error"})}},Ec=class extends Rn{constructor(){super({code:Ft.INVALID_REQUEST,message:"Invalid request"})}},$s=class extends Rn{},Sc=class extends $s{constructor(e,n){super({code:Ft.TIMEOUT,message:`Request exceeded maximum execution time (${n}ms): ${e}`})}};var Mr={Base:Rn,MethodNotFound:gc,InvalidRequest:Ec,InvalidParams:wc,RemoteInternalError:xc,ServerError:$s,ParseError:Ac,RequestTimeout:Sc};let Ps=class{constructor({transport:e,requestTimeout:n=2e4}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transport=e,this.requestTimeout=n,this.pendingRequest={},this.initialized=!1}setMethodPrefix(e){this.methodPrefix=e}async callMethod(e,n){this._init();const r=this.methodPrefix?`${this.methodPrefix}::${e}`:e,i=this._makeRequestObject({method:r,params:n});return this._sendRequest({object:i,id:i.id})}notify(e,n){this._init();const r=this._makeRequestObject({method:e,params:n,mode:"notify"});return this.transport.sendData(JSON.stringify(r)),!0}async runBatch(e){const n=this._generateId();let r=!0;const i=[];for(const[s,l,c]of e){const a=this._makeRequestObject({method:s,params:l,mode:c,batchId:n});a.id&&(r=!1),i.push(a)}return r?this.transport.sendData(JSON.stringify(i)):this._sendRequest({object:i,id:n})}_init(){this.initialized||(this.transport.onData(this._processResponse.bind(this)),this.initialized=!0)}_sendRequest({object:e,id:n}){const r=JSON.stringify(e);return new Promise((i,s)=>{this.pendingRequest[n]={resolve:i,reject:s,sentObject:e},setTimeout(()=>{this.pendingRequest[n]&&(delete this.pendingRequest[n],s(new Mr.RequestTimeout(r,this.requestTimeout)))},this.requestTimeout);try{this.transport.sendData(r)}catch(l){delete this.pendingRequest[n],s(l)}})}_processResponse(e){const n=JSON.parse(e);Array.isArray(n)?this._processBatchResponse(n):this._processSingleCallResponse(n)}_processSingleCallResponse(e){const n=e.hasOwnProperty("result")||!1,r=e.hasOwnProperty("error");if(!n&&!r)return;const i=this.pendingRequest[e.id];if(delete this.pendingRequest[e.id],!!i){if(n)i.resolve(e.result);else if(r){const s=this._makeErrorObject(e.error);i.reject(s)}}}_processBatchResponse(e){let n;const r={},i=[];for(const h of e)h.id?(n||(n=h.id.split("|")[0]),r[h.id]=h):h.error&&i.push(h.error);if(!this.pendingRequest[n])return;const{sentObject:s,resolve:l}=this.pendingRequest[n];delete this.pendingRequest[n];const c=[];let a=0;for(const h of s){if(!h.id){c.push(null);continue}const p=r[h.id];p?p.hasOwnProperty("result")||!1?c.push({success:!0,result:p.result}):c.push({success:!1,result:this._makeErrorObject(p.error)}):(c.push({success:!1,error:this._makeErrorObject(i[a])}),a++)}l(c)}_makeRequestObject({method:e,params:n,mode:r,batchId:i}){const s={jsonrpc:"2.0",method:e};return n&&n.length&&(s.params=n),r!=="notify"&&(s.id=i?`${i}|${this._generateId()}`:this._generateId()),s}_makeErrorObject(e){const n={[Ft.METHOD_NOT_FOUND]:()=>new Mr.MethodNotFound(e.message),[Ft.REMOTE_INTERNAL_ERROR]:()=>new Mr.RemoteInternalError(e.message)}[e.code];return n()}_generateId(){const e="bjectSymhasOwnProp-0123456789ABCDEFGHIJKLMNQRTUVWXYZ_dfgiklquvxz";let n=10,r="";for(;0t.setMethodPrefix(s):(...s)=>r.callMethod.call(r,i,s)}})}function hf(t){return new Proxy(t,{get(e,n){return(...r)=>e.call(null,n,r)},apply(e,n,r){return e.apply(null,r)}})}let kc=class extends Ps{constructor(...e){return super(...e),Oc(this)}},Cc=class{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",e)}sendData(e){this.channel.send(e)}},Is=class{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",async n=>{const r=await e(n);r&&this.channel.send(r)})}};var Tc=Object.freeze({__proto__:null,MoleServer:Ds,MoleClient:Ps,MoleClientProxified:kc,ClientTransport:Cc,ServerTransport:Is});let Rc=class extends Error{constructor(e,n){super(e),this.name=this.constructor.name,this.errorCode=n}errorCode(){return this.errorCode}};const{MoleClient:Nc,ClientTransport:Dc}=Tc;let $c=class{constructor(e,n,r){this.moleChannel=new yc(e),this.methodPrefix=n,this.connectorOrServersideChannel=e,this.client=new Nc({requestTimeout:r,transport:new Dc(this.moleChannel)})}jsonrpcMsgReceive(e){this.moleChannel.emit("json_rpc",e)}call(e,n){return this.connectorOrServersideChannel.closed()?new Promise((r,i)=>{i(new Rc(`Method call [${this.methodPrefix}::${e}] on closed channel or connector ignored. Please add a check for closed channel in your code.`,"CLOSED_CHANNEL"))}):this.client.callMethod(`${this.methodPrefix}::${e}`,n)}};const Pc=1e4;let Ic=class{constructor(e,n){this.connectorOrServersideChannel=e,this.remoteObjects={},this.requestTimeout=n||Pc}remoteObject(e){return this.remoteObjects[e]||(this.remoteObjects[e]=new $c(this.connectorOrServersideChannel,e,this.requestTimeout)),this.remoteObjects[e]}jsonrpcMsgReceive(e){for(const n of Object.values(this.remoteObjects))n.jsonrpcMsgReceive(e)}},Mc=class{constructor({serversideChannel:e,serverMethods:n,methodPrefix:r}){const i=[new Is(e)];this.server=new Ds({transports:i}),this.server.expose(n),this.server.setMethodPrefix(r),this.server.run()}};Yt.util=Yn;function Uc(){const t=Yt.box.keyPair(),e=_r(t.publicKey),n=_r(t.secretKey);return{privateKey:t.secretKey,publicKey:t.publicKey,privateKeyHex:n,publicKeyHex:e}}Yt.util=Yn;function jc(t){return t.publicKeyHex&&!t.publicKey&&(t.publicKey=Fr(t.publicKeyHex)),t.privateKeyHex&&!t.privateKey&&(t.privateKey=Fr(t.privateKeyHex)),t}/*! + * https://github.com/Starcounter-Jack/JSON-Patch + * (c) 2017 Joachim Wester + * MIT license + */var Lc=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)i.hasOwnProperty(s)&&(r[s]=i[s])},t(e,n)};return function(e,n){t(e,n);function r(){this.constructor=e}e.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),zc=Object.prototype.hasOwnProperty;function Jr(t,e){return zc.call(t,e)}function Wr(t){if(Array.isArray(t)){for(var n=new Array(t.length),e=0;e=48&&r<=57){e++;continue}return!1}return!0}function En(t){return t.indexOf("/")===-1&&t.indexOf("~")===-1?t:t.replace(/~/g,"~0").replace(/\//g,"~1")}function Ms(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function Gr(t){if(t===void 0)return!0;if(t){if(Array.isArray(t)){for(var e=0,n=t.length;e=b){if(n&&e.op==="add"&&y>h.length)throw new dt("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",s,e,t);var l=Kc[e.op].call(e,h,y,t);if(l.test===!1)throw new dt("Test operation failed","TEST_OPERATION_FAILED",s,e,t);return l}}else if(y&&y.indexOf("~")!=-1&&(y=Ms(y)),p>=b){var l=Un[e.op].call(e,h,y,t);if(l.test===!1)throw new dt("Test operation failed","TEST_OPERATION_FAILED",s,e,t);return l}h=h[y]}}}function ci(t,e,n,r,i){if(r===void 0&&(r=!0),i===void 0&&(i=!0),n&&!Array.isArray(e))throw new dt("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");r||(t=Pt(t));for(var s=new Array(e.length),l=0,c=e.length;l0)throw new dt('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",e,t,n);if((t.op==="move"||t.op==="copy")&&typeof t.from!="string")throw new dt("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",e,t,n);if((t.op==="add"||t.op==="replace"||t.op==="test")&&t.value===void 0)throw new dt("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",e,t,n);if((t.op==="add"||t.op==="replace"||t.op==="test")&&Gr(t.value))throw new dt("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",e,t,n);if(n){if(t.op=="add"){var i=t.path.split("/").length,s=r.split("/").length;if(i!==s+1&&i!==s)throw new dt("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",e,t,n)}else if(t.op==="replace"||t.op==="remove"||t.op==="_get"){if(t.path!==r)throw new dt("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",e,t,n)}else if(t.op==="move"||t.op==="copy"){var l={op:"_get",path:t.from,value:void 0},c=js([l],n);if(c&&c.name==="OPERATION_PATH_UNRESOLVABLE")throw new dt("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",e,t,n)}}}else throw new dt("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",e,t,n)}function js(t,e,n){try{if(!Array.isArray(t))throw new dt("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(e)ci(Pt(e),Pt(t),n||!0);else{n=n||mr;for(var r=0;r0&&(t.patches=[],t.callback&&t.callback(r)),r}function ui(t,e,n,r,i){if(e!==t){typeof e.toJSON=="function"&&(e=e.toJSON());for(var s=Wr(e),l=Wr(t),c=!1,a=l.length-1;a>=0;a--){var h=l[a],p=t[h];if(Jr(e,h)&&!(e[h]===void 0&&p!==void 0&&Array.isArray(e)===!1)){var b=e[h];typeof p=="object"&&p!=null&&typeof b=="object"&&b!=null?ui(p,b,n,r+"/"+En(h),i):p!==b&&(i&&n.push({op:"test",path:r+"/"+En(h),value:Pt(p)}),n.push({op:"replace",path:r+"/"+En(h),value:Pt(b)}))}else Array.isArray(t)===Array.isArray(e)?(i&&n.push({op:"test",path:r+"/"+En(h),value:Pt(p)}),n.push({op:"remove",path:r+"/"+En(h)}),c=!0):(i&&n.push({op:"test",path:r,value:t}),n.push({op:"replace",path:r,value:e}))}if(!(!c&&s.length==l.length))for(var a=0;a{this.wireStateReceived=!0,this.set(n)}),this.connector.on("receive_diff",n=>{this.wireStateReceived&&(ta(this.state,n),this.announceStateChange())})}field(e){return this.connector.connectionState.get(e)}},ra=class extends br{constructor(e){super({}),this.fields={},this.connector=e,this.connector.on("receive_state_field",({name:n,state:r})=>{this.get(n).set(r)})}get(e){return this.fields[e]||(this.fields[e]=new br),this.fields[e]}};Yt.util=Yn;const ia=700,fa=6e4,sa=1;let oa=class extends oi{constructor({endpoint:e,protocol:n,keypair:r=Uc(),rpcRequestTimeout:i,verbose:s=!1,tag:l,log:c=console.log,autoDecommission:a=!1,dummy:h}={}){super(),this.protocol=n,this.log=c;const{privateKey:p,publicKey:b}=jc(r);this.clientPrivateKey=p,this.clientPublicKey=b,this.clientPublicKeyHex=_r(b),this.rpcClient=new Ic(this,i),this.endpoint=e,this.verbose=s,this.tag=l,this.autoDecommission=a,this.sentCount=0,this.receivedCount=0,this.successfulConnectsCount=0,h||(this.state=new na(this),this.connectionState=new ra(this)),this.connected=new br,this.delayedAdjustConnectionStatus(),s&&Fe.green(this.log,`Connector ${this.endpoint} created`),this.decommissionCheckCounter=0,this.lastPongReceivedAt=Date.now(),this.on("pong",()=>{this.lastPongReceivedAt=Date.now()})}delayedAdjustConnectionStatus(){setTimeout(()=>{this.connected.get()==null&&this.connected.set(!1)},ia)}send(e){_c({data:e,connector:this}),this.sentCount+=1}signal(e,n){this.connected.get()?this.send({signal:e,data:n}):Fe.write(this.log,"Warning: trying to send signal over disconnected connector, this should be prevented by GUI")}userAction({action:e,scope:n,payload:r}){this.signal("__action",{action:e,scope:n,payload:r})}on(e,n){e=="ready"&&this.isReady()&&n(),super.on(e,n)}getSharedSecret(){return this.sharedSecret?_r(this.sharedSecret):void 0}wireReceive({jsonData:e,encryptedData:n,rawMessage:r}){Ns({jsonData:e,encryptedData:n,rawMessage:r,connector:this}),this.receivedCount+=1}field(e){return this.connectionState.get(e)}isReady(){return this.ready}closed(){return!this.transportConnected}connectStatus(e){if(e){this.sentCount=0,this.receivedCount=0,this.transportConnected=!0,this.successfulConnectsCount+=1,this.verbose&&Fe.white(this.log,`✓ Connector ${this.endpoint} connected (${this.successfulConnectsCount} total reconnects)`);const n=this.connection.websocket.__id;vc({connector:this,afterFirstStep:({sharedSecret:i,remotePubkeyHex:s})=>{this.sharedSecret=i,this._remotePubkeyHex=s}}).then(()=>{this.connectedAt=Date.now(),this.connected.set(!0),this.ready=!0,this.emit("ready")}).catch(i=>{this.connection.websocket.__id==n&&this.connection.websocket.readyState==sa&&i.code==Ft.TIMEOUT&&(Fe.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] handshake error: "${i.message}"`),Fe.write(this.log,`${this.endpoint} Connector dropping stale websocket after handshake error`),this.connection.terminate()),i.code!=Ft.TIMEOUT&&Fe.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] on:ready error: "${i.stack}" — (will not try to reconnect, fix the error and reload this gui)`)})}else{let n;this.transportConnected&&(n=!0),this.transportConnected==null&&Fe.write(this.log,`${this.endpoint} Connector was not able to connect at first try`),this.transportConnected=!1,this.ready=!1,this.sharedSecret=void 0,delete this.connectedAt,n&&(this.emit("disconnect"),e==null&&this.delayedAdjustConnectionStatus(),this.connected.set(e))}}checkForDecommission(){this.autoDecommission&&(this.decommissionCheckRequestedAt&&Date.now()-this.decommissionCheckRequestedAt>3e3&&(this.decommissionCheckCounter=0),this.decommissionCheckRequestedAt=Date.now(),this.decommissionCheckCounter+=1,this.decommissionCheckCounter>12&&Date.now()-this.lastPongReceivedAt>fa&&(Fe.write(this.log,`Decommissioning connector ${this.endpoint} (long inactive)`),this.decommission(),this.emit("decommission")))}decommission(){this.decommissioned=!0}remoteObject(e){return{call:(n,r=[])=>this.rpcClient.remoteObject(e).call(n,rc(r))}}attachObject(e,n){new Mc({serversideChannel:this,serverMethods:n,methodPrefix:e})}clientPubkey(){return this.clientPublicKeyHex}remotePubkeyHex(){return this._remotePubkeyHex}remoteAddress(){return this.endpoint}};const pf=typeof window<"u";function la({endpoint:t,host:e,port:n}){if(pf&&t&&t.startsWith("/")&&(t=`${window.location.protocol.includes("s")?"wss":"ws"}://${window.location.host}${t}`),!t)if(pf){e=e||window.location.hostname;const r=window.location.protocol.includes("s")?"wss":"ws";t=`${r}://${e}`,r=="wss"?t=`${r}://${e}/ws`:n?t=`${t}:${n}`:window.location.port&&(t=`${t}:${window.location.port}`)}else{if(!n)throw new Error(`Connectome determineEndpoint: No websocket port provided for ${e}`);t=`ws://${e||"localhost"}:${n}`}return t}const hn=typeof window<"u",ca=0,Ls=1,aa=1e3,ua=3,da=5;function sr(t,e,n){hn?n.addEventListener(t,e):n.on(t,e)}function Vn(t,e,n){hn?n.removeEventListener(t,e):n.off(t,e)}function ha({endpoint:t,host:e,port:n,protocol:r,keypair:i,remotePubkey:s,rpcRequestTimeout:l,autoDecommission:c,log:a,verbose:h,tag:p,dummy:b},{WebSocket:m}){t=la({endpoint:t,host:e,port:n});const y=new oa({endpoint:t,protocol:r,rpcRequestTimeout:l,keypair:i,verbose:h,tag:p,log:a,autoDecommission:c,dummy:b}),E=()=>{pa({connector:y,endpoint:t},{WebSocket:m,reconnect:E,log:a,verbose:h})};y.connection={terminate(){this.websocket._removeAllCallbacks(),this.websocket.__closed=!0,this.websocket.close(),y.connectStatus(!1),E()},isOpen(){return this.websocket.readyState==Ls&&!this.websocket.__closed},endpoint:t,checkTicker:0};const x=()=>{y.decommissioned||(_a({connector:y,reconnect:E,log:a}),setTimeout(x,aa))};return setTimeout(x,10),y}function _a({connector:t,reconnect:e,log:n}){const r=t.connection;if(va(r)||t.decommissioned){t.decommissioned?(Fe.yellow(n,`${t.endpoint} Connection decommisioned, closing websocket #${r.websocket.__id}, will not retry again `),zs(t)):(t.emit("inactive_connection"),Fe.yellow(n,`${t.endpoint} ✖ Terminated inactive connection #${r.websocket.__id}`)),r.terminate();return}Bs(r)?r.websocket.send("ping"):(t.connected==null&&(Fe.write(n,`${t.endpoint} Setting connector status to FALSE because connector.connected is undefined`),t.connectStatus(!1)),e()),r.checkTicker+=1}function pa({connector:t,endpoint:e},{WebSocket:n,reconnect:r,log:i,verbose:s}){const l=t.connection;if(t.checkForDecommission(),t.decommissioned){zs(t);return}const c=Math.round(10**5*Math.random()).toString();if(l.currentlyTryingWS&&l.currentlyTryingWS.readyState==ca){if(l.currentlyTryingWS._waitForConnectCounter{});const h=()=>{t.decommissioned||((s||hn)&&Fe.write(i,`${e} Websocket #${c} open`),l.currentlyTryingWS=null,l.checkTicker=0,ba({ws:a,connector:t,openCallback:h,reconnect:r},{log:i,verbose:s}),l.websocket=a,t.connectStatus(!0))};a._removeAllCallbacks=()=>{Vn("open",h,a)},sr("open",h,a)}function ba({ws:t,connector:e,openCallback:n,reconnect:r},{log:i,verbose:s}){const l=e.connection,c=p=>{const b=`${e.endpoint} Websocket error`;console.log(b),console.log(p)},a=()=>{if(t.__closed=!0,Fe.blue(i,`${e.endpoint} ✖ Connection #${t.__id} [ ${e.protocol} ] closed`),e.decommissioned){e.connectStatus(!1);return}e.connectStatus(void 0),r()},h=p=>{if(e.decommissioned)return;l.checkTicker=0;const b=hn?p.data:p;if(t.__closed)return;if(b=="pong"){e.emit("pong");return}let m;try{m=JSON.parse(b)}catch{}if(m)e.wireReceive({jsonData:m,rawMessage:b});else{const y=hn?new Uint8Array(b):b;e.wireReceive({encryptedData:y})}};t._removeAllCallbacks=()=>{Vn("error",c,t),Vn("close",a,t),Vn("message",h,t),Vn("open",n,t)},sr("error",c,t),sr("close",a,t),sr("message",h,t)}function zs(t){const e=t.connection;e.currentlyTryingWS&&(e.currentlyTryingWS._removeAllCallbacks(),e.currentlyTryingWS.__closed=!0,e.currentlyTryingWS.close(),e.currentlyTryingWS=null),e.websocket&&(e.websocket._removeAllCallbacks(),e.websocket.__closed=!0,e.websocket.close(),e.websocket=null),t.connectStatus(!1)}function Bs(t){return t.websocket&&t.websocket.readyState==Ls&&!t.websocket.__closed}function va(t){return Bs(t)&&t.checkTicker>ua}function di(t){return t.log=t.log||console.log,ha(t,{WebSocket})}function bf(t,e,n){const r=t.slice();return r[62]=e[n],r}function ma(t){let e,n=(t[0].network||"")+"",r;return{c(){e=M("h3"),r=K(n),U(e,"class","svelte-zpx74i")},m(i,s){T(i,e,s),k(e,r)},p(i,s){s[0]&1&&n!==(n=(i[0].network||"")+"")&&De(r,n)},i:me,o:me,d(i){i&&C(e)}}}function ya(t){let e,n,r,i,s;function l(h,p){return h[10]==0?wa:ga}let c=l(t),a=c(t);return{c(){e=M("h3"),n=K(`Vhod + `),r=M("span"),i=K(`— odpiranje + `),a.c(),U(r,"class","svelte-zpx74i"),U(e,"class","countdown svelte-zpx74i")},m(h,p){T(h,e,p),k(e,n),k(e,r),k(r,i),a.m(r,null)},p(h,p){c===(c=l(h))&&a?a.p(h,p):(a.d(1),a=c(h),a&&(a.c(),a.m(r,null)))},i(h){s||Tt(()=>{s=pn(r,vs,{}),s.start()})},o:me,d(h){h&&C(e),a.d()}}}function ga(t){let e,n,r;return{c(){e=K("čez "),n=K(t[10]),r=K("s")},m(i,s){T(i,e,s),T(i,n,s),T(i,r,s)},p(i,s){s[0]&1024&&De(n,i[10])},d(i){i&&C(e),i&&C(n),i&&C(r)}}}function wa(t){let e;return{c(){e=K("ZDAJ")},m(n,r){T(n,e,r)},p:me,d(n){n&&C(e)}}}function vf(t){let e,n,r,i,s,l,c,a,h,p,b,m,y,E;return{c(){e=M("div"),n=M("button"),r=K("Zakasnitev +10s"),s=Y(),l=M("button"),c=K("ODPRI ZDAJ"),h=Y(),p=M("button"),b=K("Prekliči"),U(n,"class","delayed_open svelte-zpx74i"),n.disabled=i=!t[11]||t[10]==0,U(l,"class","open svelte-zpx74i"),l.disabled=a=!t[11]||t[10]==0,U(p,"class","cancel svelte-zpx74i"),p.disabled=m=!t[11]||t[10]==0,U(e,"class","entry_door_options svelte-zpx74i")},m(x,$){T(x,e,$),k(e,n),k(n,r),k(e,s),k(e,l),k(l,c),k(e,h),k(e,p),k(p,b),y||(E=[Ae(n,"click",t[32]),Ae(l,"click",t[33]),Ae(p,"click",t[34])],y=!0)},p(x,$){$[0]&3072&&i!==(i=!x[11]||x[10]==0)&&(n.disabled=i),$[0]&3072&&a!==(a=!x[11]||x[10]==0)&&(l.disabled=a),$[0]&3072&&m!==(m=!x[11]||x[10]==0)&&(p.disabled=m)},d(x){x&&C(e),y=!1,yt(E)}}}function xa(t){var Lt;let e,n,r,i,s,l,c,a,h,p,b,m,y,E,x,$=t[5]&&((Lt=t[1])==null?void 0:Lt.find(t[29])),A,B,ee,z,j,q,ue,ae,be,$e,rt,We,ut,Pe,pt,Ze,gt,at,Ee,Ye,Mt,Rt,Je,tt,xe,Xe,Nt,Wt,bt,Ct,Ut,Ot,tn;function bn(re,Re){return re[3]?Ea:Sa}let nn=bn(t),Et=nn(t);function rn(re,Re){return re[4]?Oa:ka}let jt=rn(t),nt=jt(t),ft=$&&yf(t),st=t[11]&&t[7]!=null&&Ef(t);return{c(){e=M("h3"),e.textContent="Ograja — parkirišče",n=Y(),r=M("div"),i=M("button"),s=K("ODPRI"),c=Y(),a=M("button"),h=K("OSEBNI PREHOD"),b=Y(),Et.c(),m=Y(),y=M("h3"),y.textContent="Dnevna TV",E=Y(),nt.c(),x=Y(),ft&&ft.c(),A=Y(),B=M("h3"),B.textContent="Luč kabinet",ee=Y(),z=M("button"),j=K("PRIŽGI LUČ"),ue=Y(),ae=M("button"),be=K("🛑 UGASNI"),rt=Y(),We=M("button"),ut=K("⏱️"),pt=Y(),st&&st.c(),Ze=Y(),gt=M("h3"),gt.textContent="Alarm",at=Y(),Ee=M("button"),Ye=K("VKLOPI"),Rt=Y(),Je=M("button"),tt=K("IZKLOPI"),Xe=Y(),Nt=M("h3"),Nt.textContent="Dodatne možnosti",Wt=Y(),bt=M("button"),Ct=K("— ZAPRI VSE —"),U(e,"class","svelte-zpx74i"),i.disabled=l=!t[11]||t[9]||t[8],U(i,"class","svelte-zpx74i"),U(a,"class","personal_entry svelte-zpx74i"),a.disabled=p=!t[11]||t[9],le(a,"personal_entry_in_progress",t[8]),U(r,"class","parking_door_options svelte-zpx74i"),U(y,"class","svelte-zpx74i"),U(B,"class","svelte-zpx74i"),z.disabled=q=!t[11],U(z,"class","svelte-zpx74i"),U(ae,"class","turn_off svelte-zpx74i"),ae.disabled=$e=!t[11],We.disabled=Pe=!t[11],U(We,"class","svelte-zpx74i"),U(gt,"class","svelte-zpx74i"),Ee.disabled=Mt=!t[11],U(Ee,"class","svelte-zpx74i"),Je.disabled=xe=!t[11],U(Je,"class","svelte-zpx74i"),U(Nt,"class","close_options svelte-zpx74i"),U(bt,"class","close_options svelte-zpx74i"),bt.disabled=Ut=!t[11]},m(re,Re){T(re,e,Re),T(re,n,Re),T(re,r,Re),k(r,i),k(i,s),k(r,c),k(r,a),k(a,h),k(r,b),Et.m(r,null),T(re,m,Re),T(re,y,Re),T(re,E,Re),nt.m(re,Re),T(re,x,Re),ft&&ft.m(re,Re),T(re,A,Re),T(re,B,Re),T(re,ee,Re),T(re,z,Re),k(z,j),T(re,ue,Re),T(re,ae,Re),k(ae,be),T(re,rt,Re),T(re,We,Re),k(We,ut),T(re,pt,Re),st&&st.m(re,Re),T(re,Ze,Re),T(re,gt,Re),T(re,at,Re),T(re,Ee,Re),k(Ee,Ye),T(re,Rt,Re),T(re,Je,Re),k(Je,tt),T(re,Xe,Re),T(re,Nt,Re),T(re,Wt,Re),T(re,bt,Re),k(bt,Ct),Ot||(tn=[Ae(i,"click",t[36]),Ae(a,"click",t[37]),Ae(z,"click",t[55]),Ae(ae,"click",t[56]),Ae(We,"click",t[57]),Ae(Ee,"click",t[58]),Ae(Je,"click",t[59]),Ae(bt,"click",t[60])],Ot=!0)},p(re,Re){var zt;Re[0]&2816&&l!==(l=!re[11]||re[9]||re[8])&&(i.disabled=l),Re[0]&2560&&p!==(p=!re[11]||re[9])&&(a.disabled=p),Re[0]&256&&le(a,"personal_entry_in_progress",re[8]),nn===(nn=bn(re))&&Et?Et.p(re,Re):(Et.d(1),Et=nn(re),Et&&(Et.c(),Et.m(r,null))),jt===(jt=rn(re))&&nt?nt.p(re,Re):(nt.d(1),nt=jt(re),nt&&(nt.c(),nt.m(x.parentNode,x))),Re[0]&34&&($=re[5]&&((zt=re[1])==null?void 0:zt.find(re[29]))),$?ft?ft.p(re,Re):(ft=yf(re),ft.c(),ft.m(A.parentNode,A)):ft&&(ft.d(1),ft=null),Re[0]&2048&&q!==(q=!re[11])&&(z.disabled=q),Re[0]&2048&&$e!==($e=!re[11])&&(ae.disabled=$e),Re[0]&2048&&Pe!==(Pe=!re[11])&&(We.disabled=Pe),re[11]&&re[7]!=null?st?(st.p(re,Re),Re[0]&2176&&te(st,1)):(st=Ef(re),st.c(),te(st,1),st.m(Ze.parentNode,Ze)):st&&(st.d(1),st=null),Re[0]&2048&&Mt!==(Mt=!re[11])&&(Ee.disabled=Mt),Re[0]&2048&&xe!==(xe=!re[11])&&(Je.disabled=xe),Re[0]&2048&&Ut!==(Ut=!re[11])&&(bt.disabled=Ut)},i(re){te(st)},o:me,d(re){re&&C(e),re&&C(n),re&&C(r),Et.d(),re&&C(m),re&&C(y),re&&C(E),nt.d(re),re&&C(x),ft&&ft.d(re),re&&C(A),re&&C(B),re&&C(ee),re&&C(z),re&&C(ue),re&&C(ae),re&&C(rt),re&&C(We),re&&C(pt),st&&st.d(re),re&&C(Ze),re&&C(gt),re&&C(at),re&&C(Ee),re&&C(Rt),re&&C(Je),re&&C(Xe),re&&C(Nt),re&&C(Wt),re&&C(bt),Ot=!1,yt(tn)}}}function Aa(t){let e,n,r,i,s=t[12]&&Sf(t);return{c(){s&&s.c(),e=Y(),n=M("button"),n.textContent="Več možnosti",U(n,"class","show_more_options svelte-zpx74i")},m(l,c){s&&s.m(l,c),T(l,e,c),T(l,n,c),r||(i=Ae(n,"click",t[35]),r=!0)},p(l,c){l[12]?s?s.p(l,c):(s=Sf(l),s.c(),s.m(e.parentNode,e)):s&&(s.d(1),s=null)},i:me,o:me,d(l){s&&s.d(l),l&&C(e),l&&C(n),r=!1,i()}}}function Ea(t){let e,n,r,i,s,l,c,a,h,p,b,m,y,E=t[9]&&mf();return{c(){e=M("h4"),e.textContent="— Odpri in ohrani —",n=Y(),r=M("button"),i=K("ODPRI IN OHRANI"),l=Y(),c=M("button"),a=K("ZAPRI OGRAJO"),p=Y(),E&&E.c(),b=_t(),U(e,"class","suboption svelte-zpx74i"),U(r,"class","fence_keep_open svelte-zpx74i"),r.disabled=s=!t[11]||t[8],le(r,"keep_open_in_progress",t[9]),U(c,"class","close_fence svelte-zpx74i"),c.disabled=h=!t[11]||t[9]||t[8]},m(x,$){T(x,e,$),T(x,n,$),T(x,r,$),k(r,i),T(x,l,$),T(x,c,$),k(c,a),T(x,p,$),E&&E.m(x,$),T(x,b,$),m||(y=[Ae(r,"click",t[39]),Ae(c,"click",t[40])],m=!0)},p(x,$){$[0]&2304&&s!==(s=!x[11]||x[8])&&(r.disabled=s),$[0]&512&&le(r,"keep_open_in_progress",x[9]),$[0]&2816&&h!==(h=!x[11]||x[9]||x[8])&&(c.disabled=h),x[9]?E||(E=mf(),E.c(),E.m(b.parentNode,b)):E&&(E.d(1),E=null)},d(x){x&&C(e),x&&C(n),x&&C(r),x&&C(l),x&&C(c),x&&C(p),E&&E.d(x),x&&C(b),m=!1,yt(y)}}}function Sa(t){let e,n,r;return{c(){e=M("button"),e.textContent="Več",U(e,"class","show_more_options svelte-zpx74i")},m(i,s){T(i,e,s),n||(r=Ae(e,"click",t[38]),n=!0)},p:me,d(i){i&&C(e),n=!1,r()}}}function mf(t){let e;return{c(){e=M("h4"),e.textContent="[ ⚠️ v zadnji sekundi odpiranja ne sme biti prehoda, sicer vrata ne bodo ostala odprta ]",U(e,"class","suboption warn svelte-zpx74i")},m(n,r){T(n,e,r)},d(n){n&&C(e)}}}function Oa(t){let e,n,r,i,s,l,c,a,h,p,b,m,y,E,x=(t[13]||"")+"",$,A,B,ee,z,j,q,ue,ae,be,$e,rt,We,ut,Pe,pt,Ze,gt,at;return{c(){e=M("button"),n=K("TV"),i=Y(),s=M("button"),l=K("DMT"),a=Y(),h=M("button"),p=K("🛑 UGASNI"),m=Y(),y=M("h4"),y.textContent="— TV glasnost —",E=Y(),$=K(x),A=Y(),B=M("button"),ee=K("VOL↑"),j=Y(),q=M("button"),ue=K("VOL ↓"),be=Y(),$e=M("button"),rt=K("PRIVZETO"),ut=Y(),Pe=M("button"),pt=K("🔇"),e.disabled=r=!t[11],U(e,"class","svelte-zpx74i"),s.disabled=c=!t[11],U(s,"class","svelte-zpx74i"),U(h,"class","turn_off svelte-zpx74i"),h.disabled=b=!t[11],U(y,"class","suboption volume svelte-zpx74i"),U(B,"class","volume svelte-zpx74i"),B.disabled=z=!t[11],U(q,"class","volume svelte-zpx74i"),q.disabled=ae=!t[11],U($e,"class","volume svelte-zpx74i"),$e.disabled=We=!t[11],U(Pe,"class","volume svelte-zpx74i"),Pe.disabled=Ze=!t[11]},m(Ee,Ye){T(Ee,e,Ye),k(e,n),T(Ee,i,Ye),T(Ee,s,Ye),k(s,l),T(Ee,a,Ye),T(Ee,h,Ye),k(h,p),T(Ee,m,Ye),T(Ee,y,Ye),T(Ee,E,Ye),T(Ee,$,Ye),T(Ee,A,Ye),T(Ee,B,Ye),k(B,ee),T(Ee,j,Ye),T(Ee,q,Ye),k(q,ue),T(Ee,be,Ye),T(Ee,$e,Ye),k($e,rt),T(Ee,ut,Ye),T(Ee,Pe,Ye),k(Pe,pt),gt||(at=[Ae(e,"click",t[42]),Ae(s,"click",t[43]),Ae(h,"click",t[44]),Ae(B,"click",t[45]),Ae(q,"click",t[46]),Ae($e,"click",t[47]),Ae(Pe,"click",t[48])],gt=!0)},p(Ee,Ye){Ye[0]&2048&&r!==(r=!Ee[11])&&(e.disabled=r),Ye[0]&2048&&c!==(c=!Ee[11])&&(s.disabled=c),Ye[0]&2048&&b!==(b=!Ee[11])&&(h.disabled=b),Ye[0]&8192&&x!==(x=(Ee[13]||"")+"")&&De($,x),Ye[0]&2048&&z!==(z=!Ee[11])&&(B.disabled=z),Ye[0]&2048&&ae!==(ae=!Ee[11])&&(q.disabled=ae),Ye[0]&2048&&We!==(We=!Ee[11])&&($e.disabled=We),Ye[0]&2048&&Ze!==(Ze=!Ee[11])&&(Pe.disabled=Ze)},d(Ee){Ee&&C(e),Ee&&C(i),Ee&&C(s),Ee&&C(a),Ee&&C(h),Ee&&C(m),Ee&&C(y),Ee&&C(E),Ee&&C($),Ee&&C(A),Ee&&C(B),Ee&&C(j),Ee&&C(q),Ee&&C(be),Ee&&C($e),Ee&&C(ut),Ee&&C(Pe),gt=!1,yt(at)}}}function ka(t){let e,n,r;return{c(){e=M("button"),e.textContent="Možnosti TV",U(e,"class","show_more_options svelte-zpx74i")},m(i,s){T(i,e,s),n||(r=Ae(e,"click",t[41]),n=!0)},p:me,d(i){i&&C(e),n=!1,r()}}}function yf(t){let e,n,r,i=t[16],s=[];for(let l=0;l{i=pn(r,vs,{}),i.start()})},o:me,d(a){a&&C(e),c.d()}}}function Da(t){let e,n;return{c(){e=K("čez "),n=K(t[6])},m(r,i){T(r,e,i),T(r,n,i)},p(r,i){i[0]&64&&De(n,r[6])},d(r){r&&C(e),r&&C(n)}}}function $a(t){let e;return{c(){e=K("ZDAJ")},m(n,r){T(n,e,r)},p:me,d(n){n&&C(e)}}}function Sf(t){let e,n,r=(t[0].network||"")+"",i;return{c(){e=M("h3"),n=K("Več možnosti - "),i=K(r),U(e,"class","svelte-zpx74i")},m(s,l){T(s,e,l),k(e,n),k(e,i)},p(s,l){l[0]&1&&r!==(r=(s[0].network||"")+"")&&De(i,r)},d(s){s&&C(e)}}}function Pa(t){let e,n,r,i,s,l,c,a,h;function p(A,B){return A[11]&&A[12]?ya:ma}let b=p(t),m=b(t),y=t[12]&&vf(t);function E(A,B){return A[2]?xa:Aa}let x=E(t),$=x(t);return{c(){e=M("div"),m.c(),n=Y(),r=M("button"),i=K("ODPIRANJE VHODNIH VRAT"),l=Y(),y&&y.c(),c=Y(),$.c(),U(r,"class","open_door_show_options svelte-zpx74i"),r.disabled=s=!t[11],le(r,"invisible",t[12]),U(e,"class","options svelte-zpx74i")},m(A,B){T(A,e,B),m.m(e,null),k(e,n),k(e,r),k(r,i),k(e,l),y&&y.m(e,null),k(e,c),$.m(e,null),a||(h=Ae(r,"click",t[31]),a=!0)},p(A,B){b===(b=p(A))&&m?m.p(A,B):(m.d(1),m=b(A),m&&(m.c(),te(m,1),m.m(e,n))),B[0]&2048&&s!==(s=!A[11])&&(r.disabled=s),B[0]&4096&&le(r,"invisible",A[12]),A[12]?y?y.p(A,B):(y=vf(A),y.c(),y.m(e,c)):y&&(y.d(1),y=null),x===(x=E(A))&&$?$.p(A,B):($.d(1),$=x(A),$&&($.c(),te($,1),$.m(e,null)))},i(A){te(m),te($)},o:me,d(A){A&&C(e),m.d(),y&&y.d(),$.d(),a=!1,h()}}}const Ia="192.168.0.20",Ma=7780,Ua="david/home";function ja(t,e,n){let r,i,s,l,c,a,h,p,b,m,{localDevice:y}=e,{nearbyDevices:E}=e;const x=di({host:Ia,port:Ma,protocol:Ua}),{connected:$,state:A}=x;mt(t,$,Ie=>n(11,p=Ie)),mt(t,A,Ie=>n(28,h=Ie));const B=["david-room","ela-room"],ee=x.field("tvVolume");mt(t,ee,Ie=>n(13,m=Ie));const z=Po(A,Ie=>{var et;return((et=Ie.entryDoor)==null?void 0:et.counter)!=null});mt(t,z,Ie=>n(12,b=Ie));function j(Ie,et){x.userAction({action:Ie,payload:et,scope:"tv"})}function q(Ie,et){x.userAction({action:Ie,payload:et,scope:"alarm"})}function ue(Ie,et){x.userAction({action:Ie,payload:et,scope:"entry-door"})}function ae(Ie,et){x.userAction({action:Ie,payload:et,scope:"fence-door"})}function be(Ie,et){x.userAction({action:Ie,payload:et,scope:"light-lab"})}function $e(Ie,et){x.userAction({action:Ie,scope:"nearbyDevices",payload:{deviceName:et}})}function rt(Ie,et){x.userAction({action:Ie,scope:"nearbyDevices",payload:{deviceName:et,delay:!0}})}function We(Ie,et){x.userAction({action:Ie,scope:"nearbyDevices",payload:{deviceName:et,cancel:!0}})}let ut=y.deviceName=="turbine",Pe,pt;function Ze(){n(2,ut=!1),n(4,pt=!1),n(3,Pe=!1)}const gt=({deviceName:Ie})=>B.includes(Ie),at=(Ie,et)=>et.deviceName==Ie,Ee=()=>{ue("delayed-open")},Ye=()=>{ue("add-delay")},Mt=()=>{ue("open")},Rt=()=>{ue("cancel-opening")},Je=()=>{n(2,ut=!0)},tt=()=>{ae("move")},xe=()=>{ae("personal-entry")},Xe=()=>{n(3,Pe=!0)},Nt=()=>{ae("keep-open")},Wt=()=>{ae("close")},bt=()=>{n(4,pt=!0),j("vol-report")},Ct=()=>{j("hdmi1")},Ut=()=>{j("hdmi2")},Ot=()=>{j("off")},tn=()=>{j("vol-up")},bn=()=>{j("vol-down")},nn=()=>{j("vol-default")},Et=()=>{j("mute")},rn=(Ie,et)=>et.deviceName==Ie,jt=Ie=>{rt("kid_sleep",Ie)},nt=(Ie,et)=>et.deviceName==Ie,ft=Ie=>{$e("kid_sleep",Ie)},st=Ie=>{rt("kid_sleep",Ie)},Lt=Ie=>{We("kid_sleep",Ie)},re=()=>{be("on")},Re=()=>{be("off")},zt=()=>{be("off-delay")},Zt=()=>{q("enable")},on=()=>{q("disable")},ln=()=>{Ze(),window.scrollTo({top:0,behavior:"smooth"})};return t.$$set=Ie=>{"localDevice"in Ie&&n(0,y=Ie.localDevice),"nearbyDevices"in Ie&&n(1,E=Ie.nearbyDevices)},t.$$.update=()=>{var Ie,et,fn,sn,Bt;t.$$.dirty[0]&268435456&&n(10,r=(Ie=h.entryDoor)==null?void 0:Ie.counter),t.$$.dirty[0]&268435456&&n(9,i=(et=h.parkingDoor)==null?void 0:et.keepOpenInProgress),t.$$.dirty[0]&268435456&&n(8,s=(fn=h.parkingDoor)==null?void 0:fn.personalEntryInProgress),t.$$.dirty[0]&268435456&&n(7,l=(sn=h.lights)==null?void 0:sn.labLightOffDelay),t.$$.dirty[0]&268435456&&n(6,c=(Bt=h.lights)==null?void 0:Bt.labLightOffDelayStr),t.$$.dirty[0]&268435456&&n(5,a=h.kidSleepStarter)},[y,E,ut,Pe,pt,a,c,l,s,i,r,p,b,m,$,A,B,ee,z,j,q,ue,ae,be,$e,rt,We,Ze,h,gt,at,Ee,Ye,Mt,Rt,Je,tt,xe,Xe,Nt,Wt,bt,Ct,Ut,Ot,tn,bn,nn,Et,rn,jt,nt,ft,st,Lt,re,Re,zt,Zt,on,ln]}class La extends ct{constructor(e){super(),lt(this,e,ja,Pa,ot,{localDevice:0,nearbyDevices:1},null,[-1,-1,-1])}}function Of(t,e,n){const r=t.slice();return r[18]=e[n],r}function kf(t){let e,n,r,i=t[5],s=[];for(let l=0;ln(2,s=j)),mt(t,p,j=>n(10,i=j));const b=["kids","eclipse","turbine"];function m(j,q){a.userAction({action:j,scope:"nearbyDevices",payload:{deviceName:q}})}function y(j,q){a.userAction({action:j,scope:"nearbyDevices",payload:{deviceName:q,delay:!0}})}function E(j,q){a.userAction({action:j,scope:"nearbyDevices",payload:{deviceName:q,cancel:!0}})}const x=({deviceName:j})=>b.includes(j),$=(j,q)=>q.deviceName==j,A=j=>{y("sleep",j)},B=j=>{m("sleep",j)},ee=j=>{y("sleep",j)},z=j=>{E("sleep",j)};return t.$$set=j=>{"localDevice"in j&&n(9,l=j.localDevice),"nearbyDevices"in j&&n(0,c=j.nearbyDevices)},t.$$.update=()=>{t.$$.dirty&1024&&n(1,r=i.deviceSleepStarter)},[c,r,s,h,p,b,m,y,E,l,i,x,$,A,B,ee,z]}class Za extends ct{constructor(e){super(),lt(this,e,Wa,Ya,ot,{localDevice:9,nearbyDevices:0})}}function Ga(t){let e,n=Df(t[2])+"",r,i,s=t[1].replace("blinds","")+"",l,c,a,h;return{c(){e=M("button"),r=K(n),i=Y(),l=K(s),e.disabled=c=!t[4],U(e,"class","svelte-o08zau"),le(e,"moving",t[3]&&t[3][Kt(t[0],t[1],t[2])]&&t[3][Kt(t[0],t[1],t[2])].blindsStatus=="moving"),le(e,"present",t[3]&&t[3][Kt(t[0],t[1],t[2])]&&t[3][Kt(t[0],t[1],t[2])].present),le(e,"halted",t[3]&&t[3][Kt(t[0],t[1],t[2])]&&t[3][Kt(t[0],t[1],t[2])].halted),le(e,"disconnected",t[4]==!1)},m(p,b){T(p,e,b),k(e,r),k(e,i),k(e,l),a||(h=Ae(e,"click",t[10]),a=!0)},p(p,[b]){b&4&&n!==(n=Df(p[2])+"")&&De(r,n),b&2&&s!==(s=p[1].replace("blinds","")+"")&&De(l,s),b&16&&c!==(c=!p[4])&&(e.disabled=c),b&15&&le(e,"moving",p[3]&&p[3][Kt(p[0],p[1],p[2])]&&p[3][Kt(p[0],p[1],p[2])].blindsStatus=="moving"),b&15&&le(e,"present",p[3]&&p[3][Kt(p[0],p[1],p[2])]&&p[3][Kt(p[0],p[1],p[2])].present),b&15&&le(e,"halted",p[3]&&p[3][Kt(p[0],p[1],p[2])]&&p[3][Kt(p[0],p[1],p[2])].halted),b&16&&le(e,"disconnected",p[4]==!1)},i:me,o:me,d(p){p&&C(e),a=!1,h()}}}function Df(t){return t=="up"?"▲":"▼"}function Kt(t,e,n){return`${t}-${e}-${n}`}function Va(t,e,n){let r,i,s,{connector:l}=e,{placeId:c}=e,{blindsId:a}=e,{blindsDirection:h}=e;const{state:p,connected:b}=l;mt(t,p,x=>n(9,i=x)),mt(t,b,x=>n(4,s=x));function m(x){l.userAction({action:"command",payload:x,scope:"blinds"})}function y(x,$,A){m({placeId:x,blindsId:$,blindsDirection:A,blindsAction:"move"})}const E=()=>y(c,a,h);return t.$$set=x=>{"connector"in x&&n(8,l=x.connector),"placeId"in x&&n(0,c=x.placeId),"blindsId"in x&&n(1,a=x.blindsId),"blindsDirection"in x&&n(2,h=x.blindsDirection)},t.$$.update=()=>{t.$$.dirty&512&&n(3,r=i)},[c,a,h,r,s,p,b,y,l,i,E]}class vt extends ct{constructor(e){super(),lt(this,e,Va,Ga,ot,{connector:8,placeId:0,blindsId:1,blindsDirection:2})}}function Qa(t){let e,n,r,i,s,l,c,a,h,p,b,m,y,E,x,$,A,B,ee,z,j;return s=new vt({props:{placeId:"ap1",blindsId:"blinds4",blindsDirection:"up",connector:t[1]}}),c=new vt({props:{placeId:"ap1",blindsId:"blinds3",blindsDirection:"up",connector:t[1]}}),h=new vt({props:{placeId:"ap1",blindsId:"blinds2",blindsDirection:"up",connector:t[1]}}),b=new vt({props:{placeId:"ap1",blindsId:"blinds1",blindsDirection:"up",connector:t[1]}}),E=new vt({props:{placeId:"ap1",blindsId:"blinds4",blindsDirection:"down",connector:t[1]}}),$=new vt({props:{placeId:"ap1",blindsId:"blinds3",blindsDirection:"down",connector:t[1]}}),B=new vt({props:{placeId:"ap1",blindsId:"blinds2",blindsDirection:"down",connector:t[1]}}),z=new vt({props:{placeId:"ap1",blindsId:"blinds1",blindsDirection:"down",connector:t[1]}}),{c(){e=M("div"),n=M("h2"),n.textContent="Rolete AP1",r=Y(),i=M("div"),Be(s.$$.fragment),l=Y(),Be(c.$$.fragment),a=K(` + — + `),Be(h.$$.fragment),p=Y(),Be(b.$$.fragment),m=Y(),y=M("div"),Be(E.$$.fragment),x=Y(),Be($.$$.fragment),A=K(` + — + `),Be(B.$$.fragment),ee=Y(),Be(z.$$.fragment),U(i,"class","iot section svelte-1kxggon"),U(y,"class","iot section svelte-1kxggon"),U(e,"class","blinds_ap1")},m(q,ue){T(q,e,ue),k(e,n),k(e,r),k(e,i),Le(s,i,null),k(i,l),Le(c,i,null),k(i,a),Le(h,i,null),k(i,p),Le(b,i,null),k(e,m),k(e,y),Le(E,y,null),k(y,x),Le($,y,null),k(y,A),Le(B,y,null),k(y,ee),Le(z,y,null),j=!0},p:me,i(q){j||(te(s.$$.fragment,q),te(c.$$.fragment,q),te(h.$$.fragment,q),te(b.$$.fragment,q),te(E.$$.fragment,q),te($.$$.fragment,q),te(B.$$.fragment,q),te(z.$$.fragment,q),j=!0)},o(q){ge(s.$$.fragment,q),ge(c.$$.fragment,q),ge(h.$$.fragment,q),ge(b.$$.fragment,q),ge(E.$$.fragment,q),ge($.$$.fragment,q),ge(B.$$.fragment,q),ge(z.$$.fragment,q),j=!1},d(q){q&&C(e),ze(s),ze(c),ze(h),ze(b),ze(E),ze($),ze(B),ze(z)}}}function Xa(t){let e,n,r,i,s,l,c,a,h,p,b,m,y,E,x,$,A,B,ee,z,j,q,ue,ae,be,$e,rt,We,ut;return s=new vt({props:{placeId:"ap2",blindsId:"blinds6",blindsDirection:"up",connector:t[1]}}),c=new vt({props:{placeId:"ap2",blindsId:"blinds5",blindsDirection:"up",connector:t[1]}}),h=new vt({props:{placeId:"ap2",blindsId:"blinds4",blindsDirection:"up",connector:t[1]}}),b=new vt({props:{placeId:"ap2",blindsId:"blinds3",blindsDirection:"up",connector:t[1]}}),y=new vt({props:{placeId:"ap2",blindsId:"blinds2",blindsDirection:"up",connector:t[1]}}),x=new vt({props:{placeId:"ap2",blindsId:"blinds1",blindsDirection:"up",connector:t[1]}}),B=new vt({props:{placeId:"ap2",blindsId:"blinds6",blindsDirection:"down",connector:t[1]}}),z=new vt({props:{placeId:"ap2",blindsId:"blinds5",blindsDirection:"down",connector:t[1]}}),q=new vt({props:{placeId:"ap2",blindsId:"blinds4",blindsDirection:"down",connector:t[1]}}),ae=new vt({props:{placeId:"ap2",blindsId:"blinds3",blindsDirection:"down",connector:t[1]}}),$e=new vt({props:{placeId:"ap2",blindsId:"blinds2",blindsDirection:"down",connector:t[1]}}),We=new vt({props:{placeId:"ap2",blindsId:"blinds1",blindsDirection:"down",connector:t[1]}}),{c(){e=M("div"),n=M("h2"),n.textContent="Rolete AP2",r=Y(),i=M("div"),Be(s.$$.fragment),l=Y(),Be(c.$$.fragment),a=K(` + — + `),Be(h.$$.fragment),p=Y(),Be(b.$$.fragment),m=K(` + — + `),Be(y.$$.fragment),E=Y(),Be(x.$$.fragment),$=Y(),A=M("div"),Be(B.$$.fragment),ee=Y(),Be(z.$$.fragment),j=K(` + — + `),Be(q.$$.fragment),ue=Y(),Be(ae.$$.fragment),be=K(` + — + `),Be($e.$$.fragment),rt=Y(),Be(We.$$.fragment),U(i,"class","iot section svelte-1kxggon"),U(A,"class","iot section svelte-1kxggon"),U(e,"class","blinds_ap2 svelte-1kxggon"),le(e,"visible",ru)},m(Pe,pt){T(Pe,e,pt),k(e,n),k(e,r),k(e,i),Le(s,i,null),k(i,l),Le(c,i,null),k(i,a),Le(h,i,null),k(i,p),Le(b,i,null),k(i,m),Le(y,i,null),k(i,E),Le(x,i,null),k(e,$),k(e,A),Le(B,A,null),k(A,ee),Le(z,A,null),k(A,j),Le(q,A,null),k(A,ue),Le(ae,A,null),k(A,be),Le($e,A,null),k(A,rt),Le(We,A,null),ut=!0},p:me,i(Pe){ut||(te(s.$$.fragment,Pe),te(c.$$.fragment,Pe),te(h.$$.fragment,Pe),te(b.$$.fragment,Pe),te(y.$$.fragment,Pe),te(x.$$.fragment,Pe),te(B.$$.fragment,Pe),te(z.$$.fragment,Pe),te(q.$$.fragment,Pe),te(ae.$$.fragment,Pe),te($e.$$.fragment,Pe),te(We.$$.fragment,Pe),ut=!0)},o(Pe){ge(s.$$.fragment,Pe),ge(c.$$.fragment,Pe),ge(h.$$.fragment,Pe),ge(b.$$.fragment,Pe),ge(y.$$.fragment,Pe),ge(x.$$.fragment,Pe),ge(B.$$.fragment,Pe),ge(z.$$.fragment,Pe),ge(q.$$.fragment,Pe),ge(ae.$$.fragment,Pe),ge($e.$$.fragment,Pe),ge(We.$$.fragment,Pe),ut=!1},d(Pe){Pe&&C(e),ze(s),ze(c),ze(h),ze(b),ze(y),ze(x),ze(B),ze(z),ze(q),ze(ae),ze($e),ze(We)}}}function eu(t){let e,n,r,i;const s=[Xa,Qa],l=[];function c(a,h){return a[0].deviceName=="tv-ap2"?0:1}return n=c(t),r=l[n]=s[n](t),{c(){e=M("main"),r.c(),U(e,"class","svelte-1kxggon")},m(a,h){T(a,e,h),l[n].m(e,null),i=!0},p(a,[h]){let p=n;n=c(a),n===p?l[n].p(a,h):(xt(),ge(l[p],1,1,()=>{l[p]=null}),At(),r=l[n],r?r.p(a,h):(r=l[n]=s[n](a),r.c()),te(r,1),r.m(e,null))},i(a){i||(te(r),i=!0)},o(a){ge(r),i=!1},d(a){a&&C(e),l[n].d()}}}const tu=7780,nu="david/blinds";let ru=!1;function iu(t,e,n){let{localDevice:r}=e;const i=di({port:tu,protocol:nu});return t.$$set=s=>{"localDevice"in s&&n(0,r=s.localDevice)},[r,i]}class fu extends ct{constructor(e){super(),lt(this,e,iu,eu,ot,{localDevice:0})}}function $f(t,e,n){const r=t.slice();return r[3]=e[n],r}function Pf(t){let e,n=t[1].slice(0,4),r=[];for(let i=0;i(s(),s=St(c,a=>n(2,i=a)),c);t.$$.on_destroy.push(()=>s());let{store:c}=e;return l(),t.$$set=a=>{"store"in a&&l(n(0,c=a.store))},t.$$.update=()=>{t.$$.dirty&4&&n(1,r=i.notifications.slice().reverse())},[c,r,i]}class au extends ct{constructor(e){super(),lt(this,e,cu,lu,ot,{store:0})}}const qt=en([]);qt.LIMIT=300;qt.log=(t,{dedup:e=!1}={})=>{qt.update(n=>(e&&n.length>0&&n[n.length-1].entry==t&&n.pop(),n.push({entry:t,createdDate:new Date,createdAt:Date.now(),isRecent:!0,isVeryRecent:!0}),n.slice(-qt.LIMIT)))};function Ks(){const t=Date.now();qt.update(e=>{for(const n of e)n.isRecent=t-n.createdAt<6e4,n.isVeryRecent=t-n.createdAt<5e3;return e}),setTimeout(Ks,1e3)}Ks();function Uf(t,e,n){const r=t.slice();return r[11]=e[n].time,r[12]=e[n].entry,r[13]=e[n].isRecent,r[14]=e[n].isVeryRecent,r[15]=e[n].createdAt,r[17]=n,r}function jf(t){let e,n;return{c(){e=M("h2"),n=K(t[0]),U(e,"class","title svelte-jdzn25")},m(r,i){T(r,e,i),k(e,n)},p(r,i){i&1&&De(n,r[0])},d(r){r&&C(e)}}}function uu(t){let e,n,r;return{c(){e=M("button"),e.textContent="Show Log",U(e,"class","svelte-jdzn25")},m(i,s){T(i,e,s),n||(r=Ae(e,"click",t[8]),n=!0)},p:me,i:me,o:me,d(i){i&&C(e),n=!1,r()}}}function du(t){let e,n,r;const i=t[7].default,s=ns(i,t,t[6],null);let l=t[2].map(zf),c=[];for(let a=0;a{a[m]=null}),At(),i=a[r],i?i.p(p,b):(i=a[r]=c[r](p),i.c()),te(i,1),i.m(e,null))},i(p){s||(te(i),s=!0)},o(p){ge(i),s=!1},d(p){p&&C(e),l&&l.d(),a[r].d()}}}const zf=t=>{const e=t.createdDate.toLocaleString().split(",")[1];return{...t,time:e}};function mu(t,e,n){let r,i;mt(t,qt,E=>n(5,i=E));let{$$slots:s={},$$scope:l}=e,{showLogInitially:c=!0}=e,{title:a}=e,{limit:h=0}=e;h>qt.LIMIT&&(console.log(`Warning: provided LogView line limit (${h}) is larger than logStore limit (${qt.LIMIT})`),console.log("Utilizing the lower value ..."),h=qt.LIMIT);let p=c,b;function m(){const E=Date.now();b&&E-b>500&&qt.log("——— Context switch / App wake ———",{dedup:!0}),b=E,setTimeout(m,300)}m();const y=()=>{n(1,p=!0)};return t.$$set=E=>{"showLogInitially"in E&&n(4,c=E.showLogInitially),"title"in E&&n(0,a=E.title),"limit"in E&&n(3,h=E.limit),"$$scope"in E&&n(6,l=E.$$scope)},t.$$.update=()=>{t.$$.dirty&40&&n(2,r=i.slice(-h).reverse())},[a,p,r,h,c,i,l,s,y]}class qs extends ct{constructor(e){super(),lt(this,e,mu,vu,ot,{showLogInitially:4,title:0,limit:3})}}function yu(t){let e,n,r,i,s;return{c(){e=M("div"),n=M("span"),n.textContent="DMT",r=Y(),i=M("span"),s=K(t[0]),U(n,"class","dmt svelte-vrzjix"),U(i,"class","app svelte-vrzjix")},m(l,c){T(l,e,c),k(e,n),k(e,r),k(e,i),k(i,s)},p(l,[c]){c&1&&De(s,l[0])},i:me,o:me,d(l){l&&C(e)}}}function gu(t,e,n){let{dmtApp:r}=e;return t.$$set=i=>{"dmtApp"in i&&n(0,r=i.dmtApp)},[r]}class wu extends ct{constructor(e){super(),lt(this,e,gu,yu,ot,{dmtApp:0})}}function xu(t){let e,n,r,i,s,l,c=".".repeat(t[1])+"",a,h,p,b,m;n=new wu({props:{dmtApp:t[0]}});const y=t[3].default,E=ns(y,t,t[2],null);return{c(){e=M("div"),Be(n.$$.fragment),r=Y(),i=M("p"),s=K("Connecting "),l=M("span"),a=K(c),h=Y(),E&&E.c(),U(l,"class","svelte-mtqbfw"),U(i,"class","svelte-mtqbfw"),U(e,"class","wrapper svelte-mtqbfw")},m(x,$){T(x,e,$),Le(n,e,null),k(e,r),k(e,i),k(i,s),k(i,l),k(l,a),k(e,h),E&&E.m(e,null),m=!0},p(x,[$]){const A={};$&1&&(A.dmtApp=x[0]),n.$set(A),(!m||$&2)&&c!==(c=".".repeat(x[1])+"")&&De(a,c),E&&E.p&&(!m||$&4)&&fs(E,y,x,x[2],m?is(y,x[2],$,null):ss(x[2]),null)},i(x){m||(te(n.$$.fragment,x),te(E,x),Tt(()=>{m&&(b&&b.end(1),p=pn(e,yn,{}),p.start())}),m=!0)},o(x){ge(n.$$.fragment,x),ge(E,x),p&&p.invalidate(),b=No(e,yn,{}),m=!1},d(x){x&&C(e),ze(n),E&&E.d(x),x&&b&&b.end()}}}const Au=5;function Eu(t,e,n){let{$$slots:r={},$$scope:i}=e,{dmtApp:s}=e,l=1,c=!0;return Oo(()=>{const a=setInterval(()=>{n(1,l=l+(c?1:-1)),l==Au&&(c=!1),l==1&&(c=!0)},500);return()=>clearInterval(a)}),t.$$set=a=>{"dmtApp"in a&&n(0,s=a.dmtApp),"$$scope"in a&&n(2,i=a.$$scope)},[s,l,i,r]}class Su extends ct{constructor(e){super(),lt(this,e,Eu,xu,ot,{dmtApp:0})}}function Bf(t,e,n){const r=t.slice();return r[2]=e[n],r}function Kf(t){let e,n=t[1].errors.slice(0,3),r=[];for(let i=0;i(i(),i=St(l,c=>n(1,r=c)),l);t.$$.on_destroy.push(()=>i());let{errorStore:l}=e;return s(),t.$$set=c=>{"errorStore"in c&&s(n(0,l=c.errorStore))},[l,r]}class Cu extends ct{constructor(e){super(),lt(this,e,ku,Ou,ot,{errorStore:0})}}function Tu({store:t,action:e,payload:n}){console.log(`Action: ${e}`),t.signal("action",{action:e,scope:"player",payload:n})}function Ru(t){let e,n;return e=new Su({props:{dmtApp:"Mobile",$$slots:{default:[Du]},$$scope:{ctx:t}}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&131072&&(s.$$scope={dirty:i,ctx:r}),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function Nu(t){let e=["borovnjakova"].includes(t[2].network),n,r=["borovnjakova","zaboric","vrbisce"].includes(t[2].network),i,s,l,c,a,h,p,b,m=e&&Ff(t),y=r&&Hf(t),E=t[2].network=="zaboric"&&Jf(t),x=t[2].deviceName!="tv-ap2"&&Wf(t);c=new qo({props:{connected:t[9],device:t[3],nearbyDevices:t[6],deviceName:t[8],activeDeviceKey:t[5],player:t[7]}});let $=t[2].deviceName!="tv-ap2"&&Zf(t);return p=new ql({props:{connected:t[9],player:t[7],deviceName:t[8],store:t[0],fnAction:t[12]}}),{c(){m&&m.c(),n=Y(),y&&y.c(),i=Y(),E&&E.c(),s=Y(),x&&x.c(),l=Y(),Be(c.$$.fragment),a=Y(),$&&$.c(),h=Y(),Be(p.$$.fragment)},m(A,B){m&&m.m(A,B),T(A,n,B),y&&y.m(A,B),T(A,i,B),E&&E.m(A,B),T(A,s,B),x&&x.m(A,B),T(A,l,B),Le(c,A,B),T(A,a,B),$&&$.m(A,B),T(A,h,B),Le(p,A,B),b=!0},p(A,B){B&4&&(e=["borovnjakova"].includes(A[2].network)),e?m?(m.p(A,B),B&4&&te(m,1)):(m=Ff(A),m.c(),te(m,1),m.m(n.parentNode,n)):m&&(xt(),ge(m,1,1,()=>{m=null}),At()),B&4&&(r=["borovnjakova","zaboric","vrbisce"].includes(A[2].network)),r?y?(y.p(A,B),B&4&&te(y,1)):(y=Hf(A),y.c(),te(y,1),y.m(i.parentNode,i)):y&&(xt(),ge(y,1,1,()=>{y=null}),At()),A[2].network=="zaboric"?E?(E.p(A,B),B&4&&te(E,1)):(E=Jf(A),E.c(),te(E,1),E.m(s.parentNode,s)):E&&(xt(),ge(E,1,1,()=>{E=null}),At()),A[2].deviceName!="tv-ap2"?x?(x.p(A,B),B&4&&te(x,1)):(x=Wf(A),x.c(),te(x,1),x.m(l.parentNode,l)):x&&(xt(),ge(x,1,1,()=>{x=null}),At());const ee={};B&8&&(ee.device=A[3]),B&64&&(ee.nearbyDevices=A[6]),B&256&&(ee.deviceName=A[8]),B&32&&(ee.activeDeviceKey=A[5]),B&128&&(ee.player=A[7]),c.$set(ee),A[2].deviceName!="tv-ap2"?$?($.p(A,B),B&4&&te($,1)):($=Zf(A),$.c(),te($,1),$.m(h.parentNode,h)):$&&(xt(),ge($,1,1,()=>{$=null}),At());const z={};B&128&&(z.player=A[7]),B&256&&(z.deviceName=A[8]),B&1&&(z.store=A[0]),p.$set(z)},i(A){b||(te(m),te(y),te(E),te(x),te(c.$$.fragment,A),te($),te(p.$$.fragment,A),b=!0)},o(A){ge(m),ge(y),ge(E),ge(x),ge(c.$$.fragment,A),ge($),ge(p.$$.fragment,A),b=!1},d(A){m&&m.d(A),A&&C(n),y&&y.d(A),A&&C(i),E&&E.d(A),A&&C(s),x&&x.d(A),A&&C(l),ze(c,A),A&&C(a),$&&$.d(A),A&&C(h),ze(p,A)}}}function Du(t){let e,n;return e=new qs({props:{showLogInitially:!0,limit:20}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p:me,i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function Ff(t){let e,n;return e=new La({props:{connector:t[10],localDevice:t[2],nearbyDevices:t[6]}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&4&&(s.localDevice=r[2]),i&64&&(s.nearbyDevices=r[6]),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function Hf(t){let e,n;return e=new Za({props:{connector:t[10],localDevice:t[2],nearbyDevices:t[6]}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&4&&(s.localDevice=r[2]),i&64&&(s.nearbyDevices=r[6]),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function Jf(t){let e,n;return e=new fu({props:{localDevice:t[2],connector:t[10]}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&4&&(s.localDevice=r[2]),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function Wf(t){let e,n;return e=new au({props:{store:t[0]}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&1&&(s.store=r[0]),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function Zf(t){let e,n;return e=new Hl({props:{nearbyDevices:t[6],activeDeviceKey:t[5],store:t[0],log:t[1]}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&64&&(s.nearbyDevices=r[6]),i&32&&(s.activeDeviceKey=r[5]),i&1&&(s.store=r[0]),i&2&&(s.log=r[1]),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function Gf(t){let e,n;return e=new qs({props:{title:"Connectivity log",limit:200,showLogInitially:!1,$$slots:{default:[$u]},$$scope:{ctx:t}}}),{c(){Be(e.$$.fragment)},m(r,i){Le(e,r,i),n=!0},p(r,i){const s={};i&131088&&(s.$$scope={dirty:i,ctx:r}),e.$set(s)},i(r){n||(te(e.$$.fragment,r),n=!0)},o(r){ge(e.$$.fragment,r),n=!1},d(r){ze(e,r)}}}function $u(t){let e,n,r,i,s,l,c;return{c(){e=M("p"),n=K("Gui active: "),r=M("span"),i=K(t[4]),s=K("s"),l=Y(),c=M("span"),c.textContent="[ also indicates that this app is processing events ]",U(r,"class","svelte-gx051d"),U(c,"class","small svelte-gx051d"),U(e,"class","logview_counter svelte-gx051d")},m(a,h){T(a,e,h),k(e,n),k(e,r),k(r,i),k(r,s),k(e,l),k(e,c)},p(a,h){h&16&&De(i,a[4])},d(a){a&&C(e)}}}function Pu(t){let e,n,r,i,s,l,c;n=new Cu({props:{errorStore:ys}});const a=[Nu,Ru],h=[];function p(m,y){return m[2]?0:1}i=p(t),s=h[i]=a[i](t);let b=t[2]&&Gf(t);return{c(){e=M("main"),Be(n.$$.fragment),r=Y(),s.c(),l=Y(),b&&b.c(),U(e,"class","svelte-gx051d")},m(m,y){T(m,e,y),Le(n,e,null),k(e,r),h[i].m(e,null),k(e,l),b&&b.m(e,null),c=!0},p(m,[y]){let E=i;i=p(m),i===E?h[i].p(m,y):(xt(),ge(h[E],1,1,()=>{h[E]=null}),At(),s=h[i],s?s.p(m,y):(s=h[i]=a[i](m),s.c()),te(s,1),s.m(e,l)),m[2]?b?(b.p(m,y),y&4&&te(b,1)):(b=Gf(m),b.c(),te(b,1),b.m(e,null)):b&&(xt(),ge(b,1,1,()=>{b=null}),At())},i(m){c||(te(n.$$.fragment,m),te(s),te(b),c=!0)},o(m){ge(n.$$.fragment,m),ge(s),ge(b),c=!1},d(m){m&&C(e),ze(n),h[i].d(),b&&b.d()}}}function Iu(t,e,n){let r,i,s,l,c,a,h,p=me,b=()=>(p(),p=St(y,j=>n(13,h=j)),y),m;t.$$.on_destroy.push(()=>p());let{store:y}=e;b();let{log:E}=e;const{connected:x,localConnector:$}=y,{state:A}=$;mt(t,A,j=>n(14,m=j));function B(j,q){xs(),Tu({store:y,action:j,payload:q})}A.subscribe(j=>{var ue;const q=(ue=j==null?void 0:j.device)==null?void 0:ue.network;gs.set(["zaboric","borovnjakova"].includes(q))});let ee=0;function z(){n(4,ee+=1),setTimeout(z,1e3)}return z(),t.$$set=j=>{"store"in j&&b(n(0,y=j.store)),"log"in j&&n(1,E=j.log)},t.$$.update=()=>{t.$$.dirty&8192&&n(3,r=h.device),t.$$.dirty&8192&&n(8,i=h.optimisticDeviceName),t.$$.dirty&16384&&n(2,s=m.device),t.$$.dirty&4&&(s==null||s.devMachine),t.$$.dirty&8192&&n(7,l=h.player||{}),t.$$.dirty&8192&&n(6,c=h.nearbyDevices?h.nearbyDevices.filter(j=>j.hasGui).sort(Uo("deviceName")):[]),t.$$.dirty&8192&&n(5,a=h.activeDeviceKey)},[y,E,s,r,ee,a,c,l,i,x,$,A,B,h,m]}class Mu extends ct{constructor(e){super(),lt(this,e,Iu,Pu,ot,{store:0,log:1})}}function Uu(){}class Ur{constructor(e,n,r){this.prev=e,this.next=n,this.fn=r||Uu}run(e){this.fn(e),this.next&&this.next.run(e)}}class ju{constructor(e){this.head=new Ur,this.tail=new Ur(this.head),this.head.next=this.tail,this.linkConstructor=e,this.reg={}}insert(e){const n=new Ur(this.tail.prev,this.tail,e);return n.next.prev=n,n.prev.next=n,n}remove(e){e.prev.next=e.next,e.next.prev=e.prev}}let Lu=0;class Er{constructor(){this.__events_list={}}on(e,n){const r=this.__events_list[e]||(this.__events_list[e]=new ju),i=n._eev||(n._eev=++Lu);r.reg[i]||(r.reg[i]=r.insert(n))}off(e,n){if(n){const r=this.__events_list[e];if(!r)return;const i=r.reg[n._eev];r.reg[n._eev]=void 0,r&&i&&r.remove(i)}}removeListener(...e){this.off(...e)}emit(e,n){const r=this.__events_list[e];r&&r.head.run(n)}}class zu extends Er{constructor(e){super(),this.state=e,this.subscriptions=[]}get(){return this.state}subscribe(e){return this.subscriptions.push(e),e(this.state),()=>{this.subscriptions=this.subscriptions.filter(n=>n!==e)}}announceStateChange(){this.subscriptions.forEach(e=>e(this.state))}}class Kn extends zu{set(e){this.state=e,this.announceStateChange()}}class Bu extends Kn{constructor(e={}){super(e)}set(e,{ignore:n=[]}={}){const r={};for(const i of n)r[i]=this.state[i];super.set({...e,...r})}setMerge(e){super.set({...this.state,...e})}clearState({except:e=[]}={}){for(const n of Object.keys(this.state))e.includes(n)||delete this.state[n]}}var Ku=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ys(t,e,n){return n={path:e,exports:{},require:function(r,i){return Fs(r,i??n.path)}},t(n,n.exports),n.exports}function qu(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach(function(n){var r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:function(){return t[n]}})}),e}function Fs(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}var Yu={},Fu=Object.freeze({__proto__:null,default:Yu}),Hu=qu(Fu),Ht=Ys(function(t){(function(e){var n=function(o){var d,u=new Float64Array(16);if(o)for(d=0;d>24&255,o[d+1]=u>>16&255,o[d+2]=u>>8&255,o[d+3]=u&255,o[d+4]=f>>24&255,o[d+5]=f>>16&255,o[d+6]=f>>8&255,o[d+7]=f&255}function x(o,d,u,f,_){var g,w=0;for(g=0;g<_;g++)w|=o[d+g]^u[f+g];return(1&w-1>>>8)-1}function $(o,d,u,f){return x(o,d,u,f,16)}function A(o,d,u,f){return x(o,d,u,f,32)}function B(o,d,u,f){for(var _=f[0]&255|(f[1]&255)<<8|(f[2]&255)<<16|(f[3]&255)<<24,g=u[0]&255|(u[1]&255)<<8|(u[2]&255)<<16|(u[3]&255)<<24,w=u[4]&255|(u[5]&255)<<8|(u[6]&255)<<16|(u[7]&255)<<24,N=u[8]&255|(u[9]&255)<<8|(u[10]&255)<<16|(u[11]&255)<<24,L=u[12]&255|(u[13]&255)<<8|(u[14]&255)<<16|(u[15]&255)<<24,Q=f[4]&255|(f[5]&255)<<8|(f[6]&255)<<16|(f[7]&255)<<24,H=d[0]&255|(d[1]&255)<<8|(d[2]&255)<<16|(d[3]&255)<<24,ke=d[4]&255|(d[5]&255)<<8|(d[6]&255)<<16|(d[7]&255)<<24,W=d[8]&255|(d[9]&255)<<8|(d[10]&255)<<16|(d[11]&255)<<24,ie=d[12]&255|(d[13]&255)<<8|(d[14]&255)<<16|(d[15]&255)<<24,fe=f[8]&255|(f[9]&255)<<8|(f[10]&255)<<16|(f[11]&255)<<24,he=u[16]&255|(u[17]&255)<<8|(u[18]&255)<<16|(u[19]&255)<<24,de=u[20]&255|(u[21]&255)<<8|(u[22]&255)<<16|(u[23]&255)<<24,se=u[24]&255|(u[25]&255)<<8|(u[26]&255)<<16|(u[27]&255)<<24,ce=u[28]&255|(u[29]&255)<<8|(u[30]&255)<<16|(u[31]&255)<<24,oe=f[12]&255|(f[13]&255)<<8|(f[14]&255)<<16|(f[15]&255)<<24,Z=_,X=g,J=w,G=N,V=L,F=Q,S=H,O=ke,P=W,R=ie,D=fe,I=he,ne=de,_e=se,ve=ce,pe=oe,v,we=0;we<20;we+=2)v=Z+ne|0,V^=v<<7|v>>>32-7,v=V+Z|0,P^=v<<9|v>>>32-9,v=P+V|0,ne^=v<<13|v>>>32-13,v=ne+P|0,Z^=v<<18|v>>>32-18,v=F+X|0,R^=v<<7|v>>>32-7,v=R+F|0,_e^=v<<9|v>>>32-9,v=_e+R|0,X^=v<<13|v>>>32-13,v=X+_e|0,F^=v<<18|v>>>32-18,v=D+S|0,ve^=v<<7|v>>>32-7,v=ve+D|0,J^=v<<9|v>>>32-9,v=J+ve|0,S^=v<<13|v>>>32-13,v=S+J|0,D^=v<<18|v>>>32-18,v=pe+I|0,G^=v<<7|v>>>32-7,v=G+pe|0,O^=v<<9|v>>>32-9,v=O+G|0,I^=v<<13|v>>>32-13,v=I+O|0,pe^=v<<18|v>>>32-18,v=Z+G|0,X^=v<<7|v>>>32-7,v=X+Z|0,J^=v<<9|v>>>32-9,v=J+X|0,G^=v<<13|v>>>32-13,v=G+J|0,Z^=v<<18|v>>>32-18,v=F+V|0,S^=v<<7|v>>>32-7,v=S+F|0,O^=v<<9|v>>>32-9,v=O+S|0,V^=v<<13|v>>>32-13,v=V+O|0,F^=v<<18|v>>>32-18,v=D+R|0,I^=v<<7|v>>>32-7,v=I+D|0,P^=v<<9|v>>>32-9,v=P+I|0,R^=v<<13|v>>>32-13,v=R+P|0,D^=v<<18|v>>>32-18,v=pe+ve|0,ne^=v<<7|v>>>32-7,v=ne+pe|0,_e^=v<<9|v>>>32-9,v=_e+ne|0,ve^=v<<13|v>>>32-13,v=ve+_e|0,pe^=v<<18|v>>>32-18;Z=Z+_|0,X=X+g|0,J=J+w|0,G=G+N|0,V=V+L|0,F=F+Q|0,S=S+H|0,O=O+ke|0,P=P+W|0,R=R+ie|0,D=D+fe|0,I=I+he|0,ne=ne+de|0,_e=_e+se|0,ve=ve+ce|0,pe=pe+oe|0,o[0]=Z>>>0&255,o[1]=Z>>>8&255,o[2]=Z>>>16&255,o[3]=Z>>>24&255,o[4]=X>>>0&255,o[5]=X>>>8&255,o[6]=X>>>16&255,o[7]=X>>>24&255,o[8]=J>>>0&255,o[9]=J>>>8&255,o[10]=J>>>16&255,o[11]=J>>>24&255,o[12]=G>>>0&255,o[13]=G>>>8&255,o[14]=G>>>16&255,o[15]=G>>>24&255,o[16]=V>>>0&255,o[17]=V>>>8&255,o[18]=V>>>16&255,o[19]=V>>>24&255,o[20]=F>>>0&255,o[21]=F>>>8&255,o[22]=F>>>16&255,o[23]=F>>>24&255,o[24]=S>>>0&255,o[25]=S>>>8&255,o[26]=S>>>16&255,o[27]=S>>>24&255,o[28]=O>>>0&255,o[29]=O>>>8&255,o[30]=O>>>16&255,o[31]=O>>>24&255,o[32]=P>>>0&255,o[33]=P>>>8&255,o[34]=P>>>16&255,o[35]=P>>>24&255,o[36]=R>>>0&255,o[37]=R>>>8&255,o[38]=R>>>16&255,o[39]=R>>>24&255,o[40]=D>>>0&255,o[41]=D>>>8&255,o[42]=D>>>16&255,o[43]=D>>>24&255,o[44]=I>>>0&255,o[45]=I>>>8&255,o[46]=I>>>16&255,o[47]=I>>>24&255,o[48]=ne>>>0&255,o[49]=ne>>>8&255,o[50]=ne>>>16&255,o[51]=ne>>>24&255,o[52]=_e>>>0&255,o[53]=_e>>>8&255,o[54]=_e>>>16&255,o[55]=_e>>>24&255,o[56]=ve>>>0&255,o[57]=ve>>>8&255,o[58]=ve>>>16&255,o[59]=ve>>>24&255,o[60]=pe>>>0&255,o[61]=pe>>>8&255,o[62]=pe>>>16&255,o[63]=pe>>>24&255}function ee(o,d,u,f){for(var _=f[0]&255|(f[1]&255)<<8|(f[2]&255)<<16|(f[3]&255)<<24,g=u[0]&255|(u[1]&255)<<8|(u[2]&255)<<16|(u[3]&255)<<24,w=u[4]&255|(u[5]&255)<<8|(u[6]&255)<<16|(u[7]&255)<<24,N=u[8]&255|(u[9]&255)<<8|(u[10]&255)<<16|(u[11]&255)<<24,L=u[12]&255|(u[13]&255)<<8|(u[14]&255)<<16|(u[15]&255)<<24,Q=f[4]&255|(f[5]&255)<<8|(f[6]&255)<<16|(f[7]&255)<<24,H=d[0]&255|(d[1]&255)<<8|(d[2]&255)<<16|(d[3]&255)<<24,ke=d[4]&255|(d[5]&255)<<8|(d[6]&255)<<16|(d[7]&255)<<24,W=d[8]&255|(d[9]&255)<<8|(d[10]&255)<<16|(d[11]&255)<<24,ie=d[12]&255|(d[13]&255)<<8|(d[14]&255)<<16|(d[15]&255)<<24,fe=f[8]&255|(f[9]&255)<<8|(f[10]&255)<<16|(f[11]&255)<<24,he=u[16]&255|(u[17]&255)<<8|(u[18]&255)<<16|(u[19]&255)<<24,de=u[20]&255|(u[21]&255)<<8|(u[22]&255)<<16|(u[23]&255)<<24,se=u[24]&255|(u[25]&255)<<8|(u[26]&255)<<16|(u[27]&255)<<24,ce=u[28]&255|(u[29]&255)<<8|(u[30]&255)<<16|(u[31]&255)<<24,oe=f[12]&255|(f[13]&255)<<8|(f[14]&255)<<16|(f[15]&255)<<24,Z=_,X=g,J=w,G=N,V=L,F=Q,S=H,O=ke,P=W,R=ie,D=fe,I=he,ne=de,_e=se,ve=ce,pe=oe,v,we=0;we<20;we+=2)v=Z+ne|0,V^=v<<7|v>>>32-7,v=V+Z|0,P^=v<<9|v>>>32-9,v=P+V|0,ne^=v<<13|v>>>32-13,v=ne+P|0,Z^=v<<18|v>>>32-18,v=F+X|0,R^=v<<7|v>>>32-7,v=R+F|0,_e^=v<<9|v>>>32-9,v=_e+R|0,X^=v<<13|v>>>32-13,v=X+_e|0,F^=v<<18|v>>>32-18,v=D+S|0,ve^=v<<7|v>>>32-7,v=ve+D|0,J^=v<<9|v>>>32-9,v=J+ve|0,S^=v<<13|v>>>32-13,v=S+J|0,D^=v<<18|v>>>32-18,v=pe+I|0,G^=v<<7|v>>>32-7,v=G+pe|0,O^=v<<9|v>>>32-9,v=O+G|0,I^=v<<13|v>>>32-13,v=I+O|0,pe^=v<<18|v>>>32-18,v=Z+G|0,X^=v<<7|v>>>32-7,v=X+Z|0,J^=v<<9|v>>>32-9,v=J+X|0,G^=v<<13|v>>>32-13,v=G+J|0,Z^=v<<18|v>>>32-18,v=F+V|0,S^=v<<7|v>>>32-7,v=S+F|0,O^=v<<9|v>>>32-9,v=O+S|0,V^=v<<13|v>>>32-13,v=V+O|0,F^=v<<18|v>>>32-18,v=D+R|0,I^=v<<7|v>>>32-7,v=I+D|0,P^=v<<9|v>>>32-9,v=P+I|0,R^=v<<13|v>>>32-13,v=R+P|0,D^=v<<18|v>>>32-18,v=pe+ve|0,ne^=v<<7|v>>>32-7,v=ne+pe|0,_e^=v<<9|v>>>32-9,v=_e+ne|0,ve^=v<<13|v>>>32-13,v=ve+_e|0,pe^=v<<18|v>>>32-18;o[0]=Z>>>0&255,o[1]=Z>>>8&255,o[2]=Z>>>16&255,o[3]=Z>>>24&255,o[4]=F>>>0&255,o[5]=F>>>8&255,o[6]=F>>>16&255,o[7]=F>>>24&255,o[8]=D>>>0&255,o[9]=D>>>8&255,o[10]=D>>>16&255,o[11]=D>>>24&255,o[12]=pe>>>0&255,o[13]=pe>>>8&255,o[14]=pe>>>16&255,o[15]=pe>>>24&255,o[16]=S>>>0&255,o[17]=S>>>8&255,o[18]=S>>>16&255,o[19]=S>>>24&255,o[20]=O>>>0&255,o[21]=O>>>8&255,o[22]=O>>>16&255,o[23]=O>>>24&255,o[24]=P>>>0&255,o[25]=P>>>8&255,o[26]=P>>>16&255,o[27]=P>>>24&255,o[28]=R>>>0&255,o[29]=R>>>8&255,o[30]=R>>>16&255,o[31]=R>>>24&255}function z(o,d,u,f){B(o,d,u,f)}function j(o,d,u,f){ee(o,d,u,f)}var q=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function ue(o,d,u,f,_,g,w){var N=new Uint8Array(16),L=new Uint8Array(64),Q,H;for(H=0;H<16;H++)N[H]=0;for(H=0;H<8;H++)N[H]=g[H];for(;_>=64;){for(z(L,N,w,q),H=0;H<64;H++)o[d+H]=u[f+H]^L[H];for(Q=1,H=8;H<16;H++)Q=Q+(N[H]&255)|0,N[H]=Q&255,Q>>>=8;_-=64,d+=64,f+=64}if(_>0)for(z(L,N,w,q),H=0;H<_;H++)o[d+H]=u[f+H]^L[H];return 0}function ae(o,d,u,f,_){var g=new Uint8Array(16),w=new Uint8Array(64),N,L;for(L=0;L<16;L++)g[L]=0;for(L=0;L<8;L++)g[L]=f[L];for(;u>=64;){for(z(w,g,_,q),L=0;L<64;L++)o[d+L]=w[L];for(N=1,L=8;L<16;L++)N=N+(g[L]&255)|0,g[L]=N&255,N>>>=8;u-=64,d+=64}if(u>0)for(z(w,g,_,q),L=0;L>>13|u<<3)&8191,f=o[4]&255|(o[5]&255)<<8,this.r[2]=(u>>>10|f<<6)&7939,_=o[6]&255|(o[7]&255)<<8,this.r[3]=(f>>>7|_<<9)&8191,g=o[8]&255|(o[9]&255)<<8,this.r[4]=(_>>>4|g<<12)&255,this.r[5]=g>>>1&8190,w=o[10]&255|(o[11]&255)<<8,this.r[6]=(g>>>14|w<<2)&8191,N=o[12]&255|(o[13]&255)<<8,this.r[7]=(w>>>11|N<<5)&8065,L=o[14]&255|(o[15]&255)<<8,this.r[8]=(N>>>8|L<<8)&8191,this.r[9]=L>>>5&127,this.pad[0]=o[16]&255|(o[17]&255)<<8,this.pad[1]=o[18]&255|(o[19]&255)<<8,this.pad[2]=o[20]&255|(o[21]&255)<<8,this.pad[3]=o[22]&255|(o[23]&255)<<8,this.pad[4]=o[24]&255|(o[25]&255)<<8,this.pad[5]=o[26]&255|(o[27]&255)<<8,this.pad[6]=o[28]&255|(o[29]&255)<<8,this.pad[7]=o[30]&255|(o[31]&255)<<8};rt.prototype.blocks=function(o,d,u){for(var f=this.fin?0:2048,_,g,w,N,L,Q,H,ke,W,ie,fe,he,de,se,ce,oe,Z,X,J,G=this.h[0],V=this.h[1],F=this.h[2],S=this.h[3],O=this.h[4],P=this.h[5],R=this.h[6],D=this.h[7],I=this.h[8],ne=this.h[9],_e=this.r[0],ve=this.r[1],pe=this.r[2],v=this.r[3],we=this.r[4],Ce=this.r[5],Te=this.r[6],ye=this.r[7],Se=this.r[8],Oe=this.r[9];u>=16;)_=o[d+0]&255|(o[d+1]&255)<<8,G+=_&8191,g=o[d+2]&255|(o[d+3]&255)<<8,V+=(_>>>13|g<<3)&8191,w=o[d+4]&255|(o[d+5]&255)<<8,F+=(g>>>10|w<<6)&8191,N=o[d+6]&255|(o[d+7]&255)<<8,S+=(w>>>7|N<<9)&8191,L=o[d+8]&255|(o[d+9]&255)<<8,O+=(N>>>4|L<<12)&8191,P+=L>>>1&8191,Q=o[d+10]&255|(o[d+11]&255)<<8,R+=(L>>>14|Q<<2)&8191,H=o[d+12]&255|(o[d+13]&255)<<8,D+=(Q>>>11|H<<5)&8191,ke=o[d+14]&255|(o[d+15]&255)<<8,I+=(H>>>8|ke<<8)&8191,ne+=ke>>>5|f,W=0,ie=W,ie+=G*_e,ie+=V*(5*Oe),ie+=F*(5*Se),ie+=S*(5*ye),ie+=O*(5*Te),W=ie>>>13,ie&=8191,ie+=P*(5*Ce),ie+=R*(5*we),ie+=D*(5*v),ie+=I*(5*pe),ie+=ne*(5*ve),W+=ie>>>13,ie&=8191,fe=W,fe+=G*ve,fe+=V*_e,fe+=F*(5*Oe),fe+=S*(5*Se),fe+=O*(5*ye),W=fe>>>13,fe&=8191,fe+=P*(5*Te),fe+=R*(5*Ce),fe+=D*(5*we),fe+=I*(5*v),fe+=ne*(5*pe),W+=fe>>>13,fe&=8191,he=W,he+=G*pe,he+=V*ve,he+=F*_e,he+=S*(5*Oe),he+=O*(5*Se),W=he>>>13,he&=8191,he+=P*(5*ye),he+=R*(5*Te),he+=D*(5*Ce),he+=I*(5*we),he+=ne*(5*v),W+=he>>>13,he&=8191,de=W,de+=G*v,de+=V*pe,de+=F*ve,de+=S*_e,de+=O*(5*Oe),W=de>>>13,de&=8191,de+=P*(5*Se),de+=R*(5*ye),de+=D*(5*Te),de+=I*(5*Ce),de+=ne*(5*we),W+=de>>>13,de&=8191,se=W,se+=G*we,se+=V*v,se+=F*pe,se+=S*ve,se+=O*_e,W=se>>>13,se&=8191,se+=P*(5*Oe),se+=R*(5*Se),se+=D*(5*ye),se+=I*(5*Te),se+=ne*(5*Ce),W+=se>>>13,se&=8191,ce=W,ce+=G*Ce,ce+=V*we,ce+=F*v,ce+=S*pe,ce+=O*ve,W=ce>>>13,ce&=8191,ce+=P*_e,ce+=R*(5*Oe),ce+=D*(5*Se),ce+=I*(5*ye),ce+=ne*(5*Te),W+=ce>>>13,ce&=8191,oe=W,oe+=G*Te,oe+=V*Ce,oe+=F*we,oe+=S*v,oe+=O*pe,W=oe>>>13,oe&=8191,oe+=P*ve,oe+=R*_e,oe+=D*(5*Oe),oe+=I*(5*Se),oe+=ne*(5*ye),W+=oe>>>13,oe&=8191,Z=W,Z+=G*ye,Z+=V*Te,Z+=F*Ce,Z+=S*we,Z+=O*v,W=Z>>>13,Z&=8191,Z+=P*pe,Z+=R*ve,Z+=D*_e,Z+=I*(5*Oe),Z+=ne*(5*Se),W+=Z>>>13,Z&=8191,X=W,X+=G*Se,X+=V*ye,X+=F*Te,X+=S*Ce,X+=O*we,W=X>>>13,X&=8191,X+=P*v,X+=R*pe,X+=D*ve,X+=I*_e,X+=ne*(5*Oe),W+=X>>>13,X&=8191,J=W,J+=G*Oe,J+=V*Se,J+=F*ye,J+=S*Te,J+=O*Ce,W=J>>>13,J&=8191,J+=P*we,J+=R*v,J+=D*pe,J+=I*ve,J+=ne*_e,W+=J>>>13,J&=8191,W=(W<<2)+W|0,W=W+ie|0,ie=W&8191,W=W>>>13,fe+=W,G=ie,V=fe,F=he,S=de,O=se,P=ce,R=oe,D=Z,I=X,ne=J,d+=16,u-=16;this.h[0]=G,this.h[1]=V,this.h[2]=F,this.h[3]=S,this.h[4]=O,this.h[5]=P,this.h[6]=R,this.h[7]=D,this.h[8]=I,this.h[9]=ne},rt.prototype.finish=function(o,d){var u=new Uint16Array(10),f,_,g,w;if(this.leftover){for(w=this.leftover,this.buffer[w++]=1;w<16;w++)this.buffer[w]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(f=this.h[1]>>>13,this.h[1]&=8191,w=2;w<10;w++)this.h[w]+=f,f=this.h[w]>>>13,this.h[w]&=8191;for(this.h[0]+=f*5,f=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=f,f=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=f,u[0]=this.h[0]+5,f=u[0]>>>13,u[0]&=8191,w=1;w<10;w++)u[w]=this.h[w]+f,f=u[w]>>>13,u[w]&=8191;for(u[9]-=1<<13,_=(f^1)-1,w=0;w<10;w++)u[w]&=_;for(_=~_,w=0;w<10;w++)this.h[w]=this.h[w]&_|u[w];for(this.h[0]=(this.h[0]|this.h[1]<<13)&65535,this.h[1]=(this.h[1]>>>3|this.h[2]<<10)&65535,this.h[2]=(this.h[2]>>>6|this.h[3]<<7)&65535,this.h[3]=(this.h[3]>>>9|this.h[4]<<4)&65535,this.h[4]=(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14)&65535,this.h[5]=(this.h[6]>>>2|this.h[7]<<11)&65535,this.h[6]=(this.h[7]>>>5|this.h[8]<<8)&65535,this.h[7]=(this.h[8]>>>8|this.h[9]<<5)&65535,g=this.h[0]+this.pad[0],this.h[0]=g&65535,w=1;w<8;w++)g=(this.h[w]+this.pad[w]|0)+(g>>>16)|0,this.h[w]=g&65535;o[d+0]=this.h[0]>>>0&255,o[d+1]=this.h[0]>>>8&255,o[d+2]=this.h[1]>>>0&255,o[d+3]=this.h[1]>>>8&255,o[d+4]=this.h[2]>>>0&255,o[d+5]=this.h[2]>>>8&255,o[d+6]=this.h[3]>>>0&255,o[d+7]=this.h[3]>>>8&255,o[d+8]=this.h[4]>>>0&255,o[d+9]=this.h[4]>>>8&255,o[d+10]=this.h[5]>>>0&255,o[d+11]=this.h[5]>>>8&255,o[d+12]=this.h[6]>>>0&255,o[d+13]=this.h[6]>>>8&255,o[d+14]=this.h[7]>>>0&255,o[d+15]=this.h[7]>>>8&255},rt.prototype.update=function(o,d,u){var f,_;if(this.leftover){for(_=16-this.leftover,_>u&&(_=u),f=0;f<_;f++)this.buffer[this.leftover+f]=o[d+f];if(u-=_,d+=_,this.leftover+=_,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(u>=16&&(_=u-u%16,this.blocks(o,d,_),d+=_,u-=_),u){for(f=0;f>16&1),g[u-1]&=65535;g[15]=w[15]-32767-(g[14]>>16&1),_=g[15]>>16&1,g[14]&=65535,at(w,g,1-_)}for(u=0;u<16;u++)o[2*u]=w[u]&255,o[2*u+1]=w[u]>>8}function Ye(o,d){var u=new Uint8Array(32),f=new Uint8Array(32);return Ee(u,o),Ee(f,d),A(u,0,f,0)}function Mt(o){var d=new Uint8Array(32);return Ee(d,o),d[0]&1}function Rt(o,d){var u;for(u=0;u<16;u++)o[u]=d[2*u]+(d[2*u+1]<<8);o[15]&=32767}function Je(o,d,u){for(var f=0;f<16;f++)o[f]=d[f]+u[f]}function tt(o,d,u){for(var f=0;f<16;f++)o[f]=d[f]-u[f]}function xe(o,d,u){var f,_,g=0,w=0,N=0,L=0,Q=0,H=0,ke=0,W=0,ie=0,fe=0,he=0,de=0,se=0,ce=0,oe=0,Z=0,X=0,J=0,G=0,V=0,F=0,S=0,O=0,P=0,R=0,D=0,I=0,ne=0,_e=0,ve=0,pe=0,v=u[0],we=u[1],Ce=u[2],Te=u[3],ye=u[4],Se=u[5],Oe=u[6],Ke=u[7],Ne=u[8],Me=u[9],Ue=u[10],je=u[11],qe=u[12],Ge=u[13],Ve=u[14],Qe=u[15];f=d[0],g+=f*v,w+=f*we,N+=f*Ce,L+=f*Te,Q+=f*ye,H+=f*Se,ke+=f*Oe,W+=f*Ke,ie+=f*Ne,fe+=f*Me,he+=f*Ue,de+=f*je,se+=f*qe,ce+=f*Ge,oe+=f*Ve,Z+=f*Qe,f=d[1],w+=f*v,N+=f*we,L+=f*Ce,Q+=f*Te,H+=f*ye,ke+=f*Se,W+=f*Oe,ie+=f*Ke,fe+=f*Ne,he+=f*Me,de+=f*Ue,se+=f*je,ce+=f*qe,oe+=f*Ge,Z+=f*Ve,X+=f*Qe,f=d[2],N+=f*v,L+=f*we,Q+=f*Ce,H+=f*Te,ke+=f*ye,W+=f*Se,ie+=f*Oe,fe+=f*Ke,he+=f*Ne,de+=f*Me,se+=f*Ue,ce+=f*je,oe+=f*qe,Z+=f*Ge,X+=f*Ve,J+=f*Qe,f=d[3],L+=f*v,Q+=f*we,H+=f*Ce,ke+=f*Te,W+=f*ye,ie+=f*Se,fe+=f*Oe,he+=f*Ke,de+=f*Ne,se+=f*Me,ce+=f*Ue,oe+=f*je,Z+=f*qe,X+=f*Ge,J+=f*Ve,G+=f*Qe,f=d[4],Q+=f*v,H+=f*we,ke+=f*Ce,W+=f*Te,ie+=f*ye,fe+=f*Se,he+=f*Oe,de+=f*Ke,se+=f*Ne,ce+=f*Me,oe+=f*Ue,Z+=f*je,X+=f*qe,J+=f*Ge,G+=f*Ve,V+=f*Qe,f=d[5],H+=f*v,ke+=f*we,W+=f*Ce,ie+=f*Te,fe+=f*ye,he+=f*Se,de+=f*Oe,se+=f*Ke,ce+=f*Ne,oe+=f*Me,Z+=f*Ue,X+=f*je,J+=f*qe,G+=f*Ge,V+=f*Ve,F+=f*Qe,f=d[6],ke+=f*v,W+=f*we,ie+=f*Ce,fe+=f*Te,he+=f*ye,de+=f*Se,se+=f*Oe,ce+=f*Ke,oe+=f*Ne,Z+=f*Me,X+=f*Ue,J+=f*je,G+=f*qe,V+=f*Ge,F+=f*Ve,S+=f*Qe,f=d[7],W+=f*v,ie+=f*we,fe+=f*Ce,he+=f*Te,de+=f*ye,se+=f*Se,ce+=f*Oe,oe+=f*Ke,Z+=f*Ne,X+=f*Me,J+=f*Ue,G+=f*je,V+=f*qe,F+=f*Ge,S+=f*Ve,O+=f*Qe,f=d[8],ie+=f*v,fe+=f*we,he+=f*Ce,de+=f*Te,se+=f*ye,ce+=f*Se,oe+=f*Oe,Z+=f*Ke,X+=f*Ne,J+=f*Me,G+=f*Ue,V+=f*je,F+=f*qe,S+=f*Ge,O+=f*Ve,P+=f*Qe,f=d[9],fe+=f*v,he+=f*we,de+=f*Ce,se+=f*Te,ce+=f*ye,oe+=f*Se,Z+=f*Oe,X+=f*Ke,J+=f*Ne,G+=f*Me,V+=f*Ue,F+=f*je,S+=f*qe,O+=f*Ge,P+=f*Ve,R+=f*Qe,f=d[10],he+=f*v,de+=f*we,se+=f*Ce,ce+=f*Te,oe+=f*ye,Z+=f*Se,X+=f*Oe,J+=f*Ke,G+=f*Ne,V+=f*Me,F+=f*Ue,S+=f*je,O+=f*qe,P+=f*Ge,R+=f*Ve,D+=f*Qe,f=d[11],de+=f*v,se+=f*we,ce+=f*Ce,oe+=f*Te,Z+=f*ye,X+=f*Se,J+=f*Oe,G+=f*Ke,V+=f*Ne,F+=f*Me,S+=f*Ue,O+=f*je,P+=f*qe,R+=f*Ge,D+=f*Ve,I+=f*Qe,f=d[12],se+=f*v,ce+=f*we,oe+=f*Ce,Z+=f*Te,X+=f*ye,J+=f*Se,G+=f*Oe,V+=f*Ke,F+=f*Ne,S+=f*Me,O+=f*Ue,P+=f*je,R+=f*qe,D+=f*Ge,I+=f*Ve,ne+=f*Qe,f=d[13],ce+=f*v,oe+=f*we,Z+=f*Ce,X+=f*Te,J+=f*ye,G+=f*Se,V+=f*Oe,F+=f*Ke,S+=f*Ne,O+=f*Me,P+=f*Ue,R+=f*je,D+=f*qe,I+=f*Ge,ne+=f*Ve,_e+=f*Qe,f=d[14],oe+=f*v,Z+=f*we,X+=f*Ce,J+=f*Te,G+=f*ye,V+=f*Se,F+=f*Oe,S+=f*Ke,O+=f*Ne,P+=f*Me,R+=f*Ue,D+=f*je,I+=f*qe,ne+=f*Ge,_e+=f*Ve,ve+=f*Qe,f=d[15],Z+=f*v,X+=f*we,J+=f*Ce,G+=f*Te,V+=f*ye,F+=f*Se,S+=f*Oe,O+=f*Ke,P+=f*Ne,R+=f*Me,D+=f*Ue,I+=f*je,ne+=f*qe,_e+=f*Ge,ve+=f*Ve,pe+=f*Qe,g+=38*X,w+=38*J,N+=38*G,L+=38*V,Q+=38*F,H+=38*S,ke+=38*O,W+=38*P,ie+=38*R,fe+=38*D,he+=38*I,de+=38*ne,se+=38*_e,ce+=38*ve,oe+=38*pe,_=1,f=g+_+65535,_=Math.floor(f/65536),g=f-_*65536,f=w+_+65535,_=Math.floor(f/65536),w=f-_*65536,f=N+_+65535,_=Math.floor(f/65536),N=f-_*65536,f=L+_+65535,_=Math.floor(f/65536),L=f-_*65536,f=Q+_+65535,_=Math.floor(f/65536),Q=f-_*65536,f=H+_+65535,_=Math.floor(f/65536),H=f-_*65536,f=ke+_+65535,_=Math.floor(f/65536),ke=f-_*65536,f=W+_+65535,_=Math.floor(f/65536),W=f-_*65536,f=ie+_+65535,_=Math.floor(f/65536),ie=f-_*65536,f=fe+_+65535,_=Math.floor(f/65536),fe=f-_*65536,f=he+_+65535,_=Math.floor(f/65536),he=f-_*65536,f=de+_+65535,_=Math.floor(f/65536),de=f-_*65536,f=se+_+65535,_=Math.floor(f/65536),se=f-_*65536,f=ce+_+65535,_=Math.floor(f/65536),ce=f-_*65536,f=oe+_+65535,_=Math.floor(f/65536),oe=f-_*65536,f=Z+_+65535,_=Math.floor(f/65536),Z=f-_*65536,g+=_-1+37*(_-1),_=1,f=g+_+65535,_=Math.floor(f/65536),g=f-_*65536,f=w+_+65535,_=Math.floor(f/65536),w=f-_*65536,f=N+_+65535,_=Math.floor(f/65536),N=f-_*65536,f=L+_+65535,_=Math.floor(f/65536),L=f-_*65536,f=Q+_+65535,_=Math.floor(f/65536),Q=f-_*65536,f=H+_+65535,_=Math.floor(f/65536),H=f-_*65536,f=ke+_+65535,_=Math.floor(f/65536),ke=f-_*65536,f=W+_+65535,_=Math.floor(f/65536),W=f-_*65536,f=ie+_+65535,_=Math.floor(f/65536),ie=f-_*65536,f=fe+_+65535,_=Math.floor(f/65536),fe=f-_*65536,f=he+_+65535,_=Math.floor(f/65536),he=f-_*65536,f=de+_+65535,_=Math.floor(f/65536),de=f-_*65536,f=se+_+65535,_=Math.floor(f/65536),se=f-_*65536,f=ce+_+65535,_=Math.floor(f/65536),ce=f-_*65536,f=oe+_+65535,_=Math.floor(f/65536),oe=f-_*65536,f=Z+_+65535,_=Math.floor(f/65536),Z=f-_*65536,g+=_-1+37*(_-1),o[0]=g,o[1]=w,o[2]=N,o[3]=L,o[4]=Q,o[5]=H,o[6]=ke,o[7]=W,o[8]=ie,o[9]=fe,o[10]=he,o[11]=de,o[12]=se,o[13]=ce,o[14]=oe,o[15]=Z}function Xe(o,d){xe(o,d,d)}function Nt(o,d){var u=n(),f;for(f=0;f<16;f++)u[f]=d[f];for(f=253;f>=0;f--)Xe(u,u),f!==2&&f!==4&&xe(u,u,d);for(f=0;f<16;f++)o[f]=u[f]}function Wt(o,d){var u=n(),f;for(f=0;f<16;f++)u[f]=d[f];for(f=250;f>=0;f--)Xe(u,u),f!==1&&xe(u,u,d);for(f=0;f<16;f++)o[f]=u[f]}function bt(o,d,u){var f=new Uint8Array(32),_=new Float64Array(80),g,w,N=n(),L=n(),Q=n(),H=n(),ke=n(),W=n();for(w=0;w<31;w++)f[w]=d[w];for(f[31]=d[31]&127|64,f[0]&=248,Rt(_,u),w=0;w<16;w++)L[w]=_[w],H[w]=N[w]=Q[w]=0;for(N[0]=H[0]=1,w=254;w>=0;--w)g=f[w>>>3]>>>(w&7)&1,at(N,L,g),at(Q,H,g),Je(ke,N,Q),tt(N,N,Q),Je(Q,L,H),tt(L,L,H),Xe(H,ke),Xe(W,N),xe(N,Q,N),xe(Q,L,ke),Je(ke,N,Q),tt(N,N,Q),Xe(L,N),tt(Q,H,W),xe(N,Q,a),Je(N,N,H),xe(Q,Q,N),xe(N,H,W),xe(H,L,_),Xe(L,ke),at(N,L,g),at(Q,H,g);for(w=0;w<16;w++)_[w+16]=N[w],_[w+32]=Q[w],_[w+48]=L[w],_[w+64]=H[w];var ie=_.subarray(32),fe=_.subarray(16);return Nt(ie,ie),xe(fe,fe,ie),Ee(o,fe),0}function Ct(o,d){return bt(o,d,s)}function Ut(o,d){return r(d,32),Ct(o,d)}function Ot(o,d,u){var f=new Uint8Array(32);return bt(f,u,d),j(o,i,f,q)}var tn=Pe,bn=pt;function nn(o,d,u,f,_,g){var w=new Uint8Array(32);return Ot(w,_,g),tn(o,d,u,f,w)}function Et(o,d,u,f,_,g){var w=new Uint8Array(32);return Ot(w,_,g),bn(o,d,u,f,w)}var rn=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function jt(o,d,u,f){for(var _=new Int32Array(16),g=new Int32Array(16),w,N,L,Q,H,ke,W,ie,fe,he,de,se,ce,oe,Z,X,J,G,V,F,S,O,P,R,D,I,ne=o[0],_e=o[1],ve=o[2],pe=o[3],v=o[4],we=o[5],Ce=o[6],Te=o[7],ye=d[0],Se=d[1],Oe=d[2],Ke=d[3],Ne=d[4],Me=d[5],Ue=d[6],je=d[7],qe=0;f>=128;){for(V=0;V<16;V++)F=8*V+qe,_[V]=u[F+0]<<24|u[F+1]<<16|u[F+2]<<8|u[F+3],g[V]=u[F+4]<<24|u[F+5]<<16|u[F+6]<<8|u[F+7];for(V=0;V<80;V++)if(w=ne,N=_e,L=ve,Q=pe,H=v,ke=we,W=Ce,ie=Te,fe=ye,he=Se,de=Oe,se=Ke,ce=Ne,oe=Me,Z=Ue,X=je,S=Te,O=je,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=(v>>>14|Ne<<32-14)^(v>>>18|Ne<<32-18)^(Ne>>>41-32|v<<32-(41-32)),O=(Ne>>>14|v<<32-14)^(Ne>>>18|v<<32-18)^(v>>>41-32|Ne<<32-(41-32)),P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,S=v&we^~v&Ce,O=Ne&Me^~Ne&Ue,P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,S=rn[V*2],O=rn[V*2+1],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,S=_[V%16],O=g[V%16],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,J=D&65535|I<<16,G=P&65535|R<<16,S=J,O=G,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=(ne>>>28|ye<<32-28)^(ye>>>34-32|ne<<32-(34-32))^(ye>>>39-32|ne<<32-(39-32)),O=(ye>>>28|ne<<32-28)^(ne>>>34-32|ye<<32-(34-32))^(ne>>>39-32|ye<<32-(39-32)),P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,S=ne&_e^ne&ve^_e&ve,O=ye&Se^ye&Oe^Se&Oe,P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,ie=D&65535|I<<16,X=P&65535|R<<16,S=Q,O=se,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=J,O=G,P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,Q=D&65535|I<<16,se=P&65535|R<<16,_e=w,ve=N,pe=L,v=Q,we=H,Ce=ke,Te=W,ne=ie,Se=fe,Oe=he,Ke=de,Ne=se,Me=ce,Ue=oe,je=Z,ye=X,V%16===15)for(F=0;F<16;F++)S=_[F],O=g[F],P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=_[(F+9)%16],O=g[(F+9)%16],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,J=_[(F+1)%16],G=g[(F+1)%16],S=(J>>>1|G<<32-1)^(J>>>8|G<<32-8)^J>>>7,O=(G>>>1|J<<32-1)^(G>>>8|J<<32-8)^(G>>>7|J<<32-7),P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,J=_[(F+14)%16],G=g[(F+14)%16],S=(J>>>19|G<<32-19)^(G>>>61-32|J<<32-(61-32))^J>>>6,O=(G>>>19|J<<32-19)^(J>>>61-32|G<<32-(61-32))^(G>>>6|J<<32-6),P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,_[F]=D&65535|I<<16,g[F]=P&65535|R<<16;S=ne,O=ye,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[0],O=d[0],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[0]=ne=D&65535|I<<16,d[0]=ye=P&65535|R<<16,S=_e,O=Se,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[1],O=d[1],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[1]=_e=D&65535|I<<16,d[1]=Se=P&65535|R<<16,S=ve,O=Oe,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[2],O=d[2],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[2]=ve=D&65535|I<<16,d[2]=Oe=P&65535|R<<16,S=pe,O=Ke,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[3],O=d[3],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[3]=pe=D&65535|I<<16,d[3]=Ke=P&65535|R<<16,S=v,O=Ne,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[4],O=d[4],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[4]=v=D&65535|I<<16,d[4]=Ne=P&65535|R<<16,S=we,O=Me,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[5],O=d[5],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[5]=we=D&65535|I<<16,d[5]=Me=P&65535|R<<16,S=Ce,O=Ue,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[6],O=d[6],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[6]=Ce=D&65535|I<<16,d[6]=Ue=P&65535|R<<16,S=Te,O=je,P=O&65535,R=O>>>16,D=S&65535,I=S>>>16,S=o[7],O=d[7],P+=O&65535,R+=O>>>16,D+=S&65535,I+=S>>>16,R+=P>>>16,D+=R>>>16,I+=D>>>16,o[7]=Te=D&65535|I<<16,d[7]=je=P&65535|R<<16,qe+=128,f-=128}return f}function nt(o,d,u){var f=new Int32Array(8),_=new Int32Array(8),g=new Uint8Array(256),w,N=u;for(f[0]=1779033703,f[1]=3144134277,f[2]=1013904242,f[3]=2773480762,f[4]=1359893119,f[5]=2600822924,f[6]=528734635,f[7]=1541459225,_[0]=4089235720,_[1]=2227873595,_[2]=4271175723,_[3]=1595750129,_[4]=2917565137,_[5]=725511199,_[6]=4215389547,_[7]=327033209,jt(f,_,d,u),u%=128,w=0;w=0;--_)f=u[_/8|0]>>(_&7)&1,st(o,d,f),ft(d,o),ft(o,o),st(o,d,f)}function Re(o,d){var u=[n(),n(),n(),n()];Ze(u[0],b),Ze(u[1],m),Ze(u[2],c),xe(u[3],b,m),re(o,u,d)}function zt(o,d,u){var f=new Uint8Array(64),_=[n(),n(),n(),n()],g;for(u||r(d,32),nt(f,d,32),f[0]&=248,f[31]&=127,f[31]|=64,Re(_,f),Lt(o,_),g=0;g<32;g++)d[g+32]=o[g];return 0}var Zt=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function on(o,d){var u,f,_,g;for(f=63;f>=32;--f){for(u=0,_=f-32,g=f-12;_>4)*Zt[_],u=d[_]>>8,d[_]&=255;for(_=0;_<32;_++)d[_]-=u*Zt[_];for(f=0;f<32;f++)d[f+1]+=d[f]>>8,o[f]=d[f]&255}function ln(o){var d=new Float64Array(64),u;for(u=0;u<64;u++)d[u]=o[u];for(u=0;u<64;u++)o[u]=0;on(o,d)}function Ie(o,d,u,f){var _=new Uint8Array(64),g=new Uint8Array(64),w=new Uint8Array(64),N,L,Q=new Float64Array(64),H=[n(),n(),n(),n()];nt(_,f,32),_[0]&=248,_[31]&=127,_[31]|=64;var ke=u+64;for(N=0;N>7&&tt(o[0],l,o[0]),xe(o[3],o[0],o[1]),0)}function fn(o,d,u,f){var _,g=new Uint8Array(32),w=new Uint8Array(64),N=[n(),n(),n(),n()],L=[n(),n(),n(),n()];if(u<64||et(L,f))return-1;for(_=0;_=0},e.sign.keyPair=function(){var o=new Uint8Array(kt),d=new Uint8Array($t);return zt(o,d),{publicKey:o,secretKey:d}},e.sign.keyPair.fromSecretKey=function(o){if(it(o),o.length!==$t)throw new Error("bad secret key size");for(var d=new Uint8Array(kt),u=0;u"u"?typeof Buffer.from<"u"?(e.encodeBase64=function(r){return Buffer.from(r).toString("base64")},e.decodeBase64=function(r){return n(r),new Uint8Array(Array.prototype.slice.call(Buffer.from(r,"base64"),0))}):(e.encodeBase64=function(r){return new Buffer(r).toString("base64")},e.decodeBase64=function(r){return n(r),new Uint8Array(Array.prototype.slice.call(new Buffer(r,"base64"),0))}):(e.encodeBase64=function(r){var i,s=[],l=r.length;for(i=0;i"u"||t==null?[]:Array.isArray(t)?t:[t]}function yr(t){return Array.from(new Uint8Array(t)).map(e=>e.toString(16).padStart(2,"0")).join("")}function Qr(t){const e=t.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g);return new Uint8Array(e.map(n=>parseInt(n,16)))}function Hs(t,e=8){const n=new Array(e).fill(0);for(let r=0;r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),Zs(e)?n.showHidden=e:e&&i0(n,e),jn(n.showHidden)&&(n.showHidden=!1),jn(n.depth)&&(n.depth=2),jn(n.colors)&&(n.colors=!1),jn(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=Qu),gr(n,t,n.depth)}Cn.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};Cn.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function Vu(t,e){return t}function Zs(t){return typeof t=="boolean"}function jn(t){return t===void 0}function Qu(t,e){var n=Cn.styles[e];return n?"\x1B["+Cn.colors[n][0]+"m"+t+"\x1B["+Cn.colors[n][1]+"m":t}function jr(t){return typeof t=="function"}function Gs(t){return typeof t=="string"}function Xu(t){return typeof t=="number"}function Vs(t){return t===null}function Qs(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Lr(t){return Sr(t)&&hi(t)==="[object RegExp]"}function Sr(t){return typeof t=="object"&&t!==null}function zr(t){return Sr(t)&&(hi(t)==="[object Error]"||t instanceof Error)}function Vf(t){return Sr(t)&&hi(t)==="[object Date]"}function hi(t){return Object.prototype.toString.call(t)}function e0(t){var e={};return t.forEach(function(n,r){e[n]=!0}),e}function t0(t,e,n,r,i){for(var s=[],l=0,c=e.length;l=0||s.indexOf("description")>=0))return Br(e);if(s.length===0){if(jr(e)){var c=e.name?": "+e.name:"";return t.stylize("[Function"+c+"]","special")}if(Lr(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(Vf(e))return t.stylize(Date.prototype.toString.call(e),"date");if(zr(e))return Br(e)}var a="",h=!1,p=["{","}"];if(Array.isArray(e)&&(h=!0,p=["[","]"]),jr(e)){var b=e.name?": "+e.name:"";a=" [Function"+b+"]"}if(Lr(e)&&(a=" "+RegExp.prototype.toString.call(e)),Vf(e)&&(a=" "+Date.prototype.toUTCString.call(e)),zr(e)&&(a=" "+Br(e)),s.length===0&&(!h||e.length==0))return p[0]+a+p[1];if(n<0)return Lr(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special");t.seen.push(e);var m;return h?m=t0(t,e,n,l,s):m=s.map(function(y){return Xr(t,e,n,l,y,h)}),t.seen.pop(),r0(m,a,p)}function Xr(t,e,n,r,i,s){var l,c,a;a={value:void 0};try{a.value=e[i]}catch{}try{Object.getOwnPropertyDescriptor&&(a=Object.getOwnPropertyDescriptor(e,i)||a)}catch{}if(a.get?a.set?c=t.stylize("[Getter/Setter]","special"):c=t.stylize("[Getter]","special"):a.set&&(c=t.stylize("[Setter]","special")),Qs(r,i)||(l="["+i+"]"),c||(t.seen.indexOf(a.value)<0?(Vs(n)?c=gr(t,a.value,null):c=gr(t,a.value,n-1),c.indexOf(` +`)>-1&&(s?c=c.split(` +`).map(function(h){return" "+h}).join(` +`).substr(2):c=` +`+c.split(` +`).map(function(h){return" "+h}).join(` +`))):c=t.stylize("[Circular]","special")),jn(l)){if(s&&i.match(/^\d+$/))return c;l=JSON.stringify(""+i),l.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(l=l.substr(1,l.length-2),l=t.stylize(l,"name")):(l=l.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),l=t.stylize(l,"string"))}return l+": "+c}function n0(t,e){if(jn(e))return t.stylize("undefined","undefined");if(Gs(e)){var n="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(n,"string")}if(Xu(e))return t.stylize(""+e,"number");if(Zs(e))return t.stylize(""+e,"boolean");if(Vs(e))return t.stylize("null","null")}function r0(t,e,n){var r=t.reduce(function(i,s){return s.indexOf(` +`)>=0,i+s.replace(/\u001b\[\d\d?m/g,"").length+1},0);return r>60?n[0]+(e===""?"":e+` + `)+" "+t.join(`, + `)+" "+n[1]:n[0]+e+" "+t.join(", ")+" "+n[1]}function i0(t,e){if(!e||!Sr(e))return t;for(var n=Object.keys(e),r=n.length;r--;)t[n[r]]=e[n[r]];return t}function un(t,e,...n){try{e==console.log?e(`${new Date().toLocaleString()} → ${Gu(...n).replace(/^'/,"").replace(/'$/,"")}`):typeof e=="function"?e(...n):e&&e.logOutput(t,{source:"connectome"},...n)}catch(r){console.log(r)}}class f0{write(e,...n){un(void 0,e,...n)}red(e,...n){un("red",e,...n)}green(e,...n){un("green",e,...n)}yellow(e,...n){un("yellow",e,...n)}blue(e,...n){un("blue",e,...n)}cyan(e,...n){un("cyan",e,...n)}magenta(e,...n){un("magenta",e,...n)}gray(e,...n){un("gray",e,...n)}white(e,...n){un("white",e,...n)}}var He=new f0;Ht.util=Fn;function s0({data:t,connector:e}){const{log:n}=e;Wu(t)&&(t=JSON.stringify(t));const r=new Uint8Array(Hs(2*e.sentCount,24));if(e.closed())He.red(n,`⚠️ Warning: "${t}" was not sent because connector is not ready`);else if(e.sentCount>1){let i=0;typeof t=="string"&&(i=1);const s=i==1?Ht.util.decodeUTF8(t):t,l=Zu(s,i),c=Ht.secretbox(l,r,e.sharedSecret);e.verbose&&(He.green(n,`Connector ${e.endpoint} → Sending encrypted message #${e.sentCount} ↴`),He.gray(n,t)),e.connection.websocket.send(c)}else e.verbose&&(He.green(n,`Connector ${e.endpoint} → Sending message #${e.sentCount} ↴`),He.cyan(n,t)),e.connection.websocket.send(t)}Ht.util=Fn;function o0(t){return Object.keys(t).includes("result")||Object.keys(t).includes("error")}function Xs({jsonData:t,encryptedData:e,rawMessage:n,wasEncrypted:r,connector:i}){const{log:s}=i;i.lastMessageAt=Date.now();const l=new Uint8Array(Hs(2*i.receivedCount+1,24));if(i.verbose&&!r&&He.magenta(s,`Connector ${i.endpoint} → Received message #${i.receivedCount} ↴`),t)t.jsonrpc?o0(t)?(i.verbose&&!r&&(He.magenta(s,`Connector ${i.endpoint} received plain-text rpc result ↴`),He.gray(s,t)),i.rpcClient.jsonrpcMsgReceive(n)):i.emit("json_rpc",n):i.emit("receive",{jsonData:t,rawMessage:n});else if(e){i.verbose=="extra"&&(He.magenta(s,`Connector ${i.endpoint} received bytes ↴`),He.cyan(s,e),He.green(s,JSON.stringify(e)),He.gray(s,`Connector ${i.endpoint} decrypting with shared secret ${i.sharedSecret}...`)),i.sharedSecret||He.red(s,`Connector ${i.endpoint} missing sharedSecret - should not happen...`);const c=Ht.secretbox.open(e,l,i.sharedSecret),a=c[0],h=c.subarray(1);if(a==1){const p=Ht.util.encodeUTF8(h);i.verbose&&He.yellow(s,`Connector ${i.endpoint} received message: ${p}`);try{const b=JSON.parse(p);b.jsonrpc?Xs({jsonData:b,rawMessage:p,wasEncrypted:!0,connector:i}):b.state?i.emit("receive_state",b.state):b.diff?i.emit("receive_diff",b.diff):b.signal?i.emit(b.signal,b.data):b.stateField?i.emit("receive_state_field",b.stateField):i.emit("receive",{jsonData:b,rawMessage:p})}catch(b){throw He.red(s,"Couldn't parse json message although the flag was for string ..."),He.red(s,p),b}}else i.verbose&&He.yellow(s,`Connector ${i.endpoint} received binary data`),i.emit("receive_binary",h)}}Ht.util=Fn;const l0=1;function c0({connector:t,afterFirstStep:e=()=>{}}){const{clientPrivateKey:n,clientPublicKey:r,clientPublicKeyHex:i,protocol:s,tag:l,endpoint:c,verbose:a}=t;return new Promise((h,p)=>{t.remoteObject("Auth").call("exchangePubkeys",{pubkey:i}).then(b=>{const m=Ht.box.before(Qr(b),n);if(e({sharedSecret:m,remotePubkeyHex:b}),a&&He.write(t.log,`Connector ${c} established shared secret through diffie-hellman exchange.`),t.connection.websocket.readyState==l0)t.remoteObject("Auth").call("finalizeHandshake",{protocol:s}).then(y=>{if(y&&y.error)console.log(y.error);else{h();const E=l?` (${l})`:"";He.cyan(t.log,`☑️ ${c}${E} ✓ Connection #${t.connection.websocket.__id} [ ${s||'"no-name"'} ] ready`)}}).catch(p);else{const y=l?` (${l})`:"";He.yellow(t.log,`${c}${y} ✖ Connection [ ${s||'"no-name"'} ] closed just before finalizeHandshake step`)}}).catch(p)})}class a0 extends Er{constructor(e){super(),this.connector=e}send(...e){this.connector.send(...e)}}var Jt={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,REMOTE_INTERNAL_ERROR:-32603,TIMEOUT:-32701};class eo{constructor({transports:e}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transportsToRegister=e,this.methods={}}setMethodPrefix(e){this.methodPrefix=e}expose(e){this.methods=e}registerTransport(e){e.onData(this._processRequest.bind(this,e))}async _processRequest(e,n){const r=JSON.parse(n);let i;return Array.isArray(r)?i=await Promise.all(r.map(s=>this._callMethod(s,e))):i=await this._callMethod(r,e),JSON.stringify(i)}async _callMethod(e,n){if(!e.hasOwnProperty("method"))return;const{method:i,params:s=[],id:l}=e;let c=i;if(c.includes("::")){const[p,b]=c.split("::");if(c=b,this.methodPrefix&&p!=this.methodPrefix)return}const a=!this.methods[c]||typeof this.methods[c]!="function"||c==="constructor"||c.startsWith("_")||this.methods[c]===Object.prototype[c];let h={};if(a)h={jsonrpc:"2.0",id:l,error:{code:Jt.METHOD_NOT_FOUND,message:`Method [${c}] not found on remote target object`}};else{this.currentTransport=n;try{const p=await this.methods[c].apply(this.methods,s);if(!l)return;h={jsonrpc:"2.0",result:typeof p>"u"?null:p,id:l}}catch(p){console.log(`Exposed RPC method ${i} internal error:`),console.log(p),console.log("Sending this error as a result to calling client ..."),h={jsonrpc:"2.0",error:{code:Jt.REMOTE_INTERNAL_ERROR,message:`Method [${i}] internal error: ${p.stack}`},id:l}}}return h}run(){for(const e of this.transportsToRegister)this.registerTransport(e);this.transportsToRegister=[]}}class Nn extends Error{constructor(e={}){if(super(),!e.code)throw new Error("Code required");if(!e.message)throw new Error("Message required");this.code=e.code,this.message=e.message}}class u0 extends Nn{constructor(e){super({code:Jt.METHOD_NOT_FOUND,message:e||"Method not found"})}}class d0 extends Nn{constructor(){super({code:Jt.INVALID_PARAMS,message:"Invalid params"})}}class h0 extends Nn{constructor(e){super({code:Jt.REMOTE_INTERNAL_ERROR,message:`Error originating at remote endpoint: ${e}`||"Remote Internal error"})}}class _0 extends Nn{constructor(){super({code:Jt.PARSE_ERROR,message:"Parse error"})}}class p0 extends Nn{constructor(){super({code:Jt.INVALID_REQUEST,message:"Invalid request"})}}class to extends Nn{}class b0 extends to{constructor(e,n){super({code:Jt.TIMEOUT,message:`Request exceeded maximum execution time (${n}ms): ${e}`})}}var Kr={Base:Nn,MethodNotFound:u0,InvalidRequest:p0,InvalidParams:d0,RemoteInternalError:h0,ServerError:to,ParseError:_0,RequestTimeout:b0};class no{constructor({transport:e,requestTimeout:n=2e4}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transport=e,this.requestTimeout=n,this.pendingRequest={},this.initialized=!1}setMethodPrefix(e){this.methodPrefix=e}async callMethod(e,n){this._init();const r=this.methodPrefix?`${this.methodPrefix}::${e}`:e,i=this._makeRequestObject({method:r,params:n});return this._sendRequest({object:i,id:i.id})}notify(e,n){this._init();const r=this._makeRequestObject({method:e,params:n,mode:"notify"});return this.transport.sendData(JSON.stringify(r)),!0}async runBatch(e){const n=this._generateId();let r=!0;const i=[];for(const[s,l,c]of e){const a=this._makeRequestObject({method:s,params:l,mode:c,batchId:n});a.id&&(r=!1),i.push(a)}return r?this.transport.sendData(JSON.stringify(i)):this._sendRequest({object:i,id:n})}_init(){this.initialized||(this.transport.onData(this._processResponse.bind(this)),this.initialized=!0)}_sendRequest({object:e,id:n}){const r=JSON.stringify(e);return new Promise((i,s)=>{this.pendingRequest[n]={resolve:i,reject:s,sentObject:e},setTimeout(()=>{this.pendingRequest[n]&&(delete this.pendingRequest[n],s(new Kr.RequestTimeout(r,this.requestTimeout)))},this.requestTimeout);try{this.transport.sendData(r)}catch(l){delete this.pendingRequest[n],s(l)}})}_processResponse(e){const n=JSON.parse(e);Array.isArray(n)?this._processBatchResponse(n):this._processSingleCallResponse(n)}_processSingleCallResponse(e){const n=e.hasOwnProperty("result")||!1,r=e.hasOwnProperty("error");if(!n&&!r)return;const i=this.pendingRequest[e.id];if(delete this.pendingRequest[e.id],!!i){if(n)i.resolve(e.result);else if(r){const s=this._makeErrorObject(e.error);i.reject(s)}}}_processBatchResponse(e){let n;const r={},i=[];for(const h of e)h.id?(n||(n=h.id.split("|")[0]),r[h.id]=h):h.error&&i.push(h.error);if(!this.pendingRequest[n])return;const{sentObject:s,resolve:l}=this.pendingRequest[n];delete this.pendingRequest[n];const c=[];let a=0;for(const h of s){if(!h.id){c.push(null);continue}const p=r[h.id];p?p.hasOwnProperty("result")||!1?c.push({success:!0,result:p.result}):c.push({success:!1,result:this._makeErrorObject(p.error)}):(c.push({success:!1,error:this._makeErrorObject(i[a])}),a++)}l(c)}_makeRequestObject({method:e,params:n,mode:r,batchId:i}){const s={jsonrpc:"2.0",method:e};return n&&n.length&&(s.params=n),r!=="notify"&&(s.id=i?`${i}|${this._generateId()}`:this._generateId()),s}_makeErrorObject(e){const n={[Jt.METHOD_NOT_FOUND]:()=>new Kr.MethodNotFound(e.message),[Jt.REMOTE_INTERNAL_ERROR]:()=>new Kr.RemoteInternalError(e.message)}[e.code];return n()}_generateId(){const e="bjectSymhasOwnProp-0123456789ABCDEFGHIJKLMNQRTUVWXYZ_dfgiklquvxz";let n=10,r="";for(;0t.setMethodPrefix(s):(...s)=>r.callMethod.call(r,i,s)}})}function Qf(t){return new Proxy(t,{get(e,n){return(...r)=>e.call(null,n,r)},apply(e,n,r){return e.apply(null,r)}})}class m0 extends no{constructor(...e){return super(...e),v0(this)}}class y0{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",e)}sendData(e){this.channel.send(e)}}class ro{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",async n=>{const r=await e(n);r&&this.channel.send(r)})}}var g0=Object.freeze({__proto__:null,MoleServer:eo,MoleClient:no,MoleClientProxified:m0,ClientTransport:y0,ServerTransport:ro});class w0 extends Error{constructor(e,n){super(e),this.name=this.constructor.name,this.errorCode=n}errorCode(){return this.errorCode}}const{MoleClient:x0,ClientTransport:A0}=g0;class E0{constructor(e,n,r){this.moleChannel=new a0(e),this.methodPrefix=n,this.connectorOrServersideChannel=e,this.client=new x0({requestTimeout:r,transport:new A0(this.moleChannel)})}jsonrpcMsgReceive(e){this.moleChannel.emit("json_rpc",e)}call(e,n){return this.connectorOrServersideChannel.closed()?new Promise((r,i)=>{i(new w0(`Method call [${this.methodPrefix}::${e}] on closed channel or connector ignored. Please add a check for closed channel in your code.`,"CLOSED_CHANNEL"))}):this.client.callMethod(`${this.methodPrefix}::${e}`,n)}}const S0=1e4;class O0{constructor(e,n){this.connectorOrServersideChannel=e,this.remoteObjects={},this.requestTimeout=n||S0}remoteObject(e){return this.remoteObjects[e]||(this.remoteObjects[e]=new E0(this.connectorOrServersideChannel,e,this.requestTimeout)),this.remoteObjects[e]}jsonrpcMsgReceive(e){for(const n of Object.values(this.remoteObjects))n.jsonrpcMsgReceive(e)}}class k0{constructor({serversideChannel:e,serverMethods:n,methodPrefix:r}){const i=[new ro(e)];this.server=new eo({transports:i}),this.server.expose(n),this.server.setMethodPrefix(r),this.server.run()}}/*! + * https://github.com/Starcounter-Jack/JSON-Patch + * (c) 2017 Joachim Wester + * MIT license + */var C0=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)i.hasOwnProperty(s)&&(r[s]=i[s])},t(e,n)};return function(e,n){t(e,n);function r(){this.constructor=e}e.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),T0=Object.prototype.hasOwnProperty;function ei(t,e){return T0.call(t,e)}function ti(t){if(Array.isArray(t)){for(var n=new Array(t.length),e=0;e=48&&r<=57){e++;continue}return!1}return!0}function Sn(t){return t.indexOf("/")===-1&&t.indexOf("~")===-1?t:t.replace(/~/g,"~0").replace(/\//g,"~1")}function io(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function ri(t){if(t===void 0)return!0;if(t){if(Array.isArray(t)){for(var e=0,n=t.length;e=b){if(n&&e.op==="add"&&y>h.length)throw new ht("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",s,e,t);var l=N0[e.op].call(e,h,y,t);if(l.test===!1)throw new ht("Test operation failed","TEST_OPERATION_FAILED",s,e,t);return l}}else if(y&&y.indexOf("~")!=-1&&(y=io(y)),p>=b){var l=Ln[e.op].call(e,h,y,t);if(l.test===!1)throw new ht("Test operation failed","TEST_OPERATION_FAILED",s,e,t);return l}h=h[y]}}}function _i(t,e,n,r,i){if(r===void 0&&(r=!0),i===void 0&&(i=!0),n&&!Array.isArray(e))throw new ht("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");r||(t=It(t));for(var s=new Array(e.length),l=0,c=e.length;l0)throw new ht('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",e,t,n);if((t.op==="move"||t.op==="copy")&&typeof t.from!="string")throw new ht("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",e,t,n);if((t.op==="add"||t.op==="replace"||t.op==="test")&&t.value===void 0)throw new ht("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",e,t,n);if((t.op==="add"||t.op==="replace"||t.op==="test")&&ri(t.value))throw new ht("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",e,t,n);if(n){if(t.op=="add"){var i=t.path.split("/").length,s=r.split("/").length;if(i!==s+1&&i!==s)throw new ht("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",e,t,n)}else if(t.op==="replace"||t.op==="remove"||t.op==="_get"){if(t.path!==r)throw new ht("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",e,t,n)}else if(t.op==="move"||t.op==="copy"){var l={op:"_get",path:t.from,value:void 0},c=so([l],n);if(c&&c.name==="OPERATION_PATH_UNRESOLVABLE")throw new ht("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",e,t,n)}}}else throw new ht("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",e,t,n)}function so(t,e,n){try{if(!Array.isArray(t))throw new ht("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(e)_i(It(e),It(t),n||!0);else{n=n||xr;for(var r=0;r0&&(t.patches=[],t.callback&&t.callback(r)),r}function bi(t,e,n,r,i){if(e!==t){typeof e.toJSON=="function"&&(e=e.toJSON());for(var s=ti(e),l=ti(t),c=!1,a=l.length-1;a>=0;a--){var h=l[a],p=t[h];if(ei(e,h)&&!(e[h]===void 0&&p!==void 0&&Array.isArray(e)===!1)){var b=e[h];typeof p=="object"&&p!=null&&typeof b=="object"&&b!=null?bi(p,b,n,r+"/"+Sn(h),i):p!==b&&(i&&n.push({op:"test",path:r+"/"+Sn(h),value:It(p)}),n.push({op:"replace",path:r+"/"+Sn(h),value:It(b)}))}else Array.isArray(t)===Array.isArray(e)?(i&&n.push({op:"test",path:r+"/"+Sn(h),value:It(p)}),n.push({op:"remove",path:r+"/"+Sn(h)}),c=!0):(i&&n.push({op:"test",path:r,value:t}),n.push({op:"replace",path:r,value:e}))}if(!(!c&&s.length==l.length))for(var a=0;a{this.wireStateReceived=!0,this.set(n)}),this.connector.on("receive_diff",n=>{this.wireStateReceived&&(Y0(this.state,n),this.announceStateChange())})}field(e){return this.connector.connectionState.get(e)}}class H0 extends Kn{constructor(e){super({}),this.fields={},this.connector=e,this.connector.on("receive_state_field",({name:n,state:r})=>{this.get(n).set(r)})}get(e){return this.fields[e]||(this.fields[e]=new Kn),this.fields[e]}}Ht.util=Fn;const J0=700,W0=6e4,Z0=1;class G0 extends Er{constructor({endpoint:e,protocol:n,keypair:r=Js(),rpcRequestTimeout:i,verbose:s=!1,tag:l,log:c=console.log,autoDecommission:a=!1,dummy:h}={}){super(),this.protocol=n,this.log=c;const{privateKey:p,publicKey:b}=Ws(r);this.clientPrivateKey=p,this.clientPublicKey=b,this.clientPublicKeyHex=yr(b),this.rpcClient=new O0(this,i),this.endpoint=e,this.verbose=s,this.tag=l,this.autoDecommission=a,this.sentCount=0,this.receivedCount=0,this.successfulConnectsCount=0,h||(this.state=new F0(this),this.connectionState=new H0(this)),this.connected=new Kn,this.delayedAdjustConnectionStatus(),s&&He.green(this.log,`Connector ${this.endpoint} created`),this.decommissionCheckCounter=0,this.lastPongReceivedAt=Date.now(),this.on("pong",()=>{this.lastPongReceivedAt=Date.now()})}delayedAdjustConnectionStatus(){setTimeout(()=>{this.connected.get()==null&&this.connected.set(!1)},J0)}send(e){s0({data:e,connector:this}),this.sentCount+=1}signal(e,n){this.connected.get()?this.send({signal:e,data:n}):He.write(this.log,"Warning: trying to send signal over disconnected connector, this should be prevented by GUI")}userAction({action:e,scope:n,payload:r}){this.signal("__action",{action:e,scope:n,payload:r})}on(e,n){e=="ready"&&this.isReady()&&n(),super.on(e,n)}getSharedSecret(){return this.sharedSecret?yr(this.sharedSecret):void 0}wireReceive({jsonData:e,encryptedData:n,rawMessage:r}){Xs({jsonData:e,encryptedData:n,rawMessage:r,connector:this}),this.receivedCount+=1}field(e){return this.connectionState.get(e)}isReady(){return this.ready}closed(){return!this.transportConnected}connectStatus(e){if(e){this.sentCount=0,this.receivedCount=0,this.transportConnected=!0,this.successfulConnectsCount+=1,this.verbose&&He.white(this.log,`✓ Connector ${this.endpoint} connected (${this.successfulConnectsCount} total reconnects)`);const n=this.connection.websocket.__id;c0({connector:this,afterFirstStep:({sharedSecret:i,remotePubkeyHex:s})=>{this.sharedSecret=i,this._remotePubkeyHex=s}}).then(()=>{this.connectedAt=Date.now(),this.connected.set(!0),this.ready=!0,this.emit("ready")}).catch(i=>{this.connection.websocket.__id==n&&this.connection.websocket.readyState==Z0&&i.code==Jt.TIMEOUT&&(He.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] handshake error: "${i.message}"`),He.write(this.log,`${this.endpoint} Connector dropping stale websocket after handshake error`),this.connection.terminate()),i.code!=Jt.TIMEOUT&&He.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] on:ready error: "${i.stack}" — (will not try to reconnect, fix the error and reload this gui)`)})}else{let n;this.transportConnected&&(n=!0),this.transportConnected==null&&He.write(this.log,`${this.endpoint} Connector was not able to connect at first try`),this.transportConnected=!1,this.ready=!1,this.sharedSecret=void 0,delete this.connectedAt,n&&(this.emit("disconnect"),e==null&&this.delayedAdjustConnectionStatus(),this.connected.set(e))}}checkForDecommission(){this.autoDecommission&&(this.decommissionCheckRequestedAt&&Date.now()-this.decommissionCheckRequestedAt>3e3&&(this.decommissionCheckCounter=0),this.decommissionCheckRequestedAt=Date.now(),this.decommissionCheckCounter+=1,this.decommissionCheckCounter>12&&Date.now()-this.lastPongReceivedAt>W0&&(He.write(this.log,`Decommissioning connector ${this.endpoint} (long inactive)`),this.decommission(),this.emit("decommission")))}decommission(){this.decommissioned=!0}remoteObject(e){return{call:(n,r=[])=>this.rpcClient.remoteObject(e).call(n,Ju(r))}}attachObject(e,n){new k0({serversideChannel:this,serverMethods:n,methodPrefix:e})}clientPubkey(){return this.clientPublicKeyHex}remotePubkeyHex(){return this._remotePubkeyHex}remoteAddress(){return this.endpoint}}const es=typeof window<"u";function V0({endpoint:t,host:e,port:n}){if(es&&t&&t.startsWith("/")&&(t=`${window.location.protocol.includes("s")?"wss":"ws"}://${window.location.host}${t}`),!t)if(es){e=e||window.location.hostname;const r=window.location.protocol.includes("s")?"wss":"ws";t=`${r}://${e}`,r=="wss"?t=`${r}://${e}/ws`:n?t=`${t}:${n}`:window.location.port&&(t=`${t}:${window.location.port}`)}else{if(!n)throw new Error(`Connectome determineEndpoint: No websocket port provided for ${e}`);t=`ws://${e||"localhost"}:${n}`}return t}const _n=typeof window<"u",Q0=0,oo=1,X0=1e3,e1=3,t1=5;function or(t,e,n){_n?n.addEventListener(t,e):n.on(t,e)}function Qn(t,e,n){_n?n.removeEventListener(t,e):n.off(t,e)}function n1({endpoint:t,host:e,port:n,protocol:r,keypair:i,remotePubkey:s,rpcRequestTimeout:l,autoDecommission:c,log:a,verbose:h,tag:p,dummy:b},{WebSocket:m}){t=V0({endpoint:t,host:e,port:n});const y=new G0({endpoint:t,protocol:r,rpcRequestTimeout:l,keypair:i,verbose:h,tag:p,log:a,autoDecommission:c,dummy:b}),E=()=>{i1({connector:y,endpoint:t},{WebSocket:m,reconnect:E,log:a,verbose:h})};y.connection={terminate(){this.websocket._removeAllCallbacks(),this.websocket.__closed=!0,this.websocket.close(),y.connectStatus(!1),E()},isOpen(){return this.websocket.readyState==oo&&!this.websocket.__closed},endpoint:t,checkTicker:0};const x=()=>{y.decommissioned||(r1({connector:y,reconnect:E,log:a}),setTimeout(x,X0))};return setTimeout(x,10),y}function r1({connector:t,reconnect:e,log:n}){const r=t.connection;if(s1(r)||t.decommissioned){t.decommissioned?(He.yellow(n,`${t.endpoint} Connection decommisioned, closing websocket #${r.websocket.__id}, will not retry again `),lo(t)):(t.emit("inactive_connection"),He.yellow(n,`${t.endpoint} ✖ Terminated inactive connection #${r.websocket.__id}`)),r.terminate();return}co(r)?r.websocket.send("ping"):(t.connected==null&&(He.write(n,`${t.endpoint} Setting connector status to FALSE because connector.connected is undefined`),t.connectStatus(!1)),e()),r.checkTicker+=1}function i1({connector:t,endpoint:e},{WebSocket:n,reconnect:r,log:i,verbose:s}){const l=t.connection;if(t.checkForDecommission(),t.decommissioned){lo(t);return}const c=Math.round(10**5*Math.random()).toString();if(l.currentlyTryingWS&&l.currentlyTryingWS.readyState==Q0){if(l.currentlyTryingWS._waitForConnectCounter{});const h=()=>{t.decommissioned||((s||_n)&&He.write(i,`${e} Websocket #${c} open`),l.currentlyTryingWS=null,l.checkTicker=0,f1({ws:a,connector:t,openCallback:h,reconnect:r},{log:i,verbose:s}),l.websocket=a,t.connectStatus(!0))};a._removeAllCallbacks=()=>{Qn("open",h,a)},or("open",h,a)}function f1({ws:t,connector:e,openCallback:n,reconnect:r},{log:i,verbose:s}){const l=e.connection,c=p=>{const b=`${e.endpoint} Websocket error`;console.log(b),console.log(p)},a=()=>{if(t.__closed=!0,He.blue(i,`${e.endpoint} ✖ Connection #${t.__id} [ ${e.protocol} ] closed`),e.decommissioned){e.connectStatus(!1);return}e.connectStatus(void 0),r()},h=p=>{if(e.decommissioned)return;l.checkTicker=0;const b=_n?p.data:p;if(t.__closed)return;if(b=="pong"){e.emit("pong");return}let m;try{m=JSON.parse(b)}catch{}if(m)e.wireReceive({jsonData:m,rawMessage:b});else{const y=_n?new Uint8Array(b):b;e.wireReceive({encryptedData:y})}};t._removeAllCallbacks=()=>{Qn("error",c,t),Qn("close",a,t),Qn("message",h,t),Qn("open",n,t)},or("error",c,t),or("close",a,t),or("message",h,t)}function lo(t){const e=t.connection;e.currentlyTryingWS&&(e.currentlyTryingWS._removeAllCallbacks(),e.currentlyTryingWS.__closed=!0,e.currentlyTryingWS.close(),e.currentlyTryingWS=null),e.websocket&&(e.websocket._removeAllCallbacks(),e.websocket.__closed=!0,e.websocket.close(),e.websocket=null),t.connectStatus(!1)}function co(t){return t.websocket&&t.websocket.readyState==oo&&!t.websocket.__closed}function s1(t){return co(t)&&t.checkTicker>e1}function o1(t){return t.log=t.log||console.log,n1(t,{WebSocket})}class l1{constructor({mcs:e,foreground:n,connectToDeviceKey:r}){this.mcs=e,this.foreground=n,this.connectToDeviceKey=r}createConnector({host:e,autoDecommission:n=!1}){const{port:r,protocol:i,rpcRequestTimeout:s,log:l,verbose:c,keypair:a}=this.mcs;return o1({host:e,port:r,protocol:i,keypair:a,rpcRequestTimeout:s,autoDecommission:n,log:l,verbose:c})}getDeviceKey(e){var n;return(n=e==null?void 0:e.device)==null?void 0:n.deviceKey}connectThisDevice({host:e}){const n=this.createConnector({host:e});let r=!1;return n.state.subscribe(i=>{var l;i.nearbyDevices||(i.nearbyDevices=[]),i.notifications||(i.notifications=[]);const s=this.getDeviceKey(i);if(s){r||(n.on("pong",()=>{this.mcs.emit("pong",{deviceKey:s})}),r=!0),this.thisDeviceAlreadySetup||(this.mcs.set({activeDeviceKey:s}),this.initNewConnector({deviceKey:s,connector:n}));const c=this.connectToDeviceKey&&this.connectToDeviceKey!=s;if(!c&&this.mcs.activeDeviceKey()==s){const a=(l=i.device)==null?void 0:l.deviceName;this.foreground.set(i,{optimisticDeviceName:a})}this.foreground.setSpecial(i),this.thisDeviceAlreadySetup||(c&&(this.mcs.switch({deviceKey:this.connectToDeviceKey}),delete this.connectToDeviceKey),this.thisDeviceAlreadySetup=!0)}}),n}connectOtherDevice({host:e,deviceKey:n}){if(!this.mcs.connectors[n]){const r=this.createConnector({host:e,autoDecommission:!0});r.on("decommission",()=>{delete this.mcs.connectors[n],r.__removeListeners&&r.__removeListeners()});const i=()=>{this.mcs.emit("pong",{deviceKey:n})};r.on("pong",i),this.initNewConnector({deviceKey:n,connector:r});const s=r.state.subscribe(l=>{if(this.mcs.activeDeviceKey()==n){const c=l.device?l.device.deviceName:null;this.foreground.set(l,{optimisticDeviceName:c})}});r.__removeListeners=()=>{r.off("pong",i),s()}}return this.mcs.connectors[n]}initNewConnector({deviceKey:e,connector:n}){this.mcs.connectors[e]=n,this.setConnectedStore({deviceKey:e,connector:n})}setConnectedStore({deviceKey:e,connector:n}){n.connected.subscribe(r=>{this.mcs.activeDeviceKey()==e&&this.mcs.connected.set(r)})}}function ao(t,e=0,n={}){const r=["day","h","min","s"],i=[24,60,60,1e3];if(e==r.length)return n.ms=t,n;e==0&&(n.totalSeconds=t/1e3);const s=i.slice(e).reduce((l,c)=>l*c,1);return n[r[e]]=Math.floor(t/s),ao(t%s,e+1,n)}function c1(t){const e=["day","h","min","s"];let n="";for(const r of e)t[r]>0&&(r!="s"||r=="s"&&t.totalSeconds<60)&&(n=`${n} ${t[r]} ${r}`);return n.trim()}function uo(t){if(t){const e=Date.now(),n=3e3;return t.filter(r=>e({...r,relativeTimeAdded:e-r.addedAtc.deviceKey==n&&!c.thisDevice);if(l){const{deviceKey:c,deviceName:a,ip:h}=l;this.switch({host:h,deviceKey:c,deviceName:a})}else this.emit("connect_to_device_key_failed"),this.switchState(i.device)}}}const d1=500;class h1 extends Bu{constructor({host:e,port:n,protocol:r,keypair:i=Js(),connectToDeviceKey:s,rpcRequestTimeout:l=3e3,log:c,verbose:a}){super();const h=["time","environment","nearbyDevices","nearbySensors","notifications"],{publicKey:p,privateKey:b}=Ws(i);this.publicKey=p,this.privateKey=b,this.keypair=i,this.port=n,this.protocol=r,this.log=c,this.rpcRequestTimeout=l,this.verbose=a,this.connectors={},this.connected=new Kn;const m=new a1({mcs:this,thisDeviceStateKeys:h}),y=new l1({mcs:this,foreground:m,connectToDeviceKey:s});this.connectDevice=y,this.switchDevice=new u1({mcs:this,connectDevice:y,foreground:m}),this.switchDevice.on("connect_to_device_key_failed",()=>{this.emit("connect_to_device_key_failed")}),this.localConnector=y.connectThisDevice({host:e}),this._notificationsExpireAndCalculateRelativeTime()}_notificationsExpireAndCalculateRelativeTime(){const{notifications:e}=this.get();this.setMerge({notifications:uo(e)}),setTimeout(()=>{this._notificationsExpireAndCalculateRelativeTime()},d1)}signal(e,n){this.activeConnector()?this.activeConnector().signal(e,n):console.log(`MCS: Error emitting remote signal ${e} / ${n}. Debug info: activeDeviceKey=${this.activeDeviceKey()}`)}signalLocalDevice(e,n){this.localConnector.signal(e,n)}remoteObject(e){if(this.activeConnector())return this.activeConnector().remoteObject(e);console.log(`Error obtaining remote object ${e}. Debug info: activeDeviceKey=${this.activeDeviceKey()}`)}preconnect({host:e,deviceKey:n,thisDevice:r}){return r?this.localConnector:this.connectDevice.connectOtherDevice({host:e,deviceKey:n})}switch({host:e,deviceKey:n,deviceName:r}){this.switchDevice.switch({host:e,deviceKey:n,deviceName:r})}activeConnector(){if(this.activeDeviceKey())return this.connectors[this.activeDeviceKey()]}activeDeviceKey(){return this.get().activeDeviceKey}}const _1=7780,p1="dmt/gui",ho=localStorage.getItem("current_device_key");console.log(`connectToDeviceKey: ${ho}`);const _o=new h1({port:_1,protocol:p1,connectToDeviceKey:ho,log:qt.log});_o.on("connect_to_device_key_failed",()=>{console.log("connect_to_device_key_failed FAILED"),localStorage.removeItem("current_device_key")});window.onerror=Mo(ys);new Mu({target:document.body,props:{store:_o,log:qt.log}}); diff --git a/apps/dmt-mobile/assets/index-b31784e1.css b/apps/dmt-mobile/assets/index-b31784e1.css new file mode 100644 index 000000000..a4c318f7e --- /dev/null +++ b/apps/dmt-mobile/assets/index-b31784e1.css @@ -0,0 +1 @@ +:root{--warning: #e34042;--dmt-red: var(--warning);--dmt-dark-red: #983128;--dmt-orange: #e46f3c;--dmt-yellow: #dfdb83;--dmt-warm-yellow: #fec83b;--dmt-gray: #8e8d96;--dmt-light-gray: #999;--dmt-dark-gray: #454545;--dmt-silver: #99b1ba;--dmt-black: #333;--dmt-blue: #8592d2;--dmt-navy: #41468f;--dmt-navy2: #292c5a;--dmt-green: #00ffbd;--dmt-green-yellow: #d6f3db;--dmt-green-yellow2: #F0F4C5;--dmt-cool-green: #5df699;--dmt-crypto-green: #00bfb6;--dmt-vibrant-green: #5fe02a;--dmt-cyan: #29b3bf;--dmt-light-cyan: #68f5e7;--dmt-bright-cyan: #3dffec;--dmt-system-cyan: #3effe5;--dmt-system: #27b1be;--dmt-cool-cyan: #51f5c8;--dmt-cool-cyan2: #58e288;--dmt-violet: #986aeb;--dmt-dark-violet: #2e1740;--dmt-pink: #efcaf8;--dmt-warm-pink: #f4b5bd;--dmt-warmer-pink: #eebfc9;--dmt-magenta: #2b294c;--dmt-light-magenta: #9aa9ef;--dmt-lighter-magenta: #cad2ff;--dmt-cool-green-rgb: 93, 246, 153;--dmt-cool-cyan-rgb: 81, 245, 200;--zeta-green: #31e5c1;--zeta-green-highlight: #34fed7;--zeta-green_check: rgb(55, 136, 124);--zeta-dark-green: #248576;--up-euler: #1b2b3a;--up-navy: #2b294c}html,body{width:100%;height:100%;font-family:Nunito Sans,sans-serif;padding:0;margin:0;touch-action:manipulation}body{color:#333;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;background-color:#291b34}a{text-decoration:underline}a:hover{text-decoration:underline;cursor:pointer;opacity:.9}a:visited{color:#0050a0}label{display:block}input,button,select,textarea{font-family:inherit;font-size:inherit;padding:.4em;margin:0 0 .5em;box-sizing:border-box;border:1px solid #ccc;border-radius:2px}input:disabled{color:#ccc}input[type=range]{height:0}button{color:#333;outline:none}button:hover:not(:disabled){cursor:pointer;opacity:.9}button:disabled{opacity:.5}button:not(:disabled):active{filter:contrast(.9)}button:focus{border-color:#666}.device_title.svelte-5h63c7.svelte-5h63c7{padding:20px 0 5px;color:var(--dmt-silver)}.device_title.svelte-5h63c7 .play_symbol.svelte-5h63c7{color:var(--dmt-light-gray)}h2.svelte-5h63c7.svelte-5h63c7{display:inline-block;color:var(--dmt-light-magenta);margin:0}h2.disconnected.svelte-5h63c7.svelte-5h63c7{color:var(--dmt-silver)}h2.svelte-5h63c7 span.disconnected.svelte-5h63c7:after{color:var(--dmt-red);content:"\2716\fe0e"}.wifi_ap.svelte-5h63c7.svelte-5h63c7,.device_stat.svelte-5h63c7.svelte-5h63c7{font-size:.7rem}.wifi_ap.svelte-5h63c7 span.svelte-5h63c7,.device_stat.svelte-5h63c7 span.svelte-5h63c7{color:var(--dmt-gray)}.wifi_ap.svelte-5h63c7.svelte-5h63c7{margin-bottom:10px}.cpu_usage.warn1.svelte-5h63c7.svelte-5h63c7{color:var(--dmt-warm-yellow)}.cpu_usage.warn2.svelte-5h63c7.svelte-5h63c7{color:var(--dmt-orange)}.cpu_usage.warn3.svelte-5h63c7.svelte-5h63c7{color:var(--dmt-red)}.progress.svelte-b6jwnj.svelte-b6jwnj{color:var(--dmt-green)}.progress.svelte-b6jwnj span.svelte-b6jwnj{font-weight:700}.faded.svelte-b6jwnj.svelte-b6jwnj{color:var(--dmt-silver)}.wrapper.svelte-120eh85.svelte-120eh85{padding:0 10px 20px}.current_media.svelte-120eh85.svelte-120eh85{max-width:700px;color:var(--dmt-silver)}.no_media.svelte-120eh85.svelte-120eh85{color:var(--dmt-pink)}.current_media.svelte-120eh85.svelte-120eh85{padding:1px 2px;border-radius:4px;display:inline-block;font-size:1.5rem;margin:0 0 10px;word-break:break-all;overflow-wrap:anywhere}.no_media.svelte-120eh85.svelte-120eh85{font-size:1.2rem}.current_media.error.svelte-120eh85.svelte-120eh85{color:var(--dmt-red)}.current_media.playing.svelte-120eh85.svelte-120eh85{color:var(--dmt-green)}.current_media.playing.svelte-120eh85 .play_symbol.svelte-120eh85{font-size:.9em;color:var(--dmt-light-gray)}.current_media.within_limit.svelte-120eh85.svelte-120eh85{color:var(--dmt-green-yellow);opacity:.7}.current_media.last_in_limit.svelte-120eh85.svelte-120eh85{color:var(--dmt-green-yellow2);opacity:.7}.current_media.playing.svelte-120eh85.svelte-120eh85{opacity:1}.current_media.svelte-120eh85 .file_path.svelte-120eh85{padding-top:5px;font-size:.5rem;color:var(--dmt-light-gray);word-break:break-all;overflow-wrap:anywhere}section.svelte-p9vgzg.svelte-p9vgzg{max-width:500px;padding:0 10px;margin:0 auto;display:flex;--button-spacing:10px}button.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-silver);border:0;margin-left:var(--button-spacing);border-radius:5px;flex-basis:100%;text-align:center}button.svelte-p9vgzg.svelte-p9vgzg{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}button.svelte-p9vgzg.svelte-p9vgzg:first-child{margin-left:0}button.svelte-p9vgzg.svelte-p9vgzg:disabled{opacity:.5}button.stop.radio.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-lighter-magenta)}.volume_level.svelte-p9vgzg.svelte-p9vgzg{text-align:center;font-weight:700;margin-left:var(--button-spacing);color:var(--dmt-silver);display:flex;align-items:center;justify-content:center;padding-bottom:10px}.volume_level.faded.svelte-p9vgzg.svelte-p9vgzg{color:var(--dmt-light-gray)}button.play.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-green);word-break:keep-all}button.pause.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-navy);color:#fff;word-break:keep-all}button.play.svelte-p9vgzg span.svelte-p9vgzg,button.pause.svelte-p9vgzg span.svelte-p9vgzg{color:var(--dmt-navy2);font-size:.8rem}button.pause.svelte-p9vgzg span.svelte-p9vgzg{color:var(--dmt-silver)}button.set_time_limit.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-dark-violet);color:var(--dmt-silver);font-size:.8rem}button.volume.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-light-cyan)}button.remove_limit.svelte-p9vgzg.svelte-p9vgzg{color:#777;background-color:#fff;font-size:.8rem}button.backward.svelte-p9vgzg.svelte-p9vgzg,button.forward.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-lighter-magenta);font-size:.8rem}button.limit.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-green-yellow)}button.remove_limit.svelte-p9vgzg.svelte-p9vgzg{color:var(--dmt-silver);background-color:var(--dmt-magenta)}button.limit_set.svelte-p9vgzg.svelte-p9vgzg{color:var(--dmt-green-yellow);background-color:var(--dmt-magenta)}button.time_limit_set.svelte-p9vgzg.svelte-p9vgzg,button.remove_time_limit.svelte-p9vgzg.svelte-p9vgzg{background-color:var(--dmt-dark-violet);color:#fff}button.time_limit_set.svelte-p9vgzg.svelte-p9vgzg{font-size:.8rem}button.repeat_set.svelte-p9vgzg.svelte-p9vgzg{background-color:#80ccf6}form.svelte-11smw5j.svelte-11smw5j{max-width:500px;margin:0 auto;display:flex;padding:0 10px}.input_wrapper.svelte-11smw5j.svelte-11smw5j{display:inline-block;position:relative;margin-bottom:10px;max-width:500px;width:100%;flex-basis:100%}.input_wrapper.svelte-11smw5j img.magnifying_glass.svelte-11smw5j{position:absolute;top:8px;left:8px;height:15px}.input_wrapper.svelte-11smw5j img.clear_search.svelte-11smw5j{position:absolute;top:8px;right:10px;height:17px;opacity:.7}.input_wrapper.svelte-11smw5j img.clear_search.svelte-11smw5j:hover{cursor:pointer;opacity:1}.input_wrapper.svelte-11smw5j img.clear_search.invisible.svelte-11smw5j{display:none}input.svelte-11smw5j.svelte-11smw5j{background-color:var(--dmt-silver);border:0;border-radius:5px;padding-left:30px;padding-right:30px;width:100%;height:32px}input.svelte-11smw5j.svelte-11smw5j::placeholder{color:#555}input.svelte-11smw5j.svelte-11smw5j:is(:disabled){background-color:#fff;opacity:.5}button.svelte-11smw5j.svelte-11smw5j{border:0;border-radius:5px;margin-left:10px;background-color:var(--dmt-light-magenta);color:var(--dmt-black);width:145px;height:32px}button.svelte-11smw5j.svelte-11smw5j:not(:disabled):hover{cursor:pointer;opacity:.8}button.svelte-11smw5j.svelte-11smw5j:is(:disabled){background-color:gray;color:#aaa}.controls.svelte-27xey9.svelte-27xey9{margin:10px 0}.controls.svelte-27xey9 button.svelte-27xey9{border-radius:5px;padding:5px 10px;border:0}.controls.svelte-27xey9 button.svelte-27xey9{background-color:var(--dmt-cyan)}.entry_wrapper.svelte-5kr8d6.svelte-5kr8d6{padding:0 10px 2px}.entry.svelte-5kr8d6.svelte-5kr8d6{display:inline-block;color:var(--dmt-silver);padding:1px 2px;border-radius:4px;cursor:pointer;word-break:break-all;overflow-wrap:anywhere}.entry.within_limit.svelte-5kr8d6.svelte-5kr8d6{color:var(--dmt-green-yellow)}.entry.just_bumped.svelte-5kr8d6.svelte-5kr8d6{color:var(--dmt-blue)}.entry.within_limit.just_bumped.svelte-5kr8d6.svelte-5kr8d6{color:var(--dmt-green-yellow2)}.entry.is_search_result.svelte-5kr8d6.svelte-5kr8d6{color:var(--dmt-blue)}.entry.error.svelte-5kr8d6.svelte-5kr8d6{color:red}.entry.svelte-5kr8d6 span.duration.svelte-5kr8d6{color:var(--dmt-light-gray);font-size:.6rem}@media (hover: hover) and (pointer: fine){.entry.svelte-5kr8d6.svelte-5kr8d6:hover{background-color:var(--dmt-navy2)}}.entry.selected.svelte-5kr8d6.svelte-5kr8d6{background-color:var(--dmt-green);color:var(--dmt-black)}.entry.selected.svelte-5kr8d6 .file_path.svelte-5kr8d6,.entry.selected.svelte-5kr8d6 .duration.svelte-5kr8d6{color:var(--dmt-black)}.entry.svelte-5kr8d6:not(.selected) .controls.svelte-5kr8d6{display:none}.entry.svelte-5kr8d6 .file_path.svelte-5kr8d6{font-size:.4rem;color:var(--dmt-gray);word-break:break-all;overflow-wrap:anywhere}.result_count.svelte-11vb31n{margin-top:5px;padding-top:5px;padding-bottom:10px;color:#777}h3.svelte-11vb31n{padding:0;margin:0 0 5px;color:var(--dmt-silver)}h3.no_matches.svelte-11vb31n{color:var(--dmt-warmer-pink)}span.deemph.svelte-11vb31n{font-size:.8rem;color:#999}.sublist.svelte-84hcn8.svelte-84hcn8{margin:10px 0}.sublist.svelte-84hcn8 button.svelte-84hcn8{border-radius:5px;padding:10px 20px;border:0}.sublist.svelte-84hcn8 button.svelte-84hcn8{background-color:var(--dmt-green)}a.svelte-146wfrf.svelte-146wfrf{color:var(--dmt-light-cyan)}h3.svelte-146wfrf.svelte-146wfrf{padding:0 0 10px;margin:0 0 5px;color:var(--dmt-silver);display:inline-block;border-bottom:1px solid var(--dmt-silver)}h3.svelte-146wfrf span.svelte-146wfrf{font-size:.8em;color:var(--dmt-gray)}.searchable_playlist.svelte-1op3n77{margin-top:20px}.radios.svelte-tpf42f.svelte-tpf42f{margin:10px 0}.radios.svelte-tpf42f button.svelte-tpf42f{border-radius:5px;padding:5px 10px;border:0}.radios.svelte-tpf42f button.svelte-tpf42f{background-color:var(--dmt-cyan)}.nearby_devices.svelte-f8wsgm.svelte-f8wsgm{padding:10px;margin:0 auto}button.svelte-f8wsgm.svelte-f8wsgm{background-color:#d2effc;border:3px solid #D2EFFC;margin-left:7px;border-radius:5px;color:var(--dmt-black);height:38px;vertical-align:middle}button.active.svelte-f8wsgm.svelte-f8wsgm{background-color:var(--dmt-light-magenta);color:#000;border:3px solid var(--dmt-green)}button.connected.svelte-f8wsgm.svelte-f8wsgm{opacity:1}button.svelte-f8wsgm.svelte-f8wsgm:hover{border:3px solid var(--dmt-green)}button.late_pong1.svelte-f8wsgm.svelte-f8wsgm{opacity:.8}button.late_pong2.svelte-f8wsgm.svelte-f8wsgm{opacity:.7}button.late_pong3.svelte-f8wsgm.svelte-f8wsgm,button.disconnected.svelte-f8wsgm.svelte-f8wsgm{opacity:.5}button.local_device.disconnected.svelte-f8wsgm.svelte-f8wsgm{background-color:var(--dmt-red);color:#fff;opacity:1}button.svelte-f8wsgm .play_symbol.svelte-f8wsgm{font-size:.9em;color:var(--dmt-dark-gray)}button.cpu_usage_warn1.svelte-f8wsgm.svelte-f8wsgm{border:3px solid var(--dmt-warm-yellow)}button.cpu_usage_warn2.svelte-f8wsgm.svelte-f8wsgm{border:3px solid var(--dmt-orange)}button.cpu_usage_warn3.svelte-f8wsgm.svelte-f8wsgm{border:3px solid var(--dmt-red)}.error.svelte-f8wsgm.svelte-f8wsgm{background-color:#983128;color:#fff;padding:2px 5px;margin-right:5px}.options.svelte-zpx74i.svelte-zpx74i{padding-bottom:5px}.entry_door_options.svelte-zpx74i.svelte-zpx74i{margin:20px 0}.invisible.svelte-zpx74i.svelte-zpx74i{display:none}h3.svelte-zpx74i.svelte-zpx74i,h4.svelte-zpx74i.svelte-zpx74i{color:var(--dmt-blue)}h3.countdown.svelte-zpx74i.svelte-zpx74i{color:#fff}h3.countdown_turn_off.svelte-zpx74i.svelte-zpx74i{color:var(--dmt-light-cyan)}h3.countdown_turn_off.warn.svelte-zpx74i.svelte-zpx74i{color:var(--dmt-red)}h3.countdown_turn_off.svelte-zpx74i.svelte-zpx74i{margin-top:5px}h3.countdown.svelte-zpx74i span.svelte-zpx74i{color:var(--dmt-green)}h3.countdown_turn_off.svelte-zpx74i span.svelte-zpx74i{color:#fff}h4.suboption.svelte-zpx74i.svelte-zpx74i{color:var(--dmt-silver)}h3.sleep_device.svelte-zpx74i.svelte-zpx74i{color:var(--dmt-red)}h4.suboption.warn.svelte-zpx74i.svelte-zpx74i{color:var(--dmt-pink)}button.svelte-zpx74i.svelte-zpx74i{background-color:var(--dmt-light-cyan);border:0;padding:10px;margin:0 auto}button.svelte-zpx74i.svelte-zpx74i:disabled{opacity:.4}button.show_more_options.svelte-zpx74i.svelte-zpx74i{background-color:var(--dmt-silver)}button.open_door_show_options.svelte-zpx74i.svelte-zpx74i,.entry_door_options.svelte-zpx74i button.delayed_open.svelte-zpx74i{background-color:var(--dmt-blue);color:#000}button.cancel.svelte-zpx74i.svelte-zpx74i{background-color:var(--dmt-silver)}.parking_door_options.svelte-zpx74i button.keep_open_in_progress.svelte-zpx74i,.parking_door_options.svelte-zpx74i button.personal_entry_in_progress.svelte-zpx74i{color:#fff;background-color:var(--dmt-navy)}.parking_door_options.svelte-zpx74i h4.svelte-zpx74i{color:var(--dmt-warm-pink)}.parking_door_options.svelte-zpx74i button.fence_keep_open.svelte-zpx74i{background-color:var(--dmt-warm-pink)}.parking_door_options.svelte-zpx74i button.close_fence.svelte-zpx74i{background-color:var(--dmt-pink)}h4.volume.svelte-zpx74i.svelte-zpx74i{color:var(--dmt-pink)}button.volume.svelte-zpx74i.svelte-zpx74i{background-color:var(--dmt-pink)}button.personal_entry.svelte-zpx74i.svelte-zpx74i{background-color:var(--dmt-green-yellow)}h3.close_options.svelte-zpx74i.svelte-zpx74i{color:var(--dmt-silver)}button.close_options.svelte-zpx74i.svelte-zpx74i{background-color:var(--dmt-silver)}button.turn_off.svelte-zpx74i.svelte-zpx74i{background-color:#ee6c73;background-color:#eee}button.svelte-zpx74i.svelte-zpx74i{border-radius:5px}.options.svelte-xmpa81.svelte-xmpa81{padding-bottom:5px}h3.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-blue)}h3.countdown_turn_off.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-light-cyan)}h3.countdown_turn_off.warn.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-red)}h3.countdown_turn_off.svelte-xmpa81.svelte-xmpa81{margin-top:5px}h3.countdown_turn_off.svelte-xmpa81 span.svelte-xmpa81{color:#fff}h3.sleep_device.svelte-xmpa81.svelte-xmpa81{color:var(--dmt-red)}.sleep_device.svelte-xmpa81.svelte-xmpa81{margin-bottom:20px}button.svelte-xmpa81.svelte-xmpa81{background-color:var(--dmt-light-cyan);border:0;padding:10px;margin:0 auto}button.svelte-xmpa81.svelte-xmpa81:disabled{opacity:.4}button.cancel.svelte-xmpa81.svelte-xmpa81{background-color:var(--dmt-silver)}button.turn_off.svelte-xmpa81.svelte-xmpa81{background-color:#ee6c73;background-color:#eee}.sleep_device.svelte-xmpa81 button.add_time.svelte-xmpa81{background-color:#eee}button.svelte-xmpa81.svelte-xmpa81{border-radius:5px}button.svelte-o08zau{margin-left:5px;border-radius:5px;height:35px;background-color:#ffe748;border:0}button.svelte-o08zau:focus{outline:none;box-shadow:none}button.present.svelte-o08zau{color:var(--dmt-black);background-color:var(--dmt-bright-cyan)}button.halted.svelte-o08zau{color:var(--dmt-black);background-color:#ff40b0}button.moving.svelte-o08zau{color:var(--dmt-bright-cyan);background-color:var(--dmt-black);border:2px solid var(--dmt-bright-cyan)}button.disconnected.svelte-o08zau{background-color:var(--dmt-red);color:#fff}main.svelte-1kxggon{text-align:center;margin:0 auto}.blinds_ap2.visible.svelte-1kxggon{display:block}.section.svelte-1kxggon{padding:5px 10px}@media (min-width: 640px){main.svelte-1kxggon{max-width:none}}.notifications.svelte-9jalg6.svelte-9jalg6{margin-top:20px}.notification.svelte-9jalg6.svelte-9jalg6{display:block;width:100%;padding:10px 0;margin-bottom:5px}.notification.svelte-9jalg6 .title.svelte-9jalg6{font-weight:700;font-size:.8em;opacity:.8;margin-bottom:3px}.notification.svelte-9jalg6 .time.svelte-9jalg6{font-size:.8em;opacity:.4}.logview.svelte-jdzn25.svelte-jdzn25{color:var(--dmt-light-gray);width:95%;max-width:600px;text-align:left;margin:0 auto;padding-bottom:20px}h2.title.svelte-jdzn25.svelte-jdzn25{color:var(--dmt-light-cyan);text-align:center}.log_entry.svelte-jdzn25.svelte-jdzn25{font-size:.8rem;margin-bottom:1px;color:var(--dmt-silver)}.log_entry.recent.svelte-jdzn25.svelte-jdzn25{color:var(--dmt-cyan)}.log_entry.very_recent.svelte-jdzn25.svelte-jdzn25{color:var(--dmt-green)}.log_entry.svelte-jdzn25 span.time.svelte-jdzn25{color:gray;color:var(--dmt-light-cyan);padding-right:5px;width:50px;text-align:right;display:inline-block;font-size:.9em}.log_entry.svelte-jdzn25 span.time span.diff.svelte-jdzn25{color:var(--dmt-gray)}button.svelte-jdzn25.svelte-jdzn25{background-color:var(--dmt-light-cyan);border:0;padding:10px;width:100px;margin:0 auto;display:block}@media only screen and (max-width: 768px){.log_entry.svelte-jdzn25.svelte-jdzn25{font-size:.4rem}}.dmt.svelte-vrzjix{font-size:1.5rem;font-weight:800;color:var(--dmt-cool-cyan);color:var(--dmt-cyan)}.app.svelte-vrzjix{font-size:1.5rem;font-weight:300;color:var(--dmt-pink);color:var(--dmt-cool-cyan)}.wrapper.svelte-mtqbfw.svelte-mtqbfw{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.wrapper.svelte-mtqbfw p.svelte-mtqbfw{color:var(--dmt-pink)}.wrapper.svelte-mtqbfw p span.svelte-mtqbfw{color:var(--dmt-cyan)}.errors.svelte-1nzvkt5.svelte-1nzvkt5{width:100%;font-size:.6rem;max-width:700px;padding:0 10px;margin:0 auto;box-sizing:border-box}.errors.svelte-1nzvkt5 .error.svelte-1nzvkt5{padding:15px;margin-top:10px;background-color:var(--dmt-dark-red);color:#fff;border-radius:10px;color:#bbb;word-break:break-word}.errors.svelte-1nzvkt5 .error.cors_problem.svelte-1nzvkt5{background-color:#424de6}.error.svelte-1nzvkt5 .header.svelte-1nzvkt5{margin-bottom:5px}.error.svelte-1nzvkt5 .header .title.svelte-1nzvkt5{background-color:var(--dmt-dark-gray);padding:2px 4px;color:#fff}.error.svelte-1nzvkt5 .header .msg.svelte-1nzvkt5{color:#fff}.snackbar.svelte-ccmijj{display:none;background-color:transparent;color:transparent;text-align:start;position:fixed;z-index:9999;width:100%;max-width:60vw;padding-left:2.5rem;bottom:2rem;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s;font-size:17px}.message.svelte-ccmijj{background-color:#333;color:#fff;border-radius:2px;padding:1rem;align-items:flex-start;display:flex!important;gap:20px;justify-content:space-between}.show.svelte-ccmijj{display:flex!important}.danger.svelte-ccmijj{color:var(--dmt-red)}button.svelte-ccmijj{display:grid;place-items:center;padding:0;margin:0;color:#fff;background:transparent;border:transparent;cursor:pointer}button.svelte-ccmijj:active{transform:scale(.75)}.noise-pattern.svelte-1itrmks{position:absolute;top:0;right:0;width:min(50vw,50rem)}main.svelte-gx051d.svelte-gx051d{text-align:center;margin:0 auto;color:var(--dmt-silver)}main.svelte-gx051d.svelte-gx051d{width:100%;height:100%}p.logview_counter.svelte-gx051d.svelte-gx051d{font-size:.8rem}p.logview_counter.svelte-gx051d span.svelte-gx051d{color:var(--dmt-silver)}p.logview_counter.svelte-gx051d span.small.svelte-gx051d{color:var(--dmt-light-gray);font-size:.6rem}@media (min-width: 640px){main.svelte-gx051d.svelte-gx051d{max-width:none}} diff --git a/apps/dmt-mobile/index.html b/apps/dmt-mobile/index.html index a76ed5cab..7b278cfe4 100644 --- a/apps/dmt-mobile/index.html +++ b/apps/dmt-mobile/index.html @@ -7,11 +7,15 @@ - + + + + + DMT - - + +
diff --git a/apps/dmt-mobile/manifest.json b/apps/dmt-mobile/manifest.json new file mode 100644 index 000000000..564a0b3ce --- /dev/null +++ b/apps/dmt-mobile/manifest.json @@ -0,0 +1,11 @@ +{ + "name": "DMT", + "display": "standalone", + "icons": [ + { + "src": "appicon.png", + "type": "image/png", + "sizes": "512x512" + } + ] +} diff --git a/apps/dmt-search/dmt/connectome-next/index.js b/apps/dmt-search/dmt/connectome-next/index.js new file mode 100644 index 000000000..85cc468d2 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/index.js @@ -0,0 +1,4 @@ +import contentServer from './lib/fileTransport/contentServer/contentServer.js'; +import * as fiberHandle from './lib/fileTransport/fiberHandle/fiberHandle.js'; + +export { contentServer, fiberHandle }; diff --git a/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/checkPermission.js b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/checkPermission.js new file mode 100644 index 000000000..e6cb7c80f --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/checkPermission.js @@ -0,0 +1,15 @@ + +import { dmtContent, scan } from 'dmt/common'; + +let permittedPaths; + +export default function checkPermission({ directory }) { + if (!permittedPaths) { + // don't load this on top because it can crash the process before logger is ready! + permittedPaths = dmtContent.defaultContentPaths().map(path => scan.absolutizePath(path)); + } + // we check case sensitive ... there may be issues on macOS because there directories ./A and ./a are the same + // make sure that on macOS you specify directory in your content.def exactly as it is on the filesystem + // in linux you are forced to do this anyway by default (there ~/a and ~/A are different directories) + return permittedPaths.find(path => directory.startsWith(path)); +} diff --git a/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/contentServer--full--unused.js b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/contentServer--full--unused.js new file mode 100644 index 000000000..e345b745b --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/contentServer--full--unused.js @@ -0,0 +1,263 @@ +import { decode } from '../fiberHandle/encodePath.js'; + +// TODO -- implement backpressure control, read about this: +// https://nodejs.org/es/docs/guides/backpressuring-in-streams/ +// https://nodejs.org/api/stream.html#stream_stream + +// TODO: refactor this, implement DataSource -- ? +// use this abstraction when streaming search results as well ... + +function log(...args) { + console.log(...args); +} + +const sha256 = (crypto, x) => crypto.createHash('sha256').update(x, 'utf8').digest('hex'); + +// function getSHA256Function() { +// return new Promise((success, reject) => { +// import('crypto').then(crypto => { +// const sha256 = x => +// crypto +// .createHash('sha256') +// .update(x, 'utf8') +// .digest('hex'); + +// success(sha256); +// }); +// }); +// } + +function fileNotFound({ providerAddress, fileName, res, host }) { + console.log(`File not found: ${providerAddress} -- ${fileName}`); + // TODO!! won't work on localhost!! /home ... ?q ... is wrong! + let pre = ''; + if (host.startsWith('localhost')) { + pre = 'apps/search/'; + } + + res.redirect(`/${pre}?q=${fileName}&error=file_not_found`); // TODO uri encode fileName ! + //res.status(404).send(`File not found -- ${fileName}`); +} + +// source: https://github.com/archiverjs/node-archiver/blob/master/examples/express.js +function contentServer({ app, connectorPool, defaultPort, emitter }) { + log('Starting content server ...'); + + if (!defaultPort) { + throw new Error('Must provide default fiber port for content server ...'); + } + + import('crypto').then(crypto => { + import('fs').then(fs => { + import('path').then(path => { + //getSHA256Function().then(sha256 => { + app.use('/file', (req, res) => { + // if we tried fetching the content too early, should try again .... + // if (!connector.isConnected()) { + // res.end(); + // return; + // } + + const { place } = req.query; + + const { host } = req.headers; + + log(`Received content request ${place}`); + + if (place && place.includes('-')) { + const [providerAddress, _directory] = place.split('-'); + const directory = decode(_directory); + const fileName = decodeURIComponent(req.path.slice(1)); + const filePath = path.join(directory, fileName); + + if (emitter) { + // for Swarm searches we don't have this yet.... + emitter.emit('file_request', { providerAddress, filePath, host }); + } + + //log(`FILEPATH: ${filePath}`); + + // LOCAL FILE + if (providerAddress == 'localhost') { + if (fs.existsSync(filePath)) { + res.sendFile(filePath); + } else { + fileNotFound({ providerAddress, fileName, res, host }); // will this work? test + } + + return; + } + + // FILE COMING OVER ENCRYPTED FIBER + + res.status(404).send('This feature is on hold -- streaming files over encrypted fibers'); + return; + + const sessionId = sha256(crypto, Math.random().toString()); + + let ip; + let port; + + if (providerAddress.includes(':')) { + const [_ip, _port] = providerAddress.split(':'); + ip = _ip; + port = _port; + } else { + ip = providerAddress; + port = defaultPort; + } + + connectorPool + .getConnector({ address: ip, port }) + .then(connector => { + //console.log(`GOT CONNECTOR, state: ${connector.isConnected()}`); + + // prepare ws data streaming handlers + const context = { sessionId, res, connector }; + + connector.on('file_not_found', ({ sessionId }) => { + if (context.sessionId == sessionId) { + // ok? + fileNotFound({ providerAddress, fileName, res, host }); + } + }); + + // this will attach handlers multiple times!! + // check if handlers already attached!! + // we remove lingering connections but sitll, maybe it would be useful + // TODO !! + + //if(!connector.contentServerHandlersAttached) { + + const binaryStartCallback = handleBinaryStart.bind(context); + connector.on('binary_start', binaryStartCallback); + + const binaryDataCallback = handleBinaryData.bind(context); + connector.on('binary_data', binaryDataCallback); + + const binaryEndCallback = handleBinaryEnd.bind(context); + connector.on('binary_end', binaryEndCallback); + + const expandedContext = Object.assign(context, { + attachedCallbacks: { start: binaryStartCallback, data: binaryDataCallback, end: binaryEndCallback } + }); + + //const filePath = '/home/eclipse/.dmt/etc/sounds/soundtest/music.mp3'; + connector.send({ tag: 'request_file', filePath, sessionId }); + + // const msg = { action: 'request', namespace: 'content', payload: { sessionId, filePath, requestHandle: id } }; + + // connector.send(msg); // actually initiate streaming, binary data will arrive to the handleBinaryData handler + + //dropLingeringConnection.call(expandedContext); + + // TODO!! IMPLEMENT FOR TEST::: send "request_next_chunk over the wire" ... to let the server know it can send the next chunk into the connector + // + res.once('drain', () => { + log('DRAIN!!!'); + //wait + // file.on('readable', write); + // write(); + }); + + setTimeout(dropLingeringConnection.bind(expandedContext), 60 * 1000); // cancel any connection that is open for more than a minute (really extreme case but we do it to clean things up) + // this should never be required except if our binary reader didn't return all the data in this time for some reason (error, really slow connection, really big file....) + + log(`Fiber-Content /get handler with SID=${sessionId} finished, fileName=${fileName}.`); + }) + .catch(e => { + res.status(503).send(e.message); + }); + + //res.send(`${providerAddress} / ${filePath}`); + } else { + res.status(404).send('Wrong file reference format, should be [ip]-[encodedRemoteDir]'); + } + }); + }); + }); + }); +} + +function dropLingeringConnection() { + // this == expandedContext + + if (!this.finished) { + log(`Dropping lingering connection: ${this.sessionId}`); + removeListeners(this); + this.res.end(); + } +} + +function handleBinaryStart({ mimeType, fileName, contentLength, sessionId }) { + //log.yellow(`BRISI --- Growin ? Fixed... REMOVE THIS LOG LINE --- ${this.sessionId} / ${sessionId}`); + + // this == context + if (this.sessionId == sessionId) { + //log.write(`BINARY START ${sessionId}`); + this.res.set({ + 'Content-Dispositon': `attachment; filename="${encodeURIComponent(fileName)}"`, // not useful anymore, we pass filein url, as recommended: https://stackoverflow.com/a/216777 + 'Content-Type': mimeType, // do we need that now ? probably a good ida + //'Content-Type': 'application/octet-stream;', + 'Content-Length': contentLength + }); + + //this.res.setHeader('Content-Description', 'File Transfer'); + //this.res.setHeader(); + //this.res.setHeader('Content-Type', 'application/octet-stream'); + + // this.res.setHeader('Content-Dispositon', `attachment; filename="${fileName}"`); + // this.res.setHeader('Content-Type', mimeType); + } +} + +function handleBinaryData({ data, sessionId }) { + // this == context + if (this.sessionId == sessionId) { + //console.log(`BINARY DATA ${sessionId}`); + + const flushed = this.res.write(data); + + if (!flushed) { + // todo CHECK if we have to check the returned boolean and wait a bit until sending the next chunk! + // log.red( + // `Data reported not flushed after res.write -- is everything working correctly? Consider holding off until drain event is emmited... check comments in source with links how to do it!` + // ); + // https://stackoverflow.com/a/54901120 + // https://nodejs.org/api/http.html#http_response_write_chunk_encoding_callback + } else { + log('Data reported flushed!'); + log('TODO: still have to fix and optimize, see comments in code...'); + } + } +} + +function handleBinaryEnd({ sessionId }) { + // this == expandedContext + if (this.sessionId == sessionId) { + //console.log(`BINARY END ${sessionId}`); + removeListeners(this); + //console.log(this); + + this.res.end(); + + this.finished = true; // expandedContext.finished = true + } +} + +// TODO, fix:: dropLngering connections has a bug, context is not set: +// test by removing tg handlers in connector and connection will drop! +// // TODO:: fix!! -- add removeListeners back!! +//eclipse pid 632 3/23/2020, 9:16:25 PM 62914ms (+01ms) ∞ TypeError: expandedContext.connector.removeListener is not a function +// at removeListeners (file:///Users/david/.dmt/core/node/aspect-content/dmt-content/lib/contentServer.js:128:29) +// at Object.dropLingeringConnection (file:///Users/david/.dmt/core/node/aspect-content/dmt-content/lib/contentServer.js:75:5) +// at listOnTimeout (internal/timers.js:549:17) +// at processTimers (internal/timers.js:492:7) + +function removeListeners(expandedContext) { + expandedContext.connector.removeListener('binary_start', expandedContext.attachedCallbacks.start); + expandedContext.connector.removeListener('binary_data', expandedContext.attachedCallbacks.data); + expandedContext.connector.removeListener('binary_end', expandedContext.attachedCallbacks.end); +} + +export default contentServer; diff --git a/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/contentServer.js b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/contentServer.js new file mode 100644 index 000000000..013fb9302 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/contentServer/contentServer.js @@ -0,0 +1,88 @@ +import fs from 'fs'; +import path from 'path'; +import { decode } from '../fiberHandle/encodePath.js'; + + +import { log, colors } from 'dmt/common'; + +import { push } from 'dmt/notify'; + +import checkPermission from './checkPermission.js'; + +// function log(...args) { +// console.log(...args); +// } + +function fileNotFound({ providerAddress, fileName, res, host }) { + log.red(`File not found: ${providerAddress} -- ${fileName}`); + // TODO!! won't work on localhost!! /home ... ?q ... is wrong! + let pre = ''; + if (host.startsWith('localhost')) { + pre = 'apps/search/'; + } + + res.redirect(`/${pre}?q=${fileName}&error=file_not_found`); // TODO uri encode fileName ! + //res.status(404).send(`File not found -- ${fileName}`); +} + +// source: https://github.com/archiverjs/node-archiver/blob/master/examples/express.js +function contentServer({ app }) { + log.yellow('Starting content server ...'); + + // if (!defaultPort) { + // throw new Error('Must provide default fiber port for content server ...'); + // } + + app.use('/file', (req, res) => { + const { place } = req.query; + + const { host } = req.headers; + + //log.yellow(`Received content request ${place}`); + + if (place && place.includes('-')) { + const [providerAddress, _directory] = place.split('-'); + const directory = decode(_directory); + + const fileName = decodeURIComponent(req.path.slice(1)); + const filePath = path.join(directory, fileName); + + // we only serve files for default content (for now?) + if (!checkPermission({ directory })) { + // todo: change to something else? -- perhaps not! it's very suitable message + // and it masks the permission reason so that attacker cannot guess if directory actually does not exist + // or it's just not in default content! + log.red(`Prevented unauthorized file access - ${colors.gray(`Directory ${colors.yellow(directory)} is not exposed in default content`)}`); + fileNotFound({ providerAddress, fileName, res, host }); + return; + } + + // if (emitter) { + // emitter.emit('file_request', { providerAddress, filePath, host }); + // } + + // LOCAL FILE + if (providerAddress == 'localhost') { + if (fs.existsSync(filePath)) { + // todo: somehow fix repeated use, mp3, avi etc. + if (['.pdf', '.epub', '.txt'].includes(path.extname(filePath))) { + push.notify(`Serving ${fileName} (${filePath})`); + } + res.sendFile(filePath); + } else { + fileNotFound({ providerAddress, fileName, res, host }); // will this work? test + } + + return; + } + + // FILE COMING OVER ENCRYPTED FIBER + + res.status(404).send('This feature is on hold -- streaming files over encrypted fibers'); + } else { + res.status(404).send('Wrong file reference format, should be [ip]-[encodedRemoteDir]'); + } + }); +} + +export default contentServer; diff --git a/apps/dmt-search/dmt/connectome-next/lib/fileTransport/feedBytesIntoChannel/binaryReader.js b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/feedBytesIntoChannel/binaryReader.js new file mode 100644 index 000000000..17a0b005c --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/feedBytesIntoChannel/binaryReader.js @@ -0,0 +1,89 @@ +import fs from 'fs'; + +// convert to Uint8Array for browser consumption +// todo, explore more and find possibly a faster way if needed! +// source: https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer +function toArrayBuffer(buf) { + const ab = new ArrayBuffer(buf.length); + const view = new Uint8Array(ab); + for (let i = 0; i < buf.length; ++i) { + view[i] = buf[i]; + } + return ab; +} + +class BinaryReader { + constructor(channel) { + this.channel = channel; + } + + sendFile({ sessionId, filePath }) { + let count = 0; + + return new Promise((success, reject) => { + const readStream = fs.createReadStream(filePath); + + // readStream.on('end', () => { + // console.log('STREAM ENDED'); + // readStream.destroy(); + // }); + + // setTimeout(() => { + // readStream.destroy(); + // }, 4000); + + // readStream.on('error', () => { + // console.log('STREAM ERROR'); + // readStream.destroy(); + // }); + + readStream.on('readable', () => { + const data = readStream.read(); + + if (data) { + if (count == 0) { + // log only the first chunk.... if needed for debugging, remove this + this.log({ data, sessionId, filePath, count }); + } + + const header = Buffer.from(sessionId); // sessionId length = 64 + const buffer = Buffer.concat([header, data]); // if we provide length ourselves it's faster + //const buffer = Buffer.concat([header, data], data.length + 64); // if we provide length ourselves it's faster + + // TODO: use some adaptive streaming... stream 500kb or so fast, then pause a bit to catch up, meanwhile the other side can already do something with first 500kb (of music etc.) + + this.channel.send(buffer); + + // OK? Check... don't feed all the data at once ! + // TODO: verify and improve, resources: + // + // + // + // + // + // + // if (count % 10 == 0) { + // readStream.pause(); + // console.log('PAUSING'); + // setTimeout(() => { + // readStream.resume(); + // console.log('RESUMING'); + // }, 30); // pause for 30ms + // } + + count += 1; + } else { + success(); // done + } + }); + + readStream.on('error', err => reject(new Error(`Problem serving file ${filePath} over ws: ${err.toString()}`))); + }); + } + + log({ data, sessionId, filePath, count }) { + console.log(`SID ${sessionId}: binary sending sequential data chunk n. ${count} - buffer length: ${data.length}, filePath: ${filePath}`); + } +} + +export default BinaryReader; diff --git a/apps/dmt-search/dmt/connectome-next/lib/fileTransport/feedBytesIntoChannel/streamFile.js b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/feedBytesIntoChannel/streamFile.js new file mode 100644 index 000000000..9769b167d --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/feedBytesIntoChannel/streamFile.js @@ -0,0 +1,35 @@ +import { loadModule } from '../../utils/index.js'; + +import BinaryReader from './binaryReader.js'; + +// TODO: +// make sure (test) that modules are only loaded at the first usage and not every time + +function streamFile({ channel, filePath, sessionId }) { + import('fs').then(fs => { + import('path').then(path => { + loadModule('mime').then(mimeModule => { + if (!fs.existsSync(filePath)) { + channel.send(JSON.stringify({ tag: 'file_not_found', sessionId })); + return; + } + + const mimeType = mimeModule.default.lookup(filePath); + + const contentLength = fs.statSync(filePath).size; + + channel.send(JSON.stringify({ tag: 'binary_start', fileName: path.basename(filePath), mimeType, contentLength, sessionId })); + + const binaryReader = new BinaryReader(channel); + + console.log(`fiber binary sending file: ${filePath}`); + + binaryReader.sendFile({ filePath, sessionId }).then(() => { + channel.send(JSON.stringify({ tag: 'binary_end', mimeType, sessionId })); + }); + }); + }); + }); +} + +export default streamFile; diff --git a/apps/dmt-search/dmt/connectome-next/lib/fileTransport/fiberHandle/encodePath.js b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/fiberHandle/encodePath.js new file mode 100644 index 000000000..cc7867a56 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/fiberHandle/encodePath.js @@ -0,0 +1,11 @@ +import { isNodeJs, bufferToHex, hexToBuffer } from '../../utils/index.js'; + +function encode(text) { + return isNodeJs() && bufferToHex(Buffer.from(text, 'utf-8')); +} + +function decode(hexStr) { + return isNodeJs() && Buffer.from(hexToBuffer(hexStr)).toString(); +} + +export { encode, decode }; diff --git a/apps/dmt-search/dmt/connectome-next/lib/fileTransport/fiberHandle/fiberHandle.js b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/fiberHandle/fiberHandle.js new file mode 100644 index 000000000..d1444a3c2 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/fileTransport/fiberHandle/fiberHandle.js @@ -0,0 +1,15 @@ +import { encode, decode } from './encodePath.js'; + +function create({ ip, port, defaultPort, fileName, directory }) { + let provider = ip; + + if (port && port != defaultPort) { + provider = `${ip}:${port}`; + } + + return `${encodeURIComponent(fileName)}?place=${provider}-${encode(directory)}`; +} + +export { create, encode, decode }; + +//console.log(encodeURI('1-Portrait of 'Night-Shining White', a favorite steed of Emperor Xuanzong.jpg')); diff --git a/apps/dmt-search/dmt/connectome-next/lib/utils/index.js b/apps/dmt-search/dmt/connectome-next/lib/utils/index.js new file mode 100644 index 000000000..900ba1070 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/utils/index.js @@ -0,0 +1,65 @@ +// methods defined in this file +//⚠️ ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ +// this is a duplicate + +async function loadModule(whichUtil) { + return import(`./${whichUtil}`); +} + +function log(msg) { + console.log(`${new Date().toLocaleString()} → ${msg}`); +} + +function isBrowser() { + return typeof window !== 'undefined'; +} + +function isNodeJs() { + return !isBrowser(); +} + +function listify(obj) { + if (typeof obj == 'undefined' || obj == null) { + return []; + } + return Array.isArray(obj) ? obj : [obj]; +} + +function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)) + .map(b => b.toString(16).padStart(2, '0')) + .join(''); +} + +function hexToBuffer(hex) { + const tokens = hex.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g); // split by two, https://blog.abelotech.com/posts/split-string-tokens-defined-length-javascript/ + return new Uint8Array(tokens.map(token => parseInt(token, 16))); +} + +// source: https://stackoverflow.com/a/12965194/458177 +// good only up to 2**53 (JavaScript Integer range) -- usually this is plenty ... +function integerToByteArray(/*long*/ long, arrayLen = 8) { + // we want to represent the input as a 8-bytes array + const byteArray = new Array(arrayLen).fill(0); + + for (let index = 0; index < byteArray.length; index++) { + const byte = long & 0xff; + byteArray[index] = byte; + long = (long - byte) / 256; + } + + return byteArray; +} + +export { + // tool + loadModule, + // methods defined in this file: + log, + isBrowser, + isNodeJs, + listify, + bufferToHex, + hexToBuffer, + integerToByteArray +}; diff --git a/apps/dmt-search/dmt/connectome-next/lib/utils/mime/HISTORY.md b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/HISTORY.md new file mode 100644 index 000000000..db3b311b6 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/HISTORY.md @@ -0,0 +1,325 @@ +2.1.26 / 2020-01-05 +=================== + + * deps: mime-db@1.43.0 + - Add `application/x-keepass2` with extension `.kdbx` + - Add extension `.mxmf` to `audio/mobile-xmf` + - Add extensions from IANA for `application/*+xml` types + - Add new upstream MIME types + +2.1.25 / 2019-11-12 +=================== + + * deps: mime-db@1.42.0 + - Add new upstream MIME types + - Add `application/toml` with extension `.toml` + - Add `image/vnd.ms-dds` with extension `.dds` + +2.1.24 / 2019-04-20 +=================== + + * deps: mime-db@1.40.0 + - Add extensions from IANA for `model/*` types + - Add `text/mdx` with extension `.mdx` + +2.1.23 / 2019-04-17 +=================== + + * deps: mime-db@~1.39.0 + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add new upstream MIME types + +2.1.22 / 2019-02-14 +=================== + + * deps: mime-db@~1.38.0 + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add new upstream MIME types + - Mark `text/less` as compressible + +2.1.21 / 2018-10-19 +=================== + + * deps: mime-db@~1.37.0 + - Add extensions to HEIC image types + - Add new upstream MIME types + +2.1.20 / 2018-08-26 +=================== + + * deps: mime-db@~1.36.0 + - Add Apple file extensions from IANA + - Add extensions from IANA for `image/*` types + - Add new upstream MIME types + +2.1.19 / 2018-07-17 +=================== + + * deps: mime-db@~1.35.0 + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.owl` to `application/rdf+xml` + - Add new upstream MIME types + - Add UTF-8 as default charset for `text/turtle` + +2.1.18 / 2018-02-16 +=================== + + * deps: mime-db@~1.33.0 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add new upstream MIME types + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +2.1.17 / 2017-09-01 +=================== + + * deps: mime-db@~1.30.0 + - Add `application/vnd.ms-outlook` + - Add `application/x-arj` + - Add extension `.mjs` to `application/javascript` + - Add glTF types and extensions + - Add new upstream MIME types + - Add `text/x-org` + - Add VirtualBox MIME types + - Fix `source` records for `video/*` types that are IANA + - Update `font/opentype` to registered `font/otf` + +2.1.16 / 2017-07-24 +=================== + + * deps: mime-db@~1.29.0 + - Add `application/fido.trusted-apps+json` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add new upstream MIME types + - Update extensions `.md` and `.markdown` to be `text/markdown` + +2.1.15 / 2017-03-23 +=================== + + * deps: mime-db@~1.27.0 + - Add new mime types + - Add `image/apng` + +2.1.14 / 2017-01-14 +=================== + + * deps: mime-db@~1.26.0 + - Add new mime types + +2.1.13 / 2016-11-18 +=================== + + * deps: mime-db@~1.25.0 + - Add new mime types + +2.1.12 / 2016-09-18 +=================== + + * deps: mime-db@~1.24.0 + - Add new mime types + - Add `audio/mp3` + +2.1.11 / 2016-05-01 +=================== + + * deps: mime-db@~1.23.0 + - Add new mime types + +2.1.10 / 2016-02-15 +=================== + + * deps: mime-db@~1.22.0 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +2.1.9 / 2016-01-06 +================== + + * deps: mime-db@~1.21.0 + - Add new mime types + +2.1.8 / 2015-11-30 +================== + + * deps: mime-db@~1.20.0 + - Add new mime types + +2.1.7 / 2015-09-20 +================== + + * deps: mime-db@~1.19.0 + - Add new mime types + +2.1.6 / 2015-09-03 +================== + + * deps: mime-db@~1.18.0 + - Add new mime types + +2.1.5 / 2015-08-20 +================== + + * deps: mime-db@~1.17.0 + - Add new mime types + +2.1.4 / 2015-07-30 +================== + + * deps: mime-db@~1.16.0 + - Add new mime types + +2.1.3 / 2015-07-13 +================== + + * deps: mime-db@~1.15.0 + - Add new mime types + +2.1.2 / 2015-06-25 +================== + + * deps: mime-db@~1.14.0 + - Add new mime types + +2.1.1 / 2015-06-08 +================== + + * perf: fix deopt during mapping + +2.1.0 / 2015-06-07 +================== + + * Fix incorrectly treating extension-less file name as extension + - i.e. `'path/to/json'` will no longer return `application/json` + * Fix `.charset(type)` to accept parameters + * Fix `.charset(type)` to match case-insensitive + * Improve generation of extension to MIME mapping + * Refactor internals for readability and no argument reassignment + * Prefer `application/*` MIME types from the same source + * Prefer any type over `application/octet-stream` + * deps: mime-db@~1.13.0 + - Add nginx as a source + - Add new mime types + +2.0.14 / 2015-06-06 +=================== + + * deps: mime-db@~1.12.0 + - Add new mime types + +2.0.13 / 2015-05-31 +=================== + + * deps: mime-db@~1.11.0 + - Add new mime types + +2.0.12 / 2015-05-19 +=================== + + * deps: mime-db@~1.10.0 + - Add new mime types + +2.0.11 / 2015-05-05 +=================== + + * deps: mime-db@~1.9.1 + - Add new mime types + +2.0.10 / 2015-03-13 +=================== + + * deps: mime-db@~1.8.0 + - Add new mime types + +2.0.9 / 2015-02-09 +================== + + * deps: mime-db@~1.7.0 + - Add new mime types + - Community extensions ownership transferred from `node-mime` + +2.0.8 / 2015-01-29 +================== + + * deps: mime-db@~1.6.0 + - Add new mime types + +2.0.7 / 2014-12-30 +================== + + * deps: mime-db@~1.5.0 + - Add new mime types + - Fix various invalid MIME type entries + +2.0.6 / 2014-12-30 +================== + + * deps: mime-db@~1.4.0 + - Add new mime types + - Fix various invalid MIME type entries + - Remove example template MIME types + +2.0.5 / 2014-12-29 +================== + + * deps: mime-db@~1.3.1 + - Fix missing extensions + +2.0.4 / 2014-12-10 +================== + + * deps: mime-db@~1.3.0 + - Add new mime types + +2.0.3 / 2014-11-09 +================== + + * deps: mime-db@~1.2.0 + - Add new mime types + +2.0.2 / 2014-09-28 +================== + + * deps: mime-db@~1.1.0 + - Add new mime types + - Add additional compressible + - Update charsets + +2.0.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + +2.0.0 / 2014-09-02 +================== + + * Use `mime-db` + * Remove `.define()` + +1.0.2 / 2014-08-04 +================== + + * Set charset=utf-8 for `text/javascript` + +1.0.1 / 2014-06-24 +================== + + * Add `text/jsx` type + +1.0.0 / 2014-05-12 +================== + + * Return `false` for unknown types + * Set charset=utf-8 for `application/json` + +0.1.0 / 2014-05-02 +================== + + * Initial release diff --git a/apps/dmt-search/dmt/connectome-next/lib/utils/mime/LICENSE b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/LICENSE new file mode 100644 index 000000000..06166077b --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/apps/dmt-search/dmt/connectome-next/lib/utils/mime/README.md b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/README.md new file mode 100644 index 000000000..1dbef2b57 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/README.md @@ -0,0 +1,113 @@ +# mime-types + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, + `mime-types` simply returns `false`, so do + `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No `.define()` functionality +- Bug fixes for `.lookup(path)` + +Otherwise, the API is compatible with `mime` 1.x. + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('folder/.htaccess') // false + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. +When given an extension, `mime.lookup` is used to get the matching +content-type, otherwise the given content-type is used. Then if the +content-type does not already have a `charset` parameter, `mime.charset` +is used to get the default charset and add to the returned content-type. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +mime.contentType('text/html') // 'text/html; charset=utf-8' +mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master +[node-version-image]: https://badgen.net/npm/node/mime-types +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-types +[npm-url]: https://npmjs.org/package/mime-types +[npm-version-image]: https://badgen.net/npm/v/mime-types +[travis-image]: https://badgen.net/travis/jshttp/mime-types/master +[travis-url]: https://travis-ci.org/jshttp/mime-types diff --git a/apps/dmt-search/dmt/connectome-next/lib/utils/mime/db.json b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/db.json new file mode 100644 index 000000000..cfa3c6351 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/db.json @@ -0,0 +1,8060 @@ +{ + "application/1d-interleaved-parityfec": { + "source": "iana" + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana", + "compressible": true + }, + "application/3gpp-ims+xml": { + "source": "iana", + "compressible": true + }, + "application/a2l": { + "source": "iana" + }, + "application/activemessage": { + "source": "iana" + }, + "application/activity+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/aml": { + "source": "iana" + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"] + }, + "application/applefile": { + "source": "iana" + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"] + }, + "application/atf": { + "source": "iana" + }, + "application/atfx": { + "source": "iana" + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"] + }, + "application/atomcat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomcat"] + }, + "application/atomdeleted+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomdeleted"] + }, + "application/atomicmail": { + "source": "iana" + }, + "application/atomsvc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomsvc"] + }, + "application/atsc-dwd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dwd"] + }, + "application/atsc-held+xml": { + "source": "iana", + "compressible": true, + "extensions": ["held"] + }, + "application/atsc-rdt+json": { + "source": "iana", + "compressible": true + }, + "application/atsc-rsat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsat"] + }, + "application/atxml": { + "source": "iana" + }, + "application/auth-policy+xml": { + "source": "iana", + "compressible": true + }, + "application/bacnet-xdd+zip": { + "source": "iana", + "compressible": false + }, + "application/batch-smtp": { + "source": "iana" + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/beep+xml": { + "source": "iana", + "compressible": true + }, + "application/calendar+json": { + "source": "iana", + "compressible": true + }, + "application/calendar+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xcs"] + }, + "application/call-completion": { + "source": "iana" + }, + "application/cals-1840": { + "source": "iana" + }, + "application/cbor": { + "source": "iana" + }, + "application/cbor-seq": { + "source": "iana" + }, + "application/cccex": { + "source": "iana" + }, + "application/ccmp+xml": { + "source": "iana", + "compressible": true + }, + "application/ccxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ccxml"] + }, + "application/cdfx+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdfx"] + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"] + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"] + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"] + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"] + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"] + }, + "application/cdni": { + "source": "iana" + }, + "application/cea": { + "source": "iana" + }, + "application/cea-2018+xml": { + "source": "iana", + "compressible": true + }, + "application/cellml+xml": { + "source": "iana", + "compressible": true + }, + "application/cfw": { + "source": "iana" + }, + "application/clue+xml": { + "source": "iana", + "compressible": true + }, + "application/clue_info+xml": { + "source": "iana", + "compressible": true + }, + "application/cms": { + "source": "iana" + }, + "application/cnrp+xml": { + "source": "iana", + "compressible": true + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true + }, + "application/coap-payload": { + "source": "iana" + }, + "application/commonground": { + "source": "iana" + }, + "application/conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/cose": { + "source": "iana" + }, + "application/cose-key": { + "source": "iana" + }, + "application/cose-key-set": { + "source": "iana" + }, + "application/cpl+xml": { + "source": "iana", + "compressible": true + }, + "application/csrattrs": { + "source": "iana" + }, + "application/csta+xml": { + "source": "iana", + "compressible": true + }, + "application/cstadata+xml": { + "source": "iana", + "compressible": true + }, + "application/csvm+json": { + "source": "iana", + "compressible": true + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"] + }, + "application/cwt": { + "source": "iana" + }, + "application/cybercash": { + "source": "iana" + }, + "application/dart": { + "compressible": true + }, + "application/dash+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpd"] + }, + "application/dashdelta": { + "source": "iana" + }, + "application/davmount+xml": { + "source": "iana", + "compressible": true, + "extensions": ["davmount"] + }, + "application/dca-rft": { + "source": "iana" + }, + "application/dcd": { + "source": "iana" + }, + "application/dec-dx": { + "source": "iana" + }, + "application/dialog-info+xml": { + "source": "iana", + "compressible": true + }, + "application/dicom": { + "source": "iana" + }, + "application/dicom+json": { + "source": "iana", + "compressible": true + }, + "application/dicom+xml": { + "source": "iana", + "compressible": true + }, + "application/dii": { + "source": "iana" + }, + "application/dit": { + "source": "iana" + }, + "application/dns": { + "source": "iana" + }, + "application/dns+json": { + "source": "iana", + "compressible": true + }, + "application/dns-message": { + "source": "iana" + }, + "application/docbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dbk"] + }, + "application/dskpp+xml": { + "source": "iana", + "compressible": true + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"] + }, + "application/dssc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdssc"] + }, + "application/dvcs": { + "source": "iana" + }, + "application/ecmascript": { + "source": "iana", + "compressible": true, + "extensions": ["ecma","es"] + }, + "application/edi-consent": { + "source": "iana" + }, + "application/edi-x12": { + "source": "iana", + "compressible": false + }, + "application/edifact": { + "source": "iana", + "compressible": false + }, + "application/efi": { + "source": "iana" + }, + "application/emergencycalldata.comment+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.control+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.deviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.ecall.msd": { + "source": "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.serviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.subscriberinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.veds+xml": { + "source": "iana", + "compressible": true + }, + "application/emma+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emma"] + }, + "application/emotionml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emotionml"] + }, + "application/encaprtp": { + "source": "iana" + }, + "application/epp+xml": { + "source": "iana", + "compressible": true + }, + "application/epub+zip": { + "source": "iana", + "compressible": false, + "extensions": ["epub"] + }, + "application/eshop": { + "source": "iana" + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"] + }, + "application/expect-ct-report+json": { + "source": "iana", + "compressible": true + }, + "application/fastinfoset": { + "source": "iana" + }, + "application/fastsoap": { + "source": "iana" + }, + "application/fdt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fdt"] + }, + "application/fhir+json": { + "source": "iana", + "compressible": true + }, + "application/fhir+xml": { + "source": "iana", + "compressible": true + }, + "application/fido.trusted-apps+json": { + "compressible": true + }, + "application/fits": { + "source": "iana" + }, + "application/flexfec": { + "source": "iana" + }, + "application/font-sfnt": { + "source": "iana" + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"] + }, + "application/font-woff": { + "source": "iana", + "compressible": false + }, + "application/framework-attributes+xml": { + "source": "iana", + "compressible": true + }, + "application/geo+json": { + "source": "iana", + "compressible": true, + "extensions": ["geojson"] + }, + "application/geo+json-seq": { + "source": "iana" + }, + "application/geopackage+sqlite3": { + "source": "iana" + }, + "application/geoxacml+xml": { + "source": "iana", + "compressible": true + }, + "application/gltf-buffer": { + "source": "iana" + }, + "application/gml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["gml"] + }, + "application/gpx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["gpx"] + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"] + }, + "application/gzip": { + "source": "iana", + "compressible": false, + "extensions": ["gz"] + }, + "application/h224": { + "source": "iana" + }, + "application/held+xml": { + "source": "iana", + "compressible": true + }, + "application/hjson": { + "extensions": ["hjson"] + }, + "application/http": { + "source": "iana" + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"] + }, + "application/ibe-key-request+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pkg-reply+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pp-data": { + "source": "iana" + }, + "application/iges": { + "source": "iana" + }, + "application/im-iscomposing+xml": { + "source": "iana", + "compressible": true + }, + "application/index": { + "source": "iana" + }, + "application/index.cmd": { + "source": "iana" + }, + "application/index.obj": { + "source": "iana" + }, + "application/index.response": { + "source": "iana" + }, + "application/index.vnd": { + "source": "iana" + }, + "application/inkml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ink","inkml"] + }, + "application/iotp": { + "source": "iana" + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"] + }, + "application/ipp": { + "source": "iana" + }, + "application/isup": { + "source": "iana" + }, + "application/its+xml": { + "source": "iana", + "compressible": true, + "extensions": ["its"] + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar","war","ear"] + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"] + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"] + }, + "application/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js","mjs"] + }, + "application/jf2feed+json": { + "source": "iana", + "compressible": true + }, + "application/jose": { + "source": "iana" + }, + "application/jose+json": { + "source": "iana", + "compressible": true + }, + "application/jrd+json": { + "source": "iana", + "compressible": true + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json","map"] + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true + }, + "application/json-seq": { + "source": "iana" + }, + "application/json5": { + "extensions": ["json5"] + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"] + }, + "application/jwk+json": { + "source": "iana", + "compressible": true + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true + }, + "application/jwt": { + "source": "iana" + }, + "application/kpml-request+xml": { + "source": "iana", + "compressible": true + }, + "application/kpml-response+xml": { + "source": "iana", + "compressible": true + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"] + }, + "application/lgr+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lgr"] + }, + "application/link-format": { + "source": "iana" + }, + "application/load-control+xml": { + "source": "iana", + "compressible": true + }, + "application/lost+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lostxml"] + }, + "application/lostsync+xml": { + "source": "iana", + "compressible": true + }, + "application/lxf": { + "source": "iana" + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"] + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"] + }, + "application/macwriteii": { + "source": "iana" + }, + "application/mads+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mads"] + }, + "application/manifest+json": { + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"] + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"] + }, + "application/marcxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mrcx"] + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma","nb","mb"] + }, + "application/mathml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mathml"] + }, + "application/mathml-content+xml": { + "source": "iana", + "compressible": true + }, + "application/mathml-presentation+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-deregister+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-envelope+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-protection-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-reception-report+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-schedule+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-user-service-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"] + }, + "application/media-policy-dataset+xml": { + "source": "iana", + "compressible": true + }, + "application/media_control+xml": { + "source": "iana", + "compressible": true + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mscml"] + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true + }, + "application/metalink+xml": { + "source": "apache", + "compressible": true, + "extensions": ["metalink"] + }, + "application/metalink4+xml": { + "source": "iana", + "compressible": true, + "extensions": ["meta4"] + }, + "application/mets+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mets"] + }, + "application/mf4": { + "source": "iana" + }, + "application/mikey": { + "source": "iana" + }, + "application/mipc": { + "source": "iana" + }, + "application/mmt-aei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["maei"] + }, + "application/mmt-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musd"] + }, + "application/mods+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mods"] + }, + "application/moss-keys": { + "source": "iana" + }, + "application/moss-signature": { + "source": "iana" + }, + "application/mosskey-data": { + "source": "iana" + }, + "application/mosskey-request": { + "source": "iana" + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21","mp21"] + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4s","m4p"] + }, + "application/mpeg4-generic": { + "source": "iana" + }, + "application/mpeg4-iod": { + "source": "iana" + }, + "application/mpeg4-iod-xmt": { + "source": "iana" + }, + "application/mrb-consumer+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"] + }, + "application/mrb-publish+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"] + }, + "application/msc-ivr+xml": { + "source": "iana", + "compressible": true + }, + "application/msc-mixer+xml": { + "source": "iana", + "compressible": true + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc","dot"] + }, + "application/mud+json": { + "source": "iana", + "compressible": true + }, + "application/multipart-core": { + "source": "iana" + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"] + }, + "application/n-quads": { + "source": "iana", + "extensions": ["nq"] + }, + "application/n-triples": { + "source": "iana", + "extensions": ["nt"] + }, + "application/nasdata": { + "source": "iana" + }, + "application/news-checkgroups": { + "source": "iana" + }, + "application/news-groupinfo": { + "source": "iana" + }, + "application/news-transmission": { + "source": "iana" + }, + "application/nlsml+xml": { + "source": "iana", + "compressible": true + }, + "application/node": { + "source": "iana" + }, + "application/nss": { + "source": "iana" + }, + "application/ocsp-request": { + "source": "iana" + }, + "application/ocsp-response": { + "source": "iana" + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"] + }, + "application/odm+xml": { + "source": "iana", + "compressible": true + }, + "application/odx": { + "source": "iana" + }, + "application/oebps-package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["opf"] + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"] + }, + "application/omdoc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["omdoc"] + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc","onetoc2","onetmp","onepkg"] + }, + "application/oscore": { + "source": "iana" + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"] + }, + "application/p2p-overlay+xml": { + "source": "iana", + "compressible": true, + "extensions": ["relo"] + }, + "application/parityfec": { + "source": "iana" + }, + "application/passport": { + "source": "iana" + }, + "application/patch-ops-error+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xer"] + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"] + }, + "application/pdx": { + "source": "iana" + }, + "application/pem-certificate-chain": { + "source": "iana" + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"] + }, + "application/pgp-keys": { + "source": "iana" + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["asc","sig"] + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"] + }, + "application/pidf+xml": { + "source": "iana", + "compressible": true + }, + "application/pidf-diff+xml": { + "source": "iana", + "compressible": true + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"] + }, + "application/pkcs12": { + "source": "iana" + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m","p7c"] + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"] + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"] + }, + "application/pkcs8-encrypted": { + "source": "iana" + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"] + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"] + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"] + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"] + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"] + }, + "application/pls+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pls"] + }, + "application/poc-settings+xml": { + "source": "iana", + "compressible": true + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai","eps","ps"] + }, + "application/ppsp-tracker+json": { + "source": "iana", + "compressible": true + }, + "application/problem+json": { + "source": "iana", + "compressible": true + }, + "application/problem+xml": { + "source": "iana", + "compressible": true + }, + "application/provenance+xml": { + "source": "iana", + "compressible": true, + "extensions": ["provx"] + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana" + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"] + }, + "application/prs.hpub+zip": { + "source": "iana", + "compressible": false + }, + "application/prs.nprend": { + "source": "iana" + }, + "application/prs.plucker": { + "source": "iana" + }, + "application/prs.rdf-xml-crypt": { + "source": "iana" + }, + "application/prs.xsf+xml": { + "source": "iana", + "compressible": true + }, + "application/pskc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pskcxml"] + }, + "application/qsig": { + "source": "iana" + }, + "application/raml+yaml": { + "compressible": true, + "extensions": ["raml"] + }, + "application/raptorfec": { + "source": "iana" + }, + "application/rdap+json": { + "source": "iana", + "compressible": true + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf","owl"] + }, + "application/reginfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rif"] + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"] + }, + "application/remote-printing": { + "source": "iana" + }, + "application/reputon+json": { + "source": "iana", + "compressible": true + }, + "application/resource-lists+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rl"] + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rld"] + }, + "application/rfc+xml": { + "source": "iana", + "compressible": true + }, + "application/riscos": { + "source": "iana" + }, + "application/rlmi+xml": { + "source": "iana", + "compressible": true + }, + "application/rls-services+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rs"] + }, + "application/route-apd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rapd"] + }, + "application/route-s-tsid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sls"] + }, + "application/route-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rusd"] + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"] + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"] + }, + "application/rpki-publication": { + "source": "iana" + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"] + }, + "application/rpki-updown": { + "source": "iana" + }, + "application/rsd+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rsd"] + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"] + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "application/rtploopback": { + "source": "iana" + }, + "application/rtx": { + "source": "iana" + }, + "application/samlassertion+xml": { + "source": "iana", + "compressible": true + }, + "application/samlmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/sbml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sbml"] + }, + "application/scaip+xml": { + "source": "iana", + "compressible": true + }, + "application/scim+json": { + "source": "iana", + "compressible": true + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"] + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"] + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"] + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"] + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"] + }, + "application/secevent+jwt": { + "source": "iana" + }, + "application/senml+cbor": { + "source": "iana" + }, + "application/senml+json": { + "source": "iana", + "compressible": true + }, + "application/senml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["senmlx"] + }, + "application/senml-exi": { + "source": "iana" + }, + "application/sensml+cbor": { + "source": "iana" + }, + "application/sensml+json": { + "source": "iana", + "compressible": true + }, + "application/sensml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sensmlx"] + }, + "application/sensml-exi": { + "source": "iana" + }, + "application/sep+xml": { + "source": "iana", + "compressible": true + }, + "application/sep-exi": { + "source": "iana" + }, + "application/session-info": { + "source": "iana" + }, + "application/set-payment": { + "source": "iana" + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"] + }, + "application/set-registration": { + "source": "iana" + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"] + }, + "application/sgml": { + "source": "iana" + }, + "application/sgml-open-catalog": { + "source": "iana" + }, + "application/shf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["shf"] + }, + "application/sieve": { + "source": "iana", + "extensions": ["siv","sieve"] + }, + "application/simple-filter+xml": { + "source": "iana", + "compressible": true + }, + "application/simple-message-summary": { + "source": "iana" + }, + "application/simplesymbolcontainer": { + "source": "iana" + }, + "application/sipc": { + "source": "iana" + }, + "application/slate": { + "source": "iana" + }, + "application/smil": { + "source": "iana" + }, + "application/smil+xml": { + "source": "iana", + "compressible": true, + "extensions": ["smi","smil"] + }, + "application/smpte336m": { + "source": "iana" + }, + "application/soap+fastinfoset": { + "source": "iana" + }, + "application/soap+xml": { + "source": "iana", + "compressible": true + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"] + }, + "application/sparql-results+xml": { + "source": "iana", + "compressible": true, + "extensions": ["srx"] + }, + "application/spirits-event+xml": { + "source": "iana", + "compressible": true + }, + "application/sql": { + "source": "iana" + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"] + }, + "application/srgs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["grxml"] + }, + "application/sru+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sru"] + }, + "application/ssdl+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ssdl"] + }, + "application/ssml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ssml"] + }, + "application/stix+json": { + "source": "iana", + "compressible": true + }, + "application/swid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["swidtag"] + }, + "application/tamp-apex-update": { + "source": "iana" + }, + "application/tamp-apex-update-confirm": { + "source": "iana" + }, + "application/tamp-community-update": { + "source": "iana" + }, + "application/tamp-community-update-confirm": { + "source": "iana" + }, + "application/tamp-error": { + "source": "iana" + }, + "application/tamp-sequence-adjust": { + "source": "iana" + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana" + }, + "application/tamp-status-query": { + "source": "iana" + }, + "application/tamp-status-response": { + "source": "iana" + }, + "application/tamp-update": { + "source": "iana" + }, + "application/tamp-update-confirm": { + "source": "iana" + }, + "application/tar": { + "compressible": true + }, + "application/taxii+json": { + "source": "iana", + "compressible": true + }, + "application/tei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tei","teicorpus"] + }, + "application/tetra_isi": { + "source": "iana" + }, + "application/thraud+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tfi"] + }, + "application/timestamp-query": { + "source": "iana" + }, + "application/timestamp-reply": { + "source": "iana" + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"] + }, + "application/tlsrpt+gzip": { + "source": "iana" + }, + "application/tlsrpt+json": { + "source": "iana", + "compressible": true + }, + "application/tnauthlist": { + "source": "iana" + }, + "application/toml": { + "compressible": true, + "extensions": ["toml"] + }, + "application/trickle-ice-sdpfrag": { + "source": "iana" + }, + "application/trig": { + "source": "iana" + }, + "application/ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ttml"] + }, + "application/tve-trigger": { + "source": "iana" + }, + "application/tzif": { + "source": "iana" + }, + "application/tzif-leap": { + "source": "iana" + }, + "application/ulpfec": { + "source": "iana" + }, + "application/urc-grpsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/urc-ressheet+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsheet"] + }, + "application/urc-targetdesc+xml": { + "source": "iana", + "compressible": true + }, + "application/urc-uisocketdesc+xml": { + "source": "iana", + "compressible": true + }, + "application/vcard+json": { + "source": "iana", + "compressible": true + }, + "application/vcard+xml": { + "source": "iana", + "compressible": true + }, + "application/vemmi": { + "source": "iana" + }, + "application/vividence.scriptfile": { + "source": "apache" + }, + "application/vnd.1000minds.decision-model+xml": { + "source": "iana", + "compressible": true, + "extensions": ["1km"] + }, + "application/vnd.3gpp-prose+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-v2x-local-service-information": { + "source": "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gmop+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mc-signalling-ear": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-payload": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-signalling": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mid-call+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"] + }, + "application/vnd.3gpp.sms": { + "source": "iana" + }, + "application/vnd.3gpp.sms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-ext+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.state-and-event-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ussd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + "source": "iana" + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"] + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"] + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"] + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc","acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "compressible": false, + "extensions": ["air"] + }, + "application/vnd.adobe.flash.movie": { + "source": "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"] + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp","fxpl"] + }, + "application/vnd.adobe.partial-upload": { + "source": "iana" + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdp"] + }, + "application/vnd.adobe.xfdf": { + "source": "iana", + "extensions": ["xfdf"] + }, + "application/vnd.aether.imp": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + "source": "iana" + }, + "application/vnd.afpc.foca-charset": { + "source": "iana" + }, + "application/vnd.afpc.foca-codedfont": { + "source": "iana" + }, + "application/vnd.afpc.foca-codepage": { + "source": "iana" + }, + "application/vnd.afpc.modca": { + "source": "iana" + }, + "application/vnd.afpc.modca-formdef": { + "source": "iana" + }, + "application/vnd.afpc.modca-mediummap": { + "source": "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + "source": "iana" + }, + "application/vnd.afpc.modca-overlay": { + "source": "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + "source": "iana" + }, + "application/vnd.ah-barcode": { + "source": "iana" + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"] + }, + "application/vnd.amadeus+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + "source": "iana" + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"] + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.android.ota": { + "source": "iana" + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"] + }, + "application/vnd.anki": { + "source": "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"] + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"] + }, + "application/vnd.apache.thrift.binary": { + "source": "iana" + }, + "application/vnd.apache.thrift.compact": { + "source": "iana" + }, + "application/vnd.apache.thrift.json": { + "source": "iana" + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.aplextor.warrp+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apothekende.reservation+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpkg"] + }, + "application/vnd.apple.keynote": { + "source": "iana", + "extensions": ["keynote"] + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"] + }, + "application/vnd.apple.numbers": { + "source": "iana", + "extensions": ["numbers"] + }, + "application/vnd.apple.pages": { + "source": "iana", + "extensions": ["pages"] + }, + "application/vnd.apple.pkpass": { + "compressible": false, + "extensions": ["pkpass"] + }, + "application/vnd.arastra.swi": { + "source": "iana" + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"] + }, + "application/vnd.artisan+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.artsquare": { + "source": "iana" + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"] + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"] + }, + "application/vnd.autopackage": { + "source": "iana" + }, + "application/vnd.avalon+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.avistar+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["bmml"] + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana" + }, + "application/vnd.banana-accounting": { + "source": "iana" + }, + "application/vnd.bbf.usp.error": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bint.med-content": { + "source": "iana" + }, + "application/vnd.biopax.rdf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.blink-idb-value-wrapper": { + "source": "iana" + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana" + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana" + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"] + }, + "application/vnd.bpf": { + "source": "iana" + }, + "application/vnd.bpf3": { + "source": "iana" + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"] + }, + "application/vnd.byu.uapi+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cab-jscript": { + "source": "iana" + }, + "application/vnd.canon-cpdl": { + "source": "iana" + }, + "application/vnd.canon-lips": { + "source": "iana" + }, + "application/vnd.capasystems-pg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana" + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana" + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdxml"] + }, + "application/vnd.chess-pgn": { + "source": "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"] + }, + "application/vnd.ciedi": { + "source": "iana" + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana" + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana", + "compressible": true, + "extensions": ["csl"] + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"] + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"] + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g","c4d","c4f","c4p","c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"] + }, + "application/vnd.coffeescript": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + "source": "iana" + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.comicbook+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.comicbook-rar": { + "source": "iana" + }, + "application/vnd.commerce-battelle": { + "source": "iana" + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"] + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"] + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"] + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wbs"] + }, + "application/vnd.cryptii.pipe+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.crypto-shade-file": { + "source": "iana" + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"] + }, + "application/vnd.ctct.ws+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cups-pdf": { + "source": "iana" + }, + "application/vnd.cups-postscript": { + "source": "iana" + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"] + }, + "application/vnd.cups-raster": { + "source": "iana" + }, + "application/vnd.cups-raw": { + "source": "iana" + }, + "application/vnd.curl": { + "source": "iana" + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"] + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cybank": { + "source": "iana" + }, + "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"] + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"] + }, + "application/vnd.datapackage+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dataresource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.debian.binary-package": { + "source": "iana" + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf","uvvf","uvd","uvvd"] + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uvt","uvvt"] + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx","uvvx"] + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz","uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"] + }, + "application/vnd.desmume.movie": { + "source": "iana" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana" + }, + "application/vnd.dm.delegation+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"] + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + "source": "iana" + }, + "application/vnd.dolby.mobile.2": { + "source": "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana" + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"] + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"] + }, + "application/vnd.drive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"] + }, + "application/vnd.dtg.local": { + "source": "iana" + }, + "application/vnd.dtg.local.flash": { + "source": "iana" + }, + "application/vnd.dtg.local.html": { + "source": "iana" + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"] + }, + "application/vnd.dvb.dvbj": { + "source": "iana" + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana" + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.pfr": { + "source": "iana" + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"] + }, + "application/vnd.dxr": { + "source": "iana" + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"] + }, + "application/vnd.dzr": { + "source": "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana" + }, + "application/vnd.ecdis-update": { + "source": "iana" + }, + "application/vnd.ecip.rlp": { + "source": "iana" + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"] + }, + "application/vnd.ecowin.filerequest": { + "source": "iana" + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana" + }, + "application/vnd.ecowin.series": { + "source": "iana" + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana" + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana" + }, + "application/vnd.efi.img": { + "source": "iana" + }, + "application/vnd.efi.iso": { + "source": "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"] + }, + "application/vnd.enphase.envoy": { + "source": "iana" + }, + "application/vnd.eprints.data+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"] + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"] + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"] + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"] + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + "source": "iana" + }, + "application/vnd.espass-espass+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "compressible": true, + "extensions": ["es3","et3"] + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.cug+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mheg5": { + "source": "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.sci+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana" + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.tsl.der": { + "source": "iana" + }, + "application/vnd.eudora.data": { + "source": "iana" + }, + "application/vnd.evolv.ecig.profile": { + "source": "iana" + }, + "application/vnd.evolv.ecig.settings": { + "source": "iana" + }, + "application/vnd.evolv.ecig.theme": { + "source": "iana" + }, + "application/vnd.exstream-empower+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.exstream-package": { + "source": "iana" + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"] + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"] + }, + "application/vnd.f-secure.mobile": { + "source": "iana" + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana" + }, + "application/vnd.fdf": { + "source": "iana", + "extensions": ["fdf"] + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"] + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed","dataless"] + }, + "application/vnd.ffsns": { + "source": "iana" + }, + "application/vnd.ficlab.flb+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.filmit.zfc": { + "source": "iana" + }, + "application/vnd.fints": { + "source": "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + "source": "iana" + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"] + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana" + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm","frame","maker","book"] + }, + "application/vnd.frogans.fnc": { + "source": "iana", + "extensions": ["fnc"] + }, + "application/vnd.frogans.ltf": { + "source": "iana", + "extensions": ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"] + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana" + }, + "application/vnd.fujixerox.art4": { + "source": "iana" + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana" + }, + "application/vnd.fut-misnet": { + "source": "iana" + }, + "application/vnd.futoin+cbor": { + "source": "iana" + }, + "application/vnd.futoin+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"] + }, + "application/vnd.gentics.grd+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geo+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geocube+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"] + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"] + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex","gre"] + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"] + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"] + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"] + }, + "application/vnd.gerber": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana" + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"] + }, + "application/vnd.google-apps.document": { + "compressible": false, + "extensions": ["gdoc"] + }, + "application/vnd.google-apps.presentation": { + "compressible": false, + "extensions": ["gslides"] + }, + "application/vnd.google-apps.spreadsheet": { + "compressible": false, + "extensions": ["gsheet"] + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"] + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf","gqs"] + }, + "application/vnd.gridmp": { + "source": "iana" + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"] + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"] + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"] + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"] + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"] + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"] + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"] + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hal+xml": { + "source": "iana", + "compressible": true, + "extensions": ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zmm"] + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"] + }, + "application/vnd.hc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hcl-bireports": { + "source": "iana" + }, + "application/vnd.hdt": { + "source": "iana" + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"] + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"] + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"] + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"] + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"] + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"] + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"] + }, + "application/vnd.httphone": { + "source": "iana" + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"] + }, + "application/vnd.hyper+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyper-item+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana" + }, + "application/vnd.ibm.afplinedata": { + "source": "iana" + }, + "application/vnd.ibm.electronic-media": { + "source": "iana" + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"] + }, + "application/vnd.ibm.modcap": { + "source": "iana", + "extensions": ["afp","listafp","list3820"] + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"] + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"] + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc","icm"] + }, + "application/vnd.ieee.1905": { + "source": "iana" + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"] + }, + "application/vnd.imagemeter.folder+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.imagemeter.image+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"] + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.informix-visionary": { + "source": "iana" + }, + "application/vnd.infotech.project": { + "source": "iana" + }, + "application/vnd.infotech.project+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana" + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"] + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw","xpx"] + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"] + }, + "application/vnd.intertrust.digibox": { + "source": "iana" + }, + "application/vnd.intertrust.nncp": { + "source": "iana" + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"] + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["irp"] + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"] + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"] + }, + "application/vnd.iso11783-10+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"] + }, + "application/vnd.japannet-directory-service": { + "source": "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-registration": { + "source": "iana" + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-verification": { + "source": "iana" + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"] + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"] + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana" + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz","ktr"] + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"] + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"] + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"] + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"] + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"] + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr","kpt"] + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"] + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd","kwt"] + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"] + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"] + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne","knp"] + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp","skd","skt","skm"] + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"] + }, + "application/vnd.las": { + "source": "iana" + }, + "application/vnd.las.las+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.las.las+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lasxml"] + }, + "application/vnd.laszip": { + "source": "iana" + }, + "application/vnd.leap+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.liberty-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lbe"] + }, + "application/vnd.logipipe.circuit+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.loom": { + "source": "iana" + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"] + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"] + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"] + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"] + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"] + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"] + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"] + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + "source": "iana" + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana" + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana" + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"] + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + "source": "iana" + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"] + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"] + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"] + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana" + }, + "application/vnd.microsoft.windows.thumbnail-cache": { + "source": "iana" + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana" + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"] + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"] + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"] + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"] + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"] + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"] + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"] + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"] + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana" + }, + "application/vnd.motorola.iprm": { + "source": "iana" + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"] + }, + "application/vnd.ms-3mfdocument": { + "source": "iana" + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"] + }, + "application/vnd.ms-asf": { + "source": "iana" + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache" + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"] + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"] + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"] + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"] + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"] + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-outlook": { + "compressible": false, + "extensions": ["msg"] + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache" + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"] + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt","pps","pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-printschematicket+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp","mpt"] + }, + "application/vnd.ms-tnef": { + "source": "iana" + }, + "application/vnd.ms-windows.devicepairing": { + "source": "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + "source": "iana" + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"] + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps","wks","wcm","wdb"] + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"] + }, + "application/vnd.msa-disk-image": { + "source": "iana" + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"] + }, + "application/vnd.msign": { + "source": "iana" + }, + "application/vnd.multiad.creator": { + "source": "iana" + }, + "application/vnd.multiad.creator.cif": { + "source": "iana" + }, + "application/vnd.music-niff": { + "source": "iana" + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"] + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"] + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"] + }, + "application/vnd.ncd.control": { + "source": "iana" + }, + "application/vnd.ncd.reference": { + "source": "iana" + }, + "application/vnd.nearst.inv+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.nervana": { + "source": "iana" + }, + "application/vnd.netfpx": { + "source": "iana" + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"] + }, + "application/vnd.nimn": { + "source": "iana" + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana" + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana" + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf","nitf"] + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"] + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"] + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"] + }, + "application/vnd.nokia.catalogs": { + "source": "iana" + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.conml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ac"] + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "iana", + "extensions": ["n-gage"] + }, + "application/vnd.nokia.ncd": { + "source": "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"] + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"] + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"] + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"] + }, + "application/vnd.ntt-local.content-share": { + "source": "iana" + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana" + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + "source": "iana", + "extensions": ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"] + }, + "application/vnd.obn": { + "source": "iana" + }, + "application/vnd.ocf+cbor": { + "source": "iana" + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.pae.gem": { + "source": "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"] + }, + "application/vnd.oma-scws-config": { + "source": "iana" + }, + "application/vnd.oma-scws-http-request": { + "source": "iana" + }, + "application/vnd.oma-scws-http-response": { + "source": "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.dcd": { + "source": "iana" + }, + "application/vnd.oma.dcdc": { + "source": "iana" + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+tlv": { + "source": "iana" + }, + "application/vnd.oma.pal+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.push": { + "source": "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omads-email+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omads-file+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omads-folder+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omaloc-supl-init": { + "source": "iana" + }, + "application/vnd.onepager": { + "source": "iana" + }, + "application/vnd.onepagertamp": { + "source": "iana" + }, + "application/vnd.onepagertamx": { + "source": "iana" + }, + "application/vnd.onepagertat": { + "source": "iana" + }, + "application/vnd.onepagertatp": { + "source": "iana" + }, + "application/vnd.onepagertatx": { + "source": "iana" + }, + "application/vnd.openblox.game+xml": { + "source": "iana", + "compressible": true, + "extensions": ["obgx"] + }, + "application/vnd.openblox.game-binary": { + "source": "iana" + }, + "application/vnd.openeye.oeb": { + "source": "iana" + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osm"] + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "iana", + "extensions": ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "iana", + "extensions": ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "iana", + "extensions": ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.orange.indata": { + "source": "iana" + }, + "application/vnd.osa.netdeploy": { + "source": "iana" + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"] + }, + "application/vnd.osgi.bundle": { + "source": "iana" + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"] + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oxli.countgraph": { + "source": "iana" + }, + "application/vnd.pagerduty+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb","pqa","oprc"] + }, + "application/vnd.panoply": { + "source": "iana" + }, + "application/vnd.paos.xml": { + "source": "iana" + }, + "application/vnd.patentdive": { + "source": "iana" + }, + "application/vnd.patientecommsdoc": { + "source": "iana" + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"] + }, + "application/vnd.pcos": { + "source": "iana" + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"] + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + "source": "iana" + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"] + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"] + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + "source": "iana" + }, + "application/vnd.powerbuilder7": { + "source": "iana" + }, + "application/vnd.powerbuilder7-s": { + "source": "iana" + }, + "application/vnd.powerbuilder75": { + "source": "iana" + }, + "application/vnd.powerbuilder75-s": { + "source": "iana" + }, + "application/vnd.preminet": { + "source": "iana" + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"] + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"] + }, + "application/vnd.psfs": { + "source": "iana" + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"] + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + "source": "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana" + }, + "application/vnd.quarantainenet": { + "source": "iana" + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana" + }, + "application/vnd.radisys.moml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.rainstor.data": { + "source": "iana" + }, + "application/vnd.rapid": { + "source": "iana" + }, + "application/vnd.rar": { + "source": "iana" + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"] + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + "source": "iana" + }, + "application/vnd.restful+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"] + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"] + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "compressible": true, + "extensions": ["link66"] + }, + "application/vnd.rs-274x": { + "source": "iana" + }, + "application/vnd.ruckus.download": { + "source": "iana" + }, + "application/vnd.s3sms": { + "source": "iana" + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"] + }, + "application/vnd.sbm.cid": { + "source": "iana" + }, + "application/vnd.sbm.mid2": { + "source": "iana" + }, + "application/vnd.scribus": { + "source": "iana" + }, + "application/vnd.sealed.3df": { + "source": "iana" + }, + "application/vnd.sealed.csf": { + "source": "iana" + }, + "application/vnd.sealed.doc": { + "source": "iana" + }, + "application/vnd.sealed.eml": { + "source": "iana" + }, + "application/vnd.sealed.mht": { + "source": "iana" + }, + "application/vnd.sealed.net": { + "source": "iana" + }, + "application/vnd.sealed.ppt": { + "source": "iana" + }, + "application/vnd.sealed.tiff": { + "source": "iana" + }, + "application/vnd.sealed.xls": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana" + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"] + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"] + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"] + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"] + }, + "application/vnd.shade-save-file": { + "source": "iana" + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"] + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"] + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"] + }, + "application/vnd.shootproof+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shopkick+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.sigrok.session": { + "source": "iana" + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd","twds"] + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"] + }, + "application/vnd.smart.notebook": { + "source": "iana" + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"] + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fo"] + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana" + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sdkm","sdkd"] + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"] + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"] + }, + "application/vnd.sqlite3": { + "source": "iana" + }, + "application/vnd.sss-cod": { + "source": "iana" + }, + "application/vnd.sss-dtf": { + "source": "iana" + }, + "application/vnd.sss-ntf": { + "source": "iana" + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"] + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"] + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"] + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"] + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw","vor"] + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"] + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"] + }, + "application/vnd.street-stream": { + "source": "iana" + }, + "application/vnd.sun.wadl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wadl"] + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"] + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"] + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"] + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"] + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"] + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus","susp"] + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"] + }, + "application/vnd.swiftview-ics": { + "source": "iana" + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis","sisx"] + }, + "application/vnd.syncml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "extensions": ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ddf"] + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.syncml.ds.notification": { + "source": "iana" + }, + "application/vnd.tableschema+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"] + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap","cap","dmp"] + }, + "application/vnd.think-cell.ppttc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.tml": { + "source": "iana" + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"] + }, + "application/vnd.tri.onesource": { + "source": "iana" + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"] + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"] + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"] + }, + "application/vnd.truedoc": { + "source": "iana" + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana" + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd","ufdl"] + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"] + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"] + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"] + }, + "application/vnd.uoml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uoml"] + }, + "application/vnd.uplanet.alert": { + "source": "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.channel": { + "source": "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.list": { + "source": "iana" + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.signal": { + "source": "iana" + }, + "application/vnd.uri-map": { + "source": "iana" + }, + "application/vnd.valve.source.material": { + "source": "iana" + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"] + }, + "application/vnd.vd-study": { + "source": "iana" + }, + "application/vnd.vectorworks": { + "source": "iana" + }, + "application/vnd.vel+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.verimatrix.vcas": { + "source": "iana" + }, + "application/vnd.veryant.thin": { + "source": "iana" + }, + "application/vnd.ves.encrypted": { + "source": "iana" + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana" + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd","vst","vss","vsw"] + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"] + }, + "application/vnd.vividence.scriptfile": { + "source": "iana" + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"] + }, + "application/vnd.wap.sic": { + "source": "iana" + }, + "application/vnd.wap.slc": { + "source": "iana" + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "extensions": ["wbxml"] + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"] + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"] + }, + "application/vnd.wfa.p2p": { + "source": "iana" + }, + "application/vnd.wfa.wsc": { + "source": "iana" + }, + "application/vnd.windows.devicepairing": { + "source": "iana" + }, + "application/vnd.wmc": { + "source": "iana" + }, + "application/vnd.wmf.bootstrap": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana" + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"] + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"] + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana" + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana" + }, + "application/vnd.wv.csp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.wv.ssp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"] + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"] + }, + "application/vnd.xfdl.webform": { + "source": "iana" + }, + "application/vnd.xmi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xmpie.cpkg": { + "source": "iana" + }, + "application/vnd.xmpie.dpkg": { + "source": "iana" + }, + "application/vnd.xmpie.plan": { + "source": "iana" + }, + "application/vnd.xmpie.ppkg": { + "source": "iana" + }, + "application/vnd.xmpie.xlim": { + "source": "iana" + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana" + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana" + }, + "application/vnd.yaoweme": { + "source": "iana" + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"] + }, + "application/vnd.youtube.yt": { + "source": "iana" + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir","zirz"] + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zaz"] + }, + "application/voicexml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["vxml"] + }, + "application/voucher-cms+json": { + "source": "iana", + "compressible": true + }, + "application/vq-rtcpxr": { + "source": "iana" + }, + "application/wasm": { + "compressible": true, + "extensions": ["wasm"] + }, + "application/watcherinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/webpush-options+json": { + "source": "iana", + "compressible": true + }, + "application/whoispp-query": { + "source": "iana" + }, + "application/whoispp-response": { + "source": "iana" + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"] + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"] + }, + "application/wita": { + "source": "iana" + }, + "application/wordperfect5.1": { + "source": "iana" + }, + "application/wsdl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wsdl"] + }, + "application/wspolicy+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wspolicy"] + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"] + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"] + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"] + }, + "application/x-amf": { + "source": "apache" + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"] + }, + "application/x-arj": { + "compressible": false, + "extensions": ["arj"] + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab","x32","u32","vox"] + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"] + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"] + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"] + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"] + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb","blorb"] + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"] + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2","boz"] + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr","cba","cbt","cbz","cb7"] + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"] + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"] + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"] + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"] + }, + "application/x-chrome-extension": { + "extensions": ["crx"] + }, + "application/x-cocoa": { + "source": "nginx", + "extensions": ["cco"] + }, + "application/x-compress": { + "source": "apache" + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"] + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"] + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"] + }, + "application/x-deb": { + "compressible": false + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb","udeb"] + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"] + }, + "application/x-director": { + "source": "apache", + "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"] + }, + "application/x-dtbncx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ncx"] + }, + "application/x-dtbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dtb"] + }, + "application/x-dtbresource+xml": { + "source": "apache", + "compressible": true, + "extensions": ["res"] + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"] + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"] + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"] + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"] + }, + "application/x-font-dos": { + "source": "apache" + }, + "application/x-font-framemaker": { + "source": "apache" + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"] + }, + "application/x-font-libgrx": { + "source": "apache" + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"] + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"] + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"] + }, + "application/x-font-speedo": { + "source": "apache" + }, + "application/x-font-sunos-news": { + "source": "apache" + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa","pfb","pfm","afm"] + }, + "application/x-font-vfont": { + "source": "apache" + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"] + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"] + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"] + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"] + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"] + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"] + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"] + }, + "application/x-gzip": { + "source": "apache" + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"] + }, + "application/x-httpd-php": { + "compressible": true, + "extensions": ["php"] + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"] + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"] + }, + "application/x-java-archive-diff": { + "source": "nginx", + "extensions": ["jardiff"] + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"] + }, + "application/x-javascript": { + "compressible": true + }, + "application/x-keepass2": { + "extensions": ["kdbx"] + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"] + }, + "application/x-lua-bytecode": { + "extensions": ["luac"] + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh","lha"] + }, + "application/x-makeself": { + "source": "nginx", + "extensions": ["run"] + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"] + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc","mobi"] + }, + "application/x-mpegurl": { + "compressible": false + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"] + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"] + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"] + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"] + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"] + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"] + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"] + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"] + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"] + }, + "application/x-msdos-program": { + "extensions": ["exe"] + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe","dll","com","bat","msi"] + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb","m13","m14"] + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf","wmz","emf","emz"] + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"] + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"] + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"] + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"] + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"] + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc","cdf"] + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"] + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"] + }, + "application/x-perl": { + "source": "nginx", + "extensions": ["pl","pm"] + }, + "application/x-pilot": { + "source": "nginx", + "extensions": ["prc","pdb"] + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12","pfx"] + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b","spc"] + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"] + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"] + }, + "application/x-redhat-package-manager": { + "source": "nginx", + "extensions": ["rpm"] + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"] + }, + "application/x-sea": { + "source": "nginx", + "extensions": ["sea"] + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"] + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"] + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"] + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"] + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"] + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"] + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"] + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"] + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"] + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"] + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"] + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"] + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"] + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl","tk"] + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"] + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"] + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo","texi"] + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"] + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"] + }, + "application/x-virtualbox-hdd": { + "compressible": true, + "extensions": ["hdd"] + }, + "application/x-virtualbox-ova": { + "compressible": true, + "extensions": ["ova"] + }, + "application/x-virtualbox-ovf": { + "compressible": true, + "extensions": ["ovf"] + }, + "application/x-virtualbox-vbox": { + "compressible": true, + "extensions": ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + "compressible": false, + "extensions": ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + "compressible": true, + "extensions": ["vdi"] + }, + "application/x-virtualbox-vhd": { + "compressible": true, + "extensions": ["vhd"] + }, + "application/x-virtualbox-vmdk": { + "compressible": true, + "extensions": ["vmdk"] + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"] + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"] + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true + }, + "application/x-x509-ca-cert": { + "source": "apache", + "extensions": ["der","crt","pem"] + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"] + }, + "application/x-xliff+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xlf"] + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"] + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"] + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] + }, + "application/x400-bp": { + "source": "iana" + }, + "application/xacml+xml": { + "source": "iana", + "compressible": true + }, + "application/xaml+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xaml"] + }, + "application/xcap-att+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xav"] + }, + "application/xcap-caps+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xca"] + }, + "application/xcap-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"] + }, + "application/xcap-el+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xel"] + }, + "application/xcap-error+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xer"] + }, + "application/xcap-ns+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xns"] + }, + "application/xcon-conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana", + "compressible": true + }, + "application/xenc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xenc"] + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml","xht"] + }, + "application/xhtml-voice+xml": { + "source": "apache", + "compressible": true + }, + "application/xliff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xlf"] + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml","xsl","xsd","rng"] + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"] + }, + "application/xml-external-parsed-entity": { + "source": "iana" + }, + "application/xml-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/xmpp+xml": { + "source": "iana", + "compressible": true + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"] + }, + "application/xproc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xpl"] + }, + "application/xslt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xslt"] + }, + "application/xspf+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xspf"] + }, + "application/xv+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mxml","xhvml","xvml","xvm"] + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"] + }, + "application/yang-data+json": { + "source": "iana", + "compressible": true + }, + "application/yang-data+xml": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+json": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/yin+xml": { + "source": "iana", + "compressible": true, + "extensions": ["yin"] + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"] + }, + "application/zlib": { + "source": "iana" + }, + "application/zstd": { + "source": "iana" + }, + "audio/1d-interleaved-parityfec": { + "source": "iana" + }, + "audio/32kadpcm": { + "source": "iana" + }, + "audio/3gpp": { + "source": "iana", + "compressible": false, + "extensions": ["3gpp"] + }, + "audio/3gpp2": { + "source": "iana" + }, + "audio/aac": { + "source": "iana" + }, + "audio/ac3": { + "source": "iana" + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"] + }, + "audio/amr": { + "source": "iana" + }, + "audio/amr-wb": { + "source": "iana" + }, + "audio/amr-wb+": { + "source": "iana" + }, + "audio/aptx": { + "source": "iana" + }, + "audio/asc": { + "source": "iana" + }, + "audio/atrac-advanced-lossless": { + "source": "iana" + }, + "audio/atrac-x": { + "source": "iana" + }, + "audio/atrac3": { + "source": "iana" + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au","snd"] + }, + "audio/bv16": { + "source": "iana" + }, + "audio/bv32": { + "source": "iana" + }, + "audio/clearmode": { + "source": "iana" + }, + "audio/cn": { + "source": "iana" + }, + "audio/dat12": { + "source": "iana" + }, + "audio/dls": { + "source": "iana" + }, + "audio/dsr-es201108": { + "source": "iana" + }, + "audio/dsr-es202050": { + "source": "iana" + }, + "audio/dsr-es202211": { + "source": "iana" + }, + "audio/dsr-es202212": { + "source": "iana" + }, + "audio/dv": { + "source": "iana" + }, + "audio/dvi4": { + "source": "iana" + }, + "audio/eac3": { + "source": "iana" + }, + "audio/encaprtp": { + "source": "iana" + }, + "audio/evrc": { + "source": "iana" + }, + "audio/evrc-qcp": { + "source": "iana" + }, + "audio/evrc0": { + "source": "iana" + }, + "audio/evrc1": { + "source": "iana" + }, + "audio/evrcb": { + "source": "iana" + }, + "audio/evrcb0": { + "source": "iana" + }, + "audio/evrcb1": { + "source": "iana" + }, + "audio/evrcnw": { + "source": "iana" + }, + "audio/evrcnw0": { + "source": "iana" + }, + "audio/evrcnw1": { + "source": "iana" + }, + "audio/evrcwb": { + "source": "iana" + }, + "audio/evrcwb0": { + "source": "iana" + }, + "audio/evrcwb1": { + "source": "iana" + }, + "audio/evs": { + "source": "iana" + }, + "audio/flexfec": { + "source": "iana" + }, + "audio/fwdred": { + "source": "iana" + }, + "audio/g711-0": { + "source": "iana" + }, + "audio/g719": { + "source": "iana" + }, + "audio/g722": { + "source": "iana" + }, + "audio/g7221": { + "source": "iana" + }, + "audio/g723": { + "source": "iana" + }, + "audio/g726-16": { + "source": "iana" + }, + "audio/g726-24": { + "source": "iana" + }, + "audio/g726-32": { + "source": "iana" + }, + "audio/g726-40": { + "source": "iana" + }, + "audio/g728": { + "source": "iana" + }, + "audio/g729": { + "source": "iana" + }, + "audio/g7291": { + "source": "iana" + }, + "audio/g729d": { + "source": "iana" + }, + "audio/g729e": { + "source": "iana" + }, + "audio/gsm": { + "source": "iana" + }, + "audio/gsm-efr": { + "source": "iana" + }, + "audio/gsm-hr-08": { + "source": "iana" + }, + "audio/ilbc": { + "source": "iana" + }, + "audio/ip-mr_v2.5": { + "source": "iana" + }, + "audio/isac": { + "source": "apache" + }, + "audio/l16": { + "source": "iana" + }, + "audio/l20": { + "source": "iana" + }, + "audio/l24": { + "source": "iana", + "compressible": false + }, + "audio/l8": { + "source": "iana" + }, + "audio/lpc": { + "source": "iana" + }, + "audio/melp": { + "source": "iana" + }, + "audio/melp1200": { + "source": "iana" + }, + "audio/melp2400": { + "source": "iana" + }, + "audio/melp600": { + "source": "iana" + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid","midi","kar","rmi"] + }, + "audio/mobile-xmf": { + "source": "iana", + "extensions": ["mxmf"] + }, + "audio/mp3": { + "compressible": false, + "extensions": ["mp3"] + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["m4a","mp4a"] + }, + "audio/mp4a-latm": { + "source": "iana" + }, + "audio/mpa": { + "source": "iana" + }, + "audio/mpa-robust": { + "source": "iana" + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] + }, + "audio/mpeg4-generic": { + "source": "iana" + }, + "audio/musepack": { + "source": "apache" + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga","ogg","spx"] + }, + "audio/opus": { + "source": "iana" + }, + "audio/parityfec": { + "source": "iana" + }, + "audio/pcma": { + "source": "iana" + }, + "audio/pcma-wb": { + "source": "iana" + }, + "audio/pcmu": { + "source": "iana" + }, + "audio/pcmu-wb": { + "source": "iana" + }, + "audio/prs.sid": { + "source": "iana" + }, + "audio/qcelp": { + "source": "iana" + }, + "audio/raptorfec": { + "source": "iana" + }, + "audio/red": { + "source": "iana" + }, + "audio/rtp-enc-aescm128": { + "source": "iana" + }, + "audio/rtp-midi": { + "source": "iana" + }, + "audio/rtploopback": { + "source": "iana" + }, + "audio/rtx": { + "source": "iana" + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"] + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"] + }, + "audio/smv": { + "source": "iana" + }, + "audio/smv-qcp": { + "source": "iana" + }, + "audio/smv0": { + "source": "iana" + }, + "audio/sp-midi": { + "source": "iana" + }, + "audio/speex": { + "source": "iana" + }, + "audio/t140c": { + "source": "iana" + }, + "audio/t38": { + "source": "iana" + }, + "audio/telephone-event": { + "source": "iana" + }, + "audio/tetra_acelp": { + "source": "iana" + }, + "audio/tone": { + "source": "iana" + }, + "audio/uemclip": { + "source": "iana" + }, + "audio/ulpfec": { + "source": "iana" + }, + "audio/usac": { + "source": "iana" + }, + "audio/vdvi": { + "source": "iana" + }, + "audio/vmr-wb": { + "source": "iana" + }, + "audio/vnd.3gpp.iufp": { + "source": "iana" + }, + "audio/vnd.4sb": { + "source": "iana" + }, + "audio/vnd.audiokoz": { + "source": "iana" + }, + "audio/vnd.celp": { + "source": "iana" + }, + "audio/vnd.cisco.nse": { + "source": "iana" + }, + "audio/vnd.cmles.radio-events": { + "source": "iana" + }, + "audio/vnd.cns.anp1": { + "source": "iana" + }, + "audio/vnd.cns.inf1": { + "source": "iana" + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva","uvva"] + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"] + }, + "audio/vnd.dlna.adts": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana" + }, + "audio/vnd.dolby.mlp": { + "source": "iana" + }, + "audio/vnd.dolby.mps": { + "source": "iana" + }, + "audio/vnd.dolby.pl2": { + "source": "iana" + }, + "audio/vnd.dolby.pl2x": { + "source": "iana" + }, + "audio/vnd.dolby.pl2z": { + "source": "iana" + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana" + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"] + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"] + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"] + }, + "audio/vnd.dts.uhd": { + "source": "iana" + }, + "audio/vnd.dvb.file": { + "source": "iana" + }, + "audio/vnd.everad.plj": { + "source": "iana" + }, + "audio/vnd.hns.audio": { + "source": "iana" + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana" + }, + "audio/vnd.nortel.vbk": { + "source": "iana" + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + "source": "iana" + }, + "audio/vnd.presonus.multitrack": { + "source": "iana" + }, + "audio/vnd.qcelp": { + "source": "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana" + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"] + }, + "audio/vnd.rn-realaudio": { + "compressible": false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana" + }, + "audio/vnd.vmx.cvsd": { + "source": "iana" + }, + "audio/vnd.wave": { + "compressible": false + }, + "audio/vorbis": { + "source": "iana", + "compressible": false + }, + "audio/vorbis-config": { + "source": "iana" + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"] + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"] + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif","aiff","aifc"] + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"] + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"] + }, + "audio/x-m4a": { + "source": "nginx", + "extensions": ["m4a"] + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"] + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"] + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"] + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"] + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram","ra"] + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"] + }, + "audio/x-realaudio": { + "source": "nginx", + "extensions": ["ra"] + }, + "audio/x-tta": { + "source": "apache" + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"] + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"] + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"] + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"] + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"] + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"] + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"] + }, + "chemical/x-pdb": { + "source": "apache" + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"] + }, + "font/collection": { + "source": "iana", + "extensions": ["ttc"] + }, + "font/otf": { + "source": "iana", + "compressible": true, + "extensions": ["otf"] + }, + "font/sfnt": { + "source": "iana" + }, + "font/ttf": { + "source": "iana", + "compressible": true, + "extensions": ["ttf"] + }, + "font/woff": { + "source": "iana", + "extensions": ["woff"] + }, + "font/woff2": { + "source": "iana", + "extensions": ["woff2"] + }, + "image/aces": { + "source": "iana", + "extensions": ["exr"] + }, + "image/apng": { + "compressible": false, + "extensions": ["apng"] + }, + "image/avci": { + "source": "iana" + }, + "image/avcs": { + "source": "iana" + }, + "image/bmp": { + "source": "iana", + "compressible": true, + "extensions": ["bmp"] + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"] + }, + "image/dicom-rle": { + "source": "iana", + "extensions": ["drle"] + }, + "image/emf": { + "source": "iana", + "extensions": ["emf"] + }, + "image/fits": { + "source": "iana", + "extensions": ["fits"] + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"] + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"] + }, + "image/heic": { + "source": "iana", + "extensions": ["heic"] + }, + "image/heic-sequence": { + "source": "iana", + "extensions": ["heics"] + }, + "image/heif": { + "source": "iana", + "extensions": ["heif"] + }, + "image/heif-sequence": { + "source": "iana", + "extensions": ["heifs"] + }, + "image/hej2k": { + "source": "iana", + "extensions": ["hej2"] + }, + "image/hsj2": { + "source": "iana", + "extensions": ["hsj2"] + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"] + }, + "image/jls": { + "source": "iana", + "extensions": ["jls"] + }, + "image/jp2": { + "source": "iana", + "compressible": false, + "extensions": ["jp2","jpg2"] + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg","jpg","jpe"] + }, + "image/jph": { + "source": "iana", + "extensions": ["jph"] + }, + "image/jphc": { + "source": "iana", + "extensions": ["jhc"] + }, + "image/jpm": { + "source": "iana", + "compressible": false, + "extensions": ["jpm"] + }, + "image/jpx": { + "source": "iana", + "compressible": false, + "extensions": ["jpx","jpf"] + }, + "image/jxr": { + "source": "iana", + "extensions": ["jxr"] + }, + "image/jxra": { + "source": "iana", + "extensions": ["jxra"] + }, + "image/jxrs": { + "source": "iana", + "extensions": ["jxrs"] + }, + "image/jxs": { + "source": "iana", + "extensions": ["jxs"] + }, + "image/jxsc": { + "source": "iana", + "extensions": ["jxsc"] + }, + "image/jxsi": { + "source": "iana", + "extensions": ["jxsi"] + }, + "image/jxss": { + "source": "iana", + "extensions": ["jxss"] + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"] + }, + "image/naplps": { + "source": "iana" + }, + "image/pjpeg": { + "compressible": false + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"] + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif"] + }, + "image/prs.pti": { + "source": "iana", + "extensions": ["pti"] + }, + "image/pwg-raster": { + "source": "iana" + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"] + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg","svgz"] + }, + "image/t38": { + "source": "iana", + "extensions": ["t38"] + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tif","tiff"] + }, + "image/tiff-fx": { + "source": "iana", + "extensions": ["tfx"] + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana", + "extensions": ["azv"] + }, + "image/vnd.cns.inf2": { + "source": "iana" + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi","uvvi","uvg","uvvg"] + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu","djv"] + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"] + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"] + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"] + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"] + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana" + }, + "image/vnd.microsoft.icon": { + "source": "iana", + "extensions": ["ico"] + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.mozilla.apng": { + "source": "iana" + }, + "image/vnd.ms-dds": { + "extensions": ["dds"] + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"] + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"] + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"] + }, + "image/vnd.radiance": { + "source": "iana" + }, + "image/vnd.sealed.png": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana" + }, + "image/vnd.svf": { + "source": "iana" + }, + "image/vnd.tencent.tap": { + "source": "iana", + "extensions": ["tap"] + }, + "image/vnd.valve.source.texture": { + "source": "iana", + "extensions": ["vtf"] + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"] + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"] + }, + "image/vnd.zbrush.pcx": { + "source": "iana", + "extensions": ["pcx"] + }, + "image/webp": { + "source": "apache", + "extensions": ["webp"] + }, + "image/wmf": { + "source": "iana", + "extensions": ["wmf"] + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"] + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"] + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"] + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh","fhc","fh4","fh5","fh7"] + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"] + }, + "image/x-jng": { + "source": "nginx", + "extensions": ["jng"] + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"] + }, + "image/x-ms-bmp": { + "source": "nginx", + "compressible": true, + "extensions": ["bmp"] + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"] + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic","pct"] + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"] + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"] + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"] + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"] + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"] + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"] + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"] + }, + "image/x-xcf": { + "compressible": false + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"] + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"] + }, + "message/cpim": { + "source": "iana" + }, + "message/delivery-status": { + "source": "iana" + }, + "message/disposition-notification": { + "source": "iana", + "extensions": [ + "disposition-notification" + ] + }, + "message/external-body": { + "source": "iana" + }, + "message/feedback-report": { + "source": "iana" + }, + "message/global": { + "source": "iana", + "extensions": ["u8msg"] + }, + "message/global-delivery-status": { + "source": "iana", + "extensions": ["u8dsn"] + }, + "message/global-disposition-notification": { + "source": "iana", + "extensions": ["u8mdn"] + }, + "message/global-headers": { + "source": "iana", + "extensions": ["u8hdr"] + }, + "message/http": { + "source": "iana", + "compressible": false + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true + }, + "message/news": { + "source": "iana" + }, + "message/partial": { + "source": "iana", + "compressible": false + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml","mime"] + }, + "message/s-http": { + "source": "iana" + }, + "message/sip": { + "source": "iana" + }, + "message/sipfrag": { + "source": "iana" + }, + "message/tracking-status": { + "source": "iana" + }, + "message/vnd.si.simp": { + "source": "iana" + }, + "message/vnd.wfa.wsc": { + "source": "iana", + "extensions": ["wsc"] + }, + "model/3mf": { + "source": "iana", + "extensions": ["3mf"] + }, + "model/gltf+json": { + "source": "iana", + "compressible": true, + "extensions": ["gltf"] + }, + "model/gltf-binary": { + "source": "iana", + "compressible": true, + "extensions": ["glb"] + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs","iges"] + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh","mesh","silo"] + }, + "model/stl": { + "source": "iana", + "extensions": ["stl"] + }, + "model/vnd.collada+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dae"] + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"] + }, + "model/vnd.flatland.3dml": { + "source": "iana" + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"] + }, + "model/vnd.gs-gdl": { + "source": "apache" + }, + "model/vnd.gs.gdl": { + "source": "iana" + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"] + }, + "model/vnd.moml+xml": { + "source": "iana", + "compressible": true + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"] + }, + "model/vnd.opengex": { + "source": "iana", + "extensions": ["ogex"] + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana", + "extensions": ["x_b"] + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana", + "extensions": ["x_t"] + }, + "model/vnd.rosette.annotated-data-model": { + "source": "iana" + }, + "model/vnd.usdz+zip": { + "source": "iana", + "compressible": false, + "extensions": ["usdz"] + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana", + "extensions": ["bsp"] + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"] + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl","vrml"] + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db","x3dbz"] + }, + "model/x3d+fastinfoset": { + "source": "iana", + "extensions": ["x3db"] + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv","x3dvz"] + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d","x3dz"] + }, + "model/x3d-vrml": { + "source": "iana", + "extensions": ["x3dv"] + }, + "multipart/alternative": { + "source": "iana", + "compressible": false + }, + "multipart/appledouble": { + "source": "iana" + }, + "multipart/byteranges": { + "source": "iana" + }, + "multipart/digest": { + "source": "iana" + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false + }, + "multipart/form-data": { + "source": "iana", + "compressible": false + }, + "multipart/header-set": { + "source": "iana" + }, + "multipart/mixed": { + "source": "iana" + }, + "multipart/multilingual": { + "source": "iana" + }, + "multipart/parallel": { + "source": "iana" + }, + "multipart/related": { + "source": "iana", + "compressible": false + }, + "multipart/report": { + "source": "iana" + }, + "multipart/signed": { + "source": "iana", + "compressible": false + }, + "multipart/vnd.bint.med-plus": { + "source": "iana" + }, + "multipart/voice-message": { + "source": "iana" + }, + "multipart/x-mixed-replace": { + "source": "iana" + }, + "text/1d-interleaved-parityfec": { + "source": "iana" + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache","manifest"] + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics","ifb"] + }, + "text/calender": { + "compressible": true + }, + "text/cmd": { + "compressible": true + }, + "text/coffeescript": { + "extensions": ["coffee","litcoffee"] + }, + "text/css": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["css"] + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"] + }, + "text/csv-schema": { + "source": "iana" + }, + "text/directory": { + "source": "iana" + }, + "text/dns": { + "source": "iana" + }, + "text/ecmascript": { + "source": "iana" + }, + "text/encaprtp": { + "source": "iana" + }, + "text/enriched": { + "source": "iana" + }, + "text/flexfec": { + "source": "iana" + }, + "text/fwdred": { + "source": "iana" + }, + "text/grammar-ref-list": { + "source": "iana" + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html","htm","shtml"] + }, + "text/jade": { + "extensions": ["jade"] + }, + "text/javascript": { + "source": "iana", + "compressible": true + }, + "text/jcr-cnd": { + "source": "iana" + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"] + }, + "text/less": { + "compressible": true, + "extensions": ["less"] + }, + "text/markdown": { + "source": "iana", + "compressible": true, + "extensions": ["markdown","md"] + }, + "text/mathml": { + "source": "nginx", + "extensions": ["mml"] + }, + "text/mdx": { + "compressible": true, + "extensions": ["mdx"] + }, + "text/mizar": { + "source": "iana" + }, + "text/n3": { + "source": "iana", + "compressible": true, + "extensions": ["n3"] + }, + "text/parameters": { + "source": "iana" + }, + "text/parityfec": { + "source": "iana" + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt","text","conf","def","list","log","in","ini"] + }, + "text/provenance-notation": { + "source": "iana" + }, + "text/prs.fallenstein.rst": { + "source": "iana" + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"] + }, + "text/prs.prop.logic": { + "source": "iana" + }, + "text/raptorfec": { + "source": "iana" + }, + "text/red": { + "source": "iana" + }, + "text/rfc822-headers": { + "source": "iana" + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"] + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "text/rtp-enc-aescm128": { + "source": "iana" + }, + "text/rtploopback": { + "source": "iana" + }, + "text/rtx": { + "source": "iana" + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml","sgm"] + }, + "text/shex": { + "extensions": ["shex"] + }, + "text/slim": { + "extensions": ["slim","slm"] + }, + "text/strings": { + "source": "iana" + }, + "text/stylus": { + "extensions": ["stylus","styl"] + }, + "text/t140": { + "source": "iana" + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"] + }, + "text/troff": { + "source": "iana", + "extensions": ["t","tr","roff","man","me","ms"] + }, + "text/turtle": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["ttl"] + }, + "text/ulpfec": { + "source": "iana" + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri","uris","urls"] + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"] + }, + "text/vnd.a": { + "source": "iana" + }, + "text/vnd.abc": { + "source": "iana" + }, + "text/vnd.ascii-art": { + "source": "iana" + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"] + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"] + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"] + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"] + }, + "text/vnd.debian.copyright": { + "source": "iana" + }, + "text/vnd.dmclientscript": { + "source": "iana" + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana" + }, + "text/vnd.ficlab.flt": { + "source": "iana" + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"] + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"] + }, + "text/vnd.gml": { + "source": "iana" + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"] + }, + "text/vnd.hgl": { + "source": "iana" + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"] + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"] + }, + "text/vnd.iptc.newsml": { + "source": "iana" + }, + "text/vnd.iptc.nitf": { + "source": "iana" + }, + "text/vnd.latex-z": { + "source": "iana" + }, + "text/vnd.motorola.reflex": { + "source": "iana" + }, + "text/vnd.ms-mediapackage": { + "source": "iana" + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana" + }, + "text/vnd.senx.warpscript": { + "source": "iana" + }, + "text/vnd.si.uricatalogue": { + "source": "iana" + }, + "text/vnd.sosi": { + "source": "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "extensions": ["jad"] + }, + "text/vnd.trolltech.linguist": { + "source": "iana" + }, + "text/vnd.wap.si": { + "source": "iana" + }, + "text/vnd.wap.sl": { + "source": "iana" + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"] + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"] + }, + "text/vtt": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"] + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s","asm"] + }, + "text/x-c": { + "source": "apache", + "extensions": ["c","cc","cxx","cpp","h","hh","dic"] + }, + "text/x-component": { + "source": "nginx", + "extensions": ["htc"] + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f","for","f77","f90"] + }, + "text/x-gwt-rpc": { + "compressible": true + }, + "text/x-handlebars-template": { + "extensions": ["hbs"] + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"] + }, + "text/x-jquery-tmpl": { + "compressible": true + }, + "text/x-lua": { + "extensions": ["lua"] + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["mkd"] + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"] + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"] + }, + "text/x-org": { + "compressible": true, + "extensions": ["org"] + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p","pas"] + }, + "text/x-processing": { + "compressible": true, + "extensions": ["pde"] + }, + "text/x-sass": { + "extensions": ["sass"] + }, + "text/x-scss": { + "extensions": ["scss"] + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"] + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"] + }, + "text/x-suse-ymp": { + "compressible": true, + "extensions": ["ymp"] + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"] + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"] + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"] + }, + "text/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml"] + }, + "text/xml-external-parsed-entity": { + "source": "iana" + }, + "text/yaml": { + "extensions": ["yaml","yml"] + }, + "video/1d-interleaved-parityfec": { + "source": "iana" + }, + "video/3gpp": { + "source": "iana", + "extensions": ["3gp","3gpp"] + }, + "video/3gpp-tt": { + "source": "iana" + }, + "video/3gpp2": { + "source": "iana", + "extensions": ["3g2"] + }, + "video/bmpeg": { + "source": "iana" + }, + "video/bt656": { + "source": "iana" + }, + "video/celb": { + "source": "iana" + }, + "video/dv": { + "source": "iana" + }, + "video/encaprtp": { + "source": "iana" + }, + "video/flexfec": { + "source": "iana" + }, + "video/h261": { + "source": "iana", + "extensions": ["h261"] + }, + "video/h263": { + "source": "iana", + "extensions": ["h263"] + }, + "video/h263-1998": { + "source": "iana" + }, + "video/h263-2000": { + "source": "iana" + }, + "video/h264": { + "source": "iana", + "extensions": ["h264"] + }, + "video/h264-rcdo": { + "source": "iana" + }, + "video/h264-svc": { + "source": "iana" + }, + "video/h265": { + "source": "iana" + }, + "video/iso.segment": { + "source": "iana" + }, + "video/jpeg": { + "source": "iana", + "extensions": ["jpgv"] + }, + "video/jpeg2000": { + "source": "iana" + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm","jpgm"] + }, + "video/mj2": { + "source": "iana", + "extensions": ["mj2","mjp2"] + }, + "video/mp1s": { + "source": "iana" + }, + "video/mp2p": { + "source": "iana" + }, + "video/mp2t": { + "source": "iana", + "extensions": ["ts"] + }, + "video/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["mp4","mp4v","mpg4"] + }, + "video/mp4v-es": { + "source": "iana" + }, + "video/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpeg","mpg","mpe","m1v","m2v"] + }, + "video/mpeg4-generic": { + "source": "iana" + }, + "video/mpv": { + "source": "iana" + }, + "video/nv": { + "source": "iana" + }, + "video/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogv"] + }, + "video/parityfec": { + "source": "iana" + }, + "video/pointer": { + "source": "iana" + }, + "video/quicktime": { + "source": "iana", + "compressible": false, + "extensions": ["qt","mov"] + }, + "video/raptorfec": { + "source": "iana" + }, + "video/raw": { + "source": "iana" + }, + "video/rtp-enc-aescm128": { + "source": "iana" + }, + "video/rtploopback": { + "source": "iana" + }, + "video/rtx": { + "source": "iana" + }, + "video/smpte291": { + "source": "iana" + }, + "video/smpte292m": { + "source": "iana" + }, + "video/ulpfec": { + "source": "iana" + }, + "video/vc1": { + "source": "iana" + }, + "video/vc2": { + "source": "iana" + }, + "video/vnd.cctv": { + "source": "iana" + }, + "video/vnd.dece.hd": { + "source": "iana", + "extensions": ["uvh","uvvh"] + }, + "video/vnd.dece.mobile": { + "source": "iana", + "extensions": ["uvm","uvvm"] + }, + "video/vnd.dece.mp4": { + "source": "iana" + }, + "video/vnd.dece.pd": { + "source": "iana", + "extensions": ["uvp","uvvp"] + }, + "video/vnd.dece.sd": { + "source": "iana", + "extensions": ["uvs","uvvs"] + }, + "video/vnd.dece.video": { + "source": "iana", + "extensions": ["uvv","uvvv"] + }, + "video/vnd.directv.mpeg": { + "source": "iana" + }, + "video/vnd.directv.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dlna.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dvb.file": { + "source": "iana", + "extensions": ["dvb"] + }, + "video/vnd.fvt": { + "source": "iana", + "extensions": ["fvt"] + }, + "video/vnd.hns.video": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsavc": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "iana" + }, + "video/vnd.motorola.video": { + "source": "iana" + }, + "video/vnd.motorola.videop": { + "source": "iana" + }, + "video/vnd.mpegurl": { + "source": "iana", + "extensions": ["mxu","m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + "source": "iana", + "extensions": ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "iana" + }, + "video/vnd.nokia.mp4vr": { + "source": "iana" + }, + "video/vnd.nokia.videovoip": { + "source": "iana" + }, + "video/vnd.objectvideo": { + "source": "iana" + }, + "video/vnd.radgamettools.bink": { + "source": "iana" + }, + "video/vnd.radgamettools.smacker": { + "source": "iana" + }, + "video/vnd.sealed.mpeg1": { + "source": "iana" + }, + "video/vnd.sealed.mpeg4": { + "source": "iana" + }, + "video/vnd.sealed.swf": { + "source": "iana" + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "iana" + }, + "video/vnd.uvvu.mp4": { + "source": "iana", + "extensions": ["uvu","uvvu"] + }, + "video/vnd.vivo": { + "source": "iana", + "extensions": ["viv"] + }, + "video/vnd.youtube.yt": { + "source": "iana" + }, + "video/vp8": { + "source": "iana" + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"] + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"] + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"] + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"] + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"] + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv","mk3d","mks"] + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"] + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf","asx"] + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"] + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"] + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"] + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"] + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"] + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"] + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"] + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"] + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"] + }, + "x-shader/x-fragment": { + "compressible": true + }, + "x-shader/x-vertex": { + "compressible": true + } +} diff --git a/apps/dmt-search/dmt/connectome-next/lib/utils/mime/index.js b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/index.js new file mode 100644 index 000000000..3ac83cf28 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/index.js @@ -0,0 +1,184 @@ +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + * @private + */ + +var db = require('./db.json'); +// todo: improve ? +var extname = filePath => (filePath.indexOf('.') > -1 ? '.' + filePath.split('.').slice(-1)[0] : undefined); + +/** + * Module variables. + * @private + */ + +var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/; +var TEXT_TYPE_REGEXP = /^text\//i; + +/** + * Module exports. + * @public + */ + +exports.charset = charset; +exports.charsets = { lookup: charset }; +exports.contentType = contentType; +exports.extension = extension; +exports.extensions = Object.create(null); +exports.lookup = lookup; +exports.types = Object.create(null); + +// Populate the extensions/types maps +populateMaps(exports.extensions, exports.types); + +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function charset(type) { + if (!type || typeof type !== 'string') { + return false; + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type); + var mime = match && db[match[1].toLowerCase()]; + + if (mime && mime.charset) { + return mime.charset; + } + + // default text/* to utf-8 + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return 'UTF-8'; + } + + return false; +} + +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ + +function contentType(str) { + // TODO: should this even be in this module? + if (!str || typeof str !== 'string') { + return false; + } + + var mime = str.indexOf('/') === -1 ? exports.lookup(str) : str; + + if (!mime) { + return false; + } + + // TODO: use content-type or other module + if (mime.indexOf('charset') === -1) { + var charset = exports.charset(mime); + if (charset) mime += '; charset=' + charset.toLowerCase(); + } + + return mime; +} + +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function extension(type) { + if (!type || typeof type !== 'string') { + return false; + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type); + + // get extensions + var exts = match && exports.extensions[match[1].toLowerCase()]; + + if (!exts || !exts.length) { + return false; + } + + return exts[0]; +} + +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ + +function lookup(path) { + if (!path || typeof path !== 'string') { + return false; + } + + // get the extension ("ext" or ".ext" or full path) + var extension = extname('x.' + path) + .toLowerCase() + .substr(1); + + if (!extension) { + return false; + } + + return exports.types[extension] || false; +} + +/** + * Populate the extensions and types maps. + * @private + */ + +function populateMaps(extensions, types) { + // source preference (least -> most) + var preference = ['nginx', 'apache', undefined, 'iana']; + + Object.keys(db).forEach(function forEachMimeType(type) { + var mime = db[type]; + var exts = mime.extensions; + + if (!exts || !exts.length) { + return; + } + + // mime -> extensions + extensions[type] = exts; + + // extension -> mime + for (var i = 0; i < exts.length; i++) { + var extension = exts[i]; + + if (types[extension]) { + var from = preference.indexOf(db[types[extension]].source); + var to = preference.indexOf(mime.source); + + if (types[extension] !== 'application/octet-stream' && (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { + // skip the remapping + continue; + } + } + + // set the extension -> mime + types[extension] = type; + } + }); +} diff --git a/apps/dmt-search/dmt/connectome-next/lib/utils/mime/package.json b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/package.json new file mode 100644 index 000000000..3fd1658d7 --- /dev/null +++ b/apps/dmt-search/dmt/connectome-next/lib/utils/mime/package.json @@ -0,0 +1,87 @@ +{ + "_from": "mime-types", + "_id": "mime-types@2.1.26", + "_inBundle": false, + "_integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "_location": "/mime-types", + "_phantomChildren": {}, + "_requested": { + "type": "tag", + "registry": true, + "raw": "mime-types", + "name": "mime-types", + "escapedName": "mime-types", + "rawSpec": "", + "saveSpec": null, + "fetchSpec": "latest" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "_shasum": "9c921fc09b7e149a65dfdc0da4d20997200b0a06", + "_spec": "mime-types", + "_where": "/Users/david/Desktop/mime", + "bugs": { + "url": "https://github.com/jshttp/mime-types/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": "https://searchbeam.jit.su" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "mime-db": "1.43.0" + }, + "deprecated": false, + "description": "The ultimate javascript content-type utility.", + "devDependencies": { + "eslint": "6.8.0", + "eslint-config-standard": "14.1.0", + "eslint-plugin-import": "2.19.1", + "eslint-plugin-node": "11.0.0", + "eslint-plugin-promise": "4.2.1", + "eslint-plugin-standard": "4.0.1", + "mocha": "7.0.0", + "nyc": "15.0.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "homepage": "https://github.com/jshttp/mime-types#readme", + "keywords": [ + "mime", + "types" + ], + "license": "MIT", + "name": "mime-types", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/mime-types.git" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec test/test.js", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" + }, + "version": "2.1.26" +} diff --git a/apps/dmt-search/dmt/protocol/searchGUI/index.js b/apps/dmt-search/dmt/protocol/searchGUI/index.js index 5f7e6b759..b84850679 100644 --- a/apps/dmt-search/dmt/protocol/searchGUI/index.js +++ b/apps/dmt-search/dmt/protocol/searchGUI/index.js @@ -1,4 +1,4 @@ -import { SyncStore } from 'dmt/connectome-stores'; +import { SyncStore } from 'connectome/stores'; import onConnect from './onConnect.js'; diff --git a/apps/dmt-search/dmt/protocol/searchGUI/objects/search.js b/apps/dmt-search/dmt/protocol/searchGUI/objects/search.js index 8c4d971be..e1cf82a88 100644 --- a/apps/dmt-search/dmt/protocol/searchGUI/objects/search.js +++ b/apps/dmt-search/dmt/protocol/searchGUI/objects/search.js @@ -4,7 +4,7 @@ import { push } from 'dmt/notify'; import { parseSearchQuery, serializeContentRefs } from 'dmt/search'; //import getContentProviders from '../getContentProviders'; -import { fiberHandle } from 'dmt/connectome-next'; +import { fiberHandle } from 'connectome-next'; const RESULTS_LIMIT = 20; diff --git a/apps/gui/.gitignore b/apps/gui/.gitignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/apps/gui/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/apps/gui/frontend/+app/public/bundle.css b/apps/gui/frontend/+app/public/bundle.css index d68f3c449..67ce6006d 100644 --- a/apps/gui/frontend/+app/public/bundle.css +++ b/apps/gui/frontend/+app/public/bundle.css @@ -1,38 +1,38 @@ :root{--warning:#E34042;--dmt-red:#E34042;--dmt-warning-pink:#EFCAF8;--dmt-orange:#E5AE34;--dmt-navy:#41468F;--dmt-navy2:#292C5A;--dmt-cyan:#29B3BF;--dmt-bright-cyan:#3DFFEC;--dmt-violet:#873BBF;--dmt-violet-dark:#2E1740;--dmt-lighter-magenta:#CAD2FF;--dmt-vibrant-green:#5FE02A;--dmt-cool-green:#5DF699;--dmt-cool-cyan:#51F5C8;--dmt-cool-cyan2:#58E288;--zeta-green:#31E5C1;--zeta-green-highlight:#34FED7;--zeta-green_check:#32E6BE;--search-input-width:330px}#app.preventPointerEvents.svelte-1y54rwl{pointer-events:none}.errors.svelte-1y54rwl{width:700px;margin:0 auto}.errors.svelte-1y54rwl .error.svelte-1y54rwl{padding:20px;margin-top:10px;background-color:#983128;color:white;border-radius:10px;color:#bbb;word-break:break-word}.errors.svelte-1y54rwl .error.cors_problem.svelte-1y54rwl{background-color:#424DE6}.error.svelte-1y54rwl .title.svelte-1y54rwl{color:#1E0B01;margin-bottom:5px}.error.svelte-1y54rwl .title .msg.svelte-1y54rwl{color:white}.error.svelte-1y54rwl .title .time.svelte-1y54rwl{background-color:#444;padding:2px 4px;color:white}.content_component.svelte-1y54rwl{position:fixed;top:0;height:100%;width:100%}.content_component.dim_background.svelte-1y54rwl{background-color:#222;opacity:0.9}.content_component.has_full_sidebar.svelte-1y54rwl{left:300px} h3.svelte-c2idy2 span.svelte-c2idy2{color:#444}#info_bar.svelte-c2idy2{z-index:50000;position:absolute;bottom:0;color:black;padding:10px;box-sizing:border-box;width:100%;height:550px;background-color:#40B18D;font-size:0.9em;opacity:0.9;overflow:hidden} .image.svelte-xkwd2x{display:none} -#app_list.svelte-1grmvl4{margin-top:30px;margin-left:350px}a.svelte-1grmvl4{padding:10px 20px 20px 20px;border-radius:10px;background-color:#41468F;display:block;margin-top:20px;width:400px;text-align:center;color:white;text-decoration:none}a.svelte-1grmvl4 h3.svelte-1grmvl4{text-decoration:underline}a.svelte-1grmvl4 .notice.svelte-1grmvl4{font-size:0.7em;color:white;width:400px;text-align:center;margin-top:10px;color:#ddd}a.user_app.svelte-1grmvl4{background-color:#894B8F}a.overrides_system_app.svelte-1grmvl4,a.overrides_user_app.svelte-1grmvl4{background-color:red}a.svelte-1grmvl4:hover{filter:contrast(1.5);cursor:pointer}a.svelte-1grmvl4:hover h3.svelte-1grmvl4{text-decoration:underline} .blinds.svelte-10kw9ls,.family_computer.svelte-10kw9ls{margin-left:20px}.blinds.svelte-10kw9ls h2.svelte-10kw9ls,.family_computer.svelte-10kw9ls h2.svelte-10kw9ls{text-align:center;font-size:1.2em}.blinds.svelte-10kw9ls button.svelte-10kw9ls{margin-left:5px}.blinds.svelte-10kw9ls button.svelte-10kw9ls,.family_computer.svelte-10kw9ls button.svelte-10kw9ls{margin-bottom:10px;height:50px;font-size:1.3em;background-color:#41468f;color:white;border:0;border-radius:5px}.blinds.svelte-10kw9ls button.svelte-10kw9ls{width:120px}.family_computer.svelte-10kw9ls{text-align:center}.blinds.svelte-10kw9ls button.svelte-10kw9ls:hover,.family_computer.svelte-10kw9ls button.svelte-10kw9ls:hover{cursor:pointer;opacity:0.8}.sidebar.svelte-10kw9ls{position:absolute;left:0;top:0;width:300px;z-index:10000;margin-bottom:10px}.sidebar_top_info.svelte-10kw9ls{margin-bottom:15px}.sidebar_top_info.top_only_with_background.svelte-10kw9ls{background-color:#333;opacity:0.8;border-bottom-right-radius:20px}.notifications.svelte-10kw9ls{padding-left:15px}.sidebar_vertical_space.svelte-10kw9ls{position:fixed;top:0;left:0;background-color:#333;height:100%;width:300px}.sidebar_bottom.svelte-10kw9ls{position:absolute;bottom:0px;left:0;width:300px;text-align:center;padding:20px;width:260px;padding-bottom:0px} -#nearby_devices.svelte-tcxsiw{z-index:100000;text-align:center;position:absolute;right:28px;bottom:150px;line-height:2.5em;background-color:#66AEB7;color:black;font-size:1.0em;border:4px solid #26A9B7;border-radius:2px}#nearby_devices.svelte-tcxsiw .device.svelte-tcxsiw{padding:5px;border-bottom:1px solid #26A9B7;cursor:pointer}#nearby_devices.nonRPi.svelte-tcxsiw .device.svelte-tcxsiw:hover{background-color:#4EC0B8;cursor:pointer}#nearby_devices.svelte-tcxsiw .device.svelte-tcxsiw:active{background-color:#26A9B7}#nearby_devices.svelte-tcxsiw .device .error.svelte-tcxsiw{background-color:#983128;color:white;padding:2px 5px;margin-right:5px}.ip.svelte-tcxsiw{color:#333}.hidden.svelte-tcxsiw{display:none}#nearby_devices.svelte-tcxsiw .devices_total.svelte-tcxsiw{padding:2px 5px;background-color:#555;color:white}#bottom_icons.svelte-tcxsiw{z-index:10000;display:flex;flex-direction:column;position:absolute;right:0;bottom:0}#bottom_icons.svelte-tcxsiw div.svelte-tcxsiw{cursor:pointer}#bottom_icons.svelte-tcxsiw div img.svelte-tcxsiw{width:120px;padding:20px;padding-bottom:12px} +#app_list.svelte-1grmvl4{margin-top:30px;margin-left:350px}a.svelte-1grmvl4{padding:10px 20px 20px 20px;border-radius:10px;background-color:#41468F;display:block;margin-top:20px;width:400px;text-align:center;color:white;text-decoration:none}a.svelte-1grmvl4 h3.svelte-1grmvl4{text-decoration:underline}a.svelte-1grmvl4 .notice.svelte-1grmvl4{font-size:0.7em;color:white;width:400px;text-align:center;margin-top:10px;color:#ddd}a.user_app.svelte-1grmvl4{background-color:#894B8F}a.overrides_system_app.svelte-1grmvl4,a.overrides_user_app.svelte-1grmvl4{background-color:red}a.svelte-1grmvl4:hover{filter:contrast(1.5);cursor:pointer}a.svelte-1grmvl4:hover h3.svelte-1grmvl4{text-decoration:underline} .selector.svelte-12e3beu{width:300px;position:fixed;top:0;right:0}@media only screen and (max-width: 640px){} +.baloon.svelte-1uq6icf{text-align:center}.baloon.svelte-1uq6icf img.svelte-1uq6icf{display:inline-block;margin:0 auto}.baloon.svelte-1uq6icf img.svelte-1uq6icf{width:300px}.baloon.nonRPi.svelte-1uq6icf img.svelte-1uq6icf{width:400px}#time.svelte-1uq6icf{margin:0 auto;padding-top:70px}#time.protect_visibility.svelte-1uq6icf{background-color:#222;opacity:0.8;margin-top:50px;padding-top:20px;width:630px;border-radius:20px}#environment_widget.svelte-1uq6icf{padding-top:10px;width:500px;margin:0 auto}{} +#nearby_devices.svelte-tcxsiw{z-index:100000;text-align:center;position:absolute;right:28px;bottom:150px;line-height:2.5em;background-color:#66AEB7;color:black;font-size:1.0em;border:4px solid #26A9B7;border-radius:2px}#nearby_devices.svelte-tcxsiw .device.svelte-tcxsiw{padding:5px;border-bottom:1px solid #26A9B7;cursor:pointer}#nearby_devices.nonRPi.svelte-tcxsiw .device.svelte-tcxsiw:hover{background-color:#4EC0B8;cursor:pointer}#nearby_devices.svelte-tcxsiw .device.svelte-tcxsiw:active{background-color:#26A9B7}#nearby_devices.svelte-tcxsiw .device .error.svelte-tcxsiw{background-color:#983128;color:white;padding:2px 5px;margin-right:5px}.ip.svelte-tcxsiw{color:#333}.hidden.svelte-tcxsiw{display:none}#nearby_devices.svelte-tcxsiw .devices_total.svelte-tcxsiw{padding:2px 5px;background-color:#555;color:white}#bottom_icons.svelte-tcxsiw{z-index:10000;display:flex;flex-direction:column;position:absolute;right:0;bottom:0}#bottom_icons.svelte-tcxsiw div.svelte-tcxsiw{cursor:pointer}#bottom_icons.svelte-tcxsiw div img.svelte-tcxsiw{width:120px;padding:20px;padding-bottom:12px} #analog_clock.svelte-bgs5sd{width:600px;height:600px;position:fixed;top:50%;left:50%;margin-top:-300px;margin-left:-300px;cursor:pointer}#analog_clock.hidden.svelte-bgs5sd{display:none} #iot_actions.svelte-1v4q3y7{margin-left:50px} -.baloon.svelte-1uq6icf{text-align:center}.baloon.svelte-1uq6icf img.svelte-1uq6icf{display:inline-block;margin:0 auto}.baloon.svelte-1uq6icf img.svelte-1uq6icf{width:300px}.baloon.nonRPi.svelte-1uq6icf img.svelte-1uq6icf{width:400px}#time.svelte-1uq6icf{margin:0 auto;padding-top:70px}#time.protect_visibility.svelte-1uq6icf{background-color:#222;opacity:0.8;margin-top:50px;padding-top:20px;width:630px;border-radius:20px}#environment_widget.svelte-1uq6icf{padding-top:10px;width:500px;margin:0 auto} -p.svelte-13jignu{width:100%}#help.svelte-13jignu{margin:20px 0 0 40px;font-size:1.0em;color:white;width:700px;text-align:justify} -:root{--player-ribbon-height:100px}a.svelte-96fn1x{color:white;text-decoration:none}a.svelte-96fn1x:hover{opacity:0.8}.error.svelte-96fn1x{color:var(--dmt-red)}.player_notice.svelte-96fn1x{float:left;clear:both}.player.svelte-96fn1x .touch_pressed.svelte-96fn1x{text-decoration:underline}.player.svelte-96fn1x .control.svelte-96fn1x{display:flex;align-items:center;margin-bottom:30px}.player.svelte-96fn1x .limit_info.svelte-96fn1x{display:flex;align-items:center;margin:30px 0}.search.svelte-96fn1x{padding:15px 20px;padding-left:10px;margin-left:10px}.search.svelte-96fn1x button.svelte-96fn1x{height:30px;width:60px;font-size:1.0em;margin:0;padding:0}.search.svelte-96fn1x button.hidden.svelte-96fn1x{display:none}.search.svelte-96fn1x button.action.svelte-96fn1x{background-color:#263B28;background-color:#5F7388;background-color:#37BB9B;color:white;color:#111}.search.svelte-96fn1x button.selected.svelte-96fn1x{background-color:var(--dmt-navy)}.search.svelte-96fn1x button.svelte-96fn1x:hover{opacity:0.9;cursor:pointer}.search_input.svelte-96fn1x{width:421px;height:20px;font-size:1.1em;padding:4px 4px;border:0;background-color:#ddd;color:#333;border-radius:5px}.search_results.svelte-96fn1x{margin-top:10px;font-size:0.8em}.provider_title.svelte-96fn1x{margin-bottom:5px}.provider_error.svelte-96fn1x{clear:both;color:var(--dmt-red)}.results_info_bottom.svelte-96fn1x{clear:both;margin-top:5px;margin-bottom:10px}button.svelte-96fn1x{width:100px;height:60px;color:white;margin-right:10px;border:0;font-size:20px;border-radius:5px;background-color:#444}.player.nonRPi.svelte-96fn1x button.svelte-96fn1x{height:40px}button.svelte-96fn1x:active{opacity:0.9}.player.nonRPi.svelte-96fn1x button.svelte-96fn1x:hover{cursor:pointer;opacity:0.9}button.volume.svelte-96fn1x{color:#222;background-color:#66AEB7}button.play.svelte-96fn1x{background-color:#26A9B7}button.pause.svelte-96fn1x{background-color:#aaa;color:#222}.player.svelte-96fn1x{margin-top:14px;padding:0px 10px 0 20px;color:white}span.volume.svelte-96fn1x{font-weight:bold;color:#26A9B7;font-size:20px}#playlist.svelte-96fn1x{font-size:19px;margin-top:5px;padding:1px 15px;border-radius:20px;font-family:"Inconsolata", "Courier New", Courier, monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}#playlist.nonRPi.svelte-96fn1x{font-size:18px;line-height:1em}#playlist.svelte-96fn1x .marker.svelte-96fn1x{width:10px;float:left;color:var(--dmt-violet);color:var(--dmt-bright-cyan);font-size:1.3em}#playlist.svelte-96fn1x .marker.limit_marker.svelte-96fn1x{color:#B6E29E}#playlist.svelte-96fn1x ul.svelte-96fn1x{padding:0;margin:0}#playlist.svelte-96fn1x ul.svelte-96fn1x{display:inline-block}#playlist.svelte-96fn1x li.svelte-96fn1x{color:#ccc}#playlist.svelte-96fn1x .li_wrapper.svelte-96fn1x{padding:1px 0}#playlist.nonRPi.svelte-96fn1x .li_wrapper.svelte-96fn1x{padding:1px 0}#playlist.svelte-96fn1x li.album_title.svelte-96fn1x{color:var(--dmt-lighter-magenta)}#playlist.svelte-96fn1x li.album_title.svelte-96fn1x{padding:4px 0}#playlist.svelte-96fn1x li.svelte-96fn1x:hover{cursor:pointer}#playlist.svelte-96fn1x li.metadata_read.svelte-96fn1x{color:white}#playlist.svelte-96fn1x li.playing.svelte-96fn1x{font-weight:bold;color:var(--dmt-bright-cyan)}#playlist.svelte-96fn1x li.within_limit.svelte-96fn1x{color:#B6E29E}#playlist.svelte-96fn1x li.past.svelte-96fn1x{color:#aaa}#playlist.svelte-96fn1x li.error.svelte-96fn1x{color:var(--warning)}#playlist.svelte-96fn1x li.just_pasted.svelte-96fn1x,#playlist.svelte-96fn1x li.just_bumped.svelte-96fn1x{color:#AD91CF}#playlist.svelte-96fn1x li.just_pasted.within_limit.svelte-96fn1x,#playlist.svelte-96fn1x li.just_bumped.within_limit.svelte-96fn1x{font-weight:bold}#playlist.svelte-96fn1x li.selected.svelte-96fn1x{color:var(--dmt-orange)}#playlist.svelte-96fn1x li.within_limit.selected.svelte-96fn1x{font-style:italic}#playlist.svelte-96fn1x li.about_to_be_cut.svelte-96fn1x{color:#555E78}button.limit_active.svelte-96fn1x{background-color:#B6E29E;color:#222}button.time_limit_active.svelte-96fn1x{background-color:#66AEB7;color:#222}.track_limit.svelte-96fn1x{color:#B6E29E;margin-right:10px}.limit_reached.svelte-96fn1x{color:#B6E29E}.time_limit.svelte-96fn1x,.set_time_limit.svelte-96fn1x,.time_limit_reached.svelte-96fn1x{color:#66AEB7}.limit_reached.svelte-96fn1x,.time_limit_reached.svelte-96fn1x{margin:30px 0}.time_limit.svelte-96fn1x{margin-right:10px}.time_limit.grayed_out.svelte-96fn1x{color:#585858;color:#444}.track_limit.svelte-96fn1x .limit_num.svelte-96fn1x{font-weight:bold}.repeat_song_mark.svelte-96fn1x{background-color:#7287A3;color:white;border-radius:5px;padding:1px 0 3px 0}.repeat_active1.svelte-96fn1x{background-color:#7287A3}.repeat_active2.svelte-96fn1x{background-color:#89A0C2}.repeat_active3.svelte-96fn1x{background-color:#90A9D1}#playlist.svelte-96fn1x li .id.svelte-96fn1x{font-weight:bold;color:#26A9B7;font-family:"CutiveMono", "Courier New", Courier, monospace;padding-left:4px}#playlist.svelte-96fn1x .li_wrapper.svelte-96fn1x{border-left:2px solid #555;margin-left:20px}#playlist.svelte-96fn1x .duration.non_past.svelte-96fn1x{color:#777}#playlist.svelte-96fn1x .li_wrapper.darker.svelte-96fn1x{border-left:2px solid #aaa}.streaming_media_info.svelte-96fn1x{width:540px;clear:both}.streaming_media_info.faded.svelte-96fn1x{opacity:0.2}.streaming_media_info.svelte-96fn1x .song.svelte-96fn1x{background:linear-gradient(180deg, rgba(65,70,143,1) 0%, rgba(65,70,143,0.8407738095238095) 100%);color:white;border-top-left-radius:10px;border-top-right-radius:10px;padding:20px;width:100%;display:inline-block;box-sizing:border-box;text-align:center}.streaming_media_info.svelte-96fn1x .song span.svelte-96fn1x{color:#873BBF;color:#26A9B7}.streaming_media_info.svelte-96fn1x .song.bigger.svelte-96fn1x{font-size:1.5em}@media only screen and (max-width: 640px){button.svelte-96fn1x{width:47px;font-size:8px;margin-right:2px}.volume.svelte-96fn1x{font-size:15px}#playlist.svelte-96fn1x{font-size:10px}} +:root{--player-ribbon-height:100px}a.svelte-96fn1x{color:white;text-decoration:none}a.svelte-96fn1x:hover{opacity:0.8}.error.svelte-96fn1x{color:var(--dmt-red)}.player_notice.svelte-96fn1x{float:left;clear:both}.player.svelte-96fn1x .touch_pressed.svelte-96fn1x{text-decoration:underline}.player.svelte-96fn1x .control.svelte-96fn1x{display:flex;align-items:center;margin-bottom:30px}.player.svelte-96fn1x .limit_info.svelte-96fn1x{display:flex;align-items:center;margin:30px 0}.search.svelte-96fn1x{padding:15px 20px;padding-left:10px;margin-left:10px}.search.svelte-96fn1x button.svelte-96fn1x{height:30px;width:60px;font-size:1.0em;margin:0;padding:0}.search.svelte-96fn1x button.hidden.svelte-96fn1x{display:none}.search.svelte-96fn1x button.action.svelte-96fn1x{background-color:#263B28;background-color:#5F7388;background-color:#37BB9B;color:white;color:#111}.search.svelte-96fn1x button.media_type.svelte-96fn1x{}.search.svelte-96fn1x button.selected.svelte-96fn1x{background-color:var(--dmt-navy)}.search.svelte-96fn1x button.clear.svelte-96fn1x{}.search.svelte-96fn1x button.svelte-96fn1x:hover{opacity:0.9;cursor:pointer}.search_input.svelte-96fn1x{width:421px;height:20px;font-size:1.1em;padding:4px 4px;border:0;background-color:#ddd;color:#333;border-radius:5px}.search_results.svelte-96fn1x{margin-top:10px;font-size:0.8em}.provider_title.svelte-96fn1x{margin-bottom:5px}.provider_error.svelte-96fn1x{clear:both;color:var(--dmt-red)}.results_info_bottom.svelte-96fn1x{clear:both;margin-top:5px;margin-bottom:10px}button.svelte-96fn1x{width:100px;height:60px;color:white;margin-right:10px;border:0;font-size:20px;border-radius:5px;background-color:#444}.player.nonRPi.svelte-96fn1x button.svelte-96fn1x{height:40px}button.svelte-96fn1x:active{opacity:0.9}.player.nonRPi.svelte-96fn1x button.svelte-96fn1x:hover{cursor:pointer;opacity:0.9}button.volume.svelte-96fn1x{color:#222;background-color:#66AEB7}button.play.svelte-96fn1x{background-color:#26A9B7}button.pause.svelte-96fn1x{background-color:#aaa;color:#222}.play.foreign.svelte-96fn1x{}.player.svelte-96fn1x{margin-top:14px;padding:0px 10px 0 20px;color:white}span.volume.svelte-96fn1x{font-weight:bold;color:#26A9B7;font-size:20px}#playlist.svelte-96fn1x{font-size:19px;margin-top:5px;padding:1px 15px;border-radius:20px;font-family:"Inconsolata", "Courier New", Courier, monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}#playlist.nonRPi.svelte-96fn1x{font-size:18px;line-height:1em}#playlist.svelte-96fn1x .marker.svelte-96fn1x{width:10px;float:left;color:var(--dmt-violet);color:var(--dmt-bright-cyan);font-size:1.3em}#playlist.svelte-96fn1x .marker.limit_marker.svelte-96fn1x{color:#B6E29E}#playlist.svelte-96fn1x ul.svelte-96fn1x{padding:0;margin:0}#playlist.svelte-96fn1x ul.svelte-96fn1x{display:inline-block}#playlist.svelte-96fn1x li.svelte-96fn1x{color:#ccc}#playlist.svelte-96fn1x .li_wrapper.svelte-96fn1x{padding:1px 0}#playlist.nonRPi.svelte-96fn1x .li_wrapper.svelte-96fn1x{padding:1px 0}#playlist.svelte-96fn1x li.album_title.svelte-96fn1x{color:var(--dmt-lighter-magenta)}#playlist.svelte-96fn1x li.album_title.svelte-96fn1x{padding:4px 0}#playlist.svelte-96fn1x li.svelte-96fn1x:hover{cursor:pointer}#playlist.svelte-96fn1x li.metadata_read.svelte-96fn1x{color:white}#playlist.svelte-96fn1x li.playing.svelte-96fn1x{font-weight:bold;color:var(--dmt-bright-cyan)}#playlist.svelte-96fn1x li.within_limit.svelte-96fn1x{color:#B6E29E}#playlist.svelte-96fn1x li.past.svelte-96fn1x{color:#aaa}#playlist.svelte-96fn1x li.error.svelte-96fn1x{color:var(--warning)}#playlist.svelte-96fn1x li.just_pasted.svelte-96fn1x,#playlist.svelte-96fn1x li.just_bumped.svelte-96fn1x{color:#AD91CF}#playlist.svelte-96fn1x li.just_pasted.within_limit.svelte-96fn1x,#playlist.svelte-96fn1x li.just_bumped.within_limit.svelte-96fn1x{font-weight:bold}#playlist.svelte-96fn1x li.selected.svelte-96fn1x{color:var(--dmt-orange)}#playlist.svelte-96fn1x li.within_limit.selected.svelte-96fn1x{font-style:italic}#playlist.svelte-96fn1x li.about_to_be_cut.svelte-96fn1x{color:#555E78}button.limit_active.svelte-96fn1x{background-color:#B6E29E;color:#222}button.time_limit_active.svelte-96fn1x{background-color:#66AEB7;color:#222}.track_limit.svelte-96fn1x{color:#B6E29E;margin-right:10px}.limit_reached.svelte-96fn1x{color:#B6E29E}.time_limit.svelte-96fn1x,.set_time_limit.svelte-96fn1x,.time_limit_reached.svelte-96fn1x{color:#66AEB7}.limit_reached.svelte-96fn1x,.time_limit_reached.svelte-96fn1x{margin:30px 0}.time_limit.svelte-96fn1x{margin-right:10px}.time_limit.grayed_out.svelte-96fn1x{color:#585858;color:#444}.track_limit.svelte-96fn1x .limit_num.svelte-96fn1x{font-weight:bold}.repeat_song_mark.svelte-96fn1x{background-color:#7287A3;color:white;border-radius:5px;padding:1px 0 3px 0}.repeat_active1.svelte-96fn1x{background-color:#7287A3}.repeat_active2.svelte-96fn1x{background-color:#89A0C2}.repeat_active3.svelte-96fn1x{background-color:#90A9D1}#playlist.svelte-96fn1x li .id.svelte-96fn1x{font-weight:bold;color:#26A9B7;font-family:"CutiveMono", "Courier New", Courier, monospace;padding-left:4px}#playlist.svelte-96fn1x .li_wrapper.svelte-96fn1x{border-left:2px solid #555;margin-left:20px}#playlist.svelte-96fn1x .duration.non_past.svelte-96fn1x{color:#777}#playlist.svelte-96fn1x .li_wrapper.darker.svelte-96fn1x{border-left:2px solid #aaa}.streaming_media_info.svelte-96fn1x{width:540px;clear:both}.streaming_media_info.faded.svelte-96fn1x{opacity:0.2}.streaming_media_info.svelte-96fn1x .song.svelte-96fn1x{background:linear-gradient(180deg, rgba(65,70,143,1) 0%, rgba(65,70,143,0.8407738095238095) 100%);color:white;border-top-left-radius:10px;border-top-right-radius:10px;padding:20px;width:100%;display:inline-block;box-sizing:border-box;text-align:center}.streaming_media_info.svelte-96fn1x .song span.svelte-96fn1x{color:#873BBF;color:#26A9B7}.streaming_media_info.svelte-96fn1x .song.bigger.svelte-96fn1x{font-size:1.5em}@media only screen and (max-width: 640px){button.svelte-96fn1x{width:47px;font-size:8px;margin-right:2px}.volume.svelte-96fn1x{font-size:15px}#playlist.svelte-96fn1x{font-size:10px}} #device.svelte-if31ux{font-size:15px;background-color:#222;padding-left:10px;max-height:100%;overflow:auto}#device.svelte-if31ux ul.svelte-if31ux{margin:0;padding:0}#device.svelte-if31ux pre.svelte-if31ux{font-family:"Inconsolata", "Courier New", Courier, monospace}button.svelte-if31ux{display:inline-block;margin:0 auto;background-color:#484E9F;border:0;color:black;font-size:1.0em;cursor:pointer;height:2em;color:white;border-radius:5px}button.close.svelte-if31ux{background-color:var(--dmt-violet)} -.media_info.svelte-oiqzh8{color:#777}.media_info.svelte-oiqzh8 .property.svelte-oiqzh8{color:black}.media_info.svelte-oiqzh8 .property.artist.svelte-oiqzh8{color:var(--dmt-violet);font-weight:bold}.media_info.svelte-oiqzh8 .property.song.svelte-oiqzh8{color:var(--dmt-navy);font-weight:bold}.media_info.svelte-oiqzh8 .property.warning.svelte-oiqzh8::after{color:var(--warning);content:" (can get slow > 5000)";font-size:0.8em}img.alien.svelte-oiqzh8{width:200px;filter:invert(0.30)}.speech-bubble.svelte-oiqzh8{position:relative;background:#ddd;border-radius:.4em;font-size:0.9em;color:black;padding:10px;margin-bottom:20px}.speech-bubble.svelte-oiqzh8:after{content:'';position:absolute;bottom:0;left:50%;width:0;height:0;border:24px solid transparent;border-top-color:#ddd;border-bottom:0;margin-left:-24px;margin-bottom:-24px} -#menu.svelte-1wgl8y8{text-align:center;margin-bottom:30px}.touch_pressed.svelte-1wgl8y8{text-decoration:underline}button.svelte-1wgl8y8{display:inline-block;margin:0 auto;background-color:#484E9F;border:0;color:black;font-size:1.0em;cursor:pointer;height:2em;color:white;border-radius:5px}#menu.nonRPi.svelte-1wgl8y8 button.svelte-1wgl8y8:hover{opacity:0.8}button.active.svelte-1wgl8y8{color:black;background-color:#40C9B3} +p.svelte-13jignu{width:100%}#help.svelte-13jignu{margin:20px 0 0 40px;font-size:1.0em;color:white;width:700px;text-align:justify} #device.svelte-ybcte6{position:absolute;left:0;top:0;display:flex;align-items:center;font-size:30px;padding-top:15px;padding-left:15px}#device.svelte-ybcte6 .error.svelte-ybcte6{color:#E03434;margin-right:10px}#device.svelte-ybcte6 h3#title.svelte-ybcte6{color:#228D97;padding:0;margin:0}#broken_connection.svelte-ybcte6{position:absolute;right:20px;top:0;color:#E03434;text-align:center;font-size:120px} #broken_connection.svelte-1lf904p{position:absolute;right:0;top:0;padding:20px;color:#E03434;text-align:center;font-size:120px}.options.svelte-1lf904p{display:flex}.options.svelte-1lf904p div.touch_pressed.svelte-1lf904p{text-decoration:underline}.options.svelte-1lf904p div.svelte-1lf904p{flex:1;padding:40px 30px;font-size:1.6em;text-align:center;color:white;cursor:pointer;opacity:0.7}span.dev.svelte-1lf904p{color:#999;font-size:0.8em}.selector.nonRPi.svelte-1lf904p .options div.svelte-1lf904p:hover{opacity:0.8}.options.svelte-1lf904p div.svelte-1lf904p:active{opacity:0.8}.options.svelte-1lf904p .player.svelte-1lf904p{background-color:#484E9F}.options.svelte-1lf904p .device.svelte-1lf904p{background-color:#4A7CA0;padding:20px 30px}.options.svelte-1lf904p .help.svelte-1lf904p{background-color:#56A367;background-color:#777;padding:20px 30px}.options.svelte-1lf904p .apps.svelte-1lf904p{background-color:#9E3B84;color:white;padding:20px 30px}.options.svelte-1lf904p .ambience.svelte-1lf904p{background-color:#53A457;background-color:#6D689F;padding:20px 10px}.options.svelte-1lf904p .clock.svelte-1lf904p{background-color:#76196C;background-color:#4A9AA1}.deviceInfo.svelte-1lf904p{background-color:#070D0B;opacity:0.7;border-bottom-left-radius:20px}.deviceInfo.svelte-1lf904p span.ap_mode.svelte-1lf904p{color:#DB2643;font-weight:bold}.deviceInfo.svelte-1lf904p .deviceName.svelte-1lf904p{padding:20px 20px;padding-bottom:10px;font-size:2.0em;text-align:center;color:white;cursor:default}.deviceInfo.svelte-1lf904p .deviceConnectivityStatus.svelte-1lf904p{padding:5px 5px;padding-bottom:10px;text-align:center;cursor:default}.deviceInfo.svelte-1lf904p .deviceName.local_connectivity_problem.svelte-1lf904p,.deviceInfo.svelte-1lf904p .deviceConnectivityStatus.local_connectivity_problem.svelte-1lf904p,.deviceInfo.svelte-1lf904p .deviceConnectivityStatus.local_connectivity_resumed.svelte-1lf904p{color:#FF7A2C}.deviceInfo.svelte-1lf904p .deviceName.connectivity_problem.svelte-1lf904p,.deviceInfo.svelte-1lf904p .deviceConnectivityStatus.connectivity_problem.svelte-1lf904p{color:#e34042}.deviceInfo.svelte-1lf904p .deviceName.connectivity_resumed.svelte-1lf904p,.deviceInfo.svelte-1lf904p .deviceConnectivityStatus.connectivity_resumed.svelte-1lf904p{color:var(--dmt-cool-green)}.deviceInfo.svelte-1lf904p .ip.svelte-1lf904p{padding-bottom:10px;text-align:center;cursor:default}.deviceInfo.svelte-1lf904p .ap_wifi_info.svelte-1lf904p{padding:10px}.deviceInfo.svelte-1lf904p .wifi_ap.svelte-1lf904p{margin-bottom:10px;font-size:0.7rem;text-align:center} .deviceInfo.svelte-1sb2bme{padding:15px 0;font-size:1.7em;color:white;background-color:#41468F;text-align:center}.deviceInfo.svelte-1sb2bme .dev.svelte-1sb2bme{color:#999;font-size:0.8em}.deviceInfo.svelte-1sb2bme .deviceConnectivityStatus.svelte-1sb2bme{padding:0px 5px;text-align:center;cursor:default;font-size:1.0rem}.deviceInfo.local_connectivity_problem.svelte-1sb2bme{background-color:#FF7A2C;color:black}.deviceInfo.connectivity_problem.svelte-1sb2bme{background-color:#e34042;color:black}.deviceName.connectivity_resumed.svelte-1sb2bme,.deviceConnectivityStatus.connectivity_resumed.svelte-1sb2bme{color:var(--dmt-cool-green)}.deviceInfo.svelte-1sb2bme span.ap_mode.svelte-1sb2bme{font-weight:bold}.deviceInfo.svelte-1sb2bme .ap_wifi_credentials.svelte-1sb2bme{margin-top:20px;padding:0 10px;font-size:0.7em}.deviceInfo.svelte-1sb2bme .wifi_ap.svelte-1sb2bme{margin-top:10px;font-size:0.7rem}.deviceInfo.svelte-1sb2bme .device_ip.svelte-1sb2bme{font-size:0.5em} -#top_icons.svelte-1ig0od5{z-index:10000;display:flex;flex-direction:column;position:absolute;right:0;top:0}#top_icons.svelte-1ig0od5 div.svelte-1ig0od5{padding-top:15px;cursor:pointer}#top_icons.svelte-1ig0od5 div img.svelte-1ig0od5{width:120px;padding:5px 20px}.escape.nonRPi.svelte-1ig0od5:hover{opacity:0.9}.escape.svelte-1ig0od5:active{opacity:0.6}#top_icons.touch_pressed.svelte-1ig0od5{display:none}.escape.touch_pressed.svelte-1ig0od5{display:none}@media only screen and (max-width: 640px){#top_icons.svelte-1ig0od5{display:none}} -#play_controls.svelte-g6kxch{font-size:50px;margin-top:25px;color:#26A9B7;padding-left:0px;color:white;opacity:0.7;background-color:#070D0B;border-top-left-radius:10px;border-bottom-left-radius:10px;display:flex;padding:10px 0}.volume.svelte-g6kxch{color:#26A9B7;width:200px;text-align:center;margin:0 auto}.volume_down.svelte-g6kxch{float:left}.volume_up.svelte-g6kxch{float:right}.volume.svelte-g6kxch{margin:0 5px}.pause.svelte-g6kxch{padding-left:20px;padding-right:20px}.volume.svelte-g6kxch a.svelte-g6kxch,.pause.svelte-g6kxch a.svelte-g6kxch{text-decoration:none;text-align:center;color:white;background-color:#070D0B}.volume.svelte-g6kxch a.svelte-g6kxch:hover,.pause.svelte-g6kxch a.svelte-g6kxch:hover{opacity:0.7}.pause.svelte-g6kxch a.svelte-g6kxch{color:#555} #notifications.svelte-2nzizy{margin-top:15px}#notifications.move_down.svelte-2nzizy{margin-top:75px}.notification.svelte-2nzizy{margin-top:10px;padding:20px 25px;color:black;font-size:20px;font-weight:bold;text-align:center;border-radius:10px;width:220px}.notification.svelte-2nzizy .title.svelte-2nzizy{font-size:0.8em;opacity:0.8;margin-bottom:3px}.notification.svelte-2nzizy .time.svelte-2nzizy{display:block;margin-top:2px;font-size:0.8em;opacity:0.6} -#ribbon.svelte-1mcdlju{height:calc(var(--player-ribbon-height) - 10px);display:flex;align-items:center}.section.svelte-1mcdlju{display:inline-block;text-align:center;padding-left:15px}.section.svelte-1mcdlju .title.svelte-1mcdlju{padding-bottom:4px;border-bottom:1px dotted #888;margin-bottom:7px}.section.svelte-1mcdlju .title.selected_entries.svelte-1mcdlju{color:#D1AFFF;color:var(--dmt-orange)}.options.svelte-1mcdlju{display:inline-flex;align-items:center}.section.missing_media.svelte-1mcdlju .option.svelte-1mcdlju{width:150px}.section.missing_media.svelte-1mcdlju .title.svelte-1mcdlju{color:var(--warning)}.option.svelte-1mcdlju{width:100px;height:40px;border-radius:10px;background-color:#333;display:flex;justify-content:center;align-items:center;margin-right:7px}.option.svelte-1mcdlju:last-child{margin-right:0}.option.deselect.svelte-1mcdlju{color:#9D82BD}.option.play_now.svelte-1mcdlju{color:#40EBB2}.option.set_next.svelte-1mcdlju{color:#8DD5DB}.option.remove.svelte-1mcdlju{color:var(--warning)}.option.svelte-1mcdlju:hover{cursor:pointer;opacity:0.8} #playinfo.svelte-u2ttvk{position:absolute;bottom:0px;width:100%}#playinfo.protect_visibility.svelte-u2ttvk{background-color:#222;opacity:0.8}.notes.svelte-u2ttvk{color:#26A9B7}.wrap.svelte-u2ttvk{display:flex;flex-direction:column;justify-content:center;height:50px}#current_song.svelte-u2ttvk{display:inline-block;margin:0 auto;font-size:30px;color:white;cursor:pointer;font-family:"Inconsolata", "Courier New", Courier, monospace}#playinfo.nonRPi.svelte-u2ttvk #current_song.svelte-u2ttvk:hover{color:#26A9B7}.spaced_time_remaining.svelte-u2ttvk{color:#aaa}.spaced_time_remaining.svelte-u2ttvk span.svelte-u2ttvk{color:white} -#ribbon.svelte-1o0739n{height:calc(var(--player-ribbon-height) - 10px);display:flex;align-items:center}.section.svelte-1o0739n{display:inline-block;text-align:center;padding-left:15px}.section.svelte-1o0739n .title.svelte-1o0739n{padding-bottom:4px;border-bottom:1px dotted #888;margin-bottom:7px}.section.svelte-1o0739n .title.media_select.svelte-1o0739n{color:#2FA9BC}.options.svelte-1o0739n{display:inline-flex;align-items:center}.option.svelte-1o0739n{width:100px;height:40px;border-radius:10px;background-color:#333;display:flex;justify-content:center;align-items:center;margin-right:7px}.option.svelte-1o0739n:last-child{margin-right:0}.option.close.svelte-1o0739n,.option.quit.svelte-1o0739n{color:#9D82BD}.option.svelte-1o0739n:hover{cursor:pointer;opacity:0.8} -#wifi_setup.svelte-145tmag{margin-top:10px;font-family:"Inconsolata", "Courier New", Courier, monospace;width:40%;float:left}#wifi_setup.nonRPi.svelte-145tmag button.svelte-145tmag:hover{opacity:0.8}.touch_pressed.svelte-145tmag{text-decoration:underline}button.svelte-145tmag{display:inline-block;margin:0 auto;background-color:#484E9F;border:0;color:black;font-size:1.0em;cursor:pointer;height:2em;color:white;border-radius:5px}button.warning.svelte-145tmag,button.more_warning.svelte-145tmag{padding:0 15px}button.warning.svelte-145tmag{background-color:#E12154}button.more_warning.svelte-145tmag{background-color:#9D008E} +#play_controls.svelte-g6kxch{font-size:50px;margin-top:25px;color:#26A9B7;padding-left:0px;color:white;opacity:0.7;background-color:#070D0B;border-top-left-radius:10px;border-bottom-left-radius:10px;display:flex;padding:10px 0}.volume.svelte-g6kxch{color:#26A9B7;width:200px;text-align:center;margin:0 auto}.volume_down.svelte-g6kxch{float:left}.volume_up.svelte-g6kxch{float:right}.volume.svelte-g6kxch{margin:0 5px}.pause.svelte-g6kxch{padding-left:20px;padding-right:20px}.volume.svelte-g6kxch a.svelte-g6kxch,.pause.svelte-g6kxch a.svelte-g6kxch{text-decoration:none;text-align:center;color:white;background-color:#070D0B}.volume.svelte-g6kxch a.svelte-g6kxch:hover,.pause.svelte-g6kxch a.svelte-g6kxch:hover{opacity:0.7}.pause.svelte-g6kxch a.svelte-g6kxch{color:#555} +#top_icons.svelte-1ig0od5{z-index:10000;display:flex;flex-direction:column;position:absolute;right:0;top:0}#top_icons.svelte-1ig0od5 div.svelte-1ig0od5{padding-top:15px;cursor:pointer}#top_icons.svelte-1ig0od5 div img.svelte-1ig0od5{width:120px;padding:5px 20px}.escape.nonRPi.svelte-1ig0od5:hover{opacity:0.9}.escape.svelte-1ig0od5:active{opacity:0.6}#top_icons.touch_pressed.svelte-1ig0od5{display:none}.escape.touch_pressed.svelte-1ig0od5{display:none}@media only screen and (max-width: 640px){#top_icons.svelte-1ig0od5{display:none}} +.media_info.svelte-oiqzh8{color:#777}.media_info.svelte-oiqzh8 .property.svelte-oiqzh8{color:black}.media_info.svelte-oiqzh8 .property.artist.svelte-oiqzh8{color:var(--dmt-violet);font-weight:bold}.media_info.svelte-oiqzh8 .property.song.svelte-oiqzh8{color:var(--dmt-navy);font-weight:bold}.media_info.svelte-oiqzh8 .property.warning.svelte-oiqzh8{}.media_info.svelte-oiqzh8 .property.warning.svelte-oiqzh8::after{color:var(--warning);content:" (can get slow > 5000)";font-size:0.8em}img.alien.svelte-oiqzh8{width:200px;filter:invert(0.30)}.speech-bubble.svelte-oiqzh8{position:relative;background:#ddd;border-radius:.4em;font-size:0.9em;color:black;padding:10px;margin-bottom:20px}.speech-bubble.svelte-oiqzh8:after{content:'';position:absolute;bottom:0;left:50%;width:0;height:0;border:24px solid transparent;border-top-color:#ddd;border-bottom:0;margin-left:-24px;margin-bottom:-24px} +#menu.svelte-1wgl8y8{text-align:center;margin-bottom:30px}.touch_pressed.svelte-1wgl8y8{text-decoration:underline}button.svelte-1wgl8y8{display:inline-block;margin:0 auto;background-color:#484E9F;border:0;color:black;font-size:1.0em;cursor:pointer;height:2em;color:white;border-radius:5px}#menu.nonRPi.svelte-1wgl8y8 button.svelte-1wgl8y8:hover{opacity:0.8}button.active.svelte-1wgl8y8{color:black;background-color:#40C9B3} +:root{--normal-timeposition-height:30px;--slim-timeposition-height:3px}#timeposition.svelte-bmnwjd{height:var(--normal-timeposition-height);background-color:#333;display:flex;align-items:center;position:relative;width:525px;font-weight:bold;padding:0 7px;margin-bottom:15px;border-bottom-left-radius:10px;border-bottom-right-radius:10px}#timeposition.bottom_slim_wide.svelte-bmnwjd{height:var(--slim-timeposition-height);background-color:transparent;width:100%;padding:0;margin:0;position:absolute;left:0;bottom:0}#timeposition.svelte-bmnwjd .progress.svelte-bmnwjd{height:var(--normal-timeposition-height);width:0%;position:absolute;left:0px;top:0px;border-bottom-left-radius:10px;border-bottom-right-radius:10px}#timeposition.bottom_slim_wide.svelte-bmnwjd .progress.svelte-bmnwjd{opacity:0.2}#timeposition.bottom_slim_wide.svelte-bmnwjd .progress.svelte-bmnwjd{height:var(--slim-timeposition-height)}#timeposition.bottom_slim_wide.svelte-bmnwjd .time_current.svelte-bmnwjd,#timeposition.bottom_slim_wide.svelte-bmnwjd .time_total.svelte-bmnwjd,#timeposition.bottom_slim_wide.svelte-bmnwjd .streaming_notice.svelte-bmnwjd{display:none}#timeposition.svelte-bmnwjd .time_current.svelte-bmnwjd{z-index:10000;pointer-events:none;color:#626262}#timeposition.svelte-bmnwjd .time_total.svelte-bmnwjd{z-index:10000;margin-left:auto;order:2;pointer-events:none}#timeposition.bottom_slim_times_visible.svelte-bmnwjd .time_current.svelte-bmnwjd,#timeposition.bottom_slim_times_visible.svelte-bmnwjd .time_total.svelte-bmnwjd{display:block;font-size:1.4em;margin-bottom:48px}#timeposition.bottom_slim_times_visible.svelte-bmnwjd .time_current.svelte-bmnwjd{margin-left:10px}#timeposition.bottom_slim_times_visible.svelte-bmnwjd .time_total.svelte-bmnwjd{margin-right:10px}.streaming_notice.svelte-bmnwjd{color:#26A9B7}.streaming_notice.svelte-bmnwjd span.svelte-bmnwjd{margin-left:10px} +#ribbon.svelte-1o0739n{height:calc(var(--player-ribbon-height) - 10px);display:flex;align-items:center}.section.svelte-1o0739n{display:inline-block;text-align:center;padding-left:15px}.section.svelte-1o0739n .title.svelte-1o0739n{padding-bottom:4px;border-bottom:1px dotted #888;margin-bottom:7px}.section.svelte-1o0739n .title.media_select.svelte-1o0739n{color:#2FA9BC}.options.svelte-1o0739n{display:inline-flex;align-items:center}.option.svelte-1o0739n{width:100px;height:40px;border-radius:10px;background-color:#333;display:flex;justify-content:center;align-items:center;margin-right:7px}.option.svelte-1o0739n:last-child{margin-right:0}.option.close.svelte-1o0739n,.option.quit.svelte-1o0739n{color:#9D82BD}.option.similar.svelte-1o0739n{}.option.svelte-1o0739n:hover{cursor:pointer;opacity:0.8} +#ribbon.svelte-1mcdlju{height:calc(var(--player-ribbon-height) - 10px);display:flex;align-items:center}.section.svelte-1mcdlju{display:inline-block;text-align:center;padding-left:15px}.section.svelte-1mcdlju .title.svelte-1mcdlju{padding-bottom:4px;border-bottom:1px dotted #888;margin-bottom:7px}.section.svelte-1mcdlju .title.selected_entries.svelte-1mcdlju{color:#D1AFFF;color:var(--dmt-orange)}.options.svelte-1mcdlju{display:inline-flex;align-items:center}.section.missing_media.svelte-1mcdlju .option.svelte-1mcdlju{width:150px}.section.missing_media.svelte-1mcdlju .title.svelte-1mcdlju{color:var(--warning)}.option.svelte-1mcdlju{width:100px;height:40px;border-radius:10px;background-color:#333;display:flex;justify-content:center;align-items:center;margin-right:7px}.option.svelte-1mcdlju:last-child{margin-right:0}.option.deselect.svelte-1mcdlju{color:#9D82BD}.option.play_now.svelte-1mcdlju{color:#40EBB2}.option.set_next.svelte-1mcdlju{color:#8DD5DB}.option.remove.svelte-1mcdlju{color:var(--warning)}.option.svelte-1mcdlju:hover{cursor:pointer;opacity:0.8} #sensors_json_view.svelte-73m1e0 pre.svelte-73m1e0{font-family:"Inconsolata", "Courier New", Courier, monospace;width:30%;float:left}#sensors.svelte-73m1e0{margin-top:10px;font-family:"Inconsolata", "Courier New", Courier, monospace;width:40%;float:left}#sensors.svelte-73m1e0 h2.svelte-73m1e0{color:var(--dmt-violet)}#sensors.svelte-73m1e0 h3.svelte-73m1e0{color:var(--dmt-cyan)}.sensor_info.svelte-73m1e0 span.error.svelte-73m1e0{color:var(--dmt-red)}.sensor_info.svelte-73m1e0 span.svelte-73m1e0{color:var(--dmt-vibrant-green)} -#environment_wrapper.svelte-w874ux{width:100%}.title.svelte-w874ux{width:100%;margin-top:10px;padding-bottom:10px;color:#abfff6;text-align:center}#environment.svelte-w874ux{display:flex;justify-content:center;opacity:0.8}#temp.svelte-w874ux{font-size:3em;height:62px;padding:5px 20px 0px 20px;border-top-left-radius:20px;border-bottom-left-radius:20px}#environment_wrapper.big.svelte-w874ux #temp.svelte-w874ux,#environment_wrapper.big.svelte-w874ux #humidity.svelte-w874ux{height:125px;font-size:6.5em}#humidity.svelte-w874ux{color:#ddd;font-size:3em;height:62px;padding:5px 20px 0px 20px;background-color:#444;border-top-right-radius:20px;border-bottom-right-radius:20px}#environment.svelte-w874ux .direction.svelte-w874ux{color:#777} +#wifi_setup.svelte-145tmag{margin-top:10px;font-family:"Inconsolata", "Courier New", Courier, monospace;width:40%;float:left}#wifi_setup.nonRPi.svelte-145tmag button.svelte-145tmag:hover{opacity:0.8}.touch_pressed.svelte-145tmag{text-decoration:underline}button.svelte-145tmag{display:inline-block;margin:0 auto;background-color:#484E9F;border:0;color:black;font-size:1.0em;cursor:pointer;height:2em;color:white;border-radius:5px}button.warning.svelte-145tmag,button.more_warning.svelte-145tmag{padding:0 15px}button.warning.svelte-145tmag{background-color:#E12154}button.more_warning.svelte-145tmag{background-color:#9D008E} #sunrise.svelte-1gwsqnl,#sunset.svelte-1gwsqnl{text-align:center;color:white;font-size:30px;height:50px;display:flex;flex-direction:column;justify-content:center}#sunrise.svelte-1gwsqnl{position:absolute;padding:0 15px;left:0;bottom:0}#sunrise.protect_visibility.svelte-1gwsqnl,#sunset.protect_visibility.svelte-1gwsqnl{background-color:#222;opacity:0.8}#sunrise.protect_visibility.svelte-1gwsqnl{border-top-right-radius:20px}#sunset.protect_visibility.svelte-1gwsqnl{border-top-left-radius:20px}#sunrise.svelte-1gwsqnl .inner.svelte-1gwsqnl{padding-top:2px}#sunrise.svelte-1gwsqnl span.svelte-1gwsqnl{padding-left:5px}#sunset.svelte-1gwsqnl{position:absolute;padding:0 15px;right:0;bottom:0;color:#dc8430}#sunset.svelte-1gwsqnl .inner.svelte-1gwsqnl{padding-top:10px}#sunrise.svelte-1gwsqnl img.svelte-1gwsqnl{height:35px}#sunset.svelte-1gwsqnl img.svelte-1gwsqnl{height:30px}#sunset.svelte-1gwsqnl span.svelte-1gwsqnl{padding-left:5px} -:root{--normal-timeposition-height:30px;--slim-timeposition-height:3px}#timeposition.svelte-bmnwjd{height:var(--normal-timeposition-height);background-color:#333;display:flex;align-items:center;position:relative;width:525px;font-weight:bold;padding:0 7px;margin-bottom:15px;border-bottom-left-radius:10px;border-bottom-right-radius:10px}#timeposition.bottom_slim_wide.svelte-bmnwjd{height:var(--slim-timeposition-height);background-color:transparent;width:100%;padding:0;margin:0;position:absolute;left:0;bottom:0}#timeposition.svelte-bmnwjd .progress.svelte-bmnwjd{height:var(--normal-timeposition-height);width:0%;position:absolute;left:0px;top:0px;border-bottom-left-radius:10px;border-bottom-right-radius:10px}#timeposition.bottom_slim_wide.svelte-bmnwjd .progress.svelte-bmnwjd{opacity:0.2}#timeposition.bottom_slim_wide.svelte-bmnwjd .progress.svelte-bmnwjd{height:var(--slim-timeposition-height)}#timeposition.bottom_slim_wide.svelte-bmnwjd .time_current.svelte-bmnwjd,#timeposition.bottom_slim_wide.svelte-bmnwjd .time_total.svelte-bmnwjd,#timeposition.bottom_slim_wide.svelte-bmnwjd .streaming_notice.svelte-bmnwjd{display:none}#timeposition.svelte-bmnwjd .time_current.svelte-bmnwjd{z-index:10000;pointer-events:none;color:#626262}#timeposition.svelte-bmnwjd .time_total.svelte-bmnwjd{z-index:10000;margin-left:auto;order:2;pointer-events:none}#timeposition.bottom_slim_times_visible.svelte-bmnwjd .time_current.svelte-bmnwjd,#timeposition.bottom_slim_times_visible.svelte-bmnwjd .time_total.svelte-bmnwjd{display:block;font-size:1.4em;margin-bottom:48px}#timeposition.bottom_slim_times_visible.svelte-bmnwjd .time_current.svelte-bmnwjd{margin-left:10px}#timeposition.bottom_slim_times_visible.svelte-bmnwjd .time_total.svelte-bmnwjd{margin-right:10px}.streaming_notice.svelte-bmnwjd{color:#26A9B7}.streaming_notice.svelte-bmnwjd span.svelte-bmnwjd{margin-left:10px} +#clock.svelte-9zktqa{color:white;text-align:center;padding-top:10px;padding-bottom:10px}#time.svelte-9zktqa{font-size:11em}#date.svelte-9zktqa{margin-top:15px;font-size:5em;color:white}#date.svelte-9zktqa span.svelte-9zktqa{color:#abfff6}.disconnected.svelte-9zktqa{color:white;display:inline-block;padding:0 10px;border-radius:5px;background-color:#e34042}#date.svelte-9zktqa div.disconnected_explain.svelte-9zktqa{font-size:0.4em} +#environment_wrapper.svelte-w874ux{width:100%}.title.svelte-w874ux{width:100%;margin-top:10px;padding-bottom:10px;color:#abfff6;text-align:center}#environment.svelte-w874ux{display:flex;justify-content:center;opacity:0.8}#temp.svelte-w874ux{font-size:3em;height:62px;padding:5px 20px 0px 20px;border-top-left-radius:20px;border-bottom-left-radius:20px}#environment_wrapper.big.svelte-w874ux #temp.svelte-w874ux,#environment_wrapper.big.svelte-w874ux #humidity.svelte-w874ux{height:125px;font-size:6.5em}#humidity.svelte-w874ux{color:#ddd;font-size:3em;height:62px;padding:5px 20px 0px 20px;background-color:#444;border-top-right-radius:20px;border-bottom-right-radius:20px}#environment.svelte-w874ux .direction.svelte-w874ux{color:#777} #peerlist.svelte-1pma8zx{margin-top:20px;font-size:1.0em;opacity:0.8;background-color:#070D0B;border-top-left-radius:10px;border-bottom-left-radius:10px;padding:5px 10px}.peer.svelte-1pma8zx{text-align:left;margin:0 auto;color:#777}.peer.ready.svelte-1pma8zx{color:white}.peer.svelte-1pma8zx .dmt_version.svelte-1pma8zx{font-size:0.8em;color:var(--dmt-bright-cyan)}.ok.svelte-1pma8zx,.cross.svelte-1pma8zx{width:20px;text-align:center;display:inline-block}.ok.svelte-1pma8zx{display:none;color:var(--dmt-cool-green)}.peer.ready.svelte-1pma8zx .ok.svelte-1pma8zx{display:inline-block}.peer.ready.svelte-1pma8zx .cross.svelte-1pma8zx{display:none} #iot_actions_wrapper.svelte-10pk42a{margin-top:50px;margin-left:50px}.action.svelte-10pk42a{cursor:pointer;display:flex;justify-content:center;background-color:#444;padding:10px;margin-bottom:10px;border-radius:5px;font-size:1.2em;width:100px}.action.svelte-10pk42a:hover{background-color:#555} :root{--clockface:#40469E;--clock-pointers:#2DB6C2;--clock-seconds-pointer:#333;--clockface:#2DB6C2;--clock-marks:#2A262A;--clock-marks:#032518;--clock-pointers:#032518;--clock-seconds-pointer:#777}svg.svelte-mdkkpl{width:100%;height:100%;opacity:0.9}.clock-face.svelte-mdkkpl{stroke:var(--clockface);fill:var(--clockface)}.minor.svelte-mdkkpl{display:none;stroke:var(--clock-marks);stroke-width:1}.major.svelte-mdkkpl{stroke:var(--clock-marks);stroke-width:2}.hour.svelte-mdkkpl{stroke:var(--clock-pointers);stroke-width:3}.minute.svelte-mdkkpl{stroke:var(--clock-pointers);stroke-width:2}.second.svelte-mdkkpl,.second-counterweight.svelte-mdkkpl{stroke:var(--clock-seconds-pointer)}.second-counterweight.svelte-mdkkpl{stroke-width:3} -#clock.svelte-9zktqa{color:white;text-align:center;padding-top:10px;padding-bottom:10px}#time.svelte-9zktqa{font-size:11em}#date.svelte-9zktqa{margin-top:15px;font-size:5em;color:white}#date.svelte-9zktqa span.svelte-9zktqa{color:#abfff6}.disconnected.svelte-9zktqa{color:white;display:inline-block;padding:0 10px;border-radius:5px;background-color:#e34042}#date.svelte-9zktqa div.disconnected_explain.svelte-9zktqa{font-size:0.4em} .ap_wifi_info.svelte-1v5x43o{text-align:left}.ap_wifi_info.svelte-1v5x43o img.wifi_icon.svelte-1v5x43o{width:40px;float:left;margin-right:10px;filter:invert(1)} .nearby_handy_links.svelte-zncg7e{padding:10px;overflow:auto}button.svelte-zncg7e{padding:5px;border:1px solid black;border-radius:5px;float:left;margin-right:5px;height:30px;background-color:#BFC1C7;margin-top:5px}button.svelte-zncg7e:active{opacity:0.9}button.home.svelte-zncg7e{background-color:#90A9D1}.nearby_handy_links.nonRPi.svelte-zncg7e button.svelte-zncg7e:hover{cursor:pointer;opacity:0.9} -#calendar_wrapper.svelte-17pmi5h{text-align:center}#calendar.svelte-17pmi5h{color:white;color:#abfff6;text-align:center;margin:0 auto;border-radius:15px;display:inline-block;font-size:1.2em;margin-top:10px}#calendar_wrapper.main.svelte-17pmi5h #calendar.svelte-17pmi5h{font-size:2.5em;margin-top:20px;padding:10px 25px 13px 25px}#calendar.svelte-17pmi5h span.svelte-17pmi5h{color:#ddd} +#calendar_wrapper.svelte-17pmi5h{text-align:center}#calendar.svelte-17pmi5h{color:white;color:#abfff6;text-align:center;margin:0 auto;border-radius:15px;display:inline-block;font-size:1.2em;margin-top:10px}#calendar_wrapper.main.svelte-17pmi5h #calendar.svelte-17pmi5h{font-size:2.5em;margin-top:20px;padding:10px 25px 13px 25px}#calendar.svelte-17pmi5h div.svelte-17pmi5h{}#calendar.svelte-17pmi5h span.svelte-17pmi5h{color:#ddd} /*# sourceMappingURL=bundle.css.map */ \ No newline at end of file diff --git a/apps/gui/frontend/+app/public/bundle.css.map b/apps/gui/frontend/+app/public/bundle.css.map index 6ba23019e..d6127b9d3 100644 --- a/apps/gui/frontend/+app/public/bundle.css.map +++ b/apps/gui/frontend/+app/public/bundle.css.map @@ -5,36 +5,36 @@ "../src/App.html", "../src/InfoBar.html", "../src/ImagePreload.html", - "../../apps/src/AppList.html", "../../navigation/src/Sidebar.html", - "../../dynamics/src/NearbyDevices.html", + "../../apps/src/AppList.html", "../../navigation/src/ActionBar.html", + "../../home/src/Home.html", + "../../dynamics/src/NearbyDevices.html", "../../clock/src/Clock.html", "../../ambience/src/Ambience.html", - "../../home/src/Home.html", - "../../help/src/Help.html", "../../player/src/Player.html", "../../device/src/Device.html", - "../../player/src/SidebarBottom.html", - "../../device/src/SidebarMenu.html", + "../../help/src/Help.html", "../../navigation/src/ConnectionIndicator.html", "../../navigation/src/TileBar.html", "../../navigation/src/DeviceInfo.html", - "../../navigation/src/Escape.html", - "../../player/src/VolumeWidget.html", "../../dynamics/src/Notifications.html", - "../../player/src/RibbonCurrentSelectionAndMissing.html", "../../player/src/PlayInfo.html", + "../../player/src/VolumeWidget.html", + "../../navigation/src/Escape.html", + "../../player/src/SidebarBottom.html", + "../../device/src/SidebarMenu.html", + "../../player/src/MediaTimePosition.html", "../../player/src/RibbonTop.html", - "../../device/src/WifiSetup.html", + "../../player/src/RibbonCurrentSelectionAndMissing.html", "../../device/src/NearbySensors.html", - "../../widgets/src/TemperatureReading.html", + "../../device/src/WifiSetup.html", "../../widgets/src/Suntime.html", - "../../player/src/MediaTimePosition.html", + "../../widgets/src/TimeAndDate.html", + "../../widgets/src/TemperatureReading.html", "../../widgets/src/PeerList.html", "../../widgets/src/IotActions.html", "../../widgets/src/AnalogClock.html", - "../../widgets/src/TimeAndDate.html", "../../widgets/src/ApWifiCredentials.html", "../../navigation/src/NearbyHandyLinks.html", "../../widgets/src/Calendar.html" @@ -43,40 +43,40 @@ "\n {selectedDeviceName ? `${selectedDeviceName} - ${$view}` : 'DMT'}\n\n\n
\n\n \n\n \n\n \n
\n \n
\n
\n \n
\n
\n\n {#if errors && errors.length > 0}\n
\n {#each errors.slice(0, 3) as error}\n
\n
\n Error at {error.time}\n {error.msg}\n
\n\n {#if error.stacktrace}\n {error.stacktrace}\n {/if}\n
\n {/each}\n
\n {/if}\n\n {#if $view == 'home'}\n\n {#if $device}\n \n {/if}\n\n {:else}\n\n
\n {#if $view == 'player'}\n \n {:elseif $view == 'clock'}\n \n {:elseif $view == 'apps'}\n \n {:elseif $view == 'ambience'}\n \n {:elseif $view == 'help'}\n \n {:elseif $view == 'device'}\n \n {/if}\n
\n\n {/if}\n\n {#if $thisDeviceState && $thisDeviceState.device && $thisDeviceState.device.showFrontendLog}\n \n {/if}\n\n \n {#if wallpapers}\n {#each wallpapers as wallpaper}\n {#if wallpaper}\n \n {/if}\n {/each}\n {/if}\n\n
\n\n\n\n\n", "
\n

{$thisDeviceState && $thisDeviceState.device ? $thisDeviceState.device.deviceName : \"\"} — frontend debug log

\n\n {#if frontendLog}\n {#each frontendLog as line}\n
\n {line}\n
\n {/each}\n {/if}\n
\n\n\n\n\n", "
\n {path}\n
\n\n\n\n\n", + "{#if $device && viewDef && viewDef.sidebar}\n\n {#if viewDef.sidebar != 'top-only' && viewDef.sidebar != 'top-only-transparent'}\n
\n {/if}\n\n
\n \n
\n\n
\n
\n\n \n\n
\n\n \n\n \n {#if $thisDeviceState && $thisDeviceState.device && (['turbine', 'tablica', 'andreja', 'epanel', 'eclipse'].includes($thisDeviceState.device.deviceName))}\n\n {#if $thisDeviceState && $thisDeviceState.device && $thisDeviceState.device.network == 'zaboric'}\n
\n

Rolete

\n \n \n
\n \n \n
\n {/if}\n\n {#if $nearbyDevices && $nearbyDevices.length > 0 && $nearbyDevices.find(({ deviceName }) => ['andreja', 'eclipse'].includes(deviceName))} \n
\n

Ugasni računalnik

\n\n {#if $nearbyDevices.find(({ deviceName }) => deviceName == 'eclipse')}\n \n {/if}\n\n {#if $nearbyDevices.find(({ deviceName }) => deviceName == 'andreja')}\n \n {/if}\n
\n {/if}\n\n {#if $nearbyDevices && $nearbyDevices.length > 0 && $nearbyDevices.find(({ deviceName }) => deviceName == 'otroska')} \n
\n

Otroška soba

\n \n
\n {/if}\n\n {/if}\n\n
\n \n
\n\n {#if $connected && environment && (!$guiNotifications || ($guiNotifications && $guiNotifications.length == 0))}\n
\n {#each environment as tempData}\n \n {/each}\n
\n {/if}\n\n
\n\n{:else}\n\n \n\n
\n\n
\n \n
\n\n {#if $connected && environment && (!$guiNotifications || ($guiNotifications && $guiNotifications.length <= 5))}\n
\n {#each environment.slice(1) as tempData}\n \n {/each}\n
\n {/if}\n\n
\n\n{/if}\n\n\n\n\n", "{#if $connected}\n\n
\n\n{/if}\n\n\n\n\n", - "{#if $device && viewDef && viewDef.sidebar}\n\n {#if viewDef.sidebar != 'top-only' && viewDef.sidebar != 'top-only-transparent'}\n
\n {/if}\n\n
\n \n
\n\n
\n
\n\n \n\n
\n\n \n\n \n {#if $thisDeviceState && $thisDeviceState.device && (['turbine', 'tablica', 'andreja', 'epanel', 'eclipse'].includes($thisDeviceState.device.deviceName))}\n\n {#if $thisDeviceState && $thisDeviceState.device && $thisDeviceState.device.network == 'zaboric'}\n
\n

Rolete

\n \n \n
\n \n \n
\n {/if}\n\n {#if $nearbyDevices && $nearbyDevices.length > 0 && $nearbyDevices.find(({ deviceName }) => ['andreja', 'eclipse'].includes(deviceName))} \n
\n

Ugasni računalnik

\n\n {#if $nearbyDevices.find(({ deviceName }) => deviceName == 'eclipse')}\n \n {/if}\n\n {#if $nearbyDevices.find(({ deviceName }) => deviceName == 'andreja')}\n \n {/if}\n
\n {/if}\n\n {#if $nearbyDevices && $nearbyDevices.length > 0 && $nearbyDevices.find(({ deviceName }) => deviceName == 'otroska')} \n
\n

Otroška soba

\n \n
\n {/if}\n\n {/if}\n\n
\n \n
\n\n {#if $connected && environment && (!$guiNotifications || ($guiNotifications && $guiNotifications.length == 0))}\n
\n {#each environment as tempData}\n \n {/each}\n
\n {/if}\n\n
\n\n{:else}\n\n \n\n
\n\n
\n \n
\n\n {#if $connected && environment && (!$guiNotifications || ($guiNotifications && $guiNotifications.length <= 5))}\n
\n {#each environment.slice(1) as tempData}\n \n {/each}\n
\n {/if}\n\n
\n\n{/if}\n\n\n\n\n", - "\n\n{#if loaded && $nearbyDevicesMenuVisible && viewDef && viewDef.deviceSelector != 'false'}\n\n \n\n \n\n {#if !disableDeviceSelector} \n\n {#if $nearbyDevices && $nearbyDevices.length > 0}\n
\n {#each $nearbyDevices.filter(d => d.thisDevice || d.isRPi).sort((a, b) => a.deviceName < b.deviceName ? -1 : (a.deviceName > b.deviceName ? 1 : 0)) as device}\n
\n\n {#if device.hasErrors}!{/if}{device.deviceName}\n\n {device.playing ? (device.mediaType == 'video' ? ' ▶' : ' ♫' ) : '' }\n\n \n {#if device.ip}\n {device.ip}\n {/if}\n \n
\n {/each}\n
\n {nearbyDevicesCount} devices\n
\n
\n {/if}\n\n {/if}\n\n{/if}\n\n
\n\n
\n\n \n\n {#if homebaseImgInline}\n \"deviceSelector\"\n {/if}\n\n {#if tunnelingImgInline}\n \"deviceSelector\"\n {/if}\n\n {#if homebaseImgInline}\n \"switchToThisDevice\"\n {/if}\n\n
\n\n
\n\n\n\n\n", "\n\n{#if loaded}\n\n \n\n {#if $connected}\n\n {#if $view == 'home'}\n
\n \n \n \n \n
\n {:else}\n \n {/if}\n\n {/if}\n\n{/if}\n\n\n\n\n", + "{#if loaded}\n\n
\n \n
\n\n {#if $connected && $device}\n\n {#if $device.serverMode}\n
\n \n
\n {:elseif environment && environment.length > 0}\n\n
\n \n
\n\n {/if}\n\n {#if $player}\n \n {/if}\n\n \n\n {/if}\n\n{/if}\n\n\n\n\n", + "\n\n{#if loaded && $nearbyDevicesMenuVisible && viewDef && viewDef.deviceSelector != 'false'}\n\n \n\n \n\n {#if !disableDeviceSelector} \n\n {#if $nearbyDevices && $nearbyDevices.length > 0}\n
\n {#each $nearbyDevices.filter(d => d.thisDevice || d.isRPi).sort((a, b) => a.deviceName < b.deviceName ? -1 : (a.deviceName > b.deviceName ? 1 : 0)) as device}\n
\n\n {#if device.hasErrors}!{/if}{device.deviceName}\n\n {device.playing ? (device.mediaType == 'video' ? ' ▶' : ' ♫' ) : '' }\n\n \n {#if device.ip}\n {device.ip}\n {/if}\n \n
\n {/each}\n
\n {nearbyDevicesCount} devices\n
\n
\n {/if}\n\n {/if}\n\n{/if}\n\n
\n\n
\n\n \n\n {#if homebaseImgInline}\n \"deviceSelector\"\n {/if}\n\n {#if tunnelingImgInline}\n \"deviceSelector\"\n {/if}\n\n {#if homebaseImgInline}\n \"switchToThisDevice\"\n {/if}\n\n
\n\n
\n\n\n\n\n", "{#if loaded}\n\n {#if $connected}\n\n
\n
\n \n
\n
\n\n \n\n {/if}\n\n{/if}\n\n\n\n\n", "{#if $connected}\n\n
\n\n \n\n
\n\n{/if}\n\n\n\n\n", - "{#if loaded}\n\n
\n \n
\n\n {#if $connected && $device}\n\n {#if $device.serverMode}\n
\n \n
\n {:elseif environment && environment.length > 0}\n\n
\n \n
\n\n {/if}\n\n {#if $player}\n \n {/if}\n\n \n\n {/if}\n\n{/if}\n\n\n\n\n", - "\n\n
\n\n \n\n {#if doc == 'a'}\n

\n Please visit uniqpath.com to learn more.\n

\n\n \n\n \n {/if}\n\n \n\n \n\n \n\n \n\n
\n\n\n\n\n", "\n\n{#if loaded && $connected && $device}\n\n {#if !atRPi}\n
\n \n\n \n \n\n \n \n \n\n {#if searchQuery && searchQuery.trim()}\n \n {/if}\n\n {#if $searchResults && searchQuery && searchQuery.trim()}\n
\n {#each $searchResults as providerResponse}\n
\n {@html formatProviderMeta(providerResponse)}\n
\n\n {#if providerResponse.error}\n
\n ⚠️ Error: {providerResponse.error}\n
\n {:else}\n {#each providerResponse.results as { filePathANSI }}\n \n
{#each parseAnsi(filePathANSI).spans as span}{span.text}{/each}
\n {/each}\n\n
\n {@html formatProviderMetaBottom(providerResponse)}\n
\n {/if}\n {/each}\n
\n {/if}\n
\n {/if}\n\n {#if $device.serverMode}\n
\n

There is no player available in serverMode

\n
\n {:elseif $player}\n\n {#if !$player.error}\n\n
\n
\n\n {#if $player.isStream || ($playlist && $playlist.length > 0)}\n {#if $player.paused}\n {#if homebase}\n \n {:else}\n \n \n {/if}\n {:else}\n \n {/if}\n {/if}\n\n {#if !$player.isStream && $playlist && $playlist.length > 0}\n \n \n \n\n \n {/if}\n\n {#if $player.isStream}\n \n \n {/if}\n\n \n \n \n {#if homebase}\n {$player.volume}\n {:else}\n \n {$player.volume}\n {/if}\n
\n\n \n {#if !$player.isStream && $player.limit}\n
\n Stop after {$player.limit == 1 ? 'current' : $player.limit} {$player.limit == 1 ? 'track' : 'tracks'} ■ REMOVE LIMITSET TIME LIMIT\n
\n {:elseif $player.timeLimit}\n
\n Stopping in {timeLimit}\n ■ REMOVE LIMIT\n ■ ADD MORE TIME\n
\n {/if}\n\n {#if $player.limitReached}\n
\n Paused because limit was reached.\n
\n {/if}\n\n {#if $player.timeLimitReached}\n
\n Paused because time limit was reached.\n
\n {/if}\n\n \n\n {#if !$player.isStream}\n\n {#if !$playlist || $playlist.length == 0}\n
\n

Playlist is empty

\n
\n {/if}\n\n {/if}\n\n \n\n {#if $player.currentMedia && $player.currentMedia.song}\n
\n\n \n\n
\n\n {#if !$player.paused}\n ♪♫♬\n {/if}\n\n {#if $player.currentMedia.artist}\n {$player.currentMedia.artist} -\n {/if}\n\n {$player.currentMedia.song}\n\n
\n
\n\n
\n \n
\n {/if}\n\n \n
\n {#if ($player.hasMissingMedia && !$player.isStream) || $playlistMetadata.playlistHasSelectedEntries || $playlistMetadata.playlistClipboard}\n \n {:else}\n \n {/if}\n
\n\n \n\n {#if !$player.isStream && $playlist}\n
\n
    \n {#each $playlist as song}\n\n {#if song.albumTitle}\n
  • {song.albumTitle}
  • \n {/if}\n\n 0\">{song.current ? ($player.paused ? '●' : (!$player.currentMedia || !$player.currentMedia.mediaType || $player.currentMedia.mediaType == 'music' ? '♫' : '▶')) : ''}\n\n
    \n
  • \n {util.pad(song.id)}\n\n \n {#if song.metadata && song.metadata.duration && song.mediaType == 'video'}\n [{song.metadata.duration}]\n {/if}\n\n {song.title}\n\n {#if song.current && $player.repeatCount}\n (+{$player.repeatCount}x)\n {/if}\n\n \n\n \n {#if song.metadata && song.metadata.duration && song.mediaType == 'music'}\n [{song.metadata.duration}]\n {/if}\n
  • \n
    \n {/each}\n
\n
\n {/if}\n\n
\n {:else}\n
\n

⚠️ {$player.error.type}

\n\n

{@html $player.error.msg.replace('\\n', '
')}

\n\n {#if $player.error.type == 'mpv_binary_missing'}\n {#if atRPi}\n Please use the DMT RaspberryPi guide to compile the mpv project.\n {:else}\n 🆘 Click here for install instructions ...\n {/if}\n {/if}\n
\n {/if}\n {/if}\n\n{/if}\n\n\n\n\n", "{#if loaded}\n\n
\n\n {#if $connected}\n\n {#if deviceView == 'device_log' }\n {#if $log}\n
\n          
    \n {#each $log as line}\n
  • {#each parseAnsi(line.msg).spans as span}{span.text}{/each}
  • \n {:else}\n
  • Log is empty
  • \n {/each}\n
\n
\n {/if}\n\n {:elseif deviceView == 'network_log' }\n\n
\n        This information is missing\n      
\n\n {:elseif deviceView == 'frontend_log' && $device}\n\n
\n        

{$device.deviceName}

\n
\n\n {#if $device.showFrontendLog}\n \n {:else}\n \n {/if}\n\n
\n        To close the frontend log you can also tap or click on the overlay on the device itself.\n      
\n\n {:elseif deviceView == 'device_state'}\n\n \n\n
\n        {#if $device}\n          {@html colorJSON($device)}\n        {:else}\n          This information is missing\n        {/if}\n      
\n\n {:elseif deviceView == 'time_state'}\n\n \n\n
\n        {#if $time}\n          {@html colorJSON($time)}\n        {:else}\n          This information is missing\n        {/if}\n      
\n\n {:elseif deviceView == 'player_state'}\n\n \n\n
\n        {#if $player}\n          {@html colorJSON($player)}\n        {:else}\n          This information is missing\n        {/if}\n      
\n\n {:elseif deviceView == 'nearby_sensors_state'}\n\n \n\n {#if $nearbySensors}\n \n {:else}\n
This information is missing
\n {/if}\n\n {/if}\n\n {/if}\n\n \n\n {#if deviceView == 'wifi_setup'}\n \n\n \n\n {/if}\n\n
\n\n{/if}\n\n\n\n\n", - "{#if false && ($view == 'player' && $player && $player.currentMedia)}\n\n \n {#if $player.isStream}\n
\n\n
\n {#if !$player.paused}\n Playing\n {/if}\n
{$player.currentMedia.song}
\n\n {#if $player.bitrate}\n
\n bitrate
{$player.bitrate}
\n {/if}\n\n {#if $playlist}\n
\n \n Non-streaming playlist length
= 5000\">({$playlistMetadata.playlistLength} items)
\n {/if}\n\n
\n
\n\n {:elseif $player.currentMedia.artist}\n
\n\n
\n
{$player.currentMedia.song}
is a song by\n
{$player.currentMedia.artist}
\n from album
{$player.currentMedia.album}
\n {#if $player.currentMedia.year}\n released
{$player.currentMedia.year}
\n {/if}\n {#if $player.bitrate}\n bitrate
{$player.bitrate}
\n {/if}\n {#if $playlist}\n
\n \n Playlist length
= 5000\">{$playlistMetadata.playlistLength} items\n \n {#if $playlistMetadata.metadataReadCount && $playlistMetadata.playlistLength != $playlistMetadata.metadataReadCount}\n / {$playlistMetadata.metadataReadCount}\n {/if}\n
\n {/if}\n
\n
\n\n {:elseif $playlist}\n
\n
\n \n Playlist length
= 5000\">{$playlistMetadata.playlistLength} items\n \n {#if $playlistMetadata.metadataReadCount && $playlistMetadata.playlistLength != $playlistMetadata.metadataReadCount}\n / {$playlistMetadata.metadataReadCount}\n {/if}\n
\n
\n
\n {/if}\n \n\n{/if}\n\n\n\n{#if alienImgInline && (!$guiNotifications || $guiNotifications.length <= 2)}\n \n{/if}\n\n\n\n\n", - "
\n\n

Logs

\n\n \n\n \n\n \n\n

Process state

\n\n \n\n \n\n \n\n

Nearby sensors

\n\n \n\n {#if $connected && loaded && $device}\n\n {#if $device.devMachine || isRPi}\n\n

Wifi setup

\n\n \n\n {/if}\n\n {/if}\n\n
\n\n\n\n\n", + "\n\n
\n\n \n\n {#if doc == 'a'}\n

\n Please visit uniqpath.com to learn more.\n

\n\n \n\n \n {/if}\n\n \n\n \n\n \n\n \n\n
\n\n\n\n\n", "{#if $connected == false}\n
\n \n {#if $device}\n

{($device.deviceName) || ''}

\n {/if}\n
\n\n
\n
\n ✖\n
\n
\n{/if}\n\n\n\n\n", "{#if loaded}\n\n {#if $connected && $device}\n
\n\n
\n
Player
\n
Clock
\n
\n\n {#if isDevUser}\n
\n
Ambience
\n
\n {/if}\n\n
\n {#if !atRPi}\n
Apps
\n {:else}\n
Help
\n {/if}\n
Device
\n
\n\n
\n {#if selectedDeviceName}\n {#if $device.demoDevice}\n
{$device.demoDevice.deviceName}
\n
{$device.demoDevice.tagline}
\n {:else}\n\n
\n\n {#if $device.connectivityProblem || $device.localConnectivityProblem}✖{/if}\n\n {selectedDeviceName} {$device.devPanel ? '[DΞV]' : ''}\n\n {$device.apMode ? '(AP)' : ''}\n
\n\n {#if $device.localConnectivityProblem || $device.localConnectivityResumed}\n
\n \n {#if $device.localConnectivityProblem}\n Router unreachable\n {:elseif $device.localConnectivityResumed}\n Router connection resumed\n {/if}\n
\n {/if}\n\n {#if $device.connectivityProblem || $device.connectivityResumed}\n
\n \n {#if $device.connectivityProblem}\n Internet unreachable\n {:elseif $device.connectivityResumed}\n Internet connection resumed\n {/if}\n
\n {/if}\n\n {#if $device}\n
\n {#if $device.ip}\n {$device.ip}\n {/if}\n
\n\n {#if $device.wifiAP || $device.apssid}\n
{$device.wifiAP || $device.apssid}
\n {/if}\n\n \n\n {#if $device.apMode && $device.apInfo}\n
\n \n
\n {/if}\n\n {/if}\n {/if}\n {/if}\n
\n\n \n\n
\n {:else}\n
\n ✖\n
\n {/if}\n\n{/if}\n\n\n\n\n", "{#if $device && viewDef && viewDef.sidebar}\n \n\n
\n\n
\n {#if $device.connectivityProblem || $device.localConnectivityProblem}\n ✖\n {/if}\n\n {$device.deviceName || ''} {$device.devPanel ? '[DΞV]' : ''} {$device.apMode ? '(AP)' : ''}\n
\n\n {#if $device.localConnectivityProblem || $device.localConnectivityResumed}\n
\n \n {#if $device.localConnectivityProblem}\n Router unreachable\n {:elseif $device.localConnectivityResumed}\n Router connection resumed\n {/if}\n
\n {/if}\n\n {#if $device.connectivityProblem || $device.connectivityResumed}\n
\n \n {#if $device.connectivityProblem}\n Internet unreachable\n {:elseif $device.connectivityResumed}\n Internet connection resumed\n {/if}\n
\n {/if}\n\n {#if viewDef.showIp != 'false'}\n\n
{$device.ip || ''}
\n\n {#if $device.apMode && $device.apInfo}\n
\n \n
\n {/if}\n\n {/if}\n\n {#if $device.wifiAP || $device.apssid}\n
{$device.wifiAP || $device.apssid}
\n {/if}\n\n
\n\n \n\n{/if}\n\n\n\n\n", - "\n\n{#if loaded && $connected}\n\n
\n {#if homeButtonImgInline}\n
\n \"home\"\n
\n\n \n {/if}\n
\n\n{/if}\n\n\n\n\n", - "{#if $player && $player.paused == false && $player.currentMedia && $player.currentMedia.song}\n
\n
\n \n
\n
\n \n {$player.volume}\n \n
\n
\n{/if}\n\n\n\n\n", "{#if $guiNotifications}\n\n \n\n
\n {#if $device}\n\n {#each $guiNotifications.slice().reverse() as notification}\n
\n {#if notification.title}\n
{notification.title}
\n {/if}\n\n {notification.msg}\n\n {#if notification.replaceTtl}\n
\n {notification.replaceTtl}\n
\n {:elseif !notification.omitTtl}\n
\n {#if notification.relativeTimeAdded}\n {notification.relativeTimeAdded} ago\n {:else}\n now\n {/if}\n
\n {/if}\n\n
\n {/each}\n\n {/if}\n
\n\n{/if}\n\n\n\n\n\n", - "{#if $player}\n\n
\n\n {#if $player.hasMissingMedia && !$player.isStream}\n\n
\n
Media is missing
\n
\n
Remove {$playlistMetadata.numberOfMissingMedia} missing
\n
\n
\n\n {/if}\n\n {#if $player}\n\n {#if $playlistMetadata.playlistHasSelectedEntries || $playlistMetadata.playlistClipboard}\n
\n {#if $playlistMetadata.playlistHasSelectedEntries}\n
Selected entries ({$playlistMetadata.playlistSelectedCount})
\n {:elseif $playlistMetadata.playlistClipboard}\n
Undo {$playlistMetadata.playlistClipboard} item{$playlistMetadata.playlistClipboard > 1 ? 's' : ''}?
\n {/if}\n\n
\n {#if $playlistMetadata.playlistHasSelectedEntries}\n
Play Now
\n
◈ Set Next
\n
✖ Remove
\n
Cancel
\n {:elseif $playlistMetadata.playlistClipboard}\n
Undo
\n {/if}\n
\n
\n {/if}\n\n {/if}\n\n
\n\n{/if}\n\n\n\n\n", "\n\n{#if $player && !$player.error && !$player.paused && $device && !$device.serverMode}\n\n
\n\n
\n
\n {#if $player && !$player.paused && $player.currentMedia && $player.currentMedia.song}\n {$player.isStream ? 'STREAM' : '♪♫♬'} {$player.currentMedia.artist ? `${$player.currentMedia.artist} - ${$player.currentMedia.song}`.substring(0,50) : $player.currentMedia.song.substring(0,50)}\n \n {:elseif $player && $player.spaced && $player.spacedTimeRemaining && !$player.timeposition }\n
\n Waiting {$player.spacedTimeRemaining}s before continuing ...\n
\n {/if}\n
\n\n {#if !$player.isStream}\n
\n \n
\n {/if}\n
\n\n
\n\n{/if}\n\n\n\n\n", + "{#if $player && $player.paused == false && $player.currentMedia && $player.currentMedia.song}\n
\n
\n \n
\n
\n \n {$player.volume}\n \n
\n
\n{/if}\n\n\n\n\n", + "\n\n{#if loaded && $connected}\n\n
\n {#if homeButtonImgInline}\n
\n \"home\"\n
\n\n \n {/if}\n
\n\n{/if}\n\n\n\n\n", + "{#if false && ($view == 'player' && $player && $player.currentMedia)}\n\n \n {#if $player.isStream}\n
\n\n
\n {#if !$player.paused}\n Playing\n {/if}\n
{$player.currentMedia.song}
\n\n {#if $player.bitrate}\n
\n bitrate
{$player.bitrate}
\n {/if}\n\n {#if $playlist}\n
\n \n Non-streaming playlist length
= 5000\">({$playlistMetadata.playlistLength} items)
\n {/if}\n\n
\n
\n\n {:elseif $player.currentMedia.artist}\n
\n\n
\n
{$player.currentMedia.song}
is a song by\n
{$player.currentMedia.artist}
\n from album
{$player.currentMedia.album}
\n {#if $player.currentMedia.year}\n released
{$player.currentMedia.year}
\n {/if}\n {#if $player.bitrate}\n bitrate
{$player.bitrate}
\n {/if}\n {#if $playlist}\n
\n \n Playlist length
= 5000\">{$playlistMetadata.playlistLength} items\n \n {#if $playlistMetadata.metadataReadCount && $playlistMetadata.playlistLength != $playlistMetadata.metadataReadCount}\n / {$playlistMetadata.metadataReadCount}\n {/if}\n
\n {/if}\n
\n
\n\n {:elseif $playlist}\n
\n
\n \n Playlist length
= 5000\">{$playlistMetadata.playlistLength} items\n \n {#if $playlistMetadata.metadataReadCount && $playlistMetadata.playlistLength != $playlistMetadata.metadataReadCount}\n / {$playlistMetadata.metadataReadCount}\n {/if}\n
\n
\n
\n {/if}\n \n\n{/if}\n\n\n\n{#if alienImgInline && (!$guiNotifications || $guiNotifications.length <= 2)}\n \n{/if}\n\n\n\n\n", + "
\n\n

Logs

\n\n \n\n \n\n \n\n

Process state

\n\n \n\n \n\n \n\n

Nearby sensors

\n\n \n\n {#if $connected && loaded && $device}\n\n {#if $device.devMachine || isRPi}\n\n

Wifi setup

\n\n \n\n {/if}\n\n {/if}\n\n
\n\n\n\n\n", + "{#if $player && $player.currentMedia}\n\n
\n\n
\n\n {#if $player.timeposition}\n {#if false && $player.isStream}\n
\n STREAMING\n {#if $player.paused}\n PAUSED\n {:else}\n {util.songTime(Math.floor($player.timeposition))}\n {/if}\n
\n {:else}\n
{util.songTime(Math.floor($player.timeposition))}
\n {/if}\n {/if}\n\n {#if $player.currentMedia.duration}\n
{util.songTime($player.currentMedia.duration)}
\n {/if}\n
\n\n{/if}\n\n\n\n\n", "{#if $player}\n\n
\n\n {#if $player}\n\n {#if !selectMedia && $device && !$device.apMode}\n
\n
Media select
\n
\n
Net Radio
\n
\n
\n {/if}\n\n {#if selectMedia == 'radio'}\n
\n
Internet radio station:
\n
\n
Jazz
\n
Rock
\n \n
Classical
\n \n
Psytrance
\n \n
Close
\n
\n
\n {/if}\n\n {#if $player.isStream}\n
\n
Radio options
\n
\n {#if $player.currentMedia && $player.currentMedia.songPath}\n
Quit Radio
\n {/if}\n
\n
\n {:else}\n\n {#if selectMedia != 'radio'} \n\n \n {#if $playlist && $playlist.length > 0}\n
\n
Current entry
\n
\n {#if $playlist.length > 1}\n
Similar
\n {/if}\n\n {#if $player.currentMedia && $player.currentMedia.songPath}\n
■ Stop
\n {/if}\n
\n
\n\n {#if $device && $device.network == 'zaboric'}\n \n {#if ['balkon', 'dnevna', 'spalnica'].includes($device.deviceName)}\n \n
\n
Customize playlist
\n
\n
Andreja
\n
David
\n
Irma
\n
Otroci
\n
\n
\n {:elseif $device.deviceName == 'televizija'}\n
\n
Customize playlist
\n
\n
Wolfoo
\n
BabyZoo
\n
Booba
\n
Simsala
\n
Mickey Mouse
\n
Looloo
\n
Slo risanke
\n
\n
\n {/if}\n {/if}\n {/if}\n {/if}\n {/if}\n\n {/if}\n\n
\n\n{/if}\n\n\n\n\n", - "
\n \n

Select an option →

\n\n \n {#if $device}\n {#if $device.apMode}\n \n {:else}\n \n {/if}\n\n \n {/if}\n\n \n\n {#if msg}\n

{msg}

\n {/if}\n\n \n\n
\n\n\n\n\n", + "{#if $player}\n\n
\n\n {#if $player.hasMissingMedia && !$player.isStream}\n\n
\n
Media is missing
\n
\n
Remove {$playlistMetadata.numberOfMissingMedia} missing
\n
\n
\n\n {/if}\n\n {#if $player}\n\n {#if $playlistMetadata.playlistHasSelectedEntries || $playlistMetadata.playlistClipboard}\n
\n {#if $playlistMetadata.playlistHasSelectedEntries}\n
Selected entries ({$playlistMetadata.playlistSelectedCount})
\n {:elseif $playlistMetadata.playlistClipboard}\n
Undo {$playlistMetadata.playlistClipboard} item{$playlistMetadata.playlistClipboard > 1 ? 's' : ''}?
\n {/if}\n\n
\n {#if $playlistMetadata.playlistHasSelectedEntries}\n
Play Now
\n
◈ Set Next
\n
✖ Remove
\n
Cancel
\n {:elseif $playlistMetadata.playlistClipboard}\n
Undo
\n {/if}\n
\n
\n {/if}\n\n {/if}\n\n
\n\n{/if}\n\n\n\n\n", "
\n
{@html colorJSON(sensors)}
\n
\n\n
\n

\n Sensors on local network: {Object.keys(sensors).length}\n

\n\n {#each Object.keys(computedSensorsByType) as sensorType}\n

{sensorType}

\n\n {#each computedSensorsByType[sensorType] as sensor}\n
\n

{sensor.id}

\n\n {#if sensor.error}\n Sensor reading error...\n {/if}\n\n

\n LAST UPDATE:\n\n {#if sensor.updateRelativeTime}\n {sensor.updateRelativeTime} ago\n {:else}\n now\n {/if}\n

\n
\n {/each}\n {/each}\n
\n\n\n\n\n", - "{#if tempData}\n
\n\n {#if tempData.sensorId}\n
{tempData.sensorId}
\n {/if}\n\n
\n
\n {tempData.tempDirection && tempData.tempDirection.symbol ? tempData.tempDirection.symbol : ''}{tempData.temperature}°{tempData.tempUnit}\n
\n
{tempData.humidity}%
\n
\n
\n{/if}\n\n\n\n\n", + "
\n \n

Select an option →

\n\n \n {#if $device}\n {#if $device.apMode}\n \n {:else}\n \n {/if}\n\n \n {/if}\n\n \n\n {#if msg}\n

{msg}

\n {/if}\n\n \n\n
\n\n\n\n\n", "
\n {#if sunrise}\n
\n
\n {#if sunriseImgInline}\n \"sunrise\"\n {/if}\n {sunrise}\n
\n
\n {/if}\n\n {#if sunset}\n
\n
\n {#if sunsetImgInline}\n \"sunset\"\n {/if}\n {sunset}\n
\n
\n {/if}\n
\n\n\n\n\n", - "{#if $player && $player.currentMedia}\n\n
\n\n
\n\n {#if $player.timeposition}\n {#if false && $player.isStream}\n
\n STREAMING\n {#if $player.paused}\n PAUSED\n {:else}\n {util.songTime(Math.floor($player.timeposition))}\n {/if}\n
\n {:else}\n
{util.songTime(Math.floor($player.timeposition))}
\n {/if}\n {/if}\n\n {#if $player.currentMedia.duration}\n
{util.songTime($player.currentMedia.duration)}
\n {/if}\n
\n\n{/if}\n\n\n\n\n", + "{#if loaded && $thisDeviceState && $thisDeviceState.time}\n\n
\n\n
\n {#if $thisDeviceState.connected && !$thisDeviceState.device.serverMode} \n
\n\n
\n {#if $thisDeviceState.connected && !$thisDeviceState.device.serverMode} \n {(timeDate.dow) || ''} {(timeDate.date) || ''}\n {/if}\n\n {#if $thisDeviceState.connected == false}\n
disconnected
\n
\n (dmt-proc on {$thisDeviceState.device.deviceName} is down)\n
\n {/if}\n
\n\n {#if !$guiNotifications || ($guiNotifications && $guiNotifications.length == 0)}\n \n {/if}\n\n
\n\n{/if}\n\n\n\n\n", + "{#if tempData}\n
\n\n {#if tempData.sensorId}\n
{tempData.sensorId}
\n {/if}\n\n
\n
\n {tempData.tempDirection && tempData.tempDirection.symbol ? tempData.tempDirection.symbol : ''}{tempData.temperature}°{tempData.tempUnit}\n
\n
{tempData.humidity}%
\n
\n
\n{/if}\n\n\n\n\n", "{#if $thisDeviceState && $thisDeviceState.connected && $thisDeviceState.peerlist && $thisDeviceState.peerlist.length > 0}\n \n {#if $thisDeviceState.peerlist.find(({ ready }) => !showPeerOnlyIfDisconnected || (showPeerOnlyIfDisconnected && !ready))}\n
\n\n \n\n {#each $thisDeviceState.peerlist as { deviceTag, ready, versionCompareSymbol, peerState }}\n \n {#if !showPeerOnlyIfDisconnected || (showPeerOnlyIfDisconnected && !ready)}\n
\n ok\n \n {deviceTag}\n {#if peerState}\n {#if peerState.dmtVersion}\n \n {#if detailed}\n {peerState.dmtVersion}\n {/if}\n \n {/if}\n {/if}\n
\n {/if}\n {/each}\n
\n {/if}\n{/if}\n\n\n\n\n", "{#if isDevUser}\n
\n
ON
\n
OFF
\n
\n{/if}\n\n\n\n\n", "\n \n\n \n {#each [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55] as minute}\n \n\n {#each [1, 2, 3, 4] as offset}\n \n {/each}\n {/each}\n\n \n \n\n \n \n\n \n \n \n \n \n\n\n\n\n\n", - "{#if loaded && $thisDeviceState && $thisDeviceState.time}\n\n
\n\n
\n {#if $thisDeviceState.connected && !$thisDeviceState.device.serverMode} \n
\n\n
\n {#if $thisDeviceState.connected && !$thisDeviceState.device.serverMode} \n {(timeDate.dow) || ''} {(timeDate.date) || ''}\n {/if}\n\n {#if $thisDeviceState.connected == false}\n
disconnected
\n
\n (dmt-proc on {$thisDeviceState.device.deviceName} is down)\n
\n {/if}\n
\n\n {#if !$guiNotifications || ($guiNotifications && $guiNotifications.length == 0)}\n \n {/if}\n\n
\n\n{/if}\n\n\n\n\n", "{#if $device && $device.apMode && $device.apInfo}\n
\n \"wifi\n
SSID: {$device.apInfo.ssid}
\n
Pass: {$device.apInfo.password}
\n
\n{/if}\n\n\n\n\n", "{#if loaded}\n\n {#if $connected && $device}\n\n
\n\n {#if thisDeviceName != selectedDeviceName}\n\n
\n \n
\n\n {/if}\n\n {#if !homebase && homebaseName && $nearbyDevices && getDevice(homebaseName, $nearbyDevices)}\n\n
\n \n
\n\n {/if}\n\n {#if !disableDeviceSelector && $nearbyDevices && $nearbyDevices.length > 0}\n\n {#each $nearbyDevices.sort((a, b) => a.deviceName < b.deviceName ? -1 : (a.deviceName > b.deviceName ? 1 : 0)) as device}\n\n {#if device.deviceName != selectedDeviceName && device.deviceName != thisDeviceName && device.deviceName != homebaseName}\n\n {#if getDevice(device.deviceName, $nearbyDevices).playing && !getDevice(device.deviceName, $nearbyDevices).hiddenInGui}\n\n
\n \n
\n\n {/if}\n\n {/if}\n\n {/each}\n\n {/if}\n\n
\n\n {/if}\n\n{/if}\n\n\n\n\n", "{#if $connected && holiday}\n\n
\n
\n
{holiday}
\n \n \n
\n
\n\n{/if}\n\n\n\n\n" ], "names": [], - "mappings": "AAyPA,KAAK,AAAC,CAAC,AACL,SAAS,CAAE,OAAO,CAClB,SAAS,CAAE,OAAO,CAClB,kBAAkB,CAAE,OAAO,CAC3B,YAAY,CAAE,OAAO,CAErB,UAAU,CAAE,OAAO,CAGnB,WAAW,CAAE,OAAO,CACpB,UAAU,CAAE,OAAO,CAEnB,iBAAiB,CAAE,OAAO,CAC1B,YAAY,CAAE,OAAO,CACrB,iBAAiB,CAAE,OAAO,CAE1B,qBAAqB,CAAE,OAAO,CAE9B,mBAAmB,CAAE,OAAO,CAC5B,gBAAgB,CAAE,OAAO,CACzB,eAAe,CAAE,OAAO,CACxB,gBAAgB,CAAE,OAAO,CAEzB,YAAY,CAAE,OAAO,CACrB,sBAAsB,CAAE,OAAO,CAC/B,kBAAkB,CAAE,OAAO,CAE3B,oBAAoB,CAAE,KAAK,AAC7B,CAAC,AAED,IAAI,qBAAqB,eAAC,CAAC,AACzB,cAAc,CAAE,IAAI,AACtB,CAAC,AAED,OAAO,eAAC,CAAC,AACP,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,CAAC,CAAC,IAAI,AAChB,CAAC,AAED,sBAAO,CAAC,MAAM,eAAC,CAAC,AACd,OAAO,CAAE,IAAI,CACb,UAAU,CAAE,IAAI,CAChB,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,KAAK,CACZ,aAAa,CAAE,IAAI,CACnB,KAAK,CAAE,IAAI,CACX,UAAU,CAAE,UAAU,AACxB,CAAC,AAED,sBAAO,CAAC,MAAM,aAAa,eAAC,CAAC,AAC3B,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,qBAAM,CAAC,MAAM,eAAC,CAAC,AACb,KAAK,CAAE,OAAO,CACd,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,qBAAM,CAAC,MAAM,CAAC,IAAI,eAAC,CAAC,AAClB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,qBAAM,CAAC,MAAM,CAAC,KAAK,eAAC,CAAC,AACnB,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,GAAG,CAAC,GAAG,CAChB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,kBAAkB,eAAC,CAAC,AAClB,QAAQ,CAAE,KAAK,CACf,GAAG,CAAE,CAAC,CACN,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,AACb,CAAC,AAED,kBAAkB,eAAe,eAAC,CAAC,AACjC,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,GAAG,AACd,CAAC,AAED,kBAAkB,iBAAiB,eAAC,CAAC,AACnC,IAAI,CAAE,KAAK,AACb,CAAC;ACvSD,gBAAE,CAAC,IAAI,cAAC,CAAC,AACP,KAAK,CAAE,IAAI,AACb,CAAC,AAED,SAAS,cAAC,CAAC,AACT,OAAO,CAAE,KAAK,CACd,QAAQ,CAAE,QAAQ,CAClB,MAAM,CAAE,CAAC,CAET,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,IAAI,CACb,UAAU,CAAE,UAAU,CACtB,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,KAAK,CACb,gBAAgB,CAAE,OAAO,CACzB,SAAS,CAAE,KAAK,CAChB,OAAO,CAAE,GAAG,CACZ,QAAQ,CAAE,MAAM,AAClB,CAAC;ACvCD,MAAM,cAAC,CAAC,AACN,OAAO,CAAE,IAAI,AACf,CAAC;ACiCD,SAAS,eAAC,CAAC,AACT,UAAU,CAAE,IAAI,CAChB,WAAW,CAAE,KAAK,AACpB,CAAC,AAED,CAAC,eAAC,CAAC,AACD,OAAO,CAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC5B,aAAa,CAAE,IAAI,CACnB,gBAAgB,CAAE,OAAO,CACzB,OAAO,CAAE,KAAK,CACd,UAAU,CAAE,IAAI,CAChB,KAAK,CAAE,KAAK,CACZ,UAAU,CAAE,MAAM,CAClB,KAAK,CAAE,KAAK,CACZ,eAAe,CAAE,IAAI,AACvB,CAAC,AAED,gBAAC,CAAC,EAAE,eAAC,CAAC,AACJ,eAAe,CAAE,SAAS,AAC5B,CAAC,AAED,gBAAC,CAAC,OAAO,eAAC,CAAC,AAET,SAAS,CAAE,KAAK,CAChB,KAAK,CAAE,KAAK,CAEZ,KAAK,CAAE,KAAK,CACZ,UAAU,CAAE,MAAM,CAClB,UAAU,CAAE,IAAI,CAChB,KAAK,CAAE,IAAI,AACb,CAAC,AAED,CAAC,SAAS,eAAC,CAAC,AACV,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,CAAC,oCAAqB,CAAE,CAAC,mBAAmB,eAAC,CAAC,AAC5C,gBAAgB,CAAE,GAAG,AACvB,CAAC,AAED,gBAAC,MAAM,AAAC,CAAC,AACP,MAAM,CAAE,SAAS,GAAG,CAAC,CACrB,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,gBAAC,MAAM,CAAC,EAAE,eAAC,CAAC,AACV,eAAe,CAAE,SAAS,AAC5B,CAAC;ACgCD,sBAAO,CAAE,gBAAgB,eAAC,CAAC,AAEzB,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,sBAAO,CAAC,iBAAE,CAAE,+BAAgB,CAAC,EAAE,eAAC,CAAC,AAC/B,UAAU,CAAE,MAAM,CAClB,SAAS,CAAE,KAAK,AAClB,CAAC,AAED,sBAAO,CAAC,MAAM,eAAC,CAAC,AACd,WAAW,CAAE,GAAG,AAClB,CAAC,AAED,sBAAO,CAAC,qBAAM,CAAE,+BAAgB,CAAC,MAAM,eAAC,CAAC,AACvC,aAAa,CAAE,IAAI,CACnB,MAAM,CAAE,IAAI,CACZ,SAAS,CAAE,KAAK,CAChB,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,CAAC,CACT,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,sBAAO,CAAC,MAAM,eAAC,CAAC,AACd,KAAK,CAAE,KAAK,AACd,CAAC,AAED,gBAAgB,eAAC,CAAC,AAChB,UAAU,CAAE,MAAM,AACpB,CAAC,AAED,sBAAO,CAAC,qBAAM,MAAM,CAAE,+BAAgB,CAAC,qBAAM,MAAM,AAAC,CAAC,AACnD,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,GAAG,AACd,CAAC,AAED,QAAQ,eAAC,CAAC,AACR,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,CAAC,CACP,GAAG,CAAE,CAAC,CACN,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,KAAK,CACd,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,iBAAiB,eAAC,CAAC,AACjB,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,iBAAiB,yBAAyB,eAAC,CAAC,AAC1C,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,GAAG,CAEZ,0BAA0B,CAAE,IAAI,AAClC,CAAC,AAMD,cAAc,eAAC,CAAC,AACd,YAAY,CAAE,IAAI,AACpB,CAAC,AAED,uBAAuB,eAAC,CAAC,AACvB,QAAQ,CAAE,KAAK,CACf,GAAG,CAAE,CAAC,CACN,IAAI,CAAE,CAAC,CACP,gBAAgB,CAAE,IAAI,CAEtB,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,KAAK,AACd,CAAC,AAED,eAAe,eAAC,CAAC,AACf,QAAQ,CAAE,QAAQ,CAClB,MAAM,CAAE,GAAG,CACX,IAAI,CAAE,CAAC,CACP,KAAK,CAAE,KAAK,CACZ,UAAU,CAAE,MAAM,CAClB,OAAO,CAAE,IAAI,CACb,KAAK,CAAE,KAAK,CACZ,cAAc,CAAE,GAAG,AACrB,CAAC;ACxBD,eAAe,cAAC,CAAC,AACf,OAAO,CAAE,MAAM,CACf,UAAU,CAAE,MAAM,CAClB,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,KAAK,CACb,WAAW,CAAE,KAAK,CAClB,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,KAAK,CACZ,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CACzB,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,6BAAe,CAAC,OAAO,cAAC,CAAC,AACvB,OAAO,CAAE,GAAG,CACZ,aAAa,CAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAChC,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,eAAe,qBAAO,CAAC,qBAAO,MAAM,AAAC,CAAC,AACpC,gBAAgB,CAAE,OAAO,CACzB,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,6BAAe,CAAC,qBAAO,OAAO,AAAC,CAAC,AAC9B,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,6BAAe,CAAC,OAAO,CAAC,MAAM,cAAC,CAAC,AAC9B,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,GAAG,CAAC,GAAG,CAChB,YAAY,CAAE,GAAG,AACnB,CAAC,AAED,GAAG,cAAC,CAAC,AACH,KAAK,CAAE,IAAI,AACb,CAAC,AAED,OAAO,cAAC,CAAC,AACP,OAAO,CAAE,IAAI,AACf,CAAC,AAED,6BAAe,CAAC,cAAc,cAAC,CAAC,AAC9B,OAAO,CAAE,GAAG,CAAC,GAAG,CAChB,gBAAgB,CAAE,IAAI,CACtB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,aAAa,cAAC,CAAC,AACb,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,IAAI,CACb,cAAc,CAAE,MAAM,CACtB,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,CAAC,CACR,MAAM,CAAE,CAAC,AACX,CAAC,AAED,2BAAa,CAAC,GAAG,cAAC,CAAC,AACjB,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,2BAAa,CAAC,GAAG,CAAC,GAAG,cAAC,CAAC,AACrB,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,IAAI,CACb,cAAc,CAAE,IAAI,AACtB,CAAC;ACpKD,SAAS,eAAC,CAAC,AACT,KAAK,CAAE,KAAK,CACZ,QAAQ,CAAE,KAAK,CACf,GAAG,CAAE,CAAC,CACN,KAAK,CAAE,CAAC,AACV,CAAC,AAED,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,AAAC,CAAC,AAI3C,CAAC;AC7CD,aAAa,cAAC,CAAC,AACb,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,KAAK,CAEb,QAAQ,CAAE,KAAK,CACf,GAAG,CAAE,GAAG,CACR,IAAI,CAAE,GAAG,CACT,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,aAAa,OAAO,cAAC,CAAC,AACpB,OAAO,CAAE,IAAI,AACf,CAAC;AC9CD,YAAY,eAAC,CAAC,AACZ,WAAW,CAAE,IAAI,AACnB,CAAC;ACgDD,OAAO,eAAC,CAAC,AACP,UAAU,CAAE,MAAM,AACpB,CAAC,AAED,sBAAO,CAAC,GAAG,eAAC,CAAC,AACX,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,CAAC,CAAC,IAAI,AAChB,CAAC,AAMD,sBAAO,CAAC,GAAG,eAAC,CAAC,AACX,KAAK,CAAE,KAAK,AACd,CAAC,AAED,OAAO,sBAAO,CAAC,GAAG,eAAC,CAAC,AAClB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,KAAK,eAAC,CAAC,AACL,MAAM,CAAE,CAAC,CAAC,IAAI,CACd,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,KAAK,mBAAmB,eAAC,CAAC,AACxB,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,GAAG,CACZ,UAAU,CAAE,IAAI,CAChB,WAAW,CAAE,IAAI,CACjB,KAAK,CAAE,KAAK,CACZ,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,mBAAmB,eAAC,CAAC,AACnB,WAAW,CAAE,IAAI,CAGjB,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,CAAC,CAAC,IAAI,AAChB,CAAC;ACZD,CAAC,eAAC,CAAC,AACD,KAAK,CAAE,IAAI,AACb,CAAC,AAMD,KAAK,eAAC,CAAC,AACL,MAAM,CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,SAAS,CAAE,KAAK,CAChB,KAAK,CAAE,KAAK,CACZ,KAAK,CAAE,KAAK,CACZ,UAAU,CAAE,OAAO,AACrB,CAAC;AC4dC,KAAK,AAAC,CAAC,AACL,sBAAsB,CAAE,KAAK,AAC/B,CAAC,AAED,CAAC,cAAC,CAAC,AACD,KAAK,CAAE,KAAK,CACZ,eAAe,CAAE,IAAI,AACvB,CAAC,AAED,eAAC,MAAM,AAAC,CAAC,AACP,OAAO,CAAE,GAAG,AACd,CAAC,AAED,MAAM,cAAC,CAAC,AACN,KAAK,CAAE,IAAI,SAAS,CAAC,AACvB,CAAC,AAED,cAAc,cAAC,CAAC,AACd,KAAK,CAAE,IAAI,CACX,KAAK,CAAE,IAAI,AACb,CAAC,AAYD,qBAAO,CAAC,cAAc,cAAC,CAAC,AACtB,eAAe,CAAE,SAAS,AAC5B,CAAC,AAED,qBAAO,CAAC,QAAQ,cAAC,CAAC,AAChB,OAAO,CAAE,IAAI,CACb,WAAW,CAAE,MAAM,CACnB,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,qBAAO,CAAC,WAAW,cAAC,CAAC,AACnB,OAAO,CAAE,IAAI,CACb,WAAW,CAAE,MAAM,CACnB,MAAM,CAAE,IAAI,CAAC,CAAC,AAChB,CAAC,AAcD,OAAO,cAAC,CAAC,AACP,OAAO,CAAE,IAAI,CAAC,IAAI,CAClB,YAAY,CAAE,IAAI,CAClB,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,qBAAO,CAAC,MAAM,cAAC,CAAC,AACd,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,KAAK,CAEhB,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,AACZ,CAAC,AAED,qBAAO,CAAC,MAAM,OAAO,cAAC,CAAC,AACrB,OAAO,CAAE,IAAI,AACf,CAAC,AAED,qBAAO,CAAC,MAAM,OAAO,cAAC,CAAC,AACrB,gBAAgB,CAAE,OAAO,CACzB,gBAAgB,CAAE,OAAO,CACzB,gBAAgB,CAAE,OAAO,CAEzB,KAAK,CAAE,KAAK,CACZ,KAAK,CAAE,IAAI,AACb,CAAC,AAMD,qBAAO,CAAC,MAAM,SAAS,cAAC,CAAC,AACvB,gBAAgB,CAAE,IAAI,UAAU,CAAC,AACnC,CAAC,AAOD,qBAAO,CAAC,oBAAM,MAAM,AAAC,CAAC,AACpB,OAAO,CAAE,GAAG,CACZ,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,aAAa,cAAC,CAAC,AACb,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,IAAI,CACZ,SAAS,CAAE,KAAK,CAChB,OAAO,CAAE,GAAG,CAAC,GAAG,CAChB,MAAM,CAAE,CAAC,CACT,gBAAgB,CAAE,IAAI,CACtB,KAAK,CAAE,IAAI,CACX,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,eAAe,cAAC,CAAC,AACf,UAAU,CAAE,IAAI,CAChB,SAAS,CAAE,KAAK,AAElB,CAAC,AAED,eAAe,cAAC,CAAC,AACf,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,eAAe,cAAC,CAAC,AACf,KAAK,CAAE,IAAI,CACX,KAAK,CAAE,IAAI,SAAS,CAAC,AACvB,CAAC,AAED,oBAAoB,cAAC,CAAC,AACpB,KAAK,CAAE,IAAI,CACX,UAAU,CAAE,GAAG,CACf,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,MAAM,cAAC,CAAC,AACN,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,KAAK,CACZ,YAAY,CAAE,IAAI,CAClB,MAAM,CAAE,CAAC,CACT,SAAS,CAAE,IAAI,CACf,aAAa,CAAE,GAAG,CAClB,gBAAgB,CAAE,IAAI,AACxB,CAAC,AAED,OAAO,qBAAO,CAAC,MAAM,cAAC,CAAC,AACrB,MAAM,CAAE,IAAI,AACd,CAAC,AAED,oBAAM,OAAO,AAAC,CAAC,AACb,OAAO,CAAE,GAAG,AACd,CAAC,AAED,OAAO,qBAAO,CAAC,oBAAM,MAAM,AAAC,CAAC,AAC3B,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,GAAG,AACd,CAAC,AAmBD,MAAM,OAAO,cAAC,CAAC,AACb,KAAK,CAAE,IAAI,CACX,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,MAAM,KAAK,cAAC,CAAC,AACX,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,MAAM,MAAM,cAAC,CAAC,AACZ,gBAAgB,CAAE,IAAI,CACtB,KAAK,CAAE,IAAI,AACb,CAAC,AAOD,OAAO,cAAC,CAAC,AACP,UAAU,CAAE,IAAI,CAChB,OAAO,CAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACxB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,IAAI,OAAO,cAAC,CAAC,AACX,WAAW,CAAE,IAAI,CACjB,KAAK,CAAE,OAAO,CACd,SAAS,CAAE,IAAI,AACjB,CAAC,AAED,SAAS,cAAC,CAAC,AACT,SAAS,CAAE,IAAI,CACf,UAAU,CAAE,GAAG,CAEf,OAAO,CAAE,GAAG,CAAC,IAAI,CACjB,aAAa,CAAE,IAAI,CACnB,WAAW,CAAE,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAE7D,WAAW,CAAE,MAAM,CACnB,QAAQ,CAAE,MAAM,CAChB,aAAa,CAAE,QAAQ,CACvB,KAAK,CAAE,IAAI,AAKb,CAAC,AAED,SAAS,OAAO,cAAC,CAAC,AAChB,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,GAAG,AAClB,CAAC,AAED,uBAAS,CAAC,OAAO,cAAC,CAAC,AACjB,KAAK,CAAE,IAAI,CACX,KAAK,CAAE,IAAI,CACX,KAAK,CAAE,IAAI,YAAY,CAAC,CACxB,KAAK,CAAE,IAAI,iBAAiB,CAAC,CAE7B,SAAS,CAAE,KAAK,AAElB,CAAC,AAED,uBAAS,CAAC,OAAO,aAAa,cAAC,CAAC,AAC9B,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,uBAAS,CAAC,EAAE,cAAC,CAAC,AACZ,OAAO,CAAE,CAAC,CACV,MAAM,CAAE,CAAC,AACX,CAAC,AAED,uBAAS,CAAC,EAAE,cAAC,CAAC,AACZ,OAAO,CAAE,YAAY,AACvB,CAAC,AAED,uBAAS,CAAC,EAAE,cAAC,CAAC,AACZ,KAAK,CAAE,IAAI,AACb,CAAC,AAED,uBAAS,CAAC,WAAW,cAAC,CAAC,AACrB,OAAO,CAAE,GAAG,CAAC,CAAC,AAChB,CAAC,AAED,SAAS,qBAAO,CAAC,WAAW,cAAC,CAAC,AAC5B,OAAO,CAAE,GAAG,CAAC,CAAC,AAChB,CAAC,AAED,uBAAS,CAAC,EAAE,YAAY,cAAC,CAAC,AACxB,KAAK,CAAE,IAAI,qBAAqB,CAAC,AACnC,CAAC,AAED,uBAAS,CAAC,EAAE,YAAY,cAAC,CAAC,AACxB,OAAO,CAAE,GAAG,CAAC,CAAC,AAChB,CAAC,AAED,uBAAS,CAAC,gBAAE,MAAM,AAAC,CAAC,AAClB,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,uBAAS,CAAC,EAAE,cAAc,cAAC,CAAC,AAC1B,KAAK,CAAE,KAAK,AACd,CAAC,AAED,uBAAS,CAAC,EAAE,QAAQ,cAAC,CAAC,AACpB,WAAW,CAAE,IAAI,CAEjB,KAAK,CAAE,IAAI,iBAAiB,CAAC,AAC/B,CAAC,AAED,uBAAS,CAAC,EAAE,aAAa,cAAE,CAAC,AAC1B,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,uBAAS,CAAC,EAAE,KAAK,cAAC,CAAC,AACjB,KAAK,CAAE,IAAI,AACb,CAAC,AAID,uBAAS,CAAC,EAAE,MAAM,cAAE,CAAC,AACnB,KAAK,CAAE,IAAI,SAAS,CAAC,AACvB,CAAC,AAED,uBAAS,CAAC,EAAE,0BAAY,CAAE,uBAAS,CAAC,EAAE,YAAY,cAAC,CAAC,AAClD,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,uBAAS,CAAC,EAAE,YAAY,2BAAa,CAAE,uBAAS,CAAC,EAAE,YAAY,aAAa,cAAC,CAAC,AAC5E,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,uBAAS,CAAC,EAAE,SAAS,cAAC,CAAC,AAGrB,KAAK,CAAE,IAAI,YAAY,CAAC,AAC1B,CAAC,AAED,uBAAS,CAAC,EAAE,aAAa,SAAS,cAAE,CAAC,AACnC,UAAU,CAAE,MAAM,AACpB,CAAC,AAED,uBAAS,CAAC,EAAE,gBAAgB,cAAC,CAAC,AAC5B,KAAK,CAAE,OAAO,AAChB,CAAC,AAmBD,MAAM,aAAa,cAAC,CAAC,AACnB,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,IAAI,AACb,CAAC,AAED,MAAM,kBAAkB,cAAC,CAAC,AACxB,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,IAAI,AACb,CAAC,AAED,YAAY,cAAC,CAAC,AACZ,KAAK,CAAE,OAAO,CACd,YAAY,CAAE,IAAI,AACpB,CAAC,AAED,cAAc,cAAC,CAAC,AACd,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,yBAAW,CAAE,6BAAe,CAAE,mBAAmB,cAAC,CAAC,AACjD,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,4BAAc,CAAE,mBAAmB,cAAC,CAAC,AACnC,MAAM,CAAE,IAAI,CAAC,CAAC,AAChB,CAAC,AAED,WAAW,cAAC,CAAC,AACX,YAAY,CAAE,IAAI,AACpB,CAAC,AAED,WAAW,WAAW,cAAC,CAAC,AACtB,KAAK,CAAE,OAAO,CACd,KAAK,CAAE,IAAI,AACb,CAAC,AAED,0BAAY,CAAC,UAAU,cAAC,CAAC,AACvB,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,iBAAiB,cAAC,CAAC,AACjB,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,KAAK,CACZ,aAAa,CAAE,GAAG,CAClB,OAAO,CAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,AACtB,CAAC,AAED,eAAe,cAAC,CAAC,AAEf,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,eAAe,cAAC,CAAC,AAEf,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,eAAe,cAAC,CAAC,AACf,gBAAgB,CAAE,OAAO,AAG3B,CAAC,AAED,uBAAS,CAAC,EAAE,CAAC,GAAG,cAAC,CAAC,AAChB,WAAW,CAAE,IAAI,CACjB,KAAK,CAAE,OAAO,CACd,WAAW,CAAE,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAE5D,YAAY,CAAE,GAAG,AACnB,CAAC,AAGD,uBAAS,CAAC,WAAW,cAAC,CAAC,AACrB,WAAW,CAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAC3B,WAAW,CAAE,IAAI,AAGnB,CAAC,AAED,uBAAS,CAAC,SAAS,SAAS,cAAC,CAAC,AAC5B,KAAK,CAAE,IAAI,AACb,CAAC,AAGD,uBAAS,CAAC,WAAW,OAAO,cAAC,CAAC,AAC5B,WAAW,CAAE,GAAG,CAAC,KAAK,CAAC,IAAI,AAC7B,CAAC,AAED,qBAAqB,cAAC,CAAC,AAGrB,KAAK,CAAE,KAAK,CAEZ,KAAK,CAAE,IAAI,AACb,CAAC,AAED,qBAAqB,MAAM,cAAC,CAAC,AAC3B,OAAO,CAAE,GAAG,AACd,CAAC,AAUD,mCAAqB,CAAC,KAAK,cAAC,CAAC,AAE3B,UAAU,CAAE,gBAAgB,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAGlG,KAAK,CAAE,KAAK,CAEZ,sBAAsB,CAAE,IAAI,CAC5B,uBAAuB,CAAE,IAAI,CAC7B,OAAO,CAAE,IAAI,CACb,KAAK,CAAE,IAAI,CACX,OAAO,CAAE,YAAY,CACrB,UAAU,CAAE,UAAU,CACtB,UAAU,CAAE,MAAM,AACpB,CAAC,AAED,mCAAqB,CAAC,KAAK,CAAC,IAAI,cAAC,CAAC,AAChC,KAAK,CAAE,OAAO,CACd,KAAK,CAAE,OAAO,AAEhB,CAAC,AAED,mCAAqB,CAAC,KAAK,OAAO,cAAC,CAAC,AAClC,SAAS,CAAE,KAAK,AAClB,CAAC,AAaD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,AAAC,CAAC,AACzC,MAAM,cAAC,CAAC,AACN,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,GAAG,CACd,YAAY,CAAE,GAAG,AACnB,CAAC,AAED,OAAO,cAAC,CAAC,AACP,SAAS,CAAE,IAAI,AACjB,CAAC,AAED,SAAS,cAAC,CAAC,AACT,SAAS,CAAE,IAAI,AACjB,CAAC,AACH,CAAC;AC96BH,OAAO,cAAC,CAAC,AACP,SAAS,CAAE,IAAI,CACf,gBAAgB,CAAE,IAAI,CACtB,YAAY,CAAE,IAAI,CAIlB,UAAU,CAAE,IAAI,CAChB,QAAQ,CAAE,IAAI,AAChB,CAAC,AAED,qBAAO,CAAC,EAAE,cAAC,CAAC,AACV,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,AACZ,CAAC,AAQD,qBAAO,CAAC,GAAG,cAAC,CAAC,AACX,WAAW,CAAE,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,AAC/D,CAAC,AAED,MAAM,cAAC,CAAC,AACN,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,CAAC,CAAC,IAAI,CACd,gBAAgB,CAAE,OAAO,CACzB,MAAM,CAAE,CAAC,CACT,KAAK,CAAE,KAAK,CACZ,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,OAAO,CACf,MAAM,CAAE,GAAG,CACX,KAAK,CAAE,KAAK,CACZ,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,MAAM,MAAM,cAAC,CAAC,AACZ,gBAAgB,CAAE,IAAI,YAAY,CAAC,AACrC,CAAC;ACzGD,WAAW,cAAC,CAAC,AACX,KAAK,CAAE,IAAI,AACb,CAAC,AAED,yBAAW,CAAC,SAAS,cAAC,CAAC,AACrB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,yBAAW,CAAC,SAAS,OAAO,cAAC,CAAC,AAC5B,KAAK,CAAE,IAAI,YAAY,CAAC,CACxB,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,yBAAW,CAAC,SAAS,KAAK,cAAC,CAAC,AAC1B,KAAK,CAAE,IAAI,UAAU,CAAC,CACtB,WAAW,CAAE,IAAI,AACnB,CAAC,AAMD,yBAAW,CAAC,SAAS,sBAAQ,OAAO,AAAC,CAAC,AACpC,KAAK,CAAE,IAAI,SAAS,CAAC,CACrB,OAAO,CAAE,wBAAwB,CACjC,SAAS,CAAE,KAAK,AAClB,CAAC,AAED,GAAG,MAAM,cAAC,CAAC,AACT,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,OAAO,IAAI,CAAC,AACtB,CAAC,AAID,cAAc,cAAC,CAAC,AACd,QAAQ,CAAE,QAAQ,CAClB,UAAU,CAAE,IAAI,CAChB,aAAa,CAAE,IAAI,CAEnB,SAAS,CAAE,KAAK,CAEhB,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,IAAI,CACb,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,4BAAc,MAAM,AAAC,CAAC,AACpB,OAAO,CAAE,EAAE,CACX,QAAQ,CAAE,QAAQ,CAClB,MAAM,CAAE,CAAC,CACT,IAAI,CAAE,GAAG,CACT,KAAK,CAAE,CAAC,CACR,MAAM,CAAE,CAAC,CACT,MAAM,CAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAC9B,gBAAgB,CAAE,IAAI,CACtB,aAAa,CAAE,CAAC,CAEhB,WAAW,CAAE,KAAK,CAClB,aAAa,CAAE,KAAK,AACtB,CAAC;AC1FD,KAAK,eAAC,CAAC,AACL,UAAU,CAAE,MAAM,CAClB,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,cAAc,eAAC,CAAC,AACd,eAAe,CAAE,SAAS,AAC5B,CAAC,AAED,MAAM,eAAC,CAAC,AACN,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,CAAC,CAAC,IAAI,CACd,gBAAgB,CAAE,OAAO,CACzB,MAAM,CAAE,CAAC,CACT,KAAK,CAAE,KAAK,CACZ,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,OAAO,CACf,MAAM,CAAE,GAAG,CACX,KAAK,CAAE,KAAK,CACZ,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,KAAK,sBAAO,CAAC,qBAAM,MAAM,AAAC,CAAC,AACzB,OAAO,CAAE,GAAG,AACd,CAAC,AAED,MAAM,OAAO,eAAC,CAAC,AACb,KAAK,CAAE,KAAK,CACZ,gBAAgB,CAAE,OAAO,AAC3B,CAAC;ACzDC,OAAO,cAAC,CAAC,AACP,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,CAAC,CACP,GAAG,CAAE,CAAC,CACN,OAAO,CAAE,IAAI,CACb,WAAW,CAAE,MAAM,CACnB,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,IAAI,CACjB,YAAY,CAAE,IAAI,AACpB,CAAC,AAED,qBAAO,CAAC,MAAM,cAAC,CAAC,AACd,KAAK,CAAE,OAAO,CACd,YAAY,CAAE,IAAI,AACpB,CAAC,AAED,qBAAO,CAAC,EAAE,MAAM,cAAC,CAAC,AAChB,KAAK,CAAE,OAAO,CACd,OAAO,CAAE,CAAC,CACV,MAAM,CAAE,CAAC,AACX,CAAC,AAED,kBAAkB,cAAC,CAAC,AAClB,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,IAAI,CACX,GAAG,CAAE,CAAC,CACN,KAAK,CAAE,OAAO,CACd,UAAU,CAAE,MAAM,CAClB,SAAS,CAAE,KAAK,AAClB,CAAC;ACsED,kBAAkB,eAAC,CAAC,AAClB,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,CAAC,CACR,GAAG,CAAE,CAAC,CACN,OAAO,CAAE,IAAI,CACb,KAAK,CAAE,OAAO,CACd,UAAU,CAAE,MAAM,CAClB,SAAS,CAAE,KAAK,AAClB,CAAC,AAED,QAAQ,eAAC,CAAC,AACR,OAAO,CAAE,IAAI,AACf,CAAC,AAED,uBAAQ,CAAC,GAAG,cAAc,eAAC,CAAC,AAC1B,eAAe,CAAE,SAAS,AAE5B,CAAC,AAED,uBAAQ,CAAC,GAAG,eAAC,CAAC,AACZ,IAAI,CAAE,CAAC,CACP,OAAO,CAAE,IAAI,CAAC,IAAI,CAClB,SAAS,CAAE,KAAK,CAChB,UAAU,CAAE,MAAM,CAClB,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,GAAG,AACd,CAAC,AAED,IAAI,IAAI,eAAC,CAAC,AACR,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,KAAK,AAClB,CAAC,AAED,SAAS,sBAAO,CAAC,QAAQ,CAAC,kBAAG,MAAM,AAAC,CAAC,AACnC,OAAO,CAAE,GAAG,AACd,CAAC,AAED,uBAAQ,CAAC,kBAAG,OAAO,AAAC,CAAC,AACnB,OAAO,CAAE,GAAG,AACd,CAAC,AAED,uBAAQ,CAAC,OAAO,eAAC,CAAC,AAChB,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAMD,uBAAQ,CAAC,OAAO,eAAC,CAAC,AAChB,gBAAgB,CAAE,OAAO,CACzB,OAAO,CAAE,IAAI,CAAC,IAAI,AACpB,CAAC,AAED,uBAAQ,CAAC,KAAK,eAAC,CAAC,AACd,gBAAgB,CAAE,OAAO,CACzB,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,IAAI,CAAC,IAAI,AACpB,CAAC,AAED,uBAAQ,CAAC,KAAK,eAAC,CAAC,AACd,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,IAAI,CAAC,IAAI,AACpB,CAAC,AAOD,uBAAQ,CAAC,SAAS,eAAC,CAAC,AAClB,gBAAgB,CAAE,OAAO,CACzB,gBAAgB,CAAE,OAAO,CACzB,OAAO,CAAE,IAAI,CAAC,IAAI,AACpB,CAAC,AAUD,uBAAQ,CAAC,MAAM,eAAC,CAAC,AACf,gBAAgB,CAAE,OAAO,CACzB,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAsBD,WAAW,eAAC,CAAC,AACX,gBAAgB,CAAE,OAAO,CACzB,OAAO,CAAE,GAAG,CACZ,yBAAyB,CAAE,IAAI,AACjC,CAAC,AAED,0BAAW,CAAC,IAAI,QAAQ,eAAC,CAAC,AACxB,KAAK,CAAE,OAAO,CACd,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,0BAAW,CAAC,WAAW,eAAC,CAAC,AACvB,OAAO,CAAE,IAAI,CAAC,IAAI,CAClB,cAAc,CAAE,IAAI,CACpB,SAAS,CAAE,KAAK,CAChB,UAAU,CAAE,MAAM,CAClB,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,0BAAW,CAAC,yBAAyB,eAAC,CAAC,AACrC,OAAO,CAAE,GAAG,CAAC,GAAG,CAChB,cAAc,CAAE,IAAI,CACpB,UAAU,CAAE,MAAM,CAClB,MAAM,CAAE,OAAO,AACjB,CAAC,AAGD,0BAAW,CAAC,WAAW,0CAA2B,CAClD,0BAAW,CAAC,yBAAyB,0CAA2B,CAEhE,0BAAW,CAAC,yBAAyB,2BAA2B,eAAC,CAAC,AAChE,KAAK,CAAE,OAAO,AAChB,CAAC,AAGD,0BAAW,CAAC,WAAW,oCAAqB,CAC5C,0BAAW,CAAC,yBAAyB,qBAAqB,eAAC,CAAC,AAC1D,KAAK,CAAE,OAAO,AAChB,CAAC,AAGD,0BAAW,CAAC,WAAW,oCAAqB,CAC5C,0BAAW,CAAC,yBAAyB,qBAAqB,eAAC,CAAC,AAC1D,KAAK,CAAE,IAAI,gBAAgB,CAAC,AAC9B,CAAC,AAED,0BAAW,CAAC,GAAG,eAAC,CAAC,AACf,cAAc,CAAE,IAAI,CACpB,UAAU,CAAE,MAAM,CAClB,MAAM,CAAE,OAAO,AACjB,CAAC,AAMD,0BAAW,CAAC,aAAa,eAAC,CAAC,AACzB,OAAO,CAAE,IAAI,AACf,CAAC,AAED,0BAAW,CAAC,QAAQ,eAAC,CAAC,AACpB,aAAa,CAAE,IAAI,CACnB,SAAS,CAAE,MAAM,CACjB,UAAU,CAAE,MAAM,AAGpB,CAAC;AC1OH,WAAW,eAAC,CAAC,AACX,OAAO,CAAE,IAAI,CAAC,CAAC,CACf,SAAS,CAAE,KAAK,CAChB,KAAK,CAAE,KAAK,CACZ,gBAAgB,CAAE,OAAO,CACzB,UAAU,CAAE,MAAM,AACpB,CAAC,AAED,0BAAW,CAAC,IAAI,eAAC,CAAC,AAChB,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,KAAK,AAClB,CAAC,AAED,0BAAW,CAAC,yBAAyB,eAAC,CAAC,AACnC,OAAO,CAAE,GAAG,CAAC,GAAG,CAChB,UAAU,CAAE,MAAM,CAClB,MAAM,CAAE,OAAO,CACf,SAAS,CAAE,MAAM,AACnB,CAAC,AAIH,WAAW,2BAA2B,eACrC,CAAC,AACA,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,WAAW,qBAAqB,eAC/B,CAAC,AACA,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,KAAK,AACd,CAAC,AAGD,WAAW,oCAAqB,CAChC,yBAAyB,qBAAqB,eAC7C,CAAC,AACA,KAAK,CAAE,IAAI,gBAAgB,CAAC,AAC9B,CAAC,AAED,0BAAW,CAAC,IAAI,QAAQ,eAAC,CAAC,AACxB,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,0BAAW,CAAC,oBAAoB,eAAC,CAAC,AAChC,UAAU,CAAE,IAAI,CAChB,OAAO,CAAE,CAAC,CAAC,IAAI,CACf,SAAS,CAAE,KAAK,AAClB,CAAC,AAED,0BAAW,CAAC,QAAQ,eAAC,CAAC,AACpB,UAAU,CAAE,IAAI,CAChB,SAAS,CAAE,MAAM,AACnB,CAAC,AAED,0BAAW,CAAC,UAAU,eAAC,CAAC,AACtB,SAAS,CAAE,KAAK,AAClB,CAAC;ACzED,UAAU,eAAC,CAAC,AACV,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,IAAI,CACb,cAAc,CAAE,MAAM,CACtB,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,CAAC,CACR,GAAG,CAAE,CAAC,AACR,CAAC,AAED,yBAAU,CAAC,GAAG,eAAC,CAAC,AACd,WAAW,CAAE,IAAI,CACjB,MAAM,CAAE,OAAO,AACjB,CAAC,AAED,yBAAU,CAAC,GAAG,CAAC,GAAG,eAAC,CAAC,AAClB,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,GAAG,CAAC,IAAI,AACnB,CAAC,AAED,OAAO,sBAAO,MAAM,AAAC,CAAC,AACpB,OAAO,CAAE,GAAG,AACd,CAAC,AAED,sBAAO,OAAO,AAAC,CAAC,AACd,OAAO,CAAE,GAAG,AACd,CAAC,AAED,UAAU,cAAc,eAAC,CAAC,AACxB,OAAO,CAAE,IAAI,AACf,CAAC,AAED,OAAO,cAAc,eAAC,CAAC,AACrB,OAAO,CAAE,IAAI,AACf,CAAC,AAED,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,AAAC,CAAC,AACzC,UAAU,eAAC,CAAC,AACV,OAAO,CAAE,IAAI,AACf,CAAC,AACH,CAAC;ACjED,cAAc,cAAC,CAAC,AACd,SAAS,CAAE,IAAI,CACf,UAAU,CAAE,IAAI,CAChB,KAAK,CAAE,OAAO,CACd,YAAY,CAAE,GAAG,CACjB,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,GAAG,CACZ,gBAAgB,CAAE,OAAO,CACzB,sBAAsB,CAAE,IAAI,CAC5B,yBAAyB,CAAE,IAAI,CAC/B,OAAO,CAAE,IAAI,CACb,OAAO,CAAE,IAAI,CAAC,CAAC,AACjB,CAAC,AAED,OAAO,cAAC,CAAC,AACP,KAAK,CAAE,OAAO,CACd,KAAK,CAAE,KAAK,CACZ,UAAU,CAAE,MAAM,CAClB,MAAM,CAAE,CAAC,CAAC,IAAI,AAChB,CAAC,AAED,YAAY,cAAC,CAAC,AACZ,KAAK,CAAE,IAAI,AACb,CAAC,AAED,UAAU,cAAC,CAAC,AACV,KAAK,CAAE,KAAK,AACd,CAAC,AAED,OAAO,cAAC,CAAC,AACP,MAAM,CAAE,CAAC,CAAC,GAAG,AACf,CAAC,AAED,MAAM,cAAC,CAAC,AACN,YAAY,CAAE,IAAI,CAClB,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,qBAAO,CAAC,eAAC,CAAE,oBAAM,CAAC,CAAC,cAAC,CAAC,AACnB,eAAe,CAAE,IAAI,CACrB,UAAU,CAAE,MAAM,CAClB,KAAK,CAAE,KAAK,CACZ,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,qBAAO,CAAC,eAAC,MAAM,CAAE,oBAAM,CAAC,eAAC,MAAM,AAAC,CAAC,AAC/B,OAAO,CAAE,GAAG,AACd,CAAC,AAED,oBAAM,CAAC,CAAC,cAAC,CAAC,AACR,KAAK,CAAE,IAAI,AACb,CAAC;ACtBD,cAAc,cAAC,CAAC,AACd,UAAU,CAAE,IAAI,AAElB,CAAC,AAED,cAAc,UAAU,cAAC,CAAC,AACxB,UAAU,CAAE,IAAI,AAClB,CAAC,AAED,aAAa,cAAC,CAAC,AAEb,UAAU,CAAE,IAAI,CAChB,OAAO,CAAE,IAAI,CAAC,IAAI,CAClB,KAAK,CAAE,KAAK,CACZ,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,IAAI,CACjB,UAAU,CAAE,MAAM,CAClB,aAAa,CAAE,IAAI,CACnB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,2BAAa,CAAC,MAAM,cAAC,CAAC,AACpB,SAAS,CAAE,KAAK,CAEhB,OAAO,CAAE,GAAG,CACZ,aAAa,CAAE,GAAG,AACpB,CAAC,AAGD,2BAAa,CAAC,KAAK,cAAC,CAAC,AAEnB,OAAO,CAAE,KAAK,CACd,UAAU,CAAE,GAAG,CACf,SAAS,CAAE,KAAK,CAChB,OAAO,CAAE,GAAG,AACd,CAAC;ACDD,OAAO,eAAC,CAAC,AACP,MAAM,CAAE,KAAK,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAChD,OAAO,CAAE,IAAI,CACb,WAAW,CAAE,MAAM,AACrB,CAAC,AAED,QAAQ,eAAC,CAAC,AACR,OAAO,CAAE,YAAY,CACrB,UAAU,CAAE,MAAM,CAClB,YAAY,CAAE,IAAI,AACpB,CAAC,AAED,uBAAQ,CAAC,MAAM,eAAC,CAAC,AACf,cAAc,CAAE,GAAG,CACnB,aAAa,CAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAC9B,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,uBAAQ,CAAC,MAAM,iBAAiB,eAAC,CAAC,AAChC,KAAK,CAAE,OAAO,CACd,KAAK,CAAE,IAAI,YAAY,CAAC,AAC1B,CAAC,AAMD,QAAQ,eAAC,CAAC,AACR,OAAO,CAAE,WAAW,CACpB,WAAW,CAAE,MAAM,AACrB,CAAC,AAED,QAAQ,6BAAc,CAAC,OAAO,eAAC,CAAC,AAC9B,KAAK,CAAE,KAAK,AACd,CAAC,AAED,QAAQ,6BAAc,CAAC,MAAM,eAAC,CAAC,AAC7B,KAAK,CAAE,IAAI,SAAS,CAAC,AACvB,CAAC,AAED,OAAO,eAAC,CAAC,AACP,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,IAAI,CACZ,aAAa,CAAE,IAAI,CACnB,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,IAAI,CACb,eAAe,CAAE,MAAM,CACvB,WAAW,CAAE,MAAM,CACnB,YAAY,CAAE,GAAG,AACnB,CAAC,AAED,sBAAO,WAAW,AAAC,CAAC,AAClB,YAAY,CAAE,CAAC,AACjB,CAAC,AAEc,OAAO,SAAS,eAAe,CAAC,AAC7C,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,OAAO,SAAS,eAAC,CAAC,AAChB,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,OAAO,SAAS,eAAC,CAAC,AAChB,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,OAAO,OAAO,eAAC,CAAC,AACd,KAAK,CAAE,IAAI,SAAS,CAAC,AACvB,CAAC,AAED,sBAAO,MAAM,AAAC,CAAC,AACb,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,GAAG,AACd,CAAC;ACzDD,SAAS,cAAC,CAAC,AACT,QAAQ,CAAE,QAAQ,CAElB,MAAM,CAAE,GAAG,CACX,KAAK,CAAE,IAAI,AACb,CAAC,AAED,SAAS,mBAAmB,cAAC,CAAC,AAC5B,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,GAAG,AACd,CAAC,AAED,MAAM,cAAC,CAAC,AACN,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,KAAK,cAAC,CAAC,AACL,OAAO,CAAE,IAAI,CACb,cAAc,CAAE,MAAM,CACtB,eAAe,CAAE,MAAM,CAEvB,MAAM,CAAE,IAAI,AAEd,CAAC,AAED,aAAa,cAAC,CAAC,AACb,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,CAAC,CAAC,IAAI,CAEd,SAAS,CAAE,IAAI,CACf,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,OAAO,CACf,WAAW,CAAE,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,AAC/D,CAAC,AAED,SAAS,qBAAO,CAAC,2BAAa,MAAM,AAAC,CAAC,AACpC,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,sBAAsB,cAAC,CAAC,AACtB,KAAK,CAAE,IAAI,AACb,CAAC,AAED,oCAAsB,CAAC,IAAI,cAAC,CAAC,AAC3B,KAAK,CAAE,KAAK,AACd,CAAC;ACtBD,OAAO,eAAC,CAAC,AAGP,MAAM,CAAE,KAAK,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAChD,OAAO,CAAE,IAAI,CACb,WAAW,CAAE,MAAM,AACrB,CAAC,AAED,QAAQ,eAAC,CAAC,AACR,OAAO,CAAE,YAAY,CACrB,UAAU,CAAE,MAAM,CAClB,YAAY,CAAE,IAAI,AACpB,CAAC,AAED,uBAAQ,CAAC,MAAM,eAAC,CAAC,AACf,cAAc,CAAE,GAAG,CACnB,aAAa,CAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAC9B,aAAa,CAAE,GAAG,AACpB,CAAC,AAMD,uBAAQ,CAAC,MAAM,aAAa,eAAC,CAAC,AAC5B,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,QAAQ,eAAC,CAAC,AACR,OAAO,CAAE,WAAW,CACpB,WAAW,CAAE,MAAM,AACrB,CAAC,AAED,OAAO,eAAC,CAAC,AACP,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,IAAI,CACZ,aAAa,CAAE,IAAI,CACnB,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,IAAI,CACb,eAAe,CAAE,MAAM,CACvB,WAAW,CAAE,MAAM,CACnB,YAAY,CAAE,GAAG,AACnB,CAAC,AAED,sBAAO,WAAW,AAAC,CAAC,AAClB,YAAY,CAAE,CAAC,AACjB,CAAC,AAED,OAAO,qBAAM,CAAoB,OAAO,KAAK,eAAC,CAAC,AAC7C,KAAK,CAAE,OAAO,AAChB,CAAC,AAyBD,sBAAO,MAAM,AAAC,CAAC,AACb,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,GAAG,AACd,CAAC;AC9HD,WAAW,eAAC,CAAC,AACX,UAAU,CAAE,IAAI,CAChB,WAAW,CAAE,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAC7D,KAAK,CAAE,GAAG,CACV,KAAK,CAAE,IAAI,AACb,CAAC,AAED,WAAW,sBAAO,CAAC,qBAAM,MAAM,AAAC,CAAC,AAC/B,OAAO,CAAE,GAAG,AACd,CAAC,AAED,cAAc,eAAC,CAAC,AACd,eAAe,CAAE,SAAS,AAC5B,CAAC,AAED,MAAM,eAAC,CAAC,AACN,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,CAAC,CAAC,IAAI,CACd,gBAAgB,CAAE,OAAO,CACzB,MAAM,CAAE,CAAC,CACT,KAAK,CAAE,KAAK,CACZ,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,OAAO,CACf,MAAM,CAAE,GAAG,CACX,KAAK,CAAE,KAAK,CACZ,aAAa,CAAE,GAAG,AACpB,CAAC,AAED,MAAM,uBAAQ,CAAE,MAAM,aAAa,eAAC,CAAC,AACnC,OAAO,CAAE,CAAC,CAAC,IAAI,AACjB,CAAC,AAED,MAAM,QAAQ,eAAC,CAAC,AACd,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,MAAM,aAAa,eAAC,CAAC,AACnB,gBAAgB,CAAE,OAAO,AAC3B,CAAC;ACvBD,gCAAkB,CAAC,GAAG,cAAC,CAAC,AACtB,WAAW,CAAE,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAC7D,KAAK,CAAE,GAAG,CACV,KAAK,CAAE,IAAI,AACb,CAAC,AAED,QAAQ,cAAC,CAAC,AACR,UAAU,CAAE,IAAI,CAChB,WAAW,CAAE,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAC7D,KAAK,CAAE,GAAG,CACV,KAAK,CAAE,IAAI,AACb,CAAC,AAED,sBAAQ,CAAC,EAAE,cAAC,CAAC,AACX,KAAK,CAAE,IAAI,YAAY,CAAC,AAC1B,CAAC,AAED,sBAAQ,CAAC,EAAE,cAAC,CAAC,AACX,KAAK,CAAE,IAAI,UAAU,CAAC,AACxB,CAAC,AAED,0BAAY,CAAC,IAAI,MAAM,cAAC,CAAC,AACvB,KAAK,CAAE,IAAI,SAAS,CAAC,AACvB,CAAC,AAED,0BAAY,CAAC,IAAI,cAAC,CAAC,AACjB,KAAK,CAAE,IAAI,mBAAmB,CAAC,AACjC,CAAC;ACjGD,oBAAoB,cAAC,CAAC,AACpB,KAAK,CAAE,IAAI,AACb,CAAC,AAED,MAAM,cAAC,CAAC,AAGN,KAAK,CAAE,IAAI,CACX,UAAU,CAAE,IAAI,CAChB,cAAc,CAAE,IAAI,CACpB,KAAK,CAAE,OAAO,CACd,UAAU,CAAE,MAAM,AACpB,CAAC,AAED,YAAY,cAAC,CAAC,AACZ,OAAO,CAAE,IAAI,CACb,eAAe,CAAE,MAAM,CACvB,OAAO,CAAE,GAAG,AACd,CAAC,AAED,KAAK,cAAC,CAAC,AAEL,SAAS,CAAE,GAAG,CACd,MAAM,CAAE,IAAI,CAEZ,OAAO,CAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAC1B,sBAAsB,CAAE,IAAI,CAC5B,yBAAyB,CAAE,IAAI,AACjC,CAAC,AAED,oBAAoB,kBAAI,CAAC,mBAAK,CAAE,oBAAoB,kBAAI,CAAC,SAAS,cAAC,CAAC,AAClE,MAAM,CAAE,KAAK,CACb,SAAS,CAAE,KAAK,AAClB,CAAC,AAED,SAAS,cAAC,CAAC,AACT,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,GAAG,CACd,MAAM,CAAE,IAAI,CAEZ,OAAO,CAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAC1B,gBAAgB,CAAE,IAAI,CACtB,uBAAuB,CAAE,IAAI,CAC7B,0BAA0B,CAAE,IAAI,AAClC,CAAC,AAED,0BAAY,CAAC,UAAU,cAAC,CAAC,AACvB,KAAK,CAAE,IAAI,AACb,CAAC;AC5CD,uBAAQ,CAAE,OAAO,eAAC,CAAC,AACjB,UAAU,CAAE,MAAM,CAClB,KAAK,CAAE,KAAK,CACZ,SAAS,CAAE,IAAI,CACf,MAAM,CAAE,IAAI,CAEZ,OAAO,CAAE,IAAI,CACb,cAAc,CAAE,MAAM,CACtB,eAAe,CAAE,MAAM,AACzB,CAAC,AAED,QAAQ,eAAC,CAAC,AACR,QAAQ,CAAE,QAAQ,CAClB,OAAO,CAAE,CAAC,CAAC,IAAI,CACf,IAAI,CAAE,CAAC,CACP,MAAM,CAAE,CAAC,AACX,CAAC,AAED,QAAQ,kCAAmB,CAAE,OAAO,mBAAmB,eAAC,CAAC,AACvD,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,GAAG,AACd,CAAC,AAED,QAAQ,mBAAmB,eAAC,CAAC,AAC3B,uBAAuB,CAAE,IAAI,AAC/B,CAAC,AAED,OAAO,mBAAmB,eAAC,CAAC,AAC1B,sBAAsB,CAAE,IAAI,AAC9B,CAAC,AAED,uBAAQ,CAAC,MAAM,eAAC,CAAC,AACf,WAAW,CAAE,GAAG,AAClB,CAAC,AAED,uBAAQ,CAAC,IAAI,eAAC,CAAC,AACb,YAAY,CAAE,GAAG,AACnB,CAAC,AAED,OAAO,eAAC,CAAC,AACP,QAAQ,CAAE,QAAQ,CAClB,OAAO,CAAE,CAAC,CAAC,IAAI,CACf,KAAK,CAAE,CAAC,CACR,MAAM,CAAE,CAAC,CACT,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,sBAAO,CAAC,MAAM,eAAC,CAAC,AACd,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,uBAAQ,CAAC,GAAG,eAAC,CAAC,AACZ,MAAM,CAAE,IAAI,AACd,CAAC,AAED,sBAAO,CAAC,GAAG,eAAC,CAAC,AACX,MAAM,CAAE,IAAI,AACd,CAAC,AAED,sBAAO,CAAC,IAAI,eAAC,CAAC,AACZ,YAAY,CAAE,GAAG,AACnB,CAAC;ACDD,KAAK,AAAC,CAAC,AACL,4BAA4B,CAAE,IAAI,CAClC,0BAA0B,CAAE,GAAG,AACjC,CAAC,AAED,aAAa,cAAC,CAAC,AACb,MAAM,CAAE,IAAI,4BAA4B,CAAC,CAEzC,gBAAgB,CAAE,IAAI,CAEtB,OAAO,CAAE,IAAI,CACb,WAAW,CAAE,MAAM,CACnB,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,KAAK,CAEZ,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,CAAC,CAAC,GAAG,CACd,aAAa,CAAE,IAAI,CAEnB,yBAAyB,CAAE,IAAI,CAC/B,0BAA0B,CAAE,IAAI,AAElC,CAAC,AAED,aAAa,iBAAiB,cAAC,CAAC,AAC9B,MAAM,CAAE,IAAI,0BAA0B,CAAC,CAEvC,gBAAgB,CAAE,WAAW,CAE7B,KAAK,CAAE,IAAI,CACX,OAAO,CAAE,CAAC,CACV,MAAM,CAAE,CAAC,CAET,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,CAAC,CACP,MAAM,CAAE,CAAC,AACX,CAAC,AAED,2BAAa,CAAC,SAAS,cAAC,CAAC,AACvB,MAAM,CAAE,IAAI,4BAA4B,CAAC,CAEzC,KAAK,CAAE,EAAE,CAET,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,GAAG,CACT,GAAG,CAAE,GAAG,CAER,yBAAyB,CAAE,IAAI,CAC/B,0BAA0B,CAAE,IAAI,AAGlC,CAAC,AAED,aAAa,+BAAiB,CAAC,SAAS,cAAC,CAAC,AACxC,OAAO,CAAE,GAAG,AACd,CAAC,AAED,aAAa,+BAAiB,CAAC,SAAS,cAAC,CAAC,AACxC,MAAM,CAAE,IAAI,0BAA0B,CAAC,AACzC,CAAC,AAED,aAAa,+BAAiB,CAAC,2BAAa,CAC5C,aAAa,+BAAiB,CAAC,yBAAW,CAC1C,aAAa,+BAAiB,CAAC,iBAAiB,cACM,CAAC,AACrD,OAAO,CAAE,IAAI,AACf,CAAC,AAED,2BAAa,CAAC,aAAa,cAAC,CAAC,AAC3B,OAAO,CAAE,KAAK,CACd,cAAc,CAAE,IAAI,CACpB,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,2BAAa,CAAC,WAAW,cAAC,CAAC,AACzB,OAAO,CAAE,KAAK,CACd,WAAW,CAAE,IAAI,CACjB,KAAK,CAAE,CAAC,CACR,cAAc,CAAE,IAAI,AACtB,CAAC,AAED,aAAa,wCAA0B,CAAC,2BAAa,CACrD,aAAa,wCAA0B,CAAC,WAAW,cAAC,CAAC,AACnD,OAAO,CAAE,KAAK,CACd,SAAS,CAAE,KAAK,CAChB,aAAa,CAAE,IAAI,AACrB,CAAC,AAED,aAAa,wCAA0B,CAAC,aAAa,cAAC,CAAC,AACrD,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,aAAa,wCAA0B,CAAC,WAAW,cAAC,CAAC,AACnD,YAAY,CAAE,IAAI,AACpB,CAAC,AAED,iBAAiB,cAAC,CAAC,AACjB,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,+BAAiB,CAAC,IAAI,cAAC,CAAC,AACtB,WAAW,CAAE,IAAI,AACnB,CAAC;AC7JD,SAAS,eAAC,CAAC,AACT,UAAU,CAAE,IAAI,CAChB,SAAS,CAAE,KAAK,CAChB,OAAO,CAAE,GAAG,CACZ,gBAAgB,CAAE,OAAO,CACzB,sBAAsB,CAAE,IAAI,CAC5B,yBAAyB,CAAE,IAAI,CAC/B,OAAO,CAAE,GAAG,CAAC,IAAI,AACnB,CAAC,AAED,KAAK,eAAC,CAAC,AACL,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,CAAC,CAAC,IAAI,CACd,KAAK,CAAE,IAAI,AAEb,CAAC,AAED,KAAK,MAAM,eAAC,CAAC,AACX,KAAK,CAAE,KAAK,AACd,CAAC,AAED,oBAAK,CAAC,YAAY,eAAC,CAAC,AAClB,SAAS,CAAE,KAAK,CAEhB,KAAK,CAAE,IAAI,iBAAiB,CAAC,AAC/B,CAAC,AAED,kBAAG,CAAE,MAAM,eAAC,CAAC,AACX,KAAK,CAAE,IAAI,CACX,UAAU,CAAE,MAAM,CAClB,OAAO,CAAE,YAAY,AACvB,CAAC,AAED,GAAG,eAAC,CAAC,AACH,OAAO,CAAE,IAAI,CACb,KAAK,CAAE,IAAI,gBAAgB,CAAC,AAC9B,CAAC,AAMD,KAAK,qBAAM,CAAC,GAAG,eAAC,CAAC,AACf,OAAO,CAAE,YAAY,AACvB,CAAC,AAED,KAAK,qBAAM,CAAC,MAAM,eAAC,CAAC,AAClB,OAAO,CAAE,IAAI,AACf,CAAC;ACjED,oBAAoB,eAAC,CAAC,AACpB,UAAU,CAAE,IAAI,CAChB,WAAW,CAAE,IAAI,AACnB,CAAC,AAED,OAAO,eAAC,CAAC,AACP,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,IAAI,CACb,eAAe,CAAE,MAAM,CACvB,gBAAgB,CAAE,IAAI,CACtB,OAAO,CAAE,IAAI,CACb,aAAa,CAAE,IAAI,CACnB,aAAa,CAAE,GAAG,CAClB,SAAS,CAAE,KAAK,CAChB,KAAK,CAAE,KAAK,AACd,CAAC,AAED,sBAAO,MAAM,AAAC,CAAC,AACb,gBAAgB,CAAE,IAAI,AACxB,CAAC;ACCC,KAAK,AAAC,CAAC,AACL,WAAW,CAAE,OAAO,CACpB,gBAAgB,CAAE,OAAO,CACzB,uBAAuB,CAAE,IAAI,CAG7B,WAAW,CAAE,OAAO,CACpB,aAAa,CAAE,OAAO,CACtB,aAAa,CAAE,OAAO,CACtB,gBAAgB,CAAE,OAAO,CACzB,uBAAuB,CAAE,IAAI,AAC/B,CAAC,AAED,GAAG,cAAC,CAAC,AACH,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,OAAO,CAAE,GAAG,AACd,CAAC,AAED,WAAW,cAAC,CAAC,AAEX,MAAM,CAAE,IAAI,WAAW,CAAC,CAExB,IAAI,CAAE,IAAI,WAAW,CAAC,AACxB,CAAC,AACD,MAAM,cAAC,CAAC,AACN,OAAO,CAAE,IAAI,CAEb,MAAM,CAAE,IAAI,aAAa,CAAC,CAC1B,YAAY,CAAE,CAAC,AACjB,CAAC,AACD,MAAM,cAAC,CAAC,AAEN,MAAM,CAAE,IAAI,aAAa,CAAC,CAC1B,YAAY,CAAE,CAAC,AACjB,CAAC,AACD,KAAK,cAAC,CAAC,AAEL,MAAM,CAAE,IAAI,gBAAgB,CAAC,CAC7B,YAAY,CAAE,CAAC,AACjB,CAAC,AACD,OAAO,cAAC,CAAC,AAEP,MAAM,CAAE,IAAI,gBAAgB,CAAC,CAC7B,YAAY,CAAE,CAAC,AACjB,CAAC,AACD,qBAAO,CAAE,qBAAqB,cAAC,CAAC,AAE9B,MAAM,CAAE,IAAI,uBAAuB,CAAC,AAGtC,CAAC,AACD,qBAAqB,cAAC,CAAC,AACrB,YAAY,CAAE,CAAC,AACjB,CAAC;ACrCH,MAAM,cAAC,CAAC,AAEN,KAAK,CAAE,KAAK,CACZ,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,IAAI,CACjB,cAAc,CAAE,IAAI,AACtB,CAAC,AAED,KAAK,cAAC,CAAC,AACL,SAAS,CAAE,IAAI,AACjB,CAAC,AAED,KAAK,cAAC,CAAC,AACL,UAAU,CAAE,IAAI,CAChB,SAAS,CAAE,GAAG,CACd,KAAK,CAAE,KAAK,AACd,CAAC,AAED,mBAAK,CAAC,IAAI,cAAC,CAAC,AACV,KAAK,CAAE,OAAO,AAChB,CAAC,AAED,aAAa,cAAC,CAAC,AACb,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,YAAY,CACrB,OAAO,CAAE,CAAC,CAAC,IAAI,CACf,aAAa,CAAE,GAAG,CAClB,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,mBAAK,CAAC,GAAG,qBAAqB,cAAC,CAAC,AAC9B,SAAS,CAAE,KAAK,AAClB,CAAC;AC7ED,aAAa,eAAC,CAAC,AAEb,UAAU,CAAE,IAAI,AAClB,CAAC,AAED,4BAAa,CAAC,GAAG,UAAU,eAAC,CAAC,AAC3B,KAAK,CAAE,IAAI,CACX,KAAK,CAAE,IAAI,CACX,YAAY,CAAE,IAAI,CAClB,MAAM,CAAE,OAAO,CAAC,CAAC,AACnB,CAAC;ACqED,mBAAmB,cAAC,CAAC,AACnB,OAAO,CAAE,IAAI,CACb,QAAQ,CAAE,IAAI,AAChB,CAAC,AAED,MAAM,cAAC,CAAC,AAEN,OAAO,CAAE,GAAG,CACZ,MAAM,CAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CACvB,aAAa,CAAE,GAAG,CAClB,KAAK,CAAE,IAAI,CACX,YAAY,CAAE,GAAG,CACjB,MAAM,CAAE,IAAI,CACZ,gBAAgB,CAAE,OAAO,CACzB,UAAU,CAAE,GAAG,AACjB,CAAC,AAED,oBAAM,OAAO,AAAC,CAAC,AACb,OAAO,CAAE,GAAG,AACd,CAAC,AAED,MAAM,KAAK,cAAC,CAAC,AACX,gBAAgB,CAAE,OAAO,AAC3B,CAAC,AAED,mBAAmB,qBAAO,CAAC,oBAAM,MAAM,AAAC,CAAC,AACvC,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,GAAG,AACd,CAAC;ACvGD,iBAAiB,eAAC,CAAC,AACjB,UAAU,CAAE,MAAM,AACpB,CAAC,AAED,SAAS,eAAC,CAAC,AAKT,KAAK,CAAE,KAAK,CACZ,KAAK,CAAE,OAAO,CAGd,UAAU,CAAE,MAAM,CAClB,MAAM,CAAE,CAAC,CAAC,IAAI,CAId,aAAa,CAAE,IAAI,CACnB,OAAO,CAAE,YAAY,CAMrB,SAAS,CAAE,KAAK,CAChB,UAAU,CAAE,IAAI,AAClB,CAAC,AAED,iBAAiB,oBAAK,CAAC,SAAS,eAAC,CAAC,AAChC,SAAS,CAAE,KAAK,CAEhB,UAAU,CAAE,IAAI,CAChB,OAAO,CAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,AAE9B,CAAC,AAMD,wBAAS,CAAC,IAAI,eAAC,CAAC,AACd,KAAK,CAAE,IAAI,AACb,CAAC" + "mappings": "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" } \ No newline at end of file diff --git a/apps/gui/frontend/+app/public/bundle.js b/apps/gui/frontend/+app/public/bundle.js index 926fd07c6..2e2bb9ef5 100644 --- a/apps/gui/frontend/+app/public/bundle.js +++ b/apps/gui/frontend/+app/public/bundle.js @@ -1,32 +1,31754 @@ -var app=function(e){"use strict";function t(){}function n(e,t){for(var n in t)e[n]=t[n];return e}function i(e,t){for(var n in t)e[n]=1;return e}function r(e,t){return 0===t&&e(),()=>{--t||e()}}function s(e){e()}function o(e,t){e.appendChild(t)}function c(e,t,n){e.insertBefore(t,n)}function a(e){e.parentNode.removeChild(e)}function l(e,t){for(;e.nextSibling&&e.nextSibling!==t;)e.parentNode.removeChild(e.nextSibling)}function d(e,t){for(var n=0;n{this.fire("escape"),this.set({touchPressed:void 0})},0)):this.fire("escape")}};function Z(e,t){var n,i,r,s,l,d=t.$device&&N(e,t);return{c(){n=A("div"),(i=A("span")).textContent="✖",r=h("\n "),d&&d.c(),s=h("\n\n "),(l=A("div")).innerHTML='
\n\t\t\t ✖\n\t\t\t
',i.className="error svelte-ybcte6",n.id="device",n.className="svelte-ybcte6",l.id="top_icons"},m(e,t){c(e,n,t),o(n,i),o(n,r),d&&d.m(n,null),c(e,s,t),c(e,l,t)},p(t,i){i.$device?d?d.p(t,i):((d=N(e,i)).c(),d.m(n,null)):d&&(d.d(1),d=null)},d(e){e&&a(n),d&&d.d(),e&&(a(s),a(l))}}}function N(e,t){var n,i,r=t.$device.deviceName||"";return{c(){n=A("h3"),i=h(r),n.id="title",n.className="svelte-ybcte6"},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$device&&r!==(r=t.$device.deviceName||"")&&w(i,r)},d(e){e&&a(n)}}}function H(e){var t,i,r,o,l;B(this,e),this._state=n(this.store._init(["connected","device"]),e.data),this.store._add(this,["connected","device"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,i=this._state,l=0==i.$connected&&Z(t,i),{c(){l&&l.c(),r=f()},m(e,t){l&&l.m(e,t),c(e,r,t),o=!0},p(e,n){0==n.$connected?l?l.p(e,n):((l=Z(t,n)).c(),l.m(r.parentNode,r)):l&&(l.d(1),l=null)},i(e,t){o||this.m(e,t)},o:s,d(e){l&&l.d(e),e&&a(r)}}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor)),this._intro=!0}n(H.prototype,O),n(H.prototype,P);const k="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAADAEAAAwBAGZkNF0AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAwBQTFRF////HR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0b9nXxIQAAAP90Uk5TAAECAwQF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";function j(){this.set({wifiIconInline:k})}function x(e,t){var n,i,r,s,l,d,u,m,f,v,p,g,y=t.$device.apInfo.ssid,b=t.$device.apInfo.password;return{c(){n=A("div"),i=A("img"),r=h("\n "),s=A("div"),(l=A("b")).textContent="SSID:",d=h(" "),u=h(y),m=h("\n "),f=A("div"),(v=A("b")).textContent="Pass:",p=h(" "),g=h(b),i.src=t.wifiIconInline,i.className="wifi_icon svelte-1v5x43o",i.alt="wifi icon",n.className="ap_wifi_info svelte-1v5x43o"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),o(s,l),o(s,d),o(s,u),o(n,m),o(n,f),o(f,v),o(f,p),o(f,g)},p(e,t){e.wifiIconInline&&(i.src=t.wifiIconInline),e.$device&&y!==(y=t.$device.apInfo.ssid)&&w(u,y),e.$device&&b!==(b=t.$device.apInfo.password)&&w(g,b)},d(e){e&&a(n)}}}function X(e){var t,r,o,l;B(this,e),this._state=n(this.store._init(["device"]),e.data),this.store._add(this,["device"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(this,t=this._state,l=t.$device&&t.$device.apMode&&t.$device.apInfo&&x(0,t),{c(){l&&l.c(),r=f()},m(e,t){l&&l.m(e,t),c(e,r,t),o=!0},p(e,t){t.$device&&t.$device.apMode&&t.$device.apInfo?l?l.p(e,t):((l=x(0,t)).c(),l.m(r.parentNode,r)):l&&(l.d(1),l=null)},i(e,t){o||this.m(e,t)},o:s,d(e){l&&l.d(e),e&&a(r)}}),this.root._oncreate.push(()=>{j.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function T(e,t){return t.find(({deviceName:t})=>t==e)}n(X.prototype,O);var S={switchToDevice(e){e.port=e.guiPort,this.store.switch(e)},switchToThisDevice(){this.store.switch()}};function L(){this.store.entangle(this)}function J(e){const{component:t,ctx:n}=this._svelte;t.switchToDevice(n.device)}function Y(e,t,n){const i=Object.create(e);return i.device=t[n],i}function G(e,t){var n,i=t.$connected&&t.$device&&W(e,t);return{c(){i&&i.c(),n=f()},m(e,t){i&&i.m(e,t),c(e,n,t)},p(t,r){r.$connected&&r.$device?i?i.p(t,r):((i=W(e,r)).c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(e){i&&i.d(e),e&&a(n)}}}function W(e,t){var n,i,r,s=t.thisDeviceName!=t.selectedDeviceName&&K(e,t),l=!t.homebase&&t.homebaseName&&t.$nearbyDevices&&T(t.homebaseName,t.$nearbyDevices)&&Q(e,t),d=!t.disableDeviceSelector&&t.$nearbyDevices&&t.$nearbyDevices.length>0&&_(e,t);return{c(){n=A("div"),s&&s.c(),i=h("\n\n "),l&&l.c(),r=h("\n\n "),d&&d.c(),n.className="nearby_handy_links svelte-zncg7e",b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t),s&&s.m(n,null),o(n,i),l&&l.m(n,null),o(n,r),d&&d.m(n,null)},p(t,o){o.thisDeviceName!=o.selectedDeviceName?s?s.p(t,o):((s=K(e,o)).c(),s.m(n,i)):s&&(s.d(1),s=null),!o.homebase&&o.homebaseName&&o.$nearbyDevices&&T(o.homebaseName,o.$nearbyDevices)?l?l.p(t,o):((l=Q(e,o)).c(),l.m(n,r)):l&&(l.d(1),l=null),!o.disableDeviceSelector&&o.$nearbyDevices&&o.$nearbyDevices.length>0?d?d.p(t,o):((d=_(e,o)).c(),d.m(n,null)):d&&(d.d(1),d=null),t.atRPi&&b(n,"nonRPi",!o.atRPi)},d(e){e&&a(n),s&&s.d(),l&&l.d(),d&&d.d()}}}function K(e,t){var n,i,r,s,l=t.$nearbyDevices&&T(t.deviceName,t.$nearbyDevices)&&T(t.deviceName,t.$nearbyDevices).playing&&F(e,t);function d(t){e.switchToThisDevice()}return{c(){n=A("div"),i=A("button"),l&&l.c(),r=h("\n\n "),s=h(t.thisDeviceName),v(i,"click",d),i.className="home svelte-zncg7e",n.className="device"},m(e,t){c(e,n,t),o(n,i),l&&l.m(i,null),o(i,r),o(i,s)},p(t,n){n.$nearbyDevices&&T(n.deviceName,n.$nearbyDevices)&&T(n.deviceName,n.$nearbyDevices).playing?l?l.p(t,n):((l=F(e,n)).c(),l.m(i,r)):l&&(l.d(1),l=null),t.thisDeviceName&&w(s,n.thisDeviceName)},d(e){e&&a(n),l&&l.d(),p(i,"click",d)}}}function F(e,t){var n,i="video"==t.$nearbyDevices.find(({_deviceName:e})=>t.deviceName==e).mediaType?" ▶":" ♫";return{c(){n=h(i)},m(e,t){c(e,n,t)},p(e,t){(e.$nearbyDevices||e.deviceName)&&i!==(i="video"==t.$nearbyDevices.find(({_deviceName:e})=>t.deviceName==e).mediaType?" ▶":" ♫")&&w(n,i)},d(e){e&&a(n)}}}function Q(e,t){var n,i,r,s,l=T(t.homebaseName,t.$nearbyDevices).playing&&U(e,t);function d(n){e.switchToDevice(T(t.homebaseName,t.$nearbyDevices))}return{c(){n=A("div"),i=A("button"),l&&l.c(),r=h("\n\n "),s=h(t.homebaseName),v(i,"click",d),i.className="svelte-zncg7e",n.className="device"},m(e,t){c(e,n,t),o(n,i),l&&l.m(i,null),o(i,r),o(i,s)},p(n,o){T((t=o).homebaseName,t.$nearbyDevices).playing?l?l.p(n,t):((l=U(e,t)).c(),l.m(i,r)):l&&(l.d(1),l=null),n.homebaseName&&w(s,t.homebaseName)},d(e){e&&a(n),l&&l.d(),p(i,"click",d)}}}function U(e,t){var n,i="video"==T(t.homebaseName,t.$nearbyDevices).mediaType?" ▶":" ♫";return{c(){n=h(i)},m(e,t){c(e,n,t)},p(e,t){(e.homebaseName||e.$nearbyDevices)&&i!==(i="video"==T(t.homebaseName,t.$nearbyDevices).mediaType?" ▶":" ♫")&&w(n,i)},d(e){e&&a(n)}}}function _(e,t){for(var n,i=t.$nearbyDevices.sort((e,t)=>e.deviceNamet.deviceName?1:0),r=[],s=0;se.deviceNamet.deviceName?1:0);for(var o=0;o{L.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(ne.prototype,O),n(ne.prototype,S);var ie={select(e){this.get().atRPi?(this.set({touchPressed:e}),setTimeout(()=>this.fire("select",{view:e}),0)):this.fire("select",{view:e})}};function re(){this.store.entangle(this)}function se(e,t){var n,i,r,s,o=[ce,oe],l=[];function d(e){return e.$connected&&e.$device?0:1}return n=d(t),i=l[n]=o[n](e,t),{c(){i.c(),r=f()},m(e,t){l[n].m(e,t),c(e,r,t),s=!0},p(t,s){var c=n;(n=d(s))===c?l[n].p(t,s):(i.o((function(){l[c].d(1),l[c]=null})),(i=l[n])||(i=l[n]=o[n](e,s)).c(),i.m(r.parentNode,r))},i(e,t){s||this.m(e,t)},o(e){s&&(i?i.o(e):e(),s=!1)},d(e){l[n].d(e),e&&a(r)}}}function oe(e,n){var i,r;return{c(){(i=A("div")).textContent="✖",i.id="broken_connection",i.className="svelte-1lf904p"},m(e,t){c(e,i,t),r=!0},p:t,i(e,t){r||this.m(e,t)},o:s,d(e){e&&a(i)}}}function ce(e,t){var n,i,r,s,l,d,u,m,g,w,y,I,V,E,R,z=e._slotted.default;function q(t){e.select("player")}function B(t){e.select("clock")}var M=t.isDevUser&&ae(e,t);function C(e){return e.atRPi?le:de}var D=C(t),O=D(e,t);function P(t){e.select("device")}var Z=t.selectedDeviceName&&ue(e,t);return{c(){n=A("div"),i=A("div"),(r=A("div")).textContent="Player",s=h("\n "),(l=A("div")).textContent="Clock",d=h("\n\n "),M&&M.c(),u=h("\n\n "),m=A("div"),O.c(),g=h("\n "),(w=A("div")).textContent="Device",y=h("\n\n "),I=A("div"),Z&&Z.c(),V=h("\n\n "),v(r,"click",q),r.className="player svelte-1lf904p",b(r,"touch_pressed","player"==t.touchPressed),v(l,"click",B),l.className="clock svelte-1lf904p",b(l,"touch_pressed","clock"==t.touchPressed),i.className="options svelte-1lf904p",v(w,"click",P),w.className="device svelte-1lf904p",b(w,"touch_pressed","device"==t.touchPressed),m.className="options svelte-1lf904p",I.className="deviceInfo svelte-1lf904p",n.className="selector svelte-1lf904p",b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t),o(n,i),o(i,r),o(i,s),o(i,l),o(n,d),M&&M.m(n,null),o(n,u),o(n,m),O.m(m,null),o(m,g),o(m,w),o(n,y),o(n,I),Z&&Z.m(I,null),o(n,V),z&&(o(n,E||(E=f())),o(n,z)),R=!0},p(t,i){t.touchPressed&&(b(r,"touch_pressed","player"==i.touchPressed),b(l,"touch_pressed","clock"==i.touchPressed)),i.isDevUser?M?M.p(t,i):((M=ae(e,i)).c(),M.m(n,u)):M&&(M.d(1),M=null),D===(D=C(i))&&O?O.p(t,i):(O.d(1),(O=D(e,i)).c(),O.m(m,g)),t.touchPressed&&b(w,"touch_pressed","device"==i.touchPressed),i.selectedDeviceName?(Z?Z.p(t,i):(Z=ue(e,i))&&Z.c(),Z.i(I,null)):Z&&Z.o((function(){Z.d(1),Z=null})),t.atRPi&&b(n,"nonRPi",!i.atRPi)},i(e,t){R||this.m(e,t)},o(e){R&&(Z?Z.o(e):e(),R=!1)},d(e){e&&a(n),p(r,"click",q),p(l,"click",B),M&&M.d(),O.d(),p(w,"click",P),Z&&Z.d(),z&&function(e,t){for(;e.nextSibling;)t.appendChild(e.nextSibling)}(E,z)}}}function ae(e,t){var n,i;function r(t){e.select("ambience")}return{c(){n=A("div"),(i=A("div")).textContent="Ambience",v(i,"click",r),i.className="ambience svelte-1lf904p",b(i,"touch_pressed","ambience"==t.touchPressed),n.className="options svelte-1lf904p"},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.touchPressed&&b(i,"touch_pressed","ambience"==t.touchPressed)},d(e){e&&a(n),p(i,"click",r)}}}function le(e,t){var n;function i(t){e.select("help")}return{c(){(n=A("div")).textContent="Help",v(n,"click",i),n.className="help svelte-1lf904p",b(n,"touch_pressed","help"==t.touchPressed)},m(e,t){c(e,n,t)},p(e,t){e.touchPressed&&b(n,"touch_pressed","help"==t.touchPressed)},d(e){e&&a(n),p(n,"click",i)}}}function de(e,t){var n;function i(t){e.select("apps")}return{c(){(n=A("div")).textContent="Apps",v(n,"click",i),n.className="apps svelte-1lf904p",b(n,"touch_pressed","apps"==t.touchPressed)},m(e,t){c(e,n,t)},p(e,t){e.touchPressed&&b(n,"touch_pressed","apps"==t.touchPressed)},d(e){e&&a(n),p(n,"click",i)}}}function ue(e,t){var n,i,r,s,o=[me,Ae],l=[];function d(e){return e.$device.demoDevice?0:1}return n=d(t),i=l[n]=o[n](e,t),{c(){i.c(),r=f()},m(e,t){l[n].m(e,t),c(e,r,t),s=!0},p(t,s){var c=n;(n=d(s))===c?l[n].p(t,s):(i.o((function(){l[c].d(1),l[c]=null})),(i=l[n])||(i=l[n]=o[n](e,s)).c(),i.m(r.parentNode,r))},i(e,t){s||this.m(e,t)},o(e){s&&(i?i.o(e):e(),s=!1)},d(e){l[n].d(e),e&&a(r)}}}function Ae(e,t){var n,i,r,s,l,d,u,m,v,p,g,y,I,V,E=t.$device.devPanel?"[DΞV]":"",R=t.$device.apMode?"(AP)":"",z=(t.$device.connectivityProblem||t.$device.localConnectivityProblem)&&he(),q=(t.$device.localConnectivityProblem||t.$device.localConnectivityResumed)&&fe(e,t),B=(t.$device.connectivityProblem||t.$device.connectivityResumed)&&ge(e,t),M=t.$device&&be(e,t);return{c(){n=A("div"),z&&z.c(),i=h("\n\n "),r=h(t.selectedDeviceName),s=h(" "),l=A("span"),d=h(E),u=h("\n\n "),m=A("span"),v=h(R),p=h("\n\n "),q&&q.c(),g=h("\n\n "),B&&B.c(),y=h("\n\n "),M&&M.c(),I=f(),l.className="dev svelte-1lf904p",m.className="ap_mode svelte-1lf904p",n.className="deviceName svelte-1lf904p",b(n,"connectivity_problem",t.$device.connectivityProblem),b(n,"local_connectivity_problem",t.$device.localConnectivityProblem),b(n,"connectivity_resumed",t.$device.connectivityResumed)},m(e,t){c(e,n,t),z&&z.m(n,null),o(n,i),o(n,r),o(n,s),o(n,l),o(l,d),o(n,u),o(n,m),o(m,v),c(e,p,t),q&&q.m(e,t),c(e,g,t),B&&B.m(e,t),c(e,y,t),M&&M.m(e,t),c(e,I,t),V=!0},p(t,s){s.$device.connectivityProblem||s.$device.localConnectivityProblem?z||((z=he()).c(),z.m(n,i)):z&&(z.d(1),z=null),V&&!t.selectedDeviceName||w(r,s.selectedDeviceName),V&&!t.$device||E===(E=s.$device.devPanel?"[DΞV]":"")||w(d,E),V&&!t.$device||R===(R=s.$device.apMode?"(AP)":"")||w(v,R),t.$device&&(b(n,"connectivity_problem",s.$device.connectivityProblem),b(n,"local_connectivity_problem",s.$device.localConnectivityProblem),b(n,"connectivity_resumed",s.$device.connectivityResumed)),s.$device.localConnectivityProblem||s.$device.localConnectivityResumed?q?q.p(t,s):((q=fe(e,s)).c(),q.m(g.parentNode,g)):q&&(q.d(1),q=null),s.$device.connectivityProblem||s.$device.connectivityResumed?B?B.p(t,s):((B=ge(e,s)).c(),B.m(y.parentNode,y)):B&&(B.d(1),B=null),s.$device?(M?M.p(t,s):(M=be(e,s))&&M.c(),M.i(I.parentNode,I)):M&&M.o((function(){M.d(1),M=null}))},i(e,t){V||this.m(e,t)},o(e){V&&(M?M.o(e):e(),V=!1)},d(e){e&&a(n),z&&z.d(),e&&a(p),q&&q.d(e),e&&a(g),B&&B.d(e),e&&a(y),M&&M.d(e),e&&a(I)}}}function me(e,t){var n,i,r,l,d,u,m=t.$device.demoDevice.deviceName,f=t.$device.demoDevice.tagline;return{c(){n=A("div"),i=h(m),r=h("\n "),l=A("div"),d=h(f),n.className="deviceName svelte-1lf904p",l.className="ip svelte-1lf904p"},m(e,t){c(e,n,t),o(n,i),c(e,r,t),c(e,l,t),o(l,d),u=!0},p(e,t){e.$device&&m!==(m=t.$device.demoDevice.deviceName)&&w(i,m),e.$device&&f!==(f=t.$device.demoDevice.tagline)&&w(d,f)},i(e,t){u||this.m(e,t)},o:s,d(e){e&&(a(n),a(r),a(l))}}}function he(e,t){var n;return{c(){n=h("✖")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function fe(e,t){var n;function i(e){return e.$device.localConnectivityProblem?pe:e.$device.localConnectivityResumed?ve:void 0}var r=i(t),s=r&&r(e,t);return{c(){n=A("div"),s&&s.c(),n.className="deviceConnectivityStatus svelte-1lf904p",b(n,"local_connectivity_problem",t.$device.localConnectivityProblem),b(n,"local_connectivity_resumed",t.$device.localConnectivityResumed)},m(e,t){c(e,n,t),s&&s.m(n,null)},p(t,o){r!==(r=i(o))&&(s&&s.d(1),(s=r&&r(e,o))&&s.c(),s&&s.m(n,null)),t.$device&&(b(n,"local_connectivity_problem",o.$device.localConnectivityProblem),b(n,"local_connectivity_resumed",o.$device.localConnectivityResumed))},d(e){e&&a(n),s&&s.d()}}}function ve(e,t){var n;return{c(){n=h("Router connection resumed")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function pe(e,t){var n;return{c(){n=h("Router unreachable")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function ge(e,t){var n;function i(e){return e.$device.connectivityProblem?ye:e.$device.connectivityResumed?we:void 0}var r=i(t),s=r&&r(e,t);return{c(){n=A("div"),s&&s.c(),n.className="deviceConnectivityStatus svelte-1lf904p",b(n,"connectivity_problem",t.$device.connectivityProblem),b(n,"connectivity_resumed",t.$device.connectivityResumed)},m(e,t){c(e,n,t),s&&s.m(n,null)},p(t,o){r!==(r=i(o))&&(s&&s.d(1),(s=r&&r(e,o))&&s.c(),s&&s.m(n,null)),t.$device&&(b(n,"connectivity_problem",o.$device.connectivityProblem),b(n,"connectivity_resumed",o.$device.connectivityResumed))},d(e){e&&a(n),s&&s.d()}}}function we(e,t){var n;return{c(){n=h("Internet connection resumed")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function ye(e,t){var n;return{c(){n=h("Internet unreachable")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function be(e,t){var n,i,s,o,l,d,u=t.$device.ip&&Ie(e,t),m=(t.$device.wifiAP||t.$device.apssid)&&Ve(e,t),v=new ne({root:e.root,store:e.store}),p=t.$device.apMode&&t.$device.apInfo&&Ee(e);return{c(){n=A("div"),u&&u.c(),i=h("\n\n "),m&&m.c(),s=h("\n\n "),v._fragment.c(),o=h("\n\n "),p&&p.c(),l=f(),n.className="ip svelte-1lf904p"},m(e,t){c(e,n,t),u&&u.m(n,null),c(e,i,t),m&&m.m(e,t),c(e,s,t),v._mount(e,t),c(e,o,t),p&&p.m(e,t),c(e,l,t),d=!0},p(t,i){i.$device.ip?u?u.p(t,i):((u=Ie(e,i)).c(),u.m(n,null)):u&&(u.d(1),u=null),i.$device.wifiAP||i.$device.apssid?m?m.p(t,i):((m=Ve(e,i)).c(),m.m(s.parentNode,s)):m&&(m.d(1),m=null),i.$device.apMode&&i.$device.apInfo?(p||(p=Ee(e)).c(),p.i(l.parentNode,l)):p&&p.o((function(){p.d(1),p=null}))},i(e,t){d||this.m(e,t)},o(e){d&&(e=r(e,2),v&&v._fragment.o(e),p?p.o(e):e(),d=!1)},d(e){e&&a(n),u&&u.d(),e&&a(i),m&&m.d(e),e&&a(s),v.destroy(e),e&&a(o),p&&p.d(e),e&&a(l)}}}function Ie(e,t){var n,i=t.$device.ip;return{c(){n=h(i)},m(e,t){c(e,n,t)},p(e,t){e.$device&&i!==(i=t.$device.ip)&&w(n,i)},d(e){e&&a(n)}}}function Ve(e,t){var n,i,r=t.$device.wifiAP||t.$device.apssid;return{c(){n=A("div"),i=h(r),n.className="wifi_ap svelte-1lf904p"},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$device&&r!==(r=t.$device.wifiAP||t.$device.apssid)&&w(i,r)},d(e){e&&a(n)}}}function Ee(e,t){var n,i,r=new X({root:e.root,store:e.store});return{c(){n=A("div"),r._fragment.c(),n.className="ap_wifi_info svelte-1lf904p"},m(e,t){c(e,n,t),r._mount(n,null),i=!0},i(e,t){i||this.m(e,t)},o(e){i&&(r&&r._fragment.o(e),i=!1)},d(e){e&&a(n),r.destroy()}}}function Re(e){var t,r,s,o,l;B(this,e),this._state=n(this.store._init(["connected","device"]),e.data),this.store._add(this,["connected","device"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._slotted=e.slots||{},this._fragment=(t=this,r=this._state,l=r.loaded&&se(t,r),{c(){l&&l.c(),s=f()},m(e,t){l&&l.m(e,t),c(e,s,t),o=!0},p(e,n){n.loaded?(l?l.p(e,n):(l=se(t,n))&&l.c(),l.i(s.parentNode,s)):l&&l.o((function(){l.d(1),l=null}))},i(e,t){o||this.m(e,t)},o(e){o&&(l?l.o(e):e(),o=!1)},d(e){l&&l.d(e),e&&a(s)}}),this.root._oncreate.push(()=>{re.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Re.prototype,O),n(Re.prototype,ie);var ze={peersToShow:(e,t)=>e.filter(({ready:e})=>!t||t&&!e)};function qe(){}function Be(e,t,n){const i=Object.create(e);return i.deviceTag=t[n].deviceTag,i.ready=t[n].ready,i.versionCompareSymbol=t[n].versionCompareSymbol,i.peerState=t[n].peerState,i}function Me(e,t){var n,i=t.$thisDeviceState.peerlist.find(({ready:e})=>!t.showPeerOnlyIfDisconnected||t.showPeerOnlyIfDisconnected&&!e)&&Ce(e,t);return{c(){i&&i.c(),n=f()},m(e,t){i&&i.m(e,t),c(e,n,t)},p(t,r){r.$thisDeviceState.peerlist.find(({ready:e})=>!r.showPeerOnlyIfDisconnected||r.showPeerOnlyIfDisconnected&&!e)?i?i.p(t,r):((i=Ce(e,r)).c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(e){i&&i.d(e),e&&a(n)}}}function Ce(e,t){for(var n,i=t.$thisDeviceState.peerlist,r=[],s=0;s0&&Me(t,r),{c(){d&&d.c(),o=f()},m(e,t){d&&d.m(e,t),c(e,o,t),l=!0},p(e,n){n.$thisDeviceState&&n.$thisDeviceState.connected&&n.$thisDeviceState.peerlist&&n.$thisDeviceState.peerlist.length>0?d?d.p(e,n):((d=Me(t,n)).c(),d.m(o.parentNode,o)):d&&(d.d(1),d=null)},i(e,t){l||this.m(e,t)},o:s,d(e){d&&d.d(e),e&&a(o)}}),this.root._oncreate.push(()=>{qe.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(He.prototype,O),n(He.prototype,ze);const ke="data:image/png;base64,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";var je=new class{setWallpaper(e){e?e.startsWith("/")&&(document.body.style.backgroundImage=`url('${e}')`):document.body.style.backgroundImage=""}setBodyClass(e){document.getElementsByTagName("body")[0].className=e}};function xe(e){console.log(`${(new Date).toLocaleString()} → ${e}`)}function Xe(e,t=2){return Array(Math.max(t-String(e).length+1,0)).join(0)+e}xe.write=xe;var Te={log:xe,dir:function(e){console.log(`${(new Date).toLocaleString()} → ${JSON.stringify(e,null,2)}`)},pad:Xe,getDisplayTime:function(e){return`${Xe(e.getHours())}:${Xe(e.getMinutes())}`},unique:function(e){return[...new Set(e)]},setWallpaper:function(e){e?je.setWallpaper(e):je.setWallpaper("")},msIntoTimeSpan:function e(t,n=0,i={}){const r=["day","h","min","s"];if(n==r.length)return i.ms=t,i;0==n&&(i.totalSeconds=t/1e3);const s=[24,60,60,1e3].slice(n).reduce((e,t)=>e*t,1);return i[r[n]]=Math.floor(t/s),e(t%s,n+1,i)},humanTime:function(e){const t=["day","h","min","s"];let n="";for(const i of t)e[i]>0&&("s"!=i||"s"==i&&e.totalSeconds<60)&&(n=`${n} ${e[i]} ${i}`);return n.trim()},songTime:function(e){e=Math.round(e);const t=Math.floor(e/3600),n=e%3600,i=Math.floor(n/60);return e=n%60,t?`${t}h ${Xe(i)}min ${Xe(e)}s`:`${i}:${Xe(e)}`},colorJSON:function(e){return"string"!=typeof e&&(e=JSON.stringify(e,void 0,2)),(e=e.replace(/&/g,"&").replace(//g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,(function(e){var t="number",n="yellow";return/^"/.test(e)?/:$/.test(e)?(t="key",n="cyan"):(t="string",n="#66F62A"):/true|false/.test(e)?(t="boolean",n="orange"):/null/.test(e)&&(t="null",n="red"),`${e}`}))},Utf8ArrayToStr:function(e){let t,n,i,r,s;t="";const o=e.length;for(n=0;n>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:t+=String.fromCharCode(i);break;case 12:case 13:r=e[n++],t+=String.fromCharCode((31&i)<<6|63&r);break;case 14:r=e[n++],s=e[n++],t+=String.fromCharCode((15&i)<<12|(63&r)<<6|(63&s)<<0)}return t},isInputElementActive:function(){const{activeElement:e}=document;if(e&&-1!==["input","select","textarea"].indexOf(e.tagName.toLowerCase()))return!0},listify:function(e){return void 0===e||null==e?[]:Array.isArray(e)?e:[e]},bufferToHex:function(e){return Array.from(new Uint8Array(e)).map(e=>e.toString(16).padStart(2,"0")).join("")},hexToBuffer:function(e){const t=e.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g);return new Uint8Array(t.map(e=>parseInt(e,16)))}};function Se(e,t){return`${e}`}var Le={red:function(e){return Se(e,"#E34042")},green:function(e){return Se(e,"#5FE02A")},gray:function(e){return Se(e,"gray")},yellow:function(e){return Se(e,"#E5AE34")},cyan:function(e){return Se(e,"#29B3BF")},magenta:function(e){return Se(e,"#A144E9")}};function Je(e,t){this._handlers={},this._dependents=[],this._computed=I(),this._sortedComputedProperties=[],this._state=n({},e),this._differs=t&&t.immutable?E:V}n(Je.prototype,{_add(e,t){this._dependents.push({component:e,props:t})},_init(e){const t={};for(let n=0;n{const n={};let i=!1;for(let r=0;r{e.component.set({})}),this.fire("update",{changed:t,previous:i,current:this._state})},_sortComputedProperties(){const e=this._computed,t=this._sortedComputedProperties=[],n=I();let i;function r(s){const o=e[s];o&&(o.deps.forEach(e=>{if(e===i)throw new Error(`Cyclical dependency detected between ${e} <-> ${s}`);r(e)}),n[s]||(n[s]=!0,t.push(o)))}for(const e in this._computed)r(i=e)},compute(e,t,i){let r;const s={deps:t,update:(n,s,o)=>{const c=t.map(e=>(e in s&&(o=!0),n[e]));if(o){const t=i.apply(null,c);this._differs(t,r)&&(r=t,s[e]=!0,n[e]=r)}}};this._computed[e]=s,this._sortComputedProperties();const o=n({},this._state),c={};s.update(o,c,!0),this._set(o,c)},fire:R,get:q,on:M,set(e){const t=this._state,n=this._changed={};let i=!1;for(const r in e){if(this._computed[r])throw new Error(`'${r}' is a read-only computed property`);this._differs(e[r],t[r])&&(n[r]=i=!0)}i&&this._set(e,n)}}); -/*! - * https://github.com/Starcounter-Jack/JSON-Patch - * (c) 2017 Joachim Wester - * MIT license +var app = (function (crypto) { + 'use strict'; + + crypto = crypto && crypto.hasOwnProperty('default') ? crypto['default'] : crypto; + + function noop() {} + + function assign(tar, src) { + for (var k in src) tar[k] = src[k]; + return tar; + } + + function assignTrue(tar, src) { + for (var k in src) tar[k] = 1; + return tar; + } + + function callAfter(fn, i) { + if (i === 0) fn(); + return () => { + if (!--i) fn(); + }; + } + + function addLoc(element, file, line, column, char) { + element.__svelte_meta = { + loc: { file, line, column, char } + }; + } + + function run(fn) { + fn(); + } + + function append(target, node) { + target.appendChild(node); + } + + function insert(target, node, anchor) { + target.insertBefore(node, anchor); + } + + function detachNode(node) { + node.parentNode.removeChild(node); + } + + function detachBetween(before, after) { + while (before.nextSibling && before.nextSibling !== after) { + before.parentNode.removeChild(before.nextSibling); + } + } + + function reinsertBetween(before, after, target) { + while (before.nextSibling && before.nextSibling !== after) { + target.appendChild(before.parentNode.removeChild(before.nextSibling)); + } + } + + function reinsertChildren(parent, target) { + while (parent.firstChild) target.appendChild(parent.firstChild); + } + + function reinsertAfter(before, target) { + while (before.nextSibling) target.appendChild(before.nextSibling); + } + + function destroyEach(iterations, detach) { + for (var i = 0; i < iterations.length; i += 1) { + if (iterations[i]) iterations[i].d(detach); + } + } + + function createFragment() { + return document.createDocumentFragment(); + } + + function createElement(name) { + return document.createElement(name); + } + + function createSvgElement(name) { + return document.createElementNS('http://www.w3.org/2000/svg', name); + } + + function createText(data) { + return document.createTextNode(data); + } + + function createComment() { + return document.createComment(''); + } + + function addListener(node, event, handler, options) { + node.addEventListener(event, handler, options); + } + + function removeListener(node, event, handler, options) { + node.removeEventListener(event, handler, options); + } + + function setAttribute(node, attribute, value) { + if (value == null) node.removeAttribute(attribute); + else node.setAttribute(attribute, value); + } + + function setData(text, data) { + text.data = '' + data; + } + + function setStyle(node, key, value) { + node.style.setProperty(key, value); + } + + function toggleClass(element, name, toggle) { + element.classList[toggle ? 'add' : 'remove'](name); + } + + function blankObject() { + return Object.create(null); + } + + function destroy(detach) { + this.destroy = noop; + this.fire('destroy'); + this.set = noop; + + this._fragment.d(detach !== false); + this._fragment = null; + this._state = {}; + } + + function destroyDev(detach) { + destroy.call(this, detach); + this.destroy = function() { + console.warn('Component was already destroyed'); + }; + } + + function _differs(a, b) { + return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); + } + + function _differsImmutable(a, b) { + return a != a ? b == b : a !== b; + } + + function fire(eventName, data) { + var handlers = + eventName in this._handlers && this._handlers[eventName].slice(); + if (!handlers) return; + + for (var i = 0; i < handlers.length; i += 1) { + var handler = handlers[i]; + + if (!handler.__calling) { + try { + handler.__calling = true; + handler.call(this, data); + } finally { + handler.__calling = false; + } + } + } + } + + function flush(component) { + component._lock = true; + callAll(component._beforecreate); + callAll(component._oncreate); + callAll(component._aftercreate); + component._lock = false; + } + + function get() { + return this._state; + } + + function init(component, options) { + component._handlers = blankObject(); + component._slots = blankObject(); + component._bind = options._bind; + component._staged = {}; + + component.options = options; + component.root = options.root || component; + component.store = options.store || component.root.store; + + if (!options.root) { + component._beforecreate = []; + component._oncreate = []; + component._aftercreate = []; + } + } + + function on(eventName, handler) { + var handlers = this._handlers[eventName] || (this._handlers[eventName] = []); + handlers.push(handler); + + return { + cancel: function() { + var index = handlers.indexOf(handler); + if (~index) handlers.splice(index, 1); + } + }; + } + + function set(newState) { + this._set(assign({}, newState)); + if (this.root._lock) return; + flush(this.root); + } + + function _set(newState) { + var oldState = this._state, + changed = {}, + dirty = false; + + newState = assign(this._staged, newState); + this._staged = {}; + + for (var key in newState) { + if (this._differs(newState[key], oldState[key])) changed[key] = dirty = true; + } + if (!dirty) return; + + this._state = assign(assign({}, oldState), newState); + this._recompute(changed, this._state); + if (this._bind) this._bind(changed, this._state); + + if (this._fragment) { + this.fire("state", { changed: changed, current: this._state, previous: oldState }); + this._fragment.p(changed, this._state); + this.fire("update", { changed: changed, current: this._state, previous: oldState }); + } + } + + function _stage(newState) { + assign(this._staged, newState); + } + + function setDev(newState) { + if (typeof newState !== 'object') { + throw new Error( + this._debugName + '.set was called without an object of data key-values to update.' + ); + } + + this._checkReadOnly(newState); + set.call(this, newState); + } + + function callAll(fns) { + while (fns && fns.length) fns.shift()(); + } + + function _mount(target, anchor) { + this._fragment[this._fragment.i ? 'i' : 'm'](target, anchor || null); + } + + function removeFromStore() { + this.store._remove(this); + } + + var protoDev = { + destroy: destroyDev, + get, + fire, + on, + set: setDev, + _recompute: noop, + _set, + _stage, + _mount, + _differs + }; + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/ConnectionIndicator.html generated by Svelte v2.16.1 */ + + var methods = { + escape() { + console.log("ESCAPE"); + if(this.get().atRPi) { + // visual notification (especially important on touch) that command was given + this.set({ touchPressed: 'escape' }); + setTimeout(() => { this.fire('escape'); this.set({ touchPressed: undefined }); }, 0); // so that thread has actual time to show the effect + } else { + this.fire('escape'); + } + } + }; + + const file = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/ConnectionIndicator.html"; + + function create_main_fragment(component, ctx) { + var if_block_anchor, current; + + var if_block = (ctx.$connected == false) && create_if_block(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.$connected == false) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: run, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (1:0) {#if $connected == false} + function create_if_block(component, ctx) { + var div0, span, text1, text2, div2, div1; + + var if_block = (ctx.$device) && create_if_block_1(component, ctx); + + return { + c: function create() { + div0 = createElement("div"); + span = createElement("span"); + span.textContent = "✖"; + text1 = createText("\n "); + if (if_block) if_block.c(); + text2 = createText("\n\n "); + div2 = createElement("div"); + div1 = createElement("div"); + div1.textContent = "✖"; + span.className = "error svelte-ybcte6"; + addLoc(span, file, 2, 4, 50); + div0.id = "device"; + div0.className = "svelte-ybcte6"; + addLoc(div0, file, 1, 2, 28); + div1.id = "broken_connection"; + div1.className = "svelte-ybcte6"; + addLoc(div1, file, 9, 4, 199); + div2.id = "top_icons"; + addLoc(div2, file, 8, 2, 174); + }, + + m: function mount(target, anchor) { + insert(target, div0, anchor); + append(div0, span); + append(div0, text1); + if (if_block) if_block.m(div0, null); + insert(target, text2, anchor); + insert(target, div2, anchor); + append(div2, div1); + }, + + p: function update(changed, ctx) { + if (ctx.$device) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_1(component, ctx); + if_block.c(); + if_block.m(div0, null); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div0); + } + + if (if_block) if_block.d(); + if (detach) { + detachNode(text2); + detachNode(div2); + } + } + }; + } + + // (4:4) {#if $device} + function create_if_block_1(component, ctx) { + var h3, text_value = (ctx.$device.deviceName) || '', text; + + return { + c: function create() { + h3 = createElement("h3"); + text = createText(text_value); + h3.id = "title"; + h3.className = "svelte-ybcte6"; + addLoc(h3, file, 4, 6, 103); + }, + + m: function mount(target, anchor) { + insert(target, h3, anchor); + append(h3, text); + }, + + p: function update(changed, ctx) { + if ((changed.$device) && text_value !== (text_value = (ctx.$device.deviceName) || '')) { + setData(text, text_value); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(h3); + } + } + }; + } + + function ConnectionIndicator(options) { + this._debugName = ''; + if (!options || (!options.target && !options.root)) { + throw new Error("'target' is a required option"); + } + if (!options.store) { + throw new Error(" references store properties, but no store was provided"); + } + + init(this, options); + this._state = assign(this.store._init(["connected","device"]), options.data); + this.store._add(this, ["connected","device"]); + if (!('$connected' in this._state)) console.warn(" was created without expected data property '$connected'"); + if (!('$device' in this._state)) console.warn(" was created without expected data property '$device'"); + this._intro = !!options.intro; + + this._handlers.destroy = [removeFromStore]; + + this._fragment = create_main_fragment(this, this._state); + + if (options.target) { + if (options.hydrate) throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + this._fragment.c(); + this._mount(options.target, options.anchor); + } + + this._intro = true; + } + + assign(ConnectionIndicator.prototype, protoDev); + assign(ConnectionIndicator.prototype, methods); + + ConnectionIndicator.prototype._checkReadOnly = function _checkReadOnly(newState) { + }; + + const img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAADAEAAAwBAGZkNF0AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAwBQTFRF////HR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0bHR0b9nXxIQAAAP90Uk5TAAECAwQF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'; + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/widgets/src/ApWifiCredentials.html generated by Svelte v2.16.1 */ + + function oncreate() { + this.set({ wifiIconInline: img }); + } + const file$1 = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/widgets/src/ApWifiCredentials.html"; + + function create_main_fragment$1(component, ctx) { + var if_block_anchor, current; + + var if_block = (ctx.$device && ctx.$device.apMode && ctx.$device.apInfo) && create_if_block$1(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.$device && ctx.$device.apMode && ctx.$device.apInfo) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block$1(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: run, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (1:0) {#if $device && $device.apMode && $device.apInfo} + function create_if_block$1(component, ctx) { + var div2, img, text0, div0, b0, text2, text3_value = ctx.$device.apInfo.ssid, text3, text4, div1, b1, text6, text7_value = ctx.$device.apInfo.password, text7; + + return { + c: function create() { + div2 = createElement("div"); + img = createElement("img"); + text0 = createText("\n "); + div0 = createElement("div"); + b0 = createElement("b"); + b0.textContent = "SSID:"; + text2 = createText(" "); + text3 = createText(text3_value); + text4 = createText("\n "); + div1 = createElement("div"); + b1 = createElement("b"); + b1.textContent = "Pass:"; + text6 = createText(" "); + text7 = createText(text7_value); + img.src = ctx.wifiIconInline; + img.className = "wifi_icon svelte-1v5x43o"; + img.alt = "wifi icon"; + addLoc(img, file$1, 2, 4, 83); + addLoc(b0, file$1, 3, 9, 155); + addLoc(div0, file$1, 3, 4, 150); + addLoc(b1, file$1, 4, 9, 205); + addLoc(div1, file$1, 4, 4, 200); + div2.className = "ap_wifi_info svelte-1v5x43o"; + addLoc(div2, file$1, 1, 2, 52); + }, + + m: function mount(target, anchor) { + insert(target, div2, anchor); + append(div2, img); + append(div2, text0); + append(div2, div0); + append(div0, b0); + append(div0, text2); + append(div0, text3); + append(div2, text4); + append(div2, div1); + append(div1, b1); + append(div1, text6); + append(div1, text7); + }, + + p: function update(changed, ctx) { + if (changed.wifiIconInline) { + img.src = ctx.wifiIconInline; + } + + if ((changed.$device) && text3_value !== (text3_value = ctx.$device.apInfo.ssid)) { + setData(text3, text3_value); + } + + if ((changed.$device) && text7_value !== (text7_value = ctx.$device.apInfo.password)) { + setData(text7, text7_value); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div2); + } + } + }; + } + + function ApWifiCredentials(options) { + this._debugName = ''; + if (!options || (!options.target && !options.root)) { + throw new Error("'target' is a required option"); + } + if (!options.store) { + throw new Error(" references store properties, but no store was provided"); + } + + init(this, options); + this._state = assign(this.store._init(["device"]), options.data); + this.store._add(this, ["device"]); + if (!('$device' in this._state)) console.warn(" was created without expected data property '$device'"); + if (!('wifiIconInline' in this._state)) console.warn(" was created without expected data property 'wifiIconInline'"); + this._intro = !!options.intro; + + this._handlers.destroy = [removeFromStore]; + + this._fragment = create_main_fragment$1(this, this._state); + + this.root._oncreate.push(() => { + oncreate.call(this); + this.fire("update", { changed: assignTrue({}, this._state), current: this._state }); + }); + + if (options.target) { + if (options.hydrate) throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + this._fragment.c(); + this._mount(options.target, options.anchor); + + flush(this); + } + + this._intro = true; + } + + assign(ApWifiCredentials.prototype, protoDev); + + ApWifiCredentials.prototype._checkReadOnly = function _checkReadOnly(newState) { + }; + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/NearbyHandyLinks.html generated by Svelte v2.16.1 */ + + function getDevice(_deviceName, nearbyDevices) { + //const nearbyDevices = this.get(); + return nearbyDevices.find(({deviceName}) => deviceName == _deviceName) + } + var methods$1 = { + switchToDevice(device) { + device.port = device.guiPort; + this.store.switch(device); + }, + switchToThisDevice() { + this.store.switch(); + } + }; + + function oncreate$1() { + this.store.entangle(this); + } + const file$2 = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/NearbyHandyLinks.html"; + + function click_handler(event) { + const { component, ctx } = this._svelte; + + component.switchToDevice(ctx.device); + } + + function get_each_context(ctx, list, i) { + const child_ctx = Object.create(ctx); + child_ctx.device = list[i]; + return child_ctx; + } + + function create_main_fragment$2(component, ctx) { + var if_block_anchor, current; + + var if_block = (ctx.loaded) && create_if_block$2(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.loaded) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block$2(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: run, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (1:0) {#if loaded} + function create_if_block$2(component, ctx) { + var if_block_anchor; + + var if_block = (ctx.$connected && ctx.$device) && create_if_block_1$1(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + + p: function update(changed, ctx) { + if (ctx.$connected && ctx.$device) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_1$1(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (3:2) {#if $connected && $device} + function create_if_block_1$1(component, ctx) { + var div, text0, text1; + + var if_block0 = (ctx.thisDeviceName != ctx.selectedDeviceName) && create_if_block_7(component, ctx); + + var if_block1 = (!ctx.homebase && ctx.homebaseName && ctx.$nearbyDevices && getDevice(ctx.homebaseName, ctx.$nearbyDevices)) && create_if_block_5(component, ctx); + + var if_block2 = (!ctx.disableDeviceSelector && ctx.$nearbyDevices && ctx.$nearbyDevices.length > 0) && create_if_block_2(component, ctx); + + return { + c: function create() { + div = createElement("div"); + if (if_block0) if_block0.c(); + text0 = createText("\n\n "); + if (if_block1) if_block1.c(); + text1 = createText("\n\n "); + if (if_block2) if_block2.c(); + div.className = "nearby_handy_links svelte-zncg7e"; + toggleClass(div, "nonRPi", !ctx.atRPi); + addLoc(div, file$2, 4, 4, 49); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + if (if_block0) if_block0.m(div, null); + append(div, text0); + if (if_block1) if_block1.m(div, null); + append(div, text1); + if (if_block2) if_block2.m(div, null); + }, + + p: function update(changed, ctx) { + if (ctx.thisDeviceName != ctx.selectedDeviceName) { + if (if_block0) { + if_block0.p(changed, ctx); + } else { + if_block0 = create_if_block_7(component, ctx); + if_block0.c(); + if_block0.m(div, text0); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + + if (!ctx.homebase && ctx.homebaseName && ctx.$nearbyDevices && getDevice(ctx.homebaseName, ctx.$nearbyDevices)) { + if (if_block1) { + if_block1.p(changed, ctx); + } else { + if_block1 = create_if_block_5(component, ctx); + if_block1.c(); + if_block1.m(div, text1); + } + } else if (if_block1) { + if_block1.d(1); + if_block1 = null; + } + + if (!ctx.disableDeviceSelector && ctx.$nearbyDevices && ctx.$nearbyDevices.length > 0) { + if (if_block2) { + if_block2.p(changed, ctx); + } else { + if_block2 = create_if_block_2(component, ctx); + if_block2.c(); + if_block2.m(div, null); + } + } else if (if_block2) { + if_block2.d(1); + if_block2 = null; + } + + if (changed.atRPi) { + toggleClass(div, "nonRPi", !ctx.atRPi); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block0) if_block0.d(); + if (if_block1) if_block1.d(); + if (if_block2) if_block2.d(); + } + }; + } + + // (7:6) {#if thisDeviceName != selectedDeviceName} + function create_if_block_7(component, ctx) { + var div, button, text0, text1; + + var if_block = (ctx.$nearbyDevices && getDevice(ctx.deviceName, ctx.$nearbyDevices) && getDevice(ctx.deviceName, ctx.$nearbyDevices).playing) && create_if_block_8(component, ctx); + + function click_handler(event) { + component.switchToThisDevice(); + } + + return { + c: function create() { + div = createElement("div"); + button = createElement("button"); + if (if_block) if_block.c(); + text0 = createText("\n\n "); + text1 = createText(ctx.thisDeviceName); + addListener(button, "click", click_handler); + button.className = "home svelte-zncg7e"; + addLoc(button, file$2, 9, 10, 194); + div.className = "device"; + addLoc(div, file$2, 8, 8, 163); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + append(div, button); + if (if_block) if_block.m(button, null); + append(button, text0); + append(button, text1); + }, + + p: function update(changed, ctx) { + if (ctx.$nearbyDevices && getDevice(ctx.deviceName, ctx.$nearbyDevices) && getDevice(ctx.deviceName, ctx.$nearbyDevices).playing) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_8(component, ctx); + if_block.c(); + if_block.m(button, text0); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + + if (changed.thisDeviceName) { + setData(text1, ctx.thisDeviceName); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block) if_block.d(); + removeListener(button, "click", click_handler); + } + }; + } + + // (13:12) {#if $nearbyDevices && getDevice(deviceName, $nearbyDevices) && getDevice(deviceName, $nearbyDevices).playing} + function create_if_block_8(component, ctx) { + var text_value = ctx.$nearbyDevices.find(({_deviceName}) => ctx.deviceName == _deviceName).mediaType == 'video' ? ' ▶' : ' ♫', text; + + return { + c: function create() { + text = createText(text_value); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + p: function update(changed, ctx) { + if ((changed.$nearbyDevices || changed.deviceName) && text_value !== (text_value = ctx.$nearbyDevices.find(({_deviceName}) => ctx.deviceName == _deviceName).mediaType == 'video' ? ' ▶' : ' ♫')) { + setData(text, text_value); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (23:6) {#if !homebase && homebaseName && $nearbyDevices && getDevice(homebaseName, $nearbyDevices)} + function create_if_block_5(component, ctx) { + var div, button, text0, text1; + + var if_block = (getDevice(ctx.homebaseName, ctx.$nearbyDevices).playing) && create_if_block_6(component, ctx); + + function click_handler(event) { + component.switchToDevice(getDevice(ctx.homebaseName, ctx.$nearbyDevices)); + } + + return { + c: function create() { + div = createElement("div"); + button = createElement("button"); + if (if_block) if_block.c(); + text0 = createText("\n\n "); + text1 = createText(ctx.homebaseName); + addListener(button, "click", click_handler); + button.className = "svelte-zncg7e"; + addLoc(button, file$2, 25, 10, 799); + div.className = "device"; + addLoc(div, file$2, 24, 8, 768); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + append(div, button); + if (if_block) if_block.m(button, null); + append(button, text0); + append(button, text1); + }, + + p: function update(changed, _ctx) { + ctx = _ctx; + if (getDevice(ctx.homebaseName, ctx.$nearbyDevices).playing) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_6(component, ctx); + if_block.c(); + if_block.m(button, text0); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + + if (changed.homebaseName) { + setData(text1, ctx.homebaseName); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block) if_block.d(); + removeListener(button, "click", click_handler); + } + }; + } + + // (29:12) {#if getDevice(homebaseName, $nearbyDevices).playing} + function create_if_block_6(component, ctx) { + var text_value = getDevice(ctx.homebaseName, ctx.$nearbyDevices).mediaType == 'video' ? ' ▶' : ' ♫', text; + + return { + c: function create() { + text = createText(text_value); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + p: function update(changed, ctx) { + if ((changed.homebaseName || changed.$nearbyDevices) && text_value !== (text_value = getDevice(ctx.homebaseName, ctx.$nearbyDevices).mediaType == 'video' ? ' ▶' : ' ♫')) { + setData(text, text_value); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (39:6) {#if !disableDeviceSelector && $nearbyDevices && $nearbyDevices.length > 0} + function create_if_block_2(component, ctx) { + var each_anchor; + + var each_value = ctx.$nearbyDevices.sort((a, b) => a.deviceName < b.deviceName ? -1 : (a.deviceName > b.deviceName ? 1 : 0)); + + var each_blocks = []; + + for (var i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block(component, get_each_context(ctx, each_value, i)); + } + + return { + c: function create() { + for (var i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + each_anchor = createComment(); + }, + + m: function mount(target, anchor) { + for (var i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(target, anchor); + } + + insert(target, each_anchor, anchor); + }, + + p: function update(changed, ctx) { + if (changed.$nearbyDevices || changed.selectedDeviceName || changed.thisDeviceName || changed.homebaseName) { + each_value = ctx.$nearbyDevices.sort((a, b) => a.deviceName < b.deviceName ? -1 : (a.deviceName > b.deviceName ? 1 : 0)); + + for (var i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(changed, child_ctx); + } else { + each_blocks[i] = create_each_block(component, child_ctx); + each_blocks[i].c(); + each_blocks[i].m(each_anchor.parentNode, each_anchor); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + each_blocks.length = each_value.length; + } + }, + + d: function destroy(detach) { + destroyEach(each_blocks, detach); + + if (detach) { + detachNode(each_anchor); + } + } + }; + } + + // (43:10) {#if device.deviceName != selectedDeviceName && device.deviceName != thisDeviceName && device.deviceName != homebaseName} + function create_if_block_3(component, ctx) { + var if_block_anchor; + + var if_block = (getDevice(ctx.device.deviceName, ctx.$nearbyDevices).playing && !getDevice(ctx.device.deviceName, ctx.$nearbyDevices).hiddenInGui) && create_if_block_4(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + + p: function update(changed, ctx) { + if (getDevice(ctx.device.deviceName, ctx.$nearbyDevices).playing && !getDevice(ctx.device.deviceName, ctx.$nearbyDevices).hiddenInGui) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_4(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (45:12) {#if getDevice(device.deviceName, $nearbyDevices).playing && !getDevice(device.deviceName, $nearbyDevices).hiddenInGui} + function create_if_block_4(component, ctx) { + var div, button, text0_value = getDevice(ctx.device.deviceName, ctx.$nearbyDevices).mediaType == 'video' ? ' ▶' : ' ♫', text0, text1, text2_value = ctx.device.deviceName, text2, text3; + + return { + c: function create() { + div = createElement("div"); + button = createElement("button"); + text0 = createText(text0_value); + text1 = createText(" "); + text2 = createText(text2_value); + text3 = createText("\n "); + button._svelte = { component, ctx }; + + addListener(button, "click", click_handler); + button.className = "svelte-zncg7e"; + addLoc(button, file$2, 47, 16, 1733); + div.className = "device"; + addLoc(div, file$2, 46, 14, 1696); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + append(div, button); + append(button, text0); + append(button, text1); + append(button, text2); + append(div, text3); + }, + + p: function update(changed, _ctx) { + ctx = _ctx; + if ((changed.$nearbyDevices) && text0_value !== (text0_value = getDevice(ctx.device.deviceName, ctx.$nearbyDevices).mediaType == 'video' ? ' ▶' : ' ♫')) { + setData(text0, text0_value); + } + + if ((changed.$nearbyDevices) && text2_value !== (text2_value = ctx.device.deviceName)) { + setData(text2, text2_value); + } + + button._svelte.ctx = ctx; + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + removeListener(button, "click", click_handler); + } + }; + } + + // (41:8) {#each $nearbyDevices.sort((a, b) => a.deviceName < b.deviceName ? -1 : (a.deviceName > b.deviceName ? 1 : 0)) as device} + function create_each_block(component, ctx) { + var if_block_anchor; + + var if_block = (ctx.device.deviceName != ctx.selectedDeviceName && ctx.device.deviceName != ctx.thisDeviceName && ctx.device.deviceName != ctx.homebaseName) && create_if_block_3(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + + p: function update(changed, ctx) { + if (ctx.device.deviceName != ctx.selectedDeviceName && ctx.device.deviceName != ctx.thisDeviceName && ctx.device.deviceName != ctx.homebaseName) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_3(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + function NearbyHandyLinks(options) { + this._debugName = ''; + if (!options || (!options.target && !options.root)) { + throw new Error("'target' is a required option"); + } + if (!options.store) { + throw new Error(" references store properties, but no store was provided"); + } + + init(this, options); + this._state = assign(this.store._init(["connected","device","nearbyDevices"]), options.data); + this.store._add(this, ["connected","device","nearbyDevices"]); + if (!('loaded' in this._state)) console.warn(" was created without expected data property 'loaded'"); + if (!('$connected' in this._state)) console.warn(" was created without expected data property '$connected'"); + if (!('$device' in this._state)) console.warn(" was created without expected data property '$device'"); + if (!('atRPi' in this._state)) console.warn(" was created without expected data property 'atRPi'"); + if (!('thisDeviceName' in this._state)) console.warn(" was created without expected data property 'thisDeviceName'"); + if (!('selectedDeviceName' in this._state)) console.warn(" was created without expected data property 'selectedDeviceName'"); + if (!('$nearbyDevices' in this._state)) console.warn(" was created without expected data property '$nearbyDevices'"); + if (!('deviceName' in this._state)) console.warn(" was created without expected data property 'deviceName'"); + if (!('homebase' in this._state)) console.warn(" was created without expected data property 'homebase'"); + if (!('homebaseName' in this._state)) console.warn(" was created without expected data property 'homebaseName'"); + if (!('disableDeviceSelector' in this._state)) console.warn(" was created without expected data property 'disableDeviceSelector'"); + this._intro = !!options.intro; + + this._handlers.destroy = [removeFromStore]; + + this._fragment = create_main_fragment$2(this, this._state); + + this.root._oncreate.push(() => { + oncreate$1.call(this); + this.fire("update", { changed: assignTrue({}, this._state), current: this._state }); + }); + + if (options.target) { + if (options.hydrate) throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + this._fragment.c(); + this._mount(options.target, options.anchor); + + flush(this); + } + + this._intro = true; + } + + assign(NearbyHandyLinks.prototype, protoDev); + assign(NearbyHandyLinks.prototype, methods$1); + + NearbyHandyLinks.prototype._checkReadOnly = function _checkReadOnly(newState) { + }; + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/TileBar.html generated by Svelte v2.16.1 */ + + + + var methods$2 = { + select(view) { + if(this.get().atRPi) { + // visual notification (especially important on touch) that command was given + this.set({ touchPressed: view }); + setTimeout(() => this.fire('select', { view }), 0); // so that thread has actual time to show the effect + } else { + this.fire('select', { view }); + } + } + }; + + function oncreate$2() { + // keep a few dmt-related variables (timeDate, environment, thisDeviceName, selectedDeviceName, homebase) synced with the backend of THIS device + // other more fluid variables will be available in global store! for example $player .... always connected to either local device player + // or remote device player backend + this.store.entangle(this); + } + const file$3 = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/TileBar.html"; + + function create_main_fragment$3(component, ctx) { + var if_block_anchor, current; + + var if_block = (ctx.loaded) && create_if_block$3(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.loaded) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block$3(component, ctx); + if (if_block) if_block.c(); + } + + if_block.i(if_block_anchor.parentNode, if_block_anchor); + } else if (if_block) { + if_block.o(function() { + if_block.d(1); + if_block = null; + }); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block) if_block.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (1:0) {#if loaded} + function create_if_block$3(component, ctx) { + var current_block_type_index, if_block, if_block_anchor, current; + + var if_block_creators = [ + create_if_block_1$2, + create_else_block_2 + ]; + + var if_blocks = []; + + function select_block_type(ctx) { + if (ctx.$connected && ctx.$device) return 0; + return 1; + } + + current_block_type_index = select_block_type(ctx); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](component, ctx); + + return { + c: function create() { + if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if_blocks[current_block_type_index].m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + var previous_block_index = current_block_type_index; + current_block_type_index = select_block_type(ctx); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(changed, ctx); + } else { + if_block.o(function() { + if_blocks[previous_block_index].d(1); + if_blocks[previous_block_index] = null; + }); + + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](component, ctx); + if_block.c(); + } + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block) if_block.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + if_blocks[current_block_type_index].d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (91:2) {:else} + function create_else_block_2(component, ctx) { + var div, current; + + return { + c: function create() { + div = createElement("div"); + div.textContent = "✖"; + div.id = "broken_connection"; + div.className = "svelte-1lf904p"; + addLoc(div, file$3, 91, 4, 3581); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + current = true; + }, + + p: noop, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: run, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + } + }; + } + + // (3:2) {#if $connected && $device} + function create_if_block_1$2(component, ctx) { + var div6, div2, div0, text1, div1, text3, text4, div4, text5, div3, text7, div5, text8, slot_content_default = component._slotted.default, slot_content_default_before, current; + + function click_handler(event) { + component.select('player'); + } + + function click_handler_1(event) { + component.select('clock'); + } + + var if_block0 = (ctx.isDevUser) && create_if_block_16(component, ctx); + + function select_block_type_1(ctx) { + if (!ctx.atRPi) return create_if_block_15; + return create_else_block_1; + } + + var current_block_type = select_block_type_1(ctx); + var if_block1 = current_block_type(component, ctx); + + function click_handler_2(event) { + component.select('device'); + } + + var if_block2 = (ctx.selectedDeviceName) && create_if_block_2$1(component, ctx); + + return { + c: function create() { + div6 = createElement("div"); + div2 = createElement("div"); + div0 = createElement("div"); + div0.textContent = "Player"; + text1 = createText("\n "); + div1 = createElement("div"); + div1.textContent = "Clock"; + text3 = createText("\n\n "); + if (if_block0) if_block0.c(); + text4 = createText("\n\n "); + div4 = createElement("div"); + if_block1.c(); + text5 = createText("\n "); + div3 = createElement("div"); + div3.textContent = "Device"; + text7 = createText("\n\n "); + div5 = createElement("div"); + if (if_block2) if_block2.c(); + text8 = createText("\n\n "); + addListener(div0, "click", click_handler); + div0.className = "player svelte-1lf904p"; + toggleClass(div0, "touch_pressed", ctx.touchPressed == 'player'); + addLoc(div0, file$3, 6, 8, 130); + addListener(div1, "click", click_handler_1); + div1.className = "clock svelte-1lf904p"; + toggleClass(div1, "touch_pressed", ctx.touchPressed == 'clock'); + addLoc(div1, file$3, 7, 8, 246); + div2.className = "options svelte-1lf904p"; + addLoc(div2, file$3, 5, 6, 100); + addListener(div3, "click", click_handler_2); + div3.className = "device svelte-1lf904p"; + toggleClass(div3, "touch_pressed", ctx.touchPressed == 'device'); + addLoc(div3, file$3, 22, 8, 877); + div4.className = "options svelte-1lf904p"; + addLoc(div4, file$3, 16, 6, 576); + div5.className = "deviceInfo svelte-1lf904p"; + addLoc(div5, file$3, 25, 6, 1005); + div6.className = "selector svelte-1lf904p"; + toggleClass(div6, "nonRPi", !ctx.atRPi); + addLoc(div6, file$3, 3, 4, 48); + }, + + m: function mount(target, anchor) { + insert(target, div6, anchor); + append(div6, div2); + append(div2, div0); + append(div2, text1); + append(div2, div1); + append(div6, text3); + if (if_block0) if_block0.m(div6, null); + append(div6, text4); + append(div6, div4); + if_block1.m(div4, null); + append(div4, text5); + append(div4, div3); + append(div6, text7); + append(div6, div5); + if (if_block2) if_block2.m(div5, null); + append(div6, text8); + + if (slot_content_default) { + append(div6, slot_content_default_before || (slot_content_default_before = createComment())); + append(div6, slot_content_default); + } + + current = true; + }, + + p: function update(changed, ctx) { + if (changed.touchPressed) { + toggleClass(div0, "touch_pressed", ctx.touchPressed == 'player'); + toggleClass(div1, "touch_pressed", ctx.touchPressed == 'clock'); + } + + if (ctx.isDevUser) { + if (if_block0) { + if_block0.p(changed, ctx); + } else { + if_block0 = create_if_block_16(component, ctx); + if_block0.c(); + if_block0.m(div6, text4); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + + if (current_block_type === (current_block_type = select_block_type_1(ctx)) && if_block1) { + if_block1.p(changed, ctx); + } else { + if_block1.d(1); + if_block1 = current_block_type(component, ctx); + if_block1.c(); + if_block1.m(div4, text5); + } + + if (changed.touchPressed) { + toggleClass(div3, "touch_pressed", ctx.touchPressed == 'device'); + } + + if (ctx.selectedDeviceName) { + if (if_block2) { + if_block2.p(changed, ctx); + } else { + if_block2 = create_if_block_2$1(component, ctx); + if (if_block2) if_block2.c(); + } + + if_block2.i(div5, null); + } else if (if_block2) { + if_block2.o(function() { + if_block2.d(1); + if_block2 = null; + }); + } + + if (changed.atRPi) { + toggleClass(div6, "nonRPi", !ctx.atRPi); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block2) if_block2.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div6); + } + + removeListener(div0, "click", click_handler); + removeListener(div1, "click", click_handler_1); + if (if_block0) if_block0.d(); + if_block1.d(); + removeListener(div3, "click", click_handler_2); + if (if_block2) if_block2.d(); + + if (slot_content_default) { + reinsertAfter(slot_content_default_before, slot_content_default); + } + } + }; + } + + // (11:6) {#if isDevUser} + function create_if_block_16(component, ctx) { + var div1, div0; + + function click_handler(event) { + component.select('ambience'); + } + + return { + c: function create() { + div1 = createElement("div"); + div0 = createElement("div"); + div0.textContent = "Ambience"; + addListener(div0, "click", click_handler); + div0.className = "ambience svelte-1lf904p"; + toggleClass(div0, "touch_pressed", ctx.touchPressed == 'ambience'); + addLoc(div0, file$3, 12, 10, 426); + div1.className = "options svelte-1lf904p"; + addLoc(div1, file$3, 11, 8, 394); + }, + + m: function mount(target, anchor) { + insert(target, div1, anchor); + append(div1, div0); + }, + + p: function update(changed, ctx) { + if (changed.touchPressed) { + toggleClass(div0, "touch_pressed", ctx.touchPressed == 'ambience'); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div1); + } + + removeListener(div0, "click", click_handler); + } + }; + } + + // (20:8) {:else} + function create_else_block_1(component, ctx) { + var div; + + function click_handler(event) { + component.select('help'); + } + + return { + c: function create() { + div = createElement("div"); + div.textContent = "Help"; + addListener(div, "click", click_handler); + div.className = "help svelte-1lf904p"; + toggleClass(div, "touch_pressed", ctx.touchPressed == 'help'); + addLoc(div, file$3, 20, 10, 755); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + }, + + p: function update(changed, ctx) { + if (changed.touchPressed) { + toggleClass(div, "touch_pressed", ctx.touchPressed == 'help'); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + removeListener(div, "click", click_handler); + } + }; + } + + // (18:8) {#if !atRPi} + function create_if_block_15(component, ctx) { + var div; + + function click_handler(event) { + component.select('apps'); + } + + return { + c: function create() { + div = createElement("div"); + div.textContent = "Apps"; + addListener(div, "click", click_handler); + div.className = "apps svelte-1lf904p"; + toggleClass(div, "touch_pressed", ctx.touchPressed == 'apps'); + addLoc(div, file$3, 18, 10, 629); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + }, + + p: function update(changed, ctx) { + if (changed.touchPressed) { + toggleClass(div, "touch_pressed", ctx.touchPressed == 'apps'); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + removeListener(div, "click", click_handler); + } + }; + } + + // (27:8) {#if selectedDeviceName} + function create_if_block_2$1(component, ctx) { + var current_block_type_index, if_block, if_block_anchor, current; + + var if_block_creators = [ + create_if_block_3$1, + create_else_block + ]; + + var if_blocks = []; + + function select_block_type_2(ctx) { + if (ctx.$device.demoDevice) return 0; + return 1; + } + + current_block_type_index = select_block_type_2(ctx); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](component, ctx); + + return { + c: function create() { + if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if_blocks[current_block_type_index].m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + var previous_block_index = current_block_type_index; + current_block_type_index = select_block_type_2(ctx); + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(changed, ctx); + } else { + if_block.o(function() { + if_blocks[previous_block_index].d(1); + if_blocks[previous_block_index] = null; + }); + + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](component, ctx); + if_block.c(); + } + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block) if_block.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + if_blocks[current_block_type_index].d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (31:10) {:else} + function create_else_block(component, ctx) { + var div, text0, text1, text2, span0, text3_value = ctx.$device.devPanel ? '[DΞV]' : '', text3, text4, span1, text5_value = ctx.$device.apMode ? '(AP)' : '', text5, text6, text7, text8, if_block3_anchor, current; + + var if_block0 = (ctx.$device.connectivityProblem || ctx.$device.localConnectivityProblem) && create_if_block_14(); + + var if_block1 = (ctx.$device.localConnectivityProblem || ctx.$device.localConnectivityResumed) && create_if_block_11(component, ctx); + + var if_block2 = (ctx.$device.connectivityProblem || ctx.$device.connectivityResumed) && create_if_block_8$1(component, ctx); + + var if_block3 = (ctx.$device) && create_if_block_4$1(component, ctx); + + return { + c: function create() { + div = createElement("div"); + if (if_block0) if_block0.c(); + text0 = createText("\n\n "); + text1 = createText(ctx.selectedDeviceName); + text2 = createText(" "); + span0 = createElement("span"); + text3 = createText(text3_value); + text4 = createText("\n\n "); + span1 = createElement("span"); + text5 = createText(text5_value); + text6 = createText("\n\n "); + if (if_block1) if_block1.c(); + text7 = createText("\n\n "); + if (if_block2) if_block2.c(); + text8 = createText("\n\n "); + if (if_block3) if_block3.c(); + if_block3_anchor = createComment(); + span0.className = "dev svelte-1lf904p"; + addLoc(span0, file$3, 36, 35, 1600); + span1.className = "ap_mode svelte-1lf904p"; + addLoc(span1, file$3, 38, 14, 1674); + div.className = "deviceName svelte-1lf904p"; + toggleClass(div, "connectivity_problem", ctx.$device.connectivityProblem); + toggleClass(div, "local_connectivity_problem", ctx.$device.localConnectivityProblem); + toggleClass(div, "connectivity_resumed", ctx.$device.connectivityResumed); + addLoc(div, file$3, 32, 12, 1266); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + if (if_block0) if_block0.m(div, null); + append(div, text0); + append(div, text1); + append(div, text2); + append(div, span0); + append(span0, text3); + append(div, text4); + append(div, span1); + append(span1, text5); + insert(target, text6, anchor); + if (if_block1) if_block1.m(target, anchor); + insert(target, text7, anchor); + if (if_block2) if_block2.m(target, anchor); + insert(target, text8, anchor); + if (if_block3) if_block3.m(target, anchor); + insert(target, if_block3_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.$device.connectivityProblem || ctx.$device.localConnectivityProblem) { + if (!if_block0) { + if_block0 = create_if_block_14(); + if_block0.c(); + if_block0.m(div, text0); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + + if (!current || changed.selectedDeviceName) { + setData(text1, ctx.selectedDeviceName); + } + + if ((!current || changed.$device) && text3_value !== (text3_value = ctx.$device.devPanel ? '[DΞV]' : '')) { + setData(text3, text3_value); + } + + if ((!current || changed.$device) && text5_value !== (text5_value = ctx.$device.apMode ? '(AP)' : '')) { + setData(text5, text5_value); + } + + if (changed.$device) { + toggleClass(div, "connectivity_problem", ctx.$device.connectivityProblem); + toggleClass(div, "local_connectivity_problem", ctx.$device.localConnectivityProblem); + toggleClass(div, "connectivity_resumed", ctx.$device.connectivityResumed); + } + + if (ctx.$device.localConnectivityProblem || ctx.$device.localConnectivityResumed) { + if (if_block1) { + if_block1.p(changed, ctx); + } else { + if_block1 = create_if_block_11(component, ctx); + if_block1.c(); + if_block1.m(text7.parentNode, text7); + } + } else if (if_block1) { + if_block1.d(1); + if_block1 = null; + } + + if (ctx.$device.connectivityProblem || ctx.$device.connectivityResumed) { + if (if_block2) { + if_block2.p(changed, ctx); + } else { + if_block2 = create_if_block_8$1(component, ctx); + if_block2.c(); + if_block2.m(text8.parentNode, text8); + } + } else if (if_block2) { + if_block2.d(1); + if_block2 = null; + } + + if (ctx.$device) { + if (if_block3) { + if_block3.p(changed, ctx); + } else { + if_block3 = create_if_block_4$1(component, ctx); + if (if_block3) if_block3.c(); + } + + if_block3.i(if_block3_anchor.parentNode, if_block3_anchor); + } else if (if_block3) { + if_block3.o(function() { + if_block3.d(1); + if_block3 = null; + }); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block3) if_block3.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block0) if_block0.d(); + if (detach) { + detachNode(text6); + } + + if (if_block1) if_block1.d(detach); + if (detach) { + detachNode(text7); + } + + if (if_block2) if_block2.d(detach); + if (detach) { + detachNode(text8); + } + + if (if_block3) if_block3.d(detach); + if (detach) { + detachNode(if_block3_anchor); + } + } + }; + } + + // (28:10) {#if $device.demoDevice} + function create_if_block_3$1(component, ctx) { + var div0, text0_value = ctx.$device.demoDevice.deviceName, text0, text1, div1, text2_value = ctx.$device.demoDevice.tagline, text2, current; + + return { + c: function create() { + div0 = createElement("div"); + text0 = createText(text0_value); + text1 = createText("\n "); + div1 = createElement("div"); + text2 = createText(text2_value); + div0.className = "deviceName svelte-1lf904p"; + addLoc(div0, file$3, 28, 12, 1110); + div1.className = "ip svelte-1lf904p"; + addLoc(div1, file$3, 29, 12, 1184); + }, + + m: function mount(target, anchor) { + insert(target, div0, anchor); + append(div0, text0); + insert(target, text1, anchor); + insert(target, div1, anchor); + append(div1, text2); + current = true; + }, + + p: function update(changed, ctx) { + if ((changed.$device) && text0_value !== (text0_value = ctx.$device.demoDevice.deviceName)) { + setData(text0, text0_value); + } + + if ((changed.$device) && text2_value !== (text2_value = ctx.$device.demoDevice.tagline)) { + setData(text2, text2_value); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: run, + + d: function destroy(detach) { + if (detach) { + detachNode(div0); + detachNode(text1); + detachNode(div1); + } + } + }; + } + + // (35:14) {#if $device.connectivityProblem || $device.localConnectivityProblem} + function create_if_block_14(component, ctx) { + var text; + + return { + c: function create() { + text = createText("✖"); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (42:12) {#if $device.localConnectivityProblem || $device.localConnectivityResumed} + function create_if_block_11(component, ctx) { + var div; + + function select_block_type_3(ctx) { + if (ctx.$device.localConnectivityProblem) return create_if_block_12; + if (ctx.$device.localConnectivityResumed) return create_if_block_13; + } + + var current_block_type = select_block_type_3(ctx); + var if_block = current_block_type && current_block_type(component, ctx); + + return { + c: function create() { + div = createElement("div"); + if (if_block) if_block.c(); + div.className = "deviceConnectivityStatus svelte-1lf904p"; + toggleClass(div, "local_connectivity_problem", ctx.$device.localConnectivityProblem); + toggleClass(div, "local_connectivity_resumed", ctx.$device.localConnectivityResumed); + addLoc(div, file$3, 42, 14, 1855); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + if (if_block) if_block.m(div, null); + }, + + p: function update(changed, ctx) { + if (current_block_type !== (current_block_type = select_block_type_3(ctx))) { + if (if_block) if_block.d(1); + if_block = current_block_type && current_block_type(component, ctx); + if (if_block) if_block.c(); + if (if_block) if_block.m(div, null); + } + + if (changed.$device) { + toggleClass(div, "local_connectivity_problem", ctx.$device.localConnectivityProblem); + toggleClass(div, "local_connectivity_resumed", ctx.$device.localConnectivityResumed); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block) if_block.d(); + } + }; + } + + // (47:58) + function create_if_block_13(component, ctx) { + var text; + + return { + c: function create() { + text = createText("Router connection resumed"); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (45:16) {#if $device.localConnectivityProblem} + function create_if_block_12(component, ctx) { + var text; + + return { + c: function create() { + text = createText("Router unreachable"); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (53:12) {#if $device.connectivityProblem || $device.connectivityResumed} + function create_if_block_8$1(component, ctx) { + var div; + + function select_block_type_4(ctx) { + if (ctx.$device.connectivityProblem) return create_if_block_9; + if (ctx.$device.connectivityResumed) return create_if_block_10; + } + + var current_block_type = select_block_type_4(ctx); + var if_block = current_block_type && current_block_type(component, ctx); + + return { + c: function create() { + div = createElement("div"); + if (if_block) if_block.c(); + div.className = "deviceConnectivityStatus svelte-1lf904p"; + toggleClass(div, "connectivity_problem", ctx.$device.connectivityProblem); + toggleClass(div, "connectivity_resumed", ctx.$device.connectivityResumed); + addLoc(div, file$3, 53, 14, 2407); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + if (if_block) if_block.m(div, null); + }, + + p: function update(changed, ctx) { + if (current_block_type !== (current_block_type = select_block_type_4(ctx))) { + if (if_block) if_block.d(1); + if_block = current_block_type && current_block_type(component, ctx); + if (if_block) if_block.c(); + if (if_block) if_block.m(div, null); + } + + if (changed.$device) { + toggleClass(div, "connectivity_problem", ctx.$device.connectivityProblem); + toggleClass(div, "connectivity_resumed", ctx.$device.connectivityResumed); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block) if_block.d(); + } + }; + } + + // (58:53) + function create_if_block_10(component, ctx) { + var text; + + return { + c: function create() { + text = createText("Internet connection resumed"); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (56:16) {#if $device.connectivityProblem} + function create_if_block_9(component, ctx) { + var text; + + return { + c: function create() { + text = createText("Internet unreachable"); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (64:12) {#if $device} + function create_if_block_4$1(component, ctx) { + var div, text0, text1, text2, if_block2_anchor, current; + + var if_block0 = (ctx.$device.ip) && create_if_block_7$1(component, ctx); + + var if_block1 = (ctx.$device.wifiAP || ctx.$device.apssid) && create_if_block_6$1(component, ctx); + + var nearbyhandylinks = new NearbyHandyLinks({ + root: component.root, + store: component.store + }); + + var if_block2 = (ctx.$device.apMode && ctx.$device.apInfo) && create_if_block_5$1(component); + + return { + c: function create() { + div = createElement("div"); + if (if_block0) if_block0.c(); + text0 = createText("\n\n "); + if (if_block1) if_block1.c(); + text1 = createText("\n\n "); + nearbyhandylinks._fragment.c(); + text2 = createText("\n\n "); + if (if_block2) if_block2.c(); + if_block2_anchor = createComment(); + div.className = "ip svelte-1lf904p"; + addLoc(div, file$3, 64, 14, 2880); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + if (if_block0) if_block0.m(div, null); + insert(target, text0, anchor); + if (if_block1) if_block1.m(target, anchor); + insert(target, text1, anchor); + nearbyhandylinks._mount(target, anchor); + insert(target, text2, anchor); + if (if_block2) if_block2.m(target, anchor); + insert(target, if_block2_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.$device.ip) { + if (if_block0) { + if_block0.p(changed, ctx); + } else { + if_block0 = create_if_block_7$1(component, ctx); + if_block0.c(); + if_block0.m(div, null); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + + if (ctx.$device.wifiAP || ctx.$device.apssid) { + if (if_block1) { + if_block1.p(changed, ctx); + } else { + if_block1 = create_if_block_6$1(component, ctx); + if_block1.c(); + if_block1.m(text1.parentNode, text1); + } + } else if (if_block1) { + if_block1.d(1); + if_block1 = null; + } + + if (ctx.$device.apMode && ctx.$device.apInfo) { + if (!if_block2) { + if_block2 = create_if_block_5$1(component); + if_block2.c(); + } + if_block2.i(if_block2_anchor.parentNode, if_block2_anchor); + } else if (if_block2) { + if_block2.o(function() { + if_block2.d(1); + if_block2 = null; + }); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + outrocallback = callAfter(outrocallback, 2); + + if (nearbyhandylinks) nearbyhandylinks._fragment.o(outrocallback); + + if (if_block2) if_block2.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block0) if_block0.d(); + if (detach) { + detachNode(text0); + } + + if (if_block1) if_block1.d(detach); + if (detach) { + detachNode(text1); + } + + nearbyhandylinks.destroy(detach); + if (detach) { + detachNode(text2); + } + + if (if_block2) if_block2.d(detach); + if (detach) { + detachNode(if_block2_anchor); + } + } + }; + } + + // (66:16) {#if $device.ip} + function create_if_block_7$1(component, ctx) { + var text_value = ctx.$device.ip, text; + + return { + c: function create() { + text = createText(text_value); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + p: function update(changed, ctx) { + if ((changed.$device) && text_value !== (text_value = ctx.$device.ip)) { + setData(text, text_value); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (71:14) {#if $device.wifiAP || $device.apssid} + function create_if_block_6$1(component, ctx) { + var div, text_value = ctx.$device.wifiAP || ctx.$device.apssid, text; + + return { + c: function create() { + div = createElement("div"); + text = createText(text_value); + div.className = "wifi_ap svelte-1lf904p"; + addLoc(div, file$3, 71, 16, 3074); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + append(div, text); + }, + + p: function update(changed, ctx) { + if ((changed.$device) && text_value !== (text_value = ctx.$device.wifiAP || ctx.$device.apssid)) { + setData(text, text_value); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + } + }; + } + + // (77:14) {#if $device.apMode && $device.apInfo} + function create_if_block_5$1(component, ctx) { + var div, current; + + var apwificredentials = new ApWifiCredentials({ + root: component.root, + store: component.store + }); + + return { + c: function create() { + div = createElement("div"); + apwificredentials._fragment.c(); + div.className = "ap_wifi_info svelte-1lf904p"; + addLoc(div, file$3, 77, 16, 3262); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + apwificredentials._mount(div, null); + current = true; + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (apwificredentials) apwificredentials._fragment.o(outrocallback); + current = false; + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + apwificredentials.destroy(); + } + }; + } + + function TileBar(options) { + this._debugName = ''; + if (!options || (!options.target && !options.root)) { + throw new Error("'target' is a required option"); + } + if (!options.store) { + throw new Error(" references store properties, but no store was provided"); + } + + init(this, options); + this._state = assign(this.store._init(["connected","device"]), options.data); + this.store._add(this, ["connected","device"]); + if (!('loaded' in this._state)) console.warn(" was created without expected data property 'loaded'"); + if (!('$connected' in this._state)) console.warn(" was created without expected data property '$connected'"); + if (!('$device' in this._state)) console.warn(" was created without expected data property '$device'"); + if (!('atRPi' in this._state)) console.warn(" was created without expected data property 'atRPi'"); + if (!('touchPressed' in this._state)) console.warn(" was created without expected data property 'touchPressed'"); + if (!('isDevUser' in this._state)) console.warn(" was created without expected data property 'isDevUser'"); + if (!('selectedDeviceName' in this._state)) console.warn(" was created without expected data property 'selectedDeviceName'"); + this._intro = !!options.intro; + + this._handlers.destroy = [removeFromStore]; + + this._slotted = options.slots || {}; + + this._fragment = create_main_fragment$3(this, this._state); + + this.root._oncreate.push(() => { + oncreate$2.call(this); + this.fire("update", { changed: assignTrue({}, this._state), current: this._state }); + }); + + if (options.target) { + if (options.hydrate) throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + this._fragment.c(); + this._mount(options.target, options.anchor); + + flush(this); + } + + this._intro = true; + } + + assign(TileBar.prototype, protoDev); + assign(TileBar.prototype, methods$2); + + TileBar.prototype._checkReadOnly = function _checkReadOnly(newState) { + }; + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/widgets/src/PeerList.html generated by Svelte v2.16.1 */ + + var methods$3 = { + peersToShow(peerlist, showPeerOnlyIfDisconnected) { + return peerlist.filter(({ ready }) => !showPeerOnlyIfDisconnected || (showPeerOnlyIfDisconnected && !ready)); + } + }; + + function oncreate$3() {} + const file$4 = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/widgets/src/PeerList.html"; + + function get_each_context$1(ctx, list, i) { + const child_ctx = Object.create(ctx); + child_ctx.deviceTag = list[i].deviceTag; + child_ctx.ready = list[i].ready; + child_ctx.versionCompareSymbol = list[i].versionCompareSymbol; + child_ctx.peerState = list[i].peerState; + return child_ctx; + } + + function create_main_fragment$4(component, ctx) { + var if_block_anchor, current; + + var if_block = (ctx.$thisDeviceState && ctx.$thisDeviceState.connected && ctx.$thisDeviceState.peerlist && ctx.$thisDeviceState.peerlist.length > 0) && create_if_block$4(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.$thisDeviceState && ctx.$thisDeviceState.connected && ctx.$thisDeviceState.peerlist && ctx.$thisDeviceState.peerlist.length > 0) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block$4(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: run, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (1:0) {#if $thisDeviceState && $thisDeviceState.connected && $thisDeviceState.peerlist && $thisDeviceState.peerlist.length > 0} + function create_if_block$4(component, ctx) { + var if_block_anchor; + + var if_block = (ctx.$thisDeviceState.peerlist.find(({ ready }) => !ctx.showPeerOnlyIfDisconnected || (ctx.showPeerOnlyIfDisconnected && !ready))) && create_if_block_1$3(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + + p: function update(changed, ctx) { + if (ctx.$thisDeviceState.peerlist.find(({ ready }) => !ctx.showPeerOnlyIfDisconnected || (ctx.showPeerOnlyIfDisconnected && !ready))) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_1$3(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (3:2) {#if $thisDeviceState.peerlist.find(({ ready }) => !showPeerOnlyIfDisconnected || (showPeerOnlyIfDisconnected && !ready))} + function create_if_block_1$3(component, ctx) { + var div; + + var each_value = ctx.$thisDeviceState.peerlist; + + var each_blocks = []; + + for (var i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block$1(component, get_each_context$1(ctx, each_value, i)); + } + + return { + c: function create() { + div = createElement("div"); + + for (var i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + div.id = "peerlist"; + div.className = "svelte-1pma8zx"; + addLoc(div, file$4, 3, 4, 298); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + + for (var i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(div, null); + } + }, + + p: function update(changed, ctx) { + if (changed.showPeerOnlyIfDisconnected || changed.$thisDeviceState || changed.detailed) { + each_value = ctx.$thisDeviceState.peerlist; + + for (var i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context$1(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(changed, child_ctx); + } else { + each_blocks[i] = create_each_block$1(component, child_ctx); + each_blocks[i].c(); + each_blocks[i].m(div, null); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + each_blocks.length = each_value.length; + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + destroyEach(each_blocks, detach); + } + }; + } + + // (10:8) {#if !showPeerOnlyIfDisconnected || (showPeerOnlyIfDisconnected && !ready)} + function create_if_block_2$2(component, ctx) { + var div, span0, text1, span1, text3, text4_value = ctx.deviceTag, text4, text5, text6; + + var if_block = (ctx.peerState) && create_if_block_3$2(component, ctx); + + return { + c: function create() { + div = createElement("div"); + span0 = createElement("span"); + span0.textContent = "ok"; + text1 = createText("\n "); + span1 = createElement("span"); + span1.textContent = "✖"; + text3 = createText("\n "); + text4 = createText(text4_value); + text5 = createText("\n "); + if (if_block) if_block.c(); + text6 = createText("\n "); + span0.className = "ok svelte-1pma8zx"; + addLoc(span0, file$4, 11, 12, 702); + span1.className = "cross svelte-1pma8zx"; + addLoc(span1, file$4, 12, 12, 741); + div.className = "peer svelte-1pma8zx"; + toggleClass(div, "ready", ctx.ready == true); + addLoc(div, file$4, 10, 10, 643); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + append(div, span0); + append(div, text1); + append(div, span1); + append(div, text3); + append(div, text4); + append(div, text5); + if (if_block) if_block.m(div, null); + append(div, text6); + }, + + p: function update(changed, ctx) { + if ((changed.$thisDeviceState) && text4_value !== (text4_value = ctx.deviceTag)) { + setData(text4, text4_value); + } + + if (ctx.peerState) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_3$2(component, ctx); + if_block.c(); + if_block.m(div, text6); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + + if (changed.$thisDeviceState) { + toggleClass(div, "ready", ctx.ready == true); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block) if_block.d(); + } + }; + } + + // (15:12) {#if peerState} + function create_if_block_3$2(component, ctx) { + var if_block_anchor; + + var if_block = (ctx.peerState.dmtVersion) && create_if_block_4$2(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + + p: function update(changed, ctx) { + if (ctx.peerState.dmtVersion) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_4$2(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (16:14) {#if peerState.dmtVersion} + function create_if_block_4$2(component, ctx) { + var span; + + var if_block = (ctx.detailed) && create_if_block_5$2(component, ctx); + + return { + c: function create() { + span = createElement("span"); + if (if_block) if_block.c(); + span.className = "dmt_version svelte-1pma8zx"; + addLoc(span, file$4, 16, 16, 879); + }, + + m: function mount(target, anchor) { + insert(target, span, anchor); + if (if_block) if_block.m(span, null); + }, + + p: function update(changed, ctx) { + if (ctx.detailed) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_5$2(component, ctx); + if_block.c(); + if_block.m(span, null); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(span); + } + + if (if_block) if_block.d(); + } + }; + } + + // (18:18) {#if detailed} + function create_if_block_5$2(component, ctx) { + var text_value = ctx.peerState.dmtVersion, text; + + return { + c: function create() { + text = createText(text_value); + }, + + m: function mount(target, anchor) { + insert(target, text, anchor); + }, + + p: function update(changed, ctx) { + if ((changed.$thisDeviceState) && text_value !== (text_value = ctx.peerState.dmtVersion)) { + setData(text, text_value); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(text); + } + } + }; + } + + // (8:6) {#each $thisDeviceState.peerlist as { deviceTag, ready, versionCompareSymbol, peerState }} + function create_each_block$1(component, ctx) { + var if_block_anchor; + + var if_block = (!ctx.showPeerOnlyIfDisconnected || (ctx.showPeerOnlyIfDisconnected && !ctx.ready)) && create_if_block_2$2(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + + p: function update(changed, ctx) { + if (!ctx.showPeerOnlyIfDisconnected || (ctx.showPeerOnlyIfDisconnected && !ctx.ready)) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_2$2(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + function PeerList(options) { + this._debugName = ''; + if (!options || (!options.target && !options.root)) { + throw new Error("'target' is a required option"); + } + if (!options.store) { + throw new Error(" references store properties, but no store was provided"); + } + + init(this, options); + this._state = assign(this.store._init(["thisDeviceState"]), options.data); + this.store._add(this, ["thisDeviceState"]); + if (!('$thisDeviceState' in this._state)) console.warn(" was created without expected data property '$thisDeviceState'"); + if (!('showPeerOnlyIfDisconnected' in this._state)) console.warn(" was created without expected data property 'showPeerOnlyIfDisconnected'"); + if (!('detailed' in this._state)) console.warn(" was created without expected data property 'detailed'"); + this._intro = !!options.intro; + + this._handlers.destroy = [removeFromStore]; + + this._fragment = create_main_fragment$4(this, this._state); + + this.root._oncreate.push(() => { + oncreate$3.call(this); + this.fire("update", { changed: assignTrue({}, this._state), current: this._state }); + }); + + if (options.target) { + if (options.hydrate) throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + this._fragment.c(); + this._mount(options.target, options.anchor); + + flush(this); + } + + this._intro = true; + } + + assign(PeerList.prototype, protoDev); + assign(PeerList.prototype, methods$3); + + PeerList.prototype._checkReadOnly = function _checkReadOnly(newState) { + }; + + const img$1 = 'data:image/png;base64,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'; + + class CssBridge { + // cities/Monaco1.jpg + setWallpaper(wallpaperSubPath) { + //console.log(wallpaperSubPath); + if (!wallpaperSubPath) { + document.body.style.backgroundImage = ''; + } else if (wallpaperSubPath.startsWith('/')) { + document.body.style.backgroundImage = `url('${wallpaperSubPath}')`; + } + } + + setBodyClass(className) { + const body = document.getElementsByTagName('body')[0]; + body.className = className; + } + } + + var css = new CssBridge(); + + function log(msg) { + console.log(`${new Date().toLocaleString()} → ${msg}`); + } + + function isInputElementActive() { + const { activeElement } = document; + const inputs = ['input', 'select', 'textarea']; //'button' + + if (activeElement && inputs.indexOf(activeElement.tagName.toLowerCase()) !== -1) { + return true; + } + } + + log.write = log; // nodejs compatibility in connect.js + + function dir(msg) { + console.log(`${new Date().toLocaleString()} → ${JSON.stringify(msg, null, 2)}`); + } + + function pad(number, digits = 2) { + return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number; + } + + function getDisplayTime(date) { + return `${pad(date.getHours())}:${pad(date.getMinutes())}`; + } + + function unique(items) { + return [...new Set(items)]; + } + + function setWallpaper(wallpaper) { + if (wallpaper) { + css.setWallpaper(wallpaper); + } else { + css.setWallpaper(''); + } + } + + function msIntoTimeSpan(timeInMs, index = 0, result = {}) { + const times = ['day', 'h', 'min', 's']; + const arr = [24, 60, 60, 1000]; + + if (index == times.length) { + result['ms'] = timeInMs; + return result; + } + + if (index == 0) { + result.totalSeconds = timeInMs / 1000.0; + } + + const n = arr.slice(index).reduce((total, num) => total * num, 1); + result[times[index]] = Math.floor(timeInMs / n); + + return msIntoTimeSpan(timeInMs % n, index + 1, result); + } + + function humanTime(ts) { + const times = ['day', 'h', 'min', 's']; + let str = ''; + + for (const t of times) { + if (ts[t] > 0) { + if (t != 's' || (t == 's' && ts.totalSeconds < 60)) { + // show seconds only if time is under a minute + str = `${str} ${ts[t]} ${t}`; + } + } + } + + return str.trim(); + } + + function songTime(s) { + s = Math.round(s); + const hours = Math.floor(s / 3600); + const rem = s % 3600; + const min = Math.floor(rem / 60); + s = rem % 60; + + return hours ? `${hours}h ${pad(min)}min ${pad(s)}s` : `${min}:${pad(s)}`; + } + + function colorJSON(json) { + if (typeof json != 'string') { + json = JSON.stringify(json, undefined, 2); + } + json = json + .replace(/&/g, '&') + .replace(//g, '>'); + return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function(match) { + var cls = 'number'; + var color = 'yellow'; + if (/^"/.test(match)) { + if (/:$/.test(match)) { + cls = 'key'; + color = 'cyan'; + } else { + cls = 'string'; + color = '#66F62A'; + } + } else if (/true|false/.test(match)) { + cls = 'boolean'; + color = 'orange'; + } else if (/null/.test(match)) { + cls = 'null'; + color = 'red'; + } + //return {cls, text: match}; + return `${match}`; + }); + } + + // Uint8Array to string in Javascript + // https://stackoverflow.com/a/22373197 + function Utf8ArrayToStr(array) { + let out; + let i; + let c; + let char2; + let char3; + + out = ''; + + const len = array.length; + + i = 0; + + while (i < len) { + c = array[i++]; + + switch (c >> 4) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + // 0xxxxxxx + out += String.fromCharCode(c); + break; + case 12: + case 13: + // 110x xxxx 10xx xxxx + char2 = array[i++]; + out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f)); + break; + case 14: + // 1110 xxxx 10xx xxxx 10xx xxxx + char2 = array[i++]; + char3 = array[i++]; + out += String.fromCharCode(((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0)); + break; + } + } + + return out; + } + + function listify(obj) { + if (typeof obj == 'undefined' || obj == null) { + return []; + } + return Array.isArray(obj) ? obj : [obj]; + } + + function bufferToHex(buffer) { + return Array.from(new Uint8Array(buffer)) + .map(b => b.toString(16).padStart(2, '0')) + .join(''); + } + + function hexToBuffer(hex) { + const tokens = hex.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g); // split by two, https://blog.abelotech.com/posts/split-string-tokens-defined-length-javascript/ + return new Uint8Array(tokens.map(token => parseInt(token, 16))); + } + + var util = { + log, + dir, + pad, + getDisplayTime, + unique, + setWallpaper, + msIntoTimeSpan, + humanTime, + songTime, + colorJSON, + Utf8ArrayToStr, + isInputElementActive, + listify, + bufferToHex, + hexToBuffer + }; + + function wrap(text, color) { + return `${text}`; + } + + function red(text) { + return wrap(text, '#E34042'); + } + + function green(text) { + return wrap(text, '#5FE02A'); + } + + function gray(text) { + return wrap(text, 'gray'); + } + + function yellow(text) { + return wrap(text, '#E5AE34'); + } + + function cyan(text) { + return wrap(text, '#29B3BF'); + } + + function magenta(text) { + return wrap(text, '#A144E9'); + } + + var colorsDmt = { red, green, gray, yellow, cyan, magenta }; + + function Store(state, options) { + this._handlers = {}; + this._dependents = []; + + this._computed = blankObject(); + this._sortedComputedProperties = []; + + this._state = assign({}, state); + this._differs = options && options.immutable ? _differsImmutable : _differs; + } + + assign(Store.prototype, { + _add(component, props) { + this._dependents.push({ + component: component, + props: props + }); + }, + + _init(props) { + const state = {}; + for (let i = 0; i < props.length; i += 1) { + const prop = props[i]; + state['$' + prop] = this._state[prop]; + } + return state; + }, + + _remove(component) { + let i = this._dependents.length; + while (i--) { + if (this._dependents[i].component === component) { + this._dependents.splice(i, 1); + return; + } + } + }, + + _set(newState, changed) { + const previous = this._state; + this._state = assign(assign({}, previous), newState); + + for (let i = 0; i < this._sortedComputedProperties.length; i += 1) { + this._sortedComputedProperties[i].update(this._state, changed); + } + + this.fire('state', { + changed, + previous, + current: this._state + }); + + this._dependents + .filter(dependent => { + const componentState = {}; + let dirty = false; + + for (let j = 0; j < dependent.props.length; j += 1) { + const prop = dependent.props[j]; + if (prop in changed) { + componentState['$' + prop] = this._state[prop]; + dirty = true; + } + } + + if (dirty) { + dependent.component._stage(componentState); + return true; + } + }) + .forEach(dependent => { + dependent.component.set({}); + }); + + this.fire('update', { + changed, + previous, + current: this._state + }); + }, + + _sortComputedProperties() { + const computed = this._computed; + const sorted = this._sortedComputedProperties = []; + const visited = blankObject(); + let currentKey; + + function visit(key) { + const c = computed[key]; + + if (c) { + c.deps.forEach(dep => { + if (dep === currentKey) { + throw new Error(`Cyclical dependency detected between ${dep} <-> ${key}`); + } + + visit(dep); + }); + + if (!visited[key]) { + visited[key] = true; + sorted.push(c); + } + } + } + + for (const key in this._computed) { + visit(currentKey = key); + } + }, + + compute(key, deps, fn) { + let value; + + const c = { + deps, + update: (state, changed, dirty) => { + const values = deps.map(dep => { + if (dep in changed) dirty = true; + return state[dep]; + }); + + if (dirty) { + const newValue = fn.apply(null, values); + if (this._differs(newValue, value)) { + value = newValue; + changed[key] = true; + state[key] = value; + } + } + } + }; + + this._computed[key] = c; + this._sortComputedProperties(); + + const state = assign({}, this._state); + const changed = {}; + c.update(state, changed, true); + this._set(state, changed); + }, + + fire, + + get, + + on, + + set(newState) { + const oldState = this._state; + const changed = this._changed = {}; + let dirty = false; + + for (const key in newState) { + if (this._computed[key]) throw new Error(`'${key}' is a read-only computed property`); + if (this._differs(newState[key], oldState[key])) changed[key] = dirty = true; + } + if (!dirty) return; + + this._set(newState, changed); + } + }); + + /*! + * https://github.com/Starcounter-Jack/JSON-Patch + * (c) 2017 Joachim Wester + * MIT license + */ + var __extends = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var _hasOwnProperty = Object.prototype.hasOwnProperty; + function hasOwnProperty(obj, key) { + return _hasOwnProperty.call(obj, key); + } + function _objectKeys(obj) { + if (Array.isArray(obj)) { + var keys = new Array(obj.length); + for (var k = 0; k < keys.length; k++) { + keys[k] = "" + k; + } + return keys; + } + if (Object.keys) { + return Object.keys(obj); + } + var keys = []; + for (var i in obj) { + if (hasOwnProperty(obj, i)) { + keys.push(i); + } + } + return keys; + } + /** + * Deeply clone the object. + * https://jsperf.com/deep-copy-vs-json-stringify-json-parse/25 (recursiveDeepCopy) + * @param {any} obj value to clone + * @return {any} cloned obj + */ + function _deepClone(obj) { + switch (typeof obj) { + case "object": + return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5 + case "undefined": + return null; //this is how JSON.stringify behaves for array items + default: + return obj; //no need to clone primitives + } + } + //3x faster than cached /^\d+$/.test(str) + function isInteger(str) { + var i = 0; + var len = str.length; + var charCode; + while (i < len) { + charCode = str.charCodeAt(i); + if (charCode >= 48 && charCode <= 57) { + i++; + continue; + } + return false; + } + return true; + } + /** + * Escapes a json pointer path + * @param path The raw pointer + * @return the Escaped path + */ + function escapePathComponent(path) { + if (path.indexOf('/') === -1 && path.indexOf('~') === -1) + return path; + return path.replace(/~/g, '~0').replace(/\//g, '~1'); + } + /** + * Unescapes a json pointer path + * @param path The escaped pointer + * @return The unescaped path + */ + function unescapePathComponent(path) { + return path.replace(/~1/g, '/').replace(/~0/g, '~'); + } + /** + * Recursively checks whether an object has any undefined values inside. + */ + function hasUndefined(obj) { + if (obj === undefined) { + return true; + } + if (obj) { + if (Array.isArray(obj)) { + for (var i = 0, len = obj.length; i < len; i++) { + if (hasUndefined(obj[i])) { + return true; + } + } + } + else if (typeof obj === "object") { + var objKeys = _objectKeys(obj); + var objKeysLength = objKeys.length; + for (var i = 0; i < objKeysLength; i++) { + if (hasUndefined(obj[objKeys[i]])) { + return true; + } + } + } + } + return false; + } + function patchErrorMessageFormatter(message, args) { + var messageParts = [message]; + for (var key in args) { + var value = typeof args[key] === 'object' ? JSON.stringify(args[key], null, 2) : args[key]; // pretty print + if (typeof value !== 'undefined') { + messageParts.push(key + ": " + value); + } + } + return messageParts.join('\n'); + } + var PatchError = /** @class */ (function (_super) { + __extends(PatchError, _super); + function PatchError(message, name, index, operation, tree) { + var _newTarget = this.constructor; + var _this = _super.call(this, patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree })) || this; + _this.name = name; + _this.index = index; + _this.operation = operation; + _this.tree = tree; + Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain, see https://stackoverflow.com/a/48342359 + _this.message = patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree }); + return _this; + } + return PatchError; + }(Error)); + + var JsonPatchError = PatchError; + var deepClone = _deepClone; + /* We use a Javascript hash to store each + function. Each hash entry (property) uses + the operation identifiers specified in rfc6902. + In this way, we can map each patch operation + to its dedicated function in efficient way. + */ + /* The operations applicable to an object */ + var objOps = { + add: function (obj, key, document) { + obj[key] = this.value; + return { newDocument: document }; + }, + remove: function (obj, key, document) { + var removed = obj[key]; + delete obj[key]; + return { newDocument: document, removed: removed }; + }, + replace: function (obj, key, document) { + var removed = obj[key]; + obj[key] = this.value; + return { newDocument: document, removed: removed }; + }, + move: function (obj, key, document) { + /* in case move target overwrites an existing value, + return the removed value, this can be taxing performance-wise, + and is potentially unneeded */ + var removed = getValueByPointer(document, this.path); + if (removed) { + removed = _deepClone(removed); + } + var originalValue = applyOperation(document, { op: "remove", path: this.from }).removed; + applyOperation(document, { op: "add", path: this.path, value: originalValue }); + return { newDocument: document, removed: removed }; + }, + copy: function (obj, key, document) { + var valueToCopy = getValueByPointer(document, this.from); + // enforce copy by value so further operations don't affect source (see issue #177) + applyOperation(document, { op: "add", path: this.path, value: _deepClone(valueToCopy) }); + return { newDocument: document }; + }, + test: function (obj, key, document) { + return { newDocument: document, test: _areEquals(obj[key], this.value) }; + }, + _get: function (obj, key, document) { + this.value = obj[key]; + return { newDocument: document }; + } + }; + /* The operations applicable to an array. Many are the same as for the object */ + var arrOps = { + add: function (arr, i, document) { + if (isInteger(i)) { + arr.splice(i, 0, this.value); + } + else { // array props + arr[i] = this.value; + } + // this may be needed when using '-' in an array + return { newDocument: document, index: i }; + }, + remove: function (arr, i, document) { + var removedList = arr.splice(i, 1); + return { newDocument: document, removed: removedList[0] }; + }, + replace: function (arr, i, document) { + var removed = arr[i]; + arr[i] = this.value; + return { newDocument: document, removed: removed }; + }, + move: objOps.move, + copy: objOps.copy, + test: objOps.test, + _get: objOps._get + }; + /** + * Retrieves a value from a JSON document by a JSON pointer. + * Returns the value. + * + * @param document The document to get the value from + * @param pointer an escaped JSON pointer + * @return The retrieved value + */ + function getValueByPointer(document, pointer) { + if (pointer == '') { + return document; + } + var getOriginalDestination = { op: "_get", path: pointer }; + applyOperation(document, getOriginalDestination); + return getOriginalDestination.value; + } + /** + * Apply a single JSON Patch Operation on a JSON document. + * Returns the {newDocument, result} of the operation. + * It modifies the `document` and `operation` objects - it gets the values by reference. + * If you would like to avoid touching your values, clone them: + * `jsonpatch.applyOperation(document, jsonpatch._deepClone(operation))`. + * + * @param document The document to patch + * @param operation The operation to apply + * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation. + * @param mutateDocument Whether to mutate the original document or clone it before applying + * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`. + * @return `{newDocument, result}` after the operation + */ + function applyOperation(document, operation, validateOperation, mutateDocument, banPrototypeModifications, index) { + if (validateOperation === void 0) { validateOperation = false; } + if (mutateDocument === void 0) { mutateDocument = true; } + if (banPrototypeModifications === void 0) { banPrototypeModifications = true; } + if (index === void 0) { index = 0; } + if (validateOperation) { + if (typeof validateOperation == 'function') { + validateOperation(operation, 0, document, operation.path); + } + else { + validator(operation, 0); + } + } + /* ROOT OPERATIONS */ + if (operation.path === "") { + var returnValue = { newDocument: document }; + if (operation.op === 'add') { + returnValue.newDocument = operation.value; + return returnValue; + } + else if (operation.op === 'replace') { + returnValue.newDocument = operation.value; + returnValue.removed = document; //document we removed + return returnValue; + } + else if (operation.op === 'move' || operation.op === 'copy') { // it's a move or copy to root + returnValue.newDocument = getValueByPointer(document, operation.from); // get the value by json-pointer in `from` field + if (operation.op === 'move') { // report removed item + returnValue.removed = document; + } + return returnValue; + } + else if (operation.op === 'test') { + returnValue.test = _areEquals(document, operation.value); + if (returnValue.test === false) { + throw new JsonPatchError("Test operation failed", 'TEST_OPERATION_FAILED', index, operation, document); + } + returnValue.newDocument = document; + return returnValue; + } + else if (operation.op === 'remove') { // a remove on root + returnValue.removed = document; + returnValue.newDocument = null; + return returnValue; + } + else if (operation.op === '_get') { + operation.value = document; + return returnValue; + } + else { /* bad operation */ + if (validateOperation) { + throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document); + } + else { + return returnValue; + } + } + } /* END ROOT OPERATIONS */ + else { + if (!mutateDocument) { + document = _deepClone(document); + } + var path = operation.path || ""; + var keys = path.split('/'); + var obj = document; + var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift + var len = keys.length; + var existingPathFragment = undefined; + var key = void 0; + var validateFunction = void 0; + if (typeof validateOperation == 'function') { + validateFunction = validateOperation; + } + else { + validateFunction = validator; + } + while (true) { + key = keys[t]; + if (banPrototypeModifications && key == '__proto__') { + throw new TypeError('JSON-Patch: modifying `__proto__` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README'); + } + if (validateOperation) { + if (existingPathFragment === undefined) { + if (obj[key] === undefined) { + existingPathFragment = keys.slice(0, t).join('/'); + } + else if (t == len - 1) { + existingPathFragment = operation.path; + } + if (existingPathFragment !== undefined) { + validateFunction(operation, 0, document, existingPathFragment); + } + } + } + t++; + if (Array.isArray(obj)) { + if (key === '-') { + key = obj.length; + } + else { + if (validateOperation && !isInteger(key)) { + throw new JsonPatchError("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index", "OPERATION_PATH_ILLEGAL_ARRAY_INDEX", index, operation, document); + } // only parse key when it's an integer for `arr.prop` to work + else if (isInteger(key)) { + key = ~~key; + } + } + if (t >= len) { + if (validateOperation && operation.op === "add" && key > obj.length) { + throw new JsonPatchError("The specified index MUST NOT be greater than the number of elements in the array", "OPERATION_VALUE_OUT_OF_BOUNDS", index, operation, document); + } + var returnValue = arrOps[operation.op].call(operation, obj, key, document); // Apply patch + if (returnValue.test === false) { + throw new JsonPatchError("Test operation failed", 'TEST_OPERATION_FAILED', index, operation, document); + } + return returnValue; + } + } + else { + if (key && key.indexOf('~') != -1) { + key = unescapePathComponent(key); + } + if (t >= len) { + var returnValue = objOps[operation.op].call(operation, obj, key, document); // Apply patch + if (returnValue.test === false) { + throw new JsonPatchError("Test operation failed", 'TEST_OPERATION_FAILED', index, operation, document); + } + return returnValue; + } + } + obj = obj[key]; + } + } + } + /** + * Apply a full JSON Patch array on a JSON document. + * Returns the {newDocument, result} of the patch. + * It modifies the `document` object and `patch` - it gets the values by reference. + * If you would like to avoid touching your values, clone them: + * `jsonpatch.applyPatch(document, jsonpatch._deepClone(patch))`. + * + * @param document The document to patch + * @param patch The patch to apply + * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation. + * @param mutateDocument Whether to mutate the original document or clone it before applying + * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`. + * @return An array of `{newDocument, result}` after the patch + */ + function applyPatch(document, patch, validateOperation, mutateDocument, banPrototypeModifications) { + if (mutateDocument === void 0) { mutateDocument = true; } + if (banPrototypeModifications === void 0) { banPrototypeModifications = true; } + if (validateOperation) { + if (!Array.isArray(patch)) { + throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY'); + } + } + if (!mutateDocument) { + document = _deepClone(document); + } + var results = new Array(patch.length); + for (var i = 0, length_1 = patch.length; i < length_1; i++) { + // we don't need to pass mutateDocument argument because if it was true, we already deep cloned the object, we'll just pass `true` + results[i] = applyOperation(document, patch[i], validateOperation, true, banPrototypeModifications, i); + document = results[i].newDocument; // in case root was replaced + } + results.newDocument = document; + return results; + } + /** + * Apply a single JSON Patch Operation on a JSON document. + * Returns the updated document. + * Suitable as a reducer. + * + * @param document The document to patch + * @param operation The operation to apply + * @return The updated document + */ + function applyReducer(document, operation, index) { + var operationResult = applyOperation(document, operation); + if (operationResult.test === false) { // failed test + throw new JsonPatchError("Test operation failed", 'TEST_OPERATION_FAILED', index, operation, document); + } + return operationResult.newDocument; + } + /** + * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error. + * @param {object} operation - operation object (patch) + * @param {number} index - index of operation in the sequence + * @param {object} [document] - object where the operation is supposed to be applied + * @param {string} [existingPathFragment] - comes along with `document` + */ + function validator(operation, index, document, existingPathFragment) { + if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) { + throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, document); + } + else if (!objOps[operation.op]) { + throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document); + } + else if (typeof operation.path !== 'string') { + throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, document); + } + else if (operation.path.indexOf('/') !== 0 && operation.path.length > 0) { + // paths that aren't empty string should start with "/" + throw new JsonPatchError('Operation `path` property must start with "/"', 'OPERATION_PATH_INVALID', index, operation, document); + } + else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') { + throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, document); + } + else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) { + throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, document); + } + else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) { + throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, document); + } + else if (document) { + if (operation.op == "add") { + var pathLen = operation.path.split("/").length; + var existingPathLen = existingPathFragment.split("/").length; + if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) { + throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, document); + } + } + else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') { + if (operation.path !== existingPathFragment) { + throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document); + } + } + else if (operation.op === 'move' || operation.op === 'copy') { + var existingValue = { op: "_get", path: operation.from, value: undefined }; + var error = validate([existingValue], document); + if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') { + throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, document); + } + } + } + } + /** + * Validates a sequence of operations. If `document` parameter is provided, the sequence is additionally validated against the object document. + * If error is encountered, returns a JsonPatchError object + * @param sequence + * @param document + * @returns {JsonPatchError|undefined} */ -var Ye,Ge=(Ye=function(e,t){return(Ye=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}Ye(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),We=Object.prototype.hasOwnProperty;function Ke(e,t){return We.call(e,t)}function Fe(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n=48&&t<=57))return!1;n++}return!0}function _e(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function $e(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function et(e,t){var n=[e];for(var i in t){var r="object"==typeof t[i]?JSON.stringify(t[i],null,2):t[i];void 0!==r&&n.push(i+": "+r)}return n.join("\n")}var tt=function(e){function t(t,n,i,r,s){var o=this.constructor,c=e.call(this,et(t,{name:n,index:i,operation:r,tree:s}))||this;return c.name=n,c.index=i,c.operation=r,c.tree=s,Object.setPrototypeOf(c,o.prototype),c.message=et(t,{name:n,index:i,operation:r,tree:s}),c}return Ge(t,e),t}(Error),nt=tt,it=Qe,rt={add:function(e,t,n){return e[t]=this.value,{newDocument:n}},remove:function(e,t,n){var i=e[t];return delete e[t],{newDocument:n,removed:i}},replace:function(e,t,n){var i=e[t];return e[t]=this.value,{newDocument:n,removed:i}},move:function(e,t,n){var i=ot(n,this.path);i&&(i=Qe(i));var r=ct(n,{op:"remove",path:this.from}).removed;return ct(n,{op:"add",path:this.path,value:r}),{newDocument:n,removed:i}},copy:function(e,t,n){var i=ot(n,this.from);return ct(n,{op:"add",path:this.path,value:Qe(i)}),{newDocument:n}},test:function(e,t,n){return{newDocument:n,test:ut(e[t],this.value)}},_get:function(e,t,n){return this.value=e[t],{newDocument:n}}},st={add:function(e,t,n){return Ue(t)?e.splice(t,0,this.value):e[t]=this.value,{newDocument:n,index:t}},remove:function(e,t,n){return{newDocument:n,removed:e.splice(t,1)[0]}},replace:function(e,t,n){var i=e[t];return e[t]=this.value,{newDocument:n,removed:i}},move:rt.move,copy:rt.copy,test:rt.test,_get:rt._get};function ot(e,t){if(""==t)return e;var n={op:"_get",path:t};return ct(e,n),n.value}function ct(e,t,n,i,r,s){if(void 0===n&&(n=!1),void 0===i&&(i=!0),void 0===r&&(r=!0),void 0===s&&(s=0),n&&("function"==typeof n?n(t,0,e,t.path):lt(t,0)),""===t.path){var o={newDocument:e};if("add"===t.op)return o.newDocument=t.value,o;if("replace"===t.op)return o.newDocument=t.value,o.removed=e,o;if("move"===t.op||"copy"===t.op)return o.newDocument=ot(e,t.from),"move"===t.op&&(o.removed=e),o;if("test"===t.op){if(o.test=ut(e,t.value),!1===o.test)throw new nt("Test operation failed","TEST_OPERATION_FAILED",s,t,e);return o.newDocument=e,o}if("remove"===t.op)return o.removed=e,o.newDocument=null,o;if("_get"===t.op)return t.value=e,o;if(n)throw new nt("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",s,t,e);return o}i||(e=Qe(e));var c=(t.path||"").split("/"),a=e,l=1,d=c.length,u=void 0,A=void 0,m=void 0;for(m="function"==typeof n?n:lt;;){if(A=c[l],r&&"__proto__"==A)throw new TypeError("JSON-Patch: modifying `__proto__` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(n&&void 0===u&&(void 0===a[A]?u=c.slice(0,l).join("/"):l==d-1&&(u=t.path),void 0!==u&&m(t,0,e,u)),l++,Array.isArray(a)){if("-"===A)A=a.length;else{if(n&&!Ue(A))throw new nt("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",s,t,e);Ue(A)&&(A=~~A)}if(l>=d){if(n&&"add"===t.op&&A>a.length)throw new nt("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",s,t,e);if(!1===(o=st[t.op].call(t,a,A,e)).test)throw new nt("Test operation failed","TEST_OPERATION_FAILED",s,t,e);return o}}else if(A&&-1!=A.indexOf("~")&&(A=$e(A)),l>=d){if(!1===(o=rt[t.op].call(t,a,A,e)).test)throw new nt("Test operation failed","TEST_OPERATION_FAILED",s,t,e);return o}a=a[A]}}function at(e,t,n,i,r){if(void 0===i&&(i=!0),void 0===r&&(r=!0),n&&!Array.isArray(t))throw new nt("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");i||(e=Qe(e));for(var s=new Array(t.length),o=0,c=t.length;o0)throw new nt('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,n);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new nt("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new nt("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&function e(t){if(void 0===t)return!0;if(t)if(Array.isArray(t)){for(var n=0,i=t.length;n0&&(e.patches=[],e.callback&&e.callback(i)),i}function pt(e,t,n,i,r){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var s=Fe(t),o=Fe(e),c=!1,a=o.length-1;a>=0;a--){var l=e[u=o[a]];if(!Ke(t,u)||void 0===t[u]&&void 0!==l&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(r&&n.push({op:"test",path:i+"/"+_e(u),value:Qe(l)}),n.push({op:"remove",path:i+"/"+_e(u)}),c=!0):(r&&n.push({op:"test",path:i,value:e}),n.push({op:"replace",path:i,value:t}));else{var d=t[u];"object"==typeof l&&null!=l&&"object"==typeof d&&null!=d?pt(l,d,n,i+"/"+_e(u),r):l!==d&&(r&&n.push({op:"test",path:i+"/"+_e(u),value:Qe(l)}),n.push({op:"replace",path:i+"/"+_e(u),value:Qe(d)}))}}if(c||s.length!=o.length)for(a=0;a>24&255,e[t+1]=n>>16&255,e[t+2]=n>>8&255,e[t+3]=255&n,e[t+4]=i>>24&255,e[t+5]=i>>16&255,e[t+6]=i>>8&255,e[t+7]=255&i}function h(e,t,n,i,r){var s,o=0;for(s=0;s>>8)-1}function f(e,t,n,i){return h(e,t,n,i,16)}function v(e,t,n,i){return h(e,t,n,i,32)}function p(e,t,n,i){!function(e,t,n,i){for(var r,s=255&i[0]|(255&i[1])<<8|(255&i[2])<<16|(255&i[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,c=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,a=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,l=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,d=255&i[4]|(255&i[5])<<8|(255&i[6])<<16|(255&i[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,A=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,m=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,h=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,f=255&i[8]|(255&i[9])<<8|(255&i[10])<<16|(255&i[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,p=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,w=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,y=255&i[12]|(255&i[13])<<8|(255&i[14])<<16|(255&i[15])<<24,b=s,I=o,V=c,E=a,R=l,z=d,q=u,B=A,M=m,C=h,D=f,O=v,P=p,Z=g,N=w,H=y,k=0;k<20;k+=2)b^=(r=(P^=(r=(M^=(r=(R^=(r=b+P|0)<<7|r>>>25)+b|0)<<9|r>>>23)+R|0)<<13|r>>>19)+M|0)<<18|r>>>14,z^=(r=(I^=(r=(Z^=(r=(C^=(r=z+I|0)<<7|r>>>25)+z|0)<<9|r>>>23)+C|0)<<13|r>>>19)+Z|0)<<18|r>>>14,D^=(r=(q^=(r=(V^=(r=(N^=(r=D+q|0)<<7|r>>>25)+D|0)<<9|r>>>23)+N|0)<<13|r>>>19)+V|0)<<18|r>>>14,H^=(r=(O^=(r=(B^=(r=(E^=(r=H+O|0)<<7|r>>>25)+H|0)<<9|r>>>23)+E|0)<<13|r>>>19)+B|0)<<18|r>>>14,b^=(r=(E^=(r=(V^=(r=(I^=(r=b+E|0)<<7|r>>>25)+b|0)<<9|r>>>23)+I|0)<<13|r>>>19)+V|0)<<18|r>>>14,z^=(r=(R^=(r=(B^=(r=(q^=(r=z+R|0)<<7|r>>>25)+z|0)<<9|r>>>23)+q|0)<<13|r>>>19)+B|0)<<18|r>>>14,D^=(r=(C^=(r=(M^=(r=(O^=(r=D+C|0)<<7|r>>>25)+D|0)<<9|r>>>23)+O|0)<<13|r>>>19)+M|0)<<18|r>>>14,H^=(r=(N^=(r=(Z^=(r=(P^=(r=H+N|0)<<7|r>>>25)+H|0)<<9|r>>>23)+P|0)<<13|r>>>19)+Z|0)<<18|r>>>14;b=b+s|0,I=I+o|0,V=V+c|0,E=E+a|0,R=R+l|0,z=z+d|0,q=q+u|0,B=B+A|0,M=M+m|0,C=C+h|0,D=D+f|0,O=O+v|0,P=P+p|0,Z=Z+g|0,N=N+w|0,H=H+y|0,e[0]=b>>>0&255,e[1]=b>>>8&255,e[2]=b>>>16&255,e[3]=b>>>24&255,e[4]=I>>>0&255,e[5]=I>>>8&255,e[6]=I>>>16&255,e[7]=I>>>24&255,e[8]=V>>>0&255,e[9]=V>>>8&255,e[10]=V>>>16&255,e[11]=V>>>24&255,e[12]=E>>>0&255,e[13]=E>>>8&255,e[14]=E>>>16&255,e[15]=E>>>24&255,e[16]=R>>>0&255,e[17]=R>>>8&255,e[18]=R>>>16&255,e[19]=R>>>24&255,e[20]=z>>>0&255,e[21]=z>>>8&255,e[22]=z>>>16&255,e[23]=z>>>24&255,e[24]=q>>>0&255,e[25]=q>>>8&255,e[26]=q>>>16&255,e[27]=q>>>24&255,e[28]=B>>>0&255,e[29]=B>>>8&255,e[30]=B>>>16&255,e[31]=B>>>24&255,e[32]=M>>>0&255,e[33]=M>>>8&255,e[34]=M>>>16&255,e[35]=M>>>24&255,e[36]=C>>>0&255,e[37]=C>>>8&255,e[38]=C>>>16&255,e[39]=C>>>24&255,e[40]=D>>>0&255,e[41]=D>>>8&255,e[42]=D>>>16&255,e[43]=D>>>24&255,e[44]=O>>>0&255,e[45]=O>>>8&255,e[46]=O>>>16&255,e[47]=O>>>24&255,e[48]=P>>>0&255,e[49]=P>>>8&255,e[50]=P>>>16&255,e[51]=P>>>24&255,e[52]=Z>>>0&255,e[53]=Z>>>8&255,e[54]=Z>>>16&255,e[55]=Z>>>24&255,e[56]=N>>>0&255,e[57]=N>>>8&255,e[58]=N>>>16&255,e[59]=N>>>24&255,e[60]=H>>>0&255,e[61]=H>>>8&255,e[62]=H>>>16&255,e[63]=H>>>24&255}(e,t,n,i)}function g(e,t,n,i){!function(e,t,n,i){for(var r,s=255&i[0]|(255&i[1])<<8|(255&i[2])<<16|(255&i[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,c=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,a=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,l=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,d=255&i[4]|(255&i[5])<<8|(255&i[6])<<16|(255&i[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,A=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,m=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,h=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,f=255&i[8]|(255&i[9])<<8|(255&i[10])<<16|(255&i[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,p=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,w=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,y=255&i[12]|(255&i[13])<<8|(255&i[14])<<16|(255&i[15])<<24,b=0;b<20;b+=2)s^=(r=(p^=(r=(m^=(r=(l^=(r=s+p|0)<<7|r>>>25)+s|0)<<9|r>>>23)+l|0)<<13|r>>>19)+m|0)<<18|r>>>14,d^=(r=(o^=(r=(g^=(r=(h^=(r=d+o|0)<<7|r>>>25)+d|0)<<9|r>>>23)+h|0)<<13|r>>>19)+g|0)<<18|r>>>14,f^=(r=(u^=(r=(c^=(r=(w^=(r=f+u|0)<<7|r>>>25)+f|0)<<9|r>>>23)+w|0)<<13|r>>>19)+c|0)<<18|r>>>14,y^=(r=(v^=(r=(A^=(r=(a^=(r=y+v|0)<<7|r>>>25)+y|0)<<9|r>>>23)+a|0)<<13|r>>>19)+A|0)<<18|r>>>14,s^=(r=(a^=(r=(c^=(r=(o^=(r=s+a|0)<<7|r>>>25)+s|0)<<9|r>>>23)+o|0)<<13|r>>>19)+c|0)<<18|r>>>14,d^=(r=(l^=(r=(A^=(r=(u^=(r=d+l|0)<<7|r>>>25)+d|0)<<9|r>>>23)+u|0)<<13|r>>>19)+A|0)<<18|r>>>14,f^=(r=(h^=(r=(m^=(r=(v^=(r=f+h|0)<<7|r>>>25)+f|0)<<9|r>>>23)+v|0)<<13|r>>>19)+m|0)<<18|r>>>14,y^=(r=(w^=(r=(g^=(r=(p^=(r=y+w|0)<<7|r>>>25)+y|0)<<9|r>>>23)+p|0)<<13|r>>>19)+g|0)<<18|r>>>14;e[0]=s>>>0&255,e[1]=s>>>8&255,e[2]=s>>>16&255,e[3]=s>>>24&255,e[4]=d>>>0&255,e[5]=d>>>8&255,e[6]=d>>>16&255,e[7]=d>>>24&255,e[8]=f>>>0&255,e[9]=f>>>8&255,e[10]=f>>>16&255,e[11]=f>>>24&255,e[12]=y>>>0&255,e[13]=y>>>8&255,e[14]=y>>>16&255,e[15]=y>>>24&255,e[16]=u>>>0&255,e[17]=u>>>8&255,e[18]=u>>>16&255,e[19]=u>>>24&255,e[20]=A>>>0&255,e[21]=A>>>8&255,e[22]=A>>>16&255,e[23]=A>>>24&255,e[24]=m>>>0&255,e[25]=m>>>8&255,e[26]=m>>>16&255,e[27]=m>>>24&255,e[28]=h>>>0&255,e[29]=h>>>8&255,e[30]=h>>>16&255,e[31]=h>>>24&255}(e,t,n,i)}var w=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function y(e,t,n,i,r,s,o){var c,a,l=new Uint8Array(16),d=new Uint8Array(64);for(a=0;a<16;a++)l[a]=0;for(a=0;a<8;a++)l[a]=s[a];for(;r>=64;){for(p(d,l,o,w),a=0;a<64;a++)e[t+a]=n[i+a]^d[a];for(c=1,a=8;a<16;a++)c=c+(255&l[a])|0,l[a]=255&c,c>>>=8;r-=64,t+=64,i+=64}if(r>0)for(p(d,l,o,w),a=0;a=64;){for(p(a,c,r,w),o=0;o<64;o++)e[t+o]=a[o];for(s=1,o=8;o<16;o++)s=s+(255&c[o])|0,c[o]=255&s,s>>>=8;n-=64,t+=64}if(n>0)for(p(a,c,r,w),o=0;o>>13|n<<3),i=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(n>>>10|i<<6),r=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(i>>>7|r<<9),s=255&e[8]|(255&e[9])<<8,this.r[4]=255&(r>>>4|s<<12),this.r[5]=s>>>1&8190,o=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(s>>>14|o<<2),c=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(o>>>11|c<<5),a=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(c>>>8|a<<8),this.r[9]=a>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};function R(e,t,n,i,r,s){var o=new E(s);return o.update(n,i,r),o.finish(e,t),0}function z(e,t,n,i,r,s){var o=new Uint8Array(16);return R(o,0,n,i,r,s),f(e,t,o,0)}function q(e,t,n,i,r){var s;if(n<32)return-1;for(V(e,0,t,0,n,i,r),R(e,16,e,32,n-32,e),s=0;s<16;s++)e[s]=0;return 0}function B(e,t,n,i,r){var s,o=new Uint8Array(32);if(n<32)return-1;if(I(o,0,32,i,r),0!==z(t,16,t,32,n-32,o))return-1;for(V(e,0,t,0,n,i,r),s=0;s<32;s++)e[s]=0;return 0}function M(e,t){var n;for(n=0;n<16;n++)e[n]=0|t[n]}function C(e){var t,n,i=1;for(t=0;t<16;t++)n=e[t]+i+65535,i=Math.floor(n/65536),e[t]=n-65536*i;e[0]+=i-1+37*(i-1)}function D(e,t,n){for(var i,r=~(n-1),s=0;s<16;s++)i=r&(e[s]^t[s]),e[s]^=i,t[s]^=i}function O(e,n){var i,r,s,o=t(),c=t();for(i=0;i<16;i++)c[i]=n[i];for(C(c),C(c),C(c),r=0;r<2;r++){for(o[0]=c[0]-65517,i=1;i<15;i++)o[i]=c[i]-65535-(o[i-1]>>16&1),o[i-1]&=65535;o[15]=c[15]-32767-(o[14]>>16&1),s=o[15]>>16&1,o[14]&=65535,D(c,o,1-s)}for(i=0;i<16;i++)e[2*i]=255&c[i],e[2*i+1]=c[i]>>8}function P(e,t){var n=new Uint8Array(32),i=new Uint8Array(32);return O(n,e),O(i,t),v(n,0,i,0)}function Z(e){var t=new Uint8Array(32);return O(t,e),1&t[0]}function N(e,t){var n;for(n=0;n<16;n++)e[n]=t[2*n]+(t[2*n+1]<<8);e[15]&=32767}function H(e,t,n){for(var i=0;i<16;i++)e[i]=t[i]+n[i]}function k(e,t,n){for(var i=0;i<16;i++)e[i]=t[i]-n[i]}function j(e,t,n){var i,r,s=0,o=0,c=0,a=0,l=0,d=0,u=0,A=0,m=0,h=0,f=0,v=0,p=0,g=0,w=0,y=0,b=0,I=0,V=0,E=0,R=0,z=0,q=0,B=0,M=0,C=0,D=0,O=0,P=0,Z=0,N=0,H=n[0],k=n[1],j=n[2],x=n[3],X=n[4],T=n[5],S=n[6],L=n[7],J=n[8],Y=n[9],G=n[10],W=n[11],K=n[12],F=n[13],Q=n[14],U=n[15];s+=(i=t[0])*H,o+=i*k,c+=i*j,a+=i*x,l+=i*X,d+=i*T,u+=i*S,A+=i*L,m+=i*J,h+=i*Y,f+=i*G,v+=i*W,p+=i*K,g+=i*F,w+=i*Q,y+=i*U,o+=(i=t[1])*H,c+=i*k,a+=i*j,l+=i*x,d+=i*X,u+=i*T,A+=i*S,m+=i*L,h+=i*J,f+=i*Y,v+=i*G,p+=i*W,g+=i*K,w+=i*F,y+=i*Q,b+=i*U,c+=(i=t[2])*H,a+=i*k,l+=i*j,d+=i*x,u+=i*X,A+=i*T,m+=i*S,h+=i*L,f+=i*J,v+=i*Y,p+=i*G,g+=i*W,w+=i*K,y+=i*F,b+=i*Q,I+=i*U,a+=(i=t[3])*H,l+=i*k,d+=i*j,u+=i*x,A+=i*X,m+=i*T,h+=i*S,f+=i*L,v+=i*J,p+=i*Y,g+=i*G,w+=i*W,y+=i*K,b+=i*F,I+=i*Q,V+=i*U,l+=(i=t[4])*H,d+=i*k,u+=i*j,A+=i*x,m+=i*X,h+=i*T,f+=i*S,v+=i*L,p+=i*J,g+=i*Y,w+=i*G,y+=i*W,b+=i*K,I+=i*F,V+=i*Q,E+=i*U,d+=(i=t[5])*H,u+=i*k,A+=i*j,m+=i*x,h+=i*X,f+=i*T,v+=i*S,p+=i*L,g+=i*J,w+=i*Y,y+=i*G,b+=i*W,I+=i*K,V+=i*F,E+=i*Q,R+=i*U,u+=(i=t[6])*H,A+=i*k,m+=i*j,h+=i*x,f+=i*X,v+=i*T,p+=i*S,g+=i*L,w+=i*J,y+=i*Y,b+=i*G,I+=i*W,V+=i*K,E+=i*F,R+=i*Q,z+=i*U,A+=(i=t[7])*H,m+=i*k,h+=i*j,f+=i*x,v+=i*X,p+=i*T,g+=i*S,w+=i*L,y+=i*J,b+=i*Y,I+=i*G,V+=i*W,E+=i*K,R+=i*F,z+=i*Q,q+=i*U,m+=(i=t[8])*H,h+=i*k,f+=i*j,v+=i*x,p+=i*X,g+=i*T,w+=i*S,y+=i*L,b+=i*J,I+=i*Y,V+=i*G,E+=i*W,R+=i*K,z+=i*F,q+=i*Q,B+=i*U,h+=(i=t[9])*H,f+=i*k,v+=i*j,p+=i*x,g+=i*X,w+=i*T,y+=i*S,b+=i*L,I+=i*J,V+=i*Y,E+=i*G,R+=i*W,z+=i*K,q+=i*F,B+=i*Q,M+=i*U,f+=(i=t[10])*H,v+=i*k,p+=i*j,g+=i*x,w+=i*X,y+=i*T,b+=i*S,I+=i*L,V+=i*J,E+=i*Y,R+=i*G,z+=i*W,q+=i*K,B+=i*F,M+=i*Q,C+=i*U,v+=(i=t[11])*H,p+=i*k,g+=i*j,w+=i*x,y+=i*X,b+=i*T,I+=i*S,V+=i*L,E+=i*J,R+=i*Y,z+=i*G,q+=i*W,B+=i*K,M+=i*F,C+=i*Q,D+=i*U,p+=(i=t[12])*H,g+=i*k,w+=i*j,y+=i*x,b+=i*X,I+=i*T,V+=i*S,E+=i*L,R+=i*J,z+=i*Y,q+=i*G,B+=i*W,M+=i*K,C+=i*F,D+=i*Q,O+=i*U,g+=(i=t[13])*H,w+=i*k,y+=i*j,b+=i*x,I+=i*X,V+=i*T,E+=i*S,R+=i*L,z+=i*J,q+=i*Y,B+=i*G,M+=i*W,C+=i*K,D+=i*F,O+=i*Q,P+=i*U,w+=(i=t[14])*H,y+=i*k,b+=i*j,I+=i*x,V+=i*X,E+=i*T,R+=i*S,z+=i*L,q+=i*J,B+=i*Y,M+=i*G,C+=i*W,D+=i*K,O+=i*F,P+=i*Q,Z+=i*U,y+=(i=t[15])*H,o+=38*(I+=i*j),c+=38*(V+=i*x),a+=38*(E+=i*X),l+=38*(R+=i*T),d+=38*(z+=i*S),u+=38*(q+=i*L),A+=38*(B+=i*J),m+=38*(M+=i*Y),h+=38*(C+=i*G),f+=38*(D+=i*W),v+=38*(O+=i*K),p+=38*(P+=i*F),g+=38*(Z+=i*Q),w+=38*(N+=i*U),s=(i=(s+=38*(b+=i*k))+(r=1)+65535)-65536*(r=Math.floor(i/65536)),o=(i=o+r+65535)-65536*(r=Math.floor(i/65536)),c=(i=c+r+65535)-65536*(r=Math.floor(i/65536)),a=(i=a+r+65535)-65536*(r=Math.floor(i/65536)),l=(i=l+r+65535)-65536*(r=Math.floor(i/65536)),d=(i=d+r+65535)-65536*(r=Math.floor(i/65536)),u=(i=u+r+65535)-65536*(r=Math.floor(i/65536)),A=(i=A+r+65535)-65536*(r=Math.floor(i/65536)),m=(i=m+r+65535)-65536*(r=Math.floor(i/65536)),h=(i=h+r+65535)-65536*(r=Math.floor(i/65536)),f=(i=f+r+65535)-65536*(r=Math.floor(i/65536)),v=(i=v+r+65535)-65536*(r=Math.floor(i/65536)),p=(i=p+r+65535)-65536*(r=Math.floor(i/65536)),g=(i=g+r+65535)-65536*(r=Math.floor(i/65536)),w=(i=w+r+65535)-65536*(r=Math.floor(i/65536)),y=(i=y+r+65535)-65536*(r=Math.floor(i/65536)),s=(i=(s+=r-1+37*(r-1))+(r=1)+65535)-65536*(r=Math.floor(i/65536)),o=(i=o+r+65535)-65536*(r=Math.floor(i/65536)),c=(i=c+r+65535)-65536*(r=Math.floor(i/65536)),a=(i=a+r+65535)-65536*(r=Math.floor(i/65536)),l=(i=l+r+65535)-65536*(r=Math.floor(i/65536)),d=(i=d+r+65535)-65536*(r=Math.floor(i/65536)),u=(i=u+r+65535)-65536*(r=Math.floor(i/65536)),A=(i=A+r+65535)-65536*(r=Math.floor(i/65536)),m=(i=m+r+65535)-65536*(r=Math.floor(i/65536)),h=(i=h+r+65535)-65536*(r=Math.floor(i/65536)),f=(i=f+r+65535)-65536*(r=Math.floor(i/65536)),v=(i=v+r+65535)-65536*(r=Math.floor(i/65536)),p=(i=p+r+65535)-65536*(r=Math.floor(i/65536)),g=(i=g+r+65535)-65536*(r=Math.floor(i/65536)),w=(i=w+r+65535)-65536*(r=Math.floor(i/65536)),y=(i=y+r+65535)-65536*(r=Math.floor(i/65536)),s+=r-1+37*(r-1),e[0]=s,e[1]=o,e[2]=c,e[3]=a,e[4]=l,e[5]=d,e[6]=u,e[7]=A,e[8]=m,e[9]=h,e[10]=f,e[11]=v,e[12]=p,e[13]=g,e[14]=w,e[15]=y}function x(e,t){j(e,t,t)}function X(e,n){var i,r=t();for(i=0;i<16;i++)r[i]=n[i];for(i=253;i>=0;i--)x(r,r),2!==i&&4!==i&&j(r,r,n);for(i=0;i<16;i++)e[i]=r[i]}function T(e,n){var i,r=t();for(i=0;i<16;i++)r[i]=n[i];for(i=250;i>=0;i--)x(r,r),1!==i&&j(r,r,n);for(i=0;i<16;i++)e[i]=r[i]}function S(e,n,i){var r,s,o=new Uint8Array(32),a=new Float64Array(80),l=t(),d=t(),u=t(),A=t(),m=t(),h=t();for(s=0;s<31;s++)o[s]=n[s];for(o[31]=127&n[31]|64,o[0]&=248,N(a,i),s=0;s<16;s++)d[s]=a[s],A[s]=l[s]=u[s]=0;for(l[0]=A[0]=1,s=254;s>=0;--s)D(l,d,r=o[s>>>3]>>>(7&s)&1),D(u,A,r),H(m,l,u),k(l,l,u),H(u,d,A),k(d,d,A),x(A,m),x(h,l),j(l,u,l),j(u,d,m),H(m,l,u),k(l,l,u),x(d,l),k(u,A,h),j(l,u,c),H(l,l,A),j(u,u,l),j(l,A,h),j(A,d,a),x(d,m),D(l,d,r),D(u,A,r);for(s=0;s<16;s++)a[s+16]=l[s],a[s+32]=u[s],a[s+48]=d[s],a[s+64]=A[s];var f=a.subarray(32),v=a.subarray(16);return X(f,f),j(v,v,f),O(e,v),0}function L(e,t){return S(e,t,r)}function J(e,t){return n(t,32),L(e,t)}function Y(e,t,n){var r=new Uint8Array(32);return S(r,n,t),g(e,i,r,w)}E.prototype.blocks=function(e,t,n){for(var i,r,s,o,c,a,l,d,u,A,m,h,f,v,p,g,w,y,b,I=this.fin?0:2048,V=this.h[0],E=this.h[1],R=this.h[2],z=this.h[3],q=this.h[4],B=this.h[5],M=this.h[6],C=this.h[7],D=this.h[8],O=this.h[9],P=this.r[0],Z=this.r[1],N=this.r[2],H=this.r[3],k=this.r[4],j=this.r[5],x=this.r[6],X=this.r[7],T=this.r[8],S=this.r[9];n>=16;)A=u=0,A+=(V+=8191&(i=255&e[t+0]|(255&e[t+1])<<8))*P,A+=(E+=8191&(i>>>13|(r=255&e[t+2]|(255&e[t+3])<<8)<<3))*(5*S),A+=(R+=8191&(r>>>10|(s=255&e[t+4]|(255&e[t+5])<<8)<<6))*(5*T),A+=(z+=8191&(s>>>7|(o=255&e[t+6]|(255&e[t+7])<<8)<<9))*(5*X),u=(A+=(q+=8191&(o>>>4|(c=255&e[t+8]|(255&e[t+9])<<8)<<12))*(5*x))>>>13,A&=8191,A+=(B+=c>>>1&8191)*(5*j),A+=(M+=8191&(c>>>14|(a=255&e[t+10]|(255&e[t+11])<<8)<<2))*(5*k),A+=(C+=8191&(a>>>11|(l=255&e[t+12]|(255&e[t+13])<<8)<<5))*(5*H),A+=(D+=8191&(l>>>8|(d=255&e[t+14]|(255&e[t+15])<<8)<<8))*(5*N),m=u+=(A+=(O+=d>>>5|I)*(5*Z))>>>13,m+=V*Z,m+=E*P,m+=R*(5*S),m+=z*(5*T),u=(m+=q*(5*X))>>>13,m&=8191,m+=B*(5*x),m+=M*(5*j),m+=C*(5*k),m+=D*(5*H),u+=(m+=O*(5*N))>>>13,m&=8191,h=u,h+=V*N,h+=E*Z,h+=R*P,h+=z*(5*S),u=(h+=q*(5*T))>>>13,h&=8191,h+=B*(5*X),h+=M*(5*x),h+=C*(5*j),h+=D*(5*k),f=u+=(h+=O*(5*H))>>>13,f+=V*H,f+=E*N,f+=R*Z,f+=z*P,u=(f+=q*(5*S))>>>13,f&=8191,f+=B*(5*T),f+=M*(5*X),f+=C*(5*x),f+=D*(5*j),v=u+=(f+=O*(5*k))>>>13,v+=V*k,v+=E*H,v+=R*N,v+=z*Z,u=(v+=q*P)>>>13,v&=8191,v+=B*(5*S),v+=M*(5*T),v+=C*(5*X),v+=D*(5*x),p=u+=(v+=O*(5*j))>>>13,p+=V*j,p+=E*k,p+=R*H,p+=z*N,u=(p+=q*Z)>>>13,p&=8191,p+=B*P,p+=M*(5*S),p+=C*(5*T),p+=D*(5*X),g=u+=(p+=O*(5*x))>>>13,g+=V*x,g+=E*j,g+=R*k,g+=z*H,u=(g+=q*N)>>>13,g&=8191,g+=B*Z,g+=M*P,g+=C*(5*S),g+=D*(5*T),w=u+=(g+=O*(5*X))>>>13,w+=V*X,w+=E*x,w+=R*j,w+=z*k,u=(w+=q*H)>>>13,w&=8191,w+=B*N,w+=M*Z,w+=C*P,w+=D*(5*S),y=u+=(w+=O*(5*T))>>>13,y+=V*T,y+=E*X,y+=R*x,y+=z*j,u=(y+=q*k)>>>13,y&=8191,y+=B*H,y+=M*N,y+=C*Z,y+=D*P,b=u+=(y+=O*(5*S))>>>13,b+=V*S,b+=E*T,b+=R*X,b+=z*x,u=(b+=q*j)>>>13,b&=8191,b+=B*k,b+=M*H,b+=C*N,b+=D*Z,V=A=8191&(u=(u=((u+=(b+=O*P)>>>13)<<2)+u|0)+(A&=8191)|0),E=m+=u>>>=13,R=h&=8191,z=f&=8191,q=v&=8191,B=p&=8191,M=g&=8191,C=w&=8191,D=y&=8191,O=b&=8191,t+=16,n-=16;this.h[0]=V,this.h[1]=E,this.h[2]=R,this.h[3]=z,this.h[4]=q,this.h[5]=B,this.h[6]=M,this.h[7]=C,this.h[8]=D,this.h[9]=O},E.prototype.finish=function(e,t){var n,i,r,s,o=new Uint16Array(10);if(this.leftover){for(s=this.leftover,this.buffer[s++]=1;s<16;s++)this.buffer[s]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,s=2;s<10;s++)this.h[s]+=n,n=this.h[s]>>>13,this.h[s]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,o[0]=this.h[0]+5,n=o[0]>>>13,o[0]&=8191,s=1;s<10;s++)o[s]=this.h[s]+n,n=o[s]>>>13,o[s]&=8191;for(o[9]-=8192,i=(1^n)-1,s=0;s<10;s++)o[s]&=i;for(i=~i,s=0;s<10;s++)this.h[s]=this.h[s]&i|o[s];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),r=this.h[0]+this.pad[0],this.h[0]=65535&r,s=1;s<8;s++)r=(this.h[s]+this.pad[s]|0)+(r>>>16)|0,this.h[s]=65535&r;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},E.prototype.update=function(e,t,n){var i,r;if(this.leftover){for((r=16-this.leftover)>n&&(r=n),i=0;i=16&&(r=n-n%16,this.blocks(e,t,r),t+=r,n-=r),n){for(i=0;i=128;){for(I=0;I<16;I++)V=8*I+F,C[I]=n[V+0]<<24|n[V+1]<<16|n[V+2]<<8|n[V+3],D[I]=n[V+4]<<24|n[V+5]<<16|n[V+6]<<8|n[V+7];for(I=0;I<80;I++)if(r=O,s=P,o=Z,c=N,a=H,l=k,d=j,x,A=X,m=T,h=S,f=L,v=J,p=Y,g=G,W,z=65535&(R=W),q=R>>>16,B=65535&(E=x),M=E>>>16,z+=65535&(R=(J>>>14|H<<18)^(J>>>18|H<<14)^(H>>>9|J<<23)),q+=R>>>16,B+=65535&(E=(H>>>14|J<<18)^(H>>>18|J<<14)^(J>>>9|H<<23)),M+=E>>>16,z+=65535&(R=J&Y^~J&G),q+=R>>>16,B+=65535&(E=H&k^~H&j),M+=E>>>16,E=K[2*I],z+=65535&(R=K[2*I+1]),q+=R>>>16,B+=65535&E,M+=E>>>16,E=C[I%16],q+=(R=D[I%16])>>>16,B+=65535&E,M+=E>>>16,B+=(q+=(z+=65535&R)>>>16)>>>16,z=65535&(R=b=65535&z|q<<16),q=R>>>16,B=65535&(E=y=65535&B|(M+=B>>>16)<<16),M=E>>>16,z+=65535&(R=(X>>>28|O<<4)^(O>>>2|X<<30)^(O>>>7|X<<25)),q+=R>>>16,B+=65535&(E=(O>>>28|X<<4)^(X>>>2|O<<30)^(X>>>7|O<<25)),M+=E>>>16,q+=(R=X&T^X&S^T&S)>>>16,B+=65535&(E=O&P^O&Z^P&Z),M+=E>>>16,u=65535&(B+=(q+=(z+=65535&R)>>>16)>>>16)|(M+=B>>>16)<<16,w=65535&z|q<<16,z=65535&(R=f),q=R>>>16,B=65535&(E=c),M=E>>>16,q+=(R=b)>>>16,B+=65535&(E=y),M+=E>>>16,P=r,Z=s,N=o,H=c=65535&(B+=(q+=(z+=65535&R)>>>16)>>>16)|(M+=B>>>16)<<16,k=a,j=l,x=d,O=u,T=A,S=m,L=h,J=f=65535&z|q<<16,Y=v,G=p,W=g,X=w,I%16==15)for(V=0;V<16;V++)E=C[V],z=65535&(R=D[V]),q=R>>>16,B=65535&E,M=E>>>16,E=C[(V+9)%16],z+=65535&(R=D[(V+9)%16]),q+=R>>>16,B+=65535&E,M+=E>>>16,y=C[(V+1)%16],z+=65535&(R=((b=D[(V+1)%16])>>>1|y<<31)^(b>>>8|y<<24)^(b>>>7|y<<25)),q+=R>>>16,B+=65535&(E=(y>>>1|b<<31)^(y>>>8|b<<24)^y>>>7),M+=E>>>16,y=C[(V+14)%16],q+=(R=((b=D[(V+14)%16])>>>19|y<<13)^(y>>>29|b<<3)^(b>>>6|y<<26))>>>16,B+=65535&(E=(y>>>19|b<<13)^(b>>>29|y<<3)^y>>>6),M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,C[V]=65535&B|M<<16,D[V]=65535&z|q<<16;z=65535&(R=X),q=R>>>16,B=65535&(E=O),M=E>>>16,E=e[0],q+=(R=t[0])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[0]=O=65535&B|M<<16,t[0]=X=65535&z|q<<16,z=65535&(R=T),q=R>>>16,B=65535&(E=P),M=E>>>16,E=e[1],q+=(R=t[1])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[1]=P=65535&B|M<<16,t[1]=T=65535&z|q<<16,z=65535&(R=S),q=R>>>16,B=65535&(E=Z),M=E>>>16,E=e[2],q+=(R=t[2])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[2]=Z=65535&B|M<<16,t[2]=S=65535&z|q<<16,z=65535&(R=L),q=R>>>16,B=65535&(E=N),M=E>>>16,E=e[3],q+=(R=t[3])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[3]=N=65535&B|M<<16,t[3]=L=65535&z|q<<16,z=65535&(R=J),q=R>>>16,B=65535&(E=H),M=E>>>16,E=e[4],q+=(R=t[4])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[4]=H=65535&B|M<<16,t[4]=J=65535&z|q<<16,z=65535&(R=Y),q=R>>>16,B=65535&(E=k),M=E>>>16,E=e[5],q+=(R=t[5])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[5]=k=65535&B|M<<16,t[5]=Y=65535&z|q<<16,z=65535&(R=G),q=R>>>16,B=65535&(E=j),M=E>>>16,E=e[6],q+=(R=t[6])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[6]=j=65535&B|M<<16,t[6]=G=65535&z|q<<16,z=65535&(R=W),q=R>>>16,B=65535&(E=x),M=E>>>16,E=e[7],q+=(R=t[7])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[7]=x=65535&B|M<<16,t[7]=W=65535&z|q<<16,F+=128,i-=128}return i}function Q(e,t,n){var i,r=new Int32Array(8),s=new Int32Array(8),o=new Uint8Array(256),c=n;for(r[0]=1779033703,r[1]=3144134277,r[2]=1013904242,r[3]=2773480762,r[4]=1359893119,r[5]=2600822924,r[6]=528734635,r[7]=1541459225,s[0]=4089235720,s[1]=2227873595,s[2]=4271175723,s[3]=1595750129,s[4]=2917565137,s[5]=725511199,s[6]=4215389547,s[7]=327033209,F(r,s,t,n),n%=128,i=0;i=0;--r)_(e,t,i=n[r/8|0]>>(7&r)&1),U(t,e),U(e,e),_(e,t,i)}function te(e,n){var i=[t(),t(),t(),t()];M(i[0],d),M(i[1],u),M(i[2],o),j(i[3],d,u),ee(e,i,n)}function ne(e,i,r){var s,o=new Uint8Array(64),c=[t(),t(),t(),t()];for(r||n(i,32),Q(o,i,32),o[0]&=248,o[31]&=127,o[31]|=64,te(c,o),$(e,c),s=0;s<32;s++)i[s+32]=e[s];return 0}var ie=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function re(e,t){var n,i,r,s;for(i=63;i>=32;--i){for(n=0,r=i-32,s=i-12;r>4)*ie[r],n=t[r]>>8,t[r]&=255;for(r=0;r<32;r++)t[r]-=n*ie[r];for(i=0;i<32;i++)t[i+1]+=t[i]>>8,e[i]=255&t[i]}function se(e){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=e[t];for(t=0;t<64;t++)e[t]=0;re(e,n)}function oe(e,n,i,r){var s,o,c=new Uint8Array(64),a=new Uint8Array(64),l=new Uint8Array(64),d=new Float64Array(64),u=[t(),t(),t(),t()];Q(c,r,32),c[0]&=248,c[31]&=127,c[31]|=64;var A=i+64;for(s=0;s>7&&k(e[0],s,e[0]),j(e[3],e[0],e[1]),0)}(m,r))return-1;for(c=0;c=0},e.sign.keyPair=function(){var e=new Uint8Array(32),t=new Uint8Array(64);return ne(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if(he(e),64!==e.length)throw new Error("bad secret key size");for(var t=new Uint8Array(32),n=0;ne.toString(16).padStart(2,"0")).join("")}function Ot(e){const t=e.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g);return new Uint8Array(t.map(e=>parseInt(e,16)))}function Pt(e,t=8){const n=new Array(t).fill(0);for(let t=0;t 0) { + observer.patches = []; + if (observer.callback) { + observer.callback(temp); + } + } + return temp; + } + // Dirty check if obj is different from mirror, generate patches and update mirror + function _generate(mirror, obj, patches, path, invertible) { + if (obj === mirror) { + return; + } + if (typeof obj.toJSON === "function") { + obj = obj.toJSON(); + } + var newKeys = _objectKeys(obj); + var oldKeys = _objectKeys(mirror); + var deleted = false; + //if ever "move" operation is implemented here, make sure this test runs OK: "should not generate the same patch twice (move)" + for (var t = oldKeys.length - 1; t >= 0; t--) { + var key = oldKeys[t]; + var oldVal = mirror[key]; + if (hasOwnProperty(obj, key) && !(obj[key] === undefined && oldVal !== undefined && Array.isArray(obj) === false)) { + var newVal = obj[key]; + if (typeof oldVal == "object" && oldVal != null && typeof newVal == "object" && newVal != null) { + _generate(oldVal, newVal, patches, path + "/" + escapePathComponent(key), invertible); + } + else { + if (oldVal !== newVal) { + if (invertible) { + patches.push({ op: "test", path: path + "/" + escapePathComponent(key), value: _deepClone(oldVal) }); + } + patches.push({ op: "replace", path: path + "/" + escapePathComponent(key), value: _deepClone(newVal) }); + } + } + } + else if (Array.isArray(mirror) === Array.isArray(obj)) { + if (invertible) { + patches.push({ op: "test", path: path + "/" + escapePathComponent(key), value: _deepClone(oldVal) }); + } + patches.push({ op: "remove", path: path + "/" + escapePathComponent(key) }); + deleted = true; // property has been deleted + } + else { + if (invertible) { + patches.push({ op: "test", path: path, value: mirror }); + } + patches.push({ op: "replace", path: path, value: obj }); + } + } + if (!deleted && newKeys.length == oldKeys.length) { + return; + } + for (var t = 0; t < newKeys.length; t++) { + var key = newKeys[t]; + if (!hasOwnProperty(mirror, key) && obj[key] !== undefined) { + patches.push({ op: "add", path: path + "/" + escapePathComponent(key), value: _deepClone(obj[key]) }); + } + } + } + /** + * Create an array of patches from the differences in two objects + */ + function compare(tree1, tree2, invertible) { + if (invertible === void 0) { invertible = false; } + var patches = []; + _generate(tree1, tree2, patches, '', invertible); + return patches; + } + + var duplex = /*#__PURE__*/Object.freeze({ + __proto__: null, + unobserve: unobserve, + observe: observe, + generate: generate, + compare: compare + }); + + Object.assign({}, core, duplex, { + JsonPatchError: PatchError, + deepClone: _deepClone, + escapePathComponent, + unescapePathComponent + }); + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; + } + + function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var a = Object.defineProperty({}, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; + } + + function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); + } + + var _nodeResolve_empty = {}; + + var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': _nodeResolve_empty + }); + + var require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1); + + var naclFast = createCommonjsModule(function (module) { + (function(nacl) { + + // Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. + // Public domain. + // + // Implementation derived from TweetNaCl version 20140427. + // See for details: http://tweetnacl.cr.yp.to/ + + var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; + }; + + // Pluggable, initialized in high-level API below. + var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + + var _0 = new Uint8Array(16); + var _9 = new Uint8Array(32); _9[0] = 9; + + var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + + function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; + } + + function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; + } + + function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); + } + + function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); + } + + function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; + } + + function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; + } + + function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); + } + + function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); + } + + var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + + function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; + } + + function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; + } + + function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); + } + + function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); + } + + /* + * Port of Andrew Moon's Poly1305-donna-16. Public domain. + * https://github.com/floodyberry/poly1305-donna + */ + + var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; + }; + + poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; + }; + + poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (c ^ 1) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; + }; + + poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } + }; + + function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; + } + + function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); + } + + function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; + } + + function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; + } + + function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; + } + + function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); + } + + function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } + } + + function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } + } + + function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); + } + + function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; + } + + function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; + } + + function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; + } + + function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; + } + + function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; + } + + function S(o, a) { + M(o, a, a); + } + + function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; + } + + function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; + } + + function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; + } + + function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); + } + + function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); + } + + function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); + } + + var crypto_box_afternm = crypto_secretbox; + var crypto_box_open_afternm = crypto_secretbox_open; + + function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); + } + + function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); + } + + var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 + ]; + + function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; + } + + function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; + } + + function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); + } + + function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } + } + + function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; + } + + function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } + } + + function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); + } + + function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; + } + + var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + + function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = Math.floor((x[j] + 128) / 256); + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } + } + + function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); + } + + // Note: difference from C - smlen returned, not passed as argument. + function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; + } + + function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; + } + + function crypto_sign_open(m, sm, n, pk) { + var i; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + return n; + } + + var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + + nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES, + + gf: gf, + D: D, + L: L, + pack25519: pack25519, + unpack25519: unpack25519, + M: M, + A: A, + S: S, + Z: Z, + pow2523: pow2523, + add: add, + set25519: set25519, + modL: modL, + scalarmult: scalarmult, + scalarbase: scalarbase, + }; + + /* High-level API */ + + function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); + } + + function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); + } + + function checkArrayTypes() { + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof Uint8Array)) + throw new TypeError('unexpected type, use Uint8Array'); + } + } + + function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; + } + + nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; + }; + + nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); + }; + + nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return null; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null; + return m.subarray(crypto_secretbox_ZEROBYTES); + }; + + nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; + nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; + nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + + nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; + }; + + nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; + }; + + nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; + nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + + nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); + }; + + nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; + }; + + nacl.box.after = nacl.secretbox; + + nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); + }; + + nacl.box.open.after = nacl.secretbox.open; + + nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; + }; + + nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; + }; + + nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; + nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; + nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; + nacl.box.nonceLength = crypto_box_NONCEBYTES; + nacl.box.overheadLength = nacl.secretbox.overheadLength; + + nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; + }; + + nacl.sign.open = function(signedMsg, publicKey) { + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; + }; + + nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; + }; + + nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); + }; + + nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; + }; + + nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; + }; + + nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; + }; + + nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; + nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; + nacl.sign.seedLength = crypto_sign_SEEDBYTES; + nacl.sign.signatureLength = crypto_sign_BYTES; + + nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; + }; + + nacl.hash.hashLength = crypto_hash_BYTES; + + nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; + }; + + nacl.setPRNG = function(fn) { + randombytes = fn; + }; + + (function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof commonjsRequire !== 'undefined') { + // Node.js. + crypto = require$$0; + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } + })(); + + })( module.exports ? module.exports : (self.nacl = self.nacl || {})); + }); + + var naclUtil = createCommonjsModule(function (module) { + // Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri. + // Public domain. + (function(root, f) { + if ( module.exports) module.exports = f(); + else if (root.nacl) root.nacl.util = f(); + else { + root.nacl = {}; + root.nacl.util = f(); + } + }(commonjsGlobal, function() { + + var util = {}; + + function validateBase64(s) { + if (!(/^(?:[A-Za-z0-9+\/]{2}[A-Za-z0-9+\/]{2})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/.test(s))) { + throw new TypeError('invalid encoding'); + } + } + + util.decodeUTF8 = function(s) { + if (typeof s !== 'string') throw new TypeError('expected string'); + var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; + }; + + util.encodeUTF8 = function(arr) { + var i, s = []; + for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i])); + return decodeURIComponent(escape(s.join(''))); + }; + + if (typeof atob === 'undefined') { + // Node.js + + if (typeof Buffer.from !== 'undefined') { + // Node v6 and later + util.encodeBase64 = function (arr) { // v6 and later + return Buffer.from(arr).toString('base64'); + }; + + util.decodeBase64 = function (s) { + validateBase64(s); + return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0)); + }; + + } else { + // Node earlier than v6 + util.encodeBase64 = function (arr) { // v6 and later + return (new Buffer(arr)).toString('base64'); + }; + + util.decodeBase64 = function(s) { + validateBase64(s); + return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0)); + }; + } + + } else { + // Browsers + + util.encodeBase64 = function(arr) { + var i, s = [], len = arr.length; + for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i])); + return btoa(s.join('')); + }; + + util.decodeBase64 = function(s) { + validateBase64(s); + var i, d = atob(s), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; + }; + + } + + return util; + + })); + }); + + function isObject(obj) { + return obj !== undefined && obj !== null && obj.constructor == Object; + } + + function addHeader(_msg, flag) { + const msg = new Uint8Array(_msg.length + 1); + + const header = new Uint8Array(1); + header[0] = flag; + + msg.set(header); + msg.set(_msg, header.length); + + return msg; + } + + function noop$1() {} + + class RunnableLink { + constructor(prev, next, fn) { + this.prev = prev; + this.next = next; + this.fn = fn || noop$1; + } + + run(data) { + this.fn(data); + this.next && this.next.run(data); + } + } + + class LinkedList { + constructor(linkConstructor) { + this.head = new RunnableLink(); + this.tail = new RunnableLink(this.head); + this.head.next = this.tail; + this.linkConstructor = linkConstructor; + this.reg = {}; + } + + insert(data) { + const link = new RunnableLink(this.tail.prev, this.tail, data); + link.next.prev = link; + link.prev.next = link; + return link; + } + + remove(link) { + link.prev.next = link.next; + link.next.prev = link.prev; + } + } + + let id = 0; + + class Eev { + constructor() { + this.__events_list = {}; + } + + on(name, fn) { + const list = this.__events_list[name] || (this.__events_list[name] = new LinkedList()); + const eev = fn._eev || (fn._eev = ++id); + + list.reg[eev] || (list.reg[eev] = list.insert(fn)); + } + + off(name, fn) { + if (fn) { + const list = this.__events_list[name]; + + if (!list) { + return; + } + + const link = list.reg[fn._eev]; + + list.reg[fn._eev] = undefined; + + list && link && list.remove(link); + } + } + + removeListener(...args) { + this.off(...args); + } + + emit(name, data) { + const evt = this.__events_list[name]; + evt && evt.head.run(data); + } + } + + function listify$1(obj) { + if (typeof obj == 'undefined' || obj == null) { + return []; + } + return Array.isArray(obj) ? obj : [obj]; + } + + function bufferToHex$1(buffer) { + return Array.from(new Uint8Array(buffer)) + .map(b => b.toString(16).padStart(2, '0')) + .join(''); + } + + function hexToBuffer$1(hex) { + const tokens = hex.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g); + return new Uint8Array(tokens.map(token => parseInt(token, 16))); + } + + function integerToByteArray(long, arrayLen = 8) { + const byteArray = new Array(arrayLen).fill(0); + + for (let index = 0; index < byteArray.length; index++) { + const byte = long & 0xff; + byteArray[index] = byte; + long = (long - byte) / 256; + } + + return byteArray; + } + + /** + * Module exports. + */ + + var browserUtilInspect = inspect; + + /** * Echos the value of a value. Trys to print the value out * in the best way possible given the different types. * * @param {Object} obj The object to print out. * @param {Object} opts Optional options object that alters the output. * @license MIT (© Joyent) - */function Nt(e,t){var n={seen:[],stylize:Ht};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),kt(t)?n.showHidden=t:t&&function(e,t){if(!t||!Yt(t))return e;var n=Object.keys(t),i=n.length;for(;i--;)e[n[i]]=t[n[i]]}(n,t),jt(n.showHidden)&&(n.showHidden=!1),jt(n.depth)&&(n.depth=2),jt(n.colors)&&(n.colors=!1),jt(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=xt),Qt(n,e,n.depth)}function Ht(e,t){return e}function kt(e){return"boolean"==typeof e}function jt(e){return void 0===e}function xt(e,t){var n=Nt.styles[t];return n?"["+Nt.colors[n][0]+"m"+e+"["+Nt.colors[n][1]+"m":e}function Xt(e){return"function"==typeof e}function Tt(e){return"string"==typeof e}function St(e){return null===e}function Lt(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Jt(e){return Yt(e)&&"[object RegExp]"===Kt(e)}function Yt(e){return"object"==typeof e&&null!==e}function Gt(e){return Yt(e)&&("[object Error]"===Kt(e)||e instanceof Error)}function Wt(e){return Yt(e)&&"[object Date]"===Kt(e)}function Kt(e){return Object.prototype.toString.call(e)}function Ft(e){return"["+Error.prototype.toString.call(e)+"]"}function Qt(e,t,n){if(e.customInspect&&t&&Xt(t.inspect)&&t.inspect!==Nt&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(n,e);return Tt(i)||(i=Qt(e,i,n)),i}var r=function(e,t){if(jt(t))return e.stylize("undefined","undefined");if(Tt(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(i=t,"number"==typeof i)return e.stylize(""+t,"number");var i;if(kt(t))return e.stylize(""+t,"boolean");if(St(t))return e.stylize("null","null")}(e,t);if(r)return r;var s=Object.keys(t),o=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(s);try{e.showHidden&&Object.getOwnPropertyNames&&(s=Object.getOwnPropertyNames(t))}catch(e){}if(Gt(t)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return Ft(t);if(0===s.length){if(Xt(t)){var c=t.name?": "+t.name:"";return e.stylize("[Function"+c+"]","special")}if(Jt(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(Wt(t))return e.stylize(Date.prototype.toString.call(t),"date");if(Gt(t))return Ft(t)}var a,l="",d=!1,u=["{","}"];(Array.isArray(t)&&(d=!0,u=["[","]"]),Xt(t))&&(l=" [Function"+(t.name?": "+t.name:"")+"]");return Jt(t)&&(l=" "+RegExp.prototype.toString.call(t)),Wt(t)&&(l=" "+Date.prototype.toUTCString.call(t)),Gt(t)&&(l=" "+Ft(t)),0!==s.length||d&&0!=t.length?n<0?Jt(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),a=d?function(e,t,n,i,r){for(var s=[],o=0,c=t.length;o60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(a,l,u)):u[0]+l+u[1]}function Ut(e,t,n,i,r,s){var o,c,a;a={value:void 0};try{a.value=t[r]}catch(e){}try{Object.getOwnPropertyDescriptor&&(a=Object.getOwnPropertyDescriptor(t,r)||a)}catch(e){}if(a.get?c=a.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):a.set&&(c=e.stylize("[Setter]","special")),Lt(i,r)||(o="["+r+"]"),c||(e.seen.indexOf(a.value)<0?(c=St(n)?Qt(e,a.value,null):Qt(e,a.value,n-1)).indexOf("\n")>-1&&(c=s?c.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+c.split("\n").map((function(e){return" "+e})).join("\n")):c=e.stylize("[Circular]","special")),jt(o)){if(s&&r.match(/^\d+$/))return c;(o=JSON.stringify(""+r)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+c}function _t(e,t,...n){try{t==console.log?t(`${(new Date).toLocaleString()} → ${Zt(...n).replace(/^'/,"").replace(/'$/,"")}`):"function"==typeof t?t(...n):t&&t.logOutput(e,{source:"connectome"},...n)}catch(e){console.log(e)}}Nt.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},Nt.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};var $t=new class{write(e,...t){_t(void 0,e,...t)}red(e,...t){_t("red",e,...t)}green(e,...t){_t("green",e,...t)}yellow(e,...t){_t("yellow",e,...t)}blue(e,...t){_t("blue",e,...t)}cyan(e,...t){_t("cyan",e,...t)}magenta(e,...t){_t("magenta",e,...t)}gray(e,...t){_t("gray",e,...t)}white(e,...t){_t("white",e,...t)}};function en({data:e,connector:t}){const{log:n}=t;var i;null!=(i=e)&&i.constructor==Object&&(e=JSON.stringify(e));const r=new Uint8Array(Pt(2*t.sentCount,24));if(t.closed())$t.red(n,`⚠️ Warning: "${e}" was not sent because connector is not ready`);else if(t.sentCount>1){let i=0;"string"==typeof e&&(i=1);const s=function(e,t){const n=new Uint8Array(e.length+1),i=new Uint8Array(1);return i[0]=t,n.set(i),n.set(e,i.length),n}(1==i?Et.util.decodeUTF8(e):e,i),o=Et.secretbox(s,r,t.sharedSecret);t.verbose&&($t.green(n,`Connector ${t.endpoint} → Sending encrypted message #${t.sentCount} ↴`),$t.gray(n,e)),t.connection.websocket.send(o)}else t.verbose&&($t.green(n,`Connector ${t.endpoint} → Sending message #${t.sentCount} ↴`),$t.gray(n,e)),t.connection.websocket.send(e)}function tn({jsonData:e,encryptedData:t,rawMessage:n,wasEncrypted:i,connector:r}){const{log:s}=r;r.lastMessageAt=Date.now();const o=new Uint8Array(Pt(2*r.receivedCount+1,24));if(r.verbose&&!i&&$t.magenta(s,`Connector ${r.endpoint} → Received message #${r.receivedCount} ↴`),e)e.jsonrpc?!function(e){return Object.keys(e).includes("result")||Object.keys(e).includes("error")}(e)?r.emit("json_rpc",n):(r.verbose&&!i&&($t.magenta(s,`Connector ${r.endpoint} received plain-text rpc result ↴`),$t.gray(s,e)),r.rpcClient.jsonrpcMsgReceive(n)):r.emit("receive",{jsonData:e,rawMessage:n});else if(t){"extra"==r.verbose&&($t.magenta(s,`Connector ${r.endpoint} received bytes ↴`),$t.gray(s,t),$t.magenta(s,`Connector ${r.endpoint} decrypting with shared secret ${r.sharedSecret}...`));const e=Et.secretbox.open(t,o,r.sharedSecret),n=e[0],i=e.subarray(1);if(1==n){const e=Et.util.encodeUTF8(i);r.verbose&&$t.write(s,`Received message: ${e}`);try{const t=JSON.parse(e);t.jsonrpc?tn({jsonData:t,rawMessage:e,wasEncrypted:!0,connector:r}):t.state?r.emit("receive_state",t.state):t.diff?r.emit("receive_diff",t.diff):t.signal?r.emit(t.signal,t.data):t.stateField?r.emit("receive_state_field",t.stateField):r.emit("receive",{jsonData:t,rawMessage:e})}catch(t){throw $t.red(s,"Couldn't parse json message although the flag was for string ..."),$t.red(s,e),t}}else r.emit("receive_binary",i)}}Et.util=Rt,Et.util=Rt,Et.util=Rt;class nn extends Ct{constructor(e){super(),this.state=e,this.subscriptions=[]}get(){return this.state}subscribe(e){return this.subscriptions.push(e),e(this.state),()=>{this.subscriptions=this.subscriptions.filter(t=>t!==e)}}announceStateChange(){this.subscriptions.forEach(e=>e(this.state))}}class rn extends nn{set(e){this.state=e,this.announceStateChange()}}class sn extends Ct{constructor(e){super(),this.connector=e}send(...e){this.connector.send(...e)}}var on={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,REMOTE_INTERNAL_ERROR:-32603,TIMEOUT:-32701};class cn{constructor({transports:e}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transportsToRegister=e,this.methods={}}setMethodPrefix(e){this.methodPrefix=e}expose(e){this.methods=e}registerTransport(e){e.onData(this._processRequest.bind(this,e))}async _processRequest(e,t){const n=JSON.parse(t);let i;return i=Array.isArray(n)?await Promise.all(n.map(t=>this._callMethod(t,e))):await this._callMethod(n,e),JSON.stringify(i)}async _callMethod(e,t){if(!e.hasOwnProperty("method"))return;const{method:n,params:i=[],id:r}=e;let s=n;if(s.includes("::")){const[e,t]=s.split("::");if(s=t,this.methodPrefix&&e!=this.methodPrefix)return}let o={};if(!this.methods[s]||"function"!=typeof this.methods[s]||"constructor"===s||s.startsWith("_")||this.methods[s]===Object.prototype[s])o={jsonrpc:"2.0",id:r,error:{code:on.METHOD_NOT_FOUND,message:`Method [${s}] not found on remote target object`}};else{this.currentTransport=t;try{const e=await this.methods[s].apply(this.methods,i);if(!r)return;o={jsonrpc:"2.0",result:void 0===e?null:e,id:r}}catch(e){console.log(`Exposed RPC method ${n} internal error:`),console.log(e),console.log("Sending this error as a result to calling client ..."),o={jsonrpc:"2.0",error:{code:on.REMOTE_INTERNAL_ERROR,message:`Method [${n}] internal error: ${e.stack}`},id:r}}}return o}run(){for(const e of this.transportsToRegister)this.registerTransport(e);this.transportsToRegister=[]}}class an extends Error{constructor(e={}){if(super(),!e.code)throw new Error("Code required");if(!e.message)throw new Error("Message required");this.code=e.code,this.message=e.message}}class ln extends an{}var dn={Base:an,MethodNotFound:class extends an{constructor(e){super({code:on.METHOD_NOT_FOUND,message:e||"Method not found"})}},InvalidRequest:class extends an{constructor(){super({code:on.INVALID_REQUEST,message:"Invalid request"})}},InvalidParams:class extends an{constructor(){super({code:on.INVALID_PARAMS,message:"Invalid params"})}},RemoteInternalError:class extends an{constructor(e){super({code:on.REMOTE_INTERNAL_ERROR,message:`Error originating at remote endpoint: ${e}`||"Remote Internal error"})}},ServerError:ln,ParseError:class extends an{constructor(){super({code:on.PARSE_ERROR,message:"Parse error"})}},RequestTimeout:class extends ln{constructor(e,t){super({code:on.TIMEOUT,message:`Request exceeded maximum execution time (${t}ms): ${e}`})}}};class un{constructor({transport:e,requestTimeout:t=2e4}){if(!e)throw new Error("TRANSPORT_REQUIRED");this.transport=e,this.requestTimeout=t,this.pendingRequest={},this.initialized=!1}setMethodPrefix(e){this.methodPrefix=e}async callMethod(e,t){this._init();const n=this.methodPrefix?`${this.methodPrefix}::${e}`:e,i=this._makeRequestObject({method:n,params:t});return this._sendRequest({object:i,id:i.id})}notify(e,t){this._init();const n=this._makeRequestObject({method:e,params:t,mode:"notify"});return this.transport.sendData(JSON.stringify(n)),!0}async runBatch(e){const t=this._generateId();let n=!0;const i=[];for(const[r,s,o]of e){const e=this._makeRequestObject({method:r,params:s,mode:o,batchId:t});e.id&&(n=!1),i.push(e)}return n?this.transport.sendData(JSON.stringify(i)):this._sendRequest({object:i,id:t})}_init(){this.initialized||(this.transport.onData(this._processResponse.bind(this)),this.initialized=!0)}_sendRequest({object:e,id:t}){const n=JSON.stringify(e);return new Promise((i,r)=>{this.pendingRequest[t]={resolve:i,reject:r,sentObject:e},setTimeout(()=>{this.pendingRequest[t]&&(delete this.pendingRequest[t],r(new dn.RequestTimeout(n,this.requestTimeout)))},this.requestTimeout);try{this.transport.sendData(n)}catch(e){delete this.pendingRequest[t],r(e)}})}_processResponse(e){const t=JSON.parse(e);Array.isArray(t)?this._processBatchResponse(t):this._processSingleCallResponse(t)}_processSingleCallResponse(e){const t=e.hasOwnProperty("result")||!1,n=e.hasOwnProperty("error");if(!t&&!n)return;const i=this.pendingRequest[e.id];if(delete this.pendingRequest[e.id],i)if(t)i.resolve(e.result);else if(n){const t=this._makeErrorObject(e.error);i.reject(t)}}_processBatchResponse(e){let t;const n={},i=[];for(const r of e)r.id?(t||(t=r.id.split("|")[0]),n[r.id]=r):r.error&&i.push(r.error);if(!this.pendingRequest[t])return;const{sentObject:r,resolve:s}=this.pendingRequest[t];delete this.pendingRequest[t];const o=[];let c=0;for(const e of r){if(!e.id){o.push(null);continue}const t=n[e.id];if(t){t.hasOwnProperty("result")||!1?o.push({success:!0,result:t.result}):o.push({success:!1,result:this._makeErrorObject(t.error)})}else o.push({success:!1,error:this._makeErrorObject(i[c])}),c++}s(o)}_makeRequestObject({method:e,params:t,mode:n,batchId:i}){const r={jsonrpc:"2.0",method:e};return t&&t.length&&(r.params=t),"notify"!==n&&(r.id=i?`${i}|${this._generateId()}`:this._generateId()),r}_makeErrorObject(e){return(0,{[on.METHOD_NOT_FOUND]:()=>new dn.MethodNotFound(e.message),[on.REMOTE_INTERNAL_ERROR]:()=>new dn.RemoteInternalError(e.message)}[e.code])()}_generateId(){let e=10,t="";for(;0(...n)=>e.call(null,t,n),apply:(e,t,n)=>e.apply(null,n)})}class mn{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",async t=>{const n=await e(t);n&&this.channel.send(n)})}}var hn=Object.freeze({__proto__:null,MoleServer:cn,MoleClient:un,MoleClientProxified:class extends un{constructor(...e){return super(...e),function(e){const t=An(e.callMethod.bind(e)),n=An(e.notify.bind(e));return new Proxy(e,{get:(i,r)=>"notify"===r?n:"callMethod"===r?t:"then"!==r?"setMethodPrefix"===r?(...t)=>e.setMethodPrefix(t):(...e)=>i.callMethod.call(i,r,e):void 0})}(this)}},ClientTransport:class{constructor(e){this.channel=e}onData(e){this.channel.on("json_rpc",e)}sendData(e){this.channel.send(e)}},ServerTransport:mn});class fn extends Error{constructor(e,t){super(e),this.name=this.constructor.name,this.errorCode=t}errorCode(){return this.errorCode}}const{MoleClient:vn,ClientTransport:pn}=hn;class gn{constructor(e,t,n){this.moleChannel=new sn(e),this.methodPrefix=t,this.connectorOrServersideChannel=e,this.client=new vn({requestTimeout:n,transport:new pn(this.moleChannel)})}jsonrpcMsgReceive(e){this.moleChannel.emit("json_rpc",e)}call(e,t){return this.connectorOrServersideChannel.closed()?new Promise((t,n)=>{n(new fn(`Method call [${this.methodPrefix}::${e}] on closed channel or connector ignored. Please add a check for closed channel in your code.`,"CLOSED_CHANNEL"))}):this.client.callMethod(`${this.methodPrefix}::${e}`,t)}}const wn=1e4;class yn{constructor(e,t){this.connectorOrServersideChannel=e,this.remoteObjects={},this.requestTimeout=t||wn}remoteObject(e){return this.remoteObjects[e]||(this.remoteObjects[e]=new gn(this.connectorOrServersideChannel,e,this.requestTimeout)),this.remoteObjects[e]}jsonrpcMsgReceive(e){for(const t of Object.values(this.remoteObjects))t.jsonrpcMsgReceive(e)}}class bn{constructor({serversideChannel:e,serverMethods:t,methodPrefix:n}){const i=[new mn(e)];this.server=new cn({transports:i}),this.server.expose(t),this.server.setMethodPrefix(n),this.server.run()}}function In(){const e=Et.box.keyPair(),t=Dt(e.publicKey),n=Dt(e.secretKey);return{privateKey:e.secretKey,publicKey:e.publicKey,privateKeyHex:n,publicKeyHex:t}}Et.util=Rt,Et.util=Rt; -/*! - * https://github.com/Starcounter-Jack/JSON-Patch - * (c) 2017 Joachim Wester - * MIT license */ -var Vn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),En=Object.prototype.hasOwnProperty;function Rn(e,t){return En.call(e,t)}function zn(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n=48&&t<=57))return!1;n++}return!0}function Mn(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function Cn(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function Dn(e,t){var n=[e];for(var i in t){var r="object"==typeof t[i]?JSON.stringify(t[i],null,2):t[i];void 0!==r&&n.push(i+": "+r)}return n.join("\n")}var On=function(e){function t(t,n,i,r,s){var o=this.constructor,c=e.call(this,Dn(t,{name:n,index:i,operation:r,tree:s}))||this;return c.name=n,c.index=i,c.operation=r,c.tree=s,Object.setPrototypeOf(c,o.prototype),c.message=Dn(t,{name:n,index:i,operation:r,tree:s}),c}return Vn(t,e),t}(Error),Pn=On,Zn=qn,Nn={add:function(e,t,n){return e[t]=this.value,{newDocument:n}},remove:function(e,t,n){var i=e[t];return delete e[t],{newDocument:n,removed:i}},replace:function(e,t,n){var i=e[t];return e[t]=this.value,{newDocument:n,removed:i}},move:function(e,t,n){var i=kn(n,this.path);i&&(i=qn(i));var r=jn(n,{op:"remove",path:this.from}).removed;return jn(n,{op:"add",path:this.path,value:r}),{newDocument:n,removed:i}},copy:function(e,t,n){var i=kn(n,this.from);return jn(n,{op:"add",path:this.path,value:qn(i)}),{newDocument:n}},test:function(e,t,n){return{newDocument:n,test:Sn(e[t],this.value)}},_get:function(e,t,n){return this.value=e[t],{newDocument:n}}},Hn={add:function(e,t,n){return Bn(t)?e.splice(t,0,this.value):e[t]=this.value,{newDocument:n,index:t}},remove:function(e,t,n){return{newDocument:n,removed:e.splice(t,1)[0]}},replace:function(e,t,n){var i=e[t];return e[t]=this.value,{newDocument:n,removed:i}},move:Nn.move,copy:Nn.copy,test:Nn.test,_get:Nn._get};function kn(e,t){if(""==t)return e;var n={op:"_get",path:t};return jn(e,n),n.value}function jn(e,t,n,i,r,s){if(void 0===n&&(n=!1),void 0===i&&(i=!0),void 0===r&&(r=!0),void 0===s&&(s=0),n&&("function"==typeof n?n(t,0,e,t.path):Xn(t,0)),""===t.path){var o={newDocument:e};if("add"===t.op)return o.newDocument=t.value,o;if("replace"===t.op)return o.newDocument=t.value,o.removed=e,o;if("move"===t.op||"copy"===t.op)return o.newDocument=kn(e,t.from),"move"===t.op&&(o.removed=e),o;if("test"===t.op){if(o.test=Sn(e,t.value),!1===o.test)throw new Pn("Test operation failed","TEST_OPERATION_FAILED",s,t,e);return o.newDocument=e,o}if("remove"===t.op)return o.removed=e,o.newDocument=null,o;if("_get"===t.op)return t.value=e,o;if(n)throw new Pn("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",s,t,e);return o}i||(e=qn(e));var c=(t.path||"").split("/"),a=e,l=1,d=c.length,u=void 0,A=void 0,m=void 0;for(m="function"==typeof n?n:Xn;;){if(A=c[l],r&&"__proto__"==A)throw new TypeError("JSON-Patch: modifying `__proto__` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(n&&void 0===u&&(void 0===a[A]?u=c.slice(0,l).join("/"):l==d-1&&(u=t.path),void 0!==u&&m(t,0,e,u)),l++,Array.isArray(a)){if("-"===A)A=a.length;else{if(n&&!Bn(A))throw new Pn("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",s,t,e);Bn(A)&&(A=~~A)}if(l>=d){if(n&&"add"===t.op&&A>a.length)throw new Pn("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",s,t,e);if(!1===(o=Hn[t.op].call(t,a,A,e)).test)throw new Pn("Test operation failed","TEST_OPERATION_FAILED",s,t,e);return o}}else if(A&&-1!=A.indexOf("~")&&(A=Cn(A)),l>=d){if(!1===(o=Nn[t.op].call(t,a,A,e)).test)throw new Pn("Test operation failed","TEST_OPERATION_FAILED",s,t,e);return o}a=a[A]}}function xn(e,t,n,i,r){if(void 0===i&&(i=!0),void 0===r&&(r=!0),n&&!Array.isArray(t))throw new Pn("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");i||(e=qn(e));for(var s=new Array(t.length),o=0,c=t.length;o0)throw new Pn('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,n);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new Pn("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new Pn("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&function e(t){if(void 0===t)return!0;if(t)if(Array.isArray(t)){for(var n=0,i=t.length;n= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + _extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); + } + + // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics + inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] + }; + + // Don't use 'blue' not visible on cmd.exe + inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' + }; + + function stylizeNoColor(str, styleType) { + return str; + } + + function isBoolean(arg) { + return typeof arg === 'boolean'; + } + + function isUndefined(arg) { + return arg === void 0; + } + + function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } + } + + function isFunction(arg) { + return typeof arg === 'function'; + } + + function isString(arg) { + return typeof arg === 'string'; + } + + function isNumber(arg) { + return typeof arg === 'number'; + } + + function isNull(arg) { + return arg === null; + } + + function hasOwn(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } + + function isRegExp(re) { + return isObject$1(re) && objectToString(re) === '[object RegExp]'; + } + + function isObject$1(arg) { + return typeof arg === 'object' && arg !== null; + } + + function isError(e) { + return isObject$1(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); + } + + function isDate(d) { + return isObject$1(d) && objectToString(d) === '[object Date]'; + } + + function objectToString(o) { + return Object.prototype.toString.call(o); + } + + function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; + } + + function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwn(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; + } + + function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; + } + + function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + try { + if (ctx.showHidden && Object.getOwnPropertyNames) { + keys = Object.getOwnPropertyNames(value); + } + } catch (e) { + // ignore + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (Array.isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); + } + + function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = { value: void 0 }; + try { + // ie6 › navigator.toString + // throws Error: Object doesn't support this property or method + desc.value = value[key]; + } catch (e) { + // ignore + } + try { + // ie10 › Object.getOwnPropertyDescriptor(window.location, 'hash') + // throws TypeError: Object doesn't support this action + if (Object.getOwnPropertyDescriptor) { + desc = Object.getOwnPropertyDescriptor(value, key) || desc; + } + } catch (e) { + // ignore + } + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwn(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; + } + + function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); + } + + function reduceToSingleString(output, base, braces) { + var length = output.reduce(function(prev, cur) { + if (cur.indexOf('\n') >= 0) ; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; + } + + function _extend(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject$1(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; + } + + function doLogging(color, log, ...args) { + try { + if (log == console.log) { + // by doing inspect in this way we get normal text in quotations: '...' + // 9/2/2022, 9:42:11 PM → 'Connector ws://192.168.0.16:7780 created' + // we remove them with 2x replace ... + log( + `${new Date().toLocaleString()} → ${browserUtilInspect(...args) + .replace(/^'/, '') + .replace(/'$/, '')}` + ); + } else if (typeof log == 'function') { + log(...args); // recently changed from args to ...args -- see if some other places need change + } else if (log) { + // dmt logger object + log.logOutput(color, { source: 'connectome' }, ...args); + } + } catch (e) { + console.log(e); + } + } + + class Logger { + write(log, ...args) { + doLogging(undefined, log, ...args); + } + + red(log, ...args) { + doLogging('red', log, ...args); + } + + green(log, ...args) { + doLogging('green', log, ...args); + } + + yellow(log, ...args) { + doLogging('yellow', log, ...args); + } + + blue(log, ...args) { + doLogging('blue', log, ...args); + } + + cyan(log, ...args) { + doLogging('cyan', log, ...args); + } + + magenta(log, ...args) { + doLogging('magenta', log, ...args); + } + + gray(log, ...args) { + doLogging('gray', log, ...args); + } + + white(log, ...args) { + doLogging('white', log, ...args); + } + } + + var logger = new Logger(); + + //import colors from 'kleur'; + naclFast.util = naclUtil; + + function send({ data, connector }) { + const { log } = connector; + + // const log = (...opts) => { + // if (opts.length == 0) { + // connector.logger.write(log); + // } else { + // connector.logger.write(log, + // colors.magenta('📡'), + // colors.gray(connector.tag || connector.endpoint), + // colors.magenta(...opts) + // ); + // } + // }; + + if (isObject(data)) { + data = JSON.stringify(data); + } + + const nonce = new Uint8Array(integerToByteArray(2 * connector.sentCount, 24)); + + if (!connector.closed()) { + if (connector.sentCount > 1) { + let flag = 0; + + if (typeof data == 'string') { + flag = 1; + } + + const _encodedMessage = flag == 1 ? naclFast.util.decodeUTF8(data) : data; + const encodedMessage = addHeader(_encodedMessage, flag); + + const encryptedMessage = naclFast.secretbox(encodedMessage, nonce, connector.sharedSecret); + + if (connector.verbose) { + //logger.write(log); // empty line + logger.green( + log, + `Connector ${connector.endpoint} → Sending encrypted message #${connector.sentCount} ↴` + ); + logger.gray(log, data); + } + + connector.connection.websocket.send(encryptedMessage); + } else { + if (connector.verbose) { + //logger.write(log); // empty line + logger.green( + log, + `Connector ${connector.endpoint} → Sending message #${connector.sentCount} ↴` + ); + logger.gray(log, data); + } + + connector.connection.websocket.send(data); + } + } else { + logger.red(log, `⚠️ Warning: "${data}" was not sent because connector is not ready`); + } + } + + //import colors from 'kleur'; + naclFast.util = naclUtil; + + function isRpcCallResult(jsonData) { + return Object.keys(jsonData).includes('result') || Object.keys(jsonData).includes('error'); + } + + function wireReceive({ jsonData, encryptedData, rawMessage, wasEncrypted, connector }) { + const { log } = connector; + + // const log = (...opts) => { + // if (opts.length == 0) { + // connector.logger.write(log, ); + // } else { + // connector.logger.write(log, + // colors.yellow('📥'), + // colors.gray(connector.tag || connector.endpoint), + // colors.yellow(...opts) + // ); + // } + // }; + + connector.lastMessageAt = Date.now(); + + const nonce = new Uint8Array(integerToByteArray(2 * connector.receivedCount + 1, 24)); + + if (connector.verbose && !wasEncrypted) { + //logger.write(log); + logger.magenta(log, `Connector ${connector.endpoint} → Received message #${connector.receivedCount} ↴`); + } + + // 💡 unencrypted jsonData ! + if (jsonData) { + if (jsonData.jsonrpc) { + if (isRpcCallResult(jsonData)) { + if (connector.verbose && !wasEncrypted) { + logger.magenta(log, `Connector ${connector.endpoint} received plain-text rpc result ↴`); + logger.gray(log, jsonData); + } + + connector.rpcClient.jsonrpcMsgReceive(rawMessage); + } else { + connector.emit('json_rpc', rawMessage); + } + } else { + connector.emit('receive', { jsonData, rawMessage }); + } + + // logger.magenta( + // log, + // `Connector ${connector.endpoint} → ${rawMessage}` + // ); + } else if (encryptedData) { + // 💡 encryptedJson data!! + if (connector.verbose == 'extra') { + logger.magenta(log, `Connector ${connector.endpoint} received bytes ↴`); + logger.gray(log, encryptedData); + logger.magenta( + log, + `Connector ${connector.endpoint} decrypting with shared secret ${connector.sharedSecret}...` + ); + } + + const _decryptedMessage = naclFast.secretbox.open(encryptedData, nonce, connector.sharedSecret); + + const flag = _decryptedMessage[0]; + const decryptedMessage = _decryptedMessage.subarray(1); + + if (flag == 1) { + const decodedMessage = naclFast.util.encodeUTF8(decryptedMessage); + + if (connector.verbose) { + logger.write(log, `Received message: ${decodedMessage}`); + } + + try { + const jsonData = JSON.parse(decodedMessage); + + // 💡 rpc + if (jsonData.jsonrpc) { + // if (connector.verbose) { + // logger.magenta(log, `Connector ${connector.endpoint} decrypted rpc result ↴`); + // logger.gray(log, jsonData); + // } + + wireReceive({ jsonData, rawMessage: decodedMessage, wasEncrypted: true, connector }); + // } else if (jsonData.tag) { + // // 💡 tag + // const msg = jsonData; + + // if (msg.tag == 'file_not_found') { + // connector.emit(msg.tag, { ...msg, ...{ tag: undefined } }); + // } else if (msg.tag == 'binary_start') { + // connector.emit(msg.tag, { ...msg, ...{ tag: undefined } }); + // } else if (msg.tag == 'binary_end') { + // connector.emit(msg.tag, { sessionId: msg.sessionId }); + // } else { + // connector.emit('receive', { jsonData, rawMessage: decodedMessage }); + // } + } else if (jsonData.state) { + // 💡 Initial state sending ... part of Connectome protocol + connector.emit('receive_state', jsonData.state); + } else if (jsonData.diff) { + // 💡 Subsequent JSON patch diffs (rfc6902)* ... part of Connectome protocol + connector.emit('receive_diff', jsonData.diff); + } else if (jsonData.signal) { + connector.emit(jsonData.signal, jsonData.data); + } else if (jsonData.stateField) { + connector.emit('receive_state_field', jsonData.stateField); + } else { + connector.emit('receive', { jsonData, rawMessage: decodedMessage }); + } + } catch (e) { + logger.red(log, "Couldn't parse json message although the flag was for string ..."); + logger.red(log, decodedMessage); + throw e; + } + } else { + //const binaryData = decryptedMessage; + // const sessionId = Buffer.from(binaryData.buffer, binaryData.byteOffset, 64).toString(); + // const binaryPayload = Buffer.from(binaryData.buffer, binaryData.byteOffset + 64); + // connector.emit('binary_data', { sessionId, data: binaryPayload }); + connector.emit('receive_binary', decryptedMessage); + } + } + } + + naclFast.util = naclUtil; + + function diffieHellman({ connector, afterFirstStep = () => {} }) { + const { + clientPrivateKey, + clientPublicKey, + clientPublicKeyHex, + protocol, + tag, + endpoint, + verbose + } = connector; + + return new Promise((success, reject) => { + connector.remoteObject('Auth') + .call('exchangePubkeys', { pubkey: clientPublicKeyHex }) + .then(remotePubkeyHex => { + const sharedSecret = naclFast.box.before(hexToBuffer$1(remotePubkeyHex), clientPrivateKey); + + afterFirstStep({ sharedSecret, remotePubkeyHex }); + + if (verbose) { + logger.write( + connector.log, + `Connector ${endpoint} established shared secret through diffie-hellman exchange.` + ); + } + + connector.remoteObject('Auth') + .call('finalizeHandshake', { protocol }) + .then(res => { + // finalizeHandshake rpc endpoint on server can cleanly retorn {error} as a result + // in case the protocol we are trying to connect to is not registered (does not exist at the endpoint) + if (res && res.error) { + console.log(res.error); + // this connection will keep hangling and no reconnect tries will be made + // since we keep websocket open just that nothing is happening + + // when we enable the protocol on the endpoint we have to restart the process + // frontend connector will get disconnected at this point, websocket will close + // and from then on it tries reconnecting again so when ws first connects + // and protocol is present , it will be a success + + // DONT'T REJECT here! reject(res.error); -- we need to keep this websocket hanging + } else { + success(); + + const _tag = tag ? ` (${tag})` : ''; + logger.cyan( + connector.log, + `${endpoint}${_tag} ✓ Connection [ ${protocol || '"no-name"'} ] ready` + ); + } + }) + .catch(reject); // for example Timeout ... delayed! we have to be careful with closing any connections because new websocket might have already be created, we should not close that one + }) + .catch(reject); + }); + } + + // 💡 we use Emitter inside ConnectedStore to emit 'ready' event + // 💡 and inside MultiConnectedStore to also emit a few events + + class ReadableStore extends Eev { + constructor(initialState) { + super(); + + this.state = initialState; + + this.subscriptions = []; + } + + get() { + return this.state; + } + + subscribe(handler) { + this.subscriptions.push(handler); + + handler(this.state); + + return () => { + this.subscriptions = this.subscriptions.filter(sub => sub !== handler); + }; + } + + announceStateChange() { + this.subscriptions.forEach(handler => handler(this.state)); + } + } + + class WritableStore extends ReadableStore { + set(state) { + this.state = state; + this.announceStateChange(); + } + } + + class Channel extends Eev { + constructor(connector) { + super(); + + this.connector = connector; + } + + send(...args) { + this.connector.send(...args); + } + } + + var errorCodes = { + PARSE_ERROR: -32700, + INVALID_REQUEST: -32600, + METHOD_NOT_FOUND: -32601, + INVALID_PARAMS: -32602, + REMOTE_INTERNAL_ERROR: -32603, + TIMEOUT: -32701 + }; + + class MoleServer { + constructor({ transports }) { + if (!transports) throw new Error('TRANSPORT_REQUIRED'); + + this.transportsToRegister = transports; + this.methods = {}; + } + + setMethodPrefix(methodPrefix) { + this.methodPrefix = methodPrefix; + } + + expose(methods) { + this.methods = methods; + } + + registerTransport(transport) { + transport.onData(this._processRequest.bind(this, transport)); + } + + async _processRequest(transport, data) { + const requestData = JSON.parse(data); + let responseData; + + if (Array.isArray(requestData)) { + responseData = await Promise.all(requestData.map(request => this._callMethod(request, transport))); + } else { + responseData = await this._callMethod(requestData, transport); + } + + return JSON.stringify(responseData); + } + + async _callMethod(request, transport) { + const isRequest = request.hasOwnProperty('method'); + if (!isRequest) return; + + const { method, params = [], id } = request; + + let methodName = method; + + if (methodName.includes('::')) { + const [prefix, name] = methodName.split('::'); + methodName = name; + if (this.methodPrefix && prefix != this.methodPrefix) { + return; + } + } + + const methodNotFound = + !this.methods[methodName] || + typeof this.methods[methodName] !== 'function' || + methodName === 'constructor' || + methodName.startsWith('_') || + this.methods[methodName] === Object.prototype[methodName]; + + let response = {}; + + if (methodNotFound) { + response = { + jsonrpc: '2.0', + id, + error: { + code: errorCodes.METHOD_NOT_FOUND, + message: `Method [${methodName}] not found on remote target object` + } + }; + } else { + this.currentTransport = transport; + + //console.log(`Method call: ${methodName}`); + + try { + const result = await this.methods[methodName].apply(this.methods, params); + + if (!id) return; + + response = { + jsonrpc: '2.0', + result: typeof result === 'undefined' ? null : result, + id + }; + } catch (e) { + console.log(`Exposed RPC method ${method} internal error:`); + console.log(e); + console.log('Sending this error as a result to calling client ...'); + response = { + jsonrpc: '2.0', + error: { + code: errorCodes.REMOTE_INTERNAL_ERROR, + message: `Method [${method}] internal error: ${e.stack}` + }, + id + }; + } + } + + return response; + } + + run() { + for (const transport of this.transportsToRegister) { + this.registerTransport(transport); + } + + this.transportsToRegister = []; + } + } + + class Base extends Error { + constructor(data = {}) { + super(); + + if (!data.code) throw new Error('Code required'); + if (!data.message) throw new Error('Message required'); + + this.code = data.code; + this.message = data.message; + } + } + + class MethodNotFound extends Base { + constructor(message) { + super({ + code: errorCodes.METHOD_NOT_FOUND, + message: message || 'Method not found' + }); + } + } + + class InvalidParams extends Base { + constructor() { + super({ + code: errorCodes.INVALID_PARAMS, + message: 'Invalid params' + }); + } + } + + class RemoteInternalError extends Base { + constructor(message) { + super({ + code: errorCodes.REMOTE_INTERNAL_ERROR, + message: `Error originating at remote endpoint: ${message}` || 'Remote Internal error' + }); + } + } + + class ParseError extends Base { + constructor() { + super({ + code: errorCodes.PARSE_ERROR, + message: 'Parse error' + }); + } + } + + class InvalidRequest extends Base { + constructor() { + super({ + code: errorCodes.INVALID_REQUEST, + message: 'Invalid request' + }); + } + } + + class ServerError extends Base {} + + class RequestTimeout extends ServerError { + constructor(message, timeout) { + super({ + code: errorCodes.TIMEOUT, + message: `Request exceeded maximum execution time (${timeout}ms): ${message}` + }); + } + } + + var X = { + Base, + MethodNotFound, + InvalidRequest, + InvalidParams, + RemoteInternalError, + ServerError, + ParseError, + RequestTimeout + }; + + class MoleClient { + constructor({ transport, requestTimeout = 20000 }) { + if (!transport) throw new Error('TRANSPORT_REQUIRED'); + this.transport = transport; + + this.requestTimeout = requestTimeout; + + this.pendingRequest = {}; + this.initialized = false; + } + + setMethodPrefix(methodPrefix) { + this.methodPrefix = methodPrefix; + } + + async callMethod(methodName, params) { + this._init(); + + const method = this.methodPrefix ? `${this.methodPrefix}::${methodName}` : methodName; + + const request = this._makeRequestObject({ method, params }); + + return this._sendRequest({ object: request, id: request.id }); + } + + notify(method, params) { + this._init(); + + const request = this._makeRequestObject({ method, params, mode: 'notify' }); + this.transport.sendData(JSON.stringify(request)); + return true; + } + + async runBatch(calls) { + const batchId = this._generateId(); + let onlyNotifications = true; + + const batchRequest = []; + + for (const [method, params, mode] of calls) { + const request = this._makeRequestObject({ method, params, mode, batchId }); + + if (request.id) { + onlyNotifications = false; + } + + batchRequest.push(request); + } + + if (onlyNotifications) { + return this.transport.sendData(JSON.stringify(batchRequest)); + } + + return this._sendRequest({ object: batchRequest, id: batchId }); + } + + _init() { + if (this.initialized) return; + + this.transport.onData(this._processResponse.bind(this)); + + this.initialized = true; + } + + _sendRequest({ object, id }) { + const data = JSON.stringify(object); + + return new Promise((resolve, reject) => { + this.pendingRequest[id] = { resolve, reject, sentObject: object }; + + setTimeout(() => { + if (this.pendingRequest[id]) { + delete this.pendingRequest[id]; + + reject(new X.RequestTimeout(data, this.requestTimeout)); + } + }, this.requestTimeout); + + try { + this.transport.sendData(data); + } catch (e) { + delete this.pendingRequest[id]; + reject(e); + } + }); + } + + _processResponse(data) { + const response = JSON.parse(data); + + if (Array.isArray(response)) { + this._processBatchResponse(response); + } else { + this._processSingleCallResponse(response); + } + } + + _processSingleCallResponse(response) { + const isSuccessfulResponse = response.hasOwnProperty('result') || false; + const isErrorResponse = response.hasOwnProperty('error'); + + if (!isSuccessfulResponse && !isErrorResponse) return; + + const resolvers = this.pendingRequest[response.id]; + delete this.pendingRequest[response.id]; + + if (!resolvers) return; + + if (isSuccessfulResponse) { + resolvers.resolve(response.result); + } else if (isErrorResponse) { + const errorObject = this._makeErrorObject(response.error); + resolvers.reject(errorObject); + } + } + + _processBatchResponse(responses) { + let batchId; + const responseById = {}; + const errorsWithoutId = []; + + for (const response of responses) { + if (response.id) { + if (!batchId) { + batchId = response.id.split('|')[0]; + } + + responseById[response.id] = response; + } else if (response.error) { + errorsWithoutId.push(response.error); + } + } + + if (!this.pendingRequest[batchId]) return; + + const { sentObject, resolve } = this.pendingRequest[batchId]; + delete this.pendingRequest[batchId]; + + const batchResults = []; + let errorIdx = 0; + for (const request of sentObject) { + if (!request.id) { + batchResults.push(null); + continue; + } + + const response = responseById[request.id]; + + if (response) { + const isSuccessfulResponse = response.hasOwnProperty('result') || false; + + if (isSuccessfulResponse) { + batchResults.push({ + success: true, + result: response.result + }); + } else { + batchResults.push({ + success: false, + result: this._makeErrorObject(response.error) + }); + } + } else { + batchResults.push({ + success: false, + error: this._makeErrorObject(errorsWithoutId[errorIdx]) + }); + errorIdx++; + } + } + + resolve(batchResults); + } + + _makeRequestObject({ method, params, mode, batchId }) { + const request = { + jsonrpc: '2.0', + method + }; + + if (params && params.length) { + request.params = params; + } + + if (mode !== 'notify') { + request.id = batchId ? `${batchId}|${this._generateId()}` : this._generateId(); + } + + return request; + } + + _makeErrorObject(errorData) { + const errorBuilder = { + [errorCodes.METHOD_NOT_FOUND]: () => { + return new X.MethodNotFound(errorData.message); + }, + [errorCodes.REMOTE_INTERNAL_ERROR]: () => { + return new X.RemoteInternalError(errorData.message); + } + }[errorData.code]; + + return errorBuilder(); + } + + _generateId() { + const alphabet = 'bjectSymhasOwnProp-0123456789ABCDEFGHIJKLMNQRTUVWXYZ_dfgiklquvxz'; + let size = 10; + let id = ''; + + while (0 < size--) { + id += alphabet[(Math.random() * 64) | 0]; + } + + return id; + } + } + + function proxify(moleClient) { + const callMethodProxy = proxifyOwnMethod(moleClient.callMethod.bind(moleClient)); + const notifyProxy = proxifyOwnMethod(moleClient.notify.bind(moleClient)); + + return new Proxy(moleClient, { + get(target, methodName) { + if (methodName === 'notify') { + return notifyProxy; + } + + if (methodName === 'callMethod') { + return callMethodProxy; + } + + if (methodName === 'then') { + return; + } + + if (methodName === 'setMethodPrefix') { + return (...params) => moleClient.setMethodPrefix(params); + } + + return (...params) => target.callMethod.call(target, methodName, params); + } + }); + } + + function proxifyOwnMethod(ownMethod) { + return new Proxy(ownMethod, { + get(target, methodName) { + return (...params) => target.call(null, methodName, params); + }, + apply(target, _, args) { + return target.apply(null, args); + } + }); + } + + class MoleClientProxified extends MoleClient { + constructor(...args) { + super(...args); + return proxify(this); + } + } + + class TransportClientChannel { + constructor(channel) { + this.channel = channel; + } + + onData(callback) { + this.channel.on('json_rpc', callback); + } + + sendData(data) { + this.channel.send(data); + } + } + + class TransportServerChannel { + constructor(channel) { + this.channel = channel; + } + + onData(callback) { + this.channel.on('json_rpc', async reqData => { + const resData = await callback(reqData); + if (!resData) return; + + this.channel.send(resData); + }); + } + } + + var mole = /*#__PURE__*/Object.freeze({ + __proto__: null, + MoleServer: MoleServer, + MoleClient: MoleClient, + MoleClientProxified: MoleClientProxified, + ClientTransport: TransportClientChannel, + ServerTransport: TransportServerChannel + }); + + class ConnectomeError extends Error { + constructor(message, errorCode) { + super(message); + + this.name = this.constructor.name; + + this.errorCode = errorCode; + } + + errorCode() { + return this.errorCode; + } + } + + const { MoleClient: MoleClient$1, ClientTransport } = mole; + + class SpecificRpcClient { + constructor(connectorOrServersideChannel, methodPrefix, requestTimeout) { + this.moleChannel = new Channel(connectorOrServersideChannel); + this.methodPrefix = methodPrefix; + + this.connectorOrServersideChannel = connectorOrServersideChannel; + + this.client = new MoleClient$1({ + requestTimeout, + transport: new ClientTransport(this.moleChannel) + }); + } + + jsonrpcMsgReceive(stringMessage) { + this.moleChannel.emit('json_rpc', stringMessage); + } + + call(methodName, params) { + if (this.connectorOrServersideChannel.closed()) { + return new Promise((success, reject) => { + reject( + new ConnectomeError( + `Method call [${this.methodPrefix}::${methodName}] on closed channel or connector ignored. Please add a check for closed channel in your code.`, + 'CLOSED_CHANNEL' + ) + ); + }); + } + + return this.client.callMethod(`${this.methodPrefix}::${methodName}`, params); + } + } + + const DEFAULT_REQUEST_TIMEOUT = 10000; + + class RpcClient { + constructor(connectorOrServersideChannel, requestTimeout) { + this.connectorOrServersideChannel = connectorOrServersideChannel; + this.remoteObjects = {}; + this.requestTimeout = requestTimeout || DEFAULT_REQUEST_TIMEOUT; + } + + remoteObject(methodPrefix) { + const remoteObject = this.remoteObjects[methodPrefix]; + if (!remoteObject) { + this.remoteObjects[methodPrefix] = new SpecificRpcClient(this.connectorOrServersideChannel, methodPrefix, this.requestTimeout); + } + return this.remoteObjects[methodPrefix]; + } + + jsonrpcMsgReceive(stringMessage) { + for (const remoteObject of Object.values(this.remoteObjects)) { + remoteObject.jsonrpcMsgReceive(stringMessage); + } + } + } + + class RPCTarget { + constructor({ serversideChannel, serverMethods, methodPrefix }) { + const transports = [new TransportServerChannel(serversideChannel)]; + this.server = new MoleServer({ transports }); + this.server.expose(serverMethods); + this.server.setMethodPrefix(methodPrefix); + this.server.run(); + } + } + + naclFast.util = naclUtil; + + function newKeypair() { + const keys = naclFast.box.keyPair(); + const publicKeyHex = bufferToHex$1(keys.publicKey); + const privateKeyHex = bufferToHex$1(keys.secretKey); + + return { privateKey: keys.secretKey, publicKey: keys.publicKey, privateKeyHex, publicKeyHex }; + } + + naclFast.util = naclUtil; + + function acceptKeypair(keypair) { + if (keypair.publicKeyHex && !keypair.publicKey) { + keypair.publicKey = hexToBuffer$1(keypair.publicKeyHex); + } + + if (keypair.privateKeyHex && !keypair.privateKey) { + keypair.privateKey = hexToBuffer$1(keypair.privateKeyHex); + } + + return keypair; + } + + /*! + * https://github.com/Starcounter-Jack/JSON-Patch + * (c) 2017 Joachim Wester + * MIT license + */ + var __extends$1 = (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; + function hasOwnProperty$1(obj, key) { + return _hasOwnProperty$1.call(obj, key); + } + function _objectKeys$1(obj) { + if (Array.isArray(obj)) { + var keys = new Array(obj.length); + for (var k = 0; k < keys.length; k++) { + keys[k] = "" + k; + } + return keys; + } + if (Object.keys) { + return Object.keys(obj); + } + var keys = []; + for (var i in obj) { + if (hasOwnProperty$1(obj, i)) { + keys.push(i); + } + } + return keys; + } + /** + * Deeply clone the object. + * https://jsperf.com/deep-copy-vs-json-stringify-json-parse/25 (recursiveDeepCopy) + * @param {any} obj value to clone + * @return {any} cloned obj + */ + function _deepClone$1(obj) { + switch (typeof obj) { + case "object": + return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5 + case "undefined": + return null; //this is how JSON.stringify behaves for array items + default: + return obj; //no need to clone primitives + } + } + //3x faster than cached /^\d+$/.test(str) + function isInteger$1(str) { + var i = 0; + var len = str.length; + var charCode; + while (i < len) { + charCode = str.charCodeAt(i); + if (charCode >= 48 && charCode <= 57) { + i++; + continue; + } + return false; + } + return true; + } + /** + * Escapes a json pointer path + * @param path The raw pointer + * @return the Escaped path + */ + function escapePathComponent$1(path) { + if (path.indexOf('/') === -1 && path.indexOf('~') === -1) + return path; + return path.replace(/~/g, '~0').replace(/\//g, '~1'); + } + /** + * Unescapes a json pointer path + * @param path The escaped pointer + * @return The unescaped path + */ + function unescapePathComponent$1(path) { + return path.replace(/~1/g, '/').replace(/~0/g, '~'); + } + /** + * Recursively checks whether an object has any undefined values inside. + */ + function hasUndefined$1(obj) { + if (obj === undefined) { + return true; + } + if (obj) { + if (Array.isArray(obj)) { + for (var i = 0, len = obj.length; i < len; i++) { + if (hasUndefined$1(obj[i])) { + return true; + } + } + } + else if (typeof obj === "object") { + var objKeys = _objectKeys$1(obj); + var objKeysLength = objKeys.length; + for (var i = 0; i < objKeysLength; i++) { + if (hasUndefined$1(obj[objKeys[i]])) { + return true; + } + } + } + } + return false; + } + function patchErrorMessageFormatter$1(message, args) { + var messageParts = [message]; + for (var key in args) { + var value = typeof args[key] === 'object' ? JSON.stringify(args[key], null, 2) : args[key]; // pretty print + if (typeof value !== 'undefined') { + messageParts.push(key + ": " + value); + } + } + return messageParts.join('\n'); + } + var PatchError$1 = /** @class */ (function (_super) { + __extends$1(PatchError, _super); + function PatchError(message, name, index, operation, tree) { + var _newTarget = this.constructor; + var _this = _super.call(this, patchErrorMessageFormatter$1(message, { name: name, index: index, operation: operation, tree: tree })) || this; + _this.name = name; + _this.index = index; + _this.operation = operation; + _this.tree = tree; + Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain, see https://stackoverflow.com/a/48342359 + _this.message = patchErrorMessageFormatter$1(message, { name: name, index: index, operation: operation, tree: tree }); + return _this; + } + return PatchError; + }(Error)); + + var JsonPatchError$1 = PatchError$1; + var deepClone$1 = _deepClone$1; + /* We use a Javascript hash to store each + function. Each hash entry (property) uses + the operation identifiers specified in rfc6902. + In this way, we can map each patch operation + to its dedicated function in efficient way. + */ + /* The operations applicable to an object */ + var objOps$1 = { + add: function (obj, key, document) { + obj[key] = this.value; + return { newDocument: document }; + }, + remove: function (obj, key, document) { + var removed = obj[key]; + delete obj[key]; + return { newDocument: document, removed: removed }; + }, + replace: function (obj, key, document) { + var removed = obj[key]; + obj[key] = this.value; + return { newDocument: document, removed: removed }; + }, + move: function (obj, key, document) { + /* in case move target overwrites an existing value, + return the removed value, this can be taxing performance-wise, + and is potentially unneeded */ + var removed = getValueByPointer$1(document, this.path); + if (removed) { + removed = _deepClone$1(removed); + } + var originalValue = applyOperation$1(document, { op: "remove", path: this.from }).removed; + applyOperation$1(document, { op: "add", path: this.path, value: originalValue }); + return { newDocument: document, removed: removed }; + }, + copy: function (obj, key, document) { + var valueToCopy = getValueByPointer$1(document, this.from); + // enforce copy by value so further operations don't affect source (see issue #177) + applyOperation$1(document, { op: "add", path: this.path, value: _deepClone$1(valueToCopy) }); + return { newDocument: document }; + }, + test: function (obj, key, document) { + return { newDocument: document, test: _areEquals$1(obj[key], this.value) }; + }, + _get: function (obj, key, document) { + this.value = obj[key]; + return { newDocument: document }; + } + }; + /* The operations applicable to an array. Many are the same as for the object */ + var arrOps$1 = { + add: function (arr, i, document) { + if (isInteger$1(i)) { + arr.splice(i, 0, this.value); + } + else { // array props + arr[i] = this.value; + } + // this may be needed when using '-' in an array + return { newDocument: document, index: i }; + }, + remove: function (arr, i, document) { + var removedList = arr.splice(i, 1); + return { newDocument: document, removed: removedList[0] }; + }, + replace: function (arr, i, document) { + var removed = arr[i]; + arr[i] = this.value; + return { newDocument: document, removed: removed }; + }, + move: objOps$1.move, + copy: objOps$1.copy, + test: objOps$1.test, + _get: objOps$1._get + }; + /** + * Retrieves a value from a JSON document by a JSON pointer. + * Returns the value. + * + * @param document The document to get the value from + * @param pointer an escaped JSON pointer + * @return The retrieved value + */ + function getValueByPointer$1(document, pointer) { + if (pointer == '') { + return document; + } + var getOriginalDestination = { op: "_get", path: pointer }; + applyOperation$1(document, getOriginalDestination); + return getOriginalDestination.value; + } + /** + * Apply a single JSON Patch Operation on a JSON document. + * Returns the {newDocument, result} of the operation. + * It modifies the `document` and `operation` objects - it gets the values by reference. + * If you would like to avoid touching your values, clone them: + * `jsonpatch.applyOperation(document, jsonpatch._deepClone(operation))`. + * + * @param document The document to patch + * @param operation The operation to apply + * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation. + * @param mutateDocument Whether to mutate the original document or clone it before applying + * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`. + * @return `{newDocument, result}` after the operation + */ + function applyOperation$1(document, operation, validateOperation, mutateDocument, banPrototypeModifications, index) { + if (validateOperation === void 0) { validateOperation = false; } + if (mutateDocument === void 0) { mutateDocument = true; } + if (banPrototypeModifications === void 0) { banPrototypeModifications = true; } + if (index === void 0) { index = 0; } + if (validateOperation) { + if (typeof validateOperation == 'function') { + validateOperation(operation, 0, document, operation.path); + } + else { + validator$1(operation, 0); + } + } + /* ROOT OPERATIONS */ + if (operation.path === "") { + var returnValue = { newDocument: document }; + if (operation.op === 'add') { + returnValue.newDocument = operation.value; + return returnValue; + } + else if (operation.op === 'replace') { + returnValue.newDocument = operation.value; + returnValue.removed = document; //document we removed + return returnValue; + } + else if (operation.op === 'move' || operation.op === 'copy') { // it's a move or copy to root + returnValue.newDocument = getValueByPointer$1(document, operation.from); // get the value by json-pointer in `from` field + if (operation.op === 'move') { // report removed item + returnValue.removed = document; + } + return returnValue; + } + else if (operation.op === 'test') { + returnValue.test = _areEquals$1(document, operation.value); + if (returnValue.test === false) { + throw new JsonPatchError$1("Test operation failed", 'TEST_OPERATION_FAILED', index, operation, document); + } + returnValue.newDocument = document; + return returnValue; + } + else if (operation.op === 'remove') { // a remove on root + returnValue.removed = document; + returnValue.newDocument = null; + return returnValue; + } + else if (operation.op === '_get') { + operation.value = document; + return returnValue; + } + else { /* bad operation */ + if (validateOperation) { + throw new JsonPatchError$1('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document); + } + else { + return returnValue; + } + } + } /* END ROOT OPERATIONS */ + else { + if (!mutateDocument) { + document = _deepClone$1(document); + } + var path = operation.path || ""; + var keys = path.split('/'); + var obj = document; + var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift + var len = keys.length; + var existingPathFragment = undefined; + var key = void 0; + var validateFunction = void 0; + if (typeof validateOperation == 'function') { + validateFunction = validateOperation; + } + else { + validateFunction = validator$1; + } + while (true) { + key = keys[t]; + if (banPrototypeModifications && key == '__proto__') { + throw new TypeError('JSON-Patch: modifying `__proto__` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README'); + } + if (validateOperation) { + if (existingPathFragment === undefined) { + if (obj[key] === undefined) { + existingPathFragment = keys.slice(0, t).join('/'); + } + else if (t == len - 1) { + existingPathFragment = operation.path; + } + if (existingPathFragment !== undefined) { + validateFunction(operation, 0, document, existingPathFragment); + } + } + } + t++; + if (Array.isArray(obj)) { + if (key === '-') { + key = obj.length; + } + else { + if (validateOperation && !isInteger$1(key)) { + throw new JsonPatchError$1("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index", "OPERATION_PATH_ILLEGAL_ARRAY_INDEX", index, operation, document); + } // only parse key when it's an integer for `arr.prop` to work + else if (isInteger$1(key)) { + key = ~~key; + } + } + if (t >= len) { + if (validateOperation && operation.op === "add" && key > obj.length) { + throw new JsonPatchError$1("The specified index MUST NOT be greater than the number of elements in the array", "OPERATION_VALUE_OUT_OF_BOUNDS", index, operation, document); + } + var returnValue = arrOps$1[operation.op].call(operation, obj, key, document); // Apply patch + if (returnValue.test === false) { + throw new JsonPatchError$1("Test operation failed", 'TEST_OPERATION_FAILED', index, operation, document); + } + return returnValue; + } + } + else { + if (key && key.indexOf('~') != -1) { + key = unescapePathComponent$1(key); + } + if (t >= len) { + var returnValue = objOps$1[operation.op].call(operation, obj, key, document); // Apply patch + if (returnValue.test === false) { + throw new JsonPatchError$1("Test operation failed", 'TEST_OPERATION_FAILED', index, operation, document); + } + return returnValue; + } + } + obj = obj[key]; + } + } + } + /** + * Apply a full JSON Patch array on a JSON document. + * Returns the {newDocument, result} of the patch. + * It modifies the `document` object and `patch` - it gets the values by reference. + * If you would like to avoid touching your values, clone them: + * `jsonpatch.applyPatch(document, jsonpatch._deepClone(patch))`. + * + * @param document The document to patch + * @param patch The patch to apply + * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation. + * @param mutateDocument Whether to mutate the original document or clone it before applying + * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`. + * @return An array of `{newDocument, result}` after the patch + */ + function applyPatch$1(document, patch, validateOperation, mutateDocument, banPrototypeModifications) { + if (mutateDocument === void 0) { mutateDocument = true; } + if (banPrototypeModifications === void 0) { banPrototypeModifications = true; } + if (validateOperation) { + if (!Array.isArray(patch)) { + throw new JsonPatchError$1('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY'); + } + } + if (!mutateDocument) { + document = _deepClone$1(document); + } + var results = new Array(patch.length); + for (var i = 0, length_1 = patch.length; i < length_1; i++) { + // we don't need to pass mutateDocument argument because if it was true, we already deep cloned the object, we'll just pass `true` + results[i] = applyOperation$1(document, patch[i], validateOperation, true, banPrototypeModifications, i); + document = results[i].newDocument; // in case root was replaced + } + results.newDocument = document; + return results; + } + /** + * Apply a single JSON Patch Operation on a JSON document. + * Returns the updated document. + * Suitable as a reducer. + * + * @param document The document to patch + * @param operation The operation to apply + * @return The updated document + */ + function applyReducer$1(document, operation, index) { + var operationResult = applyOperation$1(document, operation); + if (operationResult.test === false) { // failed test + throw new JsonPatchError$1("Test operation failed", 'TEST_OPERATION_FAILED', index, operation, document); + } + return operationResult.newDocument; + } + /** + * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error. + * @param {object} operation - operation object (patch) + * @param {number} index - index of operation in the sequence + * @param {object} [document] - object where the operation is supposed to be applied + * @param {string} [existingPathFragment] - comes along with `document` + */ + function validator$1(operation, index, document, existingPathFragment) { + if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) { + throw new JsonPatchError$1('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, document); + } + else if (!objOps$1[operation.op]) { + throw new JsonPatchError$1('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document); + } + else if (typeof operation.path !== 'string') { + throw new JsonPatchError$1('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, document); + } + else if (operation.path.indexOf('/') !== 0 && operation.path.length > 0) { + // paths that aren't empty string should start with "/" + throw new JsonPatchError$1('Operation `path` property must start with "/"', 'OPERATION_PATH_INVALID', index, operation, document); + } + else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') { + throw new JsonPatchError$1('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, document); + } + else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) { + throw new JsonPatchError$1('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, document); + } + else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined$1(operation.value)) { + throw new JsonPatchError$1('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, document); + } + else if (document) { + if (operation.op == "add") { + var pathLen = operation.path.split("/").length; + var existingPathLen = existingPathFragment.split("/").length; + if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) { + throw new JsonPatchError$1('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, document); + } + } + else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') { + if (operation.path !== existingPathFragment) { + throw new JsonPatchError$1('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document); + } + } + else if (operation.op === 'move' || operation.op === 'copy') { + var existingValue = { op: "_get", path: operation.from, value: undefined }; + var error = validate$1([existingValue], document); + if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') { + throw new JsonPatchError$1('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, document); + } + } + } + } + /** + * Validates a sequence of operations. If `document` parameter is provided, the sequence is additionally validated against the object document. + * If error is encountered, returns a JsonPatchError object + * @param sequence + * @param document + * @returns {JsonPatchError|undefined} + */ + function validate$1(sequence, document, externalValidator) { + try { + if (!Array.isArray(sequence)) { + throw new JsonPatchError$1('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY'); + } + if (document) { + //clone document and sequence so that we can safely try applying operations + applyPatch$1(_deepClone$1(document), _deepClone$1(sequence), externalValidator || true); + } + else { + externalValidator = externalValidator || validator$1; + for (var i = 0; i < sequence.length; i++) { + externalValidator(sequence[i], i, document, undefined); + } + } + } + catch (e) { + if (e instanceof JsonPatchError$1) { + return e; + } + else { + throw e; + } + } + } + // based on https://github.com/epoberezkin/fast-deep-equal + // MIT License + // Copyright (c) 2017 Evgeny Poberezkin + // Permission is hereby granted, free of charge, to any person obtaining a copy + // of this software and associated documentation files (the "Software"), to deal + // in the Software without restriction, including without limitation the rights + // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + // copies of the Software, and to permit persons to whom the Software is + // furnished to do so, subject to the following conditions: + // The above copyright notice and this permission notice shall be included in all + // copies or substantial portions of the Software. + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + // SOFTWARE. + function _areEquals$1(a, b) { + if (a === b) + return true; + if (a && b && typeof a == 'object' && typeof b == 'object') { + var arrA = Array.isArray(a), arrB = Array.isArray(b), i, length, key; + if (arrA && arrB) { + length = a.length; + if (length != b.length) + return false; + for (i = length; i-- !== 0;) + if (!_areEquals$1(a[i], b[i])) + return false; + return true; + } + if (arrA != arrB) + return false; + var keys = Object.keys(a); + length = keys.length; + if (length !== Object.keys(b).length) + return false; + for (i = length; i-- !== 0;) + if (!b.hasOwnProperty(keys[i])) + return false; + for (i = length; i-- !== 0;) { + key = keys[i]; + if (!_areEquals$1(a[key], b[key])) + return false; + } + return true; + } + return a !== a && b !== b; + } + + var core$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + JsonPatchError: JsonPatchError$1, + deepClone: deepClone$1, + getValueByPointer: getValueByPointer$1, + applyOperation: applyOperation$1, + applyPatch: applyPatch$1, + applyReducer: applyReducer$1, + validator: validator$1, + validate: validate$1, + _areEquals: _areEquals$1 + }); + + /*! * https://github.com/Starcounter-Jack/JSON-Patch * (c) 2017 Joachim Wester * MIT license - */function Wn(e,t){void 0===t&&(t=!1);var n=Jn.get(e.object);Kn(n.value,e.object,e.patches,"",t),e.patches.length&&xn(n.value,e.patches);var i=e.patches;return i.length>0&&(e.patches=[],e.callback&&e.callback(i)),i}function Kn(e,t,n,i,r){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var s=zn(t),o=zn(e),c=!1,a=o.length-1;a>=0;a--){var l=e[u=o[a]];if(!Rn(t,u)||void 0===t[u]&&void 0!==l&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(r&&n.push({op:"test",path:i+"/"+Mn(u),value:qn(l)}),n.push({op:"remove",path:i+"/"+Mn(u)}),c=!0):(r&&n.push({op:"test",path:i,value:e}),n.push({op:"replace",path:i,value:t}));else{var d=t[u];"object"==typeof l&&null!=l&&"object"==typeof d&&null!=d?Kn(l,d,n,i+"/"+Mn(u),r):l!==d&&(r&&n.push({op:"test",path:i+"/"+Mn(u),value:qn(l)}),n.push({op:"replace",path:i+"/"+Mn(u),value:qn(d)}))}}if(c||s.length!=o.length)for(a=0;a{this.wireStateReceived=!0,this.set(e)}),this.connector.on("receive_diff",e=>{this.wireStateReceived&&(Un(this.state,e),this.announceStateChange())})}field(e){return this.connector.connectionState.get(e)}}class $n extends rn{constructor(e){super({}),this.fields={},this.connector=e,this.connector.on("receive_state_field",({name:e,state:t})=>{this.get(e).set(t)})}get(e){return this.fields[e]||(this.fields[e]=new rn),this.fields[e]}}Et.util=Rt;const ei=700,ti=6e4,ni=1;class ii extends Ct{constructor({endpoint:e,protocol:t,keypair:n=In(),rpcRequestTimeout:i,verbose:r=!1,tag:s,log:o=console.log,autoDecommission:c=!1,dummy:a}={}){super(),this.protocol=t,this.log=o;const{privateKey:l,publicKey:d}=function(e){return e.publicKeyHex&&!e.publicKey&&(e.publicKey=Ot(e.publicKeyHex)),e.privateKeyHex&&!e.privateKey&&(e.privateKey=Ot(e.privateKeyHex)),e}(n);this.clientPrivateKey=l,this.clientPublicKey=d,this.clientPublicKeyHex=Dt(d),this.rpcClient=new yn(this,i),this.endpoint=e,this.verbose=r,this.tag=s,this.autoDecommission=c,this.sentCount=0,this.receivedCount=0,this.successfulConnectsCount=0,a||(this.state=new _n(this),this.connectionState=new $n(this)),this.connected=new rn,this.delayedAdjustConnectionStatus(),r&&$t.green(this.log,`Connector ${this.endpoint} created`),this.decommissionCheckCounter=0,this.lastPongReceivedAt=Date.now(),this.on("pong",()=>{this.lastPongReceivedAt=Date.now()})}delayedAdjustConnectionStatus(){setTimeout(()=>{null==this.connected.get()&&this.connected.set(!1)},ei)}send(e){en({data:e,connector:this}),this.sentCount+=1}signal(e,t){this.connected.get()?this.send({signal:e,data:t}):$t.write(this.log,"Warning: trying to send signal over disconnected connector, this should be prevented by GUI")}userAction({action:e,scope:t,payload:n}){this.signal("__action",{action:e,scope:t,payload:n})}on(e,t){"ready"==e&&this.isReady()&&t(),super.on(e,t)}getSharedSecret(){return this.sharedSecret?Dt(this.sharedSecret):void 0}wireReceive({jsonData:e,encryptedData:t,rawMessage:n}){tn({jsonData:e,encryptedData:t,rawMessage:n,connector:this}),this.receivedCount+=1}field(e){return this.connectionState.get(e)}isReady(){return this.ready}closed(){return!this.transportConnected}connectStatus(e){if(e){this.sentCount=0,this.receivedCount=0,this.transportConnected=!0,this.successfulConnectsCount+=1,this.verbose&&$t.green(this.log,`✓ Connector ${this.endpoint} connected #${this.successfulConnectsCount}`);const e=this.connection.websocket.__id;(function({connector:e,afterFirstStep:t=(()=>{})}){const{clientPrivateKey:n,clientPublicKey:i,clientPublicKeyHex:r,protocol:s,tag:o,endpoint:c,verbose:a}=e;return new Promise((i,l)=>{e.remoteObject("Auth").call("exchangePubkeys",{pubkey:r}).then(r=>{const d=Et.box.before(Ot(r),n);t({sharedSecret:d,remotePubkeyHex:r}),a&&$t.write(e.log,`Connector ${c} established shared secret through diffie-hellman exchange.`),e.remoteObject("Auth").call("finalizeHandshake",{protocol:s}).then(t=>{if(t&&t.error)console.log(t.error);else{i();const t=o?` (${o})`:"";$t.cyan(e.log,`${c}${t} ✓ Connection [ ${s||'"no-name"'} ] ready`)}}).catch(l)}).catch(l)})})({connector:this,afterFirstStep:({sharedSecret:e,remotePubkeyHex:t})=>{this.sharedSecret=e,this._remotePubkeyHex=t}}).then(()=>{this.connectedAt=Date.now(),this.connected.set(!0),this.ready=!0,this.emit("ready")}).catch(t=>{this.connection.websocket.__id==e&&this.connection.websocket.readyState==ni&&t.code==on.TIMEOUT&&($t.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] handshake error: "${t.message}"`),$t.write(this.log,`${this.endpoint} Connector dropping stale websocket after handshake error`),this.connection.terminate()),t.code!=on.TIMEOUT&&$t.write(this.log,`${this.endpoint} x Connector [ ${this.protocol} ] on:ready error: "${t.stack}" — (will not try to reconnect, fix the error and reload this gui)`)})}else{let t;this.transportConnected&&(t=!0),null==this.transportConnected&&$t.write(this.log,`${this.endpoint} Connector was not able to connect at first try`),this.transportConnected=!1,this.ready=!1,this.sharedSecret=void 0,delete this.connectedAt,t&&(this.emit("disconnect"),null==e&&this.delayedAdjustConnectionStatus(),this.connected.set(e))}}checkForDecommission(){this.autoDecommission&&(this.decommissionCheckRequestedAt&&Date.now()-this.decommissionCheckRequestedAt>3e3&&(this.decommissionCheckCounter=0),this.decommissionCheckRequestedAt=Date.now(),this.decommissionCheckCounter+=1,this.decommissionCheckCounter>12&&Date.now()-this.lastPongReceivedAt>ti&&($t.write(this.log,`Decommissioning connector ${this.endpoint} (long inactive)`),this.decommission(),this.emit("decommission")))}decommission(){this.decommissioned=!0}remoteObject(e){return{call:(t,n=[])=>this.rpcClient.remoteObject(e).call(t,function(e){return void 0===e||null==e?[]:Array.isArray(e)?e:[e]}(n))}}attachObject(e,t){new bn({serversideChannel:this,serverMethods:t,methodPrefix:e})}clientPubkey(){return this.clientPublicKeyHex}remotePubkeyHex(){return this._remotePubkeyHex}remoteAddress(){return this.endpoint}}const ri="undefined"!=typeof window;const si="undefined"!=typeof window,oi=0,ci=1,ai=1e3,li=3,di=5;function ui({endpoint:e,host:t,port:n,protocol:i,keypair:r,remotePubkey:s,rpcRequestTimeout:o,autoDecommission:c,log:a,verbose:l,tag:d,dummy:u},{WebSocket:A}){e=function({endpoint:e,host:t,port:n}){if(ri&&e&&e.startsWith("/")){e=`${window.location.protocol.includes("s")?"wss":"ws"}://${window.location.host}${e}`}if(!e)if(ri){t=t||window.location.hostname;const i=window.location.protocol.includes("s")?"wss":"ws";e=`${i}://${t}`,"wss"==i?e=`${i}://${t}/ws`:n?e=`${e}:${n}`:window.location.port&&(e=`${e}:${window.location.port}`)}else{if(!n)throw new Error(`Connectome determineEndpoint: No websocket port provided for ${t}`);e=`ws://${t||"localhost"}:${n}`}return e}({endpoint:e,host:t,port:n});const m=new ii({endpoint:e,protocol:i,rpcRequestTimeout:o,keypair:r,verbose:l,tag:d,log:a,autoDecommission:c,dummy:u}),h=()=>{!function({connector:e,endpoint:t},{WebSocket:n,reconnect:i,log:r,verbose:s}){const o=e.connection;if(e.checkForDecommission(),e.decommissioned)return void Ai(e);if(o.currentlyTryingWS&&o.currentlyTryingWS.readyState==oi){if(o.currentlyTryingWS._waitForConnectCounter{});const a=()=>{e.decommissioned||((s||si)&&$t.write(r,`${t} Websocket open`),o.currentlyTryingWS=null,o.checkTicker=0,function({ws:e,connector:t,openCallback:n,reconnect:i},{log:r,verbose:s}){const o=t.connection,c=e=>{const n=`${t.endpoint} Websocket error`;console.log(n),console.log(e)},a=()=>{$t.write(r,`${t.endpoint} ✖ Connection closed`),t.decommissioned?t.connectStatus(!1):(t.connectStatus(void 0),i())},l=e=>{if(t.decommissioned)return;o.checkTicker=0;const n=si?e.data:e;if("pong"==n)return void t.emit("pong");let i;try{i=JSON.parse(n)}catch(e){}if(i)t.wireReceive({jsonData:i,rawMessage:n});else{const e=si?new Uint8Array(n):n;t.wireReceive({encryptedData:e})}};e._removeAllCallbacks=()=>{e.removeEventListener("error",c),e.removeEventListener("close",a),e.removeEventListener("message",l),e.removeEventListener("open",n)},si?(e.addEventListener("error",c),e.addEventListener("close",a),e.addEventListener("message",l)):(e.on("error",c),e.on("close",a),e.on("message",l))}({ws:c,connector:e,openCallback:a,reconnect:i},{log:r,verbose:s}),o.websocket=c,e.connectStatus(!0))};c._removeAllCallbacks=()=>{c.removeEventListener("open",a)},si?c.addEventListener("open",a):c.on("open",a)}({connector:m,endpoint:e},{WebSocket:A,reconnect:h,log:a,verbose:l})};m.connection={terminate(){this.websocket._removeAllCallbacks(),this.websocket.close(),m.connectStatus(!1),h()},endpoint:e,checkTicker:0};const f=()=>{m.decommissioned||(!function({connector:e,reconnect:t,log:n}){const i=e.connection;if(function(e){return mi(e)&&e.checkTicker>li}(i)||e.decommissioned)return e.decommissioned?($t.yellow(n,`${e.endpoint} Connection decommisioned, closing websocket ${i.websocket.__id}, will not retry again `),Ai(e)):(e.emit("inactive_connection"),$t.yellow(n,`${e.endpoint} ✖ Terminated inactive connection`)),void i.terminate();mi(i)?i.websocket.send("ping"):(null==e.connected&&($t.write(n,`${e.endpoint} Setting connector status to FALSE because connector.connected is undefined`),e.connectStatus(!1)),t());i.checkTicker+=1}({connector:m,reconnect:h,log:a}),setTimeout(f,ai))};return setTimeout(f,10),m}function Ai(e){const t=e.connection;t.currentlyTryingWS&&(t.currentlyTryingWS._removeAllCallbacks(),t.currentlyTryingWS.close(),t.currentlyTryingWS=null),t.ws&&(t.ws._removeAllCallbacks(),t.ws.close(),t.ws=null),e.connectStatus(!1)}function mi(e){return e.websocket&&e.websocket.readyState==ci}function hi({store:e,endpoint:t}){if(e.dmtInterval)return;e.dmtInterval=500;const n=()=>{!function(e){const t=new Date,n=`${t.getHours()}:${("0"+t.getMinutes()).slice(-2)}`;e.tick({frontTicker:fi,localBrowserTime:n}),fi+=1}(e),setTimeout(n,e.dmtInterval)};n()}let fi=0;class vi{constructor(e,{ip:t,port:n}={}){this.address=t||window.location.hostname,this.port=7780;this.store=e;const i=this.store.multiConnectedStoreRef.privateKey,r=this.store.multiConnectedStoreRef.publicKey,s=((o={host:this.address,port:this.port,protocol:"dmt/gui",clientPrivateKey:i,clientPublicKey:r,dummy:!0}).log=o.log||console.log,ui(o,{WebSocket:WebSocket}));var o;this.connector=s,s.on("frontend_action",({action:e,payload:t})=>{console.log(`frontend_action ${e} - ${t}`),this.store.ip||e&&this.store.multiConnectedStoreRef.fire("gui_action",{action:e,payload:t})}),s.on("ready",()=>{this.connectStatus(!0)}),s.on("disconnect",()=>{this.connectStatus(!1)}),s.on("receive_state",e=>{this.dmtProgramState=e,this.store.set(this.dmtProgramState)}),s.on("receive_diff",e=>{this.dmtProgramState&&at(this.dmtProgramState,e),this.store.set(this.dmtProgramState)}),t||hi({store:this.store})}decommission(){this.connector.decommission()}remoteObject(e){return this.connector.remoteObject(e)}signal(e,t){this.connector.signal(e,t)}connectStatus(e){e||(this.dmtProgramState=void 0),this.store.set({connected:e})}}class pi extends Je{constructor(e={},{ip:t=null,port:n=null,multiConnectedStoreRef:i=null}={}){super(e),this.ip=t,this.port=n,this.multiConnectedStoreRef=i,this.storeConnection=new vi(this,{ip:t,port:n})}decommission(){console.log(`Decommissioning connected store ${this.ip} ...`),this.storeConnection.decommission()}signal(e,t){this.storeConnection.signal(e,t)}remoteObject(e){return this.storeConnection.remoteObject(e)}entangle(e){}tick({frontTicker:e,localBrowserTime:t}){this.multiConnectedStoreRef?this.multiConnectedStoreRef.set({frontTicker:e,localBrowserTime:t}):this.set({frontTicker:e,localBrowserTime:t})}}var gi={addPropertiesToGUIComponent:function({component:e,thisDeviceState:t,meta:n,tunneledState:i,globalStore:r,nearbyDevices:s,frontendLog:o,changed:c}){const a=t,l={};!function({component:e,componentStatePatch:t,state:n,frontendLog:i,meta:r}){t.frontendLog=i;const{thisDeviceName:s,selectedDeviceName:o,activeStoreKey:c}=r;e.get().thisDeviceName||(t.thisDeviceName=s),t.selectedDeviceName=o,t.selectedDeviceKey=c,t.homebase=o==s}({component:e,componentStatePatch:l,state:a,frontendLog:o,meta:n}),function({componentStatePatch:e,state:t,tunneledState:n}){if(t.device){if(e.timeDate=t.time,e.holiday=t.time.holiday,e.environment=t.environment,e.isDevMachine=t.device.devMachine,e.isDevUser=t.device.devUser,e.atRPi=t.device.isRPi&&"localhost"==window.location.hostname,t.device.demoDevice&&t.device.demoDevice.date){const n=new Date(t.device.demoDevice.date);e._demoTime=Te.getDisplayTime(n)}e.loaded=!0}n.device&&(e.isRPi=n.device.isRPi)}({componentStatePatch:l,state:a,tunneledState:i}),function({componentStatePatch:e,state:t,globalStore:n}){e.wallpapers=[];let i={};if(t.gui&&t.gui.views){const{views:r}=t.gui;i=r[n.get().view]||{};const s=[];for(const e of Object.values(r))e.wallpaper&&s.push(e.wallpaper);e.wallpapers=s}i&&n.setWallpaper(i.wallpaper),e.viewDef=i}({componentStatePatch:l,state:a,globalStore:r}),function({component:e,componentStatePatch:t,state:n,meta:i,globalStore:r}){const{selectedDeviceName:s,thisDeviceName:o}=i;if(n.services&&n.services.gui){const e=n.services.gui;e.idleView&&r.set({idleView:e.idleView}),"false"==e.showIp&&"true"!=t.viewDef.showIp&&(t.viewDef.showIp="false");const i=e.nearby||{};if(i.homebase){const{homebase:e}=i;t.homebaseName=e,t.homebase=i.homebase&&s==e||!i.homebase&&s==o}"true"==i.disableDeviceSelector&&(t.disableDeviceSelector=!0)}t.preventPointerEvents=r.videoOverlay()}({componentStatePatch:l,component:e,state:a,meta:n,globalStore:r}),function({componentStatePatch:e,nearbyDevices:t}){e.nearbyDevices=t}({componentStatePatch:l,nearbyDevices:s}),e.set(l)}};function wi(){}class yi{constructor(e,t,n){this.prev=e,this.next=t,this.fn=n||wi}run(e){this.fn(e),this.next&&this.next.run(e)}}class bi{constructor(e){this.head=new yi,this.tail=new yi(this.head),this.head.next=this.tail,this.linkConstructor=e,this.reg={}}insert(e){const t=new yi(this.tail.prev,this.tail,e);return t.next.prev=t,t.prev.next=t,t}remove(e){e.prev.next=e.next,e.next.prev=e.prev}}let Ii=0;const Vi=/[\s,]+/g;class Ei{constructor(){this.events={}}on(e,t){const n=this;e.split(Vi).forEach(e=>{const i=n.events[e]||(n.events[e]=new bi),r=t._eev||(t._eev=++Ii);i.reg[r]||(i.reg[r]=i.insert(t))})}off(e,t){const n=this;t&&e.split(Vi).forEach((function(e){const i=n.events[e];if(!i)return;const r=i.reg[t._eev];i.reg[t._eev]=void 0,i&&r&&i.remove(r)}))}emit(e,t){const n=this.events[e];n&&n.head.run(t)}}var Ri="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function zi(e,t){return e(t={exports:{}},t.exports),t.exports}var qi=zi((function(t){!function(t){var n=function(e){var t,n=new Float64Array(16);if(e)for(t=0;t>24&255,e[t+1]=n>>16&255,e[t+2]=n>>8&255,e[t+3]=255&n,e[t+4]=i>>24&255,e[t+5]=i>>16&255,e[t+6]=i>>8&255,e[t+7]=255&i}function f(e,t,n,i,r){var s,o=0;for(s=0;s>>8)-1}function v(e,t,n,i){return f(e,t,n,i,16)}function p(e,t,n,i){return f(e,t,n,i,32)}function g(e,t,n,i){!function(e,t,n,i){for(var r,s=255&i[0]|(255&i[1])<<8|(255&i[2])<<16|(255&i[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,c=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,a=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,l=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,d=255&i[4]|(255&i[5])<<8|(255&i[6])<<16|(255&i[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,A=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,m=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,h=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,f=255&i[8]|(255&i[9])<<8|(255&i[10])<<16|(255&i[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,p=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,w=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,y=255&i[12]|(255&i[13])<<8|(255&i[14])<<16|(255&i[15])<<24,b=s,I=o,V=c,E=a,R=l,z=d,q=u,B=A,M=m,C=h,D=f,O=v,P=p,Z=g,N=w,H=y,k=0;k<20;k+=2)b^=(r=(P^=(r=(M^=(r=(R^=(r=b+P|0)<<7|r>>>25)+b|0)<<9|r>>>23)+R|0)<<13|r>>>19)+M|0)<<18|r>>>14,z^=(r=(I^=(r=(Z^=(r=(C^=(r=z+I|0)<<7|r>>>25)+z|0)<<9|r>>>23)+C|0)<<13|r>>>19)+Z|0)<<18|r>>>14,D^=(r=(q^=(r=(V^=(r=(N^=(r=D+q|0)<<7|r>>>25)+D|0)<<9|r>>>23)+N|0)<<13|r>>>19)+V|0)<<18|r>>>14,H^=(r=(O^=(r=(B^=(r=(E^=(r=H+O|0)<<7|r>>>25)+H|0)<<9|r>>>23)+E|0)<<13|r>>>19)+B|0)<<18|r>>>14,b^=(r=(E^=(r=(V^=(r=(I^=(r=b+E|0)<<7|r>>>25)+b|0)<<9|r>>>23)+I|0)<<13|r>>>19)+V|0)<<18|r>>>14,z^=(r=(R^=(r=(B^=(r=(q^=(r=z+R|0)<<7|r>>>25)+z|0)<<9|r>>>23)+q|0)<<13|r>>>19)+B|0)<<18|r>>>14,D^=(r=(C^=(r=(M^=(r=(O^=(r=D+C|0)<<7|r>>>25)+D|0)<<9|r>>>23)+O|0)<<13|r>>>19)+M|0)<<18|r>>>14,H^=(r=(N^=(r=(Z^=(r=(P^=(r=H+N|0)<<7|r>>>25)+H|0)<<9|r>>>23)+P|0)<<13|r>>>19)+Z|0)<<18|r>>>14;b=b+s|0,I=I+o|0,V=V+c|0,E=E+a|0,R=R+l|0,z=z+d|0,q=q+u|0,B=B+A|0,M=M+m|0,C=C+h|0,D=D+f|0,O=O+v|0,P=P+p|0,Z=Z+g|0,N=N+w|0,H=H+y|0,e[0]=b>>>0&255,e[1]=b>>>8&255,e[2]=b>>>16&255,e[3]=b>>>24&255,e[4]=I>>>0&255,e[5]=I>>>8&255,e[6]=I>>>16&255,e[7]=I>>>24&255,e[8]=V>>>0&255,e[9]=V>>>8&255,e[10]=V>>>16&255,e[11]=V>>>24&255,e[12]=E>>>0&255,e[13]=E>>>8&255,e[14]=E>>>16&255,e[15]=E>>>24&255,e[16]=R>>>0&255,e[17]=R>>>8&255,e[18]=R>>>16&255,e[19]=R>>>24&255,e[20]=z>>>0&255,e[21]=z>>>8&255,e[22]=z>>>16&255,e[23]=z>>>24&255,e[24]=q>>>0&255,e[25]=q>>>8&255,e[26]=q>>>16&255,e[27]=q>>>24&255,e[28]=B>>>0&255,e[29]=B>>>8&255,e[30]=B>>>16&255,e[31]=B>>>24&255,e[32]=M>>>0&255,e[33]=M>>>8&255,e[34]=M>>>16&255,e[35]=M>>>24&255,e[36]=C>>>0&255,e[37]=C>>>8&255,e[38]=C>>>16&255,e[39]=C>>>24&255,e[40]=D>>>0&255,e[41]=D>>>8&255,e[42]=D>>>16&255,e[43]=D>>>24&255,e[44]=O>>>0&255,e[45]=O>>>8&255,e[46]=O>>>16&255,e[47]=O>>>24&255,e[48]=P>>>0&255,e[49]=P>>>8&255,e[50]=P>>>16&255,e[51]=P>>>24&255,e[52]=Z>>>0&255,e[53]=Z>>>8&255,e[54]=Z>>>16&255,e[55]=Z>>>24&255,e[56]=N>>>0&255,e[57]=N>>>8&255,e[58]=N>>>16&255,e[59]=N>>>24&255,e[60]=H>>>0&255,e[61]=H>>>8&255,e[62]=H>>>16&255,e[63]=H>>>24&255}(e,t,n,i)}function w(e,t,n,i){!function(e,t,n,i){for(var r,s=255&i[0]|(255&i[1])<<8|(255&i[2])<<16|(255&i[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,c=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,a=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,l=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,d=255&i[4]|(255&i[5])<<8|(255&i[6])<<16|(255&i[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,A=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,m=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,h=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,f=255&i[8]|(255&i[9])<<8|(255&i[10])<<16|(255&i[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,p=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,w=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,y=255&i[12]|(255&i[13])<<8|(255&i[14])<<16|(255&i[15])<<24,b=0;b<20;b+=2)s^=(r=(p^=(r=(m^=(r=(l^=(r=s+p|0)<<7|r>>>25)+s|0)<<9|r>>>23)+l|0)<<13|r>>>19)+m|0)<<18|r>>>14,d^=(r=(o^=(r=(g^=(r=(h^=(r=d+o|0)<<7|r>>>25)+d|0)<<9|r>>>23)+h|0)<<13|r>>>19)+g|0)<<18|r>>>14,f^=(r=(u^=(r=(c^=(r=(w^=(r=f+u|0)<<7|r>>>25)+f|0)<<9|r>>>23)+w|0)<<13|r>>>19)+c|0)<<18|r>>>14,y^=(r=(v^=(r=(A^=(r=(a^=(r=y+v|0)<<7|r>>>25)+y|0)<<9|r>>>23)+a|0)<<13|r>>>19)+A|0)<<18|r>>>14,s^=(r=(a^=(r=(c^=(r=(o^=(r=s+a|0)<<7|r>>>25)+s|0)<<9|r>>>23)+o|0)<<13|r>>>19)+c|0)<<18|r>>>14,d^=(r=(l^=(r=(A^=(r=(u^=(r=d+l|0)<<7|r>>>25)+d|0)<<9|r>>>23)+u|0)<<13|r>>>19)+A|0)<<18|r>>>14,f^=(r=(h^=(r=(m^=(r=(v^=(r=f+h|0)<<7|r>>>25)+f|0)<<9|r>>>23)+v|0)<<13|r>>>19)+m|0)<<18|r>>>14,y^=(r=(w^=(r=(g^=(r=(p^=(r=y+w|0)<<7|r>>>25)+y|0)<<9|r>>>23)+p|0)<<13|r>>>19)+g|0)<<18|r>>>14;e[0]=s>>>0&255,e[1]=s>>>8&255,e[2]=s>>>16&255,e[3]=s>>>24&255,e[4]=d>>>0&255,e[5]=d>>>8&255,e[6]=d>>>16&255,e[7]=d>>>24&255,e[8]=f>>>0&255,e[9]=f>>>8&255,e[10]=f>>>16&255,e[11]=f>>>24&255,e[12]=y>>>0&255,e[13]=y>>>8&255,e[14]=y>>>16&255,e[15]=y>>>24&255,e[16]=u>>>0&255,e[17]=u>>>8&255,e[18]=u>>>16&255,e[19]=u>>>24&255,e[20]=A>>>0&255,e[21]=A>>>8&255,e[22]=A>>>16&255,e[23]=A>>>24&255,e[24]=m>>>0&255,e[25]=m>>>8&255,e[26]=m>>>16&255,e[27]=m>>>24&255,e[28]=h>>>0&255,e[29]=h>>>8&255,e[30]=h>>>16&255,e[31]=h>>>24&255}(e,t,n,i)}var y=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function b(e,t,n,i,r,s,o){var c,a,l=new Uint8Array(16),d=new Uint8Array(64);for(a=0;a<16;a++)l[a]=0;for(a=0;a<8;a++)l[a]=s[a];for(;r>=64;){for(g(d,l,o,y),a=0;a<64;a++)e[t+a]=n[i+a]^d[a];for(c=1,a=8;a<16;a++)c=c+(255&l[a])|0,l[a]=255&c,c>>>=8;r-=64,t+=64,i+=64}if(r>0)for(g(d,l,o,y),a=0;a=64;){for(g(a,c,r,y),o=0;o<64;o++)e[t+o]=a[o];for(s=1,o=8;o<16;o++)s=s+(255&c[o])|0,c[o]=255&s,s>>>=8;n-=64,t+=64}if(n>0)for(g(a,c,r,y),o=0;o>>13|n<<3),i=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(n>>>10|i<<6),r=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(i>>>7|r<<9),s=255&e[8]|(255&e[9])<<8,this.r[4]=255&(r>>>4|s<<12),this.r[5]=s>>>1&8190,o=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(s>>>14|o<<2),c=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(o>>>11|c<<5),a=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(c>>>8|a<<8),this.r[9]=a>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};function z(e,t,n,i,r,s){var o=new R(s);return o.update(n,i,r),o.finish(e,t),0}function q(e,t,n,i,r,s){var o=new Uint8Array(16);return z(o,0,n,i,r,s),v(e,t,o,0)}function B(e,t,n,i,r){var s;if(n<32)return-1;for(E(e,0,t,0,n,i,r),z(e,16,e,32,n-32,e),s=0;s<16;s++)e[s]=0;return 0}function M(e,t,n,i,r){var s,o=new Uint8Array(32);if(n<32)return-1;if(V(o,0,32,i,r),0!==q(t,16,t,32,n-32,o))return-1;for(E(e,0,t,0,n,i,r),s=0;s<32;s++)e[s]=0;return 0}function C(e,t){var n;for(n=0;n<16;n++)e[n]=0|t[n]}function D(e){var t,n,i=1;for(t=0;t<16;t++)n=e[t]+i+65535,i=Math.floor(n/65536),e[t]=n-65536*i;e[0]+=i-1+37*(i-1)}function O(e,t,n){for(var i,r=~(n-1),s=0;s<16;s++)i=r&(e[s]^t[s]),e[s]^=i,t[s]^=i}function P(e,t){var i,r,s,o=n(),c=n();for(i=0;i<16;i++)c[i]=t[i];for(D(c),D(c),D(c),r=0;r<2;r++){for(o[0]=c[0]-65517,i=1;i<15;i++)o[i]=c[i]-65535-(o[i-1]>>16&1),o[i-1]&=65535;o[15]=c[15]-32767-(o[14]>>16&1),s=o[15]>>16&1,o[14]&=65535,O(c,o,1-s)}for(i=0;i<16;i++)e[2*i]=255&c[i],e[2*i+1]=c[i]>>8}function Z(e,t){var n=new Uint8Array(32),i=new Uint8Array(32);return P(n,e),P(i,t),p(n,0,i,0)}function N(e){var t=new Uint8Array(32);return P(t,e),1&t[0]}function H(e,t){var n;for(n=0;n<16;n++)e[n]=t[2*n]+(t[2*n+1]<<8);e[15]&=32767}function k(e,t,n){for(var i=0;i<16;i++)e[i]=t[i]+n[i]}function j(e,t,n){for(var i=0;i<16;i++)e[i]=t[i]-n[i]}function x(e,t,n){var i,r,s=0,o=0,c=0,a=0,l=0,d=0,u=0,A=0,m=0,h=0,f=0,v=0,p=0,g=0,w=0,y=0,b=0,I=0,V=0,E=0,R=0,z=0,q=0,B=0,M=0,C=0,D=0,O=0,P=0,Z=0,N=0,H=n[0],k=n[1],j=n[2],x=n[3],X=n[4],T=n[5],S=n[6],L=n[7],J=n[8],Y=n[9],G=n[10],W=n[11],K=n[12],F=n[13],Q=n[14],U=n[15];s+=(i=t[0])*H,o+=i*k,c+=i*j,a+=i*x,l+=i*X,d+=i*T,u+=i*S,A+=i*L,m+=i*J,h+=i*Y,f+=i*G,v+=i*W,p+=i*K,g+=i*F,w+=i*Q,y+=i*U,o+=(i=t[1])*H,c+=i*k,a+=i*j,l+=i*x,d+=i*X,u+=i*T,A+=i*S,m+=i*L,h+=i*J,f+=i*Y,v+=i*G,p+=i*W,g+=i*K,w+=i*F,y+=i*Q,b+=i*U,c+=(i=t[2])*H,a+=i*k,l+=i*j,d+=i*x,u+=i*X,A+=i*T,m+=i*S,h+=i*L,f+=i*J,v+=i*Y,p+=i*G,g+=i*W,w+=i*K,y+=i*F,b+=i*Q,I+=i*U,a+=(i=t[3])*H,l+=i*k,d+=i*j,u+=i*x,A+=i*X,m+=i*T,h+=i*S,f+=i*L,v+=i*J,p+=i*Y,g+=i*G,w+=i*W,y+=i*K,b+=i*F,I+=i*Q,V+=i*U,l+=(i=t[4])*H,d+=i*k,u+=i*j,A+=i*x,m+=i*X,h+=i*T,f+=i*S,v+=i*L,p+=i*J,g+=i*Y,w+=i*G,y+=i*W,b+=i*K,I+=i*F,V+=i*Q,E+=i*U,d+=(i=t[5])*H,u+=i*k,A+=i*j,m+=i*x,h+=i*X,f+=i*T,v+=i*S,p+=i*L,g+=i*J,w+=i*Y,y+=i*G,b+=i*W,I+=i*K,V+=i*F,E+=i*Q,R+=i*U,u+=(i=t[6])*H,A+=i*k,m+=i*j,h+=i*x,f+=i*X,v+=i*T,p+=i*S,g+=i*L,w+=i*J,y+=i*Y,b+=i*G,I+=i*W,V+=i*K,E+=i*F,R+=i*Q,z+=i*U,A+=(i=t[7])*H,m+=i*k,h+=i*j,f+=i*x,v+=i*X,p+=i*T,g+=i*S,w+=i*L,y+=i*J,b+=i*Y,I+=i*G,V+=i*W,E+=i*K,R+=i*F,z+=i*Q,q+=i*U,m+=(i=t[8])*H,h+=i*k,f+=i*j,v+=i*x,p+=i*X,g+=i*T,w+=i*S,y+=i*L,b+=i*J,I+=i*Y,V+=i*G,E+=i*W,R+=i*K,z+=i*F,q+=i*Q,B+=i*U,h+=(i=t[9])*H,f+=i*k,v+=i*j,p+=i*x,g+=i*X,w+=i*T,y+=i*S,b+=i*L,I+=i*J,V+=i*Y,E+=i*G,R+=i*W,z+=i*K,q+=i*F,B+=i*Q,M+=i*U,f+=(i=t[10])*H,v+=i*k,p+=i*j,g+=i*x,w+=i*X,y+=i*T,b+=i*S,I+=i*L,V+=i*J,E+=i*Y,R+=i*G,z+=i*W,q+=i*K,B+=i*F,M+=i*Q,C+=i*U,v+=(i=t[11])*H,p+=i*k,g+=i*j,w+=i*x,y+=i*X,b+=i*T,I+=i*S,V+=i*L,E+=i*J,R+=i*Y,z+=i*G,q+=i*W,B+=i*K,M+=i*F,C+=i*Q,D+=i*U,p+=(i=t[12])*H,g+=i*k,w+=i*j,y+=i*x,b+=i*X,I+=i*T,V+=i*S,E+=i*L,R+=i*J,z+=i*Y,q+=i*G,B+=i*W,M+=i*K,C+=i*F,D+=i*Q,O+=i*U,g+=(i=t[13])*H,w+=i*k,y+=i*j,b+=i*x,I+=i*X,V+=i*T,E+=i*S,R+=i*L,z+=i*J,q+=i*Y,B+=i*G,M+=i*W,C+=i*K,D+=i*F,O+=i*Q,P+=i*U,w+=(i=t[14])*H,y+=i*k,b+=i*j,I+=i*x,V+=i*X,E+=i*T,R+=i*S,z+=i*L,q+=i*J,B+=i*Y,M+=i*G,C+=i*W,D+=i*K,O+=i*F,P+=i*Q,Z+=i*U,y+=(i=t[15])*H,o+=38*(I+=i*j),c+=38*(V+=i*x),a+=38*(E+=i*X),l+=38*(R+=i*T),d+=38*(z+=i*S),u+=38*(q+=i*L),A+=38*(B+=i*J),m+=38*(M+=i*Y),h+=38*(C+=i*G),f+=38*(D+=i*W),v+=38*(O+=i*K),p+=38*(P+=i*F),g+=38*(Z+=i*Q),w+=38*(N+=i*U),s=(i=(s+=38*(b+=i*k))+(r=1)+65535)-65536*(r=Math.floor(i/65536)),o=(i=o+r+65535)-65536*(r=Math.floor(i/65536)),c=(i=c+r+65535)-65536*(r=Math.floor(i/65536)),a=(i=a+r+65535)-65536*(r=Math.floor(i/65536)),l=(i=l+r+65535)-65536*(r=Math.floor(i/65536)),d=(i=d+r+65535)-65536*(r=Math.floor(i/65536)),u=(i=u+r+65535)-65536*(r=Math.floor(i/65536)),A=(i=A+r+65535)-65536*(r=Math.floor(i/65536)),m=(i=m+r+65535)-65536*(r=Math.floor(i/65536)),h=(i=h+r+65535)-65536*(r=Math.floor(i/65536)),f=(i=f+r+65535)-65536*(r=Math.floor(i/65536)),v=(i=v+r+65535)-65536*(r=Math.floor(i/65536)),p=(i=p+r+65535)-65536*(r=Math.floor(i/65536)),g=(i=g+r+65535)-65536*(r=Math.floor(i/65536)),w=(i=w+r+65535)-65536*(r=Math.floor(i/65536)),y=(i=y+r+65535)-65536*(r=Math.floor(i/65536)),s=(i=(s+=r-1+37*(r-1))+(r=1)+65535)-65536*(r=Math.floor(i/65536)),o=(i=o+r+65535)-65536*(r=Math.floor(i/65536)),c=(i=c+r+65535)-65536*(r=Math.floor(i/65536)),a=(i=a+r+65535)-65536*(r=Math.floor(i/65536)),l=(i=l+r+65535)-65536*(r=Math.floor(i/65536)),d=(i=d+r+65535)-65536*(r=Math.floor(i/65536)),u=(i=u+r+65535)-65536*(r=Math.floor(i/65536)),A=(i=A+r+65535)-65536*(r=Math.floor(i/65536)),m=(i=m+r+65535)-65536*(r=Math.floor(i/65536)),h=(i=h+r+65535)-65536*(r=Math.floor(i/65536)),f=(i=f+r+65535)-65536*(r=Math.floor(i/65536)),v=(i=v+r+65535)-65536*(r=Math.floor(i/65536)),p=(i=p+r+65535)-65536*(r=Math.floor(i/65536)),g=(i=g+r+65535)-65536*(r=Math.floor(i/65536)),w=(i=w+r+65535)-65536*(r=Math.floor(i/65536)),y=(i=y+r+65535)-65536*(r=Math.floor(i/65536)),s+=r-1+37*(r-1),e[0]=s,e[1]=o,e[2]=c,e[3]=a,e[4]=l,e[5]=d,e[6]=u,e[7]=A,e[8]=m,e[9]=h,e[10]=f,e[11]=v,e[12]=p,e[13]=g,e[14]=w,e[15]=y}function X(e,t){x(e,t,t)}function T(e,t){var i,r=n();for(i=0;i<16;i++)r[i]=t[i];for(i=253;i>=0;i--)X(r,r),2!==i&&4!==i&&x(r,r,t);for(i=0;i<16;i++)e[i]=r[i]}function S(e,t){var i,r=n();for(i=0;i<16;i++)r[i]=t[i];for(i=250;i>=0;i--)X(r,r),1!==i&&x(r,r,t);for(i=0;i<16;i++)e[i]=r[i]}function L(e,t,i){var r,s,o=new Uint8Array(32),c=new Float64Array(80),l=n(),d=n(),u=n(),A=n(),m=n(),h=n();for(s=0;s<31;s++)o[s]=t[s];for(o[31]=127&t[31]|64,o[0]&=248,H(c,i),s=0;s<16;s++)d[s]=c[s],A[s]=l[s]=u[s]=0;for(l[0]=A[0]=1,s=254;s>=0;--s)O(l,d,r=o[s>>>3]>>>(7&s)&1),O(u,A,r),k(m,l,u),j(l,l,u),k(u,d,A),j(d,d,A),X(A,m),X(h,l),x(l,u,l),x(u,d,m),k(m,l,u),j(l,l,u),X(d,l),j(u,A,h),x(l,u,a),k(l,l,A),x(u,u,l),x(l,A,h),x(A,d,c),X(d,m),O(l,d,r),O(u,A,r);for(s=0;s<16;s++)c[s+16]=l[s],c[s+32]=u[s],c[s+48]=d[s],c[s+64]=A[s];var f=c.subarray(32),v=c.subarray(16);return T(f,f),x(v,v,f),P(e,v),0}function J(e,t){return L(e,t,s)}function Y(e,t){return i(t,32),J(e,t)}function G(e,t,n){var i=new Uint8Array(32);return L(i,n,t),w(e,r,i,y)}R.prototype.blocks=function(e,t,n){for(var i,r,s,o,c,a,l,d,u,A,m,h,f,v,p,g,w,y,b,I=this.fin?0:2048,V=this.h[0],E=this.h[1],R=this.h[2],z=this.h[3],q=this.h[4],B=this.h[5],M=this.h[6],C=this.h[7],D=this.h[8],O=this.h[9],P=this.r[0],Z=this.r[1],N=this.r[2],H=this.r[3],k=this.r[4],j=this.r[5],x=this.r[6],X=this.r[7],T=this.r[8],S=this.r[9];n>=16;)A=u=0,A+=(V+=8191&(i=255&e[t+0]|(255&e[t+1])<<8))*P,A+=(E+=8191&(i>>>13|(r=255&e[t+2]|(255&e[t+3])<<8)<<3))*(5*S),A+=(R+=8191&(r>>>10|(s=255&e[t+4]|(255&e[t+5])<<8)<<6))*(5*T),A+=(z+=8191&(s>>>7|(o=255&e[t+6]|(255&e[t+7])<<8)<<9))*(5*X),u=(A+=(q+=8191&(o>>>4|(c=255&e[t+8]|(255&e[t+9])<<8)<<12))*(5*x))>>>13,A&=8191,A+=(B+=c>>>1&8191)*(5*j),A+=(M+=8191&(c>>>14|(a=255&e[t+10]|(255&e[t+11])<<8)<<2))*(5*k),A+=(C+=8191&(a>>>11|(l=255&e[t+12]|(255&e[t+13])<<8)<<5))*(5*H),A+=(D+=8191&(l>>>8|(d=255&e[t+14]|(255&e[t+15])<<8)<<8))*(5*N),m=u+=(A+=(O+=d>>>5|I)*(5*Z))>>>13,m+=V*Z,m+=E*P,m+=R*(5*S),m+=z*(5*T),u=(m+=q*(5*X))>>>13,m&=8191,m+=B*(5*x),m+=M*(5*j),m+=C*(5*k),m+=D*(5*H),u+=(m+=O*(5*N))>>>13,m&=8191,h=u,h+=V*N,h+=E*Z,h+=R*P,h+=z*(5*S),u=(h+=q*(5*T))>>>13,h&=8191,h+=B*(5*X),h+=M*(5*x),h+=C*(5*j),h+=D*(5*k),f=u+=(h+=O*(5*H))>>>13,f+=V*H,f+=E*N,f+=R*Z,f+=z*P,u=(f+=q*(5*S))>>>13,f&=8191,f+=B*(5*T),f+=M*(5*X),f+=C*(5*x),f+=D*(5*j),v=u+=(f+=O*(5*k))>>>13,v+=V*k,v+=E*H,v+=R*N,v+=z*Z,u=(v+=q*P)>>>13,v&=8191,v+=B*(5*S),v+=M*(5*T),v+=C*(5*X),v+=D*(5*x),p=u+=(v+=O*(5*j))>>>13,p+=V*j,p+=E*k,p+=R*H,p+=z*N,u=(p+=q*Z)>>>13,p&=8191,p+=B*P,p+=M*(5*S),p+=C*(5*T),p+=D*(5*X),g=u+=(p+=O*(5*x))>>>13,g+=V*x,g+=E*j,g+=R*k,g+=z*H,u=(g+=q*N)>>>13,g&=8191,g+=B*Z,g+=M*P,g+=C*(5*S),g+=D*(5*T),w=u+=(g+=O*(5*X))>>>13,w+=V*X,w+=E*x,w+=R*j,w+=z*k,u=(w+=q*H)>>>13,w&=8191,w+=B*N,w+=M*Z,w+=C*P,w+=D*(5*S),y=u+=(w+=O*(5*T))>>>13,y+=V*T,y+=E*X,y+=R*x,y+=z*j,u=(y+=q*k)>>>13,y&=8191,y+=B*H,y+=M*N,y+=C*Z,y+=D*P,b=u+=(y+=O*(5*S))>>>13,b+=V*S,b+=E*T,b+=R*X,b+=z*x,u=(b+=q*j)>>>13,b&=8191,b+=B*k,b+=M*H,b+=C*N,b+=D*Z,V=A=8191&(u=(u=((u+=(b+=O*P)>>>13)<<2)+u|0)+(A&=8191)|0),E=m+=u>>>=13,R=h&=8191,z=f&=8191,q=v&=8191,B=p&=8191,M=g&=8191,C=w&=8191,D=y&=8191,O=b&=8191,t+=16,n-=16;this.h[0]=V,this.h[1]=E,this.h[2]=R,this.h[3]=z,this.h[4]=q,this.h[5]=B,this.h[6]=M,this.h[7]=C,this.h[8]=D,this.h[9]=O},R.prototype.finish=function(e,t){var n,i,r,s,o=new Uint16Array(10);if(this.leftover){for(s=this.leftover,this.buffer[s++]=1;s<16;s++)this.buffer[s]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,s=2;s<10;s++)this.h[s]+=n,n=this.h[s]>>>13,this.h[s]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,o[0]=this.h[0]+5,n=o[0]>>>13,o[0]&=8191,s=1;s<10;s++)o[s]=this.h[s]+n,n=o[s]>>>13,o[s]&=8191;for(o[9]-=8192,i=(1^n)-1,s=0;s<10;s++)o[s]&=i;for(i=~i,s=0;s<10;s++)this.h[s]=this.h[s]&i|o[s];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),r=this.h[0]+this.pad[0],this.h[0]=65535&r,s=1;s<8;s++)r=(this.h[s]+this.pad[s]|0)+(r>>>16)|0,this.h[s]=65535&r;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},R.prototype.update=function(e,t,n){var i,r;if(this.leftover){for((r=16-this.leftover)>n&&(r=n),i=0;i=16&&(r=n-n%16,this.blocks(e,t,r),t+=r,n-=r),n){for(i=0;i=128;){for(I=0;I<16;I++)V=8*I+K,C[I]=n[V+0]<<24|n[V+1]<<16|n[V+2]<<8|n[V+3],D[I]=n[V+4]<<24|n[V+5]<<16|n[V+6]<<8|n[V+7];for(I=0;I<80;I++)if(r=O,s=P,o=Z,c=N,a=H,l=k,d=j,x,A=X,m=T,h=S,f=L,v=J,p=Y,g=G,W,z=65535&(R=W),q=R>>>16,B=65535&(E=x),M=E>>>16,z+=65535&(R=(J>>>14|H<<18)^(J>>>18|H<<14)^(H>>>9|J<<23)),q+=R>>>16,B+=65535&(E=(H>>>14|J<<18)^(H>>>18|J<<14)^(J>>>9|H<<23)),M+=E>>>16,z+=65535&(R=J&Y^~J&G),q+=R>>>16,B+=65535&(E=H&k^~H&j),M+=E>>>16,E=F[2*I],z+=65535&(R=F[2*I+1]),q+=R>>>16,B+=65535&E,M+=E>>>16,E=C[I%16],q+=(R=D[I%16])>>>16,B+=65535&E,M+=E>>>16,B+=(q+=(z+=65535&R)>>>16)>>>16,z=65535&(R=b=65535&z|q<<16),q=R>>>16,B=65535&(E=y=65535&B|(M+=B>>>16)<<16),M=E>>>16,z+=65535&(R=(X>>>28|O<<4)^(O>>>2|X<<30)^(O>>>7|X<<25)),q+=R>>>16,B+=65535&(E=(O>>>28|X<<4)^(X>>>2|O<<30)^(X>>>7|O<<25)),M+=E>>>16,q+=(R=X&T^X&S^T&S)>>>16,B+=65535&(E=O&P^O&Z^P&Z),M+=E>>>16,u=65535&(B+=(q+=(z+=65535&R)>>>16)>>>16)|(M+=B>>>16)<<16,w=65535&z|q<<16,z=65535&(R=f),q=R>>>16,B=65535&(E=c),M=E>>>16,q+=(R=b)>>>16,B+=65535&(E=y),M+=E>>>16,P=r,Z=s,N=o,H=c=65535&(B+=(q+=(z+=65535&R)>>>16)>>>16)|(M+=B>>>16)<<16,k=a,j=l,x=d,O=u,T=A,S=m,L=h,J=f=65535&z|q<<16,Y=v,G=p,W=g,X=w,I%16==15)for(V=0;V<16;V++)E=C[V],z=65535&(R=D[V]),q=R>>>16,B=65535&E,M=E>>>16,E=C[(V+9)%16],z+=65535&(R=D[(V+9)%16]),q+=R>>>16,B+=65535&E,M+=E>>>16,y=C[(V+1)%16],z+=65535&(R=((b=D[(V+1)%16])>>>1|y<<31)^(b>>>8|y<<24)^(b>>>7|y<<25)),q+=R>>>16,B+=65535&(E=(y>>>1|b<<31)^(y>>>8|b<<24)^y>>>7),M+=E>>>16,y=C[(V+14)%16],q+=(R=((b=D[(V+14)%16])>>>19|y<<13)^(y>>>29|b<<3)^(b>>>6|y<<26))>>>16,B+=65535&(E=(y>>>19|b<<13)^(b>>>29|y<<3)^y>>>6),M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,C[V]=65535&B|M<<16,D[V]=65535&z|q<<16;z=65535&(R=X),q=R>>>16,B=65535&(E=O),M=E>>>16,E=e[0],q+=(R=t[0])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[0]=O=65535&B|M<<16,t[0]=X=65535&z|q<<16,z=65535&(R=T),q=R>>>16,B=65535&(E=P),M=E>>>16,E=e[1],q+=(R=t[1])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[1]=P=65535&B|M<<16,t[1]=T=65535&z|q<<16,z=65535&(R=S),q=R>>>16,B=65535&(E=Z),M=E>>>16,E=e[2],q+=(R=t[2])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[2]=Z=65535&B|M<<16,t[2]=S=65535&z|q<<16,z=65535&(R=L),q=R>>>16,B=65535&(E=N),M=E>>>16,E=e[3],q+=(R=t[3])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[3]=N=65535&B|M<<16,t[3]=L=65535&z|q<<16,z=65535&(R=J),q=R>>>16,B=65535&(E=H),M=E>>>16,E=e[4],q+=(R=t[4])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[4]=H=65535&B|M<<16,t[4]=J=65535&z|q<<16,z=65535&(R=Y),q=R>>>16,B=65535&(E=k),M=E>>>16,E=e[5],q+=(R=t[5])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[5]=k=65535&B|M<<16,t[5]=Y=65535&z|q<<16,z=65535&(R=G),q=R>>>16,B=65535&(E=j),M=E>>>16,E=e[6],q+=(R=t[6])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[6]=j=65535&B|M<<16,t[6]=G=65535&z|q<<16,z=65535&(R=W),q=R>>>16,B=65535&(E=x),M=E>>>16,E=e[7],q+=(R=t[7])>>>16,B+=65535&E,M+=E>>>16,M+=(B+=(q+=(z+=65535&R)>>>16)>>>16)>>>16,e[7]=x=65535&B|M<<16,t[7]=W=65535&z|q<<16,K+=128,i-=128}return i}function U(e,t,n){var i,r=new Int32Array(8),s=new Int32Array(8),o=new Uint8Array(256),c=n;for(r[0]=1779033703,r[1]=3144134277,r[2]=1013904242,r[3]=2773480762,r[4]=1359893119,r[5]=2600822924,r[6]=528734635,r[7]=1541459225,s[0]=4089235720,s[1]=2227873595,s[2]=4271175723,s[3]=1595750129,s[4]=2917565137,s[5]=725511199,s[6]=4215389547,s[7]=327033209,Q(r,s,t,n),n%=128,i=0;i=0;--r)$(e,t,i=n[r/8|0]>>(7&r)&1),_(t,e),_(e,e),$(e,t,i)}function ne(e,t){var i=[n(),n(),n(),n()];C(i[0],u),C(i[1],A),C(i[2],c),x(i[3],u,A),te(e,i,t)}function ie(e,t,r){var s,o=new Uint8Array(64),c=[n(),n(),n(),n()];for(r||i(t,32),U(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,ne(c,o),ee(e,c),s=0;s<32;s++)t[s+32]=e[s];return 0}var re=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function se(e,t){var n,i,r,s;for(i=63;i>=32;--i){for(n=0,r=i-32,s=i-12;r>4)*re[r],n=t[r]>>8,t[r]&=255;for(r=0;r<32;r++)t[r]-=n*re[r];for(i=0;i<32;i++)t[i+1]+=t[i]>>8,e[i]=255&t[i]}function oe(e){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=e[t];for(t=0;t<64;t++)e[t]=0;se(e,n)}function ce(e,t,i,r){var s,o,c=new Uint8Array(64),a=new Uint8Array(64),l=new Uint8Array(64),d=new Float64Array(64),u=[n(),n(),n(),n()];U(c,r,32),c[0]&=248,c[31]&=127,c[31]|=64;var A=i+64;for(s=0;s>7&&j(e[0],o,e[0]),x(e[3],e[0],e[1]),0)}(A,r))return-1;for(s=0;s=0},t.sign.keyPair=function(){var e=new Uint8Array(32),t=new Uint8Array(64);return ie(e,t),{publicKey:e,secretKey:t}},t.sign.keyPair.fromSecretKey=function(e){if(fe(e),64!==e.length)throw new Error("bad secret key size");for(var t=new Uint8Array(32),n=0;ntObject.assign(e,{relativeTimeAdded:Te.humanTime(Te.msIntoTimeSpan(t-e.addedAt))})):e}var Oi={handleKeypress(e){Te.isInputElementActive()||!e.key||e.altKey||e.metaKey||e.shiftKey||"Escape"!=e.key&&"h"!=e.key||this.escape()},escape(){this.get().atRPi?(this.set({touchPressed:"escape"}),setTimeout(()=>{this.fire("escape"),this.set({touchPressed:void 0})},0)):this.fire("escape")}};function Pi(){this.set({homeButtonImgInline:ke}),this.store.entangle(this)}function Zi(e,t){var n,i,r=t.homeButtonImgInline&&Ni(e,t);return{c(){n=A("div"),r&&r.c(),n.id="top_icons",n.className="svelte-1ig0od5",b(n,"touch_pressed","escape"==t.touchPressed)},m(e,t){c(e,n,t),r&&r.m(n,null),i=!0},p(t,i){i.homeButtonImgInline?(r?r.p(t,i):(r=Ni(e,i))&&r.c(),r.i(n,null)):r&&r.o((function(){r.d(1),r=null})),t.touchPressed&&b(n,"touch_pressed","escape"==i.touchPressed)},i(e,t){i||this.m(e,t)},o(e){i&&(r?r.o(e):e(),i=!1)},d(e){e&&a(n),r&&r.d()}}}function Ni(e,t){var n,i,r,s;function l(t){e.escape()}var d=new He({root:e.root,store:e.store,data:{showPeerOnlyIfDisconnected:!0}});return{c(){n=A("div"),i=A("img"),r=h("\n\n "),d._fragment.c(),v(i,"click",l),i.src=t.homeButtonImgInline,i.alt="home",i.className="svelte-1ig0od5",n.className="escape svelte-1ig0od5",b(n,"touch_pressed","escape"==t.touchPressed),b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t),o(n,i),c(e,r,t),d._mount(e,t),s=!0},p(e,t){s&&!e.homeButtonImgInline||(i.src=t.homeButtonImgInline),e.touchPressed&&b(n,"touch_pressed","escape"==t.touchPressed),e.atRPi&&b(n,"nonRPi",!t.atRPi)},i(e,t){s||this.m(e,t)},o(e){s&&(d&&d._fragment.o(e),s=!1)},d(e){e&&a(n),p(i,"click",l),e&&a(r),d.destroy(e)}}}function Hi(e){B(this,e),this._state=n(this.store._init(["connected"]),e.data),this.store._add(this,["connected"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=function(e,t){var n,i;function r(t){e.handleKeypress(t)}window.addEventListener("keydown",r);var s=t.loaded&&t.$connected&&Zi(e,t);return{c(){s&&s.c(),n=f()},m(e,t){s&&s.m(e,t),c(e,n,t),i=!0},p(t,i){i.loaded&&i.$connected?(s?s.p(t,i):(s=Zi(e,i))&&s.c(),s.i(n.parentNode,n)):s&&s.o((function(){s.d(1),s=null}))},i(e,t){i||this.m(e,t)},o(e){i&&(s?s.o(e):e(),i=!1)},d(e){window.removeEventListener("keydown",r),s&&s.d(e),e&&a(n)}}}(this,this._state),this.root._oncreate.push(()=>{Pi.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Hi.prototype,O),n(Hi.prototype,Oi);var ki={action(e){this.store.signal("action",{action:e,scope:"player"})},pause(){this.action("pause")},volumeUp(){this.action("volume_up")},volumeDown(){this.action("volume_down")}};function ji(){}function xi(e,t){var n,i,r,s,l,d,u,m,f,g,y=t.$player.volume;function b(t){t.preventDefault(),t.stopPropagation(),e.pause()}function I(t){t.preventDefault(),t.stopPropagation(),e.volumeDown()}function V(t){t.preventDefault(),t.stopPropagation(),e.volumeUp()}return{c(){n=A("div"),i=A("div"),(r=A("a")).textContent="✖",s=h("\n "),l=A("div"),(d=A("a")).textContent="▼",u=h("\n "),m=h(y),f=h("\n "),(g=A("a")).textContent="▲",v(r,"click",b),r.href="#",r.className="svelte-g6kxch",i.className="pause svelte-g6kxch",v(d,"click",I),d.href="#",d.className="volume_down svelte-g6kxch",v(g,"click",V),g.href="#",g.className="volume_up svelte-g6kxch",l.className="volume svelte-g6kxch",n.id="play_controls",n.className="svelte-g6kxch"},m(e,t){c(e,n,t),o(n,i),o(i,r),o(n,s),o(n,l),o(l,d),o(l,u),o(l,m),o(l,f),o(l,g)},p(e,t){e.$player&&y!==(y=t.$player.volume)&&w(m,y)},d(e){e&&a(n),p(r,"click",b),p(d,"click",I),p(g,"click",V)}}}function Xi(e){var t,r,o,l,d;B(this,e),this._state=n(this.store._init(["player"]),e.data),this.store._add(this,["player"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,r=this._state,d=r.$player&&0==r.$player.paused&&r.$player.currentMedia&&r.$player.currentMedia.song&&xi(t,r),{c(){d&&d.c(),o=f()},m(e,t){d&&d.m(e,t),c(e,o,t),l=!0},p(e,n){n.$player&&0==n.$player.paused&&n.$player.currentMedia&&n.$player.currentMedia.song?d?d.p(e,n):((d=xi(t,n)).c(),d.m(o.parentNode,o)):d&&(d.d(1),d=null)},i(e,t){l||this.m(e,t)},o:s,d(e){d&&d.d(e),e&&a(o)}}),this.root._oncreate.push(()=>{ji.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Xi.prototype,O),n(Xi.prototype,ki);var Ti={handleKeypress(e){Te.isInputElementActive()||!e.key||e.altKey||e.metaKey||e.shiftKey||(9==e.keyCode&&(e.preventDefault(),this.store.switchToggle()),"t"==e.key&&this.store.switch(),"f"==e.key&&console.log("implement device filter / find (in nearby list or just in the middle of screen)!!"),"p"==e.key&&this.select("player"),"o"==e.key&&this.select("clock"),"d"==e.key&&this.select("device"))},select(e){this.fire("select",{view:e})}};function Si(){this.store.entangle(this),this.store.set({nearbyDevicesMenuVisible:!0})}function Li(e,t){var n,i,s,o=new H({root:e.root,store:e.store});o.on("escape",(function(t){e.select("home")}));var l=t.$connected&&Ji(e,t);return{c(){o._fragment.c(),n=h("\n\n "),l&&l.c(),i=f()},m(e,t){o._mount(e,t),c(e,n,t),l&&l.m(e,t),c(e,i,t),s=!0},p(t,n){n.$connected?(l?l.p(t,n):(l=Ji(e,n))&&l.c(),l.i(i.parentNode,i)):l&&l.o((function(){l.d(1),l=null}))},i(e,t){s||this.m(e,t)},o(e){s&&(e=r(e,2),o&&o._fragment.o(e),l?l.o(e):e(),s=!1)},d(e){o.destroy(e),e&&a(n),l&&l.d(e),e&&a(i)}}}function Ji(e,t){var n,i,r,s,o=[Gi,Yi],l=[];function d(e){return"home"==e.$view?0:1}return n=d(t),i=l[n]=o[n](e,t),{c(){i.c(),r=f()},m(e,t){l[n].m(e,t),c(e,r,t),s=!0},p(t,s){var c=n;(n=d(s))!==c&&(i.o((function(){l[c].d(1),l[c]=null})),(i=l[n])||(i=l[n]=o[n](e,s)).c(),i.m(r.parentNode,r))},i(e,t){s||this.m(e,t)},o(e){s&&(i?i.o(e):e(),s=!1)},d(e){l[n].d(e),e&&a(r)}}}function Yi(e,t){var n,i=new Hi({root:e.root,store:e.store});return i.on("escape",(function(t){e.select("home")})),{c(){i._fragment.c()},m(e,t){i._mount(e,t),n=!0},i(e,t){n||this.m(e,t)},o(e){n&&(i&&i._fragment.o(e),n=!1)},d(e){i.destroy(e)}}}function Gi(e,t){var n,i,s,l=new Xi({root:e.root,store:e.store}),d=new He({root:e.root,store:e.store}),m=new Re({root:e.root,store:e.store,slots:{default:u()}});return m.on("select",(function(t){e.select(t.view)})),{c(){n=A("div"),l._fragment.c(),i=h("\n "),d._fragment.c(),m._fragment.c(),n.className="selector svelte-12e3beu"},m(e,t){c(e,n,t),l._mount(m._slotted.default,null),o(m._slotted.default,i),d._mount(m._slotted.default,null),m._mount(n,null),s=!0},i(e,t){s||this.m(e,t)},o(e){s&&(e=r(e,3),l&&l._fragment.o(e),d&&d._fragment.o(e),m&&m._fragment.o(e),s=!1)},d(e){e&&a(n),l.destroy(),d.destroy(),m.destroy()}}}function Wi(e){B(this,e),this._state=n(this.store._init(["connected","view"]),e.data),this.store._add(this,["connected","view"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=function(e,t){var n,i;function r(t){e.handleKeypress(t)}window.addEventListener("keydown",r);var s=t.loaded&&Li(e,t);return{c(){s&&s.c(),n=f()},m(e,t){s&&s.m(e,t),c(e,n,t),i=!0},p(t,i){i.loaded?(s?s.p(t,i):(s=Li(e,i))&&s.c(),s.i(n.parentNode,n)):s&&s.o((function(){s.d(1),s=null}))},i(e,t){i||this.m(e,t)},o(e){i&&(s?s.o(e):e(),i=!1)},d(e){window.removeEventListener("keydown",r),s&&s.d(e),e&&a(n)}}}(this,this._state),this.root._oncreate.push(()=>{Si.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function Ki(e){var t,i,r,l,d;B(this,e),this._state=n({},e.data),this._intro=!!e.intro,this._fragment=(t=this._state,d=t.time||"",{c(){i=A("div"),r=h(d),i.id="time"},m(e,t){c(e,i,t),o(i,r),l=!0},p(e,t){e.time&&d!==(d=t.time||"")&&w(r,d)},i(e,t){l||this.m(e,t)},o:s,d(e){e&&a(i)}}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor)),this._intro=!0}function Fi(){this.store.entangle(this)}function Qi(e,t){var n,i,r,s,l;return{c(){n=A("div"),i=A("div"),r=A("div"),s=A("span"),l=h(t.holiday),s.className="svelte-17pmi5h",r.id="today",r.className="svelte-17pmi5h",i.id="calendar",i.className="svelte-17pmi5h",n.id="calendar_wrapper",n.className="svelte-17pmi5h",b(n,"main","home"==t.$view)},m(e,t){c(e,n,t),o(n,i),o(i,r),o(r,s),o(r,l)},p(e,t){e.holiday&&w(l,t.holiday),e.$view&&b(n,"main","home"==t.$view)},d(e){e&&a(n)}}}function Ui(e){var t,r,o,l;B(this,e),this._state=n(this.store._init(["connected","view"]),e.data),this.store._add(this,["connected","view"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(this,t=this._state,l=t.$connected&&t.holiday&&Qi(0,t),{c(){l&&l.c(),r=f()},m(e,t){l&&l.m(e,t),c(e,r,t),o=!0},p(e,t){t.$connected&&t.holiday?l?l.p(e,t):((l=Qi(0,t)).c(),l.m(r.parentNode,r)):l&&(l.d(1),l=null)},i(e,t){o||this.m(e,t)},o:s,d(e){l&&l.d(e),e&&a(r)}}),this.root._oncreate.push(()=>{Fi.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function _i(){this.store.entangle(this);const e=document.getElementById("clock");e&&e.offsetWidth<=300&&(document.getElementById("time").style.fontSize="4.5em",document.getElementById("date").style.fontSize="2.5em",document.getElementById("date").style.marginTop="5px")}function $i(e,t){var n,i,s,l,d,u,m,f,v,p=[nr,tr,er],g=[];function w(e){return e.$thisDeviceState.connected&&!e.$thisDeviceState.device.serverMode?0:e._demoTime?1:2}s=w(t),l=g[s]=p[s](e,t);var y=t.$thisDeviceState.connected&&!t.$thisDeviceState.device.serverMode&&ir(e,t),b=0==t.$thisDeviceState.connected&&rr(e,t),I=(!t.$guiNotifications||t.$guiNotifications&&0==t.$guiNotifications.length)&&sr(e);return{c(){n=A("div"),i=A("div"),l.c(),d=h("\n\n "),u=A("div"),y&&y.c(),m=h("\n\n "),b&&b.c(),f=h("\n\n "),I&&I.c(),i.id="time",i.className="svelte-9zktqa",u.id="date",u.className="svelte-9zktqa",n.id="clock",n.className="svelte-9zktqa"},m(e,t){c(e,n,t),o(n,i),g[s].m(i,null),o(n,d),o(n,u),y&&y.m(u,null),o(u,m),b&&b.m(u,null),o(n,f),I&&I.m(n,null),v=!0},p(t,r){var o=s;(s=w(r))===o?g[s].p(t,r):(l.o((function(){g[o].d(1),g[o]=null})),(l=g[s])||(l=g[s]=p[s](e,r)).c(),l.m(i,null)),r.$thisDeviceState.connected&&!r.$thisDeviceState.device.serverMode?y?y.p(t,r):((y=ir(e,r)).c(),y.m(u,m)):y&&(y.d(1),y=null),0==r.$thisDeviceState.connected?b?b.p(t,r):((b=rr(e,r)).c(),b.m(u,null)):b&&(b.d(1),b=null),!r.$guiNotifications||r.$guiNotifications&&0==r.$guiNotifications.length?(I||(I=sr(e)).c(),I.i(n,null)):I&&I.o((function(){I.d(1),I=null}))},i(e,t){v||this.m(e,t)},o(e){v&&(e=r(e,2),l?l.o(e):e(),I?I.o(e):e(),v=!1)},d(e){e&&a(n),g[s].d(),y&&y.d(),b&&b.d(),I&&I.d()}}}function er(e,t){var n,i={time:t.$localBrowserTime},r=new Ki({root:e.root,store:e.store,data:i});return{c(){r._fragment.c()},m(e,t){r._mount(e,t),n=!0},p(e,t){var n={};e.$localBrowserTime&&(n.time=t.$localBrowserTime),r._set(n)},i(e,t){n||this.m(e,t)},o(e){n&&(r&&r._fragment.o(e),n=!1)},d(e){r.destroy(e)}}}function tr(e,t){var n,i;return{c(){n=h(t._demoTime)},m(e,t){c(e,n,t),i=!0},p(e,t){e._demoTime&&w(n,t._demoTime)},i(e,t){i||this.m(e,t)},o:s,d(e){e&&a(n)}}}function nr(e,t){var n,i={time:t.timeDate.time},r=new Ki({root:e.root,store:e.store,data:i});return{c(){r._fragment.c()},m(e,t){r._mount(e,t),n=!0},p(e,t){var n={};e.timeDate&&(n.time=t.timeDate.time),r._set(n)},i(e,t){n||this.m(e,t)},o(e){n&&(r&&r._fragment.o(e),n=!1)},d(e){r.destroy(e)}}}function ir(e,t){var n,i,r,s,l=t.timeDate.dow||"",d=t.timeDate.date||"";return{c(){n=A("span"),i=h(l),r=h(" "),s=h(d),n.className="svelte-9zktqa"},m(e,t){c(e,n,t),o(n,i),c(e,r,t),c(e,s,t)},p(e,t){e.timeDate&&l!==(l=t.timeDate.dow||"")&&w(i,l),e.timeDate&&d!==(d=t.timeDate.date||"")&&w(s,d)},d(e){e&&(a(n),a(r),a(s))}}}function rr(e,t){var n,i,r,s,l,d,u,m,f,v=t.$thisDeviceState.device.deviceName;return{c(){(n=A("div")).textContent="disconnected",i=h("\n "),r=A("div"),s=h("("),(l=A("span")).textContent="dmt-proc",d=h(" on "),u=A("span"),m=h(v),f=h(" is down)"),n.className="disconnected svelte-9zktqa",l.className="svelte-9zktqa",u.className="svelte-9zktqa",r.className="disconnected_explain svelte-9zktqa"},m(e,t){c(e,n,t),c(e,i,t),c(e,r,t),o(r,s),o(r,l),o(r,d),o(r,u),o(u,m),o(r,f)},p(e,t){e.$thisDeviceState&&v!==(v=t.$thisDeviceState.device.deviceName)&&w(m,v)},d(e){e&&(a(n),a(i),a(r))}}}function sr(e,t){var n,i=new Ui({root:e.root,store:e.store});return{c(){i._fragment.c()},m(e,t){i._mount(e,t),n=!0},i(e,t){n||this.m(e,t)},o(e){n&&(i&&i._fragment.o(e),n=!1)},d(e){i.destroy(e)}}}function or(e){var t,r,s,o,l;B(this,e),this._state=n(this.store._init(["thisDeviceState","localBrowserTime","guiNotifications"]),e.data),this.store._add(this,["thisDeviceState","localBrowserTime","guiNotifications"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,r=this._state,l=r.loaded&&r.$thisDeviceState&&r.$thisDeviceState.time&&$i(t,r),{c(){l&&l.c(),s=f()},m(e,t){l&&l.m(e,t),c(e,s,t),o=!0},p(e,n){n.loaded&&n.$thisDeviceState&&n.$thisDeviceState.time?(l?l.p(e,n):(l=$i(t,n))&&l.c(),l.i(s.parentNode,s)):l&&l.o((function(){l.d(1),l=null}))},i(e,t){o||this.m(e,t)},o(e){o&&(l?l.o(e):e(),o=!1)},d(e){l&&l.d(e),e&&a(s)}}),this.root._oncreate.push(()=>{_i.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function cr(){this.store.entangle(this)}function ar(e,t){var n,i,s,l,d,u,m,f,v,p,g,y,I,V,E,R,z=t.$device.deviceName||"",q=t.$device.devPanel?"[DΞV]":"",B=t.$device.apMode?"(AP)":"",M=(t.$device.connectivityProblem||t.$device.localConnectivityProblem)&&lr(),C=(t.$device.localConnectivityProblem||t.$device.localConnectivityResumed)&&dr(e,t),D=(t.$device.connectivityProblem||t.$device.connectivityResumed)&&mr(e,t),O="false"!=t.viewDef.showIp&&vr(e,t),P=(t.$device.wifiAP||t.$device.apssid)&&gr(e,t),Z={timeDate:t.timeDate},N=new or({root:e.root,store:e.store,data:Z});return{c(){n=A("div"),i=A("div"),M&&M.c(),s=h("\n\n "),l=h(z),d=h(" "),u=A("span"),m=h(q),f=h(" "),v=A("span"),p=h(B),g=h("\n\n "),C&&C.c(),y=h("\n\n "),D&&D.c(),I=h("\n\n "),O&&O.c(),V=h("\n\n "),P&&P.c(),E=h("\n\n "),N._fragment.c(),u.className="dev svelte-1sb2bme",v.className="ap_mode svelte-1sb2bme",i.className="deviceName svelte-1sb2bme",b(i,"connectivity_resumed",t.$device.connectivityResumed),n.className="deviceInfo svelte-1sb2bme",b(n,"foreign",!t.homebase),b(n,"connectivity_problem",1==t.$device.connectivityProblem),b(n,"local_connectivity_problem",1==t.$device.localConnectivityProblem)},m(e,t){c(e,n,t),o(n,i),M&&M.m(i,null),o(i,s),o(i,l),o(i,d),o(i,u),o(u,m),o(i,f),o(i,v),o(v,p),o(n,g),C&&C.m(n,null),o(n,y),D&&D.m(n,null),o(n,I),O&&O.m(n,null),o(n,V),P&&P.m(n,null),c(e,E,t),N._mount(e,t),R=!0},p(t,r){r.$device.connectivityProblem||r.$device.localConnectivityProblem?M||((M=lr()).c(),M.m(i,s)):M&&(M.d(1),M=null),R&&!t.$device||z===(z=r.$device.deviceName||"")||w(l,z),R&&!t.$device||q===(q=r.$device.devPanel?"[DΞV]":"")||w(m,q),R&&!t.$device||B===(B=r.$device.apMode?"(AP)":"")||w(p,B),t.$device&&b(i,"connectivity_resumed",r.$device.connectivityResumed),r.$device.localConnectivityProblem||r.$device.localConnectivityResumed?C?C.p(t,r):((C=dr(e,r)).c(),C.m(n,y)):C&&(C.d(1),C=null),r.$device.connectivityProblem||r.$device.connectivityResumed?D?D.p(t,r):((D=mr(e,r)).c(),D.m(n,I)):D&&(D.d(1),D=null),"false"!=r.viewDef.showIp?(O?O.p(t,r):(O=vr(e,r))&&O.c(),O.i(n,V)):O&&O.o((function(){O.d(1),O=null})),r.$device.wifiAP||r.$device.apssid?P?P.p(t,r):((P=gr(e,r)).c(),P.m(n,null)):P&&(P.d(1),P=null),t.homebase&&b(n,"foreign",!r.homebase),t.$device&&(b(n,"connectivity_problem",1==r.$device.connectivityProblem),b(n,"local_connectivity_problem",1==r.$device.localConnectivityProblem));var o={};t.timeDate&&(o.timeDate=r.timeDate),N._set(o)},i(e,t){R||this.m(e,t)},o(e){R&&(e=r(e,2),O?O.o(e):e(),N&&N._fragment.o(e),R=!1)},d(e){e&&a(n),M&&M.d(),C&&C.d(),D&&D.d(),O&&O.d(),P&&P.d(),e&&a(E),N.destroy(e)}}}function lr(e,t){var n;return{c(){n=h("✖")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function dr(e,t){var n;function i(e){return e.$device.localConnectivityProblem?Ar:e.$device.localConnectivityResumed?ur:void 0}var r=i(t),s=r&&r(e,t);return{c(){n=A("div"),s&&s.c(),n.className="deviceConnectivityStatus svelte-1sb2bme",b(n,"local_connectivity_problem",t.$device.localConnectivityProblem),b(n,"local_connectivity_resumed",t.$device.localConnectivityResumed)},m(e,t){c(e,n,t),s&&s.m(n,null)},p(t,o){r!==(r=i(o))&&(s&&s.d(1),(s=r&&r(e,o))&&s.c(),s&&s.m(n,null)),t.$device&&(b(n,"local_connectivity_problem",o.$device.localConnectivityProblem),b(n,"local_connectivity_resumed",o.$device.localConnectivityResumed))},d(e){e&&a(n),s&&s.d()}}}function ur(e,t){var n;return{c(){n=h("Router connection resumed")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function Ar(e,t){var n;return{c(){n=h("Router unreachable")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function mr(e,t){var n;function i(e){return e.$device.connectivityProblem?fr:e.$device.connectivityResumed?hr:void 0}var r=i(t),s=r&&r(e,t);return{c(){n=A("div"),s&&s.c(),n.className="deviceConnectivityStatus svelte-1sb2bme",b(n,"connectivity_problem",t.$device.connectivityProblem),b(n,"connectivity_resumed",t.$device.connectivityResumed)},m(e,t){c(e,n,t),s&&s.m(n,null)},p(t,o){r!==(r=i(o))&&(s&&s.d(1),(s=r&&r(e,o))&&s.c(),s&&s.m(n,null)),t.$device&&(b(n,"connectivity_problem",o.$device.connectivityProblem),b(n,"connectivity_resumed",o.$device.connectivityResumed))},d(e){e&&a(n),s&&s.d()}}}function hr(e,t){var n;return{c(){n=h("Internet connection resumed")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function fr(e,t){var n;return{c(){n=h("Internet unreachable")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function vr(e,t){var n,i,r,s,l,d=t.$device.ip||"",u=t.$device.apMode&&t.$device.apInfo&&pr(e);return{c(){n=A("div"),i=h(d),r=h("\n\n "),u&&u.c(),s=f(),n.className="device_ip svelte-1sb2bme"},m(e,t){c(e,n,t),o(n,i),c(e,r,t),u&&u.m(e,t),c(e,s,t),l=!0},p(t,n){l&&!t.$device||d===(d=n.$device.ip||"")||w(i,d),n.$device.apMode&&n.$device.apInfo?(u||(u=pr(e)).c(),u.i(s.parentNode,s)):u&&u.o((function(){u.d(1),u=null}))},i(e,t){l||this.m(e,t)},o(e){l&&(u?u.o(e):e(),l=!1)},d(e){e&&(a(n),a(r)),u&&u.d(e),e&&a(s)}}}function pr(e,t){var n,i,r=new X({root:e.root,store:e.store});return{c(){n=A("div"),r._fragment.c(),n.className="ap_wifi_credentials svelte-1sb2bme"},m(e,t){c(e,n,t),r._mount(n,null),i=!0},i(e,t){i||this.m(e,t)},o(e){i&&(r&&r._fragment.o(e),i=!1)},d(e){e&&a(n),r.destroy()}}}function gr(e,t){var n,i,r=t.$device.wifiAP||t.$device.apssid;return{c(){n=A("div"),i=h(r),n.className="wifi_ap svelte-1sb2bme"},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$device&&r!==(r=t.$device.wifiAP||t.$device.apssid)&&w(i,r)},d(e){e&&a(n)}}}function wr(e){var t,r,s,o,l;B(this,e),this._state=n(this.store._init(["device"]),e.data),this.store._add(this,["device"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,r=this._state,l=r.$device&&r.viewDef&&r.viewDef.sidebar&&ar(t,r),{c(){l&&l.c(),s=f()},m(e,t){l&&l.m(e,t),c(e,s,t),o=!0},p(e,n){n.$device&&n.viewDef&&n.viewDef.sidebar?(l?l.p(e,n):(l=ar(t,n))&&l.c(),l.i(s.parentNode,s)):l&&l.o((function(){l.d(1),l=null}))},i(e,t){o||this.m(e,t)},o(e){o&&(l?l.o(e):e(),o=!1)},d(e){l&&l.d(e),e&&a(s)}}),this.root._oncreate.push(()=>{cr.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function yr(e){return br(e)}n(Wi.prototype,O),n(Wi.prototype,Ti),n(Ki.prototype,O),n(Ui.prototype,O),n(or.prototype,O),n(wr.prototype,O);const br=({color:e="black",bgColor:t="white"})=>`\n color: ${e};\n background-color: ${t};\n`;function Ir(e,t,n){const i=Object.create(e);return i.notification=t[n],i}function Vr(e,t){var n,i=t.$device&&Er(e,t);return{c(){n=A("div"),i&&i.c(),n.id="notifications",n.className="svelte-2nzizy",b(n,"move_down","home"==t.$view&&!t.$connected)},m(e,t){c(e,n,t),i&&i.m(n,null)},p(t,r){r.$device?i?i.p(t,r):((i=Er(e,r)).c(),i.m(n,null)):i&&(i.d(1),i=null),(t.$view||t.$connected)&&b(n,"move_down","home"==r.$view&&!r.$connected)},d(e){e&&a(n),i&&i.d()}}}function Er(e,t){for(var n,i=t.$guiNotifications.slice().reverse(),r=[],s=0;s`\n color: ${e};\n background-color: ${t};\n `;function Zr(e,t){var n,i,r,s,l,d,u,m,f,v,p,g,y,I,V=t.tempData.tempDirection&&t.tempData.tempDirection.symbol?t.tempData.tempDirection.symbol:"",E=t.tempData.temperature,R=t.tempData.tempUnit,z=t.tempData.humidity,q=t.tempData.sensorId&&Nr(e,t);return{c(){n=A("div"),q&&q.c(),i=h("\n\n "),r=A("div"),s=A("div"),l=A("span"),d=h(V),u=h(E),m=h("°"),f=h(R),p=h("\n "),g=A("div"),y=h(z),I=h("%"),l.className="direction svelte-w874ux",s.id="temp",s.style.cssText=v=Or(t.tempData),s.className="svelte-w874ux",g.id="humidity",g.className="svelte-w874ux",r.id="environment",r.className="svelte-w874ux",n.id="environment_wrapper",n.className="svelte-w874ux",b(n,"big",t.big)},m(e,t){c(e,n,t),q&&q.m(n,null),o(n,i),o(n,r),o(r,s),o(s,l),o(l,d),o(s,u),o(s,m),o(s,f),o(r,p),o(r,g),o(g,y),o(g,I)},p(t,r){r.tempData.sensorId?q?q.p(t,r):((q=Nr(e,r)).c(),q.m(n,i)):q&&(q.d(1),q=null),t.tempData&&V!==(V=r.tempData.tempDirection&&r.tempData.tempDirection.symbol?r.tempData.tempDirection.symbol:"")&&w(d,V),t.tempData&&E!==(E=r.tempData.temperature)&&w(u,E),t.tempData&&R!==(R=r.tempData.tempUnit)&&w(f,R),t.tempData&&v!==(v=Or(r.tempData))&&(s.style.cssText=v),t.tempData&&z!==(z=r.tempData.humidity)&&w(y,z),t.big&&b(n,"big",r.big)},d(e){e&&a(n),q&&q.d()}}}function Nr(e,t){var n,i,r=t.tempData.sensorId;return{c(){n=A("div"),i=h(r),n.className="title svelte-w874ux"},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.tempData&&r!==(r=t.tempData.sensorId)&&w(i,r)},d(e){e&&a(n)}}}function Hr(e){var t,i,r,o,l;B(this,e),this._state=n({},e.data),this._intro=!!e.intro,this._fragment=(t=this,i=this._state,l=i.tempData&&Zr(t,i),{c(){l&&l.c(),r=f()},m(e,t){l&&l.m(e,t),c(e,r,t),o=!0},p(e,n){n.tempData?l?l.p(e,n):((l=Zr(t,n)).c(),l.m(r.parentNode,r)):l&&(l.d(1),l=null)},i(e,t){o||this.m(e,t)},o:s,d(e){l&&l.d(e),e&&a(r)}}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor)),this._intro=!0}n(Hr.prototype,O);var kr={action(e){console.log(`sending: ${e}`);const[t,n,i]=e.split("-"),r={placeId:t,blindsId:n,blindsDirection:i,blindsAction:"move"};this.store.signal("action",{action:"blinds",scope:"iot",payload:r})},sleepComputer(e){this.store.signal("action",{action:"sleep",scope:"nearbyDevices",payload:e})},sleepingProgram(){this.store.signal("action",{action:"sleeping_program",scope:"iot",payload:"otroska"})}};function jr(){this.store.entangle(this)}function xr(e,t,n){const i=Object.create(e);return i.tempData=t[n],i}function Xr(e,t,n){const i=Object.create(e);return i.tempData=t[n],i}function Tr(e,t){var n,i,s,l,d=new Dr({root:e.root,store:e.store}),u=t.$connected&&t.environment&&(!t.$guiNotifications||t.$guiNotifications&&t.$guiNotifications.length<=5)&&Lr(e,t);return{c(){n=A("div"),i=A("div"),d._fragment.c(),s=h("\n\n "),u&&u.c(),i.className="notifications svelte-10kw9ls",n.className="sidebar svelte-10kw9ls"},m(e,t){c(e,n,t),o(n,i),d._mount(i,null),o(n,s),u&&u.m(n,null),l=!0},p(t,i){i.$connected&&i.environment&&(!i.$guiNotifications||i.$guiNotifications&&i.$guiNotifications.length<=5)?(u?u.p(t,i):(u=Lr(e,i))&&u.c(),u.i(n,null)):u&&u.o((function(){u.d(1),u=null}))},i(e,t){l||this.m(e,t)},o(e){l&&(e=r(e,2),d&&d._fragment.o(e),u?u.o(e):e(),l=!1)},d(e){e&&a(n),d.destroy(),u&&u.d()}}}function Sr(e,t){var n,i,s,l,d,u,m,v,p,g,w,y,I,V=e._slotted.sidebar_bottom,E=e._slotted.sidebar_menu,R="top-only"!=t.viewDef.sidebar&&"top-only-transparent"!=t.viewDef.sidebar&&Yr(),z=new wr({root:e.root,store:e.store}),q=t.$thisDeviceState&&t.$thisDeviceState.device&&["turbine","tablica","andreja","epanel","eclipse"].includes(t.$thisDeviceState.device.deviceName)&&Gr(e,t),B=new Dr({root:e.root,store:e.store}),M=t.$connected&&t.environment&&(!t.$guiNotifications||t.$guiNotifications&&0==t.$guiNotifications.length)&&_r(e,t);return{c(){R&&R.c(),n=h("\n\n "),i=A("div"),s=h("\n\n "),l=A("div"),d=A("div"),z._fragment.c(),u=h("\n\n "),p=h("\n\n \n "),q&&q.c(),g=h("\n\n "),w=A("div"),B._fragment.c(),y=h("\n\n "),M&&M.c(),i.className="sidebar_bottom svelte-10kw9ls",d.className="sidebar_top_info svelte-10kw9ls",b(d,"top_only_with_background",("top-only"==t.viewDef.sidebar||t.viewDef.protectVisibility)&&t.$connected),w.className="notifications svelte-10kw9ls",l.className="sidebar svelte-10kw9ls"},m(e,t){R&&R.m(e,t),c(e,n,t),c(e,i,t),V&&o(i,V),c(e,s,t),c(e,l,t),o(l,d),z._mount(d,null),o(l,u),E&&(o(l,m||(m=f())),o(l,E),o(l,v||(v=f()))),o(l,p),q&&q.m(l,null),o(l,g),o(l,w),B._mount(w,null),o(l,y),M&&M.m(l,null),I=!0},p(t,i){"top-only"!=i.viewDef.sidebar&&"top-only-transparent"!=i.viewDef.sidebar?R||((R=Yr()).c(),R.m(n.parentNode,n)):R&&(R.d(1),R=null),(t.viewDef||t.$connected)&&b(d,"top_only_with_background",("top-only"==i.viewDef.sidebar||i.viewDef.protectVisibility)&&i.$connected),i.$thisDeviceState&&i.$thisDeviceState.device&&["turbine","tablica","andreja","epanel","eclipse"].includes(i.$thisDeviceState.device.deviceName)?q?q.p(t,i):((q=Gr(e,i)).c(),q.m(l,g)):q&&(q.d(1),q=null),i.$connected&&i.environment&&(!i.$guiNotifications||i.$guiNotifications&&0==i.$guiNotifications.length)?(M?M.p(t,i):(M=_r(e,i))&&M.c(),M.i(l,null)):M&&M.o((function(){M.d(1),M=null}))},i(e,t){I||this.m(e,t)},o(e){I&&(e=r(e,3),z&&z._fragment.o(e),B&&B._fragment.o(e),M?M.o(e):e(),I=!1)},d(e){R&&R.d(e),e&&(a(n),a(i)),V&&function(e,t){for(;e.firstChild;)t.appendChild(e.firstChild)}(i,V),e&&(a(s),a(l)),z.destroy(),E&&(!function(e,t,n){for(;e.nextSibling&&e.nextSibling!==t;)n.appendChild(e.parentNode.removeChild(e.nextSibling))}(m,v,E),a(m),a(v)),q&&q.d(),B.destroy(),M&&M.d()}}}function Lr(e,t){for(var n,i,s=t.environment.slice(1),o=[],l=0;l{t&&(o[e].d(t),o[e]=null),n&&n()})}return{c(){n=A("div");for(var e=0;e0&&t.$nearbyDevices.find(({deviceName:e})=>["andreja","eclipse"].includes(e))&&Kr(e,t),l=t.$nearbyDevices&&t.$nearbyDevices.length>0&&t.$nearbyDevices.find(({deviceName:e})=>"otroska"==e)&&Ur(e);return{c(){s&&s.c(),n=h("\n\n "),o&&o.c(),i=h("\n\n "),l&&l.c(),r=f()},m(e,t){s&&s.m(e,t),c(e,n,t),o&&o.m(e,t),c(e,i,t),l&&l.m(e,t),c(e,r,t)},p(t,c){c.$thisDeviceState&&c.$thisDeviceState.device&&"zaboric"==c.$thisDeviceState.device.network?s||((s=Wr(e)).c(),s.m(n.parentNode,n)):s&&(s.d(1),s=null),c.$nearbyDevices&&c.$nearbyDevices.length>0&&c.$nearbyDevices.find(({deviceName:e})=>["andreja","eclipse"].includes(e))?o?o.p(t,c):((o=Kr(e,c)).c(),o.m(i.parentNode,i)):o&&(o.d(1),o=null),c.$nearbyDevices&&c.$nearbyDevices.length>0&&c.$nearbyDevices.find(({deviceName:e})=>"otroska"==e)?l||((l=Ur(e)).c(),l.m(r.parentNode,r)):l&&(l.d(1),l=null)},d(e){s&&s.d(e),e&&a(n),o&&o.d(e),e&&a(i),l&&l.d(e),e&&a(r)}}}function Wr(e,t){var n,i,r,s,l,d,u,m,f,g,w,y;function b(t){e.action("ap1-blinds2-up")}function I(t){e.action("ap1-blinds1-up")}function V(t){e.action("ap1-blinds2-down")}function E(t){e.action("ap1-blinds1-down")}return{c(){n=A("div"),(i=A("h2")).textContent="Rolete",r=h("\n "),(s=A("button")).textContent="Leva ↑",l=h("\n "),(d=A("button")).textContent="Desna ↑",u=h("\n "),m=A("br"),f=h("\n "),(g=A("button")).textContent="Leva ↓",w=h("\n "),(y=A("button")).textContent="Desna ↓",i.className="svelte-10kw9ls",v(s,"click",b),s.className="svelte-10kw9ls",v(d,"click",I),d.className="svelte-10kw9ls",v(g,"click",V),g.className="svelte-10kw9ls",v(y,"click",E),y.className="svelte-10kw9ls",n.className="blinds svelte-10kw9ls"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),o(n,l),o(n,d),o(n,u),o(n,m),o(n,f),o(n,g),o(n,w),o(n,y)},d(e){e&&a(n),p(s,"click",b),p(d,"click",I),p(g,"click",V),p(y,"click",E)}}}function Kr(e,t){var n,i,r,s,l=t.$nearbyDevices.find(({deviceName:e})=>"eclipse"==e)&&Fr(e),d=t.$nearbyDevices.find(({deviceName:e})=>"andreja"==e)&&Qr(e);return{c(){n=A("div"),(i=A("h2")).textContent="Ugasni računalnik",r=h("\n\n "),l&&l.c(),s=h("\n\n "),d&&d.c(),i.className="svelte-10kw9ls",n.className="family_computer svelte-10kw9ls"},m(e,t){c(e,n,t),o(n,i),o(n,r),l&&l.m(n,null),o(n,s),d&&d.m(n,null)},p(t,i){i.$nearbyDevices.find(({deviceName:e})=>"eclipse"==e)?l||((l=Fr(e)).c(),l.m(n,s)):l&&(l.d(1),l=null),i.$nearbyDevices.find(({deviceName:e})=>"andreja"==e)?d||((d=Qr(e)).c(),d.m(n,null)):d&&(d.d(1),d=null)},d(e){e&&a(n),l&&l.d(),d&&d.d()}}}function Fr(e,t){var n;function i(t){e.sleepComputer("eclipse")}return{c(){(n=A("button")).textContent="■ eclipse",v(n,"click",i),n.className="svelte-10kw9ls"},m(e,t){c(e,n,t)},d(e){e&&a(n),p(n,"click",i)}}}function Qr(e,t){var n;function i(t){e.sleepComputer("andreja")}return{c(){(n=A("button")).textContent="■ andreja",v(n,"click",i),n.className="svelte-10kw9ls"},m(e,t){c(e,n,t)},d(e){e&&a(n),p(n,"click",i)}}}function Ur(e,t){var n,i,r,s;function l(t){e.sleepingProgram()}return{c(){n=A("div"),(i=A("h2")).textContent="Otroška soba",r=h("\n "),(s=A("button")).textContent="😴 SPANJE",i.className="svelte-10kw9ls",v(s,"click",l),s.className="svelte-10kw9ls",n.className="family_computer svelte-10kw9ls"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s)},d(e){e&&a(n),p(s,"click",l)}}}function _r(e,t){for(var n,i,s=t.environment,o=[],l=0;l{t&&(o[e].d(t),o[e]=null),n&&n()})}return{c(){n=A("div");for(var e=0;e{jr.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(es.prototype,O),n(es.prototype,kr);var ts={action(e){this.store.signal("action",{action:e,scope:"light-lab"})}};function ns(){this.store.entangle(this)}function is(e,t){var n,i,r,s;function l(t){e.action("on")}function d(t){e.action("off")}return{c(){n=A("div"),(i=A("div")).textContent="ON",r=h("\n "),(s=A("div")).textContent="OFF",v(i,"click",l),i.className="action svelte-10pk42a",v(s,"click",d),s.className="action svelte-10pk42a",n.id="iot_actions_wrapper",n.className="svelte-10pk42a"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s)},d(e){e&&a(n),p(i,"click",l),p(s,"click",d)}}}function rs(e){var t,r,o,l,d;B(this,e),this._state=n({},e.data),this._intro=!!e.intro,this._fragment=(t=this,r=this._state,d=r.isDevUser&&is(t),{c(){d&&d.c(),o=f()},m(e,t){d&&d.m(e,t),c(e,o,t),l=!0},p(e,n){n.isDevUser?d||((d=is(t)).c(),d.m(o.parentNode,o)):d&&(d.d(1),d=null)},i(e,t){l||this.m(e,t)},o:s,d(e){d&&d.d(e),e&&a(o)}}),this.root._oncreate.push(()=>{ns.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function ss(){}function os(e){B(this,e),this._state=n({},e.data),this._intro=!!e.intro,this._fragment=(this._state,{c:t,m:t,p:t,i:t,o:s,d:t}),this.root._oncreate.push(()=>{ss.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(rs.prototype,O),n(rs.prototype,ts),n(os.prototype,O);var cs={select(e){this.set({deviceView:e,touchInfo:e}),setTimeout(()=>this.set({touchInfo:void 0}),50),setTimeout(()=>this.store.fire("select_device_view",{view:e}),0)}};function as(){this.set({deviceView:"device"}),this.store.entangle(this)}function ls(e,t){var n,i=(t.$device.devMachine||t.isRPi)&&ds(e,t);return{c(){i&&i.c(),n=f()},m(e,t){i&&i.m(e,t),c(e,n,t)},p(t,r){r.$device.devMachine||r.isRPi?i?i.p(t,r):((i=ds(e,r)).c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(e){i&&i.d(e),e&&a(n)}}}function ds(e,t){var n,i,r;function s(t){e.select("wifi_setup")}return{c(){(n=A("h3")).textContent="Wifi setup",i=h("\n\n "),(r=A("button")).textContent="Wifi setup or reboot",v(r,"click",s),r.className="svelte-1wgl8y8",b(r,"active","wifi_setup"==t.deviceView),b(r,"touch_pressed","wifi_setup"==t.touchInfo)},m(e,t){c(e,n,t),c(e,i,t),c(e,r,t)},p(e,t){e.deviceView&&b(r,"active","wifi_setup"==t.deviceView),e.touchInfo&&b(r,"touch_pressed","wifi_setup"==t.touchInfo)},d(e){e&&(a(n),a(i),a(r)),p(r,"click",s)}}}function us(e){B(this,e),this._state=n(this.store._init(["connected","device"]),e.data),this.store._add(this,["connected","device"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=function(e,t){var n,i,r,l,d,u,m,f,g,w,y,I,V,E,R,z,q,B,M,C;function D(t){e.select("device_log")}function O(t){e.select("frontend_log")}function P(t){e.select("device_state")}function Z(t){e.select("time_state")}function N(t){e.select("player_state")}function H(t){e.select("nearby_sensors_state")}var k=t.$connected&&t.loaded&&t.$device&&ls(e,t);return{c(){n=A("div"),(i=A("h3")).textContent="Logs",r=h("\n\n "),(l=A("button")).textContent="dmt-proc",d=h("\n\n \n\n "),(u=A("button")).textContent="Frontend",m=h("\n\n "),(f=A("h3")).textContent="Process state",g=h("\n\n "),(w=A("button")).textContent="Device",y=h("\n\n "),(I=A("button")).textContent="Time",V=h("\n\n "),(E=A("button")).textContent="Player",R=h("\n\n "),(z=A("h3")).textContent="Nearby sensors",q=h("\n\n "),(B=A("button")).textContent="Sensor data",M=h("\n\n "),k&&k.c(),v(l,"click",D),l.className="svelte-1wgl8y8",b(l,"active","device_log"==t.deviceView),b(l,"touch_pressed","device_log"==t.touchInfo),v(u,"click",O),u.className="svelte-1wgl8y8",b(u,"active","frontend_log"==t.deviceView),b(u,"touch_pressed","frontend_log"==t.touchInfo),v(w,"click",P),w.className="svelte-1wgl8y8",b(w,"active","device_state"==t.deviceView),b(w,"touch_pressed","device_state"==t.touchInfo),v(I,"click",Z),I.className="svelte-1wgl8y8",b(I,"active","time_state"==t.deviceView),b(I,"touch_pressed","time_state"==t.touchInfo),v(E,"click",N),E.className="svelte-1wgl8y8",b(E,"active","player_state"==t.deviceView),b(E,"touch_pressed","player_state"==t.touchInfo),v(B,"click",H),B.className="svelte-1wgl8y8",b(B,"active","nearby_sensors_state"==t.deviceView),b(B,"touch_pressed","nearby_sensors_state"==t.touchInfo),n.id="menu",n.className="svelte-1wgl8y8",b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,l),o(n,d),o(n,u),o(n,m),o(n,f),o(n,g),o(n,w),o(n,y),o(n,I),o(n,V),o(n,E),o(n,R),o(n,z),o(n,q),o(n,B),o(n,M),k&&k.m(n,null),C=!0},p(t,i){t.deviceView&&b(l,"active","device_log"==i.deviceView),t.touchInfo&&b(l,"touch_pressed","device_log"==i.touchInfo),t.deviceView&&b(u,"active","frontend_log"==i.deviceView),t.touchInfo&&b(u,"touch_pressed","frontend_log"==i.touchInfo),t.deviceView&&b(w,"active","device_state"==i.deviceView),t.touchInfo&&b(w,"touch_pressed","device_state"==i.touchInfo),t.deviceView&&b(I,"active","time_state"==i.deviceView),t.touchInfo&&b(I,"touch_pressed","time_state"==i.touchInfo),t.deviceView&&b(E,"active","player_state"==i.deviceView),t.touchInfo&&b(E,"touch_pressed","player_state"==i.touchInfo),t.deviceView&&b(B,"active","nearby_sensors_state"==i.deviceView),t.touchInfo&&b(B,"touch_pressed","nearby_sensors_state"==i.touchInfo),i.$connected&&i.loaded&&i.$device?k?k.p(t,i):((k=ls(e,i)).c(),k.m(n,null)):k&&(k.d(1),k=null),t.atRPi&&b(n,"nonRPi",!i.atRPi)},i(e,t){C||this.m(e,t)},o:s,d(e){e&&a(n),p(l,"click",D),p(u,"click",O),p(w,"click",P),p(I,"click",Z),p(E,"click",N),p(B,"click",H),k&&k.d()}}}(this,this._state),this.root._oncreate.push(()=>{as.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function As(e,t){var n,i=new us({root:e.root,store:e.store});return{c(){i._fragment.c()},m(e,t){i._mount(e,t),n=!0},i(e,t){n||this.m(e,t)},o(e){n&&(i&&i._fragment.o(e),n=!1)},d(e){i.destroy(e)}}}function ms(e,t){var n,i=new os({root:e.root,store:e.store});return{c(){i._fragment.c()},m(e,t){i._mount(e,t),n=!0},i(e,t){n||this.m(e,t)},o(e){n&&(i&&i._fragment.o(e),n=!1)},d(e){i.destroy(e)}}}function hs(e){B(this,e),this._state=n(this.store._init(["view"]),e.data),this.store._add(this,["view"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=function(e,t){var n,i,r,s,o=[ms,As],l=[];function d(e){return"home"==e.$view?0:"device"==e.$view?1:-1}return~(n=d(t))&&(i=l[n]=o[n](e,t)),{c(){i&&i.c(),r=f()},m(e,t){~n&&l[n].m(e,t),c(e,r,t),s=!0},p(t,s){var c=n;(n=d(s))!==c&&(i&&i.o((function(){l[c].d(1),l[c]=null})),~n?((i=l[n])||(i=l[n]=o[n](e,s)).c(),i.m(r.parentNode,r)):i=null)},i(e,t){s||this.m(e,t)},o(e){s&&(i?i.o(e):e(),s=!1)},d(e){~n&&l[n].d(e),e&&a(r)}}}(this,this._state),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(us.prototype,O),n(us.prototype,cs),n(hs.prototype,O);const fs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAYAAAB/HSuDAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdf5jdZXnv+/c9nTPNlZOdk2anYZHGlKY0V0pTvk9TiogREVEpBUVKRZCKohaRUqQ0ZXNyOGwuymYjUgSLCogogj+oUvyVIiJNEWOMmD5fNs1Os7NzctKYs5KmOXF2TjqdPV33+eN5VrJmzZpfa9ZkJpnP67rmmszM9/td3zWzcs3c93M/9w0iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiJjYVN9AyIiIjK5QghdQKXhU7OAeWM4tRc4VP93jPFgp+9NREREjh4lAERERKa5EAJAl7t3mRn190AXsJgUzC8C5pMC/X/v7j1mdhLQk49rDPh7gDkjPaa7Y2aHgL788SEz68tf3gdU87//ueHfe/NbLb/fl69Ty1+vuXvNzGoxxvF/I0RERGRClAAQERGZRkIIPcCC/DYPmOfuC8zsF919kZktAJZxJOif7gaAXe5+ANhlZj90961mth3Y6e77yrKsjXINERER6QAlAERERKZIXtlfCJwCLAd+jbSivwCY7+7zzGweMHvKbnISuHs/KRmwE3gZ+J67ry/LcvcU35qIiMhxTQkAERGRSZYD/bmk4P4kUsD/OmAFsKSxpD+XzE/RnU6ZGtAPROBZd/+ume0CdsYYB6b21kRERI4fM+4vDBERkaMlhDAHOBN4LRCApfntuFrR7yR3B9gPbDOzDcB3gOdijH0jnigiIiKjUgJARESkA/Iq/2zSKv9p7v7bZnYeqdled36TccgNA/tJTQafcfe/MrOtpMoA9Q0QEREZJyUAREREJiiEsAA4B7gQOJVU2t81pTd1fOoj9Qx4Dvg2sCHG2D+1tyQiInLsUAJARESkDSGE+cDJwNuBd5Ia9404Wk86ZgA4CGwGHgZeBHZpm4CIiMjIlAAQEREZhxDCPOB8UuB/DjB/au9ISImAZ939a2a2XlUBIiIirSkBICIiMooQQg9pb/95wNWkTv5zUJn/dFID9gEbgc8B64ADmiIgIiJyhBIAIiIiIwipu99bgStJHfxl+qu5+/Nm9i3gSzHG6lTfkIiIyHSgBICIiEiTvOK/jLTafz5p9b9nSm9qdAPuPmBmA6TV8Pr7xn/X9QHbms6vVzk0jijscvduM+tqOKb+vsvde8ym9Z8Sfe7+ipn9FfBZYK8qAkREZCab1r+1RUREjqYQQhdwpru/3czeD8yd6ntqoQbsrb+5e6+Z7Qb2A/+UP9/b8H4A2N3OvvgQQjewiBzwk5oeQkoUzAF+kdQDYV5+v5jUDHH2kItNve3Ao8BXYoxbpvpmREREpoISACIiMuPlQHcpcC1wESmQncr9/TWgnxS89wGvAFuBHwE7ScF+b37rI+11n5IbDSHMBmaREgLz8vtFwK8DpwABqADd7t4NdE9h1cAA6Xv5MPAl0vetNvIpIiIixw8lAEREZMbKK/4rSEH/NaRAdar0AjvdfbuZbQb+jtTdfsuxXrYeQlgMrHT35UBhZieRtlgsmKp7ylsD7gO+HmPcO1X3ISIicjQpASAiIjNO6uvHXOBy4HpSaXv3Ub6NGnAIeAH4AbAeqJLK9Q8c5Xs5aoqi6DGzRe6+2MxOAd4AnMWR5MvRrLzoJU0NuBXYeKwnWkREREajBICIiMwoIYQFpK7+N5FWoY8Kd6+Z2S5SKf9LwLeBDTHGvqN1D9NZCGEl8GbgNe5+CrDEzI5W48UBd3/azO4EXmmnX4KIiMixQAkAERGZMUII55BW/M8h7VU/Gg6SVvn/Gtjk7lvM7KjsPQ8hrAB+j/Rcv+Pu68qyHDXhEEJY7u4XmNks0p75tUcrKA4hzCElZk4B3gacS+otcDRsA74A3KnEjIiIHI+UABARkeNa3ud/OqnB38VMfof6GrDN3Teb2deAZ4B9QK0TQX9RFLNz6fx80ii+XjOLMcZDjceFEE4DvkpqaFi/r5tijH8+0vVDCEuAb5B6I0BqnPc8cE2MccdE73+s8jaNblLy4q2kZEBw9yVmNpnbNWruHnM1wDeVCBARkePJ0d7vKCIictQURbEQuAp4H0dG2E2mZ0gr7c+b2ZZOB48hhHnAjcB7yJ31zWwfcE8I4aNNe9jnk5Id9T31XcCrxvAwc4FTGz7uIZXmvxl4aEJPYBzyVIMB4ADwWAjhyXxfZ7r7ZWa2ksn5O6YrX/th4LGiKO4ty3LHJDyOiIjIUacEgIiIHFfyyvE8Upn/HaTxfpO1l/wgsAP4prt/GdhqZn1lWU5Wef/FwJ+Qxu7VLQB+y91nk5ra1T0PfILU6HAAeMrdHxjDY1SBr7j7+WY2m1Q5sJsUiE+ZnEzZGEJ4Cfisu68ws/cBq4CT6PzfNPOAPwTOL4riFjNbG2PsHe0kERGR6UxbAERE5LgSQjgFWANcQFrNngx9wDrgy8ALMcbtk/Q4g4QQPgR8nLyqn0fZPQt8PuYl86bje4DlwECMcfM4HmcxcI67LzCzGqlT/qbpVg4fQugm9Qo4H3hX/vdkTBE4CHzB3e8qy/Ko/KxFREQmgxIAIiJyXMjd/a9w92vNbCmdDwQHSCvh60jl4a8AvePZ1x9CmE8q3V9GSiKsH8+qcg7Mryetdv81EEkr8/0t4v8ZI4TQ7e7zSVUfN+QeCR1t8ujuA2a2lZRcera554KIiMixQAkAERE5puUmfytJY/0uovOl4DVgF/Al4AnSmLhxlfiHEGa5+7lm9l5SV/u5QD+wJsb40Q7f74yWkywXuPvqnAjoaCLI3Q+Y2WeAu2KMezt5bRERkcmmBICIiByTiqLAzOaSGuLdACyhg8Geu/eb2S7gQeDrwI52S+CLovigmd3h7vPMrF6+XzOzW2OMf9ape87B7zxSJ/v9ZtY7EysDch+IpaTpAauBhXQ2MdQPvAjcRqriGBjleBERkWlBTQBFRORYFYCbSav+nW7yt93MHgSeJAX+E7qYmb0emG92OO8+YGbPAE9N6MINQgjz3f0JMzsXOGhma0nl6js69RjHivzz2g58LISwDrgGuILOjYDsIW03WAbcGkJ4MsZ4sEPXFhERmTRKAIiIyDElN7Y7F7iLzjZ9q7l7r5k9BHyRVOo/4spu3n7Qnd/6RtgacCcpEJ8N/DPwUn7b16F7BwhmtirfyzzgnaQmhTs6+BjHnBhjDCGsBr5LShitoHN//ywG7nH3V+fHmJEVFyIicuzQFgARETlm5EZ/q4EP0dkmb72k0XefLMvypZEOLIqiy8wWkbrrL3f3XzSzxcC3YoyPd/CexiU3CPw2KSnSD6wH3ne0JhQcC0IIC4Gb3P0KM1vY4cs/T6q42KAkgIiITFdKAIiIyLTXsKf7duASOlfyPwBscve7zOy54Try55X+2aRtB5cBZwCLSHvL6xUIe2OMJ4z1gUMIuHuPmXXn66wgrdxHYAtpdN+4nkwI4TR3P83M9gMbgF3jbVh4vAshzCZVkNxO+p53rIKEtO3gA+7+AlAry7JDlxYREekMJQBERGRaCyH0uPvpZvYwadW9E2rAVtI4v4eG278dQpgFhNzB/13DPH4N2Ojuj5Rl+enRHjhvYViWA/W3AGeRkgl1fcBHgDtijP3jelYyZiGEBe5+o5ldRUrAdMp+4D7goxoVKCIi040SACIiMm3llf+LSPv9l3Xw0l8C7iFtEW+5zz+EcCpwHfBm0l7v5pXimrtvMbMH3X2tme0YrWdAURRLzOx64DzgZIavZHgGuHS4igTpjIZqgDtI1QCdcgj4BHC7foYiIjKdKAEgIiLTUlEUc4D3m9m9HbzsS6Rkwtfdvb+5RDuE0A2sAq4E3u3uXQ2d++sOAZuAR4EvkJr/jfigRVF0m9kV7n6vmc0b4dCBfO1bgOdUvj/5cpJpAWmU5AeB+R269IC7P2tm18cYt3XomiIiIhOiBICIiEw7uUz+dnd/v5l1IiDrA54mldW/MsxjVoBrgfeQVvxb2eHudwNfN7PdYw3Qc/PCz5NW/oezDvhGribYquD/6AohzHL3i81sDamRYqc8A9wc1RlQRESmASUARERkWgkhzAduI63GTnRcW83dd5nZGnd/yswONcdhIYS5pJnud5EaDTY/5gCwE3jE3T9tZvvGG5zn5/Qo8Nb6fZFGAO4AnnP3L5vZVqBfgf/Uyc0eK8C9wPl0ZtJEzd03560f6/TzFRGRqaQEgIiITBs5UL4LuJzUdX+ingHuBF5sFXjlx7vF3d89TKVBP/A48ElG6BcwmhxYriJ1iJ9vZluAb7t7LMtybzvXlMmTXxfvIPUG6MiWAHffbmbXoK0dIiIyhZQAEBGRKZf3YS9294+b2QVMfOV/v7t/IZdz97ZY9e8GziQlG05r8XgDpDF6d5MCtmG7uYcQut19kZktcPdeM9sNDKk0KIoCM5tNaibYrw7/01vDa+Q20qSGCY8LdPedZnY78Jh+/iIiMhWUABARkSmX998/QCqRn2jwX3X31Wb2VKvAPXd+fz9wI7Ckxfn7gMeAu2KMI67O55XidwOXkfaN7wS+7O7/qSzLtqoFZHoJISwBbiVVpczqwCUPADe4+xfKslQSQEREjqqfmeobEBGRmasoCiqVyiIz+wRwIRML/mvA94GrzeyZGOO/Nh8QQlhG2hJwHfDzTV/uAyLwXuBxd//pnj17hn2w3KhwDfB/AL9IGun388DPmdmj1WpVCYDjQLVa/WmlUllHSgwVwL+b4CVnAavMrLdSqfx9tVr9nxO9RxERkbGa6CqLiIhI28xssbvfB0yo7N/dB8zsaeDGGOPO5q/nPfhnAPfk980OAvcDD8QYd4/xYXvc/RQza1wV7id181fwfxyJMfYC94cQtpESSCuY2JaABcB9wPyiKO4vy7K3A7cpIiIyKlUAiIjIlCiKYoGZfdLMJrTy7+4HgU8Da8qy3NX89Tze7X1m9uc5YG/c/lYD/gG4CXgoxrh/rI97wgkn1MxsAfBb+VM/dfcnzOxO4KfVarXdpyTTVKVS+e/AD4BXuftSM5tIEqALON3MfvaEE074/p49e5Q0EhGRSaceACIictSFEOa7+71mdgUTW0nd6+73mdlHWnXoL4picR6/9mFaNPpz92fN7KYY4yst7rELWAgsdPdtZVm26icwi9QobjGwJca4cQLPRY4RIYQFwO3ufoWZTXRUYM3dbzWz+3OlgYiIyKRRAkBERI6qHDTfDVzFBEb9ufteM7uV1FF9UHBeFEWXmS0lje9bxdDmbQdJjf7ujjHuaLq/LmAecDNwLmkW/FPA7THGg+3erxxfiqKYB1xlZne4+6zBhSXjdhD4GHBHjLGvIzcoIiLSgrYAiIjIURNCmEPqqH4d8LMTuNR2M7shxvhYcxO1EEKXmV0CPAScztCV/32k5n13xhj/uelcSCX9nwMuBSqkOfCvBb5WrVZ/MoF7luPInj17+k488cQfAf/NzFYCPzeBy/WQRg3+z0ql8nfVanVIA0sREZFOUAJARESOihxcfwi4AfhfJ3CpncD1wDeq1Wqt8fqVSqUHeA/wEeCk5hPdfZeZ3ejuj7cawZbP/zLwagZXyUXgE9VqtWUFQH7srkql4tr7P3NUq9VapVLZ6u4/Bt5iZhOdEPCbgFcqlR9qioSIiEwGJQBERGTS5ZF5FwKPMLGy/x3AFWVZfqcx+AeoVCoLgI+6+81mNq/p1Brwd2b27hjjM3v27Pm3VtevVCpvAP53jgT//cDXgA81bxWoCyEsBH4PuAhYWqlU/rFarQ7pFyDHp2q1+m8nnnji/21mzwG/AiydwOV+FngDUKtUKhuUBBARkU5TAkBERCZVURSY2euAB0jl9O3aCXzYzJ6rVqve+IUQwhJ3/4iZ/b6Z9TSf6O5/b2YfBH7UfG6jXAHwTlKS4kVSJcGfDxf8F0Wx0MzuzkmHc4A3AVsqlcrLI1UChBAWVCqVSyqVyoWVSqWnWq1uH/XZy7RVrVapVqt7KpXKD0hjJn9hgpf8dWB3pVJ5pTnRJSIiMhET6bwsIiIyKjNbDjzBxFZGd5L25D8dYxwUEIUQTnP3L+aJAs37/fuAb5rZG4ANzee2sAX4DeBVpJXYT8UYh43kc9B/cT3pkCsURgzmQwir3P37wKPAbcCaoigWjXJfcgyIMW5z97e5+2dIVSftmk9qYHlVCKHtEZkiIiLN9EtFREQmTQhhsbvfZWYTCXB3kPoGbCzLsvn6AXjAzE5vcV4/KcB+DNgXYxz1gfIxu8Zxb/tJHdxnAS+a2Wp339R8n01CnlBQT8IfMrMh/Qjk2FSWZTWEsIYUxF80gUvNIjXM3BVCeGYMySsREZFRKQEgIiKTIoQw393vNrMLJnCZ/cD7gHXNAVBRFGcCDwKnNJ1TAzYAdwDPxhiH7KPOPQlWuHswsx3AizHGYYPwoijmmdlsd6+WZdl4H88Dl5G6uG8Y4xz3Z/PbcmATcJO77xvDeXKMiDFWQwjvAza7+4fNrN2+F4vc/WEz+wCwtoO3KCIiM9SEhtaKiIi0ksuWPwzcSfvJ5n3ufltZln/R4vpL3P0vW6z8DwBPAzfHGLcNc2+zSdMIrgWWALuB34kxvjzM8acAq0kjAe+IMb7Y5vNpvGbF3RcBW8uybDlZQI59eezl7cAfMrFFl5eBK+NYylhERERGoCaAIiLSUSGELuDt7n6bmf1vbV7mIHCHmX2iWq0O6tgfQljq7g+Y2VkMTmT35oqD/xhj/Mdh7m0ZcA9wDfDzDed/sVqt/qTp2DmVSuUCd3/EzM529182s5+ecMIJ64abIjBW1Wr14J49e/6fPXv2qPT/OFatVvsrlcoPScH/bwD/S5uX+nngVyuVyo+q1eo/dewGRURkxlETQBER6bTlpOC9rX3/7j4AfBr4WHNZfq4suAV4M4N/hx0E7jGz22OMe1tdN/cLeBC4nCOjCAeArwPbmo6d5+635fLrk4EuM6sB/2xmGs0mYxZjPECqAvgE6fXWji7gbHe/M4Qwt2M3JyIiM44qAEREpGPyvv/7zOy1bV5iwMweA/5jjPF/NH6hKIoeM7vG3W9oGvXXC/xnUsKgr8U9dVUqlTcC97r7a8ysvuo/QNqL/0fA3mq1SgiBSqWyEviomV1hZnMaLrXZ3f9TWZZ72nxuMkPlSoAfkXpFBNqsBDCzXwJmVyqVDdVq9V87eY8iIjIzKAEgIiIdEUKYBfyJmV1Jm/ud3f1F4PqyLHc3f+3EE098C3CXmf1cw6cPkoL/jwwX/APnAJ8DljcF/2uBa2KMP6lWqxRF0QW8zsweBV5Hw+9Id99tZh8uy3LC+/9lZqpWq32VSuUHwL8HWk2tGIufAQrg/6tWq9/v2M2JiMiMoSkAIiLSKWe6+wfNbFab528xs9Uxxp3NXwghzCeVUTduK+gHPuXu95dlOaS0Ogf055P2/B8+z91rZvasu19nZrvy9XuAi939duDkpkttA9YAzzTdE6StBLOAmrsfbHUfDcd2k0q5+9XLbWaKMR4MIdwBVNz9IjNr5++w2cDqEMIm4HmNBxQRkfFQBYCIiExYCGEJ8Lk8374de939j83s+Wq16k3XngX8GfBWBjf9+yvgxrIsB20VyOd0mdk5wOeBVzV8acDMvgV8oCzLn+Sy/1nA1cAnzOznG6/j7lvM7F1lWX6nWq3WGq4/D3iru99sZn8KXGJmO6rV6vYW99INrAKuAt4C/I8TTjhh9549e7z5WDn+VavVg5VK5Xu5R8apbV5mNnAa8P1KpVKtVqudu0ERETmuqQJAREQmJI/Vux44pc1L1IBPmdk3m1cz88r5qaTgv7Hp31bgthhjb4v7ATg39yJYUP98Xvl/Lt9rNR/b4+7vN7NbSfuzG202s+vcfVPT9SvA3e5+gZnNa7j2SuC5pmO73f0KM7sFWJqP6wE2kSoYZAaKMVZDCGtIDTNX0l5T5uWk6pbfRq8lEREZI00BEBGRiTofeD/tJZUHgK8A9zZ3/G+wCjip4eO9wGpgc6uD3X0l8KiZLW/43ICZrQV+P8a4I8ZY7w9wsZndDsxvusxW4LIY4/NlWQ5a+Xf3B4Er6sE/UDOzZ4GnWtzOOWZ2D7AUwMwOAT8uy1IB2wwXY9zp7u8C1rd5iXp/i9tzEk5ERGRUSgCIiEjb8kiyNUC7o8m2AXcCB4b5eheDS/gBHnP3Z1tVC4QQTjWz+xjcKwAze5G08r+vfqy7ryL1FagH8rg7wMvAtfl9s1PMrLmB2wbg6hjjthbHv5HByYUN7v50y2cqM05ZlluBG0lJrXZdBZyfE1oiIiIj0hYAERFpS947fwuwos1L9AKr4+gd8Zbl9zVS5/5by7Ic0vGf1LzvUVJJNQ3nROC9McYdDZ8/zcweZnDDv5qZrQd+N8Y4XEC2M79VgEPA48AtIxz/X4A+UqPA7aQJB0O2LciMthG4EngYWNzG+QuAe4FXgC0dvC8RETkOqQmgiIi0pVKpnA7cRsMK+jjUgE8DD1ar1Zad8/Nj/AxwF/DvgH8grcz/Y3PTs7wv/x7Sinuj/wu4Dvi7+jm5gd8DwKubjv0+cG2McUgjv7pqtdp7wgknbDGzAeCLwD0xxn8e4f53Ab3u/k9mdi/ww2q1+m/DHS+dEUJYUqlU3lepVH7zhBNOqO7Zs+enU31Pw6lWq1QqlZ2khNJbaK86c667zz/xxBOfrVar2l4iIiLDUgJARETGrSiKWWb2KXf/DTMb/YSh/tbdbzSz/SN1MK9UKkuAm0lbBC53941lWQ46Jgf09wKXMDh42g+8HVgfY/R87Fzgz4HfJU8UyI35vge8E9g2Wkf1E088cSdpJOAPY4z/MtKx1Wr1XyqVyg/M7GvAlhjjsMkO6Yw8keKLwHuA88zsDZVK5YVqtbpvau9seNVq9d8qlcqPgZ91999qZzygmf0K8K+VSkVJJhERGZa2AIiIyLiZ2QXA2W0G//3AnWVZ7hrDsfuA+4ESWN8c/AO4+4fM7J0M/p3WC9zeImFwKnARRxIFA3kywOoY4+6x3HzesTDmQD73KtCs9qNnHqnvQv31MN/dm5s8TjsxxloI4T4zO9ndLzGz8VYCzCJVyHyT1v0rRERE1ARQRETGJ4SwFLiBoWPzRuXuA6SAft0YTzlIqgB4vEXTv+4QwnvM7EYagn937wc+BjzUImHwFo405et3968A72KYiQJyTNoKfJ7UYHIzcLeZbZzaWxqzvcBNZrZp1CNbWwTcFUJYMOqRIiIyI7W1dCMiIjNTCAHgT0nd88edAABeIo3im3CzshDCKlKgd1LTl9aSRvgNabYXQvgPpKkD/cCT7r66LMuRa/7lmFMUBWZ2Cmlf/Y7R+0xOLyGEc939ETNb0sbpB4Fbgb8YYbSmiIjMUNoCICIi41EBVtNe8D8A3O3uWyd6E7np370MDf43ADe3Cv6zh9z9pVxevcHM1JH/OJQrP47lqo51ZnY7qbHleEdszgFudPcXSRMGREREDlMFgIiIjEmeM34r8H+2eYm1wIXNpfxt3Mc80mSAqxicyN5PWvl/diLXl6Mj/xz7Y4yHpvpepqMQQjdpWsUftHmJp4ArY4wHO3dXIiJyrFMFgIiIjCqX/q8ALm7zErtJK/Ytg/+iKLrMbD4pIBx2VT6E0OXul5vZFQz+HdZPWi19vvFY0mpoDTh4rJWBH6/yz/odpN4Oe4uiuLEsy3E1rQshnOzuV5vZbOC/uPtGM9sF7K9PWsg//6Wk12wXqaHkRtI0hmlfGh9jHAgh3AUsA85i/H2b3uzul4cQPj3RpJuIiBw/lAAQEZGx6AYuBU5p49wa8CTwwnBBuJmdTwoINwMfGOFap+fS6NkNnxtw96fM7KGG4G8ecIG7v93MDrn7LcCONu59WHkU4hJgX4xxfyevfTwzswpwNWkiA2Z2N6k543h80szObbjmAKnz/RrSiEZI21U+CZzbcN4hUtPHp9u6+aMsxrg9hHAz8GVgvP0A5pjZ9cB64JWO35yIiByTNAVARETGYgFprno7vzf2Afe1WnUNIXSFEM4hVQecCZxfFMXCVhcpimIJaQvCvKYv7TKzO/PjUBRFD/BHwANmdjFwhZld08Z9t5SnD6wCngC+Bnw1hLCyU9efAQ4Cu4C+/NZOcHpy08fdwErgTQ2fm83Q18oshvaNmO42kqpb2qlaWA5cm7cTiIiIKAEgIiKjc/wtYxYAACAASURBVPfLSSPGxqsGPBBj3DHM108m7eevB3RdDFOdllczz2Xw765DwK0xxpdjjIQQunLQv4aG5mkdngN/CfCN/DjLgTPdXQmAMcpbPG4ErgPe6+5r2rjMncB28vaO/O+17v7VhmN2kALnl0gJhw2k8ZCPt33zUyCX738G+BLDbKEZQRdwOXBB3hIhIiIznDLCIiIyoqIolpjZpW2evpVhyq3zfv4bzawxeN5oZtWm4wDOcvf3m1nz7621wNcbjltJ2krQOKXgoJl9crh7ICcU6tsHRpKnD6xm8Mpyn5k93+LYLmA+UHP3A2VZah92FmPcC3x6Apd4jLQyvpC0Mn4A2G1m+xoeYyCE8CQpATAP2Ofuu8uynPb7/1s4CNzn7meaWXP1w2jmuPu1ZlZPhIiIyAymBICIiAwrB7HnkBoAjtcAqUx+SIl3vu4lZnY5OQB3993ArS0C5SXAnWbWPA7tFeCWGOOBfP4CM7uDvLc8f+4gcJOZDWk+EEJYSGoQ93rgQAjh7hjj9lGe03JgccPHvcBtzeflHgR/RFrp7jKzu0MIf6ZmbJ0RY+wDBv1MQwizgPkhhAP1ZE7+fm8b7/VDCD2kn/VcUhJr71Q2kcyPvSmEcAvwOcY3hrMr90u4lpQcExGRGUwJABERGZa7zzaztzG46d5Y7QMeHyboXQi8l9SlH3cfMLMn3X1L40E5UfA+0sp+swdjjIePN7MPkpIVNHzuGeArzfcQQphP2nrwTtK+8BrQH0JYPUqH+C35eS0krTrfReuV7ItJlQJz8seXAQ8B1RbHSpOiKOaa2VJSB3wA3H2fmcVWDRdDCMuBW0iN/7aEEB6MMY5rskDDtQDOBu4GFrj7K2a2hlRJMNXWAt+kvWkc7wkhfK7x/4yIiMw8SgCIiMiwzGw5cF6bpz/AMJ333f2dZnb4uma2FXigLMu+puNONbM/JQXpdTXgKXd/DI5UE7j79U1bBHaS9pnvbXELt5KaGjaa6+7djNxsrQq8gdSw8GVg+zArw7/EkeC/RqpW0KSAEeSf49nAbcAZNPUpMjOAQyGEtcDqGOPOhi/fDVyQ/30OcEUI4RdijAfbvJ235NceZrYIODmEcGmMcaqTAL2k1+5SIIzz3IXADSGE63MFhYiIzEBKAIiIyEjezuDge6x2u/vasiyHfKEoih4ze2/j59z90bIstzUdN8/Mbm7x+HuBh82sN3+8wN1vMrMFDcfsJ60IV5sD9Fz6f37TNQ+4++fLsjw00pPK19rL6GPkvga8ldRx/nHg48fC7PkpNps0AnLVCMfMAd4BfJdUUVHX/PfMgLvPJu2db8ePSA0m65Uv80lbUaY0AZAbXW529weH62sxgi7gzaTtPFOdyBARkSmiBICIiLQUQljEkVXVMXP3mpk9ZWabhznkEhpKu0lzyr/Q9NhdpECv1eN/xt2fa0gunGpmjauhNeBT7v6lVgkId18KzM0rygOk7vB3mNm65mPzfcwBDo2lSWCDTcBrSUFXH+2NcDtuFEWBmc0j/dxPI31f9rn7C2a2OydWhp0AUZdfW/to6ivh7ncAs3OfiN2kEZCtKj9GlYPsp81sn7tfmqtgngdeaOd6nRZjrIUQHgPeRgrox9Pd/yTgapQAEBGZsZQAEBGR4ZxJWvUcl7wy/41WZcYhhLnAhRxZ1e8FHmnu/E/q2n4dTb0H3H27mT3S1ChwG2mrwdL88XrgnuG6vZvZy6R91EuBvyGt0O9o0SdgHvBu4DXAoyGE58baxC8f1+7q8zEh77v/APAT4DP1ZoytmNksUpn+xaTVdIABM/sEqTHdIdL365Ok19zpTZfYDWw2s/XAD9x9UABrZi+SAuLZQO8ESv+Bw00GnwOey80F+6dZA8dDwH2khpfjHc95UQjhpla9FERE5PinBICIiAwRQpgNvNHd5+WV8vGIpBXTVk5mcHC3HniyMbjKq+4fBE5pPNHdD5nZfaS9/Y2f35m3FFxKCiIfGSm4iTEeCiFcT/odeLDVyn5OVNxFSgDMInVd30BKWMx4+ftzC6mJ4gCp58F1I5xyAannQuPfHV2kRE99DGOtKIp1ZvbbHEn8zAF63L1KGrfYshIjVxAcyG+HFUXRbWZdE9l+MR33y+cqhedJ4xD/wzhPnw9cDvxFx29MRESmPSUARESklfnAeW0E/wBPjFAufzqpDLke0N/TYrV2BXAlQ5vAReCp5mvnaoAXGEeJ9kgrxHlCwE3A+zkyonBxU4PBma6W3yAlR+aNcvzJNP3N4e4vmtnH3f1w34X8s9xPGw0TQwjdpNXwpaRRjRXgVUBPCOEA8BN3P2hmu0mTHPaTxvuN2Pdhuoox9ocQ7iElVirjOLUL+O2iKL5QlqWqAEREZhj9MSMiIkO4+9lmNu7yf9KYvHUjfP1NpACkZmZPufv6xi/mcusPcKScv26AtCK/Ox/XTQryZgG7Jlry3fD4XcAVwIc4koDoA77h7sd1Sf945EB6DakhYj9p4sNIxz8GvCG/pja7+7fN7JtAtWk7x2EN/Rd6Gq5zoCzLQQmgPDLwD0gVIAvyObPyW+PfOX2k11E/0O/u/WbWVxRFL7DNzL4LPHYsNWuMMe4LIdwB3EPD92kMTgVWhBBeGGaKhYiIHKeUABARkSHM7O2Mr7kYpBXhZ4FdIxwzN7/fSRr717z6uoxUVt78+2kD8ExugNZFKil/wN0XmtlHgDXjvNeW3L2SA9s5DZ/eaGbHVGA42XJzxZ3AjWM8fjfwlrFeP4RQ7/b/JtL4OgDM7MshhM/Uq0BCCD3u/oek0XijBcCzGita6v/O708DLiIlsF6sH1MUxWwzO5sUMNdIz3k9Kek0XXoCPOXubwPOHUfFzmIzW0V6rtPleYiIyFGgBICIiAwSQljm7ivbKP/vBf52lD3TdwKz3f0BM9vU9LjdpNX/BU3n9JJWmOsB+BJS47hF+R4vpgMJgJxYuIqGgJO0anx708x5mXxnkV4rC5s+3wM8RSrhB+g2s19kfKvfrdRo0UPAzN5JqjxZkI85COx094dDCJ+aJkmhqpk94u6rGN/Izt9x94+gBICIyIyiBICIiAzi7qvMrDnwGovtpM7pw4oxPl8UxcbczK058Kivwjbfzwtm9lxDqfIiYGXDIZ3awz2PwavU/cD97j4txr/NMN3u3t2QhKqRXl+PxBj3NRzXB3wDWJmrNyAljA4C+xv7CwD1UYTzgAXu3pU/d5A0Fu+TMcZB4wVJoxzrCakuUgXLCjO7nVQN8HQnnuxE5KqYp0h9K8Joxzc4zcwW0dRUU0REjm9KAIiIyGFFUcwxs9fTNH5vjF6IMY7aJb8syyF76YuimEXaw93czGzAzB5tCvq6ONKcr2Zmf9V8vYZtAtcB3wY+NkJjQvK1esysq+HjTWb2yfo4wTzLfjFwtbufDjxhZo+PVAoeQoD0u7Y2jUrGJyx/f+vfq8l4butI2wteQ1qV/zHwCrC18aAc/D5DGhFY317SB/TlJpPNK/SzSavkcxp+1n3A7lavXXf/npldQGqKWf+baYCUdJo2zQNzQ8C1jC8B0AOcD3xqcu5KRESmIyUARETksLwieFYbp/YDX5zA455Car7X/HtpY4zxqabP7SIFiGeY2dO0DmCWAbeT9m6fRVqp3TbSPZRlWQ0h/CVwirvvMrMbY4w7Gu6xAjwBnJVXmoO7P0duTNgsTxN4K/CrQBlC+Mo0KRmfkBDCAtIYuV8grcz/Ywjh2RjjiN/f8cjB+Gfz22jHDpCqA8biwOiHHFGW5WdDCC+SAuVfJwXN/+DuL5Rl+eLIZx91XwP+gKFbaEbyphDCZ6fjqEMREZkcSgCIiMhh7n5Km93/NwM72nnMoigA3s7QwGUA+GSLU3YB15B6AWzmyH5w4PDq9PnA8vypHgY39RvJp4FoZnvdfXPT184Azmz4uGZmLQOnEEIPcAPwJ6QV5x3uvgXY1Or4Y4m7vz+XwNf/hqgBXwB+f+ruavLkxMb9+WdaG62SZDLk1/QppNf0c8CBFt37d5GqJM4ex6WXuftJpOaHIiIyAygBICIih5nZpbTf/X9cq6sNj3ky8O4WX3qBFiMFcwC2laZy8AbzScF3vTHc7hGObb72wVaPmR0iJSW687/vjTEON0d9CXAeR5qyDZssmG7yCv8yYKG795rZxsYxi2b2ywz++6GLtO/+uDaV1RvufibwNTObT3p9voumypMY4+4QwndyD4+x/n231MxWFkWxJU92EBGR45wSACIiAhwuWT+9jVN7gR+1EyA17NVvbjo4QNq737K8fhTnA4vrH7j7ky32grdjI/Axdz+DFIw9NsKxvcBudyc/9pOMsgVhqoUQutz9NNJEhZVAxcwO5I8fajj0CdLkhfmkBnLPkebQyyQxs9NJ32+AU/Oqfav/Gy+a2SGOjNsczWzg13PC4KhXNoiIyNGnBICIiNSdw9BAfCx2ufuGdh4wd27/XYaOL6sCDzU3lxutDDuEMI80SrB+/Qg8SgeCG3evB8PdwMAoje/2uvvVZvZFYLu7x3ozwWnsbDP7MoO3YiwAXs3gBMALpP3/ALXciHFaBo8hhFkcafzX+L7e0b+x2uUQaXrAAaAaY5w2Tf4YvL1mvpmdA6xvcdyL7r7VzE4bx7XPA+4gPXcRETnOKQEgIiL11d/fMrN2uv+/XJblrnYe18xW0rrq4OsxxkFbCkIIp7j7dWZ2IIRwb4xxb4vzejhS+t+f96q/0mK/9LjlEukaqeHhiPLjVYEvTfiBj57XMzj4HwCeAT7eeFBOfEyr7Qy5emVxw9sC4JdIvR/qb3PdfbaZzc0jBhs7+0Oq2tgP7HP3LSGEH7v7U2VZTocxea+Qel3Ufz6vbXVQw1SE8SQAlpOqC5QAEBGZAZQAEBERSOXepzP+/f8AX23nAXP5/3s5ErDX7QU+33RsN/BxMzubtFL798DjLS67D7gPuAz4HPB0faU+P97ppFFpL7n7prIsj5vRfB3w1+5+OWmFeQcp8H+SKR53l39u80kr9nNJoyKXk6YrnAwszZ/vrr+5e1erffB5esPh903q1z8pr6C/w8xuDiE8S3pNvTKF3fJ3ALcBt5CqdJaPcOy3ONJ8cixmAatIjRxFROQ4pwSAiIgALAJWtHHeAeClNh9zGa1HDm5kaNO+c/OxXSOVnOdg/ws0BTM5iDzP3R80s8WkrudvR93PG71kZr9Pav63ycx2j7LNYdKEEOaSEjUrgF8mvVYWu/siMxt1m8owAf549ZCC7StInfUfDyHcE2PcN+JZkyDG2B9C+Axpu82bzOxvhjs2j7DcxOCJFaN5HUoAiIjMCEoAiIgIpBF345kfDoC7bzCz4TrhDysH5O8A5jV96RCpouBAw7GLgBvJv7PMrJc08mw8VgB35OAfYJGZBZQAOCz3VWirl0O78utgHmmFfymptP100si7OcBsd+8xsy7oWGDfjsXu/sdmdlpRFDeY2eajnRyJMR4KITxtZs8wwjYUM9tL6g9wBmOv6AkhhPkjTLUQEZHjhBIAIiIC8KY2zqkB33H3dkrEF5JWHZt/D+0G1jaU7ePubzazMxqO2ccYx/o1uIa0olx3iKYkQghhNvBWUkC6FtjZid4BMlQeNXgGcCqpyeCppNGJQwLWKQz6BzGzHuAcM3vQ3a8m7cs/qvLrccRtCLla4LvAVRyZHDCaCqnK4qgmgERE5OhTAkBEZIbL5dZnjHpgE3ffB2xucx/9clo3/3u2qblfTy5Ln9PwuOvM7HAZdl5FngX0tVqVLYriLOCdTZ/eB7zcdI13Ane7+2zgDWZ2GSnJMarcbX5hbi63Hzig5EFSFEWXmc0hVZgE4ELSz77Ckb37x4ou4AwzeziE8F5g61RtkxjFelIvjbEmABYAS0MIG/S6FRE5vh1Lv3RFRGRynOHuc8a70mpmO9293VXQtzN0Vvkh4ItNn1tFGk8IgLsPAF9tCrpWAe8CvgN8pfHknNy4hqFbDV6IMfY2fDwPuJ7UAI/8mF2MIQGQGxT+EXBD7iz/WeBaxjh6MK+Gn0dKYnwzxlgdy3nTXR7JuAI4091/08zOZewB6XRWbyb5COk1024PjEkTY+wNITzPyM0CG80Bfo084nLSbkxERKacEgAiIjNYCAFSKX5zJ/6x2Eoq2R/vY3aTAt5B3P0lM9vecNwsUvB+mJlFGkqvi6KYTZphvgo4J4Swtml++2k0JBCyGvBXTZ87m8FNENe7+1iCf/JjryEnNNz99NyBftRAKlcevAe4lfQ7+VdCCGvyfvxjRv4+9JC+B8uBC939rNxzodKqI38nuDu5IWR9PGO9GmS80yxqwCF378/3OpuR/0bqIlXNPBpCuBrYcLQrAfL3vP5cW1W/fAv4IGP8Xrj7qXkMaO+oB4uIyDFLCQARkZltPhDaDNC+1Wb5/zmk/d6N+kkr+IfL/939DODMemVC7v7/DRrmlZvZmaS9y5CeywKgcW77ZaR+A41eYej+7QUcCZR6gScYW/n/IlLwXq9mqJnZOnLwH0JYQVot3gmsaxHYdwG/xZEtDis5hlZhczJnGSnR8mrgfOAkmLS9+7vcfX/eArIvv/+Ju/fm0YXzgNfkvhEnj/Ga/aQO+F/NCagKKanzmvx+zjDndZGSRp8DrgOeafdJtWkJcAPpNfjVEMJXmpIAm0l9Lpr/rw3nNNJzVQJAROQ4pgSAiMjMViF1Xx+vGm00DCuKogt4I0MrDg7QECDnwPLCfH8A5GBvQ8MxPfla9bLyAeBw+XwIYT5wSYvbWEfDlIEs5vO78vNaV5bliM8l3+Ml5P4JeTV6B/CXwEAIYRnwqLsHM9sFXJsrFBovU3P375rZOfn8rzFCh/epFkLocvduYKGZnU36Ga1w95Py6vFE1dx9wMxqpJ/HRmAb8GNS8F81s4OkJFAvcKh55TuE8GSe8PAAKaEy2gr4y+5+Q1mW9dfE5hDCOtLr6jxgtbuvqE8iaOFk4OMhhEuBTUdjD33+f3QBaYV/lrufTXrdHk5+5aTIK4wxAZDHKy6kjaoeERE5digBICIysy2lvQTAK7QRKJjZEndf1SKY2mZmGxs+nk9qytd43BZgU8PHC939nIbqhd4YY2Pw/A53n9e0El0FvhFjbO6kvgl4r7v/hpk93NSIcDhLgZtJZdj1Fe+vABtjjBRFcaWZrczP9SRS34N1pF4HAOTg9aEQwlozI8Y43vGGR0UIYQ5ppf8MM3sL8Gby84aJrfbnQHUnabV6q5n9gPTz2NH08xyTfM7GoiguNbMHgXNHOWWZmZ0eQniunkzI7/cBjxdFsdbMbgPezdC+FXUnkxIO7w0hbJnsJED+fp/AkdfeQne/CLi/4Zhe0vfxPMa2DaCL1KRRXQBFRI5jSgCIiMxg7r7SzGaNfuQQL9FemfriYUqzv9UU7J1LKm1utD7GeLj7f151PrXh65vr/wghzHH3324RmO4grSoPkqsKHs9vY3UtDRUKeYvCgzHGgdyb4CSOBF41YK+7twxop3HgXyGV9b+NtLd/KZ352+Eg8CLwPTPbRAr+d8UYmysz2laW5faiKFbnbSOLRzh0rrvfZWZX0jAZouE6+0MItwD7gT8h9QcYwt1PM7PVwAcY4/SICagB/500ErCeBHg9DQmAGONACOG/kRJOw21jaPabpCaWIiJynFICQERkBjOz17Vx2gDwt7SXADiboXvy+4Bn6x+EEGaTuvo3P+agCQFm9ns0rEK7+3cavryiKTlQd19T9/+2hBDOBC5uup+n3H17/vchYHu+725332pmXyzLclrv7c/bKpYBp5J+BufSXoPIw3JjvZ2kppEvAX9NCrQbKyEm8hDDyk0j3wY8SnpOwwnAgyGECxuTTA33dyCEcCtQAh9naHKKXIlyFan53lMduP1hxRgJIawFvuDu786Jrh+0OHQzabvLWBMAK0IIXdN0tKGIiHSAEgAiIjNUDvZWtnFq1d23j7ZHfhhvaPG56O6HV8BzN/JTmo7Zkt+ANGIuN3qrf+pQDvbq3dFPZmiQto1Ugt8JKxmayPib+vckB2iPkJoLzgU+H2Nsd2TipMuvhfOA3wFWufvJZtZ24J+rIXYDL5jZt0mB6JYY48FRTh3tPs8gNeabBbyKhgRQgxJ4LMa4L/8cImmrxucZZgxhfh2dDtwYQri9aZIEcPhn+k1SMH3vcNcCbgghvBRj3DnM1zsixrgvhLDGzH5IqjT5SovDtpESACNVQDSqkF6zY9kCIyIixyAlAEREZq5TGX5P80h2mNm28Z6Uy/JXNZXl10hB4v58TJe7n+nuixuPc/en87i3uvPyiLm6LaQyckjB0K8yeOW6j7Ry26nAZk7j9fMq947GA2KMO0II17l7l5lNu8Z+IYQFpJL+d5Eayi12924z62pjT38N2O/u281sU25m+AKpAqK/vsJfFMViMzuftL/+ucZqjJyEOAf4HXfvA75aluWGhq+fAfy1u8/JfRWG29c+AFwaQnh9jLEvxlgLITxDKs1/mOED9y53/7CZ/b/AR1odEGPsDyE8TqpeeITW/39OBy4PIXx0ssc5xhirIYRP53+3WrU/QOrVsaLF11qZS0qeKQEgInKcUgJARGTmOoPxz0uHtI++nQBhZYtxg73Ajxr2/88xszfS8PvJ3Q+Y2ffrAU4OFF/L4L3YW0h7tIezCWgekzYR/aSgtwsON1wbsro92QHgeOXqiEXufj6pKeFpNFQytBn4bwGedvcfmNlLMcZqqwPz1o6bSZ3ra6TReZ9qOGQpKahelO/j/BDCqxuqBk7Pwf9of7t0594WS0jbDmhIAtxFGtvYch9/7oexJoSwIcb4Qqtj8rW+CXwM+GOGltf3kPpDPEaHO+qHEE4Crgd+AtwfY+wf6TWdqxY2k5o2jsrdZ5tZZfQjRUTkWKUEgIjIDBRC6CI1/GonAfC9NgPpM1t8bq+7v9TwcQU4q/GAXG3QWHGwJB/TBYdX3/+OwfPL/6Xh3wPAHe5+OBgLISwClubkwubG55O/N3NJgdy+YZ7ry6QkSD1YOsA0np8eQpjv7iuA3wMuIpV5t9P8EVKiYzupmeJfkvb1946hv0EPaVtG/TX3qqavL2bwto2T3H1Bfjzc/Xkz2+HuS0cYyQdw0MzW53s8LMZ4qCiK+83sROBDDN/bYC5wbwjhAwwz1i/G2BdCuJtUTfAhhv4/Wkwa+3hrh5NA95J+fn1Af1EUnxjD9/2/jvXiZjbH3ZeGECatL4OIiEwtJQBERGamBaQu9ePm7kO66I+mKIpu4NdyOXzjl14py3JHw8fn07Ci6u4AW3ITubplpI70AOS58LEesMQYa0VRbDCzvaRg7mngufr+/LyK+oC7v5lUzXAZKYitr5CvBG7M594TQljXIgmwkTQu7TyOlIOPe1vEZAshLCR38Tezc8gl622O7dsHrAX+xt2fLctyXKvbuZHevaRRjPuBB5sO2UJKrJxKqrB40swO94Yoy/KVEMKVpBL7XyElMBaR/pY5QNqC8JO8FePZVoF3WZZ9IYR73H2ZmY00Hi+4++3ApbSo7MjP52AI4S53P9PMhvTScPeLzewJGqZTdMC8/H4WcKWZrWX0192WUb7eqNvM6r0VmkdliojIcUAJABGRmWkRLTqZj8EBMxt3Mzszmw8saRF4frv+j5wkeFPTeTXg+00jAn+Pwau3+2maXW5mL7j7hblcfDMpoKyXoV8PvDl/7aScCHgJIO+Bvwm4JF+qB9hAQ8d6gBhjbwhhDSkR8G3SSvG0CJjyc1zi7he5++/nUvixdoFvVCN9b3cAnwOeB3YCB9tsAEmM8YUQQn2EZHNfhN3AhcAp+XG3NAfxMcb1wPoQwixS8F6vYhgABsysbwzVKbvyuL7FDD8ZoCsnCFaHEO4c4We728zWkJIZSxq/kMddXlYUxe1lWXaqB8SXSds25uRGjctDCNtGWa3fSZ5GMcbHWOLuSgCIiBynlAAQEZmZmsutx2pTmyXNi9x9YVMCoI80C75u0Mp+Vms6Bnc/u6lB4MayLAeNbssJg1aVCmcAl3Pk919/4ypzTlSc33D8Yob5XRlj3ETqLTAthBC6SavjlwJvNbOT2rxUjRT0PwN8A3hxtO79udJgNrC3VQf9RsN9PQfuO/PbSI81m1TBciDGOFLfh3q/iO7Gx8zB8uaiKFbnFfoFw5zeRSrv/68hhP+fvbcP0qu+7jw/p6urq6tLq2hUKo1WURQN0bCKonB/JgxRCMZaG2OCCcbvGBsDxhgTBwghDKtlKIphGYVgQgjG2AZj82ZjTDAmGBMsM5gQRsEa8ruKrFEURdEoiqLRarWq3q6urp6uPvvH+d3u+9y+93lpCVtqnU9VV6uf+/rcex91n3O+53ueqkssJLXJRhG5F7i7srgfuExEvkalHeEIeDhNWPh1Ecmxe9NpmzHMIHNFl8dYKiJDmKrCcRzHmWN4AsBxHOcEI/W4r2J2VeGe5f+JxSJSHZu3FZODF9L7QCUYU9UDIlKVMLect4j8qJsTSO/7UlrH9x2mNcFwFq0GccNYQNwTKUgdxILUt2ymepZlfSlYOxW4Gjv/JfTu7TAJjKjqjhQUPw/sizGOhhCGQgjLsSrygRjjREo2nAJcgsnllyRFxUgI4Q3gzhjjrnRfTwNux/rlNwItffEpeXAZ8J503q9jLRW7q9cuhLAa2ACsUtXxEMJzpOkOyZwPYEhV14jI+7CRgUMhhC3A94CXVLVQMLwC3K2qt6RrWMeidO6RBil9nucTIYSHVPXdInIOrdd+GXBBlmV/MlvVRJk0heAhVX1cRMbL1zHLsgERWYTdp0OlZeOYumJFl4dZQrM/guM4jnOc4wkAx3GcE5O3zWKbceCvZ3m8AWYGFW8wLa0fBH6dylg1EXm1RnFQllOP0n1SYg027m4KVd2c53m5OjtRWjYhIi/RgxQ6Bf6nY74C48BNVNoHjhbpWBcC7wU+wOxN03IQRAAAIABJREFU/fZh8v5vi8hLZbl7OsZtwLWY6eHlWBC/BpOjr4QZngIBS+zcmloq3od5JYBdmzsoXWfg5rT/gnWqepqIXJr2U+YG4ILSMVenfV6S1u0HrhWRW2hN5JwGfAL4vIjcDozleT4eQviCiPxKWtbESuDOEMIVMcaDdSvEGIezLFuPBdlVFcvlIvI002Mqj4iUFKl7pj6NXfNDInJDCOHFtO64qu7vwfdhOQ1TEhzHcZzjH08AOI7jnHj0pQppr9sdZGZA1i0j6auo3o8Bf8N0cD2PSuCkqojIj6s7EpE3VPXCdP5v0qoiGEwu8RPAblUdz/O8WHa+qs4vv28R+U5l92+k/Q2JyCas971ty0NRdcYq4tdjwWZU1dtF5Kj2UYcQSKPwzsIq/mcybQzXNao6gQX+z4rII5iR3HCNnHw+8E4sebMEC+43por/iobdj2Nj6hCRSVX9exHZn/b1Zjp2+VzWJK+HonI+LiJNPfPV69kHrMMmTDyD/V3zK9QnQwawYH7qb59k5HcbpqBY3XBMsGvwyRDCFyp+FGW2Aveq6n2VUYUnAeeEEL7+VqpBkq/B4vT1MeBV7DM3ka5/L5zE0TUvdBzHcY4RPAHgOI5z4jEkIk3mZ+3Yw+wTADuwoPjcFIDvAt4oBZzzsSBsChE5TH2P/e0iMpaqyw+o6oH0+iCwQUQ+iwWht4nIH6dli4F3VAKz/ZjBX5l9qvqryQtgTydjvxDCAkx2fw1wVpLQb1DVh/M8P6rBXqrGrxORq0hV8Fkwjknsvy8iDzdVtAtijPtDCA+o6vtF5CDwNICIbMHm3Bfz5Q9ixn17gR8BT6XtJ0MI38Cu8zJgc9UQT0SuA25IHhGjwF8BT8YY6561L2PeFctVdYGIDKRjFhMJxrCWgHlYYqBIjoyp6iYReYCZ1fOdmFLjq7S2h5SZl9Z5g4onRUEax/elEMJ7MGVGedtLsLaKA3XbHg1UdauIrEifr3OxhM1OTAHwzz0m/E56C07RcRzHOQbwBIDjOM6Jx8mz3G4vNQFMqoD3Y0Z/kyKyr6bSuR+4QUR2YL3g36S1wricmWZsu5kO7MpE4EoR6Y8xlo3KTgE+gyUCBjEzvD8GUNVlIlKt8G5R1RYTuZSQOJi+asmyjJRIWIdV/NemYPSVFMxuP5rBf+q3PxVLMpxDs2ldO8axZMpXgRcb7lETD4vIM8B4YQYYY9wXQrgJC8gnMa+EEeBgtUKeWjh2pK8ZxBi3Zln2OREZTOc52ubctgJXAItS3/4A9kzuTfsCeCOEcCVW0S8UJ+MishNL6rTsO8ZICGEj8DDwf7S5DouBm7Is25Ln+XCb9e7CWiRWll47HQuq37IEAPaZOge7JoswJcrOlIQ5oKrjKWHSEVX912/heTqO4zg/QzwB4DiOc4KhqmtnIf+fBHY0OLgvxMzUPpGk3Fdi1eEpUtC1DRvBV8eMOeo0JADSvupc6S+nuXd5DVaBLrNVRNq6yFcJIczD5ODXY/L7fmC3iNwAPNXJAb/HYw1gkvsrgU8yO2O2w6r6ioh8Ncb4/GzOI13vGdcpqQfaKgi6Jc/zUbrwSiidS+N9S2aPk0yb9vVjSoB5wOoQwiQwrKr7ikRNjHEshLABmxKxrs0pnC0ivxdC+KMmdUiM8fUQwu3Ag0zfsyHg+hDCx96qNgAReRkzOTwPS3iUr+fh9HO3z1DVx8BxHMeZI3gCwHEc5wQjmZ71ygTwdw3LzgUuKsnrf4tKAqALWs4pKQm2dho/V5BlWVHxLDOlMBCRX6ssGwP+sZeRhiGEosf/AizpMamqr4nIrTHGl7vdT5fHWpiOdTFmLNeTq7+qjonI88BjIvJap3F5syWEcBJW2d4SY+y6uh1CWIF5GPQBj8QYt7ZZdz5W2d4ObKsLoJNKYh2m+liAtZQUwW6RACiu4SQWEL8SQrindG2GgbtU9WQRaRqROQhcqarPYGqEJp7G+vAL80NU9XQROQmT5b8VHMDaXvar6kHMA6DgEJZg6dYvoqkVwnEcxznO8QSA4zjOCUQIoTDJ63XTCUx6X8f7aTVd6+l3S6rYtsjzk3leV+P90vprmTnmrDyxoMXzQFWbnNTrzm8VcImqXisihaT8IPCoiNyiqkez6r8Ec/S/EWuL6HWc3z7g5TSX/k1gsmzsl4LpRdg9Oozd1+FeEiFpP33ARVgLwKCqHk4tAY922lcK1m8EPou9vw+EEN4bY5wxZi+NH/yaqq5L6pLrgC/W7Hadqn4X87fo9m2cASwIIdwYYxxLrQAvisjdwN1ttlsmIndnWfb+pFyYQRqfeCvWbnMSgIgsAS4IIfzJW6ECSFL/zUz7ZpSPMZySQt3ubkkIYaCN4aHjOI5znOIJAMdxnBOLJcyuh3wSM+6rY2Hl56b1aknmb0sqL08AW8ovpOD4U5ifwNMxxmGALMuKHvnyeYxic+SbDjtRkUjPIEnwz1PVm0XkVBEpgvHdwHrguaMs+T8bq/q/kx5H+qnqiIi8gAXkm6rnlWVZv4icD3wcS5T0YxXjCeBQCCEHvlAZAbgAC5K3xRh3Vw45H6u2zwNI8+c/DDxLG3l+oi9NeCh+bpcwWAasTNe+D3gf9QmA1ckToBf6sEr3AGm6QAqivw5cSiVpVOEMEflQCOHxNsF8BB7HfAUGsETJu0TkUY5S68SMA9rzXnc+hzo97xUGsGtzVEYXOo7jOMcOngBwHMc5sViagrVeiW3k+NUA7i972XGdMVlyNK9Kyu8FPpDMzP63EMKtMcYxEZkPvINStVxV91ZGn22ntbd7Jw1u7qm6vQy4FfhIqeo/DryEucFvPxpV3HSsoKrXAB+hh/nrKYg+pKqbReQ2rPI71pD0+CxmTteUWLgoff98Oq+lwLcxD4KREMIVFQ+BYeC/YBL3gfTzG3TXxz+eZdkGzJ9gSESeoMEgEGvjeApTRYxiYxnreB5LbixW1eqykTQWsswYlmC6J517mUNYguerWMJsBqo6DzO13EzDuLz0Pu8WkbOxRAoiciamCDiiBEAy3pyPPaeHgf0dnscR7PntitTOM/9IztFxHMc5NvEEgOM4zonFUmanANjTZtkOpsfBHaLS45yC3A9gFfqXaqrJB6gEJyLySkW6vjwdoz8FJx9S1XswNcDi1F9d3n4/pSBLVfPS8j2pb39GdTMFVmdjAeC60qJx4AvA3THGuskEPZPk+BdjgeTKTutXGBeRV4D707Vq50qPiHyU9qqCfuDnSj+vxALVobTdO7AgG5iqlH8BCyx/CWu3eLHT2MSCPM/3Ajd3Wi/GeDjLsvUi8k0sYbC7YdVdWCvKspJSo2DG84W1PdResxgjWZa9KiJPq+rv1OyvUC+cAlxFs7EleZ4PhxDuAh7D1BLzgfdiyZIjoV9Vf1dELseSWzfRkIhIFB4A3TKI/V/Rbp+O4zjOcYgnABzHcU4QUnC7mB6qzCV+3GbZlzEDvlXJFK8qAf8UVmntB14PIVweY5xKKCQH9s1MjyccAf6iso8LaK1Irkhj4wDWlar0BS0jC0XkdeB17L3fDLxYXjldmwXAZVjlv3ysXVj1/NGjIfkPIQxhLQsbsOvWi9x/FBtfeI+IbOzB3G875nDf8ntfVceAvSKyEbivtGhrupdrsev4RHWHMcaREMIX0z7H27RbHBF5nk8w3ddeSzr2PurHRs7mmCMhhA0ich6ph7+BT4QQnogxtgvoX8ZUDJdhKpUPhRDuPMJnqV9EPsh0omZHCOGmJv+FGONECKGr5Eyij+kRio7jOM4cwhMAjuM4Jw4DVNz2u0VVG/v6Y4xbQwgfB04Tke2UKu8hhEWYNLsIJpZhSoCqouDPMAl8v6q+nPZT7GMQeDuthniFgR3Auyv7mgT+rmxgFmPcEkL4KDA/xlhX1VwB3IklGsoB+RasL//VXo3y6siybAlwAzbWryendVWNwIMi8lSe5wdhSl1xEmYYiKoeFpHtNcHlrcA/AP+G6d/9e0Xkn7HEyPby+4sxHgohXKWqK0VkT4xxPzUk2fkxbRQXQjgdmKeqB0VkW/E+U5vDWizxM6yqm5IyAYAY474Qwt1Y8qppfN4C4MYQwlVNyZgY43AI4QHgPKylYBk2QvKlI3hbk6q6T0ROxT4XF2PPb7tJDLt72H/hAeA4juPMMTwB4DiOc+LQz0yn/G7YLyJtK6sxxl1UzP9SVf00Wh3+R7EKf5UXMVO5ZSLyLK2BzGJSgFtiJzCWjOpWV5bNMBBM51gn+R/ATPduV9Upoz9VnUimejfTMHquF1LV/2wsEF9D9/PYJ4E9qvo48IiI7C4FsH3AtcA1JMWCiIwD+0MIz2P98rtjjJMpmP0jWpMbYw0j9Yawaz4hIvFInODTM1BI3wcwKfpwL2qBEMJqTOI+iPlAbCrOO8uyAeBCEbk67fvWYqRglmV9InKZqt4uIgPJBO+epFpYgylXVqbzmhCRAyGE24AnS8mQp4H3YImhOvpU9dzU5/9Um7fxJjYa8w+AIVX9zRDCxiN4riZE5IdYW8yAqi5K974dvSgAPAHgOI4zR/EEgOM4zolDP7BqFtsdYKZRWjf0YYFWOZA4hPXtt5Aq1s807GcxM4ORHVhAs5KZUuV2IwunSIHup7CgfFHJI2BURL4BrI8xHrFbe5p5fyNW9e9FVn0QC0C/nOf5jPeTpifcXrPPpViLwVpMfXEQpqr13cjOb1bVT4vIMBYwf/0I5OoLscr0Gdg9fAnrme/lun4Ou3ao6hIReR+mAEFEFmKKitPT8l3YtUZEFgAfE5GlpX39FvB1LBkTaP07aH46t9dJyawY44EQwn1Ykqj23qX2k/UhhOebrlPyTHgQ88JYid2bxViyBuAcVZ0vIi9309YRY5zMsuxpEflN4EMi8iYdlBiq+i89jAHsB34uhND3VowsdBzHcX529Dpf2HEcxzl+GcDkx72yl86j3WagqpOY7LicPNjeZprADFJwtDR9FUwCf4sFswtUtVpNH6bD+LIsy5YCG1T1dkqmiKo6gqkBbuTIndoHQwgXAt8CPkOXwb+qjgIbsbF6N8aGcnkyQ2yXyF9RHDOEQAhhfghhUQhhQQihdrt0XS4SkcVYoFrMsp8tZ2FJltXYdb5IVT/U4z7+e7ovo2kyxFSgmzwMtmMS/sMi8o+l7UaxQH40rXdQVf8yvb6Tmc/0OLBbVQ9XXn8FeLZmukCZNVhvf+PfVaq6B/gGZuB4CtOfxdXAYyLyIJZI6Opvs9SucB02svBqOlT4RaT6vjoxW78Qx3Ec5xjGFQCO4zgnDsvpXnpe5iD1sv225HlOMvfbiVWkwdzie0JVl5cM/8CCvZ15nk+GEMZFZLKy/pvJOG4GKbhahfV1n1OpiO4TkVtijA/3eo41xzkZC8p+h+6v+YSqbgHuUdVn8zzvdM33qer1IvJezAdgGdPmhXsw9UCRxFiLBfMrMEXHn4UQvlj1NUhB4qvYs9KHJXB6vvcFqjqS7k/RWjFZvV9d8CfJE2K+qr6Q5/lUlT3P88MhhOux9ogxSsqPZC55A/CfkxrgTeDNZIj3HPY30HvT8zWKja/8Sp7nLYmBtP49IrKO5gRaf7oXb2AJiRnkeT4eQvgq1k4QMNXCZlUNKeGCqr4zHaPd1I3yue3DWgs6oqqjPSgAYLptw3Ecx5lDeALAcRznxKHXUXNg1fa9dePdsiwrqtADWPV0olqsVtW9aYTbyVhQ80JlH30iMoD1Uo/leV4NDvtE5Fcrrx0WkaLCv59WWftk6o2eQZZlfZgU/S7Mm6DMXuAKLPidFSEEVLVfRM4A7kqBXTcB1CRWvf28iDwB7Cxk16lSvyCd9yKs9WEHpnIYF5GvYIH+IkxuvxBrgdgP7CqpLW4Gzk3/XoUFn7sojfYDa8UIIawHcuBfqeq3RWR3zXudl1oQdreTiIvIJuA/YSMVJ0Tk+8CTXVyT8jmNA8+1WX4Ic9qvWzZSd7yU+HgqhPBcaiMYBw61eS/bsev8uzT87SQiq4HzQwjbmzwOYox7QgiPYAmAdwFfTP4ak9izPkBlKkRSwZyPKUJ+DHxploaUbVUxNSyqnovjOI5z/OMJAMdxnBOH2SQAxoF/rFsgIsswh/x1mInfBirV4jzPJ0IInwcex8zfRiv7OAULlheIyB2pj7oa3FR9Cw4x3aO9K1Vzfwf7nfYGlaAWpvr9z1PVB0RkUWnRJFY1vi7G+FrDNeiWxSJyMzbubX6X1dZRVX1WRO4BNpcDx3TOnwXWU2pTSOf8GnBHjPElrMrfqV2hKv/uV9VaeXdy/P+Tph2lqQz3iMgFqvp+rGe+lhSA39rh3H5mpMRWx9GBMcbRLMvuBc4XkabP0QD2efg67e/H06p6nYicGUKYB7yaJl+swxJQ1er/ClW9V0ROAi4CBrIs+9MmlUsTXZgEtqCq87pMYDmO4zjHEZ4AcBzHOXH4pV43SG74tSPgMLO1z2KBz2rgB1i/dAspqJ2xj1TZvBI4OwXLNwGbKVUqVbUvBT5l9tPav30H8DfYiLUXqZlGoKoXi8jt5eA/9XRvFZHLga0N77Ej6X0E4BZM3t3t79bdwJ0i8mSMsa4/eyl2fRZVXu8DzlLVnXQ/Su7OlGQ5Bbu+fy4iMxIlXbIM+AQwmAz5GhMAxzLpvvXBlEFiW/I83x1CeAb4921WWwpcFEL4QptJBweSyeS1mBLlFRG5EvMReKNGbbOk1AIzALxfRJ6myzaBEj15ACRlhHsAOI7jzDE8AeA4jnMCkHrfe1YApL7qbTX7G8CCwKJCOKiq86vrdWA5MGUIp6pLk6N6+fjzmdl3vbkcsCWn/to+6DQm8GYR+T1af+eNAy+LyOfSCMNZkfb/EaytoKv3r6r7ReRx4M4jmDIwLCI/6nblNBrvt2d5rCp7sSr3cuA7R2mfP1WSiuF24NPAyyGEKxqSMFXuVdV1InJ6m3Wuwkwca70AYozjIYRvYRMB3hVjfAVLBu1u2N92LOFVGGGehiULek0AeAuA4ziO41MAHMdxThAW0tsIuoIJVa1TACyjUh1MY+N6IVT3UcOamtd+0tXOLUlxL6ZSqCa8XxKRK48w+F+ItT30Evy/kaq9t3YR/O8DnqDV42ACa3O4ilJffJZlC0MIp4cQVmdZ9pYm91OF+jrgw6q66a081lvIYiwAX4CN+Fvd5XYHROTbtHfcPxk4r4Ob/zZMLbMqtXo0khIT5WTCIPCe7k73iBjCC0WO4zhzDv+P3XEc58RgKV0GqRUOlF3XS6yiNYk8Qe8VyVWUXMaT5HgxrcFO3Qi6GYqEMsmccBkWmH+kcp7jwLPANTHGAz2eLzCVWHhn2v9qukum7wG+LCJfBA4X8vAQwoCqnisi78ICu7/H3Or3Yq0Mfwg8ngz3JrH2hwPAeIyx8Am4FjP5G8CM9p4MIVzXy7jFXknGfD31lB9LJBXGy8C4qm4VkTe72S7GOJFl2TeAj4nIqQ2rDQDXqOqTNPgLpMkCdwEPYK0rnRJR36GklgHOy7Ls+sI0M4SwGnsGDqvqhjQisI5xenD2V9XVWMLJcRzHmSN4AsBxHOfEYLb9vDsbXq9Kg/dTCQizLJsvIhel4z4fY5zaV6qO/htag5FJZvYp/9vyD6p6KLmmNyIiS4EvA2czMzh/QVVvzPN8tsF/P/BZVb0xJRk6MZEM3u4CXqkxODwzOf+X1RljmNP/R2OM22kvD1+D+QQU2w8AFwP3Y4kEp4Y8z8ezLLs++Uvsrpty0WbbfSGEx5gebVnHChH5CG3MFLGk0AOq2k0iJWJKkOIzvExEVgC7UjvDjZhBYJ+I/A/gP9bsYwJLSKzo4ngApPGJjuM4zhzCEwCO4zgnBouYXQJgd8PrS2kNrndTkkWnKvndmE9An6q+vdJnPR+r9pfZpqqHSvvopyLNTuP/at3PQwh9qrpKVe8TkXdWFo9j0wGuPoLgfyVWZf2IiHS6lpNYsLUhGb4dbjCFO5OZrRmDmDqiqoao4xCWfCkbJQ5g0va2hBCWYa0cY9jIwF5bOI5r8jwfAbbULQshLMKmOfycqn5TRLZV7t9TwOXAKW0OcUmWZc/ked6kjJnAnskWA8IQwnxMFbC/dE/2Y2aLZ6ef+5ke5Qj2WSw+j+9oOiFVHetyOkXBL/SysuM4jnPs4x4AjuM4JwCqOlsFQO0IQOCXaU0i76W1L/oUVT0bC2YH0ui0JaXl8zBVQpndFR+BhcwMZLfTLD1fLiL3p3FqVZ4Drp+N7D+E0BdCOAP4KhYUdnMdNwIfV9UvxRibgn+wdoSWIF9VR4Gvq2ptcFpZd5eq3oZNA9ihqm+q6kM0BLaVbR9T1R8BPwR+J8syH/k2zVpsusR/EJHrVbVF8aKqB4A/oyEZlThZRM5p8gKIMRJjnChk/ABpLODvqep3gZtK/gDDwA9VtThen6r+ctrPmKo+oqrF5+9otn4s7byK4ziOczzhCgDHcZw5TgpAFtND72+JphGA/wOrXBbBzd5CypzGq51Ka8A/SilBkGaMl5dPYu0G5eBlURpdVz7ubipBV3p/J2Oy97OY2fP/EvC5WQb/g5iKYT3dSaf3Ag8D9wEH8zzvtP4WzJ3/bODtwD4R+Qtgk4iMpABwEdO/r0eAg8UUhDzPJ0MIG7HxiQPJJ2CEVuPAWpKT/QCmxviNNPP9uO3rP8rsw0ZDLgH+KV3XKfI8n8iy7GkR+SjNBoLzVPUSEXmG1rGV7TgFuC75Yfy+qv6A1DqSZdkzIvJh7LPVJyJTChoReQX4U1W9KJkU1iIi7RIWdVRVOo7jOM5xjicAHMdx5j4DwP86i+0mVLVJvjxKSgCo6oSI/Pc8z4vgcRB4W2l2OcBBSkFQGvdXnm8/AvxtZR77eCVgmcBM8qpBzElYL/VZIlKttj4D3DTL4H8h8LtYf3WnCQqTWM/9DcBr3cyVB6sCY4mPncCXKsdfkPZ3YTr+JCb5/k4I4SuFn0A6VrcBZpnPYy0IEbjvrTQNPA6JwKXYdd+WTA9byPN8WwjhOdpPEDgDk+q/2OVxD2NJt4XAoIhcik0LIM/zHSGEmzFlwiAwFejHGCdDCLcDj9HcNjKBJajqJms0sbyHdR3HcZzjAE8AOI7jzH0GsF7vXjlAs5x4N6l3WURGkiS6YIiZQdEhVS3L++fT2gIwykwn9P1YwBLSz3uArSUH/T6ag/8JTIZ/TRfj9lpI+12CKQrOpcMsdFUdFpFHsSB6R2VfpwEfwyrr3wa21BgBNvFO4A8qxz8JqwBvAV5rc/5LgTNVdamIbAZiTY//Buw+jMQYOyoGTiRSUmVrF6s+go2ZrPVcEJF+Vb0yhPByXRKhhj3AFlVdnZQvp4cQlsYYC+PLl9J59VeTcymB0+mce1UAzAsh9PfwzDqO4zjHOJ4AcBzHmfv0M7PfvhsOi0hT0LKNafOywyJSDt4XMB20k9b7SUUOv5xWqf4IlQRAjHEkhHAHllAYSmZsZWf7k1X1ARGpq/y/BFw1i+AfrP97A9ZO0IntInJXjPHhmn0tTee8Mr30SVV9HybX74Yl1CQfUsKhXbV+BfBN4PQURI4BT4cQri5X+ZPzfdfu904tuzBDwM80rSAia7Fn6tVOO4sxjmRZ9gMRuRC798uw5/DJtHwSS4r9tOjHkk47Oq3oOI7jHB94AsBxHGfu08/senkP0dxLvgN4CPgA8AKWEChYhVWWCyaxymaZX678fDjGWCdj34SZ6Q1grujjKUhfDtwvIi09/6o6KSJbMcO/ngKlNHVgHfAgnaXP46r6mohcR7PkelXZ5yBV41fQfQLgWWwM4nlYUmW3qn5XRDbS3uTvDFVdU/JOGMSUDEvxQG6K9BwtTX3zvwB8H9jYbftGYhz4DnABrZ4XU6jqYhF5TwhhU5cqgJewhNgg1oLw7hDC8z+jFo1+VfVRgI7jOHMITwA4juPMfQaYXQJgPw0JgCQJviZ9VfnfKz8XvetTqOqqirnfzobjFOdRZqmq3pPc/lsq/0nufnlVit+JZLb3GWzM36J266rqARG5V0S+0GF03hvpax0wKSKbsN7yrkiy7+vTVy9sEZHyaMBDwMO9XpMTgHnA7SJyGfYcXQa8C/Ny6IoYIyGETaq6KVXtZyAi/cCHsCkS1TaXGeR5vjeE8Brm/dCHtYIs5sjd/Scxj4Fe6BeRtp8Hx3Ec5/jCEwCO4zhzn366mAtfwyg9usKXJgBMkaryLQF+SRZf0GQ2WN3/POAuETmfmaNs9wI3qGpTRb7pfIeAm4Br6XyddorIeuD5JKFvJLUwXIkZwU1gyYDdNecwgAV57wL+b5KiolMlOp17PxbYTZZGDW7FZtT/tqr+fynx8HqH93Ui0ocpVYrnqJiIMIN0rRdiypD9wIHi/sQYD4cQvo0F7E2sxJ6DjgmAxHdL+1uuqqeVt82yjGSyuRZLZLwKDLcZNwn2DDZN9Wiijw4JMcdxHOf4whMAjuM4cxxVXVmptnfL/lmYwy2hYjgoIi3y/hDC/Oo6wL902nGWZQuAu4GLmBn87wMujTHWGuO1YSlwDxZstRuTOKGqz4vI+hhj1wmGGOMuOgd95wBPMB18XgK8nwZVBJjRn6qeLSKXAD8GvkDyZEiB6at00XN+IhNjHE4eE+NYcP/9GOMrDasvwlpDLsASTe+jVc3xNHAbFujX0QdcnWXZ03med+O7sAm7/yuxkX8fxbwGpvanqp8UkXuwBNbDwNUc5TGOquoKAMdxnDmGJwAcx3HmOCJSW9Vsh6qOi0jHoLyGFVRG5qlqNZBdwczfPx379VPl/SNUgn9VPSwi61W1pyp3lmUrgLswH4NqQqHMGPCoiNxWcmMHpkYFvhPzPdgKvNhJGVBFVedX7tE4zd4LBQtE5KZ07MKHoTFh4NQTY4xZll2VZPrt2jkWY8aWfVhFfhWtCYAJzKjvP7TZx0oROZWkxkhV/LWqepWIHADujzEWSph9mFdEkVA4NYSwvFieTC9/EwvySoAQAAAgAElEQVT+wTweBjjKCYB0XWYzQtRxHMc5RvEEgOM4zhxnNgqA5P7fa78waXxZi4xeRLZVVlvNzN8/7ardQ8Cngd+v2W5ERO4AHq1MGWhLCOF0rPJ/RodV9wDrseCuRZKfZdl84FtYEN6Xlm9Nsv83SuMKF2Oqhd8A/hp4qpxIEJGDwEEsmHsTmz/fkmiooqqjIrIdWKOqu1IA6cyCPM+76a3fgz0DHwH2p2s/hapOAt8VkYtoVgEsAj4cQtgcYxwXkSHgXhE5PS1fEUL4ePLXGAZ+gCkOhrAExNlYpR/sWZtKmiWDyUDDaMgjoI/pJIPjOI4zB2hX8XAcx3HmACLyv8xis3Gg56BSRBarasvoOlX9p8rPS5n5+6e2ap56r88DbqES/KvqOPAo8JUOvc/VfZ6mqvfTOfjfClwJPBljnKweQ0RWYQZ/xXvpA05hOiFQcDGmNLgoff9k5TivYz37lwIfB3Z1ej9JRn4bcImIfJz21WvnCIkxjqjqncDH0lfLFIY8z4tEV7sJD33AmbROC5go/fsC7PkpzC9fYToJNwS8Pcuysrrmn4t/pATf2nbvQVVhFgoBVe0PIfjfi47jOHMEVwA4juPMfar99t0wSY+u4yGEQeAXkzx5irICIAUSv5p6i4uXh2kNhKbWVdWzRORBZprzTYrIM5h5X1fnmY59IXBHCt6bGANexoLyg23M+Paq6khF8bAV69+eTMccAH6R9Ps2GSK2JDvSeLfn25z3MqwCPIwlB4pe/wPYyLijQgjhPGADlpC4uWEs4wlLnueHMSPHWmKMoyGER6hpUylQ1VNFZC2mKJhQ1e0iUiSiBoGPMj2FYDfwIvCptO2ZIrIM2B5jnAwhbMb8JYppDz/f7vxFZAL4x45vdCaLMX+KnhVBjuM4zrGHZ3Qdx3HmOKra8whAVR2jd8fwfiyIKTOCjaErmA8srLQk7KKm511VTxGRu6hx5lfVzViQOtJN9T8F/+cD92H9+k1MAn+KjRI80Cb4BziYfAlex3rw/y/MwO/V4pzS3PdvY0mBbSLykKp+o+MJT5/3ycCXMVf4bwEfyrLsrfrdfQVWgb4Yk5s7vfOqqjb6WaTk2EfTjxMi8leU1C+qempR5U/P3vdKm6/A2mcKtmIqgYK/b3di6ZlsO1mi4Zx73cRxHMc5hnEFgOM4zhxHRHpOAKRq4RFX/FT1kIiU5ekLaZVAj2KB7cHydlmWLcOC9ZaRgmmfW0TkOmpG6tWRqvAXAXdgrv9N7E/H/ONujPxijOMhhIeY9gcYTf3bVTYB702qh9E8z3uZrHBaUkHMA5ap6uUi8gpdtGck74SFyS/gcKexgqr6vWRSt5tWg7sTjhBCP/acDmEJrIPlRFO6tqdhCa0I7EttIqNZlj0J/AHNRZYzQggrY4w7QwgbVfV1EXlnWjY/3etC1VIkl84RkX5V/XXgGZhSHKxPJpL9QNeJJcdxHOfExRMAjuM4c5gQwjzaj7drYjxJzI+IZHBXTgD0V87nG8DDqVIOTDnr34H1S1c5nEbxberm+Kkt4TJsfGA7M7Nh4EbMoK/rPukU8LdNlKTAe7bJlDcwhcQpwJiI/Igu+v1TgPo7wPtFZB9wK1A1Y2xBRB5X1c0iciDG2Kv6Y86QfCfOYDphtAX4HK3GjJ8gPVNp+sQ1pKSJiHwfe+aaEm8LsNGPO2OMe0IIt2OJrgUiMkqpTz/GuD+EcD32bK4RkR+WdxRjPBBC+Gj6d8/VfcdxHOfEwxMAjuM4c5uFzJTld0NtkBlCWKCqtyZVwf3ApiLwSJXmqvx5mFaDv0lVnUgKg29gMv6pREMKXK8HPlRz+BEsKNvYzRvIsmwA+F3Mxb9d8H8grfNkuYIfQliK9VcvScfejlV6axME6dwXYaqGasW4D7sXQ9g1Ge4yYNslIh/EEgB7gW1djhlcjHkYrMbUCT+mQwIgva8t7dY5gTgNSwL0qeoKEfkOZjhZ8O9I4y5TT/9aplUTWzEzwPMa9j0I/FaWZU/leX4QeBX4YNrHRlVtSRbFGHekJEChRqCy/K0O/OenY7sHgOM4zhzAEwCO4zhzm8GK4V5XqOqe6mtJSn+LiPxeeukk4MOkcWR5nk+GEP5nZbMRWvv79yUJ+35VvTXP86rK4ALgWuoD9odV9St5nnes0GdZNigin8QSBu0UEIew6mpL8J9l2Vrg/uRDUPyu3AlsyLLsG8mFf4qkWrgRS1zsBm6m1TDuNOB2rI97G/AI8Gyn95GCu520GZPYwDDwpqqenFQYb3bawDFUFRF5FQvi14jIZqyNo8yfYVX8paq6UUSmxu/FGA+GEH6Yljf9nXWaiCxn2mTy5fRVSzKK7MmUs4HhtJ95nVYsMZ/ZJREdx3GcYxBPADiO48xtFjGLP95T0FhlaepHL37u5nfIGK2S5tEsyzYAg3meT0mqU4X8DEyqPr+yj0lsvvnteZ53I3+fl/bzadoH/2PAPar6ZDmpEEJYoqq3AKdWEicrMZf8VzBZfpmTMZ+BFWm912lNAFyNBYTFuqvoIgFwBBwCbhCRb2IJmu0d1ncSeZ6TZVnEklsLgQMi0tISkYL+d6vqvNRiUU1kPU/9s1ywGBsh2XViJoRAOh6Y38RsKv8tLQaO4zjOiYcnABzHceY2Q6UKdi/U9f8vSAZlBTtUdSowSsZpP1fZ5lCqXk6R53ndeLklWHBd59C/TVVvbEhKtFCqxP9Bh1VHVfVOEfnjGkXBwjRurY7+6pjDxE4s6LsQ6xX/i8ryn6TWh35VPcRRHN9XR2o/OIAZyDk9kuf5BDaqb4YSprR8R9P2Sba/iemkT5U+TPb/x92cT/IlOE1Ergf6VfVeLMnkOI7jOD3hCQDHcZy5zawUAKr6/9S8XJbzTwLfTYFQwWA6Xk+kxMFNmAKgeh5jInKLiLzZadxfMvz7HayFoB2TqvoU8Ccxxrrxg3tFZCuWjCgUBGOYtP8eWs3ggCnZ9y3AV7Fe6d2VVR5OBm9DIvI61idePndUdTBVdyfqpgmk69SPXfvxbsYfOj87VPVbInI2zdMA1oQQVsUYu1FnDKrqx0TkorS/fjwB4DiO48wCTwA4juPMbQZpDkAaSbLmKruBb2Iu5ttVtSphHwLKlfNJKuP9qiRfgU+p6qdqKutjIvL5GGNHqXwK/j8D3EIb2X+qwj8rItfHGGvbCfI8Hw4hXA38F+CXsev3I+CFpm0AYoyHaRifF2M8BHyx4dwHgLNF5FLsfm0NIdxXduJPhoSfwsznDgHfDCG8UjUkzLKsGAnXceyf0x3pmi7HfCsO5nk+tSyEcArm7zAObCzfMxEpJjisbNj1EOZ5MZUAyLKsPx1rIsbYoj4QkSHSZ1lE1s3y7Uykr15YQHsTTcdxHOc4whMAjuM4c5tFzO6P9xmO3zHGiRDCFzEX/oMiUpXOD2Fj0womgDolQZlVwPWV1oKCl4EHOp1oCqAvo3PwXwRl6+k8um8Y+EKnY3dL8jiYTPuuntcpInIP5g0AJhv/O1pd5y+k9f2dhfWoT/WQhxCKyQyLVfWrIYRHXSUwkxBCX7rmZ2PKjueqwXZp3RWYeeOpwH4RuZF0zUMIq4D7sHsxAXw9hLA+xlgkvfZgRowrG0w4+1X1N7MsW1i0xYjIO1V1g4gcyrJsvYhsTvdwQlUPlfYzGEJYPItRnYcxJU/TiMI6hpjdKFHHcRznGMQTAI7jOHObWSkASM7+VZJkvjaqVNWFInJS5eVGw7E0UvBuETm5ZvEO4HMxxjolwhRZlvWp6gdE5C46OJsnWf8VMcZeHfVnTVImnIoZvk0A20IIbwL7iwp9SqRMXSdV3SUi1f7yAVrv41JmtltciFWUB0RkCZaoaXv9Kue6CkvIbO9Sln68slZEvodVtgHegSVT6rgI+ET692rgy5gKA+xarUn/7sfu80KS6iXGOJxl2Y9E5AKa23BOSZ+Zwhfj4yJyKoCIHAauwEZGToQQ/hvJwV9V+0RkIfVeHe2YICWiHMdxnBMTTwA4juPMUVJl/F/NYtNRZhEkpEB+qlKY5Pb769ZNVdhPAmfWLB4G7owx7u7imOtU9Q46jzXbi1X+Zxi3hRDmY4FcAH4eG29YvId9IvITVX1DRLZVZfVp3OBpadTiGzWeAmcCX1PVZal6O4zNfb+Raen3dlW9XkQuBw4l5/43Kvt5XlXfAZyXzBCfZWYi5s20/0Xp313Pbc+ybAnmX3Aa8HoI4fJurv+xRghhSFUXlCdMVFHV+SKyoPRSdaJDed39IjJB+ntJVcvJo23Yc7UQ+8x8jUriLI0HHKEhAZDMJtdgIwernK2qy5n2i4jAfppbChzHcRynI54AcBzHmbv0M13l7BpVPYBJo3vlHTWvNe3nLBG5iZmB0TgmvX+y08FCCGtV9cs1qoMqw8D1WA//ZNq2D5Nu34QF6WWlxFSlXUQmgcn0/SshhFtTPz8hhCFMAn5x6rvfFUL4XIxxY+nY7wKK4B9gvqqeLyKLgN8AiDGOhxA2quorxfFqpPs7ReTDmGy8OJ9qL/dmVX2HiKwCXqozOGxCRAJwCpbAWQ0sZ6aR4TFLup/nAA+IyMIQwt0xxv9Yt24yYbwZ+HVV/ZGIPNy0XxF5GnsmM+AfRKT8XO5I13ulqu4WkUM1vgtb0tc7Gw7Rj00D+Hr6+a8wxUEfNnXjSuA6AFXdKiIbgBtFZC9tphA4juM4ThOeAHAcx5m79DOL/v/kVl9rFBZCWIRVyrdiMvapZaq6ptzrnILUGVXopEy4mVa/gII3gfs7Ba/JFG+DiHSqho5iCYVny8FZqgJfB5zbYfs+phMCFwM/xKrvYNe2SB6A9fBfiUnvC34AfJLSe03XqGU+fNHn3XQSpeWd1tmWvnple5p+sAoL/Bur4sco/cBvASvSz5cAtQmA5O/wn7rZaRph+Y30VV0G9nzXVe+n1gkh/GeaEwCo6pkhhHkxxhFVjUk1szQtWxdCWBJj3J/nOVmWPSoim4GDbvLoOI7jzAZPADiO48xR0li5Xsy+Cg5Q6d3PsqyoEj+IVYj3YgHXLphKDCyv7GeCSg96Cv5/X1XPqjFG2wfc0KnvP5nd3UV9+0CVh4A7qQTOqWLfy3jESSwwLp/bKCbnX4IF9MPA31S2ewV4O3COqv5SMjscVdXHejj2ERNCWIi1SRxsGH24W0TehSUxttJhesMxyARWPT8b+9vm/p/mwZMahIbE1QtYy8f8mmWIyHxMjfKCiOzBEjhL07Ll2HjMZwDS2M0tR3Cqk/Te3jPELEaJOo7jOMcmngBwHMeZo6QAezYGgONUgoQUMH8MMzrrA05W1TNJCQBVPUlEWoIEVR2tGScYgCtEpOoqPoYFbW/Smc9ihnedfoe9BtzSMLrvMPBE6s1fU7O8vN5OLND/ZoxxqtobYxwNIdyCqQKWYP3Zz5U3TlXaXcCXOpzrW0YIYSVwK3CSqsYQwvXV8YFptN0+ejANPJaIMU6GEJ5V1e2pZ3+qVz+EMA9rD9gXY9zUzf5SS8FqzBNhWFVfyvN8pFiexvWtBk4H/i0WsE+GEPYDPwZeKU0D2J/k+2c0HK4PaxV5AUu+bcYUA31Y0uDXQgjPxRh7Hd9XxzDmSdALPgbQcRxnDuEJAMdxnLnLILCs141UdT8ze/cHgY/Q2h9f/h2yiMqoMBF5PcY4tZ9U/b+RksleiY3AF8vrVwkh9AMfwPr5OwUkMRnr1QX/xUjDJ4GX0r76MVd3sKC/MHObwK7FSPpOCAHsekymue8z/AqKdVS1H5gQkbFqX3+qGhdB5q+k0XSFiuKQqm4Uke8CW5IUvbiGF6rqJSIyBjyGzZ9vbJlQ1fNE5CKgPznMfxtTJswpUlKjrjr+aeA2YDglP55ut590785K/hLLsGfgtRDCFTHG/VmWrRCR+7Dgfx6t/hGTmDLk+WSkOAYcSL4Da2lOyJ1WSP1DCH8JXIs9l32Y0mURlmA6UkZVdbxhLKHjOI5zAuAJAMdxnLlLH7P4fz5VUKsy4eVM91fXbbOU1gTAAVV9sLLaeVgAXw2C9qjqbXmed3KtPwUL5DoZG44AN+V53tibDZYEoHWMWlfjAdO4w5sBQgiPAFtr+rHXAR9Okv8R4PshhBeLKm5KZhSB6QKYUmwUrEjB+mdUtTAfHMMc4G9LvfpgkvcrQgjP1BgHkva7L53DAmzc3NEIJI8nBplOGHWliEl+FlPjKUXkVFVdA+xPlfyzqJf092FJgTWkz15KNv0Yuwe1bQDYfT0ZuzdvYsmmoXQup6ZWnhPtvjmO4zhvAZ4AcBzHmbsMMHNWfDfsVdVqJX5th232p8piP1Y9v11EXoGpiupK4AZmBmCjwH0i0ravOcm471LVkztUL0dV9VYRmTLiy7KsT0SuxVoYNmP+AbubAuZOpMD82vTjAkzVcKiy2j1YwqIPQFXPSXPdX0vLh4BL6ZzMWCAiFwPfAt5M89/LUvBBOvRnq+oLInINprx4lRPPPf4rWGvDBPB8Nxsko70tqro0mWI+nl5DVQ8mZUldMD+BBeqP0aqieR3zVWhKACwBQgjhNSx5tktEFqZzmYepDaY+I+kzNYQ9P6PA4dk+z47jOM6JhScAHMdx5i79WDWyV/5nnufVivav1axXDmZeF5EXsH73J2KM20vL+jBX9tOrO1DVl0XkoWpPepksy4aA9cA6EWlXwZ0AHkr7mzr/JOO+FQuWTsP6oG+lYnTYA9uBjao6ANyf53k1+C/OpdwuMUprkmACC8RP7eJ4B0nVXxHZDmwALscCwO8BL7YL/vI8HwUeb1qe+t0XAnVj7I570tjGR3tYH2BTlmUfFpGlqrpDRPYV11hEXk7tJf8Ou8eDWBAO8P+mhMu2cs9+jHFvlmU72oys7MPMIr+YFANvYs9qwXsxQ8uCflX9fRH5uKpuxj4fe3Ecx3GcDngCwHEcZ+4ym+r/GBUH+BQgth23F2M8FEK4Dhip6eNfAfwuFY8A4LCI3BFjbJT+p+kD56vqZzsE/5Cq+zWmf2OkYF9VJ7vYTyf2AZeLSH+MsSnougH4HJZ02AF8VVXLSZFRYIOqTgLvTMqJ8nlNpHVeU9V78zzfBy3eBS9jv8MPtvNN6JLPAFcDG7Msu72LVowTgjzPd1CjlkiB/dPA06kS39+NQZ+I/IA2YydVdW0yx5wA8sriNSGEhSmZgaoOiciNwPykFHgETwA4juM4XeAJAMdxnLnLkllsM6GqVZfwZUDdOMGWgKPkej5FMrq7CaswlxkH7qaD63+qmN5ZyKHbsENVr8nzfEYQFGM8EEK4AniPiPwL8PV2ioN03v2qulhEFqRzX4gFZgdK3w80bR9jfBWT2zctB5N0fzwdbynTao1JVd1fdp2vbDvJ0e0HfzfWrrBARL5Jm7n2xzopWbUIu1/z0vdqi8QYpsYYAQ6q6qEaxUtXpPs4I/gPIQym45dVFa+kNplqIgyYUqqcirWJbE7nVzwTi7A2nBfSumVn/sWqelIIgbewDWA2/5c4juM4xyCeAHAcx5m7zGZ01ziVMWHJ9K6ulaBtxTGEUFQ1z69ZvBl4vF0gHkKYp6rrRWRFh3M+DNwhIo3RT4zxeSr93ylY7E9fJ2MjCv8tNg1ggYjMV9V5IjKEBWKTWPvAZDrmcAhhLzb27XVV3Zmc+Sd6ldLHGH+W4/fux0zrnsXaG455UuW9j2mfi7VYm8oaLFlVuPPPY+bfOuOYumJMVYdFZDiEsIl0H4ERVZ1olxRIx18EXId5KzwAvBZjJIRwkqreJiIrgdeSqmIYmwawE5v80MQZWALgENZOc0p6fR4Qsix7Ic9zVPVA8s04FUBEfiG9z6MxKrCOTgk4x3Ec5zjBEwCO4zhzl1+axTbjItLS056C/zqjuU5mckPJfG5p5fUx4LYY4+6mDVNw/sk0vq4dk8AXYoxd9XiXKsTFDPd3YMFjbYBTYzhY11bxybTuAazq/6MQwuuquqOpin80SFXmJcB8VZ3AHOoPlavAyQBxAfb7/nBdwiXG+HII4d2qui/P87cqgDwqpPezCEvWvF1VzxWRU5jZXtIVpft7Tvo+ArwmIn+W+vBjQzKnH7hGVf/P1FJyPpY8OgBcKCKfSOutFZG/Bp5W1cPAGyLSLgHwjizL/hRLAOxmOgHQD7wt3cvDIjKOjbAsPCROprsJB+MVE0nHcRznBMMTAI7jOE6ZojpaZiEz1QTDtLqc13E6NvqvynOq2iiPT5yEGZt1MjF8WVXv77AOMCWzvxj4bSxgOtqy5sXAh4ALseAthhAeAzbGGKvXtC3pXNdgSoNYDtxT9XktcD3mrzA/BXUHgT8PITxatGOkCQKXY7/vXw8h3FX0kZeJMe7p7a3+9AkhLAI+rarvFpE1wOK3YJ79PKxP/2ysAv9iCOHLwPZKIqAP6K8cv0hCHFTVCRHpV9VDIrIXpowgf4JV6Zv+/lqWWgF2A7sqnhUnYZ4Sh9PrPwQuA5ao6kCX1+Iw9tl1HMdxTlA8AeA4jjNHUdXVswiQZpgAAkM1AcYurPpeSwhhPnAzMyuz24ANeZ43Jg9CCAuxMXrL2p2oqm4RkevzPG/sh8+ybB5WLf4ccAGza4volX5gZZKAf0hVd4YQ7gE2Ajs7tQdkWXatqm5IrQcAoyGEmzGH+HFs+sITWEBYZR3wW8nBHlW9pTTP/izgh+k8fuaEEL4GvBO4Mcb4VMM6g1hLxlXARVhrxk/j9Iq2kJOBzwKPhxAewJIxEzHG8RDCfdhnYKmqfq3kP/GkiIxgxpkvYM88McbJpCo4SEPySVWXi8jqGOPOEMLfYJ/H4jlYhX0mdud5DrAxKTcuwNpbOk61SOfQ+9UwdYPjOI4zB/AEgOM4jjNFqixWA4k6D4B9tEkAYIFo3Yi7J4CtTRslif4FWLDajvE0QaDdvk7Cxv2dq6p1JoY/FVIi4F7M9O/BEMLjMcbG1gAReR+tiYohTLXwJGb+10f75MgpWCX7gIjswIJYsED0Z+k1UOU8TDVxHTAjAZBl2VLMQPJcpt/Dz4IBrNJ+BnBvCOHhGON4jHE/cEt15ZSkeaZhX9sxeX9tAiD5TqwKITwPbE+qgeJZGMKSAK+VjrWVNp+no0hdC5DjOI5zHOIJAMdxnDlKh17jpm1GVXWqop4C8gU1q+6gIQEQQliAjZWr9tVvAT7fYWTaKixon99mnTHgj4DnGo6/hOnRdouBiSTDPoQF0PtUdY+I/BMmh56Sv6tqX3HdVPWXRGSZqi5LfecL0v5m02/ejyVE7gOuDCHcqarP53le1xqwA0uA9KfzGBaRTUxLt8eArwMfYea9OQg8LSKHU5X6auCvUmLnaUxafqxwq6r+tog8UH4x3b9PYImBpXTX296Iqo4Ch0SkkL+PYImQYtzhP2DXdJBp34z5wPL0fT4WsK8E7lXV94YQ1rdLPrVhHxawN302+0Tk14BBVd2elARl34lfBx6axXGPlFl5LDiO4zjHHp4AcBzHmbvMJnAar7if9wP/uma9f0gz7Os4HVMAlBnGxv61c/3vB27E+trb8TLwQIyxpY0gTR0IWFX2PKxN4Vlspvo2bGrB7i4c+l+v7HcgndMSVT1JRDLgTKzS3mtg1A+cqqpfFpGHQgj31fTf341dr9XAiIh8D3ih8BGIMY6lloDvY5XxX8SCxJ9gYxVfLxQGMca9wB/2eI4/FWKMXwK+VPycDP5Ox7wfzuPI/kY5iE1miCLy31R1H5b8OYCZIXa1kxDCYizpsxJLAvwK1lJyOXBDrycVYyTLsv8qIh9ps9qpwECe54dDCDto/Tyc0esxjxJt23Ecx3Gc4wdPADiO48xBsixbzuxku7sqP/czsxo/BuyrG5MWQhhU1RtEpHrsF4HnmgKvpDS4GDPQa8ce4Lokv64ykBzhd2BB9HZVHRWR8V7H8pVJku4d6evVlBAYwgLDc4B3YUHhErq85snN/feA80MINwCvlIwCd2JJjIFUuR+rnn8y+Xs2XbcBLNkzjo0g7Pk9puD7MswrYUJV7xGRZ9qNaTyaJNXIZcB6VV1UMr7rhglVPZhG7L0BfBe7VyPFWMbUM98zMcYDWNJga5ZlYM9YV/c4PSeLsITDlNJDRF5r3gqAk1R1CaZQ2MT0hAKAJVmWLc/z/Kdt2ugtAI7jOHMETwA4juPMQUSkn9kpAA5Xfu5T1arb+kEsKKrjDBGpuoyNAPfGGKv7LrMMk3zXtRsAkBzVb2dmkgKYCtS7Ggd4JKTjjGPXakcI4YuqGlL1+oOqurbGM6GOfmCVqj6S1AC3pt5y0v67MnWj8zSGjojIYuB20shGEVmPKSFmHWiGEJYDH8Bc759uSNoQQliBJTwuwkZHdnuICeBNVf3z1CKxqZ23wpGSkghd3ZfEH6SJBTGEcHdSY4A9vwepHykJ9rk9HfML+OvKsn4RWcER3Be6P/8ytWMyHcdxnOMPTwA4juPMQVR1OTA4C8f0f6r83CciVZn7fkxO30IIYR5wSargFi9PYgZvm5oOmKT/V2FV9CYmReTrwOO9VPNDCEPAfFWdnwKnU7E+7yVY0qEuUD+Mvb+dwD9j7QO7MVn+YWCsXGVP5/NmlmVRRJ4SkeXYjPh16d9tf9eKyCJV/X0RWRhCuBPY1U0VP1234n30YfflIDBSXKOkEBjC7sMMJUGFIjCcSO93RosFJkcfTOfYrp1jSFXXi8inkorhbcAVNed/CvAAdl+6+ZtkQlUPiMirwCNAFJGDHXwlfuqk5McNIrIQG9n4d0y3O4yq6mYRObdpexH5TSyZtZvWZMEg9jnpNEazHbUJtHYkRYLjOI4zB/AEgOM4zhzkCBQA1RnxA5gZGgCqiohsp8ZNXlVXisi5Ffn2HuDBDoHnGcCnO5xvBO6s9v3XkQLV5Vjg9S5gtYisorniWsdplZ8PYYmALaqahxDeALaVg+DUEnEIOBRCuDId86PAB9JIxsb3l5Isn8Z6+j+XjtXu/Z2EtWNkbccAACAASURBVEx8WFVPTvd7L1a1/1oI4WXsen4IeA8W1P/XEMKTdUqMGOP+EMJ67HrtBx5J8vcp0nH+HFimqpcCTzedY3pP8zHJPJSeoRIXAhuw/vpu2AM8LiLfIY3j63K7FpI0fymWGKk+E8UYzJHq+++Rg5jZ31kpYbGjfAwR2YZNN6hFVUOWZUMklUnpPPsxz4cjoefrJiL9WZbNz/N8uPPajuM4zrGMJwAcx3HmJktVdUB6VACo6ozKfoVJ4Ilq9TdVmj9G63izCaz6/2bTzpLJ2nU0BOcp4bAHk4i3DchStX81cAkWXC2h/TSBXliIGf+dmUazHVTV3SGE7wHPp6kCo0WiI33fFkK4XVW/JiIXY1MJltD8u7cPM098MIRwo6puqvNZwALXe1X1HBEp3+MVqroiKR1iml5wO9MB9sWYiuEbDcd/SlWfS54JM4JEEVmTkjx9IvJ22icAxjAfhglMWfDlYkGWZQPYBIM7SS0HTajqhIjsw8Yovgjs7MaXIAX589LXKuwa/AamllioqkMpaVLtbZ9I5z4RQjiMBfF/y3Q7xOFujh9jHM2y7OPAsjR9YGdp8Thm2FhMHphB8ohYkY65k2nzvz7gpBDCgg4tNUebPhFZwvQkCsdxHOc4xRMAjuM4c5PBHo3UCqqV/QlVPVwEmSKyC3Phr7IUqzaXOaCqD+R53i5guiB91Z6riExigeRLHQwE12BtBJcxPTf9rWIIWJ7k/WcB60XkJeAvQggvlXq9SYH07izL/lBEnsHc4z9Jwxz4xBnAN0XkSuCl6sKU2Dk3BbAtpPs0mBIn1X74MVVtVFCkpEXdWMKCl0XkK5hPw2Nt1ptqiwAurTnHTwG3YSaKjajqXhF5NB1re6e2iBDCQEpQBOBt2HU8hZo2jx4SY2vT9wmsEv9iCOGHwGsxxrbBcJ7ne6lplYkxEkLYjalFmhIgi4CTY4zbQgg/Sccv7vdiLLH100wAQBt/DsdxHOf4wRMAjuM4c5Ofp3fn7kkRqbYAjIrI66p6GoCIPNhQ/T+P1qB2Engyz/PdTQcLISxS1evrAtnSPjYCD9VVpLMsIzmyXwTcjFVMfxa/1xZgFe3zsar/i1jFez/JlT9V8reHEG4FfoCNkFtH8z1aDtwTQrgGmxAwpQQQkQlgM2YUV02cHAQeE5FhLMC8Cks6DABPiMjGI3ifh4HrsWvcs9le6vn/AGY22K4dYwR4VkQeAN5oJ/UPIQymfa0DPioiJ2NBdTcmjL3Qj6lLVmEJnM1Zlt0rIq/N0niwMAJsSgAsAFakdo/tWOW9MOJbrKoLmL0R4GwmYhR+E47jOM5xjicAHMdx5iaD9OgBkOT/LcF9jHE8hPBYcrgfBZ6t2XSRqn5QRMqV913Ag03HShLtG7Ce9ya2A+vLI9TKJOf621T1sm5Hs73FDGHeAadhSoTHgW+GELaWWgPGgI0hhFdV9VMi8jlMvVDHauBrwMeB8ui4EVW9TkSuwwJSMDn5DuAxVX01z/MiaH6ZesVGz6QK/AwFQQhhWTrXvaq6o3Ts8joAn1HV20Skqd1jAnhNRO6NMdY9Z+X9LcKq8x/EEi+9+DscCX3pWOeKyNnAcyGEO4AtPXoS7FXVfWlsZdNx3oY9U9toTQAs7HLKRBP/MItt+vAEgOM4zpzAEwCO4zhzjNQL33NAlKrGddXBqKqXJzn+7prlq0Sk6FEu+rafpb3b+GpVvahN9b/oId9SXZCCySGsknxZzZSCgklV7ZvFJISjwTLg32PB6bMhhHtU9XDR058SKw9hveUbgLOxKn2V5cCdIYTLU3BdBOJvhBCuZlpGPwHs78Yk8WiSZdlS7D6tA/aJyKVU7lm6X6ep6u3JFb+OwyLyp8BXqZHNp2P1pd74czBlwymquvD/Z+/tg+SqzzvfzzM1NTs7d0qlqyiKoijyWFG0iqJwnsgyxliLMcYY8xbAQBywjd8JSwghmCVciqJYliXEwcQm+B1sY4OxjW1MMMGEyFjGWCZY93cUrCjKRFEURaXVqnS1ulO6qqmpee4fv1/P9PSc7uk+3fOq51PVNdPd5226T0+f5+37naX3F+I11MXE5Mc9qtq0Q0UIYURVd9FACJB4DvUCe9M4xEB6fDHtjbmUsQEEtwJ0HMdZEHgCwHEcZ+FREUBrlQMUBAcpqNk9efExrq7Z337g0/XE0lS128xurwpoahkFHgshPFz0ZLIZvI8oalf0PXbMzF4UkR0i8gd0vh28WSraBBuAK0XkY6r6RAjhMIzpA+xQ1XcSnQLurvOanA58XkQ+SJWYXJpBLy3KpqpLiB0EPakaPVgdwKrqaqI93wHqtOKLyGqihkMvMRkxQFUCIAX/ZwAP1Qn+R4gdCnekfRQG0Kq6hhj430iVa8AsBv8Vuoiv4UNmtlxVvxBCqB2jqcdPp3h+vZn15Xl+JMuy7xNFKCv7LKPvURoz6xaRX5vJfTqO4zjTgycAHMdxFhhm1luvzXoKDlKTAEhB4q3EWeVPhxBerH3ezM6qDsRE5MkQQqPq/6bUPl2PHcD9DZ7/EHHmftJ3WFLjvzN1IGwG/qDBdmaS1cRK+VtU9Y4Qwq7KE6lq/5iqHgLuJs7217IZuFVVr51KhT6NV1xErEwPE4UEQ0Fw/YCZbSYG7weAj5EcAtI27iXO7O8lOjy8XLC7PWn75wHbmNyxsZjY4bC6YN3jRK/7e0MIe+v8Lb3EwP92YiJlLox6FNEtIrcDv6CqtzbZCVDXHSOxXERWAPtF5Fnia9BD7I4pW8WHgjGOqUif70Wq2tOMC4LjOI4zd5nRDLLjOI4z/YhIt5mVaRE+TJVHeJZli4gK7B81syvN7MtZlm2qWeddKUipsBd4sN4OsixbSqz2FtrzmdkRoqDfqwXrdqnq2SJyG8WB4H4ReQ/wJeAsM/sss1f9L6KPmLj4gar+cZpjr+Z54C3AZ5hc2e8CrjSzP0lBcSEpcL8TeJT4Ot8N/Bj4k5rlziF2JawSkWUiomZ2h6quA0jnz8q03xWMaw1MwMwOAJcA/zEd+96qfSwGPk3sYKi+3qiMklwFXEfBWImq9qnqWUTBxO8QdRXmavBfoZ/4Wfn9Ru9RFQcoHqmppqIPMWhmz5jZKFH873D5w5xgSdgKS3AnAMdxnHmPJwAcx3EWHn0NZq0b8e9MrCxquiEiiMiAiIwlAFKA9xbGZ9dHiV7ttVaCY4jIWYx7mhc9/zh1LP9EZJmZ3Uj9oP4bIYStZqbA3cm3fC6ynBiY359a24EospcED28hBvG14oe9InItsaW+HouI1nc9jLeK9xLfp2omWcglDYijAHmeHyVW7p8EHgaeLtpZ0iQYDSGMpBswpvj/XqIGQi3bgA8DT6V1JzyZzqu7iMmnzcyva5UuYqX+zDT+0IgRCjQuavjt9POYiNydbBgfoLG+xnSxmDqJO8dxHGf+MJ++VB3HcZzm6KbFyreZHQcO1wRjK8ysejuVYLLCWqqCeTM7CHyZOl7ySZywbvWfaG13XwM19UtTAqEe31VVFZHP0thdYC7QS9Qw+H6WZedUV4zTbP8ngcuJgV51O/ly4IGkvF/EEeCbjAf4Q8TW/VpHhleILgzbiK3o3wA+nN7DCk8TW/9vbGGuvcImYiA8dv6Y2QniuMA7gS21bfKq2quqFwF/C/wh9S3y5jQp8fQxM5vq+EeAyZmuiayHMR2OV4AbgM/Uc8ZokjK2hRD1Heble+I4juOM4wkAx3GchUfLLgAicpwYPFY/ViuydoyJrfmnUxUQiMjLwPai6n3iYjMrbCUnziV/hTot0am1/cM0bgO/lhjobmywzFyiC1gtIl8G/ri6YpySIM8Rg/JdNeutNrMbU0JlAilQfILYWv8/gOvN7BIze6Jgub8wswuB84H3hBBCnucTlgkhnGh15rtKN2LCOSgijwFXhxAOFgT/S4jJoS8S37/5rlG0QUQ+1GiB9B7/PCVG6rEivTaVDpHhFu0Gi9hbcr0lZlYv8eQ4juPME+b7F6zjOI4zmT6KLeUaMQQcqnlsPzHoXwRgZq+S5odVtYs4w0167gRwX57nhcFilmUrzewaEamXeD4EPNtAPO1cUjW0AVcwPxPby4nV8l9U1XvM7FBqrR/JsmxLstb7PLG1v4soOPcB4Gck0b5qQghDWZY9liwWRyvWgwXLjdLCLLmq9pnZoyKykdgxcFfqVqhepsfMPlIj8jgEfNLM7snzfKhm+S6i6OE9xIRSq+ftXObqLMuey/N8W70Fkr3fIaLdYxH9xMp7qx0YUzFK65+VLhF5IwXnnOM4jjN/mI8XSo7jOE5jBkqsc5zJweB2YGvleRH5oojsS/dXMy5QBvCSiOws2rCqdonIudX6AQXsCSEUWg2m9vhLzGyq4HA+f6f1mtnvAw9Uaxekivx24P1Eu7wKi83s9jQvP4lKAqFZX/pmMLM1InIxMVi9yMzWFCy2XkSuY9ynfoToJnBvQfDfS0zafA04k4UV/AOsEpHzU/dKISJygMZJmD7qJwfa4eDUixQypbCB4ziOM7fxDgDHcZyFRxnl+yEzmxCIhBCOq+pNwNeJ3QA7QwijqVX9AtJ3SNIPqJ47n4CZ9dUEhUXUFQ4kJhs2zQHP92lFRHqBy4BeVb2RmBSpVOqDql5DbJHfTKzGrgX+i6r+Wb22cFVdROycOAvIiN0Gx4HDZvY3IvIccDCEgKouA94H/DLwWWB3dQJBRPaY2Qsishp4XkT21Oyrl6grsBLieSEinwQ+Xjuzno7rj4AbWbjK8t3E9/NB6gfc+5N1Zb2xlX46nwAYJXYUlJnn3+RWgI7jOPMbTwA4juMsPH69xDpH8jyvtZ4jhHAQeKrm4UXA20jfISKyz8yeq1dtFpFLmbpyuLfowZRsWJeqz1NsYkHQRUyu9BI1DyodF4QQ9qTEQEXnoIvYGfAsBZ7yyWbwbuDdFCRfRORK4PG0jeG03L1mNpqsHa+hKqkTQhhS1QuBZaTkRA3nmtkF6X0aTsH/PbXBf5ZlK4nz/u9j4V+HrCMKIha6KKQxjx3AxXXW7wFe2+mg28wOlfw89RITSlOJFzqO4zhzlPncLuk4juMUU6YDYG8Ly64Gqtu/nxaRwvVVdQXwwSa2+f/VebwLeF2qjp8sdAFnE9X+V1WLA5pZIAoDVrzcVwNXp1n6WjYTK9D1Oi+6iMmVyrr9ZjZSFRhO2mYIYSiEMCn4T90DHxSRRcS2/yeAe6s1AlQVVV0mIg8RLQIXevBf4a2NnhSRf5li/VU07p5plVERaVr7oYC57rDhOI7jNMATAI7jOAuPMi3DUwUhAGRZBrECOJAeOgF8paj6n4LSi4gV0Klo5GvezPoLjUonwOeJQT4ASdBvu4hcQ3zNuoAPmNlAwTamUovfA9wvIpXK8pdE5E+BPwNub9H67xyiUOMosdp9YwhhrHsgyzLMTM3sy8TkxkKb96+LmZ1e5NhQ9XzDyn5S3u9kAgDiSE9ZXt+xo3Acx3FmnJMl++44jnMysaTEOoUCfLWk6vB/ZjyA20r94L2f6CPfTPBSzwqti6oAuBYzQ0ROmFlPA4eB+UqlE+B+Vb3GzA4mcT+yLNsqIhV9hn4RuU5Vb65OxKR5/c+Y2ZUisjQ9NlKxawQepWrOP4Swj+hG0BIpuL2OeE3xKnAbVY4SKRE0AHyZKBy50N6nhojIEuK8/WCd5xu+HiIylgBIr+XZxNf7EHHEY28D6816/O9WV6hilap2dVJg0nEcx5k5PAHgOI6z8Cgj7tWoAl9Nl5mdlRIBJ4DvJBHAIs5It2ZoVJEsUpsHQEQGgTtE5D6iwN1Co9IJ8AkRuZ4UWOd5PpJl2VMicgtwF3CpmX0TGLOcS6r7twG3qeoA0T5wfwihke98y5jZpSJyCvE9/GAIYcwNQlUxs/Ui8kWijeHJSB8NEgBmtnqKefwVjCf1+on6Caen+yPAta0cTBLy3NXKOjWsTMfUTheB4ziOM0ucVFl4x3GchU6auS+T3G32Yn5RUoGHKFC3rchnPnnGtxKYTBIgBDCzRuMMI0RP8pcaJCEWAl1mdpGZ3VitB5Be9y8B3zazlSJytqoWvvchhL0hhMFOB/9Zli0WkQuJrf/3JY2CapaIyMfM7GS2j+sFltZ7UkRe08Q2VlZtq/q1PLXkMR0HhqZcqphFZrao5LqO4zjOLOMJAMdxnIXFIjNrKQFgZjuZel68whmMJxheDAW9x0kn4CwRaXZ2/yhRhX4SSVSuHnuIbeUnKB/MzAtEpFdE/gj4o2pf+TRnf01q6/8gJSz1VHW1qp6hqi13UIjIqcTZ/4eBT+V5PvY+JmHArwDnisjJ3HHYTQzcJ5GsE1cWPVfDBogjHFSNVxD1OMpcyx2jTtKtCZaKyLKS6zqO4zizjCcAHMdxFhbLWw22ROQgTSYAqiu5ZvbXdbbXC7yDBlXPmm0eaXb/NWwzs71Ey7lDUy28AOgFbiCq+4+Rqvq3ACfMrK5Cu6r2qupZqroxy7JugCzLFhGTKN8E7iuRBPgdooPE/dU2dSmwvQU4q8XtnWwspznNjl+DMQ2O6mRZWXeMdhIAi2nys+04juPMPTwB4DiOs7BYWmXr1hTJUm7KAFxVu0Xk9WmdgyLybJ3trTazK5n8HXME+FzBKsdSZbMlzOybqQ1+mIlV0YXMANEesFYY8SXgOhEpHIVIXQN3Ad8zs78RkcsARGQzsY18mZmdy/hsebMsJwrS7a3Z1+8Df0T5APVkYRnNJQAq7/cwk7UEyjgqHCF23pShF1hSPY7iOI7jzB88AeA4jrOwWCEiLQUEyYe8mQB8OanyJyLPm1m9efKLRWRSK7qZfQn4acH+j1RZ0TXLURGpiM2dMLOTSZBsHXCrqo4FjiGE0RDClqKRDAAz6yG2i/cmVfqKtsJ2onI/wK6q35vlFuClym6TSv1ZZnYTfo3RDCtorpq+IiVWRoCDNc+VHQEomwAAeE3J/TqO4zizjP/zdhzHWVj8UosaACPAAaKI21RUEgDHge+KyKSkgaquEJGrCtbdIyJfJwYOtayidZ/zvYzP/Y+IyD+m4zoZ6EodFv8lBdxTkjoDPg88b2afAh4HCCEcBM4H/nMS8ytUqq9HEhasPndWm9mdybrOaYCqdpnZANCMoF5FK2AY+Fn6SUp8lRF2PJpGb8qyCr+GdBzHmZeczKI8juM4C4oUDC6dyle8GjM7IiIHm/QRX25my0RkD7CzzjpnM15drjBqZs8Dr4rIdQXH0NXABq2euN8hUhAUQiDLsp0icrhg3wsSEekDbgSep8r6rx4pSH8y3WqfO8jkqnLLJAeCW5IwoJMws1ERKQrSu0XkN5rcTA+wPISwR1VfNLO9IrJWRLbTXPJuAiEEVHVfWrdMIN9fcj3HcRxnlvF/3o7jOAuHRcSZ4qYRkWPA4amWS8r+y0Skn9gmvrt2GVVdYmbvJAYH1QyJyAN5nh9nfJa5+hiWpBb1SZjZPpoYTxCRXcROhpOJJcDdqjow2/PYKfl0JXDZrB7IHCR1XxR9xrpJ6v5N0EPswAHYKSI3E50X7i97XGb2r2XXJX6O/RrScRxnHuIdAI7jOAuHfpoTFBvDzI4SBcEakroKXku86P9eCKEoKB8g2gTW8u0QQmW2vOj4FtdzLhCRUWB/2nZdQghHVXULcFqj5RYaZrYZ+KCI3EGJSnAHWQPcRAkbwpOAExQkANKozoYG3S/V9BD1AkifvafSrR0GKd8BUEZ40HEcx5kDeALAcRxn4dByBwBRTK+Z9u9uM1ubxPq2FC1gZpcUiP/tBx6quj9QZ/v1AopRIBSs183kwOU7wEcbbGvBISI9ZvYRopVf0/P7qrqIqOcwChwKIZTWT0jV/+tovpp9sjFEcXfKehFpZv4f4jn9K507JBCRdoQzB/AOAMdxnHmJ//N2HMdZOPTToj+3iBxIPvJT0UVsQX4phDApmMmybKmIXFrz8KiZPUVUmq8EnfWC80L/ejMbJYqeTVrezGot5nab2dYGf8OCRESWATcllfgpUdXFwN3APwN/T3QUaCdpchrwbvyaoh4HQgiTFPdFZGML2+giWu91LLllZnso3zXi9o6O4zjzFP+ydhzHWTgsovUW7H9qcrkuEVlKrLJPIMsyROQMokp5NUMi8q2q6vIK6n/vFD6e2qNfZbLC/3IRWVGwv6+b2cniBlDNmUR7wGZYkZYH6DezsyjZup9l2WLg2rLrnyT8qPaBpNnwhha3s4TW3TLqkuf5MLCnjU3Uan04juM48wBPADiO4ywQzExpfbRrV5PLjQLfBp4reK4P+B0m25m9EEIYGxcws7rdCWY2SRwQolo5UXCwNlDpNrNza5YdNbOnReSVevtZwKwFzsuyrJn3/yDROWCE6AX/xRDCoTI7FZHNwAX49UQjilwaltB8wqbCMppIAKhqv6peoKpXqupUrhjtJAAG2ljXcRzHmSX8C9txHGeBICKvKbHavmYWMrMTwL0UqP+nSvzG2uXN7LMFyxUiIv+xwe73ADsK1rkwjRWMkef5QeCzzK4g3mzQBZwvIlO2ZocQjpjZ7cA7zOxCEXmkzA7T7P8H8ep/I/aY2c6Cx9fQol6HmfXRhL5FEob8MlF743pVrZs0SGMAZWlJcNRxHMeZG7gIoOM4zgLBzDY1qSheTVMdAHmeQxQzK9rvGSIyQQBORLYAL9cs2mdm1DnGwg4AgBDCCVX9JnAFVd9bZrZORC5Q1ceTz32FJ4DfNbMLknvBycJmM1tL0lyoJsuybhGpKMhXEiXNiD824gwzO6fEOXcy8QJwrODxlhMAIrLMzKZsu0+aEEsAzOxcEXkQ2Ftn8X9o5RhqqJvQcxzHceYuJ9OFkeM4zoJGRNa0uMp+okVZu/u9pOahE8D3mGwvuLJBQN6wcm1mWwq2twi4hMmjB8PAJ0SkSHl9QSMi59Z5fDPwgVS1n0CWZc0q0Y+RxOgub6bj4CTmGPADEZnwGVPVbuC3aH2ef7GI9KRtdKnqZar6gKqeUr2Qme0jfgYQkQEazOq36QRQq/nhOI7jzAM8AeA4jrMAUNWNtBhQmNmepLJfmizLVgOn1zw8CDxSU5UH+A8NNtXQQi7P82PAfVS19qfK82XpNkbSDdgC3E6ccz+ZuFBVi4LypcR2/YHqB1V1PfBjVf1QCkybZZ2Znc3E64hhYvfFn1Fc9T7Z2EXUwaj9HPQz+TPTDIsYT5StMbOvAH8A3FnT5r+3auzgCCkZUISZHaTYorAZfrXkeo7jOM4s4gkAx3GchcFaWhzrEpFdtD8rf3aaTa7mmRBC0bhAo4phj6pOZWH4nJntLXj8elWdsO2UBHjczJ6eYpsLjaUUWyoeIiZZ1tc8fqmIrDeza2hN1f0UEakd29hqZtcDPzKzukHnScSzIYSiCntfEuwsQ6XtfnFV98UaMxsT+xORQ2kEZ4SoQVA3GSMiQ0QhyJap3qfjOI4zf/AEgOM4zjwntXW/kdZ1Xf5BREonALIsWyQib6tpA98PfLFo+Snml3uYeiZ6p4g8xOSK5gbg7uRvP0YI4YSI3Ex0LjhZRAGXEufLaxkkVo/fWfP408BzIvKdJPTYLO9k4vl2xMweFJER4PpkGXkys58oRlnEqSLS8thFokh4b2XN+M9x4A4zez1wOY21Ho4Sk0OljkVVXQfAcRxnnuEigI7jOPOfRcSgr5Wk7nFgT6qUl0JEVpnZhhoRuK2UaynuBZYDRYrpAIQQhrMse1hErmJiJbsLuBT4KfCpmnUGVfW2tPyCn1k2s34RWaWqXTWt58PEQPBcVV0SQjgCEOIJ8I5W9pHm/8+oefgAUfDurILnTjZGgUeoH1i/tY1tLy94bDFViYH0mR4CmvlwHwUOlzkQEelP+z3ptDYcx3HmM94B4DiOM/9ZRXHVtxGHKXnhX8UpIlLdbn4E+BoF89+qulhEGtnF9dHACaBCUq+/28yO1zzVT5yFPq9A6G478H5g0Mym2sW8RkS6gf/EZLu4EWKgtgQ4u83drKdAeDEJPN7CFIKOCx0ze5nYBTNJfyLZVpaZ/6/wC+nn7qrtj7ah5XGc8h0Ai2jRycBxHMeZfTwB4DiOM88xswFiEqAV2hH/qnA+E79H9gAvVroKVHWdqp6aZVkf0GNmdT3MzazSAdAMz4rIE0wOsJYC9wKnVT+YKuEvmNltIlLrJLDgMLMVBa91JQHQDbylyA2gBU6l5vrBzBYDNwDr2tjugkBEPhFCGKzTXbOB9oLmyhjNCWISADM7KiKlknnpGH9OA6HABizBrQAdx3HmHZ4AcBzHmeeIyFtpvep6kPKVv0ob+Jk1D38nhHBUVbuyLDsP+BbwXRG5Y6rtperxa2vUzOtxxMzuIs6117LBzL6okbHvuBDCiIh828xupI2/e56wqsCebxjYR/zeX0d7QehrajspRGQV8FEzKzvbvhAYJQpPfrvoyXQ+biQmqspSGWMZBj4B7BaRF2kwOtME+yjnltELDLToHuE4juPMMp4AcBzHmf+c0+Lyo8CuEEJtG30rbKYqkDGzQ8CT6e4iEbmW2Cq+HPh9oCe1pzdi1RRCgUCsWuZ5PkhsN58UzKexhK8AF6hq9XojIvL4Qk8CJAG+2td61Mz+Z/p9Je1VbtekhE013UBfjR7EycZ24M48z+tV0/uAN9DeiEQ3jHW1fMHM3gK8P4Swr+wGk7NGWbvM32DyuInjOI4zh/EEgOM4zjxGVVfT+vw/wM/a2GcX8GYmBplbzWw/jLXzj83zp/nkRUyeG5+Ama2upxOgqt1ZltV+Zz0H3EcUPKtlg5l9HniXqvZlWQZEIcE0PnAz7WsgzFWWUxOUpeTHYWLyZ7mZlapCpw6NZro0TjaOAbeS2vLrsIQ4PtEOY+9bCGE0z/MDFUHHsojIIOVGADCzdY1GexzHcZy5hycAHMdx5jeX0qKji5mNENX6y7KEOGdf+Q4ZAr6b5/kxGPMWf5kYbI6KyDfS4eKEXwAAIABJREFUMTb8zklt5BNszrIsI8syBe4UkXdXW/2FEE4AHydWQidVMEVkGfB54P607cp6w8BjwAdpHLDNV7optos7QhR962/Dpq+f8Tl0J3IUuD2E8HyN80It64C1DZ5vho6L7qXPUakOAhFZJyKeEHIcx5lHeALAcRxnnpKqsW9qdT0R2R9CaOQN3pAkOljddbAvzSFXOA7cDzwDPE6s0jdDNzVOAKnV/C7gT4AHKGjrB+4RkS9RXMXsBz4EfEVVL1bVPlWtrPc0cA2xdbusivpcpajF/wTjr9GCt0ScIU4QrScfbmLZt3Vgf12VbpZOYmY7Sq7aR7kOJMdxHGeWcOEWx3Gc+csaylUUXyi7wxR8r2Oi68BLIYS9lTupCroDuLBqvVOa2b6ZvZVYnR8jdRRADLYm6RaEEA6p6k1mNiQif8Dk77Yuojf9aUSdgi+r6tYQwhDwgqpeAtwOvJuFbWF3iNiqvgT4P2b5WBYCJ4iB/52pq6QuqtoPnNuBfXal7o2G4yuq2pMEGY810CQYQ0R+Bryv5DFtpr2OIsdxHGcG8Q4Ax3GceUgKxFfTuv0fwI/b3P0bmBhkf62JdXpoIrgWkY3VFX5iZf524Hozuwp4rsheLYRwTETuBr5AQZKg6hguI3q0f15VN6tqL7H9+WbgNtq3RpzLjDDe6VDmvKFW/b8Bo2l/1ftcSAyb2SPAHVMF/4lNdKZ9v4vi8Y4x0pjMnSLyLRH5QJMq/UWOGs3yWzWfWcdxHGcO4x0AjuM48xAz6xaRt9P6PPZ+YnW+LF3A2VX3A7GFfowUcKwDhqo6AxaZWX8TKvEriJ0NgzDmUz5IEwFKCOFwlmXXi8jfm9mddebcu4iB2LvSbTvwKLCNWM39NvATopDefGYqVfdSc9sicpz6CZZqtgBXEc+DdxDt7waIQpCz+doOp06RxZQvghwF7hKRv2wm+M+yrBt4K1ME7h3kbOLIDMTrvKeYOrG1j6iHUaajaL2ZLWMBO2s4juMsJDwB4DiOMw9JlnqbS6y6k5KCXwBmtlREqmd+n2dyQPhe4CbgoKq+J4TQSlW9l2gf2FRFUlWXAVcCj4QQjuR5PqKqnxGRo8DtZrZuiqTDRkDN7ICI7CQKGs57L/uKI0MNQ2Z2oh2rvhDCkKoWuS7U7n8lsCLP863A1izLFovIauJruyLdfoGoRVBJRgwAvWa2REQ6lSQYJp7zB4iJnd3JJvJGygXkR4hq/19tsvIP46KZnbjm6mLqpF/1+buc5pI9R4j/F8okACrvrScAHMdx5gGeAHAcx5mfrAE2tLjOKPAKbVyoi8iZjH93HAZ+QJX4nqouIgZX69MxXkwUSWuWfuBNqvr0FIrqAJjZURH5beBtqnprCGFHCGFUVR8DnhORTwPn0Dio7xKRlSwQYTwz20cM6Go5lir47bJnqgVEZB3wV6p6D/B4sqrbDmPjK11mVhF5rBw3ItJVlaDoY1wUcg1VIySpA2Yl8B+Af2NiEuog8dzcT6zWQ+z6OBX4MHAmrWs9jBC7XW4kal40PdYgIqvN7LR2Ei9VdBOTJ9vrLWBmgfheLyImPpp5z48Ag2Z2donjXEb8X7St1RUdx3GcmccTAI7jOPMQMzuz1Qv1VP39QdEMfQu8rur3vUCo2d5aYHHV/VYDrS5i2/hiioPYCeR5PqyqtwMPmtmDWZbdKiKVAO1wlmUfFpGLgDuocRhYoIyKyDOMB771KOX7nvgXYjJpqhb6lUQHiLeo6tdCCN+GsbGOSgDdKJAeZjzQrRvwNkJVVxBHPc4nJgDKWhg+DtxlZrvzPG9pxRRUz5h1oojsAT5HHAV4lCYSfiGEYVX9F+Jr3tPiLnuBX1fVnha6IhzHcZxZwhMAjuM48wxV7Tazli3FRGQv7TkALCa2zFd4kcmzxcfNbCQlJ0aZOhAt3BUxeCxMAKS2/2HgaAom9xHt/O4Vka8An1bVL6SRgKOq+lWiSvl1ZnZFqhwvRBHcE8SRjPuZuur7T2V3YmZbgBNN+r/3ApeZ2XmqehPwdTN7UUQOAIdaqaRPhap2MT5isB64mii+t4TWg1qI528AHjCzJ/I8n3L0oeCYeoB3lth3OxwFbjOzu0TkeLK8rLw+y4naHMdqVzKz7alDpMxrdRrxtW/oTuA4juPMPp4AcBzHmX+sTjO3rfJsJRgoyXImKpl/r6CbYFBEXiXOcw8BL6fHe0Wk2cBiBbFaP0msUFXPJCr2DwG3AHvTMRxQ1RuIlf6bgd/Msuw+EdmRgsy9qnqriHwP+D3gCiZ2Ksx3dhPdDR4OIdSr+PabWW9VcqYUeZ4PqupzxPGOpkjJgtOB00XkIPG9Dar698ROkt3A4VYTAinAXks8X15vZuuBU4CBpJNRliNEO8oHQgi729jOJko6LtShiynO2/R5GGZyl8dZRKeLg6p6SwhhghaIiOwmJpHKcAqxu8ITAI7jOHMcTwA4juPMI9L8tNJ6UHEY+Fabux8gBucQ56snzfymVuKbiIJr24gCbBCrg82K63UDFwJPVj+Ygr33AOeZ2aiIDBIDmgpHzOxWEfkJcI+InAHcp6pPAAdDCCOq+gIxKfFZ4jz42cTXskzVc7YZIs5tf0dEPkcMoBsleBZVVe1LC0Em7iRW1k+n9WuJ5el2NrFTYZgYeJ7Ismy/iBwjnl9jVWoz+7f0+Arg/yQGwWuJ710/sdOgr82gH2K7/MvAHWa2U0TKBsSoapeZvT3N4neKbqDI3WKqY1lM/KycCYya2c+B/16z2H7i319GgLHSHbS3xLqO4zjODOIJAMdxnPlFN5DRulL9ziQOV4qUeFjFuHL6C9SpFqaK6f+oebiL1truz6qdKQ4hDGdZ9hMRuTK1Kv9DzX4BjqvqN8xsUERuIM6gvxN4UFWfS63Px4kz5deq6gbgIqJVXaeU2qebo8RW/+8DT+Z53mzVtZf495UdzRgjhBBU9f3A9cB5RJG+VscqJina1+ts6ZCAXiMOm9kzIvIo8GIIoRNiicsolyCpSxJKnHI5VV1CHIM4QAzKu0n/M8ysS0ReW7tOEs/cTqzml+GNRBtNx3EcZw4zHy50HMdxnHH6gDNKrLdHRNppz+0GfpMYtJ0gBp/tjBNMxTJi+/RLNY8/BrwKjJjZpBEBiIEM8IqqXgf8ELiOKBK4U1XvT9s8EkIYDSG8qqq7gIeTZeD5wAVp/4uYG9+Tx4kB+x5iF8eWlMw5lud5Ky3zS4hjAIeTTWJbhBD2qOptRM2BM4HfJXnCN6kPMJuMEjso9gPPAF8UkX0hhJbn/OuRzqfTOrW9ZknB/8eInTL7ROQqYI+ZbRGRtSIyCvy4zuo/L7tfMzsty7LuPM+n8/+C4ziO0yZz4cLGcRzHaZ4lTBTia4ZhM/uHPM9LtzMTvy8qtoP7gJ1tugk0JM2qX6iq26rnwvM8P06TdmOp2v8FVX0K+H0R+T2iCN3LIvJ1VX0eGExt8wfT7QVVvYvYDfAmYkC7IVWmZ2pMYJTYir2bOELxM+LfvLtNlfWlxDGAQdrsAKiQKuX7gEeAR1R1lYicBbyemMDZQHM+9DPFCDGBtA34W2BLsigcI3W7rASOFYnlNYuIXEJ514F2qIxXLBeR5cApIYRBVb3TzHIRGaF+pb603kES11wD7Cq7DcdxHGf68QSA4zjO/GIzrQdUJ5IwX2mS7/r6dHePmU3pBd8OyR/+NGIwU+s0MIksy7rS/PdwbWIihHBIVf/UzB4XkatF5N1mdk8aEXhRVR8lBoVH0/rHgOdSgmCRiCwzs6UicgrRBnGAOH/eR/we7SZ2RtR+p9YmDEYYF98bTr+PpN8PEoP9nxPHE/YThegO1wv6VbW7WVHHpJ/wG+kYD9GExWIZkrDcl1T18dQJsJzYsfJGYjt8b7r1MP1ODJXX9jixDf454AfETooDIYSxhFhy1ugTkY3Ae8xsMVHnoLDLZCpUtZ8WRBKbJZ3jvzzFYiNMHM/pBUjdDV+dYt39yS60VftOiDoAG/AEgOM4zpzGEwCO4zjzi5bt/4itzqV81CuIyFLGxcF+lOd5RyrIU3AK43PMhSSf99OAATP7JRH5V1UdBF6qbudOQfRu4DZV/SxwpZmdD1wpIh9Izz0P/J2qBmK1vdJ6fzQ9P2EcIcuyVel1WUas9C5nPKjtBX7FzMa+Z0XkCPC/0t0DZnY02eG11HqeZdnKFKi+TlU/G0KYMkGSOio03a2IvXUEVV1hZptFZLeZ7czzfDgF1/vS7eW0XB/x/VTgPxETKcuAZWa2PInltZMUOGpmh5LLwAFgkJhQeTGEsL/OsfcRg9YzReTt6fi2iMitbar/n8tEx4xOUbE6rEsa8XiVmKQ6TmtV/WPpnCzjMrLIzF6XZdmTPgbgOI4zd/EEgOM4zjxBVZdTTqBrH+0HfJXq/yiwpea4+oBLgV8Hvgzsqa7Cp5bqMiwB3kwMzCehqkuJIn/nESv1ELUBjojI51T1niIxtxDCPlX9M6KewOnAVWa2GfiIiLzPzPaLyEFV3Up0M3iFmEQZMbMRERkNIZDneSXAnRbS61bpMFhErKS/A9iQxOC+RgzwpkREes1sIzAiIn/f5ihBLX0iciOwWER2qurXie/ZEDBSGeFI78Ur6UaWZYtS0L9IRBYTkyir0t/6a4x3CqxMv1c4RgzwR4F/JTpc7AWOJqeAo0SNhwmvTfXraWYrROQ84uu5lli93gpcDuxop/VfVXuB85klZ4mk7/ATou3fi62If6bq/yHKJQC6UpfQIqapw8RxHMdpH08AOI7jzBPMbFOas22VCXP0JakkAPaFEGpn8DcBDxIv/NcA11Jl4QZ0pXbwMvu9QlXvrNPqvoLYZl0dHHaLyDKisv+j1GlHTq9HJYB/XFVXEpMYbwJONbPTk40gxDby3cBOEfkZsC/LsgNJVPEgcVa87YqnqlaquyuJyY81ROHFU4m6DyPEavrXROQLLQrWnSYiS4it4S+0e6zVpPnytwMfIAbQXyEG4VvM7Iepo2JvCOFg9Xp5nh9j4nkyLajqMuJruhb4bWIiZVN6+lXgaaIt5O4OfE4A1qV9TPeIQyHpb/jzZH95KOlmNMth4GUzOzWN4bTKemIyxRMAjuM4cxRPADiO48wDUnC4jnhx3Sr/dwcO4VfTz0cKnnsr423JG4nB64TATkR+oeR+1xBbtIsUB48RK7/rqh9M1fGDxGCmKVKL+CezLHs4VTHXAG8nVlFXJCHADcAVwHCqkh5N+zimqnuB/0mcLx8mtp9XgsnKsfQQ294rleEladvLROQXgVPMrD8lMJaQRgpSR8LDwF8Tq+eHWwlUU+X77enuEUrOtTciVcz/QlWfZNwR4F0icgUxyXIgjWb8hJjEGKTqHKnY27UiLFmns6SSbNpAPC9eT6xmV5IAfcT3b6uZfUVEXiJ2rHSyZf00YifDrBJC2NvqOnmen8iy7Mci8j5atxqFOIqzgvg5cBzHceYgngBwHMeZB5jZIhF5M63/3z5Carluk58DnwEeKniuOilxhBgAd4ouM7smy7Lra+eKQwh7VfVy4A4zOyW1kQ+LyC7gxhBCy7aHeZ4PEQPUl4kjAqjqWhHZRAwm1xKDyUqAvqHOppqmMroAHBGRIWLCYBcxWN4iIq+2GaCuYNw68okOedwXkoLOL2VZ9oiIDJjZeUkNfxWxk+G9VYvvJSYH9ovIHuD/TUkCiK/HMSZbTS5mPIGyjOhs8EvEv3EAWFdgQTiU9vMc8H0zezLP84NMA6raDVzDPL6+EpHniK9XmXO7O7lAvNjZo3Icx3E6xbz9gnIcxzmZEJF+ys3/T6i0tsFjwCPVyulVjAX8ZnZMRDqZAEBETiUGd4O1z4UQXlXVD4rIajNbkva9q0zwX48kBrcbeCzpHSwnBp6LiRX8lSLyy8QgtD/d76rcr9ncHjMbZnxmfT/w74x3CRwlzrcf6mBV+tR0LEPELoJpJ8/zUWCPqv6lmX012SgqMYlyBjGRMpBuRYwQX4va12AJzc3WHwJeMbOfikgwsz0ismc6kx8AZqbJLWLeEkI4msY2SiW3zOxNHT4kx3Ecp4N4AsBxHGd+sJFybcU76MA87hTz5n8DfIRY/furTuyvGjNbLyKnq+pgUYt4aj9vvne8DVIAuSfdUNWKZWHlVrkPsXthwhy1iIyKyCjj4wGjZjaaAuaWSMmIkUaCfkmQ7i3EZMVTtNkNkmVZXxqR6DezQRHZX3lPsizrFpG+agG99NxRYLuqbieOkHSb2eIUKG8i6hysTDZ8/UCvmS0iisr1E9v2j5vZsIgcTEKMQ8BwSjgdI1as/5mYqNlFTACMJM/70TzP2/mzmyJV/9/P9M/+d6tqV6t6Baq6qAVxw28B72790EBE1qvqimbcKRzHcZyZxxMAjuM484O3llhnGPj5dFc9gW1mdltqvX6sQ0JqYyRP8guJXQgNq+Ip4N1EY62EA2a2oxNWZSnArQ7op500+65mdq2IHFXVB0MI9ZTeFxNn8ofN7K/yPC/dGZH2ezbw6dRt8SLwHuBglmU9IvIu4O2q+kVgS+15kF6rkXQ7mG7PpW33pRGOpcmysGI52Zv+hmMichw4nLo8jgAnRKSTnRLtsoboKjHdLCF2ljTd2ZNl2WLgVlW9N4TQTIIuEDtSlpY4vn5it4cnABzHceYgngBwHMeZ46jqIqIYXascBbZ3+HAmEUI4pqqfSb9PVzB2EVHEbW+9BdLr9FmiLWCjKuyIiLygqrea2a5KdVhVB4i2ggp8A7izzsjDbNML3CUi55nZqIj8L1X9eFHipUq8cIeIPNHmfruS1sKKpFtwNrAZeEJE1gD3EscjlhHV9Zues09JquPM06AxiXSewbhbxnRSsYas7HcN8XzfX69TR0Q2Ej9DD9Fch85R4hz/xSWOrx/YpKrPdjoZ6DiO47SPJwAcx3HmPkq5StxRpkHxvYgZqML2mNl7gf/WYJm1wGU09912EVF87maiNR7EAO6itP6fEOflt061odSK/27gtWb2QxHZ2k7XhaquB84ltrU/WyeoOwKQ2t8PUKcDIQnwDQMPtONtnxgVka3AS8TX+kXGLQUr51o/8CNmwN5vjtFlZr8nIs3oE3SSDcDXiboIj2dZdncd2781xMRMsy4iQ0T3kItofaShG/gtoovA0RbXdRzHcaaZWfGodRzHcZojVfg2Edt+WyWEEBbMBbiIvENVVzZY5ADN6w8cA/6ViSMF+4mz/UNmdoAmgpf0/twB3A/8iYh8Bbi4jkVdU5jZl4F7zOwh4JYsy2qDyhPArcD5ZvYO4NtF2giquoyY1Hgq3doihICZvQT8DvA64rx7ZaTgoJldRQz8/rwoAaKqXara285rM4fZROyGmGnWpdtq4H1JMHMC6fz5dWLnyLJmNpoSejvMrOz/j/XN7stxHMeZWbwDwHEcZ27TD7yB5pTPa/lph4+lLlmWLRGRFcDgNLbNrwdOV9Vv1PGLPwTcDFxPDMiKGCSqw38PeLJGB2ArcaZ9nYjsprnuiW4zO63Kem4p4y3Zpdqf0yx8j4h0AytTVXlM6C/97QeYol3ezE5P697fKVeE9HpN2lZq9T5c9ByAqm4kJg6WAf+oqk8Tz5W6+1LVVUT9gsPA843EDtPyPURXgePAgZlqP8+yrBu4Or1fM031+bvMzNZlWfZCtehhOgcGiNd8rXQS7RSRw5RLPq4mjoPsLrGu4ziOM414AsBxHGdus4zoANAqI8CWDh9LIakq/yBxVOFxVb2rtm09zaq3u6tFwCXEavakJEMIYURVHyP+3ZVAZyWw2MwOiMgRYuX/sIgcqw0+U9Xz5XRrihDCsKp+h9iK3UUMeJ6nPVHA64nV9f3Ag2bWyIGhEFXtMrN+4GO0qfzfDMkdoNJefszMhqq0FdYDDwCnEV+jYaIzwVXEVvOi7S0nnlNnEt/re4CP19u/qvanZc4DTpjZ11X1v89EEiBpLJTR6OgEg2ZG+mx1i0hfcp6o/rt7iSMbXWbWSgJgDzH5srbEcfUS/29NOULjOI7jzCyeAHAcx5nbnEKsKLdKSyJs7WBma0XkPOJ3yjnEwK06sBsVkX/r0O4uItohFlYWUxC/P91gZuwBP0kMsvuAV5pUWa9LCOFZ4Nk2tzEKfLWdbTRLlmW9InIvcCkx8HxJRO5h/LVfRQpA0/0eM1teZZc4iZRMWE3sgOkHXj/FYQwQrSh70vq3A18i6ihMG6n6f66ZDXQgwVWGPclWshL0Hy+wlOylxP+QlFB7kfLOBm8B/qLkuo7jOM404QkAx3Gcuc3bSq4XqFNd7TQisprx75PF1IwrhBBQ1U5ZEfYB72qlupv82buJQdIIMFK9bqqW9xHb7oeB49XPZ1mGiPSnoLWf6ERwrLJM+vlizT67gP6kmn8Y2DtHHQXaRkQ2AVcy3ip+BTH5dEO6v4c4erEo3d8vIvfR+PzcY2YPiciNxNGOBxsdg5kdB46ndvdRMzskItN+/qfz4XdnQfwPgBDCkKoOEhMsB4mvdS1riZ+bMkKdP27j8Daqat8M2JA6juM4LeAJAMdxnDlKsrU7u8Sqw8Df1bMEmwZ+q+r3JWY2rcGQmV0uIo/QwBIQYnVWRDYTK5i/QUxO7Ab+SVWfCiFUZug3pgr2qcS5/wdV9clK4CIiq4DPi8jZxDbqHSJyFbHLoh7rgK+JyCnp/qeyLLslz/OZek9mkhNUaRQQZ/D/sXInhLBbVa8iWsoNEZ0NGlbm07z/x2nQ9l+NiOwjjhScT0wEfLPdToxmMLOzRGS2VQ2/TPy7v0bB2I+ZndpGd0IlkdhfYt3FRC0OHwNwHMeZQ3gCwHEcZ+5yKuUEuI4Auzp8LM2yaAaqoQPAGaq6t476PcTg42bgfUQxsup28xHgzap6TbLGO83Mzkwt6aeb2QoRGWRcC2AVcca7so2V6RgaJQBWmNmGqsDrAhH5PDMzkjCjpITIXcDvEhMk3xKRx6uXCSHsoclgvojUUVG5ZhkBRqvf+zT68Uy6zQhJdPD9M7W/BnwS+KqZHagRtQRARH6z6vdWtz1E7N4ok+ToATap6tZGYo+O4zjOzOIJAMdxnDlIalt/m5ktLnHRvp8OC79lWdYlIuuIwXRoVF01s0X1nusEqe36auBpim3/uoA/BP4rxd9z3cSAXonVyd0p4F+btj9IlY+9me0XkS3AWWZ2XESeAl5odIxmdhDYaWbrgEMi8gwLVBE9z/Nh4FPp1jLpXF9MfN+G6rSMX0EcKegGvmVmf0GBEOQMczZR2HBWSZ0+hZ0lqtpH1BGpCHG26gZxnJgIK5sAeEMar/ExAMdxnDmCJwAcx3HmJkuADY2E0hqwM1W2O4aIrAW+TnQl+Kqq3lZvpj21zE8ryeJuPTWz94ku4DU0/o4bNLNKQF6x/6scd6Bqljq1l18HnJLmyrdPNV4hIruISYpVZnaY+J7MahCURkpOM7NjIrK9CVu9fuJrciSE0LKgZArsBxh3sThETB4drVqmB/go8FYz6xKRQ6p6fwhhW83mPkbsvABYnxIqzdg0Tguq2gu8g3IdOjPJGpL2goiMUJwwa8Qw8A9EgcEy/4vWishKFmjyy3EcZz7iCQDHcZy5yRrKq29/q5MHkthMtLoDOMfMHgJ2trD+sJmNdMorXUR6getVdVtq/65mBLgPWJrmn48y7lG/A/gRUan+OEBKZNS1/0sif4Pp1hTpmLan26yjqmuB7wDrUkfJLlW9FthWmwhQ1cVmdiOxi6LfzEZV9Rng9hBCo7GHyvrdad1biAFyF0CyqzuRZdnv5nn+dFr8MjO7VUT6RaSyzKnAa2s2W0lojRKTMweYXVYD76VcUNwuh82s2QTfWmJ3RaUDoKUEQAhhVFV3EAUGV7R2mGP7X40nABzHceYMngBwHMeZm5xOunBvkSGmvzLaPUUgX6QBcCwF4q34kE/F6cTq8oTAPc0b71TVa1KXwGEzOyAiR2bCF36Och2wvur+euAh4MOq+kLNjPYfEqvyfTA2N35xuv/2Jva1FPggsVtkjLSdPmK3RSUB0F094pJ+LwpSbyB2VBwmit1Nu8DfFPwe464GM81wZdY/dVD8IfBLwF3VnT9ZlnWZ2Zo0MkOyC2x1BABgr5kdFpEyCYA+4vhAW7aWjuM4TufwBIDjOM4cIwmenV9y9RfNbDqCo6ZVvMzs1woeHkkVyA4eEsuBy1V1R9E4QmpbL2xdV9XFxATLMaKl3yTxtNQyv47oo34A2DMfEwiquhQ4o+CpNcBtwDbSPL2qngZcKyJ9tQub2ZmqelpBe34tQ8Qq/TomVv+Pm9k+4NGqZZ82szeLyEZidX8ncG/BNrcQRzVGzWwkz/MpDmH6UNU1RE2CWSX9n7gX+APi69wF3FR5Pr2Hv8lE8cSWK/FmtldE9pK0BErwNuBPS67rOI7jdBhPADiO48w9VlNOdAsz+0mltb2TmNmgiOwhHtsIDTzFS+oWlKEbuAz4NMX+5xPIsmwxsFlEXk8MZlYQEwQHVfWfiMKJL1fN6t8JvM/M+kXkVeCdzexnDrKK+t0kZxJn6wdTQHkOdbo0UtfHRmLCoC7Jm/5mM/tbEXkNsFJEDpvZj0QkUOVQEUI4kkYRlhHPqcNFyZiUeGmoWTATpPGGi8xsVYeTWWVYSnw/KtdyG1W1u+r1W8zEoL1UB0ye56Oq+hPgopLHqVmW9S9QC0zHcZx5hycAHMdx5hCqipmdV1SBbYJDIvJyUQDVLiJyzMw+BtwhIq+kSm6FoupyLaOpBbnTDBCrsXUrjKrabWa3i8i7iUFTH5O//4aJSuVPEVvNMbMPVWbTiQmZcylQulfVZcADSW/gMeD+EEKZVutpIQWr9drVu4mjFIPEgPG3aXxt8MtFD6ZW9J6KOGIIYZeq7k7b6gFG8jwvFI1MGgT7a7bXTezw6AEO1BOcnGnMbCVwddKgmG2WMTFZ05/uV7pelqQRgMrze9vY1zMHzhcZAAAgAElEQVTA3ZTTPOhPug5b2ti/4ziO0yFmQ7zGcRzHqUOy/XsrxXP0U3GA1oT5miZVDr8qIlcBt9VU85ZXL2tmRcd+NN2mg6uzLFvZ4Pn1IvJRYvfCIooD3B5iADxQeUBEqivde6hjrWhmFwNXiMgA8MfAZamaPicQkeXE4LCQFNRCfG0aOTh0NXj+vcDtWZaNJRpCCKMhhOEQwlArAXyWZRBFJ78J/BXwIdVSDTHTwZkiUrYVvtNU2v7r3d9Uk0jc28a+BoF9Uy5VTLeZlRU0dRzHcTrMnLlAcRzHccYs9NaVXP1VaiqpnSTP86EQwpYQQq0C+wRF8hQI1zKabtPBgIhc2iDonqpaO0r8G7YAd1Q9/n4zez/wfqImQ2ECICmrVwLcE2lbc0kroKjjYQwR+UUAM+tlalu7eomp1xDfh7Y7C9M23gqcShQrvJo5cL2SZdliEbluto+D+ufWKFWjOWb2huonzezv29jnCOUr+F0i8saku+E4juPMMj4C4DiOM7fYSKxUl+GvZ0mkbj/R7qtCme6FdugFLge+TXECJADfII4qrEjLjxB96Q8QEyd/AzxZNf9PCGE/8KUm9v+Mmd0sIr9iZj8XkWdqVPVnm0PE8YZ6XQDHISrwtyHUeDfQH0I4AmMt/OcQrSMHgeerFeqnYAT4sZntEZFlwAvMckIlJZeuYKKTwoyTrDQPp9+P1+h97AshHALIsqw3td2PISJN21gWMJz0Rd5LuWvH1cTukenqAnIcx3GaxBMAjuM4c4vfodz/5mGmecY2tWFXgvvhqiC3Gc2BI0zvxf+pxIDz4donQgjDqnojcWa6n/Fq8nEzG0oV/KGyQXtKGvxlqZVnADPbLyLHqJ8A+Lf08zgxWVAvATVKDOYnkVr8q9v8Twe+TOwoOAZ8Fbi+meMNIaCqW0TkfKA3qdA3s+p0soJo/VdGm6OTjAL/D0BS5n+VmDQE+FllIRFZx8TRnLqOGM2Q3pNKh9FAiU2sBtYmx46yh+E4juN0AE8AOI7jzBGyLFsGnFVmXTPbIiLTFmCnCugm4JK0v0dV9dV0Md+MMv5wql5O1yH2ADeo6rdDCJNeh/TYSVl9FJEDRGu+QqpsI4+JyD7gtDqLjgI/aHK3yrhA3WLgSppMAMCYMGDLlnXTyDlmtnkOJCLGCCGMqOqniZ/LY8DjVU9vNLNFVcd7gPbP/91EHYGBEuv2EMc6vs3cGo9xHMc56fAEgOM4zhxBRM6hfIXxR0yjTZqZ9YjIXcDZMCYs92Fi9b92vwNF25gmF4Bq1gIXq+ojU41CpG6GXmJVXIlWeIEY5JyorJ8SH31E//kTeZ7Px+BlH7EDo4hREakE2seAit1bkW7CQeClJvf5YtrvMuL58VjTRzvHUNV+4NpO6Bt0mhDCNlV9J7F7Yz+MOTJkNU4F+2gzAZAsG18iWkeW4Rxi9818/Aw5juMsGGZdVMdxHMcBVe0DLqRcYvagiGybzvl/Eelh/AK+C7iM8WTFv9YsXpTEmO4RAIhB64eJwfxUbAS+a2b/Tpz//yLwd2b2Y2ISoTLqcC7wU+DHIrJpGo552knt+V9h8qjGKNHebWdabpSolbCjYDPHgXtaUPMPxIrv5cBbzOymEoc+66hql5ldaWYbZvtY6hFC2BVC2Ff1+V9KTGpVrvFGgZ0VfYY2+V4b665mljUUHMdxHO8AcBzHmSusJgqmtUwSS9vV4eOZin6iqNerNGgvrxBCGMmybDpHACpsJI5RfGmK5W4Bzqk5nm4RUeBm4BVVPUJ0AliflnsP8HLHj3hmeAz4TeDdJC0AM3tKRO6kqoMjhHAgy7I7ReTTZrZSRLqIiYNvpFtTpGB0kDqaAfOI5SJyeXJImHVEZITYzt+IJVSJciaxwJ9X7qful3VmdlREDrYyk29m29OoUVlF/zOzLNuR53nJ1R3HcZx28Q4Ax3GcWSb5nm9kopJ+04jISwXWfJ2mYpVXxKEmt3HCzDp0OHXpBW6p9qOvQ73vv1Ezewk4FEIYAn6YZuj3Aj/s3GHOLCGEoyGE64h2fb9lZq/J8/ySEJmwbJ7nzwBvFpEbgP8G/E4I4f0hhMMzf+SzzgXAmXNo9n+U5NrQgNOpEgBMTgHVb/Iq4rl8Was7F5ETxK6RslwiIm4H6DiOM4t4B4DjOM4sk6qsb6X8/+RmhdnaYYTYGr453T9MnCuGJhMAIlJk0TcdrBGRi4jK8/W4j5hw2cB4MuAg8LCIfKKq1f1hYpdDbRA1L2lWDDGEsJcOOhuoai9wJ7FyfOcMJKzaJo2BXMv8u1Z6Y839Q6ROjGTPeCPQKyKDJRX5/5ZoiVjmdRkA1gHbyuzYcRzHaZ/59qXmOI6z4DCzPhG5oOTqR83suU4di6qeBtwOHDKzu/I8ryj8nwDuAG4jVhc/y3jr/3HijP+SKTY/bSKFNXQD16vqSyGEQocCM9smIm8iBiMVr/odRDvAMS2FZPH3wvQf8vwmBct9wLE6WhR/BHyUmGw5SDyX5ixp9v99wIY5VP2fkqQlckbNw1uTFSbEBN6lwK50a4lkBxiSNeOaVtdPYyUbVfXl6dQscRzHcerjCQDHcZxZRkTOYOrguR7PpbngjmBmt4rIecCIiOxX1TtDCCOpUrgly7JXgSUisqfqAn6IGNRN9Tf8b2IL80yMn200s0tV9c+LqpxpBnkIeCXd2iYFWEuAkRBCvXGJBYeqLiYG9ANEQcVPFSy2l/S+m9k/z9SxtcGAiFzNHLtOMrNREWnUcXMq4/aLFX6cfvYQRRlXAlvNrGwXxp7kHNFyAiA5KbyN2FnTrKCk4ziO00Hm1Beb4zjOyUZqyb285OojwPc7eDiIyCnp126iMGEfVbP/eZ4fYnLL/wFgK7Ga3gVsr7P5mWz77haRm4iBxpTq51mWdYtIP3A8edBPINkBriaODSwD9pjZ7jzPD6bnVxPHCs4ws1FV3QbcUK8DYYFxBfAR4rmySVW3hRBqz4EniBaLiMirM3x8LaGqmNllInLabB9LLSnZVzjCkc7RM1JHUeXhQ2ZWcXVYSxSBHAW+m+d52Y6co8QxgHModx15NjFJMVMjQY7jOE4VLgLoOI4zu6w2s40l190P7Cg5x1uP6uCiqe+IEMJxM3uUqAlwwszqWYXNdMvvcuCGLMsaBimqulJEbieONTygqqemYKqaM4BvAt8lWgb+jYh8OrVcQxReu4jYHbHUzM4G5lwAOU0cYfy9HaZApC51kWxPt5kaBSnLchG5jvl3jbQYeF2qsgNgZjtE5FD6DFwHLCJ+RkuPDaX/N88x2VayWfqJ9pqO4zjOLDDfvtwcx3EWDKnSqCKyuuQmdtB5m7WvEy/sR4gJhqbadEVkG/Am4DdE5PE6i+3uyBG2xhVp5rjwySzLeoiB0f8FXGFmHzGzh2qTMmZ2PtFbvRJc9ZjZZmI3AMBhM6uo5A8TdQNOFqGzp83sJuBzwNXMzvvcEVJHzvVEpfw5h5lhZvUC75XAKVX3R0VkO3BERE4zs/PS41vzPG93RGUnURyzFGb2e6ra3+YxOI7jOCXwEQDHcZzZo1tE3kjyZW+RUTP7aZ7nUyq6t4KZfVVEfjUd0+drq7UpkF6cnj9Q0QEIITTjTz4bld+1wPuJYwmTAqdULV1G+j5MrdPLiZXSav6dePw96f4JEXmG8XGIF1LVeD2xi+KJ+aB03wmSY8LnZvs4OoSa2bvmqvBfGgE4WOfpdcQkQIUhICee25eLyEriZ+A77R5HCGE0y7JvisimMusnAcFTgJfaPRbHcRynNTwB4DiOM3v0m9kFJYONYRF5vtMHJCL7zewWoLsouWBmK0Tka8AK4EFV/UyVZd5UzIaPfBfwXuBR4MWC508QW/tPJQZPI0Sf89rq5sPEBMCvEMUMXzKzV/M8Pw5jQfAT0/EHOO2RLAiXmRkicqje+ZqcDK4RkYGZPL4WGU3OFEVcyMTruiNm9rKIrAAuI34W9ptZR2aGROQlMzskIsumXnoSK4DNWZZty/Pc3QAcx3FmEE8AOI7jzBJmdkoZK63EfqbBlz7N9w4VPZcCqbsZtxm7A9gDPFW1TB+xQ+BIbaAVQjikqjPlAlBNH3Cjqr4aQpiQ1EgdDM9mWfaqiGwgCh6+Utv5kFqmi9TtnbnPfwVuEJERM3swOUMUBdGbzOy9IjJnxyPrtf+nz93ZNQ8P5nk+qKr3EgNugB0i0ilhyl1pxKDMPH83cImIfI46ooaO4zjO9DBnv+Qcx3EWMqqKiFzYxiaenwUxtQGguuV3MfCGNDeNqq4iCuR9H/iEqk6qDJpZverldHMWcE6BuB8AeZ7vDyE8G0J4aR6I1DmtcQPRnnGZiNxCgV1llmWLiUmCntrn5hIisrfOU6cSP4/V/K2qrgcuTvdHzOyHdC7gPgL8hJJigElnY32HjsVxHMf5/9l7+zC76uru+7PGedI8aUxz8+ROdtKUpmma5k552KtIKTciRqS8iYiIiCCCIiIipUhTSrl5uHKlKUUEBERUUN7kReRNRFQERESKEelvI6aIKaZpGvekae6503Ea0+ms54/f7yRnzpwzM+fMmbdkfa7rXMmcs/c+v7PPnjlnrfVd3zVCXAHgOI4zMcwxsxUtyv93AN9o83p2kef5rKpxgC9UVfKnM/hzo9I/32dmp4rIyen+ZcREwIPVG6fqY31HvrFltpldIiLP0uZxhHme7yMiRxIDsCdCCO02ZnRGgZm9IiKHECcVrKPG2DIlhU4kjrWb7NQbUdkJvIvd/hQQfx+fE5HTieMrIb7uJyq+HaMlhNCvqg8DFzI4+TAsKdlyBu4D4DiOM654AsBxHGecSe7/+6fe3FbYQPvd/4FdUuKVxL55gJtU9W9Ta0C9wCFjt4He66vu7yQa8NUyUr+AsWB/4P2q+omhgqA8zztEZJqZHZJMzv7QzPYRkXXAPxAd/tdXHeNDwGVmNlNE7sjz/LyiKOq2UTjjj4icAxyafnyWWLmuZjZwNi0EsRNA7dohJuH2o0rVaWbrU3LxZHZ/1yvTNdxOXkm3VkdeHqqq+4YQNrZxTY7jOM4QeALAcRxn/OkUkbewuy+3WdaaWbv6eGtZBHwEmJN+vtDMvkh0u9/OYH+AOTRuJ/vvde57jdaDhVGRervPBZ4C1tbbJk05OBy4TkSWV+0LuyvE3cA5qnp/CKFfRN4AzBQRzGxu9Rx2Z+IJIbxMg5F1qfr/MSbommyBeuqV5Qwc/wcQzOycmhGjD7a7vSWEsFNVb6f187cIODrP81vcDNBxHGd8cA8Ax3Gc8WcGsWe3FXYCPyyKYqwq6dPZHfwDTE/meBBn3ddWIPehcTL5p3XuG+388dGyADhriBnkHWZ2GkP3Js8G3kZ8HwGuM7NNQLeI3MjEv0Zn5OwPnD7Ri2iCegH8mxjsa3CIiBxf9XMv8O0xWtNzQKsV/BlmdpSI1I7ddBzHccYIr1I4juOMPwuAFS3u20usYI8X04hVOoAeEdlS8/gidn+WfM/MdojIdGKV/MU6x/vnsVhkE3QCZwLfAe6tt4GI7CC2OzRKkq83swdEpKKGeE5Efjv9vz+1S7QFVd2HeL1sBrrb1b893uR5Pl1EZpnZ1vGo9CYlxxxismZDCGGQUV1KAl0EtDqJYyL4WfUPqf//5NqNRGTfmrvWEv0P2o6ZvSYiTxHbhpouLCX/jKU0UOU4juM47cUTAI7jOOPPCgYado2Y9GX71fYuZ0imAb8HcUSgqtZW9aeZ2fT0/xeAbwLHAy9RX65cm0CYCKYBF6jqEyGErTWP9QM3EZUQJxADyD7S2EUz+zsReUZEXqgE+kP4I7SDU8zsPBHZCDyZ5/kTIrJuqkwqSAmMI4C3Es/pZbReLa499iJiW0Y38FgIobo9ZSlwAzEJ8OU8z6+vVc2Y2cEicgJTm2XU99qopo+Y8CrHYgFFUfSo6reAk4BGypqhmAm8F08AOI7jjAueAHAcxxlHVLXDzI5p0f0fEXmgXjVzDOkAFqjq9DQN4JU6a1pMDOq2ishZRNfxkvoBR8nQ1fXx4gBgpapeXjXloJLkeAk4Bzif3evsA/pEpG+cq/C9qZq7HDhCRFYBpap+E/g+8CrRGG4r0DNRCoE8zzuAWSKyD9EY8gDgncSJDzOJ3zcerVJNjApVXQw8QDS/6wceUdXTq97Lc9nt2dApIg8Tz1Vl/8zMVtNawDqR7KriJ/+C9zD871IJ3D3G18Y3U3Ky1otgpByvqteFEDa0c1GO4zjOYDwB4DiOM74sFJHhKnaN2EF0MR81qjqbaHa3FXhumKTCAmIlvKR+9XY27KqEb6O+U3mFHjPbLiIT7bg+DXifmX2VmjFk6XXspH6/9SCSDHtFOuYzNZXo0fIgcAy73dw7iQmWj6bbFuJ7sgHYnBQam4hTIsoQwlDvRcuo6jRioL8U2Bf4AzNbBOxrZkvr9HTvAK5q43pmE6vfle8xBzDwO80/VP3/eaqSUWntZ4rIRIyjHC27gngzmyMihw23g5k9VhTFmI6mDCF0q+oDDDYjHCkLgKOBz7ZvVY7jOE49PAHgOI4zvihxbFcrBGKgN7oFxMrhamIvfI+ZXaiq96UKYT8x8K1uUZjD7krpIAUAsLDO8WcAO+tI1XtTFXiiEwAAC0TkMlV9TwihJeO+FPxfBXyQaCD4kqqeB4R2eAGEELbneX4xMUA6JE0yqGZuuh2Yft5hZn0ishPoU9UdxMkL3cRrpx/4Sdq2l5g8aJT8qRy7I/3734nv9Vxi3/w0M5uW5rlPq6ytjrqlB7iCNs57N7ONInIHcbzfNuCK6sSLmd0hIoHYdvBiTVJGiQqP6UwtNpMMJpPHwf7EJMhQbErGlGOOmd2fRi62Mt1kOnBM+js0Jkkrx3EcJ+IJAMdxnHEiz/MOM9uvRcfrfqKpXjv6eDuJhl0z0+3twMPEKm0vMdBYVLX9Qna7jPekNWRVj8+vOf6hxLnqP1PV60MI3VWPbScGbAuZHBwGvF9VP9tIBZEqxocBb0l3/RB4NG0/h/h6ZwGIyCHAsUQPhLZIrlP//0XA54jB61BMrxOA1xrCtY0RtLL0AV8EPt1OCXpRFFtV9QLidbm9VnWR+v0H9ZSraqeZXSwii9q1lnGkz8wq/+8wszeJSMNkopntFJEvUdX6MMZsAB4FPkRrLT6HEv/ueALAcRxnDPEEgOM4zjghIjPM7A9o7W9vD/DdNpq/9bA7aJ1F+sJuZt3JZHBRZUMz2yf1dkMMal9mYAKgdgTZ+URDsB0Aqvo3VcF1L5NrTN4MM7tARF4gSsUHYWZLROQ6M1sGICLbgIuJgW03URVxAPEcbjOz12ijKWAIoV9VXyD2e19nZivSpIXJTg+xheGyVhUWQ5H6/esZTdYlKVPex25vgKlGSTynmNkMETl1qI1FZD1wa7XHRToHGfF3fxPRN6ItixORXuBrZnaiiMwZdofBVAwj600PcRzHcdrERJswOY7j7E3MFJHhJLt1MbPttKn/38z6iBX/SpBakmTgKbh9seoxkrR7n6r9ayur/1j5T/IWWJ5+nA68xcyqq5Q9TK4EACKyBLgsyfnrPT4DmCsiHelczGK378EOYCVwjZl9EThXRB4uiqKtawwh9IcQXgU+ICJriN4Nk5luM7scOG8sgv8WWWpm54vIVDP+A+LvrYj0AyT/gqHGF/YB16VrpvoYC4BbiSqW1bTxe2BKJDw9yikl72z0e+g4juO0B08AOI7jjB/Taa0/FhEZYGQ2GlIQcRVwDXAfcDvJ8C5V6p+sea4NDJQRP0T0I+gnmtA9VvXYvgx0Vp9dE3B1MzklviuIrQD1go91wCqisd5molHZ3ZUHQwglcImInB9CuK+64tpu0nN9gjg27QmiomIy0UdUiJwjIp9psyFiy6T39YIpavxXYZuZ9aaJC6cPs+0zwCPVd+R5TjINPBSYaWYfZLB6Z1Sk9/uhURxiKa0bCTqO4zgjwLOsjuM448d0Bkrnm+G77eqhTpW6DcTKdT2eJs5rP4oo43+AGNRV9n1BVc8G3g18i4HGgLUJgH3MbJfnQZKzb2FyjAKsZgZR1r+OmlaAEEIv8GlVvQWYZWZbi6Lor9mmj8Zmem0ltYE8oarPEiXtpxODuok+n5uBe4EbQwivTfBaajmC6Hsx0edoNPQmc8fFwMFDbLeFOHFhQMIwtY28g3itIyJPExNy7eZR4u9SK20AM83sULwNwHEcZ8zwBIDjOM7UYNyq5iGEPlW9Dbgf6K9XxQ0hvAC8UHt/coWvDrLm1JFc/4LJlwCAKKm+TFXfWc9rIVX2x6y63ywhhB15nn9RRL4JnAB8wMyWpUBvvM5tP1GF8CDRpPDFsVRAJPf7GUQzxK3AhuF8MVR1MTHZNWOs1jUepOkZfcTgfyj5/yNm9nSd+6cTlS4QJ0PcwNgkrTYT25VOaGHfacAbVHVGSrw5juM4bcYTAI7jOFODce1bTmqDpnu3k4dAdQA4g8GVwPXEwGOyfQZ1EGeRf0RVP9NoKsBkIikRNhEVCp8XkWPN7J3EkYGLGLtzvIOo/HgCuAt4qZ0u/0OwELiZaOTXB/wtcPkw+1wEHD7G6xoPtgGdZnZW8qWoxybgijQFoZY+YtJuBrAqhPD02CyTHuDbxN+lps0qReQA4vs8XtMLHMdx9iom25cvx3Ecpw5m9jZVvWWcgqzRUG99tWPoNplZ/whGyE0EHcQpBs+r6tpGDumpn3oGsaJ6APB6orLhOeIIwB0hhMp2C4FDiImPl8YqsZAq4Q+r6uNmthQ40MyOIrYHzEnKjFaVAf3pto3YIvIA0Qdi2Ap8m1lMDOY7iNXi42mQAEhqgcOIbRJTmmQA+O9mtjyNmqxHZeTixgaP9wJnAZ0hhE1jsU7Y1eYTiK0ITY+gTFM35uIJAMdxnDHBEwCO4zjjx05iANW08ZaIHE40qbujnUkAVe0ws8WVL9whhK01j88hjQwbYaC3kTSqrIo/rP7BzDaIyGSuri8hyqOPoUHrRapS3spgw7I+4CmiP8J2EVkKfBVYRnz/302NOVu7SdLpkG63JAO85WZ2sIjkxOrqLOJ1OFRCoIfYI14Cfw88H0KonQAx3mwmvq4Die/NjUNsu9jMrk5jLqc0IoKZ/a6I3EBMfNQjAHc2SjClvxttMRIdAYGY8Go6AZBaWA6kTVNPHMdxnIF4AsBxHGf86CWa7zWdADCzmSJyDjG4bFTha4UlInIjMUC9SVU/WQn0VXU/YnV1EbG/+5YRHG8Lg/vkF1b/UBTFVlXtJgahk5WDgI+q6t/WBlSqOg14D7Bfnf06ifL0w4BHzWxWUgBADNyaDohGS1r/S+mGqk5ndwJgqO8B24kJgJ5JpDzZAJxLVAG8TIMgMc27P0dE9hRH+U4ROZWhEza3hxDWj9eChiKE0Kuqz9N668Ub2rkex3EcZzeeAHAcxxk/eohBywHN7pgqgAeLyAWqurKNAdkSokM6RHnwl0gJBjNbAZwgIp3AXFW9g9g/vBKYDdwJrK1eS/riXzIwOD5IVafVKAheZQKC4Sa5ENigqnfXnO8OM5s+VAuDmU0HSDPRP0VMCrxCNFYcM1T1L83sDKLJ23eBtSKyEdhcMeerMjPc0urz5Hk+S0TmAL21bvNjSUpmvJgk5v2NWjSIgeefM/mMJkfDUN/Z1gG3jdM6RspXgb9qcd8D27kQx3EcZzeeAHAcxxk/eoDvASfRgiN5CjhPJZqujcWYrMp4sY3p+bYTA8WZRCO/BcTkReVL/YHAB4jBRzWB3UkFiJ81ixk4LrCdKoaxYh8zu1hEniVWnivsEJFvAacAc+vs92rahxDCdlVdbWY3iUj3ODibf0pEngPOIao3eonJgPWqut7M/kFE1gOv1Jvu0IikGlhgZgeltoY/NLM5InItcQLAuDJUAizP88XEMZZ7UvDfEDPbKSKfI77XqOqHiBX0G0IItb+b48l6YstB06NPzWyBqmbjmVxyHMfZW/AEgOM4zjiRTOGeEJHXqC8fHwlzgYtU9fwQwqhHA5rZjjRerDJl4LQ8zx8siqLPzDbXPDadga7eBwKnq+rlNdX9bxOrr5Xn6BCRQxmYAChGu/bxQET2A65U1XNCCN0Q38dktHeMiJxN7K+fAWwTka8Spf+7Apd0bja3a02quj9RBv8T4PPV5z5V959R1bXA1cAZxGTM8cD05L3QB/Spag8xEdNN/YTMTKJKYx9i8qczqUG6gRdFZA3REHDSoKozgEuJxod7BSKyFng4me8daWZXEt+zg1T13SGE1yZoaTuIppgnNrtjus72Z/w8CxzHcfYaPAHgOI4zjhRFsUFVH6b1BEAHcBzwEG2Qk4vIJmKlTtNd+4nIYmIVOxCD9oz4Zb4bqDaB6zCzk0XkOgZ+UV9HVeUvfZn/4zzPv5jG1sHUUABUOBb4oKp+uhJsV6TowLmqOi0ZzW0bp175DwAfIb4njxEr/ANIiYCKVH4xcIiZvVlEDmL3tTebGn+GIdhBbF95CngSeHaSzmk/nKiS2Suq/4m7Qggb8zyfAbxbRGan+xcS/TsmKgGwk2ge2XQCgPj9dLK3CDmO40xJPAHgOI4zziQ5+HHsDrqbZRawWlWfqFSlR8FrwFfMbD8R6TSzTERWqOr6EMJWVT2bmHB4ldgzvsXMXkwu+ACLzOxoBvYfbyeas51Udd/+IrIvu6X0m4CtxNaCyc5MYlX55XTOBwT5KSmwVVVR1ZnEoGsxMcDuJSZRuoGtlT78UfJ14P3EgHzIcW5pretVdb2I3J9eS2Zmh4jIHwDLidXiXS0pZoaI7CAmcV4lqjWeI77324uiGM+xfyMijfxbBqyihdnzU5hgZrel/y8imk9Wkh9bzGwiWwD6iMnFXppveeoEfr/tK3Icx3E8AeA4jjPeiEhpZjcA145iRNlS4GOq+onRzGEPIfSp6qfTeLgTRWSGmeVEx/odyVX8U5XtVRURuZ2YvOhIsy4s5i8AACAASURBVOVPy/P8/qIoKj3lPcC3iJXzyhf/xem2If28nRhgToUEAEQ/gCtF5DQGex4AuwLnS4nV+dlVD1XMH19Q1VtDCKP1b3iaKO1/ZaTvfTLL6023LaSJAAB5nk8D5ialBqlNoF3JivFiBnABg8cy7sn0AFenZA1p4sHi9FgfcHtRFBMmoU+tMpVEX7PV/A5ggap2Nhpr6DiO47TG6yZ6AY7jOHsbZVna/Pnz/xFQEVnW4mGEWH3/QZZl/9zV1TWa9fwqy7JngJ40tu5BESnKshwkZy/LkizL/t3MVohIxQBvhoj8KMuyfyzLkrIsLcuybWb2VhGZX9kGeHnevHnPdXV1kWXZ64C3EqcQTAmS6/28LMueKcvyl7WPz58/v4PofP76moemEeXYBwL7ZVn2lbIsW07alGXZX5blq2VZjtoDAqCrq+u/urq6tpdl2Z1u28uynJCgS1U7syybM2/evP82f/78/pGcpzTy7zhi9f/XxnyRkwQze1pErqmYOWZZtgB4s5ltT6M9byzLckKTOFmW9QNvJ3pINMs/A4+VZfkf7V2V4zjO3o0rABzHcSaA5A6/iijZ3afFwywWkYuBd7RhPVuAv063Xajq7NQesK3iKG5mr4jIY2a2XEQ6zGyuiLyTKPvvTcfboKo3ATenffpFZFc10sy6RaRtxnjjRKeZnQi8qqqr6lUmzaxXRBrJnTuIiodp9R5U1Vnpsa1DjLer3n4ucLCZTQNeFpFXa9sTVDUzs770/o2HP8FoOcTM1qTk0tOqet4IKsDLgStoYbLGFGaniNxc45L/hJkdlZQcr06SyvkWotqnFWab2UygLYkux3EcJ+IJAMdxnInjZeCLwJ/R+t/jY4HjVfXRMQrw1ojI8cD2PM9PF5EXk9v4zSLyYWB2agM4CbiJKmm5md0nIm8Fjk2j514qimj+XxTFTlX9R6JUecp8FqXg6iPAT1X13pogq19ELgdWEiue1YH+DmCbmV1ZFMWAgCbP89npXL6XaKz4qKreCGxulAhQ1UXAdWZ2aDr/G4GVqvp4kl53ACemMYYdZvaFPM8/W2XCWNlmNnBQus0D/gV4hjjKsaf6+fM8R0Smm9kMEdlZ+/hoUdVpxGpxxcF/ATGw3zDEPrOAC8xscRqTubfwNPBo9R3p9//VCVlNA0IIO1V1HdGcsVlmiMje5OfgOI4zLuxNLrmO4ziTihQ83mRmo+kJ7wQuNrNF7VnVIA4kyteXp7FvGUDyBritars5ZrYyBXEAFEWxnTiP/h3Ae0IILzGQV4mB8VRjDrDGzFZU3xlCIITwGeBPiEmA64HPED0UzgPeKCJ31B5MRFYAlxN9FfYH/tLMPsjQiZFlychvH2IQvz/wlqp9ZpvZ6SJyIHCAiKxi8Dz2Q4mO/t8gyuc/CqxJ991au31KfqwWke8SlR2LaS99ZvZjEalUjF80s+FUIqcAZ1b8C/YSuoFrp5BHw89b2SlV//cmVYfjOM64sDd9YDqO40xGNgA3ALfTelL2QBE5Q1VXt1v2a2avptFxmNlhInIsUbWAmd0jIicQ3cdJjx2rqo9U1AghhO00nhX/CjEBMLOdax4n9hWRVam6OaBSn5Ij1zdxrOlUOdenSvZw18IGEdkAzDKzfmILwNeJigqAHhH5YXrPpgPrRaR2YsRp1J9EMQ04AbgTeKTq/g5ikmCGmS0Vka/RxhFzSVnyMDHAzYBnG00cSK7/amYr96bgP7XSPGpmz030WppgfSs7iYgnABzHccaAveZD03EcZzKSgp67gXfS2rxsiAHbx4GvAS+MZj2qOpsY6HWHEPpFZDWx0nuQiPQw8HMjAPezu4VhH6JkuwSeH+65UnJhO1NnEkAtBxOTN+cSe50bksYD7kdMdmwF1lfM24jn6kvAYWa2U0QeB24ZKpkTQnhFVf8EWJHel2erK8JpOsBfq+ojxPO7NoTQW3OY7xNbNwZ4UKQg82UGS+/7zexLIrIitXS0fcRcShg9MuyGUZVytYhMGRPJdiAi24DrkrpmqtC2JJHjOI4zevaqhjnHcZzJSKpmHkasuDY7Lquae4Gz6gR6I1lDxUn9PDObJiJ3Eiv9HcQEwMFEM66nq4+vqsuJgWT12LtniAmNbcP1iOd5/g0RObrZ9U4idprZ9SKycoh+/WnExMiJxOp5t4gE4BLgtdSzP4c41aEvmflVn+Ndx2pzz/0s4ABim8fvE5MTPcBPgcfM7JUazwCI7/MiYsKjnAhjwbSOqxidd8ZU5RbgnCli6AjsSir+7xZ23QG8I4TweJuX5DiOs1fjCQDHcZxJgKp2Eqv4V9B6K0AP0Q/g80VRNNUKkAL5h4Cl6a7NwDF1+vbr7bvGzP4ymdGRJOnPiMhFw828V9W/AK5sZq2TjVS1Px+4o15ftqruD3wbmFvz0H3EhE1P7T41+58AvNfMChG5fqjtUyJnH2LVf6eZbSmKYsjjTyVSMuXDxATA3mYQt44YELckqZ8oVHU68G+0Jud/ewjh0eE3cxzHcUaKmwA6juNMApLc+xZGJ5edCZyfRqi1QvVnwiyiZH0k3CUiu9zHRaRDRFaY2U2qOqREe5QGiJMCEZkGXAYc0WCTbmJyppZhkzRp1N9q4GQRubjWeLAWMzuA6CfxZeAeEbldVT+Sqv2DyPN8jqqORnUy3hxGNFjc24L/nWb2ZTPbONELaYF+YNNEL8JxHMeJeALAcRxnkhBC2AZcTOtzswGWARenqlszbKZqhB8xmfCGVFEejleAq4EBrQfJPPCePM8PbrSjiGw0sylV0WzAQuBOVT2ozjnbCFwAPGNmr5rZOmLP/0rqJwaq6SXK7fvNrDeN32uIiKwkjobcnzja70SiT8GTqjrA1V9VjxWRHwA/VtXV1RMcJhuq2qGq+zH6NpmpShCR6xuZIk5yprN3vmeO4ziTEk8AOI7jTC6eJvZfj6bH9xRipbQZtgM/NLPqAGORmQ2oHKvqAlVdmFoWgF3zx+8D1tY57oEicsMQVeZuEdlTTMJmE4PtA+r07T8GvAt4j4i8iyj93zxcT3+S+59vZueIyLlm9swwa9ha575OYKmZ1aox3kH0d5hFvF4mc1V9MXCjmbWqbpmymFkfcHUIoXaKw1ThYFq/tibzNek4jjMled1EL8BxHMfZTZZl/wH8TEROpPXxeL8O/HaWZY+XZfnvI9mhLEvLsmy7iJxU9bwmIo+UZblNVTuyLDubKC8/D/gfWZZ9uyzL/0z7/yrLsn8ws7eJyOtrDr8A+MMsy346b968TV1dXdWv9z+JRnR/xJ7hSzMfeCvwtbIsdwVsZVlaWZa9XV1dZVmWW8uy/C8AVZ2RZdnryrJs2A5QluW/dnV1vViW5StdXV1Dtg1kWfYSUTVQ6bf+L2JS4Hbgzq6urv+q2rYX+F2i+uMa4KWyLK2VFz2WJOXC7cCbKj4TexH9InIP8OmyLAf5S0xmVJUsyxYD1wG/1eJhflSW5ffbuCzHcZy9Hk8AOI7jTCLKsqQsy64sy2bTfBW/mt8Etjbz5Tk97yHA/0h3/Rpwd1mWZZZl/zdwF9EB/teJ8+MfLctyV29vlmX/KnGI/RuB/6vm8IuIaoDvlGX5b1XP+V9Zlu1L7J+v3WcqIkQTviVZlv2gLMu67ucpofJm4C+Ao7MsW5pl2a9nWbYzy7KeVgPxsiy3l2X5nSzLHgC+BzxFDJ7vKoriVzXb/jzLsq8C94UQXpikwf++wKeIbQ17QoKoWX4B/PlEG/+l63V+lmX/OVSyqposy2aY2VUiciStf998qizLZ1vc13Ecx6nD3jY+x3EcZ0pgZl8gzng/tMVDdALn5Xn+rIg818T4uIuJFeRDiJ4Alfn2ncQgvpqDiDPsgTh7XlU/b2Y5cEqdaq2a2a2qeiHwQtUos5eJvfCtuIRPJP1ppN8saj5Pzexo4GZVPSuEsKHOvrOAzwFLgI40SaCHeO7XqeqTwP0hhF3tEWmc2mxgJ8OM4Et+EsO1C1S2m5So6mwzu0JETpjotUwQfcSWkhcmchEpCXMlcCiwSVXPA8JQ15+qzgAuEZFTgEnrLeE4jrM3srdJ6RzHcaYEIrJRRK41s9EYAi4UkYuIFekRkSqNHwDeRupTr3q49gv/H9XZv1tEVolI3fGBInII8AUGqhvWmdlUHFXXKyJXEPv7ByAinSJyOHBjg0kInUTjwI60/TTi+7QQOJIYcH2u4t6fpgFcRRwn+ABwxAgNGqckqjoHuFxETmXvLVY8b2a3pQkhE4KqdprZKcBJxGvzYOByM5s9xD6VUY1/yuiD/6loeug4jjOp2WO/PDiO40xlUnXtURF5lMGB90jpAI41sxOaCRZDCH0hhFdqqsN9QK0MebGqDkouJFf/S2k80nA/4MY8z49W1Y5kblY3YTDJ6ScmL84jSu3rBWpHkpIA1e9BSuxcA5TJ5K0es9ltgrYEOBpYYmYHA+cQVQR7HKq6ALgZ+MhEr2UC2QJcKyJbht1y7Hk9Vd8XzWyBiNRNACRz0JOAyxnl9Zl+L/YUg1DHcZxJgycAHMdxJikhhJ3Equ9oZn9PF5FLgaWjXE4fUNtHMBvIajcsiqI/hPAYsZ2gUWV/uYh8DjhBVTtF5O9Gub4JoyiKTcA5ZlavV7mTmAS4Bzgwz/OOtM9OYA3wdhFZDdxLPL+9xKDnQWBVCKESAG4ys5eAPhHZCvyoZmLDHoGqLgJuAk5g73aAvwN4ZCiZ/XgQQugTkW+xO/nXKyJfBTbVbpsSXBX1SkOFwEgRkfUMTjo6juM4o8QTAI7jOJObdcBNZjYaB/B9zeyiipy8RfqAH9fctw/R4b8RjwKrgEZ95vua2XXAqcQ+5wkNdprFzKo/Q18TkfOJAUu913EAcJOIHFBRAoQQdoQQXgD+mljRfxfwFuDtwNnE80fadqOInAu8GTgKuL4oit4xeFkTgqqiqkuJwf/RdTbZBtzN3iEJfwm4biKl/zU8D7wTeBPx+vxUSk7uIo29VOBKM1vYhufsB57DFQCO4zhtZ2901HUcx5lSpH7ou4jVtVbpAc4JIdw9inUcndZRkf3vMLOzi6L4Unq8k1j521apXKYe4jNF5CYa93J3E4O7M5lCRoBm1isi54YQ7oAYBJmZptd6cIPdSuA8M3usKIopNdZtrEjXzUHAjcQgcgBm1iMi5wEvAj9gCl0jLbDFzM4SkUebMO6ccFR1GfAVYntPO9gIHBNCWNem4zmO4zgJTwA4juNMAVT1COCrjC74eQV4SwihbHENi4AvE4O1CpcBf0tMCqwys/1F5CHgmqokwDTgWuBDZjYtTgrcI9hpZiuLori+coeqdpjZfsADIlLP/A9i3/+lwB1FUQxZ5U1qgcOJBmxbgLVUJVjyPEdEKhMaeoEtk6hyPCzp9R1HlI0vZbAysZvYKvEpYAXwNfbc1oB+4G+AK0II46LuSJX7znTrN7OdRVE0e4x9gRvM7Nh0LbaMmSEiO4ALQwifHc2xHMdxnPp4C4DjOM4UIPWXX88oJNBmthRYned5S60AaZzdlcSgrMJvED9LPgJ8OLn8X06U9Vf22wmsBFaLyJQJTlshhNBfFMVLIvIuonS6XjtAJiI3icjVqjrIQ6GGE4mu/7cCXwd+SFRKoKqIyP7AQ8BPzeznwNWqOrPegfI8n6mqR6vqoSkpM6EkA8mPm9ldwDLqB/8XECXnfcDcOtvsSTwFXDlewX9iqZl9BfglUIjIsc3snNRJ1wLHjzb4BxCRXuAS4LbRHstxHMepz578Qeo4jrPHkOTitxKr+C0hIh3ASSIymlaCR4CK6/3TwDeI/gDVTuEzgbekWeAAhBB6zewa4Bbqu+VPRfpFpFFC5mXieWpkYjaNmDT5gqoO1TM9g4Gf1YuAy1V1VvIgOAM4FuhIowRPAg6sdyARORS4ndhnv2yI5xxzUuB4JXHUX72ExXZi5f/uKkXDAvbQ7y1mtgG4gsammWPFiSJyPPG8LgPWqOrykeyoqtOBC4Hj27iee4HPhxC8PcZxHGeM2Ftn6zqO40w5zOzV5Bh/J63LoGcTq8TPhxAGOXkPRwihL8/zu0Xk3nRXfwiBPM97RaSf3QHaMmAOVRMMiqLoVdWVwC+IVb6pLuXeSdXrS1X1RcA2M9sqIi8Sjf0+R/QEqA1epxGD9ydVdRVwXx35/qNE479KG0APMfmyPSV0OpJsurJ9Pw3MFM1shojsNLPt6b0ad/I87xSRo4kqkQOoH9BvJLaW3F1zPn6rwfZTGjPbISIXA08N1fefvBKOAM5Kd91oZs/WayNJoxTPI16P3zOze4ui6K7djt0Knl27Ahep6vlDKRHyPO8EVgN/Snu+S/YBt5jZJXuSuaXjOM5kZI/7IHUcx9lTSb25j5nZN0dznOTSfVmrUwGKoiCE0J9uAIjIPwHVVbuF1JkDHkLoqSgB0pzvPYn3ET0SviAiy9K5WUd09H96iP2WEg3w/iLJ4ncRQtgGXGBm7yVW+88AVqZj9wO3i8ijxMTAa2Z2rZm90OB5Hk/HOQ94tbWX2DqqOktEPgLcTFQp1PsOsonYLjIg+E/JlT2yBUBE7jazB0dg+rc/cANwkpmdBFwhIotqN0qJgg+Z2Z8TW3GuFZEz0/21/KT2DjM7nHiu65LGdp4MfJSYxBo1ZvYEcGWDJIXjOI7TRlwB4DiOM7XoTSqAJbTouJ0qx6cCP1HVT7dp1vh6ogldRfa/EMiIUvgBFEXRk+f5pSLSDXycqe3qXp3EeCOxgroM+A7wSjq361T1dGCNmZ0sIvVe72ziyMSjVPVSM1tbFMVOiEkTop/A89U7hBBQ1QC8hxiI9YvIjkYmgEVR9ADPjubFtkIK3pUocT90CCPIAJwPPFfnmpxtZnP2IANJiAmcp4A1w5lBJpaQAvN0Hg4AVFXXVycPzGy6iPxeagkBmG5mK0XkBQa//2uJ533X9AUR2Tc914baBeR5DnCqmV0LzBjt+2Fm/SKyVkQuTB4jjuM4zhizx2XSHcdx9mTSF/1ArASOhpnAxcDi0a4pEcysun+5gyESFEVRbCf2gH+eqesJ0Gdmmys/mNnniB4JnwAGOJiHEDanIOyTZtbIN6ATOMzM7hKRy1R19nALCCEQQtgRQtgeQuipqZrvU6soGG+SIeGlwD3ENoZ6wX8/USFxdgjh2QYJqdkiMqGvZQzYDlwWQhjprPuemmtnGvA/azdKLvpbqGoFEZEFZnZ+nWO+ZmY3M9BctGEbiYgcDKwRkX3alIx5DbiICVCkOI7j7K28bqIX4DiO4zRHWZaWZdlPieP4FtH6SNfXA/tmWfZkWZaj6rsty/JX8+fP3xf446r1vFaW5WMQx71lWfaWLMuuybJsRZZlPwwh/O8sy75vZl0ichBTTwnwSxG5uSzLfwOYP3/+L8zsayLyNPCrshw4bbGrq6s3y7LnRWQ9MTny/9Q7qIj8BtEz4Kgsy/5PlmX/UpZlU6ZoqrqC6B/w4SzLts2bN+/lrq4uq3p8WpZlf5xl2R9mWfarLMu2l2VpDQ/YJKo6K8uyY4iGgycT/SAGYWa9InI3sS3hp1mWzcyybHmWZTpv3ry+rq6uboB58+b9roicSexZ3xPoIfpgfHWk5z3Lsn8TkTcCv5vu6idW6R+svtbKsuzPsqyTOF5xl8+GiPx2lmU/ybLsp5Xt07aFiPySWPX/JfAl4EtlWf6qsm/6/f1jYqvK77f4mgdgZpvTe/r9NqmQHMdxnBHgCgDHcZypSQ9RMr5xuA2H4Wjgww36g5vlOuBZM6t8md9e9dhCoqv7CUT3+1MgyttF5LNEU7jNTCHS69yVOEkjAHvS2MM59TwWUrX+S0Qjt+doUGklVncPBG43s5tU9YhmRveZ2TFEdcdi4Kg6bQenAt8GvkqcLrFkpMceClXtUNUDgWvN7HbgEBr3iZfEa/jCEMJmdk9GeBL4hog8pKr7AaRJAcMqIqYIfcDdZnZ3beCrqp15nquqrlDVAX34yQ/iUuAF4nWzkRiQD8LMniL6T1QzEziHmv7+1GpyPfAOomnlpSGE6t9dzCwzsxuIbQftYIuIXA40Unw4juM4Y4QnABzHcaYgqRXgeWIrwGi+QE8ntgIcqqqj/UzYBHxARD4BXEN0v68wm4GmgG9JTuKEEPrM7Bai2V3LYw7HGxHpoyppoaqdqnpynucPAD8AfqSqX1HVwyuvtYrngHcnQ8Rus4ZF4OnJcO0e4B5VPWwkrQEi8m2iL8OGtJZaBcFR7FZcLCcqSVpGVaenYP064GvAmSLSyGRyJzGIPU1EPhVC6AYws32A04GK1H8/osoFYJaZtWRaOQl5Hri8geHdh0Tkq0Qzya+ram3A/SLwTuAsMzsNWFvPPLAoih1mdg+D/zYcBqyo3T6EsDOE8HIIYW118K+qqOq+InIT7Qv+dwDXAnc08qtwHMdxxg43AXQcx5mihBD6VPXTwNup86W+CWYBV5nZ6UDLAXiq5L1GlDbXsp2BM84XichcUgCdqpD353m+AbjBzA5KZoWTFjOjKIr+qp8PFpE7q8zXIFbWlwF/Qqx4A7vO1WZVvRj4EdH87pAGT9VBlNCfCBxhZk/leX6PiDwdQtjSYJ+niEH+TGBdnUDrG8RgcCbwMDGwbJo0C16B9xKl/tkwu/QS/RGuTlX/XYhIL7DOzPZL7/3zQGXixYI9xABwPXBRCKGs96CZXSYiC9KPc4kjO88IIWyEXdfNJuC24Z5IRB41s4tqJgXMNLOLVfXxSuJlGGab2RoRObZNv487gS8C1ySljOM4jjPOeALAcRxnChNC2Jnn+WpgcXLvbhUVkdWqem4IYWu71lfFJuABYhWxkxh47koAVPGimZ0hIquIAW9bxoyNBSKyqebnA6i/3p0iUlelEULoV9X7RORZYuLkJIYYwQbMEpETzGwFsElV7zSzb4rIBqCnIqeuSsY04l6iA/w0YFOSl4+I1IqwDzHwP5f4ni5gCFWhme0UkUBsA3miwYz57cDFIvIDM+sRkaeqkgR7ggHgNmA1QydbalUOhwLnquqqEMIgH4jUujOHeO631WxTphGRH6XqvRERBS5R1dVpwkRdUnLn0qRAacf3xX6iSeYqBpoOOo7jOOPIHpFOdxzH2ZvJ83yaiPwlcBmj/KJuZp8QkVUNArRRkQLH1cRK91ozW91o7ndyj/+4mZ1TVRGdVJjZ40VRHFX5Oc/zZUl6vzDdtYMo9b+SGPQO2aqRWjAONLOLgSNT3/tI6CFW/L9DDC7XAVtHMFd+xKhqh5ntm4LHNwLHAksZwfVmZutF5F7gyqECzmGe/2bgQ63sO0noA/4WWDWU7F1Vv0cM+qvZBBwTQni5ZtsOopfGVcTEwWeI53hb1TZHAncyOKnUa2Zni8jd9a4TVZ0B/DmwkpisawcvAG8bQrXiOI7jjAOuAHAcx5niFEWxU1U/Txu+rIvIh4Cfqept7e7PDSHsVNXLzWyuiHSnUYCNtu1R1U+m2eU3EHvUJ1tLwIAkiYi8YmbvFpH9iGt9jdhSsXkkRmdpm7WqejaxpeNCohHg9KH2I77nxxOD8pKoqnhJVf+OODJyPdBvZn3JtwCgrzrwU1WI3wk60q2TqA5YltbwZhFZAiw0s9kjkIP3m9l2EfkmMemzvlryraqY2QygQ0R6R3B+2hWETgSVyvcNI/id+jaDEwALgXcDAxIA6ffobKL6AuBjwL/mef6poigqz/Ns2u/wmmPOEJG3E5Ugg4wIiWadF9Km825mL4rIhcTxhI7jOM4E4goAx3GcKU6e5zNF5ENmdmVN/3mrdAPnhBDua8OxRkUKTJcQg5H3MVgiPZF8KoRw4VgdPEmwjwbOZne/fitsI5oBbiBWk7cD/8JAY8BpwO8Qz+/CdFvO8MmHemwm9u7fCIR6wX0yt1tDrEzfTDSEa6g6yfP8GyJydAtrmQw8D5wRQhh21r2qHgw8RI2Xgpm9KiJ/VGPQt4xoFrh/1aYl8NYQwrqq7U4hqgBqiz5rgTdWJyVS8H8icXxju9ouAvCekbx+x3EcZ+xxBYDjOM4UJkmzP25mF7Qp+Ido/LVKVTcTx3S16bDNk557fTLL+z6xT345k0MNMKAnuyLhJ0rjS6Lkubum0t5hZohIf+X+lORYRHxNG4D+EAKpn/thVX2OWBU+g1jlb/aze590a5eLez36ia0Id5jZV4AXi6IYSu5/GnAk8TVXxlk+ls5F5b3ddY4maxvICNgKXFYb/DZ6ncT2jaeI0v7qvv05xPfv6arDbDKzzcD+VQaJGXCeqp5XOaaZPSUiL7J7okL1c+1KzqQ1HUxUbLQr+N8EXOLBv+M4zuRhMnyBchzHcZokz3NUNQNuEJFVItJWkzQRWQbcxWDp8IQQQugJIdwN/E/iiMG6LurjzM9qfv4z4si9O4lS7r+nSs6tqguAq0XkSqDasPEI4Idm9mPgw9R8NocQtoQQHiSOf/sD4G+IVeWGLRTjyBZiwHoO8LshhPOLonhmmOAf4F/MrA/iNAV2v+aFROXAk2Z27BitebzYRhyx+XT1nSkJdABxtOP3gI8ntQchhO1mdi2DzTE7iaM0dxFC6BGRB+pMRzgBOCIF9BRFscXMVgIvVW3zKvC5ijojz/MOopLgVmICqx1sN7MLQgjfHH5Tx3EcZ7zwBIDjOM7UZBaxN/7MMXyOfYErVHXJGD5HUyQTucuJsviJkyZEal3Z31Dz8yJi73aFk4iO7B+nztjGFMg1dEcPIfSnSuplwHuIo/c+QwzmxpsA/HVaw3vM7JYmp0fcQXwd94rIJcAzAGZ2BPB+YEXqGZ/K3GZm99Xp+58uIhcQr4dDgCuIsnsAiqJ4gaiKqE5yPUU6RzU8zuDrMANOp6pdRkSeNbMPEBMSlxLVJC9WPb7IzG4EFjf1CocgKQ8ebdfxHMdxnPbgLQCO4zhTiCQzV+BaYl/4WHMQcI+qXhJCeGIcnm9YQgi9qvqomT0vIhea9aPIYwAAIABJREFU2ZkTJBGvHbN3F1FCPZfo+v4asUe7evuX02PVhm5PERMabwLuH84QLz2+UVU3EnvtO4lmfSuANxOr6BlRxj0aE7eKrH8bMRjdCDxJrGhvSK+jv5UWkRDCVlX9JLEQ0V95zSKyzsxeFpGM2As/5TCzfhF5HLi8gRKik3iNVIow04ALVfX5EELlmvoi8Bjxd3wr8FwDj4TKNXBC1X0dwMlEJcoTsGvc5IukpFn1NaaqC4GbRaTWfHBUiMg+ZrZMVV8eiQmm4ziOMz64CaDjOM4UQlUXEwPNgxhfFddrZnZGURTPjuNzDksaLXg0sW95/2E2bye9wJtCCLuqqElyfRBROdFHrLBuqgQ/yWBtcXpsQ21QlOf5rKEmI4yE9BxzieqDhUSH+N8xs4WpTWQujZP//WZWikg3sNHMfioilakCG8xsa5W7/JiQElz7EavXL1aCXlX9eXpNU4EAfMDMQlEUgx7M83yGiHyB2OdfYQdwPvDFZoNlVf2gmX1ORGrf1weJ5ntDjR2cTRwj+EHa/PckJUICcfThI+08tuM4jtM6ngBwHMeZAqTgcrmZ3Swih0zQMtab2WoR+dJkquilnuqFIrKSOClg9nD7tIFNwFHVbuuTkRRQd6Zbh5l1DDHCr9/M+oH+NC5w50QaQFajqv/J1FAtdgPvIJpn1v0dSb/LJwGfY6DZ3iPAu5odv6mqS4lKE615aHM63vMN9ptNVBK9j7E9t9vNbI2I3GJm2+olRRzHcZzxYyp8mDqO4+z1mNksEbmMwU7erbLTzLYlqfVIWQJcB3So6n1DjW0bT6ok8RcDPzazS0Rk0Vg+Z5pxX9t7PaakYH4fM+soimJE89TTudnJEN4CUwEz6xWRyTQCchBpjVcxRPAPcbKFqn7TzG4Rkb+o2r+/jqHfSJ73NeBpEdmfgVX8TmBGvX1UdQbwMTN7/xAJoXYxS0QuB/5f4jjPZrwiHMdxnDbjCgDHcZwpQJ7nHxKRG4n9wqMiBa/XE+evnwt8jOZ6xbeb2W3AmpEGouNFksAvJzrJH0QbzlcDngHeG0LY5daenvtPgQ8w/PnsB54FrqtpI+gEDjGzTESeDyFsTPd3AMcRK7adxP7wy6qN95K0/FBi0PdMCGFbG17nuJFe43RgR20Arao/Ib6vk5V+Yt/+yhBC90h2UNVZRMPDdwNbzOwKEXmxkeqikgBKP3ZXKwVUdYmZPSki1dMlngfeXmvOmCYO/AVwUUosjuwVjp5+ot/FKqKnwaRRETmO4+xNvG6iF+A4juMMjapmInId8JttONw2EVltZp8simJblmU/JPakH8rIPxN+TUT+WER+P8uy9VmWlWVZWhvWNmrKsuwvy7Iry7Jvpbv+iLH5rPsR8FBZlv9RuSPLsoOJxmvziW0IQ93+G5ADb543b95DXV1d/w4wb948FZFviMjpZvY7WZZ9q6ura0eWZb9nZl8Qkd8DfoPY3//tsiw3VZ5//vz5bydKwU8HNpVluXYMXveYkBIfpxETUr9eluWPqx/PsuwcYN5ErG2E/D3w4RDCv450h7Isf1WW5dqyLG8ry/IrXV1dvyjL+tMt0/k5BlhDbDH4tbIs/77qWNvmz5//CjCHGGh/H/irEMLP6hznTOLkgRnjGPxDLDotJppV/izLsp+XZelJAMdxnHHGxwA6juNMYlJ/+3G0ZzZ3N3EE2GeKotgJce44cE26NSvpP87MvgycpKozK3PHJwMhhM1mtsrMzmewW3872AzUGvb1EpMpzbCoeoJBtcw9tWd0ApjZzmTO15dua4kO8NVsAXrMbAexkj6V2Be4hGhGd4WqNtOaMmGYGcSJCCur1SBjwFzgauBYohLkSlU9oGabx4nJn6OIKpQXqh9U1U4zO5U4RnPEyhgz6wWeN7NXaP76rsdiov/BmakVwXEcxxlH3APAcRxncjNTRN5Kg17eJtgKrA4hfLb2gTRWbw3wSzO7VERGGjx2iMhi4FbgfuBKYNKY4hVF0Qt8XlUDUTrfLvPEPuBfas3azCykXud3Jwl/5f7OFMxXJ937iYmJx83spar7nwMuNbPfEZGvFUWxNb2WDap6FnHcWz9wb23AGUJ4VlUvTEmEe9v0WseLntSaAtBnZmM6baBdiMgOM1tNHI04lkwnJkkqzCaqdna1jyRJ/Vbq9Ninyv9JSUnUjEnmDhH5JHB1SlRdBpza/PIHsZDoJzJXVT81WfxEHMdx9gbcA8BxHGcSk8b+fYPRKQC6iV/cbwkhNDSuU9WZxCrsn5lZU/LgZGD2MnCDmd0vIt2TxUEedjmlrwJOZPS+AN1pJOKg0WZpLGHGQA+ASu/24pQM2E6cIrAN2DgewU/qHz/azM4SkYeA+4e6FiYCVd3fzA4SkZdCCGtrHvsRUFvxnmj6gTuAc8f6XCbH/luJ1f9OoIfoQfHocPvmed4hIkcSfTEWN/G0fcCDZnZWURQ9aR1ziIm+k2nON6QR29PxPAngOI4zTngCwHEcZxKjqvsT+81bVWxtpkHlv8HzTQfelwzJ5rTyhGb2eKo0Pj2ZvtSn4Pwy4KMMHL/WLBuBN4YQNg275SQhBZDfIY6K22pm7yqK4pkJXtaIUdV7gFMmeh01PA2cPl7XQUoGnk2cxvHdEMKnR7jfEUTDz0Ujfa7UcnI3sbWh1kRwBtG8cA2j+z2q0AucFkJ4uA3HchzHcYbBWwAcx3EmNwto/W/1NmLA+6XKHakamJnZAhHZAGytrtSHEHbkeX6HiHQCV9FClU9EjjCz/UXkYVW9AtjUquN3CtoXEVUMWyvHyfMcETkZOAN4mSjxL4dSHYQQdqb1/JT42lrtM3+NmFipXSvslvn311tLkmJPAzpS/zgAItJPrChXzlNfo2OMgsqxpzfR5jFZmGxmcVuIvfRj2fc/gBDCa6p6GbEdqGe47ZPq41Azu7bJsZj9IvIIcHFt8J/W0auqnycG7pfTnKqgHjOAc1X1m5NNleI4jrMn4gkAx3Gcyc3CUez7TAjhi9V3iMjBwF0pINhMNAx7uXqboih2pi/4rxHdwpuVXneknvePEHvWb1DV25o1SUtj0tYQxxRuB84ieg0ALCMG8fsCRwOzgJUMExglRcKXVHU9sV1BU7JjxJjZ2qIoBgWkZrZIRM4mBu83E2X+1a9nIXAR8ZzsWzN/fStQEt+TbcRz/w3iqMDK/vsSkyHTgA1mtqEoigG98mmb2cCGZPBYWVu3iJxHTJj8qPq4U4TJpLboAS4NIYy7giL5TtSaTzbiSOCmJoP/PuBRYlvDoOC/ah39wB2q+hJwE3Hk5miMpQ8ADmbsvRQcx3H2enwKgOM4ziQlz/NpwFtHcYidNcfrMLND2G0mtgB4T70d0xf8J4BziPPEWyUjVgnvVNUT8jxvZt+lZnZs+v8s4DxVnQu7EhmVFoUO4mixZir6a4GzROSFYbesQUR2Nrj/ZOCvgP+POG1hF6o63czOI7YfLGLw5+8cYD9i0HZKOs4NqQUEVT0Q+AJwD3AX8GUROaHq+J2qeirw5TSZ4XN5nu/yjSiKghDC8yGEc0MIt0ym1oyRYGb/Z6LXkOgH7jez+yZ6IUOhqocQpwYsanLXtUQfkIbBfzUhSlTOIU4gGI1KYxaTz+PBcRxnj8QTAI7jOJOMNFLvaOABMztpFIc6LM/zQyvj+USkQ0TmUfW338wOSM+5VFU/pqp/pqqLVZUQQr+ZvWBmbwP+hijDb4VpwOHAQyLyNVU9PEn7h92vpjq/MN0ws2lmVv0ZtgxYPtIFpQTHS0QFxOfTqLORcpyq1ut93kA8R73Ad2se6xOR/6C5z939gaPTuXoPcAQxaTOXGCydX7XtTODdwMEisszMThSRo5t4rkmNiKyf6DUkngAuTEaOY0Ke58tV9St5nv9YVf9XUsKMmNTzfxdN/D4QK/9PEK+hV5psPXnJzN4BXE+LfyPMbBrwm6lFxnEcxxlDPAHgOI4zicjz/DjgBuB2ETmuWXl6NWY2V0QuZLdRV7+Z/aJ6m6pRdVcRx3JdRazYz4JYOS6KYhuwGriYKE0fDccBdwJrklx9KF6reb4eUoAhIlvqVOLf0MxCQggkmfwlInJ9E7suA1bVSQI8CJxGnMU+wNAsSbfvpmps2wjYADyXRuL9E7CrPzrd92TVtj3A14jy8B4RuY8o5d5T2E7V658gNgGXhxDGbMKFqk4XkfOBE0VkPzO7BPjgCBNm5Hm+hNi2s6iZ5zWz54gJpc3NvrYQAkVR7CT+3bicFpIA6e/QHOK4Q8dxHGcM8Uyr4zjOBJHctBcQpevvJMq/l5BM4kZ7/NRjfgLwiqquDiHsSL3v3eyeBR7yPJ9BnCnekW4nEHvvd1U50763EIPKq4AjzWxOM6MCq1gAfBx4f57na4iB8+Y6ffVlGlt3FTEwuIIYFAO8Qqy076qOmtnhxACkKUII21T1cuDnxFGBw7USTCdK+VVVzwZeDSH0pyD/sUY7mdl6EXkzMCeZMM4kKhpmAL+V/q3wT8B9QFkURb+qfpEosX6LmW0Qka9T1ZoRQuhT1dvSPhDbP+q2KkxRuoneCAsm4snNbJuIXEKUyI8l04iBcAeAiMwws4tE5DHg1aF2TG0iNwAHNvF8fcCzInIaLQT/1YQQtqvqp9Mxb2zhEJ14YcpxHGfM8TGAjuM444yqLiFWwt9AlOkuoSqQHQO2Eft0HwRmmdlH0hf+9cB56bl/ULOGPwkhPFHvYClxcTSxz320fbs7iYHsDWb2cK2pXSNUdSbwE3b7GWBmm0Xk90MIlZnlC8zseBHpBh4Zru89jUA8lmjgN5LxZv1EM72VtXPrnfaiqvsBX6Y5WXs7+SSx+t8W74Q0lvFIYLqZPVEUxeaqx/4XMZFVXaR5ewihoaJDVZeY2Z3JG6MZniJW/te1S9WQ/r4VDExojYS7ieaDY9Ze4TiO47gCwHEcZ1xII7mWEAPxk4l93COS9baBfYhj8jqA+0XkGuDzxOC7h/rJh+2wa91LiYqBbuC1NAbsYWLwewoxibCY1j5TpgGHJTf+M1T1KmDtcOPAQgg9qvoKVQkAEZmR1vqiqmbAF0RkBTFQ/3Se55cOlWBIKoeHiedkDcNXUjuIyokvq+rpad2Dqu4psbCQ2Kc/nXjet5tZWRTFsOPcRkOe550i0lFvXVXrm2FmO+pNNphEbCOO3hvvBEA/8E3gyjYH/zcTk02IyPo8z4+pSgLcS5x4saiyj5k1DKZV9VjgShHZr4ll9BETb6eb2eaiKJp7EcMf2yv5juM4kxT/A+04jjPGpCB6hZndSpS+L2T8gv8KC4lJgGOBvhDCthBCT6r6dTPQwXubmW1L/18OfB34O+JYumMhmuiFELaEEK4H3gV8htZNAhGRWcBxZvYAsDpVfIejtp++k90S8eVEdcJ0YiXyOBFZMtwB0+t6HDibmvGIDegws0VEX4OTax9MpmYnAw8RjQH/zsy+QzREvFFVTxzBcww4nqoemuf5h1W1YhDYaNtZIvLnwOV5ng8aJ6mq09PkgBtE5PhJbsDWzQid6dvMOjO7rJ3PbWYHAicRr8sZwP4ick6e550AIYT1RL+NV4m/lxsbmSAmt/8biRMkmuFp4jXe7uAf4ndL7+V3HMeZpHgCwHEcZwxR1Q4zOwVoRZ7bbhYQg4WTUlKiwhZgY9XPz4tIJQFwGrG6D7Ei+d7ag4YQXjazi4FjgPsZXSJgDvBnwNdV9eOqum+e540+q+4ys+rAqNfMKoFa9v+z9/ZhdlXl3f/nnk5jGmOaxphZE2NMKaUp0pwlxYiIiIgUEBFRBAUUBI2IEZFSmqY0vzw8lCJGBAREeRMVFRERkAcxImJMY0S6NkZEjGmMadyTxpimMYZhnPv3x73OZM+Zfc6cM3MmL7A+1zVXMufsl7X3XnvPvt++NzvbBII5QOY0O47Y3uwdmOZBw8h41EGYhbXtOyOWSFSZBpypqgcQMy2is+MAVX0XcIP3fnZ1Ye/9ZO/95d77r3nvL/Pez6p2cYgG+vuAr4jIlfH4l8SIchmHAxcA/yAi55Z8PwM4H3gPcDGWobBHEqPva1R1V2YpbAUuFJHQTtE/ESnLYjhBRPYr/H4X1qHijfHfx4sLe+87YqeQz9CC4F8Uj1wOnEmJ2n90Cs2MPyOdDyPN0uiN40skEonEGJIcAIlEIjG2HIwp6E9nz3jmzsScAMfH1PRqS7ybVHUrsE1Vvw5sqVQqE1T18Jr1Z1NClmU7QggrMAX89wKPMHIRus44zsuBr4vIaXWM3CejYftpVb1VVRdmWVYVxtvOYNX4ScB+1ShrM0THxrmYMdaMYTIZy7L4cCGavh3YICJDDNfoOBjP4GjpB7AskROAf8AiwRNgIA38GMy5MQEr7ThOVYuGY5Ecc8b0Aj8r+X4LpgOxldFdr12Cqv5ERHaVgbgNE518MN4fbUNVN5Z8PBs4oursCiH0hRDWhhAeCCE8GQUmixwKXE9rxna/iDwEnBlCWF/HqfE+4JvAt1T1QzXOrGbxI1gHLBuhLWUWiUQikajPnpzul0gkEns13vt9gEtEZNZu2H1//Cl7zk/FjIfLvfefjtHVm6NxgIisDSH0xzZ3tfoADY2hWEd/F6YPcEJUMJ/JyEoeOjFj4hpVfYf3/jJMhX1HbOHXBzxYqVSWxY4HA8aDqm4VkW0UhMhU9W9EZBzNGfMAZFm2rlKpnCci21T1FBEZLrV5sqouEBG899WyiAuB72PR3APiceVYJPYbDC41eGFhvL0isqkw3h3A9zCn0kSs3d8tqlpPHf6xuM/xlLdv3KSq54vIpVgGyB5tfInIo9i5GOvymX7gNuBTIzH+Y8bGJGwu9InIpqIGQzyOXgYfxzjgrSJS1eaot+0O4AhVvbLF50pVbHMeOztp1G57MiYIuG8c5+lYRk/D7gMl43tVC+NKJBKJxC4mOQASiURi7DgXOGI37LcfM5QfAk7EhPFqsw8cFq1+sfd+SQghp6bmXVU7Str8ra/+J0a5Z2KR6PVAHg3zfiD33n9KRB4E3o2lmQ+pQ2+SSSJyNGb43o6lPQ+EL8uihlH5fwuWgl9lFmZotWToZlm2oVKpnC8iuap+KIoN1iW297sYeCnWIWADppFwXRQn7MTOVZkj4lrs+s3AdBduqxqPWZb1eu8/rqorRWQ/VQ1ZltXtPhC3X9d4ixHgPP7s8YQQnvDe5+wsSRkrVgAXhxBGWsoyE2uV+TYRyYErCo42MD2BZQx9NhyO3aul2hPxfjsa02yY1cJ4elX1dhG5KIRQln1QZTKDy0BmYw64ph0AWEZCq3oEVSZ47zvr3BeJRCKRaBPJAZBIJBJtphqlA961O/avqo+KyDnAE8C9WAT9wBglr132gyKyv/f+HFVdX1SCjzoAtcbyU2BRzrjue4EJqrpeROZTMMyjgbmmUqlcKiLfxkoDTqT19mBVJgPvB47w3l8PfB7YXJbKHNOsNxXrquP/RxQ9zrJsS8xAAEvTH65t43jgDGCr9/4SYGt0jjQ0tkMIa7z3C4AJIrKtNgIdjaOH489zkaVYmvpYEVT1gizLNjdaKJbPTMCcNVtq5uBxqnpivN+mA4tUdUelUrkxdqHYpqrfBA6NGSkDqOocShwA3vtOVX2biFxGCzX/WMbEPcBwxj/ABlXdLCKu8NmrgTua2VF87h3GYO2NVpiK3Tdj2hkjkUgknuvsCfWoiUQi8WzjUFW9hpG/CI+UXlV9UERODUZvrMt/o4jczeCaeABiSvuxWCr6iUVV+RBCVQ+gGpHbginZg0U5F2ERv1kicqiqXl6mSp9lWW8I4ZEQwunASZiwXsM2fw3owCKTV6nq14Bjq1oGNftcLyIP13y8bTQiciGErSKySFUvoDlV+HHAh7CMhZnDLFvcT18IYWu7a8+fJdyrqmOlVbAJmF/QkWjEFcBvgB8xNOLdISLFAMtkEblYRA4Eu74i8iURWV670VjyMYgY+X+niFxPa8b/DuBWYF6WZcMZ/4QQekXkswwukTm8hf1NA05m5A6+Cez67iiJRCLxnCNlACQSiUQbiBHxDhHxwPU1it67gj7g6qgOv6Hmu41YOcJCLHpd5vw9ANMFmO29/yQxqiki16nqJhF5GfAdrKwAVT0yproPICL7YEbAeuoQQrjfe/+Yqp4gIhdiBs2InNEichiWMn2r9/4KhmYDXKuqR4nIHMwYuh4TvBvAez8XU8rfqKoXZlnW0DERQuj13t+GGSuLsPKHRozDWr71e+/nq+qmem3XYgR1yN9lVQXoE5H+4vHFWvMOdp6/vlbV6uM+J2PXYQumBdDydnYha0RkLXbd24KqVktGFoUQljW52qHx3xmYkVyM2j+G3QPFkpfpwPne+1Njq8l13vuFwOdUdSZ2fR/AdCEGiM6td2FzrV63h7Jj6heR64DLQwhDshkKc6e/5lrfBrxSVY/HHBnratdtwIGqelBJ2VCz7IsdY8Psi0QikUiMjpQBkEgkEu1hmogsBr6FRcV31fN1Bztbhl0UQthQa7wVUs/Pjz+laeixBd9iTAX8WO/9uBDC5izLPhVCmB9CuCuEsC0u+2pqjFVVLTVgawkh5FmWfQqoxP2tHkVk3gH/iNXLn1JULQ8hbIjj/Gvgr0II/5pl2UD0OBpX1wBvB84GTmlmhzGz4mrgrdQRVKuhI+7jlmFqtz8I/BfwdPFHRH4ahfpqswgmYB0mfgB8BTi6pr0jMNBa8KBKpTKu5vNOTJvhl1gk++eYk2d6E8e0u1iDdSxoW3aEiOzAzuPNtd9578d57ydWWzFWidkn2+JPbY18AB4smdNHAUcOLBTCcqAiIsfEefqO6v0V9z0B+HtsjrZyTbbFZ9HFZWn/3vtJwLtUdTFwtvd+QCcjPifOEpHzRORjmCjgsMTMn3OG08cYhjnARVF8NJFIJBJjxB/t7gEkEonE3oz3HufcQcBHMWPq+btq36r6KNZl4KMhhCfyPNdGy+d53u+c+w/MYDmS8lRdAV4MvFZVxzvnHu/p6RkSFXfOnYS9sO9cUeS/gU/nef67Zsaf53mvc+77wPei4fDXjPzv0gsx3YUJzrnH8zzfHvfxhzzPf5vn+ZC64q6uLici84AXxuyNX+Z5/s1md+icWw/8UlVfLSLDaQIIFuF8sXPuoTzPf1+yvXuAF5Ws+2fAIcC0PM+/Vlj+dZi44IuB2ap6qIjcmuf5wPXy3neo6knAx0TkF3me/7yw/iQsK+RlhTHOBO7J8/yXw56A3UCe531dXV0viqKQ7cpivB1YHEIYdE2897OBj2ER+O15nj9Z/a67u/tHwA+BrwLfyfP8D4UxPuOc6xCRt9SM8XnABufcd/M874/L9uZ5vibP81/neT6Qeu+9nwjMV9WLWjSqe4H/A1wbQvjfsgWcc+8GrhWRI7DnwBTn3Ler+8/zfEee5z/M83xpnudNCSF2dXW9WkQuYOTp/8BAp45Z8R5OmQCJRCIxBqQMgEQikRgB3nu899Ox6PN3sb7tY11W1Y+laH8JeDPwKhG5sSzFtx4hhF5VvRt4A1aLXy+SOiNGEb/tvT+6pB/4z0rWDVi5Ad77md77r3vvn/bef7teVC/Wuz8GnAW8DhMsG2k7uinE61GpVA4t0wYoUkxVjoJtE+svPZQQQp+q3iUirwMeZ/iodAdWDvBV7/2BJd83EgjsAA6NXQSKn1X32U/5/vtF5I44xgeKX6jqDuDJwnq9mMjek+zBiMidqrp6tNtR1T7gRuC8gkI/AN77qViXjNMwjYwbvPcnVjMsQgjbQgj3hxAeAMZ54+CYbQE2j2s7NFRF8hwNiPfKNcClTTiWimwAzgE+Vq+DQYzUvxUT2wMz2N8HXBmdDi3jvZ8sIueq6qg1T6Io4juBf/fen1KpVEY0pkQikUjUJ2UAJBKJxAiIUf+rsRZ3f7ILdvkkVsN+BXB9COEnPT09/Xneege3np4e8jzPu7q6vicif4ZF3sucFyIi3VjrsRc557JqJN051wGcys6/I9uBBSGE1TG1/L2YYTEOeAnwZJ7n5cXvWHZCnue/cs49gDk59qU8Gj4coqovEpGjAHHO/bAYnS3inOsDjgP+HNNQ+Hqe54+0srOenh6cc1tU9T+AV9QoqJeOD6u3/xvn3CPFKGdXV9c6EXkxFoWvLaTOVfXKLMu+VRj/BuDXqrpVRO4Rkf8LrC1mguR5Tp7nfXme/642Q6Snp6evq6vrcRHZgNWw3wZcBfzXSObVriLP86e7u7ufUdVjyzpbtMBDInJhWWcG59xMLKOnK370fOAFwDdqMizGY/X5i1X1VBH5C+DBEMIzzrltwPEMvrcUuCPP81IRyUqlMiNex9NozaG4GTP+76q2jSzDOafYnH9Z4WNR1X1EZFUxy6FZnHOHqeo/RkHRdjEBOEJEuru6upb19PQ83cZtJxKJxHOa5ABIJBKJFvDeT3fOnQ98AkuBH5Oov6r2ich6rI3fRZiBsTTLsrXFVOHR0NPTs9U5txSrq34ZlmpepuA1AZgLHOOce9o59wtV/bmI/Cau06OqnxaRL8f056mYo6JYt/yDPM+/P9yY8jzf0dXVFUTki3Es3XEfTRMj+5OwMoaDu7u7f+Wc+69q2nVhX88455bF7WfAlXmebx26xWHHrN3d3RtE5C7gbzGHx3CG6UuAg2Kq8waA7u7uXwB3qOq1IvJlTE/iWqy85DIRWVY8hjj+x0TkG8B3QgjrhysDqaWnp2ebc24lJu74WAjht3uy8V/FObcG092YQ4vZjFEg71sicnYIobTUwTnXER0Mf174+M+Be/M8X19YzgM3AS8UkRdguhZ9zrl/B34N7KOq+8vOdJMfAl+sLUnx3nc4514qIreo6ltquggMxypMP+LeEMIzjRbM81ydc2tV9bg4XgBE5HnAr6JTqtRhVkbUE7hhjERP/wT4WxE5xDn3K+fcr2rv4UQikUi0zoilWhOJROK5REwTbFR9AAAgAElEQVT9PRirmT6KsU/3fxSrAX409g4fU7z3B2Fq+CfSuBVXL/B5zDB9DFPtHg9sij3qientP2DnOeoD3hxCuL/FMY0DDsIcIEcPM65GrAOWALfVS41uBzH1e18sffsomjNMVwKnhhBGndL+XMN7Pwv4GuCHWbSWALxXVR/LsqzUoKxUKp0ico2qvq+YZaCq52VZdnVhDIdjwolFngBODiGsijoCF2Pz93FgkaouK+43zps5qnqViBze4rGsVtWTRSTUto2MpQRTgI0hhK2FzzuwzITF7NTxWAfMAx5otgNE3M4HMGdfO6P/ZaxX1UtF5Lbaco1EIpFItEZyACQSiUQD4sv5NOB9qjofmDrKtONmWa+qF4vIfSGEZnrOj4pKpUJs63ecql4oIgdQx+COEdQcM6o/jxkYA99779+PlStUWQP8dTU12Xs/XlVPE5GpqnpblmW1bQuL2wKL5h+NKbXPqjeuYdgBPIwZPY81SpMeDXG8k4GrVPXtTaZFLwPOj86eetudjLWbewPWXm4GMBXTXFiNqfgvo3Bs0fi8SlX3FZH7sZZwdVs07o14748Evszw7RgB+lU1AGeKyOPDGbre+0OwDJziti8KIXy0sMwsrHtC0SHYC8xT1VuzLKsK+k3CymS2FPcbHQ0HAzeo6uwWni39mF7DAuyaF8fdiXWdWARMVtX1wHkisqLgpOvE5ulBUQDzcSCvft8M3ib757AWogPE7gf3iMg3MafiPrRHc2o78CDmhH2qlbEmEolEYiepBCCRSCQa4Jw7HEvBPktEXlBI5R1rJonI0ao6u7u7e0tMf206NbdVoi5Ab57nq7q7u+/HesK/hJKygHgOXoCJ9h0E/Ldzbm01Pdc5NwMTu+vAov8fDyE8XF3fOXc01hLvaBF5Os/zh+qNK9awP53n+U+iPsAfx5TqVp0AnVh0/ijgT5xzq8qU+EdLHO8O59xyEXmhqlaaMOpmAgeKyHfKlM+jsfY+LOviEOCvsNKIP8XKLA7AjutE4Cd5nv8MoKur630icraITMGu0+/zPK+NVu/VOOd2YCJ93U0s/lMROQv4j1pHi/d+qnPuQOfc9kIHiV8556pZKM+LWgvX5Hn+i8L++zFBzmmFzf0RVpP/QE9Pzx/iffW/UV2/uM8OEXkzpiUyu4VnSx/wDeCcEMKTtSUbXV1ds0TkWkzb4/ki0i0ihwDfzfO8Jx5bf57n2/M8X93T0/PzPM+3tppe75y7DJt3tfxaRD6kqveIyErgpcBftLLtOvwxMBt77mx3zv20XeVQiUQi8VwidQFIJBKJGqLCv/Pe/4OqfhGLPo9Fyv8OVd2IRQzLGC8iJ6jqF4DPRpXxsU61JUaJPwocAyxU1dWqWpZ2Ow5rI/ZZYFFBRfwhLFq/Cmux9vma9VzBKG5aOTyEsFpVF4jIyaq6gvrnrREzsQjiV733h43V+Yz91y8SkX+lua4GB6nqZ7z3c6tK81VUdRxmzA3XYm0KZhwBICJrMEOUOIbStnB7K1Eh/iJqItC1qCqYQv584LES438S8Bngq6r6Fe/9nMK6HwdOwq7lm7AskiLbgS8wdC5OocE7lvd+gqqeEvfbSv38duBm4NwQwrqyBURkkqrOrPl4P0y0c9RUKpUO7/2xqvq22u+idskNwMpY5rASE0q9nZF396hlf+BKVb3We79v7f2SSCQSicakDIBEIpEoEF8mXwV8EnhPbMM1FlH/1cASEVkCPIWlyZalMUvsA34Apt49wznX45z777EUxIoRwt9Gkbyvi8gvMVGuFzE0Bf/5WGT6P/I8/2mM2H83z/Pr8zy/O8/z/yku7JzbDLwS2AYsyfN8TbPj6unp6c3z/Ofd3d3fAP4opk232oWhE5gVxdYmO+d+VjvGdhAzAR7FjMNXYRHMuojILCzF/7E8zwfE6bq7u/8AvBA4lMZOgD7g+jzPHwdwzj0J/ApLUf8ycGue588KNfXYem4xVrf+vEbLishqrFZ9aW2dPIBz7oWYIf78eA2eyvN8BUBPT88zeZ7/Is/z7+d5/svaLJw8z/ujIOE+mGEKlp5/r4gsLbtHo8PhIyJyCS0IXMYMhKtV9aIsy35bbznnXIeIHIpF3gdOg6q+oKen51PN7q8e3d3dLwU+JiJ/WfudiDwC/FMI4X/BRAfzPN/mnHsY+B+sjKUd757PE5EK8DpV/U13d/fPkkBgIpFINEfSAEgkEgkG1W5/QFXfGw2BsWAbcB9wKVbH2hudDh5rnXcKVi9cL6rVr6rrROQBrAZ/PbCjWeGukRI1AhyWgvsO4Aisn/mEwlgvDCF8rJntee9nYob4upHW8nrvJ2AGxWLs/LWcpaGqvSKyUlUvEZGHx0IbIGZGnA1cRnNiaauA84CHqwZrjBjPFhGPqdFPBWao6jgRmYEJz30VuC+EsK3ehvd24n06FZv7b2P4rIiN2Hx9pN48q1QqU0Tk37EoeT/WzvKjZctGYb1jsXv0HmB9CKHavm8JNg/vjJ0cNtTU5oM5+S4B3gW00uN+IzbPbxvu+sbnyZHADZhmRpXlIYRXt7DPetteDPwDQx2BG4GzgPvLHC1R1PMMTJtgeu33o2ATlmV0JfY8aeOmE4lE4tlHcgAkEonnPFWFf1W9SESOH4t9qGofsDzW5t4TQthRtpz3/ijgHFU9ejgBOVXdJCJ3quqXRWTlrlTHjkbtEcBrMSOjFxOZ2+Vv3977qVgq+LsYXIvdCluBy6NwW11RwpESx/hZzHgcFlVdC5yVZVldfYTnIt77map6pYicQIMU+5j2v1pE5jOMsn2lUukQkWMxB9w2bB4/Xmf/S4CPYI6Ce4D3NivS6b3fB3NcHEtrQpZrMPHBO1tYB+/9XCxDYhaQA1eFEFa2so2SbR6CdT0oG/8nQgjnD7N+h6oeJSLXYJoc7eRx4OLYLjV1CkgkEok6JAdAIpF4zhIjchOBd2Jq2jNpvzZKfzTUr8Wid2uHGVMHFuE8AYsC78fwke0NWK3tNcAKLCNgl6TDxvFOwtLPt++q/ZaMYwJwGNaSbDYj02zYoarLotH41GiPJc6vCcCBwJmqeryINK15gGUCnFvbNq64/ZgBUD3WXqAvhFDddydRiHF3XZd2ETNQZmJq+UcMIwLZr6qbReQdWBbFsBkmcR5PwQz7LfXOl/f+x+zUHFgLvCmEsGqYsXfErhpXqurhLSr9r8K0C5aXHUccd/Ual413PDBFVbeJyLaRzoM4n6YDN2GaKAOoKiLyGHBSCKGpcp7YPvEKVT2wXV1V4jg2qurNInI5sHVvn/eJRCIxFiQHQCKReE7ive9U1bkishBTsh4Lkb9twP3A4hDCE62u7L2fBrxHVU8XkdkM75zox1LBb1HV5bHV2XMqEua9d8D5mGr+5BFuZj2Wrn/rSM9fTHc+BHMsHcEI55eqrhWReSGEB2u/i6nrS1T1IBHZrqpfFZFPhhC2x/MwH4uyfgu4o9gLfm/De38g1gXh4GEW7VfVlfGclUbxRzmOz2DlHKjqUyLy5hDCk/WWj23+jlbVJSLSithfL9bybn6Z0zAa5PtjuiDPB34IPNiohMV7P1lVPbA1y7LHWhhLtRPFZcCHqZnL0cE5D7i7FYPbe7+Pql4BnNDO1qrREbACuBwriUmdAhKJRKJAEgFMJBLPKbz3OOcmqOqZwL+KyKsYm44o6zHj76MhhF+NZAN5nv/OObcCUx5/RkT2V9XnNegWJlgK/OtF5Cjg1V1dXc/r7u7+tXPud845aluG7Y1UKhW6u7s7nHPinNPicUXBseXAOkw5v5WIe5VJwGuAyc654Jz7XSvnLRpnZ2I1yQcyivklIpOBVzrn1jvnnsrzXKvfOedOFZF/EZFpwItF5DXAsjzP1zjnTlPVy2Lk+XDgB3merx7pOHYX8X6dg0X+X9GoVV5M+/9JbPX34+K5anF/RzrnrnTOvaarq2tZd3f309Xr75z7mar+qYg8LSI3Ad/J8/yZOtvqFJG3Y4J5TbfBi8fxReACEfll2dxzzk0G7sKU/V8HHKmqf+ju7n60rF1oFB78vyLyzyJyfFdX1/bu7u4fNyOcF7MvDlfVy6Mg6aCxisjdWHlBSwKTUWR0uYj8GfAy2vROGqfIDGzeP885t8o59/tnw7MvkUgk2kFyACQSiecMMSr7CuA6Eflwi+nYzbIVE996Twjh4TzPS2v9myXP8/6enp6NPT0933TO3S4iT2NlC5OpH1XuiN/PFpG3YLXN+6lqb3d394Z6BsveQnd393HArZiY2hTg0aK6fZ7nz+R5njnnPoep57+U4cXiankeptz/OuDHXV1dG3p6eoY1KGPK9dlRBK5phfdheCFW3vCTohHf3d19KNaqscj/y/P8J865ubGuXYCngXvyPP9Zm8azS4jp7X8H3AYc0Mj4B/pE5A7g9CzLfj4S4x/AOTcXm1sHA68QkZcD383zfCtAnue/6enpuTvP8xvzPP9BA+N/MrA4Gs1l3T3qsRH4/4CFWZZtrme0OueOxrQIqs6l54vIgcC6rq6un9TOVefc3wEXYw7CF0Zn0VPOuZ8OZxg75/YTketFZJ/a70TkSeCdIYTNJasOS09Pz9aurq4HROQ3mLOsFWHE4ajqlLwZ+GVXV9f6np6evfrZl0gkEu0g9U5NJBLPJc4APoel/I8FjwPnYoJd69u98dj3eyFwsqrOx1KEm0lRn4y1NPws1mVgryWmgi/BDDSHGUGlaeEx5f0CYJ6qjjT6fRBwk4icENOgG40N4BBVvbhQl98upgOXxNT+Kl/CSkx2YCJvV6tqtVTgHuCjcZkLgb1RTPBITNdiiOFZQx+mAn9BMwKO3vtx3vsjK5XKR7z3c2v6yE9ksLPocOCU4a59zfYdli7/wRbnwVbgQhG5Lsuy4bpRlAkPTgUWxm4dtfRhJUJVpgDvZpjSFO/9+KiJ4euMdwnmtBgx8Vg/jZWsrB3NtuowG7hFRC6PXRwSiUTiOU3KAEgkEs96vPdznXMfx4zFF9F+/ZMNmML7acCPQghjFmWKfbV/093dHYAvq+pnROTnwO+BZ2JK7njKHbx/oqrrenp6Hhir8Y0l8eX9Sqy2vkoncHee5z8tWyfP817n3E9F5GvYOdmX1rMBXgS8ERjnnFuV53mp08U516mqn4r9yceCaUCnc+7hPM//4Jz7HXAn8DHgE6r6oIhsz/Mc59xWVf1OTM/+Uavp2bsT732nc+4MVb0mCv81Yh3wz6r6b1mW/aaZ7Tvn/gW4PpbJvAX4WTU7wjknWFZFd1y8EzMgb8/zfNj2e865v8GcEccDf9zMeOI9+6iqni0i9zTTitI5twl4KzUlLqr6IhF5gXNuaZ7nA7XvXV1dvxKRfYGXF5b9SxH517KSgerxqOqZIrKYkvdFVb0J+FiWZc8U1pnmnJvnnDvDOTfRObeumJ1TjzifnwQewM73jLJ9joIJmDPveOfcRufc+mbGlUgkEs9GkghgIpF41hJb1Z2IRc1bEeBqheVYX+xH6rX221V472dh0dJ9sF7x+2CR4+lYh4O1wKkhhEdHsQ+wc3lYbFW3LMuyXXLcsQXZ1xls9KxX1WOyLFtVWG4mJpC2itinPX4+HpsPC1R1/xEIj21X1dtF5OIQwpC8ae/9HOBHjI2gZJUngbc0Ep7bm4mR9lOwbg5lkewiq7D2jw+2IvRWqVR+GkU1AVDVh4Bjsizrjfu/FhORLHJMCKGu4yzeF0dhwnNl0fJGLAPmtSIUGo3zfxKRRQydbxuB02uFI6Po3pdF5KD40TbghfUcDt77g4EvUJ6B8US879YVlp8ALAI+BIzHspM+DlzRrABlPI+zsA4oH25mnRGwGbgjjquprgWJRCLxbGIsX1ISiURitxBr/Q8ALgUOV9XxjcuHR8RarNb/ViBv1Gd8VxHVwtd67x/Cnu/jVLVTRDpiu7heYMsodzMX+LqqThaRPuA+7/28shf8mAo9Fdg2XPvDJpnDYOO/H7hdRJ4q7PNArFXZvpgQ4+uxDA1CCDu8918CHolRzbdhgn/NMkFEzgD28d6fy9BWgUdS/+9qL7BKVe8TkV9gZRnHYNkMrYxhP6zk4VnnAIgG5Iexso1Gqdo7gLsxR866shaJw7ABizIDICJzgRO893eEEPoqlcpiETlMVferOolUte41io7GU7C0/1Z0RXYAt6rqZUVDurDdKcChWFnCihpjtR8r83gH5uwqMg0413u/MoRQvN/XiMg5mHbGdMy4L3WceO/3wZwws0q+Xg8sEJHaMU/FWgSOj79PwLKufgrcXrafWuJzdK33fmFc70LsXm4nU7BODkd475dgHTJG+1xMJBKJvYbkAEgkEs8q4sv42Vgt/r4woArdLnpVdamILAkh7JF11fEluo86L/cjpVKpjMPOq6ueU1V9m4jcgukRDBCzEa7AHAa59/69o23LFlOWix/lwL3VCGaM3r4VcxR0ALNV9RAsTR6AaLCv997PB36kqgtFZHoLw+jE6sI/h3V5WFr4rl7qfx/wSWBJsUbde38z5oS4hubFzzpU9bWY4+lZQ8zO+ICqLhCRRudiC3Cdql6eZdlI2xp+DhOHqzIRU9N/CNgkIhuAs0TkEswAXy4ij5RtqFKpTMIM6jNozZGzFZsTpccRz8d5wD9ijrxHKpXK/CzLHge7xyuVypPAgzGbpXYTR2COgeXVD+Jz4VHv/TswI31TWdu+6IhZEI+9jKuwrIvaz7djzoE5hc8mYE6KphwAhbFu997fiGV5XIWl77eTTsyZdhXw2kqlclWWZSvbvI9EIpHYI0kOgEQi8aygUqmMiyrYC7BIbKt13sPRj0X9rxSRz2Mv8KMiprtOAPp3d/lAM4jIJFWdVTQ2osjZG6hxAGCG/1GYUTQDOBkTSRzN/msNw/tVdUXh90mYQV2N2vaJSGm/82hgfFpEVmIp3wfS/N/Ejrj8Ld77i7D+59uxqH4ZW1R1m4ic772fjtWtZ6q6IirXV7C06WZLEgaVs0Sn1yVYBPaSEMJTMXrci2VfNLnZ3YP3fiqmUP+eBsZ/P7BOVS8UkftGU3YiIg8BjzLYqDwCc+zcGY3rFSJyEjantlKTOROFA2cDF6vqiSIyroUhrMWO984G9/3UOKZxccyHApfFbJv1YOJ53vtrReT97Iy6V5kInF6pVFbUZkg0inZHx8MHKRcL7cNEJz9ZZ9ybsXKoqVgZRPWcjOhZHELo994vB04C5keNhFacLM0wHjhFRA6vVCqXichdIYRhhSQTiURibyY5ABKJxF5PNCDOBs7H0l/bTR9WM3ol8FhZ1KxVYrT6aKxF1Y5KpXJTlmV7tqVmhlCZEFrZS7ljZ1S7A9jfez9+lI6O76rqGdHY2gxcn2XZQJaDqnYUWzuKyDKgbo1vrBt/1Ht/MlZLfjatOQFmYM6Dl3nvr2yw7lQR+ZfiB6raH1uo3YSlOvcy1IirR21K9GGq+kER6VTV3Ht/CRbZ3KaqNwB77LyK/ekXAe+n8blfAVwkIsvbcP9tUNUvisgB7DznE1X1HGK2SDSaN8efMg7DMlwObEFLoh+7Fhc2kT3Uz+AMng7gKFU9Dfi36ochhNXe+7spN9iPitktrXQkOQ57jg5xxKjqYyKyoN49HK/LyphhcCLwclWdKCLXtrD/2m2ClQQsEJGfxbHNbrxWy3QA00XkSuAt3vvLME2XYcUYE4lEYm8kOQASicReS0xVPRgzIObSvAHVLP3AU6q6JEaGRtTrupZquzjMoVAtU5gT0+SfarTu7iSE0Ou9b/YcdDA4oj1ZVSdjafsj5aGoan+Yql4vIoNE06LGweNYJHcTdn6BgZKEc7HzvhS4JoSwCUw7wXu/APgl1oqslZKAyVid85E0blfXizlPJgEdMTOhGrnfSgtzV0TGe+9nFXQVnhKRNcB4Ebk3jukIrFTjCO/9NVjN/IbhjOcY2Z6CGbivAa5qk35D2b5mYffuKTTQTlDVh0TkvTQx/mYIIfRFLYgzMa0QwLQAvPeHhBCW11u3UqlMFJETsQh+K7XpvVi6/oU1mhXjVXVa7NyxHtgejd5tDG2v1yki87z3N4cQit/dgs2/Wv2BacCRlUrl1izLGg4uXveDMRHDMvHFXETOUdVhtSdCCGsqlcrHYzZHJ4XsiZgBcwCwRlXXFh14w2yzN5bMrIhjPIz2Z3l1YvfNAcDdUQtiYysCk4lEIrE3kNoAJhKJvRLv/WzgHzDhrb+i/Q7NLcAXgQ9kWbY0z/Pft2vDzrlO4D3ACYWPu4EfdHV1rerp6Sldz3s/yTn3Sufcy5xzv63Xjm4scc69FMtcKPKjPM/vq1ludlyuel22i8j9eZ6PuGd4nufbnHP3Y46Au2ojkV1dXc+IyFrMcLpZVb+RZVlfTIe/FTgdeAnwWuB3eZ5/t7DtHc65FZi6+atE5M9aGFon8GLqGCSxFOFKbK4+E5d7J2bkvZHm6/+r/AFrffirOPbNzrl7gC8D/xFC2NLV1XWMiPwF8ELgWMywmeic63DObcrzfEirynhPvRFL474QS+N+Ks/z0jKK0RANwU9ipSH17t1+4JMickEI4dd5nmu79p/n+f/Gln9vLHzcqar93d3dD5a1xvPeTxWRBcC/sLNNYDNsA64H/j7LsnXV46hUKh0i8pbotPkA8ALgO3me9+d5/rRzbhbmzCq+q43D7reBtpfOud+o6hwRqRUDHIfdd0uHa3nnnPtLLJvlAIZ2iNoAfDiEsLSnp2fgGnjvxzvn5sZn0lTn3K+r562np0fzPH+6p6fn98Xr5py7C3P6HC8i/+mcW53neVNOnXheepxz9wK/jWNtd0kAwPOBvxWRY4B+59zP8zzf40u0EolEollSBkAikdiriCnDx2K1/rPZWWfaLvpUdb2InB/bg4261r+EDoa+uI4D/jqmE5cJc00CLlHVtwHjRGS59/6k3ZCmuhSLZhbPe1lWwLr4eTWaPurILVjtPlAq1hXTth+OP8BAZPP9qnpEjVDaS0q23ee9v19EtmNG8KE0X5ffiCexjIP1lUrlcRE5H1ioqoeNUKCyA2vrWBR4q1Vk/wpm9FfH7zGDKVfVdd77NcDPsPn951g0ez/selUdEn205/gHEds0Xobdx/XYBlyhqp8YhdjfcNwHzIvGM1hmRvX4B+Z0pVJBRPbBuoqcQPPZGv2YI3ERcFttp4yon/FGdnY8+ADWWWR1/P0BTAhwRmG1aoeTu6ofhBC2eO9vwc7nICeUqh4iIo4Gz7HoILsCywCovd5bsWt1d806YFoB58U0/+3A7d77S4EtDXQnDon/zlLVK0VkVeF4myKEsNV7fx3wGJZBczDt/zsAJqJ4OfAG7/0VwKOpLCCRSDwbSA6ARCKxVxDFqeYCCzHDZiyeX5uBG0Xk2hKDqp30Ab8u+fwg7AW8zFieA3yoYDAerarHUTAEavHe74elBa+rCoe1gVXAIlW9QESmRnG775YstzIuW0ynb4sToEX2Bd4aja0BVPX7ZQtHw+Vh7/1bgM9gRtWoSktEZCvW8o0syzZ577+lql9osftAkU6GST8XkfuwFPeDa9abISIz2GmINWITUKp+P1Jia8gbGJpFUmQjdp9/vij2F8UOp8afDZiK/WgMsvXAIhFZgpVvbAa+Wiz1iS1FDwWWYE6UVngUM/6X1kkj7wP+HXg7NsfGYWn7qwFCCKu899dizqhxMKBz8fzaDYUQ7vfeLwWOL34uIrNUdSZQWloUjf+rVPW4Ei2DzcDiEMInS1adFjtoTI7PpMmq+iERmYZlj9TL9LkDK/kYLyKzsPnZkgMArCQAeMR7/yZVfb+InIs5StrtsJqIOX2OUtXrvPc3qepTI2g9mUgkEnsMyQGQSCT2aGIEdyL2Evw2BkfD2kU/8AT2sn7/WCvyR3Xrp7Do4IByvKpOrycopqpTaqLF40TkDd77u2qjbTE6dzhwWdzmGu/9+bbrxnpw3ntiTfJCLCL8TeDqau11CAHv/dWxhv21IpJRiLgXjnGb9/56xs5Z0yz7MrRP+tao/l+XEMJm7/08THTsI4zOCTAbm8Ob4u9PiMhGWtMaGEBVO0XkJd57GlzPjVja+WzqdydotI9+EfkSdQzHVolzcgYWTT6qzj4RkU2YIONtQH8Uy9wHc2bMxaLlE1V1M9Ze8huYE2xzPX0A771T1fNiivw3gVtDCNvjfXi/qq4HDhKR1cCywnqdwBmqelHMAGgKVe2P2zlXRJ6oN664/zux6/NmrA3hEzWL3Yh1iXgbdh9tBb5dZ79LMFHCGYXP+qO+wBAqlUon9lw9seS5U43831jnMKdQc0+IyDhVPUVEflqpVP6tju7AAuCHwCswPZClZQs1S8wG+ASWDbMAm1tj8byZAHxYVY8ErvHe38Fe0GEjkUgkykgOgEQiscfivZ+G1UrPp7HA2mjYoKo3i8jlIYQyhfsxIbaAe5JChLZRK7GYYlvLAZhRVRvdn4pF4Q6OToOZwIWqOo9yFf8i42Kd8wexnvOHYhG6gRr/mIb/IENb/9VyH1Z3fy6WETAaAcBSKpWKE5HZmMGyqiQi/HqGGu8PYxHkhkSRwIXe+59jzqFZIxzmFOAc7/2CaAxuIWYEjIR4TadHUcXSlm5VoTtV/UsR+QitCab1xvaEl7dDdC/i2ClWV0oUdZwPPByN430xZ8DbqSmZKTjDjgcWq+oS7/2tVWHHGq4XkRMKy08iKunH+fJo/AEGUv5nABcAH6zNHhmGbSJyNXBlnbEMIi7zbxSU/Wu/996fo6o/FpFXisi9IYTS+y52vTgvCg3uA/SJyHIsVX4QMZtiEVZ2MCTyr6oXZ1l2Xb1xq+oGEVlHTUvK+Aw7V0RupeR+DyHkQN3tjoR4DZfFrJ0zgHlYm862EueBxzJYTgeu9N4vjc/DRCKR2Gtoe21fIpFIjBbvfYf3/ijMYLicMTL+VfVR4EwRuXRXGv8AWZZtwCK0zbKGoZJR30kAACAASURBVLX2M1W1LIo8npqor6oOigw2YBzmQKj+fZgQMw1arrGNac93AKeq6uJ2dVGo4r2fIiKXYGKNX6TcuKxN2+4Dvkdr2g63q+pZWC3/SHkXcJz3vkNVD2KE0f8CU0Vk4Bp77533/hLv/Ve899d47w8KIfSKyBVYFLdZh0Mv8CngomYM2GaIxuYCGhj/wFrg/BDCQ9H4P0BVr8VaMw4n9OZEZDGwsFKplGU7HFbz+8mxdWgpIjIT+CxmHLdi/G9U1cXAJWXnLup4tEwIYQvmIHiHqt7cYLn+EMJdInIqcBJwkqrOp8YQj1lVZ2NCpLXvgduAy0Wk7n4Aoi7DQsodaRNof6u+YYmOgBsx4/w2YKwM804sw+ozmBOglW4QiUQisdtJGQCJRGKPIbbEOgQ4V1VPqJcO3wbWqOotwNXA1t2Yxnk7ZmyfhaWIf5bBvb+LbMSEuM4gvrSr6kwR2d97v7LmGLZhInzFOu/ZWDr8cEbsdszZ0I+JonVgBtRMRlar2x/HMhYciBkyYBHmvwPur1mmNv1/HfBgK5Ht2ILsIeCNqnqFiBxH86JjvQCq6kTkK8DjIrKfqk5qQgBwC2Y4z2OoI2MKBcNYVc8VkX8ufH8g8GrM0XE+8B3MYKuWI1BYt09E1mOR4muAZe1qfRYN8iWYA6Qej6vqPBFZAeC9n4wp0tca7o2YAHw4tkicXzP+W7GMlmod/YSytPjo5HobJvY3q4V99wEBOEdEHlUd3KzAe38YFjXe13u/QlXPybJsVcn+9wOOVdWtInJ/jJYDAwKXTRm0IYQ12D08hOiMORu7JsXnaz+WSTRPVR8Yrm1g5E7MKXktBYNfVTsYG1G+YYnOoyeAM1X1WhG5FHsOtrtlIJgOwvtE5JRYhvDlEEJtCUcikUjscSQHQCKR2O3EdlgHAPNiqu70EaqjD0dVJf4S4JHdLeQU07Q/ial9T8ZS2OuNaRs7U6hnAohIH+Uv2ltV9f9FQ3ViXJbqesOMqd97/0NV3SIiVXXy2fGnZQfAGFPbr/wXJcvUOpEeb6aXeS3RwbLGe38eZvSc3XgNwM7XFZgjZRE23oNgUAp7I+7CjNcKQx0A0yhkeYhIbVu/pwrj7q9UKveISIj7f1X8dxOwIeo4rMLmX9syYbz3nar6Psz4r/e+sRK4MMuyFYXPDgEOqT1HMe3888BPMYPuTbG7w7jCMu8UkS8zWJfiKsxhchrQGc/DoAh9NIw/ENPn62YHlNCnqneKyKIQQj29hIvZaSAfKiKnY6UNxf1PxRwPb4v39XWVSuWCLMva1oM+1vy/K46n9r5YFce0tEnjvzq3HvLez8cytXzcbp+IlJam7Aqqcx5Y6b0/FSshWcDos26GEOfoJOCfgBO891eo6j1j2LkikUgkRk1yACQSid1GjLjtD8xX1RNFZBJjUJoURbnWi/VivxnY2uxL7lgT01aHjRqFEKhUKstF5Bws4jZTVR+Ndb+1y/Z77++M/ezfBUxQ1e0isrbJYT0Sl606AMYDr6WgAwADBsW+sQZ/HeU1+GPJRna2JFxLuaDYg5jhBxapvSnLshGPMYSw3nt/fqzJvoj6RkW1leDt8fdtwE00FxntA1ZgCuw7vPffA95fs8xkBjtAbgT+FNOFCJhBNkB0dq2tVCprReTuOI7+uK++dmfBxHv7w1FMst67xlKs5r/WIfPmknVujuUM21V1R+yscLOInIaJ1U0FiM+QeTErphoxX4dlUXwOc4g9XBX6jOnwszGn4LH1BPPqkANXicgnaFxisV/N7yd67y+pcbZMVdX9okHZCZwQHRnLiyvGbiiXYHN6K2bM39HM9RORY7F5MZABoqrbgQdFZD6woYGQ4iTsebC5tp2hqj4kIm/GjOwDReReCpoKu5MQwsbYMvA+LBPm7Qx1HLaDTmCOqt4kIk9UKpVFUX9hUxIKTCQSexrJAZBIJHYLUeDvXKwl1L5jmO5PFDS7Hktt3mvbN2VZ1u+9fwA4WVV9jGQ+WfaCGULYXqlUFgI/AV4fBQcbKt8X1t1aqVQ+KyJz2Pl34pcli+4vIl9Q1f1FJAfe0uw+2sSjWL36HKwetyxD4XMxSjwR+DwlHQtaJXY4uC7u71LK28P1Yirh/QCxRdtKrKXccNyHGVPV0ol6GQsDadchhA2YaF1DouOrj/qlJu3iaMzgqlf3vhI4L4Qw6Ni89xOjXkXt8hMw0bppItKLOXy+iaWhvxT4e3aKPR6ApfA/AQMR4V5MZb+4r05MNf5iBrdLHBZVXRUdQEubcHrVPtumYfPggcJnG6Oo3pz4+3RVPch7v6LmmTULK2cYjxmyCzCdjYZ47yfH1p3F8o9tMUX+5hBCvbZ91dKEC7HzusZ7v7iY7RCdS+tjdsxErKxqj3nOxrGsrVQqF4jIt4HzsPKStr8Dx2wUH5+LD4rItZVK5ZF2ZnIkEonEaEkOgEQisUuJEbejsOioZ2xrRZ9Q1RuioNWoWjZ57ydgUdctzag+x4jZLOxFfRuwph3tBePL7EqaMLSzLNvsvf8UlkbeRwvK8/GcbQfeiqW831eyzGGqekBVlR54dzPjahequjkaYeOx61v2kv2QiLwcM8K2UlNHHSOq07FzkzdruMTyjQewuunrGay3AGb4vtp7f380EDeq6udE5EDq1yNvBW5T1UVZlg0IJsbjXMvQuvS/bmasu5J4fx+K1ZiXRlpVdamInE955suMGMWvXeftNU7CfiwKvhSrrz8F07gA64xRN40/trqcArwPc5pMqbdsCduBu2NJx+omnyk5g9uXTgBe470f0KKI1/h6TFxuIlY20o29pxUdDOMZ3NViDpZFNVwWUUcsLSBu72EsG2BZIwdGpVKZiJWxHIfdQ3OBmd7791LjfIz330Dqf9RymIM9Nx+jQYbBriDLsj7v/X2q+jBwmoicG7MuxuJdeCJwAnC4iDzgvV/Crs+QSiQSiVKSAyCRSOwyorF1IlaT20qdbatsxwzWxdhL6qheOr33M7H62AOAJ7z31zQSe4r1vAsxle1JmJG42Ht/265+AYwv5S3Xdcf05Bup3wccLIJY/P0w7/2Udqv91yNGs3fQwLERj780uhnn498D74jLXMLQKPE4zIjZihl8A3Mp/v9x7/3lwNdrNt+BXf+vEzNPvPfrsLlZ5gDYjEVzv1RSP7xDVTeKyKyaz4corcda9sNUFRFZHhXkdyXTMcOynjL6SuDcBvXyUyg5PyUZQh3ARFU9PjpVis+TyTTuHDBbRC7GnkWtpPxvBi5X1U9nWVY0dDuxqH4/sLH2eaOqm2ruk2o7uSlELYI4l++vVCqfAN4jItuAr5U8L9ZjRnZV/6HqUG3oAAghbPbeL8aySX6JRf2H7fIQSyJmszOLoQNzdp2LZXg0imxfCHwYO8fLgItiRsNwux0z4rXZGh2jD8XSh9MYvtNEy8Q5OwV4p6oeLiI3eu+vbZRtkUgkEruC5ABIJBK7hBgZ/JCqXlQQl2s3vZj42WJM6X3UQkzRoFqIib5Vo5vjvPfn19u+qh4nIu9np3ExQ1UXishD1FHnjvsah/UpfzNmbNxEY2HA3c16zACo/i2ZikUjh+gS7KEcgdWgT4tlDOujgbIdBgy7D2Mpw/1YqvitJdsZougemQLc4L2/FIuAnkRNtLlqqMdtP1KWxSAi27Fyg7k1X+1XqVQ6a9KLL8WimwAPREX8zQCVSmWciByNZWrkmJbEqB1kVaLj60pVnVsmcqiqy7Ae8fWM/2bYhKX/74+1qOxgqLhlf/ypHd94LMJ+GebMa/YdqE9VH49Og6VFDYkY5b4EOBZ7PtzjvV9QzBISkbLSlDlYVsAgIzym5N8E9KtqWYu9HVj0/nh2GuUTS5Yr4xFgpar2tiCAugNzLhR1DDpU9bR4PkodTN57h5WBVJ051U4Ir623zq4kzvknvfcXAl+Jf5cOpflz2RIiMh34R+Bo7/0iCjoUiUQisatJDoBEIjHmROP/OOCSomJ3m9mECfzdENtgtYuZ2MtrMQJ2lKo66vSSF5FXURNZjNHbuTRwAKjqsSLyWXa+NB+OOQPWjnTwY8wGzOFSbbXXwV7ydyU6W17LTvE4VHVKjHhWjbeZmNFeFfo7k3IHwIEln+1Q1U4R2R9r77gRixLXRrLXAKeGENY2GO52ylspjhORGRTmR9SGmBL///ZoUG6Ox7gvFp2vZg7sD5xKeS/3loglMvOB4+roeawRkQtDCI8Ps6mtNC5VOR0zgG+gfmvBLdRkvXjvJ6nqh2LEd9owYyiyHbgrqvyX3bvHYzX5VT4E/AjrQ1+lp2S9GZSUHkSjcG2D8WxT1SvFuqbsix3rPQ2PYOe2oYUyoOr+MIfEIRTOm4hMxpwC9Up+tsV2hsXP5mDn5/+0OIYxIzpqHvbeP4pF6t8tIrXlPO1iHPY34AvAjd77JSkbIJFI7A7GTHQrkUgkwOptsZZjlzI29f7bsTrgd2Cq6e00/gHGq2ptSrKjsRFRL4r0hnoreO8niMg7GJz+PAc4q6lR7h7WYsZYNZq4nTrp9rsa7z3e++ne+7/33r8vRmqLTFTV/RnaC73IdAbX3Q+5rpVKBeD1NR9vAU6O+gRbMafIdEqcIyKydhjjnxBCn6r+p6rWGm8d7BSNq27velVdg4nK3c3g61EsB+nHMmZGHf2PDr5jMeOuLKX+CeCcEMKKku9qWYNlJ9RjbQhhh6qubbBMToyse+87vPezgWtEZAFNGv+xc8gGLPtjPvUdd68o+exN8ZxUWV9nHy23pYtG/HJVPQn4V6zf/XBOlRET97cUK4HawE49gm3UZC/UrLdNRK6KXQaKvC5miuxRhBC2qeqNInIy5qBYSxvujTpMwTKLPuu9P6hmriQSicSYkx46iURirBmPpTcf0Obt9gOPqer5wJtDCEubEecbARsZ+vLfGRXyW+XgGCktYyLlugjHee/HqmRiVMTzfRWmZr4e61s/mvTudjIdi7RdgUWLL6lUKkUHVGeNIjqx7ro4hyYz+JoMMXhitL02A+Ae4P4QwseBT6hqI92Hg7z3s4Y5FjCjtmx+19ba3yEirwZeCZxerPOOdfcXYFkM1wEXhBAaGdvNciB2nmudLKhqDpwVQniwmQ3FOfXlBou813s/O7b/W015+cV6YFO8144DvoplC9S792rHjIjcg3W1uDGEsKVB3XpZxsssBpclrC1bMUbRWybLsr4sy0IIYWEI4e6xbmkasxJuBf4O06m4GnNMrh1m1ftixsXANVLVdQwWNdxjyLKsP4SwPoSwCHPWXkcbsmPqMA44WlXvBY6veTYlEonEmLJXpGomEom9kxj9Px4TqWoLMTK3JarUXx8jqGNZI5+LyCNY7f/AM1NV/7LBOmU1vwBTYtR5SI9sVe0XkbLjmAHMrVQqD4z1i/5ICCE85b0/C3CqumYPanflGdye77CYLj/gzInnvPprH/Djmrrcai15R/y3VugPLA26Nqq8np3Rw8+IyCGqemRZXTzm+Jkf68brGkaxRdw2BqeNdwB/5b2vRmqrtc2NjPpHsLTt/nYIUkaBzMWqOrPk+DaJyIImI/9F7gbmFTpMFHlPLJUZj0Xnc+CLDFbZnwTMVdVTReQIWkv53ywitwGXjSI9u+o4WlvdJnbthq0vj9FghzkRtqjq6qLmwO4izq9V1Ne7KFunz3t/m6ouF5EjgUkicls7tFnGmhDCau/9RZgTcT6W4TKJ9gfOHPaMuLJSqXxsT7jWiUTi2U9yACQSibFkKvby1K7oxiYRuRO4hvao+3fGNlDTgbWqurbWgI0vsVdhOgADWgDDRO++i6V+1ypLT4qK5UMcAFmWbfLeP4EJ0xVfMqcAx4jIw7Rev7tLiFHkdkSS20I0ovZhcER6CmYkrgGI9clPYucb7Nw+UrOp1Zh43xzgfuD2kv3MZadGQJWZRKdBCGG99/4GEZlLudJ4R6zV/2ZsC1fvsNZRrjkxAzMsm+r0MMI68FKiSOLFwLElhvoOrOznSyPY9HrgHBG5icHicwCTRWSyql6dZdmdsbRjJYMdAAcD99ZxuJQSnUHLsVT3lXVaSpZRJmg3icFzbzt2f9TrjFBkLqYZsR/QKyILvfdX763t4+J5fDL+7FXEbJQV3vuV2DPgXMwR4GiTIyDO0anApSLyIu/9aBxPiUQi0RTJAZBIJMaEGP2fS0mrshHQj6WZ3wC0JdU/ju8UEblIVacBG0TkCmqMPBhooXUOMA/rN57HsZSiqk+JyGOYiF/x8/Ei8lfe+846Bsa3gPcz2GHSgYm1TWI3OAC89x2q2iEi/XtaN4J4DTvBDLgaZfPadO9eBqfQ71DVH0eF/QlYtLbWMbMaeC8WQX6CocbeeODVDHVwHYFdr2o7xKWqmpf1tweImQkXYLXWpec4zsEyY3Na/BlwAMTzMgFLzT8E+LP4VR/wn1irw3XV61moQe4PIVTXn6Kq7wRuzLJsyLyLyxynqqfUMbTvxtLnW56zIQQqlcpyEVmMRWBr2Soin4n/r/aaHxGqCrAjZhQtGYGGyC9KPtvC4HKR7Vgqea0DoEzY8WR2Oj3GYVkOK7z3y3Zn+7znMvE+CZVK5bwo0joPeCftzwZ4PzAx7md7ut6JRGKsSBoAiURirBiP1dCORvBpK3AHcAzwxhDCPW2s8/fEdmAiMk1EPHBFvVrMEMKTIYTzQwjdIYSXN0przrJsvapeQU1UNqqjT6NO7/EQwn3AnQw1Atsi1tYqUazrEhH5IfDFKKa2J/FO4NfA/4jIR6r6CvGFfTWDHSbrKegTZFmGiHwJq2f+FKbEP8hYDSH0B+PBWBtcu//JwJEl45oOXOy9nwQD2QalQnAFjsKcS3WpI/Y2laH32KHAT4DvYar//xh//hlTdP8x8AEY6IZwBfBtVT0lOgPGAwtiB4HT6gznEOCKWh2FyDLgwhBCU1kJZURnzp3AfSVfP8TO9Pp30lxkvYxeEXlERN4SQji3zPj33o/3xoF19DsexRwrRTYwuD5+I3Z+i1H87ex0EBWp1fuYjj1HU434bibLsu0hhGVYN5A3U78DwkgZD5wtIl8B9o1OtkQikWg7KQMgkUiMFRMxQ2SkPIWlEN89RjWjBzBUtGxKdAS048XuQeDTmDJ68Vm7qUTNvcjFmOPgDOyl/wngM+ye3tlVZfeJWJS113t/7ljV8EaHw9Hx1/tCCHWP2Xs/ERMkqxq/Z2Hie1Ujf5WqPhmvJ6r67SzLBo07bn9Bg31MwFLLV9fJfvCUtHKLnAGM895fic21ZqLUZ3nvH6onzCciPy/5eApDHQBvYrAIXS0TgdcAn8SO4QPA+Jih8BBmnE6Lnw05vug0WEiJ4a2qm0XkMtojntYLfA1zjhQN4CeAHd77aVibxpGwHTv+a2gwVlU9UUQWYQGT673319U4ilYDKxj8rHuiOHdjGdHnReRUYnQ/zs1mymY6gDmqOpk9pMPGc52YvXWf934NsAg4gfY6aI4Clqjq6dRpNZtIJBKjIWUAJBKJsWK2qrYcMY4if0uB1wFjJhilquNUtfYZOA44uR1tmaKWwCLMoF+rqpuBR1X1i8MI5a0BzgH+FPgT4OXAPS3UJLcTx07hsg7sxbSs5/2o8d5PB76qqrcAt6jqF6KhWY/DVLVY9z2OwX/TnhKRs4CPq+oCEfloi+PZB/g+Fi3/rvd+/5LFjin5bEt08ExW1fdjkfiv0FwmzCHA8Q3mX5kA2yRVnR7bEVb5LxorrT8FfK76f1VdpaobMMfXFswBdQHwt8DHiyvGa/IRdjpqivSLyHXAA+0oF4kZF08yVF9iPDYvL4iimq2wHdNzeD2wMGZ21B1rNP73w5wdi1S11umxTVUvAKrpIVso72KwBmtVeoeq3ici51MuFjrEKaCqs+uVjyR2K08A744/a2hfllYncJyIXFOpVFoRsEwkEommSBkAiURirDikFRGuKiKyEjg/hDDiCGKlUukE5ojIVOCxYiu0YehQ1ep6o462hRC2ee8/oarL4gv8+izLGvbsjkbP/8/e+0fZVZf3v69n1tz5zp2VZuU7N83NN03TfNMYU0zZj4FiiikiKiIiBWqRogiKFhEpl1JLqZe6+PKl1FKK1KpV/IGCFcXyS4qUIiDFFGPEz0nTmKZpOk3TNOY73zTf3NysrLmz5rl/PJ8zs88+e59fMwmZzOe11qxk9tn7nD3n7L3Pfp7n/byfCY5Pw79FZnYq8NxReO6Tcaf++u9n4E7oTWMFY4D82oL8fD+59yy+jy/Fn66I5nbXMjVFYB1wrqpOGk9GdUAxGbIbuEZEVgK3xP3rpjI4aGZXicj9lI/8K+sZR0RexdSkAnDjvQHgF8ysLlsfj6aH/4rL1gO4CkJVL8OTPZtzZnOjFMYeRknyetwMrSxJsdnM7il4MUyXfXE/8oqGU3GzvveJyAD+vj8Xq/WtRv3txsdWfrkLo7W8weN8ETmJXCImeiZsAq42s9Niq0dTe1D9eFTVy0SEFqZ+38NbCibvz0Sksm0o8fJRN9TMsuzrcUrHzZQnxnqhD7hYRPar6s3TaadJJBKJIikBkEgkZpwYgL++h01H8Zuorb2+dgzefgevYA4Au1X1rSGEhmqbiIziAeNQYfkavNo3I3LbKBd+YSae62VgjOZg5JeBP5rpFzKzefmEkYj045XXpgQAXk1XGscybouf6UywCA8y6/QDP2NmA0wlGZbjQXOeh0IIj8VjsM/Mbo3j6jomtiysx1tIihw0s10iUpT3ryKXAAgh7Muy7OMi0h99J+qMAeNFL4MQQqcu7cO4NHlpSXLvAPCxDrwOuuUQzRMO1uNqiX78mnED8KSIHAA+VPIcB/D2kI8Cu7tR05jZZhE5PbeoKfERQphQ1Rdj8nKilXlbB27+W/HPYk1uWVHdkjiOqNVqE6q6AW9H+XXgMjyhOd3PbBBvz/kPVf2D2ToJIpFIHH+kL5REInE0WEzrHuQqngeem6Z8eAjvB18Q/78KuD4GZXl2mVlZlXUx03AVP8HYS3Mlem0baf5M0Ue1bH4hjdMlxoF/mMEq2TIKx2+spPflfl9FwUPCzH4Mkz3C94vIMz28dh9wWcnxCh7Al6kA1lD4Pq/VauMhhCMhhMO5n6bgv1NiUu+DgFYoe54BnjgKkyL6aC5W5JfdDzyEHwNlMvkxPEFwTQhhpNtWGhH5ClMmf+NmVjolIL6vQ8CyQjtGt4zQPA3iIK1bOhIvMyEE4vXn4/gkhyoVT7cMANcDF8VzMJFIJKZNupgkEokZR0RWU22OVsU4cM90e93NrL+kQno6HtDlb963iMhOGueH13k97gw/19mNBx/5wGoQV0j0rNIoQ0S206g26DOzqgTAAI3KjcMi0tX+ZFl2chz7uBw3WfzTEMKRKHNfQqG6LyKLzawfJlsQVtNsIvk2Vf14nFSxF3fXP40uJ2GYWX185pbC8iNRalxkKf65TAaJ0STxPOCteMD8bbwKPlpPAmRZtiyeK8txI7zNZe0y8e89B/emKGMfcMtM+nWo6iD+OVxK+SjRCTN7RkTuMLMJETkfuLhkvaeA+3utnprZYyLyOuB0M3sitlGU7e9p+ISFYRG5P8uyW2u1WtcJqXgMfgY4H1gRF282s5fDBDTRJTEBtl1VrzGzb8VJGsuZRsHNzBaISF1dM1vVZIlE4jgiKQASicTRYJWZdZsAaBjT1iuxOtlwbTOz5TRKautV2ocrnqZbY7ETle0lgUcf5UmT6XKAxgQNBfl6nkM0tmgcYsqErS2qOiwid+OmhqvwsV71pFEffsNeVDn05fZnCHglheNMRNYBV6hqX6wIPoePsusKEVkmIuuKY8BEZIzG8XKT+8bU7Pg65+GJjXcBl5rZZ8zsNmJiTlXXisijeGLgPjP7K+DuLMvKlDsLcNf/JSWPjZnZZ+mshaAtceze2cDHzOybwK2UJxNHReQuYK+IrDSzmyjvkx+heUxfx9Rqtd14f/+FIvLhsiRHHB16HX6NWQJcIiI9q4hiS8a1wGNm9gQ+bjFNAJhFhBAO1Wq1B3CDwOeZxjEYv9OW4WNqj8a1N5FIzDGSAiCRSMwosXL3ymjO1TFmtl1EZqqC2NC3jgcwv6CqTxQUBk/gZmLFXu5iMNVEdIm/Cr8xOwQ8irufvxxu/UeLURHZTCF5QnPle0ZeC6/WrmSqn73KCHIUVyCcDGBmO6gwyCsSg+pzaOzxX05jkPmqis3rsuxBKlpczOwGEdkWx/kB/AXwgfxzmNmLwKJoFljGIPA64M9plBGPA/8e96OY5DoJN/erM0ROJSEi/XEqxzxVHcPHH2r+ceBsEfkqufcytntcjysZyggi8sXp9CdHhcEwbvx4Df65DrdIAAE8iUvl5wE3RHO+Mfy8z2+3Mk77aGhNiC0W63Bn/n/BjQFLx/KFEPbjJpOlRNPQ/Ge5APeRmA5PAi/G9+DAUWitSBwbNuBJgE/i153p3HefKiIfVtWPJFPARCIxHZICIJFIzDRDsT+6K6K0diYSAOMUgsFYQTmb5grhLrxXsxi0t0xeqOoy4KvAbwOXAO/DR3+d3W7nVHVYVU/LsmzNMeql75kYdJSNNDsar3UY+ApTo9HGqTBijDPW7zGzp3GZ/N1tRivmGcRbPPITBIaY+sz7mJJe5xll6jiZVzXiUkRWALcDa1R1MfDm/ONmdii2Hny0zX6eUdhHQgiY2S5cLVF83WLS4il8WsN4HEH5FHAn1UmVI3gv/aSDfUyWnIUf3033C2Y2DtweQijti+8EVV2Ay/wfxI+1s/CWiXb3J38fkw4XAO/Grx1/CBSnbKyoSCSsxUchfhD/vG6JbRO9METjtWXIzHp9LsDPvRDC/hDC6AmWVJxTxM9xF/B+4MtMb7pLP/BeyltdEolEomOSAiCRSMw0Qy0qm1UcMbN/qNVqpVVEVR2II75eC/ww9uLurTA0m8D7r4tBnOKBxWTlJPbbPghcSSe1JgAAIABJREFUlF8/BjalRIOvc2iuig8BV6rqhhiglv0dJwN3ASujnPsJVf3w8ezubGYbY3/9sWiL2IQbON6At4Q0jVPL8VxMGg2JyEgXrzGf5ur9fqYq7X00K0LApeT1z2kojmbLMxF/+vFq+cP4zX7DcSgih6PaZR8+orA4SrDO0rhtQxJEREZjEqEoi18VWw/qleI9eOVxpYgcBnbVarV6hfuQqn4Eb7kYBH4Y/7+5cOwO41L0svdjQkSewKvwXaOq/Wa2FviImZ0hIt2qSl6jnqG4Ef/M7gL+0MwWxUkKdZabWdn2q81sYa5lSPGqfS+V1f00JmUOzuBEisQJQAhhr6p+GL8+vIveC3DzzOxmVX0GGOnV1DORSMxtUgIgkUjMNItplMN2wkER2VH2QJTqfkhE7swt3oBLd8tk32O4PPz0wvIBvEL/2fzCEMLGLMu+JCK31Je1MpQTkSEzO6Vi3vhavH1gY8XfcRde4QTAzH4deBZ4pOr1jgNGgU/jVdJ6VXM6VaxKYqXzBTowuoqBblU1uxUDxZGDePCWl9oX+2zHgX/LVWLXUPj+NLNNIvJN3ChvCdXnwJiI7MEr1l/EEytlvet9ZnYWzUmQfSJSFqQuwhNc+2Dy/dkdf5oIIWzHg+dWXAycW/HYLrz633XArKqLgCtE5CZgQcVUgXacgydaFgMP4CaOYyXTEwbiTzHJtk9EjjB1TA/S4z1RCGF/lmV/LSJnxEW7mFKyHFOiomIA2N9KORDVR8NxveM2AXkiEULYr6o34i0i59Lj8RaNO2/Dk3OVrSmJRCJRRUoAJBKJmaYX86tDVeO18Jult+UXRLO1q7Isu7lWqxV7Y8eBWnQGL1ZZ3qCqnyv204rIvXhCYRVexX2yxb4OicjyiseGqZh+ECuTRVXCgIicwnGcAKjVauOqej/wCnzG9R6OYydqVSXOqT8HV5Y8UnBjHysJoPMKAChI74HDUUZfZ3nh8TE8ufMAHvzdSYXzv5mN1mq1A3Ffn8KlwaXnjIi8umTxKOVV6mE8CdCgGIgy/j5gMFa8l+AJj13Akare8izLlsR9q+LzuIKhY2Kv/1Izuyt+PmVJtE6pexxsBW4zswOqutrM1hYTCjFgKib1NuDGhevNjFixb3hfsyxDRM7FvT724caEO2q1Wtn+fBZ4E54E/JqZjUzjb+sJVV2PmzUuMLP74rWuKbiPSYJP4NMVNqnqHcDOsmpylmX90dBwJfC8me0rueYmOmcv8OH4fbCux+foM7PzROSv8LaCRCKR6IrkAZBIJGaaU3rYZm+tVquqmA2ZWbFC2odXENcXV44BzSaq56UvLy40s93ArwK34CZkt7fY1wmqZ3LPN7OFRfd2ABEZpNk1vg9YMQu8AA7gsvy3AK+PpmjHKyfFG+N7gPtilTnPQWCkIAuvjzusYj+N7vs/U3h8HAgxgHoAHyFZFSRNuuXHKvw9LV53ZbEvPX4WZd4IVcZzi4DfBX4gIv8C/C3wI+D7wHllx56qDojIVWZWbHOpsxn4424qx3U/ATN7GG+5mU7wX2cfcF10zV8AfLTCfb9JYRFCOGhmVwOP48mAT+PB2SRxnOlX8JF87zWza+N53EStVtsXQnhdCOEnQgh/0IUnxUzyCVwZsS43fq6Mj+Ay9FNxg8ovUt7mAe5x8rd4UuNZcsaRie6J00G2i8jl0c+jJ0RkPvCxLMuWz9zeJRKJuUJKACQSiRkl9vV2y5YWj+0Tkd0lfbyLgPUlkl+AbXGufJHFZtYUINRqtYkQwpYQwn8LIXy2qoc/cpDmauIkIlI1pmkv5dL5BTRXnI87QgjjIYTnoqFVR6jqIlX9DVX9v1R1/tHcv/h6fXiLRV5+3+BdEEI4AjxbmDixj9YJgEOFnu6mz7g+9SIGxZ+gYipBlP/n+ToVZodmNp9yQ8ImWX8cu1k2pu/dwM14tTfPSXiiq8zbYQlwacUkjwNm9jEaFROdcDLwGRFpqtD3yLiZfZkpNcoVZnYBXdzXiMgW4D0i8k7goRI1xCqmEhV9MSEwE4mLo0X+819A+bEDzZ/5Gfhx0oSIXE40yBSRVSJy3nR3MgHAThG5paAs6pbFInJdnLyTSCQSHZMSAIlEYsZQ1eUiUlVJasX3qx6IAduXRKR4c96Py/abqp4xgP98ydMNi8gpWZb13P4U+2r/jmqzsNfHsWPF7Q7H8W9Fdh/nFfWeUNXVwF8Dd+Py+Efj9ISjST/wszROcRiKkudJQggP4EHxLrwi/81cv/QEXhHOsy3vdG9mxf7+AeDMmIAghLAvPn/ZMfK9wu+jwJ+VGU/GKl9ZQulHJesO4GqS4rH981RPtRinfD752ynxMDCzCeAbIvJYp+ZjqtqnqufipohVAWkrDlLeT39YRH4ITKjqFSJys4gcNLNWycQGYjV2NIQwUtEKUVw2wlHyv5gh7mdKnTRhZlUKjbL381pVPTOanObJHx99wNXHu2JpNhCvN1/Gr489Y2bvBs4tU50lEolEFSkBkEgkZpIV9FbNbtlLbGbPUVKhjaPYquaTP2Fm20qWD8eZ59NhM9XmS6e1mF9eHKk3DvzzNPfleOUkGt321+GKjaP2gjFA/Z+FxS9WKDo+iyeQLifn+RCf41EaA59JmX6WZQuKlXEz6zezd9D4927EnfWLNCgDYuD5aNkkAzOrquJW+WW8kmZvn7+goDAws73AY7gUvOEcicmSd5Y9eZxgcGeXxn+r8CCn2+D/CO6N8U68LachGDezIeANwIfM7BY8yXGziFzZ5eu0YiNT5/kBM/sOx3ECwMzuBD6Hezy8QLWy6tGSZUuAy0vMTe8r/L7IzI52Im9OEEIYF5E/xVvWekJEhs3sBpKnVyKR6IJ0wUgkEjPJarpPAIxQ6L0tUqvVDqnql4HfyC+PgfyVqvp4ieP1IRG5wczuxkehgcuG/11EptufuwVvAyi7EV4AnEnJeDQR2YBXfS7BA5YDZvbENPfleKU/mqvVfx/E1REPUN0fPy3i57oBNypcggdrxQAGmFSWFCv9RKVJ3fTwZODRmICqP77IzAbyMnYRwczWAV/Nsuz9UeZ/Ks2S/N2UJ44C8OfA7xX2pR/4r6o6UOi3L3X2B5aZWfF7/XHgVXg/+BCwK44gHAfG85XvWP29CA/ai4wBt8fRi22JBnqr8f7yjqeCmNm4iGzGJxRsCCEcrisr8sT35gp8HOEY8Ed48NvtOMFKQgj7VPUy4P1m9i0RKWsTOG4QkT1mdp2I3Bjfx6pkxQs0j6DsAy42s8/TaPL5CPDf8BaLJcBWEalKQAGTfg+L8UksS/Dr5YYKQ8JlZvZuEfkp4DvAEyGEVu04Jxr7gRvM7Cst2sdaEs0E36eqnz2ej89EInH8kBIAiURiRoiy0J+jfKRZK3bQWVXt28D7aO7BXYsHag0qghACqvqUiFyGu5mfBrwkIl9vNR6rE0IIE6r6MG64VcYbKEkAhBAOqOrNwF4zWy0if12r1TZPZ19mGWtmqP+7lPiZv4i78L8TeI4ux7FFafseVb0WmA8cqNVq+cBlUVlvvIj0xSTAw3hVfS3NkwD2UHKsx+Ppi8Bv03z+LI3L8vswUrH7q4rqlhgQjMaflojIAtzosazPfTPw9U6l/7GS/GEag8x2jInIA8DHQgiTPhvx/Rmlud2nD08mPQDcFddb3sXrtSWE8DQl5/LxSPxsxqluTwLAzMZE5Ev4dTN/vAyJyFXkEgAxAXM78NcistrMNnYQZM4Dbjaz94rIoJntE5GbVfULJdfem0XkffH/7wJuAv603d96ohCvWRtF5Atm9ns9Xh/7gCvx4/RlGT+ZSCRmFykBkEgkZooqw7J2bKMzQ7Ht8aeoIV8InKOqoXhjGm82X1TVgAc1Rzp5rdhHfVLcZhQYKblxfczMLo/Vl2KFsrLiGULYpao3xyDyZZUTR4f5G3F5/oiZ3S0iW1vd4Mcxe8MisjyOWhwBDpQEhodKlBZH3QgwBix/AnyBaby/USFQtv18mnvq9+DGk6fjn33p529me0pGENbZBdwfg6b88bQETwDkq6IT+I1+8XUW4edDKxPLVpwEvLFk+RE8qdKy8lsnVuwvxQO6TvrFJ8xsV3Su/3MzKztH99GcAKirNW4ADqjqEnySR6IFtVqtPoJyK80jKM9Q1dNCCBvrC+K58AK5xEC8RvbHx4osAC7JTUxYBNxiZnuiWqvh9XL/n2dmN6rqkyGEORPIhhCOqOrtInIBvY3RBf9evFxVb5lugjuRSJz4pARAIpGYKeZTPXaqinHgH82sbaBmZjtFZIuZaaFKMmBmvyQin6PCTb1FMNdEvLF9F3AHsNDMtojIh1X1qUJgvFdErsWd1M8u7OvftHqNKIXteITaUeRd+Ii4vtj7vhDviW8lwR0QkbuB82OA/3U8ACsGbQeKy8xswdFUANSJN8C9BsHtWExzlf52M/uGiHyMCjd1ABHZTcVxGKvXXxKRc2g0/ltW8nrjeNtMWaJhDYUqoKoOmtn5InIK8D+Ab4QQRkq2fRvlEvrduDS7U3nxyXj1v1OzuCAiHwaebxG8lL1v24FbQggHsiwbAm4RkbNL1puTRFXWUjxBV2w92Qk8hR8vxYTTG1V1U9nnHeX9q8zsPSIypKr3AS8V1u0jd38Zz/nFeLLxCRpbgDaQazkRkYV4C9WcSQDAZBLgVtxvpJc2ln7gvcBnqG4RSiQSCSCZACYSiZljEeW9w604aGYjtVqt7YpRhv2d2O/bgIicRvkItF5YCVxHlG+LyBrgegqy6FjFCrjU/ELcVO5+4PqYjDiuiaOj3kT8HhCRPhE518zKZsnnOcnMLsETPsP4TefpJevtppBIiBMiZvv3zjDNyfNttVptL37cPE65x8EE8O+0TkS9RHOAtIRmSf4E1b4ZDeP+YjX+YhH5JN5icBvwoKqeXlhvELig4jmf7LQvO6pKrqODvv84+eBp3IzxuTaVy5GSZS8A+7IsGxSRG0WkU8XBCY+qLgS+AnzHzL6jqmfkDThjEvJLNCfu+oG3UjJdJcenReS3gA/hAWvDumZ2EHi+ZLt1FJKlcR/yybpB4OfLfB/mAE8BD9G7R8oSfJpDKu4lEomWzMULbCKRODqsoUtVUZyB3JGsOPIC5WPLhikPQnthCc3JhHWUyNdDCBNxjNgjIYSrQgiXhRA+HkLodkb6y0E9gM8zEJMprVhd6DMfoPy932NmRXfrWfGdE0fXLS6OO4tByU/SHGTOh8nxk9fj3gNFDgN7WvXQx+PmPhqTBP00H4/jePW7jJ8r/D4IvJYpP4IB3KDw8sJ6Z5S8Tj1I/6vKnW5mHW5y2fazFpGngatDCNs7UBeUVUX3A30icgVuEDqIt2OcsKjqkKqerqotvRXM7GLgPGBpTGJeSXMScwsedBZZS3VCtQ9Yjx+Xfbj0/Nz8CiJyEHiQghdBvG5cVjivXqI56B1kllwrZpIQwsFoWjsdE8RL8PM7kUgkKplzF9hEInHUaBog3Q4RGW3nKF1gB9Xyxtd1+/oVlF0X51OorJ4AHKbcLGx5q43MrMzn4ZXFBXHE1a34iKsx/AZ/J0dpAsBMEYOT24Fn8Ur5qlzldJDyymj+2NuBt0Q0HKexr31PTC4sU9WzVfUsVV1ceK4XKZjOlYxdGwf+peJPWJZlWT5Bc8TMfkBjUHHYzCbHT2ZZ1mdmb6FkgoeI7KBDObaqDpjZ9bQxAo1JheeAa7ro9S5731fjpnG3APPN7Ekzu4wTNAkQ1RUfw4Prv1DVD1ZVykXkp2n8HFbSbEqJmX2R5naZQVpfB4qJ3svivgGeGDWzpygfQ7iaXItLVJZ8mqnxmGPAP83VPnYR2QI8Yma9PsVS4K3F5GUikUjkSQmARCIxU7SrHJexrZtqebwpfKHi4fVxhvl02U95BWamFAbHBXGWe5kz/GtbbVfWgmFmK8tuOEMIO83sQnze/B/F4Oy4TgDg1c3fxgOV883s7Ux9Vw5SbmR4cd19PoRA8DL/nfkV4ki2vTGYfxSvqn8b+JKqTlZmQwjjcZ77nty2DQmAqCLYT3kCZ1F+/RDChIj8OR4o329mnwOuFZE/yz3/0qj8KLsn2GxmnQbU50QjxJaIyIvA+0MIDck/VV2pqmvz70cbzsc9LBYBT4nIVSKyielVUI9nzsArvEvwAP0yykeRAvxPcj4jZrbEzJqO3fhZVF1Tq9hV+P0kGs38qNVqe83sEyXbLqVgFhtC2IRfI17CFQmPdbk/JwxRCTOdPv4+M3s3jT4iiUQi0UDqE0okEtMmy7JFVN+ItuLvetjm+3jfeZEhXLr6TNWG0cF+gYhchCsW/gbvuT6ck2aPRMPBYg/zT/Wwr8c7z+JGgJPfBWa2PMuyRbVardRQkZIb0zjybVHZY7VabTc+o70rYtW9D+g7xtXAN+R/EZH/zNS4uUHKq6iLROQOVb0JD476gJ8urDMmIgdE5GIaJ1mcibfPTLqux6DsI/FnHu41UWS/mR0SkYaqvZnNE5FF5FprQgiHVPVTwL0iMl4yj3153IciY2b2wyjpbklMvv0a7Sc9HACuy1f+syxDRM4ys4+JyDDwQpZlV9ZqtU4+9wn8nL8hTthYRm/XotnAShrbdlYBK1V1pKS15Cngavyz7QMOliXv8ETSnXjrxnBcd4+ZbavYhwlcpbI8t2wh8CZVfSY/FUBEnsRN/vJJoWEzW5JlGQXvl68DL5rZ4einMZfZLCJP4GNvuy7UxQTgpar63zsd25lIJOYWSQGQSCSmjYicRBvZbwVlRlHt2Ex5hW9enMPeivnRqf0zeM/wV3G3/8mgJYSwX0TujjLlOuPAD3vY1+OdB4AnyVXlRWRXi1F14FW6IkOUBMbTZCHwW8DtqrruGJqCtTqOB2j2TSCO7Xu7mT2LB1OfNrPfKKx2OISwC3h1YXkfhWpdCGEshHAv3s//syGEsoroqIiUTToYpmQcZ1QmHC4J/gHeQnngfkhEnu8kiDCzlbjBW6vP6SA+HaDhCUVkPnCliJwa9/2iOA2hE54GrgwhbI1GhtfRbJp4onCIRn+IYTMrjkUFIISwGTco/Rxwv4jcQEkrR/QxeQ54R31d4CqqPSYAHqbRPLAPOM/MGs6N6PHyMRqVRv0i8oqCjwghhPEQws4U/E96gXyacoVWp7RShyQSiTlOSgAkEomZYBXdJwAO0iwl7YRRMxspWd4vIq/K96KWsBK4iKmKdz/wdpr7+58WkT/AK9qjwKeAb3S6g6pKlmX9WZb15Z23jzdCCGNm9mHgXvyzeAC4qU1bxs6S6uAYMyi7ju/ZDXgv/m/hzvXHStLa6qZ5gOZAeYJoTCkiS3Fn9CuKAY6I7M2t3xExKKr6LA6YWVmiZghY2OlxF9erGp03Srn6oAkReRslyZECTwEPlRj+DZtZ3rhsiGZPj6JXAnil+uZY+e+P0ufKMYwnAJspjDqNox1LCSG8CFwLXBVCeLqV0WII4Zncuo9XqS9iMmgjzcfFChFpOOhqtRpm9gx+/o7FUaOHgX/i+G8FernZTLmZaKfUxznOzN4kEokTitQCkEgkpkUcOXQK3ScAttB6JFoV+6Ix2cnFB8xsjYgsobp6dRLNlepFwC+Tk2DHKunN8acr4vvxdhF5E97H/XCWZaFWqx2XN7y1Wm0b7hDeKeMi8mm8slf/zMdoHic2HRbRWE1eFXvne0kYdYWZDcW55XXGC48VA9FngE+Y2fWx/73KfKueAPgm3sdd//4dB7b2sKv7y6T5UY3wKvyz6eT8WkG1weVznXh0xJ79t7dZbT+eXCrOowdvc1ie+72P5kRL8bydAL4gIi9FdcgFInInJUaGJxABl8r/JlPHz6FWhnHxWlam+mi5bgwc5+PKlfHCeiNZlt0CPBjVG+CfWVPyrFarHVLVjwPPi8gbgW3AUx1MfZjThBAmVPUT+HWwF2+bebgK4HEKSaNEIpFICoBEIjFdFlA9MqoVW+nwxrTAQVzK2nQDGfv2W0nRS6vIZnZSD/tRxdl4i8F7zex3gbtFZCbMCY8LYgXwEbwPGAAz28X05KpFBmj8fpqfCzSOKWb2b7FyWfc6yAf4R/CA/nERuZLykWp16v4Iz5F77/BkVTeTMIBJE8eq4HwR1YmIIvWRbmU82+FznER5hT7P11s4/veJSLeu5YeBf4zB6Tq8yryXE9hALv6tdwAfx5MBT5vZlwoJqxnBzC4FvgZ8OvoqNCAizwCfy7VKbcDbicr2mxDCSyGEPwwhPJb3CUi0ZBv+vvbKaWZ2ok2vSSQSM0BSACQSiemyiO5H5E3gPfVdJwBiZeTv8eCr2Os7ZGbrqb5p+s9lC0Vkebf7UUYcg3ZlPViN1dj1eIDUrdP28cwu4FeADwD/SUTua2fUp6pLcInxG3G1xa0hhNJ+3xhUTNQDGzN7WRIA0bhvf65aWTSGHAO2x2NyJ947/U3c5K+YYP9/47/7cMXJBXiy6qF8X36WZcPRCG8UONCm/74qoF6NKwAmFQKquh74Svyb3hlC2BgnN7yBkmSBme0VkU4dxNp5gOwA7unwuTplAhhX1dOAL+IJgV/D399/pH07wqzEzEZF5EaiMaWITMy00ZuqvhG4C7+2TwBDqnpNCGHScyKEMJ5l2YdF5G682ryT3hRdiWpGcZ+aM+hN2TIkIlfTm9dOIpE4gUkJgEQiMV2G6bI/28wOiMjuachAt5rZkViRbUBEKsfYmdm/VFTLymaM98L8imr/Gk6gBEBuDN3vd7J+lGhfgkuXB4BTgSOqemNF4mB/3ojwaFQ4qyg4pe83s3ySokFdYmb9IrIQ/D1R1T3A9cDnaU4WjNbXw9+7LxRfO8uyZSJyi5mdLCJb43NVKivM7McV780ymgPydwDLRGQcDyg24sqdVWVPICKb4352witKXq/OBH7sV7nKt0VVy1Q9g8CF+N8whE8W2BanERSTL52OMTzuic75ExzdHvrFuVaYPvwYGcYnOOT3ZYJj0JYzV4nXlCdx9VCvlfx1qro8hDAyc3uWSCRmO6kFIJFITJdT6bL/X0RGgZFpvOaWFk71p1fNEY/eAWWqgwFVbXJO74GJuly8QKVR1xyhH3eaz1eaz8Mrx03UarUxGmXyx5JH6/+JFfDNucf+S35FERkys5tV9RyYDO5fAD5ZmCIBUx4AlcTxlO8WkbXApbgRYqv1q7wuyqYyPAxsN7PtwKa4bDnNiQrw4HITHSQAYnKnPj6ujDHgwU68BFpQlqAbMLOLzGwh7mHxVFQ0XEpzz3SniYwTClUdUNXlqrpeVX9HVb+lqs+q6gfbbPqciLyEHwdjZvaimc1ki0+iQ0IIo8BXpvEUi4ELsixL9/uJRGKSpABIJBLT5Rd62GYf00gAhBCOqOoOyh3bh/CkRJnscXd83WLVs5/288s74YCIlFUbS6usc4yiT8Qw/vltLlkXM/tLEfnto75XzTxkZhfGWdq312q1ycDHzBYXK+4isgq4W1Wvxk3zJlT1+Vhp7/Y79qeYCqT7zOyNqnpb7Pcvo1V/8CoaRzY+D/yKiBBC2BKXVXlmHAJq7do6wI0RgeEWKo39uFFiK9qde6XBSzzXbgghPBUTEWfgYwbnNDGZeQbwi7hZ6hoaJeTL8MkmpYQQdqvqNfE5jojIEyGEnqd8qCpmtjR6tJyKJ9L6gR8B9yZPgLY8AlxDe5+NMgbN7JdE5MvM0URYIpFoJiUAEolEz8Sb7lPbrtjMDjOb7ti4l4CzigvNbAA3BWtKAJjZSDSvWkljUNFPbzdXDcTg7y+BdxWef56qDlTMYJ+rLKDFex4rkE8C5+DS47KZ9z0Te+Kvw/uW7wA2xwr+QRG5DFcrNNww1+X+JazCq3SfUNUH8OOv4fs1rwjIsmyeiJxtZsMi8njOC+F/FV5vHp4oqUoAjOLvS1nbyetV9fF88iAX+BPH5r2pInAfpUMFRvS5aFVdfDom7GBKWr63oAgoayEabHPOHMY/t7rx3En47PTlnez3iUJUPSzCE2zn4J4Oq/CkSpkSaq+Zfbrd88ZjZUu79Qr70gcsMLMF0cfiZOC1wFoRWWxmgwUjzXrg/2fdvM4cZAQ/zt9ND8pdEVmPnxcpAZBIJICUAEgkEtNjKb0FzrXYyzodvl+2MM5ff5WqDhYrS7Va7XCWZV8BLo43qACYWT2QmQkexyccrMktGzSzBaRxTHn6gZ9W1f6KSvMhfAzjwfj/nnvIi6jqIB48rqvvi5ldzZTpXlVyqtW0i8W4E/1l8f8N368isjv3/3OAe2KA/3rgnQBmdrAbvwMzm1fmgxG5BG9t2RPXHVLVw7lth0TkvIptR0IInfZ2H4rGdFWPfyf+eyr+ni8EHlHVO3OmcmXn3gK8ar0fWBTP0fzju4Enohndcty0rqyd4YREVZeb2TrgNcDp0TeishXLzHaJyBPA10RkOs7yxf3ox/vTVwOvxhMxq/GAs2F/So6RUTN7uVp9Zg0hhEOq+ihwPr2ZWy7CzVdfardiIpGYG6QEQCKRmA5rzWygB5O2mbjp20519XMVHoSNFB8QkRfxGfY31bcVkSNmNiMV5hDC4SzLrhKRW4kBiZl9g5kdk3fcoKoLzewjIrLezB4E/qRWq3Uq6V2GVwObEgAhBLIs2yQiV+G9yNNVjEwS5cj5qvNaEVlMC5VB7KEtHmtj+E31MFOqkiqzrkMwOSniNcCCeN6cr6orQgg7RaSYIBqIr9kUjMdq6wVUj/ubD1xR/6WkdaFiM6Dz8X911Utpq0BMaGyPCZcbgTPj6w4D38ZHInbCwpL9PQKMquoi4HZcrr4N/0xO7nT/ZwPxs56HKyjWi8gvA2tEZGFMAvWVvD8TMTGzFfd/eAzY16sXQ1RwDODH1bCZrRaRNwGn4YmxefGxsn2Z3Cf8HDsIfB14MJpNJtrzDN4udWaP2/9ylmV/FI0bE4nEHCclABKJxHT4xR7nd2+dgdc+ECX9WvLYCvwl4O6+AAAgAElEQVSmdKT4QAhhXFX/BE8gvAW/cf2+iGycgX0CoFarbVDVtwBLzGxcRPZMY+LB8c6lIvJBYEBEVuBBWNks9jL56VIzq/weiiqRGZX+RxbQ+P03QJvvw5ggKB7rL+LH0BI8CD2PNoaYUQa9PLeoP7dNMTgbpKQ/PgaEZ+IKiaPBczPxJLFHfz8eMC7NBYaD9DbWLM8gXmW+DFc7vBRHcPYBP8itN2OJo2NNrK6vAU4HXmdmZ4pIgyFiSbA9DgTgeRF5GNg0nR77uA8nxf04Jf57al5B1QH78akTm3FFyEvA3pkeX3giE0I4qKpfpfcEwOroVzJjSqpEIjF7SQmARCLRE6o6j+Ze+k7YzszMiz4QXdDLEgALcRVAqdQ13hA/EkcsDQCH2gXosdL4Ptyo7UFgQ6ue/vjYSAd/x6wly7IFeGBSV4EsAN6kqk8Vgo6JOFe++BRLe0ggTZt43Bwktq+Y2b4WUyXqzKf5WN8aQjisqjvM7BoR2Qb8Di2+W0VkwMyW5d6LvmikB1Pj3UrPqViFXWBmbxeRj5rZkqM0IrFbmfEBPPAs/t0H8KTGERHJJzc6GWM3xtTEjjKfgeX4ebgED3ivrtVqoT6RIcesGgEY1RLzzeyNZvYrcSLEYmCwxWc9hh/PzwB/gQfbe3rxHImvPw9/f88B3hCP14V0ZpQ6YWaHRWS/mW0UkW/hAf8eYH8nxpKJSuojAbsauxuZB5ybZdm2GWi/SyQSs5yUAEgkEr2ymN4Mt+rjpabLQWAH5QFTH24+dW+rJ4hBaqfJiGuA34v/fxfwflzGOmeJEuSGYBZYiweQ+cBromJkXb0F4JgSq2nP4Emiiaj+aBcoLi1pdzm9Lt8H9mVZdpuIrDSzi1t4SgwUqqd9ceLAJrxN4ADVAfg84C4ReRfQf5SCf4D3qOoTXQRr/4PyBMBe3FfhgKo+TDTtjP3oO9o85/6cgWFZwDOAJyB3ANeGEDZmWTaf6KeQ47hX3sTEzkK80v9W4NxCi0opscXiJeCbeHC4tZeqeq6P/yTgdfjntJL4eXZ4nO3Hr+2bge8Cz9RqtaOh3pmzxETlQ8Bv9LD5APA6EbmXZAaYSMx5UgIgkUj0ymJ6q0T8gJKb8ihrplOpfOw9/ic8gC8zQjtVVZlBmelpuf/PB96vqg/N8YrWRDE4iKPyijL4CTP7kYiM0Rjw1+fVvxxV2r/EXbUPAo/Wq6WquhK4OZrO3RKDe/DAvSGoN7OTRORWVb0hhLBXRI4AH42tEPnjpVNG8aC5KgGwALiY6u/ucfx8yJ9DR/AgeRxX34C/7+spH6MJrqpZBuyseLxTRpmaYHBv3K+fidL0/HOP0JjIGwP+Iff4T1Q8/17gemBD9FZ4r5mdfxQTIzNGrqd+Ke7l8A4zW0nrkYqY2RgwKiJPish9+Ge7u5vrXLzWDpjZ/GhI+TbcN2ExHVT547kxhn+2W3CPgQ24V8VorVaby9fEo0a8vjyLJ6B7MQNcg5/XKQGQSMxxUgIgkUj0RDSBWtR+zQb2AduKQb6qLiX2T2dZ9gywpUOzoq34TWhZAmAN7n48U877xZ7l0/B9fmSGnn82shcPQCZHQZaNhQshoKrbcfnqisJzrMKrhseap4A3A+MhhBcBsiwbxN3kz4tB2EJV/dVonLaIZmf/fuBSYEhVrwoh7FPVHXhwm08AHKazSvSe6GtxUvy9Lu2u00f5sV5f91O40/5hYKyV4ZuqLsQDt/UlD9fbezpNABw0s2IyaIKc5DtW80tnz5vZ7mgGV2/nGaXcRyLPfjz4fzImA88TkY/SmUz9ZSW2E51hZhcC58dpEO0q7XuBF0XkUeCxEELXQVwcGbgGOC22F5xO9fFUxhFgR1TMfBefwrC3zTYnFFmWLRKRdcCQmb1Qq9V2t91ohojX0Q14Im9du/VLWIFfq5P5QiIxx0kJgEQi0RMickoPm41SCMhjJew2PJDqE5HngMvxYLElZrYt9m5XJSLWMjUnvJJYETsdN1h6CnippLLfIGeN7ttvi/3uPTlrz3Zi//vfAhcxVdkfozzY3RmD22ICoBcVybSJFf8X8sui7DpfFR/GA8rDeFBcJes/HziQZdkd+PfqqsLj+2Lltor6e3BARLaa2TkxkbKBzk27JvDRmHvw1pyLVPU5IJSpakIIo6p6m5ndF/u78wyaWTfJvX0iUjxfxoF/72TjaBZ4B/Cx2GZxVwihXYvAk8BDwLiqngbcSvlEkJedeI0DWGhml5rZhSKiItJufydwdcQDwF8Bm3OjEzt93T7cMPEi4G1mpiKyvFPvDTObAPaKyBNm9s3YurGjF3+B2U6WZcMicquZXSIigyLypKpeFkI4ZkaTMcm4gd4SAJjZW4DPzexeJRKJ2UZKACQSiV45q4dtdtMc2A/jgXf9enQGHhC1TQDUarUDsbJcDCrBb3xfTwcJANzs6mFcFnujiFwHfKGwzha84g9MVrrPxoO9uVxR+QLwa/gN6Rj+fjepLmLAeTdecc4HH8fT99AyqpNJA1QnAPqAK0TkiorHm1olCtvOg8m2lk8zlUC4oRBojeEy6zLp/iDwJtwA7kt4Qmsf8Ab82C1ja/RmKCYA6uqGnomKgI4Co5hs+/P4U0ZZVf8HIYQx9Si3/p6N4KaA+eNrGy+jD0Csup8KXIgfI03vdYEJPImzAfgaXmXvyjRVVfvMbAmeAP1lPEG1EDrq55/AJ6xswycJfNvMnp+LAX8Jq/DPsH58vRF/b+8/xvvxNdwHoOtzVETOzLJsfq1Wm7XTMRKJxPQ5nm68EonELEFV5xfM3zpla0kFazWNMtR+upsssBUP4Iv0AatUdaiDCv3lxKAhynHfSnMC4AfFjfBExVnM4QRACOGQql4FnGNmR0TkoZx5WwNm9pSIPEUukULJjPuXkVZO5/+Fcpf7Z/D+6ZUzsQMhhJ2qehkeiBXfxyO4LL+qd38V/jfUFQWLzGwtFQmA6NZe9llN0DySsBX1KQB5xnDZOgDRnf8y4EfAH3epmin7e09R1TOBj+KB7peBLwKfxM3sXnZUdT3+N59NZ4apO/HkzdNmtrlWq7WbTNFElmUr45SIt+LHZactERO4tPwx4NsisjWEcMzk7bOBmPTNJ5cGgFe8DLuyLaqpur7mROXa6XSWGE8kEicoKQGQSCR6YV0P49smgO+VLF9Bm9npbfgO8JsVj63Eb7y3Vm2sqvMpBG9mViav3I5XVIsV4stV9VPTmbV9ArDZzLaISEsTx1qtdiQmC27Ee+Q3c3zdiM6nMRk1ZGbz8UC2SQFgZneKyB/gQfd9NCpZuqFhmxaS4oO4R8FyygPKpfj+5/0qKmXmcSRh2Xi5I3i7TqeMmtl4/nlEZILYNqOqp5vZJ2P7xwTwyuiZMJkEUNVhYHl8nu0dnE+XAG+Pz/cnwC3AfjMbfTlNAKNM/Aw88D+X1soRcN+HzSJyj5k9IyIHOzVCrRM9VBR4D56QLBtZ2YSZHYoKkE14VXkjcLjb159DHCE37cLM+kVksar2H0szWDM7greqdZ0AiMqeN8fWtfQ5JxJzlJQASCQSvbAmOkF3vEFcvywQLyYA6jdZnbKT8hFkAIujFLYyAWBmC4qu9SKyRFWXhBD25NbbH+e8FxMAdcf357vY5xOK6EDe6fSGPap6A976cfA4T5wcbiVjF5FtIYRxVd2Lj4n8BF7t7YY+4Kc6WTG2CDxpZteKyFdpNqZcglfe9xNdwkWkUp0SXeDLEgTjdKcAKLsWjBNbQcxspYgsj8vrfhtr8ICzHvzfipsvHjGzjxEVOHFEXVkwW3ey/5yI3BpC2K+q83pITM4I0UfkIrwd5hzam+vtxavtXxORjVWqmSqyLANYIiIXAb+KqyCKx0MVB4Cvi8jf4Net3SkY7IiDcYTlCvBj3swWRtXYMRt5GCcwfA94L90nz/vwc28hM2eQm0gkZhndyGwTiUSi3tP6iy3mnFexn3Ip8n+i8Vo0Qnc3UwepditfKCKrciZcTYjIbhqd1uucVFhvH77/xRvlIeBt9TGGifaEEMZDCPuOw+B/lMZjYT9TQeyPaU5MvQ4mEyDb8STAdrqn08CNEMKYiDxDDJ4L9OMV5+fw43Qrfj51yxjdBQcjNCcMxuqvXTIZYhgfOQeAmV0A/Dou9V8lIjfFiQz1dZuSFNFU8XPAjdFfou7JUayKbotGdkcFVe2LUv+/AL5kZhdRHfwfxKvtN5rZa4DrQgjPdBP8q+pQlmWnichtIvID4E7cN6XVMVT3FXjGzN4PZMB1wP0hhF0p+O+YfSLyQv54isH/dBRsXROvN1vpwCenjDhucvkM7lIikZhlJAVAIpHoliVU9yBXIiIvVdxo/gNe9a/fNG8xs26Cj4NxGkDReb3OLwKfpUJVEKuqO2l2VV5WWG9MVWuFfQUPbE4mVVROBPbjQVq9b3pP/ZiNSoCi0uR8Vb0jBlHEEYA34KZ0PU83UNWLgNcAfx1CeLpklXE86VVmxLkIDwr/FdhuZr2MaeuqBSCqIOrTB+ocbCGLnkdujrmIvJ7G93Vh7G/eAmBmfUWFQZwWcmutVquPw1sRDTwbTPZKxhPONG8E7iFeLype63CU9z+Ijy3s+joRE69nAReKyHn4dbgdE7gJ4uPAt8xsY61Wm5MTS2aCEMJBVX1YRM5nKim1gA5HKarqIDC/l8+/hJ1mtqcXHwBgiZmtoDyJmEgk5gCpYpVIJLplMdVO6a2outnYzlT18LCZfUtEulEAHI59rFWcRvtr3aM0JwjKbpS3lC03s5NJFZVZj5ltBfLj5/6pzfpLgJuij0S9Mvck3p/bE6q6Dk8g/DZwl6qeXPK648A/VzzFihDCNuD3gW/UarVe3NsP9zDa7FuF31uN8ZuAhvF4RaO6CVxBADBYbNGJj90YQtiVZRmqugr4PO6234CI/H8d7Pt0uIHyhGg9SfNlfDrDZXjFvavgT1WXqOrb8ff3q2b2PloE//HY2A08AvwKPgXi5hDCcyn4nxGewM/xCfAWMjpQAESFysXAw6o6bcPQ2JL2Ui/bisiAiPzSdPchkUjMXlICIJFIdMticvLdDhkH/q7isYA7qR8BHhKRR2Ig1RFxPNU/xe3LWNXBTPMngRcLy8raCjbjVeIGRGQxPs0gMYup1Wqj+DhI8CDzhVbrR0Otd5vZzVmW1SuCfa0k5/GxVh4Xw9F4EFzOvr7YXlKr1SbwIK/sdV4Jk20WvRqTjfSwzdNmlk/cPdtqZTNbYGb1v6uY8NsaQqgn9RbQnCDYQpweISKLzewOYH1FW1LV+zQjmFmZkvJF4A+AtwFXhhA21Gq1A91I7VW1L8uy9cBXgK/i1f8FbVqvNkRTyguBXw0hPBJC2JtG+M0c8b28Bb82HBGR58lNu2jBPDwRtIYZmFJRq9UA/nYaT1FmdJtIJOYIqQUgkUh0TAxETqb7nsdRKvoVQwhHVPUa3ARsTwihKcDugG14EFGamBCRdcA3Wmx/CK/k3YobHG4qM0+LI+9eYmpO+yRm9nq82leKqg7hyolxYO+xdI1OdI6ZfQE4ICKHaVStjFcYXw6JyIeAtar6FeC/RolwngXE79to4LWbxoRRPjDcFtcZjD8/h/f1FxNco2Z2QESGC8uXqWpfJ8GmiMynfEzcnpJl7dgsIrfiIzVfovF8G8XPz3qSZCD+jfV9/Cbu6j8ATJjZV3PblgW8o2Y2rqqLgLtF5GwgxDGU6/LbmNnhGCwdFUTkLqamLwTga1Huv2+a5/iZ+FjDpVQXa8bxhOQGfArFi8B0XzfRnu1m9mvx3OvoO8vMhkVkrZkNicgpqvr4dL0XzGwjMNGDHw/AGlWd34PSJ5FInACkBEAikeiY2Iv78z1sOkKLoCKEMEp3Y8eK7IjBUGkCwMxeR4sEQLwR26iqbwGWiUirqtmzeLDSgIisr3p+VZ0HfBj4LfzvvKHV/iRePuLs9bJEzu5cYF5kEK/QlvXkg/e7179vD+EV7DfG3yfIeUeEEHZGL4G1cSTePzMlh8+zP/oSNCQAoiR5ER1UJc1soEReD9XtBZXEkX5/HH+KjNOoejhsZvtzgfnTwKfM7DwR2SkiT+T2cX5MVORZAVwKvMXMzhaRp4Fr4jl4MlOGeIdjIueoEUJ4XFWfx3u7ezJlK8PMLhSRKq+VI7ga6Zu4emlTN6qpxPSI3xd76CJRJiKLcIPLfrxdbJAuJ22UPOdu/DzvxA+iyAA+OeK56exDIpGYnaQEQCKR6IY+SqrfHbCHHgL8WDU/E6+CPYZXt8qqJntFpPL5RWS1qs5r57Ydn3ukzW5txG/cGoyfzGyJqg5XVIOW4S7nQ/H/H82y7JFarZYqdbOHss9qP+5Er3hA30klbszMajEwHcITAMUS9SeB2/Dz5smKY35f7ANenl8Yg+WldJAAqFIAmNlI+z+jKw7RGOwcEJHJ/QshHFDVj4rIZ8zsYP6xONavONpvpYjcifsDbACuxVsCxmj8nA7Fn6NKrKLOaCVVRH6MHxt94FMPojfKC7jfwRbS+L7ZxAriPXdu9Oy0EgDR4HITUFQcdbr9SaQEQCIxJ0kJgEQi0TExYGgyJWtFvEnZ0e2c69hucDPwO3HR+3EjrW3FdaML+SagtApvZktjoFQ2hrBb9uKjvM7IL4yVndW4HLfIEI3tCUtEROPzJGYvD4UQbowmgPcAF9AcrDYQpwU8hftenGtmL4lI0TTwXuBJETnSQl48GhUARebTuUfHMsodzHsZZdiKrfixvgzAzPaJyK78Ci2C6H7K71UG8VaDq0MII1mW9cUqa17RME65emI28GXcz2GFmY2IyHdxc8mdKeiflby2/h8RWWRm8yjxk+mG2I70A3pMAIjIq6bz+olEYvaSTAATiUQ3rOl2AxEZp7nC2QkL8ep/nZPNbF3OObzID1rswyK8N7qH3WjEzPbjgUeRvugKX7bNBI093IPMgBFU4thhZvUxgHnqSa2DwA1m9ggdGM6FEPbgVes3i8g7Qwh7C49PhBBa9hbHgLnJUT62AKzKsqyTBH9ZO8/eisRCz8S/4xZctn5ARO4xs07l8mUmgOBJhWviv4jIAtz1Pp8AmPHK/DFkN36MvFNErgwhfCqEsCMF/7OP+L3T9XdnB0zg7W+9br8ijiZMJBJzjKQASCQS3dBV9T8yTknVHiZnW6/CK5YHgc0hhHqgvNLMluRM1wZij38f5UFWoHlOe53huO+T45t6pVarjanqN/Ee5Px0gT4RKZ0EECXNG5lSDQwAPzud/UgcW0RkH80JgFNVdSD6RexW1cujT8b5tFcCjNCb236eGj5aLL+f/cD1IvJ/qOrf4zLjQ/j5dST+e9jMBikZm4cnFWa8ah5C2KyqvwAMmtnBLoz5+mguVuwBrg0hbARQ1QXAR2j2YBhjlioAYqB/gOYJCYnZx7CZrSgxEJ0WUU00gieLlvayX/h32K52KyYSiROLlABIJBIdY2an9HATU5kAwPum78Cr/YeAB/AbecxsUcH8a8zMdsYRaGX7NhoD7aoboZ+n3E29iSzL6qoBzGxfSbDyIi5pPjf3+lBdbdyHz/FeF/ehH1iuqoO5hEdi9nEyntR5Ov5+RERuwm+qz6jcauYoG1UJfg78bvz/4fhzEA+GD5nZ4diDvLbiOY/KMRkTJR0H5LENqDjCc8LM7o29/2RZNoQbbH6g5ClmswIgceKwWkTKWm1mgv0isp/eEgDzKFfXJBKJE5zUApBIJDpCVee1cKVuxZboEF7GTbgUfhFuknSFqq6ASdn+gty6o7EKW4qIHDazVj316+l8fOEbcSf0fxeRW4syyfj3XIUrCo7E19+L93U3Ecdy/THwjdyM+Kre5sTsYT5wR5Zlp4FX5IAdwD1mdiwMHl8ws3YB9RCeYFuBe1ScKiJnAKfRfPxN4K00bf06VLVPVVep6gdU9dJo2NkTqjqkqrep6v+jqt9R1ZW5h3+ysPr+2A8/pqqDIvIBfLpG2esfoZDMUNXBLMtOV9XzVbUXRVMi0RVmlp9MMdPsM7O2hp8VLKK3CQKJRGKWk24+E4lEpyzDA4lu2VG2UFWHaZyFXuRIdL6uS6n34VLHKsaKxmIFluCtBm0ltSJyOlMBxa8D34tzm/Or7caTAGfh782mWq1WaTIYQhhT1RtFZCewEvgS03SBThwXnCwid6vqdcBLcd73m2lOsC8lV7GPsvV34dMxHmoxdrIVe+LIvAt63Pcio8DGDufIL8enFZyFB9njwNd7fN2T8PNsHnCGmZ1GxXUDf18HgSEzey/wERHZCnzVzN5TaMMpUwCcKSKfjvu/SVXfGUKYadPDRAIAVe3HzRxbtgRNg4PT8OwYojxxlkgkTnCSAiCRSHTKYnpLAHyvYvmpNFfkJ3IVzd2F0X7t5i4fAX5E+bg28ITnaW32tc7/lvv/IrxNoUFiGUIghLDLzO4F/jvwBO3ZjZuhXQ48nQy9jj9UtV9VF0R/ijy7aZav1/u0TwWeBX4oIn8PXCoixe/XBYXfPwLcBXwRuDNK2btlwsxuY+Zc+zcAz3e47qlmdhZ+HzEEXDiN1z2b3LVFROrV0rKxo8PAp/H3+k4R2YZPB/kszQnCwyXJjBVMTUk4iWPTqpGYuywws1UcpfvteHzXcsqybhgChmfCHDeRSMwuUgIgkUh0yhL85rtbRiqWL6dZhTRWnwFuZjtonGX+3RatBHX59U5aj1Z6bYvHWrEar/Y3UavV6q7tbZ8kJg3GQwhjKfg//ohB+IfwoPxuVZ3sPw8hHCm5yd4BvAcf2zeEO30vpLPv1lPx438QWCciXUtxQwhERclIt9tW8GAXnhQrCkmO5dN43Z8o/F5P9PVRrlRchCcGtgLXhRC24Cah+fdwghLFkJnV/TrAP7NXxSptInE0GBaRFUf5NXaLSK/fJ0tIsUAiMedIJ30ikWhLvEH+ObqXMe4u609U1T4zezUFBYCZbalX7ERkN1553wh8Cvh4B6+3i9YJgDWq2msv5ttVtVXLQmIWo6qIyFl4Zf4CXJJ+U5vNdocQHgNuwD0eumnpyJ9LVaPuOqHqxn8CT6BtNLOv43PlN+FqgSqVTKfV/zIGSlQTHWFmP2bq79hGo6Kh9H0xs814Uu6l+PtqmluK/qODlx+n+v1IJKbLYpqTY/vowGejC6raZTrhP5NigURizpGy3olEohP68b71bhmt6E+cV3fZzyMikz30sUL+QPzplHYJgLrZ4OYunrPOEjNTqicaJGYxZtYvIq9hSoreR+GYjyaUy3LbLFHV/hDCQVW9FfhfeAKhk0B48jg1swPT6ONdQHN7AXiwfxPwQq1WG4PJRN4KM7tRRC6luQWnm0Cg2A5xJO9jEGXFK83s7SLyvwPfCSGUmmSKyOPAG8zsDBH5KlOV+z4zW1wyeWSviNyYGwM4CFxZsv/txpuNA//RiXoncWITJ06sAc6LSp9viMiOGTg2Tqb5PKt7ZswUu+h9vO0yUgIgkZhzpARAIpFoi5kNAGt6GAFYGpDHYGugsGxCRL7T+166O7+qBuD0ilUWxn7MdgmAH5csmyciS1WVqpvCGPQM4dfWQ0nmX00MRk8HbsTN3z6Jm+G9LNXYeDw2NMOWOOw3TKEQkcX4aMcXQggHVPUP8crezZQH5Xnuw3vf+0Vkk5mNdLqvsTXhWjzRMERzcm4cuKkYcIcQxlV1u4h8BPe0OLuw3VpyQXOWZcMicpuZnQFsFpGbQwj1amPAz+16W1CDD4GZzReRO4Dz8ED+ClV9bQihTJa/U0QuF5EFwL58q4+I9BfWPSAitxBHL8bj6FIzO694fTKzJkWGiOzAlRqD0WS0Vwf1xAmEmS0UkQfx1haAXwVez/THSJ4y3X3rgD34Od+1AsfMhnr4Xk8kErOclPVLJBJtEZEhEVnew6b76PAGKvYyT0fKWOeHLR5bICKrY7WnFaMly/qA/5OKm6wY/K/F2xbuAS7IsixdY6tZg79P5+JGbJ/ERzW+XIzTXDH+fuH3YkA5H7hOVReC+wTg7Sr30lyRK5r8PY63DTwGfL5Wq3WT+Ph14P8Gfhv3LGjw5jCzbUDpRIroQ7EX+ErJww0eGSJyDvABETlJRC7BzfbqbMKNLyfia363sO0C4OwYwPfhCYc3lu1TrVabCCHsDyHsDCHkpdF9ZtZgvhmvE4/XE0VmdhFwq4gU/UkmYrBf5MXYEjEO7I+tBIk5TpwesYqp8axrgYtm4KnXlSwbo/eKfRPxXGindikl+hOkYmAiMcdIJ30ikeiElXQ/LmgM+FFZRTcaFk0uNzNE5Hkz2weTkt6z4+s+DuzsojLc7oY+w/+WVj2YpeMGoxx5gGb5M3hi4A7gTDzgOSuOJ0stAyWY2ToRyVeuh4F3qOrGVmaPR5Ex4LvAu3FFwriIPFJYp3hc9JnZecBBVb0BT3aNmdmP4jE+mQAys2WFbQ8DtwKDIYRWbStl/GSrB0Vkd4l6ocgzeBCST1Kdqqp9OeXKqwvbrK3/J7Y93Gxm+0VkrOS9WkHumhENA0/BkyMdIyLF684hYJ+qzgcuMbOb8WNnnOZ7mqZzPO73R4C/FJFD9NYOlDjBMLPxkkr4G7Is+3KtVuspWFfVFXjbWZFREZnpa9wIrcfqVtGrJ04ikZjFpARAIpHohJN72GaMiqpElEt/H5cH94vIAeBbtVqtfsP+buATwICZXSsi71TVDR32Y26nUZpc5GTaJwAOlC0UkWV4P2fZtkvxmeh1FgLnkBIApYjIK2gMPvvwatkiZs7VvmNCCKjqM8CTUU7+EM3j9Zoc8kVk0MyuwD//+2J7y9UUvl+LUvZ4LB+mO+PAOv/c5vGdInIEJpNpq4Ht+cRKCGF3lmV7C875C/H3vy6LX0wjDb+HEEaA6yr2oewc6XaMaNn6K4APAK82s0uid8ItwC8C5+fWmwghVF1/9uOJxVKimmcxcPBlSkYljjEiMlKyeFlUsnSboKtzGtPGflQAACAASURBVCWjbvHjaqbbw3pSAODXraRUSyTmGCkBkEgkOuGV3W4Q+2tbzSf/HF61ezPwV8CTAKo6DFxOlNrH1oP1+IzySbMmM1shIhvwnuH8846Z2WYRObPidVfggcW+isehIgA1s8VU91k29Xyb2U+3eI25TlPlycyGRaR4w3zMCCHszbLseuAuMxspjtYys38u65eNy87Gx/lB747+nbKxzeP/llMAnA3ciXstPJRfSUQ20Rg0LzCzlUwlAKbjx7DHzA4XKvgj3TxBhQHgUjO7HRgUkT1mdi3whIj8Jo1/S09BW7z+fBC4EFd2XBNC2NrLcyVmFYfx4z6f5Bqgh756mEwiZWY2WDiGxyj3mJku7ZKCrRhmZqcSJBKJ45yUAEgkEi2Jo726VgCISKUCACCEsA/4w/iTZyU+mzhPPig8F7gnGrA9h5s15Xv2x+M0gTMrXrofTyi0uqk/FCWhxSrucqolk7vxCnF+X3u6eZwjHJc3nLVabTcVLSBRMj5JNK7chMvpz8bPk2PxvboF98som8wxBozWarWJeO5eG9crU8R8j1zQbGaLRGQN8EJc9LfAFbnHu/nMDsXnqRsNTgDPdrE9NFdPgcm2gK3AdSLyTAhhQlWzwmp7unytetB2Hj49oZ64uF1V3xH9HRInLuP4OdWQADCzXhOSC4DVsfUlzxg9HJsdsHMa2y6hdwVBIpGYhSTZTyKRaMcw7R3Ny9gTQiiV0rehbhqWJ3/z/RambtJOp3nG8hjwd7SuXrZ1ZhaRshuigZLXq3MAN0bLP0cKGqr515JlCzi+kyYNx0T8fD+Dj/57J3A/M2ju1YJDwNV4Vf/3aTzWDzNV/V5N677g7WY2uW30t3hlTBwAPI8rZSZisuMvu9zHL5rZqJlNmNlOphILHRFbbsrYCryf6GOQZdkKChMcaK3wqaIfeAWNfidLKe/jTpxYjNFsnDkUWwB6YSG5kaE5jjC9YL2K0bKpF/8/e+8fJcdZ3vl+njlzZufMnWi1Wq2iKIqYaBUhhFE9MY4xxvE1BoxxjCE2P8NvjHEcxzHGEB/C+vh4fR2uIcQhYMDYYAz4B2CMMQYMGGOMcYwx2rcVoTiOIoSiVZRZXe1c7dy5c+fMmef+8b49U11dVd1d0zPqmXk/58yRuqa6urqnqrqe5/k+36dNis6zSCSyTIkJgEgk0oqtdN67C+UV9jJ209g3fwxwKZl/+rrVT8aQL6y3l/IA4BRVbWVqmDsezMxOKlh/ysyuZa5v/IiZfb3Fa6xYzOwpMn+7UGE/LmMA22Scxn0eANY552acc08D78BPAchL/JQa93VCeL2HnHMfBmo0qg7Gzax+7G6mxOTLzA6ISFbtcBJzLQzPAL8PXCkiFwCfTq+YJMkGVT1dVU8K4/ga9lFE7gHeKCJXi8hbKvTT5yWDdgKvd849HvqoV4vIB2hWQ+RN8mjFDM0JnPqoxcgyxjk3BXyTVOtISFrtr7jJTfjvzizjLEwCYFxEqnoVVPl+j0QiS5jYAhCJRFqxhmo3wP9U5cWCS/c1+EBrFfANGnuef5H6/z7ye30P4gOAbCtBndX4gKHMAXwPXmHQQDCvy9tvVPVRfCX4JLwRW6te7RWLiBwNffazN8mh7WIxKuhVmaTxuOoHnq+qq51zY845kiS5XkQ2mdl5md7frleRkySBZr+BiVQgMMLcudvkRyEiR8xsNDPicxs+aXAkBNjP0GyGSJIkG4Ab8KP9Jszsg8Dd6XXC5I6Hwk8VNmYXmNlNtVptN8y2J30AeDPN9zO5bRwtmMH3UqcnCuykO+NJI73Po8Cl+LaySRG5qa5iU9VNwOvwAfydzrnS8bZmtkVE8pJv+zOjLrvFOF6F1nTOtEH0qolEVhhRARCJRAoJhnvbKHbUL2M+7vdP4E24XgL8TbqVwMzuwwcau/EBSF6l/iAlfZZmtho/h76Mn5tZXjDaVO2s45ybcs49ha+Ufq+D0YUrkf0i8iiNFdfD9Kg3QGCazP6Z2TlmNjvfXkQO43vTK7d/qOoOVb1RVT+kqiNF64X+4uzN+4SZHUmSpB/4Teaq6FmJPMCoiGTPk7XkewtkX/tMEXkdvh1ns4hcFiYOdJN/n/O6hwFUdTVwNX5We9PIQzP7vzp9saAeepq55MEkcEs8j1cGITC/G3g98DYzqxvPbgRuw3/f3GRmH2u1LRF5ScGvftCl3c1yjOrTCqokDSKRyBImJgAikUgZA8CzKjxvgnlUzZxzOOemw09DEB5M2q40s9cDX8q7OXfOTQT5Zi4iMmxmzy4J5AF2i0heG8EQxcqC9P6XrbLiCX+jb5EagxeCu54du2ZmE2bWIC0XkSERuTpUCOt/+/1Uq0DX+QDwHjN7L/DmouM0kD0Wx0XkSKg+jqSWN+1PCHieyUl0tUqOgQ8a0hL9DbSROOiQpmkKZnahqr4VuAb4Fb7t4noyoztzWhvaZQ8+CNwDfAafjIysENLfPbVaDQAz22BmJ+LvmftE5AxVbSWbb1KPBZ4qWD5f6gqAKmTHfUYikWVOTABEIpEyBsnvY2zFIRawkuucO1Sr1faUOXOLyI9LNtEnItsp6Y/Gtxc0+RiY2SqqfSaRDCLyAPA3+CB0j5ndRfUq1oIjItPkJyhOAG5LkiR90z8fA8hN4fUGzOx3KT9Oszfvh0LSLJuoKgoOfh7eV5rfb7WDZpZNSgzT/Upi0/ZE5Dy88eJ6vBT7MeDeTGJmBl8RnUVV+1X1Par6z6r6L6p6vao2fa5B2n0N8ELg/fS2J0VkcVibMQPsDyqyXFS1yDdnlIVz2z9GgW9NGwy3kdCIRCLLiOgBEIlEyhik2PW+jIMdjgxbCEorLWa2LVRJiwKjw8CP8OMEZ5OlIjJkZtE1uQs456ZV9TrgLnxS5uleVk6EufZ5N9l9wJnARlW90cz2hh7g9HM7aaOZlbTnjBHLvu7mzLID4fWGRCQdQBfNCd9Ls/HdFlUdKjPtE5EGZVCYd97tICLvvfcBjwPXpvZvWzpAM7Nj2ZGNwHYzu1pE1oR13huShA9mXyAYwjW1FURWJhmPDICBcKwXqdxOIf/++hmqV+lLCaMwD9PoX9EW4VqximrGmZFIZAkSEwCRSKSM1VQbEXSQTAXuOHAAH8TnyhtFZBvemC1XKhxuqL4EXE6jB8JgJrCKzIMQbFWdGLGoFCgApvAy8c0issXMbhSRyZz54Z3IbL8PnIYPdp/JeU1UdcjMzk+bKAKY2S/Dvq6msYJepEjYFbaf3t9VePVAWRtPS2PQMGnjVPx1ZKdzrm33c1VdR/740XvwlfkDYT3FV+xnz9EQ/Gff71khyKmvMwicTE4CIBLJkG0Fm8xZBsz65ryI/Pvr3SxQAgDAzP57FRPVkAhfy8JMJ4hEIj1IbAGIRCJl7KDzROEMcFBECquHqjqkqmeGEWLdNg5L70d2rnOafjM7uWwDIWC5N7O4D/iPqVnpkRVCaDnJVsmeAS7Gm1beGQLL1ZkJANDZ9+0Xws+9ZnZXSJLMEjwB3iMiHydzforI/vDfTZnXzA3mg4dG9jxZBWzvYH+bCIHQ+cBXw8/tHW6i38yyn9kB4Ern3IEwdWM7cBN+6kZ63TFSLUhhX36H5mtZrPJH2mE/ja1JhymW8q81s6wqB/yx9g9lbWvzRUQOmFnHLStmNkw1o99IJLJEiQqASCRSRsemXmY2KSK/zJr31QlVwZvN7CxgWkQ+pap/1cmNUZIkgyJSv+l3eSOZgrHZEyLy0qYNBETkhWRmm+fwcXwipP569f7iwhutJEnOFpHX44OYb4rIvdFJfHlgZv8rKAGyc++fSpLkMhGpAVcyP2Otg8AVQL+I5FUM1+CNAvO8AeotCttSyyYo72XfBZyeejxMc2tBR5hZv4j8LnNV/FM63MRwSKakeRAYDQH9acBH8Odllkkag/sZ4IiZzaRaKqZZOEO2yPLiIH4U7dn4Y+kbRddzM9skInnnzjEzm89knHY4kOPn0RIRGSLHcDMSiSxfogIgEokUYmbP7/Q5YfxZ4Qg+4NVm9gYRWSciG4ALgrFeW6hqn4i8Afiumf0AuLZgP2ZCMFaWWNjRwmEd59wu4BLgfmCfmT1uZt8qSXCsF5HbgbcDbxaRW8gPUnoaVV2bJMlpqjqvQHAhUNVhVd0QAsFFJUyGSAeXWwjV8lqtNgb8NV4RkHWl72t1rNUJTuTHnHNHC46zreQH/9PMeQA8u74wGOSVTVf4aebxAPDb81G5hEDkX5lLPHRa+VxFc5vBADBgZmfjFQUn4q812W0fJdWCFHwlvpNRJe1kibSeRI4vzrnD+GTTg8B9wFfy1vPdKGwi3wxzTEQW+ng7VEUBgL+WrA/7H4lEVgAxARCJRHJR1X4RqdL/32oE4ItFJB0I7etwZvpa4LXAUNjOOXkOxs45zOwgBb2agXW0Uel0zu00s4uAPxCRN4nIkyWrn0KjA/Qq4C2tXqOXCLPnbxORu4CvqerZvXBzGJzcX43vkf8ucIOqLnblapLGavog8P4wl54QsD+ATxjNEjwB1nVpH4r6fGclwBlvgHEzK5O776d5asdW5lEVDJ/DvcAj+LaJWzvcRNP9iZm92sy+LCKfxX+WtwKvNbNsH/8EzUmBJ/GB2xj+/d5Iddf0yMrjEeBt4XugbMTs82kcjwmAmY2ywMebc25MRKp67/wWOfsdiUSWJ7EFIBKJFLGZan2Bk5SPOkrf2E8Df0dnIwPX0DiZYIACQ7Lg2H6IYiPDYfwIt2davWitVjtCGy7JZrYxvHZ68WmqOhzmri8FXoOXu/bjq1lvAh6lvIq8GJyI7/muj7fbAvxbkiR/U6vVFqvF4jDNveMnAder6jXOuSPOuZkkSX4uIm+trxCk523fYCdJMhyC+FHmRvsBYGb7cjwGAA6JyHQYb9cwArBFku0oXuacbhsYwZ8flZ3BnXP7VPUCfBtAp8HPejImgMHY8Bz89eIa4DP4NqLs6Mij2bYg59yUql6CHyF4pBNDwkgknH9lyWTw321n5P1CRJ7IaxsIKqYTzUxD8P6wc24+bvx7qTa5ZwP+eh99MSKRFUBMAEQikSLW0egM3i57y8aHATXmRhUdAXYVyekLGCIVGATPgaLg4hAFLv+BYSBR1Xu7NX5ORMbNLLt4lZltAXp3xl0gyNR/k8bvhxG8qmGhZli3y4k0BraDwItE5HM0mnQtJDOhlzy9rB/f8jGgqu/HB6ilwX5QVPSH9aaA6foxGFQNH8Sb6B3AK0hm22qClP0QjZ8F+CB7Gp+0GUitP0a5BP+Ime0PkzHqjJDvwl9nr5nNJrqC+3jTeRwC8W5OBDkGfBT4pHNuQlXX0Ki4KQzUgplimXqnI8K5siX8PGVmh2u1Wrc2H1l6DOGvUXn8rGD5icCXg9puArg7SZLLa7VaVbPAqtfo9cSYIBJZMcQWgEgkUsQI+X3GrWhldHQPXoIL3nzssQ6330fjjcpM1iW9jnNuysx+TrFkus/MtptZWaDTKUdzqrNrReSELr7GghGqVFmlwiA9cHMY3KqzFPXDLxQHCiZcDAHvAn6CD1AvzVkn/RkO4v0rfhL+nVXbmNkI8Dp8YHkmvuqdZgK4M2f7+/AJgK00Ju+OUV7ZO5KaHpDevx0lz/m6iKTP9WN0d4zYWpoTEOP4xMhfhuC/H3g1kDb6nAH+rYv7kUuo3L4Z75/wTeDnmQRKZOVxCjlJczOboDj5ezlebdePb7l59zyPo19VfN4IPXCNj0Qii0M82SORSBNJkoCvLlYJrP6+7JfOuUOqejF+PvjDLdQCTZjZsIikZ36XzlUWEYcPCnITniIygg80ujWfOU9xMGRmm1S1r0O1w/Hi3/AV444UIKrab2YnhQTITmCqW8oKaGqrAHywHOZYH09m8GqW+vi8vBF6g2a2ljl/jGHgz8K/G4Dvq+ojzrl6NT0tF27wuAh9/jURmaJRafDfw76szyw/RokCILQs/CpnusFzi56DHx14KXAdvgXie2bWFZOzlDoi2y70aeBW59x0CMBfHV5/KLPeYvT2D+NHP9Z9Etab2Tm0ToBGeghVXY9vJ1mDn/jyWPaalfY/aXE9K6r+76P4+6XJvwbfltb0QmE/VoV93W9m5ChOyhRvZdRbACKRyAognuyRSKSJMBboP1NNJdSyCuicexh4uMK2EZFxvNy7bqhWesNjZjtDQFXE9rCt/VX2J4tzbqeqjtNooNYnIs/DBw3dlEMvCGb2oIhchq8kd8K7RORj+O+W+/Bu+PPpZ82y38ym0yaSIQFU2reaJMlqEVmH76Wfrw/DQZqD6Z3Ai/A99Nfhq/bZpER/zli7+vm1Dh9EP5J6jV1mtiX0BX8v/aRarYaqHjGzYyJSDyDGCV4BqvrbZjaYSpiMFalk6gRjywkaj9vC0X1BKVL5PG5BH81Jj33AXbVabTIE/+/EO7NnVQLt9Gp3g2Hg5PTrZhQRkaXBx/BqG8xss4i8kZSJbVCZvBl4GfCt0C7WlExT1UHgxXkvENz/O0l053raAGea2R3hWvZ5EbmK5uvrM5QkvEsYxKsAFuPciUQix5nYAhCJRPIYpLm/uB3GqF6BaAszmzCzdL93aUBdq9VGW+zTEB3MPFfVHUmS/IWqlsk0d+YsGzGzohu7XmMfcHfq8VHau4F9G77y3Ic3Eez26ID9OX4PeyhRb6iqisjNwF3AB8ONemVCW0k2obQ7BNi7gAuBug9AGdlK9XMJ38nOuTHga8FP4nu0J60fB46G97chNe9+ijYk8Wb2TM6kgM2hx36x6Qf+U3qBiEyLyFQI/s/HJ1ryWnemKR9D2i36aFTITABPLMLrRrqEqg6RMr4UkfU0G99uxSea/gi4nuIq/wjF35lPhzaA+fLasI99wOvM7PycdSao7oeSN74wEoksQ2ICIBKJ5DFEsXN+GXkzubuKiIxlgsB2eh5bVSlzKzdZVPVEfGB2HfADVT29YNXv5yzbEpQVPU+tVpsBbgDeAXzYzK6lPVl1unrcVmIlSZI+VT1TVWuq+j9V9aOh6pbHbuC+VAA+AzxpZmXtGzfiK3wnAn9uZp2qGvLIVt2GwMuDg4P3Z4CrKVcmzNCYvGpoGzCzu4FfF5E3kZ/gGMiM0xwL+zVM47jB6YLnNyAiB3OSK0PZ/Vok+nKSZVvx/f+3hJ9h4Ev4pEuaGbqk5mnBFI2JxQedc4tlRBnpDmtpTOJsID8BUFfzrKP4fNhiZk3fmSFZXSuaUmJmed+XRQm/9Hk8LCLX5iToxqmuumo7ER6JRJY2MQEQiUTyGKJCNcDM8uTR3eYIjWP72uk7LvUlwMuvSwmV1QvxN0l9+D7rP1TVPLf3p8wsq0xYS7XxTMcF59yEc+7zzrmrarXa42328mdvXFvK7UVkjZldju97XY130881nwvS25vqhnVhtvb3i26uw9/m1NSiPhFp+bduY5+zgfIZqjr7OsHn4XEaK3F9NPeqp4/jhqp1rVabCX+DIh+FNWaWTriMh2BjiEb5/BRtyHrDa+zOLB6kcTTgYtEvItnrTz/wBrz0fwhfjb0c37edZjJPor0AHAMeCKqJSeAbi/Cake7SR+N9cB+NSUzwyaj6//vJ8UVR1T4z2x7GVDYQWngKnflFJHvO1a9rTZjZd2hMKq4D/jiTMJ2gYgLAzJ5V5XmRSGTpERMAkUikieCK37H0V0QOdEnqWEiQYH8I+DDwAdrrQW7Vg7kpSZKRFtsYwH8m9etmfeZznlLiaZqDKcysSD66LDCzz+JvPmfwcuh2Rq6tEZEdzH2ug5S0DpjZ08Brgb8UkQspnyLRMA4v8KI29qkV2YTDOjP7oqq+NdVikA0uBmkMzCfxEwAmw/aepnhaRQNBBr8+JfMHGBORUXwAk5YiDwEvU892Vd2iqmvCNrJkR5UN4cdkHg+/oKIxikfx5/3fhIr7uszvuzmJoIzJcB26ErgEuH+RXjfSPfKmY2Sv5weCOSb4hOb+nO0MiMjvF7zGkeBfUcRtNCbo9uVM5ABARLJTc/rwbVeaMiocp6IJZpxiEYmsHKIJYCQSaWIeNwKHRWTBq2+1Wm0/cFUHT6n7ABTJvwfC7/aXbGOSZin1VrwSYG9m+aFgqnYKqSBQRP5z+7u89BCRB4GLgOfjK6LtBGN5VbjCVonger2TfJ+FBszsQNYpPzjoz5cmTwkR2Yw3FHuuqt6FV3tkHb5n32cw67sH+B38d/FtHbx+H/Af0gvM7GCtVqv3yKc/zwH8tIE34I/hcfzx+nXg85nt7syaLOIVAGvpsrO+qm4xs9cEU887M/L5fjPbkDP1YQrf+/8Z59xkSExkEzqL0f9fV0wcAz6xGK8X6T7OuaOqup9GWX82MbYH32ZyqpntDdf1LP0UJy331Wq1staQ/cBlZnZZOO9upiBZHUw/v4hXrNWVClvwCdGd+ATifDwA1qrq6uBBEolEljFRARCJRPL4nQrPmQR+1aNj7g7SHKSnGRKR0up8MHn7EY2y9iFybvyCQ/pnyUivzaybjvg9R5Be3w9c55x7qs1jYZLmG9ZSx/p2Ca0BaYXIDPCDLmz6/ylYvtrM3gt8B58MSH/HDplZg0mYc+4Qvpr9fuCZDkYm9pPp1xWRVuab6/DVze3AeTRL58EnrrJJm81UUAOVEUavfTR4aXwE/xmkyRrsEXwergY+7ZybCImOs2l04odFSgBElg3fpFF58+z0L8OY2ncA14jIlc65PHn+VooNAH9S9uLOuRkzu1dE/hB4lZndGb4/mgjeLA/Q6HvRB/xJ2If699QobaqJMgzhE9qRSGSZExUAkUgkj5EKz6ksPVwExvCVlqLxSP34yu1gi/7hbwOPAueklv1G3orOud2qeh1wLb6COi4iP66w70uKEPR3EsCPmtn3RGQ7vlo9SWNv/Hy5BR8krjGzp0Xk0S5sM1shmzGzh0RkXETOJv8muk9E/l12YZWxhGbWlxr/V1/2Dx1uJs874yj+s08rZTbhkwDteG20hZltCl4M/fhq/7mqen2q8tgvIg1SbBH5HPCJ1Pl5Bt4HIKuy+GXV/QpJhe14P4qDZvZUrVZbDD+ByHHCzO4HLhaReiK3qfXEOfcM8F9LNnM6xQW1lm1QIVHZVnLYOXdEVe8ATkstHgauUNXLQgLgl/jraEems2ZWNxCN4ywjkWVOVABEIpE8qrQATGbG8/UMocryixby7y20qH44547he37vwwcIj+DHy+ViZp8DXgW8CXglc3PelySqiqoOdLMn3Dk3ISI3mNnV+OrWJ82sHe+AtjCzelvCNXgTx27Muc5WmSdF5Iqw/VcB3yO/ArchjB6bF6H3f0Nm2f7w31G8lH8CmAiV81H88boT+AJwBfDG7HbD+ZtNvuTJ7LuKiPSF4CP9mtlj7O+ccxNJkgwkSXKemd1Cvllk5WuQme0AvmZmN5vZV4E/SZIk3ictY4Kh54XAV/CB73c6eX5IGhX2/7MAnhRmdg/NCblzgNODF8AhKqiowpSaqACIRFYAUQEQiUQaUNVhqkl+J9qQIR83RGQn/qaoyFxsBF9N3F+2Hefc06r6WrwJ29EgEc0lVA8fDz9LmnCjezJwAfA/VfUrwN4OZOuFhP7vD4efrlKr1SaAe8NPt8gG99N4Cf808JCq7sS3gJxHcz/+vANKM8tzyT8E4Jw7nCTJZSLyUrzq4BBemXOgVquVVhlrtdqMqv6KzHliZmfOd5/TBF+GdGV9d61WS1878saRvVBVnZmdLyJXBqPSYzS7tu+fx35dAmwN3gOr8AZrn2ThJ5tEjhNBsbRTVV8PDIQKeidswiePmwiKo64fOyJyFLjFzG4Qkfp5utHMLhGRx/GJjCqvOywiWVPNSCSyDIkJgEgkkmU9xUFyGRN0p7q6UOzC3xQN5/3SzNaKyAjwVKsNhUCvZ5MdC8RavFHdVnwA/Bx85azlDXOSJIQb1c34oO0IUDTebimQVQAM4KtvjzjnZoK52NX4KQSzYwfNbE3qhr0yIjJMs7x3Vt1Sq9UOAJ/rZJshwbMWb+DYcG8gIltUdbNzrlvVzP3482wz/lj6aub3TaPWzOydwNmhNWBKRC7Gv+ePMZewHKWN0ZN5hPefTTysIyolVwThWlTFe2QrzZMogFnX/q4nAIKB6EMi8gy+XaXO2cCJwBNmNpFjotmKfuBZqlolERKJRJYQMQEQiUSyjNBh72DgyCLN365EMA7bje8dbkJE+s3s94B7FnXHjhNhdvWGMLt6fxu96Kcx1xrSB7zOzC6ljZvmIFm/FvgzM5sRkY8Af0nzOL1O9n+dma3HT544ssjmk1mZ+SDevfsDzB0/B8LPbAJARFZRLbmWZSRn2bmq+pn655AkST8+MF4dEgbAnH+Amc1+/wfp7wjwcvL7mYfw501XEgDOuTFVvR6oV/EfyqzSVFENx+lqfCLvqvCck2k8hsbNrGrgspZmNUHTXPdIpE5IGm0jPwEwBfysk0A6bG8j3q9kFDgcjP+aCB4zd+F9MIDZ8/g6M/vDMK0gT0nTio1mNkCXjFgjkUhvEhMAkUgkS1UFwFKoiD9FQQIAoNUkgOVC6BM9TUSuxf+9d6vqJc65Mon48zOPB4JiYlfzqk2sBv4UP20B4HLgb2k202sLVd0B3BBG7+0N2yub8rAYbAE+pqprgDvxipjs+xsi9b0b/g7r8SP6juDH4bWTyBjJWXYFMKiqzwAnmtkLglHgEM0JvVWZUX+DOeuk6QuS+67hnNulqhcC0zneIU0KAAAzOyQil+JbambwwVJ63aMiUtiS04Kj+GtYeqrAQaq5qUdWBgPA88hXidSPp1nC+d4Hs60HWc7CJ0pXi8gocAmwu+T1b8V70qRb9k4UkVcDv2jvLTSxAX9OVVLSRCKRpUFMAEQikSxrqZYAqHrDsZj8XYvfn6KqQ2V9/cuEfuAG4JTweBvwY3xQXkRe60RuoJbD5szz1+ADre+1+fxZVHUApoKEoQAAIABJREFUP8Lu9LBoK77n9cpOtzUP6qO2spW/DcBNeIO9PJO67Lm1Afgyc47e43iDyVZkne/Bfw431h8UyX8ryIIxs8Mi0vV+DedcUdLwOTnLdoUe/cedc3Wvkj+gsWp/lIIZ6m3sy7Sqfhc4P7X4YeahUokse4aAUwt+d5hUUlJVB/ES/R1mNqqq9+QkXG9g7pqxFX9Ne0fRi5vZERG5FXgfc0mIVXiFzGc7fC91tgQlQSQSWcbE3rZIJJLl11mmCgAzO0CJS3iQRWvR75cRq2l+ny+ssJ12DaM25SzLNc5qg5Pwfa5pqkhd58M0xRWyfrzK5Gaa97NBAYBPoKTl+Re0OWHht9re0/mzS0QuNbNujE+syiS+GvpEyjfiXBrHcYL/m8ynDelBfEsCZnYEPyO+KQGgqqtV9QxV3Rxk25EViJmto/g6dpRGr5DT8EH5tSJyI34qySyquorGfn6Ak1Q1L9kHgIjMAN+g+bt3G3BxyzeQz3qaW2EikcgyI35xRSKRWUJVbUPLFfPJGqP1HGHkU6GkMsii22oDUNU+Vd2qqn+uqh9X1TO7OR5vITGzTTRX77epatkIqLz56m3NriY/OZS0+dwsa2n+7uqFftUJvDT9Cbz0f5jm/VxH4+d+OPzU2Ux+dT/LP1XfzbaZwZuJvR54IMwqXyyygdDD+OB/JgTf78UrLLKf1UEqtpWknv8m4AsichHwYNaoMrSf/Az4AV719L55vF5kaXMGBclyM3ss0///B8xJ9QeBP0qSJH29zU71AJ8sLKzGh2PzSbxqKNtSUDXB2sfKSIJHIiuamACIRCJpBqhufNXzCgB8cFC2n/3A84KBWitWA58CPoTvb78NX5XseUTkWHZZmMNelgB4ImdZu9XWvM+83faBLAdorsoudvvJNM3Jj6fM7E1mdgFwkZk9WfDc2fcdWk1m18sZj1fEEyxs0mMa+DZwSa1We3oxpzUEqXT2/BsBBkKC8kPA1TS3pMwA4/PZ1zDB4QHn3Nucc/eFaR9Z3ogPrvqAQTO7KLSlRHqQJEmGVXVt6L/vKiLyopLf/TyzKKuC6gumoICfQlNlH8Ix+kW626pS+L4ikcjyICYAIpFImiHaq0A2YGajZrYU+ubHgX+k/GZpSzBPK8XMFF8B6guPNwGXqmrPz1EOrRANldLgsp5XhaqzC3iUUGkKxm3tGu8dCc/NLqvCLuDTeMVJfbtfqLitqjS1AISxW8dqtdoh/CSA15PvcbA587xbgH1mth+4jvYq2HuAD9I4836G/ON6Cvi2mX0Cbxo2+zfMwQF/DVwAvDY8XmzqxoVptpnZd4EfAe/Cv6enM+tMAf+68LvX1HawjmbFQuQ4ExRarxaRfwb+GbhWVXOr6ao6qKp/pqq/UtV/SpLk9FatHUGan/X4qDMF7EwvMLPpzGNIqQdEpCz52oqdwL3zeH6Wk2JSKxJZ3iwJuWokElk0hsKs8o6eFCrKPe+WHczDduPl2kV9jpvwlfDDBb8HZkcu9aUeA2zHmzeNdmN/FwoRmcYH0e9j7ntgnPKgfBI/5u5yfJLkZto3XJs2sy+LyEnMBXf/0vGOMzsD+1rgO/gq8C56QH0iItvwvbePhyr0flX9Kt6sMK126Ms87xA+WdAHPNlOBds5N6WqnzCzJwgtK+Fv+lx8gJy+ed8NvKVWqx0FCFMKvk9+q8t1zrluBhJVyBuV2CciddPHZ/DH4TEz+3pqxOF06NtfUMxsKH19DH3YSyH5udJYZ2aXi0g9IftOfNtGnpfF6fiE2joAEfkgvhWk7HjaTLFabn/2uSJyIPMYMtcCM6tk0hmuiXfgk1Pd6N9fh1fdPNOFbUUikR4kJgAikUiagVAJ7ggz2x/ky0sBR3kCYCM+CVCl+rke2K6qjy2mbLoCM2b2IeCXIvIK/OdxM35MYi7hJvMJM9slIgPAsTZH1tWf+xUzeyFwnoiM4/u6KxGk849UfX4XmAwj6dLLNgE3J0lyoYi40P/7OD5xkk4AjKSfFD7Dws+9COfcJPBY+AEgSZKtIvJmGgPop5xzaePLcXyA0pQAMLOm1pDjwGry+56n8J/T24B9+GTbOKEVwMymRWTBEwDhNWb7q83MiUgMlHqPdangHzPbEJJ0DQmAUOl+CY2Gptvwidzc40lVMbMdJUoxR7MaJ/v9OEMwnCxhKOzXgRbrgb/WPAKc18a6ragbEsbjOhJZpsQEQCQSSVOpBUBEjrJExmWZ2YFgBlgkuRzE3wDe32JTeS7wfcDv4aXWPauICMmJY8Bnwk+7z5uh4nxo59wRVb0CX7k/SPl8615nhuZe/T7gBBH5MvDRJEluBfpyqnq/tlA7JSL7aA40skHMDC3ULceZNeT7Q9yJn5G+Pyh5NqQDsKCAWIz39UUzO0lE+s1sEri53URYZHExs776uScifeTf8/bR7CcxSPkknEERSSg26PsJzdf/f8w8nqS1cqmf1Lmgqv1mdkJI0j+ZHlfrnDuqql8DzqK6v0qdYTPbpqp98diORJYnMQEQiUTSrKbadWGUJZIAqNVq06rqKHc6bscE6QA+2MreKJ5qZn30cALgeBHmXt95vPejC8yUKF5GgA+JyMuB8ZyZ2gs2YivMss8uznoOEBQYLVHVE4BL8UnBrwL3ZZzNF4JVZjaYTpqY2VdE5Arn3FjYr0HgLTReq6bzFAyhl/tEMzszVOq/lw6cKnA38BvAWSLyNfzowMgyIrR5ZJMCaVaZmRbI9cfMbG+tVste/x/EHzvn4L8b7s2YTB4rk/+H4/h9InIZ/ri/W1Wvds6lj/l78O0x20r2vR36ReQ5+ARHpYRvJBLpbWICIBKJpMmb194O/0ZvjGJrCzP7mYi8vWSVk9vYzLiZ7RGRbMS1PVQme7nK2nXCCMS6LHv/cq4cOecmVbXMw2CY4okQZUaL88bMxjLS5IZAJlRCW+5DcNy/EXhpWHQqvnWgaLpBVzCzdemkSXg/t6SC/wHgzcD5medN1Wq1PKm0At8KcvBx4EpVvbXo+EySZFBEhjJtE7OE5VeHn0jvMkN7SdgmNU8I/gvH7wHDIlJkAHhYRJoq+865UVW9DPhaeM2HMqu0UkStNbO3iEh9TO+5wO2kzAadcxOqejP+vJ0vJ+DVODEBEIksQ2ICIBKJpKk0isjMxnIqHr3MU3jFQtE1cL2qbnLOlfVeHhORx8hXEpxM6xaCZUOoyL4XuBDvJ3Al+Q74y4m84/1h/DjI5wNvDoaaizptJ5gKpmeAq6q+Bt+XPAnsMLPT8qqNIpJODKyl0a9gPT4JsGAJgCRJ+kLwlf7MRoGjoQI6hDdz+wCZAC2v/z885x3M9XcPm9krRORuMv3XYd0zzOwaYHUwVfukcy4GQEuTI216QhRNj+hT1Xq7VJYTKFDyBG+QXGl/UEDdU/K8fTT6S0yLSD05sTXjzzNEfpvC9/ATMuarAtiCTwC04z8QiUSWGHEMYCQSSfMbnT7BzMaDB8CSQURGaWFwZGanlf3eOTdpZj8M4/CyrLQ5yiP4QGszcIKZXXl8d2dRGAs94HWmgRudc19yzl0BvJJ8c79KSbYOyCYmNuLl+/+En7zwLREpUvqkA4xhGhNkfcD/3q2dLGAA+M30AhEZAS42s7fiK54fJd+/I09xsz6M60xvbzi06GTZDHwsTBvYYWbXmtlrFmJ+fGThcc4dpo1klXOuaURfYGMY1ZfHS4p+ISJ7itQjZYQE+i2klHQiciSMBwUYMbN22oeeAe5j/i15w5S3yUUikSVMTABEIpE0Hc8iDuZbS20M1jFazLAXkee1uvkXkcdD1aaBYKC0kuYobyBVLRaRE1R1QaXuPcB4xgegn8bz50kR+TjN58Z85n0vGmY2TnMQsaD7HqZLZBMkA8C7wmd5Ht7p/F6aTRjzKpWrRCQbNA0VqDJ2kGqNEJFBEXkRUSm5lPk6jcdwrkotJISzSo9fyztOglLk1KIXNLOfVdjPOncCXwKO4g0CP1KSXM99L8FX4JvA2Dz2o87vdWEbkUikB4kJgEgkkmZNhecco3xeci9yDC+TLGtbONHMyoyg6lWmG8gEeUGqWfrcZcYWGgOlQfwYreXMeE7l8ApV3QazExPu65HReh0TgqJs8PH0Ar9sv5nlXYP68AHa1cArzOxtNAc4eQHPDM1JjPoY0CzraZ7rvpl4n7Rkcc49Dvwlviq+i+I++ymaj5OixM8JFCfCZkTkkQ53cxbn3EHn3IXOuf/onPst59zdJV4qByjwmQnvu/KY1RQnJ0kSE2CRyDIkfrFFIpE061qv0sQMS8gAEGarJP9IcxUxzXraM2z7Nn482SjBeMrM7jCzblRglgRmlr1JzRuTB/gZ2kmStNymqqKqfamfLuxpVzma6s+tsx24TVVPCyO0xvHGeWn6joM65Cg++HH4YKilX0dwyn8is/gXReu3+3ctw8wGRGR9Zhn4gP1S4G+dc9NhikH2PfwqZ5NHaUxiHMOPaCs779P0E++Tljo3AK/HT40oagmYoPk7rKhNZjvFkzzGzOxQx3vYBmY2SmPi6ggZH4sMtzPP72Uz21jSLhSJRJYwMbMXiURmCQ7cnT5tDFiQm54FZndwGM91ezazTfgKYGnVMwRKH1bVvw3rHxORgwXmUcsSEdmPvzmtf5ZTZI6J4Cp/EnCSiOxU1UdaTAoYNLOPhJ7sh/DO1q3mZi8mk+T32Z5iZj8QkWtU9VGaq8oD+OCitAWljCBD3oxPUrXqOT4IvNA5dxAgVPQ+KiJ/lrPub2Ue32Rm54jIFjM7HEwvG0iSpF9ETgBOFZG9qvqoc67dALsBEemn+fM6hA/+70udU0rzrPOmhJtz7oiqfh84Ex/I7zOzx2q1WtNrm9lEaOlIJ2f2skTGm0byCdfnVhfjozQnhbLHV33SSUKBuiscWy2Pl3DObMTfgx9s83x5El/1X4dPfu1rcd4/iVcBnN3GtosYwp9rTW1ukUhkaRMz25FIBABVXR9uwDtlpsBEqdfZIyKFFRQRWSUim9qtPDvnJp1ze4KMs2s7uUTYTWO1+BBeEQF4d3fgNcCXgY+Y2R20GLVoZltE5I/xvdl/CpzbYyqAI2aWlZKPApfj+9Svxr/fhWiFWG9md+HN/a5OkqTQHMzMxurBf2BaRP5bwerZ7ewTkUuAz4nIdcCe7BNEZGv4e34cuAM4q5M3kmHAzNIqpBkReQB4sH5OJUmy2swuzdnXIrfyzwMP4JUYtxU5tAcvj9HUoingx8QEQGSOVXh3/dx7ZxH5easNqOpguK7dAdxlZte1owiq1WpjIvJVgGA++t2y9YM57bdoX+3SRJjI8btVnx+JRHqXmACIRCJ11hS4Y7fiGEtw5n2QZ5fNXu4DXkhUSrXDYeBi4L8C/yfwjlB5A2Yru5cTWkyCzPuqshtfETmVuc9+AHgVvfW3mKA5OHwE+ISIvBK4ivxe8z7m/917voichFcAnC8i20vWbahkhup3kXqhgdAq8xD+b/tp51xewuzc8Pp9eAO/57f1DvJZm0lCzgDfr1dIVXWjiNwlIu+k8VgoNCJ1zo2a2QVm9hzgEyWqkyeAm/DXsym8Idv9KzCZtxI5RLOCRGk+T9cCJxZsY4r8qR9ZzsS3JZyKV0O9B3hXm/v5CeAtIvJ64MGyFcNUgXuZh9II//63qWpWlROJRJY4vXQzFYlEji8bKioApvIktUuEn+Mr00Vsw18nYxWwhBAk7QWuKVilj8bZ9JjZ1tBfWnSDmr35PpEe+ls450ZVNRt0bgoB5pSqfhpwZvZ1EUk72/fjEyGlYyhb8KzU/weZa71oQkRQ1QHnXLofeAwf6LY0/Qx/27LP/NmZx/+r1TZLyDNX6wdQ1e34wOksmo+NI5RUOoMsu/S4cc5NqerfmNkzoS3o4Srj3CJLkhkzI9P+1tQ/b2YjIrIhbwNhXF87rXBvovF87QdepKqfCQm3QkJS9UttvEZ9/UNJktwfWnSqshl/nVgxnjaRyEogJgAikUidVVSrTDb0ByZJMigi2/A3OXuB0R6uoj2BrzIWve8T8Z9LZRllZJbs981GfJWtKAGQlXRXmVCx0GQTACep6hnAo8656SRJHhORzwB/kVqnn5KAvU2a+pNLGDazk1R1D8EV38w248fhZdetcv5nA6IiKX47jGQe9wOXqOpm4CJ8i8CTIrKFxnGBk7RhbNiKoDS4d77biSw5DuG9MnakltXPl1lE5MUU3DcHH5TSBECSJMOZ16izDu990fVpOiJyG15hUMXgF2CLma0n+gBEIsuKmACIRCJ1NtBogNUu2RF4fwR8CB+w3Q28n95tEdiPv+kqujnqxxvXfXuxdqjXUNUzgZfjpyZ8KVNJbpcZ/A3krFRdRAYpdtMG2Invya7/bQ7ThSCvy+wDzkg97sf3/l8E7KvVaqjqjxd4HwYoP2/XisjH8YmWGWBKRM4kP4nQztSLLNmgZz6GoHnmaqeHnz3AFSLyIHA98B7mEhZ5Jm6RSN0w86XAy/DHyF3OuQYvC+fcjKp+FTgHIHja/CwnQVbmW7KPFgF8UALNN/nXKYfw319vr/j8Vfjr9uPd2qFIJHL8iQmASCRSZzXVKoC/rP8n9HRfxlzQ9jrgFno3AXDMzHaJyEtL1jmRFZoAUNVTgU/h5fvj+OPj1k63Y2YzIvIkqQQA/pgok8GPmtm1IvIBfGB4H72XAMgLOk8HblbVK/FBa0Nyycz6s6PuOsXMjqWCkynKx33144/hot7lNGUJmSJqeHl9P/4YGS1fvRgz+51s0GVm0yKyG3iHme0Ki6cy600sUSPSyMJzJvBZfHJrBjhLVd/knMsqj+4FngO8VER2mdnd6fGmqrqOYkPPKeBnLaaaFGJmm0VkhAVQAOAT9F/GJzcqqQBE5EVUuO5HIpHeJSYAIpFInd+k2jUhrQDYSKNUe6DiNheFMPprD75CVMTvqWp/q/7MZcp2/Mi6PmCVmb1CVe9MG/zVUdVB4Hx8T/i/Afc450YBRGQa71r9OuYqYHspMWEMVblbgV343vBHe/Bv8M85y/rxx9PXgK/gEwKzBJ+NeVUBReTvUw/HKZ8HvtDci6+unoOvgo5X3ZCINLV5iMij+KTinlqtRpIkJ4vIOTQmK8coSIKo6hDwBjNbLSL35wR+keXNS5hTtvThr2mnkGk9CgaXV5Vs50QzW1UwJncaP3avFYPkJNlD8L+R9kwEO8I5h6o+jk+2Vm0DKJ3YEolElh49e2MeiUQWjzCjvarT7/7U/1fTeF2ZpLw6eVwRkUngH8xsMkjS89iAv3Gaj7R5qbKGlFRcRDbm9YMGme3b8dLsNfi/+++q6vudc2PhJvQh4B58oDhjZjfXarVSY6nQbtA0e76HyE1ImNkUsEVE/pz879n5TgF4FB/0r8KrWBYsARAC6DcDLwJ+RHMbyEHgQuB0MzsoIpUVADS3IBwGLgwGa/3BCPCzNCpJwCcAmtQYISl1PfAuERkAXq6qb3PO9aoiKdIGSZIMi8iqcN0ea1F535R+YGZD5JtNFhKubydRnLg7SlAzhVGlq/AeFVN4D5yp8Nqrw3GYpY8FvB93zh1T1dvwkweqXHs2qupW59x8jEsjkUgPEccARiIR8EFeXv9tO6SDuNU09iMfoWA8Vy8QzAmfFpEyt+8NLMws9yWHma3Nq9KG2e1/yJz6YxA4j5Spm3PuCHCRmV0AvFxE7ln4PV5w8mbKOxH5oIh8nnxJ7wDwG/N83SPAJ8zsMPCYiLRKTh0G7jezrwBfMbM9LdYHZgOfNwMfBd5qZjeTUcs453DOjTrn7qnVak9UVWmERENDEs7MHnXO7a/VaojIuXgp8wk037tMiUheELgdOBd/bRsATjGz03PWiywRQlLnRuCHInIX+aZ6aRoCaxHpE5FO731XAUnJlJydqaTYZuBm4BfAT83sXaraH177MPltQ5MFy7vJt6lu5DeAT4BEIpFlQkwARCIR8DfIa1uulc9sEGRm2d9N0PvmXM+YWVkleq2ZjYTKzoom9K43HScisopMpS2s15A4cc5N1Wq1R52n1/r5q9AkdzezTwF/DVxqZhfTnAToY/5GYFP4kXgvB65zzqX3I5vIm8AH8O8QkYuAi0XkevLHeg0ENVB6W6+obzMETi+Z574XsZaMmaGIbE+SZKOqvhW4Ca8QyLuejBYsH6FxssAqEdkaEhuRJYiZnRmMZrfik1FvC0mBdp8/ia/Yd0JZ/z/AjwGSJAGvhnkNPpm1QUSuoHWS4iALrzA7ildgVbnuDuAVXfG8iUSWCfFkjkQiUF0B0CDxD5X0tDz4qJn1rAIA/KzkMMKpiAEReTYrs2Uqq+AYonlUW315NjHQZ2a9OLqvmzRJ70Vkxjk345ybqNVq9+MnYmQZrFcFqxCq7sdqtdquus9CipHM40n/FHfUOXfMOTeG/7vmVeoHafTw6AuS6dnHNI/96xbDZpaVR58gIv+ANxJ9Gj9D/YM0J15mChJKfTTe50wT55kvacKI2fq50wecHRRI7TJF5z4VmyhOAEwS+v9DgmwHjd8Vm5irnk+Qf949wwKP2QsKhW9QbUxn/X1VLRJEIpEeIyYAIpFIvS+yigfAIRorCg1mXGZ2REQqm4ItIjvLfmlmO+hs9vpyIe+G9Xk562UDx5VCQ9UuKGAuUNVNKcXIYzQHnWtY/HFgXcHMhjMqgW6xNq8/2syGzOwJvBfAA8ADNPqOTAL/WrCvR0hNJQiPn14m6pMViZk1KM2Cg34nx2OVBMCJFF//99Oo8sleB2eYu4YeMbOs+mAGn6BbjMTULlp81xVhZhuJCYBIZNkQEwCRSAR8MFIlATCWHpXknNuPr9QBXhFgZkshAfCjsl+KSNkN4HImz8NhW856M+SYPQb3/+VMw/sLDuFnA7eb2eaweIKMUsDM+lmi378hSM8zMpsvg2RUNsHk7S9F5ILgBTADKI0qhxkKfEZEZCd+SsFMePwgcZ75kkZEniF13gXTyTKj2ew5Otmi5asJM3tZya+fJiQCw3dhtpJ/rP5759yMiNxO4/E6Bnyzk/2pSpjeclOV54rIZry/QSQSWQYsyRuQSCTSXYIDfpWq3uFskGdmt4f/zgCHarVar3sAgJdgliUq1rNw0ude5iiZ3mozy5snP443mstSRW66lJgh/7g5Q0RuUtUT8p4kImtZPAVAP81VyX6qt7QcZGHGDq7NaQF4BPhQMJBEVbeZ2TU0XqumKUgAhNFu1wEX4z0Zrs4bYRlZUuwUkfTxd4Ryn5m/zzyeEJE8c85cVHWViOSexyHg30s4H0IC8Kc0Jh3GSCUFzOxO4Fp828Bj+NGDXR//V8KTQFsmoBkG8cm3SCSyDFiJPa2RSCSDmW0pmG/ciqbgR0Tuw99wrwc+Oc9dWyyO4eWRp5asc0ZYZyVxkMzfWERWqep251z6JvIQvrK6ibnE8tM0SrWXI9P4xMeW9EIzmxaR04Hv4m/yswaJg0EFsOCY2bCIXKGqzwX+PzPrA15Ge4qfqeBcXmca+Gba6V9VB/Dvvw/YN48AezjbAiAid9W3p6rnAjeISMMIQDObKhs96Jw7rKq3VtynSO9xCPgIcA0+ifZEi4r+58zsN0TkDXjlykN01m9/Cn4KQB4TwE/qLSVmhojcj5+IcmZYZ38YYwlASF582Mw+XP/ODdNoFosJ4Hb8eMyOrkFm9nLg/1iInYpEIotLTABEIhHwLsdVOEhGYumcmwQ+M+89Wlwm8VWRwgSAmT138XanZ8hrAejDj1ebTQA458ZU9YvAOcwFlrvIVwUsNxr6yc3smIh80sz+XkTeCJyf85zVQXXTVUIw3qDsC8Zkp4QfOkz0TQI/xL+HYTObEJHHMuucC1wbEgufVdVPhmtAp6yjubVgLEmSfhE5B/g4zYmUtt7PIgdYkQXEOYeq3mpmR8NI0vtqtVqhess5N6qqH8Qb4A0BT6RG9rXEzE7CG8E2/U5E6t8bANRqNVT1IHA1MGBmq0TkxlqtNvt6x/tYdM7NqOpT4fPr6HtfRHao6qqgrIlEIkuYmACIRCKIyG9VeZ6Z/d8VlQO9xqSZ/VRE3k7BdVFETlTV4czItWVNuFl0wMmZX70AP1JqFjP7Hr5CewG+deBGFkYq3kukDb6A2R7lW/BVxnuB68zsTzMB/yq64CmhqpjZulA5P4jvjZ/P9/oQPhA/ALN//7uBZ+MrmnfU5fjh9QfxUw62huvA1cCDdCgxDuPF/jcyyQsze6OI/AF+rNoMsBuffEqvN8HyV5q0TZgusQ0/wWFvrVZbdi0PzrljSZJ8Ify/paFjuGY/3OnrqOoqM3u+iOSeU2Z2UET2Zl5rRlUfB14Wkm+92AK3J1ynOkoAmNmQiJwGfHthdisSiSwW0QMgEolAxf52ETmYlgMvVZxzhFGAZb2ha1iZJki/yll2gqo29LDXarUZEfkr4JXAa51zTxzvatciUG8BSLPGzNaLCM65STP7qIhkjedWm1k3FADbgS8Cd+Bnojc4pFegn0xiIlTzPwi8UkSyLT0bzWx96vFqqp0jg+QEI0G2/W58Iuli4ALCyLUU0dE/EBIpbwC+CnxdRN59nHdpwajVakWjH7vJhmB+l4uIPJ63D2FM56RzbqJHJ06M4pNpHRESGi/u/u5EIpHFJioAIpEIVGsBmDSz5VRd2osP5tYX/H4Nfhb0SvMBaHq/YSTUCJlKb0gGrQTZf5qsnHhERG4D3qiqu/A327uY6wkGGBKRhgSK+rmBN+GTcR8HPlEmVQ5y/w+KyFlh0fvxgXoe9Sr5OD7YHqG4r7mJEMQ09dkHf4FsIaHBW0BVVwM3AGfhg45rgacyyaGB7PMC03hFwdXMHYcNn0nwAGjb1G2Zsw54C3OTOi5S1S8457Kj5yLtsYmMv0eGHy7WjnSToFL4LvDHnTzPzPpERJMkWVur1eI5F4ksYaICIBKJQE5vbSvMbFxEFmN28WJxCC+jzsW30/E2AAAgAElEQVTMVpnZ1lBlWzGY2dPZZSKyHth4HHZnKdCHTxTdge+P7yPTJhDIfn4X4j0oRoCLKA88wDvhp7exmvxJHjN4ye7LnXMvwFfwPkn56LS2EJFNNI/uG8msdj6+ij+C/zyuyj4Hn5TIzhifBu4G3uE8M8CO8NOwXuxJniVbbR6ig0TPciYkzDrlFAqm45jZmJk9M7+9Oq480umI3tDms1VEWl2bIpFIj7OibmQjkUgz4cao45FkwQBp2fTDO+emzKxQsy4ifSLyHBZvfFtPEJI8DX2uZrZGRLZ3OxmiqgOqepaq3q6q16pqNijsNWYo6PE1s23AZ/EV79NyVslWvNPKk3W0ltKPAT8Io8jAV9fHcjw5JoCvE5JboRr8Ixbo3BWRX8ssys5QP4vmBMAAzYHqLuD61AjAEbzze8N62TGkK5wpGk07mzwqVhqqul5VbwD+XlVvUdVOxt1mj91ZRGQ35S1jHaGqq1R1m6puS5KknQkd88I5NyYiT1R46kZ8C1i3dykSiSwisQUgElnhmNnmHBlvO0xkWwBUdT1wrpmtFZFvO+eWmlz+71r8/gR8RagrwVOSJH0isg2YdM51MppqMak7Xc9WfUSkL5hj9dHdHuzTzez2oDCYAdar6pU9bLw4RTDMyxIC8TXAXxQ897czj9NV7BlafK5BxvtJEfn3+GPyQ3jpd/Z7fQoYzUjuW25/HmSrg9mAK+91+2lOiOwiJJ6SJBkBPmtmp2evVWZWqNpZgTQkAMzscK1WW+mfz9uB9+KPsa1mdht+ZGkpoXXlxJJVdotIV1orVHUjvs3l7WGE6D2qerVzLvfa0i3M7Dsi8tIOn9YHvBz4HNF/IxJZskQFQCSywhGRDVS7FjQoAIL79LuAj4nI9cBNYdmSQUSeorxitp0uSWrDeLPzgG8B31HVM3q0qjIF5LUBnEKbTvaqOqyq16nqj1X1v6jq+iRJsusMAK9IjabqA06iokHlcWTGzPYAj7WYT559Xz9iTpZ/hJJ2lBRHgA8Al+N7/KvInLtNg5+ImWXNxp6gOXAoagFAVU8TkduBM/Pc2EWkV5NDx4MJ/AQOAHJGNq5Enk8qKSYiL2/zeSdTfD5NArWK4y4bCCqqd+ITFQPBG+QNwBsW+vtTRJ7Et751yhl0YYpJJBI5fsQEQCQSWUu1a8EEjVXLQTN7Nl4i34evRo7Me+8Wl2PAzpLfD1BeFWobERkBrsN/RlvxBm5VzBgXlNAa8Quape5bmDMbKyTc4L4H+C94Kfy1wFV5wZyZ9dN4LK4j3xyulzksIpcDLxGR11M8Ei/rAXA3vjf/UeBjJc+bJbiNTwXH8fnsczdpMAsUka8yd52YAr5GJslmZkM0KwXUzN6Hd7Q/AXiEfLXFspS4q+pQSAqe1W4rTDgG/hn/OU/iP+sVTWjFSXN6m34AL6NAJRsSe2XfE52wGriExmTDgJm9oEuTQsrYC1TxMVhLmDoSiUSWJjEBEIlENlLtWjAuIg3mWzn9x0uNaaA0kjKz53fjhcxsKtW/DT6xcFIvqgBEZL+Z5fW75vW2Z9kA/EHqcb3ilU12TInIv5jZbEBnZsP0tufCDL4XP80EMBYC8+8Bl5GjoCBjvBkc/68G3gTcuoTHa+7PPN4FfBo4amYPAw9nR6MFM8Esiu/5fxJ4LfAmM/sIzeaFCyqTPh6EpNk1eCPJLwIfU9V2k4P3AZ/HH3cdj3pbbohItrVqAy0S06q6Bn/8FW1zjJzpKEmS9CVJskFVTw3eA+18r55CzuQZEVmXlyTtMqPA7sz3ULu8rBe/qyKRSHvEBEAkEvl1KrYAOOfSHgATZpaWEx5l6Y2Emzazn1NSVRSRk7ohzRSRQyKSrr6swc8578W2iWdEJO9v+WJVbVWlGqG52r0Kf+M7S6he7k0nlYK8u2dHTYYg/X+kl5nZJuCM+s2/c+5h4Eaa38eQqja0kzjnxp1zB7sd/AdlBeCDyzDGcaGqi/+afuCcm3bOXWVmzxORV+V5XZhZ7ghAEbkTeK1z7mHn3CERGaD5WvX/dm/Xe4Yd+BFtG/CJsj8ys7PKn+Jxzu13zl3snLs1c31eqWSTb6vCOVrGFkqmcJjZ43ny/9DSVQN+En7ObCNILnqdYyxwj31IxP2wopHmiRSPzI1EIj1OL95oRiKRRSLcnFT1AGiovAVTsn/C+wIMAff0sHlbLs45VHUfPnlRVHHbGH5XpXcy/VrTSZLcAZyfMjZTejMxO4r/e5+UWb4ZX8kuk5GuNrOhHHVIk6zZzPaG6tqasGg/PZxEyru5D0HqlcBOVX0UfxM/bmYz6c/AzPqD/0Y3R9htoPl7fRXwtiRJNovIs4FNIqIUjDfLEszQ3gW8APgm8IV6u4GZ5al+cr0LarVa4fkiIs9KPw6f1X3AB4Iyom6U9vKc99ezx8c8aBqvGHrXv3R8dmdJ803gNcxV/Q+KyN6ilcM5vYWSMaci8pOc5w0C7xCR+nVtM/ASfOtKYYAdTP/yfrWbggkjXeYxM5sK161O2IT/nJbj+ReJLHt68UYzEoksEma2iuqmdnkOyF8ALjGzC4EbKu/Y8WU/5QZsq2meRV4JEfm2iNzK3A3iFnrwuhwqRT/ILg8z37vWthDkuofCtmfw8u95JVoWmH7gP+UsXw98A9+D/VEzu05EGgLucMPd0kOhjqoOquoWVV1bIi0epvn46ReRN4jITcCfAa+mTW+O8Dqvwfs2vAa4BW+EWX8PT9E8di6v3aEVDQoAEZkAPuucG1XVPlXdDnwZP0IwS9dGsfUKZrbezLJ/x66Yj640nHOPAb8PXBa+l17inNtf8pQ+Myvs/8cn7PLMFVfTnNTcQQulTU6LAvi2op/Wk18LiXNuNJzHnbIRODlJkp77vopEIq2JCoBIZGWTZ77VLv+SXRBuWJZ6leog5VWN4RD4doMp4IYwNvF8ulsN7jZNM6NDUPsC4B6ae7PrDLZbXXLOTajq14DTRGTMzG6v1Wo92wsflA2nF/x6GDgPCr0x+s2sLQmtqg6b2XtF5FV4JcYHacMksAJ96XYBfPDyAuZ8GPrN7PT6azvnDqnqw/jkAGa2r+JotGy1dRJ4IrQrvFREriXTMpJi2Y25K2h1iFTEOXcIb7DZDv0iUuZt4mj2/SAsy16/19P67/iUmR0UkdlzwMz2A1WC8qo8inf275QXicgnWRylQiQS6SLxCyYSWcGISF7Vol3KRpwtWUJvZ5PEM8WgiCRt9L6381oA+4Jb/IvDT6/eTD1NTtBpZmdSbtTXZ2advM4ngecBzxeRJqOtXkFV+0TknUBRAqAUMxsQkRe26Ui+QUQ+gO+7fTVwRZXXbINhEUknJQbImBWmJM51rgLuNrOHReRKqgXkazKPB/AB/7tF5Gv4a82LgWy1tGHs3TLiAM2y8V5ODi4ntppZYf8/8GTeeM/wvZG9Xq2idaHtCN7480G87P9xEblMRBbT3PKHZlble+dMojIlElmSRAVAJLKCCRXMqi7ry859u46Z7Wwx0WAEX+Gdd7AekgDT+F7RXmYaX5Xanl4oItvCqK0mhUBggmJ1QBNBRbIU3Mt3AJcyl0g/ZmZHw3hH8MfGNAUKm3B8nYAPsAt7kgPraZQSt906kOEQ/rNdY2ZaMIqx6XHmXGiQ3Dvn9qnqxSIy4JyrKsfPmrINAzcD681sTEQ+hPehyAbBh+ndhNl8GKfZAO4Xx2NHViBnllz7x4Ff1Gq1ouvZ7Wb2npTiqaUCIFz/H1XVXXgPjyNmNlqr1Trf8+ocDq0I21uu2chq/DXs4e7vUiQSWUiiAiASWcGIyHCBA3c7LEsFAICIPEZ50LqD5qrlcmfKzL5L8+fSLyKvPR47dLxQ1SF88L8ZH+Q/ADwb+F0z+0RY7RHgbZRXbhVfRWtFNlDf3MHujgNXm1kCPBf4Q+BKEWnHW2FSRPanHk+T0//snDtWNfhPkmQTzX3Sffj3OIR/79uBC8l4FwQPk+VYyHA0JlpajieNzJ+gxnlxySqjeF+SIp4WkQ8zl5QapM37bOfcmHNuj3NusYN/8InBqi1Fr+zmjkQikcUhJgAikZXNfEwAl60CAB80lZmZbaDEJXo54pxDRPbQPOcd4HRVrdpK0jGqeo6q/omqntGNkYydYmZrzexsfHvD03i3+sMiMiYiPwvrnAp8jHKPjT68s30rDpGShJtZkULiP5D5XjezUTP7q1qttisEGRP45F07I+KmgP/GXECzn2omf7mENorzKEmmicg64FPA+2g2C1xrZlu7tT+9gnPuKI1eKgcon7QR6Q5bgLLj6ZCZFap1glnqx4FP4xN/D9DDY0zrOOeOAXvMrNI4QFWt6iMUiUSOEzEBEImsbFZVGP+DmU2a2YI7FB9niiTtdbIj8ZY9IdjNCwBHgFM6nAbQsYeCqg6o6vuALwIfxTvDv3uxkwAisj2M8ENEdjOXFFmFVwYgIqvwSaJW37OntvGSY8DO8P8pEbkD/MgyVV2XJMkpqvpuvEt+w+uJyEytVqskkw8BzX3h52ngU865bpoyKnAZFY6FOiJyUTf8OHqQT5nZF/AtGx+jt6dhLHnCtesEyhO7j5bI/wHvqo836Xwu8A58Mnkp8HciUuU6sZHqLUmRSOQ4sRylc5FIpH06kRLPUjC6aLnxU+DdJb9/wWLtSK9Qq9UmVfX7BHf7Oma2RkReBjxEc0/2RMGNZUMlLYyc24BPJux1zuVNYhgB3sJcxXgQf5N9H4sbIG1lLtDeAKwOCogrgZM73FY7CpyjwB34G+0nmfOL6AM+JSLn4o3zip5bGefcYVW9GBgys26P3LuS4orrPrws+SyK3xvAS4FzVfXekLBYFoQJCxcDqwvOhUh36cdf08vOx++2s6Ggsun5yn8Gh792d1rN34BPnCzm1IJIJDJPYgIgElnZPKvi80bJmFSp6mr8zcNEkLAuWZxzJEmyV0RGgXUFq+1Q1YFWs5pVdbWZnRukzA/gg9ulHKjcb2Y3pg3kRKQPONPM1tLsAu/Cz4bweAZfzX48s97ZwA3AWjM7oKpXOeceyayzheZq0xaqj7KsSto48xQz+3pQ0ixIJcw5N6Wqn8M7hR/Dn3/gTcbOo/y7fN7BY5AI53oZhFF9G4ETQmJwbzsqAVU9Gf83T/P/s/fuUXJV973n51fT09PT6fT0VXQVRdFVNIosK7Ks8zPBGBNCdAkhYGNwuDY2fhM/8DPEIbbjsBgWcbiEYILx28E2fmGDjTHG2MaAsUwIxpjgXYIoiqKrKIqiKIqi0fT00urb06t/88fe1X3q1DlVpx7dXeren7V6SVV1XnXqnH327/X9zeCdGuPAm/Gq6tcA72yyqTG8PsAjzJ2XJUFQlo/G/8IwRHGrSfAOy6VchnEE//3aLeUaAn5VVe8I12skEjkJiCUAkcjypiMhu2wkMBj/HwN+aGa3JkmyvgfHtqiIyEHy690BCOKJ25ptQ1VHgetE5DZ8yvrXzaxdpeV+44CI7Mh5f6uINES/gzPoSuDLeCPts2b2RlIikkmSjOANva3A6rCda3P2sYXGaPBYznvzTVqQbVBETsVfC50cR6n2bs65CefcHufc4ZQDqUJrR/58O5s2h1Z93wa+DzTroZ7mPFLRVjPbB3yIueyGUbzT6JQS2zqTZabJEek5q2he1vU4S7gVYxhTsk7ZspxK81awkUikz4gZAJHI8mZ9JyvlKIifjY9EjoRI95k0MZ5PEg7jxbdyU7pD+8QtNE99XIc3dGpj7SYROYeTo81dM+7E/+ZZJ/JrVfXenAjwbuByvFE3Xq1W6+piRWQzja3gtqnqBudcutzkWTnHcoSFbwW3D59a34tOELOTblVdgU+JPw7sa5Vdgr9GHzGzM0MWRh4rkyQZzNQuV3La+3VEyG45JWxrjZldRIuWlkmSjALPY+6+OCoiVwF34TURbse3AZyg3Bg1gj9vT7VaMBIp4GyKHXhT+JKwjseZoDEwhB8zRvDt/o5lFf9DJ4JBM5usVqu91Nsow487XE/xY/tJnfkXiSwnYgZAJLK8Wd3hev9e+09IAX4BIQIQlIRP+khJqOP8SRNl5CHgOS0E6MaYS30HP8H8+R4d4qLgnMPMHidfDPA0/GSwYZ0QwT7knMsTxRqj0SE9RGNKfZ7YW61V3EJymN70vp4CvgEQrqPbgb8i6E+UEDecBt4lIl8C9ppZXrRfReQDoWPCSDBEVotIp+0/6xCRXyY1lxCRrCMnb50x6ktrHgPuCo6jo/j66VV4jZJS8xQzW+gskMgSIeiPvLjJIoeBp7os3VoB3Aj8A/D3wPeyGVOquh6f+fRFEXnLIohb7qWz9r5DtK99EolEFpGYARCJLFNSomudcIC51OLhMOmvTdTH8bW7SwEnIkWTvgpz9edFk6ZJfBSz9EQu9JjfbmajIvIwcMS5/moBLiJ78P3gN1NvoK0CLlLVnSWi12lWkB99K2PUHccb0gvJBPAVYDvt18zOYmZORGoZAOvwUcgBfDTtJcAXgPFgtJ8K/DfgP4AvOOdq18VOVX0XPuvmFvw1mWYE+APgVfisnCn8fV+kbdEuWWHAMlHLCvXXjUtljcyY2Uy72QlN7tO+IIy3a/G/8VHgAWCq3+7tZcp6WrT/wwtSdkzIlHkLc2PaKcDlqvpMcDYDXG5mfygiA2Z2dii16mq/bXIc7wTopMPNC4Cv9vZwIpHIfBEzACKR5UunNbPTwERt4mpmFTNLC8I95pzb3/3h9QVP0TztcyPNDcCjZNTuW2Fm7wS+GVq93cTCC9y1JBj3X6HR2BsALjazdh1Lo5RzSOdlD5xg/uvc63DOzZjZvXgDvSPMbFxErkuVOMxQfw42MGcsrDKzG4E/wkcR3585nnHgSREputYG8Pf7mXgDNOu46YbvETowmNkJ4Jsl1jlGfdeGtUmSVACcc7tF5J52DiC0Je1rgTYzOwX4IXAbPuvjI5TrABEpiaquVE+73W2UJs5wM3vUOddJZHyW0CUl7dCs4O/D9PNjfU1cVURGzWyho+rHaPN5leKMUL4QiUROAqIDIBJZvnQaAaxTBBeRE8DTwJSZYWaf78XB9QPOuaM0V37eRHMHwCFCpC+8ngT+tdk+ReRSvMFWwesqdJqlMd88hq+Fz7JZRMoKwbXLP+e8t59F6LVdrVanzewWvDhY24jIvXhV/xoHqc8kOUpwsJjZUCa1/tyQFZBmuqAEYL55At+K8UMicjm+00UrJqjPIjoHOF1Va7XSn2nzGGodO/qSUMrxO8w5XQfw2iDrS6w7rKrbkiRZnfObRwKqugbvVPkKcLuqnl7mfAWj9flmVuiMEZFS7f9akNcWMJsJU+dsFpGunA7tYmbZ+7IdVtKo4xKJRPqU6ACIRJYv2VThskyQmsyE1N2PAn8uIu8QkUd6cXB9xKNNPhsip+a9RoiUXwe8A/gT4G3AJ4uWT5JkmPq691HgRe0c7EIRvtunaMwCqADvUdV2MhdWUSLd38zup15cshZxXhTxqWq1egC4vsP9/026TCLcRx/AO9cm8d9rAkBEhqh3NK2l0XhcISKdanp0jHNu0jn3gHPu3c65L4VshFbrzOC/X20cWYcXlvy/gEvM7Iay+zezaRG518yy7Sf7iRER2UR9hsc6WpSPqOoqvCZEFfgJ5TssLCtCecUbgEvw4+fpwDVmVkakcxQ4p4mI5iG8kyu7z7EkSU5X1VNC2VYrvkG9E2AGXyqXdlz9Ter/E9R3G5l3qtXqDN6Zn+esaMVKmjwLI5FIfxE1ACKR5UuntcsNPcGr1eox4Oquj6gPMbO/FpHfb7LI85qtH4y8T5fZl4isJeOYNbNfw7dH60cewmcBZOtn1+OjumVTuX+Wcs+jXcD1ZnZLMIrvx4vHLWb99zP46H1bHQHM7B2q+oBzLl3j+zkzOxK+23dSdfFTZnZcRGpRygF8Zsj+EruawrdffArvrPl/zOzZIvIaFr59YprHwjGdBbPX/rXh/+1s5xjwvUVQTG+HYTNb1UHXhYvxnUYQkTXARUmSPN7n33UxGDGz52eM+PV4R1kr59xqwjnOw8weE5E6jZHQreNmEdmOv6duxjvBm/E4cAdQu+/2A19M1f8D7Ar3+Rhwr5ktRlbLPrwDoN3SsxFiBkAkctIQMwAikeXLL3S43gk6ixCclIjIfurrlbOc3sPd5RnBW1V1wSO7JdmLL3HIGuCjwKWq2hOl+RrVanXKzD4tIs8CngO82jm32KnfHTkfRGQDcENIXQbAOXdcRL4MfM45dzi9DxGZNfrMrEJ5B54zsxcDVwFXm9kHReQT+FTfpoSU/LWq+iZVfU0vr8PgGLuBLseSUErRLEunHxigsU/6DE2unRBVfgFzAqIVvKHa03tqKRA6QGQdcGMph1kzzqa4h/20iDxIo8joGXhDfh1eq+OqJElalWodx2eA/SbwcuCFpFqABnaKyE3AXwBXh/K6hWZP0PJolwHgeW1mfkUikUUiZgBEIsuXTkUAJ1iEmutF5DDe0C2a4K1NkmRVtVrthSE6QcYoEJEV+In/4dw15okgpHUOPsJ1d54IlnNuUlXvBF5Ho6DZOfiU0B29PK6Qpto36d5mtgFY2UF0twKcY2avAf689mYQ12zqVGhzX4eq1Wo2gjlFObX+Ybzj4E3hmD6NL2fpFbvxGhvdpA7/zSJngJRhJqdLwXGaOz8GyRimZjYmImXSzZcVIjJI5y1tf7PJZ4fNbHcYc2Yxs42ZbIOVIvIy4MNFGwr39RRNnFVBc+ZPSx31POGcO6qqhymhT5HD5qClsJzmB5HISUnMAIhEliFBlKrTSNJycwAcJV/srsYQPiLUC4ZpHJfHgG1FglZBJGxLUL/uSWu3kOL6RXxbuY8A1zeJ7DyOTzHPsgK4oqbuvhRR1UER+a0uau+HRORKVd3cYrkpUg4gM5tZoPTglfi66gFg0Mwu6eXGzWyENksncvjtReiX3i7TZMqm8I6PZr/hON7xOGt8BidCvzs7FoV0J5qyJEmyBdjaZJHdIvJM9s3gcEgzAJyvqh23BO0zdne43saSWReRSGSRWbITs0gk0pQxOncAnMjULS5pnHOTZvZTCnrNm9mgiLQy4MqS19JuEPgVctJUg1H+B8B3gQfN7BZVXd+D4zgDL6Y1FParZpY7uQ116p8nv13i2SLSbIJdSFC072tHUzBgL6CLZ2k4r+9ukTo7ZWazGRgiMi0iC5EFsY6UgS4iPU3vDd0iuq0bPpM+F8czs2N4rYjavT2DF5YrLC0KWQ3fZq6GfQbYm74OIl2jNC+ledI5l6chkCfOt41GLZSTlac7XG+MqAMQiZwURAdAJLI8GWGutrQdZsj0CVbVEVV9u6rerqoXJEmy5EqLRGSnmeUZuAADZvbckkrQTWmiZL6NfIfNGcAVBEXxkIb6upDh0Q0rqBeIW9UssmNmj5Kf2joCXF7i3PwzjQ6ESbxK9iyhJn2zqn5KVb+pqn+cJMmi6SOIyNk0ERAruY1au8dmbcvGReSHBCeUmR0ys2a6FL0i+5tUQnZI14T2a28MLw+Y2a5myzdhBXBZr/UmekkowfiGme0BJszsGeBT6S4QeZjZE2Z2GfAF4IPAdSLS106xPmIlTbJLkiQZAl7QrP0f3gGTxy4yUfLQcWCpRL87zQAA+LWeHUUkEpk3ltxEPRKJlGKUDiYrZoaI/L+Zt0/Bt0IbBbaKiKOParR7xFNh4t1wzkI9dq2lV0thtWZUq9WZJEkmggp8mq14B0DW6FtFfQRrwMzOF5EPU99Tvl0Om9lkKuI7RJPnRejB/nW8QyJt7FeAC83sdhoFr9I8GY531pgXkcdyBP5W4xW3zwuvXyQiP6uq17QypnpNSDt/Lb1xpK8G3gw8TE6Kt3NuWlXvAJ5lZuuA27J1yfPE0czrKfIzPTrhTHzEdBK4XkReQWfOlAq+VeZmfDlKX+Kce0RVXw9sEpEnnXMtjayg9n9f+Iu0xwDN57grRKRZ6dYhfJeKPI4AtwHX4Me7GRF5AJ/lsRTYH8b/toMEZtaVQzQSiSwM0QEQiSxPxsxspF3hMhGZyYlSbyYYxma2JbQwOhiimSMhTXpCRCaCENJJh3NuPEkSF1px5bEBb8SVUVavTUyn8sTLRGQfjWmpI3gnQDZKWqsJnjVCRWQLnWV3pHEicjh1HGM0aQvlnJtR1a+a2eUikg1jrxGRy1T18SZibQ4f5XwDPvPgMHBjznLnANtTrwfwXRjGaF5P3XPM7BQROSX11gmK1cTLcCHekbQ/70Pn3AFVvTJMyvPSkmfMbDrnnh5U1Urm3A9QznExhb+ma2m9e3pR/hOi/xeZ2bCI7MBf1x2VigTGgIvoYwcAgHPuCXJ6ykcWhXVmtq3JM/AhCpxdzrmpJEk+KSJ7geeb2b+LyB007xYDgKpW8J0HrsSPdbc65+7o6BvMHyfC+L++3RVFZLOqDqRamEYikT4klgBEIsuT4U7VpEUkG1keS302EFTRAdaa2SdE5Psi8jFO8vpIEflRk4/X4J0ATQkiUX+Ib392bjCEshRFnX49571jNEb6R0ObuI4JkfdPMKcUP0wL49Y5d0xEPpPzUQV4Jd5RVLTuFF5t/rfxLbJ+2zmXJyz4GzQ6N9a2OrZeE5w455hZLWPhCPCdEqseodhRMYRvE1aIc27cOXekYHJ9XESyEXuA08zsTap6Se0PuJTirhZppkgZNWbWLIujHdaZ2ZmhteG38PdOKwG1Vl0wXhpbkEXKIiJn54j51Zg0s+/RRHCxWq2OO+fuds69v1qt/oVz7lBJB/cqvLjqeXhHwEd6VVbTK0K5W6dZfGOc5M/6SGQ5EDMAIpHlyRid1SvmtWCrS70WkYkQ/b9cRF6FNwA3443Vd3ewz37hMTLR9gzPBVpFct5lZn8UJp4XAK/Ap7+n+WnBfk7LieSOm9lEaBU4SyepmzncASTAK81sPMfxk8f9+GhuXb3AeEMAACAASURBVBpoiPS+TVXf45wriqpNky+uld5OXtbKHhoV1uebFSLyW8w9Q++nnPjVlJk9JCJvyPvQzM5S1XXOua5KSTKsBG6paVgEzYFBCrJE0ufXzE6IyB58lsWMiPy4R8e0JWSqHMR3kLgivH8cn500KSK7qW8PeAfwexTff6vC8oVt1npJiORuA87FZ0ncU3RtRxaN9apK1jAPv935TdY7KCK75yljbSP1ztBR/HX78HzsrBNE5ISZHeigtSl4Z+w6GrPVIpFIHxEzACKRZUYwzsfo3AGYFaFKOwQO41OYx8zsQubGmApwVof76wtC6cOeJouc1mz9JEkGgZemok4b8DXkWXaSHyVeS2Nk5YiINKSDNxEsLI1z7piZXQFcJCIvoVzq8n58bWzd/oPR+Urg7CZCdy0RkTpD38ymgO/Tnd5BJyhzv/e4mX0Tbwy2Yq2I/I2Z5TosglF8ajfnqGC7QyIyFspzRikuERmiPqNnErgT76T6Ds11HNrhd4ChIIa3H1/WMWVmXwr7PRH2m850mKB5ic0oviXggsxrzGwr8APgBjO7Fe+ciCwS4VrNUpQZtBVviBexk+6E8Jqxgvq5d4Um5VWLxGRBNlEZRogZAJFI3xMdAJHI8qMC/GKH6+ZlAOwxs334yfp9ZnYYX/ednXz1Mqq54ARDe1+TRU5pZnyIyCoyWRcFgkmHC/YzQsbIDErwDamaHUZuGqhWq5POuR3O01J0LkTx7yL/t14JvJ7unjs/Cu0BAQit8B7KHlvoFjCsqluSJBnqpVEYjPMXM9cl4ZnQn71sGu/Pi0hRlHoUX+qR65xT1TWqeouqfktVLywoIemGQVLXaDivDwCXmtnbKNAnaIfQEeI8ABH5lpmdgr+2d4eSAIKDZDcpZ6OZ/U+a6zwM4DNPFkSJXUTOIjhLgljmlaq6aB0pljlTlNQACffv6RRcJ2F8+dF8tboNz8c002Q66yw2oSTr3ztcfdDMfnkexqZIJNJDogMgEll+VEiprbfJiRy19WeAy/DR7Cur1eoJM6vk1KGf7CmBx/CRoSJDeATfESGX0G6qzrATkW05E6UDwONpQze1/SRJktnzGs71ddQ7AZ7AC9I1RVUrqjqWJEmrRdvCObcf+FjBx5fghfw65V4R+Qszc/i0+3c453bmLLcJ+BHwt8A/4Vsj9up5txKvOl8zFp6ivYjXGuC7IXshjwvIidCH4/8EPtJ8AXA7c90Q5g3n3LRzbm+1Wj1YxglUgrPxzpJx/G9YM8YeN7NhABHZhc/qmL2OReRnaO1E3ErnY1u7ZKO2K4E3LVQGQqSOGeqzRWr8rznvjZjZr1OcHTBtZnf37MgyBKdl2uDf5Zzrx2fjARqz/UohIuvov6yGSCSSIj6oIpFlRjDMWwluFdEwAXfOzVSr1Uecc3c458YBRORwSONN83SH++wLgvFTNbMi47piZoW52yKCmWXfHsan9mf3831yerADG1Ot+QCoVquPA5fjW4U9gG9N1bQmPkTBzgFuE5E39Vo8zczuocDhY2bvSJKko57tzrljwLWhZdyr8QZkHUGg70pCtoSIrDKzq+m+M0KN2ShzSDv+CfBLZVcOWR9PBJXtPNaTb8Suoj5teQR4foldHsGfq0vx18afsLhK9LUMh8cBRCTBG11VEamNSwfxxkf6HhjBjz/NnBDrKSdu2Auy5SgVvIjl2vzFPao6nCTJxar6u0EUNDJ/5OlyrAylNrmIyJ5qtdos06sQVV2nqpckSXJGE0fQMeAewnVsZnd2sq8F4DgZfZ822EiqlCgSifQf0QEQiSwzRKSSUi9vl7JpkUfxbZRq7KfP0hw75MlsHXoNMxsQkec3mfjtpbF92wD1Qmc1HhaRvJZSG8l33nwH3wbtfOD+VpFaM9sMfAN4KfAR4C29jFyGKNdN5ESQROQcEXlZp/tzzk045/Y4544ViHRtxUeZ0/vcQActrbIEx8lphMltcAY9SRv960VkNf5+KIpmD5CfJTFIY2lAer/T5E/YHzOzL+NF9P7EzK4J2g77yx5zr1DVVcCp4eUP8OfxFOCYiOwkODjM7G/xjotZbQczWwf8I80dAIPAmb0/8lweMrPZ4wtlN5to0g0kONo+IiJ3ArcCt8dU6XklL8q/mSaZWsDX2t1JKDk6B/gr4Cvh39fkLRv0Wa7Fj9cvFpFPtru/BeJop1oyoRPQgpTiRCKRzogOgEhk+VEJYmBtE4TwWuKcw8xuNLO78JHgL9NcQO9k4QAFtabBAFhPQeTDOTclIs9k3s4txwhq4g3R7WAENUysnHM452bCX4uv4EsPmJsc19rP9SxyGhwQ95MvpDUc9jdfEaKN+Gh5ll5MSEeA5xDq/0XkaHACNPsuU9RHi2t19s3Sfl9Y8njSEc4JGh1MAFSr1do1QrVarYnsLYZi/Tr8PXIcXzq0xszW4oUUjxOyNEJ/9UlSDg0RGTGzo+Sneqf51Xk47gbM7KCIfJV6h0ReW840q4AL8Y6cCnAGUTBtoWmm/j9BY1eWMlTwmS3r8M/XCvDqvMyqcC9OOOfuc859p5Y114ccLRBWbEnQ/1nf28OJRCK9JDoAIpFlRkhV7WjS2c6EQEQOichrgReY2bV9PNEpjXNuyszy+tPXWEeTFGAzezDzVoXiWtQvmlmdQRdSpHvR8z7dhgoz2whcpaqFafKqul5VX6eqF6hqGeP9EHA9+Qab4rMO5qMV7Uryjf2uDV4zG6M+6v4E3oGTdz5qacTH8MZ+zVAcwk+Of9JkV5tyzvERGp1Ps+c2OF16UaM/L6gqZrYJ/90P4TNiTgldMfaH1pXD+N/pKD4CmR4zhkLZRKvsllMWIqoenChXAx/GG42P4dsZ5mlS1DiD+gyeAZpkDETKYWaD5Dsw6wzwML410yBxeMdUHaq6JkmS61X1h6r6RVXdmtl/hcYxZz3NOw30O0fpbsx8Qa8OJBKJ9J7oAIhElhmhhrzTe7+obrmBEHGcdM5NVKvVTmsJ+w4R+esmH6+leST9ceoV/qfxk8489onI420eXlnqxLFC9sIFzKVn16Gq6/ClAp8Hvg68tdUOQibCA8COnI8rZvZ6fLp+W6jqVlV9u6q+VVXXt7Fq110oRGSU+sjW0yKywszyNBRq5TLD+Aj3JPhSEbzDoFkd/hiZ6yhkhXw3s9xJVVYjIr+K/+0P4ksQatH6XXjDeAjv5DjhnJvJdLMYwUdoW2UAjLIAQoBhfDtiZlcCLwFe4px7oEX5zfNy3ovzsC4JZW15zsusBsAWisfnGfx1mPeMe7eIvBffyvY1wA1p52XQd8k6ncZYOEHKnhP0Vrp5bp/Mzo9IZMkTHzyRyPIjTxipLA2tgVR1paquXkbq1zspbjk1AmiTPu57gFfgo4Z/GYzgHQXLHgO+TX0UZoLuJmU1/iHnvTXAi5MkyYuenkqorQ4T3RerasuSATObAG4mZ1ItIpuAd4S2cKUIjohb8PoCN5vZbaGuPM3xHKHGffQm5X0F9RHcXfiWl3kZAOmSl4O17JkQ8V6Jj4IXZcU0OAACn8NHmmfMbNLMftje4S8qFYKDSUScc24y1QbzH/Dp8UP4yGOD1kgw8Kap/x3HaXQIDJKvqzEvVKvVGefc4WAwtSKbHVQhv1wl0mPCmHwexer0U8D3crrcAFxM/Xz5FOp1BGZEJDumDjDXKrRvCN1fNqjqxaq6OUmSZuKo+7vYVdvO3UgksnAslwl7JBKZoxvl6bqJuapuAz6DFz66oJuDOok4TnM9g+dSMLYGY+FJ59wVzrnLq9XqV51zuRHNEEm8h/oo7xHKCzE2I0/LoQJsz3YZCMymuYdoV62WuynVahXgEbxIYd7+LsG3gSvLFjM7HW8oDonIVjKCXma2O4gQpnmM1pHjlpjZNuZ+2wn877GKRnE+mKvxHwImam3/QgbACmDKzPI0EqDYAXAIr5/w5yJylYjcW+KwS/VHXyC2hX9/HNL0a8bvfnzkfgCYNLO832okLDObyWFmu8gITYb6626cnPNJw7iQKXOIzB9j+IyTorKjcQqcscGRmWaEVBldGKsPUD82F7UmXGw2At82s68BD4rIhU2c96Uz/nIYi10uIpH+JToAIpFlhpl1I/Y2O/kO9ZTvwhv+2/E15MvhgV8TMCvidHo0tjrnDuFbt+3DT8buId94B2ajO6tUdXOo2S+KQBU5MDZRol1eULJf1yTTYRbn3ISZfQAf2c0yambvT5JkRcsNeU4LAlOz69OYavoM8Cm8sXwUn2r/KXqQOSEiz0q9PBq2+QsFi//P8O8g8K+1tpgiMgD8HDAtIvsL1h0CVmYn5iHtfKeZXQN82DmXNe7/Mcd4zjvvpVHVgXBNNRxPm2xhrnvCbmBtOBfgHQAr8N87V8sgZE4MkTL4wznNtmwbBJ7bpxlJ2ftuKnQ/iMwP61KtV9fQPCr9SJMsjkczr2s6Hml2Uv9cOG5m3RjQ88XpwObgKFsLvJmCTAUz++cu9jNI/zriIpFlTz8+ICORyDwSjLdOyLYZW4Wf1NfGkfUsYOrtYhFqsX9KcUr5BrrLsshyD3C+mb0cuLqFmOK2ENn5W+CvKWhFhY8K5xmG2RT3IgbxzoJSzxAROQB8nBwjXETOEJHXlRQE/OWc4/gv6XWr1eo08CG82vcrgIucc4+W6Y7QCjNLGxCH8d+n5lAbpz4aPUUqImhm2baOU/jfqYhfoiBaWa1WpwoyR6YydfOQX4ec11KwgWBEXxiuqa9RoBFRkprY3XhwfNT2X0vr/18AzOyIiDS0j0yxP/M6z5m1iuJU78XkHzOvj3GS6TicZIym7oetNBdc/HbRByLyXerHrkoQ/pvFObcXL3pa6wLxDPldUBabrLG/loJxPIhudkQoFSsUxI1EIovLfCgwRyKRPsbM/nOOkVCGY+lUSDNbLSJpD/9wl9kFJxPP4CfvRd/3NKBMenZLQnrpHsq1UbwMX6tfCcd2hare7ZzLtiarCV6dlbONdTQqmR/GG7hppevn4p8hsxPjYIhXgKm0we2cm1HV24CzaezTPoxXTy9qG9iKlfhJbVYRv+eRVRFZX/u/mR0XkWnCOTGzA0HJvtbL/oSIjOO/3y+Ez2qsCMdcU7XPm4CvDst0m7lwrqr+EXPnpwL8FuWic2PAFSJSu04uo7l4YTNqKdN78d95ALxjRERmmGsBOG1mtQyAdLZLJayTdnysIadtm5mtCroMfZVeb2aPhhaH6/Df446CmvNI7zmf4jnvfuCpJus6fBbA2eH1CRHJZp5gZveKyOvNbKuI3FOtVntRrjWvmNlwk/lAxw6AkN2zXOYDkchJR3QARCLLjIzR3g7TweCpbWct9dHFkfDecuAZfBS9aILza/TIAdAm54XUzhor8QZp1kiawU948xwApwD3Zd7bhTfG0i3w6jIFgijgm4CfAb6P7wAwi3Nuv6regHeOZKNQ64FrVPWykGFRRF6KboUFyGZT1REzG6pNlkXkGP48rguvp9PHF4zamiGbbVM2HLQA9ovIUXKE4ELLwV58r7X4yGQnrKBeo2FL0YKtMLNnhXO3n7nzNiAiU3jjPy9TIe24qmWnpI2qQeBfsiuJyJiZ5bWCXFREZA/wcvx9d5zG+yzSe1aq6oSZnd3E0H2SJoJ3zrmDqnodPqtkHfCEmT2UXa5arc7gx/3FGPs7IswHisaZjjunmNmAiESBy0ikT4kOgEhkGRFSejtNjT1GfYrzFlJjiJmRnWCF/Q2F5SaXSrTLOTeuqjspLnnYrKqDvfy+od6+Yma1iWYeWSOqJlaV5wD4KfnR5/8zZ7t7zexOEbmaud88W0JwNvCesM8LVPV851x2AvlA+HtRzn7PC+vd3aSV2neB15jZyiBGeEJEfkpvhBFbsSrUoQMQRP2mM9d8Os3/BD4CvYY5gbs6ROQ4/p5qmCiLyJq8dRaA9LlfT72zpqOIYLh2a9fmAeYyADpxcKTrkivkGykrCsQsF5VwXTuKW39GOqOScXymWWNmo02M0Sngb2idLbIDeDX+Xj5SrVb7sb6/DHmlQyvIiGkGJijOUGpKyAD4eVWlF+VXkUikt0QNgEhkeTGr5t4Bk9SnIz8//WGIgE4nSZIeV7YB38BP2m/scL99iZk92OSztfS+/nGzmb1XRN6U0/quiGFyUr3DhGwP+YKCmhUPdM5Ni8ifAR8EnjEzZ2bfoH4yORKi2pjZBryRn93vFHAV+XXPY8D7ad5d4BHgfSLymJk9AVwLfK5F7/VecSwtsCcih2vCfoFaV4AaU8xNqjcV9Ck/ZGZFwmPDtPmMDsfXzbk4QcqxkxJQq9FpRHCMufKRdpw1aQfIJI1j0Cryv+9qeqvDEelvshk2adaKyG9T3JLvOPCdVkaqc27GObfXOfeUc65QiLXfMbO8L1p07qbMrJvvusLM+s4RF4lEogMgEllulBL/KuAY9VGSuklDEEUaqEVEgxF5KXAOfvL/ljYM175HRJ6stXbL+WwNJdrklSVJkhHgJhG53sxuMbO35in8m1k2fX4AL5KXN/k9TH5Ed5ScYw/G+weAV4jIK0TkrozhPV4rEQn17i9Q1eHsdvB1/reSX9uuwNuKuguE8oDP4SNxl4rIX7QQRewZQUdh1gFgZoNB6KpmaJ7A97PPY2tBRPpIyALIYw1t9hEXkUPkG8Qzmb8iptPXUBBvBGadAU+3czypdYfooCd6aDdZY4L6kgBo7iSJCuTLhwrF19dmvHhls1Z3/SjWNy8E7YJ0RtgMjffV7GehRKdThlKdPiKRSB8RHQCRyPJiJfVCbu1wgpTRZmZZK20GOJEyCofN7CzmxpnBEBlfKhwVkSLhqJXAhjJt8kpyjpmdDt64FpHX4ye2dYjIjpx1R8mZHDvn9pMvlDdGQa23c+6Ec26Xc25PtrzBzB6nPgKeq8Qe1vuwmeUdawV4C1DYmzpE4vZXq9V9BUr480YQ9av9f3Uw6mvfsUK9U2OcuZKAIfKftwMUO+SK1mnGJBkD38z2AlcSnCbh79NmViYSf5TQAk1EjrDAivWZlo/tEiOPEYB3U69jkeVrS6U0rQzBYfpy4E+AO4A3hzEijym6EALEOzHLtniNRCILSPTMRSLLi44icYHjtS4ASZKszRFUmqS+LnxIROr6LotI3wlzdcEJvAGdN7kcAJ5Do2p5RwT1+bRBsw5fYlBnwId2bRdmFOcLMbMfisjvUm9ojgLbVPW+dgzsarW6T1U/D1xrZjMiUuuU0IBzbkpVb8JH/LNZIaN4g9XRhQjVPHGA+l7i02Z2OAhprcF3RqjRzNm1MjgPTjezLR125SiFiNznnPtQ+j1V3QtsJ3QsaMIEvuziDLzxv2ipz8FhcSLnXC2ZrKLIvNDsPjwBNIj5NUNVx8zsd0Xk+fiMmE8654rKePqS4Py9psSiM0FnZZ6PKBKJLDQxAyASWV6sMLNOomozeOGjWop3g2J36N2dFkEboN5onWZpiV+dMLMf4x0feZxC586WOkIKddphO2Bmm7LLichDIvLZ1DFNmlmhSJ6I3Gdm2fTPAeA36SByY2YfAv5MRO4HbmvhQHgYuIn8UoAzgfcVZQEsIulU4Q1mdmoqSr0F+N3U579B8TncDvzAzD7fRJysruSgC/J++7qOHk2YAm4AXmJmF9Ebh8wa6uceg/jxpXYdrMiL/IvIZBhjskQHQKTTYNaTZra/7MKqOgRcKyI3AK/EOzuvKiixWgrMUPx8K0NNADUSifQZMQMgEllGmNlI2ehwhhng31Ov19LoQJykIOIbOJjTj/6kxTmHqu7BZz3kRZm20aMxNqRfT+JrnmvvNRjHzrnjqnot8Hd4kca/E5EvFInkheXvwqfdp1F8KcCRxrWKqVar46r6AWCw1W/tnJtW1U+b2UUickbm4wrwGryAZFsROphVnd+GT3f/D+ALzrm2vksB/1b7j5mdJiK3UC82l/5NLqa43r4CbGoSWZvBp+cu6v0ShNHGge/0cLNrzKyS+u5DeOO/lj00CgwFYyvOUSJl6KTf/AzwZGjnWQozWy0i25m7LgdE5Ez8+L+vg2Pod7otAYAYaIxE+pJ4Y0Yiy4iQgt9JBsAU9fW/eVG3SeoNxknqI6aPdLDffmcnxVHRMXwWQNeY2e6cSP2v5C0bDN2PA5eb2Qedc9l2fVluBO6mPtJznPzIfEuCTkApw9U5d0xE3kOxGOG1qtoqTT2Pc4AHgfcC1+OzCXphTO4iROWDAyavd32NQbxx2w5T+Ovpo/gOB91E35pRYfGe/xvDuRsOwoIn8Of0f4T/r8F3lBijMYMoz6GyP+e9mYL3I0uTTqLMx4Hvt1P/LyIrzGxr5u1t9FDwtd8omSlURMwAiET6lOhdj0SWCcEA6jRddob6DgB5hs8JM0s7ACbwAmI1sbofd7jvvsU5N66qDl8j3YCZbcP3j+4KEXF4Z0o60lU4foeIfynj0Tm3N0mSt4nIJcB/DdHZr9B95AeA0PnhdXjH0x3AnkzLraeAvwT+iMaSidOB9wCXt7G/0bBO7Vqv4FPue6HH8BQ+I+FcemNAnwgaAuN4Z9Jfh3+f6GFrw7p7PpRVbGPx2uRtMLP1IrJeRAbNbGXQuHg2/vdfhS8DOEHqejCzDSLyNhqjvXlj0Tg9un4jS5Zj1KvhlyIn82qIzpzqJwMztNe2M8tiOhojkUgTogMgElk+VICf63DdGeon1P+Jxgf74ZpGQGDSzG4JegEz+JrvpcgPgLfnfSAiv6aqH+3WmHPOnVDV64ENeAHAKeDvu9lmmmq1ekRVP25mXwip2RO9MECTJKmY2WtE5Dr89fLfgF/DO4cA39pPVW/Bt+p6UWYTFeB1qvogcE9JUcIRGmvvm7WLa4fDeDX97fgSi7X46N8Uc/oXG4POxnAqzT3dXm9KRHaZ2dMi8oCIHMXfHxNmdqJarebuOBju55nZVcCIiNwI3BVaIzbjElWtXTPgz8Up+AyVheI4KQeiiHyP0AEhiCF+Bf+b1eYkl5tZNYgr1tYZwmssZH/Hq3P2t5d6PZJIpA4z2xHuvXbWmQ46FOnMlKO0WSo1n4TypxH8fT5eYnxoxhTwr10eUtToiET6kOgAiESWD91mAKRrJfNqLvekX4Qo7zNJkrxERAYWumXbAvIEPkqSFwVajze06upMVfVU4Dy8YXhPtVot04d6B76m/Sy8AX1X54fcSDD4x1sumIOqbgFeiv+eX3LOTQCEHtC/yFwkdxv++Otqyp1zx1T1WjPbmjb6AkPAVfgMiGdKHM44jdkPPXnWhXN0DF8ycXfRckEUbDXBWA0K9ker1Wo3TpX1wI0iUmvReAP+nnsitUxe68BRfMbColGtVidVNV0Wkv2Ns69fJSKvytlUnthaNsV4Bi82umgdCyILi5mNtatULyLfbNfJGRwGO6nP+DrEImt1ZNgCvDtk2exU1Rudcx1lwwSdm24dwdEBEIn0IdEBEIksHyp0HvWbpnWU45/z3gwRzaVq/IM3CHPLAMxslYhsJGWkJUmiwKfwQnszIvLbqvo251xTJ0BwoDwe/kqhqpjZWhG5GP/73euc6yals4jrgQvwjpChkPUwjY8g/QQ/QR4DP1kv2MZTInK9md2Q0y5yG14P4PU150IRzrkJVf0mvnxgILQkPGRmvUqpb0moK+51C8PTqBebXE3j5DqrsN9PfBOf4THC/B3jNF6n4ZYuI5+RHhKyV7YH4cy9+DKa45lSoI4RkbZEAM3sYGhTmnecpwBvDm99CnApR8ERfLbKVmA0jC2P01/OpiuBN4RShe14EdT/nrdgKAscACZ79Vvk0K/jUSSyrIk3ZiSyfBigi7rfEtGSvS0+X6pMUlDnH1q8zbbrU9UBEXk53viv4H+T7eFvPhgRkWuAm4HbzOycedrPafjvMwJcRsgQCZPKe/EOghMAIpIbjQoOgy+JyB05H1fwqvpvKdka8OPAB4EdIvIl4P0icrIbhKPUR8CnaXSsDdC/z/U7zOyNwJ8CnwUeMLNdwLEgBtiKKWB3RmckzTG8lsRFzrkymSKRhWMb8HURuR74opm9kx4GoMysrWteRB5irutEmi3AZ/BdUd4C3Epq/A5j1BeA9wP3hZar182TU7UjzOwU5saAAeD8vOVUdTPwAbwI7DlJkhT9HhN0J0b6S12sG4lE5omYARCJLB+6yQDIRl3rJk+hNrJMGvtSZBqomtlEqGdOMwxsUNVaCcQwsJFGI+1Z83Rsq/BR1wowJCLb8AZ5r0kbolvwDo4DMKtf8FHgYTMbCIKGuYTo/Q346P22nEWuAJ5R1YeaOaTCPq/BO7wmzGyiRW39KICZjXeZpj+fHMTfh0Op12Vqj6fxzpf0NTdA+x0KuiI4g+4C7got/kZDpseIiIyZ2RYR+WV8lsMq5sRDD+GzXr4J7A/rnBvaR64zs+MisgO43e+meYZIZFHYztyzZ0hEfhP4CxYhM8zMTojIj8gRtzOzU1IlNuAj/aeS6mYThF8/CXwVHznvq+stJxuiIQU/CLNejy/bAjhPRC5X1YdzMgGO4x0AnY4X2WdiJBLpA6IDIBJZJgTjq1nbsmbsz7z+K+CtBKMiRFRmI7shtXAFMGNmxzPigOllNuAnYod6qHq+oDjnSJJkl4gcwBu/WZ6HnzxN4B0A2XpnaN5OrhuGqNdr+MV52s+jwCvD/weAN6vqd2q6DyFCVlZxez9exf82GrUm1gG3ABeR0ZzIEtLwywjBXQK8D1+OcZ2q3tuPehVm5kINci2LZzeN92VDJDSInV1LyvlnZv9VRP5gvo61FSE9P9s2dEcbm3iSgrTmSF+SHXe20dv558+2sexh4LG8542IzFDfanLQzBp0J8K6bQkILiB1bQ3NLK8UaSveyVpjI3AmvlVv3419kUik90QHQCSyTAiCbL3yxu/ARwZG8aJrdxKyBIJh/xrgjWG/nwK+lF5ZVVeY2ZUicmFY7wrqxcxOKkRkDz4idY7v6wAAIABJREFU2+AAMLNNQcF8grk2ZwvJDHNidE0XVNWKma0OmQwH2qij/j5zDgDwdbSbKSfaV4dzbkZVd+AN/etpNGo3A9eo6hXA0W5qV1V1Nd741/DWlXg9h30db7RxHxAU7/GT85kOj/kwcD9+sj4NPEij+Nh/CW0cZ98QkSedc49mjmmINqJ64Z7GzGb6OEMicvKwIvx1JDqapR0NgDBW5zoPzWyviBzCC24CTIZ2lCcTB0hphYhIXpZQbTxK83PMT/lQVs8lEon0Af1aKxiJRHrPxl5tKKgKnx9akr0ar/xeMwzWmtkN+IjCmcDNqppVyN8K/B5zkYjrenVsi0GINn8/77OQUlqL8I/isx66RlVXqeo2VV0XjMw8jprZw4SolojkCjWG7Q0CrxORv8e3GPxYkiRl+1tnhbBWAZfWDMd2Cefzw2b2ZTObylnkYnwdbrf9tzdRn32xnt47aE4DPmNmDwJ/TIEOh6oOqOp2VX2pqjbcq8Hwvgq4HLjSzD6eE8UcyulTnmewj9NY1pOLqm7A35+30dimMRLpCDNb23qp0pQeZ8zsG2F8yeNJvAZAzbH2pJnt7PbgFpg6R7qZPZ1dwMxqbQLT760jv8tGt/Tyd45EIj0iZgBEIssEMxtst1VSM5xzT5Aftd8YxO9q+x0KEZq0SOBwpl5+KbQK2tHks1Pw0fC89P+2CW0ErzWzDSIyDlxLprVe4Gj4DPw5fqjJZlfhszZqv8sFIXujTGbGQeAxfDo9zIkbrqZzhexJEbkOb6SflvlsCHgT8DTwuQ63P+8Ep8oNwHYRwcxOFZFp4M9yFn8dXpRrzMyeUNUrnXNPpRcIpRSf7cGh1VLws8yIyKxxFDIF3mVm7xSRARE5M+gvnOyCipFliJlNBb2IXKrV6rSqfgjv0BzFZwqcbNo2dwIvwxvex/O+r4gMk3EAiMhgSTHOSCSyBIgZAJHIMiG0o1sIsil/A/hIfzP6SkipQxzFNecvDP9uKvi8dAeFJElG8ar+LxKRzXjj+GZVPaXhgJybEZFHgd8CEpob8yuYS32FOcHCMhwHvkH973iGmV1Qcv0GQpr8buByM8s7r6PAjap6caeZBvjznk6R3U1vW3qdhRcRA0BEhszstdmFVHUdvvXYGrxzbDtwWTDASxGcDWWXP0G+A2CC+vMxBlwYyocIx9eTDJbIsqIhU0dEehYZNrNSaeYissPMcruQ1HDOTTjnHnLO3e2ce+YkLHl5Ani9mX0OeAXdl9YdpEelGpFIpH+IGQCRyPJhQVW/WzBlZpOhNh7gqaZLnwSEntCPUF8LX0NVddjMnlOQhfE/yu4nnLOssb8BOFVVXTYtvI168ynqJ3qDlEzfdM6hqg/hRelmnT0i8npV/WyTlNsy23UichU+kp7NFFkJXBeErsqKDKa3f0hVPwZcHdTkb6KccCDgf1Qze3WI6n/KObc/s8gmMmm1qWs+zRiNjrP1Yd2y0fYRvBOnDHn7y2OIxqyVaAxE2iUv86lnteEiUjaz6ocishSczYWE8f/h8NcOK1KOvkgkssSJGQCRyPLhVxZjp2FSkZ2gHRKRXQBmdhz4+oIfWI8JRuAPyFdRXgecISKn5nx2oiDCXcRaGiNqA8Bz6G5Mn6Q+gj8I/ELZ6Lpz7ii+TjztgNgGXBJa7XVEcGB82cyuIz9TZLOIfDFJkq1NtBCa8Wng2SLyAuD+st0oQsbFnUFN/71mdntO7f4UjTX4x0oeV4PzoIdUKH+tpH//A7ThIIlEAv1gWB4CHj9Zu830iiRJIOf3MLNp8vVCuqWsUzISiSwg/TAoRyKRhaGnDr8kSUZEpOKcKxMRzEY99+EV1zeLyGEze7yXx7YYhGj1M3i19mzkfCX+++ZFqo6ISFbNvRljBe8rfkzvtI3TDI0tpNYGrYayx3cf8C7mSgmGgUvx2gNNU2+b4ZybUtWPA88G3kLjs2tTiN6/jTYV/INB0LbSt5mdLiLrmbuvTgPOoL6c4xEa1fbzrvURGjt09Op+zWsxOUg550Ltmqgt+9RyN6AiPSNXDHMeOQjMq6Cfqq7Ej8O78K1t53N3HRFEQhvGBBEZN7P5uLdLd2iIRCILR3QARCLLh8292lCIft4ODCdJclW1Wv1Sk8WnyRhlISV8B+31/j4ZqLWYyjoABs3s3ByFdszsWJsOgKKU8I1m1s2YPk59/TdBzHGY8g6A/cAdwB8y93zZDpxHl2J9zrlpVb0Gb5C+nXoDtgKcA3xRVV8L7JvPyXeozX92+hhCpkv2d9+LL004J7yeMrNvZLdnZtOhB3k35LX2AnhZ6MJRc8BU8LoEDS1BQ1nOsczrffixY4aCTheRSAsarm0z+/lebDjoZ5TpBrLDzI6W3GYFWGVm64PI6h7nXKFjNSx/HnAjfgwYxzs+Hy1aZ7EIbUL/j8U+jkgksrjEEoBIZPnQM4efmb0RbxSsE5FLSyxfauJ1shPS4HMtzzzjP7x/lPbqqveSH7FeIyLdRNVO4LsGpBmgjedEcOzcTn2a+DDwflVtMDjbJZzfa/DOhOyEvAKcbmafoFhssVdUzKzB6MiqaIdo+S1443vazO4XkYYoZKhLzpY3FOomqOpaVT1HVdPfc5T8qOooXpfi98Pf7+EzFRp+19ABYCL1eoI5EbFj+E4WkUi7NJSNFI2HHVApqV7/rWq1Wnabq4GbRORHwPfMrFX7y0EzexewBX+/rQXe0YU4adeo6oiqbujFuBuJRJYe0QEQiSwDkiRZQ07Erw3qxoq0oZlnCGWYEpGTPsW/DR5sM5XyEI2GdzMmzawovL2taCVVHVLVlSEa3EAw3v+eJoZnSXbhswDSbATe2YsJcSg5+QBwD43HWhGRc4DbVHVjN9oDPeQB4DeBF4vIG8nRADCzgzS2G9tP5vupKqp6rpl928zuBL6fJMlbkySZr+95ArgV32LyBgqcW5FIC/IyiHplHA+UcCbso2T6f9AROR14aXhrrYi8rcU9NiAiecKsC97eNowRW4DvAj8EfpgkyVl9MhZGIpE+IZYARCLLgJCe3M0EoKs6vmXWN/wRfBS1jMr1DHAgXVedJMmgiJwJnGZm+0Tk3sz5OyEiD+MnqdnfdCtwb3YnqroCr0FwKvCkqt4coulZnjSzCRHpWLjJOTejqrfie1HXWsZVgNfjDcmu63CdcwdV9d14Y/p3qX+WVfAR7q/jo3CPLmYtbnCs7Ap/uVSr1XFVvQ7/+23GZ4R8i8ZMj2Hg9SJSc/SsEJHaee054bw9Crx4PrYfWdb0qp3kalp3uHmA8jofFXwkP+0oXRnGxFxHbUirX5V5b0hEypQm9Jox4CrmsnzWisiVZrYLOBpKjf7vRTiuSCTSR0SPYCSyPFhNdxkARcJziMiwqhZ+noeqrk2S5E1JkrwzSZLN8xjBXHCccydCO8AyTAP/kH5DRE4zs88A14nIrcDFme1PA982szyxu+cU7OdKfF3+ucAfABfkLWRmT4jIntTrGTpQhjaz/cCtZpaOYG8C3tOrtFjn3EHgaryKf4ODycy2Al8BzlPVXqvpT4rIP5I6N+FcHex0g85b2y8GXgL8OvClnLrjEbwTJ80YXmm7SNl/H/DnwAfxmRn3m1luyYmZTdCFWGMk0gY9ywAws2bPjxP4SPjsvaSqFVU9Q1U/r6qfUdVTM8+g7PbGaeJACK1dZzLvHae9zK5esQYvSDr7HcxsZar96Ay+jCxbcrQ3lAD1nFiGEIn0H0tm0h2JRJoyyPzd79n2cWW4SURuFZGPiMhnuok49ynfK7nctJntzbyXVpcfBV6bs96TwMdorIMvyjo4mznBuiHgiryFqtXqpJndQtAkCPoEbWdvVKvVaeBLzNWPg/8+r2FOEK9rnHNHgPcBHyVzDYa04LVm9nng7UG4r1f7rfXa3p/a3z4R6apG3jm3zzl3n3Nup3Mu754ao1HfYBj/mxZpANzlnHufc+49zrlL8U6GD+TtX0RmQsZCJHKyMNqif/1BYHcmC2gV8CngdfgMoptFpJblNoO/r2fHVjO73TnXLINghkadg6ecc+2Iu/aEUJJXqAUTzoPDi9XWGAf+ap7u/QqN4qiRSGSRiQ6ASGR5sJJySsmdMJOJVBaJ1AGQJMkKvGJyjdOZf9G2heZJM2sZSQ3q7/tbLLY2SZI649U5Ny0inwbejz/f4/jI7ccKtpGNgG8OZQENiMh9wPX4SeLXaU+gMH2MB0XkFhqdFFep6qZQa9s1KU2AG82sYcIdUnOvDfsd7dV+zewp4H1m9pCZfQe4wswaHAChJndQVYdVdaDL/U/RWE99LPwVZQDUnX/n3IyIxCh/ZLGp9KgufQXNW1oeJOWoC2w2s3QrPCUYqc45QlvaJ0IG024RaVViU+tqk84CeLD1obdHGEsGmmVRhbatrTLy9gPX4bODjgF3mdmOXh1nJBLpf6IGQCSyDAhRgcGQqtgJlSRJhqrVai0anDYgssbEfjO7W0RehTdI6qIKIrIt1EfObpuF7wndE5IkqYiI4iNKu51z+8NH+0VkF/k92GcRkWPOuVbG2JCIrCYziQ0R4g+q6oeB9cDhYAyXYQAvzPdE9oOw3T8Lf91yH/BlfOS/Ntk/A3i3mV1B94KDwKwT4E9UdRe+Fdf6zCKjZvbHoXb+PdRHvzqiWq1OAXeFv2ZsBC4P/z6D7wrQaWrwcTPbKSJnpd57Bm/ktFWGU0CDQGEkMk+M4MfNbp1Rw2Y20OTZticnEn+qiKSzpUbwjgQAqtXqHlV9tYicCzzW6hidc1Oqeguwycy2icijwENtf5PWnIovERpS1W8BT+RE7VtqK4QMprvDXyQSWYZEB0AksgwIqv3dpEBXQopkre78Vnz65Ajw7cyy4yJyMz6qsh6v1p5Gc1SbmxrK/UiI5J4F3IxPNd+lqhc5546b2ZHgANhO80yrvJTxbM39EH6ivD9vA2EC2JZBa2aIyFpyHAA9ZhL4CPVZHhUze42IfE9V7+mxQN89+FKAG8h0RAjX3IXAmKq+Dz95blvfoB3CNXJ1+L4V4EVm9h/Ahzrc5ISIfB84Ixg9U8BtzrkTZTMLwnJF12RDu7ZIZJ4YoDdz0HR9ex5Pp1+EUqBn0Zg1UJemHpy5f1n2IMzMichl4Tm5mx45N2uo6ma88/CM8NZ5+PKwrKhqw7kQkYYWpZFIZHkTHQCRyBInpFmO0cX9HlSOZ9d3zj2jqi/EG+6PppcNBt1TwHMLNvfsnGNZ0AwAVa2Y2QgwU61W29UvAMDMBkXkIryjAxE5w8xeCXyyWq3OqOo38fWlzUovsvX/4I35aebO0UxGTK9rgjG6lXmOAIVr4ckkSa4Vkc8TvlNIU70BOKCqT/XKCRBKUe5X1SfN7BMi8iIaz/9Z+BZZV6rql+ezQ4WZrQEuSDm8BkNLsU93ct0556ZV9ZPA/xayGe50zj0cPh4mXwPi3zKvK2a2votsoEikLwip8D/TbBkz2515vVJEtuYs2pUOTdA9adrto0vONrNTU/ftNry2S9YBkCcEO9rCSRKJRJYZUQMgEln6DAI/3+uNOud2O+d25CiVFxLU2Be8N3IOLxKRL4rIbap6eicbEJGKmaWjSJWQaVHjMVqkepvZP+S8fYj6SOykiBzp5BibUDGz/9zjbaKqG1V1Tba2V0TuprFV3UZ8u6oy7RLb5SjwjrD9PAN/DLgJeO98KlSLyEhOtstIKOnoiCB8eDU++vfl1EfD5Hf6qLt2gjPvf+90/5FIH1HLjipERPZmXo+SL0r3Sz08rvlgTESyWQu/WmZFMxslRych6Amsa7eLTyQSOfmJGQCRyNJnkC4j7CHq0ItWaqO0MPiCQXYt8E68Ifdq59yOHuy7tv1V+LT9jeGtFar66hK1+G0R0rK/A7y1YJGpAtX4A2b2jIisC6/30yQ1W1WH8ZGgTSEN9dEyas7ZvtXdECaQ1wNvwBvcb6Q+u2ASX3u/AjgzvFcxs4tFZI+qXtNLBeqQUXAkSZIPA0+KyDX4c5Q2xsfM7BoReYGqvgvYPw8lAXvwBnh6gr2P/MyP0oTjLKswXvreN7O/7eyIIpFFYZDWkftsa86VwLqc5fq9Vd0+MxtPaxeYWZ7h/pMyGwtj9jfw4/GEql4PfGgeOgEMAJvxZRGRSKRPiBkAkcjSZ4Au0xvNbADfX7hbiqKUac4AXoWf3K0BLg9Gbq/YQr1RtI7OotAzItIq++HpJp8dKejHfkxEvo43mo8An2iRIn8xcDu+teLn8SnuZRju4Xndjjf+h/DG7pVJksw6jJxzOOf2ANeY2WxEPjiW3gJc2CNF8Dqq1epMtVp9FHgzvp43r1XgucBteIGtnhJ+t5uZ66QwTuvfs9c8P0mS2d85fOc8A4hYFhCZJ+arxGuQJuKXZnaIRk2VopZ0ufdEH/FotmNMQWbYbsqJeW4PfwOEMZt5yMaK2gORSH8SHQCRyNJniC6N92AYDAG1lma/r6r/niTJ91S1bnKnqhtU9XpVvUVVT8+0LBqhdTvCrdSndfa0haGZDWUmJYN0lg01ZWb/lHo9g2+dl6ZZpPeAiDRM1EJ09wvA84EEuLdoAyGb4TLmJm5rgfPTxncRoTNEr6Jez6defGqjiGzJWW6HiFxtZmlDfAVe3Gp7j46lgSDodQXwO/h2XemygAHgLDP7uqq+MpSp9JJPA7+O/51+A/hqj7dfo+gafqWI/IuqPq2qPwT+Grhkno4hEsljvkReh2lSApA3vjJ/7XDnm4PANeHfWgbQ93KW240XQ511TgdHQbY17/Myr1cBp/XqYCORSH8TSwAikaXPIMVRj05YBbwcr758Lj61+qswm45+Lb7tG/j0wpcz1z1ghPwoQzrFva6fuZlNBbXznpCzrePk14k3xTmHqu42s6Oh9v+EmT2WWazZxPcgBWncQVchrzwgy2oanTvNWmLNklOb3g3/lHk9hO8AUecQcc7NqOqnReSX8KURtWfQGuA6VX2jc25eRLRCautDqrob38HiHaTOXeiKcBN+4tyqtV87+53GC3Vlxbp6TVEEc5AWkdIUHQliRiKLRCsNgLznRq9T3BeE8Ly5Dx/d34pvTdjQatA5d1xVr8M/U8/FZx3dYmbZUoi88b9lC8FIJLI0iA6ASGTps4UuU/tC27haZPQ4vrb5dLyxNAWz7cVeBFyQ2Xe6feAw+RGYdKRmCh/hqIR/f0xvDZOdeG2BmkG0h877nz8kItfja97vqVar2e08v2C9GbwDIK8EoB1W0Zheux5v8KUnugvd371Q7DFMUK/BazCcQ3gOmdlpInKTqr7LOddVjXwznHMHVfWDwH34rIAXMeeoWQOcTw8dAAtIL1S+D6RfhOyd9fjf6IBzLhtFnFdUFTNT4M3BYfUpwC1wCUWkC0Jpz3xlmw7TvLxtf857+3Lea0lwbr8SPz78CPisc66sDkdPCM7ER8Jfs+X2qeoH8OVHM8B4tVrNlkL8fzmrlhb0jUQiJzexBCASWfqc3+0GQgvANQDOuQl8KuI1eDXyWhRiGPgtGp0N6XGmKAMgzS4zq9U2TonIPb0UZ3POHcWrp0/jI/8/KqjFL7OtKXxP99/An48sZ+a8B944/7seGDIryER2g14DmfcWQ+Cq8PninDuGN74fr70XDLzzgFuSJOllxkre/qecczvxWQCXmdlX8U6mCbzDaVliZtn7bJOZfRv4AfD7qjofHRuaMQjcLCJvx2eMXEtvHB2RhWOU+Uu7b1W3n2fQTphZ24a7mZ2DN6hfBlyH16npW8IYd8w5d7zg+ZnnCHmy18cRxvWTtewiElmyxAyASGQJE2rEz+7BpiqkugA45w6o6n8HKqk2gLUawnT6/jFC9D5kCAyRP4FPG+CPisgngNfj6997nhJuZjeLyE/NbExE7s6JjpQmTK4a2v2p6noKUirNbDLbnqpdVLViZhuCc6YpOe2jeoqZHciUHVRorS+wF3gb8HlAmbtuzhORj6jqlc65jqJ1ZXHOTarq/SLyGN7BNWJm89XHuyeEqPxIKI05UcKJNMFcqUkFf/+VFQU9T0Q2hf+/De/se6LNQ+6GYeqdaOfhM16y6cyRPsXMhudx/GmlLXAkR4RuSkTGKVcSM4uI/LqZjaT0cF6oql8IDvGTkR14XYCace7oMDuiBRV6IyAciUR6SHQARCJLm7PpXf1/neEeDN+04bwe3+5nliDClE4bLpoIzKYeB6PsT4GPAkXRi66oVqvH8UJJ88nZFEcrJ+m+LVJFRJ7d5TZ6QphQpxkEfqHZOuF3fUZV34hP7T6VOf2HlwIDqvo259y8GnvBgB6n+3KMeScIFF4CvCIogt/CnNDkfypY7Rp8ucM0/nfZAHyEcvW+z0n9fy3zp+aei5ltyji4BvFR3+gAOEkIxn/eXLOWgdUNv9zi83/L0UOZorN7fTCjm1ITpz0pHQChFOrDwO+Z2TR+DM47LyfoXjchZhtHIn1GdABEIkuU0Of3d+iB0ruZDYjIL7ZY7AwaDd7j1E+QSkVdgnG40HXrPSPUvb6AVNZEGhE5jG/x1w0VvNOlH5jBT+gHMu+VYaeZXS4inwFOSb3/IuAWVX3PfGcCnESsAD6A/91rBtR7wmd5zrVDwL1pTQVV3YeP9jU4AEQkm8mSvgez93JkmZMkyaiIvAn/nNkJXBNKrNKMkf8MmqD7Mb5pCYCZTec4ACbNbDzn/VZOpex4tpIuy1GSJEFEzsLf00NmdouIfDWVVVdHeK6MmtmMiEw0c46raq0lK3hHep6z5QbgayIyY2Z7q9Vq3n47EsmNRCL9TfTKRSJLl614kbWu7/MwWWrlMHxhznuHM/X1P5ddILSE63mUf5FZQyYbIoNrMXkbCZO9ZlTMbGNHR+eZpEcTu/Abpjs5TAL/XGZd59xMtVp1+JKPJ5i7FirAxcCtSZKs78VxLgHWMef0GaC+bVfD9WJmUzTWQc80qYE+nHl9J8FRFVTEu3VaRZYWp5rZtfgyjbfj79csRRkAMz3I7mqaWi4ie9rQWWnlZPwP6u+lVXRZ2x66x1wLnAWcJiIfoN4JOkso/XkD8CDwNbzDPRdVHcEb938P/B3w3jz9jqAP8JRzzlWr1SLnXjbTLxKJLAGiAyASWYIE4/GNlK/1LcNoUEJuIEmSCl7xP8sxEamVAOTWAoao40nXmilJkhFVfYuq3qSq2zMG+zq8yn0RTxd9oKoXAt8CPqKqm5IkKVp0UETyJsCTOXWveYwHw71rwm+cNSrbdS7sAt6Mr01NTzjPFpFb1dP5QS4NsoKPbYvymVlFRMqOCzvxtf9fEpGbyFdVnzdEJBoefYyIjFIf3X9BzmK5GQCdCPGlCRoorWrLS18/Zva3LRbZQ/2YtsrMuhW320R9Jk6z58Y24CrgVBE518zeEzR+GjCzs/CtTkfx5/8KFq/FX8XMisqTIpHIIhFLACKRpcmZwIU93uYIPuWxoRWYiGwlo+4f0i//JZPOmOd0PClbD4nIy/B1k+CVoX8HeCq83kZBdCqkb+aGpVR1wMyuF5EtwHZgvYi8mkbjGnyGQcP5FJGDNDpUspFdgIky4ofB6XMK/nnhClpfHcF/9221bePTzEsTooE7VfVSfI36BcxF2M4BvgFcniTJwwWpqsuBXdSXWjQ9DyJSa6nZEaHLxd3hbzGIpR/9zZGg81JzKOV1IBkVkYZUeRE5lH2vTdZSUGIV9ntcRMo6OMdFpNW1thP/7Ks5M4ZEpC0hwRxWUO8cGaD4O20jJXooIhvwZQgNWTki8kLqn8crWLzuGRURaSXWGIlEFpiYARCJLDGSJBn+/9l7/yg7z7Le+3PNmjUrb844Jycn5oScGMYYQywlz20ppdRSYy2l1IL8UEr5IUIVxAoVOIjY1dXVt9baxYGKigjIz5YWCvQFrLWFWmsttdRQ7yfGWGqIMcQQY8wb582aM2vWrH29f9zXnnn2s+9n/3r2ZGaS+7NWVjt79n72M3s/P+7rur7X9wKuUtW6i5My41RIHlV1A6WFi4jM0R54xno2T1IKZJxz8/+WMT9W+P9Nqlo0W4y1QwAgIkeJB+QAZ4nIfAVIVXdSPTaxqv91KjLOrdyX26AHIzXzkbhVVe8CPgfcHKs6ee9PquoDLJhI7VXV3RXbxDk3Yv/avmPv/VFVvQb4fYCCmmES+KiIvDrLsjM1eT1LwTCz9P+xauAJVmiCzUi9x8ubvYTk0Jydp/9U/KVzDhFZUzGGtO53u7bTBBQRibY4qWqzpa3Ifgp+BFmWtd2DVHU/7cF2XYPdk0QS6hWspzWIj36ulrCdZHjr+ylVTedhInGakRIAicRphohcAvxCybF4GDQVALH33EYpAWD9xwdKT41VIw9TqFibedFO4LeAly3jYO+7xR+ai0qr4l9S9SJV3UOF+ZWqvpxCFU1EVlPRxqGqVTLu7/dSIVfV73T6vS18Xw28WUQ2ERQNv0qQlraR5/nngbcC7wVel+d51aLxlwi9qf8v8GEixpB5nh8jyF1fJyLFaQmTwOdE5KYq+etpzgngbiyoF5HiyMI2h35VXU+HKmkiUQfv/QlVvUZVf0dE/gj4ZPH3qjoCrKu4F/1T5LF+2EjnY3uauFrtOKGaX7wX7VXVIzCftNimqu8C3gWc7ZwbyfN8FvhMKRiuOznkMAV1l/nlVBkjjtK6Zh+t+FzHaL9PzzBgItB7P2VKokQicRqxXBfWiURicN5GTXOiCioVAISRb+XFWEwBsJ9W47IGC9LKJjsJ0vrNBA+BKwnzx5cbDxMqQusJf2fzb93eSfIoIgeJLBytcpPRnpjdREROXzGVYYa4U3u52t+wMXKdWAX8OO3f+bMjzwXAe//5Ths0I6qbWahWvwX4M+C+yLYazrnPE8YlfoTW4+bXgW3OuWu891VqitMO7/2sc+4ughx4O/CXnZ5vJmNLJf0dBg2CeuWUjh9M9I4FxjfEfmcV+h+seGnd4Hm9qo5FqvlNotUVD0cHAAAgAElEQVR17/20c+4LhBa5jcCsqv5DwatmFLhORF4PoKpXishLCIH5p0XkGar6K4S2gQPddtI8XbYB93vv95R+fYiCOsvaIqq2eYxwfW+ezzOWZC8zTXsS4RBLO+Z0NMuy0TO4dSuRWHYkBUAicRrhnLuC4Ci8GEQVAM3RRJSuJ1Y1KPZ5NoC/prUS8XXg45gCwALEN7Egb18LXDmc3R86+wjO9V8iVL2fBFDVyzqY8M2qak5c9tnNOLBMP6O1vl/8wapYeyPPK28/Zuw4cEBp5lTFYG4U+Omq55svwJOq+lJCkNFcLK8CXg58wzl3kTlkr3iyLNvpnLvNOfebWZZNVrTA7Cb4TTxbVR/usslxYKtzbqtzbptz7lwRuZD497rssADnNlql3F1bVxLLhlGqr2kHKx7vlY0i0kkBMGvz7WM8ArwI+L+B64HfK0wkGFPV1xPuZyMich5hJCmE6897gUxEnks4F6M451Y5524C7iI48v+Zc67Fud97P01rcnc34b4S41Faj/3jMY8D8+34lqo27zEN4LGmwmFA6p5z64bgl5BIJIbIabFoSiQS8/3ab2DxKn5Vbs6rK1zFp4szob33OOceA55S1UkRuZcwN7povrSaML6Q0mPLDlsw3m//AHDOjQHPM+lrG6o6LSIHKkZTbSBuHFhlZBV7PFb9QVUPFitlIlJl5ld8zaphmzdZK0GZjo709lkdzbLsd6wd4D0EU8Lm5IlPEJJGjw5zX081zrltwO0ExcesiPw3QnDSUuWzz6MfSe4HCNW/Ucy5fKUsxvM8bzjn/gT4r8CvAbtUNY0iXDmMUH1+100A/Hc6r2FPiEj0GmfX7r3ElQubItL6DLjDzr05qoP0lu0QEgerAVR1k4i8xDn3RMkY908JrVVTwEcsKdCGqj4tIncCv0lIUhwwP5kY95p57MWEe8IDeZ63KABsVOCvqOp/FZE/994/1uFvqTWxocJ3IZFILCEpAZBInD5cpKqX1en9V9WZmGOzsZpIAsBknrHXPB15bDfwQntNrEdzpLStnszqlguW2NhWtdixBemT5cedc6jqNpNsl4n+/ar6T5H3mY6N1xKRPSy4x08TJPXdWEXcaLBO8LieAZVneZ7POee+RGi9eKeqvt7GIG4lVPNWbALAVDRvYsFUbExVz7Zzsddgv+q83Vb8YaUtxL33R7Msu15E3k9IjNQyJDOPkbXAiapgK9GOc25cVd8hIm8AHlHVm/I873ZtHiV+DZmmhiTdlGLdRgDOMVjfe0xZNUgSeg0FY067L29S1VUUkreq+oiIZITPpPLztOvfrcBfEa5591IRmNs5c6WIXERQz7S00Fmi+v0Ef5cR4NXOuTd1SAJU+RIkEokVSkoAJBKnAVmWjQFvt7nMA6Gqh0Xks4RKW2wRBP25Hh8oP2CVl56rCTZK8Bt9vOeSYg7+kx2ecth7H1vkjRCfoV25iLWgvsxURVXoOEGpcBnBtburp4ItDGNBZa+jtWI8o8Zrm8fPUefcDSLyZ8AbVPUcEcnrbHcZsEZVzyupNPpNlEwOdY+WEdZnXp5k0TdW9fxV4CXAnizLbjTDyUR3rhCRmwFUdTPw1865OyrUTE2iCQBTJA08npJwXeqWiDxupnr9MkzVU/kcHikn4Kwv/il6wBJWD9m/jthxXTW+cxK4gAXfnq2qeqFz7vFCK0SR70ce64cJlqmSL5E4U0kJgERihWN9wq+kXu//nIh8RFXvEZFXUqoaFogZz1Xxz8UfbD8vBC42OePXIhW4aYJyYAuAiDxN6Ndc9lgV19F5YVopsxSR8yMPH6K6AryPkEwpvt8jxKs1Jwh+BWsIC+OuSRhVbdgox/J94u+7vbbDNtcNowJtfa6PZln2pIiMU1OiugzYZGqGOqT7eXcuJMi+V6vqhSLy98DHlnifVgovbf6PTSfJgM/Tucq+PfagiOzv8rpuVE5HgXnJ+Uye54MkGc4Ew8lNqrqhcC0eEZHnExIrMVVMLaNVO15SAiCRWEakBUMisfLZAFxNjXFfFpB/SUSmCDf7qgRAPwqAcgvAVuDLwHqTws85575UrCCp6kngT82o7DBwowV7K4ER4IVdnvOtisfXEjfL6jTHfZYge7/Cfp4Gbo9VcOwzPk5/Us5ZU4W0VPBUtW7vbkeccyOqeq6I7CTMF78vz/NohSzP8+iorxXIWlVdU0qOTBMfm9kvJyyZ09Fr4QzhBVggYm1IP7S0u7OiKN9fttK9nWey4vEj1Du2xynI6yM0gH8ZcNtnQqAaGyG4nuqYIKlkEonTjJQASCRWMFZVvwSIVY97RkQ+RwjYJwij7aKoaixIbdC+mJumYPJk+3kNC4u2NcDzgK9QCHCtz/EOQp/3NK1TBOYx1/fz7d9jwK5lkChYTWcVxgkgJtuHoByIJXCOUq0AmCUYvK0HNqjqx0tz4WthvdaHaJXwnrAxhi3YCMMdNpbLA1NdpMGd2CYiX7D3bYjI65xzP+G9r9X7vcwZiSzIj3RwMe+VowRj0IMEX4EJEflZ4B20H28HKSWbzJjwrYTz+/3e+5VuwPd/Sj+nNVDv/CVBadY8Thsdpp00+dHYg6r6z6YuGpTVdEgAWHtB9HrhnFttSqQRgg/BiVLSNJYUGkQVMMryPb5maP98now81qQX08NKVHW8g7dQIpFYApbrxSmRSPTGKuCdVPfs98Ih4E9s7vosHcyZRCS26JpW1aOl6uVTFKoGFnjsKL1ulEgFyXs/RfcRdedjagLb37dbP+owKqaDcgEdqkeq+lSVKzUhARDjMBUJAAuwH3bOvQRYJSJHS+7SdZkG9hP+riYHVTWWlHkHcINVVT9GGJU1qFfApSxUDkdU1ZkipKtvwQrmOCFBVDy/5qr6pJ1zq3sxsLOpE0/neX6g8NpdhO/0gtLTZ2hP5N0AvFZVG4Tj8Lpu79kLzrkLgXMJ1577vfd1fCX6YQ/h72gmP/pRNJ3p3AG8CthJOE729hDEx5RkcyKyv+a1ej2dK/UNIh40xnUi8g5glap+TUTeRmvSu21drKot3jrW7rVOVWfzPK+6pk/QWaWwZKjqfhE5xMLxPw18q0MSvWnaOJDHkLVpnQnKikRixTCwW3gikVharKp+uapWBY+9MAd8nIVgfZoOcj9V3WiLn3m893Mi8i0WpNgNQjVhfjvW3zyU3sosy0aAny1sbwL4KVVdsgWGfRcv6vQcEdkdM6Wyz/N5FS87TpdeWe/9ce/94SEH/9gc6b9gISHUAHaVFQBW/f9lQjJqFHg19Qzpnln8wRJLW2psbyVwANhXrKjGqqvOuXHn3G8ADzjnbrHRn5TPySYicoT2ql6n4Kj4XuuAHbadkYrkX9/Ydj8DfEBVPwq83M6fU8GTBHVRM/g861S98WnAFPBGVX2d/ffDQMM5h3Nuo3PuwizL5v1I7JiMJVimqO8q30vipq2a7ZzbAPwCIWE+KiKXq2p5W7FrTVn1dAnwgIj8qXPugizLetnnZYOIHAbuwu4tqrqPMKGnijlq+gAkEonlRVIAJBIrlw0E5/86ibxdhPnGDQhV5SzLvmfy7zbJnlV4t9AuCfwSwYfgIkI15a5ShXID7QmA/7TKYl+YodAmWhOYjZqu0nVpc3EvMQN823rWWzAzptioLFT1X80BPYotss8myOWPAE8OSwWR53kjy7J7bN9eTFAj3BKpPJ9N63e7jqBoqGp36EasV32YztzLDu/9CefcbSJyCaE6PSci36O9In8ZcKv9/7nA3wBfI5yTbdcBG+vZKD3WiLVxRNhkyp3mz6ucc2NDaLW5iHC8jpgvwU8Qrh+1WzyyLGtu80QsIea9P+ycu44Q0JzFCjEYXQ6Y4ugQwfhvHufcJPAAoXXnK865N5iiY5L4uXyUitauPnhWl99XJbl20FrFXmWTW+ZHs6rq6sh1/Huln69lQbV1nYi8kfbE+SwhKb7sKt/e+0aWZX9s99IfFpEveO87Xa/nCGqwKm+gbkxQT6WYSCSGTEoAJBIrEAv8LgbOqbmp22lfKHWqOjerOi0JAO/9dJZl15hU+6CqzrvdW3WvrACYAw7aCKS+MFnz3xL6UcdsW99lCAFEDbbToSqlqser+vNFZAPxhfK0iFSqMexz3Qm8X1UnCf357yUEU0Mhz/Mp59zvAp8m9PXH5K7r6VFNZhXpMuUgt2XBrKojIvJfetn+Cudh4G0Eo7rDwN2RIPYnC/+/ipB8+Rqhv58OCah5RARVXd/tuRb8F30CRhiOavD5pe1sUNUxap6/WZatEpH/RRjxt8s5d3PMs8B7v8s5dzUhqbSohpZnCNsJ13cIAfY6QvvPOuLB7zAUADEvmjKxRFVb25kde8D8NbWN8shVVZ0snD/nEwLj8rX6JKGtZ9klAGB+tObv9vj0BvWSNquJj5RNJBJLREoAJBIrkwlCFWKgnjyYd/7/ZLliLCKHrHJYlbGPVqvzPN9DvOo7QqgGFYOJY4RqUt/ked5wzt1JMCfbRkhg3LNU/f+2aDy70xg3C3yjEkuToG6IBGQzdPBjIHyeNwLn2GvXAr/snLt3mIZ5VvHtFChtpscJFKr6XatIFxfh3yk9Z0vxszhDWgCwYP+T9q+K8jnZz1hOYD6h0stEgH2E428DIQA4MqTjqqzeWW3KolpYJfd6wrF4AfAPVIz4894fIUmah8U+S3COE65xRyEYxopIW9uXqh6pSAT2Q7cWgEaFV8nTtCYGGqXgfiKiAJiloBCAeYPUJmsJLWmVI15PA+YYfKpCk07jcROJxCkmeQAkEiuTi6hX/Z8TkY9WLOiPikhU5quqIyxUe+pwhCApHAhbwF8L/BHBcK48cvBUMkbo4e8UBO81c8MWTLK8uSLZMk3nStkocF7xAVVdy6lfaI314Abe5OuR5w7aKnAmUq5of7PTk+08HigxZuqTZuJnjlKiZhCyLIs5o2+IPDYIF9B6Dj53CNtMdMF7v8+M9N4HvLfZImTBf1v1W0QO1PErcc6N0UMCIM/ztuutjTDdV/j5KK3Kk5Ol4B6CoW3LdVhVy9Xsukq8ZY33fs4+uzo+M8lwM5FYRiQFQCKxwnDObSa4cdc5fx9T1Sqp+H5TALT9wvwGuvVflmkQFlHFfsinKCQAnHM7CO0IWwkS9vdakN+J+4GvA40aI+eGwWpVvaiLpPqB2INW+cyIJ2NnVLVTAuAcSkkH24dTpoQwQ8Yf7bWCa20QX1HVl9lr9gBPDPLeZuh1GUFq/LD3ftcg21lhPAD8OuF7f4ruyZP9DDiNwXs/m2XZzSKyiVAFHeh7KiIia2hvd1nNcNYiz45stxYuyHs+TFAafQj4YC/TF85A7rN/wLwx6HOIX9e+XeeNbBTtWJfrbVRdluf5rHPuJuATwHoReYKCdN96478qIpcVXvYI1aNYm5zX5feVOOe2Eu595wCekEh5eIkn2rQhIkcJLQ0Dmfmq6g8Md48SiUQdUgIgkVhBWO//FYTe30GZA75sY4Da8N7POucOUi27Xu+cm4hVtCu2R5Zl+814bLs9/MVS0P7zmOM48BrCAq1jAsBeP7RFknNuFUHdcKhPo7M1dHe9jwanqjoqIttjvwNmOowNRFU3RxbBzb7TNqxH+mLrX73Pe3+gyz53xZQLG+hRTea9xzn3XuAp2//bq/a3ifW2t1Tl7Lu6RlV/w/rUn3TOXeW9X0olyKlgF2Ec4uUEufWBTk9W1ZMVo9p6atkAHlXVK0VkxC9xlq0HysqXgdujAGzCwvtYGJd4NSHpeCYkmvoicmiMUWHcqaoDK79g3jOl2/Wm0zXlQcLUEkdIILckWUXkHoIXxw7C9fRvKCQATIHQ9v4Rg8w52n0tpmmvor+T4CMAIZFwI8F0dbklmk6w4O3QNyIyOcydSSQS9UgJgERiBWGO8W+jRnVLVZ8GPpnneafgeT/BYC7GhP2bTwA459YSXLUbqurLbvcishu4DXgT8FXg3tI2i+81pqrbOIUO3c65Var6IRF5LeCdc9d47zuNRSpyjoh0Mjh6iorRiiIyar2ysV9P02EhKyI/Hnl4Xyx5YYmjXwJuFpHVqvp259xzh1DNjEm6u7FPRG4gLKLnulW67LMpBw3rgJ0Fk7qzgEvp0grinJsgeBZMAweHPTrxFDAFvIGQcNpPZ48IRORS4BvOuT2Ev7lBuHbEkk6rKQU2ZtLZ63kwKJvoPSHR73brsK7kR7FWVbdwmicAnHPnEBIfo6r6ARF5rHmOWuJtkvB9HQKOx/JC1kcfS1I37F5Qhy10v+ZUGtZ572ecc/eq6r0iElOPHQWuBF4H/BtwX+k5G2k3tBslfC7F689+gtJuUkRGbKzq3xWTmabmK7dxXUA4F5dVAsDMd+tMAEkeAInEMiIlABKJlcXl1Kz+W+9/N1lwZb+vqq4zE7FDAFmWrSZUMd6lqnPmRP/HxdeYtPJjInI3wU1+PuizSluLseAQTKKa214NXKyq54jIvWFXogHnuMk+x4ELgavoPfDp9n0cobp3cp1VtGLMdvmeYlWwKqOmceBnsKqoGaZNAtHJBH3QoM++UFtMV75GRMp/cwP4z9JjM7QmR1bRxRDPWgauBy5R1SkRuZUhTkw4Fdhnd5z2nuQqSXSztWYPIVkwSwjeYkaem1iaNcEqlqcf0TGTPQPzIxU7qlVOE24i3Gca1vJ1NXCsoD670QL8ewj+K23nsoiMW7K6/KtDDNiSUuCH6Z4w6vg9dUo62jn2FOFaESN2rDa9ceYTAN77KefcJ0Tk5YT7yyHgkVIyYT2llhhLFmymImm8VIjIcep9d8PwDkokEkNiOd50E4lEBOfcRuCampt5gjA2rCOmEohiwf/a0s87CW7eE8DVzrm2QCLPc7z3JyKLrylapZKH6SJt7oUsyyC0E9wuItcDdxEWXDFGKUhWbQHWKz/W5fdPUT3irEr+j6oe6GMfmlS9Zi01+lQ7MEV8oVpnZNSj5QdUdV/poeaM7SIbLOFTxbWq+hbCvPJzVfUGSwqseExeW3U/X08YGfpy4NX236VK/sc8AJYrU4Se7Ob16qD9fNpiFf5mQnMEOJeFa+YY4f5zlh1vv0aFzN+eE1NF1fKRsPvKRrqvXRd7wkN5lOAI8XvLo8ArgHcTVAXl++pGVW2rjHdRlC0Vc9QwAbRRtYlEYpmQFACJxArAqi+vFJFtNTYzQwiCD9o2m27K04QRX8XnPm3Pjy1E1pQWLScIQe4FhIXRuP3rqVrmvW84554iGG01CNL/gUYEFrFKyovMeAzb/jYii0NVnQUOND9f8yvoinNutKIXv0inRVNlAiBSCe+FaH+tyVDLgVdHiakdc9sIAcET3vu2z8S+u5aEjqqeqKng+CrwDhZ6uGdEpCy7nqG1Ct4AplS102d9adGs0MY2nkcPCbEVwEq5l48Rr96upcZUkMXAju0vEwLdCeCr3vvyFIbTjU20XvM3sjB6coTWgH+M0IoTu1ZXXdf29zExJMYEvfWg/3udN+nCuojiZsTGubZgLUYP2r8Yay1pvhKYokZbgoiMO+fGe1AfJhKJU8BKWTQkEmc6G1X1jSJSx9l6N3An0MiybBPBbOgSQvB0vXPuzmZ1XkSmCQu7rZHtjInIFucc3nu89yezLPuQiJxLWDB+ji69yRFuJfyN08AHhiW1FZF/IATgo4RK9YGK500TFmlbCX/3n/X4FusrRvgV+WeqXaR/pMPrun2G3y39PEdFD3ykovQU3ZMsm4EvWOVmj/kixCqg5bnaD9GhAmdVRoCZCl85r6rvEZFrCb2wd5e3Z0aV32Phu50Gvp3neace1bIEdYyVU40+3alUYmRZhgVJYwQJctVxU6YfFU8VuwmV2w0i8pUhbG8lM0doJWkG9yeoTjg+J5IUbRB64OsYt66hWsVVpPLaaaNXtxISm0eBXRXjcKsYL089sb+1230gxijtaoYGhVGFywW7z093SXZ3YzP1284SicQQSAmARGJlcIUF2IMyA3zAe3/cOTciIm9V1V+0Hk8IPfyPsDD3e4oQJMYSAAA/YrLHBkCe53uccz9rleZdA4wwehx4iYjMDKtCYL4Dd4rIDxNM4u6iQppuxlAftx+/Te9GX11HmKnqXAfDxarPF+B7Xd77QRYCYAiL86oKzeHCcxvA7T0Y4F0K7LAF3wXAG4lIoFX1W5ZAWU2oyn/Ue982vtAUBRcBP29eER8hHGMt2H59zDn3NVUdEZFjFcfTQcJxPU6o/neTF3vC2MDmfo9w+rfBzajqHoKKYpyQ8FhPXNlTC5Nn7yAc07uBp/u4DkS/hzCFj7MJ16fNhPPyZnrrRa5dWbVj8f6621lBzNA6WaXoWj8LfAa4UFXXiMgniVxvnHPjLEx0KXKEMGFl4J1T1YmIkilGZXJTRDar6u12P51W1XcDHxt4pwKjqtopmVvFMfMjKSrqjrLMDACbiEi/if0ym0gJgERiWZASAInEMsc5t15V31Yn866qj4pI01V/DLi8EPxDWPgVqyBNBUDV9raU98ck4m0ycav4riGY2kXn2lugMLDpkbn4TxIklXu99ycA8jzf75x7JyEYONYl6N0NvMf2s6deR1VdO6gqwyYndHJG7rYPBwizt68ATqrqR8vj8gr7ecAMGC8GHlLVO3rYxZ8qbcPFnmTmiu8hmHN9E3i4YnvbCEqP8+zY2ZZl2ZvyPI+qBbz33doIngKOmyGZF5FuVbM/JSheRm2/ezYwdM6Nq+pOaxHZAzxaZ4KCJUPGCYHDlLntLwafFZFbWDD/GyMkw26nh4ql7edmQoV+d5e/eSfwEYJE+wjBPO6xHvezKhEzClwH/Jz9/0XA3xOUTMX9bF5jEvU4AjxJMAGEkDg8CfMjPB8ErrIg/FHi588m4sdWm3llvxSSWJ2YoVpxBeH6cw7WriYiL6G/BMAwTSsPm7le8djd1aWVaSmp4+0CA44QTCQSwyclABKJZUyWZSPAa2v2/p8UkU8VAqoR2scIfqrY3+q9n8my7Ds29qetZ9dGPM0rAKown4F3ECp4B5xzV3vvh1oByLJslar+mo2WWwV8xTn3hqas03s/RQ8tCZaE6CuoMylop8XgTIde/rV0GOfYw7zsWVW9TkT2AP8kIndXVVzzPJ9yzl1NqP4e6SKVb9LSx1sYudeCfb5/1GlDZsh4PmH29vz2RWQzAxp2ee93OefeKSLPJxy/3RbNXwF+mmCCN0KotD3Z49u9S0TeRzi+5gjtM789yH7bOb0TuJYQWH8E+PQg2+qEqs4Q2iIOFB93zh0iJPcq/ScKbCd4MkwCv+ecu7GDQufdLCha1hAUI70mAKpG9o0RlCijhZ9fQikBoKrrRaSXvyfRAe/9nHPuNoLiZw2hpeh44fczVCf4mmwlrr44SH1vlzbX/Ajd3OpfQGHtq6pt1x8zE20mCXaVEl8biChoTAXVLwcIn8kW+3kOeKDmuL3F5N9qvHYEeNawdiSRSNQjJQASiWWMiKwnjG+rI9ndQ6vR2ZyqPiEiWwgB/L2EPuvye+8h9HnGei43Eq4f3YKuc4C3EhZNGwhBz1ubv7R+TEcYu/cfwGe9931VGURkHSHYaFadLlXVc+g9+FhMyuPqinRMAHRbBJqUdg+hQtoVW7z3ZG5oHKA1YK/DKPBchjzv3Xt/D3BPj08/QkhE7SUEKV8g0oJQxjk3oqq/XPBRGAVe55z7fUt+9IVVT28gVLMRkc3Oua/3etxbVX6McO7OVkmqRWSO6ukTvXIJFtSr6mUi8ikiEt4syzbTLvvupwe/Sq6/mvaAr+dxYk2fktjjtp3XAj9IUIc8VpVAO8N4jKDU+WmC5L/nqr0l+rYRVwAcoOYIwB4MVyEkcXs97udE5BvFB+xveBlws5n93eOcu65Ta5q1NHVr2Yq97pgpdCYJx/lDwH3L+DisqwCYrDonE4nEqSUlABKJZYyqbhORC2psYhZ4f3HxYgZq71HVv7I51w9VSHufJlTOYwmAEUJvbrde+XNZqG5A+8xjB3yx8JyXOude1I+8WlVHSzL8MUsKLDomPx80qJ2gQwKA+vOy67KHUC1vUjkashvWblIeQxgb5bdo2KL6INXzvatYEzF6HCfIWQfpiR2jNYhdR1BHdE1kWJ/9FcCV1jv8IRa3p/b5zf+xxEW0bUBEzor8rm6wEG016kMePaKq6wlKjzJrgPer6mtsWsgvEFpeuiaETnfs2vu79q8v7Fr4TNoTfXNAXjewFZFe+uxPmJlsFd9R1Vm7Jn1NVR8p/lJERlX1ahFpHnvvUNW/B/7EnrKakurL2on6Sa4CYN4w9zvnnkO4Jjy1zIPjupM61hOuE0t9b0skznhSAiCRWMaIyPl0DhI7oqqPi0jbXHWT+3+yy8sPUz0JABZMuerws7QmCLbYvz29biBSEZqjhp9AP5h500DqDDO06vTa2qMQa/IN4F2Ev28K+HLN7ZUX/5VTGaxC21xkN5ZyUWzGmU8S/BOaDBzIqGrsmO2VtcAtBGl+w/69bdCNdcI5Vw7AuyWsWlDVb9fdB1NAlR/rOdCyRGAsAbAeuLDpg2IJnq2kBEAldjxM2j3pEPCEqs7meV582gRBAdCCqjYYTqKqk2lqk+Md2q4A7hGRHzX/lltFpOVeYcaj5xcfE5EfK/z4g7Rf8xtUJLyK1zJVbZQ+L6D3NrWlxka81tnEhP1LCYBEYok53R2QE4mVzk/WeO2UiHxk0NnV1lP9lx2e8uOdXl8K4pqMmS9Ak9eWf08fEl9jmkL1RVUPq2rdxMSwqJRhW9DRKQGw1EZQjxFkwO8FXkwwHIzinFvlnNvmnKvq5Z4jTHoo8ucxWa1VuS9X1S8Dn6JdObAUvF1Vv0IIfA4Bd3vvB6qGWa/woIHm2VjvvgWvL+vw3BH6TPJbxbz5/+tK7uRjHbZ3kpJ7vIjEWnCmiS/+n12x3VhQNAzVyEZaWxRGqfYhSARWicjthGkqDwBvKRnJAkyoapsXg47IHeMAACAASURBVIjMisjuIezDZA/POWn+F1G890e99+/O8/xN3vu2irv525TVLGuhpf2mTCcFwHrgtwif2WtL978VhYjUVQCso7cxjolEYpFJCoBEYnnTS8UjiqruFZH5EVa28LgM2K6qD4rI7h6M0zr10XfbtzHgGaXHVhMWV8ezLFtLD3PYLSC8VFW3i8j9qrq3WEUxKfRjqnoBcEJEbvbe922i5JzbBrydEKx+1Hs/jGrgNNUeABNUJwCWvEJix8bjtAfubZgJ4+uAE1mW3Zzn+YOlpzRU9dsFU8ljwOcrtrVBRG5rGl+q6mrg5+v8LXXx3u81E8XthMC6Z4VKGVWdNn+Nywky9TkR6fVYKy+e13cIKFYBz3LOjZXOh/VUu3HPb9/k3PMBnqp2qqx6Qq94M2Gwh3jv+En6OLZVdSZScaxjRNbc7tbSdqsCu4RhrVbNZNxqwjjPj9HquL9GRGIJ3IOD+GVE6CVJc3xAQ74mZ0UeW1X4b+zcmaO65eXVBJ+WVSIyQRi3u9TqrkFpTusZtMVugjStI5FYFqQEQCKxTHHOrWHwWdazInJrcxyejZx7v6r+goiMiMh7CaPburUB7CUsVmILr03OufVdFAZlyfBRFgKDzXS5Bpns9DUi8mGrmL9dRDIKlUEbfXeTiNxFWJz0rXiw2dW3qurLrZ9zC6E9oRsdjfwIC6ZBKvmHB3zdKcc5dzGhr34CQEROOue8935eWmsjxB4CPkswFvwQFf2kInI5rTLiSxdr3/vBRljWNpa0JMj7gX8Fnikif0mP8mhLdhUfmiMEYLGE14iqvktELnfONSuiY4Qqai/XlcO0Jq8OU9Fa470/6Zz7MMHccDXwsKoOpDwqEQvkhtHe86ND2MYZhR13RZXHhTYFZf7YU9VzYp4oqvpw3fd3zm2nS5LGWg1O1Byr+ZzIY0dt+yMVbVvHOvjWXMVCAuEswj1jRSYArH3pEIMnANbQQ9I/kUgsPikBkEgsX9Yx+Dn6tKo+BvOV/18CXmMLNgg34Z+mewLgJKHPP5YAWGP72NNCv7l4aEouRWQT3f++MeAVLAQsk6q6mUIF1rY3Q42qLLBaVS+2RW7MsK6KcQaoHJqq4X90eo6q9rvZpWI7rUqGTUSSIt77w865dxKqzAc7GIK1LMBLBo8rHjtejwN/2O9rbfFd5JD3nizLDlniqvz8UULbwED76Zzbg50LEuaVd3JC/6SZim4E7s7zvO4Egma//3Fag4a2BICITNF59nv5+eUq9ZyqVil1EoGGqu43w0eItJCKyPNiLxSRvx3C+2+MvWfpfeYIibU6/Hvkse/a9sfMu6X8+6j83xLvRY+bcUICbhjtEKccu8YcZvDpMKuAjc65kWU86SCROCNICYBEYvlSZ/TfgyLSXNBuIhiFFQOpBoX561ZdeQNhsfI54H6TgJ8EvqmqVxSSB0022vN7ql7a4uEfCw9tof0aVDbwm6BUATYZ5bDZWtrueufcKhudtxiM0EEKaWZLK2WB9CO0fo9rqEiKWM9/Nwl4+Zjo2U3eOTeuqr8kIi8C/oqgODiyzJ21++EQoSWjaVJ2EIIKpqa5YBRV/ZyIXEa4Fv0VHZJ9eZ6fcM7dCfMTF2IcJxLAq+qGiudPA58G3sHC2NGYcuSEtVaUH6+qBLdcQ2yywIqsyvaLc2498G7A2fd7R/H7suTkZar6IhH5R+DzpiSbM0PZZhvMIQqKgCzLRokHhieo7x4PvXnDzDGAAqyIqh4oHkfWovOw/f+qki9Gk6oWni02Kaa4vTaTxJWCXWN6HgtZwY+p6gg1jFQTiUR9UgIgkVi+bGSwvtQ54DuFvl9Hu3nSAcL4vaZC4MOYy7mqXiQiL8CqtM65XYXK3jyqukbCDPN+svnFheAzaL8GzarqfIBg/d/lz6DuAiRGeWb5iD028Og7o+nU3hf2eS/7FgDn3CpCRX+YhrL/UPq55+jdWjjeTziuLgHGVPW3h7hvS80UwRjxLEIQ29WfoU9azM8s4HsdoQL/aLfzvJffF9oRiu8TlRR77+eccx8hJJXOI8xJb0s4mlrhAK3KnRlVrQrqy0mlWToEqc659aq6Q0QOE0a1rdjgxZRO7yD0pJ8L3EvrNXWTqt5qlf5ZC9b+iPAZ3U5IyG4mjK2cv0aZoqstSFfVw2Wn/QF5Ft2vM80e9YERkbKB7GPAvsLPsX34l4rNnV1uiRCRFdt+YknpAzU3c1bEPDKRSJxiUgIgkVi+rGGwwOokhUWQqm4uVSBmJcwPby50LgQuaP5ewrzv4rXBW1WkZXFnN/Fn23Nj8tsGofrTsL+jgS2yrcoUCxxnbZHdfI8jhAXYTnuo6UnQM+bcfCGwQVUfyfP8SPk5Nt6q/HDH5IsFv8/s8vYnqVmRGibOudWEz6Fh7Ri1kgyqOm7HyzC5n9DOsZkQmHyilxdlWTYmIm9g4dgdU9WXishpkwCwgPizhGNqIyF4a57TVS+boTWZNEqFukhEWhJhlkR8uN5et/GPLFwTmnSS3+8DriUomE6qapXU//8BXsnC978rz/Oqvuzvln6ejrRXAOCc20hIkO4knM9XAW2jVVcK1lLT/P7XsnCeNTlfRJpO/mMicnWWZR+zY+9x4CUEVdluWo+r7bS75yMi++hDxRPDruGTdL8fzlJfyXEIuINg0nnMEorTMO/f0WJmaAqBJyv2+cdpv4+s5FaThqr+S02l0VbSBLJEYslJCYBEYvkyyWAKgGlaqyBPEhZqowA2GeBPmsGfVfKLN+SHKCwIvfcnsix7kEKSoICjIgFgC8Y/J4z62xoe8ofsPSckMuO7+brCj3OEhf0FhGrUHwzg8LydoHZYLyKfd85dWzYulNY5zz1jztidnjKQAoCwyBxqldFG9L0buMIk47c55+6s0+ZgbRODGkJVsR+4Ethh/9+2uK5gAyWvCgkjvU4r7Pv6SvEx65WPHS+7CYqBYoC3BriReAtKrYW5JcXOIZy3uyuOrUfs98VrW2X13do3emkduZ8QmO8kXAM/1+G5D1NwMxeRpzskw7YCl1rgvAb4GVZwAoBwbTnJQrBerpj/NK3HwWYR2UDwm5gjyN1jkvezaff+aABPN81oazBOb+ZxDWoqxOy+dS3wZUIywBdaiE4Au1X1suY90yZ4xDwA1hM+k/I5VaUWWFQKifCL7KGngftio1irMKXNccL9ftCpGZsI1+oDA74+kUgMgZQASCSWIXaz/iEGu8lOUai42MixOwkS/6eBG4qOxVbVaHKMEDC0VDlE5MvAb0b2p7noqwrKd6nqVdZHfG9he+NEApCyc7hJhu8gLDiOi8h9A8hvL2UhSN1p+/xQ6TmTfW5zsTnKEBMAdjy9GvhV7DsUkesJioo6MvK+xqeZAmEMmK4a1Wjf71569JZoYvLUls9MVY8Nuy9+scmybMT6jGcIn1PX13jvZ52L+nLdC/x+qcd7jFDFvWw4e9yy3V9X1bfbZ34j8LHIU58EniAEI02+M4RdmAKuBl4OHFXVr3V47h7gFhaUBQ90eO4OWgPbc2ru55Kiqo+LyGOEz38fBS8YI9aj3tGIM8uy1cCzVXWsdL7NAn9fY3ebTNDb5IpZhqC4sokfX4k8Puec+wbwGoJy4gTwUVpbBJpsIiSfy8SeeypYT1BTNU0Jp4C9WZbdJSL3qOrRHqcnTNm/OonfHaQEQCKxpKQEQCKxPJmgN9OjNswMqziC7bhz7q2EBUBsXNEThIrOBuCPgXsjQfY+QtWsPJJtgrAg/npsX6xitIuFdoMmq4ks6Kz3vbyN47Zfg/IcG98EQfraUkmyoLRNutoDVSOhhsGwe4zHgZ+gNVifJCxi6yQAJlR1bbcg24LTbcA1wFZV/Rvn3Ac7jM7qG3NxP1ncFxHZs4KmKeCcmyAkal5BWCDfQu+S5ilK0n5V/T95npeTIs3RmW2Y58agbASuLLQKvYJIAsCSFTcSgpHNhGp0OSHXN3bN2g98sIfnzgAfdM49SLgOdcqylHu2NzvnJoY01/6Uk+f5IbsfXMKCOmyeinaobqwBtkReN0vvCp5u2+9FAXBksf0ZvPcPOefeBrxQVf9eRL5UoR7ZRvs9fIZIO4Qlz7YR7ovDUEy0oapbRGRr4aE1wAUicgHwRhG5yzl3d1Ol14GmGqdOAuD5QKcEXSKRWGRSAiCRWJ6sYcAEgIicpNRnaAve6Kgi7/1R59yrCKPw9lWM75ohSPF30l7xfSEVCYAOVEk6F8P4ruhDMKWqLQswC2AHCeTHCEmTxeD7DPezWEX7OLiq+fH9MGPHWy/v/xGC/HRURC4hyNOHtgjM8/ykc+5ThL9zjLBI/eIKUwDsBG4lnBtND43renztYUKSb2BE5IdqvHwbwZxw/mfnHBUKhkcI1fqXWBC1JGPRvPe9vG85OThGCH5WZAIAwHt/APiT2O96PJ/Lr1lLaJUoc5wKI1VTJa0jHDNHCYFv1TVvDR2mphRoMwC09zmLcLwBfBzYW2cyiPf+fkLLSSd+MvLYUcK9tGX/VPUXReTdNmXgaefclZb4HhoicoCQVJyM/PpcwnXzKufcZ4C7CcWCtmSKqk4NcoyU2JFGASYSS0tKACQSy5N1tM4P7odOM9ajeO87yhJNiv8QQSmwo/TrCwYYmbeKeNW9rut+G6r6d4UgcH8k2KjT97xY19CpIS+ONtIu7T1BfUOqk7T33E7bWLV5VHW7iFxceGiMwVQX3fgkoWK+lSDzfnSFjQD8GRYSYyPA5c65W3rs0627KId6x/M5tCYHVxOuY21BmbV/PGj/umLeAmcTvtulHus4Rm/B6EplN4VEjhmGdrxOmGoglrB+sqrVhyCRv11VLyQod36ZEHjG6DUBEPOS2ERIPjZbTs4lqFOGMZmgE+dHHjtEe7vcahG5BWgqqTar6ssI4y+HyRHg3ap6c8HkscgqwmdzLiFZ8gHn3L1lNYIdC3XvG5sJ65ulaodIJM54UgIgkViGqOr6Gu7q0Ur/ENhPML8qJwA2Em7m/fRsRz0AGED6bvOnR0RkLhY0i8i9hIXGJPBAJJgap6RqMJn0MOTpc0Sq7OYc/b0Os9uHXRk5N/LYDKVqVL+o6vGIe/qxssTcRoqVGXqyxyqI9w17u6cKVT2rdDysJSRuusqoVfXQENQOLS0A1roxav8awGyH4PvZpZ9HCftfK9AyefT7gNcTKphX1t1mHazPvZd+9JXK3xJ63IHQllU2TS0jIj8Re1xV/7rqNap6johcYGZ6E8BbnXNfKl/DnXNNlVYv7SmxwHQrrcqUzaq6hUU8hpxza4gn8A/Rnqg7i5Iarjw6cBh47xtZlt0rIkdU9UMi0jTwjeEIky9e5Zy7jlZ1Ru37BkE5t5WUAEgklow0iiORWIbYfOZBE3T/NMx9aWILgA+rasvNX1U3AedkWTaMt/leP0/OsmyNiPymiHwB+DULFlqwCsZLgVep6h9GNrOWUu+0iOC9r3QmN0bpXsU+GVs8W1/2wZiUUlWP027MVZe2L0dVj1FzEZzn+Ungm7QmOQ7TXuUqJwmmWYQEwEqnOALTmKL02TnnRlzg9c65nYXX1m3ngPagZTVwk6p+i+CqH0vkNGmRgKvqWPmxAXGE4H8LcLGqvib6JOdwzm1xzr3aOfdzzrmu7TnOufXOuR3OuUHVVp22vco5t9Yk6CsGVb2P1mPukR5eE5sQMyMilf4iIvI8Wu9x21U1NrVjRER+pNs+2H6UxzuiqlspBNg29Wbo33eJ7cTNUQ/THjzHlBOLMiowz/NZ7/1jIvJi4He6vM8EwVDzr4HrsyzbAPOePHXbE9YDZ6+0cyOROJ1IJ18isTx5QY3XLmZW/WkReaL4gDn6P4/BxwLNo6otfbUW7GwyCXAbNl3gPYSFyvtUNRqgeO+f9t7fawFrT1S9Z2FfR6nXc33AgvAWTHkw7P7if4u8z2Fqzuc2HmEh4J9T1X+gvcq1h9a/6SkWx+9hpfPt0s9HaE/S7CBImm8HbnfONV3pF0P5cwHw6yKyA3glcFWH57YEMlbZrXVNsP7o8wiS4SYvcc7FkqMTwM3Y5wK8v8u2txAc3L9A+Bwv6vT8fsiybDNwm237NRX7u1w5QDCfPEi4l9zV6cnOuXERiU0O2E/nQLFsIreqoo0ASuM9q7BxmOXHnln6ufZxmWXZxc65V1YlmVR1u6qW19cN4N8jLRFldc8s8Fid/euG9/64qt4MXKuqB7o8fS3wmyLycedcM0FzaAjmqs+llHhPJBKnjpV0U0okzgjMlX7QUVMn6XN8Wp/MAX9AkJQXJZmXmCy2VkW5uIBzzm0jyBAvAR7KsuxnIgaFGTZNQFVXi8gknR29+6HZR75Y7CVU2iZLj7eZOA6BcrW9oap/nud57TYH7/1u59wtqnqliOwVkY9FWjFOqOqtNnpwjJA0GEbF+nTjDoKU/hLCMXBL5LPcYp4KEILuppv7f0a29+POuXNUdZrwuU8Aa1X13Ip2gQnn3GbvffM8PJeFRfoI7UaSAFggVG6jGRORzRXPH1PVnSLyBmBWVT+c53mszWFURH6WwlpFRDYRAsIDpeeeR0G6rqqvcc5db4Z35fcfBd4KvIyFQsi7nXN7yuZr1gM//7OIjNKhH91USF8lKBcgKBceZAjj6U4Fdo39I/vXC+cTV0LtLY917cIqIoG+tUn1kgCYo7oFoMg4EfNWq0ZfTDguNqrqn4nI7xUnldhx8+vATba/u51zP1U+ZkTkx2gvsE0TT7geJSREt9vf8CecgmMlz/NZ4LPOufsIibDLqQ7Ix4ArgJ1Zlr0P2F5x/eiHi1R1nOoRwolEYhFJCoBEYvmxw26Mg7CbRQysrP/3SVUtJxm20l82f472CvAJLIFgvccX2T+Ai0Wkl6TIiqkq2xixWIJhiuEvAHfTWpWfJsyIHxa/JyJXAtfEWh689w0R+TTwe8CnVfVzrKDv6lThvT9MULRcReh1j8mvJ0pTK5r/36YaEZErgM+JyBfs3xdF5K4eA6oYVa8bp7SesEpr1XVsG/AhgrT/zSJyiyU+y4zQ7jmymvgEkZbniQhViiB7vSvt80ZVbQvsReRfIq/vdOxuojVRspl6I9OWO82pG0UawD4RGYaSaYTeFADHiPeml1UFs0TOFVXdSFDW/BxhPN6NhKkcRSYI41RX2Wu2EJIG81iSYDPt6+tZ4gmKWavGPwHcSVCOnLLkqPf+GPA24H/Tvbd/XEQ+BFw2hLeOGdMmEolTRFIAJBLLj3MZXKK4h8VfPBwQkY8SFtDNa0i/ycTjhGrIfIVQVZ8qLBhXEdogip/D62iXRn6TsKhaIyKHVPXR2JtZcLGe4CBeNqjbiKkI+sGMmuqOXfsq8Culhw8zfA+AA4T56L+qquMicmdMLguhL5qwqG0AD3czAIN5V/eOrSc2fvF6EcEMG/v9G84I7PPu9JnPlavSRmx+9xihstgrE4Rgq6qdoOfrkqqOisgzKn69ueREfrb9e6L0vOZ5W34sdr4+p/TzSJVxnJ0Dk6WHN4hIrLLf0s5iBp6dWonKidBRVd1OQZmVZdmIiJxPSPLMAbf7FXhCWJvUc2k/Lk4C3xrGJBM7zid7eOoU8QC25fgxZcqPFSfXWPX/3bSqBUYJAWrRVHQtheSO3QPKCYa1qroucn7OqWpbAsAm7NwJfImgzJrN87zDnzl8bBTwjcA/ENQNW6i+pw+tcGjqnug9O5FILC4pAZBILCNMPvpck5kOwj+yyJVVW7DcQTDWexkhUPw6/fWtHwJ2q+rm5kJJRPZiFRJbpJXlxlsi4wYfIoxLuhR4f57nbQss59xa4GZV3SEiDzjnPliaBDDSwY2/E0336jrsYkH+CYCqfmPYC0Dv/Yxz7gPAt2y6xEMd4o2bgDdbkPmHzrkbehxD1xH7m1LVvz7HzSeiF1f0fhkxb4sqopL+GHY+rXLOjUbmu5cruhOEYKucAJiMbHo1cQl+z8ZkFX3gPQU2ZrbYV2U7Yjo3rqrXm4cJhMDzZ/vZZh2yLNskIhcRWkeeqpF7WE/kO1LVkyLSbaNV/f5lxujtWD9GXE7ecqzZcfnvtCbKN1Kq5AOoalmBs5rSfkd64ScqEkmV9xhLlFRW363FZoc95/EOoxUHxns/55z7EnBEVT9cMbll2JznnBsfxv0lkUj0R2oBSCSWFxvpr2I3jxnKPT3k+fFRLAi/GrhSVV8HvKls4NeFo8BNIvKkud7vAb6MLeBEZCQix11FaSFo/ZnvA16oqneU38Q5Nw58AHiLiFwAvJ3QM90LdUcd9cJxwv57VT0IfE1EPrsYb+S9n/Le3+e9v8Ok5m1Y9f9yQu/1GEGiPbkY+5MYGE9o6YCQfGu2kURHTvbJahEp9keXg+p+lSlrK9qZWh6z50xGnhdrKxonLqn/18hjsW1GUdXVFe9X9s+oknI3WU2XtZWIjFsA3qTXYLgWNilhp4g8AHwc+HPqJTE3EJFxi8h+uptSlivzDVWNJQh7cuy36nrLNTvLsrWU7hnmh3GoeJ+06QMbSs87KCLlFq3tpe01RKS8z233KeMkcZVOR5xzFwJ/Rbg/fhW4zTm3KGMoLVH3sLVz3c/iJ2wnaW/xSSQSp4CkAEgklhebGDDgEpFjqtr3AmNQrHfw7gFfC/CEc+5V1tu/H9jTpRJ1nMjC25IR0WBdVSdtpGJzQb4OeJ5z7t5IVbL82sVwVW/B1BRfA/Za1ejpJa6GbDMzxebP61mcSnNiQLz3h202982E8+Z++1XTQyMaTKrqCRFpBvQbiH+vq2gNCMuJon6PzfGSX0FzX6ZLxnoQD5pjioNRYI1zbqSU7Cy3oIwAz6RH7PyLfSbl60TDgsgqeglYZwltOc0q61M9vGYYjKnqKwrV3UlVvZBWmTtZlq21yQ9H6JxU3k6kDUpVn7RRp50oV+Znibe+9DoBYIpSAiw2VcDaN46UHttMSVUiIl+j/bsvJzvmytsC1tiowdhuDhJQX0xQiDTPjysIpn27K19RA7sH73HOvZ1wjXn1YrwPgKpuEJHznXOPn4rCRSKRWCAlABKJ5cUWBu8rP0K7M/ayxhy6D0R+NSsiT9G64Ppmv4sEEVmnqutLi7H1BFlpp8XYrLkkV9JhkdcX9jeVq4xLxTZaq6BVxlpDI8uyURsjto0QCJ0SFcsK5wng561fuJuL9g3AnVapbB7zPwfcSrsMfhWwzjnXDARazgFV7fd7WUOkql7lPxGhqof/f1qbVHH/dhOk+c0ERkNV/72PfY1iyYr57arqjIjUNek8SfAzOcv+/6s1t9crY7RPmHEUEgDWMnUbQQl0jKD0qhpL91ORxxoi8peddsI5t4l25UGVDL7X++ER2hNUMZO5GQrKFmu7+2Faz4Up4Bu2T0V+ILKtskqgqZ7qCfNROI9gQrlPRPaU2tz+L1qTY5tU9VwWKQHQxHu/zzl3LUGV91qGMOa3jH1OLyBMPhj26NtEItGBlABIJJYXL2TA1hxV3Zfn+elyE50hyFMvJQQQRwkOyf2yTkTKcuHNhMVMp8DpQLcN13BSX878cKlie5xFTgCIiAM+R1isP0xwwB+2CeJphSVIeu15v8d731Idd849QfiMYxX2/6GqY4Tg+mmCCmAjzEu7+2E18cChJbBS1dl+HOPtnG5JAJjCYReFXm4R6XcsaWwKwHGCdPss+/nEAAmqsnJpBvgM4fPZTzjuFx3zOmlpvxCRHy09bSPB22UNQTF1CdUJgIsijx2l+yjaSVUdKSZQLbnUdq1R1U09JFobqjoVUR3Eju8pWqX4c6r6/4lIg4V77wFCIrK8L98v7cshwvdXZA3xKRVVXIEdC3a8Xptl2ec7KChGROQngE/28R4D4b0/kmXZe02d8ZZFepuLVHUdKQGQSJxSUgIgkVgmmBPxhYO+XkT+Zoi7s6SYNP5LwDMI8se76DMotM9zG10SKrYQLT8n2iO/HLARiU2p9jQwPYyKeZZlqwiL//nPwnwlBp7TbPs6Tqg6jhECg8OlhfWlWKVOVc83OW5KAPTPFPEWgM20VylPlmX4BdZZZW6WcB7cTPCpGCX0Icc4QVxRUyWrP074jjfAvHy7Hxn8etrXL1Oq+lURuZCFpEP0PDaT0ZhRW6x94iBBcbGdcG4c6GM/m7Qcz957nHOPEaq4c8VZ84uJqUAOEKr+AKhqOVgdozUR8t9i23LObSX+ee2ms0cCwI6I0e2MiLSd9yLy37tsC8Kx+m+Rx58VeewkhVYDu9fssseaPgC7aA/sMVXaHAvH3v2RVrIRekzi23SaN7JwjqxT1atE5B4WkiH/Qfj7iom0nnwRhkGe50edc9fbPr6a4SsB1psfRr/JxUQiUYNkAphILBNUNWqo1AexmeErFu/9Me/9Dd7713nv7435Azjn1jrnzs2ybKMF/GW69gCLyOqI8/mBwfb6lLCRYGz4DUIv6CUWaNfCKoMbSo8d7jLyrBtjwHXAA4T9/SLts+HnF/imPohVFRPdKUr8i8RMtk52+F43YbJ97/2s9/6PgJeq6s8AX4u9wPxAYu89TtxY7wDwZMFB/QjBkb5X2hIAeZ43rG/7HtuXfcDjsRfbcdaWAFDVtmuIeXK8H7gX2KOqX+yyb7HWoTYZu/e+YcacpyT4h6C0ICiriu/5V6WnzdFb0u882pMwDeAJM3aNYtfpZ0VeO0M88dfLPXGu4G/RfJ/VxP10DkSC9keAOwjJgSngrgqn/ScJvjdHCaqIu3rYt05sp2T6KyItn6uqPkmpOh4bJ7iY2GjSdxOk+ovBq5xzqSCZSJxC0gmXSCwTzKxuUI7ZnPUzBufcDuBWVd1mlaP30C5VjbmFH6J1kd4McpuBSoMwD3nZYYvn64BfISRwdwDnAxkdDNosQTBGCMgawMnIIniU9urOUWooAAhVoytY+GwvIFQfi7Ofy/tRNTs+0Z2YEuQ5kcdOUCG5NWOuluOgxoz6KgXAMcIUkE0EhcJnLMgo+Pt8zgAAIABJREFUU1XBn4iodvDeH7C+5T8ATnjvh6Ik8d7vdc79MrCmhzaIA4Tvobh//UjCF408zxvOuXsI18UXEcxHP1162mHgQcJ52wC+U96Oc25EVZ9f/g5sEkye53knf5U1tJraAcEXopwMsSA+lkAqM0s4poqMEz/2ymaRzTGpNxESlBAmbbShqkdF5J3WlnC8bLqbZRlUV+fnKLQ42DV5s6qui3jUzH82IvI4QTl1UeGxb1e8x6LhvT/qnLuBcCz/HMONH84mJHq6tY4kEokhkRIAicTy4afLfZF98IT16Z1JvA+4zD6vLQSzsxcXfj9CXKI6Q2ug9DhBIr3Tfn6KBWf1TizKKKYubCH0OI+UHttCB1Moc/a/kZA4mCZUNP936Wlld+wG8G81Z06P0l7BKycA/gL4dSz5oKr/UeP9zmSOE3dRbztOvffHnXPRBICNARxE5lvlFbGh/IC1rDzunHs+IRitCvSPx66HIrKlah8tkVDXpG/g7XrvvXPuURauJ8sKU2v8jv2L/t45905ConRGVb8Uedp6ETmb9iD+BBXBc4FNhARAmbYWEEv09DKFJDZB4DjtSQGA78Y24L2fIrR6VJLnOfY+0ePAjtUq48qZPM+L19cR4OxIK0rLeeS9n7apH18mJAemu+3nYmHHxtsJCcS3MCQVsakfL3bOPZUMYBOJU0NKACQSy4Asy8aBbTVc5fcSr/6tSEwOOELoj237u5xzE6p6Qenz2l5wL2/SNUi3YOhGglx0nOCO3osr/ymZ3V3ibAaYEmGL9V8lLE7Hgfc55+4oVUinaTWWq5Lk9sNa2gO1/1n62avqQyJyiRm5PVTzPU97TAkyRjjn57z3DTN4i10DJq2SOsPCgn0tEQm8scZMuQ70uVsHici1bVtRzO28cnRpxd/TZA2De3XMEhJe5XaUYXEdoU2n6bi/ovqbvff7LQkwWjFlompc7SG6HzcbiFw7VbVNdSUiE/T2Hc1RUkB57+ecc98GXll6bpsCYClQ1VERifkrHKL9Xv6Eqr5PRN5ISFj30y4zVCwJcIOqnlMasTsw1pLzU4Q2jFPa3pBInKmkBEAisQywilbMsbgXZhhgRN5yxTm3nlDNvxB4xDl3nVVnimyIVIbGCJ/h/IgxVZ2LJFVmKS2wvPcPE0ZB9cMpvX4WTA2rArdO/DytlakJVW3O+QbmzbByQiJgNWFBXXfUVOyYblkwmrT0KuAKk1cvSXVrOWAjydYAx6rOZ0uO/QbhHJkGrnHO3U0wwTtWPt5VdYuIfJRwXjTHr51HhwSWiGwnGKH1wy6CY3x5W2WX+X7Ya+dw7FzbxOCS4RlCdXhREgDe+8eAFzjntgPTZan4SsCUP23qH5Oun01c6v6nkdaiMufT/rk3RCQW1FbJ+MvMEk8k3a2q1xcmm0yzTBIAZsj4r5Ff7VHVls/QvotPcgqc/3vBrtk/D3yCdkXaoFxMSCoN2m6USCT6ICUAEonlwUYiUtkeOcIydq3vB+stfaWIvJnQ+3kW8E3g86WnjtO+6GhWRecRkUO0mqA1gO+VF1grhDFC9XyQxdbZ5QesulbGs5AA8LS7x/dLLAHQ9pj3/gSh+nPGYomvDxGuA192zv1xRTB1FsE5fMz+vR141Ht/0DnX9nxLlL2+n31R1UFGXFZNIYnJvXulQbi29XQc9cEsEQ8EEfmhTi9yzm0gqCeOVXgWtOC972eywUriJyoerxoXWOQF5QdU9VBsAgAhGdZLkmY61qpks+zvB15uDz1BPU+ToWEJ1yOEZFTR52A3cUPNjmRZNioiO4E3EZJbtwzLAyOGXW/eS/BNGMZUgjWE5FBKACQSp4CUAEgklhgLereLyEBGUVZdWnEVpgpWichzWVgQjRBf6G+g+/WrQagQXt58wEycfHHGcpZlYwSp7rk25unhHqpYS8Fq4o7uvdBr28CTwJWEoO1r5oBeiXNugmAoWKU+icm/e6nonYm8BXgNgKpO2kz7mIv9DkL1u8lcIaH1zx0q5j0jIj8+wMt2Exbv5ZEUXVtlrEWBiCP+nIg8QjyBET2OsiwbE5HbgF8gVHvfCjxRag2KmcZBB3WNc+4XCLL+NcC0c+7t3vvPVj3/VOKcezlwvf14PWE83WIpwkaIKD0I33/H6rq1usVUIruJm5j2agJY2WKhqjcQ7itjhPautvcxddUGe78j3a57Q+QJVX1URC6xfT0gIn9p6oC+sDavj6jqVlMBjRCSg4uGqj4pIlcDnzClUd1NvsE598mavjOJRKIH0hjARGLpGRlwwQ2EKreIDN30agkpXpcaFCT9BVbTfv2aU9Xi59AgjJ6br4KYxLxF1i4iF4nI7SLyB8Dtqrpcx9CNMUD/v3NuHb0tovHe471/yHv/sU7VI+fcqHPu54DPAL/lnKsKnGIV1dEsy1LyuZ1nNcfiichGQqU/RoPWFpa5QsAwO4RFOKralnSz7/zlWZbd5Jzbbo7nRY4SEhblwHPSWhuiOOfOI4yz/JBV2IvMERRAsYAomvS0vuQ3EyrHDriyPN5PVaeJJwCi++mcW0vo619HSDxOANdU/ElLwa2EJOY5wHtZPG8DCAmdycjju6iYLNHE5r3H1p17Kl7bqwKg8v6X5/luEXkD8DrgwXJixFpqXka4ln2BcBwu5uc3j/d+n4hcS/jOftuC6ceqhm4459ZWjbxV1a3AZOH8v9AStItGnueo6qPAjTXHxTbZQr1RyIlEokdSAiCRWHpGCePR+kZVG8DfDVKxds6NuMB5tsA9ZTjnVjvnNjvnWhYztjD/C4IZXYNQ2fl6+fXmGjxWemwuz/P5RaQtoh5S1WtVdTdBDXAThYW/LfSuYkGmvEFEftk511PAfIqZoDQzukfGGb7aayshIHo5cIOqXlfxvNj7riGuDDhjcc6NmeN586Ex4FkVgfNTWFLLEgaHWTim9xGfQ19mzmbCRxGR9c65+cq99X2/HPiEiPwWcFd5VCBBWv0Z2gPzKhUPzrlJVb0NeL2qvplQtZ/HzuHHiVd4qwKOF9Oa8DqvPK7OgpW2xKKqVkmZz6ddybA5y7I67Q3DpLgfF7K4CYDLIo9Nq+pf00Feb9f5F1Nad9pM+2+X72GmjJugt2tXxwS49/6Y9/5IhSpiG/BhgjLhHMIx+JYe3rOK47EHRaSqTW8vYSLLjcBDseq3c27MOfdLQC4i/wj8QfkeJSJn0fpZTTBAwrhf8jyfU9U7gQ/S27WnElVdC1wRS3AkEonhkk6yRGLpWUe8otIVc8nupe8yxhXAn6nqA8AHsiyr01PbMxZ036aqdxEChkuaN3yrKHwFeCfw26r6Ru9924JKRMbLVb3YGETv/Vye53eLyCuAVwBfL1VXmsaB86jqOIONQVtsNrJ8rtmbWej7HBWRC/pJmsSq1FZh3tSpWnwas4aS/Nzc86uqpZ8iVPsbQF4IbKYsKVhmjjDb/XeAa1X1GhF5m6reF9sZVV1Fa5vBKEGRsNb2yZWDZe89qroL+DiFir3tT5WaZK0FLliQ/sLIc54CHql4fYxycuks2o0nG6r6r5QCFlNexNhIeyA6ZiMTlxsjTSXJsDHlzk9FfnUU2FNVuTbWmfFoCyJynMgIQIIy7pm97Jeqfr+X51VwNa3JnVHgeYNsyP7+qkA/mhgw1VXDez9X9fnZteAaFkw8f5GFCRNNfqT08yoG9xXqizzP54CP0DretW8sqfiTpARxIrHoJBlmIrH0nMPg5+IcA5jmOOfWWhCw0YKxK0Tky8Tl9kPDgrv3qeqbC33KzbnGJwDyPJ92zt0BjNjCog1VfUakz7myD9R7X/W7GWCfql5sAUhDRDzV1cV+GXHOjQypH3dykBep6kZgvBdpuCVidhCk056wqI99B+O0jlhcQ1hsHuhhl1ZR6t+2NoWPq+r5IvKwc+7qSD/4GYV5grRdF7z3s865DxKUMeOqWpyacKhidN4eVb1WRJ4ufp/OuacJBpEtSTARGSdUlee3rao/UDyGROR8SoFbnudzWZb9vojMqurVIjIuIl+q6qlW1VWlOehnOecmilM/vPczzrkPqeqrC8aVM6raq8HeWsKx2XJtE5G9BNl5MdhY75zbEGl/aTMdVdWRHmfULzo2PnNexWWfaaUxrF2HbwEuVdV7gD/I8zzWEtGCiGxS1di42gP2eXZiu4jE5N2HqEgA0GMFu8JAsCvOufWqeukw2mZ6YGBDPrvXFa+3I7Qm6KDdv2KEU5swPkpQ2G2nxohcVT2fkFw+ndoaE4llx3KpJiUSZyyxqkgf7BvQsOhsWnuM5wjB8GKzGbisFLzP0T6Wr1HV1uCcG4nIj5vb6QsLMm8XkaebDwGfGpaBlqquJgQgw6DfMYVAWDyWJdAd2K6qXwA+papfJDI9oIJVqtrreMJy8gDgQlXdKSIbVPUy2qtbpzWqepL2pNNhKo5p7/2M936X9/7h0pz2IxWvmRWRk5Fz6iCRXno7brtNAvjJ2IN5nk+p6gdF5FWE8ZPXx54HQcGkqsXrzgSRY857v4fQanKY8Dl9UkS6BqwFYsfxk5SCDFMVVXkvLFsK168m3RITFwLvAs4Wkf8lIpdZm0c3topITCn2QKeEnSUWzyVekf5GxbV+hN6vnYOa4J5boeKoYwI7Q/xe+h81tllmlPaEcDlZMsfwEtldsXvmo8BX6mxHRNY0TRETicTikRIAicQSYsHs82tsYpDq/whhQVzM0h/h1MxH3kBhEWjy4G/T32imceISwY4GVB14QlVfDDwbeGkHtUDfWKJjWH4Ck1W/UNVBlBuxAOpSEZmEUO0DLuoxMJjuNSAzeXL53rO2mdSxmd11kmIrjjzPp0sV1AbwffoMRKxyHgs+1hEPCk8QqbTZcfsjhbaOBvDvpadNVpk/5nk+5/3/z97bB9lVXme+v9XV1dWjUrpUuhpFURRFUYiiEIX9mmDiYIIxwRgTYhuPP7AdO/7+xoR4GEJ8PRTj8jAexsPYDiE2IbYxxjbGhBBMsI2JggnBhCjvUWRCZFnTlhWNomg0urq6qq6url73j7V29z77vPucfT66JfB+qrqkc87+Ovvs/e53rfWs54m7YoyPFav5CRwWkeK4s4KKpJOI/JGIPB/4ZeBa+hszOrQzYoyHgS/Sfo7H6ExOJeFV46VS2u8Xj7F4LN1aLnK8qPD/FdjY15WF5s+NQOfYO0dCp6WEceA36bzv56lu7xhX1U09tgsVlo694OJ/v+p95+Vj+l7FOmuzLHtdCOFtIYStvo0yjuFsthKGtVQtt9WUx9vp0usZKtoOlgqeyLmZIdgOjssaodgGDZYWzQ3WoMHJxXqG69P7635XcOrqL5aqwjtjjNNDHEddzLpNGbAgjPRonyKGY6THroGqQL7vygA6y7L1InIONql5/CRaBFb2RYrIIMmPtsDPacG/wKL+wSTwS/5vOajMJ7l5AHgwxljr/DttuixSdgyf4KrqeIkW/qOCv8KqsmPY+XhqwGttN50U3CkSiagY47EQwt9jKujl4GyD62HMxBjnsyzb48c1BQvjyLBFhANug5b36U+q6i+EEMbL3z3GOEONFhNVPZygdP9SxeKfBjJM4HDc10ud82N0BvtznCKe8sDnVPUSEdkKHO4m8OgoP3M2YGNqt+st788u/+Y76J08Xg2cnXh/LyaC1wG/vuqMAwcYjL02BZxRcQ1PV6zzMRHJLSmfwpIa5YTxEWxsLZ7jwwznb38Ce75tAXDXj/J+y9fiOCfHcnUvcKeqvj/RplcXp4nImRRakBo0aDBaNAyABg1OLjYwuODNcbr0vVfBJ7kLAaNXE/5swGPoF/tKdNXd9D8xmlLVVG9ox+TV3QbeEkL4qxDCf8z9xuvCq143Y8Jmn2JAt4ZRwHv5B8EM9SrJK+i8FjeSrojuUdWnC2Jjta9DF5hbUXpvJ16t8h72ZaOunkJ4jMVA5mkGn/xOJ95bTbUy/A7S18eWQs89IvI0hUSZJ51Slc7aiDGeEJFbcwaLqs6KyPcqhAxrQUT+IfH2xgprt0OY4OiHsSr2vaTP+3QiqB5nadX2+8FTInItNpZ+skZCsFw9zl1XumGS9Pi3nd4B+CWkg9FHqUiiiMhYzTHvBINR9qdIt3vMk0gmhxCCql5UeGsrxogo4zCd5/dxBmeogX2/wyz+RrN0jrll1sJJSQDEGGdU9ctdXA96wluQLs6yrIlRGjRYIjQMgAYNTi6GSQAcYDCq3RzwD6p63EW69gEPDngMfSHGeDCE8HFMYGxcVW8pWvfVxHhFZeH7xRdOXb9IVT/mlaTzsCDroT72tVZELsImUisxano/iuQjgfs5D9pKcIgalUq3oSsnVpKOCDHG6RDCLdj5mAW+WvdgvOLWNrFrtVq7Qwh3Af+BxcluB5ySvgFjHDyrkgQxxiNZll0tIr+mqp9rtVqD9jWn1hvDdBU6VLpVdY9XFMu/83rahcV2Y8FxTtHfMwqtjBjjjhDCFcBVIrIfuKvVag2z3Y6EotO811GqVLvq+n7gP/XY5g4ROUqnENspkQBwtsS91Oy/VtVWgSWRU957BdHn09mTfwT4dsq6LkcIYVJVX1ZmZajqjIj8ZRftgKmaFeRDVCQgfNy8GPuO9zuLJMcK0m1V86o6nXj/ghIjYYx0a8mhLMt2isj5mCPDrIh8iyESADHGoyGEm3yM3gY8FGMss9aepMDK8vPbj07GyCAiO7Ckx0DOQv67/5o/j4ZtJ2jQoEECTQKgQYOTBK8ub2LwLP0BVe37AR9jJITwoIjcgVkBfpTEBMp78CYxO6aZbpO8PvEA9lCfEJEnB1h/TFUnEjTf8vGNAS8qTdq2UEgAZFmW95xvwiZoZa/oVSwGq22UX1U9UUM9eoLRVGFWV3znkcHPQ5lyW9U7jqreJSJ76d+JYirRd4uqftwnfuPYNdKGglPAaSIyHUK4Hniyh/XYMwoi8mlVvV3Mp35Q/DD1pqo+x6vgeeC6EQueziE9F1ihqqdhDAFijHNZlt0MvBoTFfzKEMdYxoNYADObsv3sB6p6yNkKC8GZK+R3JADqwgOwu4HfYXE8mOAZalcmIg9iv/1aLIjvmszxZOqvJz7aS+97/wwPWsvHsB/Y2WW9XiKUOY6TZn9NAB8E3oMF9ddjXvU5NpO+7uf92IrbAvipxBj8byuO6fOq+koXtNsJPDBssizG+HgI4a3AugrNlyeAO4A3eRvVQZZZAyBHjHEuhPAF4JUMzjQO2G/UJAAaNFgCNAmABg1OHiaAn2fwB+SBQTP8Psl+t/91wKny7wGuxqpet4cQrixVUAaCT4SSgX8IYSOwxem2T5YUznOsLFpegbUxOJOhiGSFpghPDtyqqi/3Ct8VwJcKixR7fw/gwZCvW4f2voLOoHoQ9KPkX8bxou5CF6QSAJNUPCdardYMg/k+JxkcrVbrAPCBqpVU9T0i8lI/D9uAo6r6bp5F7QJeyR32+zyFXbNt14v3Lj8PC/xrJaVE5LnAXYXXO1j0SO9pw5dl2Zjfq/PA0aogyL93z4l+lmXjInIWlsCILuRXPuYTwP203/urqGkp1wUfx1gU52HndpZnrlXZEexeeycWOPZKxK4nTf9/tJv2hye5zyNdaY90F8ar2/J0mM7kL9i1/lsssjReQnsCoGpc3pNIdq8A1tRNwLZarR1ZlmXYNbdvVJamMcYDVNg7utjmFSGEz4vIekyvZpi2g2HxGJYgOm3A9dcAL/btNGjQYMRoEgANGpw8TFDfZq0N3iO7p9VqtU1UfMK1GZuw7MYEvAbZxaWYfVdOeX21qt7GEonyeIVlM/BJzJppFvh4COETicnYcVU9UrSj8opNx8TIaZD5/1N2WWcCL/WAdA2WEFlIAMQYD4QQHsforw9TIVi1DFhLgopfBzHGw1mWLYfFY22o6mQIgbrXplN5f4X2oPYM7Do/pRMAfm1PAuf5dbtzGDZNYXtvwb7/H2PBdb7ICSwoKge84/RIiCXQ1iPt++gZ+Ptxjqvq5cBbsQrtx7HAfCB48P9GVf2giKwE7vGkZPlczmGCim9isUK/Eljb65orOl4kltsPvB1LEp6PBc3bB/w6SwI//jFgvtv3jDHOhxC+hLUzHe5h4Yeqbq2wy/tyj0NagTEHUsnLr/UQuazLruhoAfDe8dPpnvSpcntIVdcnuyyfRKvVOsJJqMDHGE8V4bwT2Hxh0AQAwEtDCNc9m1heDRqcKmgSAA0anDyMO5257xU9QG4V3/Oq/TXA72P39iPAa+iTQufB1vW0T3gmioJgo4aqTorIlap6cV7pVtUrsQl2uTq131sHzmBxYvkknX3j8yLyHUyAKg/+2yZHqnpWbj/nSPnP/wZGH95/Eh0AJhhivBaR7aS/Wy+MFYT+BkGyAiUiP0Nv1fEipuicgK8ZQmV6ObECE5l7P1YJ/8MQwgeGoARvwoQpLwFQ1ReIyBtYFOQ7ht3zw1a8AbaFECYHZP6sFpEbcTV0bycYOAEgIltU9SoR2exvXYglDdsSEt7itB24D0uSgF1nE3hwnNq+B40B0w2ZCCHch7mjzPt257EWgisH/Q5LCbdkfLWqPhf48xDC/d2usV7uJwWMi8gL6KzI71DVrpGZqm4RkYsTHx0l0eZTws/WODaA/6c8Lvu48BK6j5lV3z31/hRpt56U4GQDTOAzhPA1zGFjoDY4TzxtwYoZDRo0GCEahc0GDU4e1onIoD2kc3SqfZ+OVb3ySc82jAbZhhACIYS1IYTN5c8cz0uo7M8yvI9xJZwm/LwizV1E1vvDvw0ejHyFxerKceAvKCmSO0viUSwYmlPVuyiJ4ZWCf1S1I2CNMc7EGKcHDP6rLAtHClXt2i+rqp+nfWI7n/quifUYJEFVQLIffQBM0imCuFZVB2JFLDPWAudigdQENiEeyPrTGT6XYMEvsBAYF+/l44yub3aSwSt4bRanIrLRk4uDYlVpvJyiQmTMBSKvZ7E/fQcmAlcZEIvIZlX9OHCDiFyPJVk6xp9TGG8BPi4ibxORG1V1IHZZGa7InrLwe8AT0ZUQkVdVbHM7vUXx6rROzZAWDB0nfcxF7CXtYpEas6pauU4pZtUpiF0MaM8LC4mcVAKpQYMGQ6JJADRocPKQsiCqixk66ehvpX1C3GFTFUIYB94H/AD4bgjh1hBCWZAtOMW2iDyQXiqsTASxs132+ZCqvkBV3wy8EPiT8uS+1WqBMQheBFwmIh9V1a5BvIgMJBJWBVWdYjSV2K6QHn7ZIhKBy4B7MBbEJ8pCVxXrDa3yXoHV9Pf86aDTunr9KT8B92ugeG1PqeqggeUE5lu/kPhQ1fXe85vjOKPrTR8mAdBx3fdKVNVA8XpcQfdEyj7Mtz4DXqKqlZodnli5lPaE6RbqC9GdVHgy9zUsJsk2icgF/r2Ggiddzi+9PQ18rZtdYwhhA85SKcLdZ75C7+C5KkFdxCzpRMIZlK6NxFixH2OJFL9DTlsvY4K040PfNrxFuE3t5hDC+mep5d0uCro5/UJVx4GXJOYoDRo0GBLPBPpkgwbPSjg9ctB197sIGwCu7n1pabEZVS0H0FuB97I4UbwE+Dxubec2az9HZ7/51/rtwwshXIKJ+HwlxthLLG7MVeiL2EdFIOPB/lP06Mn35XZRzV4o94/3kwDo6XPsv+8oJnZTDDFe+2+3I4TwBreSOpL4PedYvorWFuz7LFQQXbV7E3AiISx2FPttFny4ReRhhvShXw4kroGxMvOkD0x4wF/c/krM554YIzHG4yGEAy6MWb72jmPU62/TLpz2axgzoS3I8dacYXp42zCEkCXAEVf4z5MdK4ANIYSxVGXfr+9jdFeazzEJPL/YUjIC9styYgPtQnsTGIV+gsQ97UyMdap6sIYN63l0sm+eBnZ7krVyPVXdXD6HLp7a1b3Dn2d1bE9nSD8jUoKF08UXMcZjIYQbsHN0sf/7WdLXywo6LRChop2kDkIIU6p6rYhcAJwQkdtCCHc8m/rdXWviL4HLB1nfr53TsSTkqaJt0KDBswJNAqBBg5MEEfn5IdYt98SdTWc17KBXfoGFKteFtNNaJ2ifaI3TOfE6pKp92fWFELap6secwn95COFFMcZuE/FZrMJbnGQ9TY0ge0h8CfhVbJJ7nD787Kkv8DSKBMBquosA1tqHi31VCX7l4nG1A74QwquB3wb2qOpHXcm/iKRgnKquLQaDPuH/IkaVn82y7GYR+W+5OJlPJD+P0ZwnscD/L1U1mbBwe8cpbOJ+aBR+9UMgr1Lm9+d81XGHEM4A3owFc18F7iqK3HlQmnpu/wKF/nZV/b7Ts8v38v3Au1X1aDF4y7LsThGZUdW3lNpwJoCfDiGMD9ACM40llUY1z9grIg+q6hmFY/wxSomkATFGvYDzVMUqVS2r1K/HvlPbtRZCWA98CjhXRA5kWfYrrVYrKaTpjLEOGr+qflFEKsc/D25flWCSgbGyeiVaV6vqyhoJmDZr1sIxv6Bi2TbEGJ8OIbxVVVeISM5OSN2bqefiQPCxaQMmivlSFu+PoKr3coqLmg6A+/28pq6FOtgAnBtCeOLZlBxp0OBko0kANGhwEuCTlIH7SxN01i10BoEPl2yyJrFKX2Ww6Kr5+2m3EduRsNjrheCTnDGvOG+meyXuCEYVzIPPWeDbw3qC90KM8WAI4Z1YAuUo/fnZ18FIbABrVCPXM/yxn6AP1eosyzZjk9h1mC/8P2dZ9t9brdbCRFtV96eOO9E7fImqnpcLTYrIa4G7aWd4PIm1MLwSC2S3V1UgReR04DoskPiKV9ZGYsXVL1T1oJgXeH6/z4hIR2LLGRC3sFi9vBBLyDxYWGyeBOXZxUQXEgAiMu33cjloORpj7GBNtFqt41mW/X0qaaCqm7zFpF/L0cNYAmgkvegxxtksy24Ska0Y22k/8PVhHBUKmFXV6VOx4u8B+zYskVV1j48l2BWrSczxVHUrcKb/pqtEZBvweMXkJLoIAAAgAElEQVR2N1FKCKrqYeDebsGYqm4QkfMrPvtCq9XqlZBbLSJ1hONO0Nkmtpb6FoK9kqLdcJQBGFMisha4SVUvLSXzVvlnAyUA3EL3ldhvfneMcaj2hFHBnU+208lQrIsxrH3tfzAE46JBgwbteDb2HDVocMpDVdep6qAZcUTk+6W3DtH+cDwMfKa0z5V0CiPNUaiMePD2dRYr7zPAN33SVwseyGSkeyarcBS4EfgG1ld5P0bHXECWZeMhhEmzVx4dYoxHY4zfiDE+UQ4mQgibQgg3hxA+FUJIBTK9JiQTLqI1FESkV/V1FA4NR+gUlqyEiFygqrko2wTw62WnCBE5RFrHYQdetfXq/4uL6/q12sZ48Ar0u4GfB65IecD79tao6k3Aq4ELReRD9BYEWzKIyFHgc1hLyzx2fU8nFj1PVYvHuVJVr/JkYb6tWRKsmERLQZU+wlhVX7jrX3RcZ2L2b4OMVcewMSgPruYYUkek1WodwhgSLwBehmmTDA1VnfW+9AVmlV+7o9JSGAghhLOw8fjLwJ9mWXZ5H33961W1o2otIhul3dIv2WvvloLnqmoxmJ4XkTt7tQ2IyOtJJz4fK7LSumAVNZTjXdOlHDBvIE3XHxblsf4YfTBPXHx3PZbke3ninn2ceq4MqW1PYK18N2COI58KISy59kwd+Jj1lwwXvD+P+raQDRo0qIGGAdCgwUmAq94Pao0zl2gB2OEVv5XYpOSzdFrnbKRT1Ooopcqeqj4qItdik+wDwB01KjZFTNCnyrlXk54MIVyGVXAOFq3H3OLqA5j12xdxzYKlhO/zI6p6uVfXNmRZ9poCXXZOVQ971WapcRhLxlQFYkOzDGKMcyGE71ZUjlP4xVLVcSOdNNkZrHK/UP3xiviXVTWfPK+knuAXMcZj9FYPP0dEziq83kCFWvxywG3pHgTe7raTD1fQ6TuEEUVkI1bNzAODWeD7lKj1qnq0VL3eR7qSuE5VV5FmeuwsjCFFbPB12hAsQtyG0bmfLH8nv55uB/4tpjXyaFXSph84g+GxYbdTRKvVIoTwGHCVql7mldlvUdHCshxwPZbfxnqgx7B7/PXAQ9RjY6yqaBcZo/06qwqsJoHnFq8Hr+b+eY/jXqeqL02wKWaBL1AvaK77fJxJXFNrnHVWY/XayIU1B3LvAFDVVSLyEdpp/zkOqeqHayR6q7BRVZ9XSCpciF03JzWBBQvtW09gjJ1Bx+HcDeD2kR1YgwY/4mgYAA0anBwMWlVDRA6ranlyv09ErlfVXdhD8uayd7eIpISRjlIKBpwFcCfmd/2RGGO/k4gZChVOEZlX1VqVjRjjCbfcazt2Vb0a+H3gXcB1WZZ1BN0hhMkQwtQolK8dG7BWhnx7W4uCaJ6I6WmlJyI/XqziDogZuldQfnLI7ed41CvWOQ4mrrVcT2It7c+QFaXXqOqMqv5lwX1hDvgYBfq+Kz2PrP9aVdfRmRBZO8Lrom/EGOdijN9otVr/OcZYRbdOtUuspDBp9kTZbkoBYKFtZ2F/pL2z15VZGgUcqujrXkPpfGZZFoA/BW5R1S8AL0+dXw/OPgz8JnBNxX5PCfg5e0BErlTVK4A7R9ReMChWYaKtRU2GLdSvhK6hu24IAKpaRX9fjWlyLEBEHsUSeknkbgoisinx8R5VfaRmH/dad8/oChHpSIS4SObQCdES9pV1cPy81QrYsyxbKWYteTmdwf8c8MeeGBz0+FK/c9uYGkLYEEJ4VwjhUk9uLyd2MXwy7WWeFGvQoMEI0DAAGjQ4OVjLgAwAbPLfFpS5yNl/878qPD/x3jESSuq+vYF6pr3y9z9V9YT3ce4VkSoV/lrwvt98IrzZJ5jlxMRLgVep6rdDCA+q6p4+mQtlrKJAJVXznB/kN8sV/Aet7tTBSOiRMcadIYS7sUTLLPAFEUnRttvOjaODAdBqteZDCA+o6htUdauIfElE/qCY4PEKY1vPrl83Aynle8KmGIzOeYX8lO4fzZNkpSRAx7nBJtP7KFQjXfSvvMlddNqwraIi8eiVul10apOMu4bH9vwNEXk3rjrvv98bsPadjoSY91gPRG1ebngAdlK0IhKYp7Navo76Y9AYdu2UE0Ezvt0JgJQeheM02q1qZ4EvpDQkCliN9WuX3STmvQ88lZRqg9vhrU5oGqTQNjZ5AmIl6bltMlnrQeXFwCZ3mXiwrD0TYzwcQrgNCFhieE5EHlPVnslxd1z4IPAO0onOR4EbyknvfuBMtIXfFJsjLJxrD/hvxb7nPPDpEMI1zqhacsQYj4YQvk3BxaVfqOrpngCr4+rRoEGDHmgYAA0aLDO8t3INgycAqpSKu+1zDWl192MxxuOlZcezLJsKIawYwps4isg0Nun65AgqaXOqmv//OOnJ3B7gdBG5AfhzEfmkeyxP+DkfKTygrPM7jBWOfamwfoQV7g9j1OPXAH9S8duNkZ5kp45ht4i8XkR+E2vjqHPOkj3ArgERsizb4n2vKcwUGAdgbhi7T3UFaRE5ICJltsVKzOqu+N5B4FOFyu0BEdmVcDr4p8RupujOtqgK1H8x/48HNGUq72kMmLBpUIkjWBKn+LseJ02hnyfNEEr1wj+FM7RUNbdJTeFFtN/jEbOQ7IZtmKNKG0RkVlU/12q1ej4HvG3hx3st5ygzVsapYEN1GYNfDdwGfExEPgV8sOJ58QBwmaq+GXgr8KFeDDAfo96CJVTL4poA06p6ffkZ3C9cG+MeLMk8DzxYSk5sYTGZMwa8AjiL5cX9DKED4O1QW5fiWd6gwY8iGgZAgwbLj3yCM2jAdoDefdBlbFTV1Ykq4T8UX2RZNgW8Q0RehQUWH8YE2/pCjHFHCOH1WADT9/oJ/K2IvNr/f2+MsYNO6Pt8MVZteRvwHmxyd5eq3ppl2c4hGQFl5IJsvVTO11X04o4Mbpk1RYLN0S+85ePOAVffTKnK54HpU7Qr+heRagGoSjDcALxPRE4A14YQPp3op39KzLViM4Cru/esPJ5seAV+J+2063HgJ7Dgeraw3O1O138h8C1VTWli7KRQ6XWsUdVumhXfTb2pqpsKLyfp/L0maAoKI4Uzqf5UVV8n5qgCxk5IMYnyVq46TKBdmP3pOzBv9ZQjxQqsWpxjBripm5OGtzm9nTTD5LFWq1XXx30CY8jVwf9KvJcca1OtLy5AeiWLiZKV2Hn5JCWhTk+EPkmXFojStvPg/wYSSTdP4n9YREalZ3MNdsxrgE+VrB3L9+dabJx5eET7roOd2DNgUFeQFcDL3CrxZLbmNGjwrECTAGjQYPkxznAqxUerfMS7YGNF729bxU9EzlbV60pCYJcVl/EM/Dg2oZir8ljvYlmVb2eMxYnJbA+f8XswAawTmId1EjHG/SGEa4DDqvp+EVkDvEdELgDuCiF8DGM9dDu0JJySOkiVs6M3fgAcocukxynzKxlBAmAYeJtEv5hMeJhDqcqcZdkq4Lc8mTKFqcDfSed33oldL78DICJf5xQQw6qJPZT6rrHJ+kICABb61e/1vyocw753UfhzXETOyrLsARat48ZUdcKDzN9MbaiofYGd76Mla8pTur3iGYwnROSDGCtnNXAfJqZWxjzpxEDH7+KJhZtU9WuuHZFab7Oqriv8vpFqq0AAVHWLiHRU/91h4TOpdSqQCx4OgnE6hW4r4bTycrJhBcZimB7wGPJn5CVYMrqKcXMf8KWq52dpe3lrwxosYTNTfoa5pe31wHhNxt3P9djfBO4SNCL21LyqPihmOzkoLnCB2iYB0KDBkGgy9g0aLD9W4P2z/cJpg8darVbtBEAIAVU9jfSkarr0+rJS8N/WNuATm3OAL6jqN4GLBqGe+zoXYYrm/we4vtvyMca9McbnxBifH2NMTYCLyx4DrheRqwsCdluB/wh8ExMsGyiQV9Vi4qauTsIoEgDHCqr5KaxieW2S5p0+nDqOfjFbQaVtm5iLyHra7Q63kGgTiDHOqOq1WMLotcB/qzPJPkXwt4n38gRAvzhKWnjrvcAbReT3sPv4r0XkX4F/xHQ0UtjgVeG8EvpUSVPhEM2kfOSIMc7HGG/HbFWzGOMH+qSLJ8fKGOPRVqv1RIzxQEVwN1nowT+BtXFNV+0khDApIm+nU68C75VfqkpzOXkxRnVrXQczQURWuAhpGQO7hmRZNqaqz1PVz1GdjHgSuLYbo6KE9wM/AL4H/DX2DO6AXy9178Mq+8cJ4P8GvqOqn1HVM0fRXhZjzJOxwySp12GWgA0aNBgSDQOgQYPlx8AMABf6+ec+V5sQkZ8iHYSWJ4jlh2v583EsWL/Qq0OTmIhRXz2MXvG9ksUJ48tDCB8fwHEgCa9yfVbM7/pqFid/Z2MMghtDCJ/oR5vARQ2LPaez1Kssr2Xpx9op2oPjpcbxkltAjiR1N4SwGjgT2FEW2MLO4zE6kwc/1eMY1lFxXt3J4q4e65+K2I3dS8VgpTK4DiGchzF0/hX4H8WAwi39UnZxa0Xkc/mLmnZpuaDcHn/9dVX9vcK6e6qOscHwcOG9QQKnQUXedqnq7SJyKSbueF+3hVV1g4hcSOczZhb4iwoh0aFR113GkQrG10qn5ekYvceeSniF+2aqx+NjWFvAdJ3tZVm2AXg3i+PjmcB1wIsHPUZH1fFt9f2tA7aJyBpVfSuJVpEBsFdV90i7TWu/eBl2TTZo0GAINAyABg2WH+M9+nAr4eJmKauublhBWgBwjsUJfe7r3VYVUNVy7/QE5jGc42wGsHBzunFRYTpvKRgZvGL+n1X16lL1fK2qfhT4cghhax+bnCu3XpTE5qowiv7ouR4q9isZnDbbNzxx0nEdppICfo6/7n9/6X23RcyRZlKUq3DlKvgkz75nWMQmt/lvPY+J/rUF1yGEsRDC5ZgV3+8AHwG+FkJYcAZwVsV3GQ09f4L2seEREfmS31dzqvp31BN3bLA0OFxWpO/Hpq6MGOOMiFyrqpmq9mQdiMgbSPd2HwD+aKkYOCLSz/dbmRh7JkgnEQdKpoYQNqjq57EgPYU54BPAPeVzEkJYEUK42G36FuYHInIGJXaXqp4TQii7dXTDYTrH2Coq/gLjyFkgF4vIW/rYVzfsFZG6WhBJqOrZxXGuQYMGg+HZNnlq0OCUh/fbDvQA8wlPv5n4SdLVj/1F+qeqnklnMP/D0utkFaXP44HOntWnGHGfdqvVIsY4JyKfFZG2arBPbF4OfDKEsKnLMc4X1pkpMQDmKqrgZVRWqvvAIboHWFOY1/2Qu+kL36czwEhdC2cBZ2DPmzNUtVz9OUHJ195RTgBs4Fn+zIoxHsaC+Zx5s09Vv55gqkxglf8ik+hsVb0wvwb83u513dTFGAXbQd/2NSJyDdbnfN8zqM3i2YhD3s+/ABHZV6UVE0JYF0L4nRDCe/LWjjJijLRarflWq9V1x87ueV3Fx3ctsdVceYyYo2QNWMDKUgsXWGA9Em95D9pv8IC9Co8At1S0XbwJ+CqW1Lu24Hm/rnyMIjKmqkkKfwWSyaA+WuF+vY99VcK/9zdTx1IX7gbQWAE0aDAkmhaABg2WGS5MN5BlltN69+avfbL/OuBD2GTmbqDs7ztJojeTdp/gCeD5dE409pbWaauMuG9yW0LC+wWnMGG/qh7HvcCDmFr/DPD5QQIIdy1YJSKHqnyUY4wzWZZ9yJMuF5Y+vgD4WpZlV7RarXKf6n6Mppmfu1naqyhzwP+ucZgrVHWowDXGOJtl2UwPuvbPez/rwJOrHCGEVap6gQtkPRFjTDk57HJ/7+J7P5ZY7oRft3lVqe1a9G2kjnlDCGGscF2MZKJ+qkNVd4jIczHWzgF3NChjnM4K3goReQHW+pAnDKaxa7Yc5OX6FQcxSvJB7Pf8oYi8DLsvitdsh7iaC25+AmDE7hoN+oSqHhGRb2G6Kvm87mkSzBpPeN6mquf5vfvzWZZ9wNtm+oKP9a8j3TO/G/hc4v1RojwmzFPd9rDKx57i/TSLjZdDzYWdWfBhqhMhYGy7a1Q15bqwBbMWzO/T38LYUvf5MZbvr/GyeKEnDC4HPqiqK0Tkyhjj3bDAhiuP1WBjTJU7SxGnV30QQljnGkNjYta/+3s8y7+BtbMMqlmzFjg7hPBQD+HgBg0adMGzuprSoMEpik2Drug08GIVehVwI9a3twZ4m6qeX1ptBemHbbFitN63UcQJCi0CjrZKrYg8SqHC6FZQ7wM+A9yUZdmm1PfwBMWHgXdiE59e/tIdCCGsEZHrgS9g3s2VFPhWqzWNnafyhHgMOF1EbkpQKg8A21mcfM1QOPf9KCOXg95BUK7wJbChINw1MEII46r6WyLyeeAW4NYiJbWAJ+g8nx2BgKpGESmK0bXRid0OK8UAGCeduCpuezl1D5YFzlw5FGN8LMY43WUynfqtt9KeXNxPur3iEezee42qvgz4jRjjNa1W6w+AL9PJGhgn0RftomMjD/5DCIQQTg8hvCuEcF6WZT/SxQqv2L8/hHBjSNB8vEr/JcwBA+x++kJZXNNXPQ84x900xoFzvao6CNYDr6EzoT0PPMQQSvo1kUqkV2lRrKRTe2cfferXlOHPvDeq6luonlPPYjaKTwJjIYT1pTF1HQWGDfa8/hXs99lH5/04Vlo+F/q9BjjNnzfvzdkdInLYrVPLqPu8mEg9A7IsWw3cJiLfFJFvAp8n3W64AC8KbK+53yRU9QVUiz02aNCgBpoEQIMGy4w+qXtllOnSZ9AeJI2LyAtL6yT3p6rfL7xcRWewNU1nNeUgXkHxqsLXS/31L1XVD2H0+reJyAe7UEwPxhg/G2O8O1W9DyGs9J7I3wkhnFae96rqJZgn/LnAf6C3OvDDwGdJ90RvAz6VZdkCfdOrCx8D/gh4QlVvTTAaDlBPaGsY28ccvbQftlQoWveLSa9A57/bVuD88kIxxiMich89esy9KnQFFnTe7/8uwJ0aphPb6abonW872QcbQlgbQvhcCOHbIYRXD+j6cCojZ9mUsa50DaQSAPPAt4A7Y4w7Wq3W/lIyaz/ptoG1IYTlSriswRIRNwGfF5Fzl7m95ZSBs3FuUNUbgd/FBEw77vMY4wHMxvHXgRcA9yaSMxPAr9JeOV/HgKr3qnop6XH3IJAaL+tgnvptK21Wdv4s+kFqQVVdparrS9fRAdIJsrUhhJ4Vav8dLlfVD3lCJYU54A7gDk9afx74e+BbIYS8sj5G53x8G/Y77XM9h+J3gU72w0bMGaX4ej0sPMtSiY7U+NmhOeLHlnqGvQ5j1U1i19Z52FjfC3/GcEy18yglQBo0aNAffqSz6g0anCT85BDrlifrKTXd8oM6aUXkgRkAqnrUlZo3FRaZpnPSMIsF0f9BRHYA20v039ML+x/DJhirqWeXtwCnlr4C+DiWnPhN4EW09+Q/h8UxbKKXsKI7A9yqqpeIyKbSx2NYkPvJLMte22q1Dvg6RzDbtCrMUU9kbRQJgO93+1BVT6vLAAghnIZNDnclVPmhfTI6CTyHtKr+DcAGVT3f992h4+BByBNYUNKBVqs1F0L4R2zSXwz4cwG8bqiqNr3R/8DO/dMsVkefDZh32nc5abe+eA3EGI9lWXZIRMrsnh/rwmA5Snpyvhqroi5lT3eO01hscdjouhHbl2G/ywIf354HXKiqx0Tkzi4OKGtF5BIWq91nYsFPByPIkwDdNGLG6aRzr1HVDqaNH+MKzHO+qn/8CtLzyAfi4Obxc1TYFybQ9mxrtVqEEI7Q6aSBB+g/jR1v/n2mSQTGqrpaRFaTZiYVcRbwkR6aPjuBG/1evNydFaZUdRUWyD6Ffd8DtAe1R/Ax0N1/Ut+liLJGygranTv2Yq09RXQkRn1cSSUA1lGyFRWRX0ps4+zyNhPYhRUSBiqG+Pe/mEIbY4MGDfpDwwBo0GCZMagAoGNhcucTtOeWF1DVfyi9lapkHKUQXInIIezhvhDMqupTdFpPzWNU+ucDr6KzReDflILQKpXlXliB+bjntP7zVLVcpfqXghf9bE1Bvl0icisVNFEROVdEbsyyrC5lf4Z6lYxRVCu6iiSKyFSv/Ti1+hysuvpV4FOpamIJY8CmhII2wG5Vfa2IvBv4AMaY6BuquoPS91PVJ2oIiFXZdf1CYTub6DLRzLJszOnm/z5nm9Q87CVFCGE8hLAhhLAm4cM9V0zgFbCCkhtEQkNgTFXXdamoHyZ9f6wi4aW+RNjHIuNlVkQOlvuX3QlhbQjhohDCRVmWDeSscpKwDrgNuE5EPooJP1Zhks4xfNDiTaqtZkJENhSvMa9+fwyrVH/Vqd4UPgdje6XulaOY1epA6NPpZn1ZEV5Vc12LFE6nvXJ+lMS4KiKbgTOq7hEfR08DPkoX9oSzmz6kqrtDCBPOrJryfcwW7s1pbDwuun98X1VnnR23q2ofhWMuf+c2EVtV7a7muLidg3SekyrG0ZizEYpY1euZoqrTmOPJMPj1Gs+uBg0aVKBJADRosPwYpgVguvD/NSSq+yJSFvVJBcZHiu87VfPLqpq/d1RE/qZc+YkxEmM8HmPcEWM8kKCY/r+0B8QHU/sPIawOIbwxy7L3Z1mWmkBNYO0NOcY9wC3iHhHZ4UmAR7Aqc1f49/kTqoWPxlT11SLy4SzL6tDGj1CD3aCqowic6rg/VIo1OSawxM2Z2PXzSjqTBim66DoSNoMxxvlWq3UoxvjpGON/jzHWrdy1odVqReBjngiYxmzmugVFOaoo6Qv3hYiswAUFUwt6Qu6LWGLrJkz3oA1Zlk1mWXZulmWXhxDCUvekuw7DK4G/wPpq26pqfs1XeaCXx5eykCci0i2YP0I6qdWxTghhKsuyN2ZZ9vshhHMrtjcIDmMaIbuAe4BHEgXltcCtwNeAr4vILa5I/0zAVv8bw+7Jl3dZNhdszHEgxjg94H7HSet0/CztSYVXAO/AmBgXAS8trbJWVd+aC3uWjvU+hqjMuhjhP9e0WF1J6Xr3ALYqGbyZQsXan18pgdMp4O1UJ1pWuZVst2t+VkQ+ATzUarXmC4HyQtIaf2b5c+kPgXvcuWE38HBBmPGvuuwnx0FPOORo01YRkfvLVpFUM7a2l94eq3iGHWKA1q1Wq3UU+FuGawM4nR56Aw0aNKhGkwBo0GAZ4ZWVYYLB/1n4//oE7X1OVctU50ihp9InIk/RKdD0MBYc/ifgtZhKf794kkLlDvgOpWqMB2LXqOrNInKjC/C1BZeqOkGnpVy5CrYHeL2IvAYTNKtlIxhjPIhVqKpYAOPAb4nIO2r0js8VWAiVEJGqSnVteNWkF+okAMqT1vJ5ngG+R/v5WcmAzhV94NMichnwYlV9LfBo6fOD1Gi3cDXstmNV1Z+g+nl3Nu3JpnPL/b8i8jYR+bKIfAr4MxEpB0QjhaqeLiIfxGjwFwPXFxMY7prwvYrVN5Ve/8/EMiupmKR7S0jq3pgqruPH8x7gZk/W3JJlWS8djlpw28M/wlp/riRNCQ/YucmDtIuBS1Lbc7bAihDCyizLToV5T/leqhQwxa77h1i0Tq0UTA0hTDlrZHUXhkfHfewtUeO+jUkgY/G3nhSRX86vP9/uBSJyTmLbhzFR1mHbRA6LSB1xvilKCQAPcqv2v5XO3vnvVIzh56TcW/yZ8H6n8ne7lh4Cbs4tPFut1iwW9Obf6wm3/QQgxngUeLeI/Cp23RcT2vcAjxUZb8B3S/vbJyI7C4mGfRTuG1XdLyJXqupjqrob+K/AYxXH/gVKbgkJhgHAPyccXPbWtH58qKxt0CfWqerZP6raIA0aDIuGPtOgwfJiNcPZmRWrwOvFLAWL2J14UEes6v0WbDJ3WFVvbbVabTRLn6g87H+DYrvv65XY5ONLCZbARlV9l4jkiZCXYrTUhaqNV2XLk6u2SrVvdzeDVZvuBl4CVE3iJoDrVPV4COH2Lkrnh6inbzC0eJqInHCthm7Bwi/22EyZWdGBGCMhhIdV9fAo3Avqwq+/qqo22IT4Udr7WKcTy+W96gvopo2gqs8p0cvHVfUM/D7w1odrWKROT2GuE/ctlQ2ViLyddpu/rVigswfs2g8hHMCSNeXxpDwmpM7pGvdEr0qaHaRTIGw17dfxFPD8wn18uoicBzxesc2+4NTn6S6LnEV7MLsCeGEI4a486CrgHOC3gSkR+WII4YHEMsuJ8hhdKXoXYzwcQrgWS9rOYa0DHfDA/TZsTHtMVa+gnsUbtM8Fx+m0e12Dnd/j2Dn/QHkZx8PAw4O3/y/gAPY86DbWgd3nvxRCGM/vxVardSSEUMVEmsQYEMXn6EMi8gjWjz8GCwybu8vBrVPOXw1cRfeE6CFVvTbXkingUSxJ/jysDasNnhBI6Q7sBz7g48JmVd0pIn9SWmYa0yN4M/Yb3hhjXEiiOJvgS/7XC7tU9WoRuQr7De7B7PvaoKpP+zkqnoueTDzHTm+BKNuZ1sVKT5bcTZ8aQw0aNGgSAA0aLDfWMngCYB6fuHjWey2dE6Sn6aTVHQeux2iEa4CnfMIzcrjQ3g0YbflEBVX1Yqdl58hpqcXJ6qAewXVxBLMqPJdqgb41InId8EQI4anUpFZV5xIVkNRySSHGPjGLBWzdJsWnhRBWeTWpCnUq+btE5F7gXdikuKvYoV+PY7CQmOkJryhOAJOqigtPzVStH2OczbLsA14Zfx42Ia3ba/z/VR1/ubfcsXD9qeqqQpCbI6+Gj1wQL4SwHkugFTGJtTUUNTfyNp5yC0eZbbIf++4LSRBVnUp8pyKqerA3Ff5fVi5PKZkvJX4i8d5a7LcpB1E3qeqZIjKmqueIyC469UuWE3uAqKrBr7+ugXqM8Wnggz22eQEW/E+q6nki8toQwofLiQ5VnU8kxPLkAtg4Uzx/cyLyXeCE3+cX+bks7/8EcMsokmKqeqCi4pzCVuw3L16zlYlET+4Vk1RHsYD+RrzVRkQewnQZymNGAD5E9zH4OKYN0NG3H2PcH0J4J3ad9uzrLxsBdwQAACAASURBVKw3DzweQtiFJbGOlJ1zfJkHQgiPqepYTU2cqv3NZVl2DxbMTwL7UgkzEXkCeLpwPcwDf11zH7MhhIcYPAEA9ntN0SQAGjToG00CoEGD5cU6Bk8A7GeRPpir8pYncn9Pib7rgesh0iruI4fT/5IT2hDCpKq+KGGZVA5KU719I6u2egX1AazN4XVdFt2EBQ9vJzGp9ElqT8sqEVkRQphM2R32gRmvmCSt7xxTlNgUg8ATOR/BfpctWEKnmwbBmRj9+lgI4Z6aWgCXYH22F2DX8ePAbSGER2OMyQm8awW8qsd2j2F977lDxoyqPl1yqyji70uvx6RgL9hqtfaHEJ7AeqFz1BEoHBQX0pmUynudtxfeO4AFamURtPLrGeBQUXxURFapajdWSvI69UpwjqPYfX4x9vsdTrQfDQy3Dz0Du6Z3AgdLSbjUpH8d6QTAGXnQKyIbsATSyUwAHAauEJErMBeNT45gmy/Ax1EfX9dic7yF54FXtg/QqR3zA3x89cDs65iLxmrsfrrfx8y1wJWJBMI8VolN9dP3jVartS+EME0PtpLjDCwgX0gAqGqrIrGHiLS58HjgHEMIL8asVOdbrVYHqyyEsAFzpek2/gLcCfxx1XgTY9zDgNeeV/S7tkb0SP7WhjMGpnsdTwjh7VhS5Ays7aEuAwBMv+NdDD4n2oaNi73cYho0aFBCkwBo0GB5MQwD4BCLE/Oc/n6MRSrmMeCppaIle+/jy4HXqOo+EfnYAKJvG6TTgi+FVHDSjR7eN3yiexMW2HVjHJwnIu8OIVyfqLocCyHUoRLnSt4DieSBeVyLSC8hwNVYAqAW9dd/x+nUZzHGAyGEnAJ6qAdl+hasGjML/FwI4doi/bSIEAKqeg5wMy5I5pP1C7Cg/akQwlcw7+zDwHw/lGKflN6ATdRPB+4QkbKeQBE7fT/Fa6A8ofwgFlyd7csP5HYAxnxQ1XERmatgO6QSe/OUEnveDpI6x2tDCBTO2XxiuSkReb0nNorbHccm1Emh0qKWhQeEn1LVS0XkNOCBHue5AwVdg7bf2Mea92AWnCuw5NBltFdkO/ze3b6tqwCZL7dsrS0p+O/+aKGiO4oAJnXdtMHZStO0JwBOYBXe4rl9BLgdeBNGGX8qyzIwq9SU9exhTES2Tt9+XTxFp/hgChuwMW9B7DLhfFFevgP+/Z9OfZZl2Urganpb3O1X1etbrdZyWGWeKojemrABmO4zATGN/W69tGuqMIE9N6q0DBo0aFCBJgHQoMEywSe7P8ngCYCjeAIg79PGqg2vwKo3t5Po0yvsfwKrrG/AAuw9db2a/dgvx4K2lR6wbQghvKHPqvZGOkXKUvjZxHttFb8QwllYoHKEREXWhQVP9/V2VgRbOzGxsd+jejycBH4X+DusylVGHfHBcXooI/eCU+S77ssDoEpbqgTWdZu016k4OfJ9TmAV4Zu6rLdKRK4lbZ81hVVnn4e1rXxWVb8WQnjCxelqwa/r59RcfL+qXiMi78R+o93YvVTc3pPAC+vuvweuF5HfBT7hFO1yJXvWWyKK7x2mVF1ttVoHQggdgaNT+9fhSQwRmcGqvkVWzRimCfKWPo+9LXiKMe7Jsuw5wGpVPdiFZdEBF1q8EqNw/3kI4Y7CPTqlqteKebGDBYIvx3qRc6S+e5XI6nEKrApvATjp8GBpJBVbKkRNSzihql8RkbNZZF0doOQU4dfkVf4HmHMLdk+m6O/fAL7RatVymquLv6m53DjWylVMPnXThelbOV5E3oYlpLrNmQ+q6jsTff/Pavg9W6Vd0AsHsOTeoAkAgN8MIfzXk6zp0aDBMw5NAqBBg+XDJJ2K6/3gsNN5AZs8hhA+BHzFe9FjqurqVNpLMWXhM7DAawrYE0J4bk0q86SqvqzUN5wnExbojCGETdikfgrrB32ytJ0pEtX94vdydD1PIYTTMcGrM1ys7mrgs4XP1wAfVtVLROQEVr25v7wdZwF8WVVfJ+b9XIUJ4NoQws4YY3ly2TMBoKqTHpwMbI/lx/ov3ZZxW66fKYpi1Vh+LUMwExLYSKkiV8IaOvvWU1gJvE9ELgeeDCF8S1XvaLVaI6V7+nm9Hat6TgD7l3gyeS6WaHgX8E06RTd3eqW2+Hy+h3R1MvW7jZXW7WAPDIEOpkyr1coTDLXhFptXqOrvOV09qOoTLH7HsULwD5gzAu0JgGks8Vn8rlMkNC5UdY8Hvbk3+8D34SmM71M4H/5MaEvIOGvjfszlJXdseJJ6jKFLsGRNGccZUe9/Cf20E/xy6fVR7JpMMT36cjPJsuws7PnRbb48jzGNtvfanouK5iybLf0ezxDI7RFPANOquv9kMxVijCdCCN9R1cvrMHcqsF5Vt9CHpkKDBg2aBECDBssGVV1Zk/5ehf1lKq+rBrcFEF6tX4UF+5cBr1TVtYm++y0Yfe7eGvteISIXlt+jUG1zmuT1WO8oqroN+JXC52DBYce4IyLlnsheiZKX4lUDD6x/I8uye1ut1lGnmF8qIm8SkZxtcU0I4fGi7VIBu0Tk41jVuhuF9kzMju2dpaRJzwq5B9rD2D/m2FfDCSBgyaa6dNwNDJ8AKPaiT6jq2XTa+OUoB6i9sAZjFVwkItdlWfa4iHwOc7fYm6ig9w0PXparJ/yjWLvOF+n028bfuxureI+p6r0ickMFgyVVcp2kPck2Q3Uypl+MQswSZ6lcUhiTctZCkoLt+JnS66PYb1YOSrdhyZzi/m7xJNyEiNxHnwmLZwJUdXshcTQjIi3SWg57VfVlwNv89R+0Wq2u91AIYZOqfqDcV++Cgn+MJRFGClU9itHL6/i8nRlCWJGPBX5ce6lIAGRZNlUn+A0hnAZ8UlXXV2kK+P62i8h1qbHIn8drVPWlIvLbwJmqOuHbW25LynlYOD+EEI5hgfPTmEXhXixRcGAJNU7KeAQbDwdKADjr7RyaBECDBn2hSQA0aLB8WEF6QlIHc8D/6aWw7jT/V2JCaefiFbuKycth6gv25KyBNhR9ksUs484vvN5YVKT3Y+hl69QTXj38OdrHr00iMoUFBRMi8gLaWy3GVTVZafF2irtV9c01JpsvBf6UgqCiqv6g2+TQkWsADIvDTunuhk30V1UaRVDXZuckZs/UL45ik8/TSD+bxrD2kwux62wPsCOE8NfAN1xc65RHjPFBTHyy6vN51174MwARebQicQXpwP4E1Sr+w2Lo+xfAWxyKrgQziT74WQrXcULH4CCWZNpCj0BKVe8Ukcew+3B6FEmjUSKEMIV9j03YWDuG/Y6Pququmq0VEQvEz8USHE+kOrwKorD/ueaxjavqq0UkRdPeB3x5KRgznszYjSU0u8KT6wvq/iIyp6q7ReTcxOKT2HVcJ8C9Fji7x/i+X0Q+0uWaCsAHReRSFkUaa+x6SZALYeav12Bj6fkYI+moqu4Xkd0hhBaWjHx8iRlRe7AEdB1WWAecOfBcbyE6pe7rBg1OZTQJgAYNlgkispY0hbIOKmm2XmFYjwWn78YCqG46A0exAOQjMcZalbCCXVXxvRNSsBpS1S2usJ1jHJtgDNLjWg5y53ENAK8algPcdSxWEFZQSETk63sPfRUOisjNGAugW6V+BfBhbwV42o+nzqRjnMG1H4o4TG/Lo9MpqWL3QLfWh7r4DkYRznHmAK4Hd2IT7gBcparnd2E6jGP30lYs4XUiy7K9LkL3N8BuVT3m1+exZ1p/qAf8Kb2JMh7DgrCinkKkvS1ljupgZwZjipSvqSqx0rEQwpZEG0xf8GD/MSxpNC8id1Cg5Tt9fR/t/dr/WtrMceA2Vb2g0L5ziEQlsNVqzXIK0P59rJ7CxsWNzpR5iY+dK7FE5bgsWqrNiMgdIYTruiSBAGvFCCG8HnOR2IXpm4wCm4B3kkgqisht3rqxFJjFxpVX0lvccKW3iOT2fvMi8o+U7C/rIoQwoapvAX6rx/rHMbvA7YltjGOigZ/HzuFyV/sHwSofc7dh84mrVXV7COGqpUqwuuPMn5EWl6yLs7Exa3okB9WgwY8AmgRAgwbLhNyHesDVZ1W1o9c8hDCJZe4vU9Vze2x/TlUfAT4D3O29u7UgIj+XeG9GVU8UXm+ic5JTnjTWDcS+hrUnAKCqO5zSmfcNlifDCwFLRavFMboExIXe2NfTmTwoYzPw3oLSfR169QoGrHCUcJDelasxLAmQOq55LEgqtlj89AiOazvtSvpTWCD/eNUKCRx22ukjIYQdInKxql4hIs+jO6NhAmN9nIm1abwfs707gCXN9ocQ/llV9wMHxFwPDo7KLuskYwaz4Poodn3tVtVbihVj1zgoB885rsISCOV740pM9DOFNqqu63Fcil1X99URayw4NfwTFkTdW2I3zarqXjF3gRz7StsAeDzLsquB17r3+Z+yBHT0YeHaKNuweyJT1a0iclqhRWkBpUTrBEbV/5cQwn/plchy+8w/GdmBG95doY+yF/hsP8KP/cDH5L1YcqpX+9SkiPxcCGEsxjjv6+5U1SPeIlbELF3ao0IIAGe5rkwvJtWDwB0xzczLnU5GkWA9GRjHGFeXYhoR1yzhvrZ70m/QmGQr7kIwukNq0ODZjSYB0KDBMkFEBlYRV9VZCiq7Thm9AJvAn41NgKpWP4FNim8RkQeximi/k7aU9/F8SWTq35Y+n6VTqXsXNvkqTuj2JkQAP4upuJ/tlMQP0m4B9m1MwTxvS5jNP/eKfLnyM9vrO8cYD4YQPuaJlG5j4zimc/A1bAJYN6nxY1mWjbu/8qA4TA1GhaqeSUL0EJj3SXExAbAxnzgPelCq+oSIXI+JZa3HgsGBbRs9QLxbRB7GKkNXYMF9T6szx1r/y+nDcyIy6/fRLDCbZdkJ157YC/wQo6HuxRIsM/53wpc/0Y8V4XIhxkiWZV8CHvFgeY90t0ArYjfw6dTv7r3PqQTAGFbNjL7ceuArWKV+DvjVLMs+0Gq1eupPuM3kH6b27/fwDRiTZSN23ZfFEvNl71XVb/j4d2KY63hQZFk27lTkKRaTfduADDjLe8hX+GfjXcbqFCaAX8PcSuo4jowEHgif7/T/8sfHMSvMpdZS2Ovjfy/m3BhwmqrmbWAAT4rI464HU1x2P93ZUWuw77apxz53ANeVhXe98n8m8DlV3XQS6f6jxJlLvP1pMWeOOnoPKUzQ6QTRoEGDLmgSAA0aLANCCGtV9awhJgMzInLQKaRnYlT/y+kunDOPBTQ3q+qdrVZroMljCGFFSgSpQLHO8U+lVZ8uVgO91/4J4C5VfZOzFY4DnxKRtop+jPFICOGtqrpGRE4kqrUPYhPi3Cf6cyxWvOewiXKx4l5X5O4hEXmEAvugAlOYK8Bj1K86rBETAxw4ARBjnM+ybLeInN9j0azi/XkRKU9+V9Ffy0AHnE3yByGEnVhCamdVe4kLYPXUKPCA+wjwjRDCI9h1/zJMEHAb/VFqx7HAa+F+8es5ldjKtQgOY9fRUeCAOzAc8c/2+/uHT0bAWYTT26fpv/o10eXYK69RD7Jy5FacE/53vph6fy0Byqr9+/vbQwivBTao6rSIJO9hX3aU/vNd4WPwWhbdLjYBP+X/3+z/tulqDBsEqupx74kfGh6gbnOm1K4uTJgp4K2u7VI8FkTkUVW9e6mq/wXs83aROq1zW/zaOwoLz5CPi8hFLFby54AvVNkVumPOtSw6JFThKEb9bxOt9KTJucAnMV2aGof9jMCoREST6FPwsWobLwD+y+iOqkGDZzeaBECDBksMnxRcUKq69gVZVHf+XeC9LApFpTCPTVBuxyiI00NWnde7wF7HMRUpqaq60yuqm1V1VkS+UF4nxngohHA18C3gF7BK/mMpaqu/lwwivQ3gelW92SdZhwr95nNYdabYk16X7j2D6QBso7cTwVlYEubemvTF1S5EOJRQkfe29lpmU1GAsYA5VT1YmpjmPcnJBEAIYUxVz3ZBrQdUdXfV9RRjfISSAnsCK1V1VT+TY/9tHwshPIlNroOqXiYi5/mxTzG6Hts8IdIGF6qbZZEdMKuqJ5ymfBCzYdvvfwcLy8zm653EZEGuHVFMGHYTf6xiEYyVAsK1FM670/AHPsgyYox7WeLgo4gsy/Be/AmspWgSG2tPA34WSxhtxhhMKwp/S2nldkJEvslgWipt8OTF5cD1ngx7OITw2xUWfheT6L8XEyG9ftCEcp84honEnd9rQVXdmNAM2Y5ZHr4K+x5/BdyXWt/PzStU9Y09ruE54I+B+4v3s68fsBa7Tb2O91SGJ3lmsTFjl6respT7c8bP32LX5kBaOSJyeghhTS+tjAYNGhiaBECDBkuPVcC/YzgbuI1YsLyW3vftg1gQu31E3syTFftsC2RF5Gngrdhk65+oEDFzVsCdwx6UK/6mApUZ4FYsQM+D+O/W3CYhhO3AQ8Dreiy+AmNi7HTada9ez1XdkgTe1nE+dp08HGOs8ruvExCtpkDVLmA+UUldhQXRVSJpGzyZsxl4r5iVVa8gvxLO/BgoWPekUB5k3x9CWIf12j4fOENVTy9XLEcF79dus9jzQOGM8rLearBfRA6LyCEskXUwy7J/cQZGzi44hLEIRu2hXj6eE4kKcrdxJKkz4YHBvym83oW1V+Tq5ntYxmr8MPBKeN4qsg6r3K8BfkFV17mOyAZGY985DA5jSdJRJI9WYG06+Vj1SuDN5YWyLFuvqlcnNArmgT+OMfaj7TEwvJf/b1i0LKyEiKxS1c1Y8jdffw64x/+6woUYr0toBhQxj419NxaT1h78n4cl3Df12tcpgBnsupoHjriWzxwmhjsvIvtV9X+JyG7gyVarVfUsGgn8d97h7WmDjt9TGEvsGyM8tAYNnrVoEgANGiw9zqQ3pbwXJuhiIaiq81jAcQtwe111/yzLxlxs7VoX2bveq25FHCXtJ90WSPpk65EQwhMi0rPnfqngk4kHsUTEbwAzqrpgu+bf+XnAa4D/jTEl9uXH6/3nN3vva68xchvwqV4+0Y71VFQ3fAL5MeAV2G/9URf9SgWGO+mtbr0Kq1qWEwBzwA9K762ku73bZhYDhk2q+maGSACMEp4kuSeEcB/WYrEGows/H6PibsTOeU5RXxYlbg+Ii+ctfz9nEJwo/oUQdgPfA55S1T1iAoazhb+5pdAgCCGsLPcwF9BxjXnyZlPh9Q5VfRyjTB8DvswIKtVV8PtkvPQ3Vvh3HZb8ArtW24J3Efm/fJlVmAr/ShGZ9H/zqv6y27QVKq6zdCYc2vRfhsR6CnadJJgLbiX7ptJy+TE+iQW5y4naF76I/Ar13DPaEEJYDVxPu+tECvsxbYqF3yPLsjF3ybmV/gX/ZjFdlmQCUBLONc42Ky5/wnUS8vdO0J4k/h7GRJr3RPVx7DmQJ/BPiNkmzhf0c44vQ3tHGbl7yUAJAFVdgV2zTQKgQYMaaBIADRosIUIIk15JWd176YExKyLbgWtjjDt6LVyEiGwEPuQB8bnAuhDCv+sSFLTtN/Vmn9ZvSwI/hiQdXcwv+stYdW9eVX8N+G3a2w0eE5H7gZf32NU4cEbNgGEF1WPuGgpVLlV9sYj8D9LV1GMYxbzbRGkK2FoW9/PkyAEsCM2TEauA9SEEKoLMtsmpiLwihHClK/YvGTzY24J9lwPAgS4943PYOTmICU3e7dtYA5yuqqeJyC9hwV+x2ruU92UKeSKi3FJzdv4fEUFVj3r1bRqbzP8ghDCtqoedwXFkRNaGm0jY5mHBwQHSbQILQaM7DLwWuMiP9fFRJP5CCHkbxmpvF5nCfrOVwE+o6los4bPO3yvagC6g132Zf34Se7WPA7s9MPs2dg5vpl2/5HiMsa6GSVe4/kYxqZNq+zkbc4FoS1aKyHHMOvbpxDpLiZ3YmNfRhpZA31ZynvB4X0IssA0eeH8kxvhQYd0xjLV1M72TBzlmsWA3At91LZ1kO4VrXxTH33kROfwscTBpQ4xxJoTwKAMKAYrIhKr+Yghh4plm+9qgwclAkwBo0GCJ4L3/F3mf8lJhBvgwVsUeZJK4xWnTC6+xCmrRSitXQl9y+DnroIir6vyoKhLez57TPMcw4bKz6OwNvc0dAbpRQvvBOqp7hdssAj2wqRqf59wirVsCYAyjMq+gM4lwGJtQTxaW/RnfX0clyvdV9JqfwoKEh8rLjgpub/nvsf7dSayq/GQI4TYsIKjFMPF+0EcwZsoYFiROYcHllKpu8CTYL3sP8VZfplhVXnb/bu9lPpvFxMC8B//HMcruMWcN/BMmRLYHS37MeyVvHqvkzft7Y17BLe9qHekEwLwHPKnD2+guAdPAfIzxEHBHakE/52OwoA8wVvgXMXu5tVi1fr2I/LiqbmGxt34lsEJVJ4tJ1JMYsA+K/LeYdZrz46r6NyISsTamhaAuhHAt7ePBeAhhckSJ1X1+P+eV6scpuKtkWZa3CJT1T+ZV9V6svWy5MY9do+fUWPa0fs6VP2/OAa6UgkBo6hhE5B7grsK6Y8Alqvpx6bSdTcLFHD+K3S/7l7r15xmIbwHvG3RlMSeUtQw2F2rQ4EcKTQKgQYOlwzqsktJtYjEQfJKf2xA9MMR2grQL/I1Tqvy4mvITdFZXvjfofkMIE95nuxoPxvzfMazS92PF5UXkhyGEnLqYC5odAQ6p6pF+kgNijgOz+Pd0mn/bhDfXAhCzTXwdowkCU5XfHOUK0GlUj8+z3q5xbo/9bXVaczkBcAg7d8XvvImKBIBXpz6mqh/x7QG8NoQwKo2JFF7pbSnFe+dM4E2qukNEbg0hPEyhdaMXCmrxx6kQl/S+8A3Y+d+CCVWuV9W1ngjK/5YbY2IiomuBzR4Al9uKZrA2oP0s2jD+K3BIRF5Cupd9Y+K9XjgH+HPgMaDlIojHaU+YrPbXq4CfwPzE1xf+XSslUdSqavwzMNjPW7KOicg0Nl7tBv4eYxbt6bNCOYk9S6aHPS5PIF0NXOXX9Gdy+rlXwt+lqhclzvnjInLdyaiseqIoUiMB4K0cW6nfNnAappfTiwmUP2uPAmRZNoEJ1t1Yvo67YLeIXAU8eLKdQ05h7MDGrkEFkzdj43OTAGjQoAeaBECDBkuHi6lXtegbIvIN4EpV3TPkdvbRTgevCo5uAV7NYvBzCOiZeHBV7fzlJixo+UXMsmkti8H/SuqJbc3hmgROkz4CHAoh/AM26XuMQn9mBaX9Yaximnsbn/DXbXAtgM9g33tUKt8baGdX5Djkx1CHRjoL/ENFRbeIraTP6RE6kwJbVTX5PIgxzoUQbheRnwXe729v9P7qNiqqV9TWYvaMY8BdA9JVV1dU5Ca8XSVgVcH3Ak8MsP0kPKEx7X8PgVmDeaIqT1atw5IDP4+d400UkgI1fpelwiR2/dSlIgO8IcuyeTFld7Cx4CksydBNF2Iri9ZsR11EbBxLVIw5bX/ZmRNLjeJvW/j/PIv3714s8fJ3InKMU8guEhZagO7DAq1VwNMFS7xtwLulU/jvOPBRRpCAGATOZvm7mstOkNY+6UAIYSX2DN3W436dBT6atz74GPc24EPUD1SfAq7AhHlHeh348UxiiernY8+/rwJPngrXXJ84jjG8Lhxw/bwlqEGDBj3QJAAaNFgCuKL7NQxoadMFh7HJ2B+6Cv5QUNVHgEfEvJLB1Oc7VOZjjLtCCL+sqq90oaD7uqjU55Or01R1m6q+0LffzXasLsbxYEtENvi/YGrWYAmCpzCq6t+EEHZhVeKFylWM8WiWZS8TkatUdauIfAWjwnYgxviwe9APOiEpo4q2Pw98DriOHuOyT+L3eTWv22RnBRYotyU3Yoz7Qwj7aGd0bPOJf1L7wc/ZVSLy5xgt/Y5Wq5UK7Ndi+grn++vLsix7VavV6ksZXlV3Awe6tDlM+vG/lhEmAFLw++wEXapKWZatFpEtmGPCc7DK+jqszWDKWTarWAI20JA4X0TOH3Ibq8rJgmdi1T6BE8Axp+wfA446G2Yf8ENnWuzBxpel1D3J21FGgkKSawGuuXATncmjGazvP2mdtxyIMZJl2V6MydIr4J4AMuoJAb4OeId0F3qdAT6hqvfBwnn6AGbH2/Ne9jaaOzD2QJW15rBYg1mjXl7Y7++IyNux1sBnDFwP4XGsUDBIAnEcK7o8OtIDa9DgWYgmAdCgwdLgpfRXiauDfZhS8R0jpGIexDQEZrEH7ierFvQJzH/vtjGfIL0CeAlmj7a5xwRr1Bj3/Z6BTd52ATGE8FVV3d5qtWYAWq3WfuADPVTQc9yG0e1Hkcz58dSb3nJwL+ZMsC21TAkHscpir2rHL5OeDJeD2QksaK1UG/c2i4fo3vt/mqqeUwgAz3MNjH7bVLaLyHuBN2CTwY5qtKoe8oREB0II46r6PhHJgH/EWB87lqoi1mq1jrCYRMoFCKew4DhnDqwG1qjqT7vuwAaMPbCepfWRb1CNvHp/GJj2AGQv8EN/PxdoO4oJLw6ddB0Ak1hibSi2VxWczv4OzMmhiHlVfVhEToUg8oizvXolAMYxHYCu43qWZQFrheh636nqkyLyyVarNetJ7euxc1XnWTAjIn+CBf9L6U1/NnBp8Q1nQrwzhHDfM0kwsNVqzWVZ9o+e3K4j+pjCz47ymBo0eLaiSQA0aDBihBA2Yf7wo7q/5rEq55WMmNbXarXmsyx7FHiiYEXVFzzo34YFr5c7/XccTnolMK8SnwW8UUQOhhBuVdX7gd2tVutETbeDh4CHeqlE10Q34b6nME/uD2JU4spjc3XoQ/RmVZxVdgJwfCex7LkUPLQHxDqffOZYAbze9QJ6BU8L90ur1ZrxhMgDWJLjAuCFWFLtuKr+rYjci/VWtyGEMKaqvy8iH1LVcTEV7TlgTwjhG6r6p77e4aW0unKXhGNY4i4/Nmiv6OZ983lCYDPw0xi9frWzB/I2mSlOnWf2LPY74MyRfpkNcx5sg9mYzTrV+xiLgnl54DLP/8/eu0fZaPM/FQAAIABJREFUVV93np99p1ZNrZpaGrVGUSuKmiiEqBVZ4ezIhBBCiEIwJtjGGOMXju3YxMaYEEwIJjSLZtEMzRCCsYOf+ImxzcMYsMGYYEwwQ2iMFfp3FaxWiKJWiJpotDRqLS21RlOrpvb88du36txzzzn3XQ/V+aylBSqdOvfce8/jt/f+7u+On2Hj/JkC/ptv29UxuwHetB//Ht/njFmiH88U0dywy90PjRZflkEiIm8kVrWzwfA2EbmcAr+MuUTiWMw9zLadlNEwlsy9f6rqGqKKrl2Cfr+IXAzsUdUNxPF/b6Sza3AvMcFwLzm+Kp3i94vlwHIz259VUrkR4UnkJ4LXET+vXHXbQkVEthGTb70mAHqaIlBRsdRYKIuJiopjAn9gn+nmeoPY5TRxru3VIYRtg9hhFu8B7SXwHyXK7S51t/zVMO9BfxGNCvcNwEUi8qSqfsnMttbr9dIFWghhv6o+QmwD6HchXthX7UH6VuAt7XbiwX8nAdA6okQ0azK4O2fbX+pgf6X4POrsj08kfvbtxoc1JTM8AJskehY8QOfzvZeLyOuBET+Wxrz4TcRWh/cSF8W3kjMmcpj4e2oEoKT+u93/zKCqE248uJoY0KwEft6nFRznEwwao/Hmmq8C35M4snDCWxz+DbPO/WuI7/NVZgP3SeC/ApjZURE5kDLLO+L/v198Jnm9Xi9sMTrGabqufXTfUMZVqupq4CZaK+t7gWtDCENRHfTAQVrvYUWsoeQ+C1xsZme0eU4dISYJdhATCp8FTqczWfp2YhL3uwNI1jeUCseLyEtJktxUr9d3pzcws/+p4L3UWITKIjPb6WqPXlk3qGOpqDiWqRIAFRWDZQK4osDArCu8KvZVokR/QbjaqipelVTiIucU//t8H1qn1CSObPoA8HYReVRV7wC2talQ30tciPXb1tFJBastPjN5K7O99kUsJy4in8jugliZSj8DTkySZLRerxcmg1wGe5JPcNgK7ExXSkXkoPdMpwOWhqN+IwGwjHzX7UH1xx8mBjBFrCRW8jYkSfKuer2eZ8oIzCS5GsZSk77vA3Phhu7qlMOkkjU+pWCEaIbY+P8JYoKl8d/sor8GvJ6YwMoGMFPA/oYTvPt7HCYG7+vJr8IdJJqMPZH+7v3YGlMAGufVFLNj5qaX6tgzVV1BPO8an8th4hi4vACxqeLuippeq6FFxwMxUL6DzD3Jr99rab1nzBtuRPpT4rnULghfY2ZryKiZvFp+rrcGla19p4n3+68C5wA3+6jcdq87Sew9v4guppMU4feeTxKVWTXgZF9XvDu9nYj8f/28zkLD1V9bmR2B2i1jSZKsr9frLeqwioqKWaoEQEXFYDkP2DiA/Rz13surF1gP34kiciUxgFoBC7bi344acVF9IVFefr+q3lFU8QohHFLVu4jJmH4YVdXxAfUS/7TdBt6OcSKti/mGBHpd6merJM4Hz63U+wL6QuAWr/gGYmCZ7m89QgxY0wH+GPBmoGEkNsoQK1MhhElVvYWY+Di+ZNN1InIG+VMZGgvw64iKnjV40CYiL6nq94mO3nMa0PrrTRH9LRrsI7aMFKKq+4hqnaxa4AWiKuYwgJntF5G9xOvjS0Q/jyyTwGRWIr9Ug/syPPB/O/E62cBskutV4AZVfSInUMz+fYzBj56sAVea2TmZ+/eUiNwOfHMBfp+v0FkCoCYim4BHMz/fAFzTgZpiD1HufzoxAF/bwTNuCrgTuHVQZn9mdqK/j8b7rdE6+rWhssnjiJktVhVNvf0mhYy4QXCVAKioKKFKAFRUDAhf7L1nALs6SlyUf4qSPvC5wgO/VUTzo/eZ2boBjPhq9P1Oeh/x0VQVcsTMGlL7Ua+AjdGbK3AnrAY+YmZnqerniZWfgzk9wI8CF9PfNIOGodfuPvbR4KV2G3il65ezSYfUbO11qc2XUy7VHyV6FDTktZuJZpdfTm1zSER2MDtiscEZqjrapnI+sO/XzbveSvy+tjDbQz9GDGCniQv9ss/ww2b2MREZTQUAG4mV9PcCj6pqW3dvVR0nBggtQfNc4W7keRXJZ0IILZXeJElGROSYWEB7ImeM2fadKeBIp879rmxYQbxWTgV+gyjT/z4xefRqXrCsqmuBu4kqqbFMELkWeCvwNM3JnDxqwM+o6sgggnL/PN4JfESaR/4dIZq8fmLIUw16ZRutyZEifjn9F1UdIyrWTsrffIZJYtC/hZjsXV22sd9H9wK3mdnnOpl24uqLE4CrzWyLiGwHrsu2+InIBtq0nLl57KvEdUI2ubfHDS0XI+3axcoYoWoDqKhoS5UAqKgYAEmSQAwMepWtATO9sV8DPj4XMuN2+OL3DDO7QkTOhp4q/tNm9rIbOe0kVoz/0eXiBz0w2efy40ZP8QriwrchnV0F/BwxQF3nfwY5Um3EF1y3ERf4nwSey2yzk9gzfmGvL+KmdIOS824nyrHL+l0hVr6WM9uL3ZitnV1krSB+vkWM0NrC8Huq+rVUYHKYWL15O6nni5mtEZHNlBtSlS62u8HN/QJwiZtUnkAM3lcTz79JYttHma/Gr5KvVKgRz8k/IL7fy/J+2QOtM4meDkeAf1HVl4E9ZrajXq93a2I3DHIDSnfj/h/trnWfdHAyUU6+n5hQKZK2zxmedNloZicB/xZYZWarPCF2CHglSZL/DDzWgdfAGcA1xOpres30AeI1eDWZKReqOmZmV/sEjFrO53gQeKSLQHslMRjsKyHsydxziBXubHD5ZWIFe96TzgU0FACdMJOA9Pf8XuI9qV2S8ZCZ/aobI7a7ryIiO4mtYY+VtU5lGAMuN7MPeCL9BOCoql6U+exX+POi3f72ED+brPJw6wJUcXTKduI9s5dnfI3BjByuqDimqRIAFRUDwCsp76GDRUOb/XyXWKmY1+DfF03LgA8TPQ06laBOEx/cB83sJRH5ITGQfpVY9T8sIkd7CRC8ijORShCcCvwWMQBpOKX3W0WuAReY2WlJklwrIg8Ch7xye5hY9TuXHo3XRGTUzDr6LL1StIlYiVpDlGR/sfHZeVX3JVploVnWEwOItFR0Gvg7miW1o8CvtKnUH6b5HD/e5fGvQDQyVNVnibL09MSDEeANqvpCyXEOxejMW2i2UiD1L+H7InIe5edV2ULzTOJ31khsNFzuD4vI/iRJgojcBzzVSbLPr8m1wNnEz2qK+Lm/TAy+DwOH52DRXwNqXuG+nSiVHidWsg8Sx27eR0z27C07HlVda2Znu5nhzxPPwSPEMXxTxOThs0AQkSOdKCg88XITcAGzgXNT4tLM8Nd5h6q+u82YthtoHZHX+Bw2mdkltI65HHOjxlrmdY+6d8ZNxNGUebSY3bnh4zh9JAD8fnIy8TtLX5uHiT3vN/jkigVJCOGgqu6ns+BubZIkI27wehoxSdPJeneliPx+B9tNAc95kueFLp9ny4DTMiq6DcTk64wRqE96maQ5CZmnytnpz9p0AmAa+FEXx7TQmCImNtb38LsjwM+pKvOluKqoWAxUCYCKisGw2czO6rMffhdwxZBnBnfKZuLC90w679d+ibjo/yHw9KBdvL1adhSf2U00efqUqq4kLmxfRwxGNnVxzHnUPCD5LLF39zrc7C5JkidFpNNxVHmMSBzr1gnL/LXP87+vJvbR74VYxTezF0SkXQJgpZmdSJTQAjPS0d3ERVa66r+RGMzlBaSTxM88vQBv+AakZfAvEKvvM0GGiNTM7NQ2iaRakiQTncho54IQwv2qesTMftNNL4/3P43F6UtEpUguZvbmxmQMp4aP9CL2FStwFlEhUJYYaQT/ZxFN21qMKM1sr4i8CHxWVR8bUAX+kLfpZK+lRjvFFuK52VhHTBAD7hOIwffLwNU+i7zleFR1xMy+IiJnlh2ExJngnyNWWjthDfARYvtQ0T4Bxl0hoMRRn0WU+Ug0JnJkOQT8taumRokB2XYR+ZKZfa1er5e5nP9fOa+xij4nkJjZeuCTboLaYIqYYPzUgHxJhs3LdJYAGBWRde59cSttvsMumTKzb4rItfV6vRdz3rHs8XiCZzWpBIC3Uh0llWw2sx9mdxZCOOKta28k5TFhZt0mPBcSU8RnfC8JAIgJ0gkWQAtlRcVCpUoAVFT0icvk35+zUO6Gw8SxQ/M6c9kDjVPM7NNuHldWUW9U+18kVjqfJ8p/53Qh6QmTx1T1SeLi8GTiqCftItjOY4woG12jqtcAz4cQ9qrq0/SeABil80p3o++4wQQxWHkcZhQA2Sp+LiLym8DXMz/eS6w2phMAJ1AcaEwR3d/PYHZRuoyMQZk7dt9hZmemrwkP/ssSAKO+zYJZtIUQHlXVx8xspYisMLMV3j5xENhnZoUGnSLSibx7jM6ew8uJfga5Uyg8eDiHGHg+Sfu+8raIyEFi0id7XxtldjZ92Xm3HvggUQFUVNXOekXkMQH8EfB5YhtOO5Z3KJ2e9uC9Xb/xk2b2zhzfk6PEHv7bsr/gSpgvA6Nm9joR+YGZPSwiu9qNHfXrOvvjtfSZABCRLWaW/rwPAp9h8QT/0JxoLGOEmMT+Vfpsy8vQ+MxuCyH0OqpuhNapDstzfraLmEhtJMgOiEhRouoZ4vrhUk/a3SYiC6GQ0CuTtDE2bcMEA2iZqag4lqkSABUV/XMysTrXD08BDywAydqZXpVb02a7V4mmeN8iSpjntecXovs7cdGwS1UfEJGTgcuJlcrsnOtOqRFVBQ8Bl6nqd4F7iD2lXfcndukB0Jinnv77iXgCoF6vkyTJLjehavd9nZxjIraHGFCljbHWERMCLeoND2oeIAYj1xEXWEfJzC13nhGRT5lZ2mjsIOULsvT4uAWDn9v76HwOeYO7ifeGk8kJlM3skIh8hg7MHP3327WdTBMDpGG3ABwmJv62Aveb2RtFpOXYPJDdQcF37vLmTo+1GxPQl0XkaeJ1m3s+mdkrIvIM8OkQQrsq7g2ezGkkRBsKkO8B9xYFzy6n/3P/0zEFxm0rvHWoH2PGo/6ZjxDvk9cADy6yPvFO3eFHgTu8XWxQr72b2J53f7skTrd4cqnpXPVE6rX+8+OAL5BSCGS3Bf6Dqt7pLXYLaXJQL0wD/9LH7680s+U0T6ipqKhIseAWWxUViwnvN/092gdghXjG/u4+KgoDwav/17YJ/ieJZlH3AC8sULfoxuLpOWC7KwGuIlaue62irSLKvVcS+31fpH3vfQteEf+ZHo9hFPglVR1rfO7ejtBJAmAtMbifqaD6uLyfmNnbM9XNkyiQpLvc9BPEhegmYvU0a5bY2O5mr5afRwyYricmjrTgGMfMbDWdVXkXA8HM3iMiW4jtKRuI18+UmQURecTMnu3QDPCQmb0IbJH8GeZTwIPEKvmwA7ojRBf93ap6uYjcRWyVOY94Hk4CL4nII8BXiwJkb1t4EPhD8tci02Y27eagD9J59fcIcRb7uX5cjeTfIWCXmf2EeP2+3EnPewjhZVW9IrWfaWJgcWhICdsiP4gTyLnWuuAJYpX4XwEPhRCe6WNf80U3I/ZWDTD43wZcydyP/nyRqKJZAexop9QIISzWsX9N+PN7r09Z6Pr3PdE+rKlBFRXHBFUCoKKiP1YRRyr1fC25k/B32244fNYRg7o8DhMr/p8PITw9VwfUD744Pwg87cmALcB1ZnZKQRDVjtVEA61fIgapXScAnPG8kV7uqL7JjRK3EwOBg6R6Xs1smScRGomXV4mVqXZS6gmikVk2uH7Kg/SZxZKZ/TpR5pqLL0If9j+FeGvGVWR6t92MLI9an200Cwr/fnf6ny/2ua9JVb0J+B/AbxO/z5qrCHYQWzOe7laJY2abVfUkYkDbmMIx4q0Yv077MWT7iIqUx1X1amKlcl8ngXW9Xp9W1SuJlfQ3Ef0nJoADRLXF3xLVEVu78UXx63438Jf+p2/8/cyJQZ5f/wfItAqJyGuBr/W6Xw8O/0OfhzffHCB+D4OapNKOo8Tz+4oQwu45es00FwCXEpO/t6nqwwthOtAc0VCMdW246/evvgyZKyqOdaoEQEVFf2yhoC+3U8zsri5GCA2TvcRAINuj/jLRSOmBxSot9EXTEz6G7f3An9LbiKFRosFYPz2zK/21ZwIKV198mljh3W9ml3kSYCfFSRlCCEdV9SXg/DavOQYkSZJ800fkAWBmO7zXO92bv77NJICKeSCEcEhV/3eiIV5jUXyoH9NQN+DbQAy4G6qSEaKE9rhuEmV+vnSl3vBk0qOq+hgxwbYMOGBmBwYts14suEw/T1mVHfO2FDlIfEbNVQLgU8Skb1tvHlVdB1xCLAp8j9he0XNrXJIko0TVVMNv5kaiIuBYUUi1o9Gy0gsj9D8RqKLimKZKAFRU9IiqLjOzS/uRGZrZNomj/+Ydl21/0MxudFOxQ8B9xOrlwWH7E6jqBLECPiIi24YxksplyzcQx/ndSqyKd3sfHKW/KQN5i5NNQGP81FoReQdRcvp9ny4xDiAih2iVCP818O/bvGYN2Ozf68xitl6vH3Vfgw80fubbbCA1NWCOGDOzan5zCb36EXggn7cgHmV2ukH2d3o5xJ7w9/Uq82yCukA4QH5bzwmqOr6IDPuGwUHiuT9IV/8WfATfbcBnOgnifUTt3cyqwt4LvAu4v4/DUFLeNWa2XkQ2sXQSAPuIa5BexsOO01uCv6JiyVBlyCoqeud0Eemn+j/tZlX9uN0OmmdF5F3AO4C3Ah8PIQw9+E+SZMzMPgR8W0QeIlbZh4Iv6F4A3kf0M5jrSvfMbPIUTfdiM9tCHFP2oIg0AvEjwI9zfBe20pnr+0ZyzBDN7Ac0940vY8gL7AKOqRaABUZDdVKxwDGzo+QbJ46bWa/TR44VDhMTJMNkt4h8ELiziwr+OmIyuUGNON6zG1Zm2qM2knpOeEJuKcnap4h+G72wjOp+V1FRSqUAqKjoAa9Wv4PysWbtOGBmX0nL/1V1BTBpZofr9U4NjwfHfFXiRGSVmb2P2arXZar6F8MyXPL3uct7kOtEd+eejRy7ZJT2Y/s2AiP1en2/qr6ZaGC4hzhqsYkQwmFVfZ7YjlLGajNT4mip9GttI5r5NVoNVgC/6fPkS5MjboJ5JvHzW01sY/hcmypllXiee9qecxULhkPkB7njIrKBKANfqjRaAIbBtJk9BlwjIi91mfQ+gdb1dLeV66bkrIgsy4yznDKzTiaGHCtMMvfJ+YqKJUOVAKio6I01DGD0X71en1llqOoJRFn6URG5mbmXYM8ntUy/8RjxM+7G9blrPHi+E9hrZreJyLphvp4zQWsLQXZROxOsudHavW32+SztEwCIyO8CX838eDcxKZD2GthsZstyjivL+cRztiHdv87392DJ78xVomUGT1RsJC4odyyEsZUVFQXkVrnNbJw+/WYWO+4Ov4dYGR5kQmuKaLB4Xb1e7zr5bWZrclpmivZTpHL63zJ/PygiU6ntd7lfy1Jhvxti9vr7XZsHVlQsJaqKQEVFD5jZ2+l9tjxmdpA4sguAJElWmtntxFFa7yRWVJcSR2jta56T+5OrDB522Wfu+LtB4vOJsy0Ae4lBfEPx8Cydyfob/CcK5q1nXvtMVW2SRnq1/tuZ1zuZ6OheiKqupjn4hyhRfYMrZIqYKwMvAPz93gj8APgR8CE3XayI592DxKTQzB8z+yZRcVIxx7hJ50/JVD9FpCYiv6KqS0kGnsffM7jK8LSZvQJcY2ZX9hL8l1Dk01HUXrXazNL3pa1m1rinTxEnBVXXZOdUfjIVFSVUCoCKii5R1VXA2/rZh/f+h9TfVxH7CBv001owVLyaut7MaiKyY0Bu8UdJLW7MbMpn3M8JXhF+0qtLdwMnDeu1CuYTTwGXEX0XlgPfortJA7uI5lCFM/b8tZcRlQKPZf7pCWLlvtFjPCEib6FcbnwuUfaf5Uz/+UIxq1pPTKw1rqlLgAcYnpR4MfE14JqsIsITJB8jJk6qdcLcs4d4T8hWizcSz+OlVAnO8jLNniW9MgU8ISK3hBCeGcD+svxzwc+Lrqdaptr9sog8CbydmBD+fI7/y7HMIRHpx/CySvJWVJRQXSAVFV3gC+OzaA7Wu8LMDgH30LyIy7p07+11/8PE3//1wPdE5BHgj1V1EAHCYTP7B9z0x9sBShUWqrpCVc9U1XNVde0gqrpmtgP4IDCMBWGDcTKLwBACITad3gBcBTzbpUx9N7C9g+3GgNdnvzNXAdxjZunXvMCTXUWsIP8ZstbMzujgWOYEM1tDs5phOfNjcrgQ+bu88yzlBdJTwKGqI0mSrFLVVQO6Pyw1ioLcdeQn3ZYSL9GB2qkNR4HPABcxgHu9j2zN0pWazMya7kmuTLsM+BUze1cIYaEkVOeEEMJherz/VFRUtKd6MFdUdIGZLRORN9GHjFlEXgYezSy8jzIra5wys2/3cZjDZNTM/jTl1n4FcCepmfa9EEKYVtVtvp/lRGlmO2XBjcCHiEHoM2b2bvo0L3TjxaCqFwN/RRsZfI/kTQEAZhZ9TQt/T2ys8995Oc8YMYRwVFV/YGYXtHHSr5nZKSJyHK3TJ+73CRANFcBa4BxaPQMa7Ca/F7cmIu9JkuTLBbPc59Tp3z+P9OddM7Nq2kCkl0rqUUoW5j4S7Z0ichHxs74eeLJoWzNbJSJHQgiligxV3WRmEyKyfRgjQhcYL5Mvcx8HTidWhJck7tvyEr0nQo4Qn1nXeZA5CLYTn12NdcFeij18ip5reff1Awx/6kFFRcUSpEoAVFR0gZvEnd7HLqaBL+S4pO8mSs+XA4+KyON9vMYwaVQG1/nfG9XVvt2JzewZEXmK6Hi/s16vFwYEbph4PrP3sNOIC8JXU9tADGa3mNm0iDxpZrs6nK6wgygV/yTzb7x1IdFcbxr4pKp+uaDt4kkROUqbANsnDKynNQGwkyiN/zPi5zoBvEVVHy0Izh4l9rnmmfqtF5ETyW8h+IWy4xsCh4hqm+UQx6yJSEfyf1UdGdYkirnCW3Z+puCfy97bCnISVW7MVRg4mdlxbmK6GkBEriMnAZAkyXLg836eHFTVG4HHs4qEJEnGROQjwKWezHlGVa8OITS1CPkElbOJyqGngZcW63cXQjiSJMkOETkt559fp6r/xxI3snyB2GrULdPEXvobOgn+/RmyCrjQzH4O+L6IPJNzXh0xs+dF5Cx/jQfNrOjc201O4lREdnfzRpYIledBRcWQqFoAKiq64230J8HcAbQE9yGEyRDCx0MIvxBCuKzNGLX5ZEpEvknzfN6BmFLV6/UDwPuJ85Pf02bzN9I8ZmnSHZPTrAUeAT4rIp8HviEiHR2rj4B63Myuprte/GFwFTFg3wBcSYF83QOiTiqDE+TMqPZF7ReI1ccGZwGnFrzeYWIPeR4rgLcWyL/nuvq+h1Syw4PXIoMuIFamkyQ5B/iYqm7KzOdebIxQrFgqXGCb2QQ5RQIRKQ08RWQTzffIlg9PVWse1J9PPK9PMbNbyDHuEpGTmT3v1wJvN7PzkiSppfY3AtwOfMP/e5+ZbSw7zoWOiBT5b5xIZXD2kx5/bxtwRQihUw+FlcQk8G0i8qcicjf598NJEbkVeMrMHgc+W6B+gug9km0POEJ8Vi3lpE4eS9nroqJiqFQJgIqKDnH35fN7/X2vCDxInzL1YaKqNVUdV9XRgqBnGvgOHlD5e9o9qNcPIRwKITxd1u+YJMkE8Gs0B5IvkjJ1c9n8pTRX708hBtKdHsu0iDxM7BUddCVxvP0mM8w46nufaFnl66FMH38RZ+c59YcQXgHuSFWvxoDLSvq4v0d+MD1CVMrkJcvWFexrmuH0fO4mmh423tNOl9aWcbInjW4EbvIRbMcig5JAl5F37UyY2WtpTjBsIDM73a/jzWaWPo9GROTn02NDzWytmZ2S2uaEgur5QEiSBFVdrqqbh+jKXxTkjgNbFnlSql/20L00fr8nmUqTfxnOICabG2vlZeS0hbka42kze59PkynzYzlAvKfsJN7vjhBVCU964rliMPzifB9ARcVCpkoAVFR0iJm9kT56wkXkVeBbC1yW+k7iuLQvmNnmrLGeL1BeBG41s63Ax+luQdU39Xr9MLAnFehOAU+lj8PM1hMXblm6+ux9YXczcD+Drc50Y0I38758gkDZBIrn6cx9fw2xup/Hva7ymAIws1N97GUeLxHl1nmfzUnkTyUomnBxlCEkx7xd4hbgm0T1zZc6+LUJorKlBpwtIgt2KsciYEfOz0ZFpKm9QERGCqr2P5OZnDEN/HdS55yIrKdZiVRjiHPARWStmX0P+FvgkSRJhjHacjv5Qe4Y8CaW9pzzA8ArXf7OAyLyQJetE++mw885hDBVr9f3hBBeLXuNEMJ0COFREfl14vf4BuB9IYQW419VHVPVjf5nybXsmtl/7+PXj9WkbUXFQKgSABUVHaCqy0Tk9RSYt3XIs3Tm1J73+qtV9d8nSXKHqh4/jOqPL2KvB041s9/3/1+R3c4TGF8VkXeJyI0DGgPYLX+bGhG0H/irdGJFRNZlqoaYGfTQU+jV4huZv8kM2WNer6pFAekuEdnq77WMEeDNbtjWRAjhoJl9Eld2iMi4iLy+QDFwEPg2+ZX7MeBN6XPV/3/O5cshhMNmdhlxQf9EB7/yQmq7URbwWM5hoKpkRpL1Q56Md4Kce0uHHDKzHZlE6mERmcv70CnupQGgIjLwsaFmtp/mdpw0GxmOQeli4RDd3csPArd3k3z3e2PW7+eomQ1Elh5COBBCeNIVby3nrt8rP2pm3yJODbpwEJNuFhNeNKmoqBgCS+pmUlHRB8cT56f3es1Mmtnne6n+e+D1beAGEfkj4A7ajMjrBRFZjQc6IlJzc65ceat7FuwcoItyV4QQ7if2xj9BdHN+rvFvqtowImsK2txkqSeJeQhhB7EPeT7ebzZpNEFxX/4RYh90J8d5OrGfuIV6vf4icDFRaQExWCuqqDwMbC1EgEgPAAAgAElEQVT4t3N9DF+DVWZWlEQbVgsAAPV6/ZAvuttWAEMI+83sEtwtnAGYXM4zRfetoqpimXFgt7QEsWY2Qo4XRHaChX9Xf0vzebFHRLIO64HWinBHRo89kh7lORS1gYjso9hJfiPR+HSp0tbHI8UU8Ckzy5qetuNUMt+rT6aZqwkUG4ErPdF0IjF5uaQSkRUVFcNjyUmKKip6ZDP9VS5fLJgV3BYz20TsaW38aCMxATBo6f0BBt/rPkzuJMq6s8HuiIj8XM72u+lPxv84sVfzncxt8vSfMn8f8/7p7xZs/yxRSl/qd2Bma0XkdFXdWhAUPwtcJCJvJVagcgOqEMKkqt5GlPtnpdDLReR04F7/+9qSyvJR5ridpIx6vb6PmARZ1JjZqCf38rhCVX/I7DV0kKh0OZE4ArIX9hBHnTWC+Z9mNxCRRotFlryq9jZiEmyz/30HGd8Rd81/VkQaibGy6vmgmWYIyQYf7dlIfuQlzd5DvAcuOfyz6bQS/yrwVyWmfLn4uNSsU/9RhptYSnMyzUnXEaqiXUVFxYCobiYVFZ1R1nfdjkngPkpMi5IkGSmS9/liOf1vIwwnebefOPO9IUecYgG7Ensv5aFs8OoV6zyn+Z0UzGBWVVR1Ik8Sn+IgsZd8d29H3DNNlSszGxGRjaqa23fsM9K/0G6nbqJ2EQVtLS5LfYJopvh0m8r5k8DnaE0gNdoAGgvZDSX7mGb+Jy4cc3gQU3Re/z7wJTO7z8zuA74P/Gczu5vex1/uAL5MlEvvoNXxHDMbLTimX83ZdiexBWermb0I3JqnpBKRbzB7/jzHcBMA+3BVgpkdZngKkWcpdkI/SVVPKfi3ilkeI+ccLENVR0TkV2ldI0+S832oKkmSLNdZBqEISQf800SVy1JzxZ+rZEtFxZKjSgBUVLRBVSfMLFcq3SF7zeyFogBKVbe44/gNBUmApsy/LzgHLpV2g7/bgb8kLjbuZRE+gH1M2b9kf25mf0+OwsHNlS4EvgLc7vPEWwghEELYBny932MskcHnsZ9UYOwV9OMokYOKyBN0Zqi3gdY+1xn8PU+1c6f21oPPm1meMde61LGWqWiOmtnQFACqeoKq3qKqHx2SadtipEZUzIx4QmiUaNDXc4LRE1A3EtUjuY7onpTIe42W+1+9XieE8DBxdOVbKWg3cYn3J8zsQeDmEMIw1STb8ASDiDzv73kYvExBr7snUd6lqnM9VnOx8aVufWo8wZT3jC1SAIyKyC3At83s28BVAzDtewIf62pmAbgvhND2ua+qJ6nqH6vq7xc9yxYLZjZfvjsVFcc8VQtARUV7Nnc6P76AF0UktwKhqhuA24jy1ingR8Rqapo1acdsN8YZyoLTzPaKyLVmdqPLHefD4K8UN0c6DjjNzKZEZGsIYaZKHkKYVtUXiT3BDUnxfhHZXpCEOYf4HazG+9CTJLmqRDL6JeBsokSzJ0SkmxFFR/x7SU8OOIF4vEV9rTuJvfkfpn2i9xJVfa7TICZJkpqIbCD2x+4KITQWxLtE5AvATXmv6cmt15Ycz4FuZbqd4ovxu4ijII+KyGSSJJ+r1+sLVuGymAkhvEpszylimZmt7MZoMIRQavomIoeJPikjDF9J8irwHjPb4sm2oRBCmFLV+4gTNZrwJMrZwF2q+mI1Qq4VM3tMRF7s8dd/SnwepJPv++v1et4zcQvwAWIyDTP7MxG5jx5NfyGOZFXVtwBjbnDZ1tdFVbcA95jZCk+EP6Cql7lZ61Jj3XwfQEXFQqZKAFRUtGcj/V0r3ysx/9vs+8df4820JgBqZpZ25d7DkKSA9XodYtC/4AL/FOuIEvczfBH8pKq+PxMgBGJF+no3FnuUHBmoV89+k9l59TXgJO+ZLgo49hCDyU30PmqoKQhOkgQRWUGcj/6Kfw8NjrohWDoBsIKYBHiOHEIIR1T1e0S/gnZVoJOI5+HT7Q5aVUfM7HziaMTVwGOqelN8yUCSJF8Xkd8ijhgcYXZE415iz3fZsQzT8Xk90aOgRvzOfltEvs7cGXpVNFPL9lc7PVf8PACek3uXv9YuihNwg+Rp4nmap1o5gaiK6DXIPZY5IiL30GMbm5ltzyaoRKSoreRNpNYI/sw5hz4SABCnl9Ch8aw/y94FrGpcW2Z2LjEhuxQTANUYwIqKEqoEQEVFCUmS1Ih9qb3KLI9SEFip6qiZ/VpmHnaeRHrKs/kQFzN7WNq90u8EzmA2iFZiEmUmYA8hHFbVj4vIw2Y2LiI7C6og47T2Oo9TsnhwhcH9wPvJqcz1goicTHTvHwceVNVrUxX5I+QkI8zsNWX7NLMnXXlydpuXX02UEj/XgVR2vYhcw2wy4nwzWy4ibwMOujrl3WZ2toisI0qYn3CjwLXAmty9RvLmxRfi6pmbiN///cCN3oqQR1MSz8w2i8gylkYCYIzikXFbiWqRdIJylPh5rSf/vneA4bUG/WPRP/joyxHgwDyNHp0vdhOl4HmmjDUz+7CI3MH8jSldqGw3s+cyyVRgZsTfBcAHicni67IKKBF5hniuN9qXDgF35+xrhNkkfprfBv4i78BUdczMNorICcD2EMIgPCRWEq/ZmcSa3+M20eW9taKi4tinSgBUVJTgBnz9jNx7hoKFmZmNiUh2lFNeVWw7sQowQUwo/HSJyz1fT/PnNE5O4sT7JdtVYKZorbAcoE3FJISwX1U/S2wH6AtfQF6JJyJE5Hzi2MenfZNcd/zUHPJc6vX6pKp+kihPLfMcqAHnE9sg2hmnrTKz1anKWE1EziRK6x/3FouDzLr+p1nZRvadnXZQiFe7LgLOJT7HPgz8J4onI6yjeWG8lt6TeouNon77w8Dr8hJjqroOeIiYXMkyTHPQ3EAlSZJNRAPOCeDbqvrFkmTPscYBM/uBiJxBznXsyqFLkyS5vmppmcXMXhKRIhXXFuCTwAozO1lE/h74THqDEMJBVb2OaII6TVSd5T14V5KvzhhX1dFssspbod7oSZvVwC5VfX0IYWcXby+P8YLjWNfnfucNb+upqKgYApUJYEVFOSvMrNcEwDTwAwqq9SKyLMdcsKWy5QZAjwKH3GStaOb6okVVa6p6vBsXnVnkcK+qq8gPSnplkubpDNPEIKSTCudjDEZ6u5zmyvgqM1vvXgcQEwD/QmvQdTzt2UpMQrVjJXBx0SSKFPvI/2wuK3O+9veyRkTK5ljnGQgW0ahqNwLbZcCvl2z/8zQ/78aYbftYquwp6Q0+YmY9yYb9Wl6lqmtLpmpMm1n2fG6om7L7GxeRK4kV8NOBq+jDf2OxEUKYFpEnKW+ROV9ETkzdM5Y6U8BP8pQi/hn9Fj6G0hV4RZ4sXzazNxAl/ncWmPCNkp9gmyC/5WnMzH6P2fvPccSWqWGxmNUypb4fFRUVvVMlACoqyhl3GV0v7AVeLBmfdqr3CqZpqcC66dDVRLniu0MIczXfei5ZTZw1fzfwCPDRgu1O6tJBvxRfIP4TsxLow8A9bUbeNdgPfIv+F1jZ+/CIiPxbvELtao/dtCaS1rVzmjazA8TPtROp+zlECWkZu8lXCZwEnJrz8wY1YoCe+8zxyRYd91ObWS27L/9ZEctyXrtsIgGqukxVVx/DLutDMVwkJqYeMbOfAO8tOEcPiUhTIsnMcr1NzOxEM9uS+tE4MbhaMrhEvCyRtwF4H0tE1enXZFmP95SIFMnqx4iqvvT9YCLvOg8hTNbr9VdCCK+UtJ2sxpMJafLuUc64iGxK/b1GTFD2yxT5z6K+fAjmmWHdoyoqljxVAqCiopwJch7uHbKLOC6qiNfm/Ox/5G0YQjgQQri/Xq8XVpxVdTRJkg2quilJksW2EFxpZpv9/8eIxlZ5bMgZUTZNf5Lk3cB+MzsCfM3MOpoZ7caOj9Nd5TqPvJaD42lezO+lNQFQo7i3GwCXBD9KZ6qR44Hzy5IKLrv+Qc4/rQTeqqpFi/KR1PfbgojsMbOOR1uKSHZM16SI/HPetqpaZD64rmB7NJYJ7wP+Crg+SZLFnAQYIV8aPCzOAU52I833k59oeZXoPdBgmhjgNiUFVLUmIpu9ZQOYSRalVTtLha9QHBDVzOwD5PeiH4uM0d7ctMgTYYJW9c+yQSaWAVJjNbOM06zeqlHujdIpB2l9z4eoqugVFRU5VAmAiopyivpnO2FbakRaHhtyfra7x9cCuFBEfgz8QETOdgPDRYGP80sHuEXV4F+k9b51lJwgXFXHO5yD/JSZXSEi7weu6WYUXYjl+U4k9mX7mKI1UZSWt0MMmJoCZDODDvrY/Ry8Ofv7OYwSVSallXEReSBnXzWiIWCRgmBURLLtLml20oWxpbtj/7hxHJ68KTK6KlqI/2zB9jXgbUTzxBOBP+5DBbQQGGHWyGwueFvq/zeQ32qxF3geT9yZ2csickfBKMqfp9lh/QhL09W80QqWi5+jN7hZ4jFNSXW9wRTFz9JxMteDj1kddL/5suzrOHnXY9/Pam/n+SEpFYCZ7abDKQIVFRVLi8VWJayomHMyI/i64adt/j1vcdDPwvatxEXHBPBuEXmaAT/8vX+yBoya2dSg5ra7e/xjwAVmNiki38nbzswmcsaHNfXxex/7FuAKYFmSJN8WkU8Vyfo96MgzresIM7tLRP6A/hZxDwF/ltrHeGZ/LZMf/HM4js4cnrcSTQXbTQRYB7xdVf+ipA1iP/CEmZ2buS5WisgVqnpRztjLjZTLtnfR/bn6IHHs1Uki8qqZdet0XVR1q9FcoZsws3XkeB/49TDC7MjDqUVk0Fl6vvZyz1PVNTR/rsvJkWr7VIjbiQmcZT6uLU+lMg38DfG+2FBiHWS4IyNL8e98hZmd5p/Rs8TJBMN+6cPAd4AzKbiWzOwMETnfTRKXtCFgiWR/jOZn76SI/PNcfV6e7N6fOYaO1U9t+CZwkZltAhCR51iaapmKioo2LJoKYUXFPLGcHqtnZtZLr34/cr10lXIPwzH/qZnZnwA/EpGbB1Vt8urFJcDFXom/v9Pfdel4OjhbaWafBd4InC4it9Kmqt0PIrIVeKDP3bxoZunq3i5S358nKbKTAGp0OKHCP99b6Cxwuoz24w0/ne3hds4HPpLTT7ulZF+TZvZf3OuiY0IIrwJvJia+3lKv17sNCrPjHxtM05psKWptWA7cAfwE+DRtWjIWGGtVdXOBUd+4mfUiS15Pa3Ca20IVQtgTQrg2hHBZCOG5vADMg+rngeeaf1xoXjgXHA/8lScpv0NUouSpuQaKfz7fpaSdx41lr2XptAIUUSsykiUmAGb+zZ8fHfuP9IsrWNLJyingPw9i3yGEA8DrROQyEbmcON5wqUzLqKio6IJKAVBRUc5ITs95p/QyY7yffvLniC7Z+4EfDmlW9vEicgOxqreJuPjtN/gFZoLUL3f7eyIySXNwfLKIpKXoo8Bm+u/Vz8XMjojIXWZ2uvc997KPaeB6YjC8TkTuorUqtJ34/TaodROkmdkL7ib+3jabrib282/Lc70OIaCqzwNPABdm/nmCONLwMVI93mb22pKK8kER6WkB7u0NhbLoNozljelysvPoi86dU4EPEM+x9cTz8Lp2L+xeCWcTg+MHhxzQFiWJlgH3mNlOVW0k0X5CbEd5g4is6+G11pjZeOa77iv5FkLYp6rX+3U2RRxXORTc/+IsYDqE8HjBZhfQnCBbR0x8/cdhHVeDEMIBVf0KJQk1ETkOuFpVL17CwV+jr77lGWxmo+mWHhE5SrMfxQxJknxYRBLgKyGEjrxhUuR6VZjZIRF5hnjvqBETAE92ue9C/J74uUHtr6Ki4tikUgBUVJRzkM5Gwg2CSQqSBqo6liTJ2UmS/GmSJKcWjGu7BbiYaLz11JCO8VRmJb3jwMq5HD0lIv9Iq+Ff1qH5d3J+dWgL4Xq9DvCYiNxkZh0lXcysKSiq1+uISADeJiK/BtyfUxH9L5l9ICL/povjPEJMMhSZYzUYAd5rZoVfrCsSriZ/4XwcMTkEgKpuEJHCiqRPKpgPp+px8tsApoFn3JUeMwtmVnQP+F1m/QVGgT9s96Ie/N9KNBn8EvDhLo+7W8pUIutF5BxiAPsh4qzzHwP/ngJ/CfdbaLmePHh+rYhkFQCFbu2quiJJkrbma2a2VUTeRmz56HdeetGxrAK+DXzPzL6vqncVmFq+OfP3EeBXSkYeDpqHzezpsg3M7Hzgj47hCRaluD9KrgJARPaZWXpCwCEyk01UdVRVPykinyZen3epatE9bJIcc0Z/FrQkUD1hfTexJWuvmX2Tztq4KioqKgZGlQCoqChnit5H0bSrfGUl3WUV6tNE5C4RuVVErifHWCuEcDCEcGcI4bEhVf+hNRkyxhzeR8zsUTPLJkmyAUHTQtwXYp244PeMS5W/SOwHbkueqVwIoelPDk3vwaus3apM9gCf7SBRsVpELi3bIISwB7iW1oTCLpoD+hMocbkWkd3MT0/3KDnBsX/2W0XkCuB+Ebk5Y1CZJitvX9VBW8wK4DxmFXj/tvNDnn9E5LCbMGaZMLO8FoiWEWee0PwD4G4RuUNVS5Uz9Xq93bUxCE4xs9Ng5to6jYyU3pMEeff1tXTYjjMADovIFyjxi/GWlSto38pzTOL+KEXP370ichuzz9vHc56XxxG//8azbR1wSsH+DtCFf4mfwzuILW/vFpGrF5FvSEVFxTFClQCoqBgSHcjBv0FzNbtwQWdmr2d2gakMZmxQLzzHrLvyFHDA5etzgogEEbka2GFmU8SExEOZzbL928/RWztGt0yKyPND3P8uohN4gyngb9MbqGpNVTeq6seSJPkjD1jSTJnZ50SkSN6c5o2qen4bhccDxKrsd4k+Bo8T55HvBPDxea+nfGTXD+fJsGyEAjO1EMJRM3sQeI+ZPdDp8ZlZi7ojh1Gar99hV2nnqtVvmYjk+Srkvf7pIvJJMzuH2EJxy3APrRyfmLJJRNLn6TJaEzwbyFc0rKb9WLqBkPICaNf6shr4vKoO3Z9ggZKryPBg/34gAX6ZqGTKsp5mj5Ax4Ffz1CqekM6r9B+iRD0YQng5hPBUm0lBFRUVFUOh8gCoqCjnKL076f9Sm39/0v+c5X8vlEGLSNqVfBVxgTLUqnYBh8zsBuAWH5u0wyXwc0IIYVpVv0qs0J5ErBw3Vd3N7Hsi8sfEwGrK/z5XAeYwX2e/md0jIhuIC9IpINuXuhK4CTg39Z4/1fhHrzTtU9UbiRWusqBlGbGd5Fla1SqN/U0DT6vqc8QpAIcy1eFx4Nw276sj1cQQaDH7S1Ov16fp0kjTK8fH0ZyoyXvdSWYD/2E/h+cqWbjMzI7rcHrABmLCAGIh4qQkSZbV6/W5SNS14D4v/zrz4zFaE0RrzGws5z2uocDsEMBVIRPAnpwJGV0TQjicJMmtInJezjGm2WBm1yVJclm9Xl9KbvAND4Bc/L51kJykuyc819HaQrAqzw+oXq8fVNXttCoEpoaoxKuoqKjoiyoBUFFRzhEzO9zjGMCNJSZjAAfN7CIROZc43/4rdB5A/jpx5M+c4gH414kmb41FVC7eE/yHRCnqQTO7sl6v9x3s+ef5ov9pQUSeNbN3iMjrgL8TkXsZbmCe5v/p9Re9X/ckost4ALanK88hhClV/SLwGuAkM3vCxyemWUM0PKwRTQJ/l1QCIMWLRLO6mygOXGpEo7rzaWMq5d9Ji4xfRM6n3Bn/Rfro6XYvjOXE4HOf+xw04UqRyew17O7fuYmNPqjRvhJ8iJj0OCP192FS5IZ+hHgdHyVWO9OKwLV0nzhYl6mgl5Fde4y7YmpeEgAFTNKaIFqWM4YUCvwkVHUC+CjRm2XMzG4GPj6IgxORl3xff0aximRERN4O7FXV6wtaN45FambWq7KmRmsyCOCnfs/I4z7gnTSrQwbiO5MkyYSPmX0TsYXrduClJdI2UOgfUlFR0R9VAqCiopwjLuXrhdXE4Cc3wPEH+B7gMz3s+8Qej6lvvILVNnAys2UicglRrQAxETD0aq8f38P+Z87w5EhPbvZJkkCsIH2DGHy9SJTON8lD3QX8YmCFiOzPkabXSN3XRWSDqo5l3fz9WL9GDFZvoLgdbMTMLlPVh0MI7cwDm/D2g4vabPZUjqdDN5wA3Eg0s/uKqt6Zfa9eoWupfnpCYBiJoV9o8+8HzOwmYLmInGhmAxkB1i1m9ny9Xn9b3r+p6gXAt7rcZT+j5yYpSSYOGzObzvF5eLVhBNnhPloSAGa2HrhMRFYBiMi7GVACwK/hr5jZmSJyasmmI8BHgH9W1c8slap0H9N7AP57+i9eBHi5Xq8XqTeeJiZaP8xswu0HZS/gCfIziWNrn6jX67nPVC8Q3Mys0mMZ8EHm8XqZK8zs+B6LLxUVFW2oEgAVFeUcpveq1EpiMDcM1+pSdYHPQN5MNObaVq/XhzICrwyvlKUz+IUVRV8MbSAGdHuBbWUjrLxaXssbU7cY8UXO6cwaVynwRuCr2W39PReZ5k3TbFo5ZmaryDGYDCEcVtWPA/8rMUDIrbb4SMUPqep/7FS+7JX588xMixZwZrZPRP7aXbG7xl/jKuJYthpwOXEhvi3ntaZyjmOaggSAy4A3m9kVIvIPwF92OqqvXeXRxyg+A7wBmBCRrhIrPfA/5/3QvTGK2EZMPrUzNEzzmi623UFzG8RLzN20lRZ8vGCdeL+f8Akbu0Wk4wQAOdeYiGwi9Rma2biq1gboebFbRK4Bvk95tXQMuM7MjqjqlwfRhrDAqdE+EVfENNFv5Qj+mYrIq2ZWNqlk0sxuFJHvEIP6fZQo9HxixMeI96xREXlQVS/NKjR8u98ys4nU/UuJz4ljPgFQUVExPCoTwIqKckqNfNqwEjjeq7v9kq0OjFNQcXOjoj8mLgofEZG7kiSZD9PAJqWAu70XsYV4vA8RKycfLdpQVdcRx9ndqqqnJ0lyLCQya8Q2kPTff7eH/RzOjKybLguwQwhHzOxGYitAkTx4BHgbzaZY7VgNXORu5Lm4hPn5PqSsa4FzmH2OHe9/z3utf6I12J+kWMmyHLhBRH6fqJB4Z3aDJEnGyQmQRWRduwMPIUyFEPaGEHbOgSy7qAXj/y35nUKDRIoDj24UADto9kn40TwZQQIzaqwniQmkRkLu//Rxl2mOkpM0MrNJEcnrsV9Gap3larKBmT66o/wzxBaddom0FSJyK3DhYh8PKCKdSPx7ei40poAA97rB7RHgXhEpTACEEKjX64dDCM+FEP5DCOFzOedOmjPM7DKiAmuCGNTnXafLgRMyycu1lPhNVMwwtNG/FRXHAlUCoKKiBF+U/gO9jQIcBV4jIoNYbDUFKmY2wqy0vgkRWQO8hVkX5JNEZMsAjqFbDgPf95Fz02b205JtL2K2+j1hZpeoaks/saqOmNknidWTjwC3ikg3VcqFTDbgOs6r3E34jOqNqnpizpzyvR5YN4KUfSUz7AFw47VPAFcS1Sp5gdgJdDjmzBMyf0BUoBQxDXw7hNCPMdkJtDp9/1bBtrvcCyDNVImCZB3NCY/XZTfwfvfjsz9n+K7+3VJ0PGUBd418F/VpM/uX7A/9PCxKMv5D9gdm9grwBeAVM9sNPFFyLHOCu7FfTUwCPAt8PWezvXkjNEVkf14ri5nto/lzfmRIqqVPEttpSjcys2XArcAfuOpqUWJm48O874cQXjWzq0Tk18zsN4DbBqWa8MThmzN+GWvJGe1LfBZmr6uxgm2POQr8NjqlG/VORcWSY9E+ACoq5pBdxARAL9fLKWY2Rkl1xgPddxId9h/MMzIDmhbdnlT4deI4oywTNAdr48Cvqer9g1jE+MLxJGJ164UiabSb1t0pIkeBXxSRB0t221RdFpFlxIpi1uH/ZBE5k9nv4mQzO57WWfSLHjNb7r3D2ff2h2Z2q4iMAZ9Q1Rsb34HL+j9LVFSsAR4q6Vudwdst7nRp+tXE9oP0AnsbHSyokiSpicgZRGlr2fXyMnBvu/21YSLnNYqCgmdd5p0OhgvPGXezT1fk8vbb5LeQ/nmSJDWfIrCQ6bUtKO99raH4+245b/yc/KKqPubfy4IYhRZC2A78Tskmu/x+luVVEWl5DyKyg/g5ryN6P7Qb3dcTIYRXVPVqYBOzidQWvJK8CrjdzI76M2ExtlHVGHIBy6cmDHxygj/bttB8/CuAdapKRhE1IiJ5SpwlkQCg3EC2Hcd6m0tFRV9UCoCKivZsp/eHiZbJoL3Cex1wB/B5EblZVfPkfS9n/l4j+gC0BCZmNu3SxfS2G8ys7znV3ht9PnC3/7nJ+xRzCSHsM7O/AK70xXUR2WMbJefhLyKbM9LP6Tkc8Ten+MKvqfqjqqt9csQ48Xt9O9E7Ic0LwJuJgcydeftOkmQ0SZIVqjrh3ykAIYQdxOD9rUQJ7AEze4kog28bMIrIGjO72szKqnOTxOpvaQ+rqtZUdaykUrma1qCzKPh5Bcj2vP910euKyEZ6d6BeJiILSaJb9D7KWg+6vVeUrSUKEy0hhFdDCPvmU/7fJa+Qn6zYTX47yU5ioms/8F1iMnkohBC2icgNdCZ9HheRW4DfX+ztAAuBJElGVPWjSZL8UFXv0Ujutn5vzFMO5Y0NHqdD5dUxStmIy3YslntKRcW8UCkAKiras4PoBdDLw2icOG/9gYJ/3wCcRVxAjxOD62/R6pa/h5QpUep315FZkHov6i6aA+gTXHJY6t7vCYmRInNBMxsVkauYrdh/xMzuyTneGer1OnTfj1c0x/kQzQ/2PRQb4i12skoOgOMbjuLOWmC9qs700nswVdhY7wmb64CPmdmLIvJ+YpKr8fuHgGeAZ1zaPdmJcsS3vcEVAGW8CDxYFvSp6mqiKua3zWybqt6a0ys/QmvgmRuIumP6zcTpGatoo0Aws/8laxqYU9XPNRE0s5E+HcgHTV6w0Y5uPUNW+72hh5daPIQQJlX1G0R10gjEcZIi8lCel4Mra65R1duBA52ocQECyScAACAASURBVPrk62a2Griug9az1cRE3C+4amjPYhkt59LwhVTAOhG4pfGZu3v9b5Gj/BOR48lfe68hvqf0PWWE/FacQvwZfgJxqkyNOE72hW72sYDo5z76jwM7ioqKY5CFdAOtqFiQhBAmzSxbge+G3ymqBhADuHS1dBVwXI5x4BFaq0dryR8HuJ9oYpRebB5HSSVBVVHVjcDdZvZIkiT/Lq+y7+ZLJ2Z+9paS99cT7nHwczn/9CzRiKvBVhbW7PBBMkFG6lnQ41so+S1gHXAuUV56MvDBou8vhHCkw+B/zMw+Qo5ZXoZpvPe7ZF+jwAeIo6/OE5F/R/QUyPKzOUZgNZ+AkcdzwHvM7Aqi50ThMWTk/xDd+ptUDWa2z8wqoylmerIX/XrC74Mj/qdos68RW6+OAAdF5E4z+27Zfl3lMHRJcgjhqIh8SkQeo/MK6J8AdwEnuupmeAc4OHINOOeRt5BqLxKRzXR5Xzazf6D1O+sq+HeOA+4wsy8BXwK+oqpnLpLvNcu/6eN3F2NrS0XFnLHoH9gVFXOBiDzT6++a2SkUS2qzVcxRM3tNTgXxUM4YohHgfdkdevX+80RZ6sx+iX37RSwnOsFfKCJnici1ZnZh3obZypKZnUafrsRuCpZ+jRqwLOvwH0LYJSIfBB4F7jezmf73Y5BxYE3aCFBE9plZU6XRzFr6VJMkWauqWzypk2UFs7OqISaRepZaukT/QyJyM+1l848BX20j+R4Hfo/Zxe8I8Nt522WDTk8c5fbHhhCOhhCeqNfrnwghPFsSkNVo/TxqZMz06vX6ZF77yQKsTg4UEclLerxCexf6BY1fZ2cQjUt/TFRmteDTG95NlGz/Ygjh8nq9PuxJDh3j98NLiNdaJ0mAMeL7/htiK9pJi6AtYKSDKQBzhgf8aUbatEE14VMktuUoMLqZvNLgIuAsX0PUiGqVS1ickwN6bcMiz5SzoqJilmN2kVJRMWD+ttdfdMl20Yisg9kqoksEs9fmYVp9AAA2J0nSUmkIIewEbjazToPjFRm34XER+bUcFcA0GVMvby1YV7RjVR33YPT0om18PFaW5Xn+CWb2APBu4IP1en1xaFZ752dpDjz3iMhMG4eZHRSRnemFY5Ikx4nIl4D7gC+o6qbMPpeTCnDNbJweEwBJktSAC4BraS/XfIXoVt4uKBmljcmVB2tdBwCqelySJCflTE8YJMvMrHCxraprVfVPVPVDqtpPj2tbVHUVvVURi2i5/gF81ORi77ndRHTIP9MDuouTJCn8fty/YOAmcQNiH/Ga3NbF70wQJ6t8A7hZVbPeIguJUZqTmPNNN9dYS2XaE7t9G2Gq6oSZ5amwRjw5utjoVt02g4hUUwAqKkpYjDeEior5YKf/6SUjvxo4RVWfy6l87haRvTT3628gXpszFTXvYf4xUd6friyMAx9Q1f+YU9H8mojsNrMPAj8VkS+XHWSOhHezVzGyD9KDND+YVxMTHE3BuEsONwGfJfYjoqpPApeGELLtDC8RZelpRsi5R3kfdlfZfQ/4NhCDs10ismcBGo/lVRE3EL/joxCr2Kp6H9FXoiYiu0hJ2b0af5WZnenf50rgIlW9JuX2vYcYIPRlCumf6UfN7CpisqZwWzM7ClwrIk910Gc8YmZr0vvLqebk+SO0O94LgTvchfsZVX2Hj37LUjOzDR32s28HTs78bLSo/9oD8u8Q535PA7+RJMmlBZM/BsE4Bc95M3u/qu4jXkuHG//1lqdfLnn/edfNTjN7JeNPsWjwhNIbzWxz6n0f7yNV+2n/Ghh+jBuALf5ZP53nOwDxeZEkyTYRuQi4h4KRsQWsJ17XH1HVF4CHiMairwJ7F8jUgDG/jsuY1/ackmthO/GzTCfc9xQErN16cWzxczbNtJm95N5AuajqGcA7gH8mtri8Mt9+EJ5c7lW1cJRFrkiqqBg2VQKgoqIDzGy/iPSaABgBfoMYtGQDmb3A8zQHEesKsvXbiGOJ0gmAmoi8gfjQ3p3e2BMCT/mfdhzwReVMm4CZnZCzyJomLl7SVeUJMztBVUcySYhR4P3E4L9hmHWGiJynqp/IBOB/08Ex9sN7fa7zSqIJ3btZWOaB08B/zfn5qpxz4X7gtcRzJtvqMQGsTSVzamZ2qr/vxgLzIKlkg48162qx7MH/R4hmY22rXyLyTeDeDpMu036MjSr9tIj8U3oDM6sV9JyPULBo9OkJjaTH6W6Wllt1ywl+c5NRZravS+O7U4lqmUabwAYPFHZ3s5NBICLnAqf6ve0g8d5yQFUPAGd2s68QAm5091maK7OHWRy9uCPAv858lwutarrWzL4hIicSnyNXAV8s2rher+NJgEvN7Asisq6L16r5dX06cJqfI7uA3aq6G/gH4rVzwP87SkwKj5vZOuI1uxd4MoRQajzbI+3k9dPAfxvC63aMmRW97/3E5/WfED+3aWCrmeVNy/hXXb5s3j3xkIj8p6J7r6uQ7iAm8afM7BdF5HLm2VvHJ6n0qpA6yLHrDVRRMRAW0sOtomLB4jOeXyAujHu5bs4gVsqbHkpe2b/JK7Yb8MCgIKjYQ0wCZKs5Cpyjqp/ro6p9EPgRcf77KDRJ+7PeAy0LGxF5jZmN0VzFXk6cajCS2m6UaJj0KVIZejN7EXhaRLakfn+176Mvma2PSryxYeLmr3EB8Jf97LcIM5vu0RCtJVAys/U5bRD7gUvddb2tSZ+fV8uZTQDs9QV9Y5OX6GKx5FXsW4ELzGysTeV/SkTuBa7rwgTtiIgEvPplZkicFZ9+T2PkBPop1UMLIpJ2wRpxo7+XCo4h+/1NmFleoP6T7C/6CM7c69DM1pNSS5hZw5wzu99B0e5etTJrbkg89l7O3wfcpPIyYvV8hDj6bkFU0DsgfT+iEfBmN/Lk1wrggLv85+L3nU+b2RYR2UH8XPL6vDvlxMY57MHR+yhJAADU6/UpVX1KRN5MTBaeTPffbc2TVKuIydxposHslP//dCMh5/9tnHNTwN4kSa4WkYeLJsv0SNvKuJkNzHRRVY8nvvdxotJtW+b9tCgxvC0mj6NEv52/A36T6Fb/5Xq93rJ9yWSNny3Y9zZapwW9QsmUHuAcZgsbIyLyduL9vWxsL6q6lqhcnCKqIw8MWDUwQe/tSy2tlRUVFc1UHgAVFR3ggfWP6V1WuJxWqTAwU0W8mDh67SjwmbzX8WN4KGcXjUp74WLfXa3PUdWPqeppOftGRJ4gs5Axs6ziYRr4+5yXWE/rw3qUHG8AM9tI5t4jIvvcRC7dGrCHNrPiO2RzTk/2awaw3zwOiUivhmAtrvQe6DYtdkMIhBCO1uv1Qx0G1ctI9cuHECZFJB2U3dfJws0d0tcDtwPvJfpElP6OiLwIXB1C6EZtcZTU4tNfIyuPrVF8vhc919Kf7xFKpgBk/DAaAWHLfkXkBTJBoogcLvC0QETG0vsRkRUiMkwfgF48AHpaF4QQJuv1+jdF5C0i8j7g/WZ2TUGbxUJjCvgv+H3Xz7kfZVszfMLEDcQ++RtLJk4AfMDMzvfg+TSiEVs/3hMHM0FtXsW4BX9ubAMa5qn90vDfaHiHLPNzeNzvVw21zBiwTkRuIypfBkk7d/hpBiQB94Tnl4iTEr5AfAZvyWyWTSROkuOVATP378MhhG+GEC4NIXy8yMhWRIp64HOTnCGE3bSON72nzCjXzLKeQ412uUJUdbWZfQP4IfBXRG+XgXoyePthr/s86sq2ioqKAqoEQEVF5zxPf9Xo93iPdhP1eh3iiLK3Ep2lb6R5hF+aZwqkgpuB89KO8Q28F/8C4iLmRuBbqnpKzj5eJkoTZx6cIvIzmW2mzWwXrRXO9Z1IwX2fWcPBxiL1SeB3iJWtS4ArGUwCYFmBpHsYHKUzyXNTQsID8CZpPsTWEwbTy5pVjdxDPOe+SFS2lOJVz7OIi9+3t9veq+DPAB/sMvgHmDSz7xBbNQ4Sk0LZKRxH6P5a/AKz382zlLSAdNBf3OBV4Daaz9Pt5ARnbqiZrdyNkWNm6OPYVidJoqp6Qt59o0PGmOPnvLvkPx5C+G69Xu8oSJ1v/P7zGPAA8Xx7ysy+mrPpecCHidL4D5nZ+Xn7U9XVwOtS1fAaUanVT5C0XUQeJAaXe4lJiI7woPMlokP8n5Oj4hoia90nZGC4GqeMaREpTPB1yXuJCZzGd7kWuDyzzSPMqqimgCcYjAS9l4TRDcAVZvYM8BdAO++ff21m2XtEO8+IC4ifSUOJ9U7iNTEwXOXSU8LM2y+O1elAFRUDoWoBqKjokBDCATdFWtfjLjYSe+dbyq2+AD1A+6DmgIg8Tutc9BpwuZk9T2tlc5ToQdBwVl8NXJ4kyfZ6vT6zSHHjqFtE5P8GXu9Vzx9mjhM3Dst6Eeymi15fEdlIc7W/8Rm8QkxCDJs8FcNcklfZafTTzlSERWS6yB3akz0nAPtSFZ4j5C98mqrMIYTnifLTtngF7AriOVfqzp867heAS0IIpTLSPDwZ8qyqvodYidrula0Z/Nzstt3lfqJ0++eICZC+F4ghhClV/TLx3H8b8Tu8qUDu3KiKtsXMNorI7SJyOvGauJwYoM4r/rkPc4LCvBFC2KuqFxNlzfvr9Xrevfg4Zr/DMeAXCna3jNYq7Sp6mFyROr4Dqnq1mf2N+9E82cM+9qvqdcDfmNn13lIw9ASRiJymqssHNbJV4qScdgyqBeCXaV0rb0iSZFnq+bmV6MnwJuI9/DYGo0Do2gTPFTef8D+dsDJH3ZRN/M+gqmNm9juZ3xkh3qsHoTBpsMLMJrr0WAHAPU0WzGjOioqFSJUAqKjojoeI2e9eFk0rgS2quq1dr74HdzVgKiPPPgJ8j1iJyi4OVETOVdXPZPY/TWsV+cS8Huh6vb5XVf8cuNMfvHmL4O3EJMaZmZ81JQC8F36KfPO0jQx2sVCIme3OBIvTXh1ZaOwjVvbWpX42krcAUtUVwPXE8+AVVX1rCGFfCGFSVfMUA0WBSiE+UupU4BqihLeT4GXKzJ4GrqjX610H/2k8edDXPjL7258kyZ/7wnWy5BpsqdK6d0Vu8B5COOJJgId9v0WVvxE6NLUSkSuIviGNJE+vCYCGJDvLEWKr0U8AfOrBq8Sk3CbgOnJkxv7ZdetMvmhwh/tCzwIze1RE3kW8Rl8Rke8UbLqc9kZ1wMy9vnHOHSp7NngirC/vEr9HfFdEXiKqeS73Yx3menCMmDwZSALAzNa2CQynySSYB8yIe+Qc4v9v7/6D7Lzu+o5/vtud7VbsCKGormIUVSOM4wmu7iEE1yTGNiYEE4JxSpo4MYlxUjAhTZ3UZEzqmoxLQ2pCCMGY/DAhzi/HSZw0hDQY4zFGMUYYY841IgjjGmGEWbYaVaMKdUez3W//OOdqn/vc57n3uT92V2u9XzOaka6evc+z9+c53/M936+6AoH35LonxyaxH77cDaWgSQBkoBDCFlV3g+kX6N0xZEHJoYUQ5O5njbI9Kgcp+9bnAEAAABjWo3lCOcoX8Kyk75f0KdVUH5dOtXL7UaWVh98LIdzf2esdY1Sr1dqbi0qV0/g3KQ3mvqhCenMenPyZux8rpDZvretVnlcva1NEY4zPhBA+qJwC6O6LZvZ7KgUZ8uT/kCoyJsxstfbg9zCzx5X2wHY6HBzIBb5ON/NKq73F5/VpVa8kXayUmrpFaWD9aqXCilLq6LBUSD+Whlh5zBOSIOk6M7tKw6Utf9HM3j4o7T8XkLpQKXMkDlEgcCxVhbYq7Ky4bZO717ZNzJO2QXvdZ9VwUijpcnUHGXePuIJat+r8hKQ7YoxVk90HWq3Wd5jZG6ru8DSrjL+m2u12DCG8Vum1+0isn+XNqkH6cn6vXSnp9Tlg+oUQQtNuGSPLl/2UpP/WarUeMLPXKLVhHaXLzUC5OOA5Sp/DY8lbaZqsjK/mCnAnQH9K/gwbq2BtWZ8gx6jF8bq4+3Tpe6Kj3wLHbM35J1nrY9rM/uWA66iUxx3rneEHnPbO2C9yYEQLOb151Aj8hbmwXr8vyyuUCq119ta9K4RwVyetuN1uL4QQflO9AQApDeDeGEL4+dIg8r583Z1V+6VyZfUquX7AtLsv5VoFHV+RdKOkq81sr6R7KgatJ5UmsLsq7npnCGGuro/1JOUVrxuV0jK3KbUqqxyo5d/3LEnnuvshM1uQdKLpak4OshzXkD3q83Uutlqt3zSzK7XSHup+d++a9OUA0R51D4K/vfD3f6hIj9816Px5n/8upYKSr1KaCDcdgC0qpdjf3GDyf45S0agXK62gvUkjpDNvUAMfzxDCLvUGXRbdfZJFrY6oz2qsVfck37BCCOe6+/VK2Q37zOy9oxYnjDF2Aor9zKnZJPUcd/+gmZ1lZnL3S5XqU0xq//pA7Xb7kRDC45I+plTn42ql75FNmtAYMU9kJ7LVIK/+972uHAAd+zHMRR6bBu2Guc/Xufu3m9mfu/td7Xa757WYg6R1gduB788cXJqWtFwXYM0r7FUB3n6P7wn1ZhSeVKopMxHuPiPpnFHS/5W2fqzZ+wfYqAgAAEOIMR4LIXxNadVmlCj8FjN7vVJBwTotrXwp71SaLM2EEH6j8EX+KaUieT2Dk9zv/D4VirvlvZ9vVWo/tMPd7zWzQW1+Nkl6ed6PvFfSg4X7O6mUitovHXVR0gFVFwfaqpRm+GS/a5iUGOMDIYTvkTQXY+w3eHqhpE9KekGeyN+ptP+90Qp1rjzcZKI2XbWia2b3SHqlu19gqRXeh2tWrf9Z6d/FYw7mfxcHj7WrkXk7wYslvVapJdRQ+07d/biZvVfSLzUM6Lw6n0f5XDeHEB4eJmXTzE66+4mKAeKy+kxsc8rrjLsfabfbk2wT1nkfHumzetsoAyBn1JRvvq/dbk8sAJDPMcm2bKe7282sE/y8WOm5KBdym6Qtajbh7XQJkHSq9eoFWuMJTN76sF/S/hDCryl9HlyilDV1rlJgcNzx4tBB0Sp561rfazGzxX5tB3MQ9cVK368H3X1fzedBp6PBxLj7G8zstvweXzKz5ynVDyjrV8Czb4HBEMKcVrII/y6E8LlyHZV8LbNVNT1yBf468zkL8kWF2+5Tw64UTeQAT10HhL5y8OfgpK4FeLYiAAAMb69SinxVqnATLw8h7Iwx1g3y/nepl3yn9dTREEJnpX1BKdX/36m3pd4Od782hLC/NKk6oNQKarOZLQzoYS2lbIHbzGy7pAMhhJfEGHtWzgtZAsvtdrs4+Tnp7n9WUwdgq9Je4jUJAEhSnmzXTg5brdac0t7nF+Sb5pQe348rFXmapGmlyWDX9eRshbeY2dmSDtcEK5aU9m4f0cr+zWJ6xkF3P1maRPakr7darSkz26OUGbFHQ6505b2Wh8zs3ZLuzJOIJr6r9O+zld5LB4o3hhCm3H2Pmb1QaXLyaGFyvWhm/7O81SFPbMstuTr3d66kWyVtN7OPhhDubLr1IP+uVffZ2a7zJqWAywMhhJtr7ndK1YGYrvdvrsOxoJV6ActK7bZGsU3VgcqjmkyV8tNezqgotz69NISwterzbMB9Sel5HlRHomryMu/upyaleYW2qhDnqqThN5Xfxw+EEB7USqB2p1KRt+/MK/B7tJIGP5NTyfvd7ZSq95qP4mwNHrvWBlDy58oVkt6bP2efMbMb83frhC6x9tyz7v7awk3T6n1tdoyUMdFqtabc/XU5KDun9H3xzSGEm5pm3JlZbXZMrnnyAaVtSrNK2YyfdPdJZvPNaHAngjpLKrVmBdCLAAAwpBjj/twNYKQAQC7s86YQQl218PuUCrwVV2K3K03UFiQ9mCeKH1dK2dxV+vlpM/tRSV9QIbU6D26adBqQ0hf792mlGNAupayHqpZCl0t6iZn9ZR5ELebzLefHqacOgLtvs/oex+sidybYU7p5VmlFrmkAYEljVp+OMS6ofw2GTh2Ix5SCNPPqLqj4hKU+9MUBd9fgO09krpR0uxpW9i/KAYZ9kq7vsw+6zq7SvzflazhQuj2Y2R8qTTCeMbOrQwgP5pZmy7mQ2ZtUeB+a2SN1++Td/S15e4UkbXP3e9UglTbfb+W+41w87zatTNYvkPTnShk6ZZ3+6WUvUW+BvzuUPgNm3X2fmY0agPpGVXzPm9nyau8zP41UrRhvUgqsNg4A5An7hUoZQduVMrPuqTn8GytuO1HadnWWqt9739z0mprIGT6dCfv+/PkyUKGuxWGlAFzXazRnveyQdI2Z/ZT61xmZkvQtw199L3ff2WALQL/tHeeY2S1a2ca3W9KPuPukWvf1u64LKuoH1b0Pz3H3mZrASm3w3szOVXqNdj6Tpt39RZba6pUn6XXfV32/w2KMD4UQvlcpm2a/pPtLwf+x5DHS0B0QJMnM5ocN7AFnojXtDww8i9RVfx7IzGbc/UrVBxCeyCn3ZTvc/aac3ielSvx1E4M5SW/Nq9qj2KTuOgezkr6vcG5JpwaBt0n6z0rbC4ppgVIaHPRsNcgTql15UL3qQggKIajVavU7bJuq90M+b4hTHVODQWTuuzzy3tK8Z/RmSTcprT6fmsjmoNJDpR8pF3ubdvebNMLkX6nH9q9KukYVLS0bKL/uN6n6sXil8qQir9RdqO7vrMeVJmGdQe1RpWyNSmZ2fuGfuzXcFp5ZVVTwN7OLKm7//hxgqbqPqt+zqqr+ryvV2PiQUnrwaTOgNbOqye1py92r3o+LGr4i/XZ3f7e7d3qg31z+PCyoywA4lSWTe9k3KrCZP7vODSH8TAjhR3MhvIFardYWpeyxT+c/H276s4PEGA/n4N/H1GdCWrB53HOHEGRm36zBi1f9AnuXayXLq+PEuFtiOt8xxT/l/8+ZE+VMiKHrbbj7X/X570tVyiIxsxOqntQf14idGWKMj8QYfzHGeO+ki7jmrK9RVWaAAehGAAAYzV6N0WbIzPa4+3VV/5e/TG929540RjO72N3fFkKYySn87y6mlZZcZmZX9ZtkhxB2hRAuLOxh7qjqWX6Ru59fum2PViYwO5QmP6cGZ/kaP6zqwcdztAZZSPl6Lnb3t5nZy3IRpipz7l41QB1m0NooAyCvYI2VEhtj3Bdj/PkY41crFuFv1cpAaFnS7xT/091fOsIg66RSRskPxRhviDEeHHbxP4Qwo940+J6V8TxRuLR03Heq8J0VY1x2919W2lLwb5X2LH+xz+mL2R1TeaVsXN9ZcdvZVR0DctCnUTeGPLn6lRjjm9vt9sOjDLDzBKTuvT87YDJW93NTGnFv7nppt9vR3csBsEdH6KhwvpldWliR3aFUM6RK1WfMcRU+G3IQtOf14O7/UPGz5ygFnd+jNOG+pclk2swul/TvlT6jtyvV3qjs7jCGRdWvYhdtcfdhOopUmVODWgK5eGsld79Whdd3Dsr88RBbmHrk99oupefnDyT9tHo/57YofUaVn/M/qbnbucI2wFPyNqfKD95ct+d6dX+vLit9F/RkRbTb7Xmt4Ta8IfyrMX52Yq1jgWcztgAAozks6QGN0Y/XzN4QQvh0TQr1E2b2VUk/oe7B+ExOe75XqSXh42Z2v1aKqhXNKVV0/4oqCvSEEHa4+2dyKv59IYR3FtJDF9Wbhn62mV2s7gKGc4Xrm8opjlvUPdh4QClgclnp/k6q2cCxVh7wzA5I+bs8V9reobSS+o68/7vr3O6+taogUul8W5SK2G2T9HCM8cHSIUtq8DvltliVn7+tVuuiXGDp/hjjqKsZByS9Vanmw7xSj/pTzKxyibqPZyR9IFesHqdCfNPOAueqwUA/p53u14BVnxDC2eodkDdujTikTbm6dtdr0lZacK6V2qKD7n6xmX0whFC3klj1eXJaCmn2td3dH2q325X7kM3snZLe4+7nWOqG8oFhz5NTz4s3zSp9/ldma1XcttBkldlKHRg6rQILqePTkl7l7p/W4G4Eryn9e0apyGxjOdBwlVKg7Xck3Ttij/Ut+T3QaAtCjTl339KgOnxVEEUhhO0qZdzk7VJjVbDPqfo3K9UDmVHaCrQg6ROFw5bVGxxeUm92Vsf2qi0AZvakaroIufv55a11uVjqn/QJIv5pvo7i99F6FwgtLzQMoy6gAqCADABgNCckfV7jDWa2KaWR9gzS82rE7aouZrRLqTXgrKV2b53aAFUuVBqUVLnOzC5UGqy+wd3fWFi9P55XzYqT2SlJryllFHRNdvP9lSdux5XS1O/SSrr205J+391HTh0MIbxN0t9I+utWq/XRPDkvH7Nd0g2FQdHW3A6sZ098npD3y5bYrPRY3ybp5yR9IYTwutLj0ajGQj5XzxaQEMLFZvbbkt6b77+8paKRPNh7UNI17n6jetNMv6nB3Swpraa8S6nN4C+OOfmXqifds+rNhtil3snrIY0eMDpLvc9tOQ14FD3X4+5nq3oCuKYr5+5elcUjScqV539M6XXc88fdy7UwTjshhE0hhPdI+prS6vjv5kBPla9I+g4z+yZ3/16NsHWlYvK+rPqOH+Xg3rKkf2xYd6EczNqmVI+l+N7ZbWY/0u9OcnC0aiI1bBr+TUo1KX5CqUPKVaX/n1ez9+WcKrbRDGmzmTXZOlW3CrxbvZ9B/QKIy2rwu5nZtLu/uHDf00pdVYqOSfp9db9mDqm+YGFPgNzdOwHPyu97M+v5fDWzeaUFgzqfU28WwNf6HL+qQgi7Nfpn5TNVmZMAehEAAEaQF+0fVm/hsmFMufvlkl5Xc4797n5Xzc++VNKV+ToeVaFFX/kckq7LvdfLioPDaTN7pfIALca4bGZ/qVLRIHc/393PK9w0X5rEb1Za/Sj+HsotiN6qFAh4s6Rr3f3BdrtYvL65XNn77cr79s3s1aquqXCOStWEc+p3OVgwLem5Nafr7CHeJekVWqkCvlXS96swoB4iJX5apcFwDr5cnW+fVhqs/lBxS8Uw8uO+1G63l4ZN1c/7pn9B0o9I+q8xxoUmk5c8KXtdUTl4IQAAFg5JREFUCOG9IYSX5ZT/oroV6fJNx9S9r3hJqdPBqAGAHer9vhv2+29LxXPxt+WDcr2CnuctbwFoJISwM4TwsyGE94cQXjrqa6CBqao/DVZYJy6EsLni9VLL3XcqZePMKWVGBUlXVB0bY1yOMS7GGE+02+2TI1Z7f0rd9T2Oq74GSzkTYdHdy5O246oOIJQnMDOqbs15Vb/HK7dyGzvLxd0v1UpAY5Ok7y7+f4zxmJoVPp3IFoCq7TUli6pfwT6cJ9FF/73PZ9txdx+1/sZMcZtGfs3tVffz+3XVBwAOWGor23U9kj7eZ/vKE+p97T0QY+xX1f+IpHcUJs4HlLL21stODdmKtuCQmY1U0wA40xAAAEaUW+rcpjGqvueU85vqVnrN7JOqDjLMKqWyvyAPwN6v3i/+jl2S3tJqtcorP10DD3d/kboj7/tU2jqQV65f22q1Op8dT1WsjL2y6iJijEdijJ+LMX4oxvjAmH3NL1L3ZHJOpYl+3pe5U72F7mbVW+1/SvWrU51J3h71Zjeco95JbZN+yFUBhy3uvrt0zBWaXPusol19/u9kbiF1S4zxwJDV4m+SdIe7/0dJn3H3V5f+vyqtf1G9WRMH1P04HnL3r4/Rpmu6Isgw7Pv2n6t3ZXeveoMS05J+SiP2PQ8hnCXpC+5+s6T/IOmzSgG/UazGd/xU4f0/thDCltxW7C8k/VUI4afz6nVfOZC3q3DTrKTnT+q6KuxXymI6opSCfbe719WB+Xyx4J/SZG5f6Zh59aZyP6HeomzHVT1J3JmzTeocUnXV97/p8zM9cpZZ+T6GllP3R53YdTTJADiimu9Cd3/SzIqT20PqM9mNMS6Z2RH1vsdPqiYNv+CwegMRB9z9HUoB+68qFWisS+d/SKmmybF8/gWlDLT7q47PFpTqEBzMf39QKZtskHuV6hNcIukHtE5t9PJ39nka/TvvqTECNsAZhQAAMJ77JT0y5n2cpZTSXzWYe0qp1VTVikZQ2uOvGOM+lfZ5F0xL+je5AvEp7t6V5pcLDp0KRMQYn1Lv3sgpM7vYzLbnY46olF7u7nvyJGY1PV+l1S13ryouV7XyK3cfptd2Z/BXNbk4od7n5n+pYVGsUiGvE2ZWHrhu1wireCGE6VartSeEcFmr1ap6XfVLxT3m7o92WlTm+9o9aFKWt0i8WmkP/JSkrWZWToOt/M4przjHGOcl/VbhpofNbKLVnSeUKrpf1YPlze7elcaaJxJNvFzSnsKWlK1KmRhDyUXmRu400cckUrmLrlJKLz9bKWB3g0pVzGucr+7X00lJfz/B6+qSV11vVspiulbSz/VpfXa3md2SW8vdI+nGGGNXIDd/dn62cNOy0laFrgl2zsb5Q/VmC+wr1wsoytfWEzFz92H37xc73hx399+pPbKPnJ6+taZDRlNVtTzKytlDp+TH5H1K79vjStvsBhXz/Yx6gzJHc+D9lIrP7j8uB09jjMvtdvvLMcbviTH+YK6kX3nSdru9pNQB5Dp3v0HS683sF/oVBM339RGl2g/XuPtrYowDi/zlTLGDMca9ubjrerUInXH352v4bSpSrqfQbrdXtZUj8GxBEUBgPMckfTAX3xknvfFl7n5zCOHtxWrEMcaTIYSPKw2Sy4PiKUk/2Wq1Pt9utx9RGsxcrOpU+B2SfjyE8Gjnyz0XDzyuwmA+f/kW3aE8qSvcdr7S/uln8r/3qbCinld5LlB3b/pJ+8fyDTWrS5WTZzMrT/6WlQpHLas+MFp1X0cqBtSN6kK4+1yepC1KqWNCCOG33P0VhQKBUfWZHf283Mxud/dNZhZDCNfGGJtOeJfM7EQIQe5+gaT3mNl57r4QQrjW3WPN1o3z1Zu6WR6s1xW8qvLLSiufWyXdnTNuRvWkpR7sp55DMztYc2zd4Pfv1RvsOerut1nqK158/z9hZl0TvlxT44lS94HlipZePfUKKrpvDOTu03VFLd19OU9YOueZUfNA02x+3Y490M5t9L5L3QP+szR4kidJ5XaExzVmMbdBcip1XaC1eNxCCOGXzOwj7r5UMTns+A2l9/8lSq/121V6/bXb7eUQwp2SnufuL8/BtYckvadBd4g73P2yTsBWKbtn2DoeH8nX9t2SvmZmVfvJn1azlqI7KjJxhlHXOrfomOprM0gpYP99Sq+5hQbV/x9VCkq9K59/UdIXSsecVApYnp/vd1H99903koNEdw/5M4saf1FivWzOBXBHcUKpoCGABggAAGOIMS63Wq0vK63QXTnGXc2Y2Rsl/VEI4RPFCHyM8ckQwl2Sfrbi5+bM7MYQwnVKFaG/IuknVb3f+RVKA5iD+X6PhhA+J+mNnYPK6ZW5y8CX1V34aau6U/T+wN3f2Jm05ontHq1uAODruR1ScSXyOaVjllXTY7mcuhtjXAohPO7uR/qkmP5FxW2HLfVYLmq00psDRuWVji8qtbS7TGlC82mNFgC4WtKOvLJ+mVK2yNPSqUlXkxWWWTO7Jv98Z2/7LWZ2rSp+x/y8980qc/eFpvvL8wrbnY0OHuyQUsr17nwdT/eZCM0rDeiLE+ITkg5VrOgthRA+ojTgf61SEOCApA+qd4J8yMzucPdbChPzg5LuKx7k7vPltGszG1TtfShm9nVJt+ZCgVIaeD9HK+/ty7U6W0+65Pfw0+quQn5Ag9OrJenPSv9+RtJjE7y8seQMmr6fBbma/q/nP/2OO9JqtW5Qau85M0Qw72Eze4u7vyYHAR5TSj1vLAfe7sl/6jT9jHqu0nfRqCvM39LgmNotAFL6zlazbVqnjm+1Wp/KGUgvy+/PL5WOWQoh/Go+7w8oFbgdpz7QGSlvExm1AOmiBnSDAbCCAAAwpna7fSyEcLtS6u44RZdmlKpwHw0hfLk02fi0u19l1b3LX6Y0ub9TacX+Varef7xFKUPgYPF+JV3m7rvyxKxrRSmvXH1UaUW/sz99Qd2r3HvN7KHcWmwq/0zxHKvhfjN72N0vMjO5+zEz+4PiATFGhRAWVMpykHTEzJ5Rr315n+4rSrd3HpMDpftalPSXFatwTVfYtqi00pmDMtco9Rc/LGn/KD3g1bsSf56kL+e/z+XMgEH3sUmlNpe5Fdo2VUxs8gp72cnSMfNKWQDFQpLH1fwxG0l+XN8q6Ya8+v0BrWSwlB129y8pbZspZmI8VHPfJ0IIv660MjyjNPE/Vk7tbbfbJ0MIH8mBhx9Wen4/mifjp1hq/7lfKatmWum99llN1uOS7iqnsOeicrOS3inpZyZ8zh7tdnsphPBJpc+wFyilWt+qZp8fDyvVYHiRpJPu/sl2uz1Ke7oNIT9XjSeu0qkMsi/lfe+zSq/LoR6j3OVki1Jwa1nNVs3r9KtZ0MR5gw+p3JY1lpyO/6jqiz4qxngkhPArkj4l6Wj+GQzBzF6o7kyqYTytdapdAGxEBACAydirNMF61Zj3s0PS+9x9Xim1vuPJXJjt/erdfzsn6WZ3v6/dbscQwock/Sf1vr+nKiooPyjp7XlCNKvU5/mUPIm5P0+ebs3Xd48K/adjjAdDCDeY2btyleffLa+QTFqedF1jZpfnXsn7VT04+7rS5O2iwm2Pq2KPaIzxcAjhnUqPw4uVJsAH3L3T5/uApDvd/SfyftYTqu7DfVj9txJ0VGUAKMa4oPHTR8u/31ATh2wqp5GfuiGv8Nf9Xo8rBQa2lm47Ja+mvS+/ljtBise0Biu3McavqsHqZ4xxqdVqvT2n8F8kacHd39Nut2v3CucgzcDHOGc13K0+ab35dXi10tabb5D0e4XX4KQsV+3zzavWJ0MIo7XnGEGM8YlWq/VKM7tYKcuiMtBS8XNP5WDZpUqP/YOrd5UbV36eR66M7u67zewOpffCcUm/qlQLoahpUGFXg8BjP03awy30qZK/qvLnwDitgc903zvGz+4dMVgOnJEIAACTcVLSh5UmjuOucuw2s1tDCG+W9PXczm05hHC30n7ZH1PvJGy3mV0p6dckfUzShe7+0lJK9onyvuR8v19W6gM8rfr+yfdKeiKn6B3MexOL9/NYCOHHLfVDPtwpILeacqG4Owcc9rTSaub7lLoEHFFKz64bIO6X9HqtVPx/rFMvIMZ4tNVq3WJmx9z9RWb2m+oO0hTPOZC7N03FH5q7/w+tZKQcLhXQG+e8tQGAPHH9ilIF/Bmlx/j3y8eZ2d1KhQZfYmb/IOlzY+7vn7h2u/1MCOHnJG1z9xNmtqaFpXLBuP+yludcT+12+xkNuddZUqe96J2Tvh6sMLOrlIIsUgravS2E8MEYYzGDpmkGT5M6AZVardYmd98+IIAwVrAD6ycXkb1g4IHVliV9beBRAE4hAABMQE43f0hpovzGQcc3cLGkj7n7m5T3tcUYj+cV6m1Kk7tyn/EflPRrMcaDrVbrOqWCUi/Lxx1XKjjV0/IorxD13TuXj+lbTTivXJ9W8nU/FEK4RCkwc7zfdeaMh3nVrOa22+3DSq3u+p1zMYRwTAP2UOc99eO2xaq777uVJuGXKFXxLj6/m0u1E8rq+o5LaaDVb//uuyT9taRvVcomua98QJ7sfy7/OW01XdUHnq1yvZAfLN28SemzrRgAaBrw3a4RawCY2TkanFW1pFTMFRvPCzX64skh1S9eAKhAAACYkDzxu03VK/SjuMDM3p8zAZ7Mk9MFSde7+5KkKwp7lFUsRtdutw/mn3up0qDrgKT712Jl/nSU96wOavc0SYfUrIhak6rWQ8vBog8p7Uc9PmRbpxl332xmSxUr30fUp/p7TnH/leGvGGtsSwhhc7mVGVBynsbPaCvbqdE+i3dqwPdq7rhQV9sDp6lWqzWltMVk1MKjne1nABoiAABMVlRqX/Y2TSYI8FKlQn1vlvRYDgIcDCG8RtLrJP2Qu59rZgvu/u6uC0mVon9jAteA4T2tQmvEPr51tS4gT/qrJnhb1KCPey6cd5u778mrb8tKhddOu0wPDCd3bJjTaK38ZrVKW1dw2jlfKeOsi7uX0+z/doj73K4RAgC5FkHf79TcPeNZWwjyWewspdaMQ89JctDnj0QAABgKAQBg8j4r6QpJ50zo/i6QdHsI4foY4yPSqfTkT4QQvmhmO9z9sJk1aZ2FtdF0YrV78CETN6v+3SqWOxX93X2vmb1J0rVKqf0fodDSs8J5knapvhNCP5s1eqVubBCtVmtG0repIthTzgxydw1R3O/FSoHExkII05JaGpwBMJ3bHWINhRC2a7TV+1mlzI5LlLp5jOKopEeHzHIDznhjlWMF0CuEIKVCaB/QZINsT0m6QVK5RSBOMyGEWyT9bINDH5P0r9dqUp1fm1cptXbcVHPY05J+OOZ0kxCC3H3KzJbLre2eLfIEY7Mmk7XT1Kzqn4NJeKHSZ1BVS1BJiu7+WjN7UtJyzgro1KW4Xul1UuWou9+iVE9kJnfEOFPNKGXTrOXrpmhOqTL+apz/25S62lRlezzi7g+a2f+R9Dx3f5WZNZ0AHlNqqTlMsb6zlFLEm2SeHFXqCLMqmUruflZuhXo62qYxCi2OYdzX3zg//6TSdygZAMAQCAAAqyCEsEXSb0u6cMJ3/YxSC6a7h+3nfCYKIWxS2sM6iUDMrNKq6SBzkt6uNAEb5IRSe8UDmnDv6hrT7n6tmb28zzFHJX1C0t+twfWsl3+h7hWrGUlb3H3NJnJmtkmru5K+U4NX5aJSC9NjSuneu5QmW51ibXWOK30WzegM3g7g7rNmttaBIwAr9sYYL1nviwA2GgIAwCpptVqXmtkn1ax38TBOKkW9H9doe3hPR+dqZZK+SWnyMolJe7++9atyX3m1fJhV0aX8Z024+8ygvbTuvpz30z5bTfJ1sdF1nmceDwAbzV0xxqvX+yKAjYYaAMAqMbN9kj6stGI/yTTZGUkvyH9wmhliL2zHtNbws7jJ9eUAARPCMwPPM4CN6un1vgBgI+KLH1glufXcL7n7vRqh7zEAAABq/d/1vgBgIyIAAKyiGOMJM7tBqdgbAAAAAKwbAgDA6ntK0g3ufnC9LwQAAADAmYsAALDKYozLMca9ZvZOd1+V1kQAAABnmLXongM86xAAANbOF83sRnefX+8LAQAA2KjcfVnS/vW+DmAj+ifrfQHAmWJ+fv7/zc/Px+c+97l/L+m7JX3Del8TAADARmNmfyrpF+fn54+v97UAGw0ZAMDau0fSTZLYDgAAADCceUm3Sjq83hcCbERDN6wGMBkhhJ+S9AGtYQ94AACADeyQu7+j3W7fvd4XAmxUZAAA6+cuSQ+4+3pfBwAAwGnN3Z+QdL2Z3bPe1wJsZNQAANbJ/Pz84vbt20+Y2Q9I+qfrfT0AAACnG3efN7MvmdmPxRj3zc/PL6/3NQEbGanHwPp6SNKDkq5Y5+sAAAC9Dko6sd4X8SwwLelsSXMNj1+Q9JSkvWb22+7+aLvdpuAfMAEEAID1tSDpGkm3uvuFZrZJ0qI2xmBjVtKmqv9w90UzW43fofacQzopqclAYkrSljHOs5zPszTCz04rDZQmtlXL3U+Y2WKfQ+YkzUzqfEqv437n65iStFkj/q7uftzMRu0HPe7vPPJz7O6z+T0/joHnd/cpMxv58S3d11Ez21Crb+4+Z2aDnuNx3qujWpJ0bA3Oc0zS06t4/ycl/a2avdeHsah03eP0ej8k6eiY17HMVr3xmZnU/Rk0I2mHer/TjysFXZbdXWa2JGm53W6vxWUCZwSKAAKngRDCjKSdSpOg42o2OV1vc6qP5K/W79DvnMNYVLNB4bSkbWOcZ1nSEY02OZw2s62abK2WY+ofXNqiFGRZq/N1TCk9zqP+rkc1+uRj3N955OdYaeC7eYxzd85/VP0nSVOStmrMoH8ejB/W2k6SJ2Hgc5x7ih/Jk421cjLGSBVzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKeh/w9q+bMClZN/lQAAAABJRU5ErkJggg==";function vs(){this.set({alienImgInline:fs}),this.store.entangle(this)}function ps(e,t){var n,i,r,o=!1,l=t.alienImgInline&&(!t.$guiNotifications||t.$guiNotifications.length<=2)&&gs(e,t);return{c(){o&&o.c(),n=h("\n\n\n\n"),l&&l.c(),i=f()},m(e,t){o&&o.m(e,t),c(e,n,t),l&&l.m(e,t),c(e,i,t),r=!0},p(t,n){o&&(o.d(1),o=null),n.alienImgInline&&(!n.$guiNotifications||n.$guiNotifications.length<=2)?l?l.p(t,n):((l=gs(e,n)).c(),l.m(i.parentNode,i)):l&&(l.d(1),l=null)},i(e,t){r||this.m(e,t)},o:s,d(e){o&&o.d(e),e&&a(n),l&&l.d(e),e&&a(i)}}}function gs(e,t){var n;return{c(){(n=A("img")).src=t.alienImgInline,n.className="alien svelte-oiqzh8",b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t)},p(e,t){e.alienImgInline&&(n.src=t.alienImgInline),e.atRPi&&b(n,"nonRPi",!t.atRPi)},d(e){e&&a(n)}}}function ws(e){B(this,e),this._state=n(this.store._init(["view","player","playlist","playlistMetadata","guiNotifications"]),e.data),this.store._add(this,["view","player","playlist","playlistMetadata","guiNotifications"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=ps(this,this._state),this.root._oncreate.push(()=>{vs.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function ys(e,t){var n,i=new ws({root:e.root,store:e.store});return{c(){i._fragment.c()},m(e,t){i._mount(e,t),n=!0},i(e,t){n||this.m(e,t)},o(e){n&&(i&&i._fragment.o(e),n=!1)},d(e){i.destroy(e)}}}function bs(e){var t,i,r,s,o;B(this,e),this._state=n(this.store._init(["view"]),e.data),this.store._add(this,["view"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,i=this._state,o="player"==i.$view&&ys(t),{c(){o&&o.c(),r=f()},m(e,t){o&&o.m(e,t),c(e,r,t),s=!0},p(e,n){"player"==n.$view?(o||(o=ys(t)).c(),o.i(r.parentNode,r)):o&&o.o((function(){o.d(1),o=null}))},i(e,t){s||this.m(e,t)},o(e){s&&(o?o.o(e):e(),s=!1)},d(e){o&&o.d(e),e&&a(r)}}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(ws.prototype,O),n(bs.prototype,O);const Is="data:image/png;base64,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",Vs="data:image/png;base64,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";function Es(e){return Bs(e)}var Rs={toggleNearbyDevices(){const e=this.store.get().nearbyDevicesMenuVisible;this.store.set({nearbyDevicesMenuVisible:!e})},morphIntoNearbyDevice({deviceName:e,deviceKey:t,ip:n,guiPort:i}){e==this.get().thisDeviceName?(console.log("Morphing back into /this/ device"),this.store.switch()):(console.log(`Morphing into ${e}:${n}`),this.store.switch({deviceName:e,deviceKey:t,ip:n,port:i}))},switchToThisDevice(){this.store.switch()},dumpInfo(){console.log(this.get())}};function zs(){this.set({homebaseImgInline:Is,tunnelingImgInline:Vs}),this.store.entangle(this),this.set({lineHeight:"1.2"}),this.listener=this.store.on("state",({current:e,changed:t,previous:n})=>{if(e.thisDeviceState){const t=e.nearbyDevices;if(t){const e=t.filter(({hiddenInGui:e})=>!e).length;this.set({nearbyDevicesCount:e}),e<7?this.set({lineHeight:"3.2"}):e<10?this.set({lineHeight:"2.4"}):e<=15?this.set({lineHeight:"1.2"}):this.set({lineHeight:"1.0"})}}})}function qs(){this.listener.cancel()}const Bs=({stale:e,hiddenInGui:t,thisDevice:n,selectedDevice:i,homebase:r,homebaseName:s,homebaseIsDefined:o})=>`\n color: ${e?"white":"black"};\n font-weight: ${r?"bold":"normal"};\n font-style: ${s&&n?"italic":"normal"};\n background-color: ${e?"black":i?"#26A9B7":""};\n display: ${t?"none":"block"};\n `;function Ms(e){const{component:t,ctx:n}=this._svelte;t.morphIntoNearbyDevice(n.device)}function Cs(e,t,n){const i=Object.create(e);return i.device=t[n],i}function Ds(e,t){var n,i=!t.disableDeviceSelector&&Os(e,t);return{c(){i&&i.c(),n=f()},m(e,t){i&&i.m(e,t),c(e,n,t)},p(t,r){r.disableDeviceSelector?i&&(i.d(1),i=null):i?i.p(t,r):((i=Os(e,r)).c(),i.m(n.parentNode,n))},d(e){i&&i.d(e),e&&a(n)}}}function Os(e,t){var n,i=t.$nearbyDevices&&t.$nearbyDevices.length>0&&Ps(e,t);return{c(){i&&i.c(),n=f()},m(e,t){i&&i.m(e,t),c(e,n,t)},p(t,r){r.$nearbyDevices&&r.$nearbyDevices.length>0?i?i.p(t,r):((i=Ps(e,r)).c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(e){i&&i.d(e),e&&a(n)}}}function Ps(e,t){for(var n,i,r,s,l,u=t.$nearbyDevices.filter(e=>e.thisDevice||e.isRPi).sort((e,t)=>e.deviceNamet.deviceName?1:0),m=[],f=0;fe.thisDevice||e.isRPi).sort((e,t)=>e.deviceNamet.deviceName?1:0);for(var o=0;o{zs.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Xs.prototype,O),n(Xs.prototype,Rs),Xs.prototype._recompute=function(e,t){(e.thisDeviceName||e.selectedDeviceKey||e.homebase||e.homebaseName)&&this._differs(t.identifyThisDevice,t.identifyThisDevice=function({thisDeviceName:e,selectedDeviceKey:t,homebase:n,homebaseName:i}){return n=>{const r={selectedDevice:t==n.deviceKey,homebase:i?n.deviceName==i:n.deviceName==e,homebaseName:i};return Object.assign(n,r)}}(t))&&(e.identifyThisDevice=!0),(e.thisDeviceName||e.selectedDeviceName||e.homebase||e.disableDeviceSelector||e.viewDef)&&this._differs(t.homebaseSymbolVisible,t.homebaseSymbolVisible=function({thisDeviceName:e,selectedDeviceName:t,homebase:n,disableDeviceSelector:i,viewDef:r}){return e=>!(i||!r||"false"==r.deviceSelector||!n)}(t))&&(e.homebaseSymbolVisible=!0),(e.homebase||e.disableDeviceSelector||e.viewDef)&&this._differs(t.tunnelingSymbolVisible,t.tunnelingSymbolVisible=function({homebase:e,disableDeviceSelector:t,viewDef:n}){return i=>!(t||!n||"false"==n.deviceSelector||e)}(t))&&(e.tunnelingSymbolVisible=!0),(e.thisDeviceName||e.selectedDeviceName)&&this._differs(t.homebaseEscapeSymbolVisible,t.homebaseEscapeSymbolVisible=function({thisDeviceName:e,selectedDeviceName:t}){return(n,i)=>{if("home"==i&&e!=t&&!n)return!0}}(t))&&(e.homebaseEscapeSymbolVisible=!0)};const Ts="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgEAAAG2CAYAAADmwVUxAAAEvWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNDM4IgogICB0aWZmOkltYWdlV2lkdGg9IjUxMyIKICAgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMiIKICAgdGlmZjpYUmVzb2x1dGlvbj0iMzAwLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjMwMC4wIgogICBleGlmOlBpeGVsWERpbWVuc2lvbj0iNTEzIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNDM4IgogICBleGlmOkNvbG9yU3BhY2U9IjEiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIw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",Ss="data:image/png;base64,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";function Ls(){this.set({sunriseImgInline:Ts,sunsetImgInline:Ss}),this.store.entangle(this)}function Js(e,t){var n,i,r,s,l,d=t.sunriseImgInline&&Ys(e,t);return{c(){n=A("div"),i=A("div"),d&&d.c(),r=h("\n "),s=A("span"),l=h(t.sunrise),s.className="svelte-1gwsqnl",i.className="inner svelte-1gwsqnl",n.id="sunrise",n.className="svelte-1gwsqnl",b(n,"protect_visibility",t.viewDef&&t.viewDef.protectVisibility&&(!t.$player||t.$player.paused))},m(e,t){c(e,n,t),o(n,i),d&&d.m(i,null),o(i,r),o(i,s),o(s,l)},p(t,s){s.sunriseImgInline?d?d.p(t,s):((d=Ys(e,s)).c(),d.m(i,r)):d&&(d.d(1),d=null),t.sunrise&&w(l,s.sunrise),(t.viewDef||t.$player)&&b(n,"protect_visibility",s.viewDef&&s.viewDef.protectVisibility&&(!s.$player||s.$player.paused))},d(e){e&&a(n),d&&d.d()}}}function Ys(e,t){var n;return{c(){(n=A("img")).src=t.sunriseImgInline,n.alt="sunrise",n.className="svelte-1gwsqnl"},m(e,t){c(e,n,t)},p(e,t){e.sunriseImgInline&&(n.src=t.sunriseImgInline)},d(e){e&&a(n)}}}function Gs(e,t){var n,i,r,s,l,d=t.sunsetImgInline&&Ws(e,t);return{c(){n=A("div"),i=A("div"),d&&d.c(),r=h("\n "),s=A("span"),l=h(t.sunset),s.className="svelte-1gwsqnl",i.className="inner svelte-1gwsqnl",n.id="sunset",n.className="svelte-1gwsqnl",b(n,"protect_visibility",t.viewDef&&t.viewDef.protectVisibility&&(!t.$player||t.$player.paused))},m(e,t){c(e,n,t),o(n,i),d&&d.m(i,null),o(i,r),o(i,s),o(s,l)},p(t,s){s.sunsetImgInline?d?d.p(t,s):((d=Ws(e,s)).c(),d.m(i,r)):d&&(d.d(1),d=null),t.sunset&&w(l,s.sunset),(t.viewDef||t.$player)&&b(n,"protect_visibility",s.viewDef&&s.viewDef.protectVisibility&&(!s.$player||s.$player.paused))},d(e){e&&a(n),d&&d.d()}}}function Ws(e,t){var n;return{c(){(n=A("img")).src=t.sunsetImgInline,n.alt="sunset",n.className="svelte-1gwsqnl"},m(e,t){c(e,n,t)},p(e,t){e.sunsetImgInline&&(n.src=t.sunsetImgInline)},d(e){e&&a(n)}}}function Ks(e){var t,r,l,d,u,m,f;B(this,e),this._state=n(this.store._init(["player"]),e.data),this.store._add(this,["player"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,r=this._state,m=r.sunrise&&Js(t,r),f=r.sunset&&Gs(t,r),{c(){l=A("div"),m&&m.c(),d=h("\n\n "),f&&f.c(),l.id="suntime"},m(e,t){c(e,l,t),m&&m.m(l,null),o(l,d),f&&f.m(l,null),u=!0},p(e,n){n.sunrise?m?m.p(e,n):((m=Js(t,n)).c(),m.m(l,d)):m&&(m.d(1),m=null),n.sunset?f?f.p(e,n):((f=Gs(t,n)).c(),f.m(l,null)):f&&(f.d(1),f=null)},i(e,t){u||this.m(e,t)},o:s,d(e){e&&a(l),m&&m.d(),f&&f.d()}}),this.root._oncreate.push(()=>{Ls.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Ks.prototype,O);var Fs={seek(e){const t=this.refs.timeposition,n=e.offsetX/t.offsetWidth;this.fire("seek",{percentPos:n})}};function Qs(){this.listener=this.store.on("state",({current:e,changed:t,previous:n})=>{const{player:i}=e;if(!i)return;this.set({isStream:i.isStream});const r=this.refs.progress,s=this.refs.timeposition;if(r&&t.frontTicker){if(i&&null!=i.percentposition){const e=i.percentposition;r.style.width=`${e}%`}else r.style.width="0%";if(!i.paused&&i.currentMedia&&i.currentMedia.songPath){let e="#45FFB9";i.timeLimit?e="#66AEB7":i.limit&&!i.isStream&&(e="#B6E29E"),r.style.background=e}else r.style.background="#444";i.currentMedia&&i.currentMedia.songPath&&!i.paused?s.style.cursor="pointer":s.style.cursor="default"}})}function Us(){this.listener.cancel()}function _s(e,t){var n,i,r,s,l=t.$player.timeposition&&$s(e,t),d=t.$player.currentMedia.duration&&to(e,t);function u(t){e.seek(t)}return{c(){n=A("div"),i=A("div"),r=h("\n\n "),l&&l.c(),s=h("\n\n "),d&&d.c(),i.className="progress svelte-bmnwjd",v(n,"click",u),n.id="timeposition",n.className="svelte-bmnwjd",b(n,"bottom_slim_wide","player"!=t.$view),b(n,"bottom_slim_times_visible","clock"==t.$view)},m(t,a){c(t,n,a),o(n,i),e.refs.progress=i,o(n,r),l&&l.m(n,null),o(n,s),d&&d.m(n,null),e.refs.timeposition=n},p(t,i){i.$player.timeposition?l?l.p(t,i):((l=$s(e,i)).c(),l.m(n,s)):l&&(l.d(1),l=null),i.$player.currentMedia.duration?d?d.p(t,i):((d=to(e,i)).c(),d.m(n,null)):d&&(d.d(1),d=null),t.$view&&(b(n,"bottom_slim_wide","player"!=i.$view),b(n,"bottom_slim_times_visible","clock"==i.$view))},d(t){t&&a(n),e.refs.progress===i&&(e.refs.progress=null),l&&l.d(),d&&d.d(),p(n,"click",u),e.refs.timeposition===n&&(e.refs.timeposition=null)}}}function $s(e,t){var n;function i(e){return eo}var r=i(),s=r(e,t);return{c(){s.c(),n=f()},m(e,t){s.m(e,t),c(e,n,t)},p(t,o){r===(r=i())&&s?s.p(t,o):(s.d(1),(s=r(e,o)).c(),s.m(n.parentNode,n))},d(e){s.d(e),e&&a(n)}}}function eo(e,t){var n,i,r=Te.songTime(t.Math.floor(t.$player.timeposition));return{c(){n=A("div"),i=h(r),n.className="time_current svelte-bmnwjd"},m(e,t){c(e,n,t),o(n,i)},p(e,t){(e.Math||e.$player)&&r!==(r=Te.songTime(t.Math.floor(t.$player.timeposition)))&&w(i,r)},d(e){e&&a(n)}}}function to(e,t){var n,i,r=Te.songTime(t.$player.currentMedia.duration);return{c(){n=A("div"),i=h(r),n.className="time_total svelte-bmnwjd"},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$player&&r!==(r=Te.songTime(t.$player.currentMedia.duration))&&w(i,r)},d(e){e&&a(n)}}}function no(e){var t,r,o,l,d;B(this,e),this.refs={},this._state=n(n({Math:Math},this.store._init(["player","view"])),e.data),this.store._add(this,["player","view"]),this._intro=!!e.intro,this._handlers.destroy=[Us,D],this._fragment=(t=this,r=this._state,d=r.$player&&r.$player.currentMedia&&_s(t,r),{c(){d&&d.c(),o=f()},m(e,t){d&&d.m(e,t),c(e,o,t),l=!0},p(e,n){n.$player&&n.$player.currentMedia?d?d.p(e,n):((d=_s(t,n)).c(),d.m(o.parentNode,o)):d&&(d.d(1),d=null)},i(e,t){l||this.m(e,t)},o:s,d(e){d&&d.d(e),e&&a(o)}}),this.root._oncreate.push(()=>{Qs.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(no.prototype,O),n(no.prototype,Fs);var io={select(e){this.fire("select",{view:e})},handleKeypress(e){if(!Te.isInputElementActive()&&e.key&&!e.altKey&&!e.metaKey&&!e.shiftKey){const t=this.store.get().player;" "==e.key&&(e.preventDefault(),t.paused?this.play():this.pause()),"n"==e.key&&this.next();const n=10;"ArrowRight"==e.code&&this.forward(n),"ArrowLeft"==e.code&&this.forward(-n),38!=e.keyCode&&"+"!=e.key&&"="!=e.key||this.volumeUp(),40!=e.keyCode&&"-"!=e.key||this.volumeDown()}},play(){this.action("play")},next(){this.action("next")},shuffle(){this.action("shuffle")},pause(){this.action("pause")},forward(e){this.action("forward",{seconds:e})},volumeUp(){this.action("volume_up")},volumeDown(){this.action("volume_down")},action(e,t,n="player"){this.store.signal("action",{action:e,scope:n,payload:t})}};function ro(){this.store.entangle(this)}function so(e,t){var n,i,r,s,l;function d(e){return e.$player&&!e.$player.paused&&e.$player.currentMedia&&e.$player.currentMedia.song?co:e.$player&&e.$player.spaced&&e.$player.spacedTimeRemaining&&!e.$player.timeposition?oo:void 0}var u=d(t),m=u&&u(e,t);function f(t){e.select("player")}var g=!t.$player.isStream&&ao(e);return{c(){n=A("div"),i=A("div"),r=A("div"),m&&m.c(),s=h("\n\n "),g&&g.c(),v(r,"click",f),r.id="current_song",r.className="svelte-u2ttvk",i.className="wrap svelte-u2ttvk",n.id="playinfo",n.className="svelte-u2ttvk",b(n,"protect_visibility",t.viewDef&&t.viewDef.protectVisibility),b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t),o(n,i),o(i,r),m&&m.m(r,null),o(i,s),g&&g.m(i,null),l=!0},p(t,s){u===(u=d(s))&&m?m.p(t,s):(m&&m.d(1),(m=u&&u(e,s))&&m.c(),m&&m.m(r,null)),s.$player.isStream?g&&g.o((function(){g.d(1),g=null})):(g||(g=ao(e)).c(),g.i(i,null)),t.viewDef&&b(n,"protect_visibility",s.viewDef&&s.viewDef.protectVisibility),t.atRPi&&b(n,"nonRPi",!s.atRPi)},i(e,t){l||this.m(e,t)},o(e){l&&(g?g.o(e):e(),l=!1)},d(e){e&&a(n),m&&m.d(),p(r,"click",f),g&&g.d()}}}function oo(e,t){var n,i,r,s,l,d,u=t.$player.spacedTimeRemaining;return{c(){n=A("div"),i=h("Waiting "),r=A("span"),s=h(u),l=h("s"),d=h(" before continuing ..."),r.className="svelte-u2ttvk",n.className="spaced_time_remaining svelte-u2ttvk"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(r,s),o(r,l),o(n,d)},p(e,t){e.$player&&u!==(u=t.$player.spacedTimeRemaining)&&w(s,u)},d(e){e&&a(n)}}}function co(e,t){var n,i,r,s,l=t.$player.isStream?"STREAM":"♪♫♬",d=t.$player.currentMedia.artist?`${t.$player.currentMedia.artist} - ${t.$player.currentMedia.song}`.substring(0,50):t.$player.currentMedia.song.substring(0,50);return{c(){n=A("span"),i=h(l),r=h(" "),s=h(d),n.className="notes svelte-u2ttvk"},m(e,t){c(e,n,t),o(n,i),c(e,r,t),c(e,s,t)},p(e,t){e.$player&&l!==(l=t.$player.isStream?"STREAM":"♪♫♬")&&w(i,l),e.$player&&d!==(d=t.$player.currentMedia.artist?`${t.$player.currentMedia.artist} - ${t.$player.currentMedia.song}`.substring(0,50):t.$player.currentMedia.song.substring(0,50))&&w(s,d)},d(e){e&&(a(n),a(r),a(s))}}}function ao(e,t){var n,i,r=new no({root:e.root,store:e.store});return{c(){n=A("div"),r._fragment.c(),n.className="time_position"},m(e,t){c(e,n,t),r._mount(n,null),i=!0},i(e,t){i||this.m(e,t)},o(e){i&&(r&&r._fragment.o(e),i=!1)},d(e){e&&a(n),r.destroy()}}}function lo(e){B(this,e),this._state=n(this.store._init(["player","device"]),e.data),this.store._add(this,["player","device"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=function(e,t){var n,i;function r(t){e.handleKeypress(t)}window.addEventListener("keydown",r);var s=t.$player&&!t.$player.error&&!t.$player.paused&&t.$device&&!t.$device.serverMode&&so(e,t);return{c(){s&&s.c(),n=f()},m(e,t){s&&s.m(e,t),c(e,n,t),i=!0},p(t,i){!i.$player||i.$player.error||i.$player.paused||!i.$device||i.$device.serverMode?s&&s.o((function(){s.d(1),s=null})):(s?s.p(t,i):(s=so(e,i))&&s.c(),s.i(n.parentNode,n))},i(e,t){i||this.m(e,t)},o(e){i&&(s?s.o(e):e(),i=!1)},d(e){window.removeEventListener("keydown",r),s&&s.d(e),e&&a(n)}}}(this,this._state),this.root._oncreate.push(()=>{ro.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(lo.prototype,O),n(lo.prototype,io);var uo={go(e){window.location.href=`http://${window.location.hostname}:${window.location.port}/${e}`},select(e){this.fire("select",{view:e})}};function Ao(){this.store.entangle(this)}function mo(e,t){var n,i,s,o,l={timeDate:t.timeDate},d=new or({root:e.root,store:e.store,data:l}),u=t.$connected&&t.$device&&ho(e,t);return{c(){n=A("div"),d._fragment.c(),i=h("\n\n "),u&&u.c(),s=f(),n.id="time",n.className="svelte-1uq6icf",b(n,"protect_visibility",t.viewDef&&t.viewDef.protectVisibility)},m(e,t){c(e,n,t),d._mount(n,null),c(e,i,t),u&&u.m(e,t),c(e,s,t),o=!0},p(t,i){var r={};t.timeDate&&(r.timeDate=i.timeDate),d._set(r),t.viewDef&&b(n,"protect_visibility",i.viewDef&&i.viewDef.protectVisibility),i.$connected&&i.$device?(u?u.p(t,i):(u=ho(e,i))&&u.c(),u.i(s.parentNode,s)):u&&u.o((function(){u.d(1),u=null}))},i(e,t){o||this.m(e,t)},o(e){o&&(e=r(e,2),d&&d._fragment.o(e),u?u.o(e):e(),o=!1)},d(e){e&&a(n),d.destroy(),e&&a(i),u&&u.d(e),e&&a(s)}}}function ho(e,t){var n,i,s,o,l,d=[vo,fo],u=[];function A(e){return e.$device.serverMode?0:e.environment&&e.environment.length>0?1:-1}~(n=A(t))&&(i=u[n]=d[n](e,t));var m=t.$player&&po(e),f={sunrise:t.timeDate.sunrise,sunset:t.timeDate.sunset},v=new Ks({root:e.root,store:e.store,data:f});return{c(){i&&i.c(),s=h("\n\n "),m&&m.c(),o=h("\n\n "),v._fragment.c()},m(e,t){~n&&u[n].m(e,t),c(e,s,t),m&&m.m(e,t),c(e,o,t),v._mount(e,t),l=!0},p(t,r){var c=n;(n=A(r))===c?~n&&u[n].p(t,r):(i&&i.o((function(){u[c].d(1),u[c]=null})),~n?((i=u[n])||(i=u[n]=d[n](e,r)).c(),i.m(s.parentNode,s)):i=null),r.$player?(m||(m=po(e)).c(),m.i(o.parentNode,o)):m&&m.o((function(){m.d(1),m=null}));var a={};t.timeDate&&(a.sunrise=r.timeDate.sunrise),t.timeDate&&(a.sunset=r.timeDate.sunset),v._set(a)},i(e,t){l||this.m(e,t)},o(e){l&&(e=r(e,3),i?i.o(e):e(),m?m.o(e):e(),v&&v._fragment.o(e),l=!1)},d(e){~n&&u[n].d(e),e&&a(s),m&&m.d(e),e&&a(o),v.destroy(e)}}}function fo(e,t){var n,i,r={tempData:t.environment[0],big:"true"},s=new Hr({root:e.root,store:e.store,data:r});return{c(){n=A("div"),s._fragment.c(),n.id="environment_widget",n.className="no_click svelte-1uq6icf"},m(e,t){c(e,n,t),s._mount(n,null),i=!0},p(e,t){var n={};e.environment&&(n.tempData=t.environment[0]),s._set(n)},i(e,t){i||this.m(e,t)},o(e){i&&(s&&s._fragment.o(e),i=!1)},d(e){e&&a(n),s.destroy()}}}function vo(e,t){var n,i;return{c(){(n=A("div")).innerHTML='',n.className="baloon svelte-1uq6icf",b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t),i=!0},p(e,t){e.atRPi&&b(n,"nonRPi",!t.atRPi)},i(e,t){i||this.m(e,t)},o:s,d(e){e&&a(n)}}}function po(e,t){var n,i=new lo({root:e.root,store:e.store});return i.on("select",(function(t){e.select(t.view)})),{c(){i._fragment.c()},m(e,t){i._mount(e,t),n=!0},i(e,t){n||this.m(e,t)},o(e){n&&(i&&i._fragment.o(e),n=!1)},d(e){i.destroy(e)}}}function go(e){var t,r,s,o,l;B(this,e),this._state=n(this.store._init(["connected","device","player"]),e.data),this.store._add(this,["connected","device","player"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,r=this._state,l=r.loaded&&mo(t,r),{c(){l&&l.c(),s=f()},m(e,t){l&&l.m(e,t),c(e,s,t),o=!0},p(e,n){n.loaded?(l?l.p(e,n):(l=mo(t,n))&&l.c(),l.i(s.parentNode,s)):l&&l.o((function(){l.d(1),l=null}))},i(e,t){o||this.m(e,t)},o(e){o&&(l?l.o(e):e(),o=!1)},d(e){l&&l.d(e),e&&a(s)}}),this.root._oncreate.push(()=>{Ao.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function wo(e){return e?e.trim().replace(/\s+/g," "):e}n(go.prototype,O),n(go.prototype,uo);let yo,bo="";const Io=[],Vo=300;function Eo({searchQuery:e,remoteObject:t,remoteMethod:n,searchDelay:i=Vo,searchStatusCallback:r=(()=>{})}){return new Promise((s,o)=>{if(""==e.trim())return Io.push(Date.now()),""!=bo&&(clearTimeout(yo),r({searching:!1}),s([])),void(bo=e);try{!{searchQuery:e,prevQuery:bo}?console.log("Query not different enough"):(clearTimeout(yo),r({searching:!0}),bo=e,yo=setTimeout(()=>{const i=Date.now();Io.push(i),console.log(`Search executed: ${e}`);const c=window.location.host;t.call(n,{query:wo(e),searchOriginHost:c}).then(e=>{const t=Io[Io.length-1];i==t?(r({searching:!1,noHits:e&&0==e.length}),s(e)):console.log("Discarding search result which came out of order because a more recent result is due ...")}).catch(e=>{r({searching:!1}),o(e)})},i))}catch(e){console.log("This error should not happen: bug in dmt-js"),r({searching:!1}),o(e)}})}var Ro={selectMedia(e){this.set({selectMedia:e}),"browse"!=e&&"search"!=e||(this.defaultRibbonState(),this.fire("mediaSourceOption",{mediaSourceOption:e}))},close(){this.defaultRibbonState()},defaultRibbonState(){this.set({selectMedia:void 0})},action(e,t){this.store.signal("action",{action:e,scope:this.scope,payload:t}),this.defaultRibbonState()},customizePlaylist(e){this.action("sublist",{tag:e})},playRadio(e){this.action("play_radio",{radioId:e})}};function zo(){this.scope="player"}function qo(e,t){var n,i=t.$player&&Bo(e,t);return{c(){n=A("div"),i&&i.c(),n.id="ribbon",n.className="svelte-1o0739n"},m(e,t){c(e,n,t),i&&i.m(n,null)},p(t,r){r.$player?i?i.p(t,r):((i=Bo(e,r)).c(),i.m(n,null)):i&&(i.d(1),i=null)},d(e){e&&a(n),i&&i.d()}}}function Bo(e,t){var n,i,r,s=!t.selectMedia&&t.$device&&!t.$device.apMode&&Mo(e),o="radio"==t.selectMedia&&Co(e);function l(e){return e.$player.isStream?Oo:"radio"!=e.selectMedia?Do:void 0}var d=l(t),u=d&&d(e,t);return{c(){s&&s.c(),n=h("\n\n "),o&&o.c(),i=h("\n\n "),u&&u.c(),r=f()},m(e,t){s&&s.m(e,t),c(e,n,t),o&&o.m(e,t),c(e,i,t),u&&u.m(e,t),c(e,r,t)},p(t,c){c.selectMedia||!c.$device||c.$device.apMode?s&&(s.d(1),s=null):s||((s=Mo(e)).c(),s.m(n.parentNode,n)),"radio"==c.selectMedia?o||((o=Co(e)).c(),o.m(i.parentNode,i)):o&&(o.d(1),o=null),d===(d=l(c))&&u?u.p(t,c):(u&&u.d(1),(u=d&&d(e,c))&&u.c(),u&&u.m(r.parentNode,r))},d(e){s&&s.d(e),e&&a(n),o&&o.d(e),e&&a(i),u&&u.d(e),e&&a(r)}}}function Mo(e,t){var n,i,r,s,l;function d(t){e.selectMedia("radio")}return{c(){n=A("div"),(i=A("div")).textContent="Media select",r=h("\n "),s=A("div"),(l=A("div")).textContent="Net Radio",i.className="title media_select svelte-1o0739n",v(l,"click",d),l.className="option svelte-1o0739n",s.className="options svelte-1o0739n",n.className="section svelte-1o0739n"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),o(s,l)},d(e){e&&a(n),p(l,"click",d)}}}function Co(e,t){var n,i,r,s,l,d,u,m,f,g,w,y,b;function I(t){e.playRadio("jazz")}function V(t){e.playRadio("rock")}function E(t){e.playRadio("classical")}function R(t){e.playRadio("progressive-trance")}function z(t){e.close()}return{c(){n=A("div"),(i=A("div")).textContent="Internet radio station:",r=h("\n "),s=A("div"),(l=A("div")).textContent="Jazz",d=h("\n "),(u=A("div")).textContent="Rock",m=h("\n \n "),(f=A("div")).textContent="Classical",g=h("\n \n "),(w=A("div")).textContent="Psytrance",y=h("\n \n "),(b=A("div")).textContent="Close",i.className="title svelte-1o0739n",v(l,"click",I),l.className="option svelte-1o0739n",v(u,"click",V),u.className="option svelte-1o0739n",v(f,"click",E),f.className="option svelte-1o0739n",v(w,"click",R),w.className="option svelte-1o0739n",v(b,"click",z),b.className="option close svelte-1o0739n",s.className="options svelte-1o0739n",n.className="section svelte-1o0739n"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),o(s,l),o(s,d),o(s,u),o(s,m),o(s,f),o(s,g),o(s,w),o(s,y),o(s,b)},d(e){e&&a(n),p(l,"click",I),p(u,"click",V),p(f,"click",E),p(w,"click",R),p(b,"click",z)}}}function Do(e,t){var n,i=t.$playlist&&t.$playlist.length>0&&Po(e,t);return{c(){i&&i.c(),n=f()},m(e,t){i&&i.m(e,t),c(e,n,t)},p(t,r){r.$playlist&&r.$playlist.length>0?i?i.p(t,r):((i=Po(e,r)).c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(e){i&&i.d(e),e&&a(n)}}}function Oo(e,t){var n,i,r,s,l=t.$player.currentMedia&&t.$player.currentMedia.songPath&&xo(e);return{c(){n=A("div"),(i=A("div")).textContent="Radio options",r=h("\n "),s=A("div"),l&&l.c(),i.className="title media_select svelte-1o0739n",s.className="options svelte-1o0739n",n.className="section svelte-1o0739n"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),l&&l.m(s,null)},p(t,n){n.$player.currentMedia&&n.$player.currentMedia.songPath?l||((l=xo(e)).c(),l.m(s,null)):l&&(l.d(1),l=null)},d(e){e&&a(n),l&&l.d()}}}function Po(e,t){var n,i,r,s,l,d,u,m=t.$playlist.length>1&&Zo(e),v=t.$player.currentMedia&&t.$player.currentMedia.songPath&&No(e),p=t.$device&&"zaboric"==t.$device.network&&Ho(e,t);return{c(){n=A("div"),(i=A("div")).textContent="Current entry",r=h("\n "),s=A("div"),m&&m.c(),l=h("\n\n "),v&&v.c(),d=h("\n\n "),p&&p.c(),u=f(),i.className="title svelte-1o0739n",s.className="options svelte-1o0739n",n.className="section svelte-1o0739n"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),m&&m.m(s,null),o(s,l),v&&v.m(s,null),c(e,d,t),p&&p.m(e,t),c(e,u,t)},p(t,n){n.$playlist.length>1?m||((m=Zo(e)).c(),m.m(s,l)):m&&(m.d(1),m=null),n.$player.currentMedia&&n.$player.currentMedia.songPath?v||((v=No(e)).c(),v.m(s,null)):v&&(v.d(1),v=null),n.$device&&"zaboric"==n.$device.network?p?p.p(t,n):((p=Ho(e,n)).c(),p.m(u.parentNode,u)):p&&(p.d(1),p=null)},d(e){e&&a(n),m&&m.d(),v&&v.d(),e&&a(d),p&&p.d(e),e&&a(u)}}}function Zo(e,t){var n;function i(t){e.action("similar")}return{c(){(n=A("div")).textContent="Similar",v(n,"click",i),n.className="option similar svelte-1o0739n"},m(e,t){c(e,n,t)},d(e){e&&a(n),p(n,"click",i)}}}function No(e,t){var n;function i(t){e.action("stop")}return{c(){(n=A("div")).textContent="■ Stop",v(n,"click",i),n.className="option svelte-1o0739n"},m(e,t){c(e,n,t)},d(e){e&&a(n),p(n,"click",i)}}}function Ho(e,t){var n;function i(e){return["balkon","dnevna","spalnica"].includes(e.$device.deviceName)?jo:"televizija"==e.$device.deviceName?ko:void 0}var r=i(t),s=r&&r(e,t);return{c(){s&&s.c(),n=f()},m(e,t){s&&s.m(e,t),c(e,n,t)},p(t,o){r!==(r=i(o))&&(s&&s.d(1),(s=r&&r(e,o))&&s.c(),s&&s.m(n.parentNode,n))},d(e){s&&s.d(e),e&&a(n)}}}function ko(e,t){var n,i,r,s,l,d,u,m,f,g,w,y,b,I,V,E,R;function z(t){e.customizePlaylist("wolfoo")}function q(t){e.customizePlaylist("babyzoo")}function B(t){e.customizePlaylist("booba")}function M(t){e.customizePlaylist("simsala")}function C(t){e.customizePlaylist("mickey mouse")}function D(t){e.customizePlaylist("looloo")}function O(t){e.customizePlaylist("cartoons slosinh")}return{c(){n=A("div"),(i=A("div")).textContent="Customize playlist",r=h("\n "),s=A("div"),(l=A("div")).textContent="Wolfoo",d=h("\n "),(u=A("div")).textContent="BabyZoo",m=h("\n "),(f=A("div")).textContent="Booba",g=h("\n "),(w=A("div")).textContent="Simsala",y=h("\n "),(b=A("div")).textContent="Mickey Mouse",I=h("\n "),(V=A("div")).textContent="Looloo",E=h("\n "),(R=A("div")).textContent="Slo risanke",i.className="title svelte-1o0739n",v(l,"click",z),l.className="option svelte-1o0739n",v(u,"click",q),u.className="option svelte-1o0739n",v(f,"click",B),f.className="option svelte-1o0739n",v(w,"click",M),w.className="option svelte-1o0739n",v(b,"click",C),b.className="option svelte-1o0739n",v(V,"click",D),V.className="option svelte-1o0739n",v(R,"click",O),R.className="option svelte-1o0739n",s.className="options svelte-1o0739n",n.className="section svelte-1o0739n"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),o(s,l),o(s,d),o(s,u),o(s,m),o(s,f),o(s,g),o(s,w),o(s,y),o(s,b),o(s,I),o(s,V),o(s,E),o(s,R)},d(e){e&&a(n),p(l,"click",z),p(u,"click",q),p(f,"click",B),p(w,"click",M),p(b,"click",C),p(V,"click",D),p(R,"click",O)}}}function jo(e,t){var n,i,r,s,l,d,u,m,f,g,w;function y(t){e.customizePlaylist("andreja")}function b(t){e.customizePlaylist("david")}function I(t){e.customizePlaylist("irma")}function V(t){e.customizePlaylist("otroci")}return{c(){n=A("div"),(i=A("div")).textContent="Customize playlist",r=h("\n "),s=A("div"),(l=A("div")).textContent="Andreja",d=h("\n "),(u=A("div")).textContent="David",m=h("\n "),(f=A("div")).textContent="Irma",g=h("\n "),(w=A("div")).textContent="Otroci",i.className="title svelte-1o0739n",v(l,"click",y),l.className="option svelte-1o0739n",v(u,"click",b),u.className="option svelte-1o0739n",v(f,"click",I),f.className="option svelte-1o0739n",v(w,"click",V),w.className="option svelte-1o0739n",s.className="options svelte-1o0739n",n.className="section svelte-1o0739n"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),o(s,l),o(s,d),o(s,u),o(s,m),o(s,f),o(s,g),o(s,w)},d(e){e&&a(n),p(l,"click",y),p(u,"click",b),p(f,"click",I),p(w,"click",V)}}}function xo(e,t){var n;function i(t){e.action("stop")}return{c(){(n=A("div")).textContent="Quit Radio",v(n,"click",i),n.className="option quit svelte-1o0739n"},m(e,t){c(e,n,t)},d(e){e&&a(n),p(n,"click",i)}}}function Xo(e){var t,r,o,l,d;B(this,e),this._state=n(this.store._init(["player","device","playlist"]),e.data),this.store._add(this,["player","device","playlist"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,r=this._state,d=r.$player&&qo(t,r),{c(){d&&d.c(),o=f()},m(e,t){d&&d.m(e,t),c(e,o,t),l=!0},p(e,n){n.$player?d?d.p(e,n):((d=qo(t,n)).c(),d.m(o.parentNode,o)):d&&(d.d(1),d=null)},i(e,t){l||this.m(e,t)},o:s,d(e){d&&d.d(e),e&&a(o)}}),this.root._oncreate.push(()=>{zo.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Xo.prototype,O),n(Xo.prototype,Ro);var To={selectMedia(e){this.set({selectMedia:e}),"browse"!=e&&"search"!=e||(this.defaultRibbonState(),this.fire("mediaSourceOption",{mediaSourceOption:e}))},close(){this.defaultRibbonState()},defaultRibbonState(){this.set({selectMedia:void 0})},setNext(){this.action("set_next")},playNow(){this.setNext(),this.action("next")},cut(){this.action("cut_selected")},paste(){this.action("paste")},deselectAll(){this.action("deselect_all")},action(e,t){this.store.signal("action",{action:e,scope:this.scope,payload:t}),this.defaultRibbonState()},playRadio(e){this.action("play_radio",{radioId:e})}};function So(){this.scope="player"}function Lo(e,t){var n,i,r=t.$player.hasMissingMedia&&!t.$player.isStream&&Jo(e,t),s=t.$player&&Yo(e,t);return{c(){n=A("div"),r&&r.c(),i=h("\n\n "),s&&s.c(),n.id="ribbon",n.className="svelte-1mcdlju"},m(e,t){c(e,n,t),r&&r.m(n,null),o(n,i),s&&s.m(n,null)},p(t,o){o.$player.hasMissingMedia&&!o.$player.isStream?r?r.p(t,o):((r=Jo(e,o)).c(),r.m(n,i)):r&&(r.d(1),r=null),o.$player?s?s.p(t,o):((s=Yo(e,o)).c(),s.m(n,null)):s&&(s.d(1),s=null)},d(e){e&&a(n),r&&r.d(),s&&s.d()}}}function Jo(e,t){var n,i,r,s,l,d,u,m,f=t.$playlistMetadata.numberOfMissingMedia;function g(t){e.action("remove_missing_media")}return{c(){n=A("div"),(i=A("div")).textContent="Media is missing",r=h("\n "),s=A("div"),l=A("div"),d=h("Remove "),u=h(f),m=h(" missing"),i.className="title svelte-1mcdlju",v(l,"click",g),l.className="option svelte-1mcdlju",s.className="options svelte-1mcdlju",n.className="section missing_media svelte-1mcdlju"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),o(s,l),o(l,d),o(l,u),o(l,m)},p(e,t){e.$playlistMetadata&&f!==(f=t.$playlistMetadata.numberOfMissingMedia)&&w(u,f)},d(e){e&&a(n),p(l,"click",g)}}}function Yo(e,t){var n,i=(t.$playlistMetadata.playlistHasSelectedEntries||t.$playlistMetadata.playlistClipboard)&&Go(e,t);return{c(){i&&i.c(),n=f()},m(e,t){i&&i.m(e,t),c(e,n,t)},p(t,r){r.$playlistMetadata.playlistHasSelectedEntries||r.$playlistMetadata.playlistClipboard?i?i.p(t,r):((i=Go(e,r)).c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null)},d(e){i&&i.d(e),e&&a(n)}}}function Go(e,t){var n,i,r;function s(e){return e.$playlistMetadata.playlistHasSelectedEntries?Ko:e.$playlistMetadata.playlistClipboard?Wo:void 0}var l=s(t),d=l&&l(e,t);function u(e){return e.$playlistMetadata.playlistHasSelectedEntries?Qo:e.$playlistMetadata.playlistClipboard?Fo:void 0}var m=u(t),f=m&&m(e,t);return{c(){n=A("div"),d&&d.c(),i=h("\n\n "),r=A("div"),f&&f.c(),r.className="options svelte-1mcdlju",n.className="section svelte-1mcdlju"},m(e,t){c(e,n,t),d&&d.m(n,null),o(n,i),o(n,r),f&&f.m(r,null)},p(t,o){l===(l=s(o))&&d?d.p(t,o):(d&&d.d(1),(d=l&&l(e,o))&&d.c(),d&&d.m(n,i)),m!==(m=u(o))&&(f&&f.d(1),(f=m&&m(e,o))&&f.c(),f&&f.m(r,null))},d(e){e&&a(n),d&&d.d(),f&&f.d()}}}function Wo(e,t){var n,i,r,s,l,d,u=t.$playlistMetadata.playlistClipboard,m=t.$playlistMetadata.playlistClipboard>1?"s":"";return{c(){n=A("div"),i=h("Undo "),r=h(u),s=h(" item"),l=h(m),d=h("?"),n.className="title selected_entries svelte-1mcdlju"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s),o(n,l),o(n,d)},p(e,t){e.$playlistMetadata&&u!==(u=t.$playlistMetadata.playlistClipboard)&&w(r,u),e.$playlistMetadata&&m!==(m=t.$playlistMetadata.playlistClipboard>1?"s":"")&&w(l,m)},d(e){e&&a(n)}}}function Ko(e,t){var n,i,r,s,l=t.$playlistMetadata.playlistSelectedCount;return{c(){n=A("div"),i=h("Selected entries ("),r=h(l),s=h(")"),n.className="title selected_entries svelte-1mcdlju"},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,s)},p(e,t){e.$playlistMetadata&&l!==(l=t.$playlistMetadata.playlistSelectedCount)&&w(r,l)},d(e){e&&a(n)}}}function Fo(e,t){var n;function i(t){e.paste()}return{c(){(n=A("div")).textContent="Undo",v(n,"click",i),n.className="option svelte-1mcdlju"},m(e,t){c(e,n,t)},d(e){e&&a(n),p(n,"click",i)}}}function Qo(e,t){var n,i,r,s,o,l,d;function u(t){e.playNow()}function m(t){e.setNext()}function f(t){e.cut()}function g(t){e.deselectAll()}return{c(){(n=A("div")).textContent="Play Now",i=h("\n "),(r=A("div")).textContent="◈ Set Next",s=h("\n "),(o=A("div")).textContent="✖ Remove",l=h("\n "),(d=A("div")).textContent="Cancel",v(n,"click",u),n.className="option play_now svelte-1mcdlju",v(r,"click",m),r.className="option set_next svelte-1mcdlju",v(o,"click",f),o.className="option remove svelte-1mcdlju",v(d,"click",g),d.className="option deselect svelte-1mcdlju"},m(e,t){c(e,n,t),c(e,i,t),c(e,r,t),c(e,s,t),c(e,o,t),c(e,l,t),c(e,d,t)},d(e){e&&a(n),p(n,"click",u),e&&(a(i),a(r)),p(r,"click",m),e&&(a(s),a(o)),p(o,"click",f),e&&(a(l),a(d)),p(d,"click",g)}}}function Uo(e){var t,r,o,l,d;B(this,e),this._state=n(this.store._init(["player","playlistMetadata"]),e.data),this.store._add(this,["player","playlistMetadata"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,r=this._state,d=r.$player&&Lo(t,r),{c(){d&&d.c(),o=f()},m(e,t){d&&d.m(e,t),c(e,o,t),l=!0},p(e,n){n.$player?d?d.p(e,n):((d=Lo(t,n)).c(),d.m(o.parentNode,o)):d&&(d.d(1),d=null)},i(e,t){l||this.m(e,t)},o:s,d(e){d&&d.d(e),e&&a(o)}}),this.root._oncreate.push(()=>{So.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Uo.prototype,O),n(Uo.prototype,To);var _o=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,s=void 0;try{for(var o,c=e[Symbol.iterator]();!(i=(o=c.next()).done)&&(n.push(o.value),!t||n.length!==t);i=!0);}catch(e){r=!0,s=e}finally{try{!i&&c.return&&c.return()}finally{if(r)throw s}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function $o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t{for(const t in e)e[t]||delete e[t];return 0===ec.keys(e).length?void 0:e};class ac{constructor(e,t,n){this.background=e,this.name=t,this.brightness=n}get inverse(){return new ac(!this.background,this.name||(this.background?"black":"white"),this.brightness)}get clean(){return cc({name:"default"===this.name?"":this.name,bright:this.brightness===lc.bright,dim:this.brightness===lc.dim})}defaultBrightness(e){return new ac(this.background,this.name,this.brightness||e)}css(e){const t=e?this.inverse:this,n=t.brightness===lc.bright&&rc[t.name]||t.name,i=t.background?"background:":"color:",r=pc.rgb[n],s=this.brightness===lc.dim?.5:1;return r?i+"rgba("+[].concat($o(r),[s]).join(",")+");":!t.background&&s<1?"color:rgba(0,0,0,0.5);":""}}class lc{constructor(e){void 0!==e&&(this.value=Number(e))}get type(){return sc[Math.floor(this.value/10)]}get subtype(){return oc[this.type][this.value%10]}get str(){return this.value?"["+this.value+"m":""}static str(e){return new lc(e).str}get isBrightness(){return this.value===lc.noBrightness||this.value===lc.bright||this.value===lc.dim}}ec.assign(lc,{reset:0,bright:1,dim:2,inverse:7,noBrightness:22,noItalic:23,noUnderline:24,noInverse:27,noColor:39,noBgColor:49});const dc=(e,t,n)=>{const i=lc.str(t),r=lc.str(n);return String(e).split("\n").map(e=>(e=>e.replace(/(\u001b\[(1|2)m)/g,"$1"))(i+((e,t,n)=>e.split(t).join(n))((e=>e.replace(/\u001b\[22m(\u001b\[(1|2)m)/g,"$1"))(e),r,i)+r)).join("\n")},uc=(e,t)=>e+t.charAt(0).toUpperCase()+t.slice(1),Ac=(()=>[].concat($o(tc.map((e,t)=>e?[[e,30+t,lc.noColor],[uc("bg",e),40+t,lc.noBgColor]]:[])),$o(nc.map((e,t)=>e?[[e,90+t,lc.noColor],[uc("bg",e),100+t,lc.noBgColor]]:[])),$o(["","BrightRed","BrightGreen","BrightYellow","BrightBlue","BrightMagenta","BrightCyan"].map((e,t)=>e?[["bg"+e,100+t,lc.noBgColor]]:[])),$o(ic.map((e,t)=>e?[[e,t,"bright"===e||"dim"===e?lc.noBrightness:20+t]]:[]))).reduce((e,t)=>e.concat(t)))(),mc=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;return Ac.reduce((e,n)=>{var i=_o(n,3);let r=i[0],s=i[1],o=i[2];return ec.defineProperty(e,r,{get:()=>mc(e=>t(dc(e,s,o)))})},e)},hc=0,fc=1,vc=2;class pc{constructor(e){this.spans=e?function(e){let t=hc,n="",i="",r="",s=[],o=[];for(let c=0,a=e.length;c="0"&&a<="9")r+=a;else if(";"===a)s.push(new lc(r)),r="";else if("m"===a&&r.length){s.push(new lc(r));for(const e of s)o.push({text:i,code:e}),i="";t=hc}else t=hc,i+=n}}return t!==hc&&(i+=n),i&&o.push({text:i,code:new lc}),o}(e):[]}get str(){return this.spans.reduce((e,t)=>e+t.text+t.code.str,"")}get parsed(){let e,t,n,i;function r(){e=new ac,t=new ac(!0),n=void 0,i=new Set}return r(),ec.assign(new pc,{spans:this.spans.map(s=>{const o=s.code,c=i.has("inverse"),a=i.has("underline")?"text-decoration: underline;":"",l=i.has("italic")?"font-style: italic;":"",d=n===lc.bright?"font-weight: bold;":"",u=e.defaultBrightness(n),A=ec.assign({css:d+l+a+u.css(c)+t.css(c)},cc({bold:!!d,color:u.clean,bgColor:t.clean}),s);for(const e of i)A[e]=!0;if(o.isBrightness)n=o.value;else if(void 0!==s.code.value)if(s.code.value===lc.reset)r();else switch(s.code.type){case"color":case"colorLight":e=new ac(!1,o.subtype);break;case"bgColor":case"bgColorLight":t=new ac(!0,o.subtype);break;case"style":i.add(o.subtype);break;case"unstyle":i.delete(o.subtype)}return A}).filter(e=>e.text.length>0)})}get asChromeConsoleLogArguments(){const e=this.parsed.spans;return[e.map(e=>"%c"+e.text).join("")].concat($o(e.map(e=>e.css)))}get browserConsoleArguments(){return this.asChromeConsoleLogArguments}static get nice(){return pc.names.forEach(e=>{e in String.prototype||ec.defineProperty(String.prototype,e,{get:function(){return pc[e](this)}})}),pc}static parse(e){return new pc(e).parsed}static strip(e){return e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g,"")}[Symbol.iterator](){return this.spans[Symbol.iterator]()}}mc(pc,e=>e),pc.names=Ac.map(e=>{return _o(e,1)[0]}),pc.rgb={black:[0,0,0],darkGray:[100,100,100],lightGray:[200,200,200],white:[255,255,255],red:[204,0,0],lightRed:[255,51,0],green:[0,204,0],lightGreen:[51,204,51],yellow:[204,102,0],lightYellow:[255,153,51],blue:[0,0,255],lightBlue:[26,140,255],magenta:[204,0,204],lightMagenta:[255,0,255],cyan:[0,153,255],lightCyan:[0,204,255]};var gc=pc;const wc=Le;function yc(e){if(e)for(const t of e)if(t.results&&t.results.length>0)return!0;return!1}function bc(e){return gc.parse(e)}function Ic(e){const{meta:t}=e,n=t.contentId?`${wc.gray("/")}${wc.cyan(t.contentId)}`:"";return`${wc.green("Content")} → ${wc.magenta(`@${t.providerHost}`)}${n} ${e.providerAddress?wc.gray(`(${t.providerAddress})`):""}`}function Vc(e){const{meta:t}=e,{page:n,noMorePages:i,resultCount:r,resultsFrom:s,resultsTo:o,searchTimePretty:c,networkTimePretty:a}=t;let l="";if(c&&(l+=wc.gray(` · ${wc.gray("fs")} ${wc.green(c)}`)),a&&(l+=wc.gray(` · ${wc.gray("network")} ${wc.cyan(a)}`)),r>0){if(1==n&&i)return wc.yellow(`${r} ${1==r?"result":"results"}${l}`);const e=i?wc.gray(" (last page)"):"",t=`${wc.cyan(`Results ${s} to ${o}`)}`;return wc.gray(`${wc.magenta(`Page ${n}`)}${e} → ${t}${l}`)}return wc.gray(`No ${n>1?"more ":""}results${l}`)}var Ec={selectedDeviceChanged(e){const{queries:t}=this.get();if(t[e]){const{searchQuery:n,mediaType:i}=t[e];this.set({searchQuery:n,mediaType:i})}else this.set({searchQuery:"",mediaType:null})},searchInputChanged(){const{searchQuery:e,selectedDeviceName:t,queries:n,mediaType:i}=this.get();""==e&&this.clearResults(),n[t]=n[t]||{},n[t].searchQuery=e,n[t].mediaType=i,this.set({queries:n});const{prevQuery:r,prevMediaType:s}=n[t];if(e.trim()){if(this.queryDifferentEnough({searchQuery:e,prevQuery:r,mediaType:i,prevMediaType:s})){const e=this.store.remoteObject("player"),t="search",n=120;Eo({searchQuery:this.getSearchQuery(),remoteObject:e,remoteMethod:t,searchDelay:n}).then(e=>{console.log("GOT SEARCH RESULTS"),this.store.currentStore().set({searchResults:e})}).catch(console.log)}n[t].prevQuery=e,n[t].prevMediaType=i,this.set({queries:n})}},queryDifferentEnough({searchQuery:e,prevQuery:t,mediaType:n,prevMediaType:i}){return this.normalizeQuery(e)!=this.normalizeQuery(t)||n!=i},normalizeQuery:e=>e?e.trim().replace(/\s+/g," "):e,addResults(){const e=this.getSearchQuery();e&&this.store.remoteObject("player").call("add",{query:e}).then(e=>{this.store.currentStore().set({searchResults:e})}).catch(console.log),this.clearResults()},insertResults(){const e=this.getSearchQuery();this.store.remoteObject("player").call("insert",{query:e}).then(e=>{this.store.currentStore().set({searchResults:e})}).catch(console.log),this.clearResults()},playResults(){const e=this.getSearchQuery();e&&this.store.remoteObject("player").call("play",{query:e}).catch(console.log),this.clearResults()},clearResults(){const{queries:e,selectedDeviceName:t}=this.get();e[t]={searchQuery:"",prevQuery:""},this.set({queries:e,searchQuery:""}),this.store.currentStore().set({searchResults:null})},getSearchQuery(){let{searchQuery:e,mediaType:t}=this.get();return e=e.trim(),"video"==t&&(e=`${e} @media=video`),e},chooseMediaType(e){this.set({mediaType:e});const{queries:t,selectedDeviceName:n}=this.get();t[n]={mediaType:e},this.set({queries:t}),this.searchInputChanged()},handleKeypress(e){if(!Te.isInputElementActive()&&e.key&&!e.altKey&&!e.metaKey&&!e.shiftKey){const t=this.store.get().player;if(!t)return;" "==e.key&&(e.preventDefault(),t.paused?this.play():this.pause()),"n"==e.key&&this.next(),"s"==e.key&&this.shuffle(),"l"==e.key&&this.limitIncrease(),"m"==e.key&&this.timeLimitIncrease(),"r"==e.key&&this.limitReset();const n=10;"ArrowRight"==e.code&&this.forward(n),"ArrowLeft"==e.code&&this.forward(-n),38!=e.keyCode&&"+"!=e.key&&"="!=e.key||this.volumeUp(),40!=e.keyCode&&"-"!=e.key||this.volumeDown()}},action(e,t){this.set({touchAction:e}),setTimeout(()=>this.set({touchAction:void 0}),50),this.store.signal("action",{action:e,scope:this.scope,payload:t})},selectMediaSource(e){console.log(`Selecting media via: ${e}. todo: browse and search`),alert('Interface for this is coming by v1.0.1 ... use "dmt next" to update the system then or use commandline for now - command "m"')},play(){this.action("play")},pause(){this.action("pause")},next(){this.action("next")},shuffle(){this.action("shuffle")},repeatIncrease(){this.action("repeat")},forward(e){this.action("forward",{seconds:e})},volumeUp(){this.action("volume_up")},volumeDown(){this.action("volume_down")},stop(){this.action("stop")},limitIncrease(){this.get().isStream||this.get().timeLimit?this.action("time_limit"):this.action("limit")},timeLimitIncrease(){this.action("time_limit")},limitReset(){this.action("remove_limit")},timeLimitReset(){this.action("remove_time_limit")},selectMedia(e){this.action("select",{songId:e})},seek(e){this.action("goto",{percentPos:e})},calculateTimeLimit:e=>e.timeLimit>2?`${Math.round(e.timeLimit)} min`:`${Math.round(60*e.timeLimit)} s`};function Rc(){this.scope="player",this.store.entangle(this),this.set({queries:{},searchQuery:""}),this.listener=this.store.on("state",({current:e,changed:t,previous:n})=>{const{prevDeviceName:i,selectedDeviceName:r}=this.get();if(i!=r&&this.selectedDeviceChanged(r),this.set({prevDeviceName:r}),e.thisDeviceState){const{player:t}=e;t&&(t.timeLimit?this.set({timeLimit:this.calculateTimeLimit(t)}):this.set({timeLimit:void 0}),this.set({isStream:t.isStream}))}})}function zc(){this.listener.cancel()}function qc(e){const{component:t,ctx:n}=this._svelte;t.selectMedia(n.song.id)}function Bc(e,t,n){const i=Object.create(e);return i.song=t[n],i}function Mc(e,t,n){const i=Object.create(e);return i.span=t[n],i}function Cc(e,t,n){const i=Object.create(e);return i.filePathANSI=t[n].filePathANSI,i}function Dc(e,t,n){const i=Object.create(e);return i.providerResponse=t[n],i}function Oc(e,t){var n,i,r,s,o,l=!t.atRPi&&Pc(e,t),d=[Sc,Tc],u=[];function A(e){return e.$device.serverMode?0:e.$player?1:-1}return~(i=A(t))&&(r=u[i]=d[i](e,t)),{c(){l&&l.c(),n=h("\n\n "),r&&r.c(),s=f()},m(e,t){l&&l.m(e,t),c(e,n,t),~i&&u[i].m(e,t),c(e,s,t),o=!0},p(t,o){o.atRPi?l&&(l.d(1),l=null):l?l.p(t,o):((l=Pc(e,o)).c(),l.m(n.parentNode,n));var c=i;(i=A(o))===c?~i&&u[i].p(t,o):(r&&r.o((function(){u[c].d(1),u[c]=null})),~i?((r=u[i])||(r=u[i]=d[i](e,o)).c(),r.m(s.parentNode,s)):r=null)},i(e,t){o||this.m(e,t)},o(e){o&&(r?r.o(e):e(),o=!1)},d(e){l&&l.d(e),e&&a(n),~i&&u[i].d(e),e&&a(s)}}}function Pc(e,t){var n,i,r,s,l,d,u,m,f,g,w,y,I,V,E=!1;function R(){E=!0,e.set({searchQuery:i.value}),E=!1}function z(t){e.searchInputChanged()}function q(t){e.searchInputChanged()}function B(t){e.chooseMediaType("music")}function M(t){e.chooseMediaType("video")}function C(t){e.playResults()}function D(t){e.addResults()}function O(t){e.insertResults()}var P=t.searchQuery&&t.searchQuery.trim()&&Zc(e),Z=t.$searchResults&&t.searchQuery&&t.searchQuery.trim()&&Nc(e,t);return{c(){n=A("div"),i=A("input"),r=h("\n\n "),(s=A("button")).textContent="Music",l=h("\n "),(d=A("button")).textContent="Video",u=h("\n\n "),(m=A("button")).textContent="▶ Play",f=h("\n "),(g=A("button")).textContent="Add",w=h("\n "),(y=A("button")).textContent="Insert",I=h("\n\n "),P&&P.c(),V=h("\n\n "),Z&&Z.c(),v(i,"input",R),v(i,"keyup",z),v(i,"paste",q),i.className="search_input svelte-96fn1x",i.placeholder="Search media",v(s,"click",B),s.className="media_type svelte-96fn1x",b(s,"selected","video"!=t.mediaType),v(d,"click",M),d.className="media_type svelte-96fn1x",b(d,"selected","video"==t.mediaType),v(m,"click",C),m.className="action svelte-96fn1x",b(m,"hidden",!yc(t.$searchResults)),v(g,"click",D),g.className="action svelte-96fn1x",b(g,"hidden",!yc(t.$searchResults)),v(y,"click",O),y.className="action svelte-96fn1x",b(y,"hidden",!yc(t.$searchResults)),n.className="search svelte-96fn1x"},m(e,a){c(e,n,a),o(n,i),i.value=t.searchQuery,o(n,r),o(n,s),o(n,l),o(n,d),o(n,u),o(n,m),o(n,f),o(n,g),o(n,w),o(n,y),o(n,I),P&&P.m(n,null),o(n,V),Z&&Z.m(n,null)},p(t,r){!E&&t.searchQuery&&(i.value=r.searchQuery),t.mediaType&&(b(s,"selected","video"!=r.mediaType),b(d,"selected","video"==r.mediaType)),t.$searchResults&&(b(m,"hidden",!yc(r.$searchResults)),b(g,"hidden",!yc(r.$searchResults)),b(y,"hidden",!yc(r.$searchResults))),r.searchQuery&&r.searchQuery.trim()?P||((P=Zc(e)).c(),P.m(n,V)):P&&(P.d(1),P=null),r.$searchResults&&r.searchQuery&&r.searchQuery.trim()?Z?Z.p(t,r):((Z=Nc(e,r)).c(),Z.m(n,null)):Z&&(Z.d(1),Z=null)},d(e){e&&a(n),p(i,"input",R),p(i,"keyup",z),p(i,"paste",q),p(s,"click",B),p(d,"click",M),p(m,"click",C),p(g,"click",D),p(y,"click",O),P&&P.d(),Z&&Z.d()}}}function Zc(e,t){var n;function i(t){e.clearResults()}return{c(){(n=A("button")).textContent="Clear",v(n,"click",i),n.className="clear svelte-96fn1x"},m(e,t){c(e,n,t)},d(e){e&&a(n),p(n,"click",i)}}}function Nc(e,t){for(var n,i=t.$searchResults,r=[],s=0;sThere is no player available in serverMode',i.className="player svelte-96fn1x"},m(e,t){c(e,i,t),r=!0},p:t,i(e,t){r||this.m(e,t)},o:s,d(e){e&&a(i)}}}function Lc(e,t){var n,i,r,l,d,u,m,f,v=t.$player.error.type,p=t.$player.error.msg.replace("\n","
"),g="mpv_binary_missing"==t.$player.error.type&&Yc(e,t);return{c(){n=A("div"),i=A("h1"),r=h("⚠️ "),l=h(v),d=h("\n\n "),u=A("h2"),m=h("\n\n "),g&&g.c(),i.className="error svelte-96fn1x",u.className="error svelte-96fn1x",n.className="player svelte-96fn1x"},m(e,t){c(e,n,t),o(n,i),o(i,r),o(i,l),o(n,d),o(n,u),u.innerHTML=p,o(n,m),g&&g.m(n,null),f=!0},p(t,i){t.$player&&v!==(v=i.$player.error.type)&&w(l,v),t.$player&&p!==(p=i.$player.error.msg.replace("\n","
"))&&(u.innerHTML=p),"mpv_binary_missing"==i.$player.error.type?g?g.p(t,i):((g=Yc(e,i)).c(),g.m(n,null)):g&&(g.d(1),g=null)},i(e,t){f||this.m(e,t)},o:s,d(e){e&&a(n),g&&g.d()}}}function Jc(e,t){var n,i,s,l,d,u,m,f,g,w,y,I,V,E,R,z,q,B,M,C,D,O,P,Z,N=(t.$player.isStream||t.$playlist&&t.$playlist.length>0)&&Kc(e,t),H=!t.$player.isStream&&t.$playlist&&t.$playlist.length>0&&$c(e,t),k=t.$player.isStream&&ta(e,t);function j(t){e.volumeDown()}function x(t){e.volumeUp()}function X(e){return e.homebase?ia:na}var T=X(t),S=T(e,t);function L(e){return!e.$player.isStream&&e.$player.limit?sa:e.$player.timeLimit?ra:void 0}var J=L(t),Y=J&&J(e,t),G=t.$player.limitReached&&oa(),W=t.$player.timeLimitReached&&ca(),K=!t.$player.isStream&&aa(e,t),F=t.$player.currentMedia&&t.$player.currentMedia.song&&da(e,t),Q=[ha,ma],U=[];function _(e){return e.$player.hasMissingMedia&&!e.$player.isStream||e.$playlistMetadata.playlistHasSelectedEntries||e.$playlistMetadata.playlistClipboard?0:1}D=_(t),O=U[D]=Q[D](e,t);var $=!t.$player.isStream&&t.$playlist&&fa(e,t);return{c(){n=A("div"),i=A("div"),N&&N.c(),s=h("\n\n "),H&&H.c(),l=h("\n\n "),k&&k.c(),d=h("\n\n "),u=A("button"),m=h("Vol ⬇"),g=h("\n "),w=A("button"),y=h("Vol ⬆"),V=h("\n \n "),S.c(),E=h("\n\n \n "),Y&&Y.c(),R=h("\n\n "),G&&G.c(),z=h("\n\n "),W&&W.c(),q=h("\n\n \n\n "),K&&K.c(),B=h("\n\n \n\n "),F&&F.c(),M=h("\n\n \n "),C=A("div"),O.c(),P=h("\n\n \n\n "),$&&$.c(),v(u,"click",j),u.className="volume svelte-96fn1x",u.disabled=f=!t.$connected||0==t.$player.volume,b(u,"touch_pressed","volume_down"==t.touchAction),v(w,"click",x),w.className="volume svelte-96fn1x",w.disabled=I=!t.$connected||100==t.$player.volume,b(w,"touch_pressed","volume_up"==t.touchAction),i.className="control svelte-96fn1x",C.id="player_ribbon_top",C.className="svelte-96fn1x",n.className="player svelte-96fn1x",b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t),o(n,i),N&&N.m(i,null),o(i,s),H&&H.m(i,null),o(i,l),k&&k.m(i,null),o(i,d),o(i,u),o(u,m),o(i,g),o(i,w),o(w,y),o(i,V),S.m(i,null),o(n,E),Y&&Y.m(n,null),o(n,R),G&&G.m(n,null),o(n,z),W&&W.m(n,null),o(n,q),K&&K.m(n,null),o(n,B),F&&F.m(n,null),o(n,M),o(n,C),U[D].m(C,null),o(n,P),$&&$.m(n,null),Z=!0},p(t,r){r.$player.isStream||r.$playlist&&r.$playlist.length>0?N?N.p(t,r):((N=Kc(e,r)).c(),N.m(i,s)):N&&(N.d(1),N=null),!r.$player.isStream&&r.$playlist&&r.$playlist.length>0?H?H.p(t,r):((H=$c(e,r)).c(),H.m(i,l)):H&&(H.d(1),H=null),r.$player.isStream?k?k.p(t,r):((k=ta(e,r)).c(),k.m(i,d)):k&&(k.d(1),k=null),Z&&!t.$connected&&!t.$player||f===(f=!r.$connected||0==r.$player.volume)||(u.disabled=f),t.touchAction&&b(u,"touch_pressed","volume_down"==r.touchAction),Z&&!t.$connected&&!t.$player||I===(I=!r.$connected||100==r.$player.volume)||(w.disabled=I),t.touchAction&&b(w,"touch_pressed","volume_up"==r.touchAction),T===(T=X(r))&&S?S.p(t,r):(S.d(1),(S=T(e,r)).c(),S.m(i,null)),J===(J=L(r))&&Y?Y.p(t,r):(Y&&Y.d(1),(Y=J&&J(e,r))&&Y.c(),Y&&Y.m(n,R)),r.$player.limitReached?G||((G=oa()).c(),G.m(n,z)):G&&(G.d(1),G=null),r.$player.timeLimitReached?W||((W=ca()).c(),W.m(n,q)):W&&(W.d(1),W=null),r.$player.isStream?K&&(K.d(1),K=null):K?K.p(t,r):((K=aa(e,r)).c(),K.m(n,B)),r.$player.currentMedia&&r.$player.currentMedia.song?(F?F.p(t,r):(F=da(e,r))&&F.c(),F.i(n,M)):F&&F.o((function(){F.d(1),F=null}));var o=D;(D=_(r))!==o&&(O.o((function(){U[o].d(1),U[o]=null})),(O=U[D])||(O=U[D]=Q[D](e,r)).c(),O.m(C,null)),!r.$player.isStream&&r.$playlist?$?$.p(t,r):(($=fa(e,r)).c(),$.m(n,null)):$&&($.d(1),$=null),t.atRPi&&b(n,"nonRPi",!r.atRPi)},i(e,t){Z||this.m(e,t)},o(e){Z&&(e=r(e,2),F?F.o(e):e(),O?O.o(e):e(),Z=!1)},d(e){e&&a(n),N&&N.d(),H&&H.d(),k&&k.d(),p(u,"click",j),p(w,"click",x),S.d(),Y&&Y.d(),G&&G.d(),W&&W.d(),K&&K.d(),F&&F.d(),U[D].d(),$&&$.d()}}}function Yc(e,t){var n;function i(e){return e.atRPi?Wc:Gc}var r=i(t),s=r(e,t);return{c(){s.c(),n=f()},m(e,t){s.m(e,t),c(e,n,t)},p(t,o){r===(r=i(o))&&s?s.p(t,o):(s.d(1),(s=r(e,o)).c(),s.m(n.parentNode,n))},d(e){s.d(e),e&&a(n)}}}function Gc(e,t){var n,i,r,s;return{c(){n=h("🆘 "),i=A("a"),r=h("Click here for install instructions ..."),i.href=s="$"+t.$player.error.helpUrl,i.className="svelte-96fn1x"},m(e,t){c(e,n,t),c(e,i,t),o(i,r)},p(e,t){e.$player&&s!==(s="$"+t.$player.error.helpUrl)&&(i.href=s)},d(e){e&&(a(n),a(i))}}}function Wc(e,n){var i;return{c(){i=h("Please use the DMT RaspberryPi guide to compile the mpv project.")},m(e,t){c(e,i,t)},p:t,d(e){e&&a(i)}}}function Kc(e,t){var n;function i(e){return e.$player.paused?Qc:Fc}var r=i(t),s=r(e,t);return{c(){s.c(),n=f()},m(e,t){s.m(e,t),c(e,n,t)},p(t,o){r===(r=i(o))&&s?s.p(t,o):(s.d(1),(s=r(e,o)).c(),s.m(n.parentNode,n))},d(e){s.d(e),e&&a(n)}}}function Fc(e,t){var n,i,r;function s(t){e.pause()}return{c(){n=A("button"),i=h("● Pause"),v(n,"click",s),n.className="pause svelte-96fn1x",n.disabled=r=!t.$connected,b(n,"touch_pressed","pause"==t.touchAction)},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$connected&&r!==(r=!t.$connected)&&(n.disabled=r),e.touchAction&&b(n,"touch_pressed","pause"==t.touchAction)},d(e){e&&a(n),p(n,"click",s)}}}function Qc(e,t){var n;function i(e){return e.homebase?_c:Uc}var r=i(t),s=r(e,t);return{c(){s.c(),n=f()},m(e,t){s.m(e,t),c(e,n,t)},p(t,o){r===(r=i(o))&&s?s.p(t,o):(s.d(1),(s=r(e,o)).c(),s.m(n.parentNode,n))},d(e){s.d(e),e&&a(n)}}}function Uc(e,t){var n,i,r;function s(t){e.play()}return{c(){n=A("button"),i=h("▶ Play"),v(n,"click",s),n.className="play foreign svelte-96fn1x",n.disabled=r=!t.$connected,b(n,"touch_pressed","play"==t.touchAction)},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$connected&&r!==(r=!t.$connected)&&(n.disabled=r),e.touchAction&&b(n,"touch_pressed","play"==t.touchAction)},d(e){e&&a(n),p(n,"click",s)}}}function _c(e,t){var n,i,r;function s(t){e.play()}return{c(){n=A("button"),i=h("▶ Play"),v(n,"click",s),n.className="play svelte-96fn1x",n.disabled=r=!t.$connected,b(n,"touch_pressed","play"==t.touchAction)},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$connected&&r!==(r=!t.$connected)&&(n.disabled=r),e.touchAction&&b(n,"touch_pressed","play"==t.touchAction)},d(e){e&&a(n),p(n,"click",s)}}}function $c(e,t){var n,i,r,s,l,d,u,m,f,g,y,I,V,E,R,z,q=t.$player.limit||"";function B(t){e.limitIncrease()}function M(t){e.next()}function C(t){e.shuffle()}var D=t.$player.repeatCount&&ea(e,t);function O(t){e.repeatIncrease()}return{c(){n=A("button"),i=h("Limit "),r=h(q),l=h("\n "),d=A("button"),u=h("➬ Next"),f=h("\n "),g=A("button"),y=h("Shuffle"),V=h("\n\n "),E=A("button"),R=h("Repeat\n "),D&&D.c(),v(n,"click",B),n.disabled=s=!t.$connected,n.className="svelte-96fn1x",b(n,"limit_active",t.$player.limit>0),b(n,"time_limit_active",t.$player.timeLimit>0),b(n,"touch_pressed","limit"==t.touchAction||"time_limit"==t.touchAction),v(d,"click",M),d.disabled=m=!t.$connected,d.className="svelte-96fn1x",b(d,"touch_pressed","next"==t.touchAction),v(g,"click",C),g.disabled=I=!t.$connected,g.className="svelte-96fn1x",b(g,"touch_pressed","shuffle"==t.touchAction),v(E,"click",O),E.disabled=z=!t.$connected,E.className="svelte-96fn1x",b(E,"touch_pressed","repeat"==t.touchAction),b(E,"repeat_active1",1==t.$player.repeatCount),b(E,"repeat_active2",2==t.$player.repeatCount),b(E,"repeat_active3",3==t.$player.repeatCount)},m(e,t){c(e,n,t),o(n,i),o(n,r),c(e,l,t),c(e,d,t),o(d,u),c(e,f,t),c(e,g,t),o(g,y),c(e,V,t),c(e,E,t),o(E,R),D&&D.m(E,null)},p(t,i){t.$player&&q!==(q=i.$player.limit||"")&&w(r,q),t.$connected&&s!==(s=!i.$connected)&&(n.disabled=s),t.$player&&(b(n,"limit_active",i.$player.limit>0),b(n,"time_limit_active",i.$player.timeLimit>0)),t.touchAction&&b(n,"touch_pressed","limit"==i.touchAction||"time_limit"==i.touchAction),t.$connected&&m!==(m=!i.$connected)&&(d.disabled=m),t.touchAction&&b(d,"touch_pressed","next"==i.touchAction),t.$connected&&I!==(I=!i.$connected)&&(g.disabled=I),t.touchAction&&b(g,"touch_pressed","shuffle"==i.touchAction),i.$player.repeatCount?D?D.p(t,i):((D=ea(e,i)).c(),D.m(E,null)):D&&(D.d(1),D=null),t.$connected&&z!==(z=!i.$connected)&&(E.disabled=z),t.touchAction&&b(E,"touch_pressed","repeat"==i.touchAction),t.$player&&(b(E,"repeat_active1",1==i.$player.repeatCount),b(E,"repeat_active2",2==i.$player.repeatCount),b(E,"repeat_active3",3==i.$player.repeatCount))},d(e){e&&a(n),p(n,"click",B),e&&(a(l),a(d)),p(d,"click",M),e&&(a(f),a(g)),p(g,"click",C),e&&(a(V),a(E)),D&&D.d(),p(E,"click",O)}}}function ea(e,t){var n,i=t.$player.repeatCount;return{c(){n=h(i)},m(e,t){c(e,n,t)},p(e,t){e.$player&&i!==(i=t.$player.repeatCount)&&w(n,i)},d(e){e&&a(n)}}}function ta(e,t){var n,i,r,s,l,d,u;function m(t){e.limitIncrease()}function f(t){e.stop()}return{c(){n=A("button"),i=h("Limit"),s=h("\n "),l=A("button"),d=h("Quit"),v(n,"click",m),n.disabled=r=!t.$connected,n.className="svelte-96fn1x",b(n,"time_limit_active",t.$player.timeLimit>0),b(n,"touch_pressed","limit"==t.touchAction||"time_limit"==t.touchAction),v(l,"click",f),l.disabled=u=!t.$connected,l.className="svelte-96fn1x",b(l,"touch_pressed","stop"==t.touchAction)},m(e,t){c(e,n,t),o(n,i),c(e,s,t),c(e,l,t),o(l,d)},p(e,t){e.$connected&&r!==(r=!t.$connected)&&(n.disabled=r),e.$player&&b(n,"time_limit_active",t.$player.timeLimit>0),e.touchAction&&b(n,"touch_pressed","limit"==t.touchAction||"time_limit"==t.touchAction),e.$connected&&u!==(u=!t.$connected)&&(l.disabled=u),e.touchAction&&b(l,"touch_pressed","stop"==t.touchAction)},d(e){e&&a(n),p(n,"click",m),e&&(a(s),a(l)),p(l,"click",f)}}}function na(e,t){var n,i,r=t.$player.volume;return{c(){n=A("span"),i=h(r),n.className="volume foreign svelte-96fn1x"},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$player&&r!==(r=t.$player.volume)&&w(i,r)},d(e){e&&a(n)}}}function ia(e,t){var n,i,r=t.$player.volume;return{c(){n=A("span"),i=h(r),n.className="volume svelte-96fn1x"},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.$player&&r!==(r=t.$player.volume)&&w(i,r)},d(e){e&&a(n)}}}function ra(e,t){var n,i,r,s,l,d,u,m,f;function g(t){t.preventDefault(),t.stopPropagation(),e.timeLimitReset()}function y(t){t.preventDefault(),t.stopPropagation(),e.timeLimitIncrease()}return{c(){n=A("div"),i=A("span"),r=h("Stopping in "),s=A("span"),l=h(t.timeLimit),d=h("\n ■ "),(u=A("a")).textContent="REMOVE LIMIT",m=h("\n ■ "),(f=A("a")).textContent="ADD MORE TIME",s.className="limit_num svelte-96fn1x",v(u,"click",g),u.href="#",u.className="svelte-96fn1x",b(u,"touch_pressed","remove_time_limit"==t.touchAction),v(f,"click",y),f.href="#",f.className="set_time_limit svelte-96fn1x",b(f,"touch_pressed","time_limit"==t.touchAction),i.className="time_limit svelte-96fn1x",b(i,"grayed_out",t.$player.paused),n.className="limit_info svelte-96fn1x"},m(e,t){c(e,n,t),o(n,i),o(i,r),o(i,s),o(s,l),o(i,d),o(i,u),o(i,m),o(i,f)},p(e,t){e.timeLimit&&w(l,t.timeLimit),e.touchAction&&(b(u,"touch_pressed","remove_time_limit"==t.touchAction),b(f,"touch_pressed","time_limit"==t.touchAction)),e.$player&&b(i,"grayed_out",t.$player.paused)},d(e){e&&a(n),p(u,"click",g),p(f,"click",y)}}}function sa(e,t){var n,i,r,s,l,d,u,m,f,g,y,I=1==t.$player.limit?"current":t.$player.limit,V=1==t.$player.limit?"track":"tracks";function E(t){t.preventDefault(),t.stopPropagation(),e.limitReset()}function R(t){t.preventDefault(),t.stopPropagation(),e.timeLimitIncrease()}return{c(){n=A("div"),i=A("span"),r=h("Stop after "),s=A("span"),l=h(I),d=h(" "),u=h(V),m=h(" ■ "),(f=A("a")).textContent="REMOVE LIMIT",g=h(" ■ "),(y=A("a")).textContent="SET TIME LIMIT",s.className="limit_num svelte-96fn1x",v(f,"click",E),f.href="#",f.className="svelte-96fn1x",b(f,"touch_pressed","remove_limit"==t.touchAction),v(y,"click",R),y.href="#",y.className="set_time_limit svelte-96fn1x",b(y,"touch_pressed","time_limit"==t.touchAction),i.className="track_limit svelte-96fn1x",n.className="limit_info svelte-96fn1x"},m(e,t){c(e,n,t),o(n,i),o(i,r),o(i,s),o(s,l),o(i,d),o(i,u),o(i,m),o(i,f),o(i,g),o(i,y)},p(e,t){e.$player&&I!==(I=1==t.$player.limit?"current":t.$player.limit)&&w(l,I),e.$player&&V!==(V=1==t.$player.limit?"track":"tracks")&&w(u,V),e.touchAction&&(b(f,"touch_pressed","remove_limit"==t.touchAction),b(y,"touch_pressed","time_limit"==t.touchAction))},d(e){e&&a(n),p(f,"click",E),p(y,"click",R)}}}function oa(e,t){var n;return{c(){(n=A("div")).textContent="Paused because limit was reached.",n.className="limit_reached svelte-96fn1x"},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function ca(e,t){var n;return{c(){(n=A("div")).textContent="Paused because time limit was reached.",n.className="time_limit_reached svelte-96fn1x"},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function aa(e,t){var n,i=(!t.$playlist||0==t.$playlist.length)&&la();return{c(){i&&i.c(),n=f()},m(e,t){i&&i.m(e,t),c(e,n,t)},p(e,t){t.$playlist&&0!=t.$playlist.length?i&&(i.d(1),i=null):i||((i=la()).c(),i.m(n.parentNode,n))},d(e){i&&i.d(e),e&&a(n)}}}function la(e,t){var n;return{c(){(n=A("div")).innerHTML='

Playlist is empty

',n.className="player_notice svelte-96fn1x"},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function da(e,t){var n,i,r,s,l,d,u,m,f=t.$player.currentMedia.song,v=!t.$player.paused&&ua(),p=t.$player.currentMedia.artist&&Aa(e,t),g=new no({root:e.root,store:e.store});return g.on("seek",(function(t){e.seek(t.percentPos)})),{c(){n=A("div"),i=A("div"),v&&v.c(),r=h("\n\n "),p&&p.c(),s=h("\n\n "),l=h(f),d=h("\n\n "),u=A("div"),g._fragment.c(),i.className="song svelte-96fn1x",b(i,"bigger",t.$player.currentMedia.song.length<35),n.className="streaming_media_info svelte-96fn1x",b(n,"faded",t.$player.paused),u.className="time_position svelte-96fn1x"},m(e,t){c(e,n,t),o(n,i),v&&v.m(i,null),o(i,r),p&&p.m(i,null),o(i,s),o(i,l),c(e,d,t),c(e,u,t),g._mount(u,null),m=!0},p(t,o){o.$player.paused?v&&(v.d(1),v=null):v||((v=ua()).c(),v.m(i,r)),o.$player.currentMedia.artist?p?p.p(t,o):((p=Aa(e,o)).c(),p.m(i,s)):p&&(p.d(1),p=null),m&&!t.$player||f===(f=o.$player.currentMedia.song)||w(l,f),t.$player&&(b(i,"bigger",o.$player.currentMedia.song.length<35),b(n,"faded",o.$player.paused))},i(e,t){m||this.m(e,t)},o(e){m&&(g&&g._fragment.o(e),m=!1)},d(e){e&&a(n),v&&v.d(),p&&p.d(),e&&(a(d),a(u)),g.destroy()}}}function ua(e,t){var n;return{c(){(n=A("span")).textContent="♪♫♬",n.className="svelte-96fn1x"},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function Aa(e,t){var n,i,r=t.$player.currentMedia.artist;return{c(){n=h(r),i=h(" -")},m(e,t){c(e,n,t),c(e,i,t)},p(e,t){e.$player&&r!==(r=t.$player.currentMedia.artist)&&w(n,r)},d(e){e&&(a(n),a(i))}}}function ma(e,t){var n,i=new Xo({root:e.root,store:e.store});return{c(){i._fragment.c()},m(e,t){i._mount(e,t),n=!0},i(e,t){n||this.m(e,t)},o(e){n&&(i&&i._fragment.o(e),n=!1)},d(e){i.destroy(e)}}}function ha(e,t){var n,i=new Uo({root:e.root,store:e.store});return i.on("mediaSourceOption",(function(t){e.selectMediaSource(t.mediaSourceOption)})),{c(){i._fragment.c()},m(e,t){i._mount(e,t),n=!0},i(e,t){n||this.m(e,t)},o(e){n&&(i&&i._fragment.o(e),n=!1)},d(e){i.destroy(e)}}}function fa(e,t){for(var n,i,r=t.$playlist,s=[],l=0;l0),u.className="id svelte-96fn1x",y.className="song svelte-96fn1x",d._svelte={component:e,ctx:t},v(d,"click",qc),d.className="svelte-96fn1x",b(d,"playing",t.song.current&&!t.$player.paused&&!t.$player.isStream),b(d,"past",t.song.past),b(d,"within_limit",t.song.withinLimit),b(d,"about_to_be_cut",t.song.aboutToBeCut),b(d,"selected",t.song.selected),b(d,"just_pasted",t.song.justPasted),b(d,"just_bumped",t.song.justBumped),b(d,"error",t.song.error),b(d,"metadata_read",t.song.metadata),l.className="li_wrapper svelte-96fn1x",b(l,"darker",t.song.directoryTogetherness)},m(e,t){M&&M.m(e,t),c(e,n,t),c(e,i,t),o(i,r),c(e,s,t),c(e,l,t),o(l,d),o(d,u),o(u,m),o(d,f),C&&C.m(d,null),o(d,g),o(d,y),o(y,I),o(y,V),D&&D.m(y,null),o(d,E),O&&O.m(d,null),o(l,R)},p(e,s){(t=s).song.albumTitle?M?M.p(e,t):((M=va(0,t)).c(),M.m(n.parentNode,n)):M&&(M.d(1),M=null),(e.$playlist||e.$player)&&z!==(z=t.song.current?t.$player.paused?"●":t.$player.currentMedia&&t.$player.currentMedia.mediaType&&"music"!=t.$player.currentMedia.mediaType?"▶":"♫":"")&&w(r,z),e.$player&&b(i,"limit_marker",t.$player.limit>0),e.$playlist&&q!==(q=Te.pad(t.song.id))&&w(m,q),t.song.metadata&&t.song.metadata.duration&&"video"==t.song.mediaType?C?C.p(e,t):((C=pa(0,t)).c(),C.m(d,g)):C&&(C.d(1),C=null),e.$playlist&&B!==(B=t.song.title)&&w(I,B),t.song.current&&t.$player.repeatCount?D?D.p(e,t):((D=ga(0,t)).c(),D.m(y,null)):D&&(D.d(1),D=null),t.song.metadata&&t.song.metadata.duration&&"music"==t.song.mediaType?O?O.p(e,t):((O=wa(0,t)).c(),O.m(d,null)):O&&(O.d(1),O=null),d._svelte.ctx=t,(e.$playlist||e.$player)&&b(d,"playing",t.song.current&&!t.$player.paused&&!t.$player.isStream),e.$playlist&&(b(d,"past",t.song.past),b(d,"within_limit",t.song.withinLimit),b(d,"about_to_be_cut",t.song.aboutToBeCut),b(d,"selected",t.song.selected),b(d,"just_pasted",t.song.justPasted),b(d,"just_bumped",t.song.justBumped),b(d,"error",t.song.error),b(d,"metadata_read",t.song.metadata),b(l,"darker",t.song.directoryTogetherness))},d(e){M&&M.d(e),e&&(a(n),a(i),a(s),a(l)),C&&C.d(),D&&D.d(),O&&O.d(),p(d,"click",qc)}}}function ba(e){B(this,e),this._state=n(this.store._init(["connected","device","searchResults","player","playlist","playlistMetadata"]),e.data),this.store._add(this,["connected","device","searchResults","player","playlist","playlistMetadata"]),this._intro=!!e.intro,this._handlers.destroy=[zc,D],this._fragment=function(e,t){var n,i;function r(t){e.handleKeypress(t)}window.addEventListener("keydown",r);var s=t.loaded&&t.$connected&&t.$device&&Oc(e,t);return{c(){s&&s.c(),n=f()},m(e,t){s&&s.m(e,t),c(e,n,t),i=!0},p(t,i){i.loaded&&i.$connected&&i.$device?(s?s.p(t,i):(s=Oc(e,i))&&s.c(),s.i(n.parentNode,n)):s&&s.o((function(){s.d(1),s=null}))},i(e,t){i||this.m(e,t)},o(e){i&&(s?s.o(e):e(),i=!1)},d(e){window.removeEventListener("keydown",r),s&&s.d(e),e&&a(n)}}}(this,this._state),this.root._oncreate.push(()=>{Rc.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function Ia(){const e=new Date;return{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}}function Va(){const e=()=>{this.set(Ia()),this.timer=setTimeout(e,1e3)};e()}function Ea(){clearTimeout(this.timer)}function Ra(e,t,n){const i=Object.create(e);return i.offset=t[n],i}function za(e,t,n){const i=Object.create(e);return i.minute=t[n],i}function qa(e,t){var n;return{c(){g(n=m("line"),"class","minor svelte-mdkkpl"),g(n,"y1","42"),g(n,"y2","45"),g(n,"transform","rotate("+6*(t.minute+t.offset)+")")},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function Ba(e,t){for(var n,i,r=[1,2,3,4],s=[],o=0;o{Va.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(ba.prototype,O),n(ba.prototype,Ec),n(Ma.prototype,O);var Ca={go(e){window.location.href=`http://${window.location.hostname}:${window.location.port}/${e}`},select(e){this.fire("select",{view:e})},toggleClock(){this.set({clockHidden:!this.get().clockHidden});const e=this.get().clockHidden?"hidden":"visible";document.getElementById("clock_inner").style.visibility=e}};function Da(){this.store.entangle(this),this.listener=this.store.on("state",({current:e,changed:t,previous:n})=>{})}function Oa(){this.listener.cancel()}function Pa(e,t){var n,i,r=t.$connected&&Za(e,t);return{c(){r&&r.c(),n=f()},m(e,t){r&&r.m(e,t),c(e,n,t),i=!0},p(t,i){i.$connected?(r?r.p(t,i):(r=Za(e,i))&&r.c(),r.i(n.parentNode,n)):r&&r.o((function(){r.d(1),r=null}))},i(e,t){i||this.m(e,t)},o(e){i&&(r?r.o(e):e(),i=!1)},d(e){r&&r.d(e),e&&a(n)}}}function Za(e,t){var n,i,s,l,d=new Ma({root:e.root,store:e.store});function u(t){e.toggleClock()}var m=new lo({root:e.root,store:e.store});return m.on("select",(function(t){e.select(t.view)})),{c(){n=A("div"),i=A("div"),d._fragment.c(),s=h("\n\n "),m._fragment.c(),i.id="clock_inner",v(n,"click",u),n.id="analog_clock",n.className="svelte-bgs5sd",b(n,"hidden",t.viewDef&&("none"==t.viewDef.show||"blank"==t.viewDef.show))},m(e,t){c(e,n,t),o(n,i),d._mount(i,null),c(e,s,t),m._mount(e,t),l=!0},p(e,t){e.viewDef&&b(n,"hidden",t.viewDef&&("none"==t.viewDef.show||"blank"==t.viewDef.show))},i(e,t){l||this.m(e,t)},o(e){l&&(e=r(e,2),d&&d._fragment.o(e),m&&m._fragment.o(e),l=!1)},d(e){e&&a(n),d.destroy(),p(n,"click",u),e&&a(s),m.destroy(e)}}}function Na(e){var t,r,s,o,l;B(this,e),this._state=n(this.store._init(["connected"]),e.data),this.store._add(this,["connected"]),this._intro=!!e.intro,this._handlers.destroy=[Oa,D],this._fragment=(t=this,r=this._state,l=r.loaded&&Pa(t,r),{c(){l&&l.c(),s=f()},m(e,t){l&&l.m(e,t),c(e,s,t),o=!0},p(e,n){n.loaded?(l?l.p(e,n):(l=Pa(t,n))&&l.c(),l.i(s.parentNode,s)):l&&l.o((function(){l.d(1),l=null}))},i(e,t){o||this.m(e,t)},o(e){o&&(l?l.o(e):e(),o=!1)},d(e){l&&l.d(e),e&&a(s)}}),this.root._oncreate.push(()=>{Da.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function Ha(){}function ka(e,t,n){const i=Object.create(e);return i.appName=t[n].appName,i.isUserApp=t[n].isUserApp,i.isDeviceApp=t[n].isDeviceApp,i.overridesSystemApp=t[n].overridesSystemApp,i.overridesUserApp=t[n].overridesUserApp,i}function ja(e,t){var n,i=t.$thisDeviceState&&t.$thisDeviceState.appList&&xa(e,t);return{c(){n=A("div"),i&&i.c(),n.id="app_list",n.className="svelte-1grmvl4"},m(e,t){c(e,n,t),i&&i.m(n,null)},p(t,r){r.$thisDeviceState&&r.$thisDeviceState.appList?i?i.p(t,r):((i=xa(e,r)).c(),i.m(n,null)):i&&(i.d(1),i=null)},d(e){e&&a(n),i&&i.d()}}}function xa(e,t){for(var n,i=t.$thisDeviceState.appList,r=[],s=0;s{Ha.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function Wa(){this.store.entangle(this)}function Ka(e,t){var n,i,r=new rs({root:e.root,store:e.store});return{c(){n=A("div"),r._fragment.c(),n.id="iot_actions",n.className="svelte-1v4q3y7"},m(e,t){c(e,n,t),r._mount(n,null),i=!0},i(e,t){i||this.m(e,t)},o(e){i&&(r&&r._fragment.o(e),i=!1)},d(e){e&&a(n),r.destroy()}}}function Fa(e){var t,r,s,o,l;B(this,e),this._state=n(this.store._init(["connected"]),e.data),this.store._add(this,["connected"]),this._intro=!!e.intro,this._handlers.destroy=[D],this._fragment=(t=this,r=this._state,l=r.$connected&&Ka(t),{c(){l&&l.c(),s=f()},m(e,t){l&&l.m(e,t),c(e,s,t),o=!0},p(e,n){n.$connected?(l||(l=Ka(t)).c(),l.i(s.parentNode,s)):l&&l.o((function(){l.d(1),l=null}))},i(e,t){o||this.m(e,t)},o(e){o&&(l?l.o(e):e(),o=!1)},d(e){l&&l.d(e),e&&a(s)}}),this.root._oncreate.push(()=>{Wa.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Na.prototype,O),n(Na.prototype,Ca),n(Ga.prototype,O),n(Fa.prototype,O);var Qa={doc(e){this.set({doc:e})}};function Ua(){this.store.entangle(this),this.set({doc:"a"})}function _a(e,t){var n;return{c(){(n=A("p")).innerHTML="\n\t\t\t Please visit uniqpath.com to learn more.\n\t\t\t ",n.className="svelte-13jignu"},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function $a(e){var t,r,o,l;B(this,e),this._state=n({},e.data),this._intro=!!e.intro,this._fragment=(t=this._state,l="a"==t.doc&&_a(),{c(){r=A("div"),l&&l.c(),r.id="help",r.className="svelte-13jignu"},m(e,t){c(e,r,t),l&&l.m(r,null),o=!0},p(e,t){"a"==t.doc?l||((l=_a()).c(),l.m(r,null)):l&&(l.d(1),l=null)},i(e,t){o||this.m(e,t)},o:s,d(e){e&&a(r),l&&l.d()}}),this.root._oncreate.push(()=>{Ua.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function el(e){return Te.colorJSON(e)}function tl(){const e=()=>{const t=Date.now();this.set({now:t}),this.timeout=setTimeout(e,1e3)};e()}function nl(){clearTimeout(this.timeout)}function il(e,t,n){const i=Object.create(e);return i.sensor=t[n],i}function rl(e,t,n){const i=Object.create(e);return i.sensorType=t[n],i}function sl(e,t){var n;return{c(){(n=A("span")).textContent="Sensor reading error...",n.className="error svelte-73m1e0"},m(e,t){c(e,n,t)},d(e){e&&a(n)}}}function ol(e,n){var i;return{c(){(i=A("span")).textContent="now",i.className="svelte-73m1e0"},m(e,t){c(e,i,t)},p:t,d(e){e&&a(i)}}}function cl(e,t){var n,i,r=t.sensor.updateRelativeTime;return{c(){n=h(r),i=h(" ago")},m(e,t){c(e,n,t),c(e,i,t)},p(e,t){(e.computedSensorsByType||e.Object)&&r!==(r=t.sensor.updateRelativeTime)&&w(n,r)},d(e){e&&(a(n),a(i))}}}function al(e,t){var n,i,r,s,l,d,u,m,f=t.sensor.id,v=t.sensor.error&&sl();function p(e){return e.sensor.updateRelativeTime?cl:ol}var g=p(t),y=g(e,t);return{c(){n=A("div"),i=A("h3"),r=h(f),s=h("\n\n "),v&&v.c(),l=h("\n\n "),d=A("p"),u=h("LAST UPDATE:\n\n "),y.c(),m=h("\n "),i.className="svelte-73m1e0",n.className="sensor_info svelte-73m1e0"},m(e,t){c(e,n,t),o(n,i),o(i,r),o(n,s),v&&v.m(n,null),o(n,l),o(n,d),o(d,u),y.m(d,null),o(n,m)},p(t,i){(t.computedSensorsByType||t.Object)&&f!==(f=i.sensor.id)&&w(r,f),i.sensor.error?v||((v=sl()).c(),v.m(n,l)):v&&(v.d(1),v=null),g===(g=p(i))&&y?y.p(t,i):(y.d(1),(y=g(e,i)).c(),y.m(d,null))},d(e){e&&a(n),v&&v.d(),y.d()}}}function ll(e,t){for(var n,i,r,s,l=t.sensorType,u=t.computedSensorsByType[t.sensorType],m=[],v=0;v{tl.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n($a.prototype,O),n($a.prototype,Qa),n(dl.prototype,O),dl.prototype._recompute=function(e,t){e.sensors&&this._differs(t.sensorIds,t.sensorIds=t)&&(e.sensorIds=!0),(e.sensors||e.now)&&this._differs(t.computedSensorsByType,t.computedSensorsByType=function({sensors:e,now:t}){const n=Te.unique(Object.values(e).map(e=>e.type)).sort(),i={};for(const e of n)i[e]=[];for(const n of Object.keys(e).sort()){const r=e[n],s=Te.humanTime(Te.msIntoTimeSpan(t-r.lastUpdateAt)),o={id:n,error:r.error,updateRelativeTime:s};i[r.type].push(o)}return i}(t))&&(e.computedSensorsByType=!0)};var ul={inputChanged(){console.log("Typed ...")},action(e){if(this.set({touchInfo:e}),setTimeout(()=>this.set({touchInfo:void 0}),50),"show_danger_zone"==e){const e="Please select carefully ...";return this.set({dangerZoneButtonVisible:!1,msg:e}),void setTimeout(()=>{this.set({dangerZoneVisible:!0}),setTimeout(()=>this.set({dangerZoneVisible:!1,dangerZoneButtonVisible:!0,msg:void 0}),7e3)},500)}const t="shutdown"==e?"Shutting down ...":"Device rebooting, please wait ...";this.set({dangerZoneVisible:!1,dangerZoneButtonVisible:!1,msg:t}),console.log(`sending: ${e}`),this.store.signal("action",{action:e,scope:"device"})}};function Al(){this.set({wifiPassword:""}),this.set({dangerZoneVisible:!1,dangerZoneButtonVisible:!0,updateButtonVisible:!0})}function ml(){}function hl(e,t){var n,i;function r(e){return e.$device.apMode?vl:fl}var s=r(t),o=s(e,t);function l(t){e.action("shutdown")}return{c(){o.c(),n=h("\n\n "),(i=A("button")).textContent="Shutdown",v(i,"click",l),i.className="warning svelte-145tmag",b(i,"touch_pressed","shutdown"==t.touchInfo)},m(e,t){o.m(e,t),c(e,n,t),c(e,i,t)},p(t,c){s===(s=r(c))&&o?o.p(t,c):(o.d(1),(o=s(e,c)).c(),o.m(n.parentNode,n)),t.touchInfo&&b(i,"touch_pressed","shutdown"==c.touchInfo)},d(e){o.d(e),e&&(a(n),a(i)),p(i,"click",l)}}}function fl(e,t){var n;function i(t){e.action("enableAP")}return{c(){(n=A("button")).textContent="Set AP Mode & Reboot",v(n,"click",i),n.className="warning svelte-145tmag",b(n,"touch_pressed","ap_mode_enable"==t.touchInfo)},m(e,t){c(e,n,t)},p(e,t){e.touchInfo&&b(n,"touch_pressed","ap_mode_enable"==t.touchInfo)},d(e){e&&a(n),p(n,"click",i)}}}function vl(e,t){var n;function i(t){e.action("disableAP")}return{c(){(n=A("button")).textContent="Set Wifi Mode & Reboot",v(n,"click",i),n.className="warning svelte-145tmag",b(n,"touch_pressed","ap_mode_disable"==t.touchInfo)},m(e,t){c(e,n,t)},p(e,t){e.touchInfo&&b(n,"touch_pressed","ap_mode_disable"==t.touchInfo)},d(e){e&&a(n),p(n,"click",i)}}}function pl(e,t){var n,i;return{c(){n=A("h3"),i=h(t.msg)},m(e,t){c(e,n,t),o(n,i)},p(e,t){e.msg&&w(i,t.msg)},d(e){e&&a(n)}}}function gl(e){B(this,e),this._state=n(this.store._init(["device"]),e.data),this.store._add(this,["device"]),this._intro=!!e.intro,this._handlers.destroy=[ml,D],this._fragment=function(e,t){var n,i,r,l,d,u,m;function f(t){e.action("reboot")}var g=t.$device&&hl(e,t),w=t.msg&&pl(e,t);return{c(){n=A("div"),(i=A("h3")).textContent="Select an option →",r=h("\n\n "),(l=A("button")).textContent="Reboot",d=h("\n "),g&&g.c(),u=h("\n\n \n\n "),w&&w.c(),v(l,"click",f),l.className="more_warning svelte-145tmag",n.id="wifi_setup",n.className="svelte-145tmag",b(n,"nonRPi",!t.atRPi)},m(e,t){c(e,n,t),o(n,i),o(n,r),o(n,l),o(n,d),g&&g.m(n,null),o(n,u),w&&w.m(n,null),m=!0},p(t,i){i.$device?g?g.p(t,i):((g=hl(e,i)).c(),g.m(n,u)):g&&(g.d(1),g=null),i.msg?w?w.p(t,i):((w=pl(e,i)).c(),w.m(n,null)):w&&(w.d(1),w=null),t.atRPi&&b(n,"nonRPi",!i.atRPi)},i(e,t){m||this.m(e,t)},o:s,d(e){e&&a(n),p(l,"click",f),g&&g.d(),w&&w.d()}}}(this,this._state),this.root._oncreate.push(()=>{Al.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function wl(e){return gc.parse(e)}function yl(e){return Te.colorJSON(e)}n(gl.prototype,O),n(gl.prototype,ul);var bl={showFrontendLog(){this.store.signal("action",{action:"show_frontend_log",scope:"dmt/gui"})},closeFrontendLog(){this.store.signal("action",{action:"close_frontend_log",scope:"dmt/gui"})}};function Il(){this.store.entangle(this),this.set({deviceView:"device_log"}),this.store.on("select_device_view",({view:e})=>this.set({deviceView:e}))}function Vl(e,t,n){const i=Object.create(e);return i.span=t[n],i}function El(e,t,n){const i=Object.create(e);return i.line=t[n],i}function Rl(e,t){var n,i,s,l=t.$connected&&zl(e,t),d="wifi_setup"==t.deviceView&&Kl(e);return{c(){n=A("div"),l&&l.c(),i=h("\n\n \n\n "),d&&d.c(),n.id="device",n.className="svelte-if31ux"},m(e,t){c(e,n,t),l&&l.m(n,null),o(n,i),d&&d.m(n,null),s=!0},p(t,r){r.$connected?(l?l.p(t,r):(l=zl(e,r))&&l.c(),l.i(n,i)):l&&l.o((function(){l.d(1),l=null})),"wifi_setup"==r.deviceView?(d||(d=Kl(e)).c(),d.i(n,null)):d&&d.o((function(){d.d(1),d=null}))},i(e,t){s||this.m(e,t)},o(e){s&&(e=r(e,2),l?l.o(e):e(),d?d.o(e):e(),s=!1)},d(e){e&&a(n),l&&l.d(),d&&d.d()}}}function zl(e,t){var n,i,r,s,o=[Pl,Ol,Dl,Cl,Ml,Bl,ql],l=[];function d(e){return"device_log"==e.deviceView?0:"network_log"==e.deviceView?1:"frontend_log"==e.deviceView&&e.$device?2:"device_state"==e.deviceView?3:"time_state"==e.deviceView?4:"player_state"==e.deviceView?5:"nearby_sensors_state"==e.deviceView?6:-1}return~(n=d(t))&&(i=l[n]=o[n](e,t)),{c(){i&&i.c(),r=f()},m(e,t){~n&&l[n].m(e,t),c(e,r,t),s=!0},p(t,s){var c=n;(n=d(s))===c?~n&&l[n].p(t,s):(i&&i.o((function(){l[c].d(1),l[c]=null})),~n?((i=l[n])||(i=l[n]=o[n](e,s)).c(),i.m(r.parentNode,r)):i=null)},i(e,t){s||this.m(e,t)},o(e){s&&(i?i.o(e):e(),s=!1)},d(e){~n&&l[n].d(e),e&&a(r)}}}function ql(e,t){var n,i,r,s,o=[Nl,Zl],l=[];function d(e){return e.$nearbySensors?0:1}return n=d(t),i=l[n]=o[n](e,t),{c(){i.c(),r=f()},m(e,t){l[n].m(e,t),c(e,r,t),s=!0},p(t,s){var c=n;(n=d(s))===c?l[n].p(t,s):(i.o((function(){l[c].d(1),l[c]=null})),(i=l[n])||(i=l[n]=o[n](e,s)).c(),i.m(r.parentNode,r))},i(e,t){s||this.m(e,t)},o(e){s&&(i?i.o(e):e(),s=!1)},d(e){l[n].d(e),e&&a(r)}}}function Bl(e,t){var n,i;function r(e){return e.$player?kl:Hl}var o=r(t),l=o(e,t);return{c(){n=A("pre"),l.c(),n.className="svelte-if31ux"},m(e,t){c(e,n,t),l.m(n,null),i=!0},p(t,i){o===(o=r(i))&&l?l.p(t,i):(l.d(1),(l=o(e,i)).c(),l.m(n,null))},i(e,t){i||this.m(e,t)},o:s,d(e){e&&a(n),l.d()}}}function Ml(e,t){var n,i;function r(e){return e.$time?xl:jl}var o=r(t),l=o(e,t);return{c(){n=A("pre"),l.c(),n.className="svelte-if31ux"},m(e,t){c(e,n,t),l.m(n,null),i=!0},p(t,i){o===(o=r(i))&&l?l.p(t,i):(l.d(1),(l=o(e,i)).c(),l.m(n,null))},i(e,t){i||this.m(e,t)},o:s,d(e){e&&a(n),l.d()}}}function Cl(e,t){var n,i;function r(e){return e.$device?Tl:Xl}var o=r(t),l=o(e,t);return{c(){n=A("pre"),l.c(),n.className="svelte-if31ux"},m(e,t){c(e,n,t),l.m(n,null),i=!0},p(t,i){o===(o=r(i))&&l?l.p(t,i):(l.d(1),(l=o(e,i)).c(),l.m(n,null))},i(e,t){i||this.m(e,t)},o:s,d(e){e&&a(n),l.d()}}}function Dl(e,t){var n,i,r,l,d,u,m,f=t.$device.deviceName;function v(e){return e.$device.showFrontendLog?Ll:Sl}var p=v(t),g=p(e,t);return{c(){n=A("pre"),i=A("h2"),r=h(f),l=h("\n\n "),g.c(),d=h("\n\n "),(u=A("pre")).textContent="To close the frontend log you can also tap or click on the overlay on the device itself.",n.className="svelte-if31ux",u.className="svelte-if31ux"},m(e,t){c(e,n,t),o(n,i),o(i,r),c(e,l,t),g.m(e,t),c(e,d,t),c(e,u,t),m=!0},p(t,n){t.$device&&f!==(f=n.$device.deviceName)&&w(r,f),p===(p=v(n))&&g?g.p(t,n):(g.d(1),(g=p(e,n)).c(),g.m(d.parentNode,d))},i(e,t){m||this.m(e,t)},o:s,d(e){e&&(a(n),a(l)),g.d(e),e&&(a(d),a(u))}}}function Ol(e,n){var i,r;return{c(){(i=A("pre")).textContent="This information is missing",i.className="svelte-if31ux"},m(e,t){c(e,i,t),r=!0},p:t,i(e,t){r||this.m(e,t)},o:s,d(e){e&&a(i)}}}function Pl(e,t){var n,i,r=t.$log&&Jl(e,t);return{c(){r&&r.c(),n=f()},m(e,t){r&&r.m(e,t),c(e,n,t),i=!0},p(t,i){i.$log?r?r.p(t,i):((r=Jl(e,i)).c(),r.m(n.parentNode,n)):r&&(r.d(1),r=null)},i(e,t){i||this.m(e,t)},o:s,d(e){r&&r.d(e),e&&a(n)}}}function Zl(e,n){var i,r;return{c(){(i=A("pre")).textContent="This information is missing",i.className="svelte-if31ux"},m(e,t){c(e,i,t),r=!0},p:t,i(e,t){r||this.m(e,t)},o:s,d(e){e&&a(i)}}}function Nl(e,t){var n,i={sensors:t.$nearbySensors},r=new dl({root:e.root,store:e.store,data:i});return{c(){r._fragment.c()},m(e,t){r._mount(e,t),n=!0},p(e,t){var n={};e.$nearbySensors&&(n.sensors=t.$nearbySensors),r._set(n)},i(e,t){n||this.m(e,t)},o(e){n&&(r&&r._fragment.o(e),n=!1)},d(e){r.destroy(e)}}}function Hl(e,n){var i;return{c(){i=h("This information is missing")},m(e,t){c(e,i,t)},p:t,d(e){e&&a(i)}}}function kl(e,t){var n,i,r=yl(t.$player);return{c(){n=A("noscript"),i=A("noscript")},m(e,t){c(e,n,t),n.insertAdjacentHTML("afterend",r),c(e,i,t)},p(e,t){e.$player&&r!==(r=yl(t.$player))&&(l(n,i),n.insertAdjacentHTML("afterend",r))},d(e){e&&(l(n,i),a(n),a(i))}}}function jl(e,n){var i;return{c(){i=h("This information is missing")},m(e,t){c(e,i,t)},p:t,d(e){e&&a(i)}}}function xl(e,t){var n,i,r=yl(t.$time);return{c(){n=A("noscript"),i=A("noscript")},m(e,t){c(e,n,t),n.insertAdjacentHTML("afterend",r),c(e,i,t)},p(e,t){e.$time&&r!==(r=yl(t.$time))&&(l(n,i),n.insertAdjacentHTML("afterend",r))},d(e){e&&(l(n,i),a(n),a(i))}}}function Xl(e,n){var i;return{c(){i=h("This information is missing")},m(e,t){c(e,i,t)},p:t,d(e){e&&a(i)}}}function Tl(e,t){var n,i,r=yl(t.$device);return{c(){n=A("noscript"),i=A("noscript")},m(e,t){c(e,n,t),n.insertAdjacentHTML("afterend",r),c(e,i,t)},p(e,t){e.$device&&r!==(r=yl(t.$device))&&(l(n,i),n.insertAdjacentHTML("afterend",r))},d(e){e&&(l(n,i),a(n),a(i))}}}function Sl(e,t){var n;function i(t){e.showFrontendLog()}return{c(){(n=A("button")).textContent="Show frontend log",v(n,"click",i),n.className="svelte-if31ux",b(n,"active","frontend_log_show"==t.deviceView),b(n,"touch_pressed","frontend_log_show"==t.touchInfo)},m(e,t){c(e,n,t)},p(e,t){e.deviceView&&b(n,"active","frontend_log_show"==t.deviceView),e.touchInfo&&b(n,"touch_pressed","frontend_log_show"==t.touchInfo)},d(e){e&&a(n),p(n,"click",i)}}}function Ll(e,t){var n;function i(t){e.closeFrontendLog()}return{c(){(n=A("button")).textContent="Close frontend log",v(n,"click",i),n.className="close svelte-if31ux",b(n,"active","frontend_log_close"==t.deviceView),b(n,"touch_pressed","frontend_log_close"==t.touchInfo)},m(e,t){c(e,n,t)},p(e,t){e.deviceView&&b(n,"active","frontend_log_close"==t.deviceView),e.touchInfo&&b(n,"touch_pressed","frontend_log_close"==t.touchInfo)},d(e){e&&a(n),p(n,"click",i)}}}function Jl(e,t){for(var n,i,r=t.$log,s=[],l=0;l{Il.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}function Ql(){}function Ul(e){var t,r,l,d;B(this,e),this._state=n({},e.data),this._intro=!!e.intro,this._fragment=(t=this._state,{c(){r=A("div"),l=h(t.path),r.className="image svelte-xkwd2x",y(r,"background-image","url('"+t.path+"')")},m(e,t){c(e,r,t),o(r,l),d=!0},p(e,t){e.path&&(w(l,t.path),y(r,"background-image","url('"+t.path+"')"))},i(e,t){d||this.m(e,t)},o:s,d(e){e&&a(r)}}),this.root._oncreate.push(()=>{Ql.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Fl.prototype,O),n(Fl.prototype,bl),n(Ul.prototype,O);var _l={close(){this.store.signalLocalDevice("action",{action:"close_frontend_log",scope:"gui"})}};function $l(){this.store.entangle(this)}function ed(e,t,n){const i=Object.create(e);return i.line=t[n],i}function td(e,t){for(var n,i=t.frontendLog,r=[],s=0;s{$l.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(id.prototype,O),n(id.prototype,_l);var rd={saveGetParams(){const e=new URLSearchParams(window.location.search),t={subview:e.get("subview"),q:e.get("q")};this.store.set({getParams:t})},switchView(e){this.store.switchView(e)},select(e){this.switchView(e)}};function sd(){this.scope="home",this.store.entangle(this);const e=()=>{this.get().loaded?this.get().atRPi&&(document.onselectstart=function(){return!1},document.onmousedown=function(){return!1}):setTimeout(e,1e3)};setTimeout(e,500),document.addEventListener("click",e=>{this.store.guiEngaged()}),this.set({errors:[]}),window.onerror=(e,t,n,i,r)=>{const{errors:s}=this.get(),o=new Date,c=`${o.getHours()}:${("0"+o.getMinutes()).slice(-2)}`;r&&r.stack?(s.push({msg:e,stacktrace:r.stack,time:c}),setTimeout(()=>{this.store.signal("action",{action:"errors",scope:"gui",payload:r.stack})},300)):s.push({msg:`"${e}" (No more info because of CORS, fix: 1) check for the same error on device where gui runs on :80... 2) if more possible errors from this source, then rethrow - see example in dmt-connect/browser/connect around JSON.parse(msg))`,corsProblem:!0,time:c}),this.set({errors:s})},window.onpopstate=e=>{this.saveGetParams(),e.state?this.switchView(e.state.view):this.switchView(this.scope)};const t=window.location.pathname.replace(/\//g,""),n=new URLSearchParams(window.location.search),i=n.get("deviceKey"),r=n.get("ip"),s=n.get("port");r&&setTimeout(()=>{const e=n.get("deviceName");this.store.switch({deviceKey:i,ip:r,port:s,deviceName:e})},100),this.saveGetParams(),this.switchView(t||this.scope)}function od(e,t,n){const i=Object.create(e);return i.wallpaper=t[n],i}function cd(e,t,n){const i=Object.create(e);return i.error=t[n],i}function ad(e,t){for(var n,i=t.errors.slice(0,3),r=[],s=0;s{t&&(o[e].d(t),o[e]=null),n&&n()})}return{c(){for(var e=0;e0&&ad(e,t),O=[Ad,ud],P=[];function Z(e){return"home"==e.$view?0:1}y=Z(t),I=P[y]=O[y](e,t);var N=t.$thisDeviceState&&t.$thisDeviceState.device&&t.$thisDeviceState.device.showFrontendLog&&yd(e),H=t.wallpapers&&bd(e,t);return{c(){i=h("\n\n"),s=A("div"),z._fragment.c(),l=h("\n\n "),q._fragment.c(),d=h("\n\n "),m=A("div"),B._fragment.c(),f=h("\n "),v=A("div"),M._fragment.c(),C._fragment.c(),p=h("\n\n "),D&&D.c(),w=h("\n\n "),I.c(),V=h("\n\n "),N&&N.c(),E=h("\n\n \n "),H&&H.c(),g(m,"slot","sidebar_menu"),m.className="svelte-1y54rwl",g(v,"slot","sidebar_bottom"),v.className="svelte-1y54rwl",s.id="app",s.className="svelte-1y54rwl",b(s,"preventPointerEvents",t.preventPointerEvents)},m(e,t){c(e,i,t),c(e,s,t),z._mount(s,null),o(s,l),q._mount(s,null),o(s,d),o(C._slotted.sidebar_menu,m),B._mount(m,null),o(C._slotted.default,f),o(C._slotted.sidebar_bottom,v),M._mount(v,null),C._mount(s,null),o(s,p),D&&D.m(s,null),o(s,w),P[y].m(s,null),o(s,V),N&&N.m(s,null),o(s,E),H&&H.m(s,null),R=!0},p(t,i){R&&!t.selectedDeviceName&&!t.$view||n===(n=i.selectedDeviceName?`${i.selectedDeviceName} - ${i.$view}`:"DMT")||(document.title=n),i.errors&&i.errors.length>0?D?D.p(t,i):((D=ad(e,i)).c(),D.m(s,w)):D&&(D.d(1),D=null);var r=y;(y=Z(i))===r?P[y].p(t,i):(I.o((function(){P[r].d(1),P[r]=null})),(I=P[y])||(I=P[y]=O[y](e,i)).c(),I.m(s,V)),i.$thisDeviceState&&i.$thisDeviceState.device&&i.$thisDeviceState.device.showFrontendLog?(N||(N=yd(e)).c(),N.i(s,E)):N&&N.o((function(){N.d(1),N=null})),i.wallpapers?(H?H.p(t,i):(H=bd(e,i))&&H.c(),H.i(s,null)):H&&H.o((function(){H.d(1),H=null})),t.preventPointerEvents&&b(s,"preventPointerEvents",i.preventPointerEvents)},i(e,t){R||this.m(e,t)},o(e){R&&(e=r(e,8),z&&z._fragment.o(e),q&&q._fragment.o(e),B&&B._fragment.o(e),M&&M._fragment.o(e),C&&C._fragment.o(e),I?I.o(e):e(),N?N.o(e):e(),H?H.o(e):e(),R=!1)},d(e){e&&(a(i),a(s)),z.destroy(),q.destroy(),B.destroy(),M.destroy(),C.destroy(),D&&D.d(),P[y].d(),N&&N.d(),H&&H.d()}}}(this,this._state),this.root._oncreate.push(()=>{sd.call(this),this.fire("update",{changed:i({},this._state),current:this._state})}),e.target&&(this._fragment.c(),this._mount(e.target,e.anchor),z(this)),this._intro=!0}n(Ed.prototype,O),n(Ed.prototype,rd);const Rd=new class extends Je{constructor(e={}){super();const t=qi.box.keyPair();this.publicKey=t.publicKey,this.privateKey=t.secretKey,this.bus=new Ei,this.meta={thisDeviceName:null,defaultStoreData:e},this.frontendLog=[],this.debug={},this.guiIdleSeconds=0;const n=()=>{const{idleView:e}=this.get();if(e&&(this.guiIdleSeconds+=30,this.guiIdleSeconds>60)){window.location.pathname.replace(/\//g,"")!=e&&this.switchView(e)}setTimeout(n,3e4)};setTimeout(n,5e3),this.thisDeviceState={},this.nearbyDevices=[],this.on("gui_action",({action:e,payload:t})=>this.processActionOriginatingFromBackendOnThisDevice({action:e,payload:t})),this.stores={},this.setupThisStore(e)}updateGuiNotifications(){if(this.thisDeviceState){const{notifications:e}=this.thisDeviceState;e&&super.set({guiNotifications:Di(e)})}}setupThisStore(e){const t=new pi(e,{multiConnectedStoreRef:this}),n=()=>{this.updateGuiNotifications(),setTimeout(()=>{n()},500)};n(),t.on("state",({current:e,changed:n,previous:i})=>{this.thisDeviceState=e;const r={thisDeviceState:this.thisDeviceState};if(n.nearbyDevices){const t=JSON.parse(JSON.stringify(this.filterNearbyDevices(e.nearbyDevices||[])));this.nearbyDevices=t,r.nearbyDevices=t,this.detectDeviceIPChangesForActiveStores()}if(delete this.thisDeviceState.nearbyDevices,n.notifications&&(r.guiNotifications=Di(e.notifications)),super.set(r),e.device){const{deviceName:i,deviceKey:r}=e.device;this.meta.thisDeviceName=i,this.meta.thisDeviceKey=r,this.meta.activeStoreKey||(this.meta.activeStoreKey=r,this.stores[r]=t),this.stateChangeHandler({state:e,storeKey:r,stateDiff:n})}})}detectDeviceIPChangesForActiveStores(){for(const[e,t]of Object.entries(this.stores))for(const{deviceName:n,deviceKey:i,thisDevice:r,ip:s,guiPort:o}of this.nearbyDevices)r||i!=e||t.ip!=s&&(console.log(`IP CHANGED: ${n}: ${i} ${t.ip} -> ${s}`),t.decommission(),delete this.stores[e],this.meta.activeStoreKey==e&&this.switch({deviceKey:i,ip:s,port:o,deviceName:n}))}addToFrontendLog(...e){if(1==e.length&&(e=e[0]),"string"==typeof e)this.frontendLog.push(e);else try{this.frontendLog.push(`${JSON.stringify(e)}`)}catch(t){this.frontendLog.push(e)}this.frontendLog=this.frontendLog.slice(-28)}switchView(e){this.guiEngaged(),this.set({view:e}),history.pushState({view:e},e,`/${e}`)}stateChangeHandler({state:e,storeKey:t,stateDiff:n}){this.meta.activeStoreKey==t&&(e.stateChangeCounter=e.stateChangeCounter||0,e.stateChangeCounter+=1,e.stateChangeCounter%=1e3,e.device&&e.device.deviceName&&(this.meta.selectedDeviceName=e.device.deviceName),super.set(e),null==e.player&&super.set({player:null}),null==e.services&&super.set({services:null}),null==e.environment&&super.set({environment:null}),null==e.playlist&&super.set({playlist:null}),null==e.playlistMetadata&&super.set({playlistMetadata:null}),null==e.sysinfo&&super.set({sysinfo:null}),null==e.searchResults&&super.set({searchResults:null}))}currentStore(){return this.stores[this.meta.activeStoreKey]}createNewStore({deviceKey:e,ip:t,port:n}){const i=new pi(this.meta.defaultStoreData,{multiConnectedStoreRef:this,ip:t,port:n});return i.on("state",({current:t,changed:n,previous:i})=>{delete t.notifications,delete t.nearbyDevices,this.stateChangeHandler({state:t,storeKey:e,stateDiff:n})}),i}switch({deviceKey:e=this.meta.thisDeviceKey,ip:t=null,port:n=null,deviceName:i=null}={}){this.guiEngaged(),this.stores[e]||(this.stores[e]=this.createNewStore({deviceKey:e,ip:t,port:n})),i&&(this.meta.selectedDeviceName=i,super.set({device:{deviceName:i}})),this.meta.activeStoreKey=e,setTimeout(()=>{const t=this.currentStore().get();this.stateChangeHandler({state:t,storeKey:e}),this.fire("update")},10),console.log(`Underlying connected store switched to device with pubkey ${this.meta.activeStoreKey}`)}switchToggle(){}switchByDeviceNameOrIp({deviceName:e,ip:t}){const n=this.nearbyDevices.find(n=>e&&n.deviceName==e||t&&n.ip==t);n&&(n.guiPort=n.port,this.switch(n))}signal(e,t){this.videoOverlay()||(this.guiEngaged(),this.currentStore().signal(e,t))}signalLocalDevice(e,t){this.stores[this.meta.thisDeviceKey].signal(e,t)}videoOverlay(){if(this.thisDeviceState&&"localhost"==window.location.hostname){const{player:e}=this.thisDeviceState;if(e&&e.currentMedia&&"video"==e.currentMedia.mediaType)return!0}}entangle(e){const t=()=>({component:e,thisDeviceState:this.thisDeviceState,meta:this.meta,frontendLog:this.frontendLog,tunneledState:this.get(),nearbyDevices:this.nearbyDevices,globalStore:this});gi.addPropertiesToGUIComponent(t());const n=this.on("state",({current:e,changed:n,previous:i})=>gi.addPropertiesToGUIComponent(Object.assign(t(),{changed:n})));e.on("destroy",n.cancel)}remoteObject(e){return this.currentStore().remoteObject(e)}processActionOriginatingFromBackendOnThisDevice({action:e,payload:t}){if("load"==e||"reload"==e){const n=t;if(n){const{gui:e}=this.thisDeviceState;if(!e||!e.views||!Object.keys(e.views).find(e=>e==n))return void console.log(`unknown view: ${n}, cannot show/reload it!`)}if(e.startsWith("load"))return void this.switchView(n);const i=this.currentStore();let r;const{device:s}=i.get();s&&(r=s.deviceName),function(e,t,n,i,r){if(Mi("RECEIVED GUI RELOAD REQUEST. HANG TIGHT. BE RIGHT BACK."),e){let s=`?deviceKey=${r}`;t&&(s+=`&ip=${t}`,n&&(s+=`&port=${n}`),i&&(s+=`&deviceName=${i}`)),window.location.href=`${window.location.protocol}//${window.location.hostname}:${window.location.port}/${e}${s}`}else location.reload(!0)}(n||this.get().view,i.ip,i.port,r,this.meta.activeStoreKey)}if("switch"==e){const e=t;e.indexOf(".")>-1||!e?this.switchByDeviceNameOrIp({ip:e}):this.switchByDeviceNameOrIp({deviceName:e})}}filterNearbyDevices(e){return e.filter(({hasGui:e})=>e)}guiEngaged(){this.guiIdleSeconds=0}setWallpaper(e){this.get().currentWallpaper!=e&&(this.set({currentWallpaper:e}),Te.setWallpaper(e))}},zd=console.log.bind(console);console.log=(...e)=>{Rd.addToFrontendLog(...e),zd(...e)};const qd=new Ed({target:document.body,store:Rd});return window.store=Rd,qd}(crypto); + */ + var beforeDict$1 = new WeakMap(); + var Mirror$1 = /** @class */ (function () { + function Mirror(obj) { + this.observers = new Map(); + this.obj = obj; + } + return Mirror; + }()); + var ObserverInfo$1 = /** @class */ (function () { + function ObserverInfo(callback, observer) { + this.callback = callback; + this.observer = observer; + } + return ObserverInfo; + }()); + function getMirror$1(obj) { + return beforeDict$1.get(obj); + } + function getObserverFromMirror$1(mirror, callback) { + return mirror.observers.get(callback); + } + function removeObserverFromMirror$1(mirror, observer) { + mirror.observers.delete(observer.callback); + } + /** + * Detach an observer from an object + */ + function unobserve$1(root, observer) { + observer.unobserve(); + } + /** + * Observes changes made to an object, which can then be retrieved using generate + */ + function observe$1(obj, callback) { + var patches = []; + var observer; + var mirror = getMirror$1(obj); + if (!mirror) { + mirror = new Mirror$1(obj); + beforeDict$1.set(obj, mirror); + } + else { + var observerInfo = getObserverFromMirror$1(mirror, callback); + observer = observerInfo && observerInfo.observer; + } + if (observer) { + return observer; + } + observer = {}; + mirror.value = _deepClone$1(obj); + if (callback) { + observer.callback = callback; + observer.next = null; + var dirtyCheck = function () { + generate$1(observer); + }; + var fastCheck = function () { + clearTimeout(observer.next); + observer.next = setTimeout(dirtyCheck); + }; + if (typeof window !== 'undefined') { //not Node + window.addEventListener('mouseup', fastCheck); + window.addEventListener('keyup', fastCheck); + window.addEventListener('mousedown', fastCheck); + window.addEventListener('keydown', fastCheck); + window.addEventListener('change', fastCheck); + } + } + observer.patches = patches; + observer.object = obj; + observer.unobserve = function () { + generate$1(observer); + clearTimeout(observer.next); + removeObserverFromMirror$1(mirror, observer); + if (typeof window !== 'undefined') { + window.removeEventListener('mouseup', fastCheck); + window.removeEventListener('keyup', fastCheck); + window.removeEventListener('mousedown', fastCheck); + window.removeEventListener('keydown', fastCheck); + window.removeEventListener('change', fastCheck); + } + }; + mirror.observers.set(callback, new ObserverInfo$1(callback, observer)); + return observer; + } + /** + * Generate an array of patches from an observer + */ + function generate$1(observer, invertible) { + if (invertible === void 0) { invertible = false; } + var mirror = beforeDict$1.get(observer.object); + _generate$1(mirror.value, observer.object, observer.patches, "", invertible); + if (observer.patches.length) { + applyPatch$1(mirror.value, observer.patches); + } + var temp = observer.patches; + if (temp.length > 0) { + observer.patches = []; + if (observer.callback) { + observer.callback(temp); + } + } + return temp; + } + // Dirty check if obj is different from mirror, generate patches and update mirror + function _generate$1(mirror, obj, patches, path, invertible) { + if (obj === mirror) { + return; + } + if (typeof obj.toJSON === "function") { + obj = obj.toJSON(); + } + var newKeys = _objectKeys$1(obj); + var oldKeys = _objectKeys$1(mirror); + var deleted = false; + //if ever "move" operation is implemented here, make sure this test runs OK: "should not generate the same patch twice (move)" + for (var t = oldKeys.length - 1; t >= 0; t--) { + var key = oldKeys[t]; + var oldVal = mirror[key]; + if (hasOwnProperty$1(obj, key) && !(obj[key] === undefined && oldVal !== undefined && Array.isArray(obj) === false)) { + var newVal = obj[key]; + if (typeof oldVal == "object" && oldVal != null && typeof newVal == "object" && newVal != null) { + _generate$1(oldVal, newVal, patches, path + "/" + escapePathComponent$1(key), invertible); + } + else { + if (oldVal !== newVal) { + if (invertible) { + patches.push({ op: "test", path: path + "/" + escapePathComponent$1(key), value: _deepClone$1(oldVal) }); + } + patches.push({ op: "replace", path: path + "/" + escapePathComponent$1(key), value: _deepClone$1(newVal) }); + } + } + } + else if (Array.isArray(mirror) === Array.isArray(obj)) { + if (invertible) { + patches.push({ op: "test", path: path + "/" + escapePathComponent$1(key), value: _deepClone$1(oldVal) }); + } + patches.push({ op: "remove", path: path + "/" + escapePathComponent$1(key) }); + deleted = true; // property has been deleted + } + else { + if (invertible) { + patches.push({ op: "test", path: path, value: mirror }); + } + patches.push({ op: "replace", path: path, value: obj }); + } + } + if (!deleted && newKeys.length == oldKeys.length) { + return; + } + for (var t = 0; t < newKeys.length; t++) { + var key = newKeys[t]; + if (!hasOwnProperty$1(mirror, key) && obj[key] !== undefined) { + patches.push({ op: "add", path: path + "/" + escapePathComponent$1(key), value: _deepClone$1(obj[key]) }); + } + } + } + /** + * Create an array of patches from the differences in two objects + */ + function compare$1(tree1, tree2, invertible) { + if (invertible === void 0) { invertible = false; } + var patches = []; + _generate$1(tree1, tree2, patches, '', invertible); + return patches; + } + + var duplex$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + unobserve: unobserve$1, + observe: observe$1, + generate: generate$1, + compare: compare$1 + }); + + var fastJsonPatch = Object.assign({}, core$1, duplex$1, { + JsonPatchError: PatchError$1, + deepClone: _deepClone$1, + escapePathComponent: escapePathComponent$1, + unescapePathComponent: unescapePathComponent$1 + }); + + const { applyPatch: applyJSONPatch } = fastJsonPatch; + + class protocolState extends WritableStore { + constructor(connector) { + super({}); + + this.connector = connector; + + // 💡 Special incoming JSON message: { state: ... } ... parsed as part of 'Connectome State Syncing Protocol' + this.connector.on('receive_state', state => { + this.wireStateReceived = true; + + // if (this.verbose) { + // console.log(`New store ${address} / ${this.protocol} / ${this.lane} state:`); + // console.log(state); + // } + + this.set(state); // set and announce state + }); + + // 💡 Special incoming JSON message: { diff: ... } ... parsed as part of 'Connectome State Syncing Protocol' + this.connector.on('receive_diff', diff => { + if (this.wireStateReceived) { + applyJSONPatch(this.state, diff); + this.announceStateChange(); + } + }); + } + + field(name) { + return this.connector.connectionState.get(name); + } + } + + class connectionState extends WritableStore { + constructor(connector) { + super({}); + + this.fields = {}; + + this.connector = connector; + + // fields (we don't do diffing here, always the entire state) + this.connector.on('receive_state_field', ({ name, state }) => { + this.get(name).set(state); // set and announce per channel state + }); + } + + // default is null, not {} ! + get(name) { + if (!this.fields[name]) { + this.fields[name] = new WritableStore(); + } + + return this.fields[name]; + } + } + + naclFast.util = naclUtil; + + const ADJUST_UNDEFINED_CONNECTION_STATUS_DELAY = 700; // was 700 for a long time, was ok, maybe a bit long, before that 300 + + const DECOMMISSION_INACTIVITY = 60000; // 1min + //const DECOMMISSION_INACTIVITY = 120000; // 2min + //const DECOMMISSION_INACTIVITY = 10000; // 2min + + const wsOPEN = 1; + + class Connector extends Eev { + constructor({ + endpoint, + protocol, + keypair = newKeypair(), + rpcRequestTimeout, + verbose = false, + tag, + log = console.log, + autoDecommission = false, + dummy + } = {}) { + super(); + + this.protocol = protocol; + this.log = log; + + const { privateKey: clientPrivateKey, publicKey: clientPublicKey } = acceptKeypair(keypair); + + this.clientPrivateKey = clientPrivateKey; + this.clientPublicKey = clientPublicKey; + this.clientPublicKeyHex = bufferToHex$1(clientPublicKey); + + this.rpcClient = new RpcClient(this, rpcRequestTimeout); + + this.endpoint = endpoint; + this.verbose = verbose; + this.tag = tag; + + this.autoDecommission = autoDecommission; + + this.sentCount = 0; + this.receivedCount = 0; + + this.successfulConnectsCount = 0; + + if (!dummy) { + // remove this check once legacyLib with old MCS is removed + // we call connect from legacyLib with dummy == true and this doesn't get invoked + // it messes with MCS state in some weird ways, no idea why even + // new MCS doesn't have these problems + this.state = new protocolState(this); + this.connectionState = new connectionState(this); + } + + this.connected = new WritableStore(); + + this.delayedAdjustConnectionStatus(); + + if (verbose) { + logger.green(this.log, `Connector ${this.endpoint} created`); + } + + this.decommissionCheckCounter = 0; + + // not actually true but for what we need it's great ... + // this will make sure that we correctly decommission connectors that never even connected for the first time + this.lastPongReceivedAt = Date.now(); + + this.on('pong', () => { + this.lastPongReceivedAt = Date.now(); + }); + } + + delayedAdjustConnectionStatus() { + // 💡 connected == undefined ==> while trying to connect + // 💡 connected == false => while disconnected + // 💡 connected == true => while connected + // for better GUI + setTimeout(() => { + if (this.connected.get() == undefined) { + this.connected.set(false); + } + }, ADJUST_UNDEFINED_CONNECTION_STATUS_DELAY); + } + + send(data) { + send({ data, connector: this }); + this.sentCount += 1; + } + + signal(signal, data) { + if (this.connected.get()) { + this.send({ signal, data }); + } else { + logger.write( + this.log, + 'Warning: trying to send signal over disconnected connector, this should be prevented by GUI' + ); + } + } + + // convenience method + userAction({ action, scope, payload }) { + this.signal('__action', { action, scope, payload }); + } + + // pre-check for edge cases + on(eventName, handler) { + if (eventName == 'ready') { + // latecomer !! for example via connectorPool.getConnector + // connector might be ready or not .. + // with earlier approach we might have missed on ready event because we are attaching handler like this: + // + // connectorPool.getConnector({ endpoint, host: address, port, deviceTag }).then(connector => { + // connector.on('ready', () => { + // onReconnect({ connector, slotName, program, selectorPredicate }); + // }); + // ... + + if (this.isReady()) { + // connector already ready at time of attaching on ready event, + // we have missed the event, now simulate the event so that + // calling code handler is executed and client is aware of correct status + handler(); // we call on('ready', () => { ... }) handler manually for attached code that missed the event + } + } + + // attach real handler + super.on(eventName, handler); + } + + // just used in connectome examples for now, no real use in api + getSharedSecret() { + return this.sharedSecret ? bufferToHex$1(this.sharedSecret) : undefined; + } + + wireReceive({ jsonData, encryptedData, rawMessage }) { + wireReceive({ jsonData, encryptedData, rawMessage, connector: this }); + this.receivedCount += 1; + } + + field(name) { + return this.connectionState.get(name); + } + + isReady() { + return this.ready; + } + + closed() { + return !this.transportConnected; + } + + connectStatus(connected) { + if (connected) { + this.sentCount = 0; + this.receivedCount = 0; + + this.transportConnected = true; + + this.successfulConnectsCount += 1; + + if (this.verbose) { + logger.green(this.log, `✓ Connector ${this.endpoint} connected #${this.successfulConnectsCount}`); + } + + const websocketId = this.connection.websocket.__id; + + const afterFirstStep = ({ sharedSecret, remotePubkeyHex }) => { + this.sharedSecret = sharedSecret; + this._remotePubkeyHex = remotePubkeyHex; + }; + + // there can {error} object returned from finalizeHandshake in case protocol is not present on server + // websocket will just keep hanging until first reconnect and prehaps then the desired protocol is present in the endpoint + // two more possible errors which are indeed handled in our catch block are: + // - timeout when handshake messages were delayed, we have to try again in this case + // - some other rpc error (?) mayme implementation.. but this is not relevant since we have no issues that throw inside our handshake + // procuderes on server - it is tested well enough, perhaps later if something is added we will encounter such errors again? + diffieHellman({ connector: this, afterFirstStep }) + .then(() => { + this.connectedAt = Date.now(); + this.connected.set(true); + + this.ready = true; + this.emit('ready'); //⚠️ Note: when inside any client handler for ready we throw an error it gets caught in the following catch statement (along with Timeouts and other things) + }) + .catch(e => { + // if there was a timeout error our websocket MIGHT have already closed + // we only drop the current websocket if it is still open, + // most likely it was not a timeout but some error on the other end which was passed to us + // websocket would stay open but to try and reconnect we have to drop it, otherwise it will be left hanging + // but sometimes we also get an open websocket after rpc timeout (not sure but this code handles it anyway, should be no problem, only better for all cases) + if ( + this.connection.websocket.__id == websocketId && + this.connection.websocket.readyState == wsOPEN + ) { + //⚠️ we only show if it seems still relevant, special case + // previously we had this first log output above this if statement + // so on every reject + // but then timeout messages sometimes came for websockets that already closed because of normal reconnect when dmt-proc was restarting etc. + // and it was strange because new connector was ready and then this late error came + // now we don't report handshake rpc errors on already closed websockets, they are probably no interesting at all + // but still - watch this space for some time, maybe there are some small remaining voids in this logic + if (e.code == errorCodes.TIMEOUT) { + logger.write( + this.log, + `${this.endpoint} x Connector [ ${this.protocol} ] handshake error: "${e.message}"` + ); + + logger.write( + this.log, + `${this.endpoint} Connector dropping stale websocket after handshake error` + ); + + // ⚠️ todo: test with some rpc error (not timeout) .. (not sure how to achieve it).. + // not so urgent since we don't expect rpc errors except timeouts (we don't have bugs in remote handshake endpoints which would be passes here as rpc errors over the wire) + // and maybe implement a short delay here so that there is no immediate fast infinite reconnect loop + // with error thrown, socket terminated, error thrown again etc. + this.connection.terminate(); + } + } + + // we show all other errors even if websocket has already closed + if (e.code != errorCodes.TIMEOUT) { + logger.write( + this.log, + `${this.endpoint} x Connector [ ${this.protocol} ] on:ready error: "${e.stack}" — (will not try to reconnect, fix the error and reload this gui)` + ); + + // TODO: what about errors coming from RPC ? Like remote exceptions + // see -- rpc/mole/errorCodes.js -- + // not critical or even that important because it could only matter in development but once we don't expect any remote exceptions + // we don't need to reconnect automatically in such cases.. if error in on:ready we expect frontend to be reloaded anyway + } + }); + } else { + let isDisconnect; + + if (this.transportConnected) { + isDisconnect = true; + } + + if (this.transportConnected == undefined) { + //const tag = this.tag ? ` (${this.tag})` : ''; + logger.write(this.log, `${this.endpoint} Connector was not able to connect at first try`); + } + + this.transportConnected = false; + this.ready = false; + this.sharedSecret = undefined; // could also stay but less confusion if we clear it + + delete this.connectedAt; + + if (isDisconnect) { + this.emit('disconnect'); + + // connected will be false or undefined + // establishAndMaintainConnection sets this to undefined after close connection + // so that again red cross doesn't appear immediately -- experimental! + + // used unly when ws is closed + // useful on dmt-mobile when we switch back to app + // and websockets need to be quickly reconnected + // we want to avoid the red x + // on the other hand with legit disconnects we will have to tolerate a small delay + if (connected == undefined) { + this.delayedAdjustConnectionStatus(); + } + + this.connected.set(connected); // false or undefined + } + } + } + + checkForDecommission() { + if (!this.autoDecommission) { + return; + } + + // we want fresh 12 consecutive checks and only then we check for late pings and decommission connector + // this assures that in dmt-mobile when switching back to app connector has chance to reconnect to any endpoint + // that was either down or dmt-mobile was in background ... so checks for late pings are only relevant if app is in foreground + // for a few seconds + + if (this.decommissionCheckRequestedAt && Date.now() - this.decommissionCheckRequestedAt > 3000) { + this.decommissionCheckCounter = 0; + } + + this.decommissionCheckRequestedAt = Date.now(); + + this.decommissionCheckCounter += 1; + + // 12 x tick = around 10s + if (this.decommissionCheckCounter > 12) { + // and now the real check DECOMMISSION_INACTIVITY (1min) + if (Date.now() - this.lastPongReceivedAt > DECOMMISSION_INACTIVITY) { + logger.write(this.log, `Decommissioning connector ${this.endpoint} (long inactive)`); + + this.decommission(); + this.emit('decommission'); + } + } + } + + decommission() { + this.decommissioned = true; + } + + remoteObject(handle) { + return { + call: (methodName, params = []) => { + return this.rpcClient.remoteObject(handle).call(methodName, listify$1(params)); + } + }; + } + + attachObject(handle, obj) { + new RPCTarget({ serversideChannel: this, serverMethods: obj, methodPrefix: handle }); + } + + clientPubkey() { + return this.clientPublicKeyHex; + } + + remotePubkeyHex() { + return this._remotePubkeyHex; + } + + remoteAddress() { + return this.endpoint; + } + } + + const browser = typeof window !== 'undefined'; + + function determineEndpoint({ endpoint, host, port }) { + // if endpoint is specified with "/something", it is rewritten as ws[s]://origin/something + if (browser && endpoint && endpoint.startsWith('/')) { + const wsProtocol = window.location.protocol.includes('s') ? 'wss' : 'ws'; + endpoint = `${wsProtocol}://${window.location.host}${endpoint}`; + } + + // if no endpoint is specified then use host and port if provided, otherwise use origin (in browser) + // in nodejs host and port have to be provided + if (!endpoint) { + if (browser) { + host = host || window.location.hostname; + const wsProtocol = window.location.protocol.includes('s') ? 'wss' : 'ws'; + + endpoint = `${wsProtocol}://${host}`; + + // new addition + if (wsProtocol == 'wss') { + // if wss from browser we forget all about the port and use /ws which has to be upgraded to websocket connection by our reverse-proxy + // read this as well, very informative :: https://medium.com/intrinsic-blog/why-should-i-use-a-reverse-proxy-if-node-js-is-production-ready-5a079408b2ca + endpoint = `${wsProtocol}://${host}/ws`; + } else if (port) { + endpoint = `${endpoint}:${port}`; + } else if (window.location.port) { + endpoint = `${endpoint}:${window.location.port}`; + } + } else { + if (!port) { + throw new Error(`Connectome determineEndpoint: No websocket port provided for ${host}`); + } + // node.js ... if wss is needed, then full endpoint has to be passed in instead of host and port + // endpoint is then used "as is with no modifications" and this entire block of code is not needed + endpoint = `ws://${host || 'localhost'}:${port}`; + } + } + + // if endpoint is provided directly and it didn't start with '/', then use this verbatim + return endpoint; + } + + const browser$1 = typeof window !== 'undefined'; + + const wsCONNECTING = 0; + const wsOPEN$1 = 1; + //const wsCLOSING = 2; + //const wsCLOSED = 3; + + // connection tick + const CONN_CHECK_INTERVAL = 1000; // was 1500 for a long time, then 1000 seemed to work ok, 800 was prehaps a bit too low + + // it was 5 for long time (and with higher CONN_CHECK_INTERVAL), 3 seems to be working great now (CONN_CHECK_INTERVAL=800), sweet balance! + // 1,2 is too low... some raspberries when busy (switching songs / just starting dmt-proc) can easily miss out on sending pongs at the right moment + const CONN_IDLE_TICKS = 3; + + // how long to wait for a new websocket to connect... after this we cancel it + const WAIT_FOR_NEW_CONN_TICKS = 5; // 5000 ms ( = (5) * CONN_CHECK_INTERVAL ) + + //todo: remove 'dummy' argument once legacyLib with old MCS is history + function establishAndMaintainConnection( + { + endpoint, + host, + port, + protocol, + keypair, + remotePubkey, + rpcRequestTimeout, + autoDecommission, + log, + verbose, + tag, + dummy + }, + { WebSocket } + ) { + endpoint = determineEndpoint({ endpoint, host, port }); + + const connector = new Connector({ + endpoint, + protocol, + rpcRequestTimeout, + keypair, + verbose, + tag, + log, + autoDecommission, + dummy + }); + + const reconnect = () => { + tryReconnect({ connector, endpoint }, { WebSocket, reconnect, log, verbose }); + }; + + connector.connection = { + terminate() { + this.websocket._removeAllCallbacks(); + this.websocket.close(); + //connector.connectStatus(undefined); + connector.connectStatus(false); + reconnect(); + //for multiconnected store ↴ so that not everything tries to reconnect at once.. oh well didn't have much influence it seems, we can do everything at once! :) + //setTimeout(reconnect, MAX_RECONNECT_DELAY_AFTER_WS_CLOSE * Math.random()); + }, + endpoint, + checkTicker: 0 + }; + + const callback = () => { + if (!connector.decommissioned) { + checkConnection({ connector, reconnect, log }); + setTimeout(callback, CONN_CHECK_INTERVAL); + } + }; + + // setTimeout(() => tryReconnect({ connector, endpoint }, { WebSocket, log, verbose }), 10); + // setTimeout(callback, CONN_CHECK_INTERVAL); + setTimeout(callback, 10); + + return connector; + } + + function checkConnection({ connector, reconnect, log }) { + const conn = connector.connection; + + //if (verbose && (connectionIdle(conn) || connector.decommissioned)) { + if (connectionIdle(conn) || connector.decommissioned) { + if (connector.decommissioned) { + // decommissioned + logger.yellow( + log, + `${connector.endpoint} Connection decommisioned, closing websocket ${conn.websocket.__id}, will not retry again ` + ); + + decommission(connector); + } else { + // idle connection + connector.emit('inactive_connection'); + logger.yellow(log, `${connector.endpoint} ✖ Terminated inactive connection`); + } + + conn.terminate(); + return; + } + + const connected = socketConnected(conn); + + if (connected) { + conn.websocket.send('ping'); + } else { + if (connector.connected == undefined) { + logger.write( + log, + `${connector.endpoint} Setting connector status to FALSE because connector.connected is undefined` + ); + connector.connectStatus(false); + } + + reconnect(); + } + + conn.checkTicker += 1; + } + + function tryReconnect({ connector, endpoint }, { WebSocket, reconnect, log, verbose }) { + const conn = connector.connection; + + // if device on the other side went missing we will usually get websocket connecting timeouts + // so we retry WAIT_FOR_NEW_CONN_TICKS times (4800ms in total) and then discard the current websocket + // and we again try the same with a new WebSocket + // if device (IP) is online but websocket server is not responsing / program not running, then ... + // [ see explanation a few lines below] ... + + connector.checkForDecommission(); + + if (connector.decommissioned) { + decommission(connector); // our side of things -- tear down any ws callbacks + return; + } + + //logger.write(log, `${endpoint} CONN_TICK`); + //logger.write(log, `${endpoint} wsReadyState ${conn.currentlyTryingWS?.readyState}`); + + if (conn.currentlyTryingWS && conn.currentlyTryingWS.readyState == wsCONNECTING) { + if (conn.currentlyTryingWS._waitForConnectCounter < WAIT_FOR_NEW_CONN_TICKS) { + //logger.write(log, `${endpoint} wsCONNECTING`); + conn.currentlyTryingWS._waitForConnectCounter += 1; + return; + } + + if (verbose || browser$1) { + logger.write(log, `${endpoint} Reconnect timeout, creating new ws`); + } + + conn.currentlyTryingWS._removeAllCallbacks(); + conn.currentlyTryingWS.close(); + } else if (verbose || browser$1) { + logger.write(log, `${endpoint} Created new websocket`); + } + + // so in case when device is online but websocket server is not running we usually + // get immediate close event (websocket readyState becomes CLOSED) and we land here every + // CONN_CHECK_INTERVAL ms to create a new WebSocket and try again with a new WebSocket + // which will again fail immediately until it can successfuly connect (process is running) + // if in addition to process not running the devices goes offline, then we get long delays again + // (see above)... and we try with a new websocket every 4800ms again instead on every tick (800ms) + + const ws = new WebSocket(endpoint); + ws.__id = Math.random(); + + conn.currentlyTryingWS = ws; + conn.currentlyTryingWS._waitForConnectCounter = 0; + + if (browser$1) { + ws.binaryType = 'arraybuffer'; + } + + if (!browser$1) { + ws.on('error', () => {}); + } + + const openCallback = () => { + // should not come here because we remove open callbacks, but sometimes it might + if (connector.decommissioned) { + return; + } + + if (verbose || browser$1) { + logger.write(log, `${endpoint} Websocket open`); + } + + conn.currentlyTryingWS = null; + conn.checkTicker = 0; + + addSocketListeners({ ws, connector, openCallback, reconnect }, { log, verbose }); + conn.websocket = ws; + + connector.connectStatus(true); + }; + + ws._removeAllCallbacks = () => { + ws.removeEventListener('open', openCallback); + }; + + if (browser$1) { + ws.addEventListener('open', openCallback); + } else { + ws.on('open', openCallback); + } + } + + function addSocketListeners({ ws, connector, openCallback, reconnect }, { log, verbose }) { + const conn = connector.connection; + + const errorCallback = event => { + //const msg = `websocket ${ws.__id} conn ${connector.endpoint} error`; + const msg = `${connector.endpoint} Websocket error`; + // whould not output normally since error events happen mostly on iphone.. didn't usually happen on desktop browsers or nodejs + // this is also not standardized, it outputs nothing useful and we always get close event immediately after this error event + console.log(msg); + console.log(event); + // this also wasn't useful / didn't work everywhere: ws.onerror = error => {} + }; + + const closeCallback = () => { + logger.write(log, `${connector.endpoint} ✖ Connection closed`); + + if (connector.decommissioned) { + connector.connectStatus(false); + return; + } + + // when switching back to dmt-mobile it will usually quickly close the old connection and reconnect + // we want some buffer delay (see connector::ADJUST_UNDEFINED_CONNECTION_STATUS_DELAY) as we had on first connection + // where we don't show red x for some short time so that ws has a chance to connect first ... looks better in the UI + // flip side is that there is such small delay between when we stop some process and when red x appears... but it's quite ok! + // we do however disable all commands immediately ... so: show red X when connect status is FALSE excusively and disable all gui actions when it's NOT TRUE (false or undefined) + connector.connectStatus(undefined); + reconnect(); + //setTimeout(reconnect, MAX_RECONNECT_DELAY_AFTER_WS_CLOSE * Math.random()); // turns out we don't really need to do these delays, works fine without + }; + + const messageCallback = _msg => { + if (connector.decommissioned) { + return; + } + + conn.checkTicker = 0; + + const msg = browser$1 ? _msg.data : _msg; + + if (msg == 'pong') { + connector.emit('pong'); + return; + } + + let jsonData; + + try { + jsonData = JSON.parse(msg); + } catch (e) {} + + if (jsonData) { + connector.wireReceive({ jsonData, rawMessage: msg }); + } else { + const encryptedData = browser$1 ? new Uint8Array(msg) : msg; + connector.wireReceive({ encryptedData }); + } + }; + + ws._removeAllCallbacks = () => { + ws.removeEventListener('error', errorCallback); + ws.removeEventListener('close', closeCallback); + ws.removeEventListener('message', messageCallback); + + ws.removeEventListener('open', openCallback); + }; + + if (browser$1) { + ws.addEventListener('error', errorCallback); + ws.addEventListener('close', closeCallback); + ws.addEventListener('message', messageCallback); + } else { + ws.on('error', errorCallback); + ws.on('close', closeCallback); + ws.on('message', messageCallback); + } + } + + function decommission(connector) { + const conn = connector.connection; + + if (conn.currentlyTryingWS) { + conn.currentlyTryingWS._removeAllCallbacks(); + conn.currentlyTryingWS.close(); + conn.currentlyTryingWS = null; + } + + if (conn.ws) { + conn.ws._removeAllCallbacks(); + conn.ws.close(); + conn.ws = null; + } + + connector.connectStatus(false); + } + + function socketConnected(conn) { + return conn.websocket && conn.websocket.readyState == wsOPEN$1; + } + + function connectionIdle(conn) { + return socketConnected(conn) && conn.checkTicker > CONN_IDLE_TICKS; + } + + function establishAndMaintainConnection$1(opts) { + opts.log = opts.log || console.log; + return establishAndMaintainConnection(opts, { WebSocket }); + } + + // DMT.JS + // PERIODIC INTERVAL ON FRONTEND + + function interval({ store, endpoint }) { + if (store.dmtInterval) { + return; + } + + store.dmtInterval = 500; + + //console.log('SETTING UP A INTERVAL'); + + //store.compute('guiNotifications', ['notifications', 'frontTicker'], (notifications, frontTicker) => computeGuiNotifications(notifications)); + + const callback = () => { + intervalHandler(store); + setTimeout(callback, store.dmtInterval); + }; + //setTimeout(callback, store.dmtInterval); + callback(); // CHANGED RECENTLY SO THAT localBrowserTime is present immediately! -- useful for serverMode... investigate if ticker causes some other issues because it starts immediately? + } + + // HELPER METHODS: + + let frontTicker = 0; + + function intervalHandler(store) { + const d = new Date(); + const time = `${d.getHours()}:${('0' + d.getMinutes()).slice(-2)}`; + + store.tick({ frontTicker, localBrowserTime: time }); + + frontTicker += 1; + } + + //import { diffApply, jsonPatchPathConverter } from '../../jsonDiffApplyTweaked.js'; + + // function constructAction({ action, namespace, payload }) { + // const data = { + // action, + // namespace, + // payload + // }; + + // return JSON.stringify(data); + // } + + // intermmediate class to hold the underlying connection state and to illustrate nicely how store connections work + + class StoreConnection { + constructor(componentStore, { ip, port } = {}) { + // port is ignored! + + // let ipWithPort = ip; + // if (port) { + // ipWithPort = `${ip}:${port}`; + // } + + //const localDevice = `${window.location.hostname}`; // FIX (??) magic number + // const endpoint = `ws://${ip ? `${ipWithPort}` : localDevice}`; + //const endpoint = `ws://${ip ? `${ipWithPort}` : window.location.host}`; // /ws/gui + + this.address = ip || window.location.hostname; + this.port = 7780; + // const endpoint = `ws://${}:7780`; + + // this.endpoint = endpoint; + + const protocol = 'dmt/gui'; + + this.store = componentStore; + + const clientPrivateKey = this.store.multiConnectedStoreRef.privateKey; + const clientPublicKey = this.store.multiConnectedStoreRef.publicKey; + + const connector = establishAndMaintainConnection$1({ host: this.address, port: this.port, protocol, clientPrivateKey, clientPublicKey, dummy: true }); + + this.connector = connector; + + connector.on('frontend_action', ({ action, payload }) => { + console.log(`frontend_action ${action} - ${payload}`); + // ConnectedStore without ip is our local devices store + if (!this.store.ip) { + // we only process actions from local backend (= "this device") although by design we also receive all the others since we're connected to other devices' gui ws endpoint as "one of the GUIs" + + // action request from backend! for example: { store: frontend, action: reload } + if (action) { + this.store.multiConnectedStoreRef.fire('gui_action', { action, payload }); + //obj.fireMulti('gui_action', { action: data.action, payload: data.payload }); + } + } + }); + + //connector.attachObject('Frontend', { reverseAction: this.reverseAction.bind(this) }); + + connector.on('ready', () => { + this.connectStatus(true); + }); + + connector.on('disconnect', () => { + this.connectStatus(false); + }); + + // connector.on('wire_receive', ({ jsonData }) => { + // this.wireReceive({ jsonData }); + // }); + + // 💡 Special incoming JSON message: { state: ... } ... parsed as part of 'Connectome State Syncing Protocol' + connector.on('receive_state', state => { + this.dmtProgramState = state; + + // const { environment } = this.dmtProgramState; + // if(environment && environment.expireAt < Date.now()) { + // delete this.dmtProgramState.environment; + // } + this.store.set(this.dmtProgramState); // set state on the component this connection is part of + }); + + // 💡 Special incoming JSON message: { diff: ... } ... parsed as part of 'Connectome State Syncing Protocol' + connector.on('receive_diff', diff => { + if (this.dmtProgramState) { + applyPatch(this.dmtProgramState, diff); + } + + // ⚠️ ugly hack! !!!! grrrr:::!! + // later it has to work without this... as of now this.store.set() doesn't actually clear data + // later we still need this check in frontend so that temperature is cleared if dmt-proc is down on that device + // const { environment } = this.dmtProgramState; + // if (!environment || (environment && environment.expireAt < Date.now())) { + // this.dmtProgramState.environment = { temperature: null }; + // } + + this.store.set(this.dmtProgramState); + }); + + // const designateChannel = designation => { + // this.connector + // .remoteCall('designate', designation) + // .then(() => { + // //console.log(`Designate channel result: ${result}`); + // }) + // .catch(e => { + // //console.log('ERROR'); + // console.log(e); + // }); + // }; + + // periodic handler on frontend - every 0.5s + if (!ip) { + interval({ store: this.store }); + } + } + + decommission() { + this.connector.decommission(); + //this.decommissioned = true; + } + + remoteObject(handle) { + return this.connector.remoteObject(handle); + } + + // called from component store + + signal(name, data) { + this.connector.signal(name, data); + } + + // pauseReconnect() { + // const alreadyPaused = this.connector.reconnectPaused; + // this.connector.reconnectPaused = true; // connection will notice and destroy itself + + // return !alreadyPaused; + // } + + // resumeReconnect() { + // console.log(`Resume reconnect ${this.address} ...`); + // this.connector.reconnectPaused = false; // connection will notice and destroy itself + // connect({ obj: this.connector, address: this.address, port: this.port, resumeNow: true }); // this is just to trigger reconnect immeditely instead of waiting for next 1s interval which would notice reconnectPaused=false on this object + // } + + // ---------------------------------------------------- + // these are only called from connect functions (could also be implemented with events) + // + + // connection status (used to show big red X for example) + + connectStatus(connected) { + if (!connected) { + this.dmtProgramState = undefined; + } + + this.store.set({ connected }); + } + + // isConnected() { + // return this.store.get().connected; + // } + + // when something is received over our (websocket) connection + // wireReceive({ jsonData }) { + // // maybe not needed because websocket should be closed anyway... test if it work without this! + // if (this.connector.decommissioned) { + // return; + // } + // //this.decommissioned = true; + // //console.log(`WIRE RECEIVE: ${JSON.stringify(jsonData, null, 2)}`); + + // // have to check because wireReceive can also be called with { binaryData } ! + // if (!jsonData) { + // return; + // } + + // // TODO: + // // we could trim playlist or any other such data and keep only the part that is needed to show on the GUI + // // this would then finally solve all the slowness with long playlists ... + // // no we already avoid this but still on every show or store switch the entire playlist has to be iterated and put into gui elements + // // DO ONLY THE VISIBLE PART OF THE PLAYLIST !!! + + // if (jsonData.state) { + // // when full new state comes over the wire + // this.dmtProgramState = jsonData.state; + // this.store.set(this.dmtProgramState); // set state on the component this connection is part of + // } else if (jsonData.diff) { + // // sometimes a diff manages to sneak in over the connection before + // // we send the initial state... we just ignore these diffs - they are not relevant, the correct ones are + // // those that start coming after we have received the entire initial state + + // // OPEN ISSUE: this can get out of sync .... + // // if computer is sleeping and on reconnect to store if enough things changed we get a problem!!! + + // // HOW IT HAPPENED: + + // // Lab was selected on DPANEL and ECLIPSE + + // // Eclipse was sleeping, when waking it up in this instant I saw red error on dpanel (for Lab) + // // ------ + + // // lab pid 21202 5/11/2020, 10:56:37 PM 2572441ms (+8033ms) ∞ Gui error in browser: TypeError: Cannot read property 'lastUpdateAt' of undefined + // // at ../../../../.common-deps-frontend/node_modules/fast-json-patch/module/core.mjs:22:26 + // // at ../../../../.common-deps-frontend/node_modules/fast-json-patch/module/core.mjs:231:59 + // // at ../../../../.common-deps-frontend/node_modules/fast-json-patch/module/core.mjs:270:21 + // // at ../../../lib/stores/connection/storeConnection.js:159:8 + + // // if (this.dmtProgramState) { + // // line 159 -> applyPatch(this.dmtProgramState, jsonData.diff); + // // } + + // // at ../../../lib/stores/connection/storeConnection.js:60:13 + // // at ../../../../connectome/lib/utils/emitter/runnableLink.js:11:9 + // // at ../../../../connectome/lib/utils/emitter/runnableLink.js:12:27 + // // at ../../../../connectome/lib/utils/emitter/index.js:49:20 + // // at ../../../../connectome/lib/connector/receive.js:93:20 + // // at receive(../../../../connectome/lib/connector/connector.js:43:4) + // // + // // + // // WHAT PROBABLY HAPPENED: + // // + // // When disconnected, this.dmtProgramState was not cleared + // // and upon reconnecting a diff sometimes came before the new base state + // // and this caused issues .. solution: clear this.dmtProgramState when connection drops + // // test if it ever happens again ... + + // if (this.dmtProgramState) { + // applyPatch(this.dmtProgramState, jsonData.diff); + // } + // //diffApply(this.dmtProgramState, jsonData.diff, jsonPatchPathConverter); + // // const duration = Date.now() - start; + // // console.log(`Diff apply time: ${duration}`); + + // this.store.set(this.dmtProgramState); + // // } else if (jsonData.namespace) { + // // console.log('REVERSE ACTION'); + // // console.log(jsonData); + // // this.reverseAction(jsonData); // gui::reload etc... + // } else { + // console.log(`Unknown wire message format: ${JSON.stringify(jsonData, null, 2)}`); + // } + // } + + // implement with remoteObject as well!!! .... should work nicely with mole... + // so gui also has remote object and we can call it from server.... + // when we receive action from backend to frontend + // reverseAction({ action, payload }) { + + // } + } + + //import SvelteDevStore from 'svelte-dev-store'; + //const TheStore = "development" == 'production' ? Store : SvelteDevStore; + + //class DmtStore extends TheStore {} + //, production: "development" == 'production' + + class ConnectedStore extends Store { + constructor(data = {}, { ip = null, port = null, multiConnectedStoreRef = null } = {}) { + super(data); + //this.loading = true; + this.ip = ip; + this.port = port; + this.multiConnectedStoreRef = multiConnectedStoreRef; + + // store connection does two things: + // 1. automatically populates the component state as it is sent over the wire (will call this.set(...) on this instance on each data receive) + // 2. sends actions down the wire (this.storeConnection.send(...)) + this.storeConnection = new StoreConnection(this, { ip, port }); + } + + decommission() { + console.log(`Decommissioning connected store ${this.ip} ...`); + this.storeConnection.decommission(); + } + + signal(name, data) { + this.storeConnection.signal(name, data); + } + + remoteObject(handle) { + return this.storeConnection.remoteObject(handle); + } + + entangle(component) { + // do nothing, we only implement this in MultiConnectedStore + } + + // pauseReconnect() { + // return this.storeConnection.pauseReconnect(); + // } + + // resumeReconnect() { + // this.storeConnection.resumeReconnect(); + // } + + tick({ frontTicker, localBrowserTime }) { + if (!this.multiConnectedStoreRef) { + this.set({ frontTicker, localBrowserTime }); + } else { + this.multiConnectedStoreRef.set({ frontTicker, localBrowserTime }); + } + } + } + + function aspectViewDef({ componentStatePatch, state, globalStore }) { + componentStatePatch.wallpapers = []; + + let viewDef = {}; + + if (state.gui && state.gui.views) { + const { views } = state.gui; + viewDef = views[globalStore.get().view] || {}; + + // prepare wallpaper array (used only for prefetching all the wallpapers as soon as possible) + const wallpapers = []; + + for (const view of Object.values(views)) { + if (view.wallpaper) { + wallpapers.push(view.wallpaper); + } + } + + componentStatePatch.wallpapers = wallpapers; + } + + if (viewDef) { + // we do it through global store that saves previous value of wallpaper and calls util.setWallpaper only if new value is different + // this is just in case browser would not be able to optimize constant setting of the same wallpaper in css + globalStore.setWallpaper(viewDef.wallpaper); + } + + componentStatePatch.viewDef = viewDef; + } + + function aspectBasics({ component, componentStatePatch, state, frontendLog, meta }) { + componentStatePatch.frontendLog = frontendLog; + + const { thisDeviceName, selectedDeviceName, activeStoreKey } = meta; + + if (!component.get().thisDeviceName) { + componentStatePatch.thisDeviceName = thisDeviceName; + } + + componentStatePatch.selectedDeviceName = selectedDeviceName; // needed for now in NearbyHandyLinks.html + componentStatePatch.selectedDeviceKey = activeStoreKey; + + // this is changed as needed in aspectGui + componentStatePatch.homebase = selectedDeviceName == thisDeviceName; + } + + function aspectNearbyDevices({ componentStatePatch, nearbyDevices }) { + componentStatePatch.nearbyDevices = nearbyDevices; + } + + function aspectDevice({ componentStatePatch, state, tunneledState }) { + if (state.device) { + componentStatePatch.timeDate = state.time; + componentStatePatch.holiday = state.time.holiday; + componentStatePatch.environment = state.environment; + componentStatePatch.isDevMachine = state.device.devMachine; + componentStatePatch.isDevUser = state.device.devUser; + + //componentStatePatch.getParams = globalStore.get().getParams; // also listed in interComponent.... + + // if we're actually on the touch screen on Raspberry Pi + componentStatePatch.atRPi = state.device.isRPi && window.location.hostname == 'localhost'; + + if (state.device.demoDevice && state.device.demoDevice.date) { + const demoDate = new Date(state.device.demoDevice.date); + componentStatePatch._demoTime = util.getDisplayTime(demoDate); + } + + componentStatePatch.loaded = true; + + // if (!componentStatePatch.loaded) { + // componentStatePatch.loaded = true; + // // some properties in state come a bit later (for example $player) + // // when we only check loaded && $player in state, we sometimes get false but in fact $player gets assigned just a tiny bit later + // // and we have an ugly "Player not configured" text flash on the screen + // setTimeout(() => { + // componentStatePatch.fullyLoaded = true; + // }, 500); + // } + } + + if (tunneledState.device) { + componentStatePatch.isRPi = tunneledState.device.isRPi; + } + } + + function aspectGui({ component, componentStatePatch, state, meta, globalStore }) { + const { selectedDeviceName, thisDeviceName } = meta; + + // not sure why this doesn't work + // todo: try to optimize again so that this is done only once and not everytime cponentBridge is invoked + //!component.serviceDefinitionsHaveBeenRead && + if (state.services && state.services.gui) { + //component.serviceDefinitionsHaveBeenRead = true; + + const defGui = state.services.gui; + + if (defGui.idleView) { + globalStore.set({ idleView: defGui.idleView }); + } + + // override and disable display of ip on all views (except if explicitely set to true on some specific view) + // note: we are only talking about showing of ip address outside of home screen... on home it is always shown! + if (defGui.showIp == 'false' && componentStatePatch.viewDef.showIp != 'true') { + componentStatePatch.viewDef.showIp = 'false'; + } + + const defGuiNearby = defGui.nearby || {}; + + if (defGuiNearby.homebase) { + const { homebase } = defGuiNearby; + componentStatePatch.homebaseName = homebase; + componentStatePatch.homebase = + (defGuiNearby.homebase && selectedDeviceName == homebase) || (!defGuiNearby.homebase && selectedDeviceName == thisDeviceName); + } + + if (defGuiNearby.disableDeviceSelector == 'true') { + componentStatePatch.disableDeviceSelector = true; + } + } + + // will add global property to app div to prevent all pointer events: + // pointer-events: none; + componentStatePatch.preventPointerEvents = globalStore.videoOverlay(); + } + + function addPropertiesToGUIComponent({ component, thisDeviceState, meta, tunneledState, globalStore, nearbyDevices, frontendLog, changed }) { + // TODO::: optimize and consider "changed" information + + const state = thisDeviceState; + + const componentStatePatch = {}; + + aspectBasics({ component, componentStatePatch, state, frontendLog, meta }); + aspectDevice({ componentStatePatch, state, tunneledState }); + aspectViewDef({ componentStatePatch, state, globalStore }); + aspectGui({ componentStatePatch, component, state, meta, globalStore }); + aspectNearbyDevices({ componentStatePatch, nearbyDevices }); + + // console.log("PATCH:"); + // console.log(componentStatePatch); + + component.set(componentStatePatch); + } + + var componentBridge = { addPropertiesToGUIComponent }; + + function noop$2() {} + + class RunnableLink$1 { + constructor(prev, next, fn) { + this.prev = prev; + this.next = next; + this.fn = fn || noop$2; + } + + run(data) { + this.fn(data); + this.next && this.next.run(data); + } + } + + // A relatively generic LinkedList impl + class LinkedList$1 { + constructor(linkConstructor) { + this.head = new RunnableLink$1(); + this.tail = new RunnableLink$1(this.head); + this.head.next = this.tail; + this.linkConstructor = linkConstructor; + this.reg = {}; + } + + insert(data) { + const link = new RunnableLink$1(this.tail.prev, this.tail, data); + link.next.prev = link; + link.prev.next = link; + return link; + } + + remove(link) { + link.prev.next = link.next; + link.next.prev = link.prev; + } + } + + let id$1 = 0; + const splitter = /[\s,]+/g; + + // A link in the linked list which allows + // for efficient execution of the callbacks + + class Eev$1 { + constructor() { + this.events = {}; + } + + on(names, fn) { + const me = this; + + names.split(splitter).forEach(name => { + const list = me.events[name] || (me.events[name] = new LinkedList$1()); + const eev = fn._eev || (fn._eev = ++id$1); + + list.reg[eev] || (list.reg[eev] = list.insert(fn)); + }); + } + + off(names, fn) { + const me = this; + fn && + names.split(splitter).forEach(function(name) { + const list = me.events[name]; + + if (!list) { + return; + } + + const link = list.reg[fn._eev]; + + list.reg[fn._eev] = undefined; + + list && link && list.remove(link); + }); + } + + emit(name, data) { + const evt = this.events[name]; + evt && evt.head.run(data); + } + } + + var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function commonjsRequire$1 () { + throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs'); + } + + function createCommonjsModule$1(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var naclFast$1 = createCommonjsModule$1(function (module) { + (function(nacl) { + + // Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. + // Public domain. + // + // Implementation derived from TweetNaCl version 20140427. + // See for details: http://tweetnacl.cr.yp.to/ + + var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; + }; + + // Pluggable, initialized in high-level API below. + var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + + var _0 = new Uint8Array(16); + var _9 = new Uint8Array(32); _9[0] = 9; + + var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + + function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; + } + + function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; + } + + function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); + } + + function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); + } + + function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; + } + + function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; + } + + function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); + } + + function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); + } + + var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + + function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; + } + + function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; + } + + function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); + } + + function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); + } + + /* + * Port of Andrew Moon's Poly1305-donna-16. Public domain. + * https://github.com/floodyberry/poly1305-donna + */ + + var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; + }; + + poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; + }; + + poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (c ^ 1) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; + }; + + poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } + }; + + function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; + } + + function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); + } + + function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; + } + + function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; + } + + function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; + } + + function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); + } + + function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } + } + + function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } + } + + function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); + } + + function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; + } + + function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; + } + + function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; + } + + function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; + } + + function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; + } + + function S(o, a) { + M(o, a, a); + } + + function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; + } + + function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; + } + + function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; + } + + function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); + } + + function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); + } + + function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); + } + + var crypto_box_afternm = crypto_secretbox; + var crypto_box_open_afternm = crypto_secretbox_open; + + function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); + } + + function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); + } + + var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 + ]; + + function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; + } + + function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; + } + + function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); + } + + function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } + } + + function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; + } + + function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } + } + + function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); + } + + function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; + } + + var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + + function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = Math.floor((x[j] + 128) / 256); + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } + } + + function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); + } + + // Note: difference from C - smlen returned, not passed as argument. + function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; + } + + function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; + } + + function crypto_sign_open(m, sm, n, pk) { + var i; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + return n; + } + + var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + + nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES, + + gf: gf, + D: D, + L: L, + pack25519: pack25519, + unpack25519: unpack25519, + M: M, + A: A, + S: S, + Z: Z, + pow2523: pow2523, + add: add, + set25519: set25519, + modL: modL, + scalarmult: scalarmult, + scalarbase: scalarbase, + }; + + /* High-level API */ + + function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); + } + + function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); + } + + function checkArrayTypes() { + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof Uint8Array)) + throw new TypeError('unexpected type, use Uint8Array'); + } + } + + function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; + } + + nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; + }; + + nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); + }; + + nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return null; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null; + return m.subarray(crypto_secretbox_ZEROBYTES); + }; + + nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; + nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; + nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + + nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; + }; + + nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; + }; + + nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; + nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + + nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); + }; + + nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; + }; + + nacl.box.after = nacl.secretbox; + + nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); + }; + + nacl.box.open.after = nacl.secretbox.open; + + nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; + }; + + nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; + }; + + nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; + nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; + nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; + nacl.box.nonceLength = crypto_box_NONCEBYTES; + nacl.box.overheadLength = nacl.secretbox.overheadLength; + + nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; + }; + + nacl.sign.open = function(signedMsg, publicKey) { + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; + }; + + nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; + }; + + nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); + }; + + nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; + }; + + nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; + }; + + nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; + }; + + nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; + nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; + nacl.sign.seedLength = crypto_sign_SEEDBYTES; + nacl.sign.signatureLength = crypto_sign_BYTES; + + nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; + }; + + nacl.hash.hashLength = crypto_hash_BYTES; + + nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; + }; + + nacl.setPRNG = function(fn) { + randombytes = fn; + }; + + (function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto$1 = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto$1 && crypto$1.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto$1.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof commonjsRequire$1 !== 'undefined') { + // Node.js. + crypto$1 = crypto; + if (crypto$1 && crypto$1.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto$1.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } + })(); + + })( module.exports ? module.exports : (self.nacl = self.nacl || {})); + }); + + var naclUtil$1 = createCommonjsModule$1(function (module) { + // Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri. + // Public domain. + (function(root, f) { + if ( module.exports) module.exports = f(); + else if (root.nacl) root.nacl.util = f(); + else { + root.nacl = {}; + root.nacl.util = f(); + } + }(commonjsGlobal$1, function() { + + var util = {}; + + function validateBase64(s) { + if (!(/^(?:[A-Za-z0-9+\/]{2}[A-Za-z0-9+\/]{2})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/.test(s))) { + throw new TypeError('invalid encoding'); + } + } + + util.decodeUTF8 = function(s) { + if (typeof s !== 'string') throw new TypeError('expected string'); + var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; + }; + + util.encodeUTF8 = function(arr) { + var i, s = []; + for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i])); + return decodeURIComponent(escape(s.join(''))); + }; + + if (typeof atob === 'undefined') { + // Node.js + + if (typeof Buffer.from !== 'undefined') { + // Node v6 and later + util.encodeBase64 = function (arr) { // v6 and later + return Buffer.from(arr).toString('base64'); + }; + + util.decodeBase64 = function (s) { + validateBase64(s); + return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0)); + }; + + } else { + // Node earlier than v6 + util.encodeBase64 = function (arr) { // v6 and later + return (new Buffer(arr)).toString('base64'); + }; + + util.decodeBase64 = function(s) { + validateBase64(s); + return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0)); + }; + } + + } else { + // Browsers + + util.encodeBase64 = function(arr) { + var i, s = [], len = arr.length; + for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i])); + return btoa(s.join('')); + }; + + util.decodeBase64 = function(s) { + validateBase64(s); + var i, d = atob(s), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; + }; + + } + + return util; + + })); + }); + + naclFast$1.util = naclUtil$1; + const { log: log$1, bufferToHex: bufferToHex$2 } = util; + + // HELPER METHODS: + + function reloadView(view, ip, port, deviceName, deviceKey) { + log$1('RECEIVED GUI RELOAD REQUEST. HANG TIGHT. BE RIGHT BACK.'); + if (view) { + let str = `?deviceKey=${deviceKey}`; + if (ip) { + str += `&ip=${ip}`; + if (port) { + str += `&port=${port}`; + } + if (deviceName) { + str += `&deviceName=${deviceName}`; + } + } + window.location.href = `${window.location.protocol}//${window.location.hostname}:${window.location.port}/${view}${str}`; + } else { + location.reload(true); // browser object -- location.reload(forceGet) + } + } + + function computeGuiNotifications(notifications) { + const now = Date.now(); + return notifications + ? notifications + .filter(n => now < n.expireAt) + .map(n => { + return Object.assign(n, { relativeTimeAdded: util.humanTime(util.msIntoTimeSpan(now - n.addedAt)) }); + }) + : notifications; + } + + class MultiConnectedStore extends Store { + constructor(data = {}) { + super(); // our Base store will hold reflected data of all encapsulated stores + + const keys = naclFast$1.box.keyPair(); + this.publicKey = keys.publicKey; + this.privateKey = keys.secretKey; + + this.bus = new Eev$1(); + + // additional information describing the currently loaded state inside this::Store (svelte, dmt) + // gets copied into super.set({meta:...}) inside stateChangedHandler + this.meta = { + thisDeviceName: null, + defaultStoreData: data + }; + + // warning: console.log() used in contructor of this store will not have an effect of showing this info + // in frontend log ... + // interception of console.log and redirection to frontendlog is done in main.js after this store is instantiated + this.frontendLog = []; + + this.debug = {}; + + // -----IDLE------- + this.guiIdleSeconds = 0; + + // revert to home screen after 60-90s of inactivity (undeterministic, depending of exact timer situation in each case) + const guiIdleBump = () => { + const { idleView } = this.get(); + + if (idleView) { + this.guiIdleSeconds += 30; // + + if (this.guiIdleSeconds > 60) { + const currentView = window.location.pathname.replace(/\//g, ''); + if (currentView != idleView) { + // GUI WAS IDLE FOR 60s AT THIS POINT: + this.switchView(idleView); + } + } + } + + setTimeout(guiIdleBump, 30000); + }; + + setTimeout(guiIdleBump, 5000); + + // ------------ + + this.thisDeviceState = {}; + this.nearbyDevices = []; + + this.on('gui_action', ({ action, payload }) => this.processActionOriginatingFromBackendOnThisDevice({ action, payload })); + + this.stores = {}; + + this.setupThisStore(data); + } + + updateGuiNotifications() { + if (this.thisDeviceState) { + const { notifications } = this.thisDeviceState; + + if (notifications) { + super.set({ guiNotifications: computeGuiNotifications(notifications) }); + } + } + } + + setupThisStore(data) { + const thisStore = new ConnectedStore(data, { multiConnectedStoreRef: this }); + + // new stores are added each time we first connect to some device gui endpoint + // if store doesn't have an ip, it's the localhost store + + const x = () => { + this.updateGuiNotifications(); + + setTimeout(() => { + x(); + }, 500); + }; + + x(); + + thisStore.on('state', ({ current, changed, previous }) => { + this.thisDeviceState = current; // no need to clone the state here because svelte already does the right thing... might not be the case with other frameworks ? If something doesn't work, make sure to clone the state here + + const state = { thisDeviceState: this.thisDeviceState }; + + if (changed.nearbyDevices) { + const nearbyDevices = JSON.parse(JSON.stringify(this.filterNearbyDevices(current.nearbyDevices || []))); + + this.nearbyDevices = nearbyDevices; + state.nearbyDevices = nearbyDevices; + + this.detectDeviceIPChangesForActiveStores(); + } + + delete this.thisDeviceState.nearbyDevices; + + if (changed.notifications) { + state.guiNotifications = computeGuiNotifications(current.notifications); + } + + //delete this.thisDeviceState.notifications; + + super.set(state); + + // we cache and save deviceName returned from locally connected backend store with id (==index) equal to 0 + // (this store is same as all the other stores except that it is connected to localhost:7780 via ws as oppoised to: + // some_lan_ip:7780) + if (current.device) { + const { deviceName, deviceKey: thisDeviceKey } = current.device; + + // this is an object property (like activeStoreKey) but will be copied to store data in changeHandler + this.meta.thisDeviceName = deviceName; + this.meta.thisDeviceKey = thisDeviceKey; + + if (!this.meta.activeStoreKey) { + this.meta.activeStoreKey = thisDeviceKey; + this.stores[thisDeviceKey] = thisStore; + } + + this.stateChangeHandler({ state: current, storeKey: thisDeviceKey, stateDiff: changed }); + } + }); + } + + detectDeviceIPChangesForActiveStores() { + for (const [storeKey, store] of Object.entries(this.stores)) { + //console.log(`${storeKey}: ${store.ip}`); + + for (const { deviceName, deviceKey, thisDevice, ip, guiPort } of this.nearbyDevices) { + if (!thisDevice && deviceKey == storeKey) { + if (store.ip != ip) { + console.log(`IP CHANGED: ${deviceName}: ${deviceKey} ${store.ip} -> ${ip}`); + + store.decommission(); // destroy current store on wrong IP + delete this.stores[storeKey]; //this.createNewStore({ deviceKey, ip, port: guiPort }); + + if (this.meta.activeStoreKey == storeKey) { + this.switch({ deviceKey, ip, port: guiPort, deviceName }); + } + + // todo: what if ip does not change but device is really missing never to come back.. + // we should decommission stuch stores as well !! TODO IMPORTANT!!! + } + } + } + } + } + + // cannot use console.log from here!! + addToFrontendLog(...args) { + // arguments are collected and single argument passed in actually became an array with one element + if (args.length == 1) { + args = args[0]; + } + + if (typeof args == 'string') { + this.frontendLog.push(args); + } else { + try { + this.frontendLog.push(`${JSON.stringify(args)}`); + } catch (e) { + this.frontendLog.push(args); + } + } + const limit = 28; + this.frontendLog = this.frontendLog.slice(-limit); + } + + switchView(view) { + this.guiEngaged(); + this.set({ view }); + history.pushState({ view }, view, `/${view}`); + } + + // this is one of the most important methods on the store + // it is responsible for reflecting the state of each connected store into our "imitation store" + stateChangeHandler({ state, storeKey, stateDiff }) { + if (this.meta.activeStoreKey == storeKey) { + // only for debugging purposes - showing state change counter in gui ==> + state.stateChangeCounter = state.stateChangeCounter || 0; + state.stateChangeCounter += 1; + state.stateChangeCounter %= 1000; + + //const completeState = Object.assign(state, { meta: this.meta }); + + // further research: understand how we get state, obviously it's possible to get partial state here... + // probably has to do with notifications... in any case for our purposes we detect the full state by + // presence of "device" key... + + if (state.device && state.device.deviceName) { + this.meta.selectedDeviceName = state.device.deviceName; + } + + //super.set(completeState); // state enhanced with meta info + super.set(state); // state enhanced with meta info + + // UGLY and also probably not all that is needed, we want to somehow + // delete all properties from the previous state (this.get()) + // that are not also in new state ... this was happening when switching from tv to "testground" for example + // (which doesn't have player or playlist in state + // not sure how to do this better (eg. remove all) + + // also remembered something, todo: if player is inside state and we disable it in .def then restart the process + // should get removed from state! + // + // ---------->>>>>>>>>>>> HACK + + if (state.player == null) { + super.set({ player: null }); + } + if (state.services == null) { + super.set({ services: null }); + } + if (state.environment == null) { + super.set({ environment: null }); + } + if (state.playlist == null) { + super.set({ playlist: null }); + } + if (state.playlistMetadata == null) { + super.set({ playlistMetadata: null }); + } + if (state.sysinfo == null) { + super.set({ sysinfo: null }); + } + if (state.searchResults == null) { + super.set({ searchResults: null }); + } + } + } + + currentStore() { + //console.log(this.meta.activeStoreKey); + return this.stores[this.meta.activeStoreKey]; + } + + createNewStore({ deviceKey, ip, port }) { + const newStore = new ConnectedStore(this.meta.defaultStoreData, { multiConnectedStoreRef: this, ip, port }); + + newStore.on('state', ({ current, changed, previous }) => { + delete current.notifications; // not interested in remote notifications -- we don't show or use them + // we make sure that in our Svelte Global Store (and thus GUI) there are only this device notifications... + delete current.nearbyDevices; // also not interested in other devices "nearbyDevices list" + + this.stateChangeHandler({ state: current, storeKey: deviceKey, stateDiff: changed }); + }); + + return newStore; + } + + // deviceName is only for gui prefill purposes, to switch by resolving ip, use: this.switchByDeviceName(...) + switch({ deviceKey = this.meta.thisDeviceKey, ip = null, port = null, deviceName = null } = {}) { + // we cannot omit ip, port and deviceName from here and only get deviceKey, then read other things from nearbyDevices + // we mostly could but would get into problems with reloadView since there is no time to get nearbyDevices from backend + // before we would already need them + + this.guiEngaged(); + + // didn't work when ip changed!! + //this.lastDeviceIp = this.currentStore().ip; + + if (!this.stores[deviceKey]) { + this.stores[deviceKey] = this.createNewStore({ deviceKey, ip, port }); + } + + // pre-fill device name in case we cannot connect to device at all + if (deviceName) { + this.meta.selectedDeviceName = deviceName; + //super.set({ device: { deviceName: deviceName }, meta: { selectedDeviceName: deviceName } }); + super.set({ device: { deviceName } }); + } + //} + + this.meta.activeStoreKey = deviceKey; + + setTimeout(() => { + const current = this.currentStore().get(); + + // not full state is yet here on freshly added store! + // solution and requirement: the same method will be called upon full state (and each state change) as seen a few lines + // above where this.stateChangeHandler is also called inside a handled state change on the new store + this.stateChangeHandler({ state: current, storeKey: deviceKey }); + + this.fire('update'); // Svelte likes this + }, 10); // TODO: experiment with this value.... 10 milliseconds! 0 also seems to work ;) but there needs to be a separate event callback using setTimeout + // not sure if state will still be missing initially over slower links? But even if there is, there is always a frontendTicker event twice per second on every gui ... not sure STILL if this propagates over to other devices? NEED TO MAKE A EVENTFLOW framework ASAP + // MAYBE TRY WITH: setImmediate or nextTick (https://stackoverflow.com/a/44275063) + // https://flaviocopes.com/node-setimmediate/ + + console.log(`Underlying connected store switched to device with pubkey ${this.meta.activeStoreKey}`); + + // great that this works! usually we would have to reflect the initial state of the newly added store into our Fake Store manually + // we'd need an event from the new store that the first push of state happened, then we'd just use super.set() to set the passed-in-state + } + + switchToggle() { + //this.switch({ ip: this.lastDeviceIp }); + } + + switchByDeviceNameOrIp({ deviceName, ip }) { + const matchingDevice = this.nearbyDevices.find(device => (deviceName && device.deviceName == deviceName) || (ip && device.ip == ip)); + + if (matchingDevice) { + matchingDevice.guiPort = matchingDevice.port; + this.switch(matchingDevice); + } + } + + // send user actions from frontend (clicks, options etc...) to the appropriate backend (on local or currently tunneled device) via websocket + // name is always 'action' in this case + signal(name, data) { + // this is not really needed but we have it just in case if "pointer-events: none;" is not added exactly at te right time + // it will be added through componentBridge::aspectGui which also check videoOverlay() property + if (this.videoOverlay()) { + return; + } + + this.guiEngaged(); + this.currentStore().signal(name, data); + } + + signalLocalDevice(name, data) { + const thisStore = this.stores[this.meta.thisDeviceKey]; + thisStore.signal(name, data); + } + + videoOverlay() { + if (this.thisDeviceState && window.location.hostname == 'localhost') { + const { player } = this.thisDeviceState; + if (player && player.currentMedia && player.currentMedia.mediaType == 'video') { + // we ignore all user actions when video is overlayed on current device + // in addition to that in App.html we set "pointer-events: none;" on the main class to + // prevent all clicks (like changing the views, switching store, hiding and opening menus etc.) + return true; + } + } + } + + // Reflect part of device state (local or tunneled) into frontent component state (like a Svelte component) + // all a component needs to do is this (example for Svelte): + + // oncreate() { + // // adds thisDeviceName and selectedDeviceName to the component store + // this.store.entangle(this); + // }, + + // Also reflect part of the definition as defined by definition selector (reference -- similar to xpath): + + // oncreate() { + // // adds thisDeviceName and selectedDeviceName to the component store + // // also adds specific fields from device definition --- (.def property access similar to xpath) + // this.store.entangle(this, { def: 'service[gui].nearby' }); + // } + entangle(component) { + const state = () => { + return { + component, + thisDeviceState: this.thisDeviceState, + meta: this.meta, + frontendLog: this.frontendLog, + tunneledState: this.get(), + nearbyDevices: this.nearbyDevices, + //guiNotifications: this.guiNotifications, + globalStore: this + }; + }; + + componentBridge.addPropertiesToGUIComponent(state()); + + const listener = this.on('state', ({ current, changed, previous }) => componentBridge.addPropertiesToGUIComponent(Object.assign(state(), { changed }))); + + component.on('destroy', listener.cancel); + } + + // on currently tunneled device + remoteObject(handle) { + const currentStore = this.currentStore(); + return currentStore.remoteObject(handle); + } + + // we don't need this! only for logging purposes + // get(...args) { + // //console.log('STORE GETTER CALLED'); + // return super.get(...args); + // } + + processActionOriginatingFromBackendOnThisDevice({ action, payload }) { + // action request from backend! for example: { store: frontend, action: reload } + + if (action == 'load' || action == 'reload') { + const view = payload; //action.split(':')[1]; + + if (view) { + const { gui } = this.thisDeviceState; + if (!gui || !gui.views || !Object.keys(gui.views).find(v => v == view)) { + console.log(`unknown view: ${view}, cannot show/reload it!`); + return; + } + } + + if (action.startsWith('load')) { + this.switchView(view); + return; + } + + const currentStore = this.currentStore(); + + let deviceName; + const { device } = currentStore.get(); + if (device) { + // not sure when this happens... but it was a notice once on TV (cannot read property deviceName of undefined) + // so we check if device was present in currentStore.... + deviceName = device.deviceName; + } + + reloadView(view || this.get().view, currentStore.ip, currentStore.port, deviceName, this.meta.activeStoreKey); // if view is null (we only passed on "reload", then it will reload home) + // we cannot do that here!! :: has to be actual reload!! not sure how to switch back to correct store!! maybe save info!! + //this.set({ view }); // keeps current store ... reloadView resets everyting and connects to localhost! + } + + if (action == 'switch') { + const deviceNameOrIp = payload; // action.split(':')[1]; + + if (deviceNameOrIp.indexOf('.') > -1 || !deviceNameOrIp) { + this.switchByDeviceNameOrIp({ ip: deviceNameOrIp }); // if ip is null (we only passed on "reload", then it will switch to this device) + } else { + this.switchByDeviceNameOrIp({ deviceName: deviceNameOrIp }); + } + } + } + + filterNearbyDevices(nearbyDevices) { + return nearbyDevices.filter(({ hasGui }) => hasGui); + } + + // called on every click anywhere in the app (set up in App.html -> document on:click) + guiEngaged() { + this.guiIdleSeconds = 0; + } + + setWallpaper(wallpaper) { + if (this.get().currentWallpaper != wallpaper) { + this.set({ currentWallpaper: wallpaper }); + util.setWallpaper(wallpaper); + } + } + } + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/Escape.html generated by Svelte v2.16.1 */ + + + + var methods$4 = { + handleKeypress(event) { + if(util.isInputElementActive()) { + return + } + + if(event.key && !event.altKey && !event.metaKey && !event.shiftKey) { + if(event.key == 'Escape' || event.key == 'h') { + this.escape(); + } + } + }, + escape() { + if(this.get().atRPi) { + // visual notification (especially important on touch) that command was given + this.set({ touchPressed: 'escape' }); + setTimeout(() => { this.fire('escape'); this.set({ touchPressed: undefined }); }, 0); // so that thread has actual time to show the effect + } else { + this.fire('escape'); + } + } + }; + + function oncreate$4() { + this.set({ homeButtonImgInline: img$1 }); + + // adds thisDeviceName, selectedDeviceKey and selectedDeviceName to the component store + this.store.entangle(this); + } + const file$5 = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/Escape.html"; + + function create_main_fragment$5(component, ctx) { + var if_block_anchor, current; + + function onwindowkeydown(event) { + component.handleKeypress(event); } + window.addEventListener("keydown", onwindowkeydown); + + var if_block = (ctx.loaded && ctx.$connected) && create_if_block$5(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.loaded && ctx.$connected) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block$5(component, ctx); + if (if_block) if_block.c(); + } + + if_block.i(if_block_anchor.parentNode, if_block_anchor); + } else if (if_block) { + if_block.o(function() { + if_block.d(1); + if_block = null; + }); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block) if_block.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + window.removeEventListener("keydown", onwindowkeydown); + + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (3:0) {#if loaded && $connected} + function create_if_block$5(component, ctx) { + var div, current; + + var if_block = (ctx.homeButtonImgInline) && create_if_block_1$4(component, ctx); + + return { + c: function create() { + div = createElement("div"); + if (if_block) if_block.c(); + div.id = "top_icons"; + div.className = "svelte-1ig0od5"; + toggleClass(div, "touch_pressed", ctx.touchPressed == 'escape'); + addLoc(div, file$5, 4, 2, 83); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + if (if_block) if_block.m(div, null); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.homeButtonImgInline) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_1$4(component, ctx); + if (if_block) if_block.c(); + } + + if_block.i(div, null); + } else if (if_block) { + if_block.o(function() { + if_block.d(1); + if_block = null; + }); + } + + if (changed.touchPressed) { + toggleClass(div, "touch_pressed", ctx.touchPressed == 'escape'); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block) if_block.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + if (if_block) if_block.d(); + } + }; + } + + // (6:4) {#if homeButtonImgInline} + function create_if_block_1$4(component, ctx) { + var div, img, text, current; + + function click_handler(event) { + component.escape(); + } + + var peerlist_initial_data = { showPeerOnlyIfDisconnected: true }; + var peerlist = new PeerList({ + root: component.root, + store: component.store, + data: peerlist_initial_data + }); + + return { + c: function create() { + div = createElement("div"); + img = createElement("img"); + text = createText("\n\n "); + peerlist._fragment.c(); + addListener(img, "click", click_handler); + img.src = ctx.homeButtonImgInline; + img.alt = "home"; + img.className = "svelte-1ig0od5"; + addLoc(img, file$5, 7, 8, 285); + div.className = "escape svelte-1ig0od5"; + toggleClass(div, "touch_pressed", ctx.touchPressed == 'escape'); + toggleClass(div, "nonRPi", !ctx.atRPi); + addLoc(div, file$5, 6, 6, 187); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + append(div, img); + insert(target, text, anchor); + peerlist._mount(target, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (!current || changed.homeButtonImgInline) { + img.src = ctx.homeButtonImgInline; + } + + if (changed.touchPressed) { + toggleClass(div, "touch_pressed", ctx.touchPressed == 'escape'); + } + + if (changed.atRPi) { + toggleClass(div, "nonRPi", !ctx.atRPi); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (peerlist) peerlist._fragment.o(outrocallback); + current = false; + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + removeListener(img, "click", click_handler); + if (detach) { + detachNode(text); + } + + peerlist.destroy(detach); + } + }; + } + + function Escape(options) { + this._debugName = ''; + if (!options || (!options.target && !options.root)) { + throw new Error("'target' is a required option"); + } + if (!options.store) { + throw new Error(" references store properties, but no store was provided"); + } + + init(this, options); + this._state = assign(this.store._init(["connected"]), options.data); + this.store._add(this, ["connected"]); + if (!('loaded' in this._state)) console.warn(" was created without expected data property 'loaded'"); + if (!('$connected' in this._state)) console.warn(" was created without expected data property '$connected'"); + if (!('touchPressed' in this._state)) console.warn(" was created without expected data property 'touchPressed'"); + if (!('homeButtonImgInline' in this._state)) console.warn(" was created without expected data property 'homeButtonImgInline'"); + if (!('atRPi' in this._state)) console.warn(" was created without expected data property 'atRPi'"); + this._intro = !!options.intro; + + this._handlers.destroy = [removeFromStore]; + + this._fragment = create_main_fragment$5(this, this._state); + + this.root._oncreate.push(() => { + oncreate$4.call(this); + this.fire("update", { changed: assignTrue({}, this._state), current: this._state }); + }); + + if (options.target) { + if (options.hydrate) throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + this._fragment.c(); + this._mount(options.target, options.anchor); + + flush(this); + } + + this._intro = true; + } + + assign(Escape.prototype, protoDev); + assign(Escape.prototype, methods$4); + + Escape.prototype._checkReadOnly = function _checkReadOnly(newState) { + }; + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/player/src/VolumeWidget.html generated by Svelte v2.16.1 */ + + var methods$5 = { + action(action) { + this.store.signal('action', { action, scope: 'player' }); + }, + pause() { + this.action('pause'); + }, + volumeUp() { + this.action('volume_up'); + }, + volumeDown() { + this.action('volume_down'); + } + }; + + function oncreate$5() {} + const file$6 = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/player/src/VolumeWidget.html"; + + function create_main_fragment$6(component, ctx) { + var if_block_anchor, current; + + var if_block = (ctx.$player && ctx.$player.paused == false && ctx.$player.currentMedia && ctx.$player.currentMedia.song) && create_if_block$6(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.$player && ctx.$player.paused == false && ctx.$player.currentMedia && ctx.$player.currentMedia.song) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block$6(component, ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: run, + + d: function destroy(detach) { + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (1:0) {#if $player && $player.paused == false && $player.currentMedia && $player.currentMedia.song} + function create_if_block$6(component, ctx) { + var div2, div0, a0, text1, div1, a1, text3, text4_value = ctx.$player.volume, text4, text5, a2; + + function click_handler(event) { + event.preventDefault(); + event.stopPropagation(); + component.pause(); + } + + function click_handler_1(event) { + event.preventDefault(); + event.stopPropagation(); + component.volumeDown(); + } + + function click_handler_2(event) { + event.preventDefault(); + event.stopPropagation(); + component.volumeUp(); + } + + return { + c: function create() { + div2 = createElement("div"); + div0 = createElement("div"); + a0 = createElement("a"); + a0.textContent = "✖"; + text1 = createText("\n "); + div1 = createElement("div"); + a1 = createElement("a"); + a1.textContent = "▼"; + text3 = createText("\n "); + text4 = createText(text4_value); + text5 = createText("\n "); + a2 = createElement("a"); + a2.textContent = "▲"; + addListener(a0, "click", click_handler); + a0.href = "#"; + a0.className = "svelte-g6kxch"; + addLoc(a0, file$6, 3, 6, 151); + div0.className = "pause svelte-g6kxch"; + addLoc(div0, file$6, 2, 4, 125); + addListener(a1, "click", click_handler_1); + a1.href = "#"; + a1.className = "volume_down svelte-g6kxch"; + addLoc(a1, file$6, 6, 6, 261); + addListener(a2, "click", click_handler_2); + a2.href = "#"; + a2.className = "volume_up svelte-g6kxch"; + addLoc(a2, file$6, 8, 6, 383); + div1.className = "volume svelte-g6kxch"; + addLoc(div1, file$6, 5, 4, 234); + div2.id = "play_controls"; + div2.className = "svelte-g6kxch"; + addLoc(div2, file$6, 1, 2, 96); + }, + + m: function mount(target, anchor) { + insert(target, div2, anchor); + append(div2, div0); + append(div0, a0); + append(div2, text1); + append(div2, div1); + append(div1, a1); + append(div1, text3); + append(div1, text4); + append(div1, text5); + append(div1, a2); + }, + + p: function update(changed, ctx) { + if ((changed.$player) && text4_value !== (text4_value = ctx.$player.volume)) { + setData(text4, text4_value); + } + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div2); + } + + removeListener(a0, "click", click_handler); + removeListener(a1, "click", click_handler_1); + removeListener(a2, "click", click_handler_2); + } + }; + } + + function VolumeWidget(options) { + this._debugName = ''; + if (!options || (!options.target && !options.root)) { + throw new Error("'target' is a required option"); + } + if (!options.store) { + throw new Error(" references store properties, but no store was provided"); + } + + init(this, options); + this._state = assign(this.store._init(["player"]), options.data); + this.store._add(this, ["player"]); + if (!('$player' in this._state)) console.warn(" was created without expected data property '$player'"); + this._intro = !!options.intro; + + this._handlers.destroy = [removeFromStore]; + + this._fragment = create_main_fragment$6(this, this._state); + + this.root._oncreate.push(() => { + oncreate$5.call(this); + this.fire("update", { changed: assignTrue({}, this._state), current: this._state }); + }); + + if (options.target) { + if (options.hydrate) throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + this._fragment.c(); + this._mount(options.target, options.anchor); + + flush(this); + } + + this._intro = true; + } + + assign(VolumeWidget.prototype, protoDev); + assign(VolumeWidget.prototype, methods$5); + + VolumeWidget.prototype._checkReadOnly = function _checkReadOnly(newState) { + }; + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/ActionBar.html generated by Svelte v2.16.1 */ + + + + var methods$6 = { + handleKeypress(event) { + if(util.isInputElementActive()) { + return + } + + if(event.key && !event.altKey && !event.metaKey && !event.shiftKey) { + if(event.keyCode == 9) { + event.preventDefault(); + this.store.switchToggle(); + } + if(event.key == 't') { + this.store.switch(); + } + if(event.key == 'f') { + console.log("implement device filter / find (in nearby list or just in the middle of screen)!!"); + } + if(event.key == 'p') { + this.select('player'); + } + if(event.key == 'o') { + this.select('clock'); + } + if(event.key == 'd') { + this.select('device'); + } + } + }, + select(view) { + this.fire('select', { view }); + } + }; + + function oncreate$6() { + // adds thisDeviceName, selectedDeviceKey and selectedDeviceName to the component store + this.store.entangle(this); + + this.store.set({ nearbyDevicesMenuVisible: true }); + } + const file$7 = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/navigation/src/ActionBar.html"; + + function create_main_fragment$7(component, ctx) { + var if_block_anchor, current; + + function onwindowkeydown(event) { + component.handleKeypress(event); } + window.addEventListener("keydown", onwindowkeydown); + + var if_block = (ctx.loaded) && create_if_block$7(component, ctx); + + return { + c: function create() { + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.loaded) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block$7(component, ctx); + if (if_block) if_block.c(); + } + + if_block.i(if_block_anchor.parentNode, if_block_anchor); + } else if (if_block) { + if_block.o(function() { + if_block.d(1); + if_block = null; + }); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block) if_block.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + window.removeEventListener("keydown", onwindowkeydown); + + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (3:0) {#if loaded} + function create_if_block$7(component, ctx) { + var text, if_block_anchor, current; + + var connectionindicator = new ConnectionIndicator({ + root: component.root, + store: component.store + }); + + connectionindicator.on("escape", function(event) { + component.select('home'); + }); + + var if_block = (ctx.$connected) && create_if_block_1$5(component, ctx); + + return { + c: function create() { + connectionindicator._fragment.c(); + text = createText("\n\n "); + if (if_block) if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + connectionindicator._mount(target, anchor); + insert(target, text, anchor); + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + if (ctx.$connected) { + if (if_block) { + if_block.p(changed, ctx); + } else { + if_block = create_if_block_1$5(component, ctx); + if (if_block) if_block.c(); + } + + if_block.i(if_block_anchor.parentNode, if_block_anchor); + } else if (if_block) { + if_block.o(function() { + if_block.d(1); + if_block = null; + }); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + outrocallback = callAfter(outrocallback, 2); + + if (connectionindicator) connectionindicator._fragment.o(outrocallback); + + if (if_block) if_block.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + connectionindicator.destroy(detach); + if (detach) { + detachNode(text); + } + + if (if_block) if_block.d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (7:2) {#if $connected} + function create_if_block_1$5(component, ctx) { + var current_block_type_index, if_block, if_block_anchor, current; + + var if_block_creators = [ + create_if_block_2$3, + create_else_block$1 + ]; + + var if_blocks = []; + + function select_block_type(ctx) { + if (ctx.$view == 'home') return 0; + return 1; + } + + current_block_type_index = select_block_type(ctx); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](component, ctx); + + return { + c: function create() { + if_block.c(); + if_block_anchor = createComment(); + }, + + m: function mount(target, anchor) { + if_blocks[current_block_type_index].m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p: function update(changed, ctx) { + var previous_block_index = current_block_type_index; + current_block_type_index = select_block_type(ctx); + if (current_block_type_index !== previous_block_index) { + if_block.o(function() { + if_blocks[previous_block_index].d(1); + if_blocks[previous_block_index] = null; + }); + + if_block = if_blocks[current_block_type_index]; + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](component, ctx); + if_block.c(); + } + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (if_block) if_block.o(outrocallback); + else outrocallback(); + + current = false; + }, + + d: function destroy(detach) { + if_blocks[current_block_type_index].d(detach); + if (detach) { + detachNode(if_block_anchor); + } + } + }; + } + + // (16:4) {:else} + function create_else_block$1(component, ctx) { + var current; + + var escape = new Escape({ + root: component.root, + store: component.store + }); + + escape.on("escape", function(event) { + component.select('home'); + }); + + return { + c: function create() { + escape._fragment.c(); + }, + + m: function mount(target, anchor) { + escape._mount(target, anchor); + current = true; + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + if (escape) escape._fragment.o(outrocallback); + current = false; + }, + + d: function destroy(detach) { + escape.destroy(detach); + } + }; + } + + // (9:4) {#if $view == 'home'} + function create_if_block_2$3(component, ctx) { + var div, text, current; + + var volumewidget = new VolumeWidget({ + root: component.root, + store: component.store + }); + + var peerlist = new PeerList({ + root: component.root, + store: component.store + }); + + var tilebar = new TileBar({ + root: component.root, + store: component.store, + slots: { default: createFragment() } + }); + + tilebar.on("select", function(event) { + component.select(event.view); + }); + + return { + c: function create() { + div = createElement("div"); + volumewidget._fragment.c(); + text = createText("\n "); + peerlist._fragment.c(); + tilebar._fragment.c(); + div.className = "selector svelte-12e3beu"; + addLoc(div, file$7, 9, 6, 173); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + volumewidget._mount(tilebar._slotted.default, null); + append(tilebar._slotted.default, text); + peerlist._mount(tilebar._slotted.default, null); + tilebar._mount(div, null); + current = true; + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: function outro(outrocallback) { + if (!current) return; + + outrocallback = callAfter(outrocallback, 3); + + if (volumewidget) volumewidget._fragment.o(outrocallback); + if (peerlist) peerlist._fragment.o(outrocallback); + if (tilebar) tilebar._fragment.o(outrocallback); + current = false; + }, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + + volumewidget.destroy(); + peerlist.destroy(); + tilebar.destroy(); + } + }; + } + + function ActionBar(options) { + this._debugName = ''; + if (!options || (!options.target && !options.root)) { + throw new Error("'target' is a required option"); + } + if (!options.store) { + throw new Error(" references store properties, but no store was provided"); + } + + init(this, options); + this._state = assign(this.store._init(["connected","view"]), options.data); + this.store._add(this, ["connected","view"]); + if (!('loaded' in this._state)) console.warn(" was created without expected data property 'loaded'"); + if (!('$connected' in this._state)) console.warn(" was created without expected data property '$connected'"); + if (!('$view' in this._state)) console.warn(" was created without expected data property '$view'"); + this._intro = !!options.intro; + + this._handlers.destroy = [removeFromStore]; + + this._fragment = create_main_fragment$7(this, this._state); + + this.root._oncreate.push(() => { + oncreate$6.call(this); + this.fire("update", { changed: assignTrue({}, this._state), current: this._state }); + }); + + if (options.target) { + if (options.hydrate) throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + this._fragment.c(); + this._mount(options.target, options.anchor); + + flush(this); + } + + this._intro = true; + } + + assign(ActionBar.prototype, protoDev); + assign(ActionBar.prototype, methods$6); + + ActionBar.prototype._checkReadOnly = function _checkReadOnly(newState) { + }; + + /* Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/widgets/src/Time.html generated by Svelte v2.16.1 */ + + const file$8 = "Users/david/Projects/dmt-system/packages/dmt-legacy-gui/frontend/widgets/src/Time.html"; + + function create_main_fragment$8(component, ctx) { + var div, text_value = ctx.time || '', text, current; + + return { + c: function create() { + div = createElement("div"); + text = createText(text_value); + div.id = "time"; + addLoc(div, file$8, 0, 0, 0); + }, + + m: function mount(target, anchor) { + insert(target, div, anchor); + append(div, text); + current = true; + }, + + p: function update(changed, ctx) { + if ((changed.time) && text_value !== (text_value = ctx.time || '')) { + setData(text, text_value); + } + }, + + i: function intro(target, anchor) { + if (current) return; + + this.m(target, anchor); + }, + + o: run, + + d: function destroy(detach) { + if (detach) { + detachNode(div); + } + } + }; + } + + function Time(options) { + this._debugName = '