From 224c52b90b3c2345d52906ca021f40fbc112034a Mon Sep 17 00:00:00 2001 From: Daniel Kuschny Date: Mon, 19 May 2025 19:01:24 +0200 Subject: [PATCH 01/17] feat: Add Playground page (#128) --- docs/playground/playground.mdx | 18 + docs/reference/api/actualplayermode.mdx | 38 + docs/reference/api/loadmidiforscore.mdx | 35 + docs/reference/api/midieventsplayed.mdx | 6 +- docs/reference/api/playbackrangechanged.mdx | 6 +- docs/reference/api/player.mdx | 6 +- docs/reference/api/playerfinished.mdx | 6 +- docs/reference/api/playerpositionchanged.mdx | 6 +- docs/reference/api/playerready.mdx | 6 +- docs/reference/api/playerstatechanged.mdx | 6 +- docs/reference/api/settingsupdated.mdx | 72 ++ docs/reference/api/soundfontloaded.mdx | 6 +- docs/reference/api/uifacade.mdx | 6 +- docs/reference/settings/player/playermode.mdx | 58 ++ docs/showcase/effects.mdx | 1 - docs/showcase/general.mdx | 1 - docs/showcase/guitar-tabs.mdx | 1 - docs/showcase/introduction.mdx | 1 - docs/showcase/layouts.mdx | 1 - docs/showcase/music-notation.mdx | 1 - docs/showcase/special-notes.mdx | 1 - docs/showcase/special-tracks.mdx | 1 - docusaurus.config.ts | 6 + package-lock.json | 437 ++++++++- package.json | 5 +- sidebars.ts | 2 +- src/components/AlphaTabFull/index.tsx | 3 +- .../AlphaTabFull/player-controls-group.tsx | 2 +- src/components/AlphaTabPlayground/index.tsx | 97 ++ .../player-controls-group.tsx | 154 +++ .../playground-settings.tsx | 886 ++++++++++++++++++ .../AlphaTabPlayground/styles.module.scss | 403 ++++++++ .../AlphaTabPlayground/track-item.tsx | 252 +++++ .../AlphaTabPlayground/track-selector.tsx | 57 ++ src/css/custom.scss | 80 +- src/hooks.ts | 38 +- 36 files changed, 2649 insertions(+), 56 deletions(-) create mode 100644 docs/playground/playground.mdx create mode 100644 docs/reference/api/actualplayermode.mdx create mode 100644 docs/reference/api/loadmidiforscore.mdx create mode 100644 docs/reference/api/settingsupdated.mdx create mode 100644 docs/reference/settings/player/playermode.mdx create mode 100644 src/components/AlphaTabPlayground/index.tsx create mode 100644 src/components/AlphaTabPlayground/player-controls-group.tsx create mode 100644 src/components/AlphaTabPlayground/playground-settings.tsx create mode 100644 src/components/AlphaTabPlayground/styles.module.scss create mode 100644 src/components/AlphaTabPlayground/track-item.tsx create mode 100644 src/components/AlphaTabPlayground/track-selector.tsx diff --git a/docs/playground/playground.mdx b/docs/playground/playground.mdx new file mode 100644 index 0000000..53e29ba --- /dev/null +++ b/docs/playground/playground.mdx @@ -0,0 +1,18 @@ +--- +title: Playground +--- + +import { AlphaTabPlayground } from "@site/src/components/AlphaTabPlayground"; + + + + + + \ No newline at end of file diff --git a/docs/reference/api/actualplayermode.mdx b/docs/reference/api/actualplayermode.mdx new file mode 100644 index 0000000..58d0502 --- /dev/null +++ b/docs/reference/api/actualplayermode.mdx @@ -0,0 +1,38 @@ +--- +title: actualPlayerMode +description: "The actual player mode which is currently active." +sidebar_custom_props: + kind: property + category: Properties - Player + since: 1.6.0 +--- + +import { ParameterTable, ParameterRow } from '@site/src/components/ParameterTable'; +import CodeBlock from '@theme/CodeBlock'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import { CodeBadge } from '@site/src/components/CodeBadge'; +import { SinceBadge } from '@site/src/components/SinceBadge'; +import DynHeading from '@site/src/components/DynHeading'; +import Link from '@docusaurus/Link'; + + +import { PropertyDescription } from '@site/src/components/PropertyDescription'; + + + +### Description +The actual player mode which is currently active. Allows determining whether a backing track or the synthesizer is active in case automatic detection is enabled. + + + +
{"readonly"}{" "}{"actualPlayerMode"}{":"}{" "}{"PlayerMode"}{";"}
+
+ +
{"PlayerMode"}{" "}{"ActualPlayerMode"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
+
+ +
{"val"}{" "}{"actualPlayerMode"}{":"}{" "}{"PlayerMode"}
+
+
+ diff --git a/docs/reference/api/loadmidiforscore.mdx b/docs/reference/api/loadmidiforscore.mdx new file mode 100644 index 0000000..7e502f9 --- /dev/null +++ b/docs/reference/api/loadmidiforscore.mdx @@ -0,0 +1,35 @@ +--- +title: loadMidiForScore +description: "Re-creates the midi for the current score and loads it." +sidebar_custom_props: + kind: method + category: Methods - Player + since: 1.6.0 +--- + +import { ParameterTable, ParameterRow } from '@site/src/components/ParameterTable'; +import CodeBlock from '@theme/CodeBlock'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import { CodeBadge } from '@site/src/components/CodeBadge'; +import { SinceBadge } from '@site/src/components/SinceBadge'; +import DynHeading from '@site/src/components/DynHeading'; +import Link from '@docusaurus/Link'; + + + +### Description +Re-creates the midi for the current score and loads it. This will result in the player to stop playback. Some setting changes require re-genration of the midi song. + + + +
{"loadMidiForScore"}{"("}{")"}{":"}{" "}{"void"}
+
+ +
{"void"}{" "}{"LoadMidiForScore"}{"("}{")"}
+
+ +
{"fun"}{" "}{"loadMidiForScore"}{"("}{")"}{":"}{" "}{"Unit"}
+
+
+ diff --git a/docs/reference/api/midieventsplayed.mdx b/docs/reference/api/midieventsplayed.mdx index 05329f7..6858a13 100644 --- a/docs/reference/api/midieventsplayed.mdx +++ b/docs/reference/api/midieventsplayed.mdx @@ -29,13 +29,13 @@ until some extend but highly encourage changing to the new models in case of pro -
{"midiEventsPlayed"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"MidiEventsPlayedEventArgs"}{">"}{";"}
+
{"readonly"}{" "}{"midiEventsPlayed"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"MidiEventsPlayedEventArgs"}{">"}{";"}
-
{"IEventEmitterOfT"}{"<"}{"MidiEventsPlayedEventArgs"}{">"}{" "}{"MidiEventsPlayed"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
{"IEventEmitterOfT"}{"<"}{"MidiEventsPlayedEventArgs"}{">"}{" "}{"MidiEventsPlayed"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
-
{"var"}{" "}{"midiEventsPlayed"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"MidiEventsPlayedEventArgs"}{">"}
+
{"val"}{" "}{"midiEventsPlayed"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"MidiEventsPlayedEventArgs"}{">"}
diff --git a/docs/reference/api/playbackrangechanged.mdx b/docs/reference/api/playbackrangechanged.mdx index 3aa0c2d..8df677d 100644 --- a/docs/reference/api/playbackrangechanged.mdx +++ b/docs/reference/api/playbackrangechanged.mdx @@ -23,13 +23,13 @@ This event is fired when the playback range changed. -
{"playbackRangeChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PlaybackRangeChangedEventArgs"}{">"}{";"}
+
{"readonly"}{" "}{"playbackRangeChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PlaybackRangeChangedEventArgs"}{">"}{";"}
-
{"IEventEmitterOfT"}{"<"}{"PlaybackRangeChangedEventArgs"}{">"}{" "}{"PlaybackRangeChanged"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
{"IEventEmitterOfT"}{"<"}{"PlaybackRangeChangedEventArgs"}{">"}{" "}{"PlaybackRangeChanged"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
-
{"var"}{" "}{"playbackRangeChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PlaybackRangeChangedEventArgs"}{">"}
+
{"val"}{" "}{"playbackRangeChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PlaybackRangeChangedEventArgs"}{">"}
diff --git a/docs/reference/api/player.mdx b/docs/reference/api/player.mdx index 8c28e92..a3c79f3 100644 --- a/docs/reference/api/player.mdx +++ b/docs/reference/api/player.mdx @@ -27,13 +27,13 @@ Gets access to the underling -
{"player"}{":"}{" "}{"IAlphaSynth"}{" "}{"|"}{" "}{"null"}{";"}
+
{"readonly"}{" "}{"player"}{":"}{" "}{"IAlphaSynth"}{" "}{"|"}{" "}{"null"}{";"}
-
{"IAlphaSynth"}{"?"}{" "}{"Player"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
{"IAlphaSynth"}{"?"}{" "}{"Player"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
-
{"var"}{" "}{"player"}{":"}{" "}{"IAlphaSynth"}{"?"}
+
{"val"}{" "}{"player"}{":"}{" "}{"IAlphaSynth"}{"?"}
diff --git a/docs/reference/api/playerfinished.mdx b/docs/reference/api/playerfinished.mdx index 481b7ee..e40181c 100644 --- a/docs/reference/api/playerfinished.mdx +++ b/docs/reference/api/playerfinished.mdx @@ -23,13 +23,13 @@ This event is fired when the playback of the whole song finished. This event is -
{"playerFinished"}{":"}{" "}{"IEventEmitter"}{";"}
+
{"readonly"}{" "}{"playerFinished"}{":"}{" "}{"IEventEmitter"}{";"}
-
{"IEventEmitter"}{" "}{"PlayerFinished"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
{"IEventEmitter"}{" "}{"PlayerFinished"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
-
{"var"}{" "}{"playerFinished"}{":"}{" "}{"IEventEmitter"}
+
{"val"}{" "}{"playerFinished"}{":"}{" "}{"IEventEmitter"}
diff --git a/docs/reference/api/playerpositionchanged.mdx b/docs/reference/api/playerpositionchanged.mdx index 0e61cb9..611424a 100644 --- a/docs/reference/api/playerpositionchanged.mdx +++ b/docs/reference/api/playerpositionchanged.mdx @@ -23,13 +23,13 @@ This event is fired when the current playback position of the song changed. -
{"playerPositionChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PositionChangedEventArgs"}{">"}{";"}
+
{"readonly"}{" "}{"playerPositionChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PositionChangedEventArgs"}{">"}{";"}
-
{"IEventEmitterOfT"}{"<"}{"PositionChangedEventArgs"}{">"}{" "}{"PlayerPositionChanged"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
{"IEventEmitterOfT"}{"<"}{"PositionChangedEventArgs"}{">"}{" "}{"PlayerPositionChanged"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
-
{"var"}{" "}{"playerPositionChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PositionChangedEventArgs"}{">"}
+
{"val"}{" "}{"playerPositionChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PositionChangedEventArgs"}{">"}
diff --git a/docs/reference/api/playerready.mdx b/docs/reference/api/playerready.mdx index fde4d6a..98dcc77 100644 --- a/docs/reference/api/playerready.mdx +++ b/docs/reference/api/playerready.mdx @@ -24,13 +24,13 @@ all background workers are started, the audio output is initialized, a soundfont -
{"playerReady"}{":"}{" "}{"IEventEmitter"}{";"}
+
{"readonly"}{" "}{"playerReady"}{":"}{" "}{"IEventEmitter"}{";"}
-
{"IEventEmitter"}{" "}{"PlayerReady"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
{"IEventEmitter"}{" "}{"PlayerReady"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
-
{"var"}{" "}{"playerReady"}{":"}{" "}{"IEventEmitter"}
+
{"val"}{" "}{"playerReady"}{":"}{" "}{"IEventEmitter"}
diff --git a/docs/reference/api/playerstatechanged.mdx b/docs/reference/api/playerstatechanged.mdx index 5f0f733..6aba476 100644 --- a/docs/reference/api/playerstatechanged.mdx +++ b/docs/reference/api/playerstatechanged.mdx @@ -23,13 +23,13 @@ This event is fired when the playback state changed. -
{"playerStateChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PlayerStateChangedEventArgs"}{">"}{";"}
+
{"readonly"}{" "}{"playerStateChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PlayerStateChangedEventArgs"}{">"}{";"}
-
{"IEventEmitterOfT"}{"<"}{"PlayerStateChangedEventArgs"}{">"}{" "}{"PlayerStateChanged"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
{"IEventEmitterOfT"}{"<"}{"PlayerStateChangedEventArgs"}{">"}{" "}{"PlayerStateChanged"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
-
{"var"}{" "}{"playerStateChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PlayerStateChangedEventArgs"}{">"}
+
{"val"}{" "}{"playerStateChanged"}{":"}{" "}{"IEventEmitterOfT"}{"<"}{"PlayerStateChangedEventArgs"}{">"}
diff --git a/docs/reference/api/settingsupdated.mdx b/docs/reference/api/settingsupdated.mdx new file mode 100644 index 0000000..621deab --- /dev/null +++ b/docs/reference/api/settingsupdated.mdx @@ -0,0 +1,72 @@ +--- +title: settingsUpdated +description: "This event is fired when a settings update was requested." +sidebar_custom_props: + kind: event + category: Events - Core + since: 1.6.0 +--- + +import { ParameterTable, ParameterRow } from '@site/src/components/ParameterTable'; +import CodeBlock from '@theme/CodeBlock'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import { CodeBadge } from '@site/src/components/CodeBadge'; +import { SinceBadge } from '@site/src/components/SinceBadge'; +import DynHeading from '@site/src/components/DynHeading'; +import Link from '@docusaurus/Link'; + + + +### Description +This event is fired when a settings update was requested. + + + +
{"settingsUpdated"}{":"}{" "}{"IEventEmitter"}{";"}
+
+ +
{"IEventEmitter"}{" "}{"SettingsUpdated"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
+ +
{"var"}{" "}{"settingsUpdated"}{":"}{" "}{"IEventEmitter"}
+
+
+ + +## Examples + + + +```js +const api = new alphaTab.AlphaTabApi(document.querySelector('#alphaTab')); +api.settingsUpdated.on(() => { + updateSettingsUI(api.settings); +}); +``` + + +```cs +var api = new AlphaTabApi(...); +api.SettingsUpdated.On(() => +{ + UpdateSettingsUI(api.settings); +}); +``` + + +```kotlin +val api = AlphaTabApi(...) +api.SettingsUpdated.on { + updateSettingsUI(api.settings) +} +``` + + diff --git a/docs/reference/api/soundfontloaded.mdx b/docs/reference/api/soundfontloaded.mdx index 7e325c7..785845e 100644 --- a/docs/reference/api/soundfontloaded.mdx +++ b/docs/reference/api/soundfontloaded.mdx @@ -23,13 +23,13 @@ This event is fired when the SoundFont needed for playback was loaded. -
{"soundFontLoaded"}{":"}{" "}{"IEventEmitter"}{";"}
+
{"readonly"}{" "}{"soundFontLoaded"}{":"}{" "}{"IEventEmitter"}{";"}
-
{"IEventEmitter"}{" "}{"SoundFontLoaded"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}
+
{"IEventEmitter"}{" "}{"SoundFontLoaded"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"}"}
-
{"var"}{" "}{"soundFontLoaded"}{":"}{" "}{"IEventEmitter"}
+
{"val"}{" "}{"soundFontLoaded"}{":"}{" "}{"IEventEmitter"}
diff --git a/docs/reference/api/uifacade.mdx b/docs/reference/api/uifacade.mdx index 178ea70..8b39341 100644 --- a/docs/reference/api/uifacade.mdx +++ b/docs/reference/api/uifacade.mdx @@ -1,9 +1,10 @@ --- title: uiFacade -description: "Gets the UI facade to use for interacting with the user interface." +description: "The UI facade used for interacting with the user interface (like the browser)." sidebar_custom_props: kind: property category: Properties - Core + since: 0.9.4 --- import { ParameterTable, ParameterRow } from '@site/src/components/ParameterTable'; @@ -15,12 +16,13 @@ import { SinceBadge } from '@site/src/components/SinceBadge'; import DynHeading from '@site/src/components/DynHeading'; import Link from '@docusaurus/Link'; + import { PropertyDescription } from '@site/src/components/PropertyDescription'; ### Description -Gets the UI facade to use for interacting with the user interface. +The UI facade used for interacting with the user interface (like the browser). The implementation depends on the platform alphaTab is running in (e.g. the web version in the browser, WPF in .net etc.) diff --git a/docs/reference/settings/player/playermode.mdx b/docs/reference/settings/player/playermode.mdx new file mode 100644 index 0000000..40d8851 --- /dev/null +++ b/docs/reference/settings/player/playermode.mdx @@ -0,0 +1,58 @@ +--- +title: player.playerMode +description: "Whether the player should be enabled and which mode it should use." +sidebar_custom_props: + category: Player + since: 1.6.0 +--- + +import { ParameterTable, ParameterRow } from '@site/src/components/ParameterTable'; +import CodeBlock from '@theme/CodeBlock'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import { CodeBadge } from '@site/src/components/CodeBadge'; +import { SinceBadge } from '@site/src/components/SinceBadge'; +import DynHeading from '@site/src/components/DynHeading'; +import Link from '@docusaurus/Link'; + +import { SettingsHeader } from '@site/src/components/SettingsHeader'; + + + +### Description +Whether the player should be enabled and which mode it should use. This setting configures whether the player feature is enabled or not. Depending on the platform enabling the player needs some additional actions of the developer. + +**Synthesizer** + +If the synthesizer is used (via {"EnabledAutomatic"} or {"EnabledSynthesizer"}) a sound font is needed so that the midi synthesizer can produce the audio samples. + +For the JavaScript version the [player.soundFont](/docs/reference/settings/player/soundfont) property must be set to the URL of the sound font that should be used or it must be loaded manually via API. +For .net manually the soundfont must be loaded. + +**Backing Track** + +For a built-in backing track of the input file no additional data needs to be loaded (assuming everything is filled via the input file). +Otherwise the `score.backingTrack` needs to be filled before loading and the related sync points need to be configured. + +**External Media** + +For synchronizing alphaTab with an external media no data needs to be loaded into alphaTab. The configured sync points on the MasterBars are used +as reference to synchronize the external media with the internal time axis. Then the related APIs on the AlphaTabApi object need to be used +to update the playback state and exterrnal audio position during playback. + +**User Interface** + +AlphaTab does not ship a default UI for the player. The API must be hooked up to some UI controls to allow the user to interact with the player. + + + +
{"playerMode"}{":"}{" "}{"PlayerMode"}{" "}{"="}{" "}{"PlayerMode.Disabled"}{";"}
+
+ +
{"PlayerMode"}{" "}{"PlayerMode"}{" "}{"{"}{" "}{"get"}{";"}{" "}{"set"}{";"}{" "}{"}"}{" "}{"="}{" "}{"PlayerMode.Disabled"}
+
+ +
{"var"}{" "}{"playerMode"}{":"}{" "}{"PlayerMode"}{" "}{"="}{" "}{"PlayerMode.Disabled"}
+
+
+ diff --git a/docs/showcase/effects.mdx b/docs/showcase/effects.mdx index b768cfb..24da117 100644 --- a/docs/showcase/effects.mdx +++ b/docs/showcase/effects.mdx @@ -1,6 +1,5 @@ --- title: Effects and Annotations -full_width: true --- import { AlphaTab } from '@site/src/components/AlphaTab'; diff --git a/docs/showcase/general.mdx b/docs/showcase/general.mdx index f19d516..ca2ce91 100644 --- a/docs/showcase/general.mdx +++ b/docs/showcase/general.mdx @@ -1,6 +1,5 @@ --- title: General -full_width: true --- import { AlphaTab } from '@site/src/components/AlphaTab'; diff --git a/docs/showcase/guitar-tabs.mdx b/docs/showcase/guitar-tabs.mdx index d81b444..93790cb 100644 --- a/docs/showcase/guitar-tabs.mdx +++ b/docs/showcase/guitar-tabs.mdx @@ -1,6 +1,5 @@ --- title: Guitar Tabs -full_width: true --- import { AlphaTab } from '@site/src/components/AlphaTab'; diff --git a/docs/showcase/introduction.mdx b/docs/showcase/introduction.mdx index 07c1250..9c4c4cb 100644 --- a/docs/showcase/introduction.mdx +++ b/docs/showcase/introduction.mdx @@ -1,6 +1,5 @@ --- title: Introduction -full_width: true --- import { AlphaTab } from '@site/src/components/AlphaTab'; diff --git a/docs/showcase/layouts.mdx b/docs/showcase/layouts.mdx index 9bb063e..e64c8db 100644 --- a/docs/showcase/layouts.mdx +++ b/docs/showcase/layouts.mdx @@ -1,6 +1,5 @@ --- title: Layouts -full_width: true --- import { AlphaTab } from '@site/src/components/AlphaTab'; diff --git a/docs/showcase/music-notation.mdx b/docs/showcase/music-notation.mdx index 69f5c9f..0e8d5bf 100644 --- a/docs/showcase/music-notation.mdx +++ b/docs/showcase/music-notation.mdx @@ -1,6 +1,5 @@ --- title: Music Notation -full_width: true --- import { AlphaTab } from '@site/src/components/AlphaTab'; diff --git a/docs/showcase/special-notes.mdx b/docs/showcase/special-notes.mdx index c0bc3a8..8e49309 100644 --- a/docs/showcase/special-notes.mdx +++ b/docs/showcase/special-notes.mdx @@ -1,6 +1,5 @@ --- title: Special Notes -full_width: true --- import { AlphaTab } from '@site/src/components/AlphaTab'; diff --git a/docs/showcase/special-tracks.mdx b/docs/showcase/special-tracks.mdx index f699639..d5b77af 100644 --- a/docs/showcase/special-tracks.mdx +++ b/docs/showcase/special-tracks.mdx @@ -1,6 +1,5 @@ --- title: Special Tracks -full_width: true --- import { AlphaTab } from '@site/src/components/AlphaTab'; diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 0a234cf..ffbff68 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -220,6 +220,12 @@ const config: Config = { position: "left", label: "Showcase", }, + { + type: "doc", + docId: "playground/playground", + position: "left", + label: "Playground", + }, // Right { type: "dropdown", diff --git a/package-lock.json b/package-lock.json index 8d8f162..e459c19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,12 +18,15 @@ "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", "@mdx-js/react": "^3.1.0", + "@uidotdev/usehooks": "^2.4.1", + "@uiw/react-color": "^2.5.5", + "@uiw/react-color-chrome": "^2.5.5", "clsx": "^2.1.1", "docusaurus-lunr-search": "^3.6.0", "prism-react-renderer": "^2.4.1", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-tooltip": "^5.28.0", + "react-tooltip": "^5.28.1", "webpack": "^5.98.0" }, "devDependencies": { @@ -5716,6 +5719,410 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, + "node_modules/@uidotdev/usehooks": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.4.1.tgz", + "integrity": "sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@uiw/color-convert": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.5.5.tgz", + "integrity": "sha512-sNKhJe3h/nMxxoB3NEr02RTjkSE85sLIwQyl1lVK4scVCQumPbz1giWcWlYnSRLBHmrYYat7xShrDf/+Uc3UAg==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0" + } + }, + "node_modules/@uiw/react-color": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color/-/react-color-2.5.5.tgz", + "integrity": "sha512-dWho/6QvHgK34j7oi7/0fA21ozMaFNJyA2Uj87Lw5JZv3Br4ZtX39fBXBqlE53VpfuTFLAJoCB9Xun5XD39rJw==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-alpha": "2.5.5", + "@uiw/react-color-block": "2.5.5", + "@uiw/react-color-chrome": "2.5.5", + "@uiw/react-color-circle": "2.5.5", + "@uiw/react-color-colorful": "2.5.5", + "@uiw/react-color-compact": "2.5.5", + "@uiw/react-color-editable-input": "2.5.5", + "@uiw/react-color-editable-input-hsla": "2.5.5", + "@uiw/react-color-editable-input-rgba": "2.5.5", + "@uiw/react-color-github": "2.5.5", + "@uiw/react-color-hue": "2.5.5", + "@uiw/react-color-material": "2.5.5", + "@uiw/react-color-name": "2.5.5", + "@uiw/react-color-saturation": "2.5.5", + "@uiw/react-color-shade-slider": "2.5.5", + "@uiw/react-color-sketch": "2.5.5", + "@uiw/react-color-slider": "2.5.5", + "@uiw/react-color-swatch": "2.5.5", + "@uiw/react-color-wheel": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-alpha": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-alpha/-/react-color-alpha-2.5.5.tgz", + "integrity": "sha512-J0SpMtpZFMCaSy1DmWCsVyoWZ0IH6JdSCd7558WdJbKqD/Wt9tzGjZeH9SWb9fGAPFhxoNqh8RCD2mAij4dsYA==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-drag-event-interactive": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-block": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-block/-/react-color-block-2.5.5.tgz", + "integrity": "sha512-7V14Wk9MvMZZUaM+OQ2twislWEgt/g/aB0/tadJ++lIRj9+gBZaHn+TATuizkCHMwcbcI6On0Kes+jdxGelqcA==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-editable-input": "2.5.5", + "@uiw/react-color-swatch": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-chrome": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-chrome/-/react-color-chrome-2.5.5.tgz", + "integrity": "sha512-wCOpyEo5BUNsMD0Z9mtp3PEyL+ZM1BcSelWSBPxg5D8CRBI0FcJ+aek4y9GK8Ypb1xqi7ngbeR+P78T0+uC/tg==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-alpha": "2.5.5", + "@uiw/react-color-editable-input": "2.5.5", + "@uiw/react-color-editable-input-hsla": "2.5.5", + "@uiw/react-color-editable-input-rgba": "2.5.5", + "@uiw/react-color-github": "2.5.5", + "@uiw/react-color-hue": "2.5.5", + "@uiw/react-color-saturation": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-circle": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-circle/-/react-color-circle-2.5.5.tgz", + "integrity": "sha512-J9rRotuAFOLeHvMLQG6UFHAW8RfPK2PXeJcke+GTFtNf9JH/Jn6GePO+stV8URQ8/pbugJPJLUSq4oyzA84gYw==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-swatch": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-colorful": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-colorful/-/react-color-colorful-2.5.5.tgz", + "integrity": "sha512-F1Z9Z3uhDUuZWjLpv0YFxn29USqvTd9E6uYHYl7hdAHBjtAUKhWUhUCsq0YsRwieHvof9jYhMhUMAu6/Z7WcIA==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-alpha": "2.5.5", + "@uiw/react-color-hue": "2.5.5", + "@uiw/react-color-saturation": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-compact": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-compact/-/react-color-compact-2.5.5.tgz", + "integrity": "sha512-y6XZIE0NFiE0L7D3L2E5OrvXkGUd99WAsCLbeGgTSBGKB9OU4+9w79A06TXplr3uowA3TsRCMhOkkpFIL08zOA==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-editable-input": "2.5.5", + "@uiw/react-color-editable-input-rgba": "2.5.5", + "@uiw/react-color-swatch": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-editable-input": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-editable-input/-/react-color-editable-input-2.5.5.tgz", + "integrity": "sha512-Y44woxk/3c3r7D+7xh8UX/JKqst2TiiMMB5c55AQYKSQtxFsxbJG7g2pzYXxX41s9JEugkyrxbxAJWRP9pRJGg==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-editable-input-hsla": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-editable-input-hsla/-/react-color-editable-input-hsla-2.5.5.tgz", + "integrity": "sha512-cnKwW44zQsu/UDXE5DD+079F3x3UI4gNOJS3ozJaqsEyJOogfkbKHY9yfdxFSulkek9T02fRRKoHpchkKsQmaw==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-editable-input-rgba": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-editable-input-rgba": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-editable-input-rgba/-/react-color-editable-input-rgba-2.5.5.tgz", + "integrity": "sha512-pX7k4BIf5kOXnNDTLJhRFUjUHaxBXVyWYNgZtQLAQF8TxFBFAdbrZDXIcgYm1QeLUcGUPUrL73n3sNgqmS7+3g==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-editable-input": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-github": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-github/-/react-color-github-2.5.5.tgz", + "integrity": "sha512-ve7QOWbMlMRizX/2d7yvr0xFo1k6sVFABz7hj69dYXYp5lTcoYH4sujuwD4ic2igSVoZTexQyVlkaK4vMXUQdg==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-swatch": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-hue": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-hue/-/react-color-hue-2.5.5.tgz", + "integrity": "sha512-PxofC2303OthiHf7EOOz1+U+Oa8jmIpUY6SnOFdXIpgKMxaiTk+UUvV9uZRXyJ3onweNhK/zAN+8uEuSkQkpTg==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-alpha": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-material": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-material/-/react-color-material-2.5.5.tgz", + "integrity": "sha512-HXVO0DEOIbyw0dYt0NeXVCx2ewJl+rpuVgvVQFgFtHq2MFcKtd88nIFU/qs6iwnAZ1s9ZYP5nUig8wOvyBPkrw==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-editable-input": "2.5.5", + "@uiw/react-color-editable-input-rgba": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-name": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-name/-/react-color-name-2.5.5.tgz", + "integrity": "sha512-xsJ+FriWCmMJq65nTjaKAUflKw+wh9BN4zZIup4x30PDlzELx2VssIxJrWwazX4kXryurg9+pRfhcwAHL5dOVA==", + "dependencies": { + "colors-named": "^1.0.1", + "colors-named-hex": "^1.0.1" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0" + } + }, + "node_modules/@uiw/react-color-saturation": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-saturation/-/react-color-saturation-2.5.5.tgz", + "integrity": "sha512-InHxYWpyTYwpHZXjsoG6tKI7QObCva/TfjobbPhB2UMYxpL07u8l9RiB0IOvejIybWuZDPVqjueawV7+wesepA==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-drag-event-interactive": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-shade-slider": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-shade-slider/-/react-color-shade-slider-2.5.5.tgz", + "integrity": "sha512-UI61p56Wf5vJuJuMuitB4+YtNi/+XiqeP0jgAL7PXz610D4XCFHodJRq77DKThVWPFAIGNnZJAiyf/sJ22CKtw==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-alpha": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-sketch": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-sketch/-/react-color-sketch-2.5.5.tgz", + "integrity": "sha512-SXbD4qHMKQSEAS7Qf/bjScOuU4J30UJYPBd32BXcEspWiiyDS85ApUZd417AmS4DHvQw6TBUSidgXSEcibRUiw==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-alpha": "2.5.5", + "@uiw/react-color-editable-input": "2.5.5", + "@uiw/react-color-editable-input-rgba": "2.5.5", + "@uiw/react-color-hue": "2.5.5", + "@uiw/react-color-saturation": "2.5.5", + "@uiw/react-color-swatch": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-slider": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-slider/-/react-color-slider-2.5.5.tgz", + "integrity": "sha512-epu/15opKC4l3zxS08hoPWr6uYLSqv9wn07qRrErFghDvBFczKGB8DPsRkauU58H2L3wJ4puSi/S52GqQ1ff/A==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-color-alpha": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-swatch": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-swatch/-/react-color-swatch-2.5.5.tgz", + "integrity": "sha512-4VceKPE7W7S4esG0dToEC0ogexABFBHBnNuS6CHPYSOEnyozM2FpxlixzFUwyf1PFOKKKLZDYHl9GqZX1dpNgw==", + "dependencies": { + "@uiw/color-convert": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-wheel": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-color-wheel/-/react-color-wheel-2.5.5.tgz", + "integrity": "sha512-9waqaTdJgeZS5oc85NlKTVeVBSmBU2JypECoYPKqxRPlwetEWo/gJazAyU0HCpZqU5TucPRYUz6shRTz1On+0A==", + "dependencies": { + "@uiw/color-convert": "2.5.5", + "@uiw/react-drag-event-interactive": "2.5.5" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-drag-event-interactive": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@uiw/react-drag-event-interactive/-/react-drag-event-interactive-2.5.5.tgz", + "integrity": "sha512-RO31lRPh0pDFM++dTT42K5zrJsYb5kGy502Ou5aTIP/XJg05+Xy5QpF4o4EPsuzNJ1GOpPYg+V5FsvafQ+LONQ==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -6968,6 +7375,28 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, + "node_modules/colors-named": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/colors-named/-/colors-named-1.0.2.tgz", + "integrity": "sha512-2ANq2r393PV9njYUD66UdfBcxR1slMqRA3QRTWgCx49JoCJ+kOhyfbQYxKJbPZQIhZUcNjVOs5AlyY1WwXec3w==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/colors-named-hex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/colors-named-hex/-/colors-named-hex-1.0.2.tgz", + "integrity": "sha512-k6kq1e1pUCQvSVwIaGFq2l0LrkAPQZWyeuZn1Z8nOiYSEZiKoFj4qx690h2Kd34DFl9Me0gKS6MUwAMBJj8nuA==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, "node_modules/combine-promises": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", @@ -16852,9 +17281,9 @@ } }, "node_modules/react-tooltip": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.28.0.tgz", - "integrity": "sha512-R5cO3JPPXk6FRbBHMO0rI9nkUG/JKfalBSQfZedZYzmqaZQgq7GLzF8vcCWx6IhUCKg0yPqJhXIzmIO5ff15xg==", + "version": "5.28.1", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.28.1.tgz", + "integrity": "sha512-ZA4oHwoIIK09TS7PvSLFcRlje1wGZaxw6xHvfrzn6T82UcMEfEmHVCad16Gnr4NDNDh93HyN037VK4HDi5odfQ==", "dependencies": { "@floating-ui/dom": "^1.6.1", "classnames": "^2.3.0" diff --git a/package.json b/package.json index 4bca40c..985621b 100644 --- a/package.json +++ b/package.json @@ -26,12 +26,15 @@ "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", "@mdx-js/react": "^3.1.0", + "@uidotdev/usehooks": "^2.4.1", + "@uiw/react-color": "^2.5.5", + "@uiw/react-color-chrome": "^2.5.5", "clsx": "^2.1.1", "docusaurus-lunr-search": "^3.6.0", "prism-react-renderer": "^2.4.1", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-tooltip": "^5.28.0", + "react-tooltip": "^5.28.1", "webpack": "^5.98.0" }, "devDependencies": { diff --git a/sidebars.ts b/sidebars.ts index c212494..0b9a2fc 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -179,7 +179,7 @@ const sidebars: SidebarsConfig = { "formats/capella", ], }, - ], + ] }; module.exports = sidebars; diff --git a/src/components/AlphaTabFull/index.tsx b/src/components/AlphaTabFull/index.tsx index 623a7ac..a680e20 100644 --- a/src/components/AlphaTabFull/index.tsx +++ b/src/components/AlphaTabFull/index.tsx @@ -1,13 +1,12 @@ 'use client'; import * as alphaTab from "@coderline/alphatab"; -import React, { useEffect, useRef, useState } from "react"; +import React, { useRef, useState } from "react"; import { PlayerControlsGroup } from "./player-controls-group"; import { TrackItem } from "./track-item"; import styles from "./styles.module.scss"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import * as solid from "@fortawesome/free-solid-svg-icons"; -import environment from "@site/src/environment"; import { useAlphaTab, useAlphaTabEvent } from "@site/src/hooks"; import { openFile } from "@site/src/utils"; diff --git a/src/components/AlphaTabFull/player-controls-group.tsx b/src/components/AlphaTabFull/player-controls-group.tsx index b455eef..f3ae275 100644 --- a/src/components/AlphaTabFull/player-controls-group.tsx +++ b/src/components/AlphaTabFull/player-controls-group.tsx @@ -13,7 +13,7 @@ import { openFile } from "@site/src/utils"; export interface PlayerControlsGroupProps { api: alphaTab.AlphaTabApi; - onLayoutChange: ( + onLayoutChange?: ( layoutMode: alphaTab.LayoutMode, scrollMode: alphaTab.ScrollMode ) => void; diff --git a/src/components/AlphaTabPlayground/index.tsx b/src/components/AlphaTabPlayground/index.tsx new file mode 100644 index 0000000..581738a --- /dev/null +++ b/src/components/AlphaTabPlayground/index.tsx @@ -0,0 +1,97 @@ +'use client'; + +import type * as alphaTab from '@coderline/alphatab'; +import React, { useEffect, useState } from 'react'; +import { useAlphaTab, useAlphaTabEvent } from '@site/src/hooks'; +import styles from './styles.module.scss'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import * as solid from '@fortawesome/free-solid-svg-icons'; +import { openFile } from '@site/src/utils'; +import { PlayerControlsGroup, SidePanel } from './player-controls-group'; +import { PlaygroundSettings } from './playground-settings'; +import { Tooltip } from 'react-tooltip'; +import { PlaygroundTrackSelector } from './track-selector'; + +interface AlphaTabPlaygroundProps { + settings?: alphaTab.json.SettingsJson; +} + +export const AlphaTabPlayground: React.FC = ({ settings }) => { + const viewPortRef = React.createRef(); + const [isLoading, setLoading] = useState(true); + const [sidePanel, setSidePanel] = useState(SidePanel.None); + + const [api, element] = useAlphaTab(s => { + s.core.engine = 'svg'; + s.player.scrollElement = viewPortRef.current!; + s.player.scrollOffsetY = -10; + s.player.enablePlayer = true; + if (settings) { + s.fillFromJson(settings); + } + }); + + useAlphaTabEvent(api, 'renderFinished', () => { + setLoading(false); + }); + + const onDragOver = (e: React.DragEvent) => { + e.stopPropagation(); + e.preventDefault(); + if (e.dataTransfer) { + e.dataTransfer.dropEffect = 'link'; + } + }; + + const onDrop = (e: React.DragEvent) => { + e.stopPropagation(); + e.preventDefault(); + if (e.dataTransfer) { + const files = e.dataTransfer.files; + if (files.length === 1) { + openFile(api!, files[0]); + } + } + }; + + return ( + <> +
+ {isLoading && ( +
+
+ +
+
+ )} + + {api && api?.score && ( + setSidePanel(SidePanel.None)} + isOpen={sidePanel === SidePanel.Settings} + /> + )} + + {api && api?.score && ( + setSidePanel(SidePanel.None)} + isOpen={sidePanel === SidePanel.TrackSelector} + /> + )} + +
+
+
+
+
+ +
+ {api && } +
+
+ + + ); +}; diff --git a/src/components/AlphaTabPlayground/player-controls-group.tsx b/src/components/AlphaTabPlayground/player-controls-group.tsx new file mode 100644 index 0000000..1bfe2fd --- /dev/null +++ b/src/components/AlphaTabPlayground/player-controls-group.tsx @@ -0,0 +1,154 @@ +import * as alphaTab from '@coderline/alphatab'; +import type React from 'react'; +import { useState } from 'react'; +import styles from './styles.module.scss'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import * as solid from '@fortawesome/free-solid-svg-icons'; +import { useAlphaTabEvent } from '@site/src/hooks'; +import { openFile } from '@site/src/utils'; +import { PlayerProgressIndicator } from '../AlphaTabFull/player-progress-indicator'; + +export interface PlayerControlsGroupProps { + sidePanel: SidePanel; + onSidePanelChange: (sidePanel: SidePanel) => void; + api: alphaTab.AlphaTabApi; +} + +export enum SidePanel { + None = 0, + Settings = 1, + TrackSelector = 2 +} + +export const PlayerControlsGroup: React.FC = ({ api, sidePanel, onSidePanelChange }) => { + const [soundFontLoadPercentage, setSoundFontLoadPercentage] = useState(0); + const [isPlaying, setPlaying] = useState(false); + const [currentTime, setCurrentTime] = useState(0); + const [endTime, setEndTime] = useState(1); + + useAlphaTabEvent(api, 'soundFontLoad', e => { + setSoundFontLoadPercentage(e.loaded / e.total); + }); + + useAlphaTabEvent(api, 'soundFontLoaded', () => { + setSoundFontLoadPercentage(1); + }); + useAlphaTabEvent(api, 'playerStateChanged', e => { + setPlaying(e.state === alphaTab.synth.PlayerState.Playing); + }); + useAlphaTabEvent(api, 'playerPositionChanged', e => { + // reduce number of UI updates to second changes. + const previousCurrentSeconds = (currentTime / 1000) | 0; + const newCurrentSeconds = (e.currentTime / 1000) | 0; + + if (e.endTime === endTime && (previousCurrentSeconds === newCurrentSeconds || newCurrentSeconds === 0)) { + return; + } + + setEndTime(e.endTime); + setCurrentTime(e.currentTime); + }); + + const open = () => { + const input = document.createElement('input'); + input.type = 'file'; + input.accept = '.gp,.gp3,.gp4,.gp5,.gpx,.musicxml,.mxml,.xml,.capx'; + input.onchange = () => { + if (input.files?.length === 1) { + openFile(api, input.files[0]); + } + }; + document.body.appendChild(input); + input.click(); + document.body.removeChild(input); + }; + + const formatDuration = (milliseconds: number) => { + let seconds = milliseconds / 1000; + const minutes = (seconds / 60) | 0; + seconds = (seconds - minutes * 60) | 0; + return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`; + }; + + return ( + <> +
+
+
+
+
+ + + + + + + {api.score && ( +
+ {api.score.title} + - + {api.score.artist} +
+ )} + +
+ {formatDuration(currentTime)} / {formatDuration(endTime)} +
+
+ +
+ + +
+
+ + ); +}; diff --git a/src/components/AlphaTabPlayground/playground-settings.tsx b/src/components/AlphaTabPlayground/playground-settings.tsx new file mode 100644 index 0000000..15c05c8 --- /dev/null +++ b/src/components/AlphaTabPlayground/playground-settings.tsx @@ -0,0 +1,886 @@ +'use client'; + +import * as alphaTab from '@coderline/alphatab'; +import type React from 'react'; +import styles from './styles.module.scss'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import * as solid from '@fortawesome/free-solid-svg-icons'; +import { createContext, useContext, useEffect, useId, useState } from 'react'; +import Chrome from '@uiw/react-color-chrome'; +import { useDebounce } from '@uidotdev/usehooks'; +import { rgbaToHexa } from '@uiw/react-color'; + +type SettingsContextProps = { + api: alphaTab.AlphaTabApi; + onSettingsUpdated(): void; +}; + +const SettingsContext = createContext(null!); + +type TypeScriptEnum = { [key: number | string]: number | string }; + +type ValueAccessor = { + getValue(context: SettingsContextProps): any; + setValue(context: SettingsContextProps, value: any): void; +}; +type ControlProps = ValueAccessor & { inputId: string }; + +type ButtonGroupButtonSchema = { label: string; value: any }; + +type ButtonGroupSchema = { type: 'button-group'; buttons: ButtonGroupButtonSchema[] }; +type NumberInputSchema = { type: 'number-input'; min?: number; max?: number; step?: number }; +type BooleanToggleSchema = { type: 'boolean-toggle' }; +type NumberRangeSchema = { type: 'number-range'; min: number; max: number; step: number }; +type EnumDropDownSchema = { type: 'enum-dropdown'; enumType: TypeScriptEnum }; +type ColorPickerSchema = { type: 'color-picker' }; +type FontPickerSchema = { type: 'font-picker' }; + +type SettingSchema = { + label: string; + control: + | ButtonGroupSchema + | EnumDropDownSchema + | NumberRangeSchema + | NumberInputSchema + | BooleanToggleSchema + | ColorPickerSchema + | FontPickerSchema; + prepareValue?(value: any): any; +} & ValueAccessor; +type SettingsGroupSchema = { title: string; settings: SettingSchema[] }; + +type UpdateSettingsOptions = { + prepareValue?: (value: any) => any; + afterUpdate?: (context: SettingsContextProps) => any; + callRender?: boolean; + callUpdateSettings?: boolean; +}; + +function updateSettings( + context: SettingsContextProps, + update: (settings: alphaTab.Settings) => void, + options?: UpdateSettingsOptions +) { + const api = context.api; + update(api.settings); + if (options?.callUpdateSettings ?? true) { + api.updateSettings(); + } + if (options?.callRender ?? true) { + api.render(); + } + context.onSettingsUpdated(); + options?.afterUpdate?.(context); +} + +const factory = { + settingAccessors(setting: string, updateOptions?: UpdateSettingsOptions) { + const parts = setting.split('.'); + return { + getValue(context: SettingsContextProps) { + let setting: any = context.api.settings; + for (let i = 0; i < parts.length - 1; i++) { + setting = setting[parts[i]]; + } + return setting[parts[parts.length - 1]]; + }, + setValue(context: SettingsContextProps, value) { + updateSettings( + context, + s => { + for (let i = 0; i < parts.length - 1; i++) { + s = s[parts[i]]; + } + if (updateOptions?.prepareValue) { + value = updateOptions?.prepareValue(value); + } + s[parts[parts.length - 1]] = value; + }, + updateOptions + ); + } + }; + }, + apiAccessors(setting: string) { + return { + getValue(context: SettingsContextProps) { + return context.api[setting]; + }, + setValue(context: SettingsContextProps, value) { + context.api[setting] = value; + context.onSettingsUpdated(); + } + }; + }, + stylesheetAccessors(setting: string) { + return { + getValue(context: SettingsContextProps) { + return context.api.score!.stylesheet[setting]; + }, + setValue(context: SettingsContextProps, value) { + context.api.score!.stylesheet[setting] = value; + context.onSettingsUpdated(); + context.api.render(); + } + }; + }, + + numberRange( + label: string, + setting: string, + min: number, + max: number, + step: number, + updateOptions?: UpdateSettingsOptions + ): SettingSchema { + return { + label: label, + ...factory.settingAccessors(setting, updateOptions), + control: { type: 'number-range', min, max, step } + }; + }, + + numberRangeNegativeDisabled( + label: string, + setting: string, + min: number, + max: number, + step: number, + updateOptions?: UpdateSettingsOptions + ): SettingSchema { + return { + label: label, + ...factory.settingAccessors(setting, { + callRender: updateOptions?.callRender, + callUpdateSettings: updateOptions?.callUpdateSettings, + prepareValue(value: any) { + if (updateOptions?.prepareValue) { + value = updateOptions.prepareValue(value); + } + return value < 0 ? value : value + 1; + } + }), + control: { type: 'number-range', min, max, step } + }; + }, + + numberInput( + label: string, + setting: string, + min?: number, + max?: number, + step?: number, + updateOptions?: UpdateSettingsOptions + ): SettingSchema { + return { + label: label, + ...factory.settingAccessors(setting, updateOptions), + control: { type: 'number-input', min, max, step } + }; + }, + + toggle(label: string, setting: string, updateOptions?: UpdateSettingsOptions): SettingSchema { + return { + label: label, + ...factory.settingAccessors(setting, updateOptions), + control: { type: 'boolean-toggle' } + }; + }, + + colorPicker(label: string, setting: string, updateOptions?: UpdateSettingsOptions): SettingSchema { + return { + label: label, + ...factory.settingAccessors(setting, updateOptions), + control: { type: 'color-picker' } + }; + }, + + fontPicker(label: string, setting: string, updateOptions?: UpdateSettingsOptions): SettingSchema { + return { + label: label, + ...factory.settingAccessors(setting, updateOptions), + control: { type: 'font-picker' } + }; + }, + + enumDropDown( + label: string, + setting: string, + enumType: TypeScriptEnum, + updateOptions?: UpdateSettingsOptions + ): SettingSchema { + return { + label: label, + ...factory.settingAccessors(setting, updateOptions), + control: { type: 'enum-dropdown', enumType } + }; + }, + + buttonGroup( + label: string, + setting: string, + buttons: [string, string][], + updateOptions?: UpdateSettingsOptions + ): SettingSchema { + return { + label: label, + ...factory.settingAccessors(setting, updateOptions), + control: { type: 'button-group', buttons: buttons.map(b => ({ label: b[0], value: b[1] })) } + }; + } +}; + +// maybe we can auto-generate this for all settings? +function buildSettingsGroups(): SettingsGroupSchema[] { + const noRerender: UpdateSettingsOptions = { + callRender: false, + callUpdateSettings: true + }; + const withMidiGenerate: UpdateSettingsOptions = { + callRender: false, + callUpdateSettings: false, + afterUpdate(context) { + context.api.loadMidiForScore(); + } + }; + return [ + { + title: 'Display ▸ General', + settings: [ + factory.buttonGroup('Render Engine', 'core.engine', [ + ['SVG', 'svg'], + ['HTML5', 'html5'] + ]), + factory.numberRange('Scale', 'display.scale', 0.25, 2, 0.25), + factory.numberRange('Stretch', 'display.stretchForce', 0.25, 2, 0.25), + factory.enumDropDown('Layout', 'display.layoutMode', alphaTab.LayoutMode), + factory.numberRangeNegativeDisabled('Bars per System', 'display.barsPerRow', -1, 20, 1), + factory.numberInput('Start Bar', 'display.startBar', 1, undefined, 1), + factory.numberInput('Bar Count', 'display.barCount', -1, undefined, 1), + factory.toggle('Justify Last System', 'display.justifyLastSystem'), + factory.enumDropDown('Systems Layout Mode', 'display.systemsLayoutMode', alphaTab.SystemsLayoutMode) + ] + }, + { + title: 'Display ▸ Colors', + settings: [ + factory.colorPicker('Staff Line', 'display.resources.staffLineColor'), + factory.colorPicker('Bar Separator', 'display.resources.barSeparatorColor'), + factory.colorPicker('Bar Number', 'display.resources.barNumberColor'), + factory.colorPicker('Main Glyphs', 'display.resources.mainGlyphColor'), + factory.colorPicker('Secondary Glyphs', 'display.resources.secondaryGlyphColor'), + factory.colorPicker('Score Info', 'display.resources.scoreInfoColor') + // TODO: advanced coloring + ] + }, + { + title: 'Display ▸ Fonts', + settings: [ + factory.fontPicker('Copyright', 'display.resources.copyrightFont'), + factory.fontPicker('Title', 'display.resources.titleFont'), + factory.fontPicker('Subtitle', 'display.resources.subTitleFont'), + factory.fontPicker('Words', 'display.resources.wordsFont'), + factory.fontPicker('Effects', 'display.resources.effectFont'), + factory.fontPicker('Timer', 'display.resources.timerFont'), + factory.fontPicker('Directions', 'display.resources.directionsFont'), + factory.fontPicker('Fretboard Numbers', 'display.resources.fretboardNumberFont'), + factory.fontPicker('Numbered Notation', 'display.resources.numberedNotationFont'), + factory.fontPicker('Guitar Tabs', 'display.resources.tablatureFont'), + factory.fontPicker('Grace Notes', 'display.resources.graceFont'), + factory.fontPicker('Bar Numbers', 'display.resources.barNumberFont'), + factory.fontPicker('Inline Fingering', 'display.resources.inlineFingeringFont'), + factory.fontPicker('Markers', 'display.resources.markerFont') + ] + }, + { + title: 'Display ▸ Paddings', + settings: [ + { + label: 'Horizontal', + getValue(context: SettingsContextProps) { + return context.api.settings.display.padding[0]; + }, + setValue(context: SettingsContextProps, value) { + updateSettings(context, s => { + s.display.padding[0] = value; + }); + }, + control: { type: 'number-input', min: 0, step: 1 } + }, + { + label: 'Vertical', + getValue(context: SettingsContextProps) { + return context.api.settings.display.padding[1]; + }, + setValue(context: SettingsContextProps, value) { + updateSettings(context, s => { + s.display.padding[1] = value; + }); + }, + control: { type: 'number-input', min: 0, step: 1 } + }, + factory.numberInput('First System Top', 'display.firstSystemPaddingTop', 0), + factory.numberInput('Other Systems Top', 'display.systemPaddingTop', 0), + factory.numberInput('Last System Bottom', 'display.lastSystemPaddingBottom', 0), + factory.numberInput('Other Systems Bottom', 'display.systemPaddingBottom', 0), + factory.numberInput('System Label Left', 'display.systemLabelPaddingLeft', 0), + factory.numberInput('System Label Right', 'display.systemLabelPaddingRight', 0), + factory.numberInput('Accolade Bar Right', 'display.accoladeBarPaddingRight', 0), + factory.numberInput('Notation Staff Top', 'display.notationStaffPaddingTop', 0), + factory.numberInput('Notation Staff Bottom', 'display.notationStaffPaddingBottom', 0), + factory.numberInput('Effect Staff Top', 'display.effectStaffPaddingTop', 0), + factory.numberInput('Effect Staff Bottom', 'display.effectStaffPaddingBottom', 0), + factory.numberInput('First Staff Left', 'display.firstStaffPaddingLeft', 0), + factory.numberInput('Other Staves Left', 'display.staffPaddingLeft', 0) + ] + }, + { + title: 'Notation', + settings: [ + factory.enumDropDown('Fingering', 'notation.fingeringMode', alphaTab.FingeringMode), + // TODO: elements + factory.enumDropDown('Tab Rhythm Stems', 'notation.rhythmMode', alphaTab.TabRhythmMode), + factory.numberInput('⤷ Height', 'notation.rhythmHeight', 1), + factory.toggle('Small Grace Notes in Tabs', 'notation.smallGraceTabNotes'), + factory.toggle('Extend Bend Arrows on Tied Notes', 'notation.extendBendArrowsOnTiedNotes'), + factory.toggle('Extend Line Effects to Beat End', 'notation.extendLineEffectsToBeatEnd'), + factory.numberInput('Slur Height', 'notation.slurHeight', 1) + ] + }, + { + title: 'Player', + settings: [ + { + label: 'Volume', + ...factory.apiAccessors('masterVolume'), + control: { type: 'number-range', min: 0, max: 1, step: 0.1 } + }, + { + label: 'Metronome Volume', + ...factory.apiAccessors('metronomeVolume'), + control: { type: 'number-range', min: 0, max: 1, step: 0.1 } + }, + { + label: 'Count-In Volume', + ...factory.apiAccessors('countInVolume'), + control: { type: 'number-range', min: 0, max: 1, step: 0.1 } + }, + { + label: 'Playback Speed', + ...factory.apiAccessors('playbackSpeed'), + control: { type: 'number-range', min: 0.1, max: 3, step: 0.1 } + }, + { + label: 'Looping', + ...factory.apiAccessors('looping'), + control: { type: 'boolean-toggle' } + }, + factory.enumDropDown('Player Mode', 'player.playerMode', alphaTab.PlayerMode, noRerender), + factory.toggle('Show Cursors', 'player.enableCursor', noRerender), + factory.toggle('Animated Beat Cursor', 'player.enableAnimatedBeatCursor', noRerender), + factory.toggle('Highlight Notes', 'player.enableElementHighlighting', noRerender), + factory.toggle('Enable User Interaction', 'player.enableUserInteraction', noRerender), + factory.numberInput( + 'Scroll Offset X', + 'player.scrollOffsetX', + undefined, + undefined, + undefined, + noRerender + ), + factory.numberInput( + 'Scroll Offset Y', + 'player.scrollOffsetY', + undefined, + undefined, + undefined, + noRerender + ), + factory.enumDropDown('Scroll Mode', 'player.scrollMode', alphaTab.ScrollMode, noRerender), + factory.numberInput( + 'Song-Book Bend Duration', + 'player.songBookBendDuration', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput( + 'Song-Book Dip Duration', + 'player.songBookDipDuration', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput( + 'Vibrato Note Wide Length', + 'player.vibrato.noteWideLength', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput( + 'Vibrato Note Wide Amplitude', + 'player.vibrato.noteWideAmplitude', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput( + 'Vibrato Note Slight Length', + 'player.vibrato.noteSlightLength', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput( + 'Vibrato Note Slight Amplitude', + 'player.vibrato.noteSlightAmplitude', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput('Vibrato Beat Wide Length', 'player.vibrato.beatWideLength', 0.1, undefined, 0.1), + factory.numberInput( + 'Vibrato Beat Wide Amplitude', + 'player.vibrato.beatWideAmplitude', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput( + 'Vibrato Beat Slight Length', + 'player.vibrato.beatSlightLength', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput( + 'Vibrato Beat Slight Amplitude', + 'player.vibrato.beatSlightAmplitude', + 0.1, + undefined, + 0.1, + withMidiGenerate + ), + factory.numberInput('Slide Simple Pitch Offset', 'player.slide.simpleSlidePitchOffset', 1), + factory.numberInput( + 'Slide Simple Duration Ratio', + 'player.slide.simpleSlidePitchOffset', + 0.1, + 1, + 0.1, + withMidiGenerate + ), + factory.numberInput( + 'Slide Shift Duration Ratio', + 'player.slide.shiftSlideDurationRatio', + 0.1, + 1, + 0.1, + withMidiGenerate + ), + factory.toggle('Play Swing', 'player.playTripletFeel', withMidiGenerate) + ] + }, + { + title: 'Stylesheet', + settings: [ + { + label: 'Hide Dynamics', + ...factory.stylesheetAccessors('hideDynamics'), + control: { type: 'boolean-toggle' } + }, + { + label: 'Bracket Extend Mode', + ...factory.stylesheetAccessors('bracketExtendMode'), + control: { type: 'enum-dropdown', enumType: alphaTab.model.BracketExtendMode } + }, + { + label: 'System Sign Separator', + ...factory.stylesheetAccessors('useSystemSignSeparator'), + control: { type: 'boolean-toggle' } + }, + { + label: 'Show Guitar Tuning', + ...factory.stylesheetAccessors('globalDisplayTuning'), + control: { type: 'boolean-toggle' } + }, + { + label: 'Show Chord Diagrams', + ...factory.stylesheetAccessors('globalDisplayChordDiagramsOnTop'), + control: { type: 'boolean-toggle' } + }, + { + label: 'Single-Track Name Policy', + ...factory.stylesheetAccessors('singleTrackTrackNamePolicy'), + control: { type: 'enum-dropdown', enumType: alphaTab.model.TrackNamePolicy } + }, + { + label: 'Multi-Track Name Policy', + ...factory.stylesheetAccessors('multiTrackTrackNamePolicy'), + control: { type: 'enum-dropdown', enumType: alphaTab.model.TrackNamePolicy } + }, + { + label: 'First System Track Name Format', + ...factory.stylesheetAccessors('firstSystemTrackNameMode'), + control: { type: 'enum-dropdown', enumType: alphaTab.model.TrackNameMode } + }, + { + label: 'First System Track Name Orientation', + ...factory.stylesheetAccessors('firstSystemTrackNameOrientation'), + control: { type: 'enum-dropdown', enumType: alphaTab.model.TrackNameOrientation } + }, + { + label: 'Other Systems Track Name Format', + ...factory.stylesheetAccessors('otherSystemsTrackNameMode'), + control: { type: 'enum-dropdown', enumType: alphaTab.model.TrackNameMode } + }, + { + label: 'Other Systems Track Name Orientation', + ...factory.stylesheetAccessors('otherSystemsTrackNameOrientation'), + control: { type: 'enum-dropdown', enumType: alphaTab.model.TrackNameMode } + }, + { + label: 'Multi-Bar Rests (on Multi-Track)', + ...factory.stylesheetAccessors('otherSystemsTrackNameOrientation'), + control: { type: 'enum-dropdown', enumType: alphaTab.model.TrackNameMode } + }, + { + label: 'Multi-Bar Rests', + getValue(context: SettingsContextProps) { + return context.api.score!.stylesheet.multiTrackMultiBarRest; + }, + setValue(context: SettingsContextProps, value) { + context.api.score!.stylesheet.multiTrackMultiBarRest = value; + if (value) { + context.api.score!.stylesheet.perTrackMultiBarRest = new Set( + context.api.score!.tracks.map(t => t.index) + ); + } else { + context.api.score!.stylesheet.perTrackMultiBarRest = null; + } + context.onSettingsUpdated(); + context.api.render(); + }, + control: { type: 'boolean-toggle' } + } + ] + } + ]; +} + +const EnumDropDown: React.FC = ({ enumType, inputId, getValue, setValue }) => { + const settings = useContext(SettingsContext)!; + const enumValues: { value: number; label: string }[] = []; + for (const value of Object.values(enumType)) { + if (typeof value === 'string') { + const key = enumType[value] as number; + enumValues.push({ value: key, label: value }); + } + } + + return ( +
+ +
+ ); +}; + +const NumberRange: React.FC = ({ min, max, step, inputId, getValue, setValue }) => { + const settings = useContext(SettingsContext)!; + const value = getValue(settings); + return ( +
+ setValue(settings, (e.target as HTMLInputElement).valueAsNumber)} + onClick={e => { + e.preventDefault(); + e.stopPropagation(); + }} + /> +
+ ); +}; + +const NumberInput: React.FC = ({ min, max, step, inputId, getValue, setValue }) => { + const settings = useContext(SettingsContext)!; + return ( + setValue(settings, (e.target as HTMLInputElement).valueAsNumber)} + onClick={e => { + e.preventDefault(); + e.stopPropagation(); + }} + /> + ); +}; + +const ColorPicker: React.FC = ({ inputId, getValue, setValue }) => { + const [isOpen, setOpen] = useState(false); + const settings = useContext(SettingsContext)!; + const [color, setColor] = useState(getValue(settings) as alphaTab.model.Color); + + const debouncedColor = useDebounce(color, 300); + + function dismissDropdown(e: MouseEvent) { + const isInDropDown = (e.target as HTMLElement).closest('.dropdown__menu'); + if (!isInDropDown) { + setOpen(false); + } + } + + useEffect(() => { + setValue(settings, color); + }, [debouncedColor]); + + useEffect(() => { + document.addEventListener('click', dismissDropdown); + return () => { + document.removeEventListener('click', dismissDropdown); + }; + }, []); + + return ( +
+
+ +
    +
  • + { + setColor( + new alphaTab.model.Color( + color.rgba.r, + color.rgba.g, + color.rgba.b, + color.rgba.a * 255 + ) + ); + }} + /> +
  • +
+
+
+ ); +}; + +const FontPicker: React.FC = ({ inputId, getValue, setValue }) => { + const settings = useContext(SettingsContext)!; + return ( + { + const c = alphaTab.model.Font.fromJson((e.target as HTMLInputElement).value); + if (c) { + setValue(settings, c); + } + }} + /> + ); +}; + +const BooleanToggle: React.FC = ({ inputId, getValue, setValue }) => { + const settings = useContext(SettingsContext)!; + return ( + <> + + + ); +}; + +const ButtonGroupButton: React.FC = ({ label, value, getValue, setValue }) => { + const settings = useContext(SettingsContext)!; + return ( + + ); +}; + +const ButtonGroup: React.FC = ({ inputId, buttons, getValue, setValue }) => { + return ( +
+ {buttons.map(b => ( + + ))} +
+ ); +}; + +const Setting: React.FC = ({ label, control, getValue, setValue }) => { + const id = useId(); + const renderControl = () => { + switch (control.type) { + case 'button-group': + return ; + case 'enum-dropdown': + return ; + case 'number-range': + return ; + case 'number-input': + return ; + case 'boolean-toggle': + return ; + case 'color-picker': + return ; + case 'font-picker': + return ; + } + }; + + return ( +
+ +
{renderControl()}
+
+ ); +}; + +const SettingsGroup: React.FC = ({ title, settings }) => { + return ( +
+

{title}

+ {settings.map(s => ( + + ))} +
+ ); +}; + +export interface PlaygroundSettingsProps { + api: alphaTab.AlphaTabApi; + isOpen: boolean; + onClose: () => void; +} + +export const PlaygroundSettings: React.FC = ({ api, isOpen: areSettingsOpen, onClose }) => { + const [settingsVersion, setSettingsVersion] = useState(0); + const settingsGroups = buildSettingsGroups(); + + return ( + v + 1); + } + }}> +
+ + + {settingsGroups.map(g => ( + + ))} + +
+

Tools

+ + + + +
+
+
+ ); +}; diff --git a/src/components/AlphaTabPlayground/styles.module.scss b/src/components/AlphaTabPlayground/styles.module.scss new file mode 100644 index 0000000..5883379 --- /dev/null +++ b/src/components/AlphaTabPlayground/styles.module.scss @@ -0,0 +1,403 @@ +/* Styles for control */ +.at-wrap { + position: relative; + width: 100%; + margin: 0 auto; + border-top: 1px solid rgba(0, 0, 0, 0.12); + background: #fff; + display: flex; + flex-direction: column; + flex-grow: 1; +} + +.at-content { + flex: 1 1 auto; + overflow: hidden; + position: relative; +} + + +.at-viewport { + overflow-y: auto; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding-right: 0; +} + +.at-overlay { + position: absolute; + display: flex; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1010; + backdrop-filter: blur(3px); + background: rgba(0, 0, 0, 0.5); + justify-content: center; + align-items: flex-start; +} + +.at-overlay-content { + margin-top: 20px; + background: #fff; + box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3); + padding: 10px; +} + +.at-overlay-content>.spinner-border { + color: #4972a1; +} + + +.at-footer { + flex: 0 0 auto; + background: #436d9d; +} + +.at-footer { + color: #fff; +} + + +.at-player { + display: flex; + justify-content: space-between; +} + +.at-player>div { + display: flex; + justify-content: flex-start; + align-content: center; + align-items: center; +} + +.at-player-left, +.at-player-right { + >* { + margin-right: 4px; + } + + >button { + cursor: pointer; + color: #fff; + display: flex; + text-align: center; + box-sizing: content-box; + align-items: center; + justify-content: center; + background: none; + border: 0; + padding: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + padding: 0.8rem; + gap: 0.2rem; + font-size: initial; + + &:hover, + &.active { + background: #5588c7; + } + + &.disabled:hover, + &.disabled:active { + color: rgba(0, 0, 0, 0.3); + } + + i { + vertical-align: top; + font-size: 16px; + } + } + + > :global(.dropdown) { + >span { + height: 40px; + display: flex; + align-items: center; + justify-content: center; + padding: 0 0.5rem; + } + + svg { + margin-right: 0.25rem; + } + + &:hover { + background: #5588c7; + } + + > :global(.dropdown__menu) { + color: initial; + top: auto; + z-index: 1300; + bottom: calc(100% - var(--ifm-navbar-item-padding-vertical) - 1rem); + } + } +} + +.at-time-position { + font-weight: bold; +} + +.at-time-slider { + height: 4px; + background: #d9d9d9; +} + +.at-time-slider-value { + height: 4px; + background: #6ba5e4; + width: 0; +} + +.at-speed-value { + font-size: 0.8rem; + margin: 0 0.5em; +} + +.progress { + position: relative; + height: 40px; + padding-top: 4px; +} + +.progress .progress-value { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-weight: bold; + position: absolute; + top: 0; + left: 0; + font-size: 8px; +} + +.at-settings { + position: absolute; + top: 1rem; + right: 1rem; + width: 25vw; + bottom: calc(1rem + 40px); + background: #f7f7f7; + border: 1px solid rgba(0, 0, 0, 0.12); + box-shadow: var(--ifm-navbar-shadow); + overflow-y: auto; + overflow-x: visible; + opacity: 0; + transition: all 0.2s ease-in-out; + transform: translateX(50px); + font-size: 80%; + border-radius: var(--ifm-alert-border-radius); + z-index: 0; + + &.open { + z-index: 1001; + opacity: 1; + transform: translateX(0); + } + + + &>.at-settings-group { + border-bottom: 2px dashed #00000033; + } + +} + +.at-settings-close { + position: absolute; + top: 0.5rem; + right: 0.5rem; + padding: 0.4rem 0.5rem; + display: flex; + justify-content: center; + align-items: center; +} + + +.at-settings>* { + padding: 0.5rem; +} + +.at-settings { + &>.track-item:nth-child(even) { + background: #ebedf0; + } +} + +.track-item { + &>.settings-item:not(.track-item-info) { + padding-left: 0.5rem; + } +} + +.track-item-info { + &>.settings-item-label { + font-weight: bold; + } +} + +.settings-item { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 0.2rem; +} + +.settings-item-label { + display: flex; + align-items: center; + cursor: pointer; + font-size: 90%; + + & label { + cursor: pointer; + } +} + +.settings-item-control { + display: flex; + align-items: center; + gap: 2px; + + & button { + display: flex; + justify-content: center; + align-items: center; + } + + & button.icon-button { + width: 1.5rem; + height: 1.5rem; + padding: 0; + } + + & input[type=text], + & input[type=number], + & select { + appearance: none; + background: var(--ifm-navbar-search-input-background-color) no-repeat 0.75rem center / 1rem 1rem; + border: none; + border-radius: var(--ifm-global-radius); + color: var(--ifm-navbar-search-input-color); + cursor: text; + display: inline-block; + padding: 0.4rem; + width: 8rem; + text-align: center; + } + + & .select { + cursor: initial; + display: grid; + align-items: center; + + &:after { + content: ""; + width: 0.8em; + height: 0.5em; + background-color: #777; + clip-path: polygon(100% 0%, 0 0%, 50% 100%); + grid-area: select; + justify-self: end; + margin-right: 0.8rem; + } + + & select { + cursor: initial; + grid-area: select; + } + } +} + +.track-item-more { + padding: 0.3rem; +} + +.at-settings h4 { + margin-top: 0.2rem; + margin-bottom: 0.2rem; +} + +.button-group { + display: flex; + align-items: center; + gap: 0; + + &>*:not(:first-child):not(:last-child) { + border-radius: 0; + } + + &>*:not(:last-child) { + border-right: 1px solid rgba(255, 255, 255, 0.5); + } + + &>*:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + &>*:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } +} + +.toggle { + display: grid; + width: 2rem; + height: 1.2rem; + grid-template-columns: 1fr; + grid-template-rows: 1fr; +} + +.toggle>* { + grid-area: 1 / 1 / 2 / 2; +} + +.toggle>input { + opacity: 0; + width: 0; + height: 0; +} + +.toggle>span { + cursor: pointer; + background-color: #ccc; + border-radius: 1rem; + transition: background-color 0.3s; + position: relative; +} + +.toggle>span::before { + content: ""; + position: absolute; + top: 0.2rem; + bottom: 0.2rem; + aspect-ratio: 1 / 1; + left: 0.2rem; + background-color: white; + border-radius: 50%; + transition: transform 0.3s; +} + +.toggle input:checked+span { + background-color: var(--ifm-color-primary); +} + +.toggle input:checked+span::before { + transform: translateX(0.8rem); +} + + +.color-picker { + & :global(.dropdown) > button { + font-weight: normal; + } +} \ No newline at end of file diff --git a/src/components/AlphaTabPlayground/track-item.tsx b/src/components/AlphaTabPlayground/track-item.tsx new file mode 100644 index 0000000..d9d79ef --- /dev/null +++ b/src/components/AlphaTabPlayground/track-item.tsx @@ -0,0 +1,252 @@ +import type * as alphaTab from '@coderline/alphatab'; +import type React from 'react'; +import { useState } from 'react'; +import styles from './styles.module.scss'; +import { useEffectNoMount } from '@site/src/hooks'; + +type StaffOptions = { + showSlash: boolean; + showNumbered: boolean; + showTablature: boolean; + showStandardNotation: boolean; +}; + +export interface StaffItemProps { + api: alphaTab.AlphaTabApi; + staff: alphaTab.model.Staff; +} + +export const StaffItem: React.FC = ({ api, staff }) => { + const [staffOptions, _setStaffOptions] = useState({ + showNumbered: staff.showNumbered, + showSlash: staff.showSlash, + showTablature: staff.showTablature, + showStandardNotation: staff.showStandardNotation + }); + + useEffectNoMount(() => { + for (const key in staffOptions) { + staff[key] = staffOptions[key]; + } + api.render(); + }, [api, staff, staffOptions]); + + const setStaffOptions = (updater: (current: StaffOptions) => StaffOptions) => { + _setStaffOptions(value => { + const newValue = updater(value); + if (!Array.from(Object.keys(newValue)).some(k => newValue[k])) { + return value; + } + return newValue; + }); + }; + + return ( +
+
Staff {staff.index + 1}
+
+ + + + +
+
+ ); +}; + +export interface TrackItemProps { + api: alphaTab.AlphaTabApi; + track: alphaTab.model.Track; + isSelected: boolean; +} + +export const TrackItem: React.FC = ({ api, track, isSelected }) => { + const [isMute, setMute] = useState(track.playbackInfo.isMute); + useEffectNoMount(() => { + track.playbackInfo.isMute = isMute; + api.changeTrackMute([track], isMute); + }, [api, track, isMute]); + + const [isSolo, setSolo] = useState(track.playbackInfo.isSolo); + useEffectNoMount(() => { + track.playbackInfo.isSolo = isSolo; + api.changeTrackSolo([track], isSolo); + }, [api, track, isSolo]); + + const [volume, setVolume] = useState(track.playbackInfo.volume); + useEffectNoMount(() => { + api.changeTrackVolume([track], volume / track.playbackInfo.volume); + }, [api, track, volume]); + + const onTrackSelect = (selected: boolean) => { + let newTracks: alphaTab.model.Track[]; + if (selected) { + newTracks = [...api.tracks, track]; + } else { + newTracks = api.tracks.filter(t => t !== track); + if (newTracks.length === 0) { + return; + } + } + + newTracks.sort((a, b) => a.index - b.index); + api.renderTracks(newTracks); + }; + + const [transposeAudio, setTransposeAudio] = useState(0); + const [transposeFull, setTransposeFull] = useState(0); + + useEffectNoMount(() => { + api.changeTrackTranspositionPitch([track], transposeAudio); + }, [api, track, transposeAudio]); + + useEffectNoMount(() => { + const pitches = api.settings.notation.transpositionPitches; + while (pitches.length < track.index + 1) { + pitches.push(0); + } + pitches[track.index] = transposeFull; + api.updateSettings(); + api.render(); + }, [api, track, transposeFull]); + + return ( +
+
+
+ onTrackSelect(e.target.checked)} + /> + +
+
+ + +
+
+ +
+
Volume
+
+ setVolume((e.target as HTMLInputElement).valueAsNumber)} + onClick={e => { + e.preventDefault(); + e.stopPropagation(); + }} + /> +
+
+ +
+
+ Transpose Full +
+
+ setTransposeFull((e.target as HTMLInputElement).valueAsNumber)} + onClick={e => { + e.preventDefault(); + e.stopPropagation(); + }} + /> +
+
+ +
+
+ Transpose Audio +
+
+ setTransposeAudio((e.target as HTMLInputElement).valueAsNumber)} + onClick={e => { + e.preventDefault(); + e.stopPropagation(); + }} + /> +
+
+ + {track.staves.map(s => ( + + ))} +
+ ); +}; diff --git a/src/components/AlphaTabPlayground/track-selector.tsx b/src/components/AlphaTabPlayground/track-selector.tsx new file mode 100644 index 0000000..1b73b6f --- /dev/null +++ b/src/components/AlphaTabPlayground/track-selector.tsx @@ -0,0 +1,57 @@ +import type * as alphaTab from '@coderline/alphatab'; +import type React from 'react'; +import styles from './styles.module.scss'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import * as solid from '@fortawesome/free-solid-svg-icons'; +import { useEffect, useState } from 'react'; +import { useAlphaTabEvent } from '@site/src/hooks'; +import { TrackItem } from './track-item'; + +export interface PlaygroundTrackSelectorProps { + api: alphaTab.AlphaTabApi; + isOpen: boolean; + onClose: () => void; +} + +export const PlaygroundTrackSelector: React.FC = ({ + api, + isOpen: areSettingsOpen, + onClose +}) => { + const [score, setScore] = useState(api.score); + const [selectedTracks, setSelectedTracks] = useState(new Map()); + + useAlphaTabEvent(api, 'renderStarted', isResize => { + const selectedTracks = new Map(); + for (const t of api!.tracks) { + selectedTracks.set(t.index, t); + } + + setSelectedTracks(selectedTracks); + }); + + useAlphaTabEvent(api, 'scoreLoaded', score => { + setScore(score); + }); + + useEffect(() => { + setScore(api.score); + }, [api.score]); + + return ( +
+ + +

Tracks

+ + {score?.tracks.map(t => ( + + ))} +
+ ); +}; diff --git a/src/css/custom.scss b/src/css/custom.scss index 8ca8112..dc960f7 100644 --- a/src/css/custom.scss +++ b/src/css/custom.scss @@ -24,6 +24,9 @@ @import "@fontsource/noto-serif/500-italic.css"; @import "@fontsource/noto-serif/700-italic.css"; +@import 'react-tooltip/dist/react-tooltip.css'; + + /* You can override the default Infima variables here. */ :root { --ifm-color-primary: #426d9d; @@ -69,6 +72,7 @@ a { img.thumbnail { max-width: 400px; transition: transform 0.2s; + &:hover { transform: scale(1.5); } @@ -110,8 +114,7 @@ li.types-item .menu__link { width: 24px; height: 24px; display: flex; - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat; margin-right: 0.25rem; } @@ -170,9 +173,80 @@ li.types-item .menu__link { text-decoration: underline dotted; } - + & a:hover { text-decoration: underline; } } } + + +body.playground { + --doc-sidebar-hidden-width: 0px; + + .theme-doc-breadcrumbs { + display: none; + } + + footer.footer { + display: none; + } + + .theme-doc-markdown header h1 { + display: none; + } + + main>.container { + max-width: initial !important; + height: calc(100vh - var(--ifm-navbar-height)); + overflow: hidden; + display: flex; + padding: 0 !important; + + + &>.row { + width: 100%; + margin: 0; + + &>.col { + max-width: initial !important; + display: flex; + flex-direction: column; + padding: 0; + + &>div:last-child { + flex-grow: 1; + display: flex; + flex-direction: column; + + & article { + display: flex; + flex-direction: column; + flex-grow: 1; + + & .theme-doc-markdown { + display: flex; + flex-direction: column; + flex-grow: 1; + + & p { + margin: 0; + } + } + } + + & nav.pagination-nav { + display: none; + } + + & .theme-doc-footer { + display: none; + } + } + } + } + + + } + +} \ No newline at end of file diff --git a/src/hooks.ts b/src/hooks.ts index fadf4f6..77ab6a0 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -1,13 +1,14 @@ -import React, { useEffect, useState } from "react"; +import React, { DependencyList, EffectCallback, useEffect, useRef, useState } from "react"; import * as alphaTab from "@coderline/alphatab"; import environment from "./environment"; +import { dependencies } from "webpack"; export function useAlphaTab( settingsInit: (settings: alphaTab.Settings) => void, ): [ - api: alphaTab.AlphaTabApi | undefined, - elementRef: React.RefObject -] { + api: alphaTab.AlphaTabApi | undefined, + elementRef: React.RefObject + ] { const [api, setApi] = useState(); const element = React.createRef(); @@ -33,17 +34,17 @@ export function useAlphaTab( [] ); - useEffect(() => {}); + useEffect(() => { }); return [api, element]; } export type AlphaTabApiEvents = { [K in keyof alphaTab.AlphaTabApi as alphaTab.AlphaTabApi[K] extends - | alphaTab.IEventEmitter - | alphaTab.IEventEmitterOfT - ? K - : never]: alphaTab.AlphaTabApi[K]; + | alphaTab.IEventEmitter + | alphaTab.IEventEmitterOfT + ? K + : never]: alphaTab.AlphaTabApi[K]; }; export function useAlphaTabEvent< @@ -57,5 +58,22 @@ export function useAlphaTabEvent< api[event].off(handler as any); }; } - }, [api]); + }, [api, event, handler]); } + +export const useIsMount = () => { + const isMountRef = useRef(true); + useEffect(() => { + isMountRef.current = false; + }, []); + return isMountRef.current; +}; + +export const useEffectNoMount = (effect: EffectCallback, deps?: DependencyList) => { + const isMount = useIsMount(); + useEffect(() => { + if (!isMount) { + effect(); + } + }, deps) +}; \ No newline at end of file From 7353b143dfc416f55d9bb8262b5a03d16f1f093b Mon Sep 17 00:00:00 2001 From: Daniel Kuschny Date: Thu, 22 May 2025 06:19:05 +0200 Subject: [PATCH 02/17] feat: Base implementation for media sync editor (#132) --- .vscode/settings.json | 4 +- docs/playground/playground.mdx | 4 +- package-lock.json | 49 +- package.json | 4 +- src/components/AlphaTabPlayground/index.tsx | 23 +- .../AlphaTabPlayground/media-sync-editor.tsx | 921 ++++++++++++++++++ .../player-controls-group.tsx | 28 +- .../AlphaTabPlayground/styles.module.scss | 139 ++- src/hooks.ts | 7 +- static/files/canon-full.gp | Bin 0 -> 118158 bytes 10 files changed, 1154 insertions(+), 25 deletions(-) create mode 100644 src/components/AlphaTabPlayground/media-sync-editor.tsx create mode 100644 static/files/canon-full.gp diff --git a/.vscode/settings.json b/.vscode/settings.json index f85eede..b34a6f3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -25,5 +25,7 @@ "titleBar.inactiveBackground": "#21573299", "titleBar.inactiveForeground": "#e7e7e799" }, - "peacock.color": "#215732" + "peacock.color": "#215732", + "editor.snippetSuggestions": "bottom", + "emmet.showSuggestionsAsSnippets": true, } \ No newline at end of file diff --git a/docs/playground/playground.mdx b/docs/playground/playground.mdx index 53e29ba..78f9e98 100644 --- a/docs/playground/playground.mdx +++ b/docs/playground/playground.mdx @@ -11,8 +11,8 @@ import { AlphaTabPlayground } from "@site/src/components/AlphaTabPlayground"; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e459c19..8bc166e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,16 +8,18 @@ "name": "alphatab-website", "version": "0.0.0", "dependencies": { - "@coderline/alphatab": "^1.5.0-alpha.1394", + "@coderline/alphatab": "^1.6.0-alpha.1416", "@docusaurus/core": "^3.7.0", "@docusaurus/preset-classic": "^3.7.0", "@docusaurus/theme-mermaid": "^3.7.0", "@fontsource/noto-sans": "^5.1.1", "@fontsource/noto-serif": "^5.1.1", + "@fortawesome/free-brands-svg-icons": "^6.7.2", "@fortawesome/free-regular-svg-icons": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", "@mdx-js/react": "^3.1.0", + "@react-hook/resize-observer": "^2.0.2", "@uidotdev/usehooks": "^2.4.1", "@uiw/react-color": "^2.5.5", "@uiw/react-color-chrome": "^2.5.5", @@ -1917,9 +1919,9 @@ "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==" }, "node_modules/@coderline/alphatab": { - "version": "1.5.0-alpha.1394", - "resolved": "https://registry.npmjs.org/@coderline/alphatab/-/alphatab-1.5.0-alpha.1394.tgz", - "integrity": "sha512-R4Dnvs0xvgCZEPc/jsHZc9VaGlGx7OWFghJBeLlwes6j1Sh55dpnV+kiDKZP+/AlUplQhYfzNqKOIWSNyAAuJw==", + "version": "1.6.0-alpha.1416", + "resolved": "https://registry.npmjs.org/@coderline/alphatab/-/alphatab-1.6.0-alpha.1416.tgz", + "integrity": "sha512-bIACxHyaTAnxtzz5I6Kr3a9LR6VLpvhm/o8GiZZeDc6wVtLEz+0a9sKCRBepSfz0+HVi09YzDMvhL9vEQrEbcw==", "engines": { "node": ">=6.0.0" } @@ -4232,6 +4234,17 @@ "node": ">=6" } }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.7.2.tgz", + "integrity": "sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@fortawesome/free-regular-svg-icons": { "version": "6.7.2", "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.7.2.tgz", @@ -4823,6 +4836,34 @@ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" }, + "node_modules/@react-hook/latest": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz", + "integrity": "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-hook/passive-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz", + "integrity": "sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-hook/resize-observer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@react-hook/resize-observer/-/resize-observer-2.0.2.tgz", + "integrity": "sha512-tzKKzxNpfE5TWmxuv+5Ae3IF58n0FQgQaWJmcbYkjXTRZATXxClnTprQ2uuYygYTpu1pqbBskpwMpj6jpT1djA==", + "dependencies": { + "@react-hook/latest": "^1.0.2", + "@react-hook/passive-layout-effect": "^1.2.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", diff --git a/package.json b/package.json index 985621b..ea739f3 100644 --- a/package.json +++ b/package.json @@ -16,16 +16,18 @@ "generate-alphatabdoc": "tsx scripts/generate-alphatabdoc.mts" }, "dependencies": { - "@coderline/alphatab": "^1.5.0-alpha.1394", + "@coderline/alphatab": "^1.6.0-alpha.1416", "@docusaurus/core": "^3.7.0", "@docusaurus/preset-classic": "^3.7.0", "@docusaurus/theme-mermaid": "^3.7.0", "@fontsource/noto-sans": "^5.1.1", "@fontsource/noto-serif": "^5.1.1", + "@fortawesome/free-brands-svg-icons": "^6.7.2", "@fortawesome/free-regular-svg-icons": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", "@mdx-js/react": "^3.1.0", + "@react-hook/resize-observer": "^2.0.2", "@uidotdev/usehooks": "^2.4.1", "@uiw/react-color": "^2.5.5", "@uiw/react-color-chrome": "^2.5.5", diff --git a/src/components/AlphaTabPlayground/index.tsx b/src/components/AlphaTabPlayground/index.tsx index 581738a..ecbff9a 100644 --- a/src/components/AlphaTabPlayground/index.tsx +++ b/src/components/AlphaTabPlayground/index.tsx @@ -1,16 +1,17 @@ 'use client'; -import type * as alphaTab from '@coderline/alphatab'; -import React, { useEffect, useState } from 'react'; +import * as alphaTab from '@coderline/alphatab'; +import React, { useState } from 'react'; import { useAlphaTab, useAlphaTabEvent } from '@site/src/hooks'; import styles from './styles.module.scss'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import * as solid from '@fortawesome/free-solid-svg-icons'; import { openFile } from '@site/src/utils'; -import { PlayerControlsGroup, SidePanel } from './player-controls-group'; +import { BottomPanel, PlayerControlsGroup, SidePanel } from './player-controls-group'; import { PlaygroundSettings } from './playground-settings'; import { Tooltip } from 'react-tooltip'; import { PlaygroundTrackSelector } from './track-selector'; +import { MediaSyncEditor } from './media-sync-editor'; interface AlphaTabPlaygroundProps { settings?: alphaTab.json.SettingsJson; @@ -20,12 +21,13 @@ export const AlphaTabPlayground: React.FC = ({ settings const viewPortRef = React.createRef(); const [isLoading, setLoading] = useState(true); const [sidePanel, setSidePanel] = useState(SidePanel.None); + const [bottomPanel, setBottomPanel] = useState(BottomPanel.None); const [api, element] = useAlphaTab(s => { s.core.engine = 'svg'; s.player.scrollElement = viewPortRef.current!; s.player.scrollOffsetY = -10; - s.player.enablePlayer = true; + s.player.playerMode = alphaTab.PlayerMode.EnabledAutomatic; if (settings) { s.fillFromJson(settings); } @@ -88,7 +90,18 @@ export const AlphaTabPlayground: React.FC = ({ settings
- {api && } + {api && api?.score && bottomPanel === BottomPanel.MediaSyncEditor && ( + + )} + {api && ( + + )}
diff --git a/src/components/AlphaTabPlayground/media-sync-editor.tsx b/src/components/AlphaTabPlayground/media-sync-editor.tsx new file mode 100644 index 0000000..cb4f68c --- /dev/null +++ b/src/components/AlphaTabPlayground/media-sync-editor.tsx @@ -0,0 +1,921 @@ +'use client'; + +import * as alphaTab from '@coderline/alphatab'; +import type React from 'react'; +import styles from './styles.module.scss'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import * as solid from '@fortawesome/free-solid-svg-icons'; +import * as brands from '@fortawesome/free-brands-svg-icons'; +import { useCallback, useEffect, useRef, useState } from 'react'; +import useResizeObserver from '@react-hook/resize-observer'; +import { useAlphaTabEvent } from '@site/src/hooks'; + +export type MediaSyncEditorProps = { + api: alphaTab.AlphaTabApi; + score: alphaTab.model.Score; +}; + +type MasterBarMarker = { + label: string; + syncTime: number; + + synthTime: number; + synthBpm: number; + synthTickDuration: number; + + masterBarIndex: number; + occurence: number; + modifiedTempo?: number; + + isStartMarker: boolean; + isEndMarker: boolean; +}; + +type SyncPointInfo = { + endTick: number; + endTime: number; + sampleRate: number; + leftSamples: Float32Array; + rightSamples: Float32Array; + masterBarMarkers: MasterBarMarker[]; +}; + +// TODO: handle intermediate tempo changes and sync points + +function ticksToMillis(tick: number, bpm: number): number { + return (tick * 60000.0) / (bpm * 960); +} + +async function buildSyncPointInfo(api: alphaTab.AlphaTabApi, createInitialSyncPoints: boolean): Promise { + const tickCache = api.tickCache; + if (!tickCache || !api.score?.backingTrack?.rawAudioFile) { + return { + endTick: 0, + endTime: 0, + sampleRate: 0, + leftSamples: new Float32Array(0), + rightSamples: new Float32Array(0), + masterBarMarkers: [] + }; + } + + const audioContext = new AudioContext(); + const buffer = await audioContext.decodeAudioData(api.score!.backingTrack!.rawAudioFile.buffer.slice(0)); + const rawSamples: Float32Array[] = + buffer.numberOfChannels === 1 + ? [buffer.getChannelData(0), buffer.getChannelData(0)] + : [buffer.getChannelData(0), buffer.getChannelData(1)]; + + const sampleRate = audioContext.sampleRate; + const endTime = rawSamples[0].length / sampleRate; + + await audioContext.close(); + + return { + endTick: api.tickCache.masterBars.at(-1)!.end, + masterBarMarkers: buildMasterBarMarkers(api, createInitialSyncPoints), + sampleRate, + leftSamples: rawSamples[0], + rightSamples: rawSamples[1], + endTime + }; +} +function buildMasterBarMarkers(api: alphaTab.AlphaTabApi, createInitialSyncPoints: boolean): MasterBarMarker[] { + const markers: MasterBarMarker[] = []; + + if (createInitialSyncPoints) { + // create initial sync points for all tempo changes to ensure the song and the + // backing track roughly align + let synthBpm = 0; + let synthTimePosition = 0; + let synthTickPosition = 0; + + const occurences = new Map(); + for (const masterBar of api.tickCache!.masterBars) { + const occurence = occurences.get(masterBar.masterBar.index) ?? 0; + occurences.set(masterBar.masterBar.index, occurence + 1); + + for (const changes of masterBar.tempoChanges) { + const absoluteTick = changes.tick; + const tickOffset = absoluteTick - synthTickPosition; + if (tickOffset > 0) { + const timeOffset = ticksToMillis(tickOffset, synthBpm); + + synthTickPosition = absoluteTick; + synthTimePosition += timeOffset; + } + + if (changes.tempo !== synthBpm && changes.tick === masterBar.start) { + const syncPoint = new alphaTab.model.Automation(); + syncPoint.ratioPosition = 0; + syncPoint.type = alphaTab.model.AutomationType.SyncPoint; + syncPoint.syncPointValue = new alphaTab.model.SyncPointData(); + syncPoint.syncPointValue.barOccurence = occurence; + syncPoint.syncPointValue.millisecondOffset = synthTimePosition; + syncPoint.syncPointValue.modifiedTempo = changes.tempo; + masterBar.masterBar.addSyncPoint(syncPoint); + + synthBpm = changes.tempo; + } + } + + const tickOffset = masterBar.end - synthTickPosition; + const timeOffset = ticksToMillis(tickOffset, synthBpm); + synthTickPosition += tickOffset; + synthTimePosition += timeOffset; + } + } + + const occurences = new Map(); + let syncBpm = api.score!.tempo; + let syncLastTick = 0; + let syncLastMillisecondOffset = 0; + + let synthBpm = api.score!.tempo; + let synthTimePosition = 0; + let synthTickPosition = 0; + + for (const masterBar of api.tickCache!.masterBars) { + const occurence = occurences.get(masterBar.masterBar.index) ?? 1; + occurences.set(masterBar.masterBar.index, occurence + 1); + + const occurenceLabel = occurence > 1 ? ` (${occurence})` : ''; + const startSyncPoint = masterBar.masterBar.syncPoints?.find(m => m.ratioPosition === 0); + + let syncedStartTime: number; + if (startSyncPoint) { + syncedStartTime = startSyncPoint.syncPointValue!.millisecondOffset; + syncBpm = startSyncPoint.syncPointValue!.modifiedTempo; + syncLastMillisecondOffset = syncedStartTime; + syncLastTick = masterBar.start; + } else { + const tickOffset = masterBar.start - syncLastTick; + syncedStartTime = syncLastMillisecondOffset + ticksToMillis(tickOffset, syncBpm); + } + + const isStartMarker = masterBar.masterBar.index === 0 && occurence === 1; + const newMarker: MasterBarMarker = { + label: isStartMarker ? 'Start' : `${masterBar.masterBar.index + 1}${occurenceLabel}`, + masterBarIndex: masterBar.masterBar.index, + synthTickDuration: masterBar.end - masterBar.start, + occurence: occurence, + syncTime: syncedStartTime / 1000, + synthTime: synthTimePosition / 1000, + synthBpm: masterBar.tempoChanges.length > 0 ? masterBar.tempoChanges[0].tempo : synthBpm, + modifiedTempo: startSyncPoint?.syncPointValue?.modifiedTempo, + isStartMarker, + isEndMarker: false + }; + markers.push(newMarker); + + for (const changes of masterBar.tempoChanges) { + const absoluteTick = changes.tick; + const tickOffset = absoluteTick - synthTickPosition; + if (tickOffset > 0) { + const timeOffset = ticksToMillis(tickOffset, synthBpm); + + synthTickPosition = absoluteTick; + synthTimePosition += timeOffset; + } + + synthBpm = changes.tempo; + } + + const tickOffset = masterBar.end - synthTickPosition; + const timeOffset = ticksToMillis(tickOffset, synthBpm); + synthTickPosition += tickOffset; + synthTimePosition += timeOffset; + } + + const lastMasterBar = api.tickCache!.masterBars.at(-1)!; + + const endSyncPoint = lastMasterBar.masterBar.syncPoints?.find(m => m.ratioPosition === 1); + + const tickOffset = lastMasterBar.end - syncLastTick; + const endSyncPointTime = endSyncPoint + ? endSyncPoint.syncPointValue!.millisecondOffset + : syncLastMillisecondOffset + ticksToMillis(tickOffset, syncBpm); + + markers.push({ + label: 'End', + masterBarIndex: lastMasterBar.masterBar.index, + synthTickDuration: 0, + occurence: occurences.get(lastMasterBar.masterBar.index)!, + syncTime: endSyncPointTime / 1000, + synthTime: synthTimePosition / 1000, + synthBpm, + modifiedTempo: endSyncPoint?.syncPointValue?.modifiedTempo ?? synthBpm, + isStartMarker: false, + isEndMarker: true + }); + + return markers; +} + +const pixelPerSeconds = 100; +const leftPadding = 15; +const barNumberHeight = 20; +const arrowHeight = 20; +const timeAxisHeight = 20; +const timeAxiSubSecondTickHeight = 5; +const barWidth = 1; +const timeAxisLineColor = '#A5A5A5'; +const waveFormColor = '#436d9d99'; +const font = '12px "Noto Sans"'; +const dragLimit = 10; +const dragThreshold = 5; +const scrollThresholdPercent = 0.2; + +function timePositionToX(timePosition: number, zoom: number): number { + const zoomedPixelPerSecond = pixelPerSeconds * zoom; + return timePosition * zoomedPixelPerSecond + leftPadding; +} + +type MarkerDragInfo = { + startX: number; + startY: number; + endX: number; +}; + +function computeMarkerInlineStyle( + m: MasterBarMarker, + zoom: number, + draggingMarker: MasterBarMarker | null, + draggingMarkerInfo: MarkerDragInfo | null +): React.CSSProperties { + let left = timePositionToX(m.syncTime, zoom); + + if (m === draggingMarker && draggingMarkerInfo) { + const deltaX = draggingMarkerInfo.endX - draggingMarkerInfo.startX; + left += deltaX; + } + + return { + left: `${left}px` + }; +} + +function updateSyncPointsAfterModification(modifiedIndex: number, s: SyncPointInfo, isDelete: boolean) { + // find previous and next sync point (or start/end of the song) + let startIndexForUpdate = Math.max(0, modifiedIndex - 1); + while (startIndexForUpdate > 0 && !s.masterBarMarkers[startIndexForUpdate].modifiedTempo) { + startIndexForUpdate--; + } + + let nextIndexForUpdate = Math.min(s.masterBarMarkers.length - 1, modifiedIndex + 1); + while ( + nextIndexForUpdate < s.masterBarMarkers.length - 1 && + !s.masterBarMarkers[nextIndexForUpdate].modifiedTempo + ) { + nextIndexForUpdate++; + } + + const modifiedMarker = s.masterBarMarkers[modifiedIndex]; + + // update from previous to current + if (startIndexForUpdate < modifiedIndex) { + const previousMarker = { ...s.masterBarMarkers[startIndexForUpdate] }; + s.masterBarMarkers[startIndexForUpdate] = previousMarker; + const synthDuration = modifiedMarker.synthTime - previousMarker.synthTime; + const syncedDuration = modifiedMarker.syncTime - previousMarker.syncTime; + const newBpmBefore = (synthDuration / syncedDuration) * previousMarker.synthBpm; + previousMarker.modifiedTempo = newBpmBefore; + + let syncedTimePosition = previousMarker.syncTime; + for (let i = startIndexForUpdate; i < modifiedIndex; i++) { + const marker = { ...s.masterBarMarkers[i] }; + s.masterBarMarkers[i] = marker; + + marker.syncTime = syncedTimePosition; + syncedTimePosition += ticksToMillis(marker.synthTickDuration, newBpmBefore) / 1000; + } + } + + if (!isDelete) { + const nextMarker = s.masterBarMarkers[nextIndexForUpdate]; + const synthDuration = nextMarker.synthTime - modifiedMarker.synthTime; + const syncedDuration = nextMarker.syncTime - modifiedMarker.syncTime; + const newBpmAfter = (synthDuration / syncedDuration) * modifiedMarker.synthBpm; + modifiedMarker.modifiedTempo = newBpmAfter; + + let syncedTimePosition = + modifiedMarker.syncTime + ticksToMillis(modifiedMarker.synthTickDuration, newBpmAfter) / 1000; + for (let i = modifiedIndex + 1; i < nextIndexForUpdate; i++) { + const marker = { ...s.masterBarMarkers[i] }; + s.masterBarMarkers[i] = marker; + marker.syncTime = syncedTimePosition; + + syncedTimePosition += ticksToMillis(marker.synthTickDuration, newBpmAfter) / 1000; + } + } +} + +type UndoStack = { + undo: SyncPointInfo[]; + redo: SyncPointInfo[]; +}; + +export const MediaSyncEditor: React.FC = ({ api, score }) => { + const markerCanvas = useRef(null); + const waveFormCanvas = useRef(null); + const syncArea = useRef(null); + + const [canvasSize, setCanvasSize] = useState([0, 0]); + const [virtualWidth, setVirtualWidth] = useState(0); + const [zoom, setZoom] = useState(1); + + const [syncPointInfo, setSyncPointInfo] = useState({ + endTick: 0, + endTime: 0, + sampleRate: 44100, + leftSamples: new Float32Array(0), + rightSamples: new Float32Array(0), + masterBarMarkers: [] + }); + + const [draggingMarker, setDraggingMarker] = useState(null); + const [draggingMarkerInfo, setDraggingMarkerInfo] = useState(null); + const [undoStack, setUndoStack] = useState({ undo: [], redo: [] }); + const [shouldStoreToUndo, setStoreToUndo] = useState(false); + const [shouldApplySyncPoints, setApplySyncPoints] = useState(false); + const [shouldCreateInitialSyncPoints, setCreateInitialSyncPoints] = useState(false); + + const [audioElement, setAudioElement] = useState(null); + const [playbackTime, setPlaybackTime] = useState(0); + + useEffect(() => { + setAudioElement( + (api.player!.output as alphaTab.synth.IAudioElementBackingTrackSynthOutput)?.audioElement ?? null + ); + }, [api.player!.output]); + + useAlphaTabEvent( + api, + 'midiLoad', + () => { + setAudioElement( + (api.player!.output as alphaTab.synth.IAudioElementBackingTrackSynthOutput)?.audioElement ?? null + ); + buildSyncPointInfo(api, shouldCreateInitialSyncPoints).then(x => setSyncPointInfo(x)); + setCreateInitialSyncPoints(false); + }, + [shouldCreateInitialSyncPoints] + ); + + useEffect(() => { + if (syncArea.current) { + const xPos = timePositionToX(playbackTime, zoom); + const canvasWidth = canvasSize[0]; + const threshold = canvasWidth * scrollThresholdPercent; + const scrollOffset = syncArea.current.scrollLeft; + + // is out of screen? + if (xPos < scrollOffset + threshold || (xPos - scrollOffset) > (canvasWidth - threshold)) { + syncArea.current.scrollTo({ + left: xPos - canvasWidth / 2, + behavior: 'smooth' + }); + } + } + }, [api, playbackTime, canvasSize, syncArea]); + + useEffect(() => { + const updateWaveFormCursor = () => { + setPlaybackTime(audioElement!.currentTime); + }; + + let timeUpdate: number = 0; + + if (audioElement) { + console.log('Audio element', audioElement); + audioElement.addEventListener('timeupdate', updateWaveFormCursor); + audioElement.addEventListener('durationchange', updateWaveFormCursor); + audioElement.addEventListener('seeked', updateWaveFormCursor); + timeUpdate = window.setInterval(() => { + if (audioElement) { + setPlaybackTime(audioElement.currentTime); + } + }, 50); + updateWaveFormCursor(); + } + + return () => { + if (audioElement) { + console.log('unregister Audio element', audioElement); + audioElement.removeEventListener('timeupdate', updateWaveFormCursor); + audioElement.removeEventListener('durationchange', updateWaveFormCursor); + audioElement.removeEventListener('seeked', updateWaveFormCursor); + window.clearInterval(timeUpdate); + } + }; + }, [audioElement]); + + useEffect(() => { + if (!syncPointInfo) { + return; + } + if (shouldStoreToUndo) { + setUndoStack(s => ({ + undo: [...s.undo, syncPointInfo], + redo: [] + })); + setStoreToUndo(false); + } + + const syncPointLookup = new Map(); + for (const m of syncPointInfo.masterBarMarkers) { + if (m.modifiedTempo) { + let syncPoints = syncPointLookup.get(m.masterBarIndex); + if (!syncPoints) { + syncPoints = []; + syncPointLookup.set(m.masterBarIndex, syncPoints); + } + + const automation = new alphaTab.model.Automation(); + automation.ratioPosition = m.isEndMarker ? 1 : 0; + automation.type = alphaTab.model.AutomationType.SyncPoint; + automation.syncPointValue = new alphaTab.model.SyncPointData(); + automation.syncPointValue.modifiedTempo = m.modifiedTempo; + automation.syncPointValue.millisecondOffset = m.syncTime * 1000; + automation.syncPointValue.barOccurence = m.occurence - 1; + syncPoints.push(automation); + } + } + + if (shouldApplySyncPoints) { + console.log('Apply Sync points', syncPointLookup); + + // remember and set again the tick position after sync point update + // this will ensure the cursor and player seek accordingly with keeping the cursor + // where it is currently shown on the notation. + const tickPosition = api.tickPosition; + for (const masterBar of score.masterBars) { + masterBar.syncPoints = syncPointLookup.get(masterBar.index); + } + api.updateSyncPoints(); + api.tickPosition = tickPosition; + setApplySyncPoints(false); + } + }, [syncPointInfo]); + + const undo = () => { + setUndoStack(s => { + const newStack = { ...s }; + if (newStack.undo.length > 0) { + const undoState = newStack.undo.pop()!; + newStack.redo.push(undoState); + setApplySyncPoints(true); + setSyncPointInfo(newStack.undo.at(-1)!); + } + return newStack; + }); + }; + + const redo = () => { + setUndoStack(s => { + const newStack = { ...s }; + if (newStack.redo.length > 0) { + const redoState = newStack.redo.pop()!; + newStack.undo.push(redoState); + setApplySyncPoints(true); + setSyncPointInfo(redoState); + } + return newStack; + }); + }; + + const toggleMarker = (marker: MasterBarMarker, e: React.MouseEvent) => { + e.stopPropagation(); + e.preventDefault(); + setStoreToUndo(true); + setApplySyncPoints(true); + setSyncPointInfo(s => { + if (!s) { + return s; + } + + // no removal of start and end marker + if (marker.isStartMarker || marker.isEndMarker) { + return s; + } + + const markerIndex = s!.masterBarMarkers.indexOf(marker); + if (markerIndex === -1) { + return s; + } + + const newS = { ...s, masterBarMarkers: [...s.masterBarMarkers] }; + if (marker.modifiedTempo) { + newS.masterBarMarkers[markerIndex] = { ...marker, modifiedTempo: undefined }; + updateSyncPointsAfterModification(markerIndex, newS, true); + } else { + updateSyncPointsAfterModification(markerIndex, newS, false); + } + + return newS; + }); + }; + + const mouseUpListener = useCallback( + (e: MouseEvent) => { + if (draggingMarker) { + e.preventDefault(); + e.stopPropagation(); + + const deltaX = draggingMarkerInfo!.endX - draggingMarkerInfo!.startX; + if (deltaX > dragThreshold || draggingMarker.modifiedTempo !== undefined) { + setStoreToUndo(true); + setApplySyncPoints(true); + setSyncPointInfo(s => { + if (!s) { + return s; + } + + const markerIndex = s.masterBarMarkers.findIndex(m => m === draggingMarker); + + const zoomedPixelPerSecond = pixelPerSeconds * zoom; + const deltaTime = deltaX / zoomedPixelPerSecond; + + const newTimePosition = draggingMarker.syncTime + deltaTime; + + const newS = { ...s, masterBarMarkers: [...s.masterBarMarkers] }; + + // move the marker to the new position + newS.masterBarMarkers[markerIndex] = { + ...newS.masterBarMarkers[markerIndex], + syncTime: Math.max(0, newTimePosition) + }; + + updateSyncPointsAfterModification(markerIndex, newS, false); + return newS; + }); + setDraggingMarker(null); + setDraggingMarkerInfo(null); + } + } + }, + [draggingMarker, draggingMarkerInfo] + ); + + const mouseMoveListener = useCallback( + (e: MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + + setDraggingMarkerInfo(s => { + if (!s || !syncPointInfo) { + return s; + } + + const index = syncPointInfo.masterBarMarkers.indexOf(draggingMarker!); + if (index === -1) { + return s; + } + + let pageX = e.pageX; + if (index < syncPointInfo.masterBarMarkers.length - 1) { + const deltaX = pageX - s.startX; + const thisX = timePositionToX(draggingMarker!.syncTime, zoom); + const newX = thisX + deltaX; + + let nextMarkerIndex = index + 1; + while ( + nextMarkerIndex < syncPointInfo.masterBarMarkers.length - 1 && + !syncPointInfo.masterBarMarkers[nextMarkerIndex].modifiedTempo + ) { + nextMarkerIndex++; + } + + const nextMarker = syncPointInfo.masterBarMarkers[nextMarkerIndex]; + const nextX = timePositionToX(nextMarker.syncTime, zoom); + const maxX = nextX - dragLimit; + + if (newX > maxX) { + pageX = s.startX + (maxX - thisX); + } + } + + return { ...s, endX: pageX }; + }); + }, + [draggingMarker, syncPointInfo] + ); + + useEffect(() => { + if (draggingMarker) { + document.addEventListener('mouseup', mouseUpListener); + document.addEventListener('mousemove', mouseMoveListener); + } + + return () => { + document.removeEventListener('mouseup', mouseUpListener); + document.removeEventListener('mousemove', mouseMoveListener); + }; + }, [draggingMarker, mouseUpListener, mouseMoveListener]); + + const startMarkerDrag = (marker: MasterBarMarker, e: React.MouseEvent) => { + if (e.button !== 0 || marker.modifiedTempo === undefined) { + return; + } + e.preventDefault(); + e.stopPropagation(); + setDraggingMarkerInfo(() => ({ startX: e.pageX, startY: e.pageY, endX: e.pageX })); + setDraggingMarker(() => marker); + }; + + useEffect(() => { + setUndoStack({ + undo: [], + redo: [] + }); + setStoreToUndo(true); + buildSyncPointInfo(api, shouldCreateInitialSyncPoints).then(x => setSyncPointInfo(x)); + setCreateInitialSyncPoints(false); + }, [api]); + + const drawWaveform = () => { + const can = waveFormCanvas.current; + if (!syncPointInfo || !can) { + return; + } + + const ctx = can.getContext('2d')!; + ctx.clearRect(0, 0, can.width, can.height); + ctx.save(); + + const waveFormY = barNumberHeight + arrowHeight; + const halfHeight = ((can.height - waveFormY - timeAxisHeight) / 2) | 0; + + // frame + ctx.fillStyle = timeAxisLineColor; + ctx.fillRect(0, waveFormY + 2 * halfHeight, can.width, 1); + ctx.fillRect(0, barNumberHeight, can.width, 1); + ctx.fillRect(0, waveFormY, can.width, 1); + ctx.fillRect(0, waveFormY + halfHeight, can.width, 1); + + // waveform + ctx.translate(-syncArea.current!.scrollLeft, 0); + + ctx.beginPath(); + + const startX = syncArea.current!.scrollLeft; + const endX = startX + can.width; + + const zoomedPixelPerSecond = pixelPerSeconds * zoom; + const samplesPerPixel = syncPointInfo.sampleRate / zoomedPixelPerSecond; + + for (let x = startX; x < endX; x += barWidth) { + const startSample = (x * samplesPerPixel) | 0; + const endSample = ((x + barWidth) * samplesPerPixel) | 0; + + let maxTop = 0; + let maxBottom = 0; + for (let sample = startSample; sample <= endSample; sample++) { + // TODO: a logarithmic scale would be better here to scale 0-1 better as visible waveform + // for now we multiply it for a good scale (unlikely we have a sound with 1 which is very loud) + const visibilityFactor = 5; + const magnitudeTop = Math.min(Math.abs(syncPointInfo.leftSamples[sample] * visibilityFactor || 0), 1); + const magnitudeBottom = Math.min(Math.abs(syncPointInfo.rightSamples[sample] * visibilityFactor || 0), 1); + if (magnitudeTop > maxTop) { + maxTop = magnitudeTop; + } + if (magnitudeBottom > maxBottom) { + maxBottom = magnitudeBottom; + } + } + + const topBarHeight = Math.round(maxTop * halfHeight); + const bottomBarHeight = Math.round(maxBottom * halfHeight); + const barHeight = topBarHeight + bottomBarHeight || 1; + ctx.rect(x, waveFormY + (halfHeight - topBarHeight), barWidth, barHeight); + } + + ctx.fillStyle = waveFormColor; + ctx.fill(); + + // time axis + ctx.save(); + + ctx.fillStyle = timeAxisLineColor; + ctx.font = font; + ctx.textAlign = 'left'; + ctx.textBaseline = 'bottom'; + + const timeAxisY = waveFormY + 2 * halfHeight; + const leftTime = Math.floor((startX - leftPadding) / zoomedPixelPerSecond); + const rightTime = Math.ceil(endX / zoomedPixelPerSecond); + + let time = leftTime; + while (time <= rightTime) { + const timeX = timePositionToX(time, zoom); + ctx.fillRect(timeX, timeAxisY, 1, timeAxisHeight); + + const minutes = Math.floor(time / 60); + const seconds = Math.floor(time - minutes * 60); + + const minutesText = minutes.toString().padStart(2, '0'); + const secondsText = seconds.toString().padStart(2, '0'); + + ctx.fillText(`${minutesText}:${secondsText}`, timeX + 3, timeAxisY + timeAxisHeight); + + const nextSecond = time + 1; + while (time < nextSecond) { + const subSecondX = timePositionToX(time, zoom); + ctx.fillRect(subSecondX, timeAxisY, 1, timeAxiSubSecondTickHeight); + + time += 0.1; + } + + time = Math.floor(time + 0.5); + } + + ctx.restore(); + ctx.restore(); + }; + + useEffect(() => { + drawWaveform(); + }, [canvasSize, virtualWidth]); + + useResizeObserver(syncArea, entry => { + setCanvasSize(s => [entry.contentRect.width, entry.contentRect.height]); + }); + + useEffect(() => { + if (syncPointInfo) { + setVirtualWidth(s => pixelPerSeconds * syncPointInfo.endTime * zoom); + } + drawWaveform(); + }, [markerCanvas, syncPointInfo, zoom]); + + useEffect(() => { + if (shouldCreateInitialSyncPoints) { + // clear any potential sync points + for (const m of score.masterBars) { + m.syncPoints = undefined; + } + api.updateSettings(); + api.loadMidiForScore(); + } + }, [shouldCreateInitialSyncPoints]); + + const onLoadAudioFile = () => { + const input = document.createElement('input'); + input.type = 'file'; + input.accept = '.mp3,.ogg,*.wav,*.flac,*.aac'; + input.onchange = () => { + if (input.files?.length === 1) { + const reader = new FileReader(); + reader.onload = e => { + // setup backing track + score.backingTrack = new alphaTab.model.BackingTrack(); + score.backingTrack.rawAudioFile = new Uint8Array(e.target!.result as ArrayBuffer); + + // create a fresh set of sync points upon load (start->end) + setCreateInitialSyncPoints(true); + }; + reader.readAsArrayBuffer(input.files[0]); + } + }; + document.body.appendChild(input); + input.click(); + document.body.removeChild(input); + }; + + return ( +
+
+ + + + + + + + + + + + + +
+
drawWaveform()}> +
+ +
+
+ {syncPointInfo.masterBarMarkers.map(m => ( +
toggleMarker(m, e)} + onMouseDown={e => { + startMarkerDrag(m, e); + }}> +
{m.label}
+
+
+ {!m.isEndMarker && m.modifiedTempo && ( +
{m.modifiedTempo.toFixed(1)} bpm
+ )} +
+
+
+ ))} +
+
+
+
+ ); +}; diff --git a/src/components/AlphaTabPlayground/player-controls-group.tsx b/src/components/AlphaTabPlayground/player-controls-group.tsx index 1bfe2fd..8284923 100644 --- a/src/components/AlphaTabPlayground/player-controls-group.tsx +++ b/src/components/AlphaTabPlayground/player-controls-group.tsx @@ -11,6 +11,8 @@ import { PlayerProgressIndicator } from '../AlphaTabFull/player-progress-indicat export interface PlayerControlsGroupProps { sidePanel: SidePanel; onSidePanelChange: (sidePanel: SidePanel) => void; + bottomPanel: BottomPanel; + onBottomPanelChange: (sidePanel: BottomPanel) => void; api: alphaTab.AlphaTabApi; } @@ -20,7 +22,18 @@ export enum SidePanel { TrackSelector = 2 } -export const PlayerControlsGroup: React.FC = ({ api, sidePanel, onSidePanelChange }) => { +export enum BottomPanel { + None = 0, + MediaSyncEditor = 1 +} + +export const PlayerControlsGroup: React.FC = ({ + api, + sidePanel, + onSidePanelChange, + bottomPanel, + onBottomPanelChange +}) => { const [soundFontLoadPercentage, setSoundFontLoadPercentage] = useState(0); const [isPlaying, setPlaying] = useState(false); const [currentTime, setCurrentTime] = useState(0); @@ -121,6 +134,19 @@ export const PlayerControlsGroup: React.FC = ({ api, s
+ @@ -859,9 +303,12 @@ export const MediaSyncEditor: React.FC = ({ api, score }) type="button" data-tooltip-id="tooltip-playground" data-tooltip-content="Undo" - disabled={undoStack.undo.length <= 1} + disabled={!undo.canUndo} onClick={() => { - undo(); + undo.undo(i => { + shouldApplySyncPoints.current = true; + setSyncPointInfo(i); + }); }}> @@ -871,49 +318,57 @@ export const MediaSyncEditor: React.FC = ({ api, score }) type="button" data-tooltip-id="tooltip-playground" data-tooltip-content="Redo" - disabled={undoStack.redo.length === 0} + disabled={!undo.canRedo} onClick={() => { - redo(); + undo.redo(i => { + shouldApplySyncPoints.current = true; + setSyncPointInfo(i); + }); }}>
-
drawWaveform()}> +
setScrollOffset((e.target as HTMLDivElement).scrollLeft)}>
- -
-
- {syncPointInfo.masterBarMarkers.map(m => ( -
toggleMarker(m, e)} - onMouseDown={e => { - startMarkerDrag(m, e); - }}> -
{m.label}
-
-
- {!m.isEndMarker && m.modifiedTempo && ( -
{m.modifiedTempo.toFixed(1)} bpm
- )} -
-
-
- ))} +
+ { + shouldApplySyncPoints.current = true; + shouldStoreToUndo.current = true; + setSyncPointInfo(newInfo); + }} + />
diff --git a/src/components/AlphaTabPlayground/styles.module.scss b/src/components/AlphaTabPlayground/styles.module.scss index 3862604..716e01e 100644 --- a/src/components/AlphaTabPlayground/styles.module.scss +++ b/src/components/AlphaTabPlayground/styles.module.scss @@ -425,6 +425,10 @@ position: sticky; top: 0; left: 0; + + &>canvas { + font: 12px "Noto Sans"; + } } & .sync-area-playback-cursor { @@ -439,90 +443,109 @@ transition: transform linear 0.1s; white-space: nowrap; padding-top: 50px; - font-size: 12px;; + font-size: 12px; + } + } +} + +.sync-area-marker-wrap { + position: absolute; + top: 0; + + &>.masterbar-marker { + position: absolute; + width: 20px; + top: 0; + bottom: 20px; + transform: translateX(-50%); + user-select: none; + + display: flex; + flex-direction: column; + align-items: center; + font-size: 12px; + + opacity: 0.4; + + &:hover { + opacity: 1; + } + + + &>.marker-label { + height: 20px; + white-space: nowrap; + display: flex; + align-items: center; } - & .sync-area-marker-wrap { - position: absolute; - top: 0; - &>.masterbar-marker { - position: absolute; + &>.marker-head { + height: 20px; + width: 20px; + display: grid; + align-items: center; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + + &>* { + grid-area: 1 / 1 / 2 / 2; + } + + &>.marker-arrow { width: 20px; - top: 0; - bottom: 20px; - transform: translateX(-50%); - - display: flex; - flex-direction: column; - align-items: center; - font-size: 12px; - - opacity: 0.4; - - &:hover { - opacity: 1; - } - - &>.marker-label { - height: 20px; - white-space: nowrap; - display: flex; - align-items: center; - } - - - &>.marker-head { - height: 20px; - width: 20px; - display: grid; - align-items: center; - grid-template-columns: 1fr; - grid-template-rows: 1fr; - - &>* { - grid-area: 1 / 1 / 2 / 2; - } - - &>.marker-arrow { - width: 20px; - height: 20px; - clip-path: polygon(0 0, 100% 0, 50% 100%); - background: #444950; - } - - &>.marker-tempo { - white-space: nowrap; - text-align: left; - transform: translateX(25px); - pointer-events: none; - } - } - - - &>.marker-line { - flex-grow: 1; - width: 1px; - background: #444950; - } - - cursor: col-resize; - - &.has-sync-point { - opacity: 0.75; - - &:hover { - opacity: 1; - } - - & .marker-arrow { - background: #4972a1; - } - } + height: 20px; + clip-path: polygon(0 0, 100% 0, 50% 100%); + background: #444950; + } + + &>.marker-tempo { + white-space: nowrap; + text-align: left; + transform: translateX(25px); + pointer-events: none; + } + } + + &>.marker-line { + flex-grow: 1; + width: 0; + border-right: 1px solid #444950; + } + + &.masterbar-marker-startmarker, + &.masterbar-marker-endmarker { + &>.marker-line { + border-right-style: solid; + border-right-width: 2px; + } + } + &.masterbar-marker-masterbar { + &>.marker-line { + border-right-style: solid; + } + } + &.masterbar-marker-intermediate { + &>.marker-line { + border-right-style: dashed; } } + + cursor: col-resize; + + &.has-sync-point { + opacity: 0.75; + + &:hover { + opacity: 1; + } + + & .marker-arrow { + background: #4972a1; + } + } } } \ No newline at end of file diff --git a/src/components/AlphaTabPlayground/sync-point-info.ts b/src/components/AlphaTabPlayground/sync-point-info.ts new file mode 100644 index 0000000..f9a34ea --- /dev/null +++ b/src/components/AlphaTabPlayground/sync-point-info.ts @@ -0,0 +1,640 @@ +import * as alphaTab from '@coderline/alphatab'; + +export enum SyncPointMarkerType { + StartMarker = 0, + EndMarker = 1, + MasterBar = 2, + Intermediate = 3 +} + +export type SyncPointMarker = { + syncTime: number; + + synthTime: number; + synthBpm: number; + synthTick: number; + + masterBarIndex: number; + ratioPosition: number; + occurence: number; + modifiedTempo?: number; + + markerType: SyncPointMarkerType; +}; + +export type SyncPointInfo = { + endTick: number; + endTime: number; + sampleRate: number; + leftSamples: Float32Array; + rightSamples: Float32Array; + syncPointMarkers: SyncPointMarker[]; +}; + + +function ticksToMilliseconds(tick: number, bpm: number): number { + return (tick * 60000.0) / (bpm * 960); +} + +export async function buildSyncPointInfoFromApi( + api: alphaTab.AlphaTabApi, + createInitialSyncPoints: boolean +): Promise { + const tickCache = api.tickCache; + if (!tickCache || !api.score?.backingTrack?.rawAudioFile) { + return { + endTick: 0, + endTime: 0, + sampleRate: 0, + leftSamples: new Float32Array(0), + rightSamples: new Float32Array(0), + syncPointMarkers: [] + }; + } + + const audioContext = new AudioContext(); + const buffer = await audioContext.decodeAudioData(api.score!.backingTrack!.rawAudioFile.buffer.slice(0)); + const rawSamples: Float32Array[] = + buffer.numberOfChannels === 1 + ? [buffer.getChannelData(0), buffer.getChannelData(0)] + : [buffer.getChannelData(0), buffer.getChannelData(1)]; + + const sampleRate = audioContext.sampleRate; + const endTime = (rawSamples[0].length / sampleRate) * 1000; + + await audioContext.close(); + + const state: SyncPointInfo = { + endTick: api.tickCache.masterBars.at(-1)!.end, + syncPointMarkers: [], + sampleRate, + leftSamples: rawSamples[0], + rightSamples: rawSamples[1], + endTime + }; + + if (createInitialSyncPoints) { + return autoSync(state, api); + } + + state.syncPointMarkers = buildSyncPointMarkers(api); + return state; +} + +function buildSyncPointMarkers(api: alphaTab.AlphaTabApi): SyncPointMarker[] { + const markers: SyncPointMarker[] = []; + + const occurences = new Map(); + let syncBpm = api.score!.tempo; + let syncLastTick = 0; + let syncLastMillisecondOffset = 0; + + let synthBpm = api.score!.tempo; + let synthTimePosition = 0; + let synthTickPosition = 0; + + for (const masterBar of api.tickCache!.masterBars) { + const occurence = occurences.get(masterBar.masterBar.index) ?? 0; + occurences.set(masterBar.masterBar.index, occurence + 1); + + const duration = masterBar.end - masterBar.start; + + if (masterBar.masterBar.syncPoints) { + // if we have sync points we have to correctly walk through the points and tempo changes + // and place the markers accordingly + + // TODO: create placeholder markers matching the time signature and relative offsets. + + let tempoChangeIndex = 0; + for (const syncPoint of masterBar.masterBar.syncPoints) { + if (syncPoint.syncPointValue!.barOccurence !== occurence) { + continue; + } + + const syncPointTick = masterBar.start + syncPoint.ratioPosition * duration; + + // first process all tempo change until this sync point + while ( + tempoChangeIndex < masterBar.tempoChanges.length && + masterBar.tempoChanges[tempoChangeIndex].tick <= syncPointTick + ) { + const tempoChange = masterBar.tempoChanges[tempoChangeIndex]; + const absoluteTick = tempoChange.tick; + const tickOffset = absoluteTick - synthTickPosition; + if (tickOffset > 0) { + const timeOffset = ticksToMilliseconds(tickOffset, synthBpm); + synthTickPosition = absoluteTick; + synthTimePosition += timeOffset; + } + + synthBpm = tempoChange.tempo; + tempoChangeIndex++; + } + + // process time until sync point + const tickOffset = syncPointTick - synthTickPosition; + if (tickOffset > 0) { + synthTickPosition = syncPointTick; + const timeOffset = ticksToMilliseconds(tickOffset, synthBpm); + synthTimePosition += timeOffset; + } + + // create sync point marker + const newMarker: SyncPointMarker = { + masterBarIndex: masterBar.masterBar.index, + occurence: occurence, + syncTime: syncPoint.syncPointValue!.millisecondOffset, + synthTime: synthTimePosition, + synthBpm: masterBar.tempoChanges[0].tempo, + modifiedTempo: syncPoint!.syncPointValue!.modifiedTempo, + markerType: + syncPoint.ratioPosition === 0 + ? SyncPointMarkerType.MasterBar + : SyncPointMarkerType.Intermediate, + ratioPosition: syncPoint.ratioPosition, + synthTick: synthTickPosition + }; + if (syncPointTick === 0) { + newMarker.markerType = SyncPointMarkerType.StartMarker; + } + markers.push(newMarker); + + // remember values for artificially generated markers + syncBpm = syncPoint.syncPointValue!.modifiedTempo; + syncLastMillisecondOffset = syncPoint.syncPointValue!.millisecondOffset; + syncLastTick = masterBar.start; + } + + // process remaining tempo changes after all sync points + while (tempoChangeIndex < masterBar.tempoChanges.length) { + const tempoChange = masterBar.tempoChanges[tempoChangeIndex]; + const absoluteTick = tempoChange.tick; + const tickOffset = absoluteTick - synthTickPosition; + if (tickOffset > 0) { + const timeOffset = ticksToMilliseconds(tickOffset, synthBpm); + synthTickPosition = absoluteTick; + synthTimePosition += timeOffset; + } + + synthBpm = tempoChange.tempo; + tempoChangeIndex++; + } + } else { + // TODO: Create intermediate markers matching time signature + + // if there are no sync points, we create a main masterbar sync point marker at start + let tickOffset = masterBar.start - syncLastTick; + + const newMarker: SyncPointMarker = { + masterBarIndex: masterBar.masterBar.index, + occurence: occurence, + syncTime: syncLastMillisecondOffset + ticksToMilliseconds(tickOffset, syncBpm), + synthTime: synthTimePosition, + synthTick: synthTickPosition, + synthBpm: masterBar.tempoChanges[0].tempo, + modifiedTempo: undefined, + markerType: masterBar.start === 0 ? SyncPointMarkerType.StartMarker : SyncPointMarkerType.MasterBar, + ratioPosition: 0 + }; + + if (newMarker.markerType === SyncPointMarkerType.StartMarker) { + newMarker.modifiedTempo = syncBpm; + } + + markers.push(newMarker); + + // and then we walk through the tempo changes + for (const changes of masterBar.tempoChanges) { + const absoluteTick = changes.tick; + const tickOffset = absoluteTick - synthTickPosition; + if (tickOffset > 0) { + const timeOffset = ticksToMilliseconds(tickOffset, synthBpm); + + synthTickPosition = absoluteTick; + synthTimePosition += timeOffset; + } + + synthBpm = changes.tempo; + } + + // don't forget the part after the last tempo change + tickOffset = masterBar.end - synthTickPosition; + const timeOffset = ticksToMilliseconds(tickOffset, synthBpm); + synthTickPosition += tickOffset; + synthTimePosition += timeOffset; + } + } + + // at the very end we create the end marker + const lastMasterBar = api.tickCache!.masterBars.at(-1)!; + const endSyncPoint = lastMasterBar.masterBar.syncPoints?.find(m => m.ratioPosition === 1); + + const tickOffset = lastMasterBar.end - syncLastTick; + const endSyncPointTime = endSyncPoint + ? endSyncPoint.syncPointValue!.millisecondOffset + : syncLastMillisecondOffset + ticksToMilliseconds(tickOffset, syncBpm); + + markers.push({ + masterBarIndex: lastMasterBar.masterBar.index, + occurence: occurences.get(lastMasterBar.masterBar.index)!, + syncTime: endSyncPointTime, + synthTime: synthTimePosition, + synthBpm, + modifiedTempo: endSyncPoint?.syncPointValue?.modifiedTempo ?? synthBpm, + markerType: SyncPointMarkerType.EndMarker, + ratioPosition: 1, + synthTick: synthTickPosition + }); + + return markers; +} + +function findAudioStartAndEnd(state: SyncPointInfo): [number, number] { + // once we have 1s non-silent audio we consider it as start (or inverted for end) + const nonSilentSamplesThreshold = 1 * state.sampleRate; + // we accept 200ms of silence inbetween audible samples + const silentSamplesThreshold = 0.2 * state.sampleRate; + // there can always be a bit of a noise. we require some amplitude + // proper would be to consider the Frequency and calculate the + const nonSilentAmplitudeThreshold = 0.001; + + // we limit the search to 10s (from start/end), proper audio should not exceed this + const searchThreshold = Math.min(10 * state.sampleRate, state.leftSamples.length * 0.1); + + let songStart = searchThreshold; + let songEnd = state.leftSamples.length - searchThreshold; + + // find start offset + let sampleIndex = 0; + + let nonSilentSamplesInSection = 0; + let silentSamplesInSequence = 0; + let sectionStart = 0; + + while (sampleIndex < songStart) { + if ( + Math.abs(state.leftSamples[sampleIndex]) >= nonSilentAmplitudeThreshold || + Math.abs(state.rightSamples[sampleIndex]) >= nonSilentAmplitudeThreshold + ) { + // the first audible sample marks the potential start + if (nonSilentSamplesInSection === 0) { + sectionStart = sampleIndex; + } + nonSilentSamplesInSection++; + silentSamplesInSequence = 0; + } else { + silentSamplesInSequence++; + } + + // found more than X-samples silent, no start until here + if (silentSamplesInSequence > silentSamplesThreshold) { + // reset and start searching agian + sectionStart = sampleIndex + 1; + nonSilentSamplesInSection = 0; + silentSamplesInSequence = 0; + } + // found enough samples since section start which are audible, should be good + else if (nonSilentSamplesInSection > nonSilentSamplesThreshold) { + songStart = sectionStart; + break; + } + + sampleIndex++; + } + + // and same from the back + sampleIndex = state.leftSamples.length - 1; + nonSilentSamplesInSection = 0; + silentSamplesInSequence = 0; + sectionStart = sampleIndex; + + while (sampleIndex >= songEnd) { + if ( + Math.abs(state.leftSamples[sampleIndex]) >= nonSilentAmplitudeThreshold || + Math.abs(state.rightSamples[sampleIndex]) >= nonSilentAmplitudeThreshold + ) { + if (nonSilentSamplesInSection === 0) { + sectionStart = sampleIndex; + } + nonSilentSamplesInSection++; + silentSamplesInSequence = 0; + } else { + silentSamplesInSequence++; + } + + if (silentSamplesInSequence > silentSamplesThreshold) { + sectionStart = sampleIndex - 1; + nonSilentSamplesInSection = 0; + silentSamplesInSequence = 0; + } else if (nonSilentSamplesInSection > nonSilentSamplesThreshold) { + songEnd = sectionStart; + break; + } + + sampleIndex--; + } + + return [(songStart / state.sampleRate) * 1000, (songEnd / state.sampleRate) * 1000]; +} + +export function autoSync(oldState: SyncPointInfo, api: alphaTab.AlphaTabApi): SyncPointInfo { + const state: SyncPointInfo = { + endTick: api.tickCache!.masterBars.at(-1)!.end, + syncPointMarkers: [], + sampleRate: oldState.sampleRate, + leftSamples: oldState.leftSamples, + rightSamples: oldState.rightSamples, + endTime: oldState.endTime + }; + + // create initial sync points for all tempo changes to ensure the song and the + // backing track roughly align + let synthBpm = api.tickCache!.masterBars[0].tempoChanges[0].tempo; + let synthTimePosition = 0; + let synthTickPosition = 0; + + const syncPoints: SyncPointMarker[] = []; + + // first create all changes not respecting the song start and end + const occurences = new Map(); + for (const masterBar of api.tickCache!.masterBars) { + const occurence = occurences.get(masterBar.masterBar.index) ?? 0; + occurences.set(masterBar.masterBar.index, occurence + 1); + + // we are guaranteed to have a tempo change per master bar indicating its own tempo + // (even though its not a change) + for (const changes of masterBar.tempoChanges) { + const absoluteTick = changes.tick; + const tickOffset = absoluteTick - synthTickPosition; + if (tickOffset > 0) { + const timeOffset = ticksToMilliseconds(tickOffset, synthBpm); + synthTickPosition = absoluteTick; + synthTimePosition += timeOffset; + } + + const marker: SyncPointMarker = { + markerType: SyncPointMarkerType.MasterBar, + masterBarIndex: masterBar.masterBar.index, + occurence, + syncTime: synthTimePosition, + synthBpm, + synthTime: synthTimePosition, + modifiedTempo: undefined, + ratioPosition: 0, + synthTick: synthTickPosition + }; + + if (masterBar.start === 0) { + marker.markerType = SyncPointMarkerType.StartMarker; + } else if (changes.tick > masterBar.start) { + marker.markerType = SyncPointMarkerType.Intermediate; + const duration = masterBar.end - masterBar.start; + marker.ratioPosition = (changes.tick - masterBar.start) / duration; + } + + if (changes.tempo !== synthBpm || marker.markerType === SyncPointMarkerType.StartMarker) { + syncPoints.push(marker); + marker.modifiedTempo = changes.tempo; + } + + synthBpm = changes.tempo; + + state.syncPointMarkers.push(marker); + } + + const tickOffset = masterBar.end - synthTickPosition; + const timeOffset = ticksToMilliseconds(tickOffset, synthBpm); + synthTickPosition += tickOffset; + synthTimePosition += timeOffset; + } + + // end marker + const lastMasterBar = api.tickCache!.masterBars.at(-1)!; + state.syncPointMarkers.push({ + masterBarIndex: lastMasterBar.masterBar.index, + occurence: occurences.get(lastMasterBar.masterBar.index)!, + syncTime: synthTimePosition, + synthTime: synthTimePosition, + synthBpm, + modifiedTempo: synthBpm, + markerType: SyncPointMarkerType.EndMarker, + ratioPosition: 1, + synthTick: synthTickPosition + }); + + // with the final durations known, we can "squeeze" together the song + // from start and end (keeping the relative positions) + // and the other bars will be adjusted accordingly + const [songStart, songEnd] = findAudioStartAndEnd(state); + + const synthDuration = synthTimePosition; + const realDuration = songEnd - songStart; + const scaleFactor = realDuration / synthDuration; + + // 1st Pass: shift all tempo change markers relatively and calculate BPM + let syncTime = songStart; + for (let i = 0; i < syncPoints.length; i++) { + const syncPoint = syncPoints[i]; + + syncPoint.syncTime = syncTime; + + if (i < 0) { + const previousMarker = syncPoints[i - 1]; + const synthDuration = syncPoint.synthTime - previousMarker.synthTime; + const syncedDuration = syncPoint.syncTime - previousMarker.syncTime; + const newBpm = (synthDuration / syncedDuration) * previousMarker.synthBpm; + previousMarker.modifiedTempo = newBpm; + } + + const ownStart = syncPoint.synthTime; + const nextStart = i < syncPoints.length - 1 ? syncPoints[i + 1].synthTime : ownStart; + + const oldDuration = nextStart - ownStart; + const newDuration = oldDuration * scaleFactor; + + syncTime += newDuration; + } + + // 2nd Pass: adjust all in-between markers according to the new position + syncTime = songStart; + let syncedBpm = syncPoints[0].modifiedTempo!; + for (let i = 0; i < state.syncPointMarkers.length; i++) { + const marker = state.syncPointMarkers[i]; + marker.syncTime = syncTime; + + if (marker.modifiedTempo) { + syncedBpm = marker.modifiedTempo; + } + + if (i < state.syncPointMarkers.length - 1) { + const tickDiff = state.syncPointMarkers[i + 1].synthTick - marker.synthTick; + syncTime += ticksToMilliseconds(tickDiff, syncedBpm); + } + } + + return state; +} + +export function updateSyncPointsAfterModification( + modifiedIndex: number, + s: SyncPointInfo, + isDelete: boolean, + cloneMarkers: boolean +) { + // find previous and next sync point (or start/end of the song) + let startIndexForUpdate = Math.max(0, modifiedIndex - 1); + while (startIndexForUpdate > 0 && !s.syncPointMarkers[startIndexForUpdate].modifiedTempo) { + startIndexForUpdate--; + } + + let nextIndexForUpdate = Math.min(s.syncPointMarkers.length - 1, modifiedIndex + 1); + while ( + nextIndexForUpdate < s.syncPointMarkers.length - 1 && + !s.syncPointMarkers[nextIndexForUpdate].modifiedTempo + ) { + nextIndexForUpdate++; + } + + const modifiedMarker = s.syncPointMarkers[modifiedIndex]; + + // update from previous to current + if (startIndexForUpdate < modifiedIndex) { + const previousMarker = cloneMarkers + ? { ...s.syncPointMarkers[startIndexForUpdate] } + : s.syncPointMarkers[startIndexForUpdate]; + s.syncPointMarkers[startIndexForUpdate] = previousMarker; + const synthDuration = modifiedMarker.synthTime - previousMarker.synthTime; + const syncedDuration = modifiedMarker.syncTime - previousMarker.syncTime; + const newBpmBefore = (synthDuration / syncedDuration) * previousMarker.synthBpm; + previousMarker.modifiedTempo = newBpmBefore; + + let syncedTimePosition = previousMarker.syncTime; + for (let i = startIndexForUpdate; i < modifiedIndex; i++) { + const marker = cloneMarkers ? { ...s.syncPointMarkers[i] } : s.syncPointMarkers[i]; + s.syncPointMarkers[i] = marker; + + marker.syncTime = syncedTimePosition; + + if (i < modifiedIndex - 1) { + const tickDuration = s.syncPointMarkers[i + 1].synthTick - marker.synthTick; + syncedTimePosition += ticksToMilliseconds(tickDuration, newBpmBefore); + } + } + } + + if (!isDelete && nextIndexForUpdate > modifiedIndex) { + const nextMarker = s.syncPointMarkers[nextIndexForUpdate]; + const synthDuration = nextMarker.synthTime - modifiedMarker.synthTime; + const syncedDuration = nextMarker.syncTime - modifiedMarker.syncTime; + const newBpmAfter = syncedDuration > 0 ? (synthDuration / syncedDuration) * modifiedMarker.synthBpm : 0; + modifiedMarker.modifiedTempo = newBpmAfter; + + const tickDuration = s.syncPointMarkers[modifiedIndex + 1].synthTick - modifiedMarker.synthTick; + let syncedTimePosition = modifiedMarker.syncTime + ticksToMilliseconds(tickDuration, newBpmAfter); + + for (let i = modifiedIndex + 1; i < nextIndexForUpdate; i++) { + const marker = cloneMarkers ? { ...s.syncPointMarkers[i] } : s.syncPointMarkers[i]; + s.syncPointMarkers[i] = marker; + marker.syncTime = syncedTimePosition; + + if (i < nextIndexForUpdate - 1) { + const tickDuration = s.syncPointMarkers[i + 1].synthTick - marker.synthTick; + syncedTimePosition += ticksToMilliseconds(tickDuration, newBpmAfter); + } + } + } +} + +export function moveMarker(s: SyncPointInfo, marker: SyncPointMarker, newTimePosition: number): SyncPointInfo { + const markerIndex = s.syncPointMarkers.findIndex(m => m === marker); + + const newS: SyncPointInfo = { ...s, syncPointMarkers: [...s.syncPointMarkers] }; + + // move the marker to the new position + newS.syncPointMarkers[markerIndex] = { + ...newS.syncPointMarkers[markerIndex], + syncTime: Math.max(0, newTimePosition) + }; + + updateSyncPointsAfterModification(markerIndex, newS, false, true); + return newS; +} + +export function toggleMarker(s: SyncPointInfo, marker: SyncPointMarker): SyncPointInfo { + // no removal of start and end marker + if ( + marker.markerType === SyncPointMarkerType.StartMarker || + marker.markerType === SyncPointMarkerType.EndMarker + ) { + return s; + } + + const markerIndex = s!.syncPointMarkers.indexOf(marker); + if (markerIndex === -1) { + return s; + } + + const newS: SyncPointInfo = { ...s, syncPointMarkers: [...s.syncPointMarkers] }; + if (marker.modifiedTempo) { + switch (marker.markerType) { + case SyncPointMarkerType.MasterBar: + newS.syncPointMarkers[markerIndex] = { ...marker, modifiedTempo: undefined }; + break; + case SyncPointMarkerType.Intermediate: + newS.syncPointMarkers.splice(markerIndex, 1); + break; + } + updateSyncPointsAfterModification(markerIndex, newS, true, true); + } else { + updateSyncPointsAfterModification(markerIndex, newS, false, true); + } + + return newS; +} + +export function resetSyncPoints(api: alphaTab.AlphaTabApi, state: SyncPointInfo): SyncPointInfo { + for (const b of api.score!.masterBars) { + b.syncPoints = undefined; + } + + return { + ...state, + syncPointMarkers: buildSyncPointMarkers(api) + }; +} + +export function applySyncPoints(api: alphaTab.AlphaTabApi, syncPointInfo: SyncPointInfo) { + const syncPointLookup = new Map(); + for (const m of syncPointInfo.syncPointMarkers) { + if (m.modifiedTempo) { + let syncPoints = syncPointLookup.get(m.masterBarIndex); + if (!syncPoints) { + syncPoints = []; + syncPointLookup.set(m.masterBarIndex, syncPoints); + } + + const automation = new alphaTab.model.Automation(); + automation.ratioPosition = m.ratioPosition; + automation.type = alphaTab.model.AutomationType.SyncPoint; + automation.syncPointValue = new alphaTab.model.SyncPointData(); + automation.syncPointValue.modifiedTempo = m.modifiedTempo; + automation.syncPointValue.millisecondOffset = m.syncTime; + automation.syncPointValue.barOccurence = m.occurence; + syncPoints.push(automation); + } + } + + // remember and set again the tick position after sync point update + // this will ensure the cursor and player seek accordingly with keeping the cursor + // where it is currently shown on the notation. + const tickPosition = api.tickPosition; + for (const masterBar of api.score!.masterBars) { + masterBar.syncPoints = syncPointLookup.get(masterBar.index); + } + api.updateSyncPoints(); + api.tickPosition = tickPosition; +} + + + + diff --git a/src/components/AlphaTabPlayground/sync-point-marker-panel.tsx b/src/components/AlphaTabPlayground/sync-point-marker-panel.tsx new file mode 100644 index 0000000..9e6cc44 --- /dev/null +++ b/src/components/AlphaTabPlayground/sync-point-marker-panel.tsx @@ -0,0 +1,232 @@ +import type React from 'react'; +import { + moveMarker, + type SyncPointInfo, + type SyncPointMarker, + SyncPointMarkerType, + toggleMarker +} from './sync-point-info'; +import styles from './styles.module.scss'; +import { timePositionToX } from './helpers'; +import { useCallback, useEffect, useState } from 'react'; + +export type SyncPointMarkerPanelProps = { + syncPointInfo: SyncPointInfo; + onSyncPointInfoChanged(syncPointInfo: SyncPointInfo): void; + + zoom: number; + width: number; + height: number; + pixelPerMilliseconds: number; + leftPadding: number; +}; + +type MarkerDragInfo = { + startX: number; + startY: number; + endX: number; +}; + +const dragLimit = 10; +const dragThreshold = 5; + +const buildMarkerLabel = (m: SyncPointMarker): React.ReactNode => { + switch (m.markerType) { + case SyncPointMarkerType.StartMarker: + return 'Start'; + case SyncPointMarkerType.EndMarker: + return 'End'; + case SyncPointMarkerType.MasterBar: + if (m.occurence > 0) { + return `${m.masterBarIndex + 1} (${m.occurence + 1})`; + } + return `${m.masterBarIndex + 1}`; + case SyncPointMarkerType.Intermediate: + return ''; + } +}; + +const computeMarkerInlineStyle = ( + m: SyncPointMarker, + props: SyncPointMarkerPanelProps, + draggingMarker: SyncPointMarker | null, + draggingMarkerInfo: MarkerDragInfo | null +): React.CSSProperties => { + let left = timePositionToX(props.pixelPerMilliseconds, m.syncTime, props.zoom, props.leftPadding); + + if (m === draggingMarker && draggingMarkerInfo) { + const deltaX = draggingMarkerInfo.endX - draggingMarkerInfo.startX; + left += deltaX; + } + + return { + left: `${left}px` + }; +}; + +export const SyncPointMarkerPanel: React.FC = props => { + const { syncPointInfo, onSyncPointInfoChanged, width, height, zoom, pixelPerMilliseconds, leftPadding } = props; + + const [draggingMarker, setDraggingMarker] = useState(null); + const [draggingMarkerInfo, setDraggingMarkerInfo] = useState(null); + + const onToggleMarker = (marker: SyncPointMarker, e: React.MouseEvent) => { + e.stopPropagation(); + e.preventDefault(); + onSyncPointInfoChanged(toggleMarker(syncPointInfo, marker)); + }; + + const startMarkerDrag = (marker: SyncPointMarker, e: React.MouseEvent) => { + if (e.button !== 0 || marker.modifiedTempo === undefined) { + return; + } + e.preventDefault(); + e.stopPropagation(); + setDraggingMarkerInfo(() => ({ startX: e.pageX, startY: e.pageY, endX: e.pageX })); + setDraggingMarker(() => marker); + }; + + const mouseUpListener = useCallback( + (e: MouseEvent) => { + if (draggingMarker) { + e.preventDefault(); + e.stopPropagation(); + + const deltaX = draggingMarkerInfo!.endX - draggingMarkerInfo!.startX; + if (deltaX > dragThreshold || (draggingMarker.modifiedTempo !== undefined && Math.abs(deltaX) > 0)) { + const zoomedPixelPerMillisecond = pixelPerMilliseconds * zoom; + const deltaTime = deltaX / zoomedPixelPerMillisecond; + const newTimePosition = draggingMarker.syncTime + deltaTime; + onSyncPointInfoChanged(moveMarker(syncPointInfo, draggingMarker, newTimePosition)); + } + + setDraggingMarker(null); + setDraggingMarkerInfo(null); + } + }, + [draggingMarker, draggingMarkerInfo] + ); + + const mouseMoveListener = useCallback( + (e: MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + + setDraggingMarkerInfo(s => { + if (!s || !syncPointInfo) { + return s; + } + + const index = syncPointInfo.syncPointMarkers.indexOf(draggingMarker!); + if (index === -1) { + return s; + } + + let pageX = e.pageX; + const deltaX = pageX - s.startX; + + if (deltaX < 0) { + if (index > 0) { + const thisX = timePositionToX( + pixelPerMilliseconds, + draggingMarker!.syncTime, + zoom, + leftPadding + ); + const newX = thisX + deltaX; + + let previousMarkerIndex = index - 1; + if (draggingMarker!.markerType !== SyncPointMarkerType.Intermediate) { + while ( + previousMarkerIndex > 0 && + !syncPointInfo.syncPointMarkers[previousMarkerIndex].modifiedTempo + ) { + previousMarkerIndex--; + } + } + + const previousMarker = syncPointInfo.syncPointMarkers[previousMarkerIndex]; + const previousX = timePositionToX( + pixelPerMilliseconds, + previousMarker.syncTime, + zoom, + leftPadding + ); + const minX = previousX + dragLimit; + + if (newX < minX) { + pageX = s.startX - (thisX - minX); + } + } + } else { + if (index < syncPointInfo.syncPointMarkers.length - 1) { + const thisX = timePositionToX( + pixelPerMilliseconds, + draggingMarker!.syncTime, + zoom, + leftPadding + ); + const newX = thisX + deltaX; + + let nextMarkerIndex = index + 1; + if (draggingMarker!.markerType !== SyncPointMarkerType.Intermediate) { + while ( + nextMarkerIndex < syncPointInfo.syncPointMarkers.length - 1 && + !syncPointInfo.syncPointMarkers[nextMarkerIndex].modifiedTempo + ) { + nextMarkerIndex++; + } + } + + const nextMarker = syncPointInfo.syncPointMarkers[nextMarkerIndex]; + const nextX = timePositionToX(pixelPerMilliseconds, nextMarker.syncTime, zoom, leftPadding); + const maxX = nextX - dragLimit; + + if (newX > maxX) { + pageX = s.startX + (maxX - thisX); + } + } + } + + return { ...s, endX: pageX }; + }); + }, + [draggingMarker, syncPointInfo] + ); + + useEffect(() => { + if (draggingMarker) { + document.addEventListener('mouseup', mouseUpListener); + document.addEventListener('mousemove', mouseMoveListener); + } + + return () => { + document.removeEventListener('mouseup', mouseUpListener); + document.removeEventListener('mousemove', mouseMoveListener); + }; + }, [draggingMarker, mouseUpListener, mouseMoveListener]); + + return ( +
+ {syncPointInfo.syncPointMarkers.map(m => ( +
onToggleMarker(m, e)} + onMouseDown={e => { + startMarkerDrag(m, e); + }}> +
{buildMarkerLabel(m)}
+
+
+ {m.markerType !== SyncPointMarkerType.EndMarker && m.modifiedTempo && ( +
{m.modifiedTempo.toFixed(1)} bpm
+ )} +
+
+
+ ))} +
+ ); +}; diff --git a/src/components/AlphaTabPlayground/waveform-canvas.tsx b/src/components/AlphaTabPlayground/waveform-canvas.tsx new file mode 100644 index 0000000..2d64c65 --- /dev/null +++ b/src/components/AlphaTabPlayground/waveform-canvas.tsx @@ -0,0 +1,207 @@ +import type React from 'react'; +import { useEffect, useRef } from 'react'; +import { timePositionToX } from './helpers'; + +export type WaveformCanvasProps = { + barNumberHeight?: number; + arrowHeight?: number; + + timeAxisHeight?: number; + timeAxisSubSecondTickHeight?: number; + timeAxisLineColor?: string; + + waveFormColor?: string; + pixelPerMilliseconds: number; + + leftPadding?: number; + zoom?: number; + + scrollOffset?: number; + + sampleRate: number; + leftSamples: Float32Array; + rightSamples: Float32Array; + + width: number; + height: number; +}; + +const defaultProps = { + barNumberHeight: 20, + arrowHeight: 20, + + timeAxisHeight: 20, + timeAxisSubSecondTickHeight: 5, + timeAxisLineColor: '#A5A5A5', + + waveFormColor: '#436d9d99', + + leftPadding: 0, + zoom: 1, + + scrollOffset: 0 +} satisfies Partial; + +type DrawWaveFormOptions = typeof defaultProps & WaveformCanvasProps; + +type CommonDrawInfo = { + waveFormY: number; + halfHeight: number; + startX: number; + endX: number; + zoomedPixelPerMillisecond: number; + samplesPerPixel: number; +}; + +const drawFrame = (ctx: CanvasRenderingContext2D, options: DrawWaveFormOptions, drawInfo: CommonDrawInfo) => { + ctx.fillStyle = options.timeAxisLineColor; + ctx.fillRect(0, drawInfo.waveFormY + 2 * drawInfo.halfHeight, ctx.canvas.width, 1); + ctx.fillRect(0, options.barNumberHeight, ctx.canvas.width, 1); + ctx.fillRect(0, drawInfo.waveFormY, ctx.canvas.width, 1); + ctx.fillRect(0, drawInfo.waveFormY + drawInfo.halfHeight, ctx.canvas.width, 1); +}; + +const drawSamples = (ctx: CanvasRenderingContext2D, options: DrawWaveFormOptions, drawInfo: CommonDrawInfo) => { + // NOTE: this is not very efficient. + // we likely should render main parts of the waveform once and reuse the drawn images? + // e.g. render multiple PNG chunks and simply show them. (re-draw on zoom) + ctx.save(); + + ctx.translate(-options.scrollOffset, 0); + + ctx.beginPath(); + + const startX = Math.max(options.scrollOffset - options.leftPadding, 0); + const endX = startX + ctx.canvas.width + options.leftPadding; + + const zoomedPixelPerMillisecond = options.pixelPerMilliseconds * options.zoom; + const samplesPerPixel = options.sampleRate / (zoomedPixelPerMillisecond * 1000); + + for (let x = startX; x < endX; x++) { + const startSample = (x * samplesPerPixel) | 0; + const endSample = ((x + 1) * samplesPerPixel) | 0; + + let maxTop = 0; + let maxBottom = 0; + for (let sample = startSample; sample <= endSample; sample++) { + const magnitudeTop = Math.abs(options.leftSamples[sample] || 0); + const magnitudeBottom = Math.abs(options.rightSamples[sample] || 0); + if (magnitudeTop > maxTop) { + maxTop = magnitudeTop; + } + if (magnitudeBottom > maxBottom) { + maxBottom = magnitudeBottom; + } + } + + const topBarHeight = Math.min(drawInfo.halfHeight, Math.round(maxTop * drawInfo.halfHeight)); + const bottomBarHeight = Math.min(drawInfo.halfHeight, Math.round(maxBottom * drawInfo.halfHeight)); + const barHeight = topBarHeight + bottomBarHeight || 1; + ctx.rect(x + options.leftPadding, drawInfo.waveFormY + (drawInfo.halfHeight - topBarHeight), 1, barHeight); + } + + ctx.fillStyle = options.waveFormColor; + ctx.fill(); + + ctx.restore(); +}; + +const drawTimeAxis = (ctx: CanvasRenderingContext2D, options: DrawWaveFormOptions, drawInfo: CommonDrawInfo) => { + ctx.save(); + ctx.translate(-options.scrollOffset, 0); + + ctx.fillStyle = options.timeAxisLineColor; + const style = window.getComputedStyle(ctx.canvas); + ctx.font = style.font; + ctx.textAlign = 'left'; + ctx.textBaseline = 'bottom'; + + const timeAxisY = drawInfo.waveFormY + 2 * drawInfo.halfHeight; + const leftTimeSecond = Math.floor( + (drawInfo.startX - options.leftPadding) / drawInfo.zoomedPixelPerMillisecond / 1000 + ); + const rightTimeSecond = Math.ceil(drawInfo.endX / drawInfo.zoomedPixelPerMillisecond / 1000); + + const leftTime = leftTimeSecond * 1000; + const rightTime = rightTimeSecond * 1000; + + let time = leftTime; + while (time <= rightTime) { + const timeX = timePositionToX(options.pixelPerMilliseconds, time, options.zoom, options.leftPadding); + ctx.fillRect(timeX, timeAxisY, 1, options.timeAxisHeight); + + const totalSeconds = Math.abs(time / 1000); + + const minutes = Math.floor(totalSeconds / 60); + const seconds = Math.floor(totalSeconds - minutes * 60); + + const sign = time < 0 ? '-' : ''; + const minutesText = minutes.toString().padStart(2, '0'); + const secondsText = seconds.toString().padStart(2, '0'); + + ctx.fillText(`${sign}${minutesText}:${secondsText}`, timeX + 3, timeAxisY + options.timeAxisHeight); + + const nextSecond = time + 1000; + while (time < nextSecond) { + const subSecondX = timePositionToX(options.pixelPerMilliseconds, time, options.zoom, options.leftPadding); + + ctx.fillRect(subSecondX, timeAxisY, 1, options.timeAxisSubSecondTickHeight); + + time += 100; + } + } + + ctx.restore(); +}; +const drawWaveform = (can: HTMLCanvasElement, options: DrawWaveFormOptions) => { + const ctx = can.getContext('2d')!; + ctx.clearRect(0, 0, can.width, can.height); + ctx.save(); + + const waveFormY = options.barNumberHeight + options.arrowHeight; + const halfHeight = ((ctx.canvas.height - waveFormY - options.timeAxisHeight) / 2) | 0; + const startX = Math.max(options.scrollOffset - options.leftPadding, 0); + const endX = startX + ctx.canvas.width + options.leftPadding; + const zoomedPixelPerMillisecond = options.pixelPerMilliseconds * options.zoom; + const samplesPerPixel = options.sampleRate / (zoomedPixelPerMillisecond * 1000); + + const drawInfo: CommonDrawInfo = { + waveFormY, + halfHeight, + startX, + endX, + zoomedPixelPerMillisecond, + samplesPerPixel + }; + + drawFrame(ctx, options, drawInfo); + drawSamples(ctx, options, drawInfo); + drawTimeAxis(ctx, options, drawInfo); +}; + +export const WaveformCanvas: React.FC = props => { + const waveFormCanvas = useRef(null); + + const realProps = { + ...defaultProps, + ...props + }; + + // watch all props by converting them to JSON, all props affect display + // but watching props directly causes re-draw on every component render. + const watchedProps = JSON.stringify({ + ...realProps, + leftSamples: null!, + rightSamples: null! + } satisfies WaveformCanvasProps); + + useEffect(() => { + if (waveFormCanvas.current) { + waveFormCanvas.current.width = props.width; + waveFormCanvas.current.height = props.height; + drawWaveform(waveFormCanvas.current, realProps); + } + }, [watchedProps, realProps.leftPadding, realProps.rightSamples, waveFormCanvas]); + + return ; +}; From cd25f0e834204c4e2201ed4343dab9db8f49be75 Mon Sep 17 00:00:00 2001 From: Daniel Kuschny Date: Thu, 29 May 2025 02:57:59 +0200 Subject: [PATCH 04/17] feat: YouTube Sync and CodeGen+Export (#134) --- docs/guides/audio-video-sync.mdx | 48 ++ docs/guides/media-sync-editor.mdx | 8 + docs/playground/playground.mdx | 9 +- src/components/AlphaTabPlayground/helpers.ts | 58 +- src/components/AlphaTabPlayground/index.tsx | 173 ++++- .../AlphaTabPlayground/media-sync-editor.tsx | 623 +++++++++++++----- .../playground-settings.tsx | 11 +- .../AlphaTabPlayground/styles.module.scss | 84 ++- .../AlphaTabPlayground/sync-point-info.ts | 246 ++++--- .../sync-point-marker-panel.tsx | 20 +- .../AlphaTabPlayground/waveform-canvas.tsx | 40 +- .../AlphaTabPlayground/youtube-player.tsx | 324 +++++++++ src/utils.ts | 13 + tsconfig.json | 9 +- 14 files changed, 1382 insertions(+), 284 deletions(-) create mode 100644 docs/guides/audio-video-sync.mdx create mode 100644 docs/guides/media-sync-editor.mdx create mode 100644 src/components/AlphaTabPlayground/youtube-player.tsx diff --git a/docs/guides/audio-video-sync.mdx b/docs/guides/audio-video-sync.mdx new file mode 100644 index 0000000..f38c905 --- /dev/null +++ b/docs/guides/audio-video-sync.mdx @@ -0,0 +1,48 @@ +--- +title: Audio & Video Sync +--- + +> [!WARNING] +> This guide is still incomplete and is currently being extended. + +alphaTab can be synchronized with an external audio or video backing track. You can either use Guitar Pro 8 files with an audio track or synchronize alphaTab with an external media using the +[Media Sync Editor in the Playground](/docs/playground/playground.mdx). + +At this point alphaTab cannot mix the synthesized audio and a backing track together, therefore only either audio will be heard. Using the synchronization information embedded in the data model, +alphaTab can then place the cursor correctly as an external media is taking over the audio. + +### Audio Backing Track + +alphaTab has built-in support for audio backing tracks. To play alphaTab with an audio backing track instead of synthesized audio, following prerequisites have to be fulfilled: + +1. The data model ships the backing track audio file. +2. The data model ships sync points which aligns the external audio track with the music notation. +3. You enabled the backing track via either `PlayerMode.EnabledAutomatic` or `PlayerMode.EnabledBackingTrack`. +4. Your platform (browser, operating system,...) has to support the embedded audio file. OGG Vorbis and MP3s are quite widely supported, and if used, there shouldn't be major problems. + +To tackle 1. and 2. you can use the Media Sync Editor we provide on our [Playground](/docs/playground/playground.mdx). Learn more about the editor [here](./media-sync-editor.mdx) + +### Guitar Pro 8 Files + +Since Version 8 Guitar Pro provides built-in audio tracks with the possibility to synchronize the backing track with the music sheet. If the audio file is embedded into the GP file, alphaTab can load and use +both the audio file and the sync point information. + +As mentioned above, alphaTab can only play **either** the external audio file **or** the synthesized audio. Also we do not support changes in the audio (like adjusting the pitch). + +Beside that you can load Guitar Pro 8 files and directly benefit from the enhanced sound experience. + +### Custom External Media Player + +alphaTab can be integrated with any external media system but it requires some implementation on the integrator side. To properly synchronize alphaTab and an external media source (audio or video) the `alphaTab.synth.IExternalMediaHandler` interface has to be implemented and provided to alphaTab. + +#### YouTube + +YouTube is a great counterpart to alphaTab to provide audio and video for your music sheet. Until now we decided to NOT ship a direct YouTube integration as there are quite some implications to it. +Some key reasons behind this is: + +1. alphaTab is a cross-platform toolkit. While integrating a YouTube player in the web is easy, SDKs for Android or Desktop platforms are way more complex. We want to keep this on the integrator side. +2. Looking at data protection laws like GDPR, users have to accept the load and integration of such external media. We want to be sure devs take proper care asking users for consent where required. +3. The integration of the YouTube player requires further considerations in your user interface (sizing, where to place it, how to configure the YouTube player). + +Nevertheless we want to give you some guidance on how to link alphaTab to YouTube. The following steps show how to use the [YouTube Player API Reference for iframe Embeds](https://developers.google.com/youtube/iframe_api_reference) together with alphaTab. + diff --git a/docs/guides/media-sync-editor.mdx b/docs/guides/media-sync-editor.mdx new file mode 100644 index 0000000..7d75f6c --- /dev/null +++ b/docs/guides/media-sync-editor.mdx @@ -0,0 +1,8 @@ +--- +title: Media Sync Editor +--- + +This guide is about the Media Sync Editor we provide as part of our [Playground](/docs/playground/playground.mdx). + +> [!WARNING] +> This guide is still incomplete and is currently being extended. \ No newline at end of file diff --git a/docs/playground/playground.mdx b/docs/playground/playground.mdx index 78f9e98..3118f32 100644 --- a/docs/playground/playground.mdx +++ b/docs/playground/playground.mdx @@ -8,11 +8,4 @@ import { AlphaTabPlayground } from "@site/src/components/AlphaTabPlayground"; - \ No newline at end of file + \ No newline at end of file diff --git a/src/components/AlphaTabPlayground/helpers.ts b/src/components/AlphaTabPlayground/helpers.ts index b81a805..6813f09 100644 --- a/src/components/AlphaTabPlayground/helpers.ts +++ b/src/components/AlphaTabPlayground/helpers.ts @@ -7,6 +7,13 @@ export function timePositionToX(pixelPerMilliseconds: number, return timePosition * zoomedPixelPerMilliseconds + leftPadding; } +export function xToTimePosition(pixelPerMilliseconds: number, + x: number, zoom: number, leftPadding: number): number { + + const zoomedPixelPerMilliseconds = pixelPerMilliseconds * zoom; + return (x - leftPadding) / zoomedPixelPerMilliseconds; +} + type UndoStack = { undo: SyncPointInfo[]; redo: SyncPointInfo[]; @@ -60,4 +67,53 @@ export const useSyncPointInfoUndo = () => { }); } } -}; \ No newline at end of file +}; + +export type HTMLMediaElementLikeEvents = 'timeupdate' | 'durationchange' | 'seeked' | 'play' | 'pause' | 'ended' | 'volumechange' | 'ratechange' | 'loadedmetadata'; + +export interface HTMLMediaElementLike { + currentTime: number; + volume: number; + playbackRate: number; + readonly duration: number; + addEventListener(eventType: HTMLMediaElementLikeEvents, handler: () => void): void; + removeEventListener(eventType: HTMLMediaElementLikeEvents, handler: () => void): void; + + play(): void; + pause(): void; +} + +export function extractYouTubeVideoId(src: string | undefined) { + try { + if (!src) { + return undefined; + } + const url = new URL(src); + const host = url.host.toLowerCase(); + if (host.endsWith('youtube.com') && url.searchParams.has('v')) { + return url.searchParams.get('v')!; + } + if (host.endsWith('youtube-nocookie.com')) { + return url.pathname.split('/')[2]; + } + if (host.endsWith('youtu.be')) { + return url.pathname.split('/')[1]; + } + } catch (e) { + return undefined; + } +} + + +export enum MediaType { + Synth = 0, + Audio = 1, + YouTube = 2 +} + +export interface MediaTypeState { + type: MediaType; + audioFile?: Uint8Array + youtubeUrl?: string; + youtubeVideoDuration?: number; +} \ No newline at end of file diff --git a/src/components/AlphaTabPlayground/index.tsx b/src/components/AlphaTabPlayground/index.tsx index ecbff9a..48ed20d 100644 --- a/src/components/AlphaTabPlayground/index.tsx +++ b/src/components/AlphaTabPlayground/index.tsx @@ -1,7 +1,7 @@ 'use client'; import * as alphaTab from '@coderline/alphatab'; -import React, { useState } from 'react'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; import { useAlphaTab, useAlphaTabEvent } from '@site/src/hooks'; import styles from './styles.module.scss'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; @@ -12,25 +12,26 @@ import { PlaygroundSettings } from './playground-settings'; import { Tooltip } from 'react-tooltip'; import { PlaygroundTrackSelector } from './track-selector'; import { MediaSyncEditor } from './media-sync-editor'; +import { type HTMLMediaElementLike, MediaType, type MediaTypeState } from './helpers'; +import { YouTubePlayer } from './youtube-player'; -interface AlphaTabPlaygroundProps { - settings?: alphaTab.json.SettingsJson; -} - -export const AlphaTabPlayground: React.FC = ({ settings }) => { +export const AlphaTabPlayground: React.FC = () => { const viewPortRef = React.createRef(); const [isLoading, setLoading] = useState(true); const [sidePanel, setSidePanel] = useState(SidePanel.None); const [bottomPanel, setBottomPanel] = useState(BottomPanel.None); + const [mediaType, setMediaType] = useState({ + type: MediaType.Synth + }); + const youtubePlayer = useRef(null); const [api, element] = useAlphaTab(s => { s.core.engine = 'svg'; + s.core.file = '/files/canon-full.gp'; + s.core.tracks = [0, 1]; s.player.scrollElement = viewPortRef.current!; s.player.scrollOffsetY = -10; - s.player.playerMode = alphaTab.PlayerMode.EnabledAutomatic; - if (settings) { - s.fillFromJson(settings); - } + s.player.playerMode = alphaTab.PlayerMode.EnabledSynthesizer; }); useAlphaTabEvent(api, 'renderFinished', () => { @@ -56,6 +57,144 @@ export const AlphaTabPlayground: React.FC = ({ settings } }; + const youtubePlayerUnsubscribe = useRef<() => void>(null); + const setYoutubePlayer = useCallback( + (newPlayer: HTMLMediaElementLike) => { + if (youtubePlayerUnsubscribe.current) { + youtubePlayerUnsubscribe.current(); + youtubePlayerUnsubscribe.current = null; + } + + if (newPlayer && api) { + youtubePlayer.current = newPlayer; + + const onLoadedMetadata = () => { + setMediaType(t => ({ + ...t, + youtubeVideoDuration: newPlayer.duration * 1000 + })); + }; + const onTimeUpdate = () => { + if (api!.actualPlayerMode === alphaTab.PlayerMode.EnabledExternalMedia) { + (api!.player!.output as alphaTab.synth.IExternalMediaSynthOutput).updatePosition( + newPlayer.currentTime * 1000 + ); + } + }; + + const onPlay = () => { + api.play(); + }; + const onPause = () => { + api.pause(); + }; + + const onEnded = () => { + api.pause(); + }; + + const onVolumeChange = () => { + api.masterVolume = newPlayer.volume; + }; + + const onRateChange = () => { + api.playbackSpeed = newPlayer.playbackRate; + }; + + newPlayer.addEventListener('loadedmetadata', onLoadedMetadata); + newPlayer.addEventListener('timeupdate', onTimeUpdate); + newPlayer.addEventListener('seeked', onTimeUpdate); + newPlayer.addEventListener('play', onPlay); + newPlayer.addEventListener('pause', onPause); + newPlayer.addEventListener('ended', onEnded); + newPlayer.addEventListener('volumechange', onVolumeChange); + newPlayer.addEventListener('ratechange', onRateChange); + newPlayer.addEventListener('volumechange', onVolumeChange); + newPlayer.addEventListener('ratechange', onRateChange); + + youtubePlayerUnsubscribe.current = () => { + newPlayer.removeEventListener('loadedmetadata', onLoadedMetadata); + newPlayer.removeEventListener('timeupdate', onTimeUpdate); + newPlayer.removeEventListener('seeked', onTimeUpdate); + newPlayer.removeEventListener('play', onPlay); + newPlayer.removeEventListener('pause', onPause); + newPlayer.removeEventListener('ended', onEnded); + newPlayer.removeEventListener('volumechange', onVolumeChange); + newPlayer.removeEventListener('ratechange', onRateChange); + newPlayer.removeEventListener('volumechange', onVolumeChange); + newPlayer.removeEventListener('ratechange', onRateChange); + }; + } + }, + [api] + ); + + useEffect(() => { + if (!api) { + return; + } + + api.pause(); + switch (mediaType.type) { + case MediaType.Synth: + api.settings.player.playerMode = alphaTab.PlayerMode.EnabledSynthesizer; + api.updateSettings(); + break; + + case MediaType.Audio: + api.settings.player.playerMode = alphaTab.PlayerMode.EnabledBackingTrack; + api.updateSettings(); + + break; + + case MediaType.YouTube: + api.settings.player.playerMode = alphaTab.PlayerMode.EnabledExternalMedia; + api.updateSettings(); + + const handler: alphaTab.synth.IExternalMediaHandler = { + get backingTrackDuration() { + const duration = youtubePlayer.current?.duration ?? 0; + return Number.isFinite(duration) ? duration * 1000 : 0; + }, + get playbackRate() { + return youtubePlayer.current?.duration ?? 1; + }, + set playbackRate(value) { + if (youtubePlayer.current) { + youtubePlayer.current.playbackRate = value; + } + }, + get masterVolume() { + return youtubePlayer.current?.volume ?? 1; + }, + set masterVolume(value) { + if (youtubePlayer.current) { + youtubePlayer.current.volume = value; + } + }, + seekTo(time) { + if (youtubePlayer.current) { + youtubePlayer.current.currentTime = time / 1000; + } + }, + play() { + if (youtubePlayer.current) { + youtubePlayer.current.play(); + } + }, + pause() { + if (youtubePlayer.current) { + youtubePlayer.current.pause(); + } + } + }; + + (api.player!.output as alphaTab.synth.IExternalMediaSynthOutput).handler = handler; + + break; + } + }, [api, mediaType]); + return ( <>
@@ -87,11 +226,23 @@ export const AlphaTabPlayground: React.FC = ({ settings
+ + {mediaType.type === MediaType.YouTube && ( +
+ +
+ )}
{api && api?.score && bottomPanel === BottomPanel.MediaSyncEditor && ( - + setMediaType(t)} + youtubePlayer={youtubePlayer.current ?? undefined} + /> )} {api && ( { - const [audioElement, setAudioElement] = useState(null); +const useMediaElementPlaybackTime = ( + api: alphaTab.AlphaTabApi, + youtubePlayer: HTMLMediaElementLike | undefined +): [number, React.Dispatch>] => { + const [mediaElement, setMediaElement] = useState(null); const [playbackTime, setPlaybackTime] = useState(0); + const updateMediaElement = () => { + switch (api.actualPlayerMode) { + case alphaTab.PlayerMode.EnabledBackingTrack: + setMediaElement( + (api.player!.output as alphaTab.synth.IAudioElementBackingTrackSynthOutput)?.audioElement ?? null + ); + break; + case alphaTab.PlayerMode.EnabledExternalMedia: + setMediaElement(youtubePlayer ?? null); + break; + default: + setMediaElement(null); + } + }; + + useEffect(() => {}, [youtubePlayer]); + useEffect(() => { - setAudioElement( - (api.player!.output as alphaTab.synth.IAudioElementBackingTrackSynthOutput)?.audioElement ?? null - ); + updateMediaElement(); }, [api.player!.output]); + useEffect(() => { + updateMediaElement(); + }, [youtubePlayer]); + useAlphaTabEvent(api, 'midiLoad', () => { - setAudioElement( - (api.player!.output as alphaTab.synth.IAudioElementBackingTrackSynthOutput)?.audioElement ?? null - ); + updateMediaElement(); }); useEffect(() => { const updateWaveFormCursor = () => { - if (audioElement) { - setPlaybackTime(audioElement.currentTime * 1000); + if (mediaElement) { + setPlaybackTime(mediaElement.currentTime * 1000); } }; let timeUpdate: number = 0; - if (audioElement) { - audioElement.addEventListener('timeupdate', updateWaveFormCursor); - audioElement.addEventListener('durationchange', updateWaveFormCursor); - audioElement.addEventListener('seeked', updateWaveFormCursor); + if (mediaElement) { + mediaElement.addEventListener('timeupdate', updateWaveFormCursor); + mediaElement.addEventListener('durationchange', updateWaveFormCursor); + mediaElement.addEventListener('seeked', updateWaveFormCursor); timeUpdate = window.setInterval(() => { - if (audioElement) { - setPlaybackTime(audioElement.currentTime * 1000); + if (mediaElement) { + setPlaybackTime(mediaElement.currentTime * 1000); } }, 50); updateWaveFormCursor(); } return () => { - if (audioElement) { - audioElement.removeEventListener('timeupdate', updateWaveFormCursor); - audioElement.removeEventListener('durationchange', updateWaveFormCursor); - audioElement.removeEventListener('seeked', updateWaveFormCursor); + if (mediaElement) { + mediaElement.removeEventListener('timeupdate', updateWaveFormCursor); + mediaElement.removeEventListener('durationchange', updateWaveFormCursor); + mediaElement.removeEventListener('seeked', updateWaveFormCursor); window.clearInterval(timeUpdate); } }; - }, [audioElement]); + }, [mediaElement]); - return playbackTime; + return [ + playbackTime, + (playbackTime: number) => { + if (mediaElement) { + mediaElement.currentTime = playbackTime / 1000; + } + } + ]; }; -export const MediaSyncEditor: React.FC = ({ api, score }) => { +export type MediaSyncEditorProps = { + api: alphaTab.AlphaTabApi; + score: alphaTab.model.Score; + youtubePlayer?: HTMLMediaElementLike; + mediaType: MediaTypeState; + onMediaTypeChange(newMediaType: MediaTypeState): void; +}; + +export const MediaSyncEditor: React.FC = ({ + api, + score, + youtubePlayer, + mediaType, + onMediaTypeChange +}) => { const syncArea = useRef(null); const [canvasSize, setCanvasSize] = useState([0, 0]); const [virtualWidth, setVirtualWidth] = useState(0); const [zoom, setZoom] = useState(1); const [scrolOffset, setScrollOffset] = useState(0); + const [newYoutubeUrl, setNewYoutubeUrl] = useState(''); const [syncPointInfo, setSyncPointInfo] = useState({ endTick: 0, @@ -99,20 +152,37 @@ export const MediaSyncEditor: React.FC = ({ api, score }) }); const shouldStoreToUndo = useRef(false); - const shouldApplySyncPoints = useRef(false); - const shouldCreateInitialSyncPoints = useRef(false); const undo = useSyncPointInfoUndo(); - const playbackTime = useAudioElementPlaybackTime(api); + const [playbackTime, setPlaybackTime] = useMediaElementPlaybackTime(api, youtubePlayer); // Sync Point Info building and update - const initFromApi = () => { + const initFromApi = useCallback(() => { undo.resetUndo(); shouldStoreToUndo.current = true; - buildSyncPointInfoFromApi(api, shouldCreateInitialSyncPoints.current).then(x => setSyncPointInfo(x)); - shouldCreateInitialSyncPoints.current = false; - }; + switch (mediaType.type) { + case MediaType.Synth: + const synthInfo = buildSyncPointInfoFromSynth(api); + if (synthInfo) { + setSyncPointInfo(synthInfo); + } + break; + case MediaType.Audio: + buildSyncPointInfoFromAudio(api).then(x => { + if (x) { + setSyncPointInfo(x); + } + }); + break; + case MediaType.YouTube: + const youtubeInfo = buildSyncPointInfoFromYoutube(api, youtubePlayer); + if (youtubeInfo) { + setSyncPointInfo(youtubeInfo); + } + break; + } + }, [api, youtubePlayer, mediaType]); useAlphaTabEvent( api, @@ -120,12 +190,12 @@ export const MediaSyncEditor: React.FC = ({ api, score }) () => { initFromApi(); }, - [shouldCreateInitialSyncPoints] + [] ); useEffect(() => { initFromApi(); - }, [api]); + }, [api, youtubePlayer, mediaType]); useEffect(() => { // store to undo if needed @@ -134,20 +204,18 @@ export const MediaSyncEditor: React.FC = ({ api, score }) shouldStoreToUndo.current = false; } - // apply if needed - if (shouldApplySyncPoints) { - applySyncPoints(api, syncPointInfo); - shouldApplySyncPoints.current = false; - } + applySyncPoints(api, syncPointInfo); }, [syncPointInfo]); // cursor handling + const lastScroll = useRef(0); useEffect(() => { - if (syncArea.current) { + if (syncArea.current && (lastScroll.current === 0 || performance.now() - lastScroll.current > 500)) { const xPos = timePositionToX(pixelPerMilliseconds, playbackTime, zoom, leftPadding); const canvasWidth = canvasSize[0]; const threshold = canvasWidth * scrollThresholdPercent; const scrollOffset = syncArea.current.scrollLeft; + lastScroll.current = performance.now(); // is out of screen? if (xPos < scrollOffset + threshold || xPos - scrollOffset > canvasWidth - threshold) { @@ -159,6 +227,15 @@ export const MediaSyncEditor: React.FC = ({ api, score }) } }, [playbackTime, canvasSize, syncArea]); + const [isYoutubeModalOpen, setYoutubeModalOpen] = useState(false); + const [isGenerateCodeModalOpen, setGenerateCodeModalOpen] = useState(false); + const onLoadYouTube = () => { + setNewYoutubeUrl(mediaType.youtubeUrl ?? ''); + setYoutubeModalOpen(true); + }; + + const newYoutubeUrlError = extractYouTubeVideoId(newYoutubeUrl) ? '' : 'Invalid YouTube URL or video ID'; + // UI parts useResizeObserver(syncArea, entry => { setCanvasSize([entry.contentRect.width, entry.contentRect.height]); @@ -182,16 +259,10 @@ export const MediaSyncEditor: React.FC = ({ api, score }) score.backingTrack = new alphaTab.model.BackingTrack(); score.backingTrack.rawAudioFile = new Uint8Array(e.target!.result as ArrayBuffer); - // create a fresh set of sync points upon load (start->end) - shouldApplySyncPoints.current = true; - shouldCreateInitialSyncPoints.current = true; - - // clear any potential sync points - for (const m of score.masterBars) { - m.syncPoints = undefined; - } - api.updateSettings(); - api.loadMidiForScore(); // will fire the initialization above once ready. + onMediaTypeChange({ + type: MediaType.Audio, + audioFile: score.backingTrack.rawAudioFile + }); }; reader.readAsArrayBuffer(input.files[0]); } @@ -201,8 +272,20 @@ export const MediaSyncEditor: React.FC = ({ api, score }) document.body.removeChild(input); }; + const onLoadYouTubeVideo = (url: string) => { + onMediaTypeChange({ + type: MediaType.YouTube, + youtubeUrl: newYoutubeUrl + }); + }; + + const onLoadSynthesizer = () => { + onMediaTypeChange({ + type: MediaType.Synth + }); + }; + const onResetSyncPoints = () => { - shouldApplySyncPoints.current = true; shouldStoreToUndo.current = true; setSyncPointInfo(s => { return s ? resetSyncPoints(api, s) : s; @@ -210,7 +293,6 @@ export const MediaSyncEditor: React.FC = ({ api, score }) }; const onAutoSync = () => { - shouldApplySyncPoints.current = true; shouldStoreToUndo.current = true; setSyncPointInfo(s => { return s ? autoSync(s, api) : s; @@ -219,114 +301,323 @@ export const MediaSyncEditor: React.FC = ({ api, score }) return (
-
- - -
- -
+
+
+ )} + + {isGenerateCodeModalOpen && ( +
+
+

Generate Sync Code

+ The following code helps you setting up the sync points in your app. The exact logic depends on + your app, but generally you would store the sync points in parallel to the file (e.g. in a + database) and load them along the main file. Then when the file is loaded by alphaTab you + additionally apply the sync points. + + + + {[ + 'const syncPoints: alphaTab.model.FlatSyncPoints[] = [', + syncPointsToTypeScriptCode(syncPointInfo, ' '), + '];' + ].join('\n')} + + + {[ + '// Variant 1: constant/data available when score is loaded.', + 'api.scoreLoaded.on(score => {', + ' score.backingTrack = new alphaTab.model.BackingTrack();', + ' score.backingTrack.rawAudioFile = rawAudioFileBytes /*Uint8Array*/;', + ' score.applyFlatSyncPoints(syncPoints);', + '});', + '', + '// Variant 2: dynamic load and apply', + 'const syncPoints: alphaTab.model.FlatSyncPoints[] = await loadSyncPointsForScoreFromBackend(score);', + 'const rawAudioFileBytes: Uint8Array = await loadAudioForScoreFromBackend(score);', + 'api.score.applyFlatSyncPoints(syncPoints);', + 'api.score.backingTrack = new alphaTab.model.BackingTrack();', + 'api.score.backingTrack.rawAudioFile = rawAudioFileBytes;', + 'api.updateSettings(); // ensures the right backing track player is started', + 'api.updateSyncPoints(); // updates the sync points in the player' + ].join('\n')} + + + + + {[ + 'var syncPoints = new AlphaTab.Model.FlatSyncPoints[]', + '{', + syncPointsToCSharpCode(syncPointInfo, ' '), + '};' + ].join('\n')} + + + {[ + '// Variant 1: constant/data available when score is loaded.', + 'api.ScoreLoaded.On(score =>', + '{', + ' score.BackingTrack = new AlphaTab.Model.BackingTrack();', + ' score.BackingTrack.RawAudioFile = rawAudioFileBytes;', + ' score.ApplyFlatSyncPoints(syncPoints);', + '});', + '', + '// Variant 2: dynamic load and apply', + 'var syncPoints = await LoadSyncPointsForScore(score);', + 'var rawAudioFileBytes = await LoadAudioForScore(score);', + 'api.Score.ApplyFlatSyncPoints(syncPoints);', + 'api.Score.BackingTrack = new AlphaTab.Model.BackingTrack();', + 'api.Score.BackingTrack.RawAudioFile = rawAudioFileBytes;', + 'api.UpdateSettings(); // ensures the right backing track player is started', + 'api.UpdateSyncPoints(); // updates the sync points in the player' + ].join('\n')} + + + + + {[ + 'val syncPoints: Array = arrayOf(', + syncPointsToKotlinCode(syncPointInfo, ' '), + ')' + ].join('\n')} + + + {[ + '// Variant 1: constant/data available when score is loaded.', + 'api.scoreLoaded.on{ score ->', + ' score.backingTrack = alphaTab.model.BackingTrack();', + ' score.backingTrack.rawAudioFile = rawAudioFileBytes;', + ' score.applyFlatSyncPoints(syncPoints);', + '}', + '', + '// Variant 2: dynamic load and apply', + 'val syncPoints = loadSyncPointsForScore(score);', + 'val rawAudioFileBytes = loadAudioForScore(score);', + 'api.score.applyFlatSyncPoints(syncPoints);', + 'api.score.backingTrack = alphaTab.model.BackingTrack();', + 'api.score.backingTrack.rawAudioFile = rawAudioFileBytes;', + 'api.updateSettings(); // ensures the right backing track player is started', + 'api.updateSyncPoints(); // updates the sync points in the player' + ].join('\n')} + + + +
+
+ )} - - - - - - - - - +
+
+
+ + + +
+ + + + + + + + + + + +
+ +
+ {mediaType.type === MediaType.Audio && ( + + )} + {(mediaType.type === MediaType.YouTube || mediaType.type === MediaType.Audio) && ( + + )} +
= ({ api, score }) leftPadding={leftPadding} leftSamples={syncPointInfo.leftSamples} rightSamples={syncPointInfo.rightSamples} + endTime={syncPointInfo.endTime} sampleRate={syncPointInfo.sampleRate} pixelPerMilliseconds={pixelPerMilliseconds} scrollOffset={scrolOffset} @@ -353,17 +645,18 @@ export const MediaSyncEditor: React.FC = ({ api, score }) pixelPerMilliseconds={pixelPerMilliseconds} zoom={zoom} onSyncPointInfoChanged={newInfo => { - shouldApplySyncPoints.current = true; shouldStoreToUndo.current = true; setSyncPointInfo(newInfo); }} + onSeek={pos => { + setPlaybackTime(pos); + }} />
= ({ api, isO +
+
+ {tex} + + ); +}; diff --git a/src/components/AlphaTexSyncPointSample/styles.module.scss b/src/components/AlphaTexSyncPointSample/styles.module.scss new file mode 100644 index 0000000..d17258c --- /dev/null +++ b/src/components/AlphaTexSyncPointSample/styles.module.scss @@ -0,0 +1 @@ +@import '../AlphaTab/styles.module.scss' \ No newline at end of file diff --git a/static/files/Bach_Prelude_BWV999.ogg b/static/files/Bach_Prelude_BWV999.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5a5fb472785608f23e04d85311faf4a982d95cc1 GIT binary patch literal 500873 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

Q7wFq%0m2J#^L$HmBr>40x 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≻cI=vUh_>VBRNm8-$2}35vxp5$R&bGg!`+0odscP)z^VNq z)#^icOPc&q+F3&{WSgJrwr&W4$gEQ1`)f@>W!_Nc>xO~xi+^sy%|hEWf;@OVU%k%; zv#TXmTnK$C#n-GZ2ajD{kGg3g_RgCeYmV^@lVhvT!r#7fbi9pjx|U#A9IoGQSP?%? zWFZ(%t`tn0fAnpj>-V4Zbp8=N!rW{DALXz+E$ZW73W#?3t{mH z`}HFGLgMOSSbB(@<>Fc3=|D&W>9L<0tI0;4?6zN}xB|AMN)$1TS#RH|y7AeUf90fM z52pBVaIl>#0u$Cw8yCf{;?K(NjP6}+J%#r#WETAxcH=ObZ7O~^Fk^-PSnW2 zlshdK(i)VWfhjs1Hg?wi*4{@-1#}7RY*F~8hJ&mJoyjKa<~y!O8R#Q;cly|(bylY} z-bpppilfH5s~B;GZH>*$C$WO{lWJ9%?Z(OG!w7RN%j-ceV|ummlrCR_W9fCV$1Sge zy)tefP+8Kyo@QB|;(Yca4wRnTIQtp)If?I$`N@>{M~&aQW2}Og-{dMs;cyhr+M52O z__e}LXYs2IqbW*t`LBn_laJnBe;SPCwcetHLYp7Uk6FCk{A$p48djLSAEiyyzgp)o za_|S)xg0%t9@Rj1zV8bkYM?APR-aE56?_r!H-G|XEko5F?RGIVTsHTdY{^}~u;=W9 zlurJ1WxtR2Df;g6zrib>KejuHlQ{!;+$6dwPwC^Hyr8p3RUQ{`-C6JEdzM7WZ@HW_ z{;GveSW5iR)jD@7&N3>u)Rey?}Q2I(e(`TINMPs})e-~Sl>}8&U z$<^Hg<(kCl%!bOl+v@e&ooQF|JQ5#o#I}EFvPp-nsSMBw%Fn-T5VU%UKEFOyBW(*t zcWOHi!t6O3RSJK&bmWPd^`4KFn&O^!Sw)aBc8dKrr+koZ;y#wFYDBGVqkp!+bCix| zrmsAnzG}Q&2u+i+skEBflRx#Tyy^`i9%-CUu*@k|^s=!Kcc5K5e#0bWo56F<5ghW0 zE%tNk`T9e~kV&%>EijFQmVB?d`r#?c`Ue+ggxc-VofVc>AaM zz0GajXAP&J4c+GySA2KpO*_j}v9Gp=Q`t-Y{Hwa4#?M-Ml(rsP_~2TFUA`@Rf1q0B z+G3>?uR1qp{|m+0QRGl#?6eWdsBiPR!(>_4?KGKBN=h+j3QT%`m{(+%#cs2WJ^Gf) zW=fT3DO4cEIkYLfOd!XHMiInO9Q0lYsJ81Pn zkGU)Z#K&ZQx+B63QA3Ft50D3+*bN1-2_cp9iA%hG8o)@C0Je_2E%M1@zo=J1#Jn$q>zZpja=_QEnrkLQzyd;_-#~@EB)Blxp5vde8}?6L!eH1B*4#-a@(^(d z6T6N3!!Q>J^|*%zD12~$LM6RE>s@gbTf1u;o_Olde^Xyz1R&AD+Zm2F4U(mQ zl7FZ##wL(*@w*yGx3~MO85_a=x=p^ZkIocC9#TTYn>${6dQsfJ*$d-Krh~-WHe}C3 z&=hprI=V%_u8*&$k0gwJo|*&;6}Z`<6LTYzN`gY2!Xe`t6^9;KnocG z#&KWo{kdI3N(QZ_GaELm_Z8pPBg|dtaR{)gKk|g^Id@jmj;ylPO`UEXS0^s~@#B0J z|EkctvFt!a%j6?)rdKqU3Lc^YBEAugpF`#!EBA@Jt2qK!-nR<-I&KtLc<<%^)Csm`Gf2_m#{Py@nSyW#ixrqDC2W?})fMHT(aTc@*>f{f z%4p@&?L}R$yyCUN#=_Fnm8O|1X7y7MChb>s*Nriw`Dbkml@@33x6gOuhZ3f@48~?l zR}+@4$BJH$mvau5mprKPs=Dm5`gr(gQo)DiZB^Dfy5i((;g1)Lb*pDn(&5Wz?}fMD z`HD$KWB{?sSO`dhL>PJs}y$KKS_nn z6}&k)3HK#Z;uwP`1>=aX`5+XGwQuCo=C0q;F|FgasY3@&AYtL!S;bY#m1XKD)Os4P zLM?)V2jl@l!tC@e8$$m>y|j(Kuq%Z+UYPoYxo*eE6V0uXBU#4oizg-F=JrMN(KR0C_#B#TlwdVfk}YYt133A&lG@<({(d+)xPhG* z0$g=02ipPCYRHIS793j224Abaxli$dyn*x87bt5Ph@O!Oc$LN=t;`ED3+O&GKUB`7 z0;CnJjLj|TXX8NCDK(LPorgP%U?;%GZl$L0&e7H65-!1lSbu^XAka+$kWVDeCF$=Z zA&C`XpXgmdKh8VKS5KcTXMD4bByw=<$Oua&tv;_GLyo3S7sW8rSeP80-i5N5EU;}J zGP|lyOWpDiB^V^6Xn5;hl%7zbH%@dTGvu+vS=7JRz}e0jS*J`19V#Pddp0edzj^HK zyT#=PBg0V*_GXbI4$_p}@Ueiv2@aiuRtmQj4ZVJRk~o#EgQKbkOZTnKga4@*k@QG! zHFz{jd}LX*7W@9nXawn(dr2<{+5P^#bO8LG4_ejlK3zzdN*J(yBxY$BY_tR{CwBN) zqu~g=tsvvA!lKS+O-{t^l-SBGe$md)@XHWjezFcsDB0X9(qRKl3Kj6L7c7G2<_`%D zd+nM8Ye^v0xRA$&Zt_vVDfxXC=NSOo4RJ5L=jk$h`caY*(2e~1l1j{_Ae6O+QXLZl za{{DrW91OYRd_+C*a9mUOj*%e!TMi~o_9>N6YD?W9E4DeOfxmXux5}9QTz+cFNCbo z>%g2zet?pmqL#tzDyd)$&&UH61Q9XnYTHTYmw6@-BBL(qKF*Stl*cCz`$n^?7p%`E zt=zW6!yYw^i9rM?NCfcY2tw@vZnlVwmgCziyef$Z4RX1lR%H8=7nTk>dV771%k)o6 z$RN-T&#Z_C0At>U3z6y@T4Ujt^m6Vo5WcpvBsPN5f1C}Ty|wx*Mq_#FPu=Vt9@jl0 zG`h-gvv~57(|*6+V7qdfgX=cd2z!T!XL5h_cD{f$k6N$d+Ta*Z^NH2(`ZO(jeZijw z8T%YX1&&h1D}T>tZ9Z|H6{xI5j`$PpC`v=FGl~eiWncRk8BGw5M!Nj0fe$` zFb5pIA-i>-mpb4^Htv53)(0pkfW&TTm!$}E@6lkUyU=FIev$IEqBD>g0^>;(e+J0) zzK{%A!Crzhyw5;bI2~p17Y4VUgE_nF{|5?BPKF{v$vv=>AnKNhN9SB4x zwNWB8q*zLVl)zO+a3rHsO&}TlkOWdhhBlS}_;nD$qz4E=$PEwhIW)G#(F-g^&@k+P z7eo^ftB3(|!EXMAG7EhP_3fr*t^H1+wC!i;D^^D%3(>k;Q5+0PT}T~_4e&_{+dai6w(*KxVgATq zUYfAGhJ!j67fNYURIu;)ZEpLe^2@}MMniXJ1)K>HNg1VDJv>v4vO5U6F!4u&AWTZ* zM8A&55u*LRUJRcXx?u=Bf|4yfjG8pEx)k=~gv) z8AG)fTQ3WKAYW(oPuTYwVFQRE9nWErl@Ud9nkVX^uAGcofIxaQd7n^mhy%MdaMY;2 zNy^oeNf1D`6lE+`ysB%1u4o6}%_(fk@w;4DWVQtq^x=$QI`w24@ckgm#ZU49mS?r!nwi+ar3l0T1s zyG!Mj#V!i$6Ym>rD$3;iE7hYH`6lB-uGM94?CG;ZYNCh|HpTj|X^e`xwcLh@R-JN_ z+PfDNmr^{cD1MSz?b^Kc-`;+WOzjsryREA-oE;RQx9gYwE0RBx zuji0@tgc!;d!nk#zo2fm`7}I7^NGvfX`AAw>^KtX8|ctn@_)R&egzkT=Jx$Vfy9A~ zyKWV4kSwM0@81HaD6O9Q^DE69b}l==)zSSqvcsA;zt^LvMkJt-z|G3-!pGIkXlTB0 zEJK%E*M}9>$$x_zF zaNz6b+a8v`{Pk<%{zpX|Zr2a4S{h2zfs->$?%l)RFo0RUaJPey1tA7pfXAiQ?-?XP zQG~t21Q8c_3md2;nV*KpzI_S!*U{{{bq9))JralBjrPkDK?Mz7+~*$6v!DjYnSva& zcZC84z=eyT@2Gx8w7~rCCxS5tJ8lO5-0m6~lff2G^TZ28iy%POwZ{U?m=qEcgVv^D zYu};tb}%=g0%m;3MNA*X1dy~7V?jpUO+ld->ueH8BSMfjt$7 z01U_?KhaQL7eiowhq5rOBo;%`q4hjK%UqTGlgrcRY1r*!PcnB8p+xhT_u*wDg%MoT zAMW&1vh-<;`Z(es#P3dp-B-7ne1?_f-~YJbPRn6i&|{@pg2eP+m%Q5I06*Do`UcC| zQ5c#i%&Lm|N=%N0kjC#c*I3=W&)Ltset)Xcgi+q!v9bL_Rr_S?w?u*NyK!224??(x zZg{tGZPCJ`CT_5|Ce%;qL$kKbS6G)5trU(J6wXewr(h9Z9}c4H*bME@tU>6|$3ggn zKW7Uf?p4%xl}{zMX|E%DfZG%-kFk z1iqSq7|*|k5uT4jp8wkdIW_eEMlYaJXe-{U{3nV!Z!Hcu{ymIbdZhQ6w9&t9JdV@N z=l_HSZ3xNFy)+OU0#pFe#U8{T5jyfXl6?2<0LtPQe{Lv}cNjMIC78&1L;AtB&e>09O3|BU;95r zSIG;-r7_PQn&U-5lrsB!jUlexkNM-zeWv4$PJ9&e%cf|ATP11}%pSMQ<5Zed``M=2 zz*VeIblf1wQ0}o~U>khMG+B9jUQ4I`LFy+wC7K|@|ik19B@kpz%=lYybr>NAQs_OTJTmK1$2N2vFfg;j{|!M3k-9xN`i1d&LVavEoC=k zxeyyoG~bIPDYQiIUB>l4S{}E*B!Zdd-NV7Y)A{J`{n};av^}4jpQI5-{r<{hs4YK1 zki%^sy@-8V^I`3H$%`EK1GU|ogEpN3Q@T%SqV3_#Z}YJA&{VldP+c~@N^Kj*hMNw` zSr3I{weloI-B}=2cfR=cc@y`vK1Oif@2)^-c2T&I`8UE{DroD%JVkH3ffYB@xGdb( zam3|}LGRBZCgC{mn!ja_lV;?Lb7qzqx*_ z@ga&K7+_;R#-b6(YbMA*i%t3~DzYa@Yo|MOu&1ZUNC*?c@2DC(UP*p~N2VU~XzVly=M+zcQFvz?l`rtj&-0VCeLs~UsX-vI6mwbFd z2$f)uFE2bvPJwLox#cr%ueN>^brd2YTTgZo7V9j&oZJUo&rm3KmEaI2f~KtrIS6vC z2fHH&0l)?;jQ=D7-*J zt9i%Zwd-?$1L4}-=S^`Myg2l;UU^O-pW>WkASQV?sE1wn?ggzXv@ys(>6253FlHs9 zKqVnD;EKhDt8^|WBzX~5%jO7JJf01`(0V|E140SwHpUy?wcnk?}Jll;oplO_Dk#g4mf zXHAE{>fEpVR`2sx@TAp14R+mjKM19mq7WhQG_k&2H7dewp%_B&;Eu^Sr%rhb)>C4fd)QMm-oI zEKxA4^GSeht3cV{9SiQfDDl5)&M#dm74i47N9bRSBE6>e9G3)?>Ee%OW1M`XETGp- zUm!?~1@cmnd;x2LU!$Xez_CTpbGU1E-r(|XU^3_k2sE;2)sLrfC2`Pap(H(7+h=M?f7=g7F5* z18|+)W<490B)S!}COOL|-206}Lfo0b<@@Epx6i{ZW`2)Gd4>Cf8U$q*-RHE<*-qsA za63dfI$-h=V~SId$*uQw25)4*wAOS^AVI>C^r> zG;F7{@V$e1-hFrLQuf8PIbxnbk@NiOm#=N$>#eK#9*sl2%hzj<@dbrOi^@}K1=qaT z4=YP%G3wmHIUIa>VVLEKx|5@seGGguY)2TXLF&wxE#8q$VA8U;RcO3 zD_Y^&KOC|_zxckx(j{ex174P@KjT560MHkB1%Krku|o)u%;h7#TCHLG=0m?^*AsGrjI7sB>l(d(Sp5IFF!~j9QEruu%L+J28q+#U$}T*uW3N zKJIEIbCFmWtNP}d{=rwlq($}t=Ze)U!HQA=6UX6ko&5G5|CHvv5KDCC=dtv4X#(41 z;eq$ZO7-!UHi{VxE`_=V#UqBuE`_B&IJMW87{2?&moRO1s1(N#8d#d4DH`_M+PW$G z6+ziT;&PcmyZd)f0!C{BHpDRE3ocq&f}AW8Bdhm^d6?Y zJowRg8i6K>6kePI7RIFtEX#K97b8jE=<+e|IGj%x)Qjg~S3mcaa56h>s!uXXtnt0A zw|#wH@9x@P&YAusImkhYB z%1D=VQdl14b-Mx6K8WhM-TGpgrCdDaz1qzSDyR1swMF{t#Muun)u;91*Aet07b1kSTa4t&N1Zxv0f@42ioLq1jZi|B(3ad&V$!fi=GR%JyqWVd5+f?JBd&}X?FpY zudk7UQweeJOVa~Ph~Wx_9`+$C% zurtqfg^IP=Z*?7qc*2hmYe8-d4@`gsgFnU*Vm?WJ6K3nFwb}Hc=|j#XhGFMaeADw+ zZoeB!q{yF}w0+pdKkz-tfEEW! z{(2@b82yfZCj$}@pyq|ro^zhz#b=` z;-?IjkPL<~Hl0)RN3gixQn+uuvQU)yV|x_kxrqF`-;zJ|A|meF=25`@T;C-V_)d#r zqWbr-? z!O3_Q$yd6nQsdS$y9b*MobTRTH_X;c>WDE$*dHNZ#CY+8`{Ul29YL+BjlG9L)}8xWAoeBj2IF>vviwe&pKEdjXYHMDaN}UsBeZYosv#$ zbD6hQdiU33%R7$zy@w1$cSDlszaa zey3^SFeFiRu`b&$hi7@`#=j|ynd<=8zP0~P_1fpzCX)c~_QRks8|}Wx@1F$4-q_6k z8LsRNFX^A}yI!Tl>GPX!-sAars-z!+bNRv{w{G+8+DuV7>>Z8I71}++y)+XP(Xxg4 zq?jBBwRgVewqK5iJFj-F*SKje)36yYF8ldX#v5ijm>P9CGIQ1v-+W>foE#@T))DjN zbbJ$=CBN^8UJ>P^B(bFNRpUh#8eV`)DtnOs{Yrb(Xqk*Mg4~=<$M!|};;USP)e1iD z{E10Yn@^bE=XX?k9vBj_ygoROd0YHTpZ}xG^rh;{Y1hK)iA)@QnGZr)DsiEIf4AyI z8BZnLW~I|BXHPJ13(oS90q`fgX5;MIi5#Q}S zyfLEa^pj{uz3)2ny2Z3W^OC@QsFf=;hLdsj%gZk{5gi1{lnfi=m5)-_-89#Y=BYm9 zm(^e+{!DG>68?qh7kft3dd`&!`)*?!xCnor+z-1-`&0KM|4XYf5AR%~Y@glkskQt3 zWwK72K&4XkZT|V1SJALWifcaW8l@Fk|NUakp2A2jBZjgW?V0q`6~HxqGX7H?PN>)AsO)9ko1u zQM+)VP+45~SM2uky=!@zQC$(SVYLj}o%8OC8{)nizTl83IE_SOt;{P7B68Z%2l^%* zT|N56oVP3u(%JJhcyJF7A>*`yF-6rS((4q!J%d zwWq!W)he#$g=hUKJzPPV-)*;4G5gle|K7OK$u3#j5L#Q_8K4$znxM0!FEmn*eX4Ef zSsmk{ptU7jH*;{b|8YNUP%mcG+lw;CzxGdvwf$5@)@|?PJw;uQ!?bZ9nmh(hrQ`pe#pgJ*s63PiK7eO6)dtCiU;Ybn~A%5A@Vf zC7M{05Ln->i;%mXvRm9?b@arQOY~@3zte?Cba$!$>tVTFCcltOAI{$ohGbdLZOd-q zIM#Ku!>=C1y=0^meB*GObRT4R_f(FdjxJ|11jvnz4?T*$F^h9U=u7l7pIe@%U28sO z-RW=`rfK!_X)wc`NcQd55jA@`nz5tSod)MuE}Rj%cy{yPSm_;332AgBXPRmBIT8Nb zZ^YE&*>(ZGJGifNyGp~)r3VzuJ-S>TFR0%!rLVC0CT*yFujVMf$;W_gFFtsv)W3-0 zjN>I8s`eg#aQmZSL3f10Y=ZbK{LQe2;r4aU>!9b4+@IGN9Z+hw?l(|Hn2hhl99eW_ z`!<~U?OWP8hB}k%j4{*f8>RMMhbmWp z32sZU5xoxWptbL}U0 zwO7uQWIN|6tE2M2>bnVOKE>*4RD7G3?P>ch!^enWROmx%d)Yhftrzu?y%bFx8br@- zcb+zLC9xJB=70LJ*FaGBj`No1XOWNWZo<>AFQVr@x1uvmwiR#Wb|-vgkA!yeS6qr> zNUIdw1RkF??J$R@;cNGPayQ)cCRw_t(Pz=)9oRs-!)pgm?j|^RS2Ml3=<8E|t2uko zdh5CUSmwIbulX$G%)#qsfYMoHxQx?GV(;0sEsgu-Z=cZK3p;Cf{j~UAn_Sh<$fl{T zA4JrJheLOn$u~vrv+CYoranZ!Dh)q1dPbzS?{ifu zq_9SkiF0L0|IvKwC((uapkMt2alVEuY^8|+tYx&IJfX^=f#2%8@!~uGf~^)B4F(Dd zdvQVbvh={1m-eqCP1Bri#>bZx%A$|zQ^!-Cr%$GPA&nU(78glBUY2TVUI*q^JW+nn zro<=i`t5(u zY^|}Vy9e0Zwe6*rdd;?dseQ}w2LVI7DSq1ce*-_G6?dEr6G9YLletNV#BjIR6;=+1 zssk9+C07*sW+PC5k?}t1|ByyHnk9xs>NBk;RrlGkOE`;L%Udif zP_>c={s)-&`Z(z^hwpq@_>RjG1$_tVo+t1GCMX*ukts=-DTbkvSErTtdmQ05eGj;| z-q%`7g!RYjAbWOKfuV(3EZ?|ZmGJ6w#>=&ZUTfEK%^z*Oy>kycvh`{+<-eurzx@h2 z>KHZTnfX#d^9j}#EL?(JB(2PLj5G5EtAzr?p*F{U!GK=mKtjdh{QP=dZ~oPOPw>Eo zGe;=u)2>5uO2qQTs1O|L@h?2nFVt74qF6)(wr@4GlafA;D9$>h&LEWiII1>$Xt;8k zq;Y<7f3+_=6Vtd2Lp8-v8;UwU$60zkr=b%}FK>H4s_MWzF6yB7RoBs;gVb7n_8c8) zcm$m;R)OGO^2>|AKxf~PX)&;crf`54sHHks9)xi1P9ap z)FqoId;Bn$@lENRsSc*a5RcyEQ8n<)-uY36GWRZfzdnhm7g@Rnx+^R9TUQ~t5G|M? z)jud$<&yzv2@LThui>RKqlsq5%;JI%V{neH2i=a&G^Xz(&rYT`+JM)SG`D2XY z!jD5(c1nZrH?hL13Mdc^>f(6$c|^&s7Fx3?v9j10pe16|MahyLzdG82gP$XN-FGbZ z?9CEH3-Ps#&(B!mgD4efGK1Ypq@Th>Qk_d$y+VG~&G=_So<&?B4B(u|d~}YGGz+19 z^9O}oEM--Q7F8yOK@#@i$>QI*t}-}z3nclqAg9bD2DOyWZt#v6<}YJL%bv$PHk$-w zc46G~633R`c3La`Ai^Ii!dBP^{q(Gy?^4j^sF7gW|2oCaF!;*pG7{}dJ+G)}{mYLd zuF)!hXIMX*#Bi!BiLW#7&@`9%Q-4FW>l~Gzx6QA{OjYN=pJbpkMGq=MwPvuGj;>7U zW7Qx181`wt^<8H_qs88@4n-^H+ck-UWo*fwWywn?2Jze0672Hi!{>vPjSi!|m;OoB z%NrGbDfO>XJ5rO$XEo2xy&mS9T|RWTcOd!j_v^-oPZqwr0t46M4q6>%TeHnRx$(Vr zLW*x!>iFK#VD^cGqdm`o%?EM?c#g$``}Fyi^>{lr$XzE?;ruyt6J_H$->4FE4K{kJ_pteZIVU z%WF6|maRIZeYtb|FiYvEu)I5a+%Wr@*h=@Csgy(RLaB_kl_ryU*PMGyQ=9&NeS!s{ zBCHGvtVL}(`8e(D9r;3#)y>o##^o7hcs}TIXoVT_6RQ8D^{XY!lw2-TkYzF;$$}Q; z!*ixa!JN@Vn;>q&$V-Z8h_gN0$MMi$kq}~yv;vVD0wCS+>})nt`>&+T%*AZ8?*Pp4 zpX}SqFeQZSw=+stLFuWAB{g#9xr4+<0bW~NynpR3z#x@Gra63IMLk3sN?U3n zASLJGG?8Y|d%Txzz!x|`T;gOUA&Cp|8u=OVTcPA225wV$+l`jL>Z~Sz(3-p}j;UN@qWk0OVy2_}Nt9w?z z2YwJ;XNrDWv+sgoRGhZC4t~_3e7#EC(O>#?1=kayaNLcogx#uu^5BtKo(XCb8H|&- z3p&Gll5nRPbrgt;Z~tzgEtAGKJFZ}y3rsBKROTs-Q@mKLk@Y8$>C^+3+#o&%WDD`x z9^r9xmECD28r`os7KJFNc^d`s;2$#>s#!{RUcEkJe-b8btE&-!^_p2>xZAIC!yv%~ zlir4sMMqWFd;36cT|2bTVqVM{H#@SiC82CJEj!3slnRL_~t@ z9$+SV*&jiHK-v}&zkbH7B(=aLKcPTlN&Z2`*w}yw@DMpY+`~CAWIutRlJx#Gc}cJl zl^*l}pvG}Qc$P=;Qp_@2^rOIpiH_hhJUPrlCL5)LTA%(VCdMepC^SHXrc1-f>|_wP zGV2mli3`bqZnqhCv-!>sE`V~PjU1v#8G(&L5>&1qf0x(uHx@#bf+M7VExw0}E>R>Y z?_~+)Y-=oQAOLVv3m?obpo{b-Zdbib`q?;}&9whxFuRQNoTOoT83 z2nBjQCE$n-t^LeQm!47MnxDK9vo_XyC~Q=G-y}|MryjGL8U8Gl2!(%A|F4{%)$~cl z$u?>2%2jc+*$~{p`nT}L_A61sy#=5ZfF*HSZFUa@I>OpTgHZQ{QG%5!zC6v|blrPl zi}#@+H1L-+=CjY;v)kEAXN{51;)O`j9Kvd67B%={3Ve3T()bH^GhSLW<_+X|_}Jn# zFnPwdQ(ZSx3>MY&jtJWnMoLQ;>ik}$dp?{PCsDNf-rEgJOR6vrw)x{@B{X$-GyV@~JL1n$iCYXlNNn?*C^=K$?AxsZ5Ce!Kf%94G03ruYVx0 z5;wAsF&UF$N63DaDH^5OJO~VarO5B(#5g{M_^54DQ8i(G6=?}Iola`_Y&z1TK-{3* zI|pd6eVV6I7(eKPY%w_S@u5!(NAydl>s;tG>2H|umZf# zRR$ymF2Vtb2FRXE6j(1M$!Ne1V%Qx3OQwS8n)F>zHU}~u12hsv{N5daR6{NH#L(jq zR`53tgAFwjhZ1Prmzwr^@{2hemKo zLS4cVG*BH4ld_rq{i=U35&etV>*Qn0bhCsq6T1~!Tf56`%(r5HM1Lwa1?*QcviNza z1($M%J$Ad`1Lfr>522QBUR>xR0SmfbS%*UhgO#wB;7~I!!ZeCwVYt)~;n=a_Z%`FN z*Q3fBa-8kcEv?S36pNH+MRt5K|6Q&trCK|V#e@LR?wRimh)fsGLG72hCyZZ5AL8T;lE=czE6vl_09(cGJl#*G*=N4M1>0BSwp-CI)y^s zV&y^b{}}*E-t#{=wctIX7)Ql331hV2LUhj;e3yXp?H-6ugg(|?U3JibOM!p!y__g< z?qB34!cT%5IUpbyP*$Sh2tZoK$$xAc`JjK%b1_N|G=!>@$P1y26xvL^k`_F$8QYzT zF3AX`b2>OLolynCLCD(@9)sb(%fj?(6L}ZjWO&_aUaL~4V!*o!MVVhyXf~rj*BCn};h zZ9dVDn$VF?t@6c2iY5%EE>&ZHw-ZHR1e)-hVTytS^p zm&lV(XDK~YGuM0d;hS6-mQym*X=G^9vD50HS{Rn6(^bevkp@@m7_ITPf*60#h*Y?0 zex8h^id69Q>Y13R%ka{(1$x!haD04N!nWSH!dR=HN5Khx%Ay^}#PSE>;EF zM`ZFm^G*i3I5t)akW~pPTUiDe8MZclrwGD;3oJ&;3^wO48W9}`OJ`9fDz6L9dXZZ8 z$w&$%3cSNuPKz^lTd)BkGQz^|0}raC9Bf8E_$eIfge0@{COwqlwBRf{e$`G6&;^i7 zLE>q7fGy|=NJV>G@&h&=V7dHk&Q~Cirv)4| z*14Xw5x5I6d?bL@+!qu`G4YtVMsyUbX%O@fSrDr1tJmj|{d$U@37)xJVNE=|L!#UC zR~+iJ`1>i+vnvAiZV6{av%=4QTs$bDZ=9ya(N=xi26 zowiHZk5@V29iGIpGK^iL+l#xugz&<0d#`ILlwVCU^*%3<`4K{fPmC8cbjoB^ZT~$kpdZGL^4HDC*QLcW!-@rIY9&GZy>~&z0Jg4~)T`i-9hR6YMC%Dj_zp{M-hd`pmDR3AU zhZ!L#4uK}Jc*|Y=5`OVdG10$sn}X~;97_YRVzmbXL-|@Bh^jfd*hSbJRuwb`hxy)q06S#qx9WlbC1darpO%7mvs_Wz`JiuK0h#qG51C#nX4++Xalr7u6u zLcnARQvnJQ9-NRk_k7b^A^mZ4M#QJtO6c*Nv8K_q!>U%f_Wf#=C!%HM+eO748K#@V zGbCAXghe~yU1(^ti9xgEqS=34d^MDq*mwTO#}zKQNDnD*JI!KLto#w zYYXAsZVt$-vTJTOV`SLgF+E8u00H#<3&2OI!&UHQK=7+62V60P-O;0-3m4*EJuu_O zMq{Y~#jcFmQ;Y%;x@4G|h)VPK&*j$X#yX00UZ@20E1PK>;P$vg;x2nmN#v9~aP}FstOfxzy2ylDLW!?w04+u~1 zTVy$a&H=!ko|X2>fymh@M8_8K+dCc;c?TxcL1g938i3STj6=mQ>0xYUfONDWN6{X{ zhyaAZgM4blMaMIMyaAE}VetJ)(F5eg5JJlNrn>MKQs98aW2D@tNfl)3SOLh&naB0n zVX$z1(BGf%v?P{fc_~l=WiQzU^)?M6DgSWCo^2^T?>oaYsTm2Ds7weIiElg-%(IrG zHGTLhc6uwjdzZ@3abMH<`TW+yBNJrvLTz65O%j}batMB#Of>JJdFS}Q6n6ADX{AK( z^y@<6dUh!|%1dS+^w~V^qWqTPK%0lBNA0Ijnz4Id*D`=Jqi@vG&-?nk=^+)eHOY`{ zT*%QN(=4{n!!k%AJco>4hF`5C*6=1fs4;W-f`&9hTUDy$NwBh75{te)4P2Je_v^6Hk8j?GF&W``;5%K>HC%QF(fBXkK2?z z=lo$Y-OEW?!(M^0^gO!PVho>g`?A)_PR5H1lfE#hRie<*J!uKymMPR4cQ}{69hZ9* zMnO!h8OCoK_X=a~xEn?%K8pw+u)T)PWc6act_FJKTBdU+%N0$Ku@SwEY2H8NisB<#_mbiqdMHO6ZOsG5t2hzi(9Rbd@ ztQ@HUEb4o#5G@2{ucl!_7@#mKIH8eBfem7^I(b;39APlIpafJ48FdGP>?w$i8lpr2 zSqOwNZwegujnl4MW9m31=g~8CF1GM%fi(s$At2YDe)?&D> zk`vZlmL-)r_riDk#=Rqhhr?)YUO*uq>7dT_-M>&vZ!!+lu@(6ZhA=$1r84|lh0#4W z?3X-Ie{7Y%!YGIMt5=klM(s^g63?^W>6PU%EtiC&Gw<~qV*7c}CC)puDh8!roFwvw zG~0*oM=^%H-w1VDr@TOcQbPA9aYLXGSezz8{z|-K;?A!>1Psq06)gm*phGYUovi|0 zc!L^H(TIdEj4Y*SSz|E+GgOvWUNN-X!9;_oHwX3)h>-m!M>Kp@nj=2|HYHKMhq5R3 zQe#Caz(N6_CL0g}L{}#c5K<$6hxkec{8J5};yKnkFu#|h>l!k?%Y@=3$-n^d;T79Z^`MoYvOrN*A%ni| zUo68*P59qxk7dcLdnXrmp$~<83zOFJ!B~#bR{MrcCQVhZ{;sWCaF=>u@ku2~<}v(N z`Q5)8TYj^;=h7<=uxi;PX`WroijmT;Qh}^^MzP8tpEet0(EJzDP8Ws+wMcf2+qMsH z3h%ylceU%5?PJ=h8$2H)ba(f@RWBAAYf@~e7;l@hudK0RY;hhpl&FtWm6jSJ+bmNI z3#t6cN~yGFC6J`^O{-wvaEO(KE_A1?!U7mBBMh8 zZJi$L5%=Z18H>Uw3wiN-#r?ev3C<=i$Hx!ypMGCx(AJDjjIlqncPoBEQ!H9G@;c`I zo_zj~$7U&qA4&tdvqbybc1sg24szX1TSPR?7I>)1&u&qmD^221lql>Ur{ZNpM*Eg&GFklQfKc zxRNQ>Fj&>KOuy*DQ*$FWX*C2`?MfAA4#2B}<^N`qb>#McW)h?*AC}Q?CP5lUx|^F@ znp*~^r;t0p!RO3PVDdNZxHJUcOp>udrRlv}5&ZPd>_24#(8vEnz;<9z#8sQ~w#jbe z=xF1PuLmwPx9;!#MN9zCsT*JPKxL-~EQ&zX)Lzcoup@vSO{=Iw7f|Fs45zY&Ba;~> zuooJ&2%^MFh`2`L7$oyptq#o1sBrP2d(im+;DPk>{ggH^c!NJgz03w{fk8RQ|3ntS z1myxUehA8YAVP#D`;aJ3={iI}4z;`noQ2q+zfHu%&LLg5bQmi%_eXLAjwd;L&oNy@Qix~><7FhA7^3wyUG%H^kNjul4Qa`+SF@kC+gX<@OLPUD$Vmk`fM`2cQ|>Z9Z7(&a#I1GPNIyi#QbjaKR1d zG8ppkd4pg4VlVB;d1M`tvxyp>#1rCJo-snlA0x#tD0#O1$nzj9pVg;uOP9VccLV*s z?v>61Na&z`Uj2TfuTGtZV`JMqhM-RS(x?!`vJ^BseR(;wX?pl=yo!GIFj1CS$&OLW z^a)Lc%t}4Y%4O%mLVNLxmy=#T`lkeKAwK4C1l!@#1c{ivB!-LA(Y;?}?N3Mcc|+kC zT=aLf7IfFrXPSD}YEq9^jeIH_-4>t-$3#<7x0?_7N{g96YmD|1@pzZ{s3_$d ze_q+g2WF5YEo98)Vn2Qxn*?fkeI)PwzGALGB+X4n_Y~{1A`cKXEgA=x87N(nQV;Jl zV@2kgtCD3|Cy^{W=h6wpB9O+_p1&y``jecwfTX^61yptsV5$(iKIE}pwwuKIz}+s> z{=IOlG_He=jt-q+VRcEI5DTZ34|H)$RZL!;D^g<-g3?(QANhPnpd(Db>ov#cR(1@p zpZmW{(4ET&R@7U=L-)6?h>GNXlC{QS_7j%VbX4%OG2yCf;ZpmP9((SLwG+pKdkVtn z5~N}kvueayog0Hwrt=Fi2as&acz@ToZ+*=xKKYW*J*mQ%^{dWzgr>Wy5h|<0r@ps{ z+YN(5bv#XW`5_d`1z-Ak?s~V_=avPabc{o@#=OI#*R(G7H6z{(C5Q0kXc0p&Vs>D> z^QRHzOXH>w7)3wkU;z1iW0*Zm_+Zqw`M=erKwuQx`W)tOuev>tG)PO(?}Qk~rPa&EHsxg_47j2RRsY*D0^X=+TWshjefrnoX0BsHu}O#X21SCUyyj*^#Rcw7GZ zgYA~VnS;3X)cvBbicG!V0L-hDmFuJB^TvD8L}hFNW}%^*C+9(jIByS>Xhu0}Y1R+jtV~|Sa}4V9 z#HMl15b_{G8b5Ek6(v4=PsWsf;$my5JrYiEvNiiO=1FHtKu_*{)02_UL;AO`J@oC*n((dP~EEK+t;5NQ;*i6LHjaa#Zv8eKaq2rfl4Xsego(-=c(@hB%*p?6_Whn`iU08TuH4VR_;=K z&*{FHqx((Aj6=ifm5-qQL&2H|{mW=Z-{nC|{2a4t--4ib8RU14Z2r{z#+{6KphB>R>21zBjieDCdt3-*7Zabi z^-qc#qvciKKJ{L#P&C z9mTd-ed~({Ky3%8VdR)g|E(WB6I{@OR;d6{2tS2D209nArobS8yQICKBVQUv)Q9d3S?QI(B7Pu;IK23Y=|K|&}cxHc0 z_xbiQ(JCu~-H}RCAy|M4#%vnaF;hY-1NN`;d(yT0OD|Wua5-;-=df>#VtpW3ZQ&sUu#wC(l zd5l);p%!j2!UQMMuF#EE$*%ZG`V&qgjHWKuH&1={ZEh;+9q!(qrcJcV8M!;qwEGk~ zrVXhkc#%m|kXAfZD+it(D4$YuPYhX z)70B6yCYol38oAgP3hfe8HGFauXyuJJ7)qW>=!$ARbTlFU(B7klAMeC7JmD3)bAAk zBWN)$SLOK9|5kjZ>GvBhi6xIezVGMFBA53DN0wJbTb_hDh=xg)q#gO&2;Wm!(QLZT zJ!bbI!s}JIJW@gZ@N@C&=c6-T&9@$FX%u8ip-&cQ36;Wl19;DZwT7J<7n33;`+8r* zJLA4x)ws_;O8&XUt_a7_b&|iInr$M2R;q>ETZq@sV4wW!>XE~BdH8eDtj-dxq;elD zRmrJ6^hi^Sc)^>i^2KMDx8n07uJAhTWPF%{zp<&iZ_OhulO&oW_RoZF?*H;8IDlT! zQpkLJye05l-u&nXsJ5dyowytu&7%g&cl>9dyI!7kU^WJJ6i_JYP~a?orjB9{Vv(Cz zj(^CCs_?w*gNXs!7|L-1Ig5*3HrKF`-=$;2C29k$wX*`fG>n*dGJGH}2h@k~;%5X2 zP%JgfSkS(wD3k-GA8G)A6@=-tbO;KtJwXu%+RjTJFk5_e#4RliEPE-c0busc^9X`N zzqHYiraV+Zo1fsS57QQJUgJj3cq_{^y#P*ZNgllLvTU=Q92RI$nHyJDJVM{g$QA9+ zBJiz4u=HLSGJ!Jg$aXa!f~-LWy&M3=oX%o(0ih=b!x9(21<;TSnrlizzq+=JG(+_C z578Y{%$ubYFo18<^7k$SbQYour>*!{RoA#`J-KLMhc|Jq+h*T~f^W^fxO{s)XA6CZ zDR#(u{g8lGW#S@R>iBWb{Cx6ebH{5)wIRKxHF*0oN!q~KuD(fsvRF*?wq_SC%FJG-&6;LP|moL!NPUGZUz8_q+uEK}*OjYs9`oZ5Y z8P*qa&>zoS5a0k7M=??UT@Iiw@oA) zE?w;VXrxq-WU^@R*DU)wR}S}+qC+|b_Ap-U_J&jHYHIQQn>RKt>CLtOtN_7;psX&S z63*s_Xc_e1Oh(Z8z^=;3BZrOVt0z94ot-7CHdxugLx`bvti)-1_js`s_JEr;<~?|z z-q6HfmencLdUc0Qlt9WC7B5qasjv^5e-IM#UiQA)r;jD7Z&TUoA1_dq`J&@7H@cy(42g5wez&cHH_bK zr;u1*u3&q_`|G`jT=C_!g^9X*@@m!V?Axvzn(Et)ne9pI#0w_pnx74S`L6xqopv3v zN^*1mim>+V{7rN_9IH}|AxU~G;;Gsmo(C*!l%UD9P z*UM(X!%>4H;c)+(;#aa8O?!VQ`R~TJH9{;}yL`)Gcc6POEH4ZFLj4)L-qOI$A;b@q zitwysO!q zTK>X!N7bz$IKlo(9AG`InT12NyDx7qy3V)Jg&uFM2HyG{{Ew)&0E^=N-iM!EIz^;g zFbFB>k`+;qkZur=kdSVv6-DV#x8|(T^ZmWoe=cTscA1^snR!k; z_c`Z2@T2&8X~^bfJ!INLeTXk^ray#g1kK6RG!B2&sIdfMxjs218WT)gIH48_fCUDc z3)s&fURcvn16`vA55uyCbka89N?#RCGPr@ctnQ$p0|ljY;b_vfl= zY(_?(z!=FBkZXznB~RyStDrw}*qjL3tnNpj7AC0A z#XCPCch(zBiWy8)%NI`%3H>%AZHHxKw|1je*H{p+x?7k`gvW^#nU#DlAS%7p5n@{7 zammLmQ4>{2SHS5YOcStqx53-(!2soZG*+5gV1}ir-=ARPiuY_uL)Qt~IhzAK6l z$FCqy&9tdm<>tNonZ6ZcXp?oZi`xS2zL`I*Z_^+#@>9%mDgV3!Bc5dl{L#11_{VLt zLbLGV@`mi+b(!l#7Uvfd3H(H5b{G&P7C-Rqe1}HAsGYY$AbJtMb=P}>1|ceGbfWg~ zKedA*-Pdd44TJe?aJeP7*{Fd4Ff2s(>$|noRq|We58?mR2z*PkaIV_ozx{whdD<|% znO6(bQFi$%{3c)oKHkj6g2M`=VXQY@hFm4z!GN(m;mOd8tF03mY=HrdBu?Q$e`vKp z*=}MB+s>On`8Lh|XQ3yGHyF(W8TI7`*Afx)taiKX6PekXk@yV(XYJd*nQg!*PeYp2 z=C`vZoU(O4(d}fozvyjgu4qLB0R~jyObz$7P}u)(Y`s48)k@+x7Rmlsqs}>VFJFU+ zc}MP{#l0`3He~o~h1yRYBUzt)**qOgQ9BPJmdCXUsxP8{a6NE+ZKwPF&#{iKC+vBg zqos}iep}J&abp)yg)+xNHf{ky+SHzV*Yb#d>JkLy%QAE650PD3VW73IAT3bs-t7m+ zGeDi+d=Pha1>jg21*VF$!;F(sfdtlFVb7lPro>S!0* z2Lxb?${amE6-Xxczl-hb^#4PD=l?s}Rjn1g-9XlIo$(6#JAvzebT3=*dFSedr;oOt z@h`^!J@$c%+=SIH^tU=qNFGgPoaY7A`M=6`t-R}>`GWvV4_+=$TYMX#hpx}Dq?soz zymixljMqK^e6$V+XbxQilA&?v`sj1~FtX;*{;5p_nA_z6vp?ve@Lp`YVgWjL6lmVL zo)2h1zxFlQbV@+zO5HbOoY+81W7JP;3s1PSo;=+a=GS1)>yx2o#hZ}INN~Xi{?dbM z?*Mw_Pu`o`0L51+3qP38$plf&BTsMWo`7mijQ{9g7`C9c34tg$$i>0E0?64soh?P+ z)xi{NhA-{M9?jqo`2W;ckVwl6Tbj!VY`lhpWlAAONmSF8d9C9o9r1O>drV<{ePd5Q z`q}|uET$XEEOgJr|%HZ^k>=amwuVVv~kUvT+5V zJil@Nc_v30Fxk%{9M@q&w)#UJNbB65TrFHvH7L!F>)TzJy=AmR&nm+IA#&K9IX0Bo zkVMA-ySxV&({)H1ICp3~h^u($_sFU+t8BWMiUOEwK2f%gZu>y{?k}Z$={??pu9Lvc zsX)x>*XLY*9Eb85xPbE;cM#H1*;ZEF!a09UnpSystF1OZ;&o`s_?_E9sEo_DjD3ec z%!S2W~=27q7dPqR@9#jv#MN#>Qd_=&111X0n#C zQz3nWuiEcQ0r=capYylNB%A{zY4dy>w^j5a6U>f`+x{eQb%4nC!w1!KKQRDAaeM!s zT?sdcl#9Q5f;Z*&gK8D3{|!@AvSw&SIe@nt1}2k-FJ#WIqyVz`8ETfLUu{j(6JeBO zvt4cW{?(`Ly}Uwr|9iFT_OMo21@gn%yewMX_O{Z6}oG* zL-5!m`F<`7_JzOdxL@S<_0WMl-iSr<6I1c7v8Q1I4XMyV?1k;MHD*>LqFl7Bh{Vf| z!?^-E(Y<2RKwSZqn@Et6pAm0>8c34FUah4C_GVWxAO(i!Xi@l#)<0jVflq66^2Pv# z0QWDCd%O{FkNp2GMZhu=B_=q<-e~-66dV1sb@zN_c+H*9-sYu)VX8~ZxbEdX1y#8G zFA-mgGyi%ijFPTNq}+|2nBfwmczRZh$tUv02@|LmWqbQ@)syB?ia-TC-hoyXNLv1% z{ip11x`FPxkyh*g@%*)%YBwgZ`d@r8poQ+$<>ge(k3v`aH&Nh#pH%Qc#yaW<VE8;ZFGR_<=$^(T#NnC*LUeaohi&UI1ba8N_q&*%ZXvkNVCl-tOtW%jg zxvQsQ{a3ck!2^)_&bDUJzB7T{cXjNlPg*iPHZ4BP+-J&Ur4biRE+*##?&CY5N#cxS ze{>nKNfTLf1v%b$n#v$pQ~x+53AXo6-)ozE#x>b37lx}Ag}F~Nkt&97fr{q`dgW^) z@{~a}Wv@Z}*UfkSF}`6}L0@Rd9j7WMBMGmzBM^(>R#R}}i8s!7XSsynEJTUzGhM!S zZ&c?}q-oGRHe6V|x0&Qf-B5uZ@6keCtT@weuYu7s$KGb5`xe`bwc+LESwwgsZV=)n zSGpD4PI!k|Df%5M4Y=^`SwqU7tEF%JKLrh%&x?ru6LM(c_Vg*p{uAi-fZy*inXh)c z^{0_LVg>hVGay5Wp}*ViPuZpq}_gu&&L<`^<;fq$0H5h(|Mo{L#ckeg|3S z@8jXr!^@_LrqQ4N;)WZ{OUz5^(ME$#pVtnwG^YAr%1W&=KOUfZjFm(*L!Gfr*=-Xb z-S9Qx$7E}K6|*wGOY(A3-SVk^@$8<_PWyUni5&ag09}HgkMdKes2WY8s7m!8OOs@Z zrVyW>k9UKu#4A&cu3De{|O(tJ|Q%lrUnS%^)odS z51LpV!9Ch2#s%g|jpDCtHzl1Fn{N2pTCQpDNM;>Yq!DiREmn#VcK$w5k?%FtXm!1X zfrg^fD3e%??K!$lCTG9JOq7YmQ-{H%lRb8C&L_NdQo$n7|5FS)sUZDw^%SsrZE^A)ht?Eqc_Jx!Wz}72q z>Na2wZ$>IFb=@T2&*rEc&(LhmM6pTPvoWi8IDsU{j{VGi1nW}L+G zJeZ#L;ux5IY= zyP|d-zoLLctwclmOUM|4IRhVm%bKIlfN6d+1|iDUNAyVD2FyItG3Vbg7x0K$x;c^^ zw)qK3(*N)Y>lPqK^kyRYac&_hXy@+1euXMdd;Y>)FEVP`6uE!fHM@svB(lKBLYIP< zBFl!2{Az$VVQ@GPa;USZj*`H>SAI(3)0fo256?@RAM(0Y+wR|AIoo`Nyu&NUv~B8G zd|_2)C<0m&R(@?Xs!$MC;m179dhai*Wih{56vTIWi^yhZ(?n!gc(fz#!BhI2R?k5CbKdO-nDQSPNQ{P$DU)u!8+>)$?dzMm)@D$3 zc>EyhxGf_zjKqd|pe?zX_a+Uh?=#`DMJRC{zAkQaTHd1$Ro8U0&x-AzA3uHF-8JPy zA7~EJsN6+BZ^9(S0tE_oN)+0cHSQ#e_0T^)6k3dVJjc`Y*&7UtwKoXTQ68oRN zP%bIH>GcTSD!8bOOa1qZ9^nlB@1OP!YQ_KQFUSy)_6qgV=Tge1lu{r73u&)=Ey`Yqk|JO+$Zn_Fg-V>z*RTRFZThvcN5If_ds zlTC&lXi&2|Z5ZAbmaJ?!OwDPDV5nQu*U+K($m(uFsLrOnt6;bwpq6r~cq3!ZeEp~P z^98}80s)3*kIfKXbB`+H2i>tXg?Gux$yJmE+zFamu1+!SZ2Gs6Pb3`C=>N_b<-JYDD|E{7 z6;p`YHd9dPWQ?Vv*mXvK_f|l9&##sP z&8({F1<^5&PdLOJqX1MrAHsC7#HGI465mJ{LN-I5=`L*qI_r?I+4uED80{L(*&*+Z z-bWoQj%3qME_E@`!e=+Z>`8Vl_aPR^lHGB-*PfO<(^qJ3808hVnh_D~aO`jy-oyZD z-jEL}BpIG_NcfeT?tk$)3ld7Jqn{#}<|siv677aS@q;>Ms0{+B;mE*eeEAs8^uJBw z;G&voWw#ECr_Tux9WVL46WU(AY%k5A52u>uuZ<)nt5yoa#L zV_G+=i_LtL=NIdbeX}`r2p&(Gy=w_i+7^V9eC9&p-e50#Z8mZPCVrK#{tel&^(Wd5 z#(pG&FN?Q1Fo1~V&hBbpFs*tUE7lLTj2mTcU!KVi^*`66UW{QD?z_W|d84rJp0~Mk zu`P96p|}VO6Lp#RWOr{PddK9Th1#kETcHB4RB5=G$AYQ@-HD7XYT4N0dJ(7g)(`VF zu#b0m_{n-;)0pEn9-?H0i$8h!xtics=fz&aP4NO^x0@DHtqPVznA)>oKIfKqW+h=# z-4ebL4GMv_OW$Ym2m2Y4oKIfGkGbE32IQLs-+00HFf3X@eMD20w`#b3ME)o2eX-8b zugtN%`i6pyH&zc~5Gb;|*C#AQtoU!mRx!X^t0B_SzZke=bB15GuP1s6Dn891LRAyI zVz>Mgr4O(v`pZ)U{u|6_MTP$3=M?`5;ufLu)pKv31cuDj1{%|KYh(6m3tF|+|0cws zpqSZP855xWN*}f*F<%KSc%eHP!XA6I6~Xf&gTDZ>kpK$-eneTr60c6&X z?;KI+J0ZSt>5ewPA$t=%fOGqjr{MV%^(f1}a{?FZ`?U@Y_cS9KLB3Z+BK~xl!-Yb1 zWBnJW@@u{uEADIBiPDaiv$3U4- zJTxQrugpr9vSVf-)yL(=OAY0W^Z7{R{s!;p-jRNBTwVN=KKlgZ@mk$^7?hjh5%xJ;clN?49H`Gc0ShnO2 z9$+GaVRvj=%(QE$n9y5q7Cw1nszBR3*K-G!LAJ)h*a5EU>e7z@k_qrST6&AHVB%tBS?ET5(klkRXlYNG=xa26rAtua=Ks2f?Yh; z{^r0_mQdj~hGgo78G~djA4eY@^=P~>sbsN7AjSEb455SltOX}KmRfGcze6$A#`P5m z&{6shL)bepisf$cel@){itp@qfk#$x=BPw?o2-qOV5j+BW{`^KpTqOPdHuWKuafuB zYRPY6mQPss4ej!bGH6eGyycMd>SJDa1_Z)4H}a-rdi2}#6s01kW(%e01BXVIl`D#;Wy9SGGb3lV%nwjmawLH!Zg+kT|R z)nbN$i}m^Z`&@1eze52_^i~jczR+xt?GKq$PQzjqV|+KW0_v%Uy27XA!N-?$NBI7Q z{K4*y8Yg!;NSt2njq=FjX@DhQb}y%+&ZPHYV$a(V)fWQ{WITT8QDJ(4Xt+^N)CY`l^3^Pj$PjR zE7@xQK&fYX!bk0a(=)2X>?cJ}2nBa(sZzOyn|#kMJ6{PuYdh$Z=y3RM?Ojhl8y)gf&7$KN+v2##5&6tr1QUJ4HEpET7*yK#&8 zhUbi}oOp{D9d=&(etBeBw_kO(>C>N|o7orp_|>xy^8*TL15-{)p| zLuk?C`DW?bX^0+1T@$S#Bk}mlF(g$&3U+hXMvZ%knm@(=A&)5H{}lg!EKgUqTqBNCV)mbZ>-d0FO zi_`eAJn|t9>U$Iukmspm6GE<`Pzy}8+XU-p9YUB^{|$t z`J~aw;F1+PKila%V)whelRtMQe-3`z`J#5}5@3!6f+c*nUfb2+hUYJ3`hk7y@q%^sNDw!ZsNy3vQ>x2YXH(c;v;x{$H= zeBtFtV)BQ-?+Gop_0*5GEOZCcvtKCrMsd6BzVH~jX%JUQKZ4%MJgHH!tRux5q$~L2 znio@BzFTy?!am>l@L;tokI`*nBZ9zS8&+FQ>70tt3w41>gMP-whLR9W# z*oF_6Y{G>c`IEWbKk0*3$+(Kci?1j}>>8i=S3hSEfBkHvDU)0~cz^V3^1almv7PDo z^6s4V19hjqgM!64k8?<|6VKsBZN-^pGN@zR(<{Di7x}8V*lcs?m~)=OnNdg%A)s@; zmY`~2cZlfq_)Z&4i2d3b5;1?KZ0*2qn)ORSru5R3y$Yj!OOju~SYI&ot07j=QP zd*tVuJya$klK<`we#$lC-fUaB;AUXFG#~mFXzbIy|Din(7&jx5K6qZxr!e;5pqTWV zLOOPz9dXETGrRU;_Env>>^jS_?CizaN zh>EB%ZkLjqwQA&n%1XL!F~4e--cpL-isI#`K?`!_WA@%VZW|rjv9?ph2AH@jYZ@Aw zDa(&y7A&cq35kTuWT4Fu2o_2*X~%cub-TdFdKHvCx{JrMU&Ugz73BN za`WEgAw$ljhSdMtJD@tUVN zy=3DAK}sW8s5Q+BX=F9+p~shHyR8jp#$Jrd5>+F~>W%a9rH0EvcOsv)fopAXaSgO1 zJtRiEklm?v^&O$-xu+nS(r_)!X?oT?+J~=xE9T+#Nydw&YhI=dWm6LWDEIzc%+;Gl zbufmXH*9#ie`^{UGF!;jP+Ceb+kGDWy&&(COLBRSs(?0W#v!d{Y&emEjS3dmtK}o?mo=YgmV%#zC_^s&;3`A z#6O#}zt(+wCb!y7@GhSnANKny&vEuozRvz#X$})L^+GW*%+CkF>RRu>4lanMz0S5XH&)h_ z+Gx|@qAMv85&7^rU5GcAbuUu=dCTse3<+b#g_R| z=2<4-l`5Km4?ZK(&?zv`Z843&xl-3lJK^?(_D)iK>@apc1}4#NEoF7W6H z=*uUTIxhPjL2{nVcAfe0qYf{->v&=SdjIyuC3Eh6^$W$25S+|ltoI)REldH(r<+rUWVS`OM0F#(g9s(LXn znn$>&j4tji`}=y}OwVS&39&P+a&E86K+pxWyTleA|hHFX) zI=|!aDYM+>ldsx4R%uA~SUSJiqqxlb-KFp2(37N#?;e8}o8o_*!h8k^sd}8>QJw2> zO1zOEjraa||61gfo@&~Y2a2CEltvt7VrvX?aC{!krID=mYO|e6-;i;l*v3!SI19~x zj2o?&HHIg;yHOP=z4WU6=p9HE`r#CTn|jhwN%bO`V~?0(=O2|Zb8|(|Qsu<>#2u$6 zqDu>m)-!Dbd?(BpPow6iyw4wRwB($A-1H|E^tc%2obxmD>2`<=zMZ1q5{F6rHl*yM zMjR=Mne7b$SM_wWZ^Y5BDET6vO=|trxxC$}HYH0>vWxp3u}Xd-=!fp|rKZeN%6Q}t zCxUD}SH2Z2g3i@k^0kW&hUAE$U(D#~$|NTYawyoH;V(co`KQwoYT1 z@@}tuRxC#0MIMhO z8Q=(g*WKlK^S)^BQ)n|*FZ)dd5)+r}s4%GF3E5EjtAEb?_g~G7%6UrmG2?uA;_UU= ziO+%W6JeT&p$I!i>1RB9wnnkrNUG1|OU1MK{4-R>d6E1D!d3GnR+`^iipSjyR}vrne{G(6^jEWqRbFRSRjsmdtnoU6CQou5zV961#&uUj?LFwT80TKUpe%5}Iu zc#++87(4kvSX<1z`0I(!+?w}TKwkg7FF9sSB5v-fmrFJpSjn|Yu8I9x(RPc6XI^LA zm-3p+y*|Q=ZLeLZ!hhwe#dnDQ(i(EwVHldiA2Z5|kP6CWW<eSRRJ=JI~2XQP7zY$#uT$hVTT2tGo@PXdC)f@G}NV3-%r^bm#-e{x#(Vp}xD zU<3Oq1R75uDd>T@5sjfW7WiF8YattPoGk%JJaCQaXQDm=RL1y&Qe)?DTd#*`${sgO zRjUU?<(W)AY;>8q_P&zc>r3(Ax#0`}&bs>BhDiKa{>M8wokQNVJWo><;`3C-S`#)$ z`xc&R_>Rnd|1uPyK9jvaR81!t*15`Q zu)tfO7PRv^Ntw24i0SiQ!p+N6H&3o;C&@o2uB*?J-GEpwZcc4%&dd)cbl?Ct9zEUg-V3Qg1 z&&x!R=MP$&MUf+j0`I(F=@7!0{Wf#2ATvLP=oU)tqlwnB|4kB-+PjZ&P}Jqd8;wp7 zS)x9lSilA$T#ia=aL}M8b+Vlbo#gNCN7`blpgvn*$p+#v3=WkcnG9_@B&migCA>HZ zGjwq?ZUxo;63txcp>EI@833pbGzlIa5UhHhzfJ|Mkm3>nK%fU=DN$P&OdEN6qO{CS z-k;3{3>hvR2?GyxqHd`?=j5BRtnwxH);ahoYNEg@x2cezl+)_Ee-QO#VlVk;*#K+T zXx`?c3rF@xURx7owVdR7*W&v`%zhOP#tL@tI&8T%ElUtQgE)_@3~jUuGsg|D5^&y% zq1BeZH-0a;?OA1L_-M8LN%22(ko)BDH#yqx`+5pTFrwEV8^wkN>RLEkE~1g`2zx0< zI|x)$p@d|ac2!iGac+P{i+bi*gEK0WMS!@EYP`p`arC2)x$doSm@iggX-~O{tqI|^ zCgPyP#26%d0`WdvD7F|}!5WD~Qw&pJb)@gD=+LLCZ$uqcIh7_nvzzqKA5mViW9yMX z%AAy*yFAGkD|q%JZWTFTTr3e`#}xdD(K4;Jm>LI!aVWu98zVnx{qg)OLKh&W7-85P z1588oeJ>TF>qG$G8=>AToXC%a{QzJpGbTK30)TUf3y${m9sv}aC&=Cj1Wdx>qZrLz z=PC%M$D;;Vpx5pmp>i;ENQ#`uL9f$|v_EeQAQ1p21z5fV(2MqvEr5d>TmA-9n&-l{ zmpFoH0)~_g`*jK=E^E_`X&?&^@*a2(q0u;UNHO`$0f2ZM5QvbKW5Yu;^kqZBfoVt~vjBRp(I- zhP0a}*om5}f7r7dKM;kVf9{f4U#Ky>kilPT*e5U340y?1bU6Jt@lcSpWcS%>mp}W! z`wd|YuSP61ZbvwmEYG6Nqlefwnd(Hra?Ju%N1p32uWrzkC?DVPxJIMn-;_ znY<@Q09Brp#TXK^Kd_On60D7K>RL7OJv>$Gj+62T&7P4)Fnwk{#ml7EWd^wwc^Sx-&s^^a6Hh<{M~3deS(e-* z>5kujK(kZ~wE|>muzJk|2#qB2Gss|fM%N zP_6L&lZJ5SnOoZK3VkDnG{-;bs2&uw31IjTb#z8kmhqe6xvraw;Eo`2(CHHy?6d0( zv*Ur$^eG7>GT}EFj-_LQXC}rb?RJhJNw@(!5XyF5Qh{b{5(*6r))vf9_cW%memn@A z%{_QpBUVVf5asbw>LbMq+bB0?L<)wg}|^`TvT71($q?HF0|Ga_?P?>g#6@URX{yM^-V7 zp8Sv~c??-kn|=L>+rFowtv4JgN!#}a8=zNx9Xxp7g;AmT;;3B_%6<$!aP;yqy9ZPA zV8-0p9oSD*@;wsej0EeCV99|k#;dLa8|2j*w6K9}cByM_VF0mKCm=yD$|5Of!i5dS0uC>*SCP=Yb-@!8I5 zVDDBY?Mtb|I~JpD)aNu!G8lWAEjYc1lkIBQcn1-jNw{zel%(YU#o(+_T*kduC;M)J zp^PuRXLqs%sd3}xSD^&aG3E7TkM^hN3(#ACM#D|RBm)#05*4C;=V(52dj7gaNM zK481iW)&0(;?TB*+asHyBL#=3wc(`Q&(=Je=48vs|0G?V6NeKJwB5<8@9VwgSvWac zTLr!^Q2L>dm0pBhcbOt0&NDR*Xu8QlLt#=eiDmpAN&2{=aZKwIQy^(>sL#|Zz&x`n zmI-d_yhLf4V0%u`g7YiU=OTk4ILJk=~lNVDPFD@B98E} z*M9TdQSA3_iK~YvQ zGz2|Icl1kUR7Fdg3T^`j?lU5d_EDHC~`ZXIv* zb8Io^Ta-yV7!mZYstgfoYR)+GG`WiXqqR38;VzeQ`3{Fs!;dNWyGzFONbPy3P=|c9 zx6wff*28v6cb;l;?{hRLE}a|)Cw|^vP#3IWbmVN1|6#gnP@+*9R*`?QM(W9!bf}_g z&@{KIy|#7nq$W22*>P4&XmGw0X$60gfP-bl+gGTc?+hY5Pbz+oO_k zBb_1_y2?gpU33iRCYxnti9`h#V9!<1offa2cTfU)rCeAg`o~k|t%_e9c8diN=S3@T z0(yK~TZzujBGv=x7zRlXbWOZdjpWr3;AFi+RqZr!sjwxw<7W`~*~E_nUfXDZpryCh z5pVu2P&Q^EA)S^1NTWO)#zI#%AGXB$Nd}GveE;9rHv^9(vngE7{ddff1j}uAwvw8?l*t;gWY(hp*d*1;Ch6X z!r1LYBhc;`Ou*6gCc=V&01Gg#Q~KZ_iJs-*IKNCmX*j#3aj3s;H+kU8MS^op40uE1 z)Q=A0M1PJVjRdm#zQlKx$7)Y_Tv)z+3u1fhQQu|DeRjSWsz+1es&{E%`ohw4wwQt9 z@5|Izy!+k~C$f(|aQ{fnb_xfnW$IABNFxe%u`t*H`pM z>8BqL=6qH7Ew87A9NbAvtJX+L2y5?Q{K?ADC-?Ub-8%}PireUK2&O=R-UW8eQeny}`z@r`(oOWf+LgI}10D*Yv>`Su^#&>?$ ztmg$%6y?pC-5(ybVi<=HSMgC{v{2p{Yw?tOV|AD;zStSYs}|#w_*<2|v)b$3!cT#i z8S~%V+Hc3WS5vLYCwHBaF2f!`#YKj^T?~^7NF$Vmy(zIBjZtH#Wp}>NM}!Mh7dCN0 z@)YU%k%92F?1H)hFTulon+3*+Mz&CXm-(CQvj<0^@AFwpFO1#>hw|NlB*N}`r5C&- zA_f`WU!iGISIeglSfDog$n^-r8$(lI>fkDq4w`gLPtHt!=+Wb4t|ZpRqEP;x9gpDlVuS#{gH z2o$#%2q>FddyCFH+Ku~%z?hEId27*gIpwsGXtd+$i?Co3rQhjcc&8_Q9^6yMmIldi zD%&*(0KV|0VKQi1Z;lR*HAC)h6MzyM1StBA%XAutjVjx(M}k-fR>UY0y*h!>ymjIr z3|%uw0Z9ZRHYFizFigUR=l9Q}4;P?fVAic60+3*%Jz%D(1e{s30``*OCk@K!%*1Q6 zct9UYwCn~YKrM{7>=J+gr4Ov&# zKp%PQ$))AFJXe@ygW>}p%tbu(cMY*!GPKmSe6%j>^&B!_zj0{H-fQ^$WGOOmQ;s^A ze4oND%4XZanEZuN)(4ksF3fi|pO!t6m?X-N{-!$^!1IHB_3))1!{tFTac<&DU)KS% zY5(zGX^!dZdY3OshOPb7v83 z{rjYPaI_}5pjRQSo>k^Evr@c@P-JAYtdg>rMu6)`;N&4agTTg$d;g>SzLNeERb2=lVTh(O#t8Jpd<}=xIx}bqpre5tjn9 zPu8e%0Agtgqyx=QlGvXEd3)TBs7*x3ZxksTFApWp990@H!d8b3@3HaF(*5Cx=kf?# zO$!-wE&+UHlvMhuu&G5a@9XVj3fZ?MWL;Z9?q&=3?vG4_iPMx4KBG$N!MuqEy_d_6 zl5t0At1!N6juL1>A9%Vw@`D^-8e&1VdZ&A~53myIU-)W|9_N~=9U{OxaLI?;jQ~7` zwtv8u34TYYT@g0ZA9GVp4s)BN%4&o}uy0Qx!6f~pMBJ}swVcw5q|nI5vkUeCRh%Zb z_c7F}i>pe;E>k`w2)kuWk#eQLwK~(u>(bnW`He>dFg=LsokaI{L^IVrboelWRvsJO zR~`+}`|%?RE=?bm^~YD898bS82Fqm?^^=7V%uEnoYA$wYO66IV-0Aor{3V;eyHHVj zp|*jzcq8lB%Zhf$@`m5Gn*gM+YAkuHIs4fkvrRX4?cHg9f?HfwWyzGsJkO5A;Y-1 zN?z63n-|Re?p}O`JqKk`AL#DI{-DS62Z8;8vfDL4 z68j$59j8hxD85a+)IlHcRD63q?)=8MyeuxYpc}380(wBSk4%urX z!b{642*gWFtjm+2lBl4-IwXHa!YZ%k_EF(PW1+bkEY)LpBtkc*7 zdOA{WHV=+|$KcEH5xWR|Q-v>y{mQEoM5vksPYLtueHFsa^Y7tPY1nu^&}Q$^+#O>k zF}iWzspD7VZb8w!*xqUs@o74%WhVeKJ2waO`q-f4k82qM6rW_+7 zK61Vt{B-5Jw=GtwjcI$#QZqRfRFSamkBfe9@h>yF@W~NLB5W5J^{wM8oa6w1`zgN901K_* z+n`MgrZJTp41D{cXZ`vU-VbCH7Mg4WUTXAmq29{vBc;SM%i#n1VrweA5>;HB9t6Gx zK)GKPLNgtV!edc6c0Z&AsNCsywS<8GN6=t?c$X?{X^Caw(}~H%6uD2FEGqReT21_) z6sqVQTi$prQEtS~R#JxP06_83k3GtWzFkm~^-I+K&d67=3h&N)f$Y9l?8f$e#71bL zeEK$hj5vKt7L+zYQ4O#>+w&%YxlN_zUn_WNcGm^!rD4xdY?4(|)8b9K|5a$|Ga1i%Jy_4 zd?lvqo5lI_5#`$)?5)1PP4xBdS7F(<1^-cGRd>PQM?IesNvU7OWo4o-vD@y()0la+ z?NK<(NZGTa6J0Ck=<)8*P2=)}V#cshxV}%+^;9QMtA4hqgZ!(;oOb${**F6NM z=HK~56Q#HoEK3WTdzFMQ+z~5D1Y*}afcY-bt+DATN<88ZL>^^Jlu3xGERAd{Uq??k|gF?60EIn_lCC1~~;hp0B9mjX_- z(S>s4UHB)Rde~@b40THTXUPC$h2a4s1!$PB8dsY|5|N>18h5|=HAG(kW{0vIgxWnD z8nH?u#JY8RByuqPQw?;-Ibyu;M0N$DnuSi~qs{zxF;c^w3L2#=Ad`+euSmFzT*=Q= zo;rlR?X^55rSU5gF%H^~M6ctC|K6WmLqv=+9^N>Xc71eTaguQas=Rc40WwWr)Ms?L zoWYORM0+pZS3G%yt=K82dS@?x0Si_XTS^e)Ky~33-E9%Ykkp#S>UcN64$@n z;du<2{jp)AN!{4ZJRCWy-$k^Bk|8$LCAiY8Jf8J+bhoTPgn5rxEX*rrl8vJ(P{MuN znSMYNLPlf}h|MNMfCS^XP8ULfEEP(sNdvI{t^;40y8D{?opnPU@+mJTb0+DOk#6RD z`}gf>+3s4)Y3W2G0QKP4=o@!yuIE z4?lxQBB*)at9b+BWruLR#J+k!Ts@FKpc?u-x}jw7Qu&|9w^Au zRx=EQhE{9aTi9vLZyx%tono>2T>p2K_&1Jh+Sh_pDY%z&bJxrzp7{4KP&$3pbBRA+ zSW<$b&L@Zv95Rw!BuJS=g7R~I2zyiFf_0WJhR|&W(``++02*c^o{@sIDaZeQs~#mF zTKE?VeQ7rEsU#Z#+*JVDeG!sw^jKfHB>(+{Ds2b4Uxy_+X%_~^g?ViB0Yih-3D zpsfs{|1idY##zR1-Yw!_dU)-!4}n_~xH|Z5h?f7Omc?}$>t1>_6#+71XZm|(VIL=#a+Ia!?;m<4?mL-9N<{IDifZK6Vc~O6_iOnwpa`13D5WX=#w0o( zVY-?6)a|KX>)H@b^O|6@2W_*udkV?MbV&X7mrbgP?h}iBIz~IKaMc@dCQ|M=@;Uom zy|JZYV|Mr}Ak8j5n4-gXp)JwTs+MiNZ_KP)drr00kc!WL`;T+VN%YnRs8mRpW_J4h zCK%hOw^yo<5d^-!-Pg+)`V>}vSy0UcG=sE*vYlWeU~%cud^Sl2sk6KOUYCa4f4VN= zBi@gIg^JpWr4*SN9GJQNuzRd{HnN+>8k>kMJm>?`ivkPfr)4x4U2cH~nqTLe0S zC+alr@XpccL^#o9>Xh_Z)x}Vcf%@L_ z*>AK6!nU>zj~iYH5vH zt((3+`^(4g5C&Cm*S~0I<=xYoeV-*&Kwd=0D z)o10^?_|eoP~xobbT4{KI(dFVe?X+Lo=6~GeyFX3G696>`-3lS1bS^hpo*$IIL0#$ z#(c|8-%E&LfZ>m~p`6m8PhMaY(NSSUAk&&f0oc^8MFLS<09v7|7)#6v2*7tWfSR-O z{eb|GzGq1Tfa4|TW;kBzeDE2|$(tDLk-;Fiuooq`&`u};xePQI7;ih3LE7IzYW^I*KQn#SpAVC|x2{pt z9L(kOuNnp(j=TTkJ;6$PEv?3?WMk7Pm7=&FaU+u5b3$yW@gIUX^&~(E4-lYPCYB&? zb@tJTIt6m+e01<;zSOzNrxxp#J`~`I;IBk|6#Fv@Fh19obHjcB!CY z8nad+0>o>3xz_iZ>c98rDUZz(Gs|d>i-4_z*wP4r(K2Ht@BJY2>v6pWLlbE-u!c~h zU)&CmATkUa)ODn+VReE0sOdczacOh51=x+E$87VnSn|K=w9~I z!|B?u_l^ypv!oF;!}4a&u;O_zrR6oTO7NO*)kfT{;O*uA|A_husHna#+&i>%cZ+mM zBQ*-BgmgF3-O?~f2$F&*4N7-+OM`SbN_RKIyzB4(-g>jvy=!I|X70?{XP^o7};h$vIoG*7eYVU)QYE+xNG09$P3DF8+OI+vvP8t8nQ1+Or;c z>ORDoa1Z_E+7f@jT+6!Xc3^qttKE6!F-gM%wd^F9XwQ!ULbbpP26ZFDl zGdX0HCzY{PtW@>;FRva6Q{mf_)U5@UUtEfMBmM52;QYnM{@UGHwwlj!3VRFhMTWaY zRHvDue9gjkFCPLh6KV!Zhox~xsP=}N?@P;4?Pg_@i3I=pp@o$rxO&akzg#V>=j;5S zqh_haRK)-=)kV>L(ig~_{B7=#3UJ#I+df8%eeZoMS2^$LBm+3h+Kc20GqA+pY@u~j zy0g~ljSUI*7O+W$84o@?w&xOtL~2bRd} zmQcH=2qscq-w#LJ;JAW?wT@8AaPRTV>V_a=@nx>DRcreEoAxhjyI?%_2)c2xGZa94 z&LRpE;KhUi$?vEENo67c%E=6L+<{ifQ(p>JQ;{)lQo&3dc%!2S|IGn38FoB^o6Ft}z$29KaZzu`z@m9^m^g4p-@71T~9!;m68U;Os|*jTrDCVX|6~ z(Br5W{DFiY9H*z-KueyD^aWWDb(DI(lYW|=@I3Y8Yo_!igXqVA4}A}}BM;aqzOC9% zKK~g^DwFJyWhrLQ^@?K$~@#esJS99?zX2!_yhmETdYU);EB& z!;~0!4ZJdG{9sRZ_Far>hq8B_FSLW8#0%zYxa9j zsCX1yd3T~FrKVt*0z8k4`M3p6fTY`#wH5z=vyRW5G^NrMfk9YgP>0snVdW8jb?Z}&~K()4u zEQ7U^h4bQ1OCQXWeO#lcLveeP^8FohU)eP^6UasVJ^huCI__CYe3su98HC^oplZ7` zvHc+iZ0Vi&wF@MMsr*hF)J6fxQ@*g&%Ulpg(s*K&1crOEOgoR@*S5`GcPV9_1f{ff zBEd3LM~oSai#-lyJT5|E^x7HwrSf8~9#^~*}q9F&`Usl;R9-O>icr;m&YBr`lslD6T^j{g-uOws({es1iL=Sbtp8q!6Ai%e5MEyJB+}jf+D|o6 zb%;3LUPbD?ohuse5qSe*n_*>cQS)~)x_pffN0t4-zXx$)2;&MHxR(C`7x5t>fIc5?j}JgW zAc`?N!1oxt`XBtoYXt`&b_xVP0Kl+^044{vsDPK#4CY&WTxcZ@&_U4-x(!TVZ62*a z?Q3VW4L~^*D{%<9IDbP=DfE&Z?5OdEMRXPi$hlX%Wp979umuX1CpF_tc;5BK#_^QG zi)X8errXf{IVIW_;&WruiZ6XWTu3S(W^+ts&m`pCHtbR48X1-svEir>dZe)>isQ9) zOmAy~`-+9(IR8k1J_zgm%Mnp&2)@%p<7LOorAiNUScDkPki1XoJ462Scy z1nLo}8dmN-uz5ZhU)x}a{DS30wNi!H8N>T($D=z^yQhOw7*->Cs;r=T#1eKliTg)} zlXhYwPF+y%IaWBul{6keipQzn_Gm?Ww_^uSGu%fi5dL$C>_TpC9eFOeE=i?AKWY38 z{t?V~WfhEPC2Ft&&}b!p80dEOs>d||jP=#8PNZ*vw-s|Bs2G&t_h@l^B}bTb-|OPW ztPUnh@w>nho67t<#aiAl3xc@Aa929FU0z`3>^SGuEl97V-)p;225HUwpwHMxVoaw; z>0pOSD%!I_MDR_!_3@}wLVm9j0H%_u?0wppIi0XM*9F?FPyttbPgRs5W`bxwc5)Tm zslx5UR`pODc4y33bbPdq8ZxDs?K+gD-Mn8iswH-vEgJ8iAAX>{hVP`| zdxyUtU%tIh;aa^Cp@nM7^h*;M9u6~&$ZB;IO%J~q$~z+UZ&$En661Jy9f2acU~J&+em?R}(VczBwbRlP)@2_TBnQan;p+uD^k8S4 zfE`y7RT1w>SG}ULrUA%=4eMeijaK#2IbJc!$5T8uQVuG|4t@tefo`(N?MYH zJ^I#yZ))Y9TauN|KS8C(kMk%2yGyIGsK;;%S z2;kudFeM*Sd%ygwC`QXvr%XH3GyF^&{F|wL>SxcH`N!kGNjpFAC=;MLMdEpk+fGeN znm)&<{pL^NqQVAA&MJQ|*Lq|`=s{*kOmt^SOr92;9e`^gcVi8{DsYoE0qHU!?33&d zfpte8IS)xbe~o46L`eR5B*k~w-1hQlrR#a3o5Z=PC~wwvUhi4GU)M{w$74r80x+t1 zbt+@fGumeUile^@JF26|$%nO~pqbd<*x?VqKWU3_h{e})``sV&l2i)5-ysf72D0C8 zNEv5qcl1sTj*JlwOs|>DQ;kSaVN9W4>er~J!f;UE!iT(jZZIQERUbcW@ulKbqQ%*N zMc#C5=Uv-(-B_DM@7O+GlOFmAwnyf`2eu;N%FH0+9pCT}M=}*Ol%${vc5wgp`FGtt zxaePGGbrv+^dbQjN6la;0r(`iT&U9{(N74DT&fHseMW-*1OfOmqBDb*2!t@IH7m#M z-qOf)^!h~)n<0~L%JqJ}=3|glpRuF;lY#Q8Ap>sJphfe(PntgXJNusAsFd+2`aFA6 zZNSvAq#I3GSP)IjQnW-8QWc6>moVPqt+%x=Aaz)^q*k-Jd2I%tK)}6(sotzDc+nDR zF|O+U-SO45cOg`0)~^br`%zV6Ry*1&a%+9(QGD4q^a@=4!MLTgD2a8i&zKFd#pa$C@EB0B$D0IP z=gIWpoxSyJfV_DSXU6~Wx~HA?})lUFW<4+SC|3CDk@8FYrmyQDLYo0senM$uyp&*1L1Idyk964qK^r5>|Qh`5&p2@ z|6PIcNL3RNo2Y?=YvRb2`>XWB3Hwbs1Q@#YM{2Dxl$_W!GfR|VUs+wFP0txR(LdZ| z73g9oJmvAtm%;3nNS#39YKK@h-w$t3%+I8~5gkQAQSk!iaGy9DyXpxLkpL(lu9v7GNI#QtwKaTYNKfIAQ5 z*asdxWTO|&$dz~cl5=wtV8jo1N3HqN*OB5&(6X3)KAStVf#*K|=%FWdW#F!gJ8d zV2P~}atdKZ8RfJ9`4uMgOP&vK2a1~KhM-pY;Ze$k>^$NEFn;}S02+O@vlY+R@0QvW z1Z?3mZ}Y5G0W}x4{D!3?f#_s*X0>|BUT*s{MVbBZFAcu?B3W4z=KR7DOYFVR@nWwt zyKLY+YBcD2MuH(LG(B?kSLY3|=&b#g=U`CuJ&hk*4(ZoEtv3>1UR}gB7xwz|v6#hY zJ0Fc+|DA*-5FqFH9Luh6t=q2Ki!qN6^8B#VUDU&E&AKyzpLe8|wqaDf=!n#c#Alwf z<`GVw5LS2r9G+3cpxh`DZ1|cL;Y~H4a$=fMFp{22L3}^Zef*O%@AWrA-DCL|M|bBX zsUb23FcAMf>dtZzFX0JvxfLOGLQBsd^~87g8AicxB$%NyVQ%c^i&{|yKNU@fpr@*N z`%*k>4GgKFcFpY96rU0S99w{Y&m;(ise@(5X(0+kQe<&!yh8@)vp(AZ_;C&1ElGl4 zE#N3w1ssu@tg1A_NMNiYQa66@^}o!*d^{7-ne>aJgr1cU=jW3rea@2u1cSuYs%OB! z7$cZawEX?T;>XJ_T^z9DgDeu&PY{kB9%s)x1fjn-uQ(U^iL#SIvl;SL!@y>-@!s(k z+5AUh!`u%2B{tC*e&~vgY|C|+Qk^{7}12%u$bg_HKwv>q_Desd-}US6LEj zX2*!vmw`=-$|cXDPP0WS6!LjG`%X%e4)Z>b9i16qEJ!G*{Z)LpDelqwfr0OU8V0KUQK1F%&{9(y6uoY2NF7f0oSu9$Sm$ zQ_|ykvXtefYW3!+;uabFLeN$K{uSDsF{FwRFxPfuWyoTF+(qxsv0$?dF?$W^cuRfv z?mN6af3~r~{_`p#(L(kx?enEp50k9)fihyNj<|;!m83JJA>-E-DIyw&w1cwvaz)i( z@&2y9w7Kan;7G1QDeCzQl`px_sjb`MjOGsp!fHo$m-iA07b%mA=Z@`??--FgPA^xM zm@;INC*dX!9@ix_Y@bl$1Y{E%S$9u05>0bP`&<{MTVEus2%{$GPP9KBK35aM$W|5nmC=yn0??0l zQImcr5wJrC%bOvm6Yvzm4VB9bEtuk~c2<*#r+egJL8Al{NhN#;37e0ITK_L*X8Eo1 zi*D*^bR@USaeRlf=P#4SU2<5Bo`0TI5HaVC>gP=u5XU#}G&2n58z^P1|2ej&5<8ft zcWH{of~kWs;{*K6QvXd$ks0raD)4MQhZy#(>cio}7z8c?UM9*zArat_X2A+*w9Nm6 zSS_F_Ea8@S{@~PUZmybr;=!1`5^c4&w2*7Xmi)!ym;NK2jyIOp!|XTIe%zB80dtDT z8575C4$hYbq=3c+1&}!j`MV5c81t<{y88{iB3(X|1V*%%=8*A}rGR6hMnAoj#$}JJ z@N*`9kc=1!8u`LvTYemc@tt%g1%?vfzV~y932UbX2RSmGT&s+kkaygGvx#?R5d3M? zC#0o7m!|S-8uJ(9d=?N@E4gMTfdzCNkFIkd!SMC_#CLPU0l>ukxnvj;5N=!Qb@rI66aG2r0d*TV>Dw(s_#ql_%J}~UUJOS zp)`=$i?X~H@Izl@&kVDWT7=vzOT6!f@uy6s)Tig|-%}pNpL}`AwlS3(6uWkM zYuFpR1b2GR7~K$X8AzS~IQ4Y)qUYSprM~FPmz2!C*QxG~-zxiOmfrjGqZcD$v0>wC zmb<5!c$tew#~82e050C7%I5$+`thElj^sY~#^iB*%7^m4>Tqd$S@Vg}?ST8oBZ>mm z(uaDb^K&kKWxHTie6x$DCz%J&@;%cx7`0@udo4`cw(R=d>`IbM9A4BU(-sGKifNtS zx-QLzRq@)k;&6-4N;ipNa}WI$QP9xjqx&wz2|qbla!Gs>;Zv+JJ!fF7@77AOHpdMn z1E3FvU@1*=NcDcm2C|aW4Q+Vtuc&hlm?0@2%q8UqFW-fhD;C`le%JFZa%-_=TKF?) zpemNeeHebUnl|JwGZ)jA+8(gKZq(gKS6X_gDXh*G1w4LghSjBa(_);`*}l}hb|+Ig zGZ6TrKJ27mQJC)wqV9cM@MkI?rtI}0P$4T8%z~RQu~;WNix(|e;M8}^MYYX`5qPk%}fL}gOe5sh(m#~ zZ{Eux=OB!Y(Eu2jom55!M2>yIJAn0{UCVA;)jCi zK_&X57~@at5yD z#XH3(-&ykv0(7&&)mMMnV8hO~0-klnVK9F5x*_^b5S6HlKdU#ptza>kc10tH)y_gh zHTFTIOy&KT0t?UJ^9l(A2< z;HPX|=q2;3zyX{9#ao$=)2a?jgAYQIUF6$LWzg`d6c*Xd? zn>z+|>xqTX?}7Jg8N#}Q7Ykac3B05`0s_CQt+q15D<_#>pI$b5+WD!b6L&fIzp!L} zZkXunKetBS)~9e!Wyf8mm#R=?v_7gBG?u_K+IF`sFIF+uzV)Y?y24rKO?8qVeZXWh zx5jm4r|+Ku+G?l^bfj%p`MLM3D8!voL;#g_u(BAZjy+oDhU#a%_e^fhVK%~uDla|`1ObxMk-dyHm8$4eU@DF(ad zNEq3RR_<~drD8JOzMd$fQ_dzpfEw@43e&zrV?f5Tes|5UbNjnGk1+*!K_39@lF{%* z@|HWj$B2u;D!uvm-QJ|wh0W`Ozo>=t6Qjy>JKy)+7}iBHW&~Ja{J=E&|Bw>^2oU^t z`zP)VrmlhXs`p|4vAiO~k)B5{$zDFMV6OC+#8FmS<- z3a|v){kvj(uR9cAj34~eQGa28w>%G&ZKMWti2&9+Z>30i#jG**WanR|!_DYfB+$7O zc8LHLT;U6sFkIyqJ;Kzrsd-(^r`+f-nrL#EajU7(V4q@a#QJ|jOv-?i6u7Xysyo>w zCv|?i;%6uK^GM4hXGC=D0lQe0u)xChtJ3&ibnRFPE%~C~AJ6y>;88F!ro6z|+eg(X z>gBCkF>`so{f!L@%H(c{!51{~4tq3ibMu$4T~z*102Sq&wf`FOcJTCUn}LZNdOp|< zL>$Hkkk<=Rtw}=FllBQm!yw(>@f3WnQ9+yCzB%GF!|6@BzXwg=<=F-MJ0^xV{B)@O zs3%hral9p+UOy6~nI2)|HoBq|&G%0nI z!f~#EdWHtxJhy+-p5=S$XyrqKeiWWFg$#L#P6E5UQSf&MXzOn4W#)+}ZOObKW zz)#bE7r-hD*@^!<^9gJ<%Guu@{mhaRiGFfUXn=~q2B2?MOH}Y`1Uhs$26?JR!A{`> z$-g~*K)Si4UIc`K-GI42Z?J;9BN_R>WoA;C_B)qk0Uylx1$ZHVY)ZWOjWAR{x$*op zagZLW#ruc?1>%<`@}za?_M@J(Ad!+=m!Ys`)F@k~$>UxP&%J@Iy1CF%X$@1mW& zK(I*>wW%6YLXoA0L&O^iH_@59Ppj$YabKEdgoHUnH+NFv@`7SDLl)d`D&3{(Ux>xj z^C?djF{P&!ME~&-95gVjZISCO!xmwMC9#I{lcyw?F zHnk1KAN#S9H&+E(B<|~YdbQX22Cr&+EYu*voxVwp)|FSkz}}{;SRFDe@P|u%VySE1 zCBrYhjm~u9=@vb^u-5U;yw|v8xSG@x777rhNct-ibVDA#@v)XuL`-hU-OtMP66fe_ z-_y6*X7M3rMu!|Vrgej6{#juFnFSTn2O1TI-A-rw_YA213oyitDMXR?hCCW2yau(~ zj_2DNIwE8GBOaD9`<C#uC0l> zz4C2C;}Rw?el8Kcci?+4IBCvVpsGq6E9o*7=JVGsh2#VT(`>`V z`VX|U<<}A$+&Zb7Usxh(S6Abk=0pfI*AeZm++_;8F&|0VV%;6{TkdaEvpB&b+Sl2A zHWC23mlsvKI!Y>KDX`)y`{}8Xl$}tAZ%I=)?zUjWrKiDd^g6l85=Y*Zw(|@5<{AGN=WzI1 z#%ts9^SdE~or`lo?;t$6;)~!gDtH;l3tYC{pIoPeQV~q%(})|-=uO`F`OmEQ9>aa+ zoJeWGq+Q(*DJ0GVTM84<&Wl6>Da8db$VjIzu5y8?!FE;%5VnW|bA7!~9uCm+gE-9K zkCs0WF5f^}DKW6NR0Kc~WdA6eaY+7JT0opg5-?_e*HglqRnc`HU*@caH7@TFQr7ov1ykL+5HDJ<%2y`9z~v~i zZxX{(JI1Gk>?EZKbI9Pelv_&720q6si3sgI{aNh#8(b_+b%U%;W4b2;-GxQOuE0X( zJaK8_zJ<)(=tW==1tD5bcf&^gtkmOYG&f@^p~k^IIdYd&wm*Ez4#iVi8s9JyNC*2Y4^0hDKYJG$&sS+x| z#(v0~Mpcy|!gNn?p6xF@FJ5d+d!yEXXEg4RMiMnqsQt#OAZmj0DY+>+NvX<5{UvV! zsexv3NuJWJPm$^0UI&}luA^$@3}ZhsKbdUwPSQ>M`Dv)f#Q7!ORK7LPZBn?&?1qgp z|8{zj2z^t0Kl~epo@*`l?C?m=P09=(I|*75NHp zcg8U0y^b#ZT@vf-}p864-qY}C0R!4^KLe|M5cAc>VV5`9vRXWeNQqx6) zcgTG6Gd9-q1_IL8+B}YCSg9}=(~A}F94H4;yp8Pwlz-WfFY1|}hKnrj9V7%JL6l|FbEgEw<8 z>CE>hAok^h9bt|EY5BB@{&=qeG(P((C$cQNc0TaKdHR|AaM7DrI#P9Yx3sInkK&y7 zKiR4)lAPRJJ=@DapH+DWM*gW6m%2O-Tq(mlwYxX)Xx^=n@|TKT_P*@zPLup}P+_;o zl==zZp?!MKopyD-bh*_tU%S49*5$VJjx%HH(ngdkR=t`hp=mBXUmf0BGpKkO zRL0gya4>+@p~@Nu=MbTEOlVy7I=#=I>dUkp3AkLnaTi#E!*vr>ENiG1NFSEB^~|b6 zM|gI_{-ZNlDRJZBX zlqUA}u?pZi7A>Qf{8>w%o*a%9T+wr@^%C6Xc&~6_OMZFZfp3<TY8Y8HX|<&S^YmVZ=)TIW7MZ@Tce*k(#oID zm2aN=(gvzR@M~m=?%!FpMu-HDs$Tmrysd0GaaazPU*BnQu@h>jrfK(koj|H|*9$X}0$K&K`OE{iEWkYa!FYUfrq3&cvNl(-qx_caW%SXOiKd zLjLpTxyS3@aLeElc5~T8GMR1f*@dmsEX#+D;IZ)~MxVKClN@S1I;z~XY`+WP5U-3_ zY3963vnW27T=d#WvUu$HNwaq9w25i;*wiPS)VJ;}I_wl90d`AXFPAxsU34s!erq7O zEsZ8RUZm;tIqdbyzL^Ax=2n58RI3q$p7&~f`7rIv)3$HPzC?wKvUjk2XQA8Z_um6Y zPL9}Y^D_yqGicFmnR|6Vbk`RBSdeZH@AMM<{ z*QZ8TH9dHKH8Gtlw8e&u?Dvvb5#sHSCa~sS>(#mA)cZWr)c2jH7%G;T$vpVo{!E`~ z1BnE_yQAwjjvhWNx3bIS%ZYo3L{pI^IDd)0aW9Z*#%QaYk-YJ(T$VkP)ku6AKfMKO zjyfoBv9fwO%fCHzV5-zsme%}IA~{|c7mB@b=!Ai zn8kw+-2Ux9W9izjDJ}vZWQL497UFJ}G}}X$`litJRPrVF-6^aD@I}uVYSnCD!9`6k zC=D~802nuvHFt}n-wKr9zU?1=6Z~qh4^{~A#j}#(-nOWF=t$l*4X)VG+Rx;OCSJmN zQy$5W^yIDoPh9?AT|~UUFaPxC^q!6w6x+O<{ds>wLqteMzyzQSIxZ<*>E1V7I^%y3 zK<}6Qu|B2qcxikvO&c3{F+`csIQ(eAt1}y>{K)<$OxCY)u>mf+A+0)XC9PTL*P7vQ z`+b;H?#zv$bU{QIOGfdu*JvR`xnshGe7k_7(nUkWZW=p3So%?ik&qZua}zO-dTGEsBY2w?evUZL+{4<;KXN@3`&D zXI3Ap-_Zp^G-gN-LMEqu!|&fM(%uX(`lPGIwraC&+^E+zBLW?z*7q&*7eGlo$4Fw{$lU$SfLFgRykXuE)Ca^C1aYi^|Ui z*`|Tk%+3lCkNp3a0b=z3^BDgq4Z7RnUPJ?(Z4=}D{}LHc@Tdll9|kj)oW+E*drJ*? z!xBG^UJ!bg-ZXD5C%rliwK*&ggrEB89Rwa{T>s6BOI>MMCd@7)WWGNR*mJ;@l{BkC zf`er$|IRtAcKwts@P_i7Fb(WL z;eFW0i`E_}O%LGX4>7C%GF^lE*eB7fOjIHY6H~c|D+1Vq4e`Fb?eh$rvDG6>lK4Xm zO@}~z9e43tkJ0)<_ua&G68UUxJ>iAd+#Ov5!KNDqzo%Kf2IQ0&!1Ydy-nC&5l~)1x zUAcNON#Ds!)DGp#7C)F6pFx=HmxC*X-EVzfUD6Hxt}V-Y-{p({lF)Uy=aKSM)*)Uu zw=8e;++9^IrsBMeYHga!uifp5JQ+P~B>rF?XZY|YPgA7m`dW}Opieqpa`nAixS&9( z=r;%7+KA)S!i1+36kVe`%HRmeH2oA<=4ceQjxHY5P(JwaO2y{~wRbzO7+2O!n%+8 zxooiz*hdbWTqLMd}`?$3`RkPO(rFxG&N6&L4JdIozJ8E|g zJ_SfQq1ZVXP{icHn=Wpx<-g`vsq#3n+zYXLrq<^UdiDOSsGo@TQFqHua1nL3-$ne} z?kzQnFeEQ5+kGtPKrdrwk~NLFin}=k`sf~QmVNiloL0qcH4ewmrG;CHo73CwXJ*)r zho^%)V#Md`%W#I4-S6J3ez!bqrz8+++ zHTsvZP#C1Qq?eE0*fOm~G6I@@@RxICRF7QcNv2LL;!+Q6gFJthi{UyLEuD;22Ny;kq4cU(ry5p+W>=eorW=5B zTvwmAMu5ni$YY^}?n<$gCl~h(i2-7n^|ci+bd3GXR%7x6MXwM^?KQMQK% zhcf}4w7kt&7QB!{Z`o@NFWC_vn8e;ao!s4ZtPau8%79p>sMETh0p6}s@g?dkFDc`z zb!CX(8R=29;+>(E{Hu^N?%z>At4zjmRUVg49%l{f5wUui2hv-I`R7u{ctZ8ZsatQl zJKQD<7>ufx@^Gu>9LWtmae`fKIjhTGO8D3gNU{;rl1Eu2drRRRQCwc;P(a=Ijy{Ot z?a0agwKIl`_wySI9hY7O7QVzWkK!i4c!8~UiyMtPy>m0*{DZwbDb}@I{BQiv+~Jz* zm#gEg^67zMnIUOtvF+3+<(}T{iS;;vG>Cx9#__B^zog=>qbr0b+@&N|odw$AVg+TMDPYfn?9LsjYV{?h>9BnK^P<0f2N zgyb;xCfk_awaJkCOwh$K=mP|5`=c)Z%Ca6_1REsYPn>1Oe+HxX5M!1zx6XJgg+vd; zm0?B245n6l0eiF^?bR9(V7}djpI8N=;wOxY1eRvEfgM^vb+dsICCecMtYfXGoB&xs zF9@6m#;Q49f!}^AcZIE^9nudnWN2=dBtgL*OWYtDfK>^gCrpBjO8Iy}-Z#3Z-pM!a z*zO%jM$1cd5dkacIOb#(3;+|@aKi0XO}o--87X^rb$-UD3KI4NwGhF;cVp~b7Lu(Q zqydJ0Q}ZQv!dcp%*Q;f@?ljM$oeE?o<^q*hZ~7XIbBXOfXN*@>TrLqcXPBA1E>_ay zw7X3lK(;qw%2D7Ft6WsHYB4ynU_QV8Oj#~o9#5X_eja6~^|LARCi7Y|y!A!?WY5C# zZQI$8ubR2sa`-;A82c}`Wyt*BkDo3OXqJbGm3vS8@n&gkYg~%s2vpN_#Di;pO6=)- zQY@6NVnh0j+mq%SU9+IqHT6N8cMrc=F3#g+b~v8$yVm6EC6xOquhNg!%W*hS;sGP~ zx{CYvD_wZsi-sk~Hx+FqiKh|m3~n}X7BT+-LX@!)?xymv{3Ca$Kd#vc$8J{y<6M1a1y!%&H8 zqk8^{=CrRxChNw12u|k))a+jOm${Qcwh!CL1BLwFL_hx+KVQHLYmb$*_4g;;x}zHk zO9&y_?LDaHkQ)-=g_(p~7^vf=_~LNMg)rz$zgEF17o4!viR$ja$L@qioRq)JOU}y5 z%ai`3wU_#e3MVU?AA^f%$V$~*?;BtW!^-d)6_%t3A(*j5p>CRJ@<3dr=H;|}>Sg#c z@uAl%Q`|sF!5K83g#+IoPSDzHKEHrI%uVT+s^naPTh>r-c$FSUjJ!h$j);MXWV>-- zcylP}9nl1jrGH007Rfwj^2CUs^;idRiRD%EE9d^*dqYq5RqZkTSb%w% z7tQ6JvjzHCI}HFTCsE~B-ky(t8jmVBkNX}EnFBIxS_Z$CB}n8_m$Va~u$(KTD3&l&QtN_Ul8X_!J9-9qiYH5IgZMa?$Hh z@EkMj+-0<<$e5dWv*Yv#N{Nw@$o=@)jdPAQinqa5L3^OMR>*%?btB|0jB>@El_R4G zWF6gQ0u_xGV}$gSK*Ka(55idMv>_MwIM#33cKpiq9g$&nIdc)8aX8`awU_|NxWoqH z8r)EJ-lIUv-h*He5hy#~b|w<=Sg)&z3=ocF0UwdVkI_(&uz~4k$nF62YnL=+j71DA zr2w3?gP@l%bpY=s0YTuoz>|~CCI$j%kmOLqo`6r#Yoh{Lyf|-7fCt*X6~2d%oc!dk zePb8qeb-Rl-=ldDXRvw=Rh#6CV9Kt*5a!t_vh|O>e~yx_Au-7Dk(OBj?3ohSCfjvY zm#>p@E)1pvNP1|}&q$P{gz>eFBv!=j&x>3oC;g1Gl97k!`;NZIKD1^v-QRoIQC3bX z)H$4CFWX1m!=i{xmyS6}O4_Af&Yae{F)W`W68oRqE=Jp!#ov^=Y+Mf$-|1Wk5w1(z z7wuBqRN@9jyr$3_SI=CJm>faJPx{hot=P8lN0BIJ!LzMrj81H(csqBf|I{ndK}?(w zQEmiL!~0I$hq{yWYkaIrkS2*bxbtlo+XvQyi+NE0mhJkM0T8fDJ1n>2?H+tNZN4+Z z07#gpA<_h^lg!0kRFJI4QoiNhE2XDj^GRh;~k*m1^m}59Ph4&Ru@W;Yg=O- zpZ+Z_kxowuVo)tQ(GlLb#eO|miA9p@i+LemU$2EO_)f>8&6)|Kx~4z`iRPL)#m}7c z;KPQcZ9d`C1dH*BE^#=T5EbjVPA8#laXoN+C^M4je}4os>mYy;$Z~s{{yhVf!~mEG z0E~OYxgr5T1wMFdy4O*p0Q|!t;BRN5U3>>M3{%joSUc)cwf}`?D8X*%;XMJ5|Il~9 z*qU+yiAm=s3wS{)lVLXD`v3L3B z=pyWh7Rgj;Gg}n0BHx!m0y!}_^^gyj+vwptcoCqhk1qfd6>7RAFnqqL zg#z6EMe+)aUH9Rs*=G>@R$5}6NLh>pl|fbyR4q0{nB4OO^79l0ZxaEbi#UEhJ&tpK z9h%;XjI^gNVnT(UGqYuKtqqp75YAZ%Vn3%WlNND4&+KhBa!AP}Jh4Xykbu8lcmOBe z%nRT*2{7>lASEaSzLunU0d>>twoRN`A80en+{_-BQo&LOM1$73`+`jwWJokFvLl`kr zO?$p5XPV5HakEA8=>awDv~>(ll(lGAbQPtnGQO_Ax0qm3yzgtlLN zzRa@xxi^2e-MdH8q#lAuVmeA#A3ncN$PXlMSiT*@3mLg~E-#-N>X@Tnp5ZiX<(B^{ zJ3UE41dIpJzrXkT{7Z15wq%x<3aNNqDi6Tv_;oCY0=6Z@rUP_cBqhaxyz99!OjEh4 zcZkO>#eSlI;}eJEDohCe@Sr#8pb;(wz2^RsNq>DN3KA~>`~|s#qL`o)2LEj1 z0QP}~8E_v)bFU_(f$AjyQ1VCp2-L{|Z{!tkvL|bQfe5*f@iA3=q>N_Ie^0MO;e^M% z5XA@YG8tPG4?`OKCO`H0KGKo|$gnj$axi=Uv@R@0Wb9k{pYIRz1ObQEs*-SnA+h%B zQ8v=Cg}0gZ%VB~n%e4cXGK?KdSil!1_F>}L-~mJ>f2>t@V{=cif0_;?{o<7%;4T5I z`S?8t={&C+jW3Q}vI~aBaljAG0y$d=#{h8F>aGfb6;5sgD*sQc^?w2m|3M}|NiTqJ z2cAd<<`x>jV+uSF1piJr|4t|Y$$k}Vlhn)%!soU~pSV{8MjcsDMRir$&;eG6^rmUG zxg7wrTMj{LmE(!tq57<>n2NRX3UzzN5CW>JHf**#jctJomt*(%@W#Fg7kv}8>RQ7d zAS`mgKKAqJ(dg44aiZ-Z%O7wSCxH4omP!|54FN8%4Tzk>VYv_(B_J*W!0rHOEn->| z>=evfb+>$JK$#_ivL%d6b8vwU%gq!*A*KXybO3q8IFuKon*)e4)??-bFI zfmn+UR*>HcrEZG{zRE)_;1d{NaTa#t2|@MgKsE(`08dm9Ir4Uw4}38ID1H9tn1S5D zBuKl41S@DMY8o#SU}*24NY2Zi9dD#WI*-N}F!XjcDbWGz{Jv^(^!5e*KQYmPxfjTKc0mxSd#iTQezH+BOyy#x^pq zA$)(iL=l(L+IM^21vx6p!TNb+~S z6QGsD{=^XE1|enBwe-G0enRQ%L+e5buoix({f^zE^L$x{k~esz(~n!?xM#qvha7l6 zIcR0<)~kaIi*L_<{gmyE0?g9oFhN!7S6b)hu~2(lwWuabc3EM`Q+6T^f#v>wPdGaM zT;BmdCmbc-pPGAu-dkf{SnnfJ2ErJHs^xWC{Mp*?0^@ zAkb%#&PzARFHP!F|D;WPBW9V2!1FP5KvnG9AuZXB42nNLyM2t++L{+R3xQp4lcuZ6 z109Xe#qPVxQg9KMmYyX!Bif6;J~!5jdG&$3jPwPP@F}|Tk*#%0f04{BOY8bskI82Q zD3_*DQjz}O92EyUDc6%~UtM?qqy!$^1ZEG>@|{Q$9nc5&SRI?3F~RS+CXE?}m_(+O zM6~>_G#P(9puYh|-(#2Dn#0)7bqe zc+yn;%w=!(WZOAio=Ui5)nuHEDZ$+C;Wt4w%LoW;MEOAv6$Su($4`K{-*p<0n>%H| zz1|Vvj8ipXz4Rmn{H1iC03mT|P&=0GTXaBIg^cIS1gK6kRQ(7chPq1D(Ew*yph#pq z@UMR{@!l_FHBhSp92>hk_d8~CZOnNb4}hm(x^Y;43KSPaRvtFrsf-1P7F&nAWEMOd!uH4E-piXm`)H!UC8F_PL>GZXZP|q-S zG}#aKA}-2#)uzY6VZ(QPPkK2|dDM;_s7-E` zuR~8p=ckzDl$Ly@R5J4lf4enyu0$op09Dju19@H<5W zuQb^!9oHc9A7@D6o8RA$^M(A>y9Tg=!;qBMtWmxRa`jO(#rj*Yt^b7yIT~SQvL;zX zI~&%da}i>zkYYBy=;S$YBYjzJbQ;2wN zJB*wvma4N|P99xq_FEie58i(QF3#B6z9Pkr|A(lvjB2Y3xAhKMTnojev^d4xOM&9< z?(VLk6e;dfT#CE9ySux)yWV`~o;z-Ste+VfdnY?<&H2t}!ZjTKci;lL$T)zk@No31 z28S%h5i2=2FB8MEAO7|G>8%e@w3@zO?#d!NHRkfZ*bR?dKR^=nS&U)JosU%%P4 zW9IAJ^j#?s`j(Emts!n-VFH3*9*ms@NS<0qeBeK= zr_?7!4=oHaJ`+5<&K`#V`Kged2ft2_q5Ju_y-!Pt7i;e=t$*58t(<&aB~J0K>b!nl&qK0mw(tyxWfe>rXhp}u4$2V`wdwf8_WaMuP1l=L5;~< z9>IE^&A%#M@~H%8=gT9dIem0vPsQr0UyGr3<|RN4YaP`YmnOlo!5IcksrAfaG z%Y!R$lQbiM;3j6hIqVV$P*w|^dIklAQF!S%+Rf+rt2vUOr+?V|#?hoG;#r;|Q0%rQW!D3`~> zJ?Q(G$_8 z6PM?s5k6qCA(}-=*U!DH#uNfp2rA}@jrqw=BwL)bjLk^9jFtTA|)RcaaT`UK)dOv6<E+<0K@OQD@6)zR)kuOdK3{w!OXi#K+9eLrx_BK~ zLtc8hY=0?^tw}NbEtoTD8+w0g9^K`xSC8yT)?MzUE#YpB<_Uw!2X zT)Ou?U*GO=32yj%npb{I@~WTg@j&Q0ZzPg?Cz;RMjYT*|fGr#R-xj67#NAUfVfFZI z?dS4s&b294ps%+_761*PMeAIPAQ@@s%7XW`@>HWa>gZFFe2Wi}li0C|saJ-qBSa>) ztohEYjn59q$-w*>E-oWU_`2DCf{M;y+}I=g2_h zjN-e!wcmOL8VG!80a8G&AA*6qOy@-gU7!M_GyrvBh`3<&&h(eg%L8d3oIaBvl;jJ* zDa~ilwE*sIjuiBN0FlISLg24zjje5rO3j|W^$8kSy!Cd^o138TqNqeMM{C%>~XaYB$+ zuMFB>6ge3vz^e%^H(hzh^7^!Jf%&?-!mo~4NE-6|b<*`cdK;b9nm^0?=>O*}d()9Pu>1aAaAa@n@*W+o^f$CV{52(4lq z$8CdSH4`FyV!OUw(McXxhKuwU?s6eWh{s$YQ zf2T!sQ7x>=63M!dX6`?Gzij5(F7E);;2tjP(fHR!bHpabKl?{epJ80TW6^66ZHKCeRTdy_ z{OT_KbdOdlRR3aD6K|ULAqvdG+C~e23rPUWCKIP1hV*k56Cy!>1laG41f}x_b-}h> z9$044Z;2YYoZ@;l@jtpq0<6FL6n~~c?}7Q9@mxb;hcaRMV^l~gM{q&+Cz4?=QjJ74D%YtEJGZUpcewU@7f*?A ztv@Yoi)I%sOz4Gmzv^?`6npaPZmZ2UQKl^WxjQ}}pssA+yXrM~Bek<#?nN-bfsZ`S z+&AJPcxP|emOdBPVFP1x_=QhM z1M7G?^+TdyD?H$aVWr{d*+BFZ@Bvuq&4<#Y1v>7QB_vnh?TVqWTYMf-(|K*w0!{@4 zY&pRD39PVfU*uNXTVXg%BKI#|={P2MGAv5!y(Q|Dwsoz9vGtrWn29Z*lDK@JF0*iyM{7s6cOMA2aem(2PXXaKrWlwP!}KVO20t^Mc7Hz9l@67z?yqH z4H&B=)Q zY-BP3p6Y4fDTRTKJTMd~^4bx-$?y8y94}6j29BDs4)v$9lL|aDO+&ztllTc-*nbrY z)xTRg2{V5!{5*43Y>^@uG&kRNEC|(+H`NzMAy!*>z7Al38NhwxqLtItlr+wkq9d(w zM-wX#aJ{H>*RMKV#yfU6$iwm zCb(F;LVGackO0a(nkK^ixd@T*sWiA zinxx{!2vDd=)>J-+RoCLASRiVbgw?I{(g^*FrO3%4(HTwGYBmm`ru9Uka!iLokYzF z5(b4v5(j=;nF$f1ZK>*19K80bM^q<08{c+_sYyuLZqpD(VPhI2PHQ;XiE~ZA55}aS z56m|6NcPc0b@@WDPy_Ar_wXy7?#shWBrE~^C$8Y5j|4*A9B}EsnHrcxLph54)Yl*0;KkzGm{?JQye2{@%)JD=7358<#uhgRKo?nmb)17Z!X{|Zvo9A~ z9VGa!3b2`bHGS>;a$5eHCM#{&8z`MP_tPPie=;fVUx7FmPE|y`E+s?J_vJ-&Db^rp z&qsW{1?DJBf!nB2qa;qStm|a4PQzOk_*A{ayS;uEbH03kd-R^5?ap~2pNKOA(5o z&*Q6Zhi{U|`^c%7FAHcQQuQms@ii)wvU_?bSDi<@pEA<59wb5%{o5hHcX0i#HiWAVk5Itrk&lsnhY3lEM7$22 z1uX6}V^vfXi*fT$N=!Hk`5y(4v|}UwH@9C zrdtE7U{#3{dN)enjRxGc??)w)t9~wA;Vyd}+f|s0dj8>e-e+*YmRbA^PyQ-VGV#RO zwEt86x4`Qkg00J}kg?h_1%5#6saH+S;83NV(|=K#a7Hc0GA3_2Jzbz|9EQNJ_P1Yv z3(?OX;tmH(xrB`1u|1qTJO2bht7Ib_ctu=evcxSg21rR-GDi$@ii-`{tp3#=<${2L z!cKj#sHqOf`MKu?SKxbK<1<`<7!O4;jB7nYmy(P}CGL4%#>m@F~G0a3vIN|gBLOHIRVoBu&mC)-<5wq&p z842hZR(+_#oF%{kb911+m_ugYoUfHc6oqpAM=CjY9jBO-Y|h?UMF`87sRfqRE2mOl z-)c3%$Ck2_3mxLvNuo09#o`NOm>KRzg)WZH@^4(q+|sr>IBEWUpUTL;!SEnUalN`ex;{*>8 zZxy7Qm*sD-PQFXm^cnosiZ%tE9`9~w)#G|}{ZisfqhI*eEaM+W?ClF}4xUE*^^lmr z&@$3)fJCbD(pZ{_$e;=Sor-FeM~fN#Nb}1eV^U{Xp;l+vt4aH!6I+eSJ4oAZSe2G` zzc)36h!J@?gK{|IDwzsL3FF*)h>coFd=H-jkg@{O7nV1nnMP%~volWHEIv0xx5GE* zJYQ&HXT2p+DID=Z_AhiAuDk7ywxKC-H&T}J%y|dza>NCgL1~wn~>d+#`kZ7AOqiloCMt6T?i^=WH4N?cpS~keI#=FD#Ag~eC%>$4(TP-5whKlxWu>L1 zb7hyY(MaIJ$J3E7pzhrV7}v$aLWp?O^Yjq1CkxXjIM&i8j(ZSIekY%4U9U29_vGqjv*gH?l!VgXznVm*R?5|A_Drp$R>zHlQyU@{Rpvwe%C~YDt zUrs?L#S~Jx!!Pjv`*C%#xo^po z+Q)GbF%QqPP4=e2vLc{49)LK_-R{D%DuB~GLss}P zU{l;wyiZEr@LvsU{aR!n6JL^WOQ>3_Rrl-;eyqNi6)M4%*e%jG&)T+eFEL^6qMroC zr?%4)=`B`kF0NW3LFLy)*Zr>tJ~%vEBcpfiSwqf)W=&c=`H8hhrB2Xq{B*Gy*1Hx* zupDq z``LaDsrqkw9i7%D_i)Nq0=$2_;@RA=%)masTOmK=!uCr4OD`;dk&Y5D0t6#k**EsG zzI3(#U}JdFFEck2b|eIXzB!-^ARfYl5FvY&*+^yw?4CXW_(0~`^|{)HU)i177$Oxi z6;-nb^Mr=*--o*nY$q+O0j1F+AuMJMI8^l7(W9H2f_x7&1f>sraXUH@Js{j(z7&Ngz&n?5jQ^Tp1MOS^W7(_ zu^~*)j?HMAY_iUgSR^yl%$v8Fc&>b_XfwQzqwbMGp}ec8pK$z zND|8|CX&8kif{m}lUB5ejSLlkQ0tKi9EIqM`|W6^&{31Q>Glgwj8Ux3omrhL4-CR& znWcq6l;vT(Ky+Xn*uaAJ+?(sHEk=8N21Qa{k9VJ&IRqPh)Y;f9v<3sTE*7UQ2UGk< ziF#Gnk|}Xkpts6f@DJBr>|X>RiW?^UP4G(S#h5fke~>6tk~<1duMh6y{dcu~KUg|! zK>qBd`ICFDfanEMq=q@;4er{NCk8bCkT1D(3pSMNPC5?wqhf+y!#z&v)rj+!pbZA+Jr|cUSAjQhM zIWI_SL6$oNt6X8yuk~xPd*r(xuj+bG+)cmb6kd+UeK4+UhWuLt%aG~!SKBXOFSC+* z_6sHQ#tWZJnwS1ph?@s4J#WVXFMR6Ax=?^h^j&~o5Pg(qAq+WvrzHTdWVcb|EJ@ke zT@cH;2KzfhS-dp<9vW=}bu13S31S0Rw@ARtU&=IU2+JDG0M+521KFJbm-x{25O28- zxMt3S&?%oeCehW+R5h_Y`#_8KrY$GdsmRL4}P$DU7eXEpGA zqgj$6WAyt##8wRbfu@=~BaS*-F?KfWz_O?e$H_C?kkv6*f_+pv%MBjot04~J8P??k0 zlrqli&Dc5MYVn1L*zulB0S4^D3MssVR3cw0=LT~Dt~%{l{}`cxp$8n2Hzv}&-t_Vb ze_3eF@-@}ENwE*OiqtkCg&l=mm&Az_vb|G0}<(-bng z#E`asMWkMoM2T5hKNfu>qh%1E=j3ePjB8>UL$j!>pfpMVB(x6%}qJX+jjh^C7 zDN~P@X9eb4e`XEMxM+8V$lCY1Bk!rG^6->NxWw;c^_0fkF384*xuq>!a)n0W7}FHp zm3+v0?WMxK#$AQJ+mAP5If)DQ;H>ik)eg<>&62hzA;RmY?!*&N^cB~__N2ij^c?`D zm|A;!uqQmgCPBXWgIov44*C+aP*G`i`1H=r$o@X8g+Ub7uxlNSRIS{zV)3|zJK*E0 z<|*&>z=hQLJ}*1!%^Y(NbSa53D!Z#`->J67{uXCxkPf~6JX)gnRO6zAY_le+pOk8S z{_%*A5ucDGhVtv~eeEyJuh!{3CohG46ywqy4=uRKXBJ9xL6GXbpt%eyrxdRW^2ll0 zqu3>}BATB~?{wuZnkqWQd!01A$KUb^V-qDJf^55yIae}PPGZGjex3V2!1=HGu7OX_ z*uqnIY;G)cP&-OXLf!EfJw{>MQ_jy}u@yHh;Gx^e$7H0P1R{Ru#{P+E$k7HuB&5o` z(dz#nFBdWx@Zak{PRxJS?|`Fw@Bhdo0so03PX8^b|1Af^!Il?TtA+}7Q}4RvWo%km zXToccf=3sp$NtK}?EeWLFmQqd7tCQlX#wCPkY$iMa5lg8rVL=@X1mHUdTR;bxf2sk1Qs+glBK$lwAeH|!07jf> z^yW`*qW2_O8L*Z?sNzfzad|$?=Ze|XK~ab_`RR=wp@Q)&t3cy z#6n>Kgla5EPdS<VYdKgQ``_VtGm3{M*AIy!?QEv4nP78X_LF+IIeKM}igX0!P&YseVn>Js>e`G)55Y41M z>d{)Afv59r%ZTjbz(9I zwB}``;&}Rr@YuV7uk-8Edc#5ORL~S}wMMI@sj`uH?+Hoe3s<$-+b^O_%+7suykzld>BP_iHUk6$KAiacpvIF(-q7FjPKm0zZbAc3FxwCAVuQ*wc3>J zM=b0FR}Ifki`7Q1VL_`t+z2eFcaTzJY_vixUYod>t*{cit)o3xd;|$+l-JF740!QZ5#RDt{>a`0izYd}&q<%l zb<@shPoiklnJI?9j~G4PLpJ=}NR+nM>*Wl$($J`c?XW96zM=TmcF0;u*dMpnZI!`R zkmr)E0$}%yi-cMuaM;oP7MhQ16DJFGcMNyZ*UNBa=SO>n22N)SaK2zs27+TfT5tzH z=>So4e}P~qCm-tjCBIG0C8%9wAp0X&3~c5Cq-@*dyQjBfuJbwFhG3U`hvg z^Ftwyj9C;C>BbDHOpzijxyFnP-|ua@c7=iMM6aErO?2ba2sxphU#E|Odv2d{uD+*x zeHNryDs~!{<7Sg7uayy1uclN*t5r?@vb*c+JH8)oKOdC%{c_938vjdA@?+))T-JZ*O%sJ#<$k6O`qI`A0)Hh*yXq0p`yfF+nU#q=70m+H_E58X88x1Eo`a zCcE1Z@RY$9<$GmzE_fA%|LK+5m_*>G9t3>{8GeR`-2ivv#g{b4AG5qXfAG)zWbti7c0y(^uOOlM3*q9g1_1zmWYSSd^AuG6pDH zfuhjclQ&oWE@AcPymEfpEvvdn|NOIO6I_@*7jsukJu{Zuxz98*|HM^JxowBIS+s&~ zx%Em}#@eq_nc=)|VV^}C4pta1&-q@tVmC)E`IWEV&R6ICc%!u>Ltu@(>ByY;mVdbH z5wMTYPoeT%dGhZMkjyZ!Vn1q;a!YGR$3vzOzCGiyd!wx$Mo(Y(lKfl0dQ$eK77TPN zM&VLBM<-0e25XMIVkK%C>R$$_tT@g_gauiij`#GHKR%d@@T+*clhN>!S)@h_W?LkF z;Yyz;F#T8N!CljTg0N=GrDN2ZP3pZ)l*<3_5T2g!zS?R?5l`grAjfz!e8j`y@(^;G#r|L1$ctxpk+UF`bQ{UYB@ zZkEkTLQ{CTK75TLS3YVD?a+YRGZ+?(2j)$%@S66dp8mN!ijtqvO}i?n-d*1K(rZ?; zcycsMfcJ8%m#(fwP|`aN@AnOsQx7Q*iIfr{J->Jdex!j~mh7FgAZ8cJk@8XG#N43x za$GpU_rECmh6?mtCsz+-oZD_$5asJz1N00W&~T9@1)RO_{_cUeu0t06e3@tOn(P2` zcv@UHUR@>$elc*she(c^09EmrpMy(uiUi@R0hv(175`V@rHet;8tmF8$0T*ik3jlG z3JHMcgZ<%S4)B64eG35aXSWnbP2Oe{z%4x>n-mOWvwfvhf>mPOb6Ow?yj}lUNf-Hc zSunYF@IYV5;NUd6UD(x_8%QP6fq7fJ*RyZG`$%khgo{B+W}j$fb}2KfUSMI5oc?=) zt2X2p&CxH_A7G;?M|p5a1r11pSKV=8S3fDF?Y@)JJ4RWa62YDnCJre+8=j9ogvv}r zptczMFx2$3*y%*O=F=)X%^fX|6RTLB_1n`HMhCnIFb^IcmPQ;!Z;2ik~6G^AGsEl>+jTOB^^1|g+V zMtKg6%cBd1hNFyNV5KG;g9}4&HnLKC`_1ZlICLkIs1*uoYV<}20@JZyh|kWlTzz z-~Tg6WSBiA52GbWOwlH2U zKk*=*A6IR$3?LVhJvX6Mi}Xxl_CSZg{~8fj5V(N;99Yu-qH!O6WwY9%cD2{=o2+d# zQtxa+`Zp;%0b*3Sa>KpjyHcQcegB?B+35B4xx3(AG)cs}dveP(toWXbJM?*Pn&614 zn2|KaA_mT_U)^(`N5M8jr0DBBM_iu*V`WdiT3zIPfpvcNz_Pi667_p~+fhI1MND^P z;1b8pdRPWbnySP3@zG^1f($C6W-k88l2z{}{!>5muOND=Hv+X*A`z|GwLhH=p7=h$ z{BSdz+TDv0yc}12B&U-zcj5DIBOhpEN?#2G_I&=KmQ)W-M$gT1;_g3Nv6p&C+3Qn4uU&pZ7)@^H#CNl~*wTa)3o zIX{oGHI<2`tG3)jv#CC^Q7p*@SvtP-CWeYBi4f}!t7i~?9zErcKhDU7W3R>DzCl*+ zItf27YL0Aw_ato9+oBpchm@ECvW6SK@Nj=^GGn)UWN(Bmo++REKshjvk*&@4C{x|e zY5i+~Vh<|5!SZk-gv4v3ddGL`4nouop}k-H@Rzh94<)cBxA0~)IXPrD9*ksIKZyBg z{o--sGhJ^BX&gOa=a&TawEF}Ee}FWQU=z1OF!{qMCvyBe_#qLDv88#B`-Wk`R6Czs zJ5Ka@Fgu>w#R3;!`o+jm12&3bfliRf(;f-%oAMp4Is%BZR0hWZdge;xnc}z7E-{1q zOg`nDf_?+|2=}FpJ|@xTN0ay-e1q-1j9xhtE$P{$h`*qdkR->$o#1<}3dsk_5S>uB zkRH^>IKVvi}d=#pOs#NO1feSC0t~tJZa~7)Q(MY z_oFE=o9#PhJOiP-a-iB$P-JVyx{+5?D%T$k>>>*aX(M$)!$)c#&yWBOHq^42b=M4M zFZyzBFOBB;{&m^y+sg*cr6|Q5#REsxF03a(kJp2op{j2b$vhZwue0$D{7}Kjkc^?f z1lvf>#l#UJocRJKs=R$T0q*iXx{r{f=YedYW;{IYyrYiM)A03WG-zsBg}mP_;R7Kp z@%ZC&m^cOi4&nzX;boftwK;n^c)zT4tzjWvWAU`QVOsO}OnFmk4Zk0OmlGGexNm9d z$9vY0rb}xYV^{{w;>cr|RT#s4p{P?W9LJ@NUwDlREaA@U=gLg0bgFHl{Js%0R!8*uikz z+ut^hQR_$aSlWuV9fFqei$TPYvGCC$RE2AWOeS0csnz*Av-=XENwz9)Iu=K>me&B* z+%Z;UgAxK}-Adahc-P2)<(WAz^8rfAF|||W`afYS!q)z7sUg_4kMD@g6+T}n|4cji z3Y&vd?C)k*aGDlaA52lFu+8zc&TpGegyD8_o=oVI$+Ai4iuO-6X3nd8q~^f)b6y(BUhQ8U_HXlk)ovKNOtmb!Gf+N1m0gSEot}Mcls$WCdar8r-QF}*`}1O~CHH8c zwssM9Yx_0ShnjOsI_W(G`Ru7|9cn3I`K|gjhsrhOnf}oCxNO%Iy@W)q;v8PAiyt?{ z=mVrLP{AN!L>g!mRHeJ_Jo}8}b8HxiY3qX-BD|!zQtkb>MPaTGrB1qKRsGoOI-mSz zaYSU-=hd5QoLyH_RvM?|Au`QTjBb3I`0ail!S&jbf9d<0!<{fk{N}N>#9xEUcS@?8 zbl}qD>(24hvTxnH0oOQxVcy!=`tI4MjJJ80k^6G*Fdx~g(Zr%=`V512%*46#ZR-X! z8@8pBdiH6`Bh_<*%1CSWs5F=F(~*65-t8f$QM|Wr)p2WE;BaF3Yo{#OouK$CSWwyy2El%J zx)jEVl7##Bzk$4t%>S=VK?1_Sa@;cvZf!$zW7qiTz{o(`$n1a0RM&rt3gJ)}Zbsl9 zG*h0ay6@dqZo@ypp_PoM_RWE1kG0$OM&^u#bUu%(!n5C>=1h~P>qpLN(DsVd!yioF zRV0Y z%B^l$!r|Vg)7nIrWZnZd@7QxPvx*qa^^yxVO`+FIFSf7b zXsQ{<35T)k6+ey9Tn`7^X*(0ElrOiDp}6J=&{&>ORh{~}KU%)1M;4#(If1C8=B^Uk zU?P2kYA~pmZOCnB+Lux@eKxa>F&2rBh~Mw-8u~Kqy-W#c6oc=@O($*jM~{3D8geaO znJ222OO+PoW*rP%v(KKMzBxBRP{!x6p&BVH#byC|5*o9#(RMip6C!7hwrY%Y`p!NHZ*3aYiG#k#=#OzHm0Z-;V zNu$M^SApW}l-8MCTayMa;gj;AfziYeb5sw}!!q?MsS=yf*JB4x?`O`&V-=;~dMLn? zoErXGac^q%M6jYhBZ0M^Vk>X}=qn!J$zj@1u zgfjnGr%chodcxXx2-PuQGACbP)9w6b(TGSc+#|=)*YuLLq?NK?OURZ1XR&vB8zu_o*}qT*~o1_ri}BtIdJSBA2Mie_WoK;Iq4gKZ!@LmNH06% zwiYP5WeRjW)|{JJ)z`aEIJ`UcZd969lEs?aLOO0Vr> zy_@e(y~U$UbDF$0nr>5jf5XdhvEFvQuumBy5e(^vFyf5vmXqbQ#>&mF^bHzL!%wqO z{?|}40{`K5(ev1ur~czb=xmU)HM^3;fHx9-`9J*TaICMi&SF z?!l#4(&04r>*TNbeL36h*r&}c{J!;9Hv7S^vf~!{+F~e25XX4!U70||_VvkGYWa3F z@#@UL!bSgE^Ip4v>I`Av=3k4IwXJn>x^b+OYyAYR3FApl4E=(pjZgI?j7Tya-tQN( zVOlqx^>`6AcU=K)+BcP5hde>b=j5ZrSN+;twhz9Roao!@gsiTYYsRKkmv=u(;9?C7 z2OZOt4D73)i0=s%4LJC)o~iR?nQL>3?9sG#5abpLSVWs9wL?XyX!O;A3 zUzPGe@Z|zmqdv99lgFpuA~%OG@DKAJi3wW?y5~}6+gj3ZGeio@g@zv92`)AGXKGn> zt7cNi7$d(8o3sf@O^gTDp~_SSA^s4PptCQUL~D{s^E?QlA2!T)YT!OivWV-oY0+cm zK(O|`^X)+t&NuXp^=EjV#-Ep`=9cYxY?I$6p^kaph^tF=9u44i-6iz9P+82`_Yz)t zifA=0N8^Xrc1iWobT}b2X!&#;Y+S?C))s)|gbqvgXZt-(Qkj9VGlz&GB4+lmQKjb*=! z4l?l3e}jbAo`dQKf)e|xjI|y*A7)I|GZ4>@?#nH#&u?_;-LK2eH3I1K>PfpDBI1I6 zTnFAZJ1ctraWEnrCfLiW#pJY{m*2)XvN>B;%ND3w#|=I;uAzZGAxIDl=(}t)Y_u~3 zm5U{@yb>Q2+)5AL>HclU&QP)+;p3B)hBLh06PL`ihzx)LSCsB(EKN=?mo96z{;c&B zMDB6djT8^ws7XciB)p6F{64Zab&r1IV(A0I?r==9`qq*q8j~#-EVa~&V=XG|BR}Sx zo-nw!%Pl0^o_eF4>}yc(wSD3rU$^zTwCp)??J4pY!_x@bw+VRf3$EracRVRu|CBT8 zVm7A`;Xr6yaJ!M~Y$`!{GB^|d`5>7vgLX1}v|@S?h2(Rs#z7pPvhAs6Hu>z}KEG0r zFDIUQeA*B;Cb$9W!0!h2W%S}_TV8JwEKA;dZWHtqNHIHT{Gs)MKjo9Gk>BM7VaxB_ zLs72>G!OJqE0Y(WjFH*HVmTQ=>M6`Qr>~84hs85Fh4r6{2Eh*=L2V9Ie}~pU;e`UeYJ|tbr!~F{-kV6*`;zU% z)qn%e47zC{1;qmO7lpLUqR0yI(_g<`jG?fw1HPp15HImRm99=dmzrO|B7gY^3b10C zqW_*VbX^}PF($gB_sQ7ZnQYv4loSoF2NHSYaNng~?oo7=b}};BX%LGN+RL$rqy!Q( zw&9{Tf2uq2m7A)XBDiCjCBEyrqJ&c>00-P!WTHU>Z#z0D2a`c1)%QpHc#ZMO2;gs; z@6z)&)gm;Z&{mehw{mtJjW!-aqWI1JRo_DA6#G-4MC7pmB}P=jBS}bGUuhO#F@wMe zyxIbKkU;V9o2n?vX=1x*A|N#(ky_$t1GJ>TGHR7h*`0l0WoDM>E{!zrf7B=j9Pj$w z%p!U7K?MWo!MmSVyB@1A6tJT+vvER|m6Tf8>`)=d3r{ej8|NUR)Aj0F?;t=A6-=}e zRxRpCBDi|gu&WgUKeZ2X3gFC}hXX7eS)KGejFd9>nE?|8n?X5IlSo7wFLn@k-cZ|X zFvlp;G9M%hCQnP31BI*>!UF2!5cxkE#>P(pkRRBZb^JN<@m~0AHtVH=5h3U8Gt0Lo z>Azzqsr@OY7DF_-Ves!8XKOcH;nR}XXhntNo^5f&woh#pUAdy4&4t`t?W#9o zOzs!kb=zFM$&=t%tbLiU#mB*+Zl4~GcDon!GgW9`^Ufv!RXu z(Um^y@4N~sEVjJ-r|y!p z$qs;$*a@#2`($SP!L|&Ia<%B$uWHOcAwI)HVl==!RnW?vFK3ASZ;z+$c(#4rZ#z+q zjQ5?sHxgM*nq#2;&2Eb9iM>v709=uroh>b_%hy;$e;0H zVIu`0Oq>3fm(e*W^B`jQn?06B*L{WGaI#YvE0O=-o~#?)uU7B00_L8KQ1W zPmga;?1Xf?xc{1jC0viq;1-<_e_GbY1jD@h{o!n7LICxS92Vbo-1lqcS|oXs%uYO!k95Rr z{4y*yTI5R&zdG?8$Fg-6ql-A_cEE^Jvl6#(v?4CwA^dBZu_}IaSNZq)!aGfeRy96{ zkOQ}Q`Rut-<6F7=_ev70cTU~${3gDC`IpDc8Rt5eYe}n)zUnxSH|L|LYs-9}7oT+r zYgSbTjh9-9#qL)xxY|M-IVghix>Fv}*^1YXpBl=}S9iT7ectPBvwMwlv;cz4Bt>qX z#OKFzVO*d?Zto9;5UAoo3%m{E^T-3s5Nd>MKT*?z$DvR!k@Sc84?Xu=7uyvalga&a zzFzp=?-4;lw=p*@PPxpecMe2S4tT&$NC=AX;ZjNn(#Kl@X3>d2h=PLx>co z&s%MUwlcEd8d3u1;v$okjWR{Pj$!*;Rh@-YoG=(NLoPnehj(Xw?Fx@jj?Vw~L-v2nM6N_&|3?=9Qa*qD&|g*C zhddj?L13TTTvAYJu>p|Bl<`FA%(Zu;R>HS=+Hcg5X<#VPx#5PoYuPpB=z*V=$(q}p zV-zb^<++z9xy)IeJHd%L&95D?IrsW&^WTg6#J+ykm-T~koKL7O2_blEqXT)F=jJm3 zxPJAkH@9{_z5@UeCAk{xdG#gj6CItY2aFV_aqq?JPZd7fo6%jSUn{{iS${2znPGjQ)*Z5iK__{u3zAEp*WE;ppRr^H)=LZ(v2JOk_lZS z4;;Nys)9Li8aPCWH6M^>x{9ba9V~kO0x8w#DhckZe6?8XLHGK<*jd>>gZ%$+T~IAM zXi9d^`4881=U=!C_HPIOx5JXbnWk|_{+!AiWhA zVs_{8W9F@`e)xEwB5aqvv5hjU1SUmyj7iKuji+?pfXjrzLLg9D8>(RiZx+x*OO*l| zcyQ+ZMSOo+YwsX&X*hBt72uf%kRwod;7|aDFb5jVL9w->v;$HuoR(aRo=A;V060PS zAR7}}9#l(ELx=Ghf|KdNEbx%t7~ueghA>>I!D+y6nJxA>S%aPBhCkLRGGsFcPco8unk`#>&5vzme-MJqwh{%}yzPXFxj zm0=nGul7poewml2k=BLum+#0ae?Lo69C2nb4^jx$VDlTuxn1^%>CF6wungp&`?F`a zc`I|0;lCO5JDNYb)SrNlKUqFCZ222zrPcjp736ZOcg7~&UZZ1yD^b^*Rv~;YV#Xnk zAIx${%9=PjI$y=xw6sPW(ZM&Q#{r*GV~XeZnOMpyc2RGl8ye0@L+xn=&_qf%zE_{v z&1TxBByx7IW?1=%9P$IufU)tG@?+OZs7KS2qJa|&uQW4Bfom~WL`z#2YW@2&wLD1{ zQ`XEK8RmQ=oi}U<1Qh*!<&O<|9}B{}HdAnKKSr zMx2!`2{GeiDV3vjkh#^K5f4o|PXvHwCgm4)hd$`0I#hr@A3Iy(N+(RoSAofQC z)gKPb`{@B9a`0bi``H+T#fCO?D$vV2Z#Dp8k*5Bb1FcU~{spc9Y9fD4M-ynC8Dmi18+ zudE>H!^yDWQ_+;4cg!cy2>_bL%H`AEoOifuy9NiZ$X}M_^!*Y+wSb ztfZ)U+(%T;8_wzJZJx@KfdDStjCwXOdxUA;gpR6p@dKlI7;0~vF%)l4g(v@HtI+|A zVKioU3`7o`IM*0gz^V{Sobdo)yjUABhlRFcfoK8nY9uKCBa<#jlqm;xgElj+i~#Y& zvSHyA8w_g`15>DUhL|3_eF@V6DEm^1%yC*=CHZyZIv;v4&x&}`~AOq^Ex*avsTj3}bgo9$Ps3RQTXQ&zpP*xU2u z*OOY?yEjp1O^>T9g2PE(M&|Wtl4>N41l5E_GnS#_H^aCY|;MvPN=x9GDne2KAfd!`(8?xoIG)W5v%^)Vt(&FbQ zD-N6p1ABsUtZ~b94rmx-yaeq}*5%P4T4-H<@ae(%`n0SwG@o40+6o}62!Mw1WAiDC zl#+$m0=?1(%>3gOp*N4SkuB-W%T^;n7nyM_3$Nw{DH`r3uYOLeL3wLKF zDR)SJakXumEJ@n$K@8KCGGS;GZ{|lQ87}w`572?@op}K|+yFHsRH*$q)p%cZ_UGg;XxeQO?Gm+ zwq)iBX%mghR`b;Y!45l_auLLezp{?%i0IgL>l1%ijdN#@6NU|E(3jwl~Y zMMJ%A63EdgqLyqWYa1adA}Ab1eN-x zzTSHLK9!7Fh%ibhWfVhZNM=L;3^YG5Z{ix(0x?%X!iC~IL$8lsKQ6lTp(Q+Bv1NZJ zI>SBOt+y zVk$MNbPngPW@A*cJV*eF6QJC`anS%o`3JNZtLyvjKGkp*OA9pc`yvGo%%44i%o9*U zzJ``fsF+X(6FPFH#}7W=hg${7oY&}GCcp>?OSjA4l!k4NRec447iQY@?eiFmb$sB( z;gM-~6EWwzF^td9=x-93sZ&;~WMg|HA}A&}p(e5#_h|H`GN!$YK=sKjA<65LA{CLL zFSJ7w;)ZT8Rb-1C6RD>xw1R`Tlf|QCturszTuM2jZ~MTi_mnE(zzU`_kA?yw9e(+J z4`Z6z$0{Txk_;63m4{AfUt%6C>N&|vNqMsJ zXSQJZxOLL?poP9cIr@#CdCZU${ojlHDh62pQIs$d1ju@>1c1cv{=tu>!i5*EYv)FF z^kSuPJ3Uhb$-b6>VORF~UOQlw%j({rD|c@bJ2RZL=WXfY7?(wzmS2@mFI{Y=ChaQ9 ze;jR-c`@7w1!fS0`AcEt&kwnTeG%_5#(J=x3~Qd(RN>@m@E+?2Pjx?P!6&X>#a`*XK!`b-=QWR2LYDelG9StQJk7 zbBCw+y0@~z0Pge|&Z05pE&YnfEMHy13s!?xz_jHuiKT)O{wv^oZ>#C*LvAVdtTXD= z;^^77Gv*K`7)9bEQB)-o2vbH=nMC@{w0b3aZr@lWjYHfy>-T|KC2~aquobn(u3#Fr z*b+Ie8_-^%E}#(w@V~nyV`2((eq$!Fh5Y+cir{wo#qBD4QBu&*^iu%hQB^@hG6^|s z9tbeMKcect(DQR7iVR?Da`>I!-6z}cERA_b#dDly-0R)KS)o(KuL%L?y2o~hlD9V8 z{rNh%%&IG$IQGXAh1R8|nB!50SlSEKml37B1>FIUVF>KoQ>ngl-tK84478zk3CcbH z^=g-dN8OV>K0FGSfdpgLuczRM>%Y&-vXy?lp6Jy={I=yj=y;0y{x1tcfT9nQ0b*5X zsNWhGXV&>Gv^x;ZOyGz1G?y(FH2b$q#Aq_AfBKe$vpC(GqBR99Y<{NShy5>+4&GB!tQljN#zW)yXJ49 zN2tQUe5a=fU3wHgF!o|_H5t{DKe&7=DdQRS`2^y;sUoECb=bQt0)55zKmb#kxi^w7 ze1TZdmyp8}L)01ZO$7lWMEh#Q!Yq5?@>8W&(_2t(sln07`!_^S(0 z{q#t@Qsf#CU)w3Pg(Im~0Me9zz;+nSD+KvJyuAZ5tKrC7o~Uq)E?n23EdO_7udi%- zJnwn%C8;Pr9NaC)dc9ovpu|Ha^!^*>O!vi{BaW9>QuK>O&NOk-Dg6G@aOGtZJb^@X zX6br7sOIXIO5^D-!2`LD)#~lKNTdF_v+M7g-&FUB+i6W^j+1sVMDKIcVF{4$kg zk<(Zb@A^8?cUblygPKM;wqv#Ek@wfwlt!GG<)0aQR2>`kC!+ID|1!^GsW=nYRh*E0 z*3`-Gdn8>qyNMbv(~;n2=P#Yea=zz~`FPoKR8sdxa@?ehvlCVghmoV@lhjg_zWe3H z&jmU~5t@z6uG>rL{CCI@>1gk{tUFiMN&|D>nkzCK(zg%&jaqTd=lh~%!jTwd2SsWx z+F00CYBRrzDZn?nCSnHbB0W+anfhnX1+;$+PNhExwEkxDmh=Oe5Po2jxY`_g-?cZo zoJQi1SUb0sV5Y_QxAoEvP)KV)b7_Ofa+}u(#PQ&%^m1=+;L#? z6PUuILa}y%nMOtAz|>||FwOvx*;o~Se%_GVavVE+^P6*_l4jWpZzm{RuYrtrw1n?F z0*!q1zCKY_bZhugW{^ANnSVQ8U2Ey`q|WfvcA$6|-|${|O4!T(>2||&W!=;1f+}q) zrrq1glF^7`zIwV>>_ou&a&DAh*-{Ycwq4Pa0SPz(BwZpzeG80FolrGKPxt`eef8v& z(*{0rvwzl)Jwm<0;_ z^f@M|SDbA?>#spVG3n0hK>`~dST_j~Y4o0|-tc20I*ZoN3<|%F(6A6|dCYHnBahQH@xamBbp;@hgT;B$wF>)B7vObLvDkOYh6 zOS052e1LqP|11cS9$D>m@qRkZ%X`;|->lWruSG}R@uSURcl>WQ0@?R}+mx7eK7LW^ zD%;t7r?lEkb*48owfuW)$nxmA-knNy-ZuM@j9ry8*|@z?*t7gIwbILaJkLWulV&b{ z=bC~BSGNGHuEhL7s{2kRUwDjbK5G1KZmfzKH-}2+*7v-oO$oKXb;{?9r4c$}R=oYD z>K7NIT6G7Lu5C#Bs&~?>g)voJTg*PU6YsKXj4>g75IAY64!$%!Iu5#jMvkgd8FfduPDDlI+&U+JlCjG4sGTp2Gk}JT>1OUMgE!Xyxqr13qO*xB;;XQ4BCA!Yr1NgX!9fGN8j&{ z4aCPKT@!`@`tLeymStOoLiVbtQEeaYUtW9>wmO~jR)U5&A-&oaC%P*EFdnv3ihgig zKUz+pOsi%RH|>3XEcB+E)8m0~>{s5)5;0mZ&}#or6U2Ri6U^~=knrDD)AYc`Rl!Zk z24<#j@%pRiZm}i%{@SQmLAWDZ4Ysj7FC)2vNHM{LolpHc)kYPCKNx(Bb{N;YFknr> z+DY{22MJSMViMJ`wvNv6BZiTYlUp=U_vSfrZ>!cR30mATWB>YGgm6@(Qh z=0f{mrq=$+94r$?@;gjXqsrMuEFZF$hxa#zU%<&H4by^Nae^H}kmzKLFo;!)UGmwb zLAJBtncvVN4AB9N9v~J62sBq+j4U_pAa=9p(xmNqV}QVgqsWlYHJH7X_5+I1m0+*f zI5TlFlWoynaR>(@y8*$NXB=A2L&ZXJ$#RVC`#%zj)?-z~GNxV&+$e=C z__Al3h_f-TB<6tvV+{@Rn#>9h$r|?^8yfMipxh~s3)7)$_TXVjgDBm=#6AiMx8$u8 zcE5HcOc7+GRfEg_-Rsb0yTp8JEtq*WEgk%`^d&jAZAnjB-WG*spX_LxEiG5m`36IU z259tJC73eu*t9>pZN9lpcV3x{504wzv_fa{G{`=(ctRD17A~f)KHi`&h94dN=~^|R zS$l7`tH*YOk?A5}d1D|!^B%@)3$wMe5tS;M*@c>P6T`|CHmQcKa9OS=jigDoJ$rShd z?NHnz-Fa>$f+3$|`hgvrMFss%(4Wmz!aE|CDz2Zl?G#!se}H5MW~_8V{4i33Go70< z&XJJz{?K}_=dtA9s+Y+#YBky!ILVR(D<(c2O-C~d(#F1lml0EkOu=Zu=JY6(qMQ#F zC-0~eFL%^ire*OTnWcTfBy>)K*y?v)`{v74|DkjZhL8L?3E=U>7XuA!Ts&(PO>z5E zVXPV4N6M${w=R+k-L1&mRie73gd4dHKTX#gY?#0bKR+W z8K#u9^QO73!%xYUFQ#$}%=Xml1AYZGN`uUkrhnGW6>ZV?&-VZugRs==o zvRH-Eiaz{d?90y1{5tM^=WU2WC0UMMLSmEeApS}}9vC>fX88k`x#4pjKCaK6FY0xM zk#R#uQxMrejlElCq2y6(=TJ6NfLK&1^ON+5D@W9Cf*u5)*P1arsgz zR~~;?@7PrQfz}w;%jo>V{%TXqu059`=|CQv@#tZA-1Ftu@07ZgNAf;jNPAzsm6Bcz zqgXPKNRUnW@t5X#|5*th>(0ATo&NHO-%SH581!F!T3TOJa5gxn?Y2NDh1RNTZ%-y7 z-OD1a2?|d+SmK4~R#jEPc-_y(qh;zr{B!G6Cn5FNY^oUYlN* zoqe>cY#!Dr-L;X4{@T~Q^m2-ax1sdj_W=8OA9pxc;EV&TW2a3@x6mik?eRPH-3&8X z|L=tF z7dD1XuIE=WD>^iu~>vqU!82?`@nIkIhOD2d!FiY zxO@IYD3F5knUw_HTtCpuXf^w@j8Xv9~<#l+=87j`Gr-rQ!Fr1(E~A#7;h0 zpAG)1#tLI1Nlvk)3fn*qa`=9Yk(FH$!2faj_8C;P?YL@0z5v;?CI)kIkQ>KT4I>Bh z=;q+B1_vZJlZ6|ezLtXxh1C_zM#&VP0pjD*KxxR;g~>DARHGLXdB(&+?kW@yz%qxj z49^k;16p?Cf<`?YifmhNwx1(m{)EA9YfEoeE#fiEWta%Aem2P+V;D9KrM z&+CVeSpNiZDMOt`s)|UMUChkf<#u9A`!j)DBefTF15WB0eq^`eq&CDUp%MYh=I<^4 zP+zsqKJFLJ%)X$?E$63S?j7NA_dfHz zS07UF!IWtZvvYpX4l9z1a^u+_S4^UHT;0eKX5xJmk}N!Sv@Q`4_M%T5iQ6GO_TA$7 zyGesk`Nl+DFNG(s$*UVIyn;Si$KIqg$Bmr6=8`bmIp!_>q85C;$9Ljqw(?@^4*lgv zRuk8cJeN0D^``~UuxRInLssATrD+a}w62m>=Wfhg_7 z^eT_d(&rFX!dS(yhSikA|DFr6a86n0LOo8*Ey))??E>$1@Ut zpwRBU>Xp&GAM(5Kk?JQih5wT2h@5f>;QAed%J^jQU9BN{r5B9yIp#+SnrICEZ|*_s z+|L#rB2%OJf4B?y!QRk@Vyrq zrXs&puV&c}eCHTC6SfzdS~HyAt0r(8@?D%1P5pg;aar8MS9>@(>y>xlo)pRA{Aexx zdLl~8(|dG<UH z@%u-F=rZFO%Fdy|2E=Jg6>y2mUJD5Iy}$s>@gM$A)^7Cw$L|=S_gOxQCj1w_+xQo; z!-0M;|DF7Y2)cViZEVgni%VN>t$HhBWio97oO0O}%Mml6AP1l16Bpc#x;C-1LGX*b&SZ<^0{ZYw& z%w6IQL`aW^ve(N@n3-ala(O9nw>$LHa;7ojq)&0Sn_zF=e4GnvB5KFhcPz(4@05bY z!m%BP(OqTeD9N0FIN#4+oC;+Mr0RQ-(wTh?;7bm;t6{}kuuOEYNe^Cu`KN!VL8bzt z|2O;|NXCrVdk;BYmekq^W`IPoVy*+Al@x}F5&}Oky8i)zF48n0LOb*Ee?bj3+b)XU#r(n zzc)S*obBBE8J5fD?$Ri0_4Q7|yPoB}iSSXKCu?J4AzJHmA^Zf=S~pj$wBbb3-Z6f+ zjFb!?TWd`Svvv`j>kzUAphh`^`aXA%g{&6Nt5S zbUySUhJ#L@h9>mSLrRnm4L4KK<{U*s96F^IuN@IK;+VP2L&*UImCx z5APffV?k$szgUWEc1CtXJqOx?OXt8>g#xwTn;Q5h!VShW7)mz7t?*a5qNlHG?=Njz z;^5uT7Ek9VNDRMz(q+#+)taDHguAF^qe4AkZ^Eh&affG7Tw99hgbIZw@W)`mrZqP` z&)=5Uy~#+YvA>y$_}KC72P4|Zp(w3@9ag>yqbv(2{Nkse3~T>kz)%45zk6W6y*#g* z|L>OnT}JuOicW^YjMvhS^t@%EN{V#{dJe-s z?Q@o(E)@GG=xh_><#xit9YSHAO~FbDkfN!=$4WL){>U}yF@dGk4R-AwTK_r z%6(+Y#`bqa#-`) zj52(=9c=8f`%5;8{y8b;{nHyAvb^EW^(>0H&MS|}WST!X_Zi}j4b+Y2f$I2a-UN7Te1M4DZix>&u?+b5Dkoz*%MSK$ z+?3_)_x;LTq#xr&;D$fCDHCQ2PKR+oKFpHn_Ge8bHZ4 zeTAWr;JfUM9HNvSVjS&Mgr`m0VL|UhXhS-MMTQ+#&__Tx2<`nPWAa8AO2R5VTlw~m zf#1o|R@m+JON z3U32$wVPr^^`!*$m z=luh25(Q{5W-5R@5J}@-sDtKc57>#`3ju)C0`n)O$v0fkV?pwB{(EA^cb|>Z#NW&N zX+4F&oP~^l@h)dbY{)=F+< zP-nu1Mtc_@=yV6Ow~*zWAAPZ&LF=Iez%B%QLEU<^3bw{<@zBz+sZ_Tr2mDiILX zm~D#uWL_T>x5OW88e;tNjU!ssbv5SMKrh;I4tJr{2M>^255tB*rC6ZbH}}l#W)KZo z_TFDyQ`QbP{_OFm41qxq^^R>{__Fm2*X^`7k%l11T*Z*GOgD#V9FuYOG(cUpjr$!W zD%^7f=M_M&3YQ2Dd7v?`UQ_TW;4X?P~58GUTD89!neztNq@P#5#3 zpy?OR@z*BrYEAj~P(GWOot}Ygk~>~#LyC1@$Be>?;!8+%kq4QNX43a<@4%i!W|W)R zc|O{XeI9o@jIPk@)9+bES0qO9CHP}jL*x5gJ=Skdr3d%P@aq!-WNp~Kyc0I+uawM) z6SZ^u6C`Va67My`6fwWANT@Gc<;!xK=p^fYiXSbgHjp-gzwjxIDAY0qX^TE?W72!K zyEn#C=oyj#rXV=Uhldy%z>19qz)tM8@I8_ZEKij`b1q*Oci$X*hhR7CqG(u@&wvSF zCuBTbH&en=*=jUU&f4~gdjsAacAX0U#7+yRq-JG1^6hqoSIXSg-@5nfHw>!0BY_7A zl`6v!_1H9po%52o<^K@s0v%CvLu!Oj)3C~vRA7d%L#UP1BeQK7z{mEV74C!JB+PBG zaJ1M)i)s3>e?uIZ8AWpk`eY`IJ?P76zA2gj2EayeR2yKXp{$Tme8$cPQ6N7G6}E?SGAkq^@@9<0qYXV4 zJi#{Nc*6Z>`UfCs|S_EX?)JU>( zjT%H82jV_I>M1^r;375X%;z~lt1AC&YZjwy)MeT!DAc&@+O+Lvkh0}z~7MxtgmL|6a?yo-_RO2A!f&_1XlYdy) z3_p6UaI8x-z=DAqgd>{kkStgJ*6FRyV%rYCz|L)5(w&PT8{#B^S6mA>w~1tWtb`t~ zmQ4V%C&ork$2{kRfWC*+GPBtu^X)*nOJ^Of8lLvTw!uJOkn0;$!m_4yAbP7F6y1|A zMe+=BF-HN_2$hN8gKw1Yk7L?_$MurJ6p?-r26D$OnJW1;;C_ws9yj-RjZR)~arqn4 z7ZcDw#zDZ5jK-MANAOGngsV`n8+L&{7?5^-cK}%Y@kuM3*+6#O8tn1fItwC z$)d!7mILAve)7=O^|`wtHFW$QScVa$g5e7}hFkzih{7y$@WA+*r28nDi+diYQ?{p!bg!aa6r@KP^5rWX<>?J0+Ryy$nkdPm`&Y%|DO#n>Kfj@c z%oNdS7JDBv&!4~A^zs`yrLDqCF%t&RM zM)Z)4JM~)+TJp6lH#4<_Vjr`D%qz3Vt()NEpPqOv^B2cichut~Y?uSd z2%<`YDKx4%rl}fk4>+q{IKTSr&ZFN=W>90z5etK)@%~6RKBxVnc1MeD)UQcit&%lS z)Jke{dFJ0Dq7K7#AHHn_F^8e7oRDW&kTI@p`96Oj0r}EUZVtidqad(`smaI(*B;&W z-8Z`7z*W8QYy`$cSJxM;=Gst* z2>Na5+rQ9gX8x3LtVsgR7O4P34fGv>;SQ)_0W_?kb%%h9!oMU-Ce%YPlQ+BrdJvBe zVL}+>z&=~Tlm*27{W)@fyJw`ABEG6-PP&VyW5ebw5qp{^hP$soX3ce+wmHL0Nv6fI z>2@Lxp$I(e(Q>Ti7z>>_*VIT-j;!+Ox}zy#b3Ue+?0D1GFUyA3=4r1>_W zrKeq6y_SX@fs*(^lDRNqJl03nt!~Drb4NLKVfEbykeR^dlz9Or!@Ad*=FiQ0HV!f9 zcU;Ap)@9}l*FWXlt)kLLBi#&)zVRj+L4muqPl_)P{Ln(o(%l?se~DOr<^Z{8LrdPe z@@X7!5E`NTvV=jIgca0qT}V3;-;ep%s99dvDgtF6&K^=g65Rlf;-0)@dy<8YP|XQa z{)*8df_@EBzC;Ft$v7S&vv3L4?>bh7l@v`Uj6VJo> z>$H~;J*77e@%TGAIt{tjtzbx@14b(IjYPLpd<0c$fy;ciVynjux9hcJN$q#b^A*F# zYZXdG`tmCc_@#3e!;|`-JR50$H(smv(N)e$@^{AP(ACO%R-g9C|C}b&CNWX3?Y%w} z?H4Y{mGcy9DH_`F>j{bcw$t-vj^84b?N@r&$;;!2W1Zo?>Y15`qRBsstj~83>nK+w zHD7pec{Fn0Reh?9EIhK@Rv~OB0Qj-Dj2Yf4{+BnD^|y{ zbNY0y8Fun035zD~g3GH@CQK|1$9s-kYXRNZ_i61^tJCN@#HklK5=_GuXV- zAZb%Ary4i0z^Du|AH#$JN)Y(M8^aI)g|Syi$Jz9bc6xA@qvW31pJu#e*8(+xcV0h~ z8ZK+t7gz4DKLyNwX!&?Q3U*(A1K6B6NRb_kzmZgk;F$&-eHnZeizy<;EBkNSs+e_i zs5f>dP(|Olf|}?Ro6Wp+ptpapt+MOdt1d;i4$9dYf^dvX3Gs(Gz2vVBFQV&w#N2z$ zmlOyGQVQ}hM{Tw4wY%ok?sP0rM>l^S7-^}<gMq^ZsZ(FtD z#S3t%%iMFld~}a@^rW(AHiuv<;L*=SbMJty*G9-(CNp7#L|)jbGX`=}$rCt-D2Uzx z@ia>3`m=>htJ2=|24Cc9qbcYD`St*iWT4?0_~w)_mwqi^jJeQB`E@x(-~h%fA+z}8 z*QeoSS}>?uzs2;Ykx}`>r$D&ULiilh+Itn;L%6DPGEHg1ckM{}SX|~kG3VCIZ!wRw zeqTJmnunSS1-?DS3O4Vg2gC*JO$`??rzFAMYz-yyA@S*MjZI7=^ z%liW#!*GTwM4y}w z?VrsLS-18m9F#CL5;ZoYJNV4lzNZZ%%otbfs;bo7828Mh_sS^lvQo4tb!nME6RcxV zl|IU=BD}euzT1R!#(3gM{P&ha;N}nVq3jx&^-*7<>pl!ztZ zh-w!V)P{&?DSXz1?v8x?J*S#BmHL!P;5h*s@WS4j7sq(fhb@*)ySLt)1lFJO5k(QR$QYLu+Ft}r zYp|q_L({&q)yNjCseqUV4p1U2h95*iJx9f_m%U}j3N>5=?l@oXlrjY^4yTwQh$v+> zVcRq4oP|>1jl%s%2alr%{P8bV5d6CZZpJ{)dwiIyN*|JF;DYZ+NiDm+;>em?`;;l*vyx%AwjcC0HzPLpmhb!o zI7k}FBjRCN`4h*H94r)5ME8sMe{m6nys~+5^&0`Ojw`UIJsO>m_3u{{l{7BG|NhCDX86V}CkChG*ZX+wXn9jj8I}Uh ztW5pNll=yMiH0Y%G?;=G8#8M)E*z_8l4gnbIHMo#Co(a16(#4{1mj3u>Gl0=bf;^* zjtf;L&Z&coF5KJ+drtk{<iJ%J-~o9y`_PrWSvlv-8a@Gbu5;b>$m3B>2BRx9nCSp%+zFL)z*f-=ovWu4^eLc7S;FskDsL* zq(mfELP4aI7Gb4RN~A+T5b17MQ3L@AMY=>q1!*LtR#8B@ySuwE?5B~&*wwm%{6cky({xvHjRJwnhE!0<@C<{T>EdngPDBcXF3ms zLzfrBk7~-doV0oQa($KrUfyThzlh8cB=${Zn`Titz0-+kEp-*vz}R^33+2;6ABI^*pdzpMJ;gu6lC1 zSo)?XrLp9zWYo~!<+?XwgRLy@XA)k$teEst~$LRc|pHuK($%N z;m5g~*O@lQef5v)T6cz~6>*}0$|b7oZ+x_^JHN7s6Z6L#?RfX>cQ>WSMhM0l-)(5E zI+u714r_hbA3!^w=D21T*nbBvaRws#dXisddrZft@EFOTKewQ)VSXe@HaC{w)vLj_ zFs+yAWp?8}e26 z6Goc%_Oj(pSgso`_+#|gT8qSlslC^2f(J!yx1^uF43x3*?|zQU zss7JzaCOQ6N2R=D$z_AJqp)FPkPdT&erB1QQrYx;&s$WSN|HfM7iIrX{^$1hL9X-g z01rOt$VaSRi3lcC;zmxY&tFTuFYu|eQ`ozy4^WynoJNeK?3H7V`zSROTI-vt&l#gQ zC;VPK937KcywSrOA8oo2_FeV-g|K5XxAYS1uX zo&IVm#r_pujNW-8yxMNyp~bg$p48MOS^AJiGD$}127yk%Z%cUSor0pKSHgt*I23Z*%O;*hoK@eI(<&AmlgAoJEwE0C9W1n- zWYuP;=Q?}kHcr$12KM_5wn2V%^ZqNotFNM1qPzOL-K|bdqHoV?71ZwSRQf&}4m{-2 zjo;Hh(OdaJ>zDp2l2Ozh_xQVmnMF?Jo=kK6c!Ot8(oUt%?i#1YKK_n<`#nL?eBOI+ zRy(46r2ct)(=^oy77qAQ({g&RO+}h1dT8c&<(smRz}n=ewRh|^-j!p$wR^e6@jXpV zn{ije+(we$AMKOi&ZZ&!kNanX`>56#Y+Ks1RE?dV+(lJBIjr&V!LD``ognwm1MNz8 zmUzu(My{R*ZnZv|xcWIrhp(c`m3%St{nBuw&He$u>xPdst6Ls^&XRi1zbh{B$8OPI zKL2gCq#wByhD>)eXdb+A#j{z9^=J;~{$t7W4(ZPi+;1MAxgG2^?O*;%Vj=DJT!A~| z`%lz zoMl(356SxXHlLKZ)NPdIxG#{uJhrx7@^>ryCS|%z(fgQvn>SVW;~sF5PPei1a@xZd zTG=LkY#`+ih;x|OoAQ0YO@FdabD(^abtC6zLm?e3j*(C_;qgM-WXxkDei}f zk2w3Aewh3;inX9Ol^%dmHbyY0ZfnIA!B~qT9wM@;=^A+4VHsFp4%& z4#8-@8m$i%-{5Cn>gzt-jP3SxPS*NS%4^d!`0eDo&!M%P(+`1`vm>w6!5>Zn#+MFg zX0;b8qDkKMkJiRdSNk}cE&O513N6AcofbQ296TdSCNdUy7Ipa!u$lZ8DtBCOo;!6J!tNjVH> z%Y9DWj0DKctXg`FhrpZm_sOC+G`gV%k!TK8{M#_N2mlz2UkDg?7bw3dLU)KdKJ+Vr zr%Pt|g)c6{%jVT|(0+&F2Q2vJiG8e50WgdRR;rHDf(x%i#Z&0_Dcz86r-3KMp#I9` zfV=Op3GCq^cu?&E%mFHW815q*@zI1JGYaa?U}}t(;;tA9filyqr}XQ>6X4WDp>=lG zzY`Gy@P0>mTK_5nABbajzZ_3D9~$y5zf+45T+Y}_YPl*z&c>7fGeM4NFhP6y=W|ci zQ1kQIIr|sS)FY2}6 z8C;>RgD(pDa)koY=-4Wnwa0LQgb$&}+8v+Kkpn?Xg6&6|AAd(Tz0$xYfG2xRMu+du-t0ZCc(Zm}lFTuO?@>u2Pd}0qr3D|@^WhZI zA$ZUBkA+V8V&XC*Bk@q35=S?_;3AR!?gx$u-^$H$kz_KLvN*MF3Pof_2|a~`1VDj_ zQu<>6z%U9uC2BlrAOLR=;Oi}6#?%~oG$6m6J(UL&`-iIkB7%!YxUBknVPIIRu7xu7-l4>XWk8VN-}FG?I5r@RUoud zdTXR}HtX7xq@4U$eP^0htI8_b^19BMzJU9?6XrE%z5SZ9#ntShy~JzI3h#cO8Knt| zE8aL3lZ<~wc;U(f$isrRqC_F1S8Zis1@mM1itiroSbp5=YQuW&xvk963D5A2?1pmp zKbW?NxsjVdHnQY9>bzoERTnwaYi*G9WNFKL=z4!8_vuMnepCOyK;`}~fh#>Zlsy{{ z=?rREel8xSuypk*Nso`f*at~Ez6bW}(+%$HB}F{(1IqKce^h-=CQ1$llUL?g>Rwfz z?OE3OvYHy1rtwZMucx;JVtF2^TS}`>ka=h^)a_QerLgifj@=B@fb*owUCA=O^4NIC zq!HJHduh_q8WL8A}qjL7kny)F`tt1vVoZmaR z_=WrmT+E1^T=bnq_I6!D=%3?PVE6c7Z?;Dt#}e2RGr=0~nP|jWHkMwDq;qHC z*H-nbqcHjLU0E}lc57m?jYijd)I{Zxb*GPTprN`7-VKZ@($n&BG*i(fgfOXr#;FsS z1e2JM`p1a7;3GEx`mH$TE*A~`MjpaTR3{f=OVc+E0fe%lHNw=I22cQu6_k1y*Y|`- zI%sH;M?jNB6HMI#p-LQ6uz4>W6woQmA13g(G7tK8Kw>T&k;&eTi}TSZkn@o^w=k^v z8t@Q(1!Qh=n!klLtlvVAOlH=NLR^54%GlhR+P6HWNOX)x$l3n>vmj_fjJU5vm0Cwo zO1Sxn;DaIt7ur6OV+_Y=iPL)B4`^kUq@m^gzeHq01S85x=Z(4Dwca>At zb&`Z=c#v`%>GHNtlTs7Ii&t=2y6({2yY2RTInO%daPH<-`Gj!o`z3Q5xeqk%g^caL zH1=0gu}b&#tcRJuPZke-`%0OA9PyD^&F43#Uono>w6)>G!AH1ib$^0y+wp8R_HAL= z_wVauh}f!p8SqIfaCj5u)eMmBxd4@$zzlMql*bBk43$1L4ZLsLbI{v~#1_Z)6H3`u$y^YM^{CfnF5uhFjHHP43LgL1t@g_t0 z9GN=d{Pr5651b>BlxTR%rQJay+>o>s(B6B={kxP1MCJe-aDEWqh(`@CL#c|iG4Bk8 zJ-|FY=wP9MW5@wWL?*U~PmBN;4I@0y!=MukMfDaB?L9nyM^)u5>>VXrnBFLfZhwP# zcbRef@D zyj3~)Ar{e&Cw*PpuH)A{4jGZH-CV$S5v!p)#k6m>5%FHxUha@e0>bjsQAeyEV9==B zyJFwv_tSkiv1~+~ZX*v(`p7ey>iKkJvy*s1dz*E6l>O%HgSt1bd%f8eN@gcagC<6P zp1nU&XTF^SEUNqaq}|o6QhDDE@&@{y&r@rQ=e^^Ih_Jt7WGN@VdCqPr!YUQI&ze3a z#UIM>P*=H3!hpvM9j12}e1Zui$~3{6H{5-G+<u+yAdzc)%@L?O$Hl*0C@@|H72AshZ%R5}%x=tk#{S8Qskuh74{4w_Dm z9KMmEm5f%`gUA1@JPsguKZ|o&mnV;CtTVml03od9UhVNxxrcknHo-dYAGzCksqhDW z!2j!>=~}-|e#&7|cD{yJ4SlYi+u(3Z#gRfg-j{l}v+XWRqYewXEcb(}(+&xy+B<$u zp{0*>p9jzUq|eQ|cJMZFVdE_B=W>DFjYk@}`62{l3J>e%-vyo&uttR*1>CNsG(|n6 zOSOI=&ryth8ZiD+Gb+DO_s4p-oUX2r_9X&fjK1MT7z0x+0)-Y}$hW@qfd;gTLT;Q>CO3I3_CHlX)QKsU(YZ=6uN?1q=S+0tew8WK zqJ$q0GZ?h>XG$cK^;l5I_s+?mdemLQ>I!K=+RRGbgy@g|$q58VuDf#Z4NQJGwIN3! zH88P75PQyLj6R&WDv4JLxu+1S&Y1dOc z)XL;2f8qsQ|tK zYwgz?ikWwBJ@d~Q_ntN0^Tk1x^2wmb*fdtJDYpG2W}uQ)pSj<^^CPjPtA|r<5i}Jn3%?0eA%L)m}4o$c${i&x?ZkIY_fQw4zy&dFbxS`wgLP8)(&@VG@8RH=F+N#Y2sm4deqy2JHl{`66CNjzjfnSuxqj2|kAJbsC*AG{ zyx@F(d4Z`H?(FW9ecU*huc8?P-hm;F*P>NOi;vm_;TIeL73_9qG0Y;_Hsln_LU-Rjdw5-)|};&s#LB{Q29?HL_A* z@V>8oSeHgTfr;{2FFNO|tCKwY&W_!?;d)aQiqpbSsW?v^9azX6vdEuhGKKmx;;oRxli zo8wT8MHF-ganESQWD7sR`Ijzt`#r8`S7-;xDB00rt`+9J21OFn6wTfw?&)Jv?IeFv zd=)X!{;oC+b#LD*fm!S?bz!`;Vdt7$GuPfIvR=DZxd>U2fiIUC^Y} zzb>Qy!L!X~iC*P)+jb1)v#heRd-T@3G*4W=^4>&5`1V%#{XJYEv*^6cX7u9E{X2y+ zQfeccbby0MsmcWRZ)$R(WCVyzzs7^Mn==3?hATMeM?2P!74Tq089-@a(|$H)agcyZ zFxX{RVPohA+A3TZFyRI|`LRKVH69QkzkgKF(SbnIL)Jo};<~-F$>bmvfJ3*DJvWpS zNQ8DX1sdkOd^#j@H?uY^759QtF+f-O2wa*KT#GpnH(3rS=_QPuv$S@bSY`>))7%uDNgYapgfpO3=>l%oDfWTQAx|+np6hz z`9=eFf4*I854(I`n-}#7Yb!dCz8LV&XTai*G0kl~^-yAQ^2Ix~L(@x4qZMzye)ai1 zVDn8ULb@V6&e?xsTEXxH8>biQNe*(PR!>X@oT3(XZWd=JBa-HOX}tcr&nkI8BaI*QdbAywJ(@V_J8Hf>PVzO}7hC(rBraEs zCVb5O=;*Ot0XusGUR#!SiGo=c7mnf-4FuX5v|fDeyA55No2hN>8UzAgA?aEJyJG6D zKDQ;nh_h2}JQjQNZs1pH?2h+1^Wb>dn7tqw9BJojTtH8ZeBb+j;h2E%LP-2Co!SK{ za+5sW|Fd{-UD!EzFTQ?MS65Y6u@L*CQUwwaiJ@|%k+%B+jKnUh!Z3{*ic%{$VDyjE z0RSZ~!G4*iR6aZBcZAFxnl9nX`8Uw$yX>5Ov&-Tf+&yvFdwGs+EQ3<#)V%P9AKuf^ z+tVA&%aAK3|1*!wES3;}WeOt8Lt}`-q9-tehfo>OU)6;$Swt)~x*I;L0Ldf}YtMkQ z4ybks#G&i-hMI);`F$8|iI#4@cNDeVhV_x< zOtO8KbrLmWO!&P5ALJizP*XqvN2j$kx4z8cj#oiSZzT)_)~6( zqA{38V~A(NgoZg zl7*=wHy@vJNP)xe);j zw{WH~_c!se)G3Cn0yT?X$Ce;2Jiq{8w=X&#zIYf$hSI?V@=$*-ei0Kd7n~HUy!xxz zwC`0l$3eqRyPLR7YJaUZgWht=K%ySWPB$0nAKN=T+uvG!99?vpY^HqU}#CwzLo z|B!TpvEOcz(H~s0Qxw<8s@ixqyb&NY8+>}3nRJcE#3vVo$KbE@0l8YwSikHA-J@e> z>II#dw~H=5l6pmSmp1xl|851Om>eF)68@W@wwYS;gx3^BhY%E z6%qM0C&w-RY|VKv+LI2OpV7fT>qC}xbCT2Z!S^t+2KQvIZYdSkq-KTKlAN29d2s3e zP*U3GDtM6#wSEx}Q1D6?kQ1WcmUpNgaNa?DrZtZ!BzIvE&nj#ppCzy-2y#PlM$AQM zn}GhemjDZK^|knVtII>3Q#ZCAhNU3w;&TIUP`k_}ZxHOyNS|m7y*8a^yMq+zsrb)H z5speGbu7$P6{pqPTL%j_7JSD15%QpK3tauqf(u z335@6z@CU5RAU+9&A!1~63-mCAhXuMZ@CMi6IkW^WpiKvtDFONpC+af~pw$s8 z`~n-Simm69>|DK88L;L2lD4MyDS@jb6=RnK)6r>I{Udb&4yp2BeguMQ3c&j5L)O9``ut3Wq9l6r$EM?qFukIUz!?WZX*{iq=n#6eMb02&VMyJ$6C9bG% z=}1Bj&!T9N}5|;RPI4D1!8aV-6pP~z;6S>hukfv1E3avW0Cge>kl4*lxGE$e3ONO) zL-?&p3sAvNRA>>rPv%Q7h!0kXD?;f0&6FwY41EH63zTISk(&Y|Z;k`k$=*L&gU$lF0r>vbrG2(1?TmO=^PAw8d>@%ugqYMZkp(L4?To>w}}>6m$JV z5|>=7r2H_F2PU=unKqzcAORJGK)?*&_qeAA`gImen!e^}B5$ z@KS8!|93P?{?d>H6^u`>)SKz*(vmPO#19X|4hTbbV8(-i-C$Jt7EsxM^F$b)XoaKI zO+bm_D~CiwmNDa_5tErj0O}y8?OF)9Y6*pJf9Cw%Ia?$IT)*bQfw?_3p(PgGyi?@+ z3toDO(NXnDR)0LjaJBu^QKrYN{v$nF$H7R&q+ z_(VFF_d7VP`qvLN*Y)3`@jI`HH{sj)5)fBDHSoEKU^Hp;5BHcl!yf9LLFtUhnX^p& zbxG@L6~}|8uVODItf&ms|DAG|y4V4$PL zL5%WywAez1)WhLY5|ZY3i~9OofJ|po)bBhG0R)h2Z0({cC&a{I2oz`!5cJ{x3zslx z61rx7SqzE_wAWMdhe*Q};^uy;zU4wuDb%PN^ zT*ux8R5CFO*AAQmna;roq26AwBEVm zha#fTS)VagJUq|W|7U1t@%Eliydi7Xy>A}gR}~$}q*n%}&m^lHi`3Os@dfEtPc7=^ zkz7*yPPlEC?>$wl?&&BVkJ36d+KTOUX|SX?SaNJg^T_kqJ$lA0_EncY;&y1&)rB2q zb63lEWo6;07-yF>_Wb9T(599t>nf}NqH}u7r#kS<#9!l25`&@lnAOFdvTdq_78ax` zpOjA}_dLj#p!~RBEAp8oeaUgJ#$L+duH&(@k-FbK2hZ{)(V&c;-pg)3lFJj$tPd${ zV>v>1yy`lny2`~UcR7u;EtNcDZH(6*<~n$?i#0iJx}h7Zw&!sm zX&;?1_OY^}*yFLGns=IrgYd*#-P(>7i=DpnT|?e_cIM?JS4qW`W8sbuUOaBw2aVfe zo+A>^cIFOTzm@kZIu2RYvQB?0n9uSyt~Rmx_vD9Zf13brn;nz?fP2@&yn_z6s)&X9 z#P==P86pFLd2dCe)QA1``Rd%mU%7Mci`h)fovocz-&zsU*eMpdR^sxLIl)tG&?zo& zedaXC;aG31%)_w3r%9GE5rBr*SWZio(i|pdz!00EO1QQ!-FvxN+)HfJdFR$cEh6U$ zzc29prk6ght#OE=YVE?TFz=VG5mbbx;{&VXd5#EoH^%-+%Ug_B65VC}Pd1_>*3%AT z$%eM$lUu$dkL%Q2Yo2*@cMmr})bYqTM@U1YT_N75wd~$-F#%2MGqtT!v$?AqoxFO2 z>i4PCc)c70f67+bbR3-8`=Jl;`o#U;lv13q%O1WMu!xUg9uZI+ioxJ}K67sU9727Dm0`%yi=j^uhi|Hi?z z(_lf^Srh?q-_O43Rd(~KrAWU7dm$sMsO#Cx)yo_0Ex22;E~!Q7b1R>FtbQ7ezWE`1 z(6Xd#8XxsCO3PX_KaOaHCg3tbm=o{lR7RgSP4?%poi#etJlT-m`6IuF%`V5yszNAq zKnhoVJ2s3oh2~BvuMx5E z&UCn|pS|so=Gyb=^ZdS?W}!t^KqvJ0^RiC@e{!(kr{L8HiM{&J4TSr7d``bB^}JUf z>l0mKl2}s}az8)k-Sz6!1x34{!cX>V9}Vs{?9T=Et!hhE57pkHrDM(b+jD1r@H5Mu z4L-H4&rB*poY?Lfc1k)H`LJWNA`@O!u}lC{1O5ZH)5p zO_KBfIEvjXNE+jF={%HVc^L4;TLa^Cl~_@sXzyo9q0%`S$)8k*yRP%hOcwXnA9hy9 zq-Z#B7}i95vvj0#jY^Pg4CXv?Nk#zUV}#78S(4VoL9)t`T*uDiu^FC}?$5j>{);*D=G!Se>doHP(TW(v6{>!!_Jtq*a-3wR^+kXDsSzDs_f6qevjyRZSxfn{xrkeMc#Wx(+|fLDWmy|#a6JDZ z&@Bg-$L{xJS_|bedN{lE&zTtBV)LKm&moIv-)`{m=OsSV=3y;q@oKXYb1TG-jyLC# z=v(cj&SX_o&$_vL&GcVR(LH->oZh09zMuNx<7HXCChUUVr~fZYJT07t;dYTFo(=v+ z?q#dc)KzwN4g8lG{w*|X?848E)&Be^>#b~&{b#otit$1wryI(!D`z1`?|f*p*LFL! zcVWHt#>6dq#usbGD@&@(xO_$w?g@q)cA@*)y9GrG>b;(2rGHGed;E=BQds51?sKAN z**ybpwOZzz-+i?hUt{~u^a{2VcK_5RKF? zyR(wxnIMf-0QRL}-eW7ef-BpOKPrc*aa;y>3L3|D_#5}sT8m0Rpi5FpP z2CvJBv7RBPm~Y73EZCew6Y#e7of;)Buf-qcCz3__;-TCEH~Z25;E- zl?Ucawhk1Tn8(*&*nA1BN>4pr2^{!!y5zRgPuRlXY}9f>n2UAN5Q!U3U%6xLZ_hJL z_?Xu;@UkC?$@FTcR#4(bu=(G$==T}Y{rK11_}sSqoITsq2QBlLJ6o8nvPp;(&UYqP z_)CY^5~ckO72Ew5BRaNI74ucq=V^UEcoz4Vc0^KkY|LaBR94Nh%<$FkS=qD8$F|e%s{Qg5k>Rm~#C|qb7Pd|A5?2`xbjIUc_7Vx34 za~YB*rW1dgMy?+7i$vvNy~jmFH)h;kw1+D7WM6-ivNyBAHq zjg5Z{N79$*Wi(lhkJf#0hOm!o427dtcekzPKm7E?QpnZiv#duRUGix&oAt}JjH2YZ zTW1$NNMgBL6kW&c-gL6dypYx+xBX82c1pZ>+@sDwvy_)MdY`nd#_9QTpY#hC&RGTB ze*Ij&W^22UWisi7qUM91$ z)x8+Qv>02qn@81{)uW@{6xqS?P~kD%s{&M_k&h8 z-S5oVofMzh%Q#=PH`BY$8inGlk7Sw!R4&%A*tnLPVe6&LQ=+;uykpK}cj@o6y>*{A zoB1Z$D1C9nO&x}yZSaL|5q?w#lxR&L`i8C@71>CA674dd!xQ`n}% z=xqkN&zINdJ#2ZBiadoI$xQLvqoVQIxTKE<-C6uS$C(()@7aEl_CAY~{9Nik)WC+^ z&=KKzR`qY?UYe_mRDO)RG$o$ylFE9@_>umNS`m4y0jp@;=hNEyDeeO7PHvtrQ8iIw z@O@oPo%8!c&vC2<{$?h($XHKYxNs_`=Oh&I3fPz|9m?YgHhnBG*eC$;Q*q`tgkrR`Q@xlrzilCH9CxFHIRN`gmcq&vPjoMd?W*0s$YJ~=&& z6XP4K3OdV9yzaOvSwHe6qgqKkwdc)-6N{5japQ!fc;PqjDtgH>|$nvA7 zGxJ}*vA>VZ%yf!cY#&2x!0W1^S)m7h_v31hSx$V}^}=l&S~go*w>tM`bKmZxix}Vo zu4n7UeA6AXGw-2)dED?=oQn-#H2wpF2odSLNx^$9yr}070=Kf?aiq;!MJpf&`6p^5 z`IF=|ufEbJXcuSm&+Vfr6*NkSETk6a;KJPAmC_2;POzD|A+QlcMDfDulvmf(`bl|c z>-|Dz3!Ph(UIh0Z#de0v+AJH2;Gq;V0eFpfh5Eb9^faVV=A>)!`7!@a^2qCKx_(X~ z`p3$+43qvjog!JqtIWwtvVV-l=bN^$W;yoqStqSXyvzsUWF}GvfS%;JQdd^;pa`z~ z%WD;ph`eh9nIQxY*G)9SLc%z48HkB>ZfgD9Z~Rw@On&}NGfP)MPWF*^#cUVist|f` z^}q|qRdrDxbxCmYEq;8v<>6HFReoBHy_uIzG0_FY(dG;TNJfWWUgN z9wf=sJZ2Xly*{&luXJGI)P#49d*plB&V#DPj#UGBU!AeqH{mwF?RJD#fd>3ecWw0?|Sd(Hj|Z4h-p-HgvkNgY*EZ z*PFzgJcvZ419_dWHSgYv)=z|KIws;n@6seBgG2p@gR@%(s+ z2GL8?6nJijXHMEnkSfS{9Xz{%t_mHB#>H%~oCQVKdCT*jB>$U7&mWZ-8=WNH)2m3UZ3-{@BESfQ$~iSnwAQW_bNGFCeT;0ph|i1p{n?& zfYCoCPm7ADejLTB(4PiCH}#zjn`$D43qKkT;M5X2dXf{Sb%`D!;A9!%dSQ8m4t&)R zJ;#u@7yHmw{)f>El7>i3sKgOwc=oCID0T zi{ri|K+fVCpogUa zp@TMV5(9HUqsyB_4NzkNQ54;oZyM?lz=~V}w^tt*Jf%wc*v|+snD78OG#QmV9St!j z;6Ta@O}O4cvZ-cYilcL4IGHz&?0Nuw8>)!>_E*Z=Vsl7}pds}(x+ekPE!=j73OuoCeB+|)5J(9#k-w_N0LSk1Pd8)p||IDe7GE-qu!r%cs^Rn z_#r2`XC9{OdperY@i;hzv{4jvQ4WEhr=$=a8W2N{IwR(Qna9zTLD~FD0OUte20wM) z>X*EMa)8M!94n8OO1}6I!qgUb0T7iqh*nJnXc!{|41$*5figh;sU{BxqfS^+lSQtt zD*`+L(jKBvsk*&XuGPar>tI^(;>Dh9%0b)rLRQ*KAn}IB-h(a|tVot=1~lQX7!kO7 z(Twyej;9~A02BNwg9c)#a=87)bqB=wAl?jJi0l6bGPOB7NTdVdER*X=QL^$6Uv&76 zC@)r8S6L70h9#0~av;W{(~-n@MI{it6RFJoBq9Xhlg;nv(`{?BR{f(036n=P- z1?I^W%mehwfmG<;$yrQGU1&Htk|w>St>!93atQ5hyse>B%KxM%@D|UVsMVdwJf|qN zeg+q4$J*GD*yxMk&@kpS<1?fB=1H1Ixvsqk=6J3T9UDl}`SGhY+!sTJ+Kxk@c^s1u z>e^-;7@+~Z5cd?<}W+7nkWy*z+ zNak9n#7BjliXtxol6Uj~{rnVWV!l%O4VOMdP>O)}V?v2m64+JwhpRt|k$itkn~GsF zUBkdWPq@+P3ewj9%|}-$ixH zx)-sj@*_oWVsr6sK%V2jg{oR!xA*7GlJubW ztAdM2aC4oW+RCmnq)!t$*cXAGO334#prZZWU70B;EEh=t2U?s1;G)rEl#~C46m(() zYsCNoFgG8KeGKB3dmI_if~Dsr3(vTn$Dh>&E&JQw2&~1{j0Ad-Ee^bTK3Db2e&gx> zE+l{xF6IjkC|>x#`g>geqsfJ3g&opk+Vfs49W-s_$&@R%SCQtKC!5|hn|4+EY=uC(?Y4Xnh2+B}hKwJevOwkDw4f8Hw z?hFS8@h$o{c4YygdL{Uj0zhA{*%t1AAr)o>0?3nNh&|y^g;YQAK4iaGF+Cg1;|44? zv~V#`=m8;)2n_3A3@cp!KtUi}Mv|xrAwqL)a8vOfU!7U)2yO9zWsj`d7ot(CR>FJ8hkm*|W!w)5Nxk z$MLlC6*KqOviJT4xkJen!{0krw{ZHa2nR)`Wg&+8d?o4Yy5Td6qOS?G<_EM{M~2zY z0vSC0xPLqo=^+S9)IMo>!P9%Cq51j`ckuN!)|)zQp{#%Hx6SOGIxA#fAwn%+-vbBd z<$7AICDM>K^ZKsL4j(Ka-=8sVVt1!c-Bs|lX2>510ULOakGDil`GyX`raN-?UpWh! zIDB}mV?!IWcWSKU*9nIplP(sU*Ol_M7zYxKWCe|`YwtJ0p~h@!Bp{RM?I3UfZd$I@ zf5CsdI58(Fw`U-V7oaWS1v_I&SeWS|SO9LL-)A+V{olj}}kE8}e-2dik8bDQMUY-t-tusK4_4_8uP}OYF^^z1*q*J%97# zZSw(@?eib0{&uGfMB*-mZFaB4on*=pzY?C8vSaS9MiIC>N)oX6s`q^ED7G;P$H#=n zel|?8ugqSXzZYW8yy;{0d$3PZ25CYfOiB1rh|XdG4t*@gg0>lC9&b)8F!a>(9v+WFfCJ! z4UjRRW-klW)IKK#_a?{@c)-+^AI2!fXB1Qc`x+19i7J-@2LwtedDq%>1N?+#W0!N> z@NC~dwt@K5`$_o`I59YM(~sUH(_5!qQRm%&Zzq|j<9GtjF#c+JU=orw8h?!*m{$=p zgWd&H>iOOs$v!FKyH5S4r&IhIG28!#I;0x}6p#?#o;`a%`Aw0(`b6K zoXgpS{;$r$N-Y=aOXXpJ0uCr;J0J3P*S{-4?^PKA&1rP7HP*u7jBGy+qE+o%4>7OT zRoS~scJg$6yH8g_)30QHfo)bkV>$l*y5I!+(_0iEEhK*Zg`MXFF0hGONneVukoM$a z<_iE+`F!_(OtjRd>8)Us5o7#_RFWhjKSl3;GRz%pZt|9h)}NgB0dyj0*HWjU#-b-@ zTDUWCDfD;x_XL`@?X4iqO2+GUsZN*L3$t5t0kr!5Z&ymFr09u8*$bsxQiQ&pIj zcK60Z9irE({)}|qD$T2>moN~@zCs~z_@)iL`E&e8Fa1@$;znJvtqZ}@iwBSsJ@!tR z()k`1S=<}a%Y)YkDRu9&6C7SX<#^jB^6QzeS&YL<5Wa(MwBohD<6EnLclBrNRi;+= z2i$n#jD$sIV@jFCE2QlF#QKJ6OwB3vwy}^5u7SRarTL;C&+k>_C3R(WlFZ z2wY%nb0vWD=D8jWZ(vzj1yKWu2ZT-&L#gFk* zlf*N!d=7Rt-QC{~%Jp}5!B-@Dg|Y9J2mMkH*ZA|q4?dIiZ>^*o2Am^JJ= z@{#Z9;nUWEqrH)!r===-ZW}9p@3{TD{)Fy5Xev~>~3-S@?~b!ksq~Sk_uvQf}uDy;V0s*I_!rX8H1OI#N6iGv{G#0D@t70up>*A zo@ss*EDbS068#d%f1jipzoY6$&a}&&G;Tu@0jJfYDUMbLm|D91W+?ok5 zW`(9G+*4@*ka-f2m3h08ArW+dhwiPw(W^ac2h&9?I)2F`K%h~8!-cX=zTw#pF}k3TylR;|sd8G%@#W{H%rz4Yl&7!uijCb2z6C)SC5 zXznQR;L{0%}D)S>^u%nOO~$-iujs)1|dv z>Qjza*KFVT;>y(J<|2Ll@4^$CiS~hV*A~CHIGwWfbCJ(4cx5#EjdaMDv+KhIQfB{! zAH0?|K_gf-ad$dU2yh>E;eY1S&c_tL_Gl>^^`migS+!_*Y>{H7bzLbjC{vgi#b8{?%C7OV{@D?nO3sNO1D5}++`t> zF(Ek2XKtIPtDqiTF~IZU#nCN6>1jHqh4_<#L1RM)D-+7oF_MKMP81x_-xRNb7lin5 z4JpC=1qU~@p^GQg5(q2{?&%}i^w6SppT;vnMF12c2+g6d5&+cFYFBzjDnK9nwgn%t z&(PjsZg&9>=wlD+h(flpAzZ!@ z(J?$24eG(ty3g5kE1JItd`%2um~m4vN9M$FyOy}Zi|b=i4}83Y0q5a1gQV& zO4EZ}F`y`>Bm`tK9QzvlH>}A(K-tGa0XziK2daRt_&_h{ZV@@$jkOhlz<;vw=l**^ z>ib_%?4zxoFA{0PuOqbYy?P-2Fd6q*sC;XuE45DdhHq5Dl%_z)o3#G7CPyl4;ro`F zc9PalXMgSP@@qU{>&;u>++dKbajRKtO>QT=>L43uA8w0uIQ_(B`5;b$WFPPB{VaBY zEM40Qzd19_hwqlEi?yRKmmbkImtII)+859q4KZ?rhG_PdSY{0xP`+1sx4AH46>Aha zN^y5kPE#45<)BbBlIza^y*0=zKkw}*eplXeS4K5|YP)?RQp%>gbjdqh zq#3)nLwJ*WHpJ&RC4y|@c87)?E-$aXBg_ckWdCOtOGZ08Xwls!1ouJsy_eV$>hDp+ zB``dEtbg)*L;tmdjs-hX8$j37)*D zY1i}<`UKn{Xa{8iK)S8~X2BEyE!CDfa0i(n#u-gUBDS;7-ySH78*eg3i7-7%v0M|J zkC&}ZYgsU*-L9^)yJjG+G+Kx0La~wyAA5A~K9?zqk%QLpbk$&iz`*T>w zB>p+4%o+5SU4`;i6Qk-yw})o_%dl-PqgNDBP|)8{;C;5p`lo4aFGjk3cjSM>N@!Lf zdN$iDIU8av;{PU7TW$+L&lx?90H1T{v%7nH+i9jRPnV?~dBK&|g)<5?oH0JJLX>yu zR#_7w^LegBd;t=HZ#U+s^6>|P(WzNF}->B6n}((_Ar??pBqSmF9Obxgseoy5liP^#c>zrwjRxp3IQ zMB$%{8f7j0?R!mniY>3g)?%;YMa%0J_V)HBg2k=VfbzaTrZLin&+qdVMqylhuD z)LaL)7Mk+4%=3HYiTBII?WH=vU|}1vMeR-40bvb`8>bB;;w#3T@h~T;(9!2 z;;Kou($4ZKY)O{up^I1nPpOJ7>f_jw=u^rl9ivCW1qS7oH*e{`wx0R<<~p(~ww#Z! z%^9F$wrl2R9%gn-oKREX!~UnRsvk0d`9fg60PQ5rmASewKS%BERpzK1419tn2mWPO zZP{HDJ<(`z#|UU2EwHbotx&0XCom-B>$nBn2>K)wZ~WBSzu@o8NY`g$^gWtiOoCFA z(V=wqrB?GI&+DESw~^GAMVb z>UPI1jQ302i{jG}PUk7uzj8i_fd!>$JTI*?G2CVD_w;s&H&gC}Y=wBszn zen87SEXtYolEqDYy@Pord~?ryn6@xT{$0*r8o986>BYb9Q#rHg#chJ7Vkx%!A$&RH z^VL(buCB3RjqVDET)LcV=5uSlDiS{L1z!_%G)lNc#`?{V>|Hn;IA>55o4fspulZ%M zDW7qW*KzZO#QCzYNBU5zq}BO_p|_D``qAl6Rg{JJ;Wm`DCK7~Q+@*QJZax21JKDtilW9`5l*f1&}RR}`+teIrQie)3kK}NxN9dTKa^;PCWbKh-XiA34D%v`d6Bj| zc=3@lg{;S%s~$J$`eW9d1XtP9`L0~%h-vkqgULT<%hDH>+vG>(lTq%Ztb4t?9i5j# zJvufMNgP>!BgtzbUFmSCjz#&7=OiM3Wt(1|$!EEzuWw_VGo*1IBpby4Jfb3igD}Fj zX~)oW^0-?vlsit+d?n8-d*;^#&H>Gyb8gdK9LYrZ8PAL51Dpm|#s+oyx`>*8QvZ@^ zen|L)Jqm0Qq!I49!tf?^)uG<%BKLrAo%gMb;df!e?XJ_ZqS^e4dBmNh)?QZm$BMl} zJP5rlhny?w`_uQuW*YeiqpVgs6kFy`SDGAOjI(TCnkIKSSl(?Zu%BUmu%r;T#(Ms` z-YcZy)K%HIs-RvXz<6r9o$+VAha7*|BzkN#RZN-eaM1kPm5DE2DeqYCS1W6LXx4Pv zP}5IH(jD^Y-|bT>HSqq}MbB4uy}4cVY2=~8hxrskzArfsGksIn94Mqci*PK$b3-$y zoM`d=2Ex2DdP*#>TDO&qUR~yY)E&!j-FUXbefDB5wtao?XJUfinb6cO6FFM){T&mQ z(fz5PIs2A(Lw5f0V)Jc@=s177d}A8>wC2fUWzRbgrx6coEtlmlM^E@;$!R9bPxvo> z{3gkrzRAm(9XqVGr&>SJ7%MYs?KDYcHx&OT?DJiXzUv}6hC@s$?xG%}37=<{w@ciQ zqHRg?f{c%PN1SDJ^mrp;K9u;82r@Q#ec2CTl>bRT|IJLl|F{MWb}tfJNZOxcDOzV&K_x#Cj%Emupfq*#t8_Z*(5F zP-l9IQfLG&5)&*K*inUZNMBO{XgumoMFe2`cO4o_g*Z~Lz4i3;?o&}e*Q_i=0#deP zol^)SYiktpkO_g;|Jk|ce@!?T2uQ&%XE>*UhZRWla~Ol3*VZY$Qw9CqR@;&M1?bXB zZWUppuVhw*H7G+0DOjz1u_`i_!i57+i`wu$$^BsH29u4;zQF}-^H@8etQgiVwCj3; zOg2RP0s;)eX%=|S<@*a3$|K8j0S# zoN*r=zA5m>Mwo~&VQ76m-TCe?(KorGKcj%dJfJUd^*stN!Dpe-Kh%(LXLTYU`Lsj! z;Nnq(LZJGlV%y)<2>(s2uIm1PR1X;tseedwy1#enPucuj{;0F=t(8~Bz}b76LF1f< z^9*$QsS8%~({QVn%VK0ZKM26`mO@fdVvei`)`SxN)CKR z?WEFHgMaQOh1(}rOIO~73SCi{I))R@_3#EY&7;q zgNvJWPtlQV1drKqo^exTLDtx{rE)>CWV-?Lfx?qEsXH{1Xe5w4UpMut9`PEh)JV*6 zI&D5Cy-T?KA?_!`rTuR9p6;Ygx)i^Rgo*5UN4L%gyN-6{cApOJ$w_fBVljSaMR~YP z358TA0Iz1Wet-XweTzqpLs7T&qMrQOp-P0d?%D3ll%^;i_<%T)9H>1@R&cQSc%3lo z`dbPmKi*nN%U9w$F{_VlzZ-;aFF10V-X)V_`+(4^xKT&*672-AtiGsF`jkE3p?$5` zU0~m~X{6B5J>H1zU72VeQ|_coE=p(7>VzeWC-kY-BByA6-Et!3w>DO9(`1Nk{V{W| z(9bOk8xi)o@>_2oep;%c+owqpc4Dzv+}L#0BZRBa|8pbAmfexcUM5C8rH8W?S|xX9 z4EFbiM}i{He2Hxz&V`g;{0MDxY1y=$>)RanoiBD+PT}cm+1I|1$QUVX%n&$CT`Tr~ zFMIYW!LWkmZCyrjO}^UlQC)sv)$wY}iMIGg_zwxMkifeKze_Sc<^NsVlT4QGTjso1 zApSx;tmWJyrGfsA(cIkCGk4#a_CFz^{^pbK!`oahR=YCUrJ`mR4=?7XclaI{=9-Sp z&kNji_y5IGJa#95#cb;NsI=-G8)IrEv8gTXmh)pT+0};6p_ZE=CrvNgakrmjhjnX- zJETlE6_hj_+Dja+1?u}b&y8=CKUcF2sr1qE5nuCb6mXcAAGVdA?#|6o8xi@ly2S7% zKell50db}*{o8PH5LdJ8*%_;l_DPceSa~+2X>+BD=d3>k0NU-rLsQvQIgBZj~N|OMV%s*Lhu5YA-dE}4* z{M@_nOLWpjLLd$u02ea>U~ixStPo@vuob;N0vFu^0oWF8e0(W}@#|X~eqb9xN5+x( z6Z8@GRuNGBpe3NPLib*l!he~d(F9!1XTaN!=1X7&h{0r*Ya|VTJ14?3t7dYLnMp7) z0$l-(M9hZ-!z3^O2JK;6ru^~N?RW-B4fEG9)tURT=x+xg+o6xuilqWLGU8AQZ?Yab zd3-Xvv09u?9&4no#WD_ABQ|{xK{TUl;Ig_YZq4tOT%$%>%g)~Sc!ymGxNBh4dpYp- zTo}RVZ5c=ayiATpUX`W3+Ze4>?%-<*yqgsQP!`bbI2ic2m-(zuJnnN}(f7*~^0rM{ zEHEE5K5OcM&6ZFQL;j;MKgeAF^J$ChKZ=OVg9v2m!UL0lm5^Is?ioL@;$$y3`&w^O zZ^b_a(9uOv2(m<`{31LM{aLXKHQ&ipbPAmvK)^%G)kxVa3$#_Jv}r7zxv?SJ1r{a8 zjd8VZB`oL{rE1T>{dkiQnM|2_tB}n=4Xm&Td|9btvmmAi1{0E06YBK8V~#-*3wr_N zOadP4vLJjmZkPhKo!#l?N(=@;$F|wRpZ80HGY#xkPxLGPXJ`zRu6i2J^9AFWWmXHd z+=e@t0b6(kB}CRq z2V4Kj1j>ZR`J~$E=}Y1^v4Ujhj8Q4FVNa*~m3flnys~01mI4AO*(hLUEVVaHQSx|T zq~8y@V^Goj{1VIaCIh38WTc>>`>^CLl4es?X`*!;L$fGXmSURx0bdPFH2z1p=3{d}R2Y zsp52OZ)QZbC%cg(JK0EaQY>_+_lTm0W$#E<2b= zft;SBy=7TMt^dQSw3>Z?UvLyv;yCExZsolf&za#FiePJIK4y*%jS3?L3q#!`poS_w zyA%qHXDsWPF=I508Wt7r_Fw=#qIrDazWDtdy8f+LL}53eY|H7xM{*yTdUb^iuB477 z@C4uf#6wX=jY<6g==b?hJ3wuQ2Np!({Rz}jzL@NE8iBb5Xy$+VP*a@V!+=(uyxrS1b3!?|3>9JTO_1=1`)SYL zmQ8`oMlE7RSLDAP>KnkxO62U^NiRViq^8&=NW2cHk0k|058x;1HQ?y0dhqj3jEhIP zn;7n^B0Vbo#q4fBCSJ{99QiVGp)mcj6@63H%uc54#g}?U6}5l*p>F0;EtG9%do*fh zL}|8jjlH1+9$Cg>g z&UoqGvKCjbY`=L35;iDo1tqkc)I)_Lbdg#Ow+=t6kx5jS;YL3mRVIrZHL$Elg4m7E zWI2nyR>{`%!BSy1F`g{5fUZG1{o)=Lc`8Rcg64K@3-5NRDO=A=uFkC1ATN%qIufEx z*+x!m4!4x6aR9sa&!45Y(CiEbYy{Ldl?2b9LZC81QMC^w)xBf{U(sYJvd1ptGK877 z7|npHN>{V2g$ERn^Ao$ylLQFZvbe-69zZ~w3!tk3QO=C-e`*aKnOScVYsiK{d%)Y2 zQy9sD+9bah=L5ioqDd;v=XXHP9*w!opj~JEX-!iH(-Q5RChaSGjSVw*;4{hiTm!8D zi56FOOd@RVHGHjz0)P#mH-lQ3pJ1B9d2G}(tR)76sl$586{Y4}Os&;GIz1$=kU{n2 zL&?_)IR`MZTtJ%*)fQO-0HQe0ZVbmFU*cNh>)fGP^CIMy-l{p$tO*v zKmGZmZ^**-H;(e3ar(KJW0g`}Q3SN5elKEWWdcXn%sn`004}KA-f(xVvl(yp0N%@Q zC^}VkmG8k!pg13k=NfL)soC^$vc?4%ry0?J7O#834e)F@h|j!7%ZpNKy6f5P>^SYUFh90DX&)Ef zD(>;}helLW`h3BE#a2iYBC+7UlVO`@+469V^a^9%?qma|yT=vwR1thThu5}ZbmL7k zynglnR}Ha9mUv>|p3ld?3R~4qj*wnjAnd+|%WvL6mOfuOYxw}HsV><-?Nbj<$ZrC8 zRz0+^KT6JKG0}XhJ`<=QTDLl|;Oc^}7q+kgn*mI+7moy}DH#~|2PsgLKo|m(=GH3) zLt62~h#AdIYp83C)WJ0zXh|3j8rcfAZs)-ZLaYjB7?pF9y9BN7O5#Dp!7>64^$$Wg zp6-%>80Y*oc8;l0eb>f-n3IMD(9jy#;)5UYq-262jJS1N1AO59)`pQ;X078mW!w)b zo99m6TWH+TphZr6m`$tv)A#YV?_GO>a+Q;$5`E8Hw4(Rxhe^f8D!g+9a=?-jN5rjrrR}T*jDkRGNs;k8gJsD z>2zL*zmdBlQHejnHS9paSfF-Px*gSd^()aMu|dYnsS~q-GOX6*o{_uF$9a#81UtDK zeZ`ym7>6l4W1~}5KajpIvtj; z%PV6%uf7Q+S!>%V!A(Z%1V|}WVZ7!WDu-e_UWowqcz49YhdTnuUkr~1lhRJ+STtdX z7M4KR#hDPmZX>%-wx-~x0*y#)Kt<@}-Fwb4g3<1PCzB039df5J z#mYG#g77wG@T0N6Da0TXV0E64TAk7V2!s?re-Tq&A%a>7hyohwrugS@vom-X_N#In zGHOuSNNEy1ko*`0(DqMH6QWSp`HUucZ zRKvsr$$tQUGB{c4Hr$yLOF07g1UP>{wBifl-%g%-*-> zLEUN#qjt?d{lu%qQTAIp-0S+CGJT_F|1Wt*&yy**l>^ht5nv*tf0R4krsL?F@oDov z9je%9Y5(N3hQo%>-)#s5o=3#w<%vC$eQKUx^W%NoF-e+Xv{s?p-lZLJbnS#GuR*gy z)7x<)lA8NU?+DAP1_pjRzaPyKoP8*~{Ap?}pYht48(dtS#=>6|C(rfXo;<8?%=-0^ zL^)1=x~nh0%0{n9OV^R_Ylr#QpYzjiLG%qam#bHd+X4DUmy`(50KabYuD&LY!d<|z zIkI;Im(qo2~z|;g~-cm1*-e{_}43 zF6XMTDMEtJL~?59-v98B-<`G{+d_wJZ#N?XoL_CQfYuHB|Hm&ZN)6lD)?kD(1SJ`HK9`|6D)CY;u1YAor%3B7vYo*V!y5t`YziP|xi4CC2Ly*zIDUp7- z+B03<7B5dBD62JcROAMpMT*>quUKj%&(iGPtXRImM!(KT#%*4v8xP zLxWkr1eOo#vkxj9Yeo{QEyJ5-4%bE{Km7?hnUZpj)0}9PrF^D&O|W{6eph;v+Iua1 zbdz}@&0#sM2qZN1HDo=0{kZFF?A5Y*Wc$@MA!hLHZZcR{d_$QO;7gMv$wnR)PtT`& zi9-T1Ra<-9pxRARG@w`+CiMG#{MqF@NunK9nS-{@w492D9BDjcNrD&f)ty$c55t_+DjbT75n3>*++!p->&0>b5h!aqr+;q=pQOM}g=)p6b8p%7 z4kiiS0=4c4YDgA<;Urylf@Azuld6Tr`kjnO3NNE9eZpoSs4`g{Qq*_q4=jN82%d%X!pdm9(4eqq-ACq;3ee484;h`kCe0= z`@?>mvH2@3z|r{}Mc|DbJ*Mw?DVF@+6Q@XiCA`}7?=wwen$Igb*$g!6wvWBcuvSWh zyEdf=-!w8?X-2>wbGCS`=)>UHzYm1q3)WADqgXmQwT{s8St)n(k8eM2y^vZ~{cv-g zcGQJ(@?t0CpaW}dA-kXb{Cb9AM=mk@pHtU2Sw@$pAhyurRP{W;Z2|KeT07bx#Xl^= zZ%^~R7+a3(Ufvr;MLo9DzH>hozce1dG5QTf9r9=IhyKdBlb#3$S2Xmt4f|b-AEl#J z*PmjG#+D1oS-<*9BD>0Gh($>eM$z@+qIGURbRA$YxIFvkGGdjp6HMp$uFUF3$DDMT z!1257FcbH=0uw9_j$5~cmH^o3ymX^R(Ewpm1S2!zH)sTU5CK6i_sxNeyA26uAw+6} znoHe^XSmMXTsL10N)zl}HyR3uEQe|{u%z%m`1d52a|{h1GxRL_Sxy4AJew#ndZNjZ z21Zl7?8~4%*jn^&@^Sz^BP+&V@dEItcX)sW+^6CF1i)BcO9?rFI1_;8g%;aY@Ci0Y zy&zsdJQl`8+pYSMfDe#xVxF(HK4!t9Aw0}nuWUpM!a;^1pyhaJH(E|ho2@CB8>p3Jn2#?j!3Qt69xL1GZ`PWKK2KT_uk05GA zEZ9;;`F0iunk~Jqk>Kf%EGvpN+S3!9D((WATkpkzNVU?y@yYr%)fcR!!Tp};MO&@M z;2Z8QEf`R%D`!oUGu0SazZY~8V^1mi@aEhl1^5_$BEdb~wxD#4G*lA%Q@nOh2wC6LNx4MGV9%p!+m5drl*;3O84tVIW_Eg09Maa zvIl~YFOCft9%Nda%`FjOOoKr({D@Vr_y3s;X#aAbP5@PfHbwdT4FI2r74eR%E4ViV z--?eeZJ_DLBgH%L7-*vc{~7(KJ3xZUctS8P7JPCEiM__8IJdD|hn;)FV~P-*aFch0 zXSlqv0{kj;z{v8vTmu`x)N~@thwK=U07q5#S|NE-63_`~_2;Cvf=pPwAb&ta0oXw% z`l0GOay~+&3N~9Mt96i@cMk)j=_@Iz>c{h8x7hpmo&Uw8-f}lAG0va5C#vOmo%3PQ zovWV^*8)?!l}$!02R`IQ+}~cXE2tQV{d%aB*0}hG|BCIUg5fPh^UQ;b3y_ z_xujDj^grN7U56IWK5I}jSy^M(UH>0`ae@&>G$x;2iz{1`zf(cDLjV9sKj}rSW(P# z&VukJuC{I7OyJ9llco&umSvZ3FLJBHl=d9ttD-o}2FL-u%?n-mCAZ*vNEmjG^pH8qbTy zwy8ksH%I^K8d>BG5W-njN;*}_kkbn?sHmE8J1aOZCpOlh`H4Qtrb$|dPi5||3_%u^ z@gVNg+WTJ_RAhw5gWM~5sFtp5e~oKqj6RrtMN}4cE)e3Ug+%ktVIFwxvDR`zD{ihO z->(X>TcMb_A1+;LeFRq|*Dy7Pyumbq2!?{?0Rm(&)k8~G`_BpFEy5iA|N5YZ)kaAQ znb}YO151wye4~xqIeUe_gsK|QP7=!eOsxfAwa6T`Ny(_Uxw_@tK3v-b5BYy2ad9Bu+Y5+ zIDjjSwu*G;bK+e~#t59%?@1odZme1jgdqjec z%D%fHeb4YZg9-6SiOk@cK`j4Y z0YWDfZxYXAp?z%(ft<(+s&F?Yh=!|D_4Y_GmVwCnui);^WmY{O-BK~4U-SY!CgImhU51ikXB^` zQYY-m-!$Z+a14lwR=Rs5=F+Ug0-q{>&9B~*KN(A{H<@g3z*X z6ETvwNS-TM1#N+EM-Kl=%W+n@j5d5!D-S=b6Q6TxHp|s&aw`$qT(Y9r{ntq9cs$Y`LR7C&*y8#H|FSW=_~%YFYcBF-}kW1#DAz- z=5u>qL0)i zg>!1?NLSz63D-JMgMkC5eQt&Q!+&#>6U;G{W(AO{SqeTq90m!Q-Pa~3Vllq%HpW&7 zX?DfNc9Nxl=2F9Lj0JKRBfiQ;I!{GGrb{|Gf(0(eRfct$v{uk=-LD~n$9erGvYD=k zUMPsv3%|FGUp$B38z=_tfY0zMYR8lYZUu28wePGc4{M`> zcnM@`nYWn($&G%;2XI7vaRR9iFUpRb+ROQRl(SE2w|_m6Ob$~|zTTO7Q_Iz2HJ@1c z{T>^j@;&vK-y67iFE+Y7y?j2__e!R8QzqEdlxW1D@HGz(*RzOR-Sh=y9P}Gk^>PVt zaUDu$tmT#?mL_yJ1^zbKiF_3zBTIZb|AU>;E&4H=o!!jr_k;FN1^CAl(wE0P%>dZh zVd*ZFm%jf-mWWJhNBgtYK2Xwm!ltPBolbYL_Fn(9=;-@u7b1iV9VoIky5~d^uJin) zJu#wWN;*Wi2K;pmsrm5P{C%k_F^?6q%!2~UY`{YhU!$zY{T#o9bp2}!m z^Q4Z|EZv}fs)IJ(NT`yBE_Zl?$*y5sGRo)hGGlM}YEa?ZH<8=R%d8)`8#|L)PECKu z8O5Qu0 z3|~5+8i)^MnzbHp8QxHk{pf4w8Kf+z?+;Cvw7&yCMr_d;WZ$$KZ z7T5KxESGxsDc1P4{qReHi)k+-xA4odn9#TF@>O3_$%fmtrUy2T*R#Gg7LTk}rbm^z z6wY+LO|w$d%}vo|uyeXurMza*?YB^Q3}U7c26)S8eb)SZymm z5q|A^HLqX66zrgji1<7^mDEqQWVI(aC7${uRdm6h3GT!2MC0?)R7&&Cz1*dn)eC*C ztBuVc_6k3sIqNrYFKvZw&C~)Hc@@S%MjaI(mB?i zTNJhn_O{cP*#p~hVizulqgO4HH)uWB^v}jO8?W8vkXR?a$FG#8~#q>Ey~?ALRu?6a#k_&08cr`gqmvdLyeVE{IjKlGatkZomha>I>`~Zmy=#oZm`WZcX@|qco+^nC!1L z+wxYNemCAB~FDovIq z?3N9!-?^^SnqyYEruh2e%L3C+ z5|Jy+Tm6~kldM|GR9p`!8O3@UKUVLIJP<~tk#IXETVQ?Sys7>OttvQkzC5&gnthUp zaNU$`{OayX7#}iYY97*75-sffjlIkK{hKdpBk{hP>%0`=e$O)MGDre%2W*gkDsjCk z?Up3KWjGo}-g|DV;E=xdwl9%HdWAh_*E8!ugC$EtK~2oTO2+O&mrl0Z z;NBP>C2M}0?8B?~&_gqP)U)zOUEUXVA@P@sp@RRcFGyaCc4e=azBE1Kdv0p}_^o_% z=X4%W(tsA(u;Z+Ykn}aXD%5Ds5>Au?GGHD;3z6c4qP|EBYl5gJ}k;Aj&v#6K% ziyX0`Xcs!t*n9QUt6!xwi1+J9-f5y6mRVmM(&hDC9QhQCZ#?X!dNk4#OzHP^)hEV> zN4eIs8u_^?JN&Wy>nV3%+NkKi905&~&CA+4yZCgX;H>GT-jAsg+Wt*fdJ?Nh#=Oyg zo21?GN^J*>5-h))F7!RT?Pb=D!;9`kxii@|l_NWe-!e)+T(7eE=aFoPT{g<+cl}mh zr|fM_ly}@f3;WNKG@%-G)5c9633d_r&uA%{z#)y@_tF1Oh~vf%aB{wN5LDr3NCr3V zs=s7y+>UIiDp3jAI-h6hC$XLsJ^Yswdril8i!N46b*)DDy1JC(pLXI$Us5d%_OHe1 z{65*bEPk0%`NYy~Edu7$Z7$af66x%TpR?li6gO4%V4&7)xrl8D5$1(?aocU>!naED zBSNJz=Jwd+Gk5!MuDub;siDbod@jFT7L)H5IR5s=kDyTxMT2LyUYto}*p$pCGixGC zV+Sk@D=yF2H+4d=h$a?aGtawTj`%OSgy(%Pm~2~3k^*V293qV|$E(;L=W}Kq*bC7$ zTcWNGQH&Xy-)|Hj#D+Iv7jHgzQ80S(j5K~D(SNM@+dkRTHy$k_7U@l&dgTmNsct}j zv$3iE=oRW`=$)&ZuJ!_TqGUH4FANp7FN%a#H&divUmkm2hUpG8&;1Fr2`3Fd@_G%-3Hb)z>tI6o3@1h_~le0h3(zpg#^{m@$;FYCVHOWYXh6FPIT)e0^ON?#nvO9 zEQX4=L=V&uF6I3n2;8_GXa+ux`x?Jk&buTQDz)I@@} zV9`}>vd3C}t6ey~<$c%mON3&*v^K$KupXRP9IHIY)pv~{Zr^(M+h0@GoI}=5(v~il zb0G;YIs5&Q>LkleAehh=W%qT?$j^{uX}8sx<3!)qmqf4j4Mp{!H%+`9BRkEX~`d#|D-c^7H9D0j9@Z@J0bz4v@hoNF0*x_5|&PG-SX9G3P9PTrc^TWY!Qe?RAiO)-Vq zTZtF7Gcoh!Gi$jiFC3S?&lhx@JG_nTTVC#}j?}8V3|Xo=E;{@parweBsNwXdZ-s!h zf2%}!XDj9YGm#3EMA&hI1^O=2Cn95?EfWHS;{_W9Fs_{vo*(S?uPxPl>}Fqqo){A+c!UI*OBIpc&}7+uleX{-8_*oaV9-0Z`uq3P7ru2B zN5#R&iRfMU>o`bSp^-zT_h3!1s1?Nk@-AEfo$T-5L%SzO>SrkJKJaTrd?&GMNae~^ zU_=nEg=oP?Qb^K&w@{i!z^pT4Couq63IJ82*2jgR z4G%MZbo?y#XMtB{u3(D>5O!uZD!E%x(?Hwj-<9s_clz)2JNw#e%V)%cRP!?5h?d2l zw=Bj)?@N0e`p*g+beaxsR&C2QF~$-1WycGl(?v|oe`6h0@cp)ZesBK7%Bjsh@P;Cp z%B>B6>J^X%Hd|`eYvv>*kL8Es?F6WAeEI!?^4y!=rF#UsC$?*ALUZQPMcF$)*^;`2 zO3kqxmb)?<;-7kBhzlKrEw;v)kMhowv-p>v8b|3i_qqS_-)QjLZ49Y#{VbOCuO+tS zw#cLpUx8hro$I`TbSXteZTl0V$>xe=v7EFlRb5f6Pi<-HnxSXom(uKx@o|>4px>Q9 zS4a8f>nhP@3LAZ8KN%toDJn8@lF^G9=I)nBB?H&!J((4QGO|Rz?;?d&EB*;`X6QxUV#Wces9OWW>96**pN>c+mE zR}CXhB!uu8kd^=-QDwq%|4+SKp~g2Aw79~W#}Plwk2ECM_1Tp5l@12|68aQsPJwcc z%|hVtupwWc+T!emelt9cgQbM^C1c+Vqo>m_%!9U@6Id^KtNRJ37`=50#EwUJhdPm^4~Z z^8ZD-x^DcZCD6EqbXj30T$Q}0@Aukalt)4@x0ktHi+ymRgzr$vSiGzFJ&V=9JF=G5 z1EznSZ|JH?xUc8ehADJh?<1Z4z*t?lLO(BY9<(K)$!Nb{9p69V;3yiaCBXU7z$asJ zhW5c((nQE<9aUA@@|~H<8GU0JnrodgH68tRx_?H7@(4g4ZHIXb)AVf(r`cKr9@;;| zSI!;g7nwQwJ#*GlIhrQIjs>nz2Wk1-LIApd$h|+tJH$eg+U=>#kYbW@q`?VCCkXlG z;V++Rs+yP`$MwWXp@!g+)eS0%)2wGVrJL%sI~tzq)rJL6|C}6xg#8Um;%EQ^X6~~g z&N@g)Ijas2YVgVuM=Rf*<8oQ5@#5Mql5J7WxY%epfZ4+MFGHE(M`Rrd0q=RUgO?;$ z7ln6&O+B>0%!IfQ6RA@|26lC;C}as}kGD(^w_^SM4k5MHlfN)j8!({^kr+|9gB9A| z3?wsyS;*&M25X#8sDRbk9`_X(mQm!#B#_ChCPt;g7y>N{WYZDh( zXw>{oda(PnwRQ6)pL%p5Z}31$#?P8xW^$Qv)t6t~d}2w>x8Nq~@^M*T#ZWL8FFD%-ujOU1KSg3!_M2VWWHrVKZ3B;I4)! zh{7#+$|3)Y1mSdjf362F;G+fO;pT|{H3EfSCJO&|R7@0kLjeM15VGgk_jM|Pk$v#3 zlj-Qjva~?$Af~=F-3O`m^h`xvGuU;`<}zi2Y{5|A=Slc|0FdH*XOHP6>sG5 zlzvKRzn2!wI1|X#y%Pe&W3mrVHqGmWAg2~o((}otaEodtUQj>GvLA%sEWOEz=f}q{ zlCjY>&y!jPZb+YJ-w2vZ7C!OVQnHVTZ&bJGIQ{nI*ZYt|iRt6|`OxzwH3>q=8-pSTUJC+Rz#Yzjo%q-aa-qj96AzLh%L# zzi-YTVKKmg@g4J{(7!c{-F@>xkI5BQ6I+{h%S7kRrcI*JAL!|GY)B4Iz0d(RMUz-( zbqSarfg694{4bYOtIPko5Cb-F!wWak%2jC~y724&{b6!SU6Nv6NaRzeZ}kadxA%_( zCM}&0-NUZnYu7WaX4coKDJ7iiAX~G2fdsYtC&&qcu6al+k`0cE&w$GqA@f2aDubda zvVEPvrG>6$#G`82wDLUT0)E_#H@AIBV4}16Qp4gb3nVtDehGp=U z15uOTfgSa(KqdU5)iUrK6PlT>u3&sY1wWv`2S}mw(?-a`-^-ALGY=`PgE{k=iW$yl z49I!3xg#X8K?ONT3nmh>e+4&048%u%b?SkPcNCiN8*}Y((F7sZ9%0+Z2KNQNaBsnT z_(IbHAjye`1^*QGR{cecA|AkJk2B(5qOhh#efVz%U~Pj1vT_+Ft^HKrqGkMWXTJvv zEViBew4?|@GC405dwCU)li!%Vs~p(Jd5BI^YG6BYdTnRc1Mll@%ADyJnY@9NO z%F86$_!@`aO*O3TW%HtgA!$sc!`k=~HDzmo&}tFU?p__!G+?%94NxtsIAIOZqT(EW zP|0U%_{%`yc@Zc=2}XhPqN_IaOAZLO7D{aPm;Vh3-xaV2WzZK7}w?5Q15 z&EI?eT4RQswPC{>VgbalsIra($2Yeb`Y4cy3@dK@OW~_XgwnDe`HAxb2=|7ee}`vM zyC$3c-_St~JTfKDkB1EiY`68Iess7ZBVk&%w=y>2)hG=8MM@XAMxx9f_u3nq5@=Og z(5zHO{w^Iq$LuNj*n0-i=kLDF%PyCK3McWa>!$7`m z@V`_av9N^KcSy+5$DjV&?*}m8M1WPl1>Ds57j_6B6{LGh6X03_edSl}9FX-0XdM6m zmp{Nfu`JgRME?L*C-c6gC_&V%4=-q=#4Rk-q9`k|>kMzv2c7FAu8Obcr2aVBVU!z- zLYaKYXbjeukUG#Ba*>`L*Wokow!ZkLSk^BwQb}L_uC?#^y`kPKC!K8jELB54@~P*> z+n-;~S4>w-Rk?Y3maGP=a`vn#k~igxD7*<;zqmYpU=Cw@4E~qo|2E2ZVLv5Mqp2^iNMTH15kCGhO;r$&p*N|gZNo92TbP3Nv+<6u*nggU!>$B^ zPg6W0nB=B`stOhi^a9*=b3`O@ZhEoL+?9VsaR@hH_)1UM5D-gpA3g8fb~hvMVeB2W z+b{;M&;!f&lwkDyD)@%TE=L$Q?Xo~xu2Xk$k`755VvPiT!KDBiXC`vw(r@+_CZI)r z#Q+Z*WPulSw7CKfOc4pKipSKDf@MKz1*s{m%lr{O#0e7{$Bhhr`_G6bSX(&H0N!b3 z2tBV+KIJKYmBn<-P$(RP3S3GK97Ejf?;!P42MJT2bKTh8-K#81Y*-v8x z$jR+};rzhDr=hSCN{ct<_6=dYK-6;g8n`-ZWD+~ zbjMGrRKe7-%Udn61Xh*T<=*yF#9Q8LV=fSt+=^@Jt-M+Cl`&lU-jndRSv1 zesC*=hfaWBV0`IToBn1CGS*>Q8z7(d)fRS9DnBi#5?`QqM|?t%J_PjB_47L>0E>u! z=p~}Q3xgT)dzM@0kMd~Z?SJ!PN8K@D1hx`vMf?X&I|;DyJY<}eZuk}E+9P67s{=PW z@krSSuyx~de}CM*!p@Ab)YRqLC$+U;0<2Imd-w9vxu4kRLc^{AvoQ3M1elkElObh= z#{`rW(MPO_a?iiT7`QO;|Cfc@Z5EKo{d4D~OaK%k789G{?ip4h4v>9~ca8VEP{Gi%8kcYDs==WS zxffzRD%IOEvr8K{jnq6yr7f&hy0m-!&bgnjm43%YMTJ_WsrC{aHp%$%_pf7hZ$FBx z@k>7S`!0rB`qU5*v0xlrR9IYk|DxeyNboFWz$xzLnloigL!90|S$A8NA z?EqfNulkuHs=m%2Nk+*vx7Emkv#}xbZQ&!0e9C6|$Z^{?Z9VR)aV_inG`3`ZoXGdN z$+g%tF{6vO?Jd)m;krG2fMs~4f%w8E@1d2O>wMv~X`sM06lD5$3z(^N2AFVXq%P~{ z3@d0HFPA;xq{L`E7+Zl71UA%HSe_SRx}7EDKH5eCvoDN9W~7k~a3KN-Z-A!1 zhqNd@(qTA_mk#MbT0UIGQS7nsE_9n{_a|XYq!8v8QO0!cIq34lgw`4)d5mD36 zUdA-M2dNJg5_PP6lfrUuw6o!4guF%hg+h-hLWr%MwYn7}5LhcDF>$LcN?QVWET|O=f_BaON_*{(a@{#1n<5VP0^L}h7H7WI$d^Mj%OOdDeEs2({Xv+u} z*%0i=6YboG&#>li+Qn$IIn4Fz`|ZX%Vtri0YftX=)y6c~aVGWO^I{qPAVl!y_FC;V zo-hv-RF@p@7f{f3h;l?!Xf1GOYayDnzt<$$4n1}ciEG~apjlIe2e#Ljg`bsbjGhIw zCvc6;g#~p?WePxm-(%bMLtHEe!JWOp1=YvJc7Pev_M5u3{Xj0_+P_JrMEo#BQW}K? zm_r^tS+x7~6%l&{$&j?8_%VBMpf`mZ8*C{DC>i1y4%Q*x;QckDCdz+zK9O1WbHo0V}x!mvN!A)3VV?=NWABqAIm3qjBJ zaFD=ZTT1p{0Ubg^G1#9ltnn@Zzkmnpze+j@6|KiiXadq?8L9t1ra?Ifaa?|O@mOYr z{nSC##r*Az#I^dgH6)@xM=G|PKHB$urZ&>7_Uw1$0^bFnPgg5b)E2&tPV3Vm;=Pvv zR~Hj=mWG^nD3pnT(B3zJ%;NN&jnsv_>uZ**hVfQCGr=AcmzybEJ;Wo9Z}%GSnP5|m z+$uQusz~VLnHMo#@Acq!j3rNwOmA`Vr9=^hJ*9pDRdklOfztO&PoA2Ve7|S{U0qV4 zCmn6t;uF8}#sagyC&9>lLO4+g9mX{<>Im?WrUpj@wrCa;3@rX5VqiLu2~&pvoDD0X zf7_K>BwlVDP5TRB!&0~?`0=Q-+3BcX2lXqS2vjq4(J&4wG6FvB9IZ}z_Rk!VGt~lS zMl=r1MLhzSe3fy|_nm7oM=hOpCxHXz7u}|2AI&`ykmh}FD1K5QmPj-0H(Pn}ldaEn z6iTlZJ#)JY8NTxEP{*jXQPKETB#^lFhB~8_)Ij7 zfnK!_+5jX}wr!XW1h6vrg8v1sFRys^(R}8Cn zI%q4!_m#(Sa{-<6_F0bXB2NqN`cCf}_a7INAv6*$1&lB2T!XjMWeY9nUK)5(j^<9B zbx}>U;>f!LYJ`dB7wspHo!Y9yL#SukHrqf_&0{9`cBYI^$Fb8U5DwvnxJ_3NwoH0k z5l!SjQoT+C8=pBnxsjB_aNl+&TP|&Hp>?Wcf4{vGRmMCq;glTyEP4B*TxskQGLTYi zmepXS8^JmmPOb99txw&2@YErnn;Oyd*!tea-6=OqC;oDcOBS*SmN!^8woF1|S&rua zgyMl%cHK8qC6T@ZNcbkqp;pti2^Z=~nH*%#c=2ejDctW?SH$@6<}!>=1*?zq>V5VI zoU!zuWgNz#?KQXfa_ziNSp^@`lzg1$Bv5%qn{l5Ox@CQs+eg4YidTEN(MmC`2uCIq zN!w%~BL;`;ga3@4!02cHtp6rBI8t^)U(#u^qoUJiz6BXUtcxqUPV6#Z|q5Gc0NHxQsjfs@D$TUEy76tbKxrj9KC zpK{ef+HHKbX9MZJHXWa;^fT*mD8}AwPt5F|)3C%2OYiHxz^BN(5iuV)WOU5qbLc}7 z75J&LLij6Z^x@-&VdjRPv5dkKdCM!>qfd!`IGs+kBs%%OZvT|0&I&=JmF`3z8YT>< zx)z@M@vzcX-v|t1QTn`pB)MM0O~<``KUhXKuNli`wwqHi_1SFtLCi;{54k4|b?1x; z%!Z{E(I;AgFL&8>pR=o{3a#!RGk)83GutFtd~J}gOw2k%-i!e(cE4ok@SA`enb>GK z7-Y!*6Hs){INAIKN*k%gD|Z(yqP}*-d0vQokVy@iEcoL#GmbYeoBDR&ruAUB<2fC1 zX?|xhCw<~`fnxkKo{U_H&@4JvR3)94V*Wi)T@GU$ieXaP70)PP#e&>UdI=i z=L$Q1GYH1J0LEvB4SVM(9H7oj1>B5-u`}=iwFqDabx$#xJY>i!yhHH_AZAElPYxMei%*oZN zv^5omlz!F9?PX0+5LUIRM?e26{J85WXOVuEVC^!vEr%U)QDrbWJf1vuuycB@6P|Wa zbc(Bb#Z`m;b3_J)tQ{Sf@n-B0xx5*Iw&^L{zxTN%=e--38dtM}!M@;7m{)V%}pj8V^ zS8Q8`-!;37#V%z;=u6Z`j z69MIN%*L-~48>i2Cu;-`q^z}Q)K2e{& z@$|wg`fKPFmF6R>Ia~kfV+S-dWx)W@%s{p1uKhnk+ECw^J%9}wCI`^XMV(f+$10Ni zR+*NV=XcM#y72>VzO5Thi<#WVUVn5>niLVODHE2w{E?kV_oq~6?@c~cT!mN}4W zkmN2>A;8D6J^2CyXpT?F=|Kti5Pexgw|Q|;H;%{QX22I+h&`LZkB19kq6;Cu510^v ziV}?J_snqh+xEt~35`WOa8S(jkQXsP!Nnw1-f0Ly4vvm%Sx8|Uhs#LBb2=trOyHlk z&}YiJ17%Mprb2_bKb|3re~tpiuHaHeG;y`OOpSQ-S;y)7YulR+!|hi-h`)Tg2I2hJ z|A4jK?@94v9-G!A$lRm2h`YWEo1)DZVUZ28Y|WK2jh6(q+iTC9kz+Tfsy^GTY4zT) zD!l4BJ@Vog=pn(m|9+~0(RJfI6XAg0Nbojcbi+X0?1<_|LM6#fU2YMuJU<{Ej*~!= zos69kWER)-%^HjOwZqda74Ou>6OISa9oN#U#1k{fR;DM*v|MNNG2_%+A96+nN03mH zh45P~zt5dpya2j%NlCOf5;kElyL~ybz8*J<7xGnTd~#t$Qx2fA5#ZIHkXx%+C%G~n z`48qJoviOEDa`WKuNjz2iuR4`_=2CMFPQ>0mYtxf1}Q&-|9m^yRhuC<$?c` z_2FwD->TNu>u*mw92b76)tLMukvLr|;om4W?RQ^qs*P`dGp)`pZ=S(E@c8<-mbrP_ zb2_KXrMQ)u@j##GB&l+uQ7sqYAWO9QY!afXRORPWwW6ijE4zcLQ<3T=j?{Uc z8m^vAn|@v)LdV7KMTxaW)ej-wj1Ue)E48e{+>J$U;sz*CkG<#NP0QIip(y+mMo0~4 zn*IrNhT6Cmz2tp@2lMTInsI?9?3DfauaE4EJfba3Y%c> z%bqb@OrIxD$DZ5wR2~q3jikA|lqo$Im$TOIFbG?JsrY=@O%zoRdK|6XKsOW|Z|IC0 zzSzjus6jkE`mi_Sy!@_ay+3E}{OBWDmXQL#J|W%>Z4%WL!y;ueUzhsR5H}4Z-WyG( z#O}LR2f2^@s~R&`Q^Nl8C%vB@e)222&EWUx=0b=^(dZ#_I^y>55}hNNMkCc;;Uih0 zA9jN|@;+u|Sz8>%F3(mR8dwrfZQ5_nBguUAS>&Si{OG*Tl~;Q`v--DX`F*|jUM$v} zIN#0=Ccp-wtt)9pqZj$*K;k%=YL`FXO8eKoY=MkGL`JZ{hPcPT>bzfWu-vD&2bR%U zhC)5#Ir{fE%!=I}RP=BpD__-!t99Y_qIwy+^$c&XcxY^=V^fG^0BcNZKd6M8p|Yb+5_lyk)uht4R5hgp?orR0FT3TDz{(1R9-FOY z$WQv)A6i4nE|M)qh2!_d=S5L8^bI3-yKe7BG?3j(M6kEcJ~tXY-i%7cqa%2axi`Jr zN6c)QR*l(qR40!0)yMv6&U})Qv-u&P1gY!#eSuGT1yiM-;Um+Rx9y8N=4*a-%<-0o z?iCtYP8-V|?cL3CTN83-=avnUOSAKCEPKyp@VI1pA}6|!^k;+U@^x>QdEw%kd6^DL zv!_3+HIquX6eGiV+J^*pNdn77dp*ORR-QVuD%CT!)Uw!Kwk?^YteTCL7xfBguDEH{)UiIuw9HWY!w}E@X$l}uueiJ z-py!Jzem_%`>B?kdez-pscMw=`x@;gav4E4!U&b0|DENYh&vwaEMO0LYPsiK$F!Y! zZAipFU~w|@tB?LE$5(X*Rc3)oqD>2SLb(7vSK_jX#(TmsLHCq+k6#n3Oz)L^aB_WO z-bV8Djvd45dFk-eJ}k8=6J^ylzqF@wrhe=*#J?%`?MDQxXaRe}Y#O7(B}a6XEz@zb z#H!nZS3);u1Vl7SDdMF<+-rS zcPh=jlcwh{y=|}eco5%g@-EZtdYn1^l}DDJ%_%>e_U&y{^$FD{x$ICr9*@(ID8K9U z=$hEH&^u~v*RG)LRFMs-Js1%s!c)gkY>R=s=3+7TladgVWmUo1^P@=dZWiz(BFJ&y zyx=EiAyM5TNzN{jub0)0y~WrL(9%2;Z4|qy6!5D>#dv(Li}(3Wo=VK9v(4`p*1|;+ zv)eZ zdZy@4=4Vd-u)M?j-x3)}Vn}x|?8gk0q8<)lTXNF>d`2;d%@=rqKZ);_^{Y~L;{km~ z^m{*r718vtKpMm4dV;nVEPT0(%7)dsO}8zF50&;BhgdyQ%(6k=iqcfQ`|i2gs)B#2}-2*Y)5UeKD?c2T`U#**A;jR1#0=&fU`sm*XPlhA&!YszNwh zPty+4)(^MIKhwphYvgi~Y#vJRY5)F+k)TKz_~s+a%iI=jzOE-_#yso`+*tRTgzA3q z@LoUvreP`f=f;p$WLchit*rkrr}<6uzWVR^Mh*nd?wMB_zKiX3p5O8m^D!k9viAjz zQ4AZMJ%*w#o}7wL`5%c^TE<>6?!9)jXke(D-I(aRr5;FEALZP?caTr*$UxazVwV?t zwr-+vL}325-TX#>S8i+TcuZk(YL7Nw!?inKUj%=VEFxT-#`yX(-AURa#p!Q80JUhlMlh*9yKtD<5#NB2G}Q62)!XA|`e zm1a^!sac22oeUP@uQrIcji#O`at2_$=6~Y%9G5G&=eJ_^&SGQah_P`JPvH2@-}gPO zIafCZKi;mgSty>K>U{DwWs{SswZo%gXjkc*?gQtg$PR?UBWt3vl_Qo5f$^(BQ=4Mx zTNx!%y4CGU(r_o#Q8Pf4XdMt1R1HM#?RZhX6f;TrV_)8%u}8%POQ(UzYlg0jyy&7)h>0-oEum*|XJPp0%_e`>~&vM7TZqaRgPt6XYaw z7Cq0X@9zS`fVQeA{QQagFaAo&=aPJ#RJGYgOlXO3uWYO42k@z{ie9U3<{2~h$nPC? zk6y!b4YSoa{ODJIKWwd=l0b>#tt;hXdD2i2hM)a-=9hKET?c7?=9O!&TA&SJCpqX4jtA*)e|Rs;cwdlBTOAQuFCes4%7l;vbp!SkHI3ZC??x-LH<(YR@au*JoD7 z(V3hatjiaC79oliDM;z~Tj&lCjq)2i#}!*DbD9}_+Bq=(mGis*V)*iM_l{H;#MAV+ z#gqNyneCdo7u%fT3ANErwQ=EZYHkHg7k|rAg zwC;*x-_>M(c|LmFFA*@bQr<+Upj$HIo>zJuI(awg^Llgn#X0aJ9RPonS#=QRHRh^V za@VwwjvQ~MpMRZimfau-XGVp+OKT3#js~VX-+NjpOSNb_+KR@+0d5vS@Wx?y&wkl%Tanr3R*q^mn z>X@Z16QEV0DsIiM$40VW<+XiV?u{FCVimxE_zIecx02lA;kMaf|o{VsLv2c+^ZLzhqPT*mBGU*6F)v-`aH zD&J0u(Q?iw{g88f%`&H=XYac`(#u<8i@iU39^+CJ_qB+p67JD%S!7O5%XKng21x=@eZ>FNBVqqvJpwlx z!6bIW^MCj_E@+*I2Kw|5DMy`A^4=BxWW3i}Vy=P}%HsM5B1^P)g_dd&VNWc>4ENHz zBgC76$g<-qFBYX3z}J6N(&ciS%#rFLOtX`otqE$v1O_<+BYQ|;I!?Fzy`{s@XmsVr)SJ+C!6ofP1d{OA&L`s#Q%(r*`KZlMzyyO+juKs z0z6C*t}IJpfRTYNjx39r;!eGSPSS>F9!rYS^1=Nu(30vIcqP09%b~wKNHcRte^bT- z?te7_(mR{bhzhD)K}qt>GMp?}6xvqaCFR^iCODvP0-FBx)=;7lNZ5yE6iO+?*h|7EL3cj@D(+b`Ze&Q`DTvC_`HFaS zm+(ygi&7b~3ti z@D#1+1SrAF#=U0fMt`X@le!zmiGL=Uwi2w*Ud@$rd(gQ2ju1cTr^UI;gv+A)L6%wj zS=0r)U&|HN3fa}C<|hZwPp1YCeYeCN^iWsxaqP`aA5VRJ;uX|u;(aQhsz^RNA?Z-z zC@jQ3yc*axPMOjiFR6LFQlr|=nAS~KqeiV#y;^e-t_nKU_Sv_0 z#AzaaK_l9zt5`fHWOQ*)jxS%CS{@9I(p)tlQz|6GoN77Naap)*geQ43|*4dBn0U5UBd>IhJV5r;E?+tV>T-d@LcJ!oA?6i%V15(j7Ps5;8o_38ePc^S>fsS->*b~Te1dRXer;mOs7g31Vgz|uetrGUTFwwz6h^;Yrq5Z{c zcp1zYeuMNPqf*yOff;}Xyl~!9IjD(+Q6=F;w-czX1zRL9V1_Vo4#ABrh6W&@Y6yVm z@=f|uaK~^*4Fs@W6&@<^r@#ILTBP=C-o-44w}iL6Pky-;#`>5*^ev^fN3vn>gfb?Q z;?otB0tONwlU6uSUh-EV_X15CnEB+6jyTo!HkdnFXKC;?O%+JBejvd906zkCw)GIq z99z_TakoCQr!y#3JdvHqU*gf8gb;U=3`H2J=014lzY}p5fi#n;(|2^7ji)TMtijN0zwNTL+iUvtS_Sn z#dpkA=)6=>VPu*$D?eoO^lYxbL6|(?FjP&;hej0K&%OpoUH?Y;F%**>A$XhufII?$ zjgnW@xr>0fHc8ZgxX~xDH~W_eY$WJ=9t^)po6!|!?&0o@Bt`#XBQo)jYl6}kYDa~e}n5468@|IEh6_X zo3htn27(l0ARx-I**+%RMua7-YCAJTKfq#8rYHQP-aQ?3 zazWh-nO`J+xwaUqn6j`y%WpIs@)XQi6g0LbMb?+*(B&$JXR|D)JFyp=2H4ZlK;+{l zsS(N;0S_;L8SXQaTNwJqqOf?ATBQ$vf;&%^X_Z5IyNg+@Z2Yv&}0kQS>>m5nnPh5AbQ^O<3t68+kZLX5p#C$)g zlH(ofqx`Ar8;4~emYJFNl5Vco-_zeNrFnJr*Pvsa(SGZ*Z><*PTEDC&oFy#{OU#6? zMw1Ipnd&N1K4(p`kqc?tS@iUIacW z@3m6I$LQgl1z7u~K7-SaT$qf!N9rtxeO-e#>AJzE510 z<#B3Pb)nadep1MN{Vkn7F_f;km-%m++bO#kNd&g=!=Mku`4}^1gX;Jdj*eU zM)%G;h;vnJyYblbO82LlzD%5NygKhc^1re*sM#aB@lSArfEcQm)y@N0YX6KtppaMR z`|vAbVkdzUZFdHdbx@bHd`y@qz8|H_aPJz=mF6p=>bZZqF}%74Z0OD5yk_ReSYLv3 zKQ;!-4X|Fip+|A|NhTEJ`fM;@dWr^YL4Z;?NPw^gLJb?}q?liYH+Y%$0$%0QSo!xXiV?_aTT|IUxwQ{tFQtr1NS*Vj)vSZHNBQp0kBiq|A4eE_*enl+T3kak4Zd9l zO^1d66}*3VHd^oJ>t=y5=65UWP?bQQkqESOVWB4LE~No;P~NJhWQ_Np1;MX5EbZcd z8n4pUwAEChgm1ne@N;(FzD)zFps0PFc_}dTQDmr>$=yxPy3Q0A7MnidMvD> z-h38e>-Z~D-4C;X5S18GzPjb^TAbbb7O5axa4Uv)2u65Z_fzgQ#zlbUcm>SxBfVk- zKsseehi`oRX$?dOP3Ra_#-sNz-zL())`P&#M<*{-@cUR{tN<&l*&6^0mHn{Y27nj% zCDd?S^t$or2Q0ZFFyH*rcu(fK8m>DLhs+z=kEvQ_&bb2H3Bs!6SS z`?dcw$j)GX#y4-K5&{`1fK0wkfB}7az!5ejVw(|7P5_dl3B6E2Zq6I83w=ZQ0F?LD z3s2b1&{gE?&4O#paHfMRUncBu5XdXQN^dnJlMEMpm#T~+p4Y;Mkr#Br-xwPWA4c*H z={c1CtZR(dV-d@mHrTu=B0JK8Q<7PVYegm^uV_maQ;lPT1Z8Pw_mV||+F_hV;|-d0 zk**b|Y|VLt)+3#~SHsGhXeG3uiA@Yg; zC|5maWKPm@VY7&-RrH$sA02t72wI(h)Q;0KJ_q zEUw$p-J^;m(={N&Y^7b*9h0h+(mJ%{t45IVU>FNcK^Bu=a-9n>e~0aR5boOK)6h~R zkB~&xSfP)^FTmV1=y@r@UkVzw zh>!v9?h{u8Z;GGiaU_O!`wO}%1DIh~cau{kf z`HRbq>qVCh24xz<`VIo{4e(>4@{<((d{$cBD)8D%#3^q%9BTmN-h^$XDi%=7Mw zvFzVx3fskQ;w~W5`GS|;(|0K{ZG8)ezpJF6g<;x8JNY{Kw?6=h$gdEo3#Y7%;K3e%T%oPGpa$d`P%NL@M-VW60rPx{ zUWqzBGrSg$m#VMb{|`C|Ag?*eG+Z-gf!)|-_1ZRt10RbJ#(2R6I8sO_Lcoj#n24=q zIW=Il8*ufZt4gF1hG}>ZTZ!radqEu;A~z^zen2$M=qyw#2;~S>Sel_o8SCSEbt}Y12dad_Ck{U}>4w%Sq(H zemYH5*lR?_PEKl7#vxR@pwrFepv)K#!MAlasJT1e*Jghj|AH*2;7wPpy&v0 zRJdj#85!kwIbZB*IImsI%&=@yb#300UDb%5d+06wYQ3ImxboAqABlRlWBs=Epk(?J z&He(T{%xrPU9vXa_?FPPC#KN~$*mn+ezxV7428X|s2`nTOinh~HcEv`e>R_-)?4te zw$k1r!`5XRrZ$M8O!~f%KNs&T&SIR;iUXpyT?nF~GtF zWrV@!_K4f=usGg=)ZEkvnH7(K06ap?xn~jFjncpG?7TF?d#6CZc&Gc4h*0}vQiQ_Z*Qgo{MBdW# zMe9x=H!`y>VXj3qFbv^1Uj%O~i-lbIEelYc0?iLGs?hq}|LBhUi*ra9z}{tPBnD{W zGdrq-@B0NaYWywiuThK{Hu&BIRCG<4v8(B@9IBcC@+$4xlrU|p0nq?a_tAss48}T# zWW|UQ<^a4?SQP}~q17vB;~L~w2?Z2%KzcENQ|0OnGZ+4%B^)gIU+{h=VB{gJ1AI6E zGSss9E&#shBA?t=u)1YF*L@7*IAB`I>R7^Qe-^fvQv+Y_JXa>q>f4e2gA$GY+|R;h z>Uu97?Oh{W(}NB$4A4;jf~?$P_a-gATZ;93;1MV%ig_Hq@K!e^#BuR=;6p~=%0(jr z2qqdO4ra^;U_2P7XQ>CCe_}Y^{kHBia-FoV+iio=14I0St_pXv@LH`_&)JTbg>QS= z(s2<;{ehl8N!Gy5KkfH3V8eEbpuz4V8d=)Fgh$!hxUN|{5#$R_W1d;)P zYz8Iu)$buChs}fngoP~q@&5`V*;E|NMDfwA11WcbA|VPU@QAkGb`YT;-2q9Y3vn`G z&oZ&lKdjX*7vIbLs|K2$g2yc-M8>#1gNzGROSicA8OrFW)%E}Te$h$#nx{4?^EW9@@l*d zUK@Tovoih2A5}+8^YdEwh4vMpEMvO-VLgne6(W^`mL+F;(^-_YZ_0-jj>r*@t3@t- zPbevhgJk~ppAOM7PCb%Yn9^SEjfJl9##g&ayOy{dsj553Li{rVFZXL}%15{C^@#g(dF#hA#NtOvItWsO@@7-x)}1G34PA#nu@K0p zaFGbBXd#m-h9}2=yk&@JqjFif^Drz7bSB{(yuI{lv19=v$^#un|2$uTZk!vS<-I_) zseFTbsx!K0Q1z~$fg7&DauWBXf(xpmr6$h8`F;l#Y#|TMD%uw2zMn0C}$?QGb z`o`DfWI1cJfvyO{)1B>GQILOuBxU3LcjX>nhEhZ<*svK;ZHOcU671w&#UepsxNCpNSmH)0t|!H(y>VGba9m7XV)kt9e=t5-XpGG4{<0N#fyEZ_`-t0A@&`a8%CUz@RpD{rrPs&48M(rl5eEW;-a9H z=HoQ?z1W{2bN2MHMDMGA{o!_Bk61P3zMsEn#*wdG^qHnumJU!BLl&mkoeGe;RBS!B zP#tO5M@}e~B=Svm&u#8PACef)if{ehdRo^tx5y~e`o1ojZ;}APgEdRKpdP@*@oqlO z?Zj^2^5{cVIx@$GR0T&p-ead8c0ut30>!r}a!4jwl#VDg0AL-ihvc(WI%ucS{&R4bqKlnw!B(1A3H#%3y}`OPbbaNr3kb z6NNRpnn@0e0wloLXMB#X1yD2Yn#}0LutK``cSoDpS}5bJkjLF-A%!B+udn%bue`682Z&bRGK z=zD|q3qdtnOb00UW;PvcD-DnXRzeg9#ukx(qsB9Q_5tfHWu?yt%{K>h0uF8^%DQLw z+p&^zHK}40z`&#je48$q8;v-PkCWq_avuKbs+?&rwDLIHo+IP$ySafSh;ch(niC}_ zp1&Z<^{HzwkZPgC`}DQXNRKnQfAROkh`vTmL0f|*ta3?@J+*I*Qy-&`?-q?PxMJWE z{GD>Uv+&xI5@W|c(?L*1a_L+0X-^5RgV`eEQ+HNYL*>$MST@SoZNWi9hs90kx zb+DnVB81&GSrNX8Yu}U2{aaF;pK@k!Os$l)uwatkJ+Q)mENGCLQcz_O_bsakzpcSN zubiO3FCX|;hEJKHcur>%y~~gHF3_wYOv-Zem0hB-06zCHYKBP3U6=lqrd;%{o_;H} zt3DB4o>gHcM*5jxaPOh7L|8^@mjd3 zKsiGt<&l`s^>`j#{=y>9vbQ^ACa46#2`H8P4|fMrgp2)qy#^x#D+4tRat#gtcnuOT zGmxM9+(BW`Yy6-3#APgalLX2+fbnNK75ppY(->LcwRqyE0JCz;U%a z2gj6tK-%p-IE*A04X%z--ghv-phE@uP(r$c#8^OBtHXQE+~q@KW{iGs%y%L6*ajI$I<<$6x2vb!Jh2Dj9T>h4tk~1V zeaBh%f6ea6<%7t`z}MkNxq*`OH_;;2za`i(MoX0^&M9)>x_a_1RvM6=IyDM|ro1~T zM4LV>#To}4rcuLn^{rXwXX8x%10dRK;kOHj<-9chfd}w3gBDT!sq2yz-)bv2H)Ir~ z(-VtRrh#omfFmDp=sS>c|CsC`$svtd;GO=dwr|JoG5G!cRx?4NVfmL^?}$02`!6pD zm>8)PU;X&Iav(mVr_&a=I3FCeo;)YvJo@;L;DbdG98_4?Y-?p3#j15--S7MAymKq6 zL^y;|(SKwvF><;^7JTl%(p;$3cwTnr;o5GM8Gj;Ax&XhKces0}AR+cG(lPS)YYiKU z#9VYZP*i&-8_k^i1&^+iUrPsKU-AsuU^DQI>`PEm& zX5S<+mDE3`aO_ciWdap|j9Hu#n>J?88gMV0*iEoGi$%R9B`yCFbPz6 zc73PUU+Y^Y>CmRgeSPA}#?jEiv$u-Z6cmHhR_^ZSQeTZ+o1PdIu$K5p6NgE^zwgQz ziiu}=lYywoD$ybTklXjoO`@(NH@1Nq@<$rlFCNDGm{jko0^eTk&!<5<3}s<>vjCemc^!n=`f zK6mUhHV^tIi8k2&@(GqY$v&V)3W_YV+&WK)T zi`+5N#fOK1m_OJijHL=aV@eIEF#%ysrgc$tCspQ1+ia?z!}6S7%<>|Y#m$qO)(1YN zw~vctFGM)~%qu+nrAFR-C@K{g$yM85Yn%F6-_2FPbN0sjKC`thw|AC)?4!e*+>}5! zhsQL~-CpKZt+1xsW*nh#X5XqX!qhw0RaOmKedK8e#$6Y&Lu#{rW?|E_GVHL)$%~Ug z&f@aj6Pp<-*^iPXEk}3U)$RToMP_?qzp7bKn(3#vQ2gN$LgTS0YL-7Kb-cs-V(13$ zux@XWr3V5BP}Y>Nj%0+VsPY9{M2awr9hZDv&zYqPUYyU|ckD@>a$3H$&-t1Cb@;=X z>0$DDm$^7Uw%E7BS;p}=Ym@iE*XZI zFK1uN^^tw+_AuYOf}M09S?7b=w)L(rt?i+tR|Gvcs}8kZ zy#Av{sVGXB4DS9e?H@+-Pg-xD{QH#;(^ z|6I*DuXx88YtMkHfa$|u=x_$SY8gL|`4>)$`TG~&{(ZN&=6_ZkNEn3F(mTlFmU8F+dP0k(BQ47!;)i1wk5-Zlrq@5S3O!8l^$$ zkp5pj-``sA%UTayW}X>_8|R+8&p!Li&Rjwa{qWj=*YaLty4CW_H&PV?ZgHH{ycBlA z6x2!k^O>hT?Gx#nromGtfdki?f%C(a%Cum!^DFO&y2e-8{!}5 zWpT;B%`T5oOJ#3(Mm z>*J-?i9zyiw`bOs3>{hRLnq?2HvM(~=QTmjs>$x(Q6v)IqVv8@##MBOydC(~Y})Q2 z|Lv!5^U|-S2L}?FU$h3?iPzp`Z*ckb6dN6}&Yp72D2EPV6!gwp%kp?;Wgpm)hAqVW zSi5&Khq+r(nUcnQe+~C%0_n3Weqt0aMYqb0CVhQ!e?O2bJ|p-!{QP2TpeOFT@5&Hj zSdHjBDZ;T*F3ov@e9f-NUXb=UaAaayMR(stapuv3+6Sv4-TTfnKEVNQ$MX*dI_u_% zY<-v>*4wT@on!2_;^A_xqn>p>Jo60RPhzV%`^UB|e(w9*f!=24ZsSU1-fr{yZjvR! zK71b3XZVm~VmPvEY2F_b!%}M-q_$Sp4MiCaKjCH$-S8%Re$ru#C9&Ne%_DozBl=sr6d@L%RFjOc}!Ra;Sx8F1=yr*{bVBz{U6C&$#eVApTyzTUpM#-C%mB%Ho2^xLE+A|cq>OTKY z_3du{>SWR_B>E)%>ly0K72rm;!PeD&AxI%@Fu&4&JSHuSx*e;$wP z`Tx}x;EQt=kA!N5?ww4K^RU=`MmyV4gcHAa6@?>yx<{a*EpAH_Do8rOqG4ZHXuH>x zm2oj8$69Y0p!7L{6`%qNu`wQ*wGd`>rP4wG18(g26haJ(QUP-AQ$irq6&^4*S95_! z!U7M5mym#=RFxh2vJe_hfFBHCV74j(u^`?Uh#-f4dzfe_79?}E2!!hd$QBc3`^hNk z;6r%p&0{0`vZ%VKgT3K_yLle)Sb&!0W(CuLB`}s4pdP-Szo>{I7SBZ_`uRa<14csR zH11<~f^}%ozRV2&BA)OM;jtmyuZ+yb4$A84cD=$D+i4rCM#_Qsp5O|8085*o8NiiA z+i2$Bnr_?}yOKikrC(W7B?xrP6H!WkPVphd_=bcMfdGFi$HoyE`V2mo4+2GcHr#?glvtrR7GUXR# z9Ylj~wTsz}7m}+nIH`VpUHZt&D}XWrFKgs=oZ|5c7t!wHvH=Jqn~mOwL&qbF7cKJ4 z>n!%IJK~L@p|W1TeW~2<<@P5(x|X9ZzPqRApzhrHKHb4_YQ6Z^dxOqmxOc|(cl}fM zt3pu16ilLUq>%*h`ea6MXdHK??$v?N~fvs`f zoig{xMlRu%QJj=q5e!>wr`>(>n-IK zTNpk0e7TFG@SmtYd|-I8{<)vS-#?liM{&Q!ne-=G=pE$~}+ zM%Cz0MtoJ7tp1Ph+1PZ!8ZGVm(*%w7k7wKip4;yENf)3lAx~)yx ze_p)Ybn-4Itacbk?z{M&XQ@=)J$pE0+^nLQ+;fzi=Fgp|9U`w*(C44tq&rl(t#fMd zH>AfSZ(UWh;_;V z4Vu8A0U<9S&kD@CJ#bi!(cC2Sz%ld}9t^(iZ<}WB)0+|Pu>``&H80$csQhBYIy zUjq5yel`SDwU{CH3B2$^;dj>cmqJ-}NOwE~2-##J>>w9|1SzgaPW*bsmwYI$?!xYA zQy);m0k{KILTa^A3fufX`K(Cr zjVL+)+I)tJ{lRbNZ56rPOh@GL(5s^;_8F7$i1-tD;k*Kt`?dX_FZ&c_M5LM`^S%xr%%N7i)ll;& zfJPr?BEhqiN=7HRQS`P+e4O;3g=;gjx^?o>Z~(31Gsag=tm2n#H1^zE*rgCo137Qr zTs{Jd??O-S@(bsl%5D0biya*yx;6V&>X%KNZvST4uP}~z&d!9 z0ufXNL;vu7F(caV+}3Z#lwzk$!FVm&Ij<>yg;FXrhVS3T`m4V5 z^J(VIj(N*hubrsliTkZi-pzY}w<5D8cguNhyq^zwbiJB#VWpz{vL-gLdfvLRQwa*s z#&H~U1aYK`-*m1M*{!ZF68s>I&BE4|HxthBMXT;t$i!K4RoOta zEmetVKfO)a;lY*j-vuYjBC|@>vS|i1w_ed|+m!Y1e$Mh<;@gg(KG#ku!Q{X_8K7L^ z0`RcF)=&ReunYVrJI-c9-uJ@h+$DSiwv;!$C9mM39jHPi;O1SD+TvC{#HI~H!XH+}4XJyh}8JoIJigJ(&ZE?K4xjiuaZHH87X!m|+rh2j69 zm4T+P9A6Y48G`(5DMGPa4zQDOQMXN0fl? za3_ka6*^9g~HxqFAonwRc& z{ArHxI_+IdWSJLh)oWF=qz7gfbS5VH4`-mvSU3TvO=w zld`FdEPgwdEiZ>)v2GANNJubDcr$gEd(L%(`%6=nK8Ja}Z_Gk4|CYW7p`GJTjNldr zBEAfPy{WeU^KLi(Pjs)Cth2X-T|SqdB~lGHGBoMRio=qx!GO_KffWPXMy-1%Yd<6d z)7`CTY7Nb@lQLeDh=>hXAQ_61R2B&$j+U`o2|B58N&Jl8-@ftz^0OTnu19%ZiGb?` zlLqDts*_XxeS@8b#vd%i4bw>Kfo;%R(t2=LElt3A|>X~z?v9-sCJ62^c5OUmQx+e;!2UFN~TteMCR`;G}r65R$ml z_{V|t=K&V|^p;acHKLb9J%5Y$pOJ-115l`a>U10lQk@r&r_(HUX#oHPeD%$=Kr={P{E!3g znFD0#Py1QX4Cs}COhUz(igw5umX8OOfwTZ0Z6FWoFqdUnw*ogqjIkyfg3qPwp%eQra6O$eur53O90l0&<_cLINbcr^kA=I1`ycrUv1yUqmm|qp$a%} zFG-Ktm(0$h`TSRI z@TVv2DA0O|z|N*Pb!tW~&dA9|YdUMWCWev6UsI{?>EYEQ&weBeR^`Fchx^^yEUkAm zj1zHMITV(y*A!dRfJ3B}c4RESKKr+t9B~wqz>-1c`~x%J@z^mBb8c9s1%YIO!uRc* zME(yqb%@afnm%w7eab*G_iIJ!g`A`YmO-6rYC7=|G2p_n{kib+S^t}SPHk+qXIxF{ z@@3ZT|FW@etNnSrv=`U-iSp!9VrbP{Ydi z_N#0_i@ijGor;_j?a``;iP{_L9cDxvKgFMT`@<9qMx>$^f>zuUY8X*$gkA%;e87@C12xQPk(KBUfT(;4CjOPe&uPE*D5^>kU zX`6@v&ffV~yc?=9XI4J=W5%gogad6Nsm{+(;XbY0LhTQQX{${y%BvH(V>LETU7mgp zaV*;@I@^jhVY#5MU!T4({XWobS^sV=Fg@4U?p~sSsHCbzQ=YM~o$2QHuP3?1Y|9x@ zQNJ@H2D^*ede*xvC$p~KqhtAC4CoIbA%OS{!tBNUa|{Ci}ky%Q+`m$ z^SM{L8=*I>$wL5vi$^HB!3$V)^ri zk0%6kpZ6150fw6F9`K(DJU$ZxJA0!xY{J3zZvi7K!YsH6sg=RF^|+q^b9Ds{2?;|{7v%x`OO^_zk5tWR2~d;B*n(&M;DA4I^o zXQ93^F?E31zc=x}v#!41Sn|_NU=jMpbH~$rRwI2ip3(ZzTcweazsNTOIU_R}rF6WV z-VZbmjAWfM>QBjYo|KN`L}vbT-Fj@3p~;OE-OwQ)Fw-;CNWy;`qb|la>u2?xUrJtF zS|i5)>C2-Hi@MZ{RxiP^-kN({C19n$@XI*+?9SzF$FMELR0I}2?=uQ`epvCZYK*}UK_(d`#v`29E2><=*q$&Nlw zMS^#mHy;LwH7{N@@jU?o0T9dEdV?@y9z5^0tq~P-LdP!6P ze<@7D%RDbgssZHxStheK_WH}x62Rd6DrU?e59Y1G3H|;!K^r{2iw;o?Ib#fZzUp-T zAupyvn8x*m`G#qjxXt_|&D6Q$aleSrWUE7)oLMZ*48|{_Rk2g!d0U5#0UrqVDfxzd z|McyRu|S>=PV6W06Ux#ntKFkrmg}Z(E{g?$hOKrL1bUiq51!=FMkhDZbRA&==-eoz zKCZ!M@jzvT#`bp)#N)YLiFcReSWI7o=@=7g>g;ga_`KK=y?_976o_nGR16W+=N$() z;BEe_1~5@3fqOrC7q=c_Q{l@f9FR?jg5H5F0ZJFpa^cR=BAArgU%0{vK{E$GhX=e0 zPcHIsE;sPW>QJN-#_w|O{rgez%MiMchFnk%7#zIkxqM#a!^T?#1v&@1O%%5Rf2gAC zYF^I#=)0ENyl>MWA~T>ts*#OP4TTF*jk@o|3R(*6i ziT-VA5U!Z5TMZg!`jwG%G)#O;3l9^Novh{0IvIghX?92RACZ~B)8A?_vAJoCO9dMU zR?|SmGl?L!ptn+-RY&&*Bn^g*@1uIs23O{+K+4R^CB?Ei9&D$x&vD#6*UWf5q9<8N zvCJaH6Kt=uBSiY$XJ6_bvI}I^aWr0#vh9t(*B1WG^)IIe*4U)f;1|07TEpswLC&{# zoJj4&K}sgW7uKQ`T5LF~z$mD4^CRjS5dGQGbucN!RVnrbGK`F$dG2CE>I2B(xNYWG zMej@n+0$$Qp`MEq>q}~{#fHDmIwxcxx)$u!ag8cWO?)@U9JTyila3W(7ti(3@RMwH zR3qacjUeF*PS)o(W3h#hS_?<*HS3*;zF0@t{dDvzR-|`f1AO6^|^J-N;2}UcBkgkLKp%ku~Nn3Xe!XOY@6v!_C&BFXe6e!AyZikJ1%0r7Qf;yjkw* z+fyJpZi~ukW|?O+YWytC`9sSRvbk7ux_rXV8$^zvUQZ`zGpS3nOjA-!T%YdZcu=O) zF)=B>>M=h*eA6wZ){liVZ*?NMb=pKq^vAg0Cgv`FG26_@Ekl+9@zUnF!^pVj(szsZ zrE{59cX-#ezkE87%bV^?6S)5Rp@w6)%1WFcpPH_&*R0q6M(|IcSM|j?IoTGaUTp7U zLYcrsnqiX3xg|iCZ`*Gp~)_ftr&_yL4k}`yIF$IF>)o7ZsT)n`;eZQu*vMBO))u@Mn}C9d?@M5@Kwf# zJoRljS->REW^CQhNY5QI0XKt_;_pU3ogz7_w<7OACC(R8;NLr-)DFvl$vXcHo`gx8 zm@<}hSX>9@U@&y(Z_P#{WP{FcqXlg8Hxyb9Ad-(%WWgK|@F)UX zZ!n`zi8)cFVAmG)bme~W-P+CyBp*}m#7r~N~Um)ZHx#C4V9bXHVCwT8mI zd**$=$Zts?(7Gzp;6q)rY0h2c%(t!cHJOY}Tcg1D?{|)0Ui3Ptqe1~R4(jZtsCIc+ z?ENphxbZ*L+EHR(KUUm`1^p->y%=~))+2#)^hIZk^6UiRkbW~3)l4YrM}MGmXr$t8 zoYKmA9X(`ha)3DvuGDzlBm*lA{CSANN#1ngXuCRddZQb^*hIwT2Z zLy{v<8Ky}(wv6oLxVC=cvAO~!?+7N*6qF>97SkCq%t$st91<-l>u=P!T;x#9Gv0EQ zr+3tsx{emf`V_@>I`vMKWwp%$zpXy{N^Ar^KaZRcYW%q^)ONmuW@h~wgPnc;eHj;p z(dYFnmoA-jnUWNv$_4@-D65?X9%10Tsu2h?kr_7m8v8PWeeG3OH_B=Z_u75;+BwP1Z*ic880 z?lCSeY12n+BW;2*lh@Mc&bHZrEASTdm+??&Dc0~V6GgL`V^OeU zYT5$?0GgPbEQ%nyYmm2kDa@ir$r^o4v1#}!LG z>w+EMrC%te1K7*)9Kb9fH}BY`y}*80Sbu=sBmA|llE~O{!htjhXh%`54mVq`?I|S-%S-eW>VRKk$Z=WsGckZMY$+tax zFc}pB21G5Tc+v#TmTCWV$xXwH#1c6p1&?N4*4I9@{Eo4gUgG*K)oWlbfU=gijGP>E z{(VlVc)NL6TjU9oBex;<%ZsBZBU7KAW)U+Q^eOiT4Kti;_pGk<2>6Rr30kMG-^%wr zA+h1Qqh*48`0L@{fo^4dRfA8DcC1DV1;b3WkyM;@bcVNYGucnWZbh{=J|a_FhfekfluZfg$~=S#U{1MoiNC*v%(>zbQq@u?UPR##}H2 zJ`XJ44IH(lJeF z(4iRK%1L!e9}quofTj=j*?B{+4H6VjT%K$}_8A*q@DNc99YW`$FJG63eov~l7Gc!O zDHmRqzgW1!iv1i3h(snC&u8q{74fRKgafh7?l?>pZj+oc=#r)1@&vp*`@r1OP8gntx6XUp9i_l>x6-J#Pp5XV#`>jABnI_B(8&GqO$p zpt;8jnQNN?D?nkqW3EP<)4pikjN@x58?-Dqud3c_0r2r$ zKd6`w#+AALz?=EC+SkCh?KD#`2vFPzP=@@tLv;%uZT^5|;Qke6kga}+{Y5kwA+A9x zYcDQgO-1PYXK)Wf^^?MgACA8ERcK=>=e4qNvUPP~hE^&bcuL5sRe}4$ay2mjp{k|V zyIa^r`Kdy44HUv&-Nv)KD@pOP%AWN|jZAvg(Vx%By+B~o*Za8AfdqP-IOH@-n(Zq0 zT3N;pL2k)~`SjNa!yDO#V{d3flz%)vv!02-N)~LC=KO&@k>W@dI6*mKbQR;m82eq| z7NupWq^Wn#(OH(#ZV^u9{884yTspP^i4d5S3R!CG3=BUnv(ZG_{YzQLVLf08&>J`w zomr=Dpz$a3NR|UHFcpEOYbRoDb?>D7Sz5{3ob<4seU*s48=oVKL%O@B%X4SG?ALcI zmAT1ZG>wbb4}+tKcK%?dI7+#qx$Yek<&&NiF-;emsXF3ztXy@g?NVnej^>Y2)sB$s z?-HLDO4p40TS(10fiKl7>`(#l1@sJYUO5h8&(R*2OP~Xw$A0!x3VAbJBPN z`u_`NjwS^P@uTzz;A$&8P(NkHVw;+8hc~Dh-164AjKcomJH@S+TxI zQ>>0t_`LlG`el|GQR{sp9Is(2zqD)rNAAvkniFk!98vdB_#J$Ev$ABu;VS_Z4(pv@ z;UZX3qD<>~O^@qc{-Q6~^sW<{-VD#*{PNniBR%Z=L_2w0pqchgTZL$N9Y^Yr)TN2H zRzjk+pm1YkbnNI;$*^1Iqz6NS^jFWsq*2j-b+l-^r#;6;Y6-WxJREaV<4T-%3^UVq zF1|FJtOR%$JYjs@qF$nv;w9ZQdfMzNKz6}UfZwjr5O*@rJvnl#?oPG%!L`)pY0oL9 zb>B?A#m&XuzX#_VaeYm1Uze{G=krW$9|oGToQynBYKrD95nE06dlb~(Z1CFVq;k@z znK{lQzh|$^BJI|bgA<3k8Rq1%zn@!`K6mdKFt1-bE3NbTQ0C(uB-MQ0?yxJC=ys2u zsCn3EZ=+{UrN zWjFlq*BCX!X}o$VOrw+OV{fUcfL1KUNiq7`WVXDb(;_;LfJ$7j(6w;0*!pQk-)#n? zCvRpy{i|4BJ8n@3Hqt+l->(=6>i>RJF?`549Q?1nna9fUi!zm7trO#$ZIL8~^i<&! ztVH@>yubS1TLz`2c<8)iJ6(2nMD9UTX~Z9X!V- zrjnQZqocVUZQg8iO%v4zDGbanixozdxfY;}#s&kDG6`tkkB9{-F-;%*5Q%+cUf$_l zz`F4IMy?0d-4UlOG0)SgubGx%M|tG@*X~TFp3BHmHI=e|xEA>9J8qk@J{zA}w90$+ zc9uAS?&Kk6^RxZ!fy4R9@KZNfA4l-l4|ctS$y=xWEc0h{3A*+^iz_O_hK1={W&BGK z?TE@w!4^rX`C2@#=)`=VmKP6nS#l?g{bX+ZqNNGc@4ApbmP#36R9D=PD9FuhoxY$+ z%hJzq=KkSd|Bg)a7mMKBh40pkIUG`TJZY141N0y;p5ltCcmzq zIUVVv4Zg2udJ5*2nh?@R{%N!SF|ohsY5Y~6Wvo_*BDQ~2V=AV?bWipzz2i*&TG+Kh z14S{hI#&t9_hUj&ogyY(c4+@@-S+tL@7dz|MHzeA(LULdwZCa#*}Q?z{gK17ZRLgc zMoX?O$J9x;o%hE(5*3*aJG|fKg^%5@#S&Z^jsE9k%Y zsP@$GgT8-~Q~G&GnIz|5vD2|QfxNAWLnIH|3u_mCAlBQXnK?Y1g0J@!yccL)-Lf0D zJd;h}c4A;m;e49s#8qn?AT!^PFPQS9KBB#Qh*LM5^LqYrXqcgB6fJhJC&B}2j< z{t+#N87Ydm)DI~l#|kHtxYS_@Z;1Z5I=m#$yx>a7XZSxdVf~At`prY<@wc#A159vk zDSPyJeWZO?FJPjMTK3w9m2VXrMtT(i>v88hI_t1fW1f9q)DPuY{Q4aUNGl5qN`25QecIoQteU@Cbah@rw82Lb&~ugsJ}mP!D|^L z_s*3VJt&z6bDgUO0B+v5it?xzY7~!wNN^M0A6r}tW{3dtlz2lK|7-}7+?d4r^l7qW z6^V)bcngH#Z5vY;!T>SAa0UogzBlG6mV-Ic*14K|V5%n?ESf%%WWBOL%!!arxbj1& zwe2A-)`2ef_tjbF`?XOOURN0$s@P7lUbd>`eoW(i1T~-7o=o6T-u%>jv04JG#~e`d z7vF~VS?y@v^i?_hIwPK#~s08^r?Wu!hugvW_9Y&qV{IN{qUZnf&_*=_C7A~6qNd|Zq6$CqL|@#H^ZS%FPL)YeE7MG>1$j8hgV0ArGBb*Qj!nKx2 zKlEV^GN^0i<<)(zGg2C9LgpsYTi$=8Q9g%u?WagU&MJpLX1I+J{|n7sGirzPBbE`N z{Dc<^?fp<%10AJLZJqI{v(i=}TCn}E!&+4@`p$}61&+A9pBCJ)* z)<~QCoWJswZujvkwu*>gW1%|QV_d6f=vSMLA z^&TEg%Cywgt)td;#|XV$o0K}Yqb8-C=_*&rvV;%cOxHQ44%-6^8JQ2> z(MkUO9Qbm5wma*5w{9lyV1y~|S^x6xPH&o>4`cPn-*hIHZOM`4~&F_*$^@l@e z!p&QOLW`UJ>0<44FP0O}8QQ1bci5-Q=%2I=u-Ct|IzAm}d_23m#y)@Ms#MzF;iGysmNFzMOy8-tNP}>4^#R=KWt%{j0JxWj*l*49mAa6c_t?tt;yIxbu5p zq42Sw+KC%AaV%a$WaR4KWSGm33djRmmU!R`a~tipPNUj2#JKCPZ$c?|5zHwqpDYL# zZ>?JmkNMsUMvW_`z1kjp_6;7=QMiKvFVj;TFyYx4IAbD(A$J)E%ClPqImy(( z9VS(x@jw^?1({06rIa{8^xMsklvlC9o#OrbkX$PaSZ^+6-~ra(T7$}hury$$pf0fm z0-X*ufqxD_1X?Q>2{mER+Bly(BJ2`yS!*v24W)nvKZ6EDFh9++pqVt#5O%G5!0pe-@Qjjpn9=r9EG!%uMJarNvX0UjV*CAg!G4t)!kQ$BBxph(ExtG~|zTbtz;jW+F z)=f9-sp9SzySX52dEd~~(?zMulIfe7Q=P467x%*TFo z*xXnmszg{gevbXXi8K>*C2lyb!dBJ(X#3s)?lBMBix0J*k;1cpKj%(g_kEAgyqLodU=V%N9Mp_zgaoKU3Hi)&Iy$B;lh=9Ez{(C0u5& zMI~VPxPOE{54rF!Bh;cToFHH8ZKldyd~A$WmM9UD9iUlHXcMzgizlHJ5ist{mebd6 zjcOU*;0q!FJOi2kp4g6X_~%Y!g_*l!E7PCl=9>+jPE=qOyiec#cNC1ftsC2HK|)iH~<;3`tPJo>-uXAq7gw6{6|rI3~`7ihC>LBAb4wT+H>6x%%?KDgLMCpeE-Kpet|jS8aTzTQ;Ou{R!q zS8W$ByDj>LHqve1ebN}(cXXP``-^wDop(rT&wkC``=|irVhi85FHS!dbbkmyFpR`c z2=|BbC%=?N@(?crytj`5Pq~=(Sb~Ia5jF_+T0w$V$2Ux7Qh=2VQuhvT!K7y#bkqeY z2@q(9bQ@A2zCwUTyUFuIiABhmO~wY5&xkoEz0S=}vd zzLV`Z+)J2<8A>mBm$d@hS3fC><)h=~i{V@taJd9p8reZO|qY*as&P(#O@AzYs3MN#}Om z=3NA0qe0|&2eK~m5*z7~1qVNt=>x((20uj%t-b$XKmYN=m4NYDo1^h~Fz#cBb;A@FX!P=}G z1P~~(?I-1^L|d(w3NE`Mu*m7cRz43=bpFLjhuJ)7q-{Ofe zKX}N^Bi-8uLW$HtHfHuZgjQ)Cpq)eqn=(X9g%6dWloz? zW!*i`_z1`BO@WPaZv+}i@ky?T9c78YPazGCLzH4skboK?#aJxt!aw;}@X?5fVCPFd zM!zA>Wo$<&{1WgzkSPx0Q6t~Wo;w_ln*i!}CP`D7%A*4vjl|HQZ7Z7$h~AZg<3)$8 z82mq`C#A;%j-28lUG@zb3)Z+ThyD1^;RrLd5Ce2)fdz~NKoWR|CuWcw!a&y~k3V1` z2a_5};jH8cX)(Y;3YVMCi}h3v`AFp`V>*TUTYQS{)~}B^CIoqz zaDNQ2iPe9-qiC{Tx$_|WyHNtw%){N@K;q=`^@D#6rL31;(JK)zPH}4W54I5m=Tj=}x5fMcfhXoElDK?8Co9KKNF&vzS3}IX*s#7bl;Ce&SCNOsnSfRiHy~-6v?Bv>8P+59Fdn{)2=Kk+ z0vlutkqE$n_`Zn^FuVX2Rnvlm(Ln~RRDP(da^X`5(3IWpk#;zH&~f$^6)@WF??;>S=W~~ zCwSrLo`LZw|Em1VGxCj$^7RwN`uQh~OPfLJ%?u;s0Y#)Z?+ENQ>|Qp_hv*Y0ZSUTf z^NaK1Stm8$(*s=&`SY536w6jVDLHiY9&-61*Jo=HL)V z;H4D$Si7w1%8Rqx!N+Zv4p~$7cbDq9M{oFt%FAl9=BBn^xjr~PI@H{b{HkrsV z^_L*z&>0XzIU|PAfU7m1H5q3)g&&k-X=4{By=E_)y}PcUCpsv@V{svd=)2=3(iNJ1 ze~d8TW8ZJ2cVNhG-VSp5^^jLghHmZ)(umAR8ZoRt_s``jNeRenlHQyGa**VsF9{;B zP&-*Exut<|dMXzV!YZ_{lsquyekHE?Qci52^Ko*`A9hGmhHChR4o z#xy+0KJ^+R%bZ49Hp4&qKN052XF8|z7t>522ZrG>EX<8K4X%sh#YMZ)7fog<@)8Un z+vLIp4{e}y{0g{!m9;=527IP8vM-mRLqwDafQ9PoVD6bd7W%Q~6HbgXK-<7<-_I;= zkYs}Z4cGv6z5{7CAY1D`Amo10bA^bN68ubu6wGHz;0qLn>GQw^C@KSvA+XZ2%Y{J8 zCIb{-OAsrFDW8xA&{D1cz(Ol#j1v624(MO1bVpO?A;bJ)D^2NxZzUk3a@I$*97I+f zGD|W#>8E0<+xInui-OjlG1<$#U|wqRj27aZI>l%k)rUz1ezOK8=vT zBm3T1B8sGaSc!Cv1ogu;MCaP94!tPP&y{;`v$*Y^DXXekl4w;PCmSvCM`HR_rktV$ zkRY2WJ*lh*F0-DuFDDQ^!Ukp2?tc{K3@KM*lQ{CENRnE_iOQYH6as|uD(TuUOY21 zYS!Yc`H?@R+1Sw9tQDxj4HwFyQR}l+tEzo21jU~{Pn`7cUkhGqK0j!lb`H3|&i8sc z$o(YPBfzwkT0@M+kD+;gQ1~cNGOLxyF86nfO>(*l-}Za)YZCUY`~43msKS@$8Q*(-&iNM z-jiUi&j!dFF+LMKz_HIu?3?{-QE=Y#?1H;)9B%!MI zDb@Q@&g2%$!>6xI2zd5lmTkc6-%g3>r&1B5bl#(*y2+?9W{KEOq@s5SZ;tKtNUSpq z0%QXSR-dA%`u8VJRbnV1;uMoFlgzTHB6yQ6MGlT!ex4xuto=*cMOXKvGY4>=AOLan zehlam{q*ktw&do^Zj;*DycNeTwX@M^9Y1zZajv59E80H+TK8SA8#up5|3SjDP>K=_ zMz+%Lf!0Mof(*lcu8Yo%wW$NF|CIEB*`eP=8v@;d1J0KqHy{_P`RgLV%B&C!tH4Dr z3`=yjzzjNd=z2-Rq9ufw&H8#IIFW-+wl+{;g!}C&pYBc6{-670K>gK`Ho!^zP)>R$ zNf~6{Hz7ozs_IKnq9nFYKfSz7LMn@Z>YYSu6L=!@#R_k5zpR%t_?hndjvfcn_Lz3F zPsiUPxLNiPJz*2ufS+BNjZ}Z}F7W}tbT2P(X@_;Dy}M)m7qOh-_>;^?g(iD7^ty25 zKixUqpNqO|_6BcKZyt}^?uFR4JWxz3n4y9RgfT2p-0@p@elfypiO2?~hkqZ%{Ot9yLg{KbyJcV4YT zx_vH|PsDq#d;6{zk1)`;3$*vhhWNcZVlEz;k{sP@IP|6qmMP>Dti4F*RaEbSbM&klvSFA!Y@(IcgIs7_N7$Np8`l zxM0hA&qxQ6-N2dpl2W%|5M; zj*db1Ba;K;AAD=vI%DH5IT=Oe81C-bN}G=R9q--|5{kie8V^Phcy-bZxTI+ zRi$Vv=$9!d!OyD1&NyAUAAS$fFZR?n1qtXqI;7*UZfH|YE&t|lz{WC1sVsE?RAQ}; zq0~)veXGQk_JFF%8Or%uW`QK>=x=}bKVN59R9Gyccv>~%#kG*=lf3j<;yLZSiesQp zRL8~ET3p|eG)aFh*UudOjCNfg8_M8k##cACR^gn8Pzrlc*PPFI(O2IKR%C z^Vcf*deVs8DIK$wgr8k~SA!e3*m;N)%2YLhl(Ck~aI z1286e?qGFo-BbpvoJxTk;c$uz-onx?wO7$9BtRqtuF|?QPaPZpooxtNfs4*%xb~r6 zPzUL4Qlys_B0CeRW-f-}#uEW)S~#F^3xzix!I<_zH^iWF0L69 zVL0mGh)?#iDvQ&)pFP4%+Q=RdBIZJwY!Fir5v%3(EhOokeI4J-nOE>qmvr1%%WgZn zG2SOfNJ6$cPLU#&C|BO@!S&l3V2N2*m+GsCYWi!aBzWM_iOzHjcJu2T(T-~)dp+gI zDSW}vF(E$ujrRVPbb{Qn>3cWlk6ErNR?qxDqTT{5sxMj}-ZO-BBc0NMbk`suf=HKi zDBU4Q4T93Gw6rt=0)n(kNh94Q-QDm%{_efs$Mbm5Aw9A8TJL%Tg=#x|Fax%KXy*qY zmDV{Hp5@Ow^1GbqTwFJ1J5yy9OaiUot*O}q0wrH$=LIv>u5ctR8g zXm^RYd^m&7CEpDqQ|b)8r(@n?ud)-_n=aT`yKVRPY1!KS>N@3<^1CbQHJNHg5tI-v zLa)X^(6e&Z6~&7*_ZdI?Le=9({2M5m%VuXjc!d*6l!ZD+>-!Y78iU%)lLkS=#Kc~! z2$0Nzd*#r^AuwxPt_P_Ol=Jo3xnUqD*t^6F7Ye-x2mvBRMht4BzI3z^vEWB+R=YM^ z#%AOch*d_Zb!Ss9evtJr3ev>2=AuGZ%hVR4ZDzgDavU!}Vl0R~;}8)f1oSfItl#rt zgwlxa~)IWBITFQ@0vXAcL9K^HmNTf*e@Rw&q9uj5!xr^~feN5T=0{x*tf`BHzM_Pte=CRJ4C)~CI&;i%HpYo_9wsYyCI$j~-wdel_M zMl$Z#JfkviKt^g_ilr@JRGdSXG_W`K@jYb%bzxB63tTi(<-1xvvm3|6-)2%PqeVuO+IuzvYICvFgVpS>2vcb)-9 zsm-3YAR;`q(7#OT3(*plcwsieqIKUxZAqH{q_2V4Uz$CTQndQ|~8Bk=g>9`aM;?42SueNhj5 zUmuNw2JK-Hkt4@(%Yj0Kgk>6LIP(SBOP9V_CRRU1=bl|OmS;v!z3 zE(=PekmnQdF`w^K&USx3;0`AdMN_FttKwBPm(v+e6I-DO3FURer)t%7PGf_;tiGwPvCQso&);I!6{@RwC%24~C)AGM2xn z<)_Rn5KA8VO4ZKw8<8)_1W?kaHc(u2((lEyu_HL(J(S1=0+4*u`0X!S=iuJs`^*TK z{)NYi@r6m_*@U+OpwE&r^mB~dXQA%Nn3IaN7FlY0OCWuf6NlmSicaM5YE|-D$%h-f zTX7|vWADG53N57#mS4Us_`}mUo>avsqSWcnv|QjPb@Xk~{X!2WK{Igz?QMD2`;^Kv zf-GAK67WOHT_ZY;9&1wC$YgW6T%GK2SX5K*OtG6ZfLK)`h2<=^iuR8Y`F?e`P zO+p`f2Dyj_IBle;yH0FI+jNFU;*iK@^V_@pE#^a4eR8pS@16a%|3EIl(?EMZbPkVp z%u-8M_3+Dnpg**?HMwK+!KC@8l+lfkJv7Xp7JovSipR-D;{3l+^oajlcK-)6gUVcB zQv);n&kY<80?O`Cp+DFE{z7g{-iQ>N6R1}kW{}LOIB)xsv9o52|0$?f5|WQ~W0c~f zbDK=jf>=))NT55_A}s)O#IIfcZ%>y5t?d@{efDXy_o};u*x?e-(p&&F$ih zeqpM?EV!S*z_tO9psc8d=1K1`P8RA^M9(OJ|N;bi|~yS z`Z#nAK|_x;eLW(1xuXSnUM1*^_8)b|Bj8An9tsd!j(&3Wl>-jKOr4-M2O8N;s9&?d z5l`KF_d-bnAr;a_Ak>$ywLl>0U}70 z5LE`%1&TeyrA&_@OJM3!PS<|uas+`>GyFe6M<)JYJlF;mLs0{E*iZ z@g2#Z4Si<(3rwxX=L-$*6IUA7K6NqDHr3Oz2I?}sJ8@d`18RGjWDUkU?>9&c;!25J z)MtX%>u#wpcL{FEoN&je9&}6vk=*Q<+rNwy#41)%cRK2{d;Mo+W{T~#Leznca7X*x zRt0e+OdUh4sfp`7OWwzFlYuAF^IsWvB3~Q~HP()@#xa|qs>d-^w|h0TI3^9SD{4?a zWH}tsK?7gcrZnL{^SYZX}VSoFUB*=8P93R$NJeGM)JLePpU%~B$$#m1s&j2hpkp0Xt|fp|0& zdiK5kAB8$0G{4>VX-nN<0%!sc;o74=o6i(Aa9t6+;Yvd#3k_JLAI#UbHaE=_$W zv%MO~FJ@JtZL-o&#C11 z(~p|T8q#lQ4Ea2TmWE3W#E<$kmQH@Qc(w?3rg_pKJ5-HKHuiWCq4yHR0ERYc`%}M` z%;$I3cP;synh-ik`M}oxMeFTZR7+fwQR26gIkXavm+8ef-?c;e_DTyWON>ZE4o4(~ z`l@&Ei{*)wi6U@=@@$oQ0|vv(envK)ip^V*VjJG$&7%)M9z=vzZ%Hr;p@y8>|^H)sP)Amw({jjdFTn%_cu3ko91s*qP{;R% z8}9pczL#l3afZv5Q|SvoQC-`82cRNjF7Ew(1(bW95RAWnk)kzPyD$s}X zl-ldgYc^piz%d9(W3+3ku?{UOm^OWCxv79i-l`0i@z?cjzSfQy_F7cfP-Q_U3knqY zlqIxr3sv;3IXo~S*A3Ma;ap_U83tu$4b4%|%j=f>)1>mlP^ozn z5e``lNPW02g4Wwa3d5ht>S3@fThp4TV{Qa0_ziltWl%uK4D?07m{%P}v=9`OE6A2> zF?E~~#17=Z16oYwKw2HbS-$V@e-13@)yHUkp^VLCq^c`Oe|}$sEui>xK|0~x7YTVG zEQ(*Xr3e@%8(%R&eu8|%om$eYdHN@QaW+s65FvIqYfP%Hq#ABg1 zz8sOw-|zcXcHe6*PDRWA`Iu{$nR7+`Uag+CU$0bV#oNnpM*|PBXa0B0x*yBxjVeZ$ zR2OFggeGPUTN4>|$LnyK32) z-|o0k4=u-C<8rl4)$bIigg*x^Fet;jdh?wE^yEG(;PJ7ip)-KOR~`zMoi~d{bTw(l z)AN^~M3>*z-jD2ycPf~4)TGWd2vYq~qR27m!4RG6@gdAVItJl^bLBZFgm{RTR3tOAI%-+9GaYqw6tI^o^Tf5ZT>nMuVa)ejihqc zIAcs1XY-3t#1%5GoBrw2n9rqn@ol}suZ3#y(rrh7y5Lb`(e=nM)CR1Eyb6=*^4$9g zp>8z4@EH)bw;c_rGtmvpw4l`*HgWr@CG3AtKHLP8TgkF=+?#hF zf0FKdP+nC-3n?)DOGeTvfDi#qkkyaX$-kK{D0D<4f0y0W9H@S{|4Zipv6j{ns5KD` zq5J#lcni#60lD`SBtAGzKr4jpyO^w?*-o90J2_7~H0}O4GaNmeEJ~Ef-P`po?2^sw z8X~J%`cR`|>wl{H&aGif+l?$_@XM9=JEElB&R;)|lu*E6&8fEo6Ici(?-!MYBepWB zTjf7xkZMV=FnTLr^zFmW#0*b}fPgT1y?hhlh=jZEBZ1WcL1uJ$pK+0@rv6HVRAb6K zyjS}0j!A~J^yg7&VFIn^Yy-|dA;J&L%%OGM<_o?ts=tcb=;nFm+?Hf=Sd(S{V3+@# zRw%#;`)uSXj&`O^BF$5hK=PCop)5y*Wnk#_TLL?Rkx9YT>3Z_CaSW^CAglaCLHm?; z_i}W z;spQ3+zcdv(hvjUj@wi|0Hj`TDHgT>L^2FT%q@1^m9d49aMe`L*`=VXVE|`~G<8hG zX^sDfI}STR#f}#rjOg-Bj!&_X4892~ExJTc!-=6}5s+nhtBBIJBqq`9%!V0ysKAx~ z%9>5&WhTvN@H2e0dCD?NL?FuMn>_Zvxi<&~=3fEzyruI^Mwh~Mx12&3T?uD4#f_@v z-I|;ASN&IZ9;?yeHUTS!{DxmR8D=*B{LOT{-<)zWlbkyA3=3D;Y(ceROESM^w>c zIr!}~uQqbKkx`WthQAs;tB-P;uG@W}y#S4ySBB0TFNA*Ob3x^$ZhtfmZd!%t#!*0x z^xNAReBI#}l)pJwUNC(N;Fjv`!8I;yFF2dV@DT-#crUqlez6*cxy}P$?ha-v}8scDA}c>^1p6 ztMA+YO7Q=PH~&gEU1Njuf5e+R)_(_%e+TJ*2dj))gWo!@H6P_&EA$bbZ0vR&-%M41 znAcJb;}DM7gFro6&bOZqiRGuU0AGG)E;1jb1#MwalOL)qysLrz-Cg;MzCP4FDQXmS zJB-qEVf?3#g*Qo=5>`KYRGUVAOx+zMV$v2v#v1w$!T$ao8!+@fCP2)fV6;^}1#D6o z(-9zR5n}cyk$~2Nd0H4K#05C2Fy!AmP3V7s2D}ttplkj=pB54+2-flxM}a~^N7YRc zC1x^2@<)+4|U6ip?KKQ+@g|z3^wI#OX(55VR9Lsoi{7ruyC0UmuVSV5N!k3&j^+8o$H5hjcy*&46#wb0S-oSOzc`iWjU%yJ zE624@37Q;Buk>@K2Mjqj(!Eq73t9VR#BK)P(p_7;rcLoll6!3uT`4#t+ASLtpItfL zJ;tn4;H8nDY&g3g;GOi?yK%GD^CT;p_N~w}KEGA-BpiLzK*McY87P`3iz|5RXO6a) zN<=c+9`8pO5sgFn6;oe`yAZ|%eVl?<`5hh4Vf6iL->T2?xi&+>olbiq<}J_P83f4^ z_P{~lXXQUezY(bPU(MK)pbLVSp#Ok`s=3>V-FqMpi7SnVL`5o+DKP(A;LSITt1zG) zp=7x+MFxfoz+x>Xve4djal^A5o#@l=Fk^3;dkh3YvCpXP-F-tvO}1x?P>O`Yl)V03 z%+^yp2{brH#E={$6vUWJ7cvTF!bCS8^VM{(@m1;Bj#VqcziDZ`O^J5O?OZlDsU z+3w!$tFcb1zOSwgxoa4zo~gOlF8gVs5kKB8t?^S?g3i%+wNf1)(gpQ;6!+SA(yaE3 zrQ6aO?0Y6ox~QHp?dE?l_lLYKc=v~4t#3TOTYOEZS(Atwp?k&1s)%e}!~4@6qYZfK`bg{#JvmYCfr9551qQ#3x4)LMokWb_Wwp!@ zCm$Hv*5Qq*3sH9C*;Au03&*Ay@FO z^YW|SsfnGtJ*vO6FEfLw@NUWt5^X??ABb5yZ>0*|BlL?w=wNU;5%Lab(FPy_4wm`#PH}~y4KlPzKu}US6hm_aJtCSey<_kG`E^NHM3|+aFTYI5)u1=@UeD8Davk4a%Ad{~C|V z^^fSGlKG2etGM$d%=|Mv&`ulH7OJ${o~rnr;}xa;!B6AJB`-8jJng#+BY^;W=834n$4m!dBfL5!VHMQB7u&~4ZKoO@+{yX+G6-cB@t zl27#K4Mzst&f_z#eBV7ibaI`dw!=92%rID^SDPwe1;#}Up(aX7GfIQ>KMl;$5e-}K zQ1_K!ZSp4I2$^`d=U zxC%rtrZ@H```FgdC$<&BQIexsE=N1RQfI@1SIIwyXVWAgQ3=q!_wP{1!Jx6X1b{D0 znj%n;k2Z?Uv%i~dO}=L$RJ)(Ns)rd_C1jf-U}=f7;NSkcIQ_1`$5QMnhzhGZWmbIc zC2Fg_rDWipvGd*8nBP%EDOoE(c-2&P|1xJkrILf_4LJBvf47E??uFw|Lgw z(-Z%;B&$o+?Mm%!O%Mu&**{j(#*@|UW+N7yG%#*(O7^(8lrM!g42JxHSMw?)?=R-Y z95;lUOopQi;^(+O_qjyjT&5cvt!SJ-c1;^&f;t_(B1tkmnCqZvCaIEf7%Z`p5tuqi za%;cZ@-CYHMB8#5v9VYh9x)R7Li@LiFsq$8p@lrj*N*O& z7yh&@&D^Fz0)7q%i}*N=$Exf{Mm?JXxTBUzcg4=QN#fdWku6KmZ zT`+I_*FnwFx;83wm)H5ORsR+VlD-HArfaVRmiEyw3N$Bk$(cG_9 zB`BsIq6sqrrn}Aqs1$%^4v?DeuM<>&L5l_*bnE(Tz<_VX5Z1HDS2EbGC5dkV!H!k) zYd*@>DrPS+u5AnvfRrYsj%KBK42DJqxzP~hAG==^pTaq=Tx})Slf#|Z*+*9%T5smA z3O;LS$?fbe*z~|$pL-&2QpnG`(P_o`TwPR!=;;$yCM!LO z65=D$XmtrcvABI0){!)a;tQR#PrZSz64&?W&gluH29svCN=ay~M9Un1HCy~hLJ_E0ROy$DxIpb-SJPDv75TNSuNqRH zU>w)T!3)u)^{&@UDS@eb7%de%}zzJCbxZClAR6{P=R$dZ3 zGt_=&kX?gr=lNvXY@~0}sEBE$n0PJjYnO3ZS6({I+q>bog-avkONffMr;gd1wKWmT zm_a61o3TKWAddmzyqnh!@>u6h^7a=LR>gg5TnlgRiXM53)wi9jx7UkoFy}kR2?U@SMiP=xF5cDeDm_l$y#~QdPBv~<4Atj zD^z=wIaVDQ+lki31GSVg9TqSbGEL+#E83v;Q~K}QucwQUN5y(1KKkB8h}80<{>??vH-n}jsV(8u>&Z`RY=AUqSzt~0YKwgLe$iN@*1&;Vb| zA`SS`n}OaX3bG<3!TyGw4xs-=3>Mx%bo|v-2)4|D`ImbASj)4gUa4 zanKG z;)0U#=lyIAi$^ZhFQ{2b0TBpWX$YzaK(s$aa{e@1#mrHV>9cSA_>5Tq7Uev?A^&jjp zXVvD&4KnbhSvRe4ygNtr-c$7^H7!Q*<)p79+xpmrWSz#RqDtf?_^yzClr%W)(&{Bu z_FV7c2dyE=BZ*lcLB}t{l0xWY-{Kl|htKj&W>VuZfPvs1dm;7#}0%P%Y5BE&_43!)bn77ae)#$B9bK-I2=$~u;79>_fqE~l0 z%BhbCOc#jm`!)p;fY6_J{tb+{NE=Fn>!70#8s1&sn5c=dp&7KZ1Qr;i%whJd=uyE3 z++7czXSFofru{*GYn_ld3IC3jaxxsS_NuzpoYFz$0(WZu}awl`vXVaWDTq`eKY=gNBpT{!E z+^77B;j{gnimN(LmE@Yxp^9_tBXO=khmwGX-cM7VUw-!~^j$eMZ;I^H?K*hW4VXWf z6XN?g9@?<@C|C1wCEe2pvIerMDwoz85@GW*PE%QG^(h5TMT)wSuZ8N4&)g%1U+E=q zil5!lw@#B^;4Hu(j2QVgZ~{Y$UbW1wyA*#&09Q)DAwp^W3GJ~mN7f+as9@$*NKF)B5|9X6{pCZPNJF+l_LkyW^!+`MC)7i<_mhmoK{avN^wY zz0qclct2|Kj&jdjklyxjP4wYO_ROP(xfi*VAspXa!**8|>!+DKIpmtiE^V>&kG#LL zoy-&YSy6?*;{Mo*p4l>$@v6PSjnKC~dv>e+$UJ}$JcEX$qzjqNj&35~Y?FM0cF?nRqV61B!Tj?!q$8W`wmIZ3LE=g~aox7M$QC3jq(4oULkjvnMc<^Ah?_sw_mKD(#> z?s8YBVW6&tJR{?o$<6Y6wXhH3wT_1Ag_;^(#uqqEyG<{5y$-h>_yia5F#V{XI2-Z5 z;PbC1NDNO9blp{Y6};Q3FN;fSDwL!Lux#VD1y00Zrfw_7MG&><&ypM{zyZ~%bAoME zN7i2kcS@6g<>gMB4?{ zqAys$Cfy@*R&yTb?(QH4x*}z#qQsLiDe>ehqZOxbjIsWLkR9 z4vvMgPS`V#4zuRzC;^yyX6aBnHwZHH{YR4XWTEO+|gmb7h`E$R<<`b z_I4Ph6k1$$`tO~^_-e8b$VP4RF)#Xkx{;ci@6S}-Ccnc-=Ol9QiSs4NzW)PvwL%+Uy@Bi zD5z7dXQ+`eb#}^+FI!$H;shy8#;ebbzcSWjy|COmITWHIdCv=`nqG6uzWi{i#zhaM z-?CI^iQnOTGYiS?Xq>uGf7lI$XQZ^qZQ%h;-GMQo#gU{ zsmd>F=AW)Xo^lDfc=EXba zNd~?0k8Di_T-ISw*!nhVWwb9bC)9zTXG8pj)y^X{fbTh93MBzRuQ|a$#vf03R#p#0 zbh?0sEyCANpiwO5KH4?eJOEh`7fcy|W@x5r4S4`Og8|FeP^EOWj>&@=p@S@LN?%=o zX*i;=k(6pUMKgMl;4zT_PFOHtoyo#hL;K#Hew?~-?edLVTkFZ1xBc0>&N@buqhwnN z*c7RZ_oJw!f=q> z@QgP5$>S8-y#}KAI>!<9G|^;xe1iqQN1N~ev17kI5{34j*muV4wgt#jpW5TntN z6#tES6Y7l-xcVsb+7^X%W(uvpd)!HtW4Z!qpT~g!{v`A0;TU zM)3-(bam71`G{1o_!zqy*IenG@$=*&PgS(t^_@3OE(p>X&UM$eE-#j$e!Bs599pAcE)%iBzaZmYfPW5cL zPY-*tw`ET6THl+^wzufXz@D%j>tBM95lWGiuE>u$%Z@E6@192{Jv#d~mvCBrVe_e) z+K__AaB#@?PpeSvkz^OWn$89#f}vvy6am zhY|sTnm-Um*>ab>$bDjU)Rii8mk0g~;OM zCuJSMU%3pupWk?ROkA)X6st42&w6T-xwE~VSJ(D}iFge(EwsKGF69k+yuRx{mph+D zI{)opyE&oXe>TA5WE-tYSml#c1oNk%?S_-HIqS?5-4p%HG{bCroyR%mn>c@b z(UD3Ejd7e?_CZc!3w6^5G8`?K&UXU2l=*-BFS?_1%B;eB70X-{Gpz-8<6}RL|IqE; z=iG8GH-(lbqKSr-2pWJkwLRs zI1)gY=`X}uL&rm@TP3Lgvh(Ihc zy%8*UsZPT-Q*@p zI(8dF$uD2Mby?nX6l~brZGXsp_f6X^UxDhiN%aB#ED2stO1xu%s=L;ZS~($QXW|Bv z$3#`AGiC?P2FqExD1+f>b4=ar6|Z!yYzMLBc)H7DNEnznxzc?`tyHySd9~bGlD5nc z9oyqP_U4oD7s@swv&H98?_kKVBw~r3MIGhIMw@qn)Xmyc>wg~nV8K;0?R%d-)MoVI z!SCRj`7Kt`?l_A3jj9tNB6F1V##*kGP%tP=| zg#}$YpZlyUS7>kOIGW_qB69YeZ@LTf(d2pEZ!IItc6V1Z=8{|%iYoM%fvEhD#0@-E zI-Pb9e@Cm={!JG@{{x0BQ)~oGwA^I`AYVG`Maz&t9DpwG@j_G>h-sl=VN9eH&?D4M zebQ3t<%!=Jnys6FR1q2`p9m;Gwy`>rtnYp4A-{@%S}1J- z$@VmpcI&}Yq|oOt8Y12G)M8)Z&dTWY4H7ovT1j#)AOgiK%>0!^7#vyj0%LA}0^QKL zMdeq(G!h^S&;ifepf&H|RU>MZ8|`M^GmpB~|O>2Z9Y8?sJp3>_o#`PLZB5bTnJjqH|06&Mje1Ev}-x zqG#`?FaH+!Hth90f9VUCLD*7F1q57@9^ZXGQ$Qsko$@r^e0e4Aa28{%?vs1v15 zjHtZkf4En4Guy-D#_)B_pz@7g-rn3Cb6lt{k5FI4>T%KGmfs^o-?~X(JGxoX%h3?Z zVANXH51GhcJwL#fg*SZw%5}x!u$X7u$JA@B+sGs+#q+o8T91~&Qw-&2

|SWAP36 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 AVkuNdLwNhr^2?18vx(JfcrI@S%*xEBVs!#DL* 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 literal 0 HcmV?d00001 From 479f823c594c0da47b4adef9dec4662f8cac0f92 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Mon, 9 Jun 2025 21:47:07 +0200 Subject: [PATCH 07/17] docs: Remove pre-release markers --- docs/alphatex/percussion.mdx | 4 ++-- docs/guides/exporter.mdx | 6 +----- docs/showcase/special-tracks.mdx | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/docs/alphatex/percussion.mdx b/docs/alphatex/percussion.mdx index 417e313..875c5c2 100644 --- a/docs/alphatex/percussion.mdx +++ b/docs/alphatex/percussion.mdx @@ -1,11 +1,11 @@ --- title: Percussion -since: 1.4.0-alpha.1026 +since: 1.4.0 --- import { SinceBadge } from '@site/src/components/SinceBadge'; - + import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; diff --git a/docs/guides/exporter.mdx b/docs/guides/exporter.mdx index 2a6bb25..d7c2864 100644 --- a/docs/guides/exporter.mdx +++ b/docs/guides/exporter.mdx @@ -12,11 +12,7 @@ import { SinceBadge } from '@site/src/components/SinceBadge'; After alphaTab has loaded a full [`Score`](/docs/reference/score) object from any input source, it can also be exported again to one of the supported export formats. Supported export formats: -- Guitar Pro 7 (alphaTab.exporter.Gp7Exporter) since 1.2.0-alpha.75 - -:::note -More exporters are planned for the 1.5 release unless special feature requests of users are incoming. -::: +- Guitar Pro 7 (alphaTab.exporter.Gp7Exporter) since 1.2.0 To export a `Score` object the corresponding exporter needs to be created and called. Then the resulting binary array can be used further to trigger a download, send it to a server, save it to a file etc. diff --git a/docs/showcase/special-tracks.mdx b/docs/showcase/special-tracks.mdx index d5b77af..d76ef19 100644 --- a/docs/showcase/special-tracks.mdx +++ b/docs/showcase/special-tracks.mdx @@ -13,7 +13,7 @@ percussion track, it's hidden in case a drum tab is displayed. With Guitar Pro 6 files also grand staffs can be rendered. -## Percussion since 1.1.0-alpha.45 +## Percussion since 1.1.0 Percussion tracks are similar to drum tabs but might have less lines than a normal staff. \ No newline at end of file From cda72a96fc2411aebb88fe3a5b60cdc52ce54cae Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Mon, 9 Jun 2025 21:48:15 +0200 Subject: [PATCH 08/17] docs: Cleanup some docs regarding deprecations and new features --- docs/getting-started/configuration-web.mdx | 92 ++-------------------- docs/guides/handling-midi-events.mdx | 30 +++++-- docs/introduction.mdx | 6 -- 3 files changed, 27 insertions(+), 101 deletions(-) diff --git a/docs/getting-started/configuration-web.mdx b/docs/getting-started/configuration-web.mdx index 74ef36d..6717c11 100644 --- a/docs/getting-started/configuration-web.mdx +++ b/docs/getting-started/configuration-web.mdx @@ -13,9 +13,8 @@ Simply create a div container where you want alphaTab to be located on your page to the available width of the div when using the page layout. If you prefer a fixed layout simply set a fixed width on the div via CSS and no resizes to alphaTab will happen either. -If jQuery is detected on the page you can use the jQuery plugin to interact with alphaTab. Otherwise alphaTab is initailized using a special `API` -object. The main namespace `alphaTab` contains every class and enum exposed by the API. The main api is the `alphaTab.AlphaTabApi` -class: +The main namespace `alphaTab` and its sub-namespaces like `model` or `midi` contain all types and functionalities by alphaTab. The main api is the `alphaTab.AlphaTabApi` +class which can be used to initialize and interface with alphaTab: ```html

@@ -27,78 +26,20 @@ const api = new alphaTab.AlphaTabApi(element); ## Settings -There are 2 main ways to initialize alphaTab: either via a settings object or via data attributes. -Depending on the technologies used in your project either the direct code initialization or the data attributes might be easier to use. - -The data attributes might be more suitable for server side rendering technologies where settings are provided from a backend infrastructure -during page rendering. When printing the main alphaTab div element to the DOM you can pass on any settings you might want to have. - -When using client side frontend frameworks like Angular, React or even plain JavaScript it might be more suitable to initialize alphaTab -via a settings object. - -Both systems can be combined while the data attributes will overrule the JSON settings. -The full list of settings can be found in the [API Reference](/docs/reference/settings). - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - - - - The settings object is passed to the constructor of the API object as second parameter: ```js const api = new alphaTab.AlphaTabApi(element, { // any settings go here }); -``` - - - -AlphaTab is initialized via the `$.alphaTab()` plugin. The first parameter is the settings object and the API object will be returned. - -```js -const api = $('#alphaTab').alphaTab(); ``` - - - -Data Attributes will only allow configuration, you still need to manually initailize alphaTab with one of the other variants. -But the settings parameter can be simply left out. - -```html -
-``` -```js -const api = new alphaTab.AlphaTabApi(element); -``` - -
-
- ## Events -Events of alphaTab can be either subscribed on the API object directly, or via the DOM element to which alphaTab is attached. +Events of alphaTab should be either subscribed on the API object. Please refer to the [API Reference](/docs/reference/api) to find a full list of events available. - - - Each event has an `.on(handler)` and `.off(handler)` function to subscribe or unsubscribe. ```js @@ -108,35 +49,12 @@ api.scoreLoaded.on( (score) => { }); ``` - - - ## API -The main interaction with alphaTab happens through the API object or via jQuery plugin. +The main interaction with alphaTab happens through the API object. Simply use any [available API](/docs/reference/api) to get/set details or trigger actions. - - - ```js const api = new alphaTab.AlphaTabApi(element); api.tex('\title "Hello AlphaTab" . 1.1*4') -``` - - - - -```js -$(element).alphaTab('tex', '\title "Hello AlphaTab" . 1.1*4') -``` - - - - \ No newline at end of file +``` \ No newline at end of file diff --git a/docs/guides/handling-midi-events.mdx b/docs/guides/handling-midi-events.mdx index 4a447a1..6273b15 100644 --- a/docs/guides/handling-midi-events.mdx +++ b/docs/guides/handling-midi-events.mdx @@ -124,9 +124,7 @@ From this starting point we will be adding the logic. 1 and

-
+
\ts 3 4 1.4.8 1.4{g}.8 2.4.8 2.4{g}.8 3.4.8 3.4{g}.8 | 1.4.8 1.4{g}.8 2.4.8 2.4{g}.8 3.4.8 3.4{g}.8 | @@ -135,7 +133,16 @@ From this starting point we will be adding the logic.