From d7a6f43af150fb56be3646aa977d59fcccedd103 Mon Sep 17 00:00:00 2001 From: Kevin Date: Mon, 16 Mar 2026 19:20:27 +0200 Subject: [PATCH] Version 3.1 InDev --- CustomButtons/test/menuEntry.json | 5 - .../test/testingSkill/menuEntry.json | 6 - README.md | 8 + V3.1/BuildUpdatePackage | 0 V3.1/build/etc/init.d/S02jibo-skills-logd | 99 ++ V3.1/build/etc/init.d/S03jibo-skills-logpanel | 90 ++ V3.1/build/etc/init.d/S21firewall | 127 ++ .../Jibo/Skills/@be/be/be/robot-logger.js | 60 + .../jibo/Jibo/Skills/@be/be/menu/PROVIDERS.md | 65 ++ .../jibo/Jibo/Skills/@be/be/menu/README.md | 4 +- .../Skills/@be/be/menu/main-menu-patch.js | 159 ++- .../Jibo/Skills/@be/be/menu/menu-entries.js | 72 ++ .../Skills/@be/be/menu/menu-entry-scanner.js | 150 +++ .../Jibo/Skills/@be/be/menu/menu-providers.js | 115 ++ .../Jibo/Skills/@be/be/menu/skills-root.js | 31 + .../jibo-radio/LocalRadioPlayer.js | 78 ++ .../jibo-radio/LocalRadioPlayer.js | 73 ++ .../node_modules/jibo-radio/lib/jibo-radio.js | 1028 +---------------- .../606C56A5-E96E-4D44-9456-A0A238554311.png | Bin 0 -> 80895 bytes .../606C56A5-E96E-4D44-9456-A0A238554311.png~ | Bin 0 -> 176803 bytes .../ABD9DD9A-43C8-49C3-9A50-2B0E4F24B37F.png | Bin 0 -> 63126 bytes .../ABD9DD9A-43C8-49C3-9A50-2B0E4F24B37F.png~ | Bin 0 -> 181254 bytes .../Skills/@be/be/resources/JiboSplash.kra | Bin 0 -> 167036 bytes .../Skills/@be/be/resources/JiboSplash.png | Bin 24547 -> 31468 bytes .../Skills/@be/be/resources/JiboSplash.png~ | Bin 14150 -> 24547 bytes .../Skills/@be/be/resources/jibo_logo.png | Bin 0 -> 114056 bytes .../Skills/@be/be/resources/jibo_logo.png~ | Bin 0 -> 109430 bytes .../Skills/@be/be/resources/jibo_logo1.png | Bin 0 -> 77964 bytes .../@be/menu-entries.d/.10-test.json.kate-swp | Bin 0 -> 77 bytes .../Skills/@be/menu-entries.d/00-example.json | 13 + .../Skills/@be/menu-entries.d/10-test.json | 12 + .../FunStuffTest/ClockOne/menuEntry.json | 8 + .../Skills/FunStuffTest/FunOne/menuEntry.json | 8 + .../Jibo/Skills/FunStuffTest/menuEntry.json | 4 + V3.1/build/opt/jibo/Jibo/Skills/LOGGING.md | 84 ++ .../opt/jibo/Jibo/Skills/MODULARITY_PLAN.md | 80 ++ .../Jibo/Skills/TestSubMenuA/menuEntry.json | 9 - .../TestSubMenuA/testSkillB/menuEntry.json | 9 - .../Jibo/Skills/jibo-tbd/LocalRadioPlayer.js | 61 + .../opt/jibo/Jibo/Skills/jibo-tbd/index.js | 13 +- .../Jibo/Skills/testSkillA/menuEntry.json | 9 - .../Jibo/Skills/testSkillC/menuEntry.json | 10 - V3.1/build/opt/jibo/Jibo/Skills/tomove.md | 5 + .../Jibo/Skills/tools/robot/logd/README.md | 55 + .../Jibo/Skills/tools/robot/logd/jibo_logd.py | 252 ++++ .../__pycache__/jibo_logpanel.cpython-313.pyc | Bin 0 -> 20210 bytes .../tools/robot/logpanel/jibo_logpanel.py | 503 ++++++++ V3.1/filesystem.parts | 0 docs.tar.gz | Bin 91564 -> 0 bytes docs/Runtime.js | 199 ---- docs/bt/BaseElement.js | 135 --- docs/bt/Behavior.js | 91 -- docs/bt/BehaviorEmitter.js | 5 - docs/bt/BehaviorTree.js | 85 -- docs/bt/Blackboard.js | 4 - docs/bt/Decorator.js | 60 - docs/bt/Factory.js | 86 -- docs/bt/ParentBehavior.js | 29 - docs/bt/Status.js | 64 - docs/bt/behaviors/Blink.js | 7 - docs/bt/behaviors/ExecuteScript.js | 9 - docs/bt/behaviors/ExecuteScriptAsync.js | 17 - docs/bt/behaviors/Listen.js | 32 - docs/bt/behaviors/ListenEmbedded.js | 29 - docs/bt/behaviors/ListenJs.js | 33 - docs/bt/behaviors/LookAt.js | 23 - docs/bt/behaviors/Menu.js | 57 - docs/bt/behaviors/Mim.js | 327 ------ docs/bt/behaviors/Null.js | 7 - docs/bt/behaviors/Parallel.js | 10 - docs/bt/behaviors/PlayAnimation.js | 15 - docs/bt/behaviors/PlayAudio.js | 10 - docs/bt/behaviors/Random.js | 8 - docs/bt/behaviors/ReadBarcode.js | 18 - docs/bt/behaviors/Sequence.js | 9 - docs/bt/behaviors/Subtree.js | 14 - docs/bt/behaviors/SubtreeJs.js | 14 - docs/bt/behaviors/Switch.js | 9 - docs/bt/behaviors/TakePhoto.js | 22 - docs/bt/behaviors/TextToSpeech.js | 9 - docs/bt/behaviors/TextToSpeechJs.js | 9 - docs/bt/behaviors/TimeoutJs.js | 14 - docs/bt/behaviors/index.js | 4 - docs/bt/decorators/Case.js | 16 - docs/bt/decorators/FailOnCondition.js | 18 - docs/bt/decorators/StartOnAnimEvent.js | 15 - docs/bt/decorators/StartOnCondition.js | 17 - docs/bt/decorators/StartOnEvent.js | 11 - docs/bt/decorators/SucceedOnCondition.js | 18 - docs/bt/decorators/SucceedOnEmbedded.js | 44 - docs/bt/decorators/SucceedOnEvent.js | 11 - docs/bt/decorators/SucceedOnListen.js | 31 - docs/bt/decorators/SucceedOnListenJs.js | 47 - docs/bt/decorators/TimeoutFail.js | 8 - docs/bt/decorators/TimeoutSucceed.js | 9 - docs/bt/decorators/TimeoutSucceedJs.js | 14 - docs/bt/decorators/WhileCondition.js | 17 - docs/bt/decorators/index.js | 4 - docs/bt/mim/AsrMetadata.js | 16 - docs/bt/mim/MimConfig.js | 70 -- docs/bt/mim/MimManager.js | 149 --- docs/bt/mim/MimPrompt.js | 12 - docs/bt/mim/MimRepeatManager.js | 46 - docs/bt/mim/MimState.js | 104 -- docs/bt/mim/WeightedRotation.js | 29 - docs/bt/mim/analytics/Analytics.js | 13 - docs/bt/mim/analytics/MimAnalytics.js | 54 - docs/bt/mim/delegates/BasicSpeakDelegate.js | 18 - docs/bt/mim/delegates/GlobalListenDelegate.js | 44 - docs/deprecation.js | 573 --------- docs/flow/ActivityImplementation.js | 37 - docs/flow/ActivityImplementationFactory.js | 48 - docs/flow/Context.js | 36 - docs/flow/FlowExecutor.js | 90 -- docs/flow/FlowExecutorFactory.js | 73 -- docs/plugins/ActionPlugin.js | 6 - docs/plugins/AnimDBPlugin.js | 6 - docs/plugins/AutobotPlugin.js | 6 - docs/plugins/DevShellPlugin.js | 13 - docs/plugins/EmbodiedPlugin.js | 6 - docs/plugins/EmotionPlugin.js | 6 - docs/plugins/ExpressionPlugin.js | 6 - docs/plugins/FontsPlugin.js | 3 - docs/plugins/InteractionMemoryPlugin.js | 6 - docs/plugins/Lifecycle.js | 18 - docs/plugins/LocationPlugin.js | 6 - docs/plugins/MediaPlugin.js | 6 - docs/plugins/RegistryPlugin.js | 3 - docs/plugins/RenderingPlugin.js | 3 - docs/plugins/ServiceRecordsPlugin.js | 3 - docs/plugins/ServicesPlugin.js | 11 - docs/plugins/VersionsPlugin.js | 68 -- docs/plugins/VolumePlugin.js | 6 - docs/plugins/context/ContextPlugin.js | 7 - docs/plugins/context/ContextProvider.js | 28 - docs/plugins/context/api.js | 138 --- docs/rendering/FaceRenderer.js | 119 -- docs/rendering/animation/KeysAnimation.js | 232 ---- docs/rendering/animation/KeysData.js | 126 -- docs/rendering/animation/KeysLoader.js | 129 --- docs/rendering/animation/Shapes.js | 12 - docs/rendering/animation/Spritesheet.js | 19 - docs/rendering/animation/Timeline.js | 48 - docs/rendering/eye/AbstractEye.js | 31 - docs/rendering/eye/AbstractLayer.js | 146 --- docs/rendering/eye/Background.js | 39 - docs/rendering/eye/Eye.js | 14 - docs/rendering/eye/EyeContainer.js | 155 --- docs/rendering/eye/EyeMesh.js | 13 - docs/rendering/eye/EyeOverlay.js | 14 - docs/rendering/eye/filters/glow/GlowFilter.js | 93 -- .../eye/filters/light/LightFilter.js | 108 -- docs/rendering/gui/Component.js | 291 ----- docs/rendering/gui/ComponentCreator.js | 94 -- docs/rendering/gui/ComponentGroup.js | 265 ----- docs/rendering/gui/DisplayUtils.js | 24 - docs/rendering/gui/TouchManager.js | 282 ----- docs/rendering/gui/ViewGlobalEvents.js | 104 -- docs/rendering/gui/ViewManager.js | 633 ---------- docs/rendering/gui/ViewProcess.js | 194 ---- docs/rendering/gui/ViewState.js | 60 - docs/rendering/gui/actions/ActionData.js | 414 ------- docs/rendering/gui/components/Button.js | 110 -- docs/rendering/gui/components/Clip.js | 35 - .../rendering/gui/components/ContactButton.js | 91 -- .../rendering/gui/components/ContentButton.js | 78 -- docs/rendering/gui/components/Element.js | 223 ---- docs/rendering/gui/components/ElementGroup.js | 155 --- docs/rendering/gui/components/IElement.js | 9 - docs/rendering/gui/components/Label.js | 181 --- docs/rendering/gui/components/List.js | 661 ----------- docs/rendering/gui/components/ListProgress.js | 112 -- docs/rendering/gui/components/MenuButton.js | 152 --- .../gui/components/StandardButton.js | 246 ---- .../components/subcomponents/ListMember.js | 31 - .../components/subcomponents/Subcomponent.js | 39 - .../subcomponents/TouchInteractive.js | 64 - docs/rendering/gui/views/ContactsView.js | 62 - docs/rendering/gui/views/EyeView.js | 29 - docs/rendering/gui/views/ImageView.js | 70 -- docs/rendering/gui/views/MenuView.js | 208 ---- docs/rendering/gui/views/PauseOverlay.js | 81 -- docs/rendering/gui/views/TextView.js | 99 -- docs/rendering/gui/views/View.js | 428 ------- docs/rendering/input/GestureManager.js | 194 ---- docs/rendering/tasks/ColorAlphaTask.js | 58 - docs/rendering/tasks/CompressedImageTask.js | 32 - docs/rendering/tasks/KeysDataTask.js | 10 - docs/rendering/tasks/KeysTask.js | 51 - docs/rendering/tasks/ShapesTask.js | 32 - docs/rendering/tasks/SpritesheetTask.js | 41 - docs/rendering/tasks/TextureTask.js | 48 - docs/rendering/tasks/TimelineTask.js | 46 - docs/rendering/tween/Tween.js | 212 ---- docs/rendering/tween/TweenManager.js | 94 -- docs/services/SessionManager.js | 5 - docs/services/events/GlobalEvent.js | 101 -- docs/services/events/GlobalEvents.js | 129 --- docs/services/events/SharedGlobalEvents.js | 35 - docs/services/events/index.js | 20 - docs/services/index.js | 5 - docs/services/media/Media.js | 198 ---- docs/services/media/MediaModel.js | 90 -- docs/services/media/MediaModelEvents.js | 6 - docs/services/media/MediaNode.js | 32 - docs/services/remote/RemoteService.js | 42 - docs/sound/ChainBuilder.js | 79 -- docs/sound/Sound.js | 248 ---- docs/sound/SoundContext.js | 52 - docs/sound/SoundInstance.js | 83 -- docs/sound/SoundPlugin.js | 163 --- docs/sound/SoundUtils.js | 34 - docs/sound/index.js | 4 - docs/sound/tasks/SoundTask.js | 68 -- docs/utils/AnimationUtils.js | 45 - docs/utils/DelayedCall.js | 110 -- docs/utils/Timer.js | 105 -- docs/utils/decorators.js | 35 - docs/utils/index.js | 4 - docs/utils/location/HomeLocation.js | 3 - docs/utils/perf/GlobalPerfTimer.js | 6 - docs/utils/perf/ParallelTimer.js | 7 - docs/utils/perf/PerformanceTimer.js | 6 - docs/utils/perf/SerialTimer.js | 7 - 224 files changed, 2168 insertions(+), 14011 deletions(-) delete mode 100644 CustomButtons/test/menuEntry.json delete mode 100644 CustomButtons/test/testingSkill/menuEntry.json delete mode 100755 V3.1/BuildUpdatePackage create mode 100644 V3.1/build/etc/init.d/S02jibo-skills-logd create mode 100644 V3.1/build/etc/init.d/S03jibo-skills-logpanel create mode 100644 V3.1/build/etc/init.d/S21firewall create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/be/robot-logger.js create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/PROVIDERS.md create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-entries.js create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-entry-scanner.js create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-providers.js create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/skills-root.js create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/@be/radio/node_modules/jibo-radio/LocalRadioPlayer.js create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/jibo-radio/LocalRadioPlayer.js create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/606C56A5-E96E-4D44-9456-A0A238554311.png create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/606C56A5-E96E-4D44-9456-A0A238554311.png~ create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/ABD9DD9A-43C8-49C3-9A50-2B0E4F24B37F.png create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/ABD9DD9A-43C8-49C3-9A50-2B0E4F24B37F.png~ create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/JiboSplash.kra create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo.png create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo.png~ create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo1.png create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/.10-test.json.kate-swp create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/00-example.json create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/10-test.json create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/ClockOne/menuEntry.json create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/FunOne/menuEntry.json create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/menuEntry.json create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/LOGGING.md create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/MODULARITY_PLAN.md delete mode 100644 V3.1/build/opt/jibo/Jibo/Skills/TestSubMenuA/menuEntry.json delete mode 100644 V3.1/build/opt/jibo/Jibo/Skills/TestSubMenuA/testSkillB/menuEntry.json create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/jibo-tbd/LocalRadioPlayer.js delete mode 100644 V3.1/build/opt/jibo/Jibo/Skills/testSkillA/menuEntry.json delete mode 100644 V3.1/build/opt/jibo/Jibo/Skills/testSkillC/menuEntry.json create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/tomove.md create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logd/README.md create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logd/jibo_logd.py create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logpanel/__pycache__/jibo_logpanel.cpython-313.pyc create mode 100644 V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logpanel/jibo_logpanel.py delete mode 100644 V3.1/filesystem.parts delete mode 100644 docs.tar.gz delete mode 100644 docs/Runtime.js delete mode 100644 docs/bt/BaseElement.js delete mode 100644 docs/bt/Behavior.js delete mode 100644 docs/bt/BehaviorEmitter.js delete mode 100644 docs/bt/BehaviorTree.js delete mode 100644 docs/bt/Blackboard.js delete mode 100644 docs/bt/Decorator.js delete mode 100644 docs/bt/Factory.js delete mode 100644 docs/bt/ParentBehavior.js delete mode 100644 docs/bt/Status.js delete mode 100644 docs/bt/behaviors/Blink.js delete mode 100644 docs/bt/behaviors/ExecuteScript.js delete mode 100644 docs/bt/behaviors/ExecuteScriptAsync.js delete mode 100644 docs/bt/behaviors/Listen.js delete mode 100644 docs/bt/behaviors/ListenEmbedded.js delete mode 100644 docs/bt/behaviors/ListenJs.js delete mode 100644 docs/bt/behaviors/LookAt.js delete mode 100644 docs/bt/behaviors/Menu.js delete mode 100644 docs/bt/behaviors/Mim.js delete mode 100644 docs/bt/behaviors/Null.js delete mode 100644 docs/bt/behaviors/Parallel.js delete mode 100644 docs/bt/behaviors/PlayAnimation.js delete mode 100644 docs/bt/behaviors/PlayAudio.js delete mode 100644 docs/bt/behaviors/Random.js delete mode 100644 docs/bt/behaviors/ReadBarcode.js delete mode 100644 docs/bt/behaviors/Sequence.js delete mode 100644 docs/bt/behaviors/Subtree.js delete mode 100644 docs/bt/behaviors/SubtreeJs.js delete mode 100644 docs/bt/behaviors/Switch.js delete mode 100644 docs/bt/behaviors/TakePhoto.js delete mode 100644 docs/bt/behaviors/TextToSpeech.js delete mode 100644 docs/bt/behaviors/TextToSpeechJs.js delete mode 100644 docs/bt/behaviors/TimeoutJs.js delete mode 100644 docs/bt/behaviors/index.js delete mode 100644 docs/bt/decorators/Case.js delete mode 100644 docs/bt/decorators/FailOnCondition.js delete mode 100644 docs/bt/decorators/StartOnAnimEvent.js delete mode 100644 docs/bt/decorators/StartOnCondition.js delete mode 100644 docs/bt/decorators/StartOnEvent.js delete mode 100644 docs/bt/decorators/SucceedOnCondition.js delete mode 100644 docs/bt/decorators/SucceedOnEmbedded.js delete mode 100644 docs/bt/decorators/SucceedOnEvent.js delete mode 100644 docs/bt/decorators/SucceedOnListen.js delete mode 100644 docs/bt/decorators/SucceedOnListenJs.js delete mode 100644 docs/bt/decorators/TimeoutFail.js delete mode 100644 docs/bt/decorators/TimeoutSucceed.js delete mode 100644 docs/bt/decorators/TimeoutSucceedJs.js delete mode 100644 docs/bt/decorators/WhileCondition.js delete mode 100644 docs/bt/decorators/index.js delete mode 100644 docs/bt/mim/AsrMetadata.js delete mode 100644 docs/bt/mim/MimConfig.js delete mode 100644 docs/bt/mim/MimManager.js delete mode 100644 docs/bt/mim/MimPrompt.js delete mode 100644 docs/bt/mim/MimRepeatManager.js delete mode 100644 docs/bt/mim/MimState.js delete mode 100644 docs/bt/mim/WeightedRotation.js delete mode 100644 docs/bt/mim/analytics/Analytics.js delete mode 100644 docs/bt/mim/analytics/MimAnalytics.js delete mode 100644 docs/bt/mim/delegates/BasicSpeakDelegate.js delete mode 100644 docs/bt/mim/delegates/GlobalListenDelegate.js delete mode 100644 docs/deprecation.js delete mode 100644 docs/flow/ActivityImplementation.js delete mode 100644 docs/flow/ActivityImplementationFactory.js delete mode 100644 docs/flow/Context.js delete mode 100644 docs/flow/FlowExecutor.js delete mode 100644 docs/flow/FlowExecutorFactory.js delete mode 100644 docs/plugins/ActionPlugin.js delete mode 100644 docs/plugins/AnimDBPlugin.js delete mode 100644 docs/plugins/AutobotPlugin.js delete mode 100644 docs/plugins/DevShellPlugin.js delete mode 100644 docs/plugins/EmbodiedPlugin.js delete mode 100644 docs/plugins/EmotionPlugin.js delete mode 100644 docs/plugins/ExpressionPlugin.js delete mode 100644 docs/plugins/FontsPlugin.js delete mode 100644 docs/plugins/InteractionMemoryPlugin.js delete mode 100644 docs/plugins/Lifecycle.js delete mode 100644 docs/plugins/LocationPlugin.js delete mode 100644 docs/plugins/MediaPlugin.js delete mode 100644 docs/plugins/RegistryPlugin.js delete mode 100644 docs/plugins/RenderingPlugin.js delete mode 100644 docs/plugins/ServiceRecordsPlugin.js delete mode 100644 docs/plugins/ServicesPlugin.js delete mode 100644 docs/plugins/VersionsPlugin.js delete mode 100644 docs/plugins/VolumePlugin.js delete mode 100644 docs/plugins/context/ContextPlugin.js delete mode 100644 docs/plugins/context/ContextProvider.js delete mode 100644 docs/plugins/context/api.js delete mode 100644 docs/rendering/FaceRenderer.js delete mode 100644 docs/rendering/animation/KeysAnimation.js delete mode 100644 docs/rendering/animation/KeysData.js delete mode 100644 docs/rendering/animation/KeysLoader.js delete mode 100644 docs/rendering/animation/Shapes.js delete mode 100644 docs/rendering/animation/Spritesheet.js delete mode 100644 docs/rendering/animation/Timeline.js delete mode 100644 docs/rendering/eye/AbstractEye.js delete mode 100644 docs/rendering/eye/AbstractLayer.js delete mode 100644 docs/rendering/eye/Background.js delete mode 100644 docs/rendering/eye/Eye.js delete mode 100644 docs/rendering/eye/EyeContainer.js delete mode 100644 docs/rendering/eye/EyeMesh.js delete mode 100644 docs/rendering/eye/EyeOverlay.js delete mode 100644 docs/rendering/eye/filters/glow/GlowFilter.js delete mode 100644 docs/rendering/eye/filters/light/LightFilter.js delete mode 100644 docs/rendering/gui/Component.js delete mode 100644 docs/rendering/gui/ComponentCreator.js delete mode 100644 docs/rendering/gui/ComponentGroup.js delete mode 100644 docs/rendering/gui/DisplayUtils.js delete mode 100644 docs/rendering/gui/TouchManager.js delete mode 100644 docs/rendering/gui/ViewGlobalEvents.js delete mode 100644 docs/rendering/gui/ViewManager.js delete mode 100644 docs/rendering/gui/ViewProcess.js delete mode 100644 docs/rendering/gui/ViewState.js delete mode 100644 docs/rendering/gui/actions/ActionData.js delete mode 100644 docs/rendering/gui/components/Button.js delete mode 100644 docs/rendering/gui/components/Clip.js delete mode 100644 docs/rendering/gui/components/ContactButton.js delete mode 100644 docs/rendering/gui/components/ContentButton.js delete mode 100644 docs/rendering/gui/components/Element.js delete mode 100644 docs/rendering/gui/components/ElementGroup.js delete mode 100644 docs/rendering/gui/components/IElement.js delete mode 100644 docs/rendering/gui/components/Label.js delete mode 100644 docs/rendering/gui/components/List.js delete mode 100644 docs/rendering/gui/components/ListProgress.js delete mode 100644 docs/rendering/gui/components/MenuButton.js delete mode 100644 docs/rendering/gui/components/StandardButton.js delete mode 100644 docs/rendering/gui/components/subcomponents/ListMember.js delete mode 100644 docs/rendering/gui/components/subcomponents/Subcomponent.js delete mode 100644 docs/rendering/gui/components/subcomponents/TouchInteractive.js delete mode 100644 docs/rendering/gui/views/ContactsView.js delete mode 100644 docs/rendering/gui/views/EyeView.js delete mode 100644 docs/rendering/gui/views/ImageView.js delete mode 100644 docs/rendering/gui/views/MenuView.js delete mode 100644 docs/rendering/gui/views/PauseOverlay.js delete mode 100644 docs/rendering/gui/views/TextView.js delete mode 100644 docs/rendering/gui/views/View.js delete mode 100644 docs/rendering/input/GestureManager.js delete mode 100644 docs/rendering/tasks/ColorAlphaTask.js delete mode 100644 docs/rendering/tasks/CompressedImageTask.js delete mode 100644 docs/rendering/tasks/KeysDataTask.js delete mode 100644 docs/rendering/tasks/KeysTask.js delete mode 100644 docs/rendering/tasks/ShapesTask.js delete mode 100644 docs/rendering/tasks/SpritesheetTask.js delete mode 100644 docs/rendering/tasks/TextureTask.js delete mode 100644 docs/rendering/tasks/TimelineTask.js delete mode 100644 docs/rendering/tween/Tween.js delete mode 100644 docs/rendering/tween/TweenManager.js delete mode 100644 docs/services/SessionManager.js delete mode 100644 docs/services/events/GlobalEvent.js delete mode 100644 docs/services/events/GlobalEvents.js delete mode 100644 docs/services/events/SharedGlobalEvents.js delete mode 100644 docs/services/events/index.js delete mode 100644 docs/services/index.js delete mode 100644 docs/services/media/Media.js delete mode 100644 docs/services/media/MediaModel.js delete mode 100644 docs/services/media/MediaModelEvents.js delete mode 100644 docs/services/media/MediaNode.js delete mode 100644 docs/services/remote/RemoteService.js delete mode 100644 docs/sound/ChainBuilder.js delete mode 100644 docs/sound/Sound.js delete mode 100644 docs/sound/SoundContext.js delete mode 100644 docs/sound/SoundInstance.js delete mode 100644 docs/sound/SoundPlugin.js delete mode 100644 docs/sound/SoundUtils.js delete mode 100644 docs/sound/index.js delete mode 100644 docs/sound/tasks/SoundTask.js delete mode 100644 docs/utils/AnimationUtils.js delete mode 100644 docs/utils/DelayedCall.js delete mode 100644 docs/utils/Timer.js delete mode 100644 docs/utils/decorators.js delete mode 100644 docs/utils/index.js delete mode 100644 docs/utils/location/HomeLocation.js delete mode 100644 docs/utils/perf/GlobalPerfTimer.js delete mode 100644 docs/utils/perf/ParallelTimer.js delete mode 100644 docs/utils/perf/PerformanceTimer.js delete mode 100644 docs/utils/perf/SerialTimer.js diff --git a/CustomButtons/test/menuEntry.json b/CustomButtons/test/menuEntry.json deleted file mode 100644 index b54a09dd..00000000 --- a/CustomButtons/test/menuEntry.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "VERY Fun Stuff", - "isSubmenu": true, - "icon": "core://resources/actionIcons/fun.png" -} diff --git a/CustomButtons/test/testingSkill/menuEntry.json b/CustomButtons/test/testingSkill/menuEntry.json deleted file mode 100644 index 0e54c713..00000000 --- a/CustomButtons/test/testingSkill/menuEntry.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "AAAAA", - "icon": "core://resources/actionIcons/clock.png", - "colors": "blue", - "skillId": "@be/clock" -} diff --git a/README.md b/README.md index f6d4011b..61e2712c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,10 @@ # JiboOs + - - - + + # Release Version 3.3.0 InDev + + Chagelog..... + + you can make custom menu buttons! + diff --git a/V3.1/BuildUpdatePackage b/V3.1/BuildUpdatePackage deleted file mode 100755 index e69de29b..00000000 diff --git a/V3.1/build/etc/init.d/S02jibo-skills-logd b/V3.1/build/etc/init.d/S02jibo-skills-logd new file mode 100644 index 00000000..5ae8b069 --- /dev/null +++ b/V3.1/build/etc/init.d/S02jibo-skills-logd @@ -0,0 +1,99 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: jibo-skills-logd +# Required-Start: $local_fs +# Required-Stop: $local_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: UDP log daemon for Jibo Skills +### END INIT INFO + +# Install path on robot: +# /etc/init.d/jibo-skills-logd (this file) +# and ensure executable: chmod +x /etc/init.d/jibo-skills-logd +# Enable (varies by distro): +# update-rc.d jibo-skills-logd defaults +# or (BusyBox init): create symlink in /etc/rc.d/rcS.d/ or /etc/rc?.d/ + +PYTHON_BIN=${PYTHON_BIN:-/usr/bin/python} +DAEMON=${DAEMON:-/opt/jibo/Jibo/Skills/tools/robot/logd/jibo_logd.py} +PIDFILE=${PIDFILE:-/tmp/jibo-skills-logd.pid} +HOST=${JIBO_LOGD_HOST:-127.0.0.1} +PORT=${JIBO_LOGD_PORT:-15140} +LOGFILE=${JIBO_LOGD_FILE:-/tmp/jibo-skills.log} + +start() { + echo "Starting jibo-skills-logd" + if [ -f "$PIDFILE" ]; then + PID=$(cat "$PIDFILE" 2>/dev/null) + if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then + echo "Already running (pid $PID)" + return 0 + fi + fi + + # best effort: ensure logfile dir exists + mkdir -p "$(dirname "$LOGFILE")" 2>/dev/null + + "$PYTHON_BIN" "$DAEMON" --host "$HOST" --port "$PORT" --logfile "$LOGFILE" --daemonize --pidfile "$PIDFILE" + sleep 1 + if [ -f "$PIDFILE" ]; then + echo "Started (pid $(cat "$PIDFILE" 2>/dev/null))" + return 0 + fi + echo "Failed to start" + return 1 +} + +stop() { + echo "Stopping jibo-skills-logd" + if [ ! -f "$PIDFILE" ]; then + echo "Not running (no pidfile)" + return 0 + fi + PID=$(cat "$PIDFILE" 2>/dev/null) + if [ -z "$PID" ]; then + rm -f "$PIDFILE" + return 0 + fi + kill "$PID" 2>/dev/null + sleep 1 + kill -9 "$PID" 2>/dev/null + rm -f "$PIDFILE" + echo "Stopped" + return 0 +} + +status() { + if [ -f "$PIDFILE" ]; then + PID=$(cat "$PIDFILE" 2>/dev/null) + if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then + echo "Running (pid $PID)" + return 0 + fi + fi + echo "Not running" + return 3 +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + status) + status + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac + +exit $? diff --git a/V3.1/build/etc/init.d/S03jibo-skills-logpanel b/V3.1/build/etc/init.d/S03jibo-skills-logpanel new file mode 100644 index 00000000..34e87f3e --- /dev/null +++ b/V3.1/build/etc/init.d/S03jibo-skills-logpanel @@ -0,0 +1,90 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: jibo-skills-logpanel +# Required-Start: $local_fs +# Required-Stop: $local_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: HTTP panel for live Jibo Skills logs +### END INIT INFO + +PYTHON_BIN=${PYTHON_BIN:-/usr/bin/python} +DAEMON=${DAEMON:-/opt/jibo/Jibo/Skills/tools/robot/logpanel/jibo_logpanel.py} +PIDFILE=${PIDFILE:-/tmp/jibo-skills-logpanel.pid} +BIND=${JIBO_LOGPANEL_BIND:-0.0.0.0} +PORT=${JIBO_LOGPANEL_PORT:-15150} +LOGFILE=${JIBO_LOGD_FILE:-/tmp/jibo-skills.log} + +start() { + echo "Starting jibo-skills-logpanel" + if [ -f "$PIDFILE" ]; then + PID=$(cat "$PIDFILE" 2>/dev/null) + if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then + echo "Already running (pid $PID)" + return 0 + fi + fi + + "$PYTHON_BIN" "$DAEMON" --bind "$BIND" --port "$PORT" --logfile "$LOGFILE" >/tmp/jibo-skills-logpanel.log 2>&1 & + echo $! > "$PIDFILE" + sleep 1 + if [ -f "$PIDFILE" ]; then + echo "Started (pid $(cat "$PIDFILE" 2>/dev/null))" + return 0 + fi + echo "Failed to start" + return 1 +} + +stop() { + echo "Stopping jibo-skills-logpanel" + if [ ! -f "$PIDFILE" ]; then + echo "Not running (no pidfile)" + return 0 + fi + PID=$(cat "$PIDFILE" 2>/dev/null) + if [ -z "$PID" ]; then + rm -f "$PIDFILE" + return 0 + fi + kill "$PID" 2>/dev/null + sleep 1 + kill -9 "$PID" 2>/dev/null + rm -f "$PIDFILE" + echo "Stopped" + return 0 +} + +status() { + if [ -f "$PIDFILE" ]; then + PID=$(cat "$PIDFILE" 2>/dev/null) + if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then + echo "Running (pid $PID)" + return 0 + fi + fi + echo "Not running" + return 3 +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + status) + status + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac + +exit $? diff --git a/V3.1/build/etc/init.d/S21firewall b/V3.1/build/etc/init.d/S21firewall new file mode 100644 index 00000000..eeb503e7 --- /dev/null +++ b/V3.1/build/etc/init.d/S21firewall @@ -0,0 +1,127 @@ +#!/bin/sh +# +# Jibo Firewall init script +# + +set -e + +IPTABLES_CMDS="/usr/sbin/iptables /usr/sbin/ip6tables" + +flush_rules() { + for iptables in $IPTABLES_CMDS; do + $iptables -t filter -F + $iptables -t filter -P INPUT ACCEPT + $iptables -t filter -P FORWARD ACCEPT + $iptables -t filter -P OUTPUT ACCEPT + # add the DYNAMIC_ACCESS chain unconditionally + $iptables -t filter -X + $iptables -t filter -N DYNAMIC_ACCESS + done +} + +normal_rules() { + for iptables in $IPTABLES_CMDS; do + $iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + $iptables -t filter -A INPUT -p icmp -j ACCEPT + $iptables -t filter -A INPUT -i lo -j ACCEPT + + # --- Custom Allowed Ports --- + # Allow SSH + $iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT + # Allow Jibo Skills Service panel at 8779 + $iptables -t filter -A INPUT -p tcp --dport 8779 -j ACCEPT + # Allow Custom Port 15150 for loggging + $iptables -t filter -A INPUT -p tcp --dport 15150 -j ACCEPT + # ---------------------------- + + # allow dynamic access rules from system-manager + $iptables -t filter -A INPUT -j DYNAMIC_ACCESS + + # Reject everything else + $iptables -t filter -A INPUT -j REJECT + $iptables -t filter -A FORWARD -j REJECT + done +} +developer_rules() { + for iptables in $IPTABLES_CMDS; do + # jibo-dev-shell + $iptables -t filter -A INPUT -p tcp --syn --dport 8686 -j ACCEPT + # jibo-skills-service + $iptables -t filter -A INPUT -p tcp --syn --dport 8779 -j ACCEPT + # jibo-sync + $iptables -t filter -A INPUT -p tcp --syn --dport 8989 -j ACCEPT + # jibo-debug-proxy + $iptables -t filter -A INPUT -p tcp --syn --dport 9191 -j ACCEPT + # avahi + $iptables -t filter -A INPUT -p udp --dport 5353 -j ACCEPT + done + normal_rules +} + +certification_rules() { + for iptables in $IPTABLES_CMDS; do + # jibo-certification-service + $iptables -t filter -A INPUT -p tcp --syn --dport 9292 -j ACCEPT + done + normal_rules +} + +service_rules() { + for iptables in $IPTABLES_CMDS; do + # jibo-certification-service + $iptables -t filter -A INPUT -p tcp --syn --dport 9292 -j ACCEPT + # jibo-service-center-service + $iptables -t filter -A INPUT -p tcp --syn --dport 9797 -j ACCEPT + # avahi + $iptables -t filter -A INPUT -p udp --dport 5353 -j ACCEPT + done + normal_rules +} + +start() { + echo -n "Configuring firewall: " + flush_rules + my_mode=$(/usr/bin/jibo-getmode) + if [ $? -ne 0 ]; then + echo "Unspecified mode. SKIP" + elif [ "$my_mode" == "identified" ]; then + echo "IDENTIFIED" + elif [ "$my_mode" == "int-developer" ]; then + echo "INT-DEVELOPER" + elif [ "$my_mode" == "developer" ]; then + developer_rules + test $? -eq 0 && echo "DEVELOPER" || echo "ERROR" + elif [ "$my_mode" == "certification" ]; then + certification_rules + test $? -eq 0 && echo "CERTIFICATION" || echo "ERROR" + elif [ "$my_mode" == "service" ]; then + service_rules + test $? -eq 0 && echo "SERVICE" || echo "ERROR" + else + normal_rules + test $? -eq 0 && echo "OK" || echo "ERROR" + fi +} + +stop() { + echo -n "Unconfiguring firewall: " + flush_rules + test $? -eq 0 && echo "OK" || echo "ERROR" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" >&2 + exit 1 + ;; +esac diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/be/robot-logger.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/be/robot-logger.js new file mode 100644 index 00000000..f6bf7e39 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/be/robot-logger.js @@ -0,0 +1,60 @@ +"use strict"; + +// Minimal UDP logger client for old robot environments. +// Safe to require from any module; if logd is not running, it will just no-op. + +const dgram = require("dgram"); + +const DEFAULT_HOST = process.env.JIBO_LOGD_HOST || "127.0.0.1"; +const DEFAULT_PORT = parseInt(process.env.JIBO_LOGD_PORT || "15140", 10); + +let _socket = null; + +function getSocket() { + if (_socket) return _socket; + try { + _socket = dgram.createSocket("udp4"); + _socket.unref(); + return _socket; + } catch (e) { + return null; + } +} + +function send(obj) { + const sock = getSocket(); + if (!sock) return; + + let payload; + try { + payload = Buffer.from(JSON.stringify(obj)); + } catch (e) { + return; + } + + try { + sock.send(payload, 0, payload.length, DEFAULT_PORT, DEFAULT_HOST, function () { }); + } catch (e) { + // ignore + } +} + +function mk(tag, level, msg, data) { + const o = { tag: tag || "skill", level: level || "info", msg: String(msg || "") }; + if (typeof data !== "undefined") o.data = data; + return o; +} + +exports.info = function (tag, msg, data) { send(mk(tag, "info", msg, data)); }; +exports.warn = function (tag, msg, data) { send(mk(tag, "warn", msg, data)); }; +exports.error = function (tag, msg, data) { send(mk(tag, "error", msg, data)); }; +exports.debug = function (tag, msg, data) { send(mk(tag, "debug", msg, data)); }; + +exports.raw = function (line) { + const sock = getSocket(); + if (!sock) return; + const payload = Buffer.from(String(line || "")); + try { + sock.send(payload, 0, payload.length, DEFAULT_PORT, DEFAULT_HOST, function () { }); + } catch (e) { } +}; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/PROVIDERS.md b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/PROVIDERS.md new file mode 100644 index 00000000..c27fefed --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/PROVIDERS.md @@ -0,0 +1,65 @@ +# Menu providers (drop-in menu customization) + +Providers let you add/override menu entries without editing the core menu patch. + +Default entries directory (on robot): +- `/opt/jibo/Jibo/Skills/@be/menu-entries.d/` + +Legacy fallback (yea ik its the same stop talking): +- `/opt/jibo/Jibo/Skills/@be/menu-providers.d/` + +## Provider file types + +### JSON provider (`*.json`) +Supported shapes: + +- An array of entries: `[ { ... }, { ... } ]` +- Or `{ "entries": [ ... ] }` + +Entry schema (same as `menuEntry.json` scan output): + +- `id` (string, required) +- `type` (`skill` or `submenu`) +- `title` +- `icon` +- `color` +- `description` +- `order` (number) +- `skillId` (for type `skill`) +- `submenuTitle` (for type `submenu`) +- `children` (array of skill entries, for type `submenu`) +- `childrenDir` (for type `submenu`, optional): + - Absolute path (starts with `/`) or relative to `skillsRoot` + - If provided and `children` is missing/empty, the patch will scan this directory for child skills (subfolders containing `menuEntry.json`). + +Example submenu that lists a directory: + +```json +[ + { + "id": "fun_stuff", + "type": "submenu", + "title": "Fun Stuff", + "icon": "resources/icons/fun-stuff.png", + "order": 20, + "childrenDir": "FunStuff" + } +] +``` + +### JS provider (`*.js`) +Exports one of: + +- `module.exports = function(ctx) { return [ ...entries... ]; }` +- `exports.getEntries = function(ctx) { return [ ...entries... ]; }` +- `exports.entries = [ ...entries... ]` + +`ctx` includes: +- `skillsRoot` +- `providersDir` +- `log` (function) + +## Conflict rules + +- If a provider entry has the same `id` as a scanned entry, the provider entry wins. +- Sorting: by `order` then by title. diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/README.md b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/README.md index b52ff79e..bc473348 100644 --- a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/README.md +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/README.md @@ -12,7 +12,7 @@ When Jibo boots up, the `main-menu-patch.js` module: ## Quick Start -### Adding a Simple Skill Button to the Menu +### Adding a Simple Skill Button to the Menu (you really should follow PROVIDERS.md at this point) 1. Create a folder in the `Skills` directory (e.g., `MySkill/`) 2. Add a `menuEntry.json` file inside: @@ -53,7 +53,7 @@ When Jibo boots up, the `main-menu-patch.js` module: 3. Inside that folder, create subfolders for each skill, each with their own `menuEntry.json` 4. A button will appear in the main menu that opens a submenu with those skills! -## Directory Structure Example +## Directory Structure Example (OLD) ``` /opt/jibo/Jibo/Skills/ diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/main-menu-patch.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/main-menu-patch.js index 4fc6a626..4513accb 100644 --- a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/main-menu-patch.js +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/main-menu-patch.js @@ -10,11 +10,38 @@ const fs = require('fs'); const path = require('path'); -// Skills root directory -const SKILLS_ROOT = '/opt/jibo/Jibo/Skills'; +const menuEntries = require('./menu-entries'); +const skillsRootUtil = require('./skills-root'); + +function strStartsWith(s, prefix) { + return (typeof s === 'string') && (s.indexOf(prefix) === 0); +} + +function strEndsWith(s, suffix) { + if (typeof s !== 'string' || typeof suffix !== 'string') return false; + if (suffix.length > s.length) return false; + return s.indexOf(suffix, s.length - suffix.length) !== -1; +} + +function strIncludes(s, needle) { + return (typeof s === 'string') && (s.indexOf(needle) !== -1); +} + +// Optional UDP logger (Python logd). Safe fallback if unavailable. +let robotLogger = null; +try { + robotLogger = require('../be/robot-logger'); +} catch (e) { + robotLogger = null; +} + +// Skills root directory (configurable) +let SKILLS_ROOT = skillsRootUtil.resolveSkillsRoot(); // Cache for scanned skills let _cachedMenuEntries = null; +let _cachedSkillsRoot = null; +let _cachedProvidersDir = null; let _submenuConfigs = {}; let _dynamicSkillIds = new Set(); // Track dynamic skill IDs for routing let _beInstance = null; @@ -40,6 +67,11 @@ const LOG_FILE = '/tmp/menu-patch.log'; function log(msg, ...args) { const line = '[MENU-PATCH] ' + msg + ' ' + args.map(a => typeof a === 'object' ? JSON.stringify(a) : String(a)).join(' '); console.log(line); + try { + if (robotLogger && typeof robotLogger.raw === 'function') { + robotLogger.raw(line); + } + } catch (e) { } try { fs.appendFileSync(LOG_FILE, new Date().toISOString() + ' ' + line + '\n'); } catch (e) {} @@ -48,6 +80,11 @@ function log(msg, ...args) { function warn(msg, ...args) { const line = '[MENU-PATCH WARN] ' + msg + ' ' + args.map(a => typeof a === 'object' ? JSON.stringify(a) : String(a)).join(' '); console.warn(line); + try { + if (robotLogger && typeof robotLogger.raw === 'function') { + robotLogger.raw(line); + } + } catch (e) { } try { fs.appendFileSync(LOG_FILE, new Date().toISOString() + ' ' + line + '\n'); } catch (e) {} @@ -172,59 +209,37 @@ function scanSubmenuChildren(submenuDir) { * Scan the Skills root directory for all menu entries */ function scanAllMenuEntries() { - if (_cachedMenuEntries) { + if (_cachedMenuEntries && _cachedSkillsRoot === SKILLS_ROOT) { log('Returning cached entries:', _cachedMenuEntries.length); return _cachedMenuEntries; } - + log('Scanning Skills directory:', SKILLS_ROOT); - _dynamicSkillIds.clear(); - const entries = []; - let children; - - // Check if directory exists - if (!fs.existsSync(SKILLS_ROOT)) { - warn('Skills directory does not exist:', SKILLS_ROOT); - return entries; - } - + + const res = menuEntries.getMenuEntries({ + skillsRoot: SKILLS_ROOT, + log: function () { + try { log.apply(null, arguments); } catch (e) { } + } + }); + + _cachedMenuEntries = res.entries || []; + _cachedSkillsRoot = res.skillsRoot; + _cachedProvidersDir = res.providersDir; + + // update dynamic id set try { - children = fs.readdirSync(SKILLS_ROOT); - log('Found', children.length, 'items in Skills directory:', children.join(', ')); - } catch (e) { - warn('Failed to read skills directory:', SKILLS_ROOT, e.message); - return entries; + if (res.dynamicSkillIds && typeof res.dynamicSkillIds.forEach === 'function') { + res.dynamicSkillIds.forEach(function (id) { _dynamicSkillIds.add(id); }); + } + } catch (e) { } + + log('Total entries found:', _cachedMenuEntries.length); + if (_cachedProvidersDir) { + log('Providers dir:', _cachedProvidersDir); } - - children.forEach(name => { - if (name.startsWith('.') || name === '@be' || name === 'node_modules') { - log('Skipping:', name); - return; - } - - const skillDir = path.join(SKILLS_ROOT, name); - if (!isDirectory(skillDir)) { - log('Not a directory:', name); - return; - } - - const entry = scanSkillEntry(skillDir, name); - if (entry) { - entries.push(entry); - log('Added entry:', entry.title, '(type:', entry.type + ')'); - } - }); - - // Sort by order, then alphabetically - entries.sort((a, b) => { - if (a.order !== b.order) return a.order - b.order; - return a.title.localeCompare(b.title); - }); - - log('Total entries found:', entries.length); - _cachedMenuEntries = entries; - return entries; + return _cachedMenuEntries; } /** @@ -427,7 +442,7 @@ function patchMainMenuSkill(be) { } // Handle dynamic submenus - if (skill && skill.startsWith('dynamic-submenu-')) { + if (skill && strStartsWith(skill, 'dynamic-submenu-')) { log('Showing submenu:', skill); const submenuConfig = _submenuConfigs[skill]; if (submenuConfig && _jibo && _jibo.face && _jibo.face.views) { @@ -443,11 +458,15 @@ function patchMainMenuSkill(be) { if (result && result.on) { result.on('select', (selection) => { log('Submenu item selected:', selection); - if (selection && selection.action && selection.action.data) { - const destination = selection.action.data.utterance?.entities?.destination; - if (destination) { - this.redirectToSkill(destination); + try { + if (selection && selection.action && selection.action.data && selection.action.data.utterance && selection.action.data.utterance.entities) { + const destination = selection.action.data.utterance.entities.destination; + if (destination) { + this.redirectToSkill(destination); + } } + } catch (e) { + warn('Submenu selection handler error:', e && e.message ? e.message : e); } }); } @@ -459,7 +478,7 @@ function patchMainMenuSkill(be) { } // Handle dynamic skills (prefixed with 'dynamic:') - if (skill && skill.startsWith('dynamic:')) { + if (skill && strStartsWith(skill, 'dynamic:')) { const actualSkillId = skill.substring(8); // Remove 'dynamic:' prefix log('Launching dynamic skill:', actualSkillId); @@ -530,6 +549,14 @@ function applyPatch(be) { function patchLoader(jibo, skillsRoot) { log('patchLoader called'); _jibo = jibo; + + // Allow caller to override skills root. + if (skillsRoot && typeof skillsRoot === 'string') { + SKILLS_ROOT = skillsRoot; + } else { + SKILLS_ROOT = skillsRootUtil.resolveSkillsRoot(); + } + clearCache(); if (!jibo) { warn('jibo is null/undefined'); @@ -553,7 +580,7 @@ function patchLoader(jibo, skillsRoot) { log('>>> jibo.loader.load called with:', resourcePath); // Check if this is loading a dynamic submenu - if (resourcePath && resourcePath.startsWith('dynamic-submenu-')) { + if (resourcePath && strStartsWith(resourcePath, 'dynamic-submenu-')) { const submenuConfig = _submenuConfigs[resourcePath]; if (submenuConfig) { log('Loading dynamic submenu:', resourcePath); @@ -566,10 +593,10 @@ function patchLoader(jibo, skillsRoot) { // Check if this is the main menu - match various possible paths const isMainMenu = resourcePath && ( - resourcePath.includes('main-menu-verbal.json') || - resourcePath.includes('main-menu.json') || + strIncludes(resourcePath, 'main-menu-verbal.json') || + strIncludes(resourcePath, 'main-menu.json') || resourcePath === 'resources/views/main-menu-verbal.json' || - resourcePath.endsWith('main-menu-verbal.json') + strEndsWith(resourcePath, 'main-menu-verbal.json') ); if (isMainMenu) { @@ -584,12 +611,22 @@ function patchLoader(jibo, skillsRoot) { } log('Original menu config loaded successfully'); - log('Original button count:', config?.viewConfig?.list?.length || 0); + try { + const origCount = (config && config.viewConfig && config.viewConfig.list && config.viewConfig.list.length) ? config.viewConfig.list.length : 0; + log('Original button count:', origCount); + } catch (e) { + log('Original button count: (unknown)'); + } // Inject dynamic skills const patchedConfig = injectDynamicSkills(config); - log('Patched button count:', patchedConfig?.viewConfig?.list?.length || 0); + try { + const patchedCount = (patchedConfig && patchedConfig.viewConfig && patchedConfig.viewConfig.list && patchedConfig.viewConfig.list.length) ? patchedConfig.viewConfig.list.length : 0; + log('Patched button count:', patchedCount); + } catch (e) { + log('Patched button count: (unknown)'); + } if (callback) callback(null, patchedConfig); }); @@ -608,6 +645,8 @@ function patchLoader(jibo, skillsRoot) { */ function clearCache() { _cachedMenuEntries = null; + _cachedSkillsRoot = null; + _cachedProvidersDir = null; _submenuConfigs = {}; _dynamicSkillIds.clear(); } diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-entries.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-entries.js new file mode 100644 index 00000000..48c38d55 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-entries.js @@ -0,0 +1,72 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +const skillsRoot = require("./skills-root"); +const scanner = require("./menu-entry-scanner"); +const providers = require("./menu-providers"); + +function isDirectory(p) { + try { + return fs.statSync(p).isDirectory(); + } catch (e) { + return false; + } +} + +function expandSubmenuChildren(entries, root, opts) { + (entries || []).forEach(function (e) { + if (!e || e.type !== "submenu") return; + + if (e.children && e.children.length) return; + if (!e.childrenDir) return; + + let dir = e.childrenDir; + if (typeof dir !== "string" || dir.trim().length === 0) return; + dir = dir.trim(); + + const resolved = (dir.charAt(0) === "/") ? dir : path.join(root, dir); + if (!isDirectory(resolved)) { + if (opts && opts.log) opts.log("submenu childrenDir not a directory", e.id, resolved); + e.children = []; + return; + } + + if (opts && opts.log) opts.log("submenu childrenDir scan", e.id, resolved); + e.children = scanner.scanSubmenuChildren(resolved, { log: opts && opts.log, defaultIcon: opts && opts.defaultIcon, defaultColor: opts && opts.defaultColor, defaultOrder: opts && opts.defaultOrder }); + }); +} + +function getMenuEntries(opts) { + opts = opts || {}; + const root = skillsRoot.resolveSkillsRoot(opts.skillsRoot); + const providerDir = opts.providersDir || skillsRoot.providersDirForRoot(root); + + const scanned = scanner.scanAllMenuEntries(root, { + log: opts.log, + defaultIcon: opts.defaultIcon, + defaultColor: opts.defaultColor, + defaultOrder: opts.defaultOrder + }); + + const provided = providers.loadProviderEntries(providerDir, { log: opts.log, skillsRoot: root, providersDir: providerDir }); + const merged = providers.mergeById(scanned, provided); + + // Allow provider-defined submenus to be backed by an arbitrary directory. + // Example: { type: "submenu", id: "fun", childrenDir: "FunStuff" } + expandSubmenuChildren(merged, root, opts); + + const dynamicIds = scanner.collectDynamicSkillIds(merged); + + return { + skillsRoot: root, + providersDir: providerDir, + entries: merged, + dynamicSkillIds: dynamicIds + }; +} + +module.exports = { + getMenuEntries: getMenuEntries +}; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-entry-scanner.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-entry-scanner.js new file mode 100644 index 00000000..6258c428 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-entry-scanner.js @@ -0,0 +1,150 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +function safeReadJson(filePath, logFn) { + try { + const txt = fs.readFileSync(filePath, "utf8"); + if (!txt || txt.trim().length === 0) return null; + return JSON.parse(txt); + } catch (e) { + if (logFn) logFn("safeReadJson failed", filePath, e && e.message ? e.message : e); + return null; + } +} + +function isDirectory(p) { + try { + return fs.statSync(p).isDirectory(); + } catch (e) { + return false; + } +} + +function scanSkillEntry(skillDir, folderName, opts) { + opts = opts || {}; + const menuJsonPath = path.join(skillDir, "menuEntry.json"); + const menuJson = safeReadJson(menuJsonPath, opts.log); + + if (!menuJson) return null; + if (menuJson.hidden === true) return null; + + const entry = { + id: folderName, + type: menuJson.type || "skill", + title: menuJson.title || menuJson.label || folderName, + icon: menuJson.icon || menuJson.iconSrc || (opts.defaultIcon || "resources/icons/settings.png"), + color: menuJson.color || menuJson.colors || (opts.defaultColor || "default"), + description: menuJson.description || "", + path: skillDir, + order: typeof menuJson.order === "number" ? menuJson.order : (typeof opts.defaultOrder === "number" ? opts.defaultOrder : 100), + skillId: menuJson.skillId || folderName, + submenuTitle: menuJson.submenuTitle || menuJson.title || folderName + }; + + if (entry.type === "submenu") { + entry.children = scanSubmenuChildren(skillDir, opts); + } + + // Legacy support + if (menuJson.isSubmenu === true && entry.type !== "submenu") { + entry.type = "submenu"; + entry.children = scanSubmenuChildren(skillDir, opts); + } + + return entry; +} + +function scanSubmenuChildren(submenuDir, opts) { + const children = []; + let items; + try { + items = fs.readdirSync(submenuDir); + } catch (e) { + return children; + } + + items.forEach(function (name) { + if (!name || name.charAt(0) === ".") return; + if (name === "@be" || name === "node_modules") return; + + const childPath = path.join(submenuDir, name); + if (!isDirectory(childPath)) return; + + const entry = scanSkillEntry(childPath, name, opts); + if (entry && entry.type === "skill") { + children.push(entry); + } + }); + + children.sort(function (a, b) { + if (a.order !== b.order) return a.order - b.order; + return String(a.title || "").localeCompare(String(b.title || "")); + }); + + return children; +} + +function scanAllMenuEntries(skillsRoot, opts) { + opts = opts || {}; + const entries = []; + + if (!skillsRoot || !fs.existsSync(skillsRoot)) { + if (opts.log) opts.log("skills root missing", skillsRoot); + return entries; + } + + let children; + try { + children = fs.readdirSync(skillsRoot); + } catch (e) { + if (opts.log) opts.log("failed to read skills root", skillsRoot, e && e.message ? e.message : e); + return entries; + } + + children.forEach(function (name) { + if (!name || name.charAt(0) === ".") return; + if (name === "@be" || name === "node_modules") return; + + const skillDir = path.join(skillsRoot, name); + if (!isDirectory(skillDir)) return; + + const entry = scanSkillEntry(skillDir, name, opts); + if (entry) entries.push(entry); + }); + + entries.sort(function (a, b) { + if (a.order !== b.order) return a.order - b.order; + return String(a.title || "").localeCompare(String(b.title || "")); + }); + + return entries; +} + +function collectDynamicSkillIds(entries) { + const ids = new Set(); + + (entries || []).forEach(function (e) { + if (!e) return; + if (e.type === "skill") { + if (e.skillId) ids.add(e.skillId); + if (e.id) ids.add(e.id); + } + if (e.type === "submenu" && e.children && e.children.length) { + e.children.forEach(function (c) { + if (!c) return; + if (c.skillId) ids.add(c.skillId); + if (c.id) ids.add(c.id); + }); + } + }); + + return ids; +} + +module.exports = { + scanAllMenuEntries: scanAllMenuEntries, + scanSubmenuChildren: scanSubmenuChildren, + collectDynamicSkillIds: collectDynamicSkillIds +}; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-providers.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-providers.js new file mode 100644 index 00000000..d1057d0e --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/menu-providers.js @@ -0,0 +1,115 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +function isDirectory(p) { + try { + return fs.statSync(p).isDirectory(); + } catch (e) { + return false; + } +} + +function safeReadJson(filePath, logFn) { + try { + const txt = fs.readFileSync(filePath, "utf8"); + if (!txt || txt.trim().length === 0) return null; + return JSON.parse(txt); + } catch (e) { + if (logFn) logFn("provider json read failed", filePath, e && e.message ? e.message : e); + return null; + } +} + +function loadFromJson(filePath, ctx) { + const obj = safeReadJson(filePath, ctx && ctx.log); + if (!obj) return []; + + if (Array.isArray(obj)) return obj; + if (obj && Array.isArray(obj.entries)) return obj.entries; + if (obj && Array.isArray(obj.buttons)) return obj.buttons; + return []; +} + +function loadFromJs(filePath, ctx) { + try { + // eslint-disable-next-line global-require, import/no-dynamic-require + const mod = require(filePath); + if (!mod) return []; + if (typeof mod === "function") return mod(ctx) || []; + if (typeof mod.getEntries === "function") return mod.getEntries(ctx) || []; + if (Array.isArray(mod.entries)) return mod.entries; + return []; + } catch (e) { + if (ctx && ctx.log) ctx.log("provider js load failed", filePath, e && e.message ? e.message : e); + return []; + } +} + +function loadProviderEntries(providersDir, ctx) { + const out = []; + + if (!providersDir || !fs.existsSync(providersDir) || !isDirectory(providersDir)) { + return out; + } + + let files; + try { + files = fs.readdirSync(providersDir); + } catch (e) { + return out; + } + + files.sort(); + + files.forEach(function (name) { + if (!name || name.charAt(0) === ".") return; + const full = path.join(providersDir, name); + if (isDirectory(full)) return; + + if (name.indexOf(".json", name.length - 5) !== -1) { + const entries = loadFromJson(full, ctx); + entries.forEach(function (e) { out.push(e); }); + return; + } + + if (name.indexOf(".js", name.length - 3) !== -1) { + const entries = loadFromJs(full, ctx); + entries.forEach(function (e) { out.push(e); }); + } + }); + + return out; +} + +// Merge provider entries into scanned entries by id. +// Provider entries win on conflicts. +function mergeById(scannedEntries, providerEntries) { + const byId = {}; + + (scannedEntries || []).forEach(function (e) { + if (!e || !e.id) return; + byId[e.id] = e; + }); + + (providerEntries || []).forEach(function (p) { + if (!p || !p.id) return; + byId[p.id] = p; + }); + + const merged = Object.keys(byId).map(function (k) { return byId[k]; }); + merged.sort(function (a, b) { + const ao = typeof a.order === "number" ? a.order : 100; + const bo = typeof b.order === "number" ? b.order : 100; + if (ao !== bo) return ao - bo; + return String(a.title || a.label || a.id).localeCompare(String(b.title || b.label || b.id)); + }); + + return merged; +} + +module.exports = { + loadProviderEntries: loadProviderEntries, + mergeById: mergeById +}; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/skills-root.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/skills-root.js new file mode 100644 index 00000000..dd656a39 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/menu/skills-root.js @@ -0,0 +1,31 @@ +"use strict"; + +const path = require("path"); +const fs = require("fs"); + +const DEFAULT_ROOT = "/opt/jibo/Jibo/Skills"; + +function resolveSkillsRoot(overrideRoot) { + if (overrideRoot && typeof overrideRoot === "string") return overrideRoot; + if (process && process.env && process.env.JIBO_SKILLS_ROOT) return process.env.JIBO_SKILLS_ROOT; + return DEFAULT_ROOT; +} + +function providersDirForRoot(skillsRoot) { + // Keep providers inside Skills so they can be synced easily. + // Default: /opt/jibo/Jibo/Skills/@be/menu-entries.d + // Legacy fallback: /opt/jibo/Jibo/Skills/@be/menu-providers.d + const v2 = path.join(skillsRoot, "@be", "menu-entries.d"); + const v1 = path.join(skillsRoot, "@be", "menu-providers.d"); + try { + if (fs.existsSync(v2)) return v2; + if (fs.existsSync(v1)) return v1; + } catch (e) { /* ignore */ } + return v2; +} + +module.exports = { + DEFAULT_ROOT: DEFAULT_ROOT, + resolveSkillsRoot: resolveSkillsRoot, + providersDirForRoot: providersDirForRoot +}; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/@be/radio/node_modules/jibo-radio/LocalRadioPlayer.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/@be/radio/node_modules/jibo-radio/LocalRadioPlayer.js new file mode 100644 index 00000000..22eab458 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/@be/radio/node_modules/jibo-radio/LocalRadioPlayer.js @@ -0,0 +1,78 @@ +const EventEmitter = require('events'); + +class LocalRadioPlayer extends EventEmitter { + constructor() { + super(); + // These are example streams. You will need to set up your own + // Icecast/HTTP streams and replace these URLs with your server's IP. + this._stations = { + 'Rock': 'http://192.168.1.100:8000/rock', + 'Pop': 'http://192.168.1.100:8000/pop', + 'Jazz': 'http://192.168.1.100:8000/jazz', + 'Classical': 'http://192.168.1.100:8000/classical', + 'Electronic': 'http://192.168.1.100:8000/electronic', + 'Hip-Hop': 'http://192.168.1.100:8000/hiphop' + }; + this._audio = null; + console.log("LocalRadioPlayer initialized"); + } + + getStations(options) { + console.log("LocalRadioPlayer: getStations called"); + const stationList = Object.keys(this._stations).map(genre => ({ + name: genre, + id: genre + })); + return Promise.resolve(stationList); + } + + play(stationData) { + console.log(`LocalRadioPlayer: play called with`, stationData); + if (this._audio) { + this._audio.pause(); + } + const streamUrl = this._stations[stationData.id]; + if (!streamUrl) { + const err = new Error(`Station ${stationData.id} not found.`); + console.error("LocalRadioPlayer Error:", err); + this.emit('error', err); + return; + } + + console.log(`LocalRadioPlayer: Playing stream from ${streamUrl}`); + this._audio = new Audio(streamUrl); + this._audio.addEventListener('error', (e) => { + console.error('LocalRadioPlayer Audio Error:', e); + this.emit('error', new Error('Audio playback failed.')); + }); + + this._audio.play() + .then(() => { + console.log("LocalRadioPlayer: Playback started."); + this.emit('song-data', { + title: `Streaming ${stationData.id}`, + artist: 'Local Radio', + albumArt: '' // No artwork for local streams + }); + }) + .catch(err => { + console.error("LocalRadioPlayer Playback Error:", err); + this.emit('error', err); + }); + } + + stop() { + console.log("LocalRadioPlayer: stop called"); + if (this._audio) { + this._audio.pause(); + this._audio = null; + } + } + + resizeArtwork(options) { + // Not applicable for local streaming + return Promise.resolve(''); + } +} + +module.exports = LocalRadioPlayer; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/jibo-radio/LocalRadioPlayer.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/jibo-radio/LocalRadioPlayer.js new file mode 100644 index 00000000..993bedf1 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/jibo-radio/LocalRadioPlayer.js @@ -0,0 +1,73 @@ +const EventEmitter = require('events'); + +class LocalRadioPlayer extends EventEmitter { + constructor() { + super(); + // These are example streams. You will need to set up your own + // Icecast/HTTP streams and replace these URLs. + this._stations = { + 'My Station': 'http://192.168.1.5:6767/Ninja%20Tuna.mp3' + }; + this._audio = null; + console.log("LocalRadioPlayer initialized"); + } + + getStations(options) { + console.log("LocalRadioPlayer: getStations called"); + const stationList = Object.keys(this._stations).map(genre => ({ + name: genre, + id: genre + })); + return Promise.resolve(stationList); + } + + play(stationData) { + console.log(`LocalRadioPlayer: play called with`, stationData); + if (this._audio) { + this._audio.pause(); + } + const streamUrl = this._stations[stationData.id]; + if (!streamUrl) { + const err = new Error(`Station ${stationData.id} not found.`); + console.error("LocalRadioPlayer Error:", err); + this.emit('error', err); + return; + } + + console.log(`LocalRadioPlayer: Playing stream from ${streamUrl}`); + this._audio = new Audio(streamUrl); + this._audio.addEventListener('error', (e) => { + console.error('LocalRadioPlayer Audio Error:', e); + this.emit('error', new Error('Audio playback failed.')); + }); + + this._audio.play() + .then(() => { + console.log("LocalRadioPlayer: Playback started."); + this.emit('song-data', { + title: `Streaming ${stationData.id}`, + artist: 'Local Radio', + albumArt: '' // No artwork for local streams + }); + }) + .catch(err => { + console.error("LocalRadioPlayer Playback Error:", err); + this.emit('error', err); + }); + } + + stop() { + console.log("LocalRadioPlayer: stop called"); + if (this._audio) { + this._audio.pause(); + this._audio = null; + } + } + + resizeArtwork(options) { + // Not applicable for local streaming + return Promise.resolve(''); + } +} + +module.exports = LocalRadioPlayer; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/jibo-radio/lib/jibo-radio.js b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/jibo-radio/lib/jibo-radio.js index e8903e08..6ac4f1e6 100644 --- a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/jibo-radio/lib/jibo-radio.js +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/jibo-radio/lib/jibo-radio.js @@ -1,1029 +1,7 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jiboRadio = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o { - this._volume = HJ_VOLUME; - }; - this._listenFinished = () => { - if (!this._isCurrentlySpeaking) { - this._volume = this._volumePlugin.currentVolume; - } - }; - this._volumeChanged = (volume) => { - this._volume = volume; - }; - this._hlsMediaAttached = () => { - if (this._hls) { - this._hls.loadSource(this._hlsURI); - } - }; - this._hlsManifestParsed = (event, data) => { - if (this._hls) { - this._log.info(`Manifest loaded, found ${data.levels.length} quality levels`); - this._mode = Mode.HLS; - this._volume = this._volumePlugin.currentVolume; - this.resume(); - } - }; - this._hlsFragParsing = (event, fragment) => __awaiter(this, void 0, void 0, function* () { - this._log.debug(event, fragment); - if (fragment.frag.title) { - try { - this._emitSongData(this._processHLSMetadata(fragment.frag.title)); - } - catch (err) { - this._log.info('Problem parsing HLS stream metadata; trying sideband', err); - this._emitSongData(yield this._getSidebandData(), true); - } - } - }); - this._handleHLSErrors = (event, data) => { - if (!this._hls) { - return; - } - if (!data.fatal) { - this._log.info('HLS warning', data); - return; - } - switch (data.type) { - case HLS.ErrorTypes.MEDIA_ERROR: - if (!this._recoveringMedia) { - this._log.info('Trying to recover from media error', data); - this._recoveringMedia = - setTimeout(() => this._recoveringMedia = null, 2000); - this._hls.recoverMediaError(); - } - else if (!this._swappingAudioCodec) { - this._log.info('Swapping audio codec this time, then trying again to recover from media error', data); - clearTimeout(this._recoveringMedia); - this._recoveringMedia = null; - this._swappingAudioCodec = true; - setTimeout(() => this._swappingAudioCodec = false, 2000); - this._hls.swapAudioCodec(); - this._hls.recoverMediaError(); - } - else { - this._recoveringMedia = null; - this._swappingAudioCodec = false; - this._handleStreamError(data); - } - break; - default: - this._handleStreamError(data); - break; - } - }; - this._handleMediaPlaying = () => { - this._mediaTagPlayPromise = null; - this._streamStarted(); - this._resolveStreamPromise(); - }; - this._handleAudioError = () => { - if (!this._log) { - return; - } - if (this._audio) { - this._audio.removeEventListener('loadeddata', this._handleMediaPlaying); - this._audio.removeEventListener('stalled', this._handleAudioError); - this._audio.removeEventListener('error', this._handleAudioError); - } - this._mediaTagPlayPromise = null; - const code = this._audio && this._audio.error && this._audio.error.code; - if (code !== MediaError.MEDIA_ERR_ABORTED) { - const err = RadioPlayer._getMediaError(code); - if (this._mode === Mode.PLS) { - this._nextPLSStream(err); - } - else { - this._handleStreamError(err); - } - } - }; - this._handleVideoError = () => { - if (!this._log) { - return; - } - if (this._video) { - this._video.removeEventListener('loadeddata', this._handleMediaPlaying); - this._video.removeEventListener('error', this._handleAudioError); - } - this._mediaTagPlayPromise = null; - const code = this._video && this._video.error && this._video.error.code; - if (code !== MediaError.MEDIA_ERR_ABORTED) { - this._handleStreamError(RadioPlayer._getMediaError(code)); - } - }; - if (!HLS.isSupported()) { - throw new Error('Oh no! HTTP Live Streaming isn\'t supported!'); - } - } - static _hash(name) { - const shasum = crypto.createHash('sha256'); - shasum.update(`${DEVICE_ID_SALT}-${name}`); - return shasum.digest('hex'); - } - static _songDataDifferent(left, right) { - return !!left && !right - || !left && !!right - || left.mediaType !== right.mediaType - || left.artist !== right.artist - || left.title !== right.title; - } - static _promiseTimeout(promise, millis) { - return Promise.race([ - promise, - new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), millis)), - ]); - } - init(serialNumber, releaseVersion, country, lat, lng, listenEvents, volumePlugin) { - return __awaiter(this, void 0, void 0, function* () { - this._deviceId = RadioPlayer._hash(serialNumber); - this._releaseVersion = releaseVersion; - this._country = country; - this._lat = lat; - this._lng = lng; - this._listenEvents = listenEvents; - this._listenEvents.hjHeard.on(this._hjHeard); - this._listenEvents.hjOnly.on(this._listenFinished); - this._listenEvents.noGlobalMatch.on(this._listenFinished); - this._listenEvents.nonInterruptingGlobal.on(this._listenFinished); - this._volumePlugin = volumePlugin; - this._volumePlugin.on('change', this._volumeChanged); - this._log = new jibo_log_1.Log('Jibo.Radio'); - }); - } - getCountry() { - return __awaiter(this, void 0, void 0, function* () { - return this._country; - }); - } - resizeArtwork(uri, width) { - return uri; - } - pause() { - return __awaiter(this, void 0, void 0, function* () { - if (this._mediaTagPlayPromise) { - try { - yield this._mediaTagPlayPromise; - } - catch (err) { - this._log.info('HTMLMediaElement#play rejected', err); - } - this._mediaTagPlayPromise = null; - } - if (this._audio) { - this._audio.pause(); - } - if (this._video) { - this._video.pause(); - } - }); - } - resume() { - return __awaiter(this, void 0, void 0, function* () { - if (this._mode === 'HLS' && !this._video - || this._mode !== 'HLS' && !this._audio) { - return; - } - try { - yield this.pause(); - } - catch (err) { - this._log.info('Error pausing stream', err); - } - this._mediaTagPlayPromise = this._promises.wrap(this._mode === Mode.HLS - ? this._video.play() - : this._audio.play()).catch(err => { - this._log.info('HTMLMediaElement#play rejected', err); - if (this._mode === Mode.HLS) { - this._handleVideoError(); - } - else { - this._handleAudioError(); - } - }); - }); - } - stop() { - return __awaiter(this, void 0, void 0, function* () { - this._lastSongData = undefined; - if (this._songDataSession) { - this._songDataSession.cancel(); - this._songDataSession = null; - } - this._songDataTimers.forEach(clearTimeout); - this._songDataTimers = []; - if (this._pollSongData) { - clearTimeout(this._pollSongData); - this._pollSongData = null; - } - this._icecastClient = null; - if (this._shoutcastServer) { - this._shoutcastServer.close(); - this._shoutcastServer = null; - } - if (this._hls) { - this._hls.off(HLS.Events.ERROR, this._handleHLSErrors); - this._hls.off(HLS.Events.FRAG_PARSING_METADATA, this._hlsFragParsing); - this._hls.off(HLS.Events.MANIFEST_PARSED, this._hlsManifestParsed); - this._hls.off(HLS.Events.MEDIA_ATTACHED, this._hlsMediaAttached); - this._hls.destroy(); - this._hls = null; - } - try { - yield this.pause(); - } - catch (err) { - this._log.info('Error during pause', err); - } - if (this._audio) { - this._audio.removeEventListener('loadeddata', this._handleMediaPlaying); - this._audio.removeEventListener('stalled', this._handleAudioError); - this._audio.removeEventListener('error', this._handleAudioError); - this._audio = null; - } - if (this._video) { - this._video.removeEventListener('loadeddata', this._handleMediaPlaying); - this._video.removeEventListener('error', this._handleVideoError); - this._video = null; - } - }); - } - destroy() { - this._listenEvents.hjHeard.off(this._hjHeard); - this._listenEvents.hjOnly.off(this._listenFinished); - this._listenEvents.noGlobalMatch.off(this._listenFinished); - this._listenEvents.nonInterruptingGlobal.off(this._listenFinished); - this._log = null; - this._playPromise = null; - this._playReject = null; - this._playResolve = null; - this._promises.cancel(); - this._promises = null; - this._volumePlugin.removeListener('change', this._volumeChanged); - } - stopAndDestroy() { - return __awaiter(this, void 0, void 0, function* () { - try { - yield this.stop(); - } - catch (err) { - this._log.warn('Error when stopping during cleanup', err); - } - this.destroy(); - }); - } - _handleStreamError(err) { - this._rejectOrEmit(err); - } - _streamHLS(uri, config = undefined, failover = false) { - return __awaiter(this, void 0, void 0, function* () { - this._log.debug('_streamHLS called', uri, config); - yield this.stop(); - this._mode = Mode.HLS; - this._hlsURI = uri; - this._hls = new HLS(Object.assign({}, config)); - this._hls.on(HLS.Events.MEDIA_ATTACHED, this._hlsMediaAttached); - this._hls.on(HLS.Events.MANIFEST_PARSED, this._hlsManifestParsed); - this._hls.on(HLS.Events.FRAG_PARSING_METADATA, this._hlsFragParsing); - this._hls.on(HLS.Events.ERROR, this._handleHLSErrors); - this._video = document.createElement('video'); - this._video.addEventListener('loadeddata', this._handleMediaPlaying); - this._video.addEventListener('error', this._handleVideoError); - if (failover) { - return this._hls.attachMedia(this._video); - } - return this._promises.wrap(RadioPlayer._promiseTimeout(this._setStreamPromiseHandlers(() => { - this._hls.attachMedia(this._video); - }), STREAM_TIMEOUT)); - }); - } - _fillMissingSongData(songData) { - return __awaiter(this, void 0, void 0, function* () { - songData = songData || {}; - if (!songData.mediaType || songData.mediaType === MediaType.Music) { - let artworkUrl = null; - if (songData.artworkUrl) { - try { - const response = yield axios_1.default.head(songData.artworkUrl); - if (response.status >= 200 && response.status < 300) { - artworkUrl = songData.artworkUrl; - } - } - catch (err) { - artworkUrl = null; - } - } - if (!songData.artist || !artworkUrl || !songData.title) { - this._log.info('Stream data was missing some fields; fetching from sideband'); - this._log.info('Stream data', songData); - const sidebandData = yield this._getSidebandData(); - if (sidebandData) { - this._log.info('Sideband data', sidebandData); - if (!artworkUrl && sidebandData.artworkUrl) { - songData.artworkUrl = sidebandData.artworkUrl; - } - if (!songData.artist && sidebandData.artist) { - songData.artist = sidebandData.artist; - } - if (!songData.title && sidebandData.artist) { - songData.title = sidebandData.title; - } - this._log.info('Combined data', songData); - } - } - else { - this._log.info('No sideband data found'); - } - } - return songData; - }); - } - _emitSongData(songData, fromSideband = false) { - return __awaiter(this, void 0, void 0, function* () { - const firstTime = this._lastSongData === undefined; - if (!this._log - || !songData && !this._lastSongData - || !firstTime && !RadioPlayer._songDataDifferent(songData, this._lastSongData)) { - return; - } - this._lastSongData = songData; - this._songDataSession = new jibo_cai_utils_1.CancelTokenSession(); - let filledSongData = songData; - if (!fromSideband) { - try { - filledSongData = yield this._songDataSession.wrap(this._fillMissingSongData(songData)); - } - catch (err) { - this._log.info('Failed to get sideband data', err); - } - } - if (this._mode === Mode.HLS && this._video && !firstTime) { - const end = this._video.buffered.length - ? this._video.buffered.end(this._video.buffered.length - 1) - : 0; - const current = this._video.currentTime; - const buffer = end - current; - const emitIn = end === 0 ? 0 : buffer + 5; - this._log.debug(`end: ${end}, current: ${current}, buffer: ${buffer}`); - this._log.debug(`Will emit songData in ${emitIn} seconds`, filledSongData); - const emitData = () => { - this.emit('song-data', filledSongData); - this._songDataTimers.shift(); - }; - this._songDataTimers.push(setTimeout(this._promises.wrapCallback(emitData), emitIn * 1000)); - } - else { - this.emit('song-data', filledSongData); - } - }); - } - _streamShoutcast(uri, failover = false) { - return __awaiter(this, void 0, void 0, function* () { - this._log.debug(`Streaming Shoutcast from ${uri}; failover ${failover}`); - yield this.stop(); - this._mode = Mode.Shoutcast; - try { - const hostname = url.parse(uri).hostname; - yield this._promises.wrap(RadioPlayer._promiseTimeout(promisify(cb => dns.resolve(hostname, cb)), DNS_TIMEOUT)); - } - catch (err) { - this._log.info('Shoutcast server hostname failed to resolve', err); - return failover - ? this._handleAudioError() - : this._setStreamPromiseHandlers(setImmediate(() => this._handleAudioError())); - } - this._icecastClient = yield this._promises.wrap(promisify(cb => icecast.get(uri, cb), false)); - this._icecastClient.on('metadata', (songData) => this._emitSongData(this._processShoutcastMetadata(icecast.parse(songData)))); - this._icecastClient.on('error', this._handleAudioError); - this._shoutcastServer = http.createServer((req, res) => { - res.setHeader('Cache-Control', 'no-cache, no-store'); - res.setHeader('Connection', 'close'); - res.setHeader('Content-Type', 'audio/aac'); - res.setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT'); - res.setHeader('Pragma', 'no-cache'); - this._icecastClient.pipe(res); - }); - this._shoutcastServer.listen(0, '127.0.0.1'); - yield promisify(cb => this._shoutcastServer.once('listening', cb)); - if (!this._shoutcastServer) { - return; - } - const port = this._shoutcastServer.address().port; - this._log.debug(`Shoutcast server listening on ${port}`); - this._audio = document.createElement('audio'); - this._audio.addEventListener('loadeddata', this._handleMediaPlaying); - this._audio.addEventListener('stalled', this._handleAudioError); - this._audio.addEventListener('error', this._handleAudioError); - this._audio.src = `http://127.0.0.1:${port}/`; - this._volume = this._volumePlugin.currentVolume; - if (failover) { - return this.resume(); - } - return this._promises.wrap(RadioPlayer._promiseTimeout(this._setStreamPromiseHandlers(() => this.resume()), STREAM_TIMEOUT)); - }); - } - _streamPLS(uri, failover = false) { - return __awaiter(this, void 0, void 0, function* () { - this._log.debug(`Streaming PLS from ${uri}`); - yield this.stop(); - this._mode = Mode.PLS; - try { - const plsContent = (yield this._promises.wrap(axios_1.default.get(uri))).data; - this._plsStreams = plsContent.split('\n') - .filter(url => url.startsWith('File')) - .map(url => url.split('=', 2)[1]); - this._plsStreamFirstIndex = this._plsStreamIndex = - Math.floor(Math.random() * this._plsStreams.length); - } - catch (err) { - return this._handleAudioError(); - } - this._audio = document.createElement('audio'); - this._audio.addEventListener('loadeddata', this._handleMediaPlaying); - this._audio.addEventListener('stalled', this._handleAudioError); - this._audio.addEventListener('error', this._handleAudioError); - this._volume = this._volumePlugin.currentVolume; - if (failover) { - return this.resume(); - } - return this._promises.wrap(RadioPlayer._promiseTimeout(this._setStreamPromiseHandlers(() => this._playPLSStream()), STREAM_TIMEOUT)); - }); - } - _streamStarted() { } - setCurrentlySpeaking(isCurrentlySpeaking) { - this._isCurrentlySpeaking = isCurrentlySpeaking; - this._volume = isCurrentlySpeaking ? HJ_VOLUME : this._volumePlugin.currentVolume; - } - get _volume() { - return this._audio ? this._audio.volume / VOLUME_NORMAL - : this._video ? this._video.volume / VOLUME_NORMAL - : 0; - } - set _volume(value) { - if (value < 1 || value > 10) { - throw new Error(`Value must be between 1 and 10, inclusive`); - } - const volume = value * VOLUME_NORMAL; - if (this._audio) { - this._audio.volume = volume; - } - if (this._video) { - this._video.volume = volume; - } - } - _playPLSStream() { - return __awaiter(this, void 0, void 0, function* () { - this._audio.src = this._plsStreams[this._plsStreamIndex]; - yield this.resume(); - const getAndEmitData = () => __awaiter(this, void 0, void 0, function* () { - const data = yield this._getSidebandData(); - yield this._emitSongData(data, true); - setTimeout(getAndEmitData, 1000); - }); - getAndEmitData(); - }); - } - _nextPLSStream(data) { - return __awaiter(this, void 0, void 0, function* () { - const oldIndex = this._plsStreamIndex; - if (!this._plsStreams) { - return this._handleStreamError(data); - } - if (++this._plsStreamIndex === this._plsStreams.length) { - this._plsStreamIndex = 0; - } - if (this._plsStreamIndex !== this._plsStreamFirstIndex) { - this._log.info(`PLS stream ${oldIndex} failed`); - yield this._playPLSStream(); - } - else { - this._handleStreamError(data); - } - }); - } - static _getMediaError(code) { - switch (code) { - case 1: return 'MEDIA_ERR_ABORTED'; - case 2: return 'MEDIA_ERR_NETWORK'; - case 3: return 'MEDIA_ERR_DECODE'; - case 4: return 'MEDIA_ERR_SRC_NOT_SUPPORTED'; - default: return 'UNKNOWN'; - } - } - _setStreamPromiseHandlers(startStream) { - if (this._playPromise) { - startStream(); - return this._playPromise; - } - return this._playPromise = this._promises.wrap(new Promise((resolve, reject) => { - this._playReject = reject; - this._playResolve = resolve; - startStream(); - })); - } - _resolveStreamPromise() { - if (this._playPromise) { - this._log.info('Resolving play promise'); - this._playResolve(); - this._playPromise = null; - this._playReject = null; - this._playResolve = null; - } - } - _rejectOrEmit(reason) { - if (this._playPromise) { - this._log.info('Rejecting play promise'); - this._playReject(reason); - this._playPromise = null; - this._playReject = null; - this._playResolve = null; - } - else { - this.emit('error', `Error while playing stream: ${reason}`); - } - } -} -exports.default = RadioPlayer; +const LocalRadioPlayer = require('../LocalRadioPlayer'); -},{"axios":undefined,"crypto":undefined,"dns":undefined,"events":undefined,"hls.js":undefined,"http":undefined,"icecast":undefined,"jibo-cai-utils":undefined,"jibo-log":undefined,"url":undefined}],2:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IHeartGenres = { - Alternative: 1, - ChristianAndGospel: 2, - ClassicRock: 3, - Classical: 4, - Country: 5, - HipHopAndRAndB: 6, - HipHop: 6, - Jazz: 7, - MixAndVariety: 8, - NewsAndTalk: 9, - Oldies: 10, - ReggaeAndIsland: 11, - Reggae: 11, - Rock: 12, - SoftRock: 13, - Spanish: 14, - Sports: 15, - Top40AndPop: 16, - Pop: 16, - World: 17, - EightiesAndNinetiesHits: 18, - Comedy: 19, - Dance: 77, - PublicRadio: 93, - NPR: 93, - HostsAndDJs: 95, - TrafficWeatherAndNews: 96, - Holiday: 97, - CollegeRadio: 98, - Mexico: 100, - Personalities: 101, - PopularArtists: 102, - EDM: 103, - RAndB: 104, - KidsAndFamily: 106, - Punk: 107, - Blues: 108, - International: 110, - Metal: 1191, - Latin: 1192, -}; - -},{}],3:[function(require,module,exports){ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const axios_1 = require("axios"); -const IHeartInterfaces_1 = require("./IHeartInterfaces"); -const RadioPlayer_1 = require("../RadioPlayer"); -const querystring = require("querystring"); -const CLIENT_VERSION = '1.0.0'; -const DEFAULT_NUM_STATIONS_PER_GENRE = 20; -const DEVICE_NAME = 'Jibo'; -const INITIAL_HOSTNAME = 'jibo.appliance'; -const INIT_ID = 8169; -const NATIONAL_DIGITAL = 575; -const PLAYER = 'iHeartRadioJibo'; -const GET_LOCATION_URI = `https://global.api.iheart.com/api/v3/locationConfig?hostname=${INITIAL_HOSTNAME}&version=1.0.0`; -const ENDPOINTS = Object.freeze({ - clientConfig: 'v1/bootstrap/getClientConfig', - countries: 'v2/content/countries', - login: 'v1/account/loginOrCreateOauthUser', - states: 'v2/content/states', - cities: 'v2/content/cities', - markets: 'v2/content/markets', - genres: 'v2/content/liveStationGenres', - liveStations: 'v2/content/liveStations', - metadata: 'v1/liveMetaData/getStationTrack', - reportStreamStarted: 'v1/liveRadio/reportStreamStarted', -}); -const DEFAULT_OPTIONS = Object.freeze({ - responseType: 'json', -}); -const HLS_CONFIG = Object.freeze({ - maxBufferLength: 10, - maxMaxBufferLength: 33, -}); -class IHeartPlayer extends RadioPlayer_1.default { - constructor() { - super(...arguments); - this._stationCache = {}; - this._getSidebandData = () => __awaiter(this, void 0, void 0, function* () { - if (!this._iHeartLog) { - return; - } - const result = yield this._promises.wrap(this._getSongData({ stationId: this._station.id })); - const metadata = result.trackRestLiteValues - && result.trackRestLiteValues.length - && result.trackRestLiteValues[0]; - if (!metadata) { - return null; - } - const fullLength = metadata.trackDuration || 0; - const minutes = Math.floor(fullLength / 60); - const seconds = fullLength - minutes * 60; - const artworkUrl = !metadata.imagePath || metadata.imagePath.includes('imscale') - ? null - : metadata.imagePath; - return { - artist: metadata.artistName, - title: metadata.title, - length: `${minutes}:${seconds < 10 ? `0${seconds}` : seconds}`, - artworkUrl, - }; - }); - } - static _getMediaType(fromIHeart) { - switch (fromIHeart) { - case 'M': return RadioPlayer_1.MediaType.Music; - case 'T': return RadioPlayer_1.MediaType.Talk; - case 'O': return RadioPlayer_1.MediaType.Other; - default: return null; - } - } - init(serialNumber, releaseVersion, country, lat, lng, listenEvents, volumePlugin) { - const _super = name => super[name]; - return __awaiter(this, void 0, void 0, function* () { - yield _super("init").call(this, serialNumber, releaseVersion, country, lat, lng, listenEvents, volumePlugin); - this._iHeartLog = this._log.createChild('iHeart'); - this._locationConfigPromise = this._promises.wrap(this._getLocation().catch(err => this._locationConfigError = err)); - this._initPromise = this._promises.wrap(this._init().catch(err => this._initError = err)); - }); - } - getCountry() { - return __awaiter(this, void 0, void 0, function* () { - yield this._locationConfigPromise; - if (this._locationConfigError) { - throw this._locationConfigError; - } - return this._countryCode; - }); - } - getStations(options = {}) { - return __awaiter(this, void 0, void 0, function* () { - yield this._initPromise; - if (this._initError) { - throw this._initError; - } - const limit = options.limit || DEFAULT_NUM_STATIONS_PER_GENRE; - const genreId = IHeartInterfaces_1.IHeartGenres[options.genreName]; - let stations = yield this._promises.wrap(this._getLiveStations(Object.assign({ genreId }, (options.locality === RadioPlayer_1.Locality.Local - ? { lat: this._lat, lng: this._lng } - : { marketId: NATIONAL_DIGITAL }), { limit }))); - stations = stations.sort((left, right) => { - if (!left.streams || !right.streams) { - return left.streams ? -1 : right.streams ? 1 : 0; - } - const leftScore = left.streams.hls_stream ? 2 : - left.streams.shoutcast_stream ? 1 : - 0; - const rightScore = right.streams.hls_stream ? 2 : - right.streams.shoutcast_stream ? 1 : - 0; - return rightScore - leftScore; - }); - if (options.preferredStation) { - const station = stations.find(station => station.callLetters === options.preferredStation); - if (station) { - stations = stations.sort((left, right) => { - const leftScore = left === station ? 1 : 0; - const rightScore = right === station ? 1 : 0; - return rightScore - leftScore; - }); - } - else { - const gottenStations = yield this._promises.wrap(this._getLiveStations({ - callLetters: options.preferredStation, - })); - if (gottenStations && gottenStations.length) { - stations = [gottenStations[0], ...stations.slice(0, limit - 1)]; - } - } - } - stations.forEach((station) => { - this._stationCache[station.callLetters] = station; - }); - return stations.map((station) => { - return { - band: station.band, - callLetters: station.callLetters, - description: station.description, - frequency: station.freq, - logoUrl: station.logo, - name: station.name, - website: station.website, - }; - }); - }); - } - play(callLetters) { - return __awaiter(this, void 0, void 0, function* () { - this._iHeartLog.info(`Playing ${callLetters}`); - yield this._initPromise; - if (this._initError) { - throw this._initError; - } - const station = this._stationCache[callLetters]; - if (station) { - this._station = station; - } - else { - const stations = yield this._promises.wrap(this._getLiveStations({ - callLetters, - limit: 1, - })); - if (!stations.length) { - throw new Error(`Station ${callLetters} not found`); - } - this._station = - this._stationCache[this._station.callLetters] = - stations[0]; - } - return this._promises.wrap(this._streamStation()); - }); - } - resizeArtwork(uri, width) { - const normalized = Math.min(width, 1920); - return `http://img.iheart.com/sca/imscale?w=${normalized}&img=${uri}`; - } - destroy() { - super.destroy(); - this._initError = null; - this._initPromise = null; - this._locationConfigError = null; - this._locationConfigPromise = null; - this._session = null; - this._station = null; - this._stationCache = null; - } - _processHLSMetadata(titleField) { - if (titleField.match(/comment=".*"/) - || titleField.match(/text=\\?"Spot Block\\?"/) - || titleField.match(/text=\\?"Spot Block End\\?"/)) { - return { mediaType: RadioPlayer_1.MediaType.Talk }; - } - const mediaTypeMatch = titleField.match(/song_spot=\\"([MTO])\\"/); - const mediaType = IHeartPlayer._getMediaType(mediaTypeMatch && mediaTypeMatch[1]); - const titleMatch = titleField.match(/title="(.*?)"/); - const title = titleMatch && titleMatch[1]; - const artistMatch = titleField.match(/artist="(.*?)"/); - const artistRaw = artistMatch && artistMatch[1]; - const artist = artistRaw ? artistRaw.split('|')[0].trim() : null; - const lengthMatch = titleField.match(/length=\\"([0-9:]+?)\\"/); - const length = lengthMatch && lengthMatch[1]; - const artworkUrlMatch = titleField.match(/amgArtworkURL=\\"(.*?)\\"/); - const artworkUrlRaw = artworkUrlMatch && artworkUrlMatch[1]; - const artworkUrl = !artworkUrlRaw || artworkUrlRaw.includes('imscale') - ? null - : artworkUrlRaw; - return { mediaType, artist, title, length, artworkUrl }; - } - _processShoutcastMetadata(metadata) { - this._iHeartLog.debug('Processing Shoutcast metadata', metadata); - if (!metadata.StreamTitle) { - return {}; - } - const [artist, rawTitle] = metadata.StreamTitle.split(' - '); - const title = rawTitle === 'text' ? '' : rawTitle; - return { artist, title }; - } - _handleStreamError(data) { - const streams = this._station.streams; - if (this._mode === RadioPlayer_1.Mode.HLS && streams.shoutcast_stream) { - this._iHeartLog.info('HLS stream failed; trying Shoutcast'); - this._streamShoutcast(streams.shoutcast_stream, true); - } - else if ((this._mode === RadioPlayer_1.Mode.HLS || this._mode === RadioPlayer_1.Mode.Shoutcast) - && streams.pls_stream) { - this._iHeartLog.info('HLS and Shoutcast failed; trying PLS'); - this._streamPLS(streams.pls_stream, true); - } - else { - this._iHeartLog.info('All streams failed; emitting error'); - super._handleStreamError(data); - } - } - _streamStarted() { - if (!this._session) { - this._iHeartLog.info('No active session when trying to report start of stream'); - return; - } - const params = new URLSearchParams(); - params.append('profileId', this._session.profileId.toString()); - params.append('sessionId', this._session.sessionId); - params.append('playedFrom', '300'); - params.append('host', this._iHeartHostname); - params.append('parentId', this._station.id.toString()); - try { - this._promises.wrap(axios_1.default.post(this._getURI(ENDPOINTS.reportStreamStarted), params)); - } - catch (err) { - this._iHeartLog.info('Error reporting start of stream', err); - } - } - _init() { - return __awaiter(this, void 0, void 0, function* () { - yield this._locationConfigPromise; - if (this._locationConfigError) { - throw this._locationConfigError; - } - yield this._promises.wrap(this._login()); - }); - } - _getLocation() { - return __awaiter(this, void 0, void 0, function* () { - const result = yield this._promises.wrap(axios_1.default.get(GET_LOCATION_URI)); - this._countryCode = result.data.countryCode.toLowerCase(); - this._iHeartBaseURI = result.data.config.apiUrl; - this._iHeartHostname = result.data.config.hostName; - this._iHeartTerminal = result.data.config.terminalId; - }); - } - _getURI(endpoint) { - return `${this._iHeartBaseURI}/api/${endpoint}`; - } - _login() { - return __awaiter(this, void 0, void 0, function* () { - const params = new URLSearchParams(); - params.append('accessToken', 'anon'); - params.append('accessTokenType', 'anon'); - params.append('deviceId', this._deviceId); - params.append('deviceName', `anon${this._deviceId}`); - params.append('host', this._iHeartHostname); - params.append('oauthUuid', this._deviceId); - params.append('oauthoverride', 'false'); - this._session = yield this._promises.wrap(this._post(ENDPOINTS.login, params)); - this._iHeartLog.debug('login completed', this._session); - }); - } - _get(endpoint, options = undefined) { - return __awaiter(this, void 0, void 0, function* () { - options = Object.assign({}, options); - options.headers = Object.assign({}, options.headers, { 'X-hostName': this._iHeartHostname }); - const result = yield axios_1.default.get(this._getURI(endpoint), Object.assign({}, DEFAULT_OPTIONS, options)); - return result.data; - }); - } - _getHits(endpoint, options = undefined) { - return __awaiter(this, void 0, void 0, function* () { - const result = yield this._promises.wrap(this._get(endpoint, options)); - return result.hits; - }); - } - _post(endpoint, data = undefined, options = undefined) { - return __awaiter(this, void 0, void 0, function* () { - options = Object.assign({}, options); - options.headers = Object.assign({}, options.headers, { 'X-hostName': this._iHeartHostname }); - const result = yield this._promises.wrap(axios_1.default.post(this._getURI(endpoint), data, Object.assign({}, DEFAULT_OPTIONS, options))); - return result.data; - }); - } - _getLiveStations(params) { - return this._promises.wrap(this._getHits(ENDPOINTS.liveStations, { params })); - } - _getSongData(params) { - return this._promises.wrap(this._get(ENDPOINTS.metadata, { params })); - } - _streamStation() { - return __awaiter(this, void 0, void 0, function* () { - const streams = this._station.streams; - if (streams.secure_hls_stream) { - return this._promises.wrap(this._iHeartStreamHLS(streams.secure_hls_stream)); - } - else if (streams.hls_stream) { - return this._promises.wrap(this._iHeartStreamHLS(streams.hls_stream)); - } - else if (streams.shoutcast_stream) { - return this._promises.wrap(this._streamShoutcast(streams.shoutcast_stream)); - } - else if (streams.pls_stream) { - return this._promises.wrap(this._streamPLS(streams.pls_stream)); - } - throw new Error('No compatible stream found'); - }); - } - _iHeartStreamHLS(stream) { - return __awaiter(this, void 0, void 0, function* () { - const qs = querystring.stringify({ - iheartradioversion: CLIENT_VERSION, - Deviceid: this._deviceId, - clienttype: DEVICE_NAME, - osVersion: this._releaseVersion, - devicename: DEVICE_NAME, - callLetters: this._station.callLetters, - Streamid: this._station.id, - terminalid: this._iHeartTerminal, - init_id: INIT_ID, - fb_broadcast: 0, - at: 0, - pname: DEVICE_NAME, - listenerId: this._deviceId, - amsparams: `playerid:${PLAYER};skey=${new Date().toISOString()}`, - }); - const uri = `${stream}?${qs}`; - return this._promises.wrap(this._streamHLS(uri, HLS_CONFIG)); - }); - } -} -exports.default = IHeartPlayer; - -},{"../RadioPlayer":1,"./IHeartInterfaces":2,"axios":undefined,"querystring":undefined}],4:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const IHeartPlayer_1 = require("./IHeartPlayer"); -exports.IHeartPlayer = IHeartPlayer_1.default; - -},{"./IHeartPlayer":3}],5:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const iHeart_1 = require("./iHeart"); -const RadioPlayer_1 = require("./RadioPlayer"); -exports.RadioPlayer = RadioPlayer_1.default; -exports.Locality = RadioPlayer_1.Locality; -exports.MediaType = RadioPlayer_1.MediaType; function createRadio() { - return new iHeart_1.IHeartPlayer(); + return new LocalRadioPlayer(); } -exports.createRadio = createRadio; - -},{"./RadioPlayer":1,"./iHeart":4}]},{},[5])(5) -}); - -//# sourceMappingURL=jibo-radio.js.map +module.exports = createRadio; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/606C56A5-E96E-4D44-9456-A0A238554311.png b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/606C56A5-E96E-4D44-9456-A0A238554311.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7aceb965acd1881b6877a112a443fc8ed45207 GIT binary patch literal 80895 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 Usb-LrPy+z&=^8_8we6$+4{2=TdH?_b literal 0 HcmV?d00001 diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/606C56A5-E96E-4D44-9456-A0A238554311.png~ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/606C56A5-E96E-4D44-9456-A0A238554311.png~ new file mode 100644 index 0000000000000000000000000000000000000000..5c3247ffddf9aee3a8163822d3c4be78bd53dd0e GIT binary patch literal 176803 zcmeFaXH?Ve*Y7FSf`}E7s#1c|1wt>10-=f(kftCIAoLchsNk*iMClMU0aOG8LN7tV z#E7(@bP^ze5NQ&c^z-w6=9zP5oxghC%)FVnRHDlT`*&UYv-fuw;^WH}M!fq3_wCxX zix*;i@yf1Udwh58;=ZwUGhH#i{@K0fTd$9wdAN^*d%u99Q}aDG)(h4l zusnf90gD0_1uP0!6tE~@QNW^rMFEQf76mK{SQM}*U{S!LfJFg|0u}`<3Ro1dC}2^* zqJTvKivkt}EDBf@uqa?rz@mUf0gD0_1uP0!6tE~@QNW^rMFEQf76mK{SQM}*U{S!L zfJFg|0u}`<3Ro1dC}2^*qJTvKivkt}EDHWVqd?`Z_kX_^0PDN{S#N#7dfNvU1uP0! z6tF1x|2G90jT^hF^W{6awrOXtUp~XndGvB~5}tgp9^db*aIh@hUB%;T|1DXF3jf^yV%%SFIb1b@&pzIEDBf@uqa?rz@mUf0gD0_1uP0!6tE~@QNW^rMFEQf z76mK{SQM}*U{S!LfJFg|0u}`<3Ro1dC}2^*qJTvKi-P|*DR3ItvuV@ea>@n_YS?Sx z(y+rT5;mhYS+SA4+_N^LD|+PbUwm7lOX|VSGrN^4i2p<=WZtt|JGKGZ_<$Sq#6rVP`d}YPh^k zVXB{ZWP?3vac*O3BNO~CAui$dP0Ef+3$(7JP3o_EN=}LUuzpS|&Ixh%Yo+l~=<~O= z-Bj)dlFfuP@l{|C?81w7{&eGD^I*#r;}w$?3we~?nOcAUXS6rOD7OiZOtqVqC8>7G zwY{e?gcA(E@XaO*$9j5K07JuGsrEv-4=G?oxi+xe)V~aqC&dvVoMpcZeydq3iz?`c>!k)4BE|}HvVYZAcS%=TWiHQ*mSVpZvk^)`IUKY zm8nOS`8mV6SFa!co#P)yF?wy$LuOs6r?bEwX6Z&f_!S$9VIo)>YjeAk<_{4P(7bZV zsPyL|M%=|t0a}5VLx4Sol{M6%J*^Z;OGsX>w%%GgZGu>Y=#zXT%0$=oIdh-4d%7b5F5lR4F1a z0v!DHh3HM=6$_7VsYdddGf%(zPrJm^?h}8^HK0DCB>zu5XHNn?v6vZEZ9Zt-Wu=P$ zM-T>{au{R=CX%XUw0QH!J&3)0}2CL zPy-`ah{^ZJRN4oK(exDkMXLCozdq)>VNT7nEuY{T)w&@nUV&d9$svHx2*W;h+N43U zc}g;{Hq`GBA+YyT?B1~sh|m#H1orleM4nDFhm-~h=v4!wve2vk)}**ce3B?*-E8dn zm+dEDS?=QaRiv0CND2hfgG6Z(JIgm0X-{ciX-l+(%+1rug_$E{LL?aqNmepX9-^)W ztqrV&&`9)%B?=P6{=lo_D`ePBfC+l>s7^s!hcd;Tb=p^$DMbS?Fe&Gt0S zn+QXI-v?roiX?BEteAV?j7a#T*TtzR`u*CgZP z7q8UJdoHU-dS|oAKMlk@5<%J{8WA#}K8SbPusjrbUPyHgr7ZyuBz3FgAsf`;=Kj`9 zGKP2mBM{0$7ZoA7X6S#7If7~DBm8>+urBwWi$Z5QjH5C)HP_6UL$r_p+N#a!BO0#L zXnj-EP1sX5gxojdxvHJzD5+CA`31v!TBi>jlY_txP%$p{%m__U3x3C+vv-bt!lF>i0vlM zx;)&!7Go~dXX>37=#t2R#6dLgv@RmkB_2tXnv!!GKx@X#*R*)R(*asyUZAh#q+rWl z@E$0XgoU|tT+BWd6?tP2)9v~gs*K<1pr-B+nUi1ClNk->;yM&4hcU&Vry#ir2M)oW z$`^-YArq}G_E)me$fUuAe3~*bT0+c>oVj_6`JMKW7=SF4NH!NuSyHZr`)|46XiOrR zm`C)6=(R-^Y*a8zW_b#EFFYT~NYJ#o5uxdnZlc0+ZMF2VJLziBn6k9!ivSFxAL z7uM|e)+cJkYE$}OgpLCJN~mYSE2|aY5m7PGzf7Kk^U=| zJ;Pd2j}W7!P?k*y;b#$gHtCz{Yfyg^5_labKr zThKLhHtJK29EL^WV3SiDr7Z$wX!+&W-yo3LsEi2E+70G6S^yD*%)%+aJ^hV=*svF3 z#88(8@&SPcCbAJL5#XSuipGoO&gTR*2VW@xpC#yAW5;@^SG{)*pJ6R1njG6i0%O2Dbj=j0hs`CA#-cy%Kbj!a<_6GDB+3g`$mn`*M`B zL^U1Hvmy7#LqwZWv-#Tn9vVe0ONEqJl=;ch8IaRYjfnUK)7PgP=qYofQi(kb($F%S&TOpt@Ik4>Yhvz>}wDY32aRQ2MMP~D69noSTpF$sTgrg z!znnF`IhDf5ek^gTnfNNktTB;`0Ax#ll{5_XQ3R1r6>ne=kLsQLFKx}&P>mlwk3DxHA7li`YmILAhv-EZ7tG04%z+5W%|-b}a)en}ClkYZ@wO7wwsqfx%UL04Z2&S#6nK z$X}7vQpYPI(v3+}M!!Idqn1F{7RFI25z1>9n2%{&5F!5qkaf7;8K^SB9+^~E9!*Ns zkWUA+|Mz`0uebB#^wHBfZiA8#;5^>i1G8|P9!A_&KkrD76~3B)e*f2}rNKXRtg zM>Fd~K2k=q&(yF7|Db&HCk+lLj}R#!f?GDF3g=>fQVJ5m965Q|+s>LF46}C^BnqO( zUQW9z!zMGpQVI08KDv%*qvVPlWkIlO_PO4Wj*1NnA+-W;d&deri7nwQ`Q#-(BZfP= zy%UK*pUQh9oS_9Z(HwYc3>qY8ml0B>rj7OINXwEhWgR)@jD#`evbooOV^e`{{RA zxD1u?>rci&nR6)^wJMu&a;&r5uRJG*+6VYsKEx@0AAoICo14l?xwlFI2X(IpD z5Z2F?WOxtEnNW}b-fIRtn>jbS?D;Cgt7AGUlDuPcn-S7$N7wdLj2zx7qy$mdoKXV= zdrIeR71)<3sb#T5VOSGX*$Ag)X^~_)h*_MVA&I*Y)qtCZS}><*O+*+{NTM-m#Y{fc zPJ;1D7&hr%ak;dmw&WW_Rg0pvea$<{bv4y5c; zjO8AbbuFAU?E!=+3~%U=WFvRDoWscziGq!W8=+a=%6}}c-ksnoN$-m?AmPTvVu|fa zK33~N#L6Q_VkV@!Uaoq%b_N{9SAU8FOU|YM(12=P{d;H@#2AQ?Rj478glRW>1adTK zO3z8zRDmACi7RiOh2F-YH4^amyDuvW?wt(N7Ti;?Shf?WJEBWr2JU<-*QSKq&n%;@ z(1hH<#Ln`?vf@Q>;L_sU>K(le@Z6@hhA!iiFv?W-X@evjPO`csnl1cv_*5;#Kao}r zi6(m#0+KZQ@!*$k*TjLPLDfG$T`T(#eOWYXNuf^7r~)77u;{5#x?6H<+7Ea@*{+u% zJY#ZCRzWhhC+CCeodF5*j21@}LGG3iQ5q9N8UW!aLS5q=qcPOX-=7qh$Uheyazpd1 zfsmT*S06uICYUX-cDlfPS5HudIeSGXO0;5i(vILj32_{erk90+ptaj1O1Yd8$tGZtEmorut{|}jWcVvNz(=G!eXZ6)P{46<>gik zoMd1$jlI^VOkSm%8@bz#VPuiaQfAZ_*0{(tUg&%J)mzsH1tz;j~ zZWS%wlsIl_#+jC_&qJ1rsy-OiO*>5VCOSZb)K)C#5P%T1B^4y{5Aaz6+EYsdyyoZc zL7LuDBhDj%It$C@WVa{w%*^%uo4t3S%#gTP4^* z7PkYN9bx;95+vTGvR8gW0_>!l(u(X?Ew#nAWgYtB+jIRip&eHI*tkRL}?B`s_?p z!NTUKjX8Y*!miXcYN)er1fH(Zo4gjdp^nc8L3yLVzGkapeWpU1ns?e5knEVK4B#=7 zW|&PhUP$TtLQt~tTT*g zgtm5TQ8(DmOqg)`-63|7%;(}qy>gd8(wbrK^N3M^hRa28AdRFfAr5H`GC&m>=I;e~ zH9pZ%LgdnmOF#L)-@=MGJ}bhC?Vw z8cEDsI3TqZ;C3W#biHJ?SxM$h?o8H_R`3v}FDzSK#h>&2pTy(n=DxtA_xPCwm+;S; zhH;8J@ryjvHBMJf!xv#qcY^wSQUf2}2Vb(6sx|Sa(mIF_e(4MoTM3_@uZ0L7NrIG~ z`5?AC_3&VglHrKJr8RPT#m7ynxAVG-cT4DBs=bAsn`VXTql8Nr6C>v)hoi&DJUXij zIRmaw5+lW^>WhtYfg6GFbxnJ{4rdj=zzu6XL)z4Gum@@Wi!;(kO5_=Ji-?m{Fwe`} zg!#|Y(ukGFHc-0Bde7M{_;ZIs2$98bwDnsc%+j&~3)k;tyKc>C!%JakoZN zwrX$4wxw+<>IqU;j~(5mHA$yi_s~~DsOD+`BJ2zRJ;MQP*Mbj z)^aIrthQS)Dpu6FjxwW!r!LR-z#8#k#g$gC z`W#B%qd?OLhwMhfWIz(h_yG01wp6X7{}3&VcnmRu5CO{Qq)$q7sY;!1;DvtkffV^p zwM6G)AJkf&r_LV)O3Yn_A8HycP^-{N`H-(1J%fkbV?wePItr)jwD;kAmYpdb1l@`a za~`67lRn_eFoX!Q5#cErovE!3oW&{P&&;Q#ch@!`M%wB+YcSG|Jqa-CvLRb7dT+v3U8njD`bgDv(w!h7wP5p-oMG)+M?maN5bKea zpe^VVF)6txAx|G91$SBTX|jKie%aYkn79W>LBLbRs>#07EWBP?3-(FCzvu`zPdcPA z=<;=Xxs|3xq$86hd`!1h;U>&3S_v@`N#;nm2sWuQtuk{3l$+jkc3t#*X)5n5uE}|z z3d|XnxI~Zm)zA#vTCN}ZJ)+ht?A0A7s`S-v9du|<-ncoTX1{_;I5K>cU2dlGWWx)y z_*SZh+^!^g;%sh+OALRZLfTB~OuBFi_MfdOS}gGvLL3417Ea%kg(@|mg|O;ml*tLS z_ZP5t0->UvyC*y_IGaHCG8-*ZOa^;>ad_lxU)o)OZrwb~u-wW?iBMZJVJ^^SiKmFl zNU;C#ncCa_`7Wz2D*o7k*SsehQDJzWQ4|=HEDi=Ak}9Qrjzyi{%iL2=a=I7$6a|uJjeWu zv}*=kzpajE8#o<}FN~#@d4Hj6m6kOwT3ws_hy6IjHfOHWa0Z3-qoxuokOs)@uNQgZ zB9*K13-9^~*Qg5Fp7_OYdwTwcR0w=cB)RWn-L&k+qV)Xq7SlT3`{5qGvaG@Gp9m~*};)fB$-B*rwD2unMj#UG`% z!fA*kEWvdgjM&_%_*g_dXhTBHcrHU*5pKvFq(u_l5NPBPWDkPB;nvSQxs+AWtWs;; z-fR@C^-hm9R>|4LLwl&Xn=s%zn8e>V^vN%jSwQ207-^_0*4hI-7zzym zF)D!`A=LEo`{RO9b9#moQ_el#kJa2I4;CWww|5f2QaWn27w??@?e`pe`N#10q}81) z7j~SV%eEWj@v?}qni=Uo?XxPzHO?QO&7ZY#b3jgWK4&J?P6ryZP>KXe0ir$=xTsey z_M{KNJ9YJXI^C0r{Ecox>IEPD+p-HZVy5HljhqeX%ilwS>9F1@Rjn*7e3X5kXPq9$ z*X|t6ax0-{78dIP{3ug0szDwqPM{(-q^gZqOoPp8)st5U_Qe z>zQN?#-~f!8#_YljgiLw1FgS@u3v)v7X1|glwGe_F6^+Ap^go8x6Nf=Ja(^e+Ks0< zQacN*>62QMC?uy6(wfN6+|~x#^vSetVmv}kQVe1nxOtn2#E2ik?oyYFN}k|KXmM*r$n{M z98y~f9>t8Kp@H7`yd+3cB=))Z;lRNA{M!ZX+~}VpL5-`LV$+(aInPYO6$g&#`UCW# z-sML8P^*&2?E+pAHz_^SBvZ}P?QY0bDFxHKr$FU#uGXYHyxf_zQM@|hb%ZbznPYEO zWb9PbklrWRwzXrl-bj`@^7|s&$%=D5y~9nStr09l>{iOO0cd&HEY4`QF|3^gd-O3*9i z6_(5DbY1Be_1y07_jIzmDpco9*Yrjy8>TZ>M2nJ#K6RrGYN~1|X`IzK4ZlS~34iZ= zGb~qY^{a6GU)u)YVpon=`k8#$pIEsiqrH znjpCwAxH09eeymO?o9fy>i#{W$XK_xJ?KkWyB!q|Z{)@YeREAHYe<1R`qWXD{F1-9 z7Hl_|7}4C(SB>7RMKE8`x@ZjId!SceBv~(c+`I~ccNfl5zhAbmkb{}0Y0_r08J*ZU z*)TNf_WL-H;})Yp%akd*T>iRq?JC{o>yev?X7|yIZEb@-RoImK`x^AuUx{g0rS>L} zaPx^;2umr73E&xT^nudvxpxoVE>XzY<$hVDCW`;_t))B%dZhNvf>XGEoSZVOv`E>aME8D~8POQ$^tpz}uEAZI$0j*>V_+k`y+VxyRPKrucU>e<4t z^D6*<+ORBLW+=I(6Fk4DqDK0t0a3cz{Buf;!S%z_uoqDy)qN{9O>U^6Wmwer$gfsj z7RF7v5!!HPW&_O!v7H^%gIS#@fn?7N0+Hi9h|gTcY!snEiAuM?E#6pXf)=9&_qhMw z0cEY9$Cf>FkQjJM-+9AjI_P(XYtTjMT;FtFIxG@s{n`4~UoJN#;Z|_=fI`zCP9yoG z9LA+C@d`{a)lJ_F2gV!Rcpst5+F^@pY;d&xhY` zqFdt_TjW8r2q2LlwBANnK|DX|)|A+# zDJ9MK*0?UIdvki_UG)C>8Ey{#ww^mL`T|#{8+*dvtoAAZV&Vvr93scWslhJ+ZuXqk zOZmnBs!N!B}It^Mk;TNbP+11%Rgf;vcvqXXQJ!Vdlu%ZFD5y}{cZwnJ;r{s zeNCb8G{IjdeLJ=q3g4S>e>%f5TKD$bY`IUs&cZxq`qt8{rP53m(2#-pQ-DbHf;dK0 z1DbN307i0($*JcC)w`yv7p)$OnhV>5_Sd-E znrlTgZeXs|LA*hXSlw9)capWl=`pYM9Nss4wzSf2XV&rU;&gKeuitKx2qlZ7$n;u!Ty4A8G+xL6J9h$}+T`RQ3=ez2h6Tq~zY&%P=ClQSLtp zz%0Cn7!Ax63ng(T_)kI=m)4+THXMWxJS!DRq7_1Y`tz^B{!4Dx!*+6?0s|tibB5H= zJ8ART!?IA08`nq|L{$97+g84i#GFMtUf~L#NEPou-2#4?)_430Q4+}?>4O;7f?pt^+(V<8 z6SNFkAu$ukirXpJ=ffYEOHI)CwbMX7pQW}Qdh}(xO$|4H6mLSf=kU!&df3jg+jR@` zUP+NeG@9C=3%|ikp(!AXB+^ZSjn^xTVP7)HJMf={uctR6-!&N~>&<%Iw&E&5p%Xjd zm7US)t95NJziSBmHtv4s+}53UuRLzfPu<#@eX~Kk*(v0)Q2B8nb>K8i%(5qhOn{MV z-2EA}EaEI;H%N{hcWNz}HUvbbZ99{lbzGuQMdAtSx?t=Y(5YYh)bHB#V_Zk(Mh{@V zDRujMV}Gjep!ISt?J98y5pA&^8Tp8&Nz?`6I1HGWl%>o+nsK!~9TVL-ozMxF`{MZS zV#yzz`vv>X(?tiKOUT6yQB?f}JxZnTAdn%NaC!49jH-pujkh>6{}I|8kqV4l=gpGL zn$ofA!>1SKk=x7B*=mN)@3GGtUQ8?qFIH?>zq6iFRm=j06@_7zRb}7Zfc(CV`MiO+ zDUobCmpLrUn9@u)8*J@1EM3S|%5|%RKISUP=$lscjoOKHfOO7FTWHCaRiummPO0BW zY0ma9k$L^IthQrWRc1=rUZ$|FYkbH0_-y^4)^ePXLi$Mh)TpW zkoXp~ANnH|$_Ce-TPf>wrwPO|7DB%e!UEcPN@8N|IjCgD7C0OgbgOSm6I$_&4_PYt z2=qv*(^&NBuqLqfpbDk-rU4Z`(BI3d=U1DfWp9w&C*{#^|i zb6vXY{_>=(%iE`YbB;mTY3cerrRY6c9bPJ)fKSVZ;EIvkE}!LrjtB>0L$cF&y@v+{ z(fp48m8mFFa)QYhHn1t$fW(uNP2M6zXqPUQb>zf)I#Ekv$a>VK?A(xtIZ00gY)Kod zKtqE%<*un?2}#9$CFos471RFlKc56i3iOF!Ij} zKZ%AaDXB&^=HRgVL+s7~JsHGOQ z9RA&Un2g=1sm4yFwe~>&Y6NZHPR>m#qk2@6w5qo6-7S||y=UjPvzjgq@_VkDA26QF z)mDYWm@&W#fge#I2>o%CKX&MO_lJcg+svYr;X6!gN+f}qk$h)SoowwBpS;x$F-< zjqRoSpkldIO_kqICpsj5jJ>t-j72UoqbLFL8Zv2UeV#HH+1;utQRujdCKEq_yd|+4 z)M=*q-7wof$t20rHCwIV<0$VjgwgrhMTc8G1p7SQ=wB_7l{+6?hSgwrcS8=s&pFYd za8wd^QW>R&Qn&quMx#vup*|bwCb?Tm&1}Ui*jV#ICl>T>I~0ZfR}t+dtur# zbN#oT{Y>fyKIez6Y@XLlc+@wO4X3_OYgNEOR}W8seX%Epa3vJU+AID=wA(};U@9pB zpRA$LA@L1c@ms*)YwZ*Ep7y?0p&lp2l8QulQlzS44fl3*4}NJ|$XvLkAh|v=tkhza z;Xgm^2=r)y;VoE07H;8x*+F0!~npJ^i*@%uQ#ee%BXo zHaQk*Wf39AZwX$}sUCH+bzpbKCh~LCYYS>rePXT<^ASZ7)sVr4g>hOWBwGzg5kb^G zz+O4dYQ^D~^V0j1#}{TIW_s47r7TfeRUsoa9R(XUx`je~qKiNjamWG+_6_ggjnH8@ z3Rou~Q*b60=1JyFDGlOq2WB%Z4U*ju45>0z@#DOG#IoSzgI9DX^w<$4( zJsK6@(8l#NwrSO&KCUM!^eQ`p`&1R@D#)cgjc$Yhd_(63j3kvrMV3mzzK306 z{sgv?5|M2{b72THB!NCJ8y}qoUa9|XX^90k2D21;aqTi|>Xsoozg4Q7u3X-zV=}e7 z%CFI*ifq)Ak6&`Cia{qIzalKMQTf<8q17){c0O}h5oog}02R_9Vh92y0V4}=jq(T6 z&+^|Qd{lj>T^bWRT!Fsr{Dt5)0E}s=YQz)37D_cDS*jH1{A-`Ag_Qf0dzKrN2a)D8 zEvVsziwu=s%RZYt$I*9Qwr>C-x;VW#y?L?fw|077AN7D!+iIK3>^f$dp3CeuFIPv{ zr`+-G26(TSz#P2v(_qR%4!?DXnSA!Jw1y&7X{DW52y{I3OrxH8xqnTxno)JkARMz6SUXq8-g^pF}IzC@A!eS>3Em|aeHOM4*aQo_XcASln^%LDUMidjmAeps%a zf!7W3#22R3!5qcS(uH8g>uKMydN&%zrylWuo<;4CBLDlP!89Uq;uo*VeSf^@ehj;krh zK5YZHVd@tpMpk^L^V>jHDgC3jfsrqLE%IcaZT(I$} zJvw?OO$h8`>LsA68j`wc5^PZgFQ@HJkk;6fUJ^asbE?hS_ROId4rn zjMuO3g$)aE4RyD6!+C0W>P|J`1Ryp)?1`~yJ6+S+y z{E@@I7HsQzywx=dw|MNrP(wHS_e)5JiklYRX~H?c$nPez5~KIn*OfGx$Z!{`;IiXd zdv-Nt)n@H&$2>s&4x{tUQU+{lYPHn|0X)NeDxc&diDZa(dIIX|fM(m4eAayU*=)1v zL+%`ABYhus^t`5Y^2$X)zukxi7NLK%1AFYpgnGwU6iODR@0=lT+eJ5$gL+UBQ`BO_ z_S5%wk)EIsh-mJT!UQE7I~C?n!WHa9l3vaj$5+XX=21?+qbmpU%I)i58KR@|+)P2EY@Kv{Sa*$j~@U5PSq=vE(V4kT<>_HeH zlcgxe|6aRcYB11`Es3G#a7{xO2G3=G3*^O0ljrX-jD_s`R{Phi^CCN`aM-xI_^&qL zn)SIXb#K%}kyN@Fkd?-?&9=^DRc`Mb>sh6A+x?;C7qE9GRaKx=rLtbYCkL z%2g2EsG9}sKn$LSQVr=tlIa%S8NyGsW#G5`U6{F;b|IXJZH-9mVE3o)HR-{m)3c%4 zw_2C2l^=LI-F4)kiu!O6u#cTjp{7H|n$5e5m46p)MZN9!}ejEr$7F#8P z=I&eD=ZYQmIS3j%dPRN7zu$IHENsTP%-Z@4W;E^4+h4m(6dZMD!*UgaVZaEybXbdt z&qr>1eQrd!Nj;Ku1X_6(K>F|I#&o|`y7>Sv-BI;Qt8XRtXy|N3dHjYhu5w{*IUGn1 z&Jop}4jfzZ8Rn>+As`A7K#rEW8NixusDB%<6zV=MfaZdZ?)l6u#VbtT+>zxK7OHXb zlKM?u<7wkWZ&-7bKzCK9(F^e}5;+R;j|uP!-n*`D)nwLTXeAl~S>AB016!ZA2fzP1jqB zt=3OqF%(tUc&H=5_9Mw^lM=)XBJkmJa4ul#hhL_;ImS0isrq`2-Y?7ijUIU$6a(7r zbhNIQxmo79b-{XkmGXgZ%wxL+y}un4zVmtO9?*9=0gUWAr3g}P66h1owhw2S(jTf0 z4o#$%p}3R2S-leb7#e`0;u{9se#Rb2{TyxITPB!@oxuHCHyTMo@eyj@sT>cS80E^ zl8NyZ7leU^>SUJ`*k6?VGlJ2#h@1CT?hMeY(&?i+iuEnq^(_yF&n53HhR>}>mhM#Y z(yY!V1qmrOcW<0%+eN6O$GfRMXXAC(=Me0=$F1_ez06fhk@{*fj=bR--;hx5vlt+A`Og+IY{n92`zgGx&9x~%@OMHvbRP`!?(op& zetHz#6bBD!romL5ip~t>1>pLg=`M{43)mDF+F{~cf|5|DP9-UfiG&{D|B&yiJ;SpX zB*9sG0#j9q_OOQy1=tU&0cW=Md6!YTD{lV!Z;tEVLsaDExVg}1zu%9R$0J$&B*r;8l%Djc;Q!y z){Qs5n|*J$HJ)8#yYW8!-O=*Hgpa<$GrO17pM9guz6E^$zxznso8!ehZ$>y1yJ)?^1N4y^r zUWjIwXKf90IgTZ6e*?c6``&BV6ws`pIH-}*Y*^fXRpzHlCF*PL;C5@&1!14}%D%_# z_5?U-n#C5MT9y}AmEVB&K6>*&gIsz09(pz48Cz1x7WdDnKi;adV#*}RpeyzuA=3E= zt$G`Fa#0d<>e)Aya(fi_-K@-^3v+gQ0v54FV{D;Zx^WNH{8z&TU%>)`u;#Y7PHr4v zUYFkP!~MpIj8f&T7fCrghjbskJ+P!Q%pP!CYG&`%lkc%_;?XbK0^6bpQmo)AhO3*Ke-9uIp*?E?GOE`{3>m0lVEc zI#a&=#}1p_qMQ^;55DuuEbR%mWDB!!3g$n+_pB^L}|8aJhudn%x?=B!-tZl6MoCnJ@zWjderCy&e^?q z`%D9mW6N_w0p_vCJ!ed+9q-+0O}_&Pkq0nU*k#G+`Egakps!KWHgCCRS9J>RjKYUT z-xI>Sdu|)`A07;|R#hA-;pGr+M7`MW8#t@hyjt{!cqS-N9s_A0kGy*wr%w9k)~=y@ z&Y|3-e}smaM?`^{ZX9JtesgTN>zG%Vxy}nrU>#NIS!oCOg2OPK-iq>mRjTR?dc`$g= zM#MDHWYkMFVpr$;T;Ee)VmQAQG*5PMt6xzr0+$ax{ufjvThd>hZ*)glF+Tdc)hGK; zLe3e^a(aC&iX6gJx0B|ty1?Q^R++Fw6UILh^t zll0cIr3m(9YbdJ3kz;L}J|?Apf^;yzOPKp?Lu$db3qqG}kTdpe7;K~N20aZQyK8;m z7}=OZrM>GsFKNYE^~Q9@&>^?FuGj#lnSkdWW>v2tvy{S!Tx#_GlSRHjm?;{&YOFtd zsD{7%d)KLVLS`{?Csix{CCBbub9es0eE7HjMWHlH-5IsqwQJYT4rpof(0~62KQpE6lviKky3g5I}3 z^qO><^I!_ufCu_;iL-xePHVx%b#)}NZEj}n%S=!dZXfJq z{x0@|_jYlf+{Ly>|GE9%B~p@tLL#C!z3OT3)21cd7{6dx9epGGY2Xpx$d$D9O&YXr0>Wx!U(JLXJ3kkTE&@;-R%?|{oZ1z74 zmcpuDs?WW9&uRji~Si-1W_b=~( zbfp~Rg;+(GxRQP>c`O=VTa~rqRR}%AA>#aexcRo>`{ptDi}rooe4TtfbkE`0L1Adz z(v!gIz-NK?mo71OFxN46^MlX%IgLuIzWXT*iTS_I>_6J`@1g2f@9j?*BdgqhBPX!q zpy(@GtdN`nes%yMpR#>cN2>8ud)j>~@$IAag&&WgB{H<6GH$aUx%1pl$w}GJ&aXF5 zbWkSw5nME6=-7VY+wMmQ0i;>dG13Cbn-oX-O!B{?M}&E~Nn(p`_YZ{hX!3FF=1#)m zrG~hGi~PM&yExCCZ-!jblbk7R)d^(2v)%jn65m!N?)0buNuG3uv`jJ}d6I@mc4q|C zFC6~blA@ky>8x#Xw1u6&Re$}?N$=5jaPcK66-z2If5$}4RPR|5qAGpU<4m?7w~75S zel%EBfT2C}R<3vE8vlM_0re{zrPmg^7AdI?Dc(3iud5MBi7lvDYaMlzm$nmE2KC4PkN-KFfhjd7HH9b}P zI7VFSG1QFn>oKLSp#A+hw*ze5sq7UsWi6Bi`WnfF;m0T?T_WAgFU}9b90TU)lGrlQ zI-L%Kf4zp!?~Cpqkvh36rr_|qQ)tpvN}lVYp`!0Y%*#h@kRr$}h=t+y<@Lg)99o`Q zP6O6YTv|f?L~yQf+@XYjVgd>G5>I$jFK8YAE@M_*)cDLARw7EI8GUIOesb3NMw@BU7_t?{V?`X#c>WE>w_Ev@i9(j@q7k4Y1Q!U8L(g6 zQn`vlouQ`9`h9GSiWyVpwb$^T*|&zrpZyqUc?(1(0rhhJ3NMAfT@!Ci=u5=}trr4_ zC!%#l(KyY!I#3WpozX|yB6%WEDtwmtH%+|bBtR`QlEtr;zb6PtC&u_!7+TFbIvw@d z@w&5EbgjTt!8pVOh&CxzX*be`c^>fwEQ|-&3|~BsLaq4yGKD0H_7eN6DQuwK1`DCJ zAPK93t(LEJ$&ccuxGaoDLp?K(vsiB^T_b{vFyp=mAF3Zk3%ybDaNag{~9Io z!b{|DMjeU?J*SwVmZOLT%+j|rw6zkHgPjsNo2#&8<$sO@A;L))UfW(!&Kq`VP#NIi z3;lIfY}x0ACv8Oef&{(@<+*YNJR-Q69?7rIm&xA&)vBSDNSBGQ;vuKwd?VYo6SL(~ z`Az?N&icu_9Dnm1+dZx3f}+VFo)&Gs+{?nJi%-E$&&uS2Mx@PC{tbW{&_zS-%oAZ` zUv_0_35^qmdmXKt?+bi#*k99r>!9c2xFK(K?E5eL-+L(`3YU5?p!{1BIFkuus20QE zilQH9Pu$R5nfU(-Jb1aG{eN`iU7WTTPG+cVQr|apTT>U~K2tdpV- z=ha7#yoF#teHDa#Op;Bbkx>#NQZTtRK?$!F^!A@R>aZV7C7$;r?SlaCxAw&7k{bgT2Vs>(SJ_$%RysD~XL{ zLqg@d$Lbv;ur$JcJi@cc5aI6*H;=x@e7(TCsfMCIcr6I)ao3wC5*lAgO zqn2oxeewT5LY`p*u|3FHT0BAl(uqm7>23%e5*73rP0A(-LtnTA#2tBhN@;QdaH|C8 z(UYn6a;fcschL6E&9lx^u~e?a9n(4!O^ZQ@|GbgGF9({MMf?`1@er3I9Ig8Gczs3hR&#G~{o1o@NQ@DN0x5)myNVTRj~~cZ8g?bb>+Ocu z5k}&i0ex@LY93cC9MX9C->T?8BK6;yw<|{9c0Kqxqpu>8-UO08CRO$e@3Y?bmn?Em--z8}y*7R;lv#?><$Ibo5TEzhV%$cXM%SBA&#|Vw(8VpE(VXn$1-HMZmt(CMKaoe!orux zt(CoNoIALdDXKx@2EeE#3h`dh)_5~~kr9+&5j+Dtr+hm0vt<&krUymWHfg?XW8 zh%cv3F(h2<@*Ef&W)FA(34f3y9&k`hyWgVZ>W76lD(3}3BI0X7H^iQDn}P>F@(O#m zjYNe{jl&mKbj%!8Du~g#&ncd+e8-_Xa(zd*{t{0BYen`vlyDSS=~LT$xQYkjCmey= z6@4Mh6u1_!>%)gdN0R)|hWQIM@RrAw?_>=C=>s?jLBGK~a0B`v2l)D)g{BH7)y8zw z-2iiFObjA%*MwA3ja3VEJ88l%y80LwhtcbpkISi*?9f5zD8wW~9Om~xHO`Pbrp15%*!nO|UChT7MANC<(_6-ZpaEfD z+)@HpYXUUCh{mU08nhtj6Ap(EV(nm9(@t|raP~tfD$jqz=#|+s!!m;@Ju{Pxj_f_cA$#xN^LT%*>-)Waw_M-<{DbFsjQjomcsw63@vU=~2Kl6iP|t*y zTFJf1Yw3tD^M=20!>pypq;sVyCEq={G+0XG@oVfTcJh(FfgRF&mdA$)Ct9U;yhb%3 zt<#i{G}DlNfbxKU0YVwI7O9Jz3{QAjrqL46{<-G|q~R;&?S}jJ{aguX<%`~4C6osqdqlUGZU9B}g7nJ}d$W@r6 zN2%NUd9_RrxPVxV;+CAbs0zP=-J_p;MTr&!@P)AVJ3F5bPNb*syWWFsCjIv|*~Q|Q zcn9f;m}R#Q;!!@R_4Ms@PiV5WT2yq5MH7BIVddg)<6sW3zwH9K*&)W?bNReB7CGd_ zPhWj`*Lb!|+F@nAcwDa*J# z)!9kw3$Dgk7Yw-@7AO5qoZkvoYdrHod1A>g?M9r?Ro2Q)Jr&Tb(XNpJokI~G@+^Mu zU!~*N$1WO}YcRk8~q+HeHOa9H6pmnUvMT(IsbxvQSmOEpr-Vg2sknlr18x!=NSV{3HM}sVR;hs*02^XVWy`pvN zlYPS`OS3v1p4vWMH}C>S&&?xxCvG0rGQpcny9%ogI#+>K&WONjb@n+vnsZ|!653Iz zlzg&GIlhp+5|c32S~ zFTb5f;!T~gwP|HjAInI*L#++(Q3|zJ1*{>cj}H?_D|f9?w8x=VJNTQ==r@7i{<&c{Y0#*r0N<1;#(`v zjAh{MTD5uRU#fKISJ?=W4F9cR{{OP|6KTAIg(}ixjcQj{{|d+S$P$Y-<2E@;`GZ5h zKg*~Jlp^XkNWo-jXq0wmVJ2RH1njOkk4@N1`8P_R1iplP@Lp(rlJ3Mk+0ef7)w0Na z#zn^M*-?Z;gF{$ZHTN@3i5z2s8yQ5zT8bPtk-A(extVS&?L#JfG8)w)=D(aKX>qlF z;Ya-Df;V*x_8{Gv?A%AQ$jv);kIt{2hZcEXe)LM>(;SvvSd8X;YhK#^dK)^0pV-Y>(;`IC$Ef>h9cg?}(PDBw>sHc`22QKCh>sszd@kbmTHBL4VZtBd z8Gh)^y@CD(xV2276yO$SXmJD?LI-gzJNad2+6*FPC|!D+r#9unhLlmbM0!&vI^Rdj zHBu}0LtizUKcH|k%{2a`n+X^BiJ z+FEne#ZJoEnZISq-mXCC>0)c5b%`IEnvIn(eEjrG9#9E>MBO~Ks?mZ(mPN0td)9k9G>t(3b*3l7daR!=IGPP*Ynl^le5#O04$&oiL~O9(8m z_WTVwz2c?2peL;oZ;bJe50QUgZT?$`47U88)J6X8p(A6%$m;ANHWbEP5k?fQ-BBqm zPtZWy)(zRjd9@TyOGk4L8Agu_G{Vn|oc|C|Q2TA0bC?Y`&Ac}{6sl}oyN4**sd7kl z$N|`)f?LYYUC)bX!-Rm6WU;AMrNxbqQcNXz2%bNB#&TBRUi4T&Q}K&Y{9AWO31S+` z7*rhFVY#>I7`0=2c}(K=Zt^+`7Mid~NIBKW#2eS#B;BObIq+1lFZouVg@f(y-*9!! zYJcLm-8s!X-9H_U@?cDQLeQz9P+Hv5!Vyfv0v7+4e90APW+bqEV}WxJ_ue+UA=cU{e)G$+Ma+&rnbsxJska3Q`Il}_xY-_Iqw(qF z?nq9Em8B(z`EVM^8`Nm$7yaptU>oPs^QQ=Rv^qKlg^eVACr=>Yx>Rt)8d@u#AVkog z2yR2%uLz*Af34^v#)@>O$rq}-cU`oTcopK<>K{zd=sZ}ZwPXnnOZelgrDwGeluX85 zivZhr*-@~PM8VHH^r%;cMxLC$rP=S7wN#|TEt})=!g;5V*j_fD#_Y2b(d(B&52?3J zdgUQ?QyjvNuF4}ceIx7}W~dZKU5`&j@Mz6Hmj#w(mo+*R?2v(Us}m%cGJ})S4KWzE zoo@Y-IaW85LK;Xj^6j6yfC4@t*kQpP_w%bLJJB|eHfU%hjTzIg>;~|6YgrL()@dvh zzjb1kmx9#eo93Nb^sU+{Mq{pG_oXu-9v41epODV!{KxgV6mT9(l8%CHx=FvU-N9y zQ9gEjEPwm4Ejgdf`&J8~lqFl{ABH#Zf%!bZt+|i=+tTzT0m9!trVZhHH!dPb!>jD3 zag;f)%TE+3LX*$L${q!|=D}wA97s@Zaw@v)QOib=^db-2=H6|#Z@MVvofj%S=g7~- z8SE>ZU?W*MG~!Tntd&%z4ZQF3ce48=MfQH{4rO%T%XcXU>0+Py6`mqWBaK zz?ne0=u~jLjxEVy>cI0y9t*i1mi2FxbOZQpL^@%1yQQj|Ql7sTlz*(EyqKuiJf$gE z4|$lZ&b4$fX;#hAc-ls3n{aKV4duF3r~a)bwpb%uCk`8aMZj`U$mDO6F9e>{yr|J|ldxNdcp=C5loM|| zyyKuF5vI=YZ8aeGTj%)b@)cCXu5kACli#p3BUjaI@JJFJYnp)#S~k0j+sz(wBb?DK zs0Z0xrEiV-(m~a*z92^xc3;J^4q86OqfW8E4;}DvFG=AJd0VJFvC_`M7|hwk%af_A zt9JTE_wrS%+{nvD%MVtL$#ucXdmF+NVs7zSS1l4k_>W|ArL?5HEPt@49jB>5VOJJq zSUO6~anL0+B-AJZ0a<(z%C3#|G<;HeJ_l zXR9nSoN`}gBWS2i18=^LwYpXOq**qi%Y*cn-E5B?S=(BirwQ5tO^+5uChs|7aaf@~ zz=-Dp+72A1ES_`x8~V=3mk@%GhIOYgdZPG^$*}Q^DTYM)YO)Z=^xsej?z;f7)Cr~; zN>o0(^CpylGJQz(H*SbRz?5vZPGKXeZmL0oqW`%ESFH)o-mf9Fqt9GD%69!+&Lv&C zHw4x|_*YQhhl@jv5>c&586@iO=`lDJxVk7Fu9sYbEc@h8w4;pXMQd~_oYX85{zj zP;ZF}^e=_eUFBc{4oer)L-)0S7KO4}Ip?u8U4Hp+r^vy`6Y)~L%mE!S3I1f$aPgbC zAt>`){b}{54thumSC*1Bql1QQH#>IY$k7`FeXoY3TWJYuNU?ci-V{{4Fl4+$Xq^vg zQeTyKw#xavE4b#{%okg#dE($07GX`juRP=fg>8tiQqi1>*NC}2jiaePJ`Kaki{>zL zn?n{C`C8__`W$ZQn!A@xLG7O>sL{YHbyzMQnM6XKT`2m1B$Q(bPH;fEf9`hI z%;Pe>`jB?Rb5%*fD)0AZt(HlZrVpY8uO=+gzPYDRe&hv^LjC3^`KZHBxU*|5JL zKT{zm{}^`gTN^=$)aSLL6OnaHE9X)=DW#6Saj5#-2Huw)g#w z*xdG8gk8iqy-$Z~=@QgFd9|D#dTRCg5j$6rbGsu?_Tt2anm-ScS7~lWy!P=7A+~lR z{Hr4N`5w+%f9Nkadsg-?&%%43Av-`TB~j=(^jl;=M*!(5S*B8^SH@b#>y==3+QSuZ zC}&tcxv5dD91Azw-S32y##9;Az#7gH97>H07cL52(DuB-LiSlFmtlF!|(0b-@Q{StceMy{s-}d5S&9r4l z@<<3EYmT(vR;zpGfRD*EouYmt^%8dxot=fRp~;YEc1buF`k?Nh>gu*zp55{UyobK?lwWx2Y1}a7i6?qbePH8(#ID z^iU~xxMQv;^w)j?c0KYL_Z;$kj zTJFN)3j>8q$VuO0Zv}H+J|VJ3r8Ik`k=PZwgxc@-87&z-#cGt?o`CdK3Kh*>#d#2* zN)C!9_ppO4wga*kT3^<|LaI_)3RzvA*ND}q3rLNMZ#_1+*SYw?WpnZK!A@E`=YQ4} zwIU*r?L!A!DK;3kRAgRxKh?u`o_SlZ#m=s-2yzMSUW#m5i|ZonZ6i1t4bLMJH4s+c zA|0xgngWu}UIa4vM-n>_K*Ba?M@AEjm=k6aGJxU5Cuf}gn5$?FhWxgyUaSsIW;u+~ zXhbF$O-gJrmq*8piz!zJh(%DSa{TwwbU&vW&-qb39?{&i8r9y%`t|*2x^m2?kr3^A z@P<`Ol3xq|?~&aB%YT`y8eJXxbt$7?Vek3`;aLfa0fFD?xB@G(j?hIK!yCR*|A0_0 zaDMF+Q7mkIvIwk>_x@gDX`z4Um_YP?qa}+|gpJ6M0?Go_J#4%ua_T{1JBLp8s{uuyf2Y zDx7e$d5!CiRT)G`RD09@uzxsE_&ttc0(vTb6u85PQ0Y`)JJwdT8r)bkYbWZ?sn(yK zrpOInm7^H+)ajO#+#?&;tmROU785QaTvZ`%R37JLC z*pQHA=-7(>^oPnRgPJjyF1!IoR4S?*6@b*sE-xti@^TVilHZ^E;XOZZAM-qk3ObNrj0dKc@snedt`r)f}S_D3v_;GEWW~ZH!2%VbXbA0vggyT zKA?gHN3;VugbONKPDKEr_M7D2ikvpmOt>Qd!C$S+b8$ZzgF`dhpd$dN6N^saF9T1~~E$tzD!p|NG z)5t}i97Vds9LwY2a!KZQibtDkf4N&xWN8GVO}F*DQ{{1uSS^*Gw+;QK1pn)PDLz z+AcKyblhB-!-}5<0&0kdbh7(>$t$26EzW+NXKr|b4}9PQf90|IqmnN)?344?DwzNBFIr1AzZF{|c`&L+kDEhcEckmcvH8g5kqMNl4-jbrH!KRE(mELbKF zS>|V{Y4~{r9$jYlt;OluoS*;Z>843M@9Y8*I8l%;y)-8?8VbQKbESAsM?M>XZXbJ7 zhj0U0S>g;Lg~D?1j|w>BJXyBfyG_=qZ3gpp^*fvFYE2;l%;agDxZ`ub`Uoh+EFS*V z4zA$TJimf1=|Iby3%XFo#-V35C^EW6;-g*^7n0N^1=Pa#pP_)mx0v{mK-8NaDscAw z5tm6CPPf&YT?l?r`L)R)LYKpKxQSE7O(pKZ$S>!FveccYh{v4^!FJgG^sH!aZ1DFz z|54|94_D)~NhJP4c^9JWAvZE`#&usJKhV35+WoPG{4n&d;LW?>;vmb62LM@&uWdb# zbqL!rL_48hcjDFcfu4{}vRhsV*%u{pPSyPx=(H#w$Kwnu8P?f%AZ-d)+Ie7ru@kxk;U$JXi|a@ zzAkq&X0_1LP5q&hLD(Mof!)o}`@DF6_4q4T!t`&wX>0DqJ7N2iB7S#rztPpCpz%}^ z(4>F~KafKvG~wfkPB{?bJypP0F!M(c(25kjeXa{u+ZkPF(}nV?5@rYVAHl`5eh00K zz6p||f($LRQKAi(D0e(h5$%y$xLfsqE;`@vjdN&dqyxK6HgBlQyQgBqeqI48YK zPz*z0k@J56DjuKB%bVP=$>^v-q!Us;2Dmw6b*{N+_^P<>Nk%Sd1n?aOBgUuQ6@%1; zn}&_|=6JQ!!wi!-Xbabte^8j+LZRg@KSGo>eGFP+tON+@HOni7|syZ0u zSjL?xVcqNxM@Mo)&aE{^eW549j)T}@Tf$FddGu1;6JI!HR?*dxz8p6VM zTu$s`dpKU<;H%Hm;Kn67bYhp5t%;dd&b1WfC*9Rey+uG-;2zo=J{d-h^a$Zs8r8Pr z+m`PeZTgw@4%kk+>0a@-_41@sJ_<*D9z=cSit`6rawAUMlcS=6IERD{u1kQARKgY9 zkfnADRRT)TC^|E!M?vo?KB^-ib`-z!g?E3Ffb&sOr%vvzon)>-yp9{Wqx)m%JjgzedBW zH@M$pmWpc`M?m?tio`Ev>vSZb;;NF1=l2+HuZkTLv<4!2{(WMEi@_3|uGE67(6|17 z2tIh9v_B~&^(`lQ^z0I_^j$^o&XJBo^c@>D+ zv_QMK(-}~+fl~o$s(Zd^W*~GYQ!j9RRR8+$Ig8u=n$FT#<@&?jm7zioho!z|-Z2Yh z{+&KCe7)n*Av4sB|9#zqA0{HDraHPN>Wy!hoqia3){WrB=52p(-s>3KJlJ!q89VDc zbJsm6&`W)!?523+?@&?QohTyUpt^*yzG{p-k?$b6g`>AQ&>9nAw<~WUy4z~OZ)zjkg zuGcT*^Oo!8I;ZY;LTb4M1Jbr8Z)|+#yrO3Y2OBfKtd-*>HYb}MWb%TmWwYqaWZk-X zq)g!cgtMOQ_ejPz=SkO0`tDfHRG0J9eKPijgW2aRJ2eXYGw+)##;ml|ZQJgUomNz) zC?tz$6r3Bw3`%}5F^^G?I#>SQbQ+%n9i{8av1 zbb#;=B1K?{4|HIsl5tFj<&3rw5>uG>I#yia(rp9 zT0X?aQv0XG_jR;J#oQ4lvh$0o%p@^E=C0&Y0%S_)y(W2s!a}Uu|uRNnZ z>Cy}$*iFo^vl{^?)jA2;37mHtZeKB>+YiCnZ+{d^+uj1bj6pqmih)xtMNzm!@m%ko zws@1C{{d}~?>@E6F-t+D^pHIfXY|6%hwU~lSc2q_o8=5(WNJY`3p3W(Q8xoPA$LevW$)sDO}+qTpU zlGE;oF0zi^dC5V~~_ zuQ$FisNWsb+KIbErR*9UqluJoeI34gdJ~r@nbxD=AakA#bc38%&BG#Mq6K6)%$!31 zHI(SNY{9M{FY>h+Et#Q+W?St98etko6Tt)dp@aseXasAAX-ihi5xEe(A51D&27U)3 zXt8vVZ{%~=@ueX4zC+2E%WCdVmhmt&0Ve|tag!mLf3L}5&Ht5GYD?M8Fx^_FF`PPV zGV&xXNe;qmJDdmVTF&w!Zc@aQhjJAr^k2sd^%|eI2NxT5-1RzL(IY$GPCmaq<#oLJ zlAO23ko=SA8?Q}YGF^sA$041z7Glx5qOZ6RmgT5a=k>`?**@pxcsiEWtN~vN20Kp% z%btF1;#6}yuW<-<_+&)-x%+LdwES&)#Ff6~yTXpTGL*%#4wg#6ZB(8;F7}q=yp4mU!&an?h&z)~|Xju}--x0jb z9+VU?K7-962YiM%L28?WZOZ6Alc)NqvVihY>O9P7V%L$w!ohg@#uQEXXq>p&nBDqV zrM1D%(of$Br?GqvtMRJY+`#k$OkYkJK(oXBZoevKA4hdyGWg*<^cJKPyzoy+3#)QdoN`QM`Tn~a@OTR?~Yv`sUc?6w1J zGw*;~0hF)Q35NTMP}0n-kF2yo5@;JKH6fdFU$1`|_sDD_%X!MP@?hM)_fD_S_K#VZ z=wW9wNITm`^QP(+eS6&btB$qn@8>)^CpJWxPvrz;j*vTwh^n%W^V@Pt0K7W{D_Vcq zbyfLZ09TPsTsf?YZdA*0P9C*Ayg$_0KoTS>p|i&j-4QTk7M%5gx}d*)n+n<;HoB>v z|&@c!w2qbvLH-rMW6`7~^0|x>`e$ z?l*`j-R+kUGi)lntzrD>_02KsM$ehL?H*>4<3FWAKOnx(QdE=0b7D#vU$=j}*H*jU zPF`=bpk;S87PPsms`_38at5MN` zL6#lT6z9J4_9pqqgYsQ+cQd^&El_4dF}ZT&6FuOBv|n3EkchLox*ZY(ai@a(IecqH z`9#+Zw$R+IC2F}k$;V+smwW?SJx-XxYn4~pBjAhiSPrj~gV`USxPrWXO9|fIZ=cbX zINQk-y%Q?9R@EHKX?WAi^T&CJg5Si4`|41uS9lpB$z&GupkGL;MoBBX_Ye1oAhU&Q!bCp>*oK;e1DEeV@sw7;?olm=X)V*tEQCfo-IB?Qv;f=Gb_kR z<~FoZG+sxdKmeOy)^U)_+W4kCN~we(D*HbrLRJcD3#w-P zAa|p6-Ox27%T<{_9d>aC7M{IJn7`cS&?O z5oc@hIrxpE^!RNHD8aO}d-IN-jneS+0*ORNX5%-s@~6s5COVew6-Uh$jD;QYO2@m& z1y3H`zhrm$beKEr{B#%FzndZjXItXF+(yLDhLMH{2c(0~JS0qh>%cglkWwBM1=D7R z3bi;hbsK70;-M-Q7j)?*K9Vc)Z!}@!6N{eM{4BhkaytkEa3+Djw%PYQ&a7&uFu!eK z^V2rY*mo}_+8}N}H?gvN5f_v^!VUe}lcUCi`ahx8P~?arjEDMy)_L=fNp#eiIaq@V zIk)1~c+IG}L@liyuc?kk;lz&@EVJL=C466?CXM@4E-n z>6a2+#w*@k@Cp+Oz$=PKmIXZ4a`Bj@R^Z1{i*P;}`KHG|xztL)OOmAomsJ)G^r8H` z;~v$**UT|a4*jOL&3Cmd6ss@@mc4G{+0R0f6mguJzRzqy`hC8w0e}hqLewi-N!Iq@ zgGUn~kkQW>JP_#B#%n7Z z<=^?UYmY~JrnG9W?JA!|5G$!Awl62Qb*viP4I_N%!A*^6CXH zv%d&JziftfRfSv^de>@30(fA^8-oSqaAd(xpy%UPKN9!rMjc#+#nEw+zkMdE%;O&vM<2~84c3(4<6?o z)N!BiKia8ouIH_%pI|mo2bP{+_AN_NL%sOv8Lt@Vt6$EjVwuf$W! z#dVK#U&r}m-5`NwZVBr<$$53WZMz!TdD#K%(yJZ`juq=?qJfvGDKBqf)RbY1axk9m zVXH!+8&FQD-9}4Lrs#g~mbV;0T`kZDYSRmODvx^HiH?t^J}Pw|D{2-ZZmDYY(SM;# zFkH7;-RoJfvHs?~w#sIvnaJ-Ny#pP`o3oSIGk2#_g=?x&(6#l79jV*@yW40ff^DL_PYy?SPf~dq|B$tW zuoNI{qYh&;b(y$aR4i02Y)|QSx7VtB+c}nNXtDL?4k({r(ue(I`9d08Djx+s5J`#L zL9ia7ZiOpE;UaXaES`EG!0Lv9HzHOC^hO*Ae#LuMzx>d@7l;%prOcW?FOaKy9sb4# z>`QqjT#}lxVSmz{D)FW)IEn`N>u)9*cXW%JG^cj63 ztEa~33krHx*25EJYp}D#&=%L~(Txl@gG`IVucJw1X=cY`YyDFeww@z(18a^i5a*s} zM;1XV^yuWN_?iNW6+Jl$-j&N5aBf`?=^`z}w2e+pWiS8%vn(D?&U?%<5b!)8MrIB= zb&||}jaEXcqCFxrY2ke$AtklndV6CFKYa*w+Y^9s?tUWL0|wiCusMfzO;wJU*!{HL zc+gp28sV#AG_kMd2yW?m8d3zQoq-8658^g2_q%o z$zCx<}$2fo8TA1a9aPSHAvcK2m`yNc$fUd#R0-kU6zv_ker`us) z59sb#jM!juDf)S;yIvfxrRF9;b*u$-Ti;vFo)zcpkwm8x z0M(P8sB1B_GR;5T7FCSYqbiC6H3f?N+`bDa$9mOOOy_-nBS*m8GN+AUP);xXwAtox zPk*JEq9^x?$$rWtb9=oWr`Towm2+_+uPR5I4CW*ls4Gu!%907R)JEk5Bx`isG~6V& zlz+*856^o4w8ao4fvdhc&J*PuOR1rEr#$y3)*h1{s8-_1CJ9x$?2VX^`4d7^Z4_XX zLuKZKAFd{|zw^T!-^mSQDAMygn)o-p17{R9f|& zDfc$UQ#RbvPfct0xMKN)%Dm?+(TwPQR5q#ybsf4Nr;lw=|1W^<%(HQy7^r`0}@_r=xuC?8m9UE2dcyAR{xRgkhu> zleKoQv>iM&GwL-82T?M=wx0N&wiDmSul-4**XhkM%SxS@9>H}MHtnjS#R8n@C0_4m zDK8upC`}S|au<`{zO= z3b+u7OuFFaQpw>S5$AlUH|dp7QQ=@fNF>A}PS&oy`Vq_N3o>W?P=>>ppW-Sr5j_CqE3F5B`38vJ+-Sf=seY}ce~?9a8HSUF~L4iIa5A=DyoU1My^TN zRyKjZxC+P)WJmk!Q$+%*kmj1PAn$I7Z8a>j6D5Y!TeOV?MesX_&+}@o1IkNaV&*M25d)xwTy6VPZyLuI zup43tysPaO@1Ae?i{2L93J<*va83Wtks74MdLb07U&L9R+F3y!^ctjz0-bnFX6+CW zcCm#EFWpSrp`I43UryAKsQAS#{Qmxzk1g>3 z>YP_Fz8UZyEInG$r2zAm@uAMc31~fAcT|E$>h+KlsJe1Eccp=Tukb#L&}J*?^L^Z> z2tscR>t(OsLCu=w=BwI-G6*b?5SRsAO=f0E<^y3-47_zr?GFOLvNT=iV!Q%I>3W8g z@L3PAtc`wS-VtH+$=@-*FHN8S>K?Rsaj%cQ)QQE*QkFU-k#7GhF4v`0_5wv>b6Mhs zTn!9UNn-`VZx_^gR|sC>-O>q2Ond9oXO+?Ktung^?u*o6#LbHK@}|P*e~JR;u8ST# zwQc=Ck~sKj6lq=n?FSQmx>f9uTZl40JzvJ&sThk$)a z)0F{$_bmv*AKkymlfIfpn!b|W0iAlA%k zfnywVkmcWjoGClzM zWiJ&jfHh8PGyU$B?#_}JgeVrVpA4&`3hA;VUu;aPcJ2QAxiARB$hQv8s@Size$OsT z_Y@cDUK_M5{M7o&DP^ZNS1V;A{U$sqVtk@LnUVnSF|wMjj5NS|vfiD{3FMq+E$ey} zmfJV;omq;mL2_HhWX-Nyiy)f|@VB!Y@jJ%fW1|HXfL&NvNdZNx~>KUqQ-9wc)fEId3+r;epKLl>Kutls7PDo<( zI(I{MzU(NVJBoljorpOH~j@u4ZTI#2#(w01kvU;r!{1JE|LU;rX1^e zd0y8wEAXIkSI8N(EzaW5YzS)_e^?EsSbe(Gt5~zfXezSog_Dq2edT zdX@>s!+<}9@Z_-Qm}St2^TnJ1*4wB~{3C&NMYj#JUXju1BTuYJnc3BR+|nM@vZ$0c zO8|bQq=`}X*0Ac|!^z17F&45e_ihokd9Rk`;_(`RkG4VIM0+8S^UmDY=OmT_QcK@c zZA&dVQDE1*@3UDHx7`hLo03Xa@n+2tp9V!pwzaZ;d0zkq95pM=m}7~tJD!{*kgR*s zlJgs*1q-E}Wke$Yk6ab*GXs+%@+O^*^xvd5y?t{l*#m!~Tckt!c z8rVh{Tznn!%Azh%RTke@w5~h@$<_Gx%dg`ye>YO4z&!|PRS$H=RPL@w3BqBZxB&Hw*L@ z@jSW>lw4((KgAtNrpo#eIV3LY_4|Ru!aFZ)LEJ9Lo*eKi(st+Ec-*oWRMqU-iW^dm zba#n+aH@F}VuU?&Q%Tsj)z%?+bIR?>g3ZWknZhoe=61!OPlS1M-TFGW%)Or9hCbXd z30_!r$#Hx$8BoN5`&X`Z#e0whBcGJX26?9@Hyb=hcp`|=1YlN^J+ii%7+wjUWQ^$s z42!S0FZHGP2C+B9PV(hEhAIhp0?KR`*y@x%yOQzxZ4-zfL4xab_9-A1P82wgeyp(I@=>IX<(*AV6tDC)tl3F( zh;XQw&-^t3c`5v_Y8n9!y8rdmFE41gO?Qhxft5bhIe8D%R&_l$g+g70Rb!XzLn!h< zJsn!!6#Dmo_vC>DsAEJ5Nde1fTsDCsNYVOeNt6ys8~`9$NG$g)_+VkxY@ly$K~2uV zTJ5@VQ%)1T>cb-aukU8lV{|ng6qw8)|A5C8PdF@Ed++nw57&Xu2x6!t0y>o{31Vhkx zqQ9DQ80m!vjv^k}Vb1g{l3~OnFR#+6WznaOQf7C}zdPvCWD$u; z%zm#yb+L=#p=x*qG6Y$Gq?d|FbG?Ndazd{WANQnj=}S+J)m?2^6ha~u2(#{#x2_G#?=o;oc^AOJ^sNkZerA{Y4Xo~6i`c6Pno0goe$g^ zU`S0u7_IkBpSV~08`EEXnG5S~VN3EzinnJRtMG#bI;L1pHSn}yTf*1IP~a_VUprw( zfd84rw%>2+q?4S2H}Du4y=aUJ-PonL7EP)k&FHE__|J0oa_YmKm>v*5Jd z;l~B)R&sM|04bNTvc7#TiF%R#(@j5!6$25KKv_reXD8p+TfI%j!Bx)^uNz9b_y!VE z?n^gD?nN!H^1Qn!>4?n28KKkW32vlYt{Ps(jB(AE||O~4G4#F+Sz&K zL<#>LyMJQ>5`f~?1354`|MrXI2zjJc*cr226qs7s%t|*!-uxv4j9bb|y;*9~Td;6l z-whXU+^&nYZKlP4=r(Z~qvcq}=&zZfoF8B?i?!6g%v>6FT2z`Fs2a8nk+03XM};^2 zjEf}0mZ(3TF)UVWE1b@CKHe%hA%^`lGU4Y=pO=<8yGA<7u`8l(BrvaFmn!U0`q!ai>f}%p@ZF=l+KEL7>wK z_^XTZQRR*n`oVuzg4|-oti&dZexQZNx{GM#14B6DS~aV6p4r5GNGc;0p3oO~`J?VJ zJCXCtxOtz_1#yW+aM}>O5YM9rgNPK++uQ+aSvx{cNBZ9z7c@@gsueb4ARUmMGtxKUh+0EXoEL(YhPsB(h*M{9-KN-Y9e7yEffpC7u}L`c8?7Y^Aqo z;u@psq&~6)gv)HJ)&C*+Yf5`Eh~d!4>!3yOqY4L@jil?Q8OH{wu2i$@utrIU>jq;0 zIN5>vw}HpiI@y4k~PFIJ(R2{aEo6fV)=D^ z%x}m&+6J#57s2Z!#NgX)5}S3I-4c*`$!?Kcc8xq3X^^lBj7LgR{0vUuBMGvAhnUmG zXevw5l9&U`r|Wb5l3S6&jNM_BKSzUhL;r)uRuXROT7+h+^?Jn$rqf>C_j^G+B*ZFM zPMg%45ta}-`)9T_Yr*{a8k9kyLs|IP&bT2by8e>D^zc6mpx|%F{A@=x(zIDIZ?z_d z#YRvoJ_sn;g1Rdu;2JCokgjg`plW-Z1 z(;l*CHkv_Kh=r)P5N!QFUh)o+erRn*DprfrH}SEhI%^mJf;-BDU_GM{(dSN z7i}2^pe>_=;${|AnsT}*2t+wBx?CvJCtdG*xFLTaJUOdZaYJ%4u8qFSV$Cv|-Y9bh z+K@q@5q1Y5D&-cYGw8-9jvnirPiusdbW`V!ruu^ICz$k4x}(maFjphhE|FlFNDC3w z!T1A)$08x$CCf|5E?LgS%Yp1fW9*L7n88?^g3af;mpjaG@XNKRD!f4ABH4|4PE(ZBHrBs88oF9oGD;ct*h5x`#imQbHl z_|ZFp;KoMomxxkfOD+~q4HW;R-}b>kmTi6jeKbES8o%ug;!2Nv+x;wfHnDv7tQun} z1-`&i+@Xpkhw3947mKJZmid1#!V)(m@wWQcrl-V|I^?9SIm&Zb+hp5co5DR)CCY`H znw~=Xf}Pl6dBFA;&y1l*#Hyz+r14~jI*d0Jj@O5cerDMft0wH7S`Y4ZTi%{0D0C*C zO`Sg&=52B8%=mjR_54MbcZL(-`}MaKo_hIyA4L*UW@3sG(UZ|9H}8ltuFh)-UG;ap ziY;0B3Pi>K+e(~Af$Zil+Q{4;ks%c-g$ZuFQcT4jbyZ3avAWE;87o}Xd)Xgy2ZSaP z0IsRUX4^cXJHy#33HR_|85`&vykt?{n1Ymdm;`pm{%s>Z&^_*@bO&2<|5oG#{8hzo zXO904D-Kw}Aa32ZIDONQ>oM7=a)e7HD2Z~2vfZh&FQ|FH~j zZ?Q$cg3-pUZGX`Y4B(%m!GH(L7YdI!8vf+YN(bDaEcnTv>~vq0=2^tS@Inz=K=~Xg zEMfJ|S^R--@C6uG>xeALr86Gu>G&T(b=9`eUTS#1 zhk(+4r(S=$N_WoxA}`baGUu?NB8X%N!qfizv|e_*>|~OV;A4~lIEO~l2P-TEZcLlS zbRs859G6u@H06QyMLsbFqT1I!8BJA98Ng_3k=FDgG}T&DzJPHs+`ETF64Z7A&BljV zq>2L&q*o~~zBQP83#&i7g57Z|0&Df@?%rpRgtP=YWWx%8qhkWey=x*&1(9tyYXc7$ z3xLJa6B2#=w4r;;+L;fdn>Etg7Spkfha@DYe>c?nJMi3+xmcW3JQxb(JJE?E1T{zm z@FY5z!3%qW|BtaRkB7Q#+b5xteHlBE$TmbM3@Tf)waBh0l09MUWH*>BWy=zYiX{6k z49QORWy}z=k98Q!@8Z6n`+48@m-l)9>kpqk*Y~>4)M>a~d>;ZoY5z!fPyTSw3zp;1RU^$)B?>95-#5~=&Gjmj-f-9HXU3+W_mj~T|K zKce2Bl&-!{@f>%=Ii?o{7gaycnBsrS6+em+C!=a(yPPb|pn!P2h_3a;yo=Q`{7Ip@ zX-Bc31nLt|e9AP*vJB@w1WPm8`hgyw^X2Dgs+glPNd0^sl=04w+ZuL)r_@*4TCdu6 z**(XJr$9{A7n)UBDdl+Q56(I1J~NJJSF0{aJjTzCI=XKUtDw2?%1(83w2zRypk_1} zLyerTh{fk-R2TB}_k*hfTAZXbn(L`QN)uaMaKAw|caqo_hA?DFd@# z^L@CXRWXA|v&*b-vVOGohzzn!|CurVP1!B7xk$}FkAOZQIfC}X)?$wMlu;?ih}R|2 zHGF%wleo)mJZmLVr-aYWfh7@uFBG%tc%#3Q)}2dVb~pmTwZ9TVQSGtuQ5N>Z>e)yK z8CcvA6cczy*_+)R^~f1H6NZG$`BrY zmW(iQ`rt8#PFvyNzj(mqZ)9JdCF6x(sjvu;x-ejuOUb4LcApp|fr)}i$(p}=^FIU} z!$1RY=$336Lu*y8RT}7^_3T7;A&gAR`YO2=_bVa_uP|v0^K6|xRv#~T=ooaT4@u!LHZ%rFheL00+j^&MPS#>JK}8HYLsideaxYc`+_yd=duO!0Y+FY3SHD zgCI1iD5W{P@V6*yn!m`^Rljk;V6CLeGi_zN#sonr?Eb0OW6P@d0%<^d-G;qQ>T89! z>Z83o5=%knwKoiwYX&8?{|s;a6pzklZwh*5; z5uz2RNL01XvQt1rg~y-wYNFm=4|(S0>~%lf|H0@NgN9WrUnsN8uE*yx|H*-!s=qET zNBRo0nGbz|U31TUS$Tu-!UtX-vVtWqGK+P_HH`;oVpE&aFt4s=6->B(&yRb1+{6;& zk)y2iJepvBJ3DB6_0~?}bL3REtKGz@u(F%#SKmj2ZA53^crKNrNGX`68tc2pD{%{j zolIN9Hu=|p=&{n|;Hd`Q-c$UPW#m(`sKoHoY^2Mtd@e5XAJM@vlB`~4wj%`*eOml2 z;?(m=Sob4*9kU8)h{KeDMr#DB{~9!==0yR12Z2A3(=f~FZa3PkHCqHfs0 z=<_JS>MHxmiuup2VL@-b-6pHI#)bCxmVKe0t2c)!ku1duyDB9tht#hF=yiFemTOcP z4{IFqYPKqE*JG+_316(_A4rttwk!JlsHPPztm^obtRJs6TG@;gUc2crVg^CF&bvP} zGEZ+1cPvRbZdvq8)}z=n1ejkL>yo$YK!lxlaK}Ua*=oaS8U8V~clGI?nVAnYA>ge= zJHVKk_Zan+!L{GL*$|}s=3xEHbJyp>$%o@gp4cnS)Y}4EJr;B%&`a7mEgX+(?T%TqWJuv%og6`4w zV=M30Y%5}xd962?D*$FbOs;Bz)zEJwHO_=d#}otJ>aX^Y)bNwcdJ<~6mn3Z02}_4` z8v^jaPH(|5iwi1XnCW#VGyv|vw%pXg3)lzQr2UxZpVsMHNiUV>J8p!S)0 zmK-d~?QMyCgtNUEN%YL}_EovHQ=9`!+9*tW2ULf9+R68bcd7o!p@5A9hp6p2{UKdw z`cV#j!!>>~S>5c_=a-|Xweu}uFS{tn!4CXV6F&ROHwxyBq4i^KXcI3mC^^zg8r@y( zy37`PK~vBkv~G|3v<96|rSV#XO9Ik%jbLBeQOm`;Mg3Rdd4=eu0U*daG-l>kF-@tK z)9zaAW|@1RN|qO4d&wK@#xBC1#4fkRFCaezSPw&7mVKyiFEh@MS-Sr?uv)$~G0oa3 zZLF~=|Mlg|lLZ=q;ocgHHor5nUiXhHf5@Uekb0tf&(Kh|I9~86w0QZh?n%B!v|)T- zmtVK-F3ZZL#Nrku(6%!kzO}7aoGqu56X&beQWIui%ioB|#QccQJ|H4tuKO?lR8(f+ zu8S5DzI)TJfupg|5k9x`5UYse$0Z~PdvUmv%NRfBt&1LiVcQ*!OS$UuBZBp^poGiZ zPr=Ab@7C-(Q)Hz*TlnH1d9$!blKKS%?n)8TQUK2+VQ>7*PB4jidcq$OrSc#)X zYsFd52)(%*I(5cpsdQtUb!XJN)?x3`VkO5Q)Mc|ZarNu7#7%XZ+6Cy)jLVWU`J{$7 zOJ@K0z^?cIck06r@MjfM^y9s6Ea2wXAmMOwU%Wf0&;?Z*m|f_rc#C1}Br#QZu?wTQ zQ4wHtf0d^}Hq9g@DFnG^@!*ju7iq|_L(S=mIJ8qY~iWqtm-Z%chS z!GAef#FWvOv6e>m%n9~#U*7X6jGkl7>moNqiWxT^dJUDDSAKj|yY+SykM{cYWN|%X zzh)r3)!Zj4dkR%}@8@l{_tcXHufuTlf*FE|IrCBa?~w zMj0Y~>wZD-pvD`~C0YkWc|9sMxFhGiSaNE;t?s5v8qE9BA!X~@pKEZB?xEV&$S!^o zSy(#yOvCk1BJ*Q^0A7#&U`MWb+Oh4n0$kY`suG?bW}or0=`8pL3rW2dulpIEj69X~ zsh;uU+7@Y7+PBbmr}tb)3EAWOzq_926_xC8LlKg`1FSm>BR_vcO*{Wji}~y1KVK7r zYvH;qbgmAgkT)JK*@R^}GJTE99Fi7(7?kyzm z-iRP@#w~0HoyvbX!NmDnm2n2paxywxI0NG*PD0 zkg*8gNAF)E0$vd6F0~5B4uQ6egtq*~-Oa*I*r$b)*Td0cK$Kb7%ay+v~r>9TWE z)X#_%nAXW9Y11uS!$ZXo>1m3z$lX90ZFXTPIx0G*o>Puf`;pym((9dL#tUh1k3E)B zJxn^Md){;=H8pFA_U^a%4oM8%kKF8=T+O=IV%M1w*R-tX3|o7B?<>?j`OlAWQ4)CY z7Kv3k2|J9fhd8Q^IBMUV%_*WxrHUJ@3BQKnIZaIUf=yWj>$W(2*?H8d`7u!5p|b7@ zik)9=;ZJ+y0CM31=r&8#EJQXD)hXTCQ4Ex>TA!?57jGn{B0n(`u8vi5dX10LH+#}6(<1wcS(X%B|d7BZ9(f@1YA$4lc{9(}cFifCCXpGi$Du^W*p zi57>EgJIticxkwN_(9D`5!WX!n<2%@%i~IhAMGzQa^Apw+YwJ|IV$hSiG>)N!piepK%PPMX%%@~)rCg#Ko~@*od1B8MN~6jy>orp7*v4dmvNMkxymyufM#cEI zb@eDVR1Oo%GJT~t#FZ~`-4A>1Qz8lLL>EWpm1!ptvbU@bE|(wd+zzfz7Am`eG*i!C zD^r_v`&gbf)LeT{qsR=-a?HmReJ2752$}NhtYhO@b|=@g_{AGgjP=46ZFaaUYNXyu zqjHu>xonyV2bT*%lM(8`gsTL^*ip%Kb7AOJ>;pBN>^6Y4U$qtXp1UU7l~_C0THl)R zVgETm&Qld#yWVzMqR|F>!RdwLg9n$DfK59DPBWcG?BR`y70AMGTHE}N#DBF%?Y}AB z-xAG>oN>}PGYr>DljqKUnKkAdBTl_o*aQnFkeSDn0|jd# z6?NASn+d?0eUIXlzuKE;RLZn`rz!j{^40d+$XV6#8ns*WP{ce++&qx^Jo|a!cj6?6 z7KRcC-&wV;We6g(IWv@<>OXM;V^9~4OYGT{4uEEULF=NF(m+Hkz0JwAqPwF~)a$J)OF1 z>5SZ}Ka^)A8SDMb9`e+k3;CUe@|dX1=x~_Dn>#@kpPLh) zdS1ln9oRW2ch{IFl|EH)NLl&-u7P7D&+8|za9d8j0uK8X%noV0M`Xxx9rS7|w8QrC zlS2<1f*-#IJc!;%X9VwMg{U2UOr4prt56h&>5l$tDqIi0N)-~;j`~sGoPLc};wU7u zl6IUPzT!(`MA3=8w=nG+V$1uP=A`r)bbQUaN>+)&Tx2mAFl|7um+gFU>>8f5v?=P? z$s`XW4{TnPgxf`SmL-oK8`W?}QSD@25mAUN(h4(sE;xJ-<&ISsH)w? z%w9J%$7MGLVF~8+-P$x0-}l(wUJegK?Ix!x|GHFQ<4>^TllRrev56}&tjWLMc5v@6 zO3k=E!d)$HmIQ4ln~W94eM#V+K4lh=S`WUem>U0;<51iUV)W;hjx+^@ zET`}upM_Hn#?QNzhlokY9Cb4CU?KN4eMPul>Tm)C2ffj z@Ht5Pn6jiXGs^#&iAsfocXyAFAJ(n!ukuQ?W|s+}jeeQ2p4{amrQ(55Y5I#nP|)Q->9zN>Mu*@%p9=f5q(R_g_w=ZL|`` zP&+prsyE2wIlmk@>ezTs$ZyPFvx)=5ZO~=vKl)61@Y%yxS2J273JG9SdM*wiWVpXM zxzh`LGF<%@V`@xtYYxr0fO>ST=hjl$c5Rw2PX zVA-{xb_8a6zJaag(TfH@D$=X$@T5VF+=~?y+LLB~_$pDyz917aG(8PFS#aG zvZUC_))@|{$oGwHp=6;Q_2=sUu9lwWasQaH-l^HEy;gIB&*yXP7T1|gDAm&}>Z*_X z#b%yJxeXJbLj~P0BMl|!`DKpORqaCh=lemoU_jsfQW{TQExO@`ozboTls{q@51;gt1UBQq}qU++Y zcZ&oXtP0@SB<2$0X)I8ihXqG4ZiS=69l|f)AlIE;VB4WLJ9kt-6hp4LAGCu&ek1x| zQ7_U?v)a1WcT<+?BZy9yVn5xTj7M%o{5c97;R8#6557~|;ulouNhQsI2zJnzo%b^n zG~Bvgx$KnV4JXm?I^CQ#2CxdU88vA@_w&g!E`6{Y??20bfieQeq6pdkv{0n9YtBNj;lireZbyxO2)rh z5!Ma}gr?n&P&oud5l=;4tkxLSP>Wk$;mo)726E7iB>Mel!MJrg}v`JKj8+!+l(JpLGh*@)~;agysaww>vB6} z(&b`v>r}zFd6;M$eJpAXn_rLmY|{7_b_jSXV!B$>T1l*+1L)E7n7lqgw({j?~=s7NQUbRlkPTRPzLU4L$&V;})IsjX(+G z1ZSBB4G4Lr&P;3Wl){DWvfE5_?s=@jdeGY4)kH8yV$}f_mMmDMdFxfhU60()LLnel z9B>1>;=TlzOtM;PvxwSPlKp&0N>ItwHAjVE!6>|psh8$Dq{jBX_+Oww*N#+Y+~Fai zqcE%Q8e2NGxKS6EqmHI`U7`B1P@wn-3cM5nY)hdn@B{zI-I1{(J9!+3Q$?9-1Y5eVi0dz0(4t9Q-RHxluH40oeplA#WocWfXkeus3~g?-3;)g#jTk0B zRL2cDcgjl)7&~hoaxo&>vOfnUfG;Fh|9+qR^>C@fd#ldWwyJMipL5W%kvPh|Y8k2< zp%&4c3Yt}dOAJ;3Mu}mDQrWqMRsJFiiWwB#(}I=@_rh_%K76VDb^v7yKBIgW5CjqL$1>y6@o=?)>H9XTwW>J7SjauA-e$c+PwE z=-EtZTy#3uWcqD_UqF~y-qk3L;eYJ{2!v8B6CdO9K}Vi)4m?m)@Mb0jvFQ6^NHt0f zXXjLc&xT*eUlOEpEK{5D3yyE0QGMnac;%F%r0M!QF=M~X$MGgoy_u@WHn7nyxg4~0 zUbi(xw>)}kYZ@7>&;i8LUk}%&xB{hN$NJ)kbRm$ec4wcNy~8@NGH{6;Mh0&~5~W$$ zB?+g}#Gf{UJr*hmchv8aaAe3lrFj&^Zi;xU)`V9gO9tGs^+u%Ezs*8ra(=>ACJpzn zxbi>OYduzn#X-p6&C`xkkan*Tl%$#VSnmmHCfV@Vp!~I6E{wzn$Qj7*m>UJXBQf8i zPC3Cn<%0P{4YR0)553-{-+8zv>=UwQiNMvLt8;F2L+NyD6w%uS1_W$3^V&Vt`^)CCnB?8f zP$Q~am*+=xQ>bgS9Fk!H0XOGKd_Q&M(=Q(vkzJ1bhqit`(Jaw2ChUDGa zwt`;ohth(enX8`@pgb>WQCFcB^5BoodyeVcZBkO-@v};u?awo^ENqu*ed9izs9~9v z0LBwFgRU?^P2Z$|ao_r7QwW>VwP4{Q*I4xGHEOnI1>wP6FV*ZoU>a(VxT z9#;!IZ91X`vR=_lIKp`q>M$dz{=Al$*$*2VC}ONJMj~f#@)tXXCk26`9advn1bpG3 z*26?1Rds?N^ivNYY1+W*xK~%Ur(z|*M6q#yJj;h^gDYMJ384G==y0drg8NKL{NBz$ zZOv4V_(|zgc3$F~@$0hvbv8{-5B)jUYT%~EygnC7826M_F^SUQj1wzpYjvflnTfpN zow{>#^VZfva{*EGeI-bEZETL#s+0BOlvkiVUi|9ofGlA zP`N!{6~jPYJW6hF+bx}0kv8QUa`lv6E8$hA-Zo(?bZ(y&w_*Res|=Ju|4A7Ep8Mv+?jN?MSgu@knTunA zdBLZR&^vn5ZnXrH&30*Y+ug>O(T_Zaf8#G*U3*t6~r@9 zo;G^%-r)EqRO6Hf9}~n~`;`IMV&>ySWR7CI-)37fWSI!oUr0MoMoL>YN3g_lNZT8` zV(Nn)M?P!hyKM^A&Mbh5tLjH3kzfnxrQT8pvukYYV=+G3HO#%qgd{2lyv!FJFYZ+O zfw0NODD!)mp%iwe=W7Mo%oxf8kxrU>pHQB#`xRSxB)Z9EvDsyIS)EI*mvAO^N*4)! z2k4OFip`|Uhjm7P&0(?mHgd}2K zxscgvCOxpO8gD`y*hqQldI(kf0_bTcCfiqBB&_#pTODlV`#$Ce-I+bWxEacKVFug* z9s2c%zy{6w?@`R+JQ9z-ziboylp6zr9_2U68t{u|T3+I>OV=;UZxRN@%&LSq86jZ} zjnnmoSBoLA4u(qk3TlH?a?&5JnfLkn5ejBBX zV0wH&Kp$9gc`g(j>}eh>9*TD~>REkEYHOfd8Oxxx^2VFH3AekYGq5>0orOFNlWGIa zBHz$LlpBi7oRl_RyZfnbGD)yCv<${gK5k{brK6E{09({P@Qm0j_a`YzN3L-=EH2~C zes*FHLhwru|3_2s?@}n;lJc;!8#KH~OywqZAY;u_hS?BcfDdV{GqNGBqe!t%;>z%F zue8(F#zh)TxEN&x2kmi74lYJC`D?Ib@75vr3npGW0M52*;k(su>bclPOwRtYeD#M= zVa>u#=W;w2Q3$?M^*tE7)7XE1@EJFc-@vDeY28)h3guRbnD3VMmTlT)UiMBaZMLXh z|HUb%5o={raqo>_jc7m9SP(Rgt~qr|Ts4{Esc(OwQDx5k-@XTGSIU^FFZWW957aF1 zKG9&qf3Vlvaf{x%UrqRa(8(IVZCEkmL~#uIxNLcpt=j;V$Mc4EthLlc5kaK7>f_)b zXOzO$ZN1krShC6V$3>oZ^+)+F z0szD*$PX{sGuABxp1N+$t$a~eMqX5;c|^iRISN&VHRDFaH8TdH`7^GK7W&g(m=ln7 z;vL1Tb^j^+;s)G|b28S#V|3>61Yw4vvuC|*C0A25EDt4^k-1X9r@mU2S!p=x`ctCU zxNF^K4i{8iRGAax<9H2Gd-}IK_To;?(pK@8+U>Ky(8wC_Bfslj-uQR_t+9QIxSWoI2172A52w9ZMK8TFLly6P;~Y`uNc&}J@0k#RNBxRxsF-O z?j)D>>*tJbQ>3QidrAtXdAHCDo_CdYZd7tZ9LdtPL@a|tF z>en7XwqTQd+ZMQu;cOSYSY8!2?wP-EeA_`r`Qdm3*d(Dvjo8<6re}QAp zhzENnvZG_?$3t-X&~_g2dsXK@(>I5wppxnfuUuhBkZYQ?)J=wt#PnaA<#WGKIk#DP zaZ@*M@4@qNpDD{pGOxtiQsv?$=W(~~&6ER$Um=lh;++1+ls?0fj+HPb1s$KI^qv#! zOHQIW?o3qBSk&eGQpPdVgM!$V$9L_SY9hiZTto+dK{kxnDOQ&=9gWI^j5a9=!7xRx zP_f|Vm7QyF7x^aSM((XxRBXMKB$t2`?Oss!do$DXNbw4TpPQM}O7m>QIssjpr}S}1@T^&UY-~TGXT^VIr=@I#L%QS_`y=~`n`tjg*UQ_xhtN^-$r)1`fl~iWf{V@ z5;qnUq@>6En&Z)7PlslzI#(AzInD9UOIF+9)Q)L0{d|9fTrRe9Osr6kQdv$(J5a=I zl@Cr^FUxZf49&SP*8(V>=Tm_5);arsSB610PdVPb|MqqLRRRKB?)PO9+KCl>DtoU* zWdH~5I9`9AYONY-N;7a;TSLKkooO)$Dc{r_R}rN&Z0tCnUHh^rV>V8ujU(kYw66!! zVgKmB$!+cILVgI8rtj;4ds^1medH&H^{1xs*zRMzEl2YxwQ1=Y`8CM*kV-=)^q6=X z!?0vH2b_OsYtDIK)Gy3@9=;r5K>TI4kGK3!fkIzKuB5q*-Bg;&v5jsL)leU=z5QAL z&T}SO_Vt3sB1=z0UpYHcU4ngXN;>(wc8$wk;|h``lV!EaWKuna7s8&-l2kSKEbw#n zb}-tJ9@kf4e)$&`1UKr4%l%xKX0aK$v*b+NVU=qqOa*};R8f`nR#z)RXI|I_${0_q zNul5CAV~gY0NgASYEhG%0~~Xq8lUj65Il^|qA?H4Q1D6Lpored>!LDXGj3#k;GWwP zSCh=zOXG~YApL6J;NWLmN|S}5Z8|b_J0WM?r;cE==PjwX_n?(&>wIeHG2X>`1coLb zT_Ir?%>e)N{C4}u-0)JfyC(!=qp~d2LFa}jMX_VdO&Ok;bUEv`j8xrXI>3qxJJ&e+ z9~y0X&yHWS9TG!j10PdXsciLiTz9bW zcYPU`586v_7=~x~+PyC~%l@vJ1+tL-TCe4jH0Ssw5>5v>&US`Z!(4E)yix}*ubt{y z?&FB=I>pp~kTogF4D62r_I|wlsO|MpA#G1*m?l_3ki$TrYb5|)sBwy?f zNe}xtnH2zzdBo#m&PM$#?@ok>9sgX|cu4V5P7Dl<{#EIz;l|u46i$3V*dWza-+Qrj zdvp&o`O`fkGyNE(MMOf$d`L<;eH|sHg8X0~KQ$-x#@&+!=|cPYlm30LJ8;2G*+yo} ziE(4yfm`ehPlYOVTK69wbb-TfdvgP7+Pcwud|KS+8$^SgXgcgPme%R5%njRfJBZEt zW@LhY!@NDL1a4$QDznR)9cl=TSem0YR9w47GkGJ=Q*di$&22j2#3sGA$Y)~Y_0%k@ z3IR9t#0H|0n*IE!Vb`B&4bZv0aCB<_uZL7X>NdG8{kh29G3Jp;C)0|F=@+9!xXVtt zWw+%n8lPN6Vni4CD13DB7KuVHuz!P#E#i>Na)e-91v)<-RH|0km9k|TbRPC@LA<_p zF1OcqoXj{LPuu)zaGJnzc74%Yy0ab^lhb$N_l7dvw9b2Ih~B5vAA98&zKg`)x_H}4 zWHk-P?2@=rrnlr%KMyIPHXVTNzJC&F5wnqB#?~tbC|xx^PIF zqa~I;QEm*Bp<7QqE1Q^Z&9N1xqMHf#MERmr>xrWT@XFo!Jru916vBUlR8Hjm;5UpW zUe)OV?=^SMUitap0Jia^A?a~OBmxoG`4oLOSGXedl;e5iIa;#k>AX*7W!{Apmr?dh zSRo9BqG~>N{``Q_oAbeL6%P>#`;A|%t&Ltt8zas8N-6VT4XWEwQ*Tq+c5rgBG$07c zcO2C78uEL=#ukRDAMnZ+u{%Ps>X5RJd3*?m{pg}(eT{{S``Wwrs<_ALMTux9^ebp? zK4j)PL?Xo-{yQhwInf;Bj-eLs0mXLPF#B{G@uJ0b?QY%kRs*4vp~!RN_EqDC7|Olh ze0E%WrLV&?oj2V3_jfZH_iD%84rq&~KC!1gPGaBxGV2+lFqlLpN42L|b>T<16})}g z-PerpySY9dlW~j(r2CMZv0tYd38kF#z58_eumSRLHC=F#bl+(NzhDiS_6pwU$ErEK zg{wu-7Y25AZ6*%)>3x~n``QWomw2acX0nuooyz70cc-b`XTYo%ij;?LzA3x8d&5gJ zmxuk49seo`tJ7JW>*QouX|b!UDpW^^v}d{KtMGE^THuyTo{Ui6Oajy@o5JjMuwFG; z$$-(;LFo!dPL+5aCMUZ7fa}_E9PA_+!>GPq5q-_lRXgjy3Pm3a>&y3?g-)=W?nFqN z$$I7BU(4JZcNBMk&{HNx!l8@{URjDd%P#tK=NXAK zLf4$XpkkJ1j>2K~Ghh3+$lF2EHSiWbi5JFi+4}VB)^Y1)cy2z^t8vcxIVuiW@Xn@M`B(@q(w7!N6GGvTYFQo6 z%u{pGN5pu_-3Z@i3)%L%$OtvTXVOIc4G8`Um6UM#@UR+=N$}IG%LuDR6jrPtY~}1p znAFe9Yr#^`J}ms}&nCK2e6(pp^LxDUtC}~Tw<;`7S4nQt8O;+T5jVH)ecammVqDhQ z+w=H=k+*T@tx4RMyWS#p`D<~boaYm|Z_^!@VxRnlw$`a^G`sV5OHCY|;SCawMYOP9 zk96j9QH;{z@qrXtspjZ19TmUKRYVCx|B&jThpzjdayZ{?@3016(s*>`owTV;kz0jh zsDnxO9sHoq@Aij*)XG^974N2lr;HbzA=PP+k98(C3r4`b{kzybZR|r#Wlr@ji=LXU* zhNuiNjhz$T>8k`k#LsPFD)i<88%YNnezY0(4G-6S{Mnm28!AeIWRH5Hwrj z4nyTZ9~Qlao1%4kp>K42O1i`hSIjp+C@7XpNw|k^KeZDbE|am6qX#so=-~EQj0p0|A?iE^J5r9VG$+AmJl$Ts2$L$? zhGRCS#2ZEg^C-L7DwJg2^~6|sh^JZ9QeC5>>FcSOi{unuqJK54_#o6^Q9+Jrey?&+H%|nlc>6Lj zE8{QoLS7M-?HBd zjSFlrEoLq*o+?b1gQsU!N#913D1GYVclynQ_xma39_@ue$gIB6o!RySeL2351&;EX z%LMa+S2QctrJ)KMFi)+^Gw%Qa{%|tQPHxnIKyou>3k&X9w zTK_WQn|f{5;vbF1N)$dB^qp&2#Lb8p6j zU@j#SC#@@Yj=f)24d@OSZy3>@ql88xAxfj!nv7#|8vPjTRdMyA{#uQu-wtLM7rtcY z6iexF&CX!$aj8#4kU_g+I1e)_o|N+?5IX=I^B&h7SaM$2O;NbBYf>e;yF7Jm$B9pF z0FA3`yl76X+g?aHx7d3O*m+4s0<$Qk^LZe=<*Bd#t5Oy~p6|-y9j%)gX@iFB=e)?~ zC$T2tW@Y$z;=c{*;{pk1gZyj4+12=<>mIcXHP8FGyVcJlDPVfwHC_z9*Syz9_Ir#| zcwg9*J~iuM!IQaK{$2eLmc3CSpj}{$E}4F@v;?lnRa{-N@1Zy+go6L z{A)aBM$UAenF34V`1ZL)A<}0$9oKSJwti{iQWJne>ia=Q<6^{;5%+sUi+Qf2*s=j; zxtkJOifuNBVhpa!wbK0={Q=%H=N!q{x&csbwRatgcgg^=9P6!OIqA=xgFDCuxEY@;cm9k4+Y8mHzqaio*eH zxNWYF1sxMy{wBF=i34^)Rv3K^IO}XTmPuTtjRqDlqWmrROsTGmb3bgOD78o+DkdglKJHbP0sZe+iIACF$=Hzw1o~&Ua`ms`~RnR6CCoh zGFS6_!n?ga@Np`oFK~rTRpu#O-zwmWiBCYBP4CbLC~FC4&a+LZ9h?eOo>2 zgiu*~2^(`4LAEF$G}WAMqaG(r z1-p31bcnPZm1ont(^y@n&wz&JX76%l?w<6fIY$Mpj{MJe^^i=fi=a-%+*7l3arRSn zx!8b?Uqf0aX_ae6GP6Jlt!kK1qXgCj^Pm&VO}wQDTVfM!^cZ_fmA1zbq|KXbaZ%Ry@ z=#=GI1f9Pbh1wq1+Z5wSgtO>y;!YCR1vMmcj_}rD zaImC-*is8wjbm8ge+H)fFR{wp%GZ1_*-9n1=anZ7SvC)*f{ug&*$j@->0_BemB2WC zYET2|4G48CN*ThEnf{&bui?)E*)PYN@;MJY~;mWa|#^P zmy{v|H+!96k5N3PD*Y!$zA}H1Fdo`D&R17ZL;^v1O+RBb^a*V!bj%efp$Q2^BRo-T z<`pZ#?7C{tiMwwo{p0SffQ;;8HfnenQQ%^?<@EG(g77|{Tx`EUL5RNQa|ZD>6_a>v zC%=YcvG_k(L$I#S)PuT^6cY)Rg=d`D)V8T24Y|D9S*ArMQ?>MavoicLssjsmdIeXh z5}FQ023cXhLj_g3qaU}PDT6n#d2^=#oBg>`Hs>>8XNoM48j@xoPvH0Z9XHU(0kS-I zLD(#x-0NoixQ-w1K|*@=aVoZd3l45Ru0ti=2}CFbO3%59Ros=$WHf6gT&WeC8G%h+ z_4Rxcwzw#|?#>kTDli+PptGwr%0JG~8wkz9CdwG=KacMAzWCZSpIYHU+74&y=8im; zOnTjac%Ee2!Xi+by+2eZ1UWRm#px^0+jA0ERA$UBeFgg0@=*i|qLL97X6-Hz6$j7f?#6oyufvx8G zk5;S}P6%g$=`vC1Hf@A+O?vF(6siA{_YAf2rozn5uz_uJhk$`*sUK zHvp$v*S%#c@maHv}Cy{?GKhs17i7)n&qu(RhEu*)f1fb?^aLzV?sD z|LLEGLw*Pep)gI95|&k5nP&J&VgOew$KqOHu{=d{xH)e@nvBWl1yfp4ZVx6ZFmG#| zi`eC{m%H$SofaFqxQ(1~Z4IwGbb|DX9mNQLPI}%PjGYtvRz<0-DTu`ogf!&Nx z6iB6g@0zhLZx{JgJ2Te^`ZrzVA8V-_^=BWmFI&`l05v_x*ej!t>m_)$d#pK=If_0( zt1#kkh(gZ)r?9H%Oj)MmlcX<@;n(o>xoC;~64fVMvuxc%uZyob%>4$n*hNGk$S_=e z{B5Vu2IVFJ8IRxB9=*A@bjSg$|AybP)rQ4yWSL+|xYqrjgI073r&)IR{l-P?T>vYe z_j#~k3a$=$0cH|V!!-&A;8$)7qyA*z|D|BQZC4ks;jVkbDfzLrNtu{RD~lS_R@Jy3 z7!kS-CP%EX4p>rgErzHu`;(n z&F@oR=pgeh`m6$%elT`pIYijg3Hc9)m&4>LOT_?UEL_lS(3Hd}amB z;326QmKjJ9wuLBd6vl-)>h^m}hZl+}dQ>{SY$&ulPjHosdfdSx>Zrt}X2!KLn1F27 z44E9K1u?Q1J7X>lYCQVXb1e@ey$%`9w;D~G@G6J@9KvhFCRTzG=#~tr`K*nH2UPrB zFlm}^l+a9fc}tAG_Pl49F4hBAg;#_p`I1Y;psXP0IYz`S3r*rQ23@qzR{A z)Ty|0yh*D_9atgPVmc9vT;HV1NMjbIqN`=x3LOB=j^4dW{H*yShV<$syA~E1EDW0I zm^j+x(ZO|ePpVv@1wH!bV~^s1qGjYOEPhsIY?N)Z)Z(^uJuqplWzp*==z z^OvjnOR}xll4+l+XZz*$#WhLRoFh&CjQ_Tqdu8_gvY;NlY`8_^W9&oP_}gK?XlB`i z)S;Q3g#A+v@I)`Ue_UOT>gw$DO0ZS%v${1Wr*av+1)hEe`M?88jE;$hk@uvR#sO#N ze}YT*>?YzpwsgN+8o(gbdM?nXDbi`e3n&j^6ERzUkJH+dwfQp2#{8*_%VAe|6dE!0 zkJ{R3_r_2|Q=3JMHrrJv84ioLM_eoL*&*rau&p3y%Co|iTF55T^&qRIIf3EOYbV$} zt{%%r{A)Qw9hn{k)*y9eNVs*zoNJlJu$qj0)G=CY#ZG$!ZE%)p1i_0M0=|tCX0M6+ zVT`%=RyE$H+rpwd|)SbCjvwTipIC* z^aU}F@CM*uK+`QV#Pj6-KuN`t1}w_uf6r%PFAYf!y7-YiQmw1y3Gen^nh|N(W#`TW zRL;(<1k1a#C@Vr}?lUwra$@=Gdv`qnN6DFe8p31IPYLz5CW3&MtE~Gyf=j44lWLn8 zs(r{@YH;N^$RQRv=UG{o-Qiu6v%*2}jwwkzmK7PDSme5STQk2JN zGu{7cP9RDtl6eh<2|Oqi&PR~UMn|$bc6WY@RP`-;D~`XrV#G)XrPXTB(S{yj4f z0H9R$7)oSq)1=c^6n=CN{7tUKzeH2AAUDHzD8N&bsxR^GTO+SwC1tt34 zzU_XgUwq9X3&Jwg3G3uku=4AJ6#ZTxiF4}qcVa4JE$w({*8c%EC0RTml^;}QJ;DCV zWx{;eqkYKfqNlBol2|?4_K1nvItylL;8R#iBMwW4OLsi?EXuL_l0n&l7j^QeT6H9qLRCsP%D)_!(6hDLQ? z$|3tdRG7qPCBOMu32;~G`jFS!)YsfxyUz2aJAp(&^cp*e?{~fKM9>X{TA>&)ttW0g z;We0ej=5CAPmz=hHJLyiYQg$?$>rYnU7idsok6QULgh;OFSn{hR8w`+{-5$5ai@x+UuG3mP2XtB>-y#a$i#{(bnxNb5XRih;JE)mBG1}Z*YV2xPFl)3kRf~#?pksF)-<05sZi=lI{O7_T_<4 zx9j^!Ff#?}<&Fq*BXRDQI_a5wJg`lprzNml?>>hN>id9s3)+XYWwmKD%Z-K8v z+N>QikR1}%N+6qu;k5QSV(<}un|VMYJkBcdCSsdVW`OHT^^(6Y7#hP~y&)yRAI)nF zdi=*MPIMnf8-!r!3v*8S8#Ry4x3B&devj`g7_mHoyJ~M+YyZ(+--1V~=}|)IS^0YRX7~fH z44IOyL>(r0P;u@Tad&5P`VS%@@4Et&TL$bWD8H*WWx2C*oL5m;N#S$9E?+8grxom} za@M4+A9PO*&t_3YlHH520ZP}uI}V#i*rMgHHKu$a>Jt(=0bjVB^^9dvMWtGJ>&IbSjF{Rg;d%0;I{CBC^%O!!WNDClUsHmkZl3W*E8_$V`cKy067{b zM?+vcjrln(oX-^$n)wS_dh~aB)Ma-4;B$Hdq$!`BzTSX#Rxy0EyP(>{M!-LnopcB6 z@P3OjX+-dxy{N~%))N(0bI)qt?Hc-=*+@rZ|K_zZsaJhRm-t4!BiZxrMy;|fvW5wH zHjxNO{XuJ(@YSv66<=t%$m6^|oG_K>9cscn$vF2!RB~}4C z*pab!7h@sr#GQGt8V}KdhP3mp;hm1Mh#d$83853Im#J{~J>4g&V4B(BFg`qvtr7{N zY2t3n{iey$WWvcE+&u?DRXt*bwTJprzEjQ~(9M$U+H0hBA-~3og1gikx$ouz(T{)? z{N^y0$pO>3$C-q5p0yF)<6)Ru2=x~+emy{q%Kp*nNbP4gz`xx!guZCBTmdJq+h^WZ zl}}Y5UEfZCyS-a^SyYKSDbw$cIPd#M1%w-CPu5G=CKrbw>Q!s-)ayc=agdui)mm8c%i%W6|C$rk1mEQDEy)_2Q-*DrNFBUXf?r z7)|Vv1!uucXq~1G^(P_)zel)j>7e59>b;S}5%fItzCpRye8aGtsZj*%0eUB3Uu@Ze zl)d!3>dOAJO7rx>xvwgMU3TT?Wz3F7}mG zvs#u_Op`OKb$h1uGA*k{l{e4SI}UB*ENxIdEoU%k$3tmKY<&UoXH>WD{e46ep`>0tuuKlcHtkfhsSrUU?}cxz=Q1QpnAmOiWOmNw_)6$eig^XunB@GH`wUpM}EykBB&yOq(3a!%IOw3 z!a@hsA&){->{~EYpP%-A8%oeM>uzc0o|UGa$R=7U-3D$N=(MHXK%PW1uzbbqpP~@o z3@;{y#kW>pw@~0a1==GF9jxu;-_~Ok@5M%i2f!{u0<^z2CE$)&Tr_=X#JT`zsQV)F z$tGdR&07!V-@#*%2c1>E!u&bhu1LK`FJ0Nx+OyS*V-_4p!3t($#>~T2uZ=Q|dnKLG z_gV97HQLHR=@B2)e@b0P;9>G>5V$nu^=eN|aMYgF`fX-iaE;Ai0C0s9#RpZb9$pW; zH|w}n6m_ac)=5x#@)%_$?hs|CpJJ9lol`-9rh&dpEKv5|7$0~>N5Yt7E_gobk5o+26V6o115s9#rC<4 z!F!trCVbj?TX%$Kc~Se^)+`6NyYdXzNkB9Vt`XTR^F5QMo|xkXVi&96Fi zik^$8RP!YzYsIVIqed;{p-kT;9D})C-P))4@;UG1DlBy?)q~P1$5})(7AjI278$1sCV7?9TOO$M0i>Fc(^EQQu-0 z*l9-_9jDY+z&mt2*Mt>8jkS6`txyB70yCW42o@Gl3|VdSTx1BM0m2QO-wqXkzJICm zm?<4!oeD@X!82sW&=+>CZ>ttNK}!NwZ#WxDmJp(FOWq_4fJnAIF&R&&^uEyfdwR*+ z(%1tFbrQVS#YRz@Q{n-c$b)6--Xh*9vCm#RF6p?X7BrxeWjv`!o5?T9`os=GVW9(| z(id662Z-y`&%>dny_wc|XY$?pK7~GG-88i^F|9%-|4 zhCyU2YDhpnI4Z^<+%j_B+Xf5cr;fPLa&&%Q_deI&l)a(>OWs$6I0c2_oa@2ZrW%yj zP3Sft<0XKS+#9b)3YdJ{D?kgdG!(EpfqMWru!3JwpOdTsmF@_V$d_Obs?G4N7hvZb zUR8z=X;h=^cP>?48@P=tky7}{?|H3Z4Y(1@!5K|Lpe3w@jS7pCn7Quu)KF8`!)AZ$@B`V6}-{t za%9_Hc3CAR+$mmn`ygci8c-$|%5N-a1plr^ug_655U>JT8&x5UHpWFN^$~VR;zdSZ zp32&jgS=oMZ9TGScv_aeo~hYHi%DrEt`B{lZ9&lS$+InI9F0w<)Ov-W{#8PnMt`yi zN(N2zBfl>I8l?uMXi<}paQ7-;w%U?n2?_U9; zY%P~A3g_>mS^#aK2IS!>MMQQmy7+4H$=p8xNX##Cj%>1JxBED+RlF|v6AYV-$+Ka~ ziAzLv;=Ao;h&NBaT5s7+5JYM2j%{GGNbw^b_B>UY@oud2_kvrUEE>^e4pLO<}W8B9ej@;*#` z1>luBJUAU~RjWZfeBVCC6D7lh)*B)h!D!F>tE#&X%GLa~bNHi)Snz)Tp&GX(zDOB39E#v=eScF?m#WQGJP6EIIDLDYqycq1>slkk;;< zo3V}38-9Nmgi{*`TnE2Kh zo`hz&Z7Q5NPDO#kELM~RLOS$1DQEN!D`H`5r+a75p5H^lA7AE;Nxb$%_)>tI;2~P* zcaMgTUN6Ihft(R8iIKv%T5DUcc9$bRl6>Z9V8XN_s*<>mIgpsgS2b$5QU~>W#VbIH zj&F@uCVA5h0W3X$?oEfBMLP$~^?2Cv4n#`+E>i#CT9`cG(!O(Yf_ko#2oMaLd*;F0 zdg&7bH8bgs-+h1xXr$EunEl94nJMzKPJLm(?mr*fvk(jML$h(exi(V{$Z5w7h9-kZ zTjuDD@49Ersu)4z-T|$?i;+v?YQIednKjecU@?^RyTWwE2jSyXpNkZ0 zDNt&V&?x*2gtxk(_jDMUK5=~Nm}JC%}A%jC!I zP06x~*Qf4=`Z1mxS=;cFA#OWAaRt=&x%jHEZOatJpH6M%`=jpzIws9A&2Xr%d2+LD z2>l(_cuaOBLHvkeI)ElvEjuKMpPp^mtm#s(nkO91cQ54<34+7hI|Rd^Q5RHx&l37;!L+!M zr4+5t4K{hZW)`6C7Px@c3~`>_jFC(J0Wlt52kS6y5p)t6YB1YmD@3&~%S9^UYh3B# zHMOcGJji&;h~>z@_lxbbAfQmv(P{aWb~XYYBoAtMzyqX-uiSB1gM}BxTK!X|%m?#7 zx|L#L?}{XgBENA~KvBVh>m*@nTh#iB%W`G@y6+Sa_gbO@^QKCmx)$j9w)9XgurJUD z!f`jvQacT>Szz2H1kiJv_+F$%yoaKQ)sR3?@RuCJpCGMMcWUmBu=3r(mi%aY99$D) zyAyKv`JWwhjV?h}wd!ZHV#J{O2F$GJqJBy~rm+n8KUa)>Q>y%0Klhq+Yp;4e35vQ<6P$us+rpuZWtbH zS&2G*@4(IMhV{jP${)&2Ks7QR2~n2a!%}v_Gdg*b)fWBwHTzD!BP2B4KcJFP&bSPu zpZV57RRKSLcuS-EV3+(KZttqMVDcX@r|053a9?wEJyXJn9n@0+ zw~@yXU{+)@d5C~L9*A!Ch^L3Ai96o;ZI|+|J#Nhnbn!@i$YOj$?+Kyj$(O0Z^cy+S z&Qq@xiI>j~<0CyUaqG0*0obj=B~6daA3&5gaoF& z&YQ>3j!fUY;Qj>dIw-BiUrfZi2jLROls=@2$RIudtttXy=vT6E|LNxZSiqRr&0Jt! z-#Keq4fGn;fhJ>MBhb3#fJJP;UU~x&e$S>DmfSr&hT3yodw9+;1^OB$A3cAPga~ZA zGTi~rz=p)l2#LwvNwrNDDS!lyL_BdUnHj6nIsc*lQEpH~Zpj?UmNew2n+!W*TIZi_Oag09GYU32Sq;F2{7GJVGYgMfsGLN{l_n6Y7gl0ekKog~ zIh4z?9DK^33InO)-u!8>I{AJzA4BuU^!38J3QPr_g-k9Mcz!}!v6QVpRZmPl9kWMw z^1Q?!A|s92jj7x0w*)_}Cv7A`AW$3A6lgjyRP*6 zhkiJFZw!dUe>bh9t)ZG&*w^j>H9qU${%gC_;ktRHBQ07J>L)N!K)l-#ZBwdPKxs7y z%}LF>m-J`Ln>uWwSoB%gu6gAfM_E*T#_Sn>8-Z?@DRnlG7o#=zfaTsu-k+p9KPY>P zvON%Z?-ae#8Blo!a0_kURe9zunBtFL{)`68=b@AFDgI=fRrVe6meL9O(w(%my2%eu zeFlNM^cYxU%xi}TXrDud38`QFt+b8$L6c_r{@ZU`FAZpOBF%k8j?sMUdCOQuS#ws%*7H;B~TvFs8e} zZX(5j<%X{R*UF7zAVS*;Vnn*}%2+YOZDZv`#2UTTiYb(=XL310nhmV2AFr_ihU>0L|=)uEJ&>4m9Ywk)P0~ z^xTp)2`|d8603_EN^N3f(hSd}YlVYh;Qu4U{iIwSJuM~ZB2GnJu1=qwg0Bk32w}-c_%>b83wJMJ-0pJ?7R<}_y6_@RBU@$WLijJ$j{fWUVtX`sQ}3Ud#z}Hk z`o(`)=HKx!Rl+?iAiLJOUbUyvzqW7EBmoNr8BNAxzl1p9!r4J^w8!2au}#m5_|}dF zz7;t2hdX`y9-{%4P3yJy;EqGYBafFx-;Wkv*x<~UjJ6D4`g(hdZp7IlppU370i5rq z$ZvoYtjNOjz)}*p+t;k5Gv~j&t6{|iU(80^4$8b1)=zm|v=c<%-_I-kRb8lKGt+49 z7(9L)cv0lN-S4ZG!FwV_fuulnqEP+5+Q18ECqM0nwHv~%Dm`BnmDddEiD{fP(LVRK z^t5Hh3D*m95}NMj{G($aj=g<+s=3W#asqAZ>hUQP4xOWQVPQRTc15pm>sv8VXD~3L zlC3;%lV`9yPt(J4?X~_45#(LzJo;0Q_fkqFZ)l(WCK=iCa+T}ix;rH|R6d!VwAG!b z`+&CanRGcv7f()_Z7$D~-%<;io6ST?6tea0lhj8*)Z#qM8<2*m+5yke$7}@V;xW(b zNW)^=4%KQjtV}$#V(Mz{yx9bv;Hp$BkOscJW%uIH#hDWCj|HZzafo-kx4Hw$FVos4 zd(+L_S?Q%5yw_60jlz}7(X0}vIxYIiLT4s}?b zySXX~oix0fVN44m-J@;`$nCQ&lQ95p4b%61IcfVHXtrnEE`9kU1gprwS{O4?H2E#H z6d$oah+;O)LfuYR*L02V*UcUaea3)K;_u_Ajb5YP{ZGzR0km($^hlZi`g}&-6zV2S z&7+M0G5#J;9n>5{Q_{bO^z*&`{&|lEZ&p3%h zXX`E=U0gs*{7G1djnf&S-e*M!B_P*su@&9!JB*O=6D%fvA#8QYzwI{Ezgnp1?7@;6 zzA#}??)Wqn$Zg&n14anxZUEab=E%mGK*>;S80fgtE20)2dIS0Mv>Q6-#rQ@`okdJq zD_b&P6)p{adr-x|2%|j>eu<5He;mBhi+nH+?iRfs@-0^ci8@&iJPa&>_f^VTuF{vC zd!&I*q#xi#?Q@hen0#%oc@!aMpvL&Ne<8m0%HU^BVu_PI_PNnI!tXbP(!bhbib||N zGX+jXoq9LveC@n^cq*VIQ`P9%IZ6@7qZAkKV!pe6IcWt6yS8v^e(uCXHKu!E@_iE?KH3Fpi3K@=!xs4Na zr*13c$h*C7h3X2^cze6{Z1|jV`5Lsbw8iiLoS^x4U{u`2s#dVl!!GY)vv591_eSzA zl1@=$t)qdG5noUOrhyWuM7g3QT~8^hpa-4PZYq3loBB%aT$1Q+odMs<(ViW^jKt2s zZ?G1`mhNJ!*1S8k7*=R9Kz-SrFDV*UyDRzPH|to(N#u^R=2_eYS;jsokKxFrbVL`L zPJ&&vE>Ur=)yOl73|}K~suP(fbg9oH^W_#@0zP4r6=N`w>Xq(t!h-hD-*-IOjEFi|z7-i*t#A%N*tbA#a}3xpW%vPviw3fybl^X5 z#bNhXaPAmYZw_K~J_f&$Z8J^w$o0rIdNk--o&SYol@rj6-QN$)w2GwnBob%vtA0KC z9#1dKeJ16Fw6NR(7RTnQPSt4>K)d-m>WXpW_p9cj*s}s4wW{*8G{A>j?F&#u{ zcNg5V*>^=A*%*l2&2k<3sk>zDEzX{7*Xi-;epPyW6gc%~@OZVa`OznXO2|6#V8G zy_mQ_Rifi^R0*FB5q3tl;5lEoN=k4hj5xZ5x5OoK!!2*?hh;#G7$aj74=WC;scHh( z<57O)OrsU=hTY`VO*|l8Ypy!J%s9CQ?eE)Q~GkBcqVe?+DYh3<( zbKgmi?`zBS&Ri`T5E3`SgWQSARC}HP=ri!F5WCUw$C9IL$hGA~A8^w^Q7T>Q>Ld{m zssQhz+ya7%50Fh$bq#lU_G!r0xaItB1_%Dy>K6V|f=9)>P~I{%U1GiO-g}hCdkxRZ z@q^L(3x479fIt$RKiMo&n02 z7*Irn4};8=&S!p&{lu(8fZp;=>2Cd|By}8BbA(&d?AG@1 z6deNAjxHk5k~?@(q>#J)&nlk~Hs_<|3O(2Z0jG8eI=MtF%mKh1C zz%8Ox%d;~%^1dJ$0c6+*%)x!PpCIwBk7vDZ;R~{}n$jOc@Ip4c&R_Q@JqLphcl%tc zgt+5d`7@;@+z2AH5SEW6e}pEQOrF(>c@991_jtXoxO;sPFr&{5xbt zd3*P=BRO{FjBF2Q=67l?&&xzqN2NJhA&%i)KqcqR3_9F33&_T{bfah+oY4snW5PYh+@l@QMy`y{|8ab+b+k#U!kKnZ=JBHjY2 z3}oySW)}~((+(c%VvOI*&tM*8=BaMy5(k*wIRZ$36I&%N`UWatp7uH_E4Ao)cS&sv zK1%C^Y^5EHj5%N4WC}UY_+|)fdmVN zy4iQ*r)aJg|HxvPH z9`jc>c3FRqR-Mm(um$y0e6};uHMLQlx z%akp77+o5|n)U6!CFRFg!SvQ~V&BzsDs8YsnGv-@FM2jDmFQ(_56YFr%{;~ib)zKX z@AS;mi}7;S*~CMFa+L~9!F`<9G!r9^T6_3De!2NCmANOrGw33Vr)&^N8R_WlIKS`J{@-B_>C?%XA-p3zM$r+YGN;S`hrhOI26)FYS{}F{9rUq4UftM7s)n?h82+c&~^@gKUY; z4EJtNtpP8#5hCZwbEeGm(Bk$vrcnD-lbnHvU4vx5lX_G`rNKTs2qkK8W0s z4ex7fsJQpL5!`>_8YvOfp?5F1K~MvBn65ym2;c2CC}o+_?*2&8XOTNe$1GU}c+PUZ zP+Q49rlH0NDU5NeaBYxH?glj;P~XaGVcy={a2*v1El-;t7#u`zI=F+cnzW8}7c=iZ zMTy;krvv-11GjRGb`x!LI=!q##=qoZen9kZ{7GK?B3LL zm{skGUOjM5zT{bSvv1EWxv#?hm~jHu2EvkVH_L6|Qeg|b7{vLa5Q6ybc1YbNeo2Mn zVR^M9sAJZ60}JtFD9Gc-IR}jg@8xaxU zv0I|oXp&d0D||s|pgVlB92W9*aQ8V-*WnjyyIn3rw%8~#%wC)rNn?eF4gvEN*~i@g zJCE*E$lKN2Iu1%~$;=C6bf+RHHSY85x35PB7yy{q*ZLzratZq=q~AsBYWaNAKd=5E zoBF-0t91vW?>2iGMr5z|)lm1)OKa_>o|9)`sM|GiHWH0PM zrzET%iGt>7LgC<|~VDrpZHRe=Bikc3pTm8%%ImQ~>hN zZuy(O{L=vIcUMHOPqtx?UI5lHH0A|}pL%)1E%Lf^IH__Ml53>HFAc7%mP_&g&Sdm{ zuY7Uw@Ug;fV3Wmv9`pga!O4`o(3^R@+)=J#CKs{hI_{tkL0^mZjTkhuYsQ)e*fneA z_j$d4UhTXZN8xR zEC9~wkKoSCh(SI6c;E#g_KOj|93wdlEx6G@p??y&erC1W>(jE0f%+qU_Ec{3AYA<> zE0K#mw9DV&e*(6fOvXh}FSKjCCpKAmbUREbzUHmLyeDDZ^XyfeyI#rZ-lEJVZnJR9 zR)UQ`Hleko7iX(F$yWyZJ{!Ng!5QKVqDK1}9aqq9Vt|ve7ffM>A>V2SeePs{hL{aO zJU?>LVQq21UxC~J&h4CZd^t=_Q=>RKLN1vXhD)!a-Ta!^-8~i!4dN$sQ7mOOU-h4uFeM! zAKmEOPw6*AM9r%3L*>vd9P9!;Xt!*u3r5*X8*Av5hPCfQQ2$JIE9!I*@($RmhcLpb zS0ZPpWTDzP-ju@2qI@U*y_d1d@8`pf4s?(CDGmNq)faHVSWCK{uU%5$UvFQMX#=P zK`2xUmM5rp2s(-cA^J4@T(S84ve7?*A)8q5xEGWa-N%%sn_JDQ86xwtnzqJF!OW=TRMi%g@O;SwEfGJ6FdG&`K9{}{cDn$@F z;mo)CZAUa{Ib1=#0DU!~Mqt%JXV7U^?UKCGXXT9QZ)tfQTm!~AB&Y(~G9^VoL7p55 zZeAL=ixswMA*TWW$%Mqp4z=-IKmwcFBBp!#g$gF}$vxx#-X$!(`eW#TtO$;h2$!#n zKoUo$oq}HNx;h)r$_f?wRSJ z$duE0oVq>?dX85{%=3*Riwqb0WVY3z7x~;ikAkv%x?1f>TpJ~gS!j=IPnAqpjRTZ8t@R6uRO=Vd+oXa@=AC8dQkYFf}Up!v)MA(7`<`YQeeghxVl|^ zoOns~R4BJ(#pam~N{~zM7lQ`>sKHZe#>180B4mtsmy(ZI_;(*i3TDFx_p<8{>__GP zEJU@7qHu4qIuNfHPBG+b{%XB2_7qOi9)g7fF!dX1<33x$`RvojgY3IsUW86|K>XXn z?lhn+ImoG$*-NYfF3*Bfbox(UWwwb9f_hxei`XH7NVgwxIC>+}0C-9=fV)&G$lq`JMnfJk z)`0*Gs3YeggHIBr`ID>>Zx!RREG^bw=F>GgGW>7yexBXntegNDn*l<_K3MKC((eNf{$iHD;dl(_jaaVUcEWIHqzt;3n5|DncT z@hd)3T;p$))t0!)x+lppC&_S_=v)?&L8_Q@pxr;L^viR%Qhl2etJ+25x?OKB(D;vCtF0#4(8n-j!%V{I>Qx z2MJta&?$kYXu(*cRFo-wswZQhMtT{f7H z#BjnX=zrx49Is4{r4~}^3QH%Xf{sw)9&%PNvp`K#P}WL_+tm7G>r}Aj^AW!!6Eny~ zBzPTh>Okr}PW=?MBfAP*f4Q$bZin>l^DG{F_wdAM$K5GVqG|7xVCKHTgl!7uc{l<~ z)|-R+s(PSXS_G;e>fe0Du+D+|cCIFZUy`eZV56ULjo5cZ|7)!bvyFEJmF)FZ1DeX< z*KnO_jqJY)tPB;jlDNe6w6~o?Cvqieyf)rg8{Mhom3P52_@&Z4*?|#YU$#@BaqW}( z)#+dplBp2;@p^UqHO$hh%CpEmYDW*_oA!&Ol?yM#JH+}v^L~J+1vbOS7btc3w3oqv z8@(SPufv=7u9ar(P?)X(9Y5uGU##os?uR*tKSnRY|9`oP*eBc!n}WrnOjOQ)P3py( zY4N5Ob|}Xue7Ud@G0@1lx|2Qc^4Bj^#ehoC(R@RUpjgWu-POdGTCajp6dWnI#LAPG zODN=FmqM(eM2Y}@-{6ea_8&5+n@aXtW72!x0!yOOBliyO6Djd||ES#;20a!$Gh{f? zUEFFr8*V%V0CpRBN$%9zhT+9zuXa=|QR@scjnZ#{Fre$8o$3z^8TsE+SEZdlzL9Vv zWW)i9SPVbHCDaNeL|d<05@P>$~kb?iR(O@_%i1@SkdTK`D2w z{SEnsO0}Hb#QN;nvfyZ5o>aPfHR_bktuwZK^`4j!2Fbq=s1pfDs1LzvFh_`?pi;r0 z=Bn)hSE()`($HMlf|bMfEuT;7H1TfH9Vz0W)Z4LBVt)~5#x4B#v9f2~X9HDF`N|IcQ?%BK4D$Zysd<>kqCrJxU z5wSZ7#Q(Gf#7Sa!x9!hg`?>!}ImSh2Rm74~jXBAVpNH?gu{3|!gTSW0aa4i6Y9pjt-A|S`QYmM}4=J6_vb=r4td_hgWD{A=lUb>(& zVrCCHkIq#~TgI!O9kGT73+ZFtkoHo>(O#*f?ZDC?Hrw40%2eff0u&9Cwh|~63M8q3 z0(&=P)8)KlFFX#3ef(MOiY?kXG90qV=Rr(m(|9nsu{`t4$%4o9mz>g_-c6*Vw)ZE` zM(Dzfp(UL1)$Q&k zX4tL;y}7D%=!akLMKNu=erx_(?+SaQB+*2zC-Ka_}QPE+s=+{ z<(!YWdwEKh#ev4pm=9lfalX`nWB##a1$dPjyaZ9B%8$~}VO!ndB@d{-HvcrKmnsr) z3B>CBRDY&F-DX5#%=9W0l{45%2(mwp?@L#97IKmV<83VJnbI>U(aAvx>fKe@-YSGX z!8nBD->k^Do^R61Se_}q0d;&kIvIU`dbqS8b2I!`&cwn`2_AMLH_h5QJ02hW+elx*Nv^2^)sUtJ`DUS~3m@{&89NH6UC7uS`@I z#041MJhl{BiuA zlUIpBRIzS1U+G@ny!BQVtxW4vzTfPHT2%hle29(H7!l=;TyFosVgI&e)u4QxK6CEp zQvOe4^`snEE$@W-hd|J5S_#f-W`Tk--7&@!wl6>cb%5YzlxTeq*~F)Io!<2^ebyPg7!#(rCt-?;`S}N_4Bk-i`=jy?11U* zC+u_WkDq_P>SZ3`^d(xU3&xx_W4&$oXeo@rOhX12GuY;&n3r*_Y@8tC7;FnZYhQ`Hm5j{_<1ENH2l z5ebe*J)dtg?_xiP=ZW8xqu!`}!iL|L!_8{lr27b3Sc)BK#z{NkKs$kkT60}1V@cSB z7_mR#tF|Z%PnMTcju&UDQD#N64)_S1)8Bi!VrgzT*@z|P=T7@KDdJxP+ef=i6yxr0 z+DV7&l z&Qa9Y?xlW7AP*VXlqtOAM4{`Mx6&CVR>0bwRq7RRiD%9I>uj}U##${@FLN9nrA4ZD zWP1K``ABD^fVl3t8laMP%)$zH326#Ov4z}{FA%oAw~KhijVj@+#80b3mHKE*1B{1Xp7GwTt*-~;U^#Bdg#bsh?2fNVKSr?z!5!Mf*}KKjsFaVo0y8!9&ySg zYgpiiE}EDk#C3i}9~0djP5cA zcny&Xp36;-&;JKs|BGAkuTa=l6#H#6g8M1%d^|bA*qMuegP#_Ud1z#9B1;TI; zXJuVwV2R|H#V7dL*v!LVMFLJ|v|Q#P$xt`rlE$_hsO>)aIY9aEiFTF)E42BGmigtG zrLQ^tGR=v&2{LI%{>FVb$>w%0P45T;cAzsG z4^<=))jy%l-(Umy(Lsxsqj0?P1IU<^yYq z|9<>H^2v(g^YbA$o--%C{Relr3agdA27NRc-BJp*^8Fo2>x!UcnI%nQ=ns*Jz||(R zbnZ7qANL%jtFK%y??OUrd5qsrY-S?QjYLo6lJ;xX@-6mbNxzo0zpjzxv0K$n_hd)*_P9f*>ddTz`0>y+V`Hc0lhVUwKE?VNv7BbL4>b`hde)5o+D+z+I7MGME5>zeh>uy zW4d7SnH$L^X~uP@etstK=gavY08+rg1|$N=zDuHC2blFG=QMztJu=#EyIdmZCxkIY z-}P2Z03*;Nz4aEE=mES(IJ+(4H?d1Y+yC<{S!Y?7&Q9*%4HkTT!bVa~2l|V5F!00hAsh*Hpm{xiWv6!=uDaIJ3;LDV=!ObtrqhnAq~G^XCDTd)y`v$pOa{A~^mtl&`hAFSYY4e)d>-DcqF)`=zo zjcD6WL5zjsW4*RhISH4F)?W%wFK^5jg0*At6Hd9R3A&|ViQK^GE6;leLht7}i7kWY zlyP%0A8uu7_s>)PuS@mc;lpklt6IE{;512xY9DYF?HVEfIeC5x4!q}|B^BvguK;1k z*uhOnGy2HSoBDl#KH)VW&<_jwn^)!Ok1^`oPP}}P{&)tjqVTH#C1Rh!LdGAm)fVu< zG!Qq@dFa(SYQm6wZb^=(Taek$AP1Rln*gdy#UrPBY7Bcjh4aEAN|5_}l^i)Uog^B6 zj_^u7WLsO^57D@`(o^~1mt$D5pF~hBRk7YO&LW2Uoz*Q<$bgGwzunn}d+UVV=>rv< znKr@X^{5QK1q+IOoNVzP;X}?BUO4{R$MsQwuhPi>tYuNLYNAAa7 zoH_cpMqWrJ{8)r%&To5r_FH4>1Rb6<`G5ESPr^7`MJ>7w?MOu01qsDOnmW z3AArj1SK-__?h_77I&jm`M=&C1f>E$**+2A{``NC*1tDJ);89M-pZi+1$DOyxWRY` z-0pcnEO$Xew;oe}Gg+6;^W#V}^|6v#>*ta42_mYXm5Jdtx28W2HpfCnOKu6#f_ z2betA$q1f)!;)cV4@@N9+RhUB73O2F0|hG&gYW2ZQKW%P*F*PGkDu_)@A|+AbIJ;4{U5Gx2U5V@R_Fd3` zy^@O0nObpNCZ~2EsTmfmNu^n+Q{s|aHOR6@`vYwMMpue;)G~AB7Ua%uzJAC*o{ZQvky(c^wbS9Ej^L`v zTrLZV&aJ(UJUF@ z-8SG6pn>p1QD_@2iOIj68*AVt$ve_^IQq2HKOdWO{V|+5bqSrp;KMH@X1oLO25>_Tk4@87ispEpl$xU z{7A0mkJs+0Cjk@2+dAv$5_M2A;G!QSlCqpXzJKvp8(l)b~>8#>=ow(#7 zJ!0DZEF9CzASy(TG)78oLH5vIBhn2eIo&4C7W7#M!_wnhkw5Q=wxS=e`$?aAzx+SH zZUa%ssSFKeE0^Fa#nj?BqmB2KI8(LVJy$4W?|D$0OYa=GrWEvxLRs3o?;UB5hr4FpprI(%B=GS?L zW~bSTF7+M1#RPncng=>z!x-KnNR5lh0d{2e8spZD9fRMV#cyVoM}sA2b4KaoL7MxW zWuQP?-jm>g_<2>G?%u=#-HdRU!uksQW0GaU4TqSf^Y%jgzbwS+J^Of+Q5HhR2Nc%2 z)hl>nG%6D@cch7wGm0gN9S?X%>?dSvPo)T~n7jhT6+=w?B~K4xKIxEq5Jfa$Vq0d= zPaKuC>#rD6Zu`XWpU(3p)~6?%NY+3JcmyI1t>6Sh2gCMz=J{KJ9Gf*Y2xk&6stZyN zPzVmti`QGLN1YW)?cH^vszue$x{e2(wvCpCh2{X2J3!Yw4KS{Z*#D#KtD~acyLSm` z7(r=<5(Oj%5rvUXQ9@EW6hv|e=^PrV!62oj1*E%kkS=LSY3UeXfVp2i_k9oNuJc=W z{nna4SS*&~r}lpKv-f^Bag@XV^6RC@Xzq;wrEzgDk0UFb&@?8#fDi`XYhoIC#z8{4 z5mhJ|-mAIm*ofWwU0Owd{NH1koKb#(J2J)RTF7O7A$x`#S6+vJ?^>!fisR;lnpR1yB|88Z`_ zKGP9y-YYzj1foeQ&$obHXz-gSSG~jQKi;9>=xHUvzuV3M{Edx^#89SIyaC6+ffsNM zB^r{T0J`lPXZLa_OwPGRz%<`EDSxFYasgA$p=s*JgFJY^uB?4%Es2Ru${mfhRl=k=Q zu?JN5mj;800B(=^Fw{-ffX4@*E_h|d7WNQ-Gbg35{&Imw@|Af1(;^K9ZGeHzhV45Y z#vRrG1IA~-;#~4ze$kT9-Yq#i$0(a*bA2^?+|g54<+nWNiw+>OKpUkDig&jJ&!1?D zLLf9DZ^>l27t-jlK~MjN?{{&xDjqJ_amOYIKd>SF*YyHIMM%lox4QCnHMJ8@z>u$$ z5TCRA*XG{J-MR*tsy4jU-DMM<)zwUrA;3tRd5HbB*TD48-H8tj^YJ;(AKNurO%ssi zkwNCPRxHD&soPg###sPu=$ut$VLJb(GVZiY(sL!x&B0)jgibkSxaEX)(%o&!qOiQy z4po{bBS2-V1YAKNCEn~DLTpp++KNp`GErls9y{M09j!F{sESu`tf>!j`a*5BT*+DddTOse}KFNFD$3hXy&X0{#boIN*y5c9xSFQnz6_rlAQB z>2L!I5DW;961J{EzclSC@iXWA!CC;TN^RBq#&=21;UiSbhV_5x5g2h_;{Rs6rEEB! zkqdG|H1Px;)3j|-SH7CfDU)nNx*L_2&h1Xrvb<~Tu#3-bV(Yp3)R;7)HczK{HW;=ccj;BtY! z9fPq`3S;rC@HIAr`Fg|py9Osf0JvatTtIC*36aJF^o4%mf?z)v_qgWwfRWbPK(j1W zUHJCrl7C)4vp=Rs$@z&O{=b@@G#Ao9EP3yS9~&m#C8^a3+A9~ zaTxGm?jo~u^K5`zgHmrE+wea-S2W-h?Jwm1L_8pU1&He2|AUBP&)BB_9TBO9;~Uf; znq8X;Gg`E8_(;o}9fo&H4E?xP=hIOuWLo|NP^>%mW{G%Ov!waEA4UcA*_$VYJfP#H ziN=uhDAg4YdFL+&ohMPs`#(5ni)KKDE@)Qyq!hOHb^dWr3F{Fyg#T);CAWYw(^7=}UTOY>ZW8O`Frjws)<1Lc z%!?Dre-c)Wbf|}|Q4al92lqPiBOiSd^|X<37rH_hBw99@+-mxR>2saVb2s)|S72q> zU$AnRW)k$TR?<)J{yfl}#5kyKa|=Wf2aMyEH>uRQZE!-$iclpb>+zzpb~pCN`TeeI zue&L|Y3@}lx^AkeBkXh>>1O=f`J>-D%L@E2S9(NmuiExgkcNjL^kK*GqL4|vo0=D7 zC6s)oE7^gKQf>rK(^f+@2jG?VzZ0~^Yt9avPE?uHyGfD)RL>^SKd3s5zYL>h$Sc!- zH;h`nlDaR+2p%fgzHQt56J_)9tIqJvQZ4M?g?MC>e1`O&`BX#xg`2m03e@0UmOhc7NYYr*@=IU{X(z)m$9 zYCoVd1QNM#3f&Z{n;$9iP_8T9$P7;h`fVW}f|0rqUNE4$1Pna@vQCN8yS>|{3l3H# z_P$Fu_cE&$4sS9L{_j@)#rB0eHi+Pn^ugBI=b+s?*AO>^0Er{B(vxS^^XskV^fa>G zb8_l@cc1;0H&JIM#0K%TxwseXyR9hZdU2&t{T8$^9Wuy7%3rN)sQ)W&C}Mmk^zXCI zblh>N@Sp}shfC?FJ~Bgqmw86v8YTn?2HiIfESu=zdK=uz*^?z_VleM7{thEPUmT45 z>eSU+#W)X$OoghMyoKu7aB2N>!(ack;R*d+!T-MD1=ZLztd1n_Sts6u>`y*$Da+Cf zX(w@9-svPt&0=~z2ZX|m^Do9C&uMari0nz%aFT$f%Iv zeSzk;x*3Hk!v2PO`+wotdS~%j+JCpVXQb7H2_UPJm>y#L(eG#9+iOkW4nb~uN|ZoH zaVo^C^OpBxk)Wl05@dA?nKui@I}PXxM3%doe4=Fw4!s#<&T{J?=;Hrt;5YEWqlB3l zS0MUEZHC7J0xBvqoL*XIt0sQ-6y?A_F2jgTJa)>b<46j{KlIB2AO`ecYrfO;6H?Il z)&`YBK2+D{t|+yK*5~fZ($2~5OXHM~{{{zKrU1GbZhCZ4^*@q~c;+mWR1Hc(02AN4 zFij@MP!h9ib}cwuJ80mUF(=UJ(V;>kH4-$aN^VwD4vioI1d~gL2t>8q&+o50^iVV;= zX85sh_rua4!L?5mnll!q-*D2GwcqqkJ3fV)wL#-l)A z{{i^}Qc8bpIOtP2q&3d#7u)g8iy-t#(4q(bIdWM}@2qTLpoRX}q zk=CfwoyeZ{md_b!RN2_fo*0<>=Uo&bU)bG6kp&0w2*d9Uht?`oK20Kl;j{9g;-ABF z*(_*tm2odmH`9V7NG{z`mAeC07}28s%bjrszDxH08z8rGN?qH_i%elg$}?-TQ=O83 zBvCoXB~8UjKSCd$M7@_rPcexv9uG7zKF^vr<8hwU6sl|~9}*FE>`GQ5Lu zFB6zXT-F|T-XdU(u`A!@*HsxTHA{;WM8fMuA{-NUX);IJMN4iW>q;@Jo(-2dt;Q4R z@UR1bt`;;=E(uGc3dW{U7rb#1h>Tn$wR{=Cu2uwVcmow zDfxEMQoB-#&iShRxtV#h@mZq%Tu(9L&!lfZo)(-<9rklM6K`AV7uh+RMdkT z&T@d|Mch*Z$Ju zi?Ka^`V2{g*;;A}npxc+8gKLT`HF(8l2W3>#%^&JHVEFf;piya3Xd(FyKOPEKgy{PP&Bndx zUPMM<)4MlAPPLqyP_vgm3}Dk`fQ&TXsy?BfAgR;$*GcS;!(3&Zz1M#_%ov-H-2}b= zezUyw-k@5dd$v9K5}O($UV^0uBZ0RMht^?u`}0Hi$eOKs{NaFD)LjU~!|RcXC=2+( znO1eznu$3};G_D(#-JmkGx0yHUzZg#;Zh8e50iAXqs<&HA0*?5{vA8)4j9ttYqK{m zn1sWbPFCGv7vk%wGyxqR{;^`Xmvoo<{EtVSQsawI_G(TtQaw?Au^!Wxiy*aRILD~d zT;AG|;k?TepfS+q?gj}xK9_Z~gee9X4FzJ+8XYg)jfWe%>4CY=-TTcCb|`i2Kg7Vg zR!im^u2#LMruzwd9BMC`?KR{^8h_?k_x?%=lPh@uzq>h#nOwYEA~_n|GlOz_yrZvV zR3VaJWmx|3^20a0L84aU`BkO>>Dryvw*$0{kaIKtfuC=Tv%e$!1U(Wp+I7_QFIKD@ z#+^-WO7)~*6R;p?GJ+&hA5QX}o2_oOvX*yOI@z<$9Al2E7qCK_-WkaM;=SYqLk@Kw z=?A6-qk2ruIlVmA(J#HLx6puQA^`ua0SZEsCBii2CG7L=9F}&tOh@hKJe>qAr0p3d zBam_Q=Rm-6!!d~m9Fr{5(*#r<2G+^JE`Fp;3q4+MIAv77VU_MY<_Wb&*YE0l^yCTK zYHX4?ja%dR1c*<)AuAsS8oH;>r)${7&6%2*Y2-t{%fYISJ=#7^6iIvcO&t%QucmKa z)Zlvs2ar^zzV*8J+@QK6ChJ5VH05E@hPm}R)XTlsd+zR3Y~Qs)4^o?gxYLhr@;_@K zo#^eJs!(IX{=g4`^cK^b4-J2QL&cSdn_4E)Pe>S*0@$IRf%S{^O3W98^5v~^?MI1Q zX~Fu0Ha{V4rVw@E=8|-%ssR@h&>sP$Bg5ZsV=i$`+|yuxEL zx3MO_TgDtjndq?_FeI~_p;W#R?j_>}&R*;j5x$CP5S_$r1bIG@-a7s6gzH;39k*Y1 zD+l~h-z0Y6yr06REC5=6OTJ~a>l*<;O*%Ud7_!w5IY4kK7Nrop-8^+E-=Q%@DPJxEgg-z1sfn- z$g8%juxn1uFY5rm-|<=a{FCK9TGzE@sISKfdl)qmRr9Va7?{YQ=SJ%NScwv3U){BS z`TD#}!0;N`X8mm7YDqiZ?{IVnh!0op*}C%xysY2XS(&T5sETQ`XKR1j3gT(M;@+FC5{6G-ahuKNRkEDyBq4)k;p7>{Lh2qq@n>TkX69uWv z9%8@`Y}cnRKYw4!Z6bGKUAzY5^I6zQ;HMk6%sJbGrE|xFj?!s2%-on1|BTZ(-NtRk)mfef*(*^M0pqSHOCl}U&P6n6`NXu&Tr6HT?0AkvhTf_-j*Sy%Pw7n2 zI>1K^=~qXYRY;tydKP^eS9RJMeCFwtWzWKuj}#1_UM?9cOFgD6Uwkm%Jk=yejW&kC zK4KseDi5e04xOX)U|Wi;^(xBHm52W@T6b_EwbTk87hJIXrukllgUPOo4ua3*msn5j zmg=TfX3Fv^!j3ci$SThB<2irk?^-;hgX$D5 z2@sbFkDZY0C-+Q@?-NG><#fjPzus}7$O)eg3{Nm7j4DZ=SZ_@YSA+NmOIvUbo;_M$ z4LahvyEp=j8qr+rTWXJG|GRl_L$h zxAG-!c27fm%ujY43i9AvRiY?eJxp@th(P~ftX*12%A4@6{T*N34gF;p;15J^yO5VJ z-kaxt70tO5AGhd%F|tqDozwX~IknlbzfuM?f;a%}&P&g=bnn=Dt3Pr|Nd$ zjc$9{T819vxOH$G} zp_0V6O$DOpCuic8E*WWxIypv3EH0XJ_Ih}qxxWX_si*|Vuq{3%my z!M`;}t_!cFRVyb7?hW`Hm+^pI^Zr2l{}`#XW3m&HHh37%xqAJr>D~0oALa)u8SZ)` zIqhLKu49)`O*%##%r^v1Qkn(@8#qf{B8a^`4V3mPLR~4#G4vA};nFFSX1SGfLF{@* z^t8Eg+?fMtFPPnlL0ww3zSroNpKq{^Dhy<70OWF()ynz^1IB2bD2=E(J)@D5VSOMP z3keH$=83Cq!-K5ho&q#OMr$>oIBx{h1~;!H0@F-MO9JfQ-v+p7sFk#cs*slw$@;3a z?)2Gou?$ashh%zh{rhPegI7)#p_QYO#y@yscPQUPxsGkC#99wvt@daQmD)9%b{Gf3 zvtJkTnK^ql#^%ekcMD={KU8`D0;IBLij1314o6g?Jdb}RRBb(Zq@$a94!=rG6}+mamgX_)$lmwt4 z2n?&^SQIIdt?sfspX}w=1E?oa9{RnI;f@yo}Ib8mA5|YM)-*SwsPC zR_`-Q2p6gjC)O43x_R*&&QaB0%wm+U!IsHvisE($+N8H=Kz6Yn2diH2y)T@jOFCWC z7oqj&{g!eYdW-D7T3P6Aqpk~{)amWCwG9)wM7Yqm>ErP{4UPnFQ=p+aO2ldH-Jh*d zi#nJ1$JP}4N%K<19Ff!qa8?YRBY!?o8xy2FtK};3VSiE2mmKZo0jb z0;wL=BiJe)K-_INjjij0upB}vaCKzRn*;tN1~mwhkaB){zxOd?epdC4IU}{A0hYa7JBzOZ%K+~wf1{EEgh#S_k0RtWh zQ{CsJfIb|D5z{P(gIajF^eLTc!q&MeT4Orhv%yU5;lQhh%9@?7v8j%))EHyFZ1ol$ z9`4E6la|dian-?8)}V(4QwvLz4{ct^H~8>JIK*rPJUp$>dsDMX%v4m54=wN859XFfZ`=@;3}hjTgV%chD&p~ z6&_Uewox0XY=0ke`z+iM{yt^X7hSR09u$=*$E`+OnBwv#f-~FaxaQd0tbg}z&{AW) zw}G-sJSTC3aZRKJl12((KX?HwARX9_=Lnzi;{oTp>}&wN_yo3-4)Q z42}GSn|OF-z0l=vy7u0)puMi1d#{6#Gb&!w*a*7T^aykZR!P|!C)lcs%zh@@Ip|U# zy1yKlt6Pm-UxTyLTZPW`k=C+%YG?)f87$CDpQIN+4Mu8vQzb_bKUw0GEnJeI)>X$vW) zo=k2)mGsDa?wDq4!Tmos={vv%;k62$G$Owodd#^z=_|8q;5ZjJ@LCWs6#=_y%SD_4vEF1f{95PE;`q(X905pmFhpKr431sg!vd}cZXB6 zc18ahq`42!Vj#R$G}?zYqZPUgOwthOAXt=g@S8AnqPSF-VDzX{L4_Z=;_ZxU4m}y< zvP;WI*?9Mg|0vw9T;jPHcl~~6>0WPS1zl0NiLh-)Bj3P=+ap!Ud`8@q&<$?2Ul&{? z=+!yp{;xk@0(Dn5sRfypW~teOk4;Mo*Z90{;r?Bl0T8QH^b>kfuNR_1KFtJYa6eEz zCGdXgTcyyfy|-v%zz z$JXkfSygP_5)J)j1gEQ+=6;?!z_cLNT4DmIsN;KNpL39LPP`8!x`GcrC_c<(HxCl4 z;E4)q+z#yK=FBxe3;duM1P{4;XsQ`DEn$d+(MaV#!Ugdf@tixBQlfRlQK$O~U@aVQ z&vB0eCwg6ja!N;Tl!8pQAyqu!;nho_GbUN0G-5QwEV^SIHxiU#My9!)68X@Cw=QG9|ctS_3p6R`qG%9|U z4QEI5Oe0JP7JBadxCN*ygl<`O82;Rit4^O^$9WB;#!6Ia`@9k3xPN*Ky#Twx*?Xv{q5+|O#ORg@#;^sAO18LT(IZqGl(Kkf7;&-Ku)O2b zB4#QAE0I|3aI06aOcnJpz6E}e_Pof?#iK^;bM%?U*zpnmY0;X9#_xSlS^v9p5Fmil zUXv9R#-W%$>!O#^*(=SXVpJ!UFsSc0_B3PBQrrs=Ma&T)EF$L%#F|-G8)~$&PJ5<9 z?NMhWqDp*Wn|@rTkBFy!j=5|VVVqyfK!WFKA?IbsiVHp;A#P`` zRHhOT4373T#X+M;?=Y>@Hx9{++sl$eZx5D>%< z^d9P>J6sYX!hAYUUD>Ag$?9`+G=G*1GH=#+;oKi^swV+MK~YTKzAbQ&(wuomCO+T33}()6PgqM-*ea`4$EW(gfjt8v_1{ z9U8jm({|$8o^JSN0ok5-bcJ03w*eoUlae<+oK=vfsEImj81tBVQL4L5P(uBuw@H5V z2w=bRJbF_t2b`8SjreXr>{ryaeA|L3{**AkixGdvR8_CsXbk*rDS6_aUSoZ$ zxC!q=bnp;N+~ul_>vy+iIK%57cKn~&?3pZ&|*mZ zKH#AY8(#`?^4%{kw2P5Ub(2KX;(#Ga!p%dvhg9oW$T)zD3L!~?IN=WmsQ_)sy**s< zKyU8*ETG!B$MiXEPitk6GswP|A~n>!ooW$lNCPNI7#|-UST1P%df{}VJe7XJIKR|m z=8I#U`04srn%++b<_BZBrj^ndN?QdRXUB6p5n>WTT zGAmy$mYdztyfhm4w!y4+I`y@Wdx4ikWiQT~&+%NL6mxdq{f1ij<(#L;pe4_?@=KifdU~@mD7eK z`TypZfUHRI2YiDFzEO!=S}t`cBZNrm(MsO5_OW-^7G|dwY^UqyW(aG~0oQ%lscRI~ zj7@Bs;I73H%vl#XybtfG3u$+nr(eu5#%_CL+Z_##d25;=vj@-AVYWLN8zhnUf0!OrIZSU9 z64_DCLND_W(^i1Oe&2xl*qoy9-!;5IopLT6ZqBAz*(HgCGHi~Dit~uBr6{^MF)WE$ z&##I{wEUysqCUd#o6lEAv~6sWoI$tw=o$2M^*SuiZ_`iVQ&j4SJhc5u?=&RGT;VL zgKpR9ls0g#q!RQ@S5=i`fLMBW2NB+}pF}mXbm`5y*_S$``#HY8jE@^G%GhNcd(^KF z{AJ{<9U=`*m5n<9k?}R1G}Z25W}Us#CzBRUI#ZO)`&}Z%=*zq$nm#IP!^|D+t&TUl ze=%4xg$1Vr;)nUY;Ws}`io@G=tr;u=6l(Zgz=g% zj^5uPnMKX|AHy-O?{7!z8Ly@8;bN>|#(612=oH2$ zw9>4fhXHv;fulVR2D;VHr!PiHnNQ{{rxh;BzFlG@JXf)8yR@RI#5oYgb~2?j{PunLUfbhe>ImQZ z{^uhZcuknqZrn#SPCvEL-RpECTDv1lt*-h(lD8+%eKkh8Kd!0aIAg_ zqvxW3pb0SR68rT69Wwf~k-}x$ly)0mabQFa>{**>t7+fJQ%BKspUXZzQ$eUmt#UA? zp7VtI*+>e$NF=)!An3ozWA1~6^s-6BjtsdZWh8aThTz-pI&*!!6y&ZjN(#;6{^|Hx zIl8+i>mpcxYAxwbi1*~3u`h~FTkh|(T)^5Tw(7=1It#gE?cYP3z!c=z|NRUQ76bw6 zvhSantKCZuzTPNc`Q zje-zT4FT9-?xlm3LC!V$HQlwFYa(yUOcEr?M$FgFGi9PwiX4+GZ~wKBkG~hvTYJ~o zo^DDQsBHPRXp+v)TWg*Om&K$jr?;i$ zr{$zarP;9x3$D+TB0SFvut1MCBLxf;C;ef9FK`6++s^Cy2=#g2f+njLj$ zcw2k@F8seo0sNps^efDx?u@N=)PwAL`Gwe`+6S?7_GX@M-!JU#XDRtA3M*1|=osd2 zer@>hU^WZ6efRfTMq2z3Ud%VQ2FD$2ST>k|)r_7n$b?90OR7jSOV3FX&%bk=g*H?~ z^JaG7@8b&fnrmE2V}r~1XB)78kTT*7srAx9J!DpdB6bv0M7)&X(plax&&J1HvE}r{ zt#gHql|dVZ-qQ!JTf&vJPVLJte2?|t{d!DlQ0e!!?tLlE-?xckH>O!Cx4K6nQ!$Uh z-2R0g)#8I+S?5tZXt3l9qMSkpufEt@o`uC9)69>{-TZNpvRcg*A&#*Ae643 zCX;@Yjv$8@RXYJ<(U2#BF-fqtsl&B|$CqL~+I_~QpXiOkI{bGYojrle!ng9L$B&@#vMk(FkEV0mm^-rj=X zG}*swZ9l(#r7>jB7gfMU3X6(%li3M7La?b=#SBB&QI!3(ZW_6n@61% zBzg%=+S{mVGOvmT=!SPO-Z7&b#h7fi<9G9V#;TMg8I7~*@Wso<$vFsKCjhOmUP^s`)C2K2QqAhz&r7PQgA~CI;Km1EQ2gd~H zDfo;oYC5G!VjmY;YcicZ_;T?1;K#ubReOApuvp~9(1Im6wUe$J#-1kAzqXq^WWtqQ z>bDPLp{=F>r&j-n&^7pkg{UgF#ew=ujc}OM(P6xd5dox>c?$Me>>z(K!(uhTdavb-%>NuUDf- zIgEJJ>sG|x#H3O~e>z%mOj^ncHuL)yl|8u?*(x<6%oJ$2{q*SrNok}32{McAflaXG zH#@%3230KN>xq8xmdTQoU~zvp$HXGlm&K3Y(Iux6&vVWtCoh4oY{Hx;foLJgkVvS=NSL_ z^10gwe5RHX)brG#_=N;A*}=%@tSc|ZmvD5H(>Eh~#gW$EHa@!F7gTY3m=>(LbsJx8 zs`>OOtsvqlfo$}Vg8rgl_auy^GZ$~wzgY-PC7zyr`;vjGiRe#G zJgcD*iMumMcihb1!<%zVQ}zb-g5p<1k= zo$h*I>#0u=LM253Yt^UM&Zrkj!A=Il>y|c6I#}|9kF1h1^~OXZI;44C;eMNttic8+ zMOw&n#v8Q|2;iSJzA9E6E)%#m%^r4?A!@f{n&GQwl5!ro|9SP?o7r@+0D~&7m{pw` zA@Z>s*jkbN>mx?s=sYEXAbW{?bF{_CRPIz z!v@+`eBMX5gxJp@x&q2p}Vk;~eI7 z1*SFj6leXzW=x)BH-$pnQP2Pndxm?gak7I(XAn{wIy6 z3~4lJcga%~&gm9;9y#4kJYz7=CHi$QwI&+${ei@Pv;f+4NnhcXVo%$o4bpb(^>AXS zxIz}|4AWk0Ag=c!BLW)vK6+G`7At?&V_tI?nWLbZxUp}@fbK;lHSL%xsvk*|UqhEW z$61e>JJ}wO;@fO}A%`rPyPInyKs=ZnbV_wGUwLrf==oD#kPWe>NmEps%CrC*|M)Esvc{OmHv zzgNAR_;pyAR3Vq~bo!@6N?B2P-y!@vYBH}_tkH@eX30zG#(JB99G4l!0=sy=Om)Ry zKOw@#vtPr>Pa-KOGcDijhmI-bChc1q?-BRlGldR~^`$d?XjnZ&RR>roiO4q8_aC^- zvSGzPyOE)#V@x%LFHB#HcP8|J>c!)wV5Fd`-1tya*cIgWR?^}3GmZ>?WBXwDTUhmQ161{q*+}Ce zRV7*b#m_mZ($geyILshGIRa@JVCucBt zk$yGe0#*gvWi8o^(Xr)Z#8W!nhsh_^wz!t-`CK{wxM+mG-?>JXky6L0LICbylmc(u zF?WBMQ0HqYW+|H{xKxqkj-*Dq9n0*Cn{BP6M)-+P4SjF~!m2`^F`%gVR-^`@&}#v} z&dfQg!tr78fZ;8nZ=3)LW7m?=U-!no>nqc5hbP&EKWvMucrO+J?_U$o;$a5(xX`s` zW+E5~l>+KTh7aGUz(fssX0+{6&7Mruv@2v|R@|?0iTj6JL#EGjVch;32V72UPSA3G z&1du2<}*Kc#PPQge(`bsBO52FxYU+Uz(upZqjv4h<_u3{jGxn8_3-LXB(cG@gIq__ zoAL3#5>=@7^ODqoSY{(-4bIg2H4qeha;T%2J1U#AZaZi>IG2WEaVRt`CeUe5ux)K= zZ%o0?iE_Pr`inNr^o`kDArIw6;nYvrdNN|^TdcwmyAU@vjG~2jJHr`px_g#MsRs0` z9Leb|1FxBvZhtSGeaS;@!piV=4nHhXj1?R{zNK*3ij=M>&s_aS|0*7QNHSQeHK@D+WSVKhg zE*p`g>$1xcj82Cq-Dt+qWx4sH&Ta?&=x^oK$rc#NMmIMngTw-Sb%6Ot(fc@G9TzQ9amWJ0 zvi43s57vwzVNQoG5PUAP>79dW!%1cjjzJ@D2c^^iyifE3w6dOjht|1xl-i3*JaFF= z;>PUmwMEo;J6>(rlIXJKbhU-u7mej5B`U)w7_PqoDPa9OfYoN~Gp~yq&VyBF0;Mm4 zg}!(%>e(7T%DR`6%XkehIqihjasx3l5O8u^wZ_clC1&CMFf9J`W6B%ID{iN2$F^@d zWAsnTP11$WN((W=S|kWVgB;r1W;jrn*0XPe$>hoL0_k|~68r-C8HFVxd(Ed5_zCjB z-9e1qi?<-9ekV3*6DRHby+CNOXJ?Z!@}a3oM6zSp@1!-(@yXqzSMv^2BV4)7(z(%R zwbd%>0(moA{0G^;-eSvHOFd<8RNu2$BgxI%uRRnC2=kDt%ogXQh09mB8#t?ZYMJ0x z9;?MDUV#@Z%hxEI(@CPUA*x1U-#XWu6R$md&cxibO6L8HV}?lKzH@sEpTCc?2+`C% zDX_sl{u^L{Nuzs@@;dYi%y5HX%@NwCOL0WA^BwAZ3z1HI|Hmjh}@Wh`C1V z7oq3_Vm|Ej@79Y|DWxTkweU|$^i&9qqu?MVLFF_tdXZO(Uhb?vH9QTcY2O7lEqP;) zqy08=1R)*xH@3rs>#tZQ-~2xd{Ll$`;^z1&BR;}dg+j1gZodh4gGz%T+Jp9)S|7(x z`ZC7xMg}#mB=X~o05tBviQsF#k!F8vBg<#6cv5tz?& zQZ~2n4?#t0p2_paoo=?k-mufSu!o0N17NlUTYw2Ku7w38knQkoT#nyj%jPXM*i%|L zYos_}bM@VujW}5>Ne!6h2I{;}fQl=p5we9&RhJ5?XD+HRSk!?TLYLUgF(r>+QLWxY z&-KS2oMWnTIpA#5v9yw12hZtgvl}8vw{LGg9dxt6d4RjP6I?#t7qg#nH~Q~z1c*ym zyncHfITceHWhddz_iKYo8jg`M9aTHxc-N;>Ji4ob=3e3^lZlu2ai7LSog7f4*zWNs=Hr z<8%%WHR1sg+9SU{DOnDn;huV&?g)*U*rtBiK^k8gH*2G`nQLxd`{bn8DX&(yT`<2g zcG(H~hiawz#@dGX(`#e}*ekz0zuxDqGO`Qk_@qj&PD8m*lshAw?SOetE!cILQXDm6 zL@Ro9t35$GM5ZZFPr74x|Ku}6Icxg?lJhM_1TU;?Mwr@{JM<9C7t*}CphK7VQI<&paaI>bd0v@b^S5C}2@7=6!xug5(4hl`N_)CUH z#;N@mVax~H)@NBsiry2e1jQEm#1BYN3;B*-78%mcN&dAXbabxt0l3s$QBl*K{&M-% z3~Aj<58E(N0S0zO+W9{zJDMc6uu;%oVNwk6AeZ1)FfQGw15;*5<{}-luin!uk67|r zD@Pg@!p&z8>99w$!vBnHZj`=nkJpRg_36kb8oTY(8P2;RO}`>cPVcofrq&7jHKr+rPc_;a$2V_SL>WQZ;l^4Tw%V6M zM3*lgx;wsV4`DX23^zGSlbMYz$0r7KLQ6`mJV$JxBlyfF#6}zornfD5e|iWXQe{?# z220&0%Tc=Odu0LFJ9O@=vKd4%S9A*JcMWf_uP@&xE}J1~ewh4gWY~FyqM<2(y{uYCD-O* z=~f6qe_<}^7BaM94&*(2+Pq>MM>ZyYQDKhrt4;is_Nx=WrLEJt;`E2_ z=Nb?PJgcI6J~s<&&d+3{rlYX^xK|&B;Xqqm$yY`Ej&vi;a9t*Si6#gk%J<}p3#%g$ zHjSX=Cl>JBq;duq$ZFEYSz}VnZQjr#zZ0A{4a#BPce=09e<47emLYqU^#K|IoeP=- z(ZM(D6Yn?kg-Yg}A1_952r#bLoIRfC`Szlcx!pQFa|DZW-i-5?@L7`aFzn0HRgM#? z@Ear9ClF3Uju@w3x&|1&PamN1C=jt*yH3Vn<9}KhZaNTR02>!FeO;H;#=~9mzR+aF zxNpHNU>g8zb~e~Y8uN9Kq)FEn($VG~L6BFN}9;qk>+xOsqKWzKB28$0`#1r};Pn%!k^PoOZm#HmoaL z1?=!?NQOoH2%xAak%GHVN=YrfR9rQV_dSu*&SlwHf#(0B))VLR@1 zN8FO7Ggu&erMtcvqN~M8>x*|7iU;s}-4QTT9O!-kl(u<~)`?7(<420>qtK;IW)?@D zxwx_x|DxwlWIX7D4l5eAmDBuc7vf1oUq93L#M5JX!=D_gP&1V}TbkCA;uLQ;;c{?O zhtW(b@u5~AAWeXx|H3RlZ(6YP4}Xwm0{Da6OQgpHjfdJYQkSArDx$pV<(YE-8O3wM zkqYo=o|EOs`{U zdgJ)lE)v@3IOm;G*l^B9o8sYVIH(qEfqA6>fGeCRFW!Xj+()78))t_wm2J%?! zByY6DgIWg`{X##+ajkOV)L1podBlfIH>OP={m)428*pGlyT~dMn%hbKr%i)}gLenF z$?Z0#qKzb98oV&HWMogjEQDFTd)G5ebXv0^J5NS83y$F4Gi)14SAg|ZV9+pw`FtoS zbvsj_|KV}gnEC3hU!REQC$3?Tc?opQEeABX(8j|f(t<1u z#U1#)6W{jl*|Pyr@U(mXi``AUK|%|H+@$usm{4q%6}Lvd)6D9vZ>z_PJmd}>{lfeN z`!#l%3$9KTE_>V|(IuLxZdDEoNwLm2NFUcYUYyt8gHO=Xa2_2`0BC8_1;J}erC7^HrPvSNSquOy6sQd%t}zt3v!E* zsiX}ii)VRo^IfN?JLu=W`I@c811G|AD$Qs2muyweZyxZWW;PZte>UhnA~&6l0|}%C z5FLjn2wg`ezzoWd)He_9ae6-r{|rY|I)Cu9q!I2eAHCG*_L&P%n<>&K%a7u3-V&^E zkXwCQJSBPhcOvUIEtS~frz;@o-q`|o!wRh}uc)dQ!w7J^~K0njS` z8qpI0`!0uPtChF$Arrnt^MsA!L93EJD~~QgZ?S#b(i?#{xytl$yF=m5sum3fxiUA? zCTg4WEmtHt$RS5!$rm!^e%JX^NNvu7R8+BziM9On8OLZoOy^y9Z-~@k*2JeGba50+ zgI#0VWwm1J`@15Tj%5SPT0TbpiW6_90N&=4?d`~+Ip8gB=;P=M-C8`C~=|(2A<%L zEx|EUsn;>CZa7;vzO!P|D{@c6H{{C1L05DN3Nz9* zJKSiW?-WX>8x-xTf0Op^;NvQ#?R8<<0FXxEs_?rG8PQj`dlSBNasH+sCtpwbf=ckn z2du}X8r65X4d&CVq#VBxH#I+LRM15`#-f@0%^$jxreuHP>9>S@%e#gNdK5Y-P z>#y9@erd>=!<*`=hB{~XC0L=XX;w2kB$)H@&h{ZCC|PtOAJ6TiU(ows3qj>UT zf>+}=XdhOR;6f+90$CTFF@XGWa-&~0A7t&``uS|xZq@ZSTmB07>7=B6?_w=ozLGm_ z(lPD>vRWMBYiAENZM!kvk4WicoiCO38&R<&0>KwWN7ddIt50wD&&CQ)ljYaP-Nv5r zHytMGo6C9WP<|&hAy;FjtkP(S1z9}xQGi^_lPr*@K#?I$7IK_gJS7$%h17hkIrAL|mCYDYH9Go}YXVcM2#9e$T_@zFF&{9!orm{R&7%_bWb|7U+5T$7p1TTK+_YHv_F<{&y3T@XiXOnW3X5uoZf9K64RL$1( zF`#y!LHlwsRiw4@w9~{+*}djFb|M-snDlDnD96Zc9+GtE8`ThSvK!TFa- z^wOWL!376*V37d*S_K!tslBrN`jHv;bf1a4eoZss1))N|cXH@{%z~mv?PK6<;;mBmo6#W<-XU zNs8!;*U_MH5^yoMpS+^e6acmmAhB>qb4+aLS#fntiWUbTKG4ui;Sq9Q;?gFR{W>;R zZNqM>p6Ny(oxCG|+_%B>z9&UEkZW|Lkrcl;($^35Bj`PxX$-Q}zJE6%pcZdP6q7JOI6fsg zkdqeB?~@nE!(A2G6@VAe_f5}`B4PNg_FINu7rw70NBhRFVkpeoF%T5YFyU)FK|pwm z#sd^q9Fo0d4*|b+3%uffQNau9n3+5G#-&32|J z`t!d=lQNkrcaVv?qjzovW@!)*m|QIx`+RhcB)W7$xJxuaLYmH>l9#VvFN%O6i5Q;Yh2`_qIA2ipgP0=p(@8Ig7db@|Fc923WPs~n1NRk1h@&6m zrhr$QHsDy*Fg0rdzzj9^P;L;pCDkJLx4D47{#W=UfhSyfr4)g$+hHr&VrkoL{uS|T zU#HNm(lT!?wBJrj%Qp2AEE88m(sU@ltsB1b-S|Kt)cKy_PcF&MS6!8yuMU2d$AO$Z zzFH#-yuB@AJ^NX<8CHg+g>~xxWp2>|Kqj-CNEJr>r4cj!>A5Fy5Mpt0@!y^}MLAviI%G*5p1QN$l~60Tj9N?37*%|Q`In~S6ZqT)K@E;`036c55F)EwC>`l^Y{fSsUq?k~Ml1 zj^@A3!M_9`(0eCRPAv~)mm!R2+<03HhJt=>u1BA(yFMtHF4&=2G-WeR8Vcy#imyr{ zx3Yw8zj;s@;LTgo_iGG*jN1|}fv*xzsI~aV67$Eeme5W|(gz1>C$G;Fk>1=B$8$tX z@SkGMt8c*$nh|_#YFyq(mWe~kRk~2o?7%HsED=In8_KCz&`NPnE;G)g-#MfegA}1+ zk-W%5KQFT_PbTO4fiwgpuad?3$HIrHtHHX{!y+;3?w&2N88dMxh1s+xE{P%D32!(mQ!JC zJ{uZOz~38WjZ?s_`{Z@~aeJ@#ce~{PwBik`-nT1jC8fII>Tmevk@ZdA`h1f!t6TBR zzrA{Q-ZqUE0OgLf-XBAW#m#= z%5gr*KC6aPL3fVT^zv9qJ0QoA!W-wuwanCF0|}{4*R}X$X`&5hN#0f+k+8X8DRtY% zRB}Q4>56SuPfmBfnxI6 z*Okia=yg1SkVlckw~`=~EFu=2q#iLW(jd$JKDHv`TpyvpTi7LvENF(KH~k#5(2mUW zCy8fvcd7r}N7fCh9o10({=L6UL0=UVe&24Sgnr4QE7vJ5=V_lf$z%(6l9hv^l6*s6 z#O*+P_y7pBZ2R1y-;H{N(_`89m7W^+G(mxSiK(qM&dZ)XQ3W`QqJoT%np+nL7O1x> zJUV8qE|rWg&9p4I&%pY}gL6*`ycoe1w8^rHPXfz`bbeI(dSe%w*Qt|ij@=3Olcl%t zT0E0mRj}eZxbGtA@}Lr%Qekg2BgI$hJrC)`%P2vD-V5~k&S@46Ewy+|$)>L%aVT>7 zSbkQ2^WD2A6WQEiJ%x1Q6I^n0Z-1VFCZ7bBJ>Z4sINeqgzDEF0PhxZQyofp6TGw$p zQ>L-Zus_J@&GkFeX}b1+J-y9b-kr6c2NY=wuWh6WDrUSA#ftxI#QeApr`d7%Gx%^2 zDd(Kwbq<`Wqe5BostGH&bQ%Pd(k&y-C_O;+cY$#r7@eP1y?U6myf6BkpGVR7*>4DL zH<>O>Pq0AM=+2X)j+&mB8cAFtUg=c^abjmdTw`>y+)BwM-gr#;28=FOy~!fhzieS< zD!Q%1h00jn=pZMZ$j8xFPpm30`>dGrx7LH+m>zzk$O=k(J!e%E+YWJtlKxj_rZ?mcIwBjRhcJl<|nC3geiIa}nH3|rx9_kjs> z)MqY=R{6ye?*N{&Gg|h#Y;VhRGUyiP_QQWH2Y_v)q1Ofb-E|-HGd%V28Y1Y}F;Pom z-JdCh%LwCN{sb8paj7lNX(wb9_c!@Qo|PmCb4lz&17q5tUs^o`ALs*Y73AN^bS6iH z@938qkxYdb4d{M-31tW9mqw=mj9j8tf#)e+(%e!#Aty9Fj%hz^`F#H*V! zfZJD)#7~O4U!B}N<98uC5Vvv;9k{B!JNSwC5#OU`0GC4WGt!nHqV1KpA$Od3MQmnQ zl$nmrB{mGKb2yz_#LHUviC^Y%l&Hk4<4XiTdD!PQso=(P3tE}6K9Qp$BY{tMd{qE` zp7|#Bp}q3C)9-ALv*|IHt_LZr53b2SGmMRFQX8An|9)sHB{EkhSGyJ+ne6f& zmql+77PK#d{(>nfrIsscN&&JEN8(`n?G*-6uTUu{HK_Q*D*2)f3MS*2E$mQgVp^y) zy^X+!rG=(#K19D{HF;xK4KR@ToU4NRu}CyAR>b{XOkBZY%Tf=@XthKRLniL&T+8TR z7V2fU$%pMtJ>-mOwv8wn*Q!>rTGW8BMt#)37_s;DE?#RYrubk5B1l%%Ta2ldCih%PCG(NgFG%M-ra(&* zEk~}V#52+{jKcyH1J<12Jk!?wELBNNL&Gn6h0-Hmh7$klCVaSY90c*dFvR~*vA*bnm1MNO_@{36+?&q>h=PnWEgNiCj)KRnEEuC%`=(Mz%b#Y5h-A9JZU z%LzN|thu2dRE;JSI6XuGZk;%ic)_1Mv^=fHUBcu$q^sIiHdgm?*(fbB@JO|sh1IPh z4&l>+AMQAvaqR6!vTmH$M2l%A>U%1ko?AKRJHPG^`|1|MeienOv#5*o^N)LRh~w6p zZ=0DaD@j{)n>K~Ygx<*K*O}t(m`=u_5#9sVp6XKF8XJqh%SmiapIf%Px-52^IW@)E z+SLL!OA`5&9b_Lv(JDxJo`yS1D9D+KivPsaD!amYtU(@PIN*pYpW6hl!KA1)?qZi} zI~O}3?64`lg94#mkX!D)VYCKy-s^7Ds-dJa^`7qXOB5Kk?k=1-?RBjNhY*y1Y@7fU zS7=_2bajD>i@%jno@=Fkd3E(>Y(zqhI3{OWq-*(zOsQXHl^j36+#VYu0iMd!DQlDJG3!by^CRIV9wo3+G`W++UOycQk~%gdW- zztHqF&KXYEO}9_K*bN*|26lEkf+B7j2+hHEhauHhfd6p{1G^6>!>~R^UbSQhqVAxU zm9;|EMum;qaU44i3GdODAJsCMBuI~)9VK7}77={!>Cn;eGDV&_StLNWs`D(SI)~kM zhK|%%5))Sv*U9gBwII%v2ehTiv4V@QdvPYag}{zYMHE4H%%>LdzlB5E>E zDz2>mEJM#ihr>tzvc%1LT#==+w>q`_;_ji{9jq3o@`Zw$6EoOgXGO-vZadCf)I)eP z8ioz!guQ$yR@5m2)F7Tsf%@D5i_La=R0c;ncZRXDZ)nAp<5+O5#Y}4k-S^DW&WIc- zeloaB_63QON6%-7nHt^4A1AiG`3;6!(oz8fHJ^Ylr};r!5#vO#;xa+?xfIxjwhJD;9-D3JzE$W!N0v$=%e|dWMBt%> zFpk?2jP3Mb?^;$=PB`7@eeIk!kcY=|`N<>BzcU=enr)*YMqS_2%B1klm^$_eu#=Dd z#y(8RIyMX8hS)?;ne^5uU%78guf)+sKeTVBn@HLE3$7_qS%EBNeDvCGm$b#3-&8y- zVzP0!BM^s25_i_7%C?kZibv1umwz(%?(kn$zjwPHW_!a?&%%YA{p-UbNxuFPy2M?A z=v7e?jl+!!%`aor%6&7WwD%RiZj}pNr45LVZ;7_}>?^MbSnwNTD2U0@H<(^$GJ_t! z4%+M0;PGpRzNm}Y*Zb$_1l#(d?^uEo$#(U3OJqc4>Cx5x_3}kP3x>*oc9<`bh(2Ow z52?!}U80XW8ZK$x?J*szDCh50X*fDL=yuH+K$<&FzBHwphEJ0t*=zG?fKPnzdlT>f zZLVcK{t+Q6>EcM0T6T6eQg4?kvZ*B{aO&x<&rz8S4GbXLOv*=FXpl>ess$%wvPP)e zVIWH!P^{@2=`|S_)fzx$U>^cq)&NZ!KfK99o2AV84pDU8JpH5yx;ztAvW z0?9);1To|%le71^*V`a7-Gyt5_uT+DwGQh0c2To0VM{cBmcOnmZJ-pDF1%F&V3Cwr zYnCdX|IkUUk2aDyE<)SX#lO|0{UXe!CIY821 z{Bk{qm{CDaOP2VfkU1gWnwc4GKcpCN<)C=zor;Iq z9|(r_fCA93cWBzSEK-D_-ndP;f~BWsp-K>8qvQ(v9SPH}=X?o!(&O;RtL;nZ2U;y} z{Q-kk{mxsC22Tl6;GdY(+#dzXkBno_#KC~40IM6`WpS#7P1b9$e~9)1dT zseEz^TV-(Mn1O(rAyS+BuoS7D<$&*yzq$}q0x%A9usc_>9fb#94X`Mw%b9wta&ga| zzn=)T@10Yps`ZMMI912Y%O($8OXZ^C+W`8Z5IDbk0jJN_1Eu7@p(X=(H}fm-0!_!H zAE)q~!_P^4no{FxXR!33{}uKn?ip_-?g+`^CfFk4kI)(h!k<&#LGRGj+ungwR5HqU z=hOJprGSrbucsy8WK3{n*J97tS`+%=Z6hYSgX!iIehl5)k0-m!r50tJ^9gUKagdvQ z^zsQUzj8}e*(X)K>~|_|`X}N3{E(f`S>9D?XU1Dl7j4|F{q&s8>Hit#HT-3=YX>7dX4CmMZRf?HA*%g}af1dJ#qe&dR1Wo*&3MjWnNCS2Kmxw1L zO5~QVC)6&uk8l>>*RggaFaqrj>H?wIhMlPf$U8)l4N`D!(NITyrGzH(2G>}hR>#!p zFr`a%*CM8Z_oPBAh+m%1(VkA#oPx!sGR-eY2vZ#^A;_#bY>oH}ZT zFY-qDJnICn+VlC=J6fs1?wNB3MY^6(y~~!Dgmkm;j&k<)7;h8M#J^*Ul z)FV_Te&8>(9Cfc?yH$LKa&2X!$V1^5wxOC6+hDTy-k~t?Iqw~f!iKl(w1>v?T}7pa zyN*F2=r@8%r?9ahZb>|Gbx8SUjjG3+*KGgg`@RPh4gbu|xI;9GEZ-Twr$`hn4cEuF zX_%DR~Q8t${fBgsj7+cwQz+ zmRsKC0*_&VJv4JhCp`M~>e{P6fDz>E=#)Z$lP!H&SxJY1wth4yiN&&Wzu!W`(0AI) zpmsI~Qe!h35)1s1AM3(~Tr8^@Yp-ob(2+XB?bnCr=JlB&y2RtL&8(yf6P0vjeNOCE z?oZ9TU8sy)51)=bjEs zr0+kv7WamkmS_;zA(0bm)bwSjO$7_$Bl9|afc-d?|r*MH^=>BhCP|I|0wE!BT@Znb8Z zmP{pU+3?KUYI0)0xef@(5YsPRN&k-VKrwK`^w2I_^Z80+ zn`&|!62DnEq?*Rda3Ct%zZme+hc|10-Y0M6E1GXWJL4j^Ysbd5nfO+sF67}EwNAAz90JZ z7lzjgm|`prp+7zB%$Xhq&xD;%{!Mmd-*jOYijf=@3^fVjSt00Ey^h0=;O5=dq-j8Zbgb2G|I}RKtj%ZgBn_W6M)!+Ru z10fv4H2_LMi7f&Y1RXqor*csu6%cn^==Ey1=Kw2`O1X}RNZmoPQ~p^DbFNDn3$TlhS$Vv#hd)azkk!b0`0chHv@ z@bbnxhQ74BCQZbV#L~yVq+2I){XoOny|1KvQp=OD)eCu0`=fm4_;u-Dsp9?Qm^5g^ zM|+;s-VmeRm1#*^ruj{k!y<5?9U_wGyLI1N4T(z7Bwc+{~QZffhBD?CE?hEXUCecv!g4j1{X z7*85)YLdr`=%anIhcrr)@(n+$A*^gIV%%GZ5UQRqOMm#W7;#h@>9zhP-)1)6%V~&F z`I6czB?CGxOrtKTy5dx;1Sv0!f{xebN8ct#3^#g>uSyq@`VH8{MKS*ayIx2uhlB4u zyP7bz8Y*Z{Ty!sdSbdf%{fZmc%5aG#YAx3}xlJJp=IilI&+Esj@~YP=A7_i?nuN$V z`LBxV|KUZszyhOxiu-Qa!ww{X(!%38>t zS}a2VENxyYN_&d%VzyOB)2rb6&dZIo*iI%1Th@8oU&m(#OpcZpSwOA|ZBgoI9FD*A zH3weW2a#JjLbtW>?>Ei{C;Qfieyn<#4B?wzEp^|{8sOL=LDS|Y{aZYTgNdfGcUQht z&AWG_E3*!xY*Y~PpE2nhfI=K$%FC1Qp3M|r2S(YV9m}mBQUU#9GTMM0)wwU+^wrfw zJ3P7P3UAdpR54PJJf&M#ewI1al12bI2?@wU5z}8ZC+`Zy8&YmGeR{aDxoVEN5wyTRyB|_HRjhvFOJJqopaXA`hWHB25|W!^0C}pvruJup zB~U*-6Hq%G$*1E;RY7ThrJGb8==OnO!}|K@yUPBzp$6!EL~vUa5+DR;x>|*r6C+5g z#WN@}w$csAE$5%vEPy^5B!Pb0v#n^yT_KV4gc9S$s+L%JXT3(?I9nyx-5SZ2*4X!h zh;eR5_U65pZd!vzuabAv912s*qmr*a1+c5#xvfP1x>0Zssm&W@G%yruH6@5A*M1lh z>y`Q|8TDpnjJ9vx4_oQt2-LSqvtD07pL?#ke|KgrR?kB_=~C{HuS%?zpv*$m>aH<{ z@?y4S%y&TM7R&hU#sw08PHref1c^i6?~}XqrnQl1(!gG+fYg9uzhHT=OiISGau%BT zYBccx^g^}&RP#DX%BM!x)O+dPhl;rqJNs>ae>3U8cSDLLa)WZjnigr|cvIkY61D^? z^g{D7tJ-zkXIp%tC`sk&Ps5@-w)gMd?l@@0{Rico|JKxmT`o-B)Xe9K?z;k8+Gf6E zhV8An*D=u%rC?nWzM*vz+YQbrxf~w%kdC<IF*RiVnd@$>xwd43% zQWP$Yc1mKvTR2g0ku7+f)39^)iT(ST5WX*QLR5blTQciGuFen@cv6{X&@eS&Bu+NlhB$={=!S z1{Z<@QNVq~fpyv;KFELCMt7P-5g(XRgF z>=PDT?sPkO+e!TgyPG!-I=)?kavm4V&2~r=w}_XgDq@HnI)(OGZ`Yrhb@@0)=#Ag+f6^gt`8$0-#-Cm`B!8?^9!PBPr$K#C>pk;Q8YCk^z9M5hql|no zM^|2wCC(r%V10yrfU6usNTSl^ODCQcx^j@-xp>8`XB_n~OhyEUuS418M;c9w04NicL9nYu85nk9SMD<^j~m%BUnWBft@D6$okmwAgHY$Ac|)& zu{2998KRcR1OI?zh+V7*9Aml1f6=IS$L(jA99}eGKlO}Waq|eqhUaoUc)1`zKQ}H| zs@z2TJx^V2n24NkclUkL|5Q|*2`2-dX?qJTmX~S#%h1b~&-mZ{TkmmxAM_p#sZUD; z$@g)iK_`u17fKhl1Lnt;4-GSgm;mC3%IJ|H#dYrXX9~eKMD8F5`fBge>q6%QLN{%! z?stsmpp5IqE2%~pOkM(uE^$o`Jc5s=j}F%uQw(k$Odg0Nys)M9 z_fI{}xNvU8i>*>p?WDcmV6_A0%&SH@-o`@uo2uLlI2yQh^9xZjv8U86Qr^uEyuSCS z05wt+xb7FrlG^n_Ua@pKTr1#Lyqio0Sy2C>gO8xqeMOFkOx5~5r5mu zo88;!nSaJzi;B*dH^Hf2>^^l{+PAzKTaDMYnQ%6eJQyl9oEV02h217aY5*zvbdJ`= zr2n0C?AHBjh3Inp$G@Nu!tx53Sh-qvntk7_WJC8M0QlelJO8;r3)y`@>}^ZRm*ub- zA=O_hNe9}@4S^y_CyqTJ-}yq-+Rjn(KZOl`{_j};sQ0L5W$Dm1r{aNT|NPNx$=&g# zoBci~*qSOT4of)^?{pTQoetAfXZ!r1Rg3Bj#z>Wa%=jD<%!af;S+hW->?^*%RVTiU z9OM5;!lFFz;kxdYW^4PM^b8V`?Z}&WzKf;Hs+D$LP~e(V;TZXhhrRjL`}PB9Xp1fl z4Kio$y;_2zI$C|nz4vgzQf%_lsl1?Rbk1=C0~_h{AzSV`*e)1~rVs4b44jhbmFLS@ zQm%_)(Hcx@9@~H*BVsGuPN!lEkDd?t8O;vOYpF#B6+jKg_S|E@TJ|WzI&oLcFm$~JhC>r zT853(Pcejs63Tc+3``6e-XUUWDwnWnZ}6XY6+U2ZUWiQrE@45_&G z!jL4?CnX6wljD}_kL|&6T*w?=doiNeLNQ}hS`Zl9Ghazuzc=~xl#rP1PHs%A!$s!c zWsdS}NiL;D&vgl2&)~dbQ2a?V@6zjn#oM1gannpzNB!^9RYjjxHye&zve8xcXaI1r zqwr_lGtD*Ys{MXh^oj5mLjH=-L}no^gF5{uN|c--Us|5sPhOUO&8?i;sn8~A>Jc#* zA7nwOrW|kHJ8oKR&t8 zh+x8d5p-me-+9Kfe-ILkz=GZvteARb_+wtxPN1%FkYwn$#=w1Y zn15OK(9+ea{H!ABEZ1Uxv?$R-siiJ(_l7K*oMUSeM zsg`)afDq8TAl0@NG*-u7BV6jpe!%WR<^rq4t7IP`G}!?mdHBRA@W#EL>1KYGN>mN`-RD-#q(&Cpd?dRvMzfkbw~9H{T6nc0&S zk#6BLV9yc@3OEoxqE^LFD3*tB`Yh9g=>V4>(`+O+ru3Vg}QxGr$@1 zvbwTf-Y*X_B)rF{n*dBIkdWZx^_YS`Y!@M&Nq0qe1eIsi2~n;2&Lt3SqT;5Cm!w8g?@R&lO^ z=)E^Gi${*@QAI3u#HSC$)9hAk)FFY;(eot~1-W77p2z`3rB&Xll?bW!f11=d&9I3l z1WKL>z68vgmw_u-J{Hjv?@%EqQ&cC4JXd<;j!?;~jKGna1rqf-3mi(b>_eBGg*s<* zNIH6rWkd<0qvre>y;ZpWM1Fz!Ff9O$XPC7tee=e#A*MPuCLbXVkB z7z&k7p$wDfKD!DWt!_gmnt$(;)A>t&`m*f}i9F1qC|9!5jP`o!61=zOHoz%oxt4*_ zL3xv>;iI`pfM&bL2{NQYoPR1uA&#E_!fl03&-!X1SSQhu75X>HTdaCVgW@{Sy~%;D zlBlDsnxO;ew@gxzl3JR>I!wjHoqRhB{Ac&Key?ZAyb4F!$8@>PQjcoaX}J9D)}@~y zqnhN{;FcE2O$umBH1Vdb*w+`glq=?&CeTmk@;7jwc+lT%K<(?Qc2yHeRpmtOuZ)i( zI28Qulf(x?%f0n(5X#`K_SX!d(RPtI&|1|9ZS(gs?+eIU+{lk$)g15;+qkJcq?7D; zbq(HlqkNW=Ev1B817%GN<>;O5f)M^7`2snhQr!641_O_LIdX5}lqa35PJnJU?c z3PcBKB%$q)ta{hq3IA2cz`8sM?G7vfGom=VU0JZobC_5U?mPNlGaig@aOhGHn4Dxq zqB_h!Ha-1%=-a>D$Asm%pxO0_K|y0@KP@P|NHE7w8P7GCo1ZS>uX?QFS_yS%fl+NR zCRLzLeAKmDoMp>04|116SF2(}Yncqw_9P$O^I%-$&VMSGB&W{|v!^k$_@KeBrZti% z{B>1S9!4XvmGIT6i*M3`A&^_r##5ul1508%@0!xWLG#ePsL$WuzOh-gLA1ZM2c({H zn~widx&eRbE?^=^(d+%Sx3d#PHFd^Ai#H!m=Zj{dp(Pl5 z4^zT=^0ziQmj-;Q&m!r zMF(t_BQSM{4}W5)kLTkHXn*o2T$c`_^}>WC2laeC@Kk>c*N0(iP3a$!-%_PYZ|t&8 zzA@Z>tRC32;1E=&kz`=qf*`ZUCM*D7{fUw5g=mV-dV`y=5jl1sz1|BKfrRn94wHA+ z$MQ7_{Iv|d4-b{3PXA0J>7DyN{GDy^EuC@d?QeaT927{ZHDx1+S6m$)Y1?WDUU(m| zrKF(lgApQzOxPBS?NjiZc-PC{a$$+jcrJRtQ5e;6)SvNJnH!k9L0=FMmR2X}%bu|y zRa`6`@{u<7&D77unqoRbibD_0>V#oYu`Wjl3)>yepjMlS=cXQxpus>gUyARN@DGGL z9xs5U23FS8_3+<9HKT|BP>mBnwS(ZEhdW}UO?>zpw0$^a2AseEihi7~42Sg^H{k`f z-^FaeoEM6i4T+GQhpo-ib`4u9{LLqeCt(yE1N935MA^)trgZd0z#2=$fvG7iq#n4I zxm!u)m+VbzJ*M?R0^FDVEw2=sgL1dw{XAOM%DDI@0bp%UD zmadH%u`qFO1~HqWTD6QfPr-o9xaQOrs9Vr9O?((D$N)h!UTGbqhZ;#DHr0pSpI8Tdx2nda5+LxYDATTpQ@Rq(Q@Vk%)00%v$?W9X zGlK{-Y@aENK#@Jm`2~n6nVw;&jyDyvGCJg|mcjd{QH+x82Y+YJ|4MnEC6`WF7r=+> zoL3e$!R*?Brm+NL0vpT1&3o*hkQ~uI!V^Ci=*7@z||0{%|5Vr)t|aKznKXj)+*)qRU>VRsf?F#e0cQlW*lo2;{|^Aia9Uy z(2Ls5G|C2oF7c5Ya$feS`J#$C6@RpC%&On&Y&TL7l>x&;p%7r6V(EZ|o_4_acOE^* z&U-7zo0I#~RpSPpJ@p&K=U(&8-q#}qS|x#ZM#>nEmME&})B0-7#=MCqFoHpA+O|X6 zxaTxHG7T7T=On}juU@{P#l0lo%kutFZ24wN=YLXrzXSY63fl)Sgz)^w Z*h!4LB2U&4 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

peXt|z&Ruc{e3*patA^@$xv>0 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 literal 0 HcmV?d00001 diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo.png~ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo.png~ new file mode 100644 index 0000000000000000000000000000000000000000..0243ffc793733e991ec88b4f49e7348fcc8c75df GIT binary patch literal 109430 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 I1nAsN1QIo~2mk;8 literal 0 HcmV?d00001 diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo1.png b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..14dc14760adb5154b9d04b946305385301aeefb1 GIT binary patch literal 77964 zcmV)iK%&1=Nk&G5FaZEpMM6+kP&iC@FaZEBXhfy}%`gmrv`s)VrT-s1lMf>LKLMo_ z12E>vQfv{1WP2Y;g7BFl8#?y>%Xlxvwu|kXZ2-DQJV+-ZdH`tKbe}QTsu&Wtk+b8f z;W5W9J|bvy@E1t}xb+UGJ2-clCI_$@0{kZtux$>FwQ5~+QhzAG4;o{3t`;%>5db2B zQWJoP0A4b)*cJfW5u_S!=ZNO{ht8&*`|vQ z0YJn=u;l_0_1Ksc1AwUjZ~_KQF=7B9AP^D3_-cQU2!tsBBx`^c0UW8^2N7%?{!p#% z+c&}&LB?Q+fG8wVsW6G0lp_ut=@Bs_B1Y81xNRdxV`*pm@A-0kN5llwp9Z*!%}YQ< zIdhL$^@Q36Mgob4YLDrlUR6~J@#ul{7~L(@>6kI*ob#HP^qivS6|Q2qpjb_kE2>I! z12l;j6{}a(!W(GoVgG;m-AcMQ7soTc+3U;9*RvUBW@ct)W@ct)W@ct)=3K}?h8aEC z&15bXKL6kOKhN`hp6B>^H1a2v7c4ifuKtqcr6I42|Kd*Az{hN4uF zC2!-qG!&g8a&xP=a+B)18a{v4lo4coQsv*luUKmWOq3B;E)zZ}|j=Yd6UK+{{SVO67X^)1{)smO2 zp;Xt>9=W+yOTj^0|Np6QtD~ug5?8sA+nO%k*&M*9H$#pTm;7m!T-$-q?D=y7MvnF|_2mFxy>9 zuP~ckqm1DnFuV6fg|p25UvyuX?K1m&5l&2H`9zw!FtbZ?JG{(ZlDon*E1VUnTWVWO zCsO^x%t<9mOS8;l*jB2;*@2cHGvk(~?EFSDv)%HUi{9a$aLq+ap&c;nQc{+fd7CGr zn99nWi+?y~uDLiDHQ{Mxb{K0kGOUrN!e$t$A4|-9D$)wa5Gq+clIetVqI89slVj*` z$?A!6BGn4VZ26WX$&w_=wve={`Um=dC(QDn=N_i)TVNzhk|fCjNGxhD|NpI*-Ew8b z1o+YaU$t#(TjpH*e*Agf7k77;(4h=oIgLExA|m3V3KqM&-jD7%gE8jX=h5rhC;H;7 zGOQGN2p#T-P!CSS8xAdfBCbCUuT|ib;!a13%LqHp4~LGs44e|U+$F%hr48pvcRFx3 z?zYN+hNA?ycbu8xaMFJPsKIL`z7Alg(2e_jU9ZbRN+7XqBSDhHj{E+9 z`t!cF!?tY$NpkP^pZKGg06hKwzn^U7=A46ni#g}}{r>)Q?i>Tpb~KENOOUeVx2C0h zky;F_5G-Kev{R1(!k?f4AKAc73T}H9(56v=3k=X6A3qhumKHguC25E&=qNblLC0SO z)e(e>+|s7MkJYd`aFH#<;{*lK1uBjP0YRbvqX`I#{2whQ08h5<@8#N=Ir;F18Jx2; zYZYrrXU-*cPEWfNfJd2bBWiz{Bm~VFYe-V6ia_io?UL3B^b~7A#CdYP=o6Ch@P`e=Yp!){Y#!n^#L@AY5HBBf9E<@u)6Yo6 zDRS-T5)O_t0^)WaK8FmaY?(6y;^vi)m~dkBtO4s)hUlvuCf@?G_$;>q(Z^4>HFQ#$ z&K5|~JaB3g6@A*Q3n}h)f6+x9AZHFFx+SuaRPF46L>u=o^-t@cDv<1c(~h8Q=LRI} zuIJV}?fW=^g!u`7R;R@86%=MVFM_E! zJ}e3lbQS26h8QHE!Kpw*n_Ys&w%33jY3K<6B2SP*g@pKwAkw;M{PjofwLzuxSt2O7 z6_6QIT7R@pgADBURtOk14;{D^I_ixg9v*~#<}%VdbwH?fRycG<#|kJ-I3*-kCL1Nl zaB=91e4m~aEV>7YnI{WqU3)xqMdd+jcshxF{$?TO3dyf03a19;3rg#F0kPJ@8#KtT{h) zLTizP29jwAlCOw#I-xmeIxr+tjHbv#LLbB@plJ`LqA+?7(*?!1qbXv`NTml&X2XuU zpokVUVVg*V52Xo1uNqxYH78NEB@*A5sCG%ZpcWvynnZ$wi7FVT3re6WR3hQwL^aN- z3-YBZULsB>QSmXlpg5}B5;0Ap+zwrkL6s#D%Oc8xE;xp&NQrnnM1|;sI#J~(5r2O@ z+jT-!QHexG5|vdSbS)S}T{991=|og3eUM)VqOKN+7*_{T`Sd{{Ni=yzNCX{evdZd% zjO{~Haet|d2~Dm!^+C7-XsQaSeicp4pcB4aX!-)lwDlwDa?lICLkvZZ%Rn-IRY_{E z7fLKbQJ?;ju`U*hc1$U~5H13WzCKDaxF`&Qc7R(qRLP&93j)%;Vnz^D8oJ>*OVQJ; zy@VWn=`o&CKZN}Bv<{IFp3+6mvThyGlC7vQmWGu3wxuATF|;^NA4^iGo`IOPp({>WnwHG%A#K--Tci}qt1rT7a9vR1x-cmSe+s(eklja7VLf~wNZ&dM3XyT{ zK!;qaClz^@28CIVAA^XpAErk_{IWFkSpzik*-R1=Zw&h69z!W`JwB)mE=Iz_&@0zV zke+c;fX;Pm6L22X)GZ;8Q)%=4Wy&_Q<%lSZd> z93;o)lZNMXxe}m@?pnu^K!zIw)nQdV5{P{O4xMz?JB<;W^@06BcSy@v(OnEr0{ygS z_zPR2%J2Z7J$ogWsA{fP6T0e-QSadhEz@Pg2n#Se?49A(M{bO)m`paG_!!^IoCXPVD>i86U;4pA|Om zxl$A|YP5XQMURr^arPUQJ%1(WxjpZ&n?-Xh>u(Q7|5cXn2)VUjt}t-AgQYX~p7kh2 z<}K0+y6?mnzN^{x{`AlC^|g|Qg$KZs=oeJ8Z2t@kK)&NvD0Tq!$d-c8@Nn*M`Mpfh zIdA$N-k}h5;~~pF%hT_*OnQ$8rZYSaN{|PHyWOxHQLZTH&>b-j18M!A*8ge!pVt3r z{h!wVY5kwp|2MF<!?xjn{Zeyo-*h{RPaz|bFW{38m z@vgxjM{a==^XLD7zl{@(8*ei{yYs&uo^YckVYF!XlPR!DkT@1F=WfJ%4`b-_k1?=Z!}?;9bk0b=eb-Gv-;x>3DK&gISw(7}r7T z3`uHS!1=5rvlu`~@mQg%paQ73&_JZH-g<23lqh=mMe-Go2iBkJ!Q*Bd-ZcnXH@;Jz zZM@fS=ym43BNo`iIIQVwoxYBlWHB8f^(g`&vUn2#0T8MyLRnKl3qk}z4B|{2 zAr=Pp)+FAFuqe(qUS7Uj+>hQPeb)eJ{c7)W{Ql0y6VF-EJDp9ysIzqnD^XG(QY%yy zaUv2rqe6T}nE??`EqZGbEQZ9YVbB^}JyJ&;)DuGiq|A$lm@i8&CBF1S-&K7FKEl1s zd*m6pi5hih3#)dGEvzl+8l|LE7rK^+w1bqA`dV8+0*ftc0G(M=VvzwZBsGUOPSLvJ zR>zS@J+XBZREi7hr@GJj4P5hGrMD$N@uxHHmB+z#oEm2xt8q2w)6foSNo9yxF6~hf zDaCrQ-UI(Jt&0co=#UDAR-cBC%?)ePHQ{&dN zuU5OlT15-%`;?YxhfN|$79mJJR!-(+R+9R(z~WQ-?QKPH1Y%H#fvTnTAf_}>(yMx6 z+-gm1oytL@z%IJfx?pQR4wioIu;1S^op)lt%BLHP6P1%bu14fex?c1CI(8Q>MUrSxW?tF52cyw_~ zKcQznpO)RRcWL34*R3XfD;n@)X#|fjnM>a8ETv|#V4tT2 zsZXiwoJ1I*>>DB_RZTKJs73*F(m9(T@G9&4?E-CtrE@deJ>&6A?E@a2F4U=E0tFD? z&S1Tl(e`9MBa>8(hB6~r)x)8MTu=+=O&8?#7O7|U#KAheoV+!1O!w?|t=4FFZnT!p zj>}K2%Ox71td&%z9#Vi25K2PHV#ie*i2;~)x7MC>jc1qI&fPvfM8_6B^)c;jLz}Li zRCVKNF}_|4mXD0#y-j_Z=DFnU&<<2@EaLpw)Ari!nTPIG^KI|0Nv(8XEzrmj7E zNsdSi?QvApjW5EY9O_}OimdCbd(7F*Zkt~=Kl~3itwSC`NNfP22ar^S5#mVn0ZIr7 zsOq@YWLLnX6E(3gcFxCwm;3n&cTF=oaeL@S8EOza@2SR&nEEj1D z2x0&EIdAQrdyG9|ffmNZ-?Aq3e*NS3_ae$?7Nk% zIlTH7n0wnSHXiE$%8U|7eOjc17(gf?OQ5DYy;>nlCRQ)slP@8jj~-Bschy;br{k@e zZ|QcjIW#>nI6aPat8JfINlBxL_2yXKo)nQb=JEF8u4Cup9&689w7P57n8kIHhxYzM zEBCU)cjq2?_|iSc{NvtZ5Jt8~~{NT$uoSET2u zmmc%61QItn=NvpW%YtPYmgQ428=utM*q#}mqBnkH|dh2VYXx4WO zKpum%rf#&!ZgYN7Tg|PpjoaGyXos}AR-(Ef_8xs)x*6wc8+$byD+Zv$E(G`~r;-k}|;O1yia5JPJG$A6|Hy|LKhXdFdJHio_7&9&* zenEonqf1=e|80=`HYNBF5GrHer}hnUOmE`(Nz?? zc{}htc79#-xTmJqqACrjQL6RUMD64R)un+@)lUe}R4l;>Me3neLJmmitbFM=ah!c8 zu#>Lixh>sNZ7hiS>}cEF{*7PuCNXAWD6wVf4T^f-CcH)I&x6{Zb zn!RiGaNfLN@7!@7Tr~D}%`O0%nxp|44pa(Dr6MTNfC}J@Sg+CeF~z4zrh>PgltLhr zG8!RYdf0K+iPlMV!rD@gppCtAc(ZZs<8sU0G803IK zK?R?B>r*^r`Iuk>gl^|IRLYb9SvP36_ z6{EfJKYIuD;=O%kDYP-(KT6>*CSKMO4WsYl+3g!XoN|f+iUfC64q#am48u_mY>8cmrYKr%_e zWMaKyLGey)a3K~}6bO)H03s^h(iD)C(4Cu)6UJ$Fr`&B*k1+HDAGA47I#0Zt6B)57 zfMihurBIoXteVz>j>}j5Qgli#u@bk!zLy&S@~uvn#3U`7sjEkQ7V}I~dh?o*GDMj*!Kf!w4r*zx8)`r9VarQg; zzW1YrPzr%#kU%L^W+W5Cs}jS#Tz|d~bx9QG{L}0NvFd;&{%sZqB8XH@I*-NW7BR)oII2Q`K8s04-}S0LJ+-8P&2^zIRPa zqi6!Eq6w+u9gu-|OK{>dWJV@^+DXO+YpAHBYS7qqiIg3?CWyCQ(x$B2l;7DIeWzGk z$PFEI<&$hD+8rAM;$w)J#6X#qKvtp?>yX+Do2282@8C9{TPrqp*OAMgyXVx`39M zG=){u2Ww9#t^q2lQmWLv%P1AdN)N)C-yl6#ijQF7u`Qdr3t*gX&AJNCZIRduKs zxf4Du+bAc-m%I0TLUqDnRVh@9+n)D$p_urh-8XVSXD_)P>|jzrA*l&2;DV-Jg)T~; zilH72xrQPMnd=}xmQVv~1u-~~@o35#2uV#`aCumRK}f8aNFtMkEhodwq~ww}bwXWm z7{p0X5y1;tDc!Nfy+7BT=p??`Yf;=_qu!}LPEvP%TL7&Yh|HY6h-<}jRyKg&yzcBgDtZoKiZem?dUSG zDBwae5kwPe#E^G!wCB*XRyGFvq$RboMhTz>YXqDTbz&fb5foGq7ov$ON0wwFtuA)2TvXKshbc2c3=uB^LYJ;}f_bOD)A^3o*WYKSy8Ec!2>7%Nq@9QX zDS<3WWmIA+C*d>VjhFBU&+_yYpafHqzwVV`sSvqS+}oH^LmTBy-JO+bg~Q|VRC zWjmyFUl#ERKY{x{U2_(LMV+BC8c|Jsa;x0;Vv#ls_DU(0tfYqPm==tQb1A9$xOwQ==(;_5?rYB*2};;(Y9wo_hy*+J)+FY9>rQ=_F$6=$L$qQ2IVHgsk8ZSZzI_{>zX6kl;w0mq#-_XVQdAhjq%~yR^=1XFv zQP+B*;Sg1TdNpbFZ3zT-*%d_(8YsZF<)Nn&Y-bj;L-@&H^H2?!D(Wtn93(?rpD7Zj%7b*l@j9c3hv?s_F-lPJj~2tg<%+ayo9?#i9e50*F#oG(Y6B2M&)c zilH7(G&WpMjo=7W6+i`C5ZoxPgJ~(VZ&Nd)y-FsJs3ob-5D@W`G2fV{8h7DN-2G)0-*I;36*t@OtU7_4#HU_R2em3tHYLX6@#kH-;wwCVEjKqCQXhz1&u zG%Damx6Q3C*V_|&Y6GI667nc=zy^hAT!d~XEAQaA@%qXuLkv`@=-Tb6(bJzbCVO!kdst2vGG59u-a=0ic?`U1gA)A z;-*iz@GxPbAx6eAqy<1!jFX@cF+dE{8e$a_Ye`U1NRvPu2ciavy2Utww{Y#$U3HY! zR2S)6YleHI)8VLgIdb?QR!j^Lf~o*9xIi=j0xFT2S`48pmv%37&<2N*Cn?&toopbttg>6xb5OI17bE z!Pr$7jUTnyxHv!PUAmT494O$%!|1Fzar47}$&QP`L_iId8b=j%q6A!U!5P7s2qp$~ zqL^5tgMcV)#R!gywI|tbbfLb5kk-=gXnneW?9+w?+OR=nO5y9$1|NDK)E5|R=iD?`c$ z{AXK&VGEoV1E91!tobwjl~(JYur!_42`y@X#j$7X=-pfnIu|ZfOeC8AnHX=T@6 zP-|k0`o}cUD2t66l*Kz#lrYhRsKH^P!Q!K_MY}efmejl`V!bW4!SVNY?sk>54w{TnKn~$&&Wq$lHYdGqt*qDz-G&my;QNak&Knyq|Q6+#g#6T42$Xi{0U8lK`G94Cc zBnJucsBL-I>kR#Ue)HP}PnWcUS|2bbfm)4fVAAb)nvpM|;5;tohZ4_lV+w2O-{vUA z7RLHQDGJ-zDR2>*f*XZvdO&ul}Fb!1U>AS%Pb6Z_N6QIHa#%T zhzqy?8j;`vq7jS$F*pN=O6N9A~ zDZO2GJD>7Tbk=$FkT?uLLaidpN*88Mi<>Wb(D~gC7AW?( z!=i?%m=3w28dU=pT*2Un^^J&LG%lziqdrlm4Y%ru@v(>Q;%9ci;~8SafpOphprRVb zC1SuPA!<;dV@0oN5>T)TKBYjcHc{!5__RTonJBD(ohPsz`u1e&4tLn~(0RM+5N%PT zYajb5dzR9Y!5^jpqBfL*Lk!>`#DK`Oi7EjX1O-tfiVH_gwa_>$tArSGXr_;UUhX`` zr}nHJVxeJKtX4otApF^GxTHai8KCG39~Ffa(vknl*jq)Rg~3{5i$&w&xq`#bt=+ox z+jA;V5XdOI*sC9AO|4G=zM(EqwUz`NjJGi=Sg%-LE3J02Rys08Yh?gOXO3I(Xsxu( zniEAKYff{VZJYL+=owR+@~?Nvzr5A_Fs(I=%9^k-^wNyC+h)V%XxC5?k1dT<2`Vnc zQCDOR0T^|r0-{9Iewc@z%CFiv-9!Kpq#W%XJH`3^`+@V0(?$Mrp1^=HP?IWT8N^rh zK4=O;Z*UBt@cH_Of~kZy!^Ua6^%f`!ta*}$6+WXK+_3Mt1Spte{H31cU+;T)PEqWv zBmqRan6C}LuCy$dx_|9l3wy|JdGB5xE_8o?@2{^<6?>3;;Yzn&ZSTl|TGTVs3di3b z{le#K%$}P~zuP&pu)3z|`qme{cU@;rb!`jI$-#A@r!GgODIZ&Rk&TsUT}u8Cm#+&T z0m0T#SpH4DIz)fqf*Q;cR&R3t_^|rcBh1^kll2m7s4PLLEKA95egepn16_JT1*Txi zm6gw?TzJx$P(;85PX74$a&bm*PsII7yU=#au?W|$hjTf#BL53r8B!>`6jbbwvMeIGt%f$2h#(>1)4(ZYj0MGv|_BVu&E%#&7rf; zchcO16xA^7iapnbZBL`U^I^AM-2x7%Wk3paBqLM*#w7zrm4Iq&F|f0unQB97(*$dI zD)Y#@pLNasFQ%OCzTyRUDkb)y^Y(JdGp(^z$27Y-Q84;hN1H=&d1@K6dp zLoKpYnvvB7w6Z*ySkXiYqKXnKVp9ZFw|b@lpje&giJfg{Z~w`?_FZ?{gTVnw0^lWs zd>c$H0dO>|3Ki*|ucVS`D2XqyP&}2p$^o(f7l{SJp+*6s-~F^c`?cfkAlOq8q;=^|=-&XAdh zSy(?_Q(8AwK+ab6)*DlKg}1BJRo%+`mi>ZD1)x-I6cLpRa;sa@j1r;(2k#LVA1i8W zE`C@rtz)q@@KjAVgG=Y+b_cYy*iXc&F z9ap-{eTrIuWyPoUBlcH!$cjZZdZq6AqGciX?s`YF)uN|l>g&FY=?Xt_o%I?5NC6lb zK*#LY+5C7aOXy0M&-I9+&H(L#h=33UA-~n_JW@?Sy%sFOC2}{fCp+`a?V3dd1JuaC zr;?TsztYwcX5a_NmQW&Bxf~&pBBMZg%ESG^mx$}@AhGTJOsv6I3V!=P{d>^)`fwko z9wokd{CfQ(QEFs!8@*oDL2zC9ftxE}veh@HmE2J(Bo$yZH0sOO^mZew8kbQ=8cUj?aho`WvGU5U786KOZ}!B^ z$G@jttLT$6I7s@Ip$qX>@OANC^++WVawz;Ae#W2mc+AFWwqEpH_TuC^il5!3E+*%p0pFN)tnp#TeEcTwjmmi)Kexq&^f^wY?@@*|gs9 zlpd)QSRE=W;Rq z!0~BdWp#IwJvhy#)t74lWXrwAvd2|R#=Lb|KeC*zdCR8Vzh-(*BQ6jd0Dj$&q5{*J zRwG|*D`HxiR;G2ja0YTV$L>v!Y)3G4c;4e`9PpFR z798II>x5s|1WY(-0+K@}=#Ba)QjjsS)xBPb`Y6a)rZ=mv@0_h7w6C^G*RP&1%j@7O zy4WLhm9`3D%0VrTSn@@#fQxD6DfK@2x`_=5bi^eU5jE}t9jetDV#s7#1kCs&@71fN zd+TvB$SN|h6)^;MuN6z00V{7F#V~Y{QP1l3gUj%S@fFgi-L(=2GD!iF_i9Mhsfc?h zA`%eT;cEAgADKrw1HKL16E4a+;RSN{1pRV6(x#$pIBhB-e|RN;-g+}~my;GLMJnCa zRcPIgPm5ahX(ta}?t`~@TUuXMAX~O&uT)s}3psGz;9wxsn>B-cf5||o)Bs6jsLT;@ zgJ9H0j{WW7ulk6?hJ9F15_|ZDCC-qX0SaO0W3^@4vH1j2KYcy(;lEi3ewe|mmMQsA zuM|{rkI*GbBzA*lUsB{VT^8VM=1dl`R?my?J!ev{1UWydb>-fSY}vq@xw56gW`j=E zl!Ck)BNo>Hte;RHqQL>Ru;c);O)HQBm_GIzDN<}e4M4_LJB>FkMMNzX;n3-Z=2n@E zg9$0wP2cQrnmnbA#Kj0e3?w^FUE&P!nYa?r^W~+pERsQC&C1w#ImBG))k3=~y}KrwM#Q7=YKX3?S? zKD;oKD}~B3P(Af!7~dfpOPnDflc@mCgTG0;1n)^X;ySKzeKW0;nIxq_q|rBs!MJhG z>@Y881vUYNWB3B{b&O zFcg7`l&Yp|>;_%p416;v&-DgNFqfF$Tq<~@2?$1P8g|ZaTo63$TaP7F6u7p+q@EdbIY^%kVw zQN{9A3TRrSmY0IJ{<7C_gjd$y45s~E0nMDow$p&YT^YxG9L-!15d;9E4TCTwy$7)( zwTarLdv{6rx-CpXQc}IJm<_jB@(jG7-0gzj@uYMP0X*sQiDD&)9jv89=w`E5HJlni z3AP$vG+$Pp0 z4Du+m>`78^MNyDSo6cpQYo<@hDXnzRtll5rYmE%88?Do`fK))Zc-lr!3;LNBqy=f+ zAz;06kkXMugU(Bb4sx{#3d@?i6rd9Ww81zHFy0Ki1yExU6fiEMMhtHl#TN9qzAcWm zJ3xT4B*9le@8D)nx&#`M6DMQ(z|kC&km0TRt{tdIGL5gbp%jfes-Pl9qn|J{JlEOX z#AXdP<23Rh?=4dZ{Dr@wS3rBLy@pQ41^9+T4M*HvNgZ%)fXZS_v~?Gbp%__?popf! z$oX&&%`%3IyzI?U^{5nt*v%hk9s@PofPvtgqW<9{cWOW&5OHA`NeoKW{g;pDqcw;C z0b5}=l=>cB5=)@Lbja6(>5A5t?K1OpuTHyKC*O1LQb{t#VX`??2m-0=15!(2WOg}- z!|9R;2O{M+kYX_MgoBsnf=(?R)VlZLEn@(J6fVF4Y5+I_T6cmA4onoKdT^;%Aw&g~ zP05wJ9Azxip&83{sZd8MVPifSfuRjRuscS`hS=aRDozZhVQX4L1E`{%_Ib_t5s7hx zAc5+|%C!fdKaO1j4Liq_tKaeY;(J?_lEqZgZtS1Vq-NYOI0G7y2~}q_Ax7izgc&~Y ze4Ih4)PjOHu5jegx{DXtaZw!b?(S+Yx_g%#YCsBH-~ty;Eg(+-(L_`*aWRWcJyjh< zjcne!ykV_7jou99zRavBL<_y#CqW2G@E11gqO-$ zyZKmv(;uE@9dH(!9K=?ENzmMtJAj;8kf+tyOpzi5iO_%(j1xe{iB$~IL=a{Da!>Hm zz*}!X=Vd2%8Xf7NHaH3l-dK=AVK=~&P!C0#SQDLbs*uFek<4UGz#|>4w*Lf`C6HDW z^XQlq1ZUa!Zxs9l+U?i;ROK@4`Wj3vg{J#b+myP9jX+;SJ{pT8(jXFakyIQb!O+EyP%w&imo%I}<+G8i_b6 zGlEozH|ZH-^in{$gK!)N@6^iH6t3ieD@Xw0)F4qRP^5?_B+;6cnD z-X`ugSG&;IK}(_`GD>znw3jXsi6v?KTAedL3JD?Ul8_Y9p@2Fc!NiX9tTkSrU0C79 zD8Lv%Y4zM^L~j`fB!`5P0OU~u5UZz1r52JXq<~r~lq8^30s}-t1T;hpL_kBtM8p}A z`U>qe1R})-twFK7TD*L4u^PiAM8{)1!{@f-I$*8c>&G!C;*Cr7f)C zr+H&H!|9kuwv6Cew$luTNH~H53ZOYC35T9a^`HWKtECodcy*N&)JQ}s1i%S^Ap)2P zm`H!);t`NaB>*7@XmqFr3{)9J7{{KE-V8>K4I^U$JSJjnBvRF?+F~;I9%NJ2wJSCr z{UIcK*rwWpx4rd)jG-mb5Edmb_Y?P5$BcCx#QXHfJpAB55VBG=>lGkIYhDde&3mp^ zmwN>Uu$wJN<3iZj%_g5QhM$H*fV(^3KN@Yz-}mCO8E= znE;k#rhRNz`tNPypc)>^6~!#Yb=Q28OQazcmYfW|$G#apzL2u<>g?Lz<|JqXQZJed zfR?oYwMhB#b==E>2qpj@DIgx~7(SZOIStToadX;8Ai%wNIuryRDcGI@s3j59l0>N# zX&_>#8coDNRKY|*1+4+30J+O60V(7)l)?dI2Aqb8hJlQ6f?3oy3p^C2w6^eIj6wjX z6Q=aiG9sfq%vYMYLw;N$WeJipWA@lKa|c}OkoWcHS|ZI+$dZx!ijOtR%P4+M9oSc! zkM4wsb499&7a|BHL=2Q=f-08H6a-|f7JzOL9pS=#Td>)of*_*e_c%eN04Y*bD7DCI zqylxLf(sE1L<2a%0MSG+(M02FkRnk8Bmz<(91!aSaD-+)Xq_Q2a}j66fAKUUu*$?l zF{0KY&Z>hLn*o9ojYUX!%q?jBT;7rq2mr#X@3mX**!!%OJ%FybBpQr-^07N!a5Y5) z*+^T!e_d+@lX_DlWU69RAfot>uU3#~lCfA1lmbf;25!x8YXgwqX&Y%n4mc!t0?tYS zR7x$>NR&j>k|L?3s6;9N0VfzD8gRh{hnQ%hi3Zj#QltPEn<+>Etdm@>Y|X%2VA(KX zw5~djH&(~(EkM?ww7rpeZ(%qHF__E+>j)k}*8RpeE8o$!y0nB6NK+E#ZLewJd=rPy zpRWKLmPEsNWR;B+%;mRwG1bVNdbB67&Auh zIL7JR5xar2Js@z-K=P7+NC33}Nl>5`pcaxSwIHvN943kZT!{2(Bw}y`qKb(aA}&Y) z>FlJ~LJDpah5-n`05gzjZq^uhuK*IHlQc`1NsTy-hDtHPSwW<^vHghaXIk zkw7Ky4^&eP)s@kJn;VLm6yJ`J6k&j#+00jE55Q{+U;;Gl?PH-npFw|R8&&r&8{M|v zm6T-(DZ*7Y-Cgk#Tz#wG_XV^>8nTAT!$onLAJHVz_joaO|G4wRZUu>JUnr9AorQ%b zb6r`OPX zl4(&HEb@N2(>*`}3m-qou7?Z1^uXZ|(FuJhKHg7zLdLFetd;E-TZeXab@lWl&Y=5y zM?}$dT)|Z5dKCZyZ3bk6T#Y4+ZEXBh_K=ZfgDqQfoyfLj%dB243?8z8^r(;?P`g}B zHPtCF(5cWfCyjE_>}|^pa#|+DjeCSeMuK&{RaUj$+RVxpV=mLKwmrHQ0;EvxIiF3@n+3kmA&>T=;SvMpH(6@rPMIUi@i(;bM{~ygi@95q$Z0S>d|k!i0qx-e4%R99EJOvThbsw*AT(MP|Fab>M!#7&z>ajxPfUIg&4Cilz)AQE{(tA8lf za}p%6Sv*my}nt8J);+W?jNya8m@sP;(o-lJajyD`~cm& z`1AT6_xR&3;V@7lacY-hxe^xwBCXj}l&}h6EUVJf^?rtKZf+@;y`|JPu zR|_!i=7xx%{KD<5r#-i+#Puj`G1iT0*DgE2iu>^&noZ1TuR19K>5AhIN#Daw9c2b7 zlpoaW(XA8hj=%53Zkz5Mw977;h5~-19lrU?X2Zv%b(I@j`M)eg4T3T&pCm}r0+Z|y zU%vaYWx9uYhi(HH1K3P$K!A;zU~IgBWeWiw(tZACzvkzD z9ehey8un`0>XPUlfMp|Bx&ZS26t&A#FgdDg*O$Nb*MBVD!KPOf=VU(4=Li=xfg9wB z&FS&FmIq-zvDfm7P}G_sO%VQiCsNwQKgAW05(mA8VY z#S$M@jNiBf1^GqBxIDndaK;CZPH1v`I|s-eLMjq=vy(hbnCPc=ewp>M%iH_{A?sK* zmdVfr6JHEwf1|{J3P#HmPb?*~o<%oy!9Br-UVC=DQ8pN3v)LH1F+~Gt!`R4RTylQy zCx&;TBCnGC^Q?G`(bZSXYRT%=>Z3vzU9MdiYFe(msxJ`bf3!=hOwF9wOMDWP%B4hK z0VeKFDUrq2+@g)1Y$k~wfcX*|Q6Yl|kIkI< z3b{DE9pD?0f@QJ|?NOy&yeV7AH<&El>E#sc$c~4OA6vUU_Hh48hQ!#Wgt99a9h60K zuEob!M{7GM0&GGx(u&o+BUmWpB-4^5%;FgzEx=%=0^8U&AlnlrHqU=@e5Q9>-PSYzWe;nJv^ug9ppQyduMFph9}kvx!&ry4LbA9~Xzqn+%5@{ri^ZI^u6rD5_6^gP zTiITLZJm6i`8Ig}JCY26a^a9G9DkkIx1ApPp67SHB!-n#^{c90C1DVL6KtFG#U^W$ zAWtY2Le-CX`UkJEUF`mN;EtgLjiq!_riL8*{oW_-Q_IgROAfFW$|S(x=0Ij1eoenj#s8n4;J6`)c~R! zZlD$ftwZh&1QtwCawBzF0hXZ4Y`Z#+ch6` z35%$~mrnaq93tk?V^Fz9nJvQQ$Ea@5G_>ILxC6{Xz1rE2pTeR=0v?An9PMRUR+ePt z11?%W0x|>b9}`@=?)`iou3(cGz`a|ljRs)Ag?S5*&8+2W%eZ1;T#+y`wsEnl8+Ciw zt8HwJVUOC?sqd0hkCe$#yT%)@fJ4;*%(~X(c)qbGfOlZYQzMb9vjQd6f6>RdrU@YQ zLV|JRI#aUU_=1i(@_(Blq$$!fc;n~T+i`DaZ#Vns-%>6?VO8%*#?7M!PN#^AfvuoUI!^zIeKOEYN!lGPq_OF-sAAQ zRPO+mWS`Fz69iJROBsbIjjd6t`Nz&GM45$PTto_?*1b+WyJK|Q>!wu-sfY4|dc8a4 zzwMH4L;O2E?vfI*7s3V87E&%e{T*kCmK78zM9~48ylg(pV`lzLyJKTsG$8S1nThMp zg$Ioi*UP!&3{ydDH=k%!Xn-e$)dP1`scLvL7ih}HxPXDVY5>VLUkJ#yY`}mp7~54E zk_A#19;uG#q5}f>!dHt6ebI#|C!m5Fo1SxanliO-5jI@YqM!unVmgf^q>|+uwbKmk z=JC2QGJK?L^x(i#pYM3};m+A@G2gl=OG1QQDCbQbNIwNf%pTW|mJv*15cHv)`LS)7 zqf7kR#^Zxu7*MOFV3rPni(F_8D+IXvmYi35T`Qd%?TV3Bo3!9~OpYIw!_`H3&_;QIJ(%YsP0%+d2p z8*VF(*#jf*_sI>Q@YdI4HYo9jfB!1 zY#T5|1DL6)VA~kkV1o@9Y=e;jV^d{=k!6Ed8C%d1bkWt}6Z-Vv!i4|{o8C?3x-(nE zknQ6OHLUK$)ff(1l2*_J3`)lA%;Dd_Bn4$q=8?dV>8;lJWcJV5mh zy>~hql8tT*B(_)2=Ej}?Fu=gDAp|GKtP&}~sl?y-`(+M1e$5C(V1cdp^3U1+@~>^f z|KgWfl3@ot%Y_4ax5XPAGokWeE$JZUw|%+S1U#qjp5TTj?5q!FxQ| zSE>)pDy?E_zYh-KeS@g)A+VYQ)KGV>%UUl;h-3M*P6mk5%@d5{jBxdBoIsjUa+@vi z)z0mE6Pqi%RrA0l6^yT1yEtgx9ACQX%5s1X`=F(<=hGiQO`F{>dtweRaabnpvLj-Q zWvNPxG0L@qh1=l9Ou0~-pm!Gn*_)}=xL2EUD=amdF@QI)CsR`~1~5gtuwjfaAe+^e zZDcXJZH$pgpxz%o{*VW)SW~Nj-g`{|S1M1tzi{q?GEG1_9(I+c_o+(cQ$+*nR82N^ zmTP*ghkK|DJY_b=Exeqx{=nbHV@}^SKbIvGE{7ahL3aw$z3I9#fQuoPlncF_iC)svu$R&6)3-@0XgH2lol=zU zF%~T}cxGy2z&4m!W55V&#l}=mSq1VcVPUI-`nY>z@G#1jJF9JMQ_-LVBnODP)(&Ag zu{CrT5o@9Zo1*pOJ-{cgYj6f zFXXY!noDrva9)f988_SR<;afLj>iM{ew|v#r<4+MipDH9oOA7%1u5m9@q#W8S+AKY zn`K)fC|9a@^bWNGw1;H60hoD%OQvYbHf39uY-4qd09W7r1@H0D>b^RL)s{2{8rC@i z`o|7ac%uh>(i$1Ssp6t^oMll_HX2GzOH#@56V8+Ey7p~m+xZ|B;Gq`S$#!C-mF)nHkG;oVp3LmuWk z|2%fb7`tND3gD;?afeYRRw2#>Hk8sg{zkOe=03pcZ7Y70R6d1L|D1}wk`W5M|F!xuc{Z&on| zY*bGvi3AxcTbE4ty0&Rzv!G23HB4}9oQOnFDVIIb8Fsp{cU+etX#%tB_A?jo+u7UA z4tkpH|FFb>^_aH@xjlF?9uTDMln*m#xc`@vDHAzlk9V8T?;i+(NUK*a0z@cXX_o?r ztTkc*2_$E0q*QASdKU|&!h<##yu=1$%&Y-pqXZ1XNW&n@HnKi`>jNJ4JKR_5y53Lq zo|Wnw0UgQ~?M+h9bDk>AH=AAzo(Sa+KE$*U)0D9;p85JFCbq|G0%{<6@7kiji*r{D zZMJ@~B?St-0f+p?KgnlOhASpJ3CHgIx>=Sy{9Z4czwQ1q9Gy#&LN!DK(cz+W5KSGx zfN5>@a!L(PBvMKQzG94lHuET&c{A&YZQMJ?fWgLK+f>W%eKI~25C4n4%I>{)vx-hd zg;cruNoAvFfD&t==-hpLM4|%-pI@IugD_)hUiPQy>t@>t{Ru)1Zgl&Hd$g_G_P*9L zwrejDU@iILkY(OGA7$3F_*3xUIR0zBJ@&Zs`RMPi7=omp*{RbKV-PVNJM}_iGs8+R z`zd!3L<&fWm?X*(2egO9lLKAYC>qRS%Qn>*-@Wy*cogrF4l7f4q<{blbsOGu%OR0K&u10-a9sz3mv0kDPo2#$P8 zlUfWSGx3ew&9%>Ux7Q&l3bclKeY@K{o6q6`)rQ`~9c(u(iqq$t8t{9*GXV1bRjuf{E|!*F;Xe%F$oUWZUy)9T z2r#3POB5o_pdf5bms3@$hT{Tp2{|cY30K;r5m7K85m9>32A4cDJ28N5frUlcdhe|d z#3TI9b1=xOg-b0FH4!!BY@Mdw&7x1t6H!nKn&hPtkc~JTlXlsz&B(RxcFJGsr2cXX zHPT!+#ewhP7B%^t*&5i}F)!X0a{nkJ$U@z$l6xj&He*-)+4g$fobv=xj4;@0XpBU$ zwWL(Ysu=GmgHIGFF(nwvk}^|uV4RDJqaLJTeDgG>kb%uR^#decNuOB z3eiaNCn{uXNbG;yLwRo&J#6vvCRLHPz=WBW+?TPVmDbKg4|wk()?;W!hsP&WCZ>c^ zw4}d(^u%i8bZ^7y9`hRnY^COz2e<&E4udmj`>3_NE8{z93^pP$!p0q_NJ*t~LwkpF z+uHf8%Y|3x95$*re7OTh)6xDX-}>j1e|+8l>}qLIt3fd)-Rt4L{Ec*id{YB<~#49#UG{;CGgE9-d;)$5*jy2y`To!C4fD64J6cA%)CLOtdDNKz)6YI03b-&h4(@_7vx9l`p`=nvFl8Cax`32bR$GsEFIaAf zN>JZX>y8rkL)FEITuSgxhlVi5T@pQ^GEG3r-rKu$$pLHE& zU)JJLHqSrUce|ao#uj|?*+WM{tcFxa#rO1Az6CCfawy`l_w5nGsQk4KU zN7N&k%SEhk9eE6s0?Oe*!r;gie%{}wuSK=PUf+Nkebi!IamXWbEc*bDN43+ZGU1DF=#^3pDxRW^D_-;Sd-MN$A;0OPt zpVdOj)TZOnueR-cqN^Y9W1gL_;heGS5ZNzyr!rj)xOWf1u<4EN1l>eHcf%}3vWb%& zhn^{KC=F-N6wtyC;yTa53GXac&2=dTt**6>2v_bYg)WO(VS761xv-TccfE4E&fZoF}BZxO|jy({? zCBMDBhr1)``8W8K6+3#+v1<5XTH&ab8&0$CVhp@}N@*xjXFNf8gJ{W2J>8+jC2Y~l z7O&q#ZzwZmG(}U&CNWxHmQx%sjR~2LQATv-Q$EG=l~F-RD5(?x%RX4a(tcw(E&HN!az2N6TgI~=pXJiq>pDTGu7aqN4%4f~A*UR7jeqHZFF#-A z_N|2ryX%0dbOUsR%*s@W&cV$J*`RR_LRgaoRUAI|qC9e*hvuI|>_WXrTVN!ly=!Es zXSI)*Q}d#S&ngDoR_O+1nw&U-N-iXs|HB!m`s>~Xm+d5oc-%%SAhDf!Y+Jf;10edg zNau`5Y#gv<>#LOjYC4htWm#Ge-dngya?utnEL^xV>$|EH<@z+I}<@Tnggle`L~N(y*Ig+kP#Fw{DWp3(Rb_5H_(c`@ot zg*(PzudJ(FD@i6vWqi&1wlfQXNl0&^D8%8_?mWP>=mFx9$9H4{hM~|RANumY^yA`_ z8dw{AD^RZ0qRGKzT_keY(;8Yl!OCt9w(}SbjoIu91ta*HpMj_l!2mHzj6=76|8HZ5 z%}fx1k`n7Huw-@6(y-lv2OBK4F`js0-+i(^E%teL+zr0SpJE|ZQW?uDkt!;vC}}}I zRY4!`TRQxp^#}d7cNfB4H<%T5%ck1y^y~(1KsJO&1oa#sL^l!=DZXGu{{OKif2K<_|@n2v0Mn{{hEk)eg7)8YU()OwgC4!6S zbfcjN)Z@riH@7eS2ucu=GEm|H>+x2$S3@f+t6>EXvyH*7O!UUjcE{n+R2S`Zo}!{46;(y@%|Gim{*}M8eDfkyD#yu->x@7IFCuwMB$ph-dPNjbQ9Ps+AnGkZBgr?vt@z>V zhpVrb7r?1Q`)t-D0qCUA+ijKfV8@ESzJz|6h`9eBM<1Sf}ltVcmQv`Woukog8j4E zY(a|$aHs(M^St$Hi3?o%H#!c|F-da~$t9POd|g+qTjz@mk`$;9hUhIIYAHlTn|;a~ zk_2!5=D+Cojk|+*r@Pw5wz26LR=ch?(^IfT1TiX}E*97r5CrOPrQ00!b};ea^{XGc zh&7Uml!AO>Q{NwNdkmDlaBC>vlGUiGkVOhlgRNfMl~*~B7KBHml=}G51sCx%Xs`11 z%c7HZgmx#JMZG(xLo-IW<)w#BS%R>5>#cY2&AzgNCG!?R<06a;Di{|4-@Wl^ae+D) zXPi?=DphmeHJ9bhE>2A3DI}yF8xET$SZ@IpQf)Q_-=|y>DA9LYKa~EigA~|cR!p@8 zs|6T$Dr7b|xtS?+9s|p2B0S)5dp@TTXt9gVjlT8u?e5ho3SjI5Y0lN>GC-E~A)$m1 znB)+{b4x((eQ1aKAXc9Jux?ali22}pArir+JYLepoY)QuvgzNO`|tlX=Wlxd-(HdA z9Z@IF;iZRE5GboyytkfKoM8xN9 z>13Ygc`H|+q|i|yiC7bT-GL~exq|Q0oscBRKj8=0w}Cu>Um?N5ROD3#7hx5^8Uf>t zP=xP59FOiu=Q#W4yq35<*0|jRcMExg&nT&=I@y?drj!9O#~VNqo4rk1Fy*@9`!>!z z^!69QF1)z&GqP6NMeJr28BL);dzR~BNsul$*9f!!+D8BR-|m0ecj)+4+?hPu9a0a~!wCA)$Pu3%*3Pw1@=#Dy-u`C}>|mCZaA5qz_2=A&y@6;j9e2`SRD zz~ZU33r$s26j8i{K-1S=@2`74f9Jn;0C#C@**1U$7>p&RnGP*?jS<3(3&mB<1E4

V5e&IJb_hHO?ku>To zA~GY9&ua#ThH{B2?a;f1=KcTQF8}x6J$}D=zs{Q1ACflEdi<5c3FVCO-dC|6JdgEi z*bHc~06f8>XamNUexBduBXP0oH=3Oji%=OD=_HbmjgF4ylIJW|G(cYiTNa(Z5hp4Q zu?4~@gv3<5s_#wTb{>GB;>uJQGj*pjU71=EAVJ2C$J+;|gt+zc7_wSxoV{*yyB%Ai zRGI`K{bLV+#k?t$bC!5oKEI0C9`&rl3|%xI=@M?(c&>2`*Tt@M(fN{yl51l^B5~RB zvS)3$=4F}(T*uuyc1+laZe@eTdO(|CD^B;emRQ+b4FM2bq$hR-4ApmUd~y>PJTkv1 z3Z-gHV-Oh`Y3Cxjs zuXAf8yKlSm{BDTpQPR+u3PvO)!wW)>iVi{uc{h`uwP+o?VS~%tplqDiAJTwSsZ7Cp z`n|%6)oQ>BXhDlZ%&cvPsUE+}8+TmzHHQGzDvWfLc#%;=B=4+M#{eA@M8SEsuxKcfhOa#iFFJ9abX+doe}!#jP%G&^ULZHUj!E2)>M^fFe54oe_1? z>gG(M^*nEbx+h4qRlKk%OZFKC!9!U~8M1T7X}V z*ZuG=*2#nlIyiGRBu4K=Iyu?|8leqnds(a1l6FK#Sa!?XeE1Xe-_y^}zFgN|%WAdE zZhlo*nFa*G1=`rg{@|?-xOll}y-^fpu|lP+m#W8%T5pr|;F#DEZCVF)F}_^he5!In z6lsXiiKzf>@GarDe{&IUVcV=2Q#5tOrUDhrV2oq86Mzgmk`6 zE&1s81#@7oYtk{ZPR0yzZY4s{ZjYiWZY4f1e4>rd>7W%CYgH^1MJn6y*EFDIy&Dv_ z**%VuJya3Z-#pQaL2D3`ZcYK>y?8H(Kv~jo?WoR01(*No9_rGUX&@z)C5ZKS z0FQ@P^P&5gpM7-CxMGDROCW+`BOq94u*Qd<+{A;uzgR%Dx>be3!E$`?o~AV0qj}w+ zl=VP?uO-klZbb2^t#?#msh%Q1B-tcJHF+ML z0}yQr0->4TO8Z9pYE!K|@64%>=9cZf>HsaFloBjpz4cUDj~Drg{mEzdkMY!Mn68Zb z4G3sKBO+Mtx@mm;@drFu{baZ2niEz}ycP9UTraddR-m}A~>J&+dB;G^+%=bx%s zcO#f<*pd&fu%Zx100|OTTjnqI_y45}_~5UX56Vqi=}2abAssEFmqH~1PI{6JB=~7z zKK9AiYJ0^6SL0#lSp`@~8T)YuvRv;5CEh(5l+0s_=mY+%nyVapKGiHtCunyjgmxMc zu^P|3IY@Yg?KC;Jk|?O!OF^hGnp?4ARvNiiv^(f z-a7H1-~9fSqo^tk)d?+}f;!eS5+zNewB>{I5g;M!*dUQU=M%92-j28s8v^I#j40>T zk<4HBkI(|W@gWzObgfX$K*F&ugVAaN9cAL~j`-A*Xeg9r-}*bQe2gEpiUmt5cQ#rB zSoh5pS>y7Q94LiF^lu>fQ5zQsQ3#@bEs@eg^j#DboNG%tBdKn9&2RRaD^^}_yiCdx zLm4eT_0|jEE3n?7OI8P1a={kCy!_th-JE&Q`oI5KXbcZ)L+xs<_eoK$TUP-1C?aEm zRY+CD**bMP+61QQs2eGrkD3Akf?{ThtL&e`w;%u90zP<4g>8|nZftKukP&K4*dXGh zOKW3{Aj1Elh@im5V|NbixHT#YkB9Q-e~N*tarvWA=0hlnuOXtdwL*W?dEB{5l)eaF zegk=eOiu28gjNN(UuP3g$*cf_dW>j6P>j|Z^8(9&Fd%PiZA*fAlW%`49>V5xA6|s++VSz>@9D>EyxM~*uogT|@$(N{jf6sv=tu~b z6VHKPn!Wiq^11y@YKY<-zlBpE+rz^H56}Up3L0PrmP7{{LAf=EAZE}OVL;xJ0vTGV zQ8ZAw`}l1hM!j48xGIt5VBfvb8=80+lS=c^4&tegF6N8fGB10x%w{vEn5kT`P zy`RaK+naPuv&fc(nuKl<64JUzpZbS>t?@tdr;!ScHUowVf;0)oQHS?f_N!>T$>94v z{w8x(urtALQgZA5b>zLDgTcDV~hu%L3ip5$k* za40*&pmb$QswLw&=NV&1?O>F(f#({72%sp!Cx3yQW66*Ec+%9Zfl>1jyP37|)s0z7P<(Bw?gp9`C zMf1A$uU#Szy+ua~8kO76rZYfbYCe#;ES@>xFWERjt{*E|;`uxGOyW&Hzdp{4k*pv_w zl9shq-QE6Me(><8;YD(=dxdpSlC$X5>#aO4;hoYbvO40urKe^n0d%f$ZcAsu7FsaZYr zeGeV_pHC`OAr0HbjR&SY8I{~P)FtF#aEj!zryAM(JoZP7Fs+HzjDA-0=W6;j)!>qKhRJFZ;pC%v31UuxdU8$B9Gw5 zxsooFtR#*e1VRmgKmskxvT&BZFXPwqRE%>(aOePVIJz3B!@4p77>A7B?3uoW6wnBw z?Cj=q(g^!s=BG1>+7Kp?@2YL)bZ9fzm7JJV>(Hiq3(B*zWhduC#579Ey}^?Ad3 z1Womg?uy2a**B}$f;6#wEIharo4m4kiWtLLkUr~{Z zPxLX*mn(J6OG(uCa~)!<8X&f=5K{aA>$mn)yiyrNEHMbyl~iaAcL(yiRbfERr90Sa;2%54DyAiRn4D6sK3c zAmg*BF82&O9H4?E<{Ll|%nHkF7Y1Qukh#v_6Y8JIV+dq}Qh6oO{(=Q06ZU~WjpVn9_jV1Ot6ZlF>5tRD$ ztNo#mp2wsDM~a*Z`9RdtQ21BKE%DI*6n~)xAkI@qorwvAf1-{K)DFag zt6K%MakIo?qze86cGFXFmmI#LNTk5=%4T-=!guZ^dI9#VLt?EGp#Ehq*cRZ!(ki6D zPcbzB75OPj&oLJr?Y4?2Ho_aygI@EFOVmSxe6$ny0!~QJ96aH9&y3jYj4>+DD7OfR zNefyukYx}U5JmZ_8{cpMY85E{etu-|gFqC= z#kT2Rd5>Kzn&3?5&bF>rr+%scLpul3$!DxKozlikPgiT32?&ZooLc}0i~y&Q*(%Ed z8v6JX3y-3{>RvVIXJp$lH@=bFS)I2)Z1blQL;~G?SAU$RXuW8y( zE9v2W>OSrF=!9YuN@aoXD{Ss$`zIBs!qtDZ15n+RU(Qz`0|$;MPR66shgoq+Wol~_ zg?~=*LyE}dI1F~B4?mUJ(p&&PA+lEjOykfO(GauH`~XIlky9WnoDUd2_(yp(H;q$O zL;EuYTQ5hkZv=KmxtxGsCXlxY@EaT|P~iI${&d>ff>~MGNRld0a*B0Xp-}b@64S&= z2^x&TLhj;*cgcm*R4GzqkLXFqpSFP(i<{dvrbzE!KE7c% z#|*RPW@P~~+Z_jd3wsKi{(Xl%9k1l`Xl+3QuoEQ0Au_nFfI|g1_{7QvVzYFBeb}Bl zbe>UNpd(Mffv0()0%wgSqerk9KFgv{^Xid?XcD}a^pFZ=1lhgM)zH{E`K2QMolyAi!*w;b%VnJKVU_r_qq29#sb1YIrl4=3i77)5<5_sXb1ESPmX(b90za* zCNG{K@s;wo_71o^M{ua16vqJsO-vMk#l5m>?=*2(K_=>#dHriHVRfn&Ab%JcXbQS~ z)BwI48SXYBIPhdytXvrH5z|TGYRD0fH9R6dq}7yR&ZqG~O`Rp#VT$M7juo?@K9gtl~rqwJ|WJr$H@vyHm`%;W`GW4 z#~onrB?0cBuNChEL4&qnL+4Vfk}9~v3r{OG1CPfixu2%jQ`gkqQQ(6$BRugn58fHm zrV1&XWKIn<%?nld@nKXTy$H6#Hu(7F^Y%Lj*yZLLG<#J`jpV6fWS~-*>8%16WDG=S za9q%61Vn2Pv}PHEQ^;(Uq28Rgez>tWj%`N+RZxM;n-$vo3F=_ZBZK(Fy5;(;VUg2i z;#7(|&Qtq@yBBxBzt(t1ch89+Vh(&?OL$2I^b%@bodQP7SCt%47N+eJTGzpJ&F*BE z=poe$WUDxEplP@|7>D*`v=PCt_JfM^@^W9FctTQBxm?_pgA?Q7VmA+<%!w1N7e@?s zxDF@tjUbo?v_@b+29S}_Ea0`5iW_{ZaTwKIj&P7yV=CBpf0+()^a*f|j^%v0Wo8&{ zDoHrFJMMtHv!4>~PC9u0>gn$UH4ZMNCLrP7saO#}0~n?Q%VfQ(7U^O_gHw1 z)qpMM6AduMlu`#6PR0r%`1xb8*X7u~5=#_+(7ThfxNufC?4B`F>tL^{ikOc*pnj{`UDsX|L%)Jc|r`(Y{>~=dm`c=#XK%0R8 z8epz1F#r17_qg%RR-I}?QHu+gYj0UT66EFm-G#kwZ0a3291pdh)6s#WLpskHcL%b& zI}YGmi@RU7ublCY7zt5`CKF?u+@pm1tJ-2d-`&5Yg1V&L8wZyJcdEPV@^&lVF^E9!LX1(M>Rw*W6oYnE z0$KnvATU6E{5fuh?kO6estS%AY4Z`!f=O?r5n532-xs7=-)0VU{mbVC3ql)>fTb(ff0XeEdfG}?sZ0|sPShI;KK zZjQS7R0UP~WTD*zYsc<(JO{BTuLN~Y{;c%P$&M$1I4h+BBr@)=gA^X8`d~@$t z@Pj|PzwnnY-x+twfgX^&Mz}`}JOhXoOSnND*P~)$c-&z1Guz8_7uJ(xG4iMbOF{Wm z!>m+5xYmD)q03#eQd?lPlt!RNKxw%=iHvW|y(8hki7`mrCik+?CToi@wCix!sifoyoXv(OlvlWCjdaZ+O9~UQ-K(3}T|-%X`k@Xi73Zp< zQ6d!;1Uqbd6e~CEM)8?yQcH%k0_lEdE_VROA+c4A6J6AplmlqAgvP9#0{DtQFK(Vw zifRK@ImkgTKAs{QcwFXpf6;d1+o-1*vcTa8Jy-DK^}4jKoxw~yeD~>%r}@bA>i=EYCY6nEuXh%!nR( z@SbjnWHD?t2bL}e^*8J z`q_{8(O(?6Vf&R{T;cI>INTo&hfn`6`Gnq`+p+|ZNKx+HsopV2P+)Sabu%(FG}tG! zgvR0fAA1A(`6>pM8mR{~q9RkgPJ+{3Vs(pgBRMTDq@(d`yQOkRoyxI5>mN z3Q)Pg2xkA{xqsniJ3l}h+R%n>@^im%mn~drXSm|8v{vMT`Hm~6$zb%dLpTR6Hk2AGQ%2#al(m`ALJ^`f&jYM z;e4h@bnH;$|!J23nnL&}n{q$jf&>d{k%gSa^LdQ?~WGCBZB*m&r#@ zUj2(^sAK-_FSq?=yY7w~FAiMCgCDlI`(f+z>v4ZLym;}p`vmbp0z}OC1(E_1A%MwC zfhn!vq=X*{4TZ8K*p&;dM?X`txbSsN4J6$(R}o_pMFbxp)c-WFaPA#LHB|%!T%>xD zu){cca%z&Cfi!SN2Llx_1f$d@jRy55c?&Od6TYG<6&%E-%f&OLvyVC_pxIPrt&k0B z8CJ`ZXL>y{M>9WucuD8z=6-NL;0Jfyuk`wG|27UE`QZwO!}CuczTV&yyiJzggQ^EO zxEGsh7B3JdjboGvaspN+BvL?)n8 zqO_6Ez#vXU0Id(4aRMnTV4zZNK+qtF_?fSNnVYdZtZGA58x4^S7l60^@pt|)bL}iX z#k544EsvbQc6z^hkd8Q`bs`5x{IcciaDQ+=xck8m{@Pz0?jH|_kKQ{xfBv?fe<40m zcjskE1*axYG!U@b{eFe)Ob~t2C<-i6=cX%|mvzEo9%VKLl5Sc}_+KSdtSr=4>Fo{P ztgf;+qStBgGmF6sj;+H5C&e@{@?~pVtyXJl=@sUzIrg{t z!|Yo;LjP=I`WPJVb)tjLVSqI^rcdTaSJkrByvM(l{!GrzKds-#yGg~>1jd4jOhV0t zU4PXBgn(hZ?Z+wMQ)$fEa<2mq%Gm%U(zqnRc1R0?srAO!S?)k}@;Z6j85W0W^3BVX z)FgzsxMqXz=<~qmKTrAm^@X|3Aeg2t^DoMlhx6mDgWQ_q5g`{r^8A>*wRTynHFdSt z)Y93Uv!477Z4>)iYph=txx3Zw?S>oWIkr|eT3Fs16Mnx;#+5qFe`Eajc*+m|$?qaX zjZhVXsi-E@PsHjCk6dGr=#tUCg=31SeJqw;^KwojV40C{*MLEKrbQuW1%LFre8AIz@We?d1y1Y0I-SG<|hnp_=7IUT-L`g#J&mbm?Cy^EAJ zQB{nPiO05j@WLI=2g!8te} zNhZl8#CJr`-P3o(_4O;hqo2#?=L#@W=US|Rhx#u{E|;rkIg628@?+#m`Pw|s*S1=% zZeC&OlW$TVuI_tW9@`&XF~m*WPe2Kcd)jmaP~uDMB{E@!Z{W&b^f7Vsf8|}Id{C8r zs0bBEKB#bTaU0tQ2PP>BbpSo%Dz^Z2sI(a%F>=pi(CvftD}4I%#3gSXNFC1ncFw^$ z62K9VvAx6fe>{B!_|GNJVEm$(+pJ9IuJo4<$c>D@+#(_fBCGN|Z?%@STCJ&WPJJu~ zKH14)zsRpt^d~IzG??un#61C0<`p>BW+_n*|CaCkH*{Y}H+=ECNQKnJphS5%jK=sP z`rrj2vl3zfSvhtB5r8M z&*l+GovC{cxh!5p@Y(#UdBKe-Zr??^7Ssi565$&sOup3X^z8)O02>PzMIkacl1R)1 z7%+p4S>`}lAAQ~Jj>qEh<`#JB01|Kn3>-%;ymzPP&Splg0DC}$zufum&un#dJ>0q; zbU+XRL1Zi+%_~~@x^A{+@s>9_wT{_OWS#8~z1Nl2D!}<1_hfHyT*-XVnd;+1sd{A5 zZ|LxLIg~B%ZcjAB6~lK?o($BV=Pv!F{I49I9+`(&H(_~@+< zcszdFdD`V#?8!JJ2?WSQHv>61(7oS(M_7i7tdkdfmJ0z9MAonBERj5K z=j}XiwT_y#Ej{va*>5k8#o7wv)s}jv9LaHGbAP&WcR%rX@pN!imIq#ZCULXgMe3k3 z22l|pOumlgX2>OY5tC>DFHMHn8c_#kxS$STnBq3E|Is%-5|7Jm&!L<3fSd!dDF8zN zjvR3CuW&N3%29T4qh;g`cTrUs8Cfrtd3$Z%jn>hvhiP@!w)$@OBbmbDX@F(A-DJ3d z8qt_;9#{J_PLQYsI$Y`D5%7)R@GeqLABi}Dre@JMv~SfA)WxhsL1uA|);E}Dgd@@z z4A58$U~~7@$Kvt1AswR`56A(b4TK8=x)}~Q;2gxJ3l}c%V>Zun8X&(xI%-5@bTpT| zo#*Sim|yFdhiQHEvtvKv@)2)s0K{5XJspNPt+wtf*xHfEq@$0gcDy|Ym)o&l*XzUe zaJHx9?;@o_WppCK9VZMhJk4OO0pp=Lp%6-QO!#!(2*3emvN4#k!QlGhcX>lRPK_f- zC|?W+p$(7&295y^IPShhY<1C_WuSFjJf$EaGAbf@F6-9a>ekn~*5ywzb-!Zv)muC? zFkA1g73fx;x!T+}SXWN$egF8-E9twZxp_B;4fyQ4NFgdCgorq&Fp^Vys$nUGD2c;Y zTpuKgh5-|bj6pui5}>g%9qXq*eaBhoehKYD%PA%ezsgwFhCYNPU^d(2GmrzRJoxF4K1IgtvK z;=iwVkz!Ov3=!NECQ2`z;MPGj5OFUzVTb{iN`HJ;sAUx zg+K`8!olP&hu-OUZ(Dl99I^m!mT}>7v2{5FqEyZEyo+6$$gh=uh7=)ax&F(P60#NIvCq+itD_r)oxR5ssDic%RaBHV6avSa9GmyMDj9YL*0Bnm`K zO79~mYBMtGAPv$Otg_cX_^UqfYa%nz9k!3F1Gex6n^V$ z`mIt`Lda>ibCG;3UzO)mha9)`QlKTE2&R=xI;0fGxDm(Es|3hEP|9Lr=b{D$68oP- zyo;2mG7^d4rZA13!Nh1xp+Kb8wTyrQhrk75UOx6d4SXa96Ug08o^W z3&3&50Sw2%-Psf%2gq#IK`s|Mu)Ioy9El>*lswP#)_-ava;dl!+n|BPx()**?)0mB zy262;=09~~F(U3h1ohsSJdp~)XTR%rk$hq`VXaK~j6MY?<#2>36M*@L1*UA#mpMR; zk;WL+pZ96;n6?@uOaw7h0kPfL+A|$@9OSrggf|y1a0D*o)Rp@BDiVT-NSDTLogb4g z{Wt2R#M&_*jQ~*ZumWTYB*eDmOFKR9*QKUM+(35?qEboxMSfqO)VJZ6B>#`Dvk9Xp z6DeAlh-^I60Wb%x7%qUp=FcP^+tCLZ1A}pd0C2~_-EnsuygS)k8G6G7IJXB7j*tT= zb*e{1#+psZS4qBYU5iW2%iD-x>bkD#6*z^IPl2ZiA&6;OowP=sR*Q>9q=Hk@*Vem9 zrpj>3LN7iu)-`7_nQTVH6#^n)Wa@EtAiyx#NP{%&{NV9r729uc8Ye~&0s#)-faC5s zWHvM4a)ApRfevz5uBvJ(f-vS8Yf5M3a@6+FOOZUMXhcUgkmqx3TC4OFP$7W@dh$$v z%xrX*3131iL(M8skvc>p1nJVc$5W-%c9 zUv>A`LikHs6C@5yx>q2yhSxm$Ov>4l$wXsEhz2RzxJvpKKPnRQ*`4Xwblb zYo&tVz6IOW)fJ@Iz2((wlyWJSrMH&^TkB7>-c5>E8PP;omN4u+7#p3v3mMCa_)&?J zg*h@XWK5{o$6c2MsBCEct3P^tS<5tL9%CdQwG{ER?l_LSBepuok&ErFGEF!}D~(eM z@UenfoC_{hdw6LDEy7?S;Q@(yk0VcoV69jZsb1H#(2lof2q56U$-BtDD#MouhesHl zALL`#qD%vZiM$Ms6H7mqAt1;jI-6pQ4Sd}09$Vo1&#y%61`xHBz&G68amR6Y;Rqa% z19Aj7di=k8d97(xRTLl<8TGOrNpC2ZB5UU7Z6-KJ0LE4(QytGYH}(xj;>MDZ^$=0$ z?NY~&-^x3Z1BvpkQiRHgAi@xc?}>Jo9oP{75({6`Aj*eit1||~3{4#uq%okn_UEsL z9$WawKWM!2abkcIl)&8qcYG6fw#wxoT;M=B|My3~eB$HNs_G2b0&9g45qbF8$))7< zZ4PR{jc5%+1skaJ7hH7+?g`Ep-3<2O5r_=>hrX5K=3mCUNuequln76hK#$Dm>$z6I z1De`0PO$)kLJF7&mH|hn4vjQ0xW)&MFYEX40|vW!?B*F~u7y(Az;PUR1USe+E?hvF zsQqAd231v~s;E*-&{2Zqn~O_Dz4QUYDR^2$P&9C3b3R7^+XlL^2K*;-N_4H$E8fyA zB%qM~>hC5sRv9TEV#oLkbaByg|Cn5p?GY|ohhT$5F1fzB!KhR?fzn9du)-W z1T^O5BOo%}BY|@mWTsBktch1o+&34H0M;M>csHq_$|xug4;!<`+;rvCLf2(7Fh)&f z3X1ab@aAsDmw=J=OaNodGB)%N9$);p;s+SN&K>i3wwrxU?j@B{3b^CAJKF`|l%>GG zkn*Q?&3qX?Qe%2tRfjED3kZ5hH!lTlf9zGUo|LN5n(wKQlqI%}OgLw-Q){8)N?xC& ze)oc4^YG)ryGfZ;Ml~v20(~P{y!=NaX&KvqCxTF5F{h!0ppH5lkcL3M4l3jytjE{$ zA5Z&%)h*0CbLW}6dr8GhdF0U#?%e2j!Q~>{d{jT3l+8pY_-GYct zJ42xVa@!pE-lQInidqvW0R(0-MF}(rt24~$Y_7$~!1YIuFaAtF@%$6Q?D(^pdFJ5$ zcwbU+e|#+Eahr>OVfhzQ7RQ;wQev)9@kT@Y)R<^A`Z`rrpbK9#`}LY{VueXXtoNvT z0^%I7RRSB7an?IJHUzj#K|b7;Gt2&g|4I8QZ5332pUn8XzMC{aT@-c`5d?uRPV6Cv z%_34m3R&9~S{6zWg#7HlL`-7<3`1mG0rEXPzVvhdy6yW@4)bpIXV+`?XR|-^!?PD& zUikgv{kE7W|H4P!E0+((mw95$R9E$l;r)kocv!Wrsy4lm-H#dv9W*QycDc7&00bd1 zpOxa-08c5Ok9sn-O5!U``cKifU?gZs0CKf79oXU`7*>cg`ybC`gcN`kr06}*l# zf0=`NqgM@WRH~|_bF!c6&A*A;r#_{yB6z@yc%-0V0~lNZi(^pE*li{J;mOpcZa|I1M(d_;2b6A%*-G7ZEM&`bbJu+;|_;PN-YUgV25q64ClvC#xuEneZKd} z8|=6H{>*-R-1p;te0cTn3M#jDgoLCet0nF7c57{EPmWlgET>0VvE(vI=1MP~e_vc} zSNun@77lelXXrq?LIKX!3=w!`v$eWs!dIXpOJOo8vA)^PCO2OBCS9yZsL8oGpoHdX z!rV4;@g8MMySyz{kW7GyHVKDX!mB^%2oW`3kmADGp2ot?SL(473ZZ}bzh}D%Zg2Pf z_L-~wcsyS3DS!l$oagd9Ev+rBEl-wZd2%%?mewA%HriOO=v|KgC|CS0PbeVNI8;L6 zQIL`W!32rT0IrjQ2QnZ`Kvzx%L@a}?rCmIX#SVS%150C|CVZ<=aZL!-*ijvM^z3fS zmXmlvbrb@4JSBPNMFtYbWFjLq#x7He)h91yW_qeuZ~wA`>UTh zUOiJhKG~hH%gJsdX{}{x%jvSTFS^=RT-<+je_7goE&SN49RJF$^p3m(J(O^$vPh*! zVT471ObUQZ1dznm%QMClG-0am2ETuP9L}5@_Qz*^@I`gaB z`Zkk+2i8WVf(*f^FA<6oK_dZH8AE~<18=_bm}xj`5pn$^f7^cN!G5>z$9>ahy+|{ z3cv|xs(_aaOG!vmYLm;NWTth6_vSIv0-#pAVBBnADJ8)wq8JrX*M(r8UM8D%TXfy4 z%&?%#bEm?0Xaz172RfeQV448}sNn8ug09C*5oEr<@Fsu%gMRgHcefumH!9GG_Suit z_AB;%f4UrHIbvDvUtBD03_iR2r4x>OTTh@mL8mSwmS*|G^h;_bYeDySuyN-QC^&9V{T3S(E+Pr?q`+ zN9{LmFU$R9X%|at*?+?qbL>y9_6Fdx0L(a45Gl*TN(Td0!~~E4q1qZ+1zu>GWvR=< zaACtn9Nlu~h03gUIR=;;sE7lHida*yUv6dj32#~(6I2RWRgB_5QpL!;WV6=coKF1$ zz-h&{nVPd69|b`+TYB^@zxjR7-(6kp*T;|c{p;&TAL|2!4@}KyM*Ae~H}-ujOS|9N zvf11Gjvu_uao>56Lk)5P9$iLwRLTf5Djmzf#I+z2DFWz;Za7f&C1s|IaWqp+HJ43X zcg+PjpqA*jG|)7ede|Sf2^Cih1b>3vVK?OuzL{iF5QH3&D(($9?KXC$fJV@f<}|R{ zY%=-caS@SuLn3az^_TwQ`;W&jJ$&%+c)Y$oa?Q+td+JeEX=~c%qodq!7p*O$&Clq* z|8wS`a?H!cG}bVM6{vI>rP77Drm;B%1d#yRYQVC<>es;LB<0$O3^$L=Ukxz;)a+{* zXe#4W4LuAhx(c_~_|W7h+la3tmXf7HtsMksYK-8*7zhR@P7m1tcc79U0G7^oj|noI zhmvTWO#kx#f9gL!#`DMLj?Wz*UO%Ql^MuQ@leCtWv`0%@T5Bs>p89ls7oV|k+^^r6 z#S}oO6jq8H>L~D_Ji0LCyoIzTg4pP`UtkY(h-ON1qaz`+?JMV7L^L>n59@OqXv&jK zHS`9R9fiB<8{oh>zU_8-O-rD0lt_`#9TjGj;8bVgNES%g_PVkfa8ExbY7lb4V1Hl! z^7fneLyv>)AzGRQP23!R?DxOv{_Q{CqbNcMEu~9}GC} zD^4XGC>9lwVIugJG=64V;0`LOc&qXcJp-OnNg+Fm6Hs!$i7U}it_N?mfHW+{he z%%Ru6^|^P{JM&k6^?Tp@vAYEcW1r>KkN)>B{`b`-#qpm$3Dtq57X)={xIEZekV+TV z%s?zb6m1x)ss_sj#?pnTQqxHGL9N|-NouP6To1~Dr*>^r!o;AmI7IkkUU&S}Z0a_% zoI=w;?Njr`k$Njq!2@GHfo9m9PFuiK?8<5bbX{&Th6JHO$whBK>fTqpSzf!>N!Ih= zbjA7n0PoXRuGB#>tBRV_lM0ne1)v~@iqer~5MZz-PmwB{`$kEDwBK-Pc2ls#5a`TD z@2YJgjj_rl83MCL(B2VDNwF9wup44TsvV#34#WrZThRQf0@bXj6-{Nd8D#zDHOuCXh^z8|Y79V?8K4UG4Kg!`;{KS*tK9xFiy|fH@RR)DVj2~}4-a1KOa zAyWk`voaa69#MRHKPFqbExT7EVxvgl%PkSq@Z{N2noW@F8JKy8wL+cr`?{=1C}SDV zEht2gbjhA9C$mCzsH%ccxKC1n3NjR-QWhAoHG|lvM1mkiAPUBIg=r#?qNe#Po2BhR zlqwh2g)|`5Add=|2V`Cm5apiuJ+NtfP}>cPoK}?{&(y`;Jh`s;Rl0W#6h${S}FU>0jzreCea69TO5P-m{>&#h~PXie<*$#q`TFCj5v@fyl31uw;A?dGlpsjZ3>nWt zn`+rI)Z*Iy$;Va>aLtPyW$9I|7e9FXKGROZjRToRI#s5ILwBn_GO>Dpaf zz?_qws+tr`F;%mIpnw8Wsqn`qMT*T7fQ5maNRSdDQEAH*+@=YjwA*Ql(b4WXYQ(JF zW}C(BN176V_%f4$YTxe4&Yg~sj~5Fs8;t%4U%^q5G9t&TsK0VXAQzC1j2#mYl~Uw) z0+OPIJ(HJ9lJP8Jl6l6+8FERVT*-tFRA(~hEKF7JcoM?_#jMWk8m<%sbwU?ll)@lm zY!v|%`g*NeUvnv7x~0dJa+siPWa?Et+FS`$SKhY75L{wbsJp-i43idif*JVO9Gzl^-(?qQx4SiZp_bXLR5ERr* zV6rJcE>FW0gaV^fia@2nvPQQo4*G(vK|oMxh(bvjR;;~T*UfB#uIL8ba`WBx*DD-@ zR9s}d#(}GbQ!2VQ1)Y!L5Y3@~IJU~o&fT#qbHpQmr9^eOs}JYX05f&~g;VPh=mr6{ z$7&lJ$QPGMrkQ3tIk;TB$805^bGgq4CaO8v?1wv;Y&GvsDgd*3;X#ouLIo%fb-*GW z60wnh0!}Agt6u2I468u4FG!hn>&q^#Rc-6mc>O0>2vzU54j;I}ew+#}B@GE#1>(Ig zF~@z`#~bZ*3^BW^SFf0nATF~Ws~i`;YkoQ!oZ=R zUUxq&-_ZiS*+nsa`_*m7?|f$wDqi|v0K3g>3hq@wXmt_&2KJPHxZ|`rv+$BNcY7;A z0F^70atQ{*1$Ab&)6?KAgbIK)%%yr#iUgSkC*!%y&x=S!M$39H@;%E0`2*kxiC)kZ zm`o^FSD`gClt+;+LZwpM0LwBU2n;9!2`p2~av=c2`P?M2YfMgPIS1RstNif0oS|~B zcm*+#W$s70HEcjgVgV6-Xb-{kxVyRg{*}^9vF5ukcn1YU2`ULNF({ny=;KBaN@x|R zfY-u#ToO_aj?B*!oM(y(Et?kCy?b?;d|)D%QWN)N(%G6)pCYDr(+fcXgbo5yR?4F+ zHh=^WH3iN~Fh_f!(%PFRyuDJ|x2C71=(}ys&DMYF3hfvi@CH7;fh??_MX^0R2)$`8 zqM`d-Iv20%jZ4-n!Tha!r3z4~MS`P_J3vN5if7QYavBnLbvFihs!PBMjWj9fj8Hj; zGG>~FJm!SQC)aW3LNK8im11hT7h__OXNQ?iuwZ6VDW1P8k1~S-Faq%C^2TOBkQ}JU zKv1gp{L^x@DJEGqvkk9y(tAij0QWN2$^k807VQ;UN{UgkJj6V2)WdDTWs3XgnO-Iv z&D(8um#xq3T z{rjK3uTSo2qY^$QAZe*)iKwLv6l>uN98iuv!nB(^I^l~hyu$LSllF~WcZY1Zihfj0obrF>oiLEsh0f)f;dy3gfFw|FK|TY;S&BiwRp-}dve?JNkmORleG zfD8TeDzc?gLP>0rs9YbzH$6YU8b|%CV-ZW=C}~F#BxFD{Erqf)1|tiwUmJ$b8;Jyz zk|+_czOhR(O%Sq~QQoN!?-m~rK=|v2Z!Z&0ZH|HCQxs8*a4S}ko`kbIb%<)1-2^_# zW{fcpfL4zqV&K5J*cIk)S5UY%y}IM4{6kHqiBr&*5!W2(!i13u%$)<2wuHD}VP|tE zTk>yy=LTrc7%!+NIAU~3DGHfdlSd77NUP6Fc95#q4Gk8k|&b zuZR3LAad1Kvf)S71|Gq+BQ>yAlTf@~zn>y>~GY(HUv^>5>>l z!l;BOQrel=EGda?e4nR%G9)Af4kUmC-~1c1;AAt@+L-6LfFO^83Iaa+@bmf=>jZV$ zTU5s?15KA$f=rpFT62_h4uJ0PhQ;3MA_GI9c_%YY#B76;jfnEu#|wKSzBU%}U)}a@ zD}3^8BA_>W1seFm`O-mgb$$|1nmDV-JQou4KR@=SJzl?=Bn&!rGDBGc5s6W-Sxn2O z0Cl35B^(ELPz5NpREWEmk5GtH5;6@@=!Bpkz#9rGE)ao-AKzb4>~tTdoGLk{LM5n( zdsE(p(>V@0bPinW(1gOpCxx;x-sp`01}7qpV+44f->!yC3i-md?d8p!{L+J<+Az%z5 zY{VEeGV_@I+dbSeCptE2mmVj+)vYy#A)v{l+;hH!`6A})$_Kjel>Uk;?)E_HIAj-{ z=l_}yy1Dy)cYS`kjwm$k<_xHh7(|G+~g*=1vx{+NDLXg%PRBDMwC7YS% z@JNCJE(FB~1Oeo)KkvWfTl(O(KbZ_d>FRFvs>KI%5JC6vOl`fP> zXd$0dp3Bqg!?#!4V_@5jrcM+@SQyS`)Nj5-MN~u`Jh@qnG*l^o3)Yt)>CFs+vYx;U z2Ava*|n`iUq4xCl3vBlFtOPYbm4vjUa|_0VjDqcH$%aI_c(rD!~V_M|Cy zL3*{3eFb0k+-QS!Q09`)%;dM)D87pOn(yNL7V?2C43APw&JP5wgO-(mao+aPo8G?b z7T&_rnVC{@w;tz96dVDScCIKLQIcStK$!|nNE^vXAsN-5f*!ifWEz$2NT#RZ(I@W| zgs(n)A$*FVC+!huV}CK@Lb*OYP-*D|s>eOp&jF_lnEX}e>k(s<3-^6=xUw7{`Ps4#Mzaon1O)X-ELyDCi z#dm*G?So7^DQS`<-PA#$oDskwu?;a36Yv6D%Q;*mAX9?|1VDm&j$MyLBpE|a2!*0- zD+s(jfc&EWw12^Qy(zrLAip1+dDO1_rMjdin0o+%yJ+$ zza;#h&$&&vIkzW@!g>?P)QLnCi4tQQM3S=e7-ItPX>vhnIeUkR%?go{$w#25vmE#$ zJ4I$erUKp|kAm>k`>(-|{~Jfg9cNej)FqvE*)hTAxK;77%uw`*42pU&0wOQ)1MAj! z18{1moPlabK(qILxOKuwHf+J;)`@PLX$*=4BLFffB3YSFbk}8`9pB~cIopXaV1-hC zim37Jf!GlvB!RQ%pCq>)SA7h{mt}ONP)ZgsA`+-TsQCmF)3jcTmZ>bA3;}p@Qi`EC z>mh0)_&Fzx{ zB%J`pD6@4>jVAKR#+$2>w@7nI!qAB>5C6E#0GLv=0Mc}Ev(!6^6!QsDfS8vy*wJZZaifTzh$Dt#DC{fTD+c688BbrcKc?1Io zCpIhn`SuVY;%pkU$TUPlgeU^M>BATAzrQAzpR%ELT!B_@O#{b>qFtKi0#QMdg(iz* zGFX$d&H;7t_%Z{GmuAqOXw1WO96_DSmUM#V+J zBY%Xh^;(Ji0Q3bK2qyv9qTf9NC)aPqYGTuMXzt>F@_mn-Agh>gq>FfD~HwQ9N0)fZA0c)yq(=zuf&g&+m=q9W076=~D}u zsV7Ep2)Jlegmi$yinDgEir(2n2M_@QgdUn{4r4|l(}u$Z_2t|5Uwq1JnBsIgo!}U9 zpn#4}h$#m7h>B=g9PZ&;R+V+12ksT!(uH_@P6gxjou*4urUDCFi7_N;fM~&hQ5pA zkK^CA*)>5NLdU8pU@5AQjtL+lGSfN{(@deGN6{3#SCBh4WhH|Pu%ynX>s<9Qh%qY) zT77B=#z91gK`=4;!=J`{fy|T(c=pNn&;TS7R2$I4P($YB;A)5yp$tM%fPenSS8Q!K zJ2DMG9T^lA+EXsk@!ctipsoTHB=G+D8WMxYb3o9$`~K2*3~$gHmE)Uv7%}+hH#Mu9 z2K7288jpSYo#Z$ZObVK)QViRosDN}#04dA#N@=K!5r%>ZC585i601QW+)iAToOh*3L9>Y-NGg0j`G=*ud4pAw#8XG$b0bIe`lV|M}s^g$vK# zam@CUGdsZqMpQz_a-51v3y{Z9#Ms*W>HMI+q%%W*-<3Os2FAfsuh;3%YAoc9WPBVSuWC~>CO?uWgt zce^P8NS#O{fzIg2Zx%$Hi)}#=I55FfSub46_`b0{*seeiL&IjNK~NMmHkbffGew1sASnoGtan6KrD85@5!4z|u6gCn z9yWb=(%n`3bR-(c-Aoi8B=rJ<36Ths0n`;=LsN$?pl`Ug!Sjb8X(*^fWDG(G%^t50 ze_x@Tc-*;zo!IW-5qt_NAPW^!PSW}@W;KeR{mJMQ-0bpSLjVVuaR-Vf2^5wB4|J>&d`gza3jY2IrKtgWJs&11{EpB3 z@+f;e>&fX+DQEKNmIu=$0*Vl&EeK9zr>cOal&)2oJU3Ho01lee(1R+5f~0I_EMufY zr7*Lj=|KWTmiC#x-7Hvoj;aWD#6QxYiDss$)(koq*u6cG0a@TH)2+RmX=OFrPUqJ+0=hDLBZkcd1;fSL9iwAO+ z&E&ui3PLiC@cn;$Eqn7+!KvT~yCP8qO~sT_7a|mxW&)XkfN)(Jhzl&v0j4|R<_3ut zx}%w$K&Y_s5^&TY2Oe?=c1lIu3;iUKFaeT)kS1AD59vJk)o(|Gi;EP50O6=ngVG;M8Cyn~wpA*&G~ z<4pjkxT^Jel*@EK-sbQ6tIiXQxs?NQCH60XqNWAZw3aA<)=Wmiz_-JxH25?J1StNh zK~nqKwtk!avdLJe%Mwe(64#J;M3x~UYQ))cq1AwS!N}9Z+6{-?smd9*3zhB%K#)u` zO~%qBLLoSQ_#Oc+!L#=U6Vlqd4aHGiGJ$FaGAgJj@z54U^8pk{12|`KsV;<@8@SmV zZ-k6C89Yf{*b6#+XmrJFS35vRMKmkPC8VUub;)B9k zXrlp3<-WOJyKfMiI|G{wlsWdlsgIrzb9y=aC%@YElltB_-U8Ybdo@?!3`ODGdO-V@ zCJ9y5n1L?@M=J^UddUIFwdzRkXKT&o#_X;66$C-r%Z5iK?;h=T-kH*tJVLY+|hk=$14uhVb!3WFmdu%cSrL(^y+*01Ao2z6?{pO(vHau zo;aW;0;^F4sHqNW1z0=q1+-8O&KV4lZ2eIX_;Y=UTev4(Xl0a0>ci5u3ywUG5Q&KE zT5uuHZuxkq74S5%hmN~vk-AZ-kBd1wm9cD}l?I542&J!i`VXJi9C;MahD~Lsw02mg zTOB9EF$6)ywqlm3X$U@tQO{B;0q*;LEx7+bIZ^T$IolY(@x@#1@FX*Dq}#_Y)K|Oy z>6a@rPQ<*fg0Mw9MI3REYxZ%rQ zyDm48bwK~$kzxIab?=jV%ifzRW+dB?ltyh1hETfIBT&H*A1`=}o0zHP_W zqwyoqT1wC%17_L;88#pxYu!)xx$Dai;K91zOO2t}_udU0kf7f^ooxiI5JYPb6oY^$ z6{7^tf3^P|paqCV00NLPXrw1a8CKo_)e~im&{3fbA5#Lug(Kj~;ZTq+%?9K~Z=Q+V zA(28+aJD+I9<-jMfezbC`SrpPkObforl%qs5KMz029+C@jU13PBX8vs8Sd!6ih_01dh)6F^W>WqV^p>!c7V1~IyFczW%$CpPnky-2qM zuiq#DbYZ`*f9QZPdZ*vtJHY3s*B$?gQh<5qKBpN&=Yt_y#_}uzx{WnJ<}7^d3-}6q z7i%kO4Qs_~7ki{C^aizY6bW@>Xs=bjm;0?I>@U&2pH#yDXRDm~{4|EKJ%AvX4G3m~ zVzf#AX+P=krfdwLjQ|YvbpQzr<*sxBF;yk<_Vz}qiKrAR3h2TDod^^_MKm*v-k|{m zkW!Gqfvz}$RZFFD=J0g2j=IKb+gfv;n#Tw4H5yd4k75>^9qTXd?-Ri1r`J8XCtwHf zmLcw786aB=JtPRfQ-cm3_inj^cMf-vWYt7rG@H~y1%r$27=+Tuz=_?v3m{gwarZ?P zDxw0K^$zSQh=3rN1`$LMfg=b4;Ol?>*>;sHpjR>jT43O=u#r_Dxujko0x6De0X4m? z04W72R6y=TW)F@$%`4Ejt_&5DB9$QHPIHfm2Wx=Dm%U3DWm$$eJ=9pYv)jp?&vvm! zQE}{l(YGcLvEg9-#i#Gt{QSk|ALV+o-91ei(ELz{lcmx5neiape_>GiIdcHHOB3A)ej<0|E$w1_4AsKnn;OuF-;M z!5979Z`xWV%rpU_2`pJd7$+DR1O+5uDvavv1iMTW9LQxr8GHB%7rLl}Vs<$j7Xo_5 z;}xDD(Lqe$*4DjGsKW$$fF5krP+#3OFMYnl;pa4M0Q6_Szi(H=fehBY1O3Hk?%DeP zr$gc0^@!!Ri2U#@IY9bIkh=df;?MTu{ncVI-nTSC(+P_sI8_0`a7w3uAa4si4SW;v zL^^hBlEfImv)dasw*}K+Hh_SD0HQ?$zT)$L^0b6Ux2u5`Eocz{X1MS`)h&Bq0;GCL z3W$&@lO+2I5TJ-D`V)SoWT{zzwTZ4=ARS&2BmhC7F1;QBBA|Z3N{5mpnQ+rXUGuu1 z!nxXQ8$i+Jf6?C`f(QWXy?clL;xnGOv3Pk`4dz-)m@+dui&p^YgFcWJ?vC%*L+oAb z@clQ`q9S%kh733p#S&tbSIcN+*DX|y0qnO7P`gZHs{{hjCXKuDsraN}@Dx{ViTdN1vzH7={${FBosw~U>jy^4Vdq_ro>19nzNP`<`(Gl|aAN!$K8O!#$3{a72!pkTnjtXy zDZH79Bm<_M?z@)~+(5e_co}xAj3E$kzD5AT0F2DoLI4pE0SyQOf|#7Y=$pLhS~8gF zJwXr=0btzi9tNhQZYT~NVAc|9$%LAdq)HKjE<0r55;0qBmS&LU+-ysvRH+vm4pgaT z2kJz$VK?Y>Fyq#aENksvJJ#R!qP@m27FzN7&sUQKL}c=Y_1@`Nf6<);kWxy+1_aNt zT%0U~KK#Bwy=On5_lw&s9>_k0H`_a)Z>b%$Yx0AqaSi8z0EBUixCNmIxZb@3bv`;E zxr9LTneE2S0nvzPK`;sCzv!E!C0k;uKlJGj8Tx$7-x%m`%?Voiw7JLpr#|7d_DM^;NP{)g z&cs?JFx?fO&ds|>fc*sQLt{j|q&2{0s^9`M1{f9-2#5y3Gzf^v7yTr|^GX-8Z3ytu z7`Rd+XaR;$L%1m0l)ySE_Y!J3nC57E;j%OeG7S@X6bl@~4CI?Uc-jW^Yyi|4zV7Bw z0!-+^UE3w<5^=$^LmEB>FZo~etsJo}A|mGtl{x1OSnn^~x)I0nE*((jGb@{h)lPadf7g6~^EcCy)Sav>rQ<&D14;Hs0vjOT#ix z9}oZ$1hf`Rzv7!br{Wb`t1E6TBr_ER1QMcfH-boOLO=lq0i;SnDpQ3N#YDlvlEr2P zf~-TvhyVgofg<@vVFC{TttH9rY$G^g;*xdW;tq$s#s#dQ1*FT4*f_u4-&Cz*OJ#eM zQubuPdIvbhv7~qB;GXT>%5bv6*LhP5a(Gvu`CfR-2g_Z!vT^$wiHF`L(*`67Bq37` ztha=izP&b|MKyCX>2gXO&0X)yz%a0F5ln*?L=Zsm{EI%9Y8xBUUE*&yM*_w$DkCW=RCk&SWrYC_-W{TnH;R=>Lazd3}q#0{HK=29{kolU)Ymkx*<_#}tJXppoCcDX9#vDBClH3xtH zOYkeZ$XP?JbRe57vW7R9jxeZOvd2whe|cKDrKUD^Es677q&zXg5fZ)_+czSju{ekz zo`3!Sz1yZ(&1y66NzekYZ4ko5g$IC)h@oeGet>{TN z7k{e+a)x%_1!QvAt$^xp_5w{6I>_3g zrE4&Ta2$e?+fp4H zM`r;d0omfl`~EibD+^-`V&FMKAfHUIVPF7;fQZ7hf6?bBH(9AOxDE{}E`SZRh-if* zkOBioRDnf=W;^66OfgtLkf3 z7pc(+#*1(<9s0rFTp=CF8;9*(*D)gi97-XAAVJzj%+~3AQs5Su{a*855Z40@J&uMw zLPlS>B4L-mhp~IVi}ig9Iz3s-gtg6v_AaK~NW!FJhm-iSD6lnMPDwLK$L=64=i>hC zB^bty0W<<2;NSU|p3C44aC4eqNaJ+|Fa(6bFp>@h9S0H!gB~oGs4KO|bO~UI$Wn0H zJ3wSkf|3%XbS?=Hn+0qoO#)EEbi8T1clbm~nzp;`R&Rb+T!M`bP|&VRYlG7|1|Ud~ zfKnXNy*mjDjP6c{l!gy*qtn+vWy_or<3kUhMH3*WA+v+>?c+3YVRyx`%uIJ2lbQ@_ zBfsuPpekTf*d_tdrHGJVmX5I$mYD0fA8zRVAsJD4cPY`YGrvdbcf6sEoYHH zoc}a$05hI42!K!FCmp{6Yj`~#SLmNj%~VUmg@6_m10+|c5`xe!p$JM1AhSwC2+~Y5 zbcrlkbQjKDECD2lq>17nfP5)|A#9phfns!UXnLrQ(Fume$8T}?`}6A6Ld=i&>Nc!a z)!5>WJMKJXqNK!{Gl2JwX3)Pt%a)Bo#Fy#dnQcA`vfFa|5XafZBKyiNX}Gp087yt> zdZ1xjFp$<&-p3yqf)Kan+*s;7sLOb>bUNpOSR8?6gMeW6`8W9rsJ4cMt)p!O)fg(S zfB<4E1PIIEUKGZ6tH4FCRDgV%Nx6LM_l;or^E>vj$IGbANHkPVm#?3yS^pk9gA#|VBQuhtAJNR$ldEru%Grl*muVm zVS~FjBjBtfM@gLHS+HqAPz=sr^hNjfz^;IX!PF{&F@TXNw_w(`ETYE-gfL-HcBLrA zaVjv!c~UCsTuN$vms}6X7Pxu6i-(w6BLirYFWB>>TsC z;~5HJRg`s)r)rcj0BAs$zt8Ukz}*2aY|X_!$-qnhR`-yhZSk&={sNfMqtkE<(ia=G z?uLLo8?%G{f8z=A0y(c;Ie~;Eson7f&)p43BxqfI9k6e@)k-moqopN}0e3QEt2Umt zf6+JT+Xjq*MrV~N8g)?(M#7T-xd50@J`pw;Mp0$}iM1e(scEF7sGzc9k3(=YVQp@> zmp7@0i)p9XMua5gW} zw*dQ3Lh#yEsL<8ZtkAX5p+hP{A`_!LK!7to83|LRU^5ghJfLLlY9{2o1eXE+ty|9> zcaONpX+zRlrq^GP@A++kzydmV0&_oa?e2ojO>x2bXqb(GngsJ1%r;{3?|f0RRO{%L z0lV637p|s{D{RWP0f9z`juDRFk4?m8^#PV@Wmfofs-PSb96Yusm)yY3EkW(Rs%3%i zJqz}^GU2F{g+*jsQBdpK%+C<;GR3(-l~w#V{VJi zk=+3s*9p9`XQzcRPLV>pxL3TpdvX^JLSUqrRnvp@ zJ{bTZm>KA4Hl6Ls-ARd0y3Y9kkjK^;YnRxocDFPl*`$I`B(H?kF-Q`UtWyBm_nQiJ z%vDDVWX6&qcWDe?z?go;Pxl;T7FXMA!4+Hu#w4pbP+))ov4lM+l0hhsvSeovJ#NiW zkpf#T{&cfkeo_rPxw+xy{s!c|lUGQ&>bRKIWm-u*QaL=jX%v(OPkf13dC|5Sl94gj zMbn_3)K@FXJU|kId1juOZ@_)aRxc%KtgIV@TyBBi+b%ZGt_ecC9)5Y317oB_cgS8b zz%?-jHZ*2RhT3SuvK?i>GqIUJ+4vQJPg-Pyg(=%IruNldjTafP5V&IlWq7P^$~tsp zVv2_S+HyoulVA@V_YER(zwyJ(eJ{8_CM01KDpu0|iEd@$!y`>UN)QB;bA$`l)&FG5+20Z_wFG_&z3J}yn(O|%UMMo%&3sT(N$T}F$;|M1oTM@4-Hv%?27$W+?(R6BeEsnk4rKKB ze3V`IW!s>K8)u~Q(toO7VSq}d zXfF`hw4f-f!eC9C4cJ-u?Q1}Q4Rio;%~9pvF0ItH2UM}W%d2&GxCY*y@$vQU<9)w= z#2lKbLhJWe^$~&yROy%bEsoC*gCR*08E@|8_Ncx1rY!+ULq1_a71es3F~bfJjCmf6 z0b^#<9bm)#ldPKU2D19^8Q#^s{~BZL`%CH7c9Ov~p=GE>EHDT= zUT*hl_HBIKv#)Pw0JBhYwy8ughv=}G3edE`bg(24AeZA*EQcT`#ZFFz+HCe#6y`7m zTZJ3w=HoXIcT(cLy%#Wr`)hDa4r`C*t50LJF|&T<(JL-N?SKaiYyMN*_JG@_@`23D>nE>dezg8-8cJ(pg)o=QzQr|?y;uiQ^5`L;Y#*aaEuV+s@J~ZD_mfTN9uX6iUc%C zppHg}h?F3aNQq59!43vvFqmgP$=baFmmO@3%@Xn-b}X5wp$b0zbJxI3qXihrZ>RI zZVeZ7$VLOpm^X|YGhkp45Tul#>_NDM+k`R&6v0xK5(7Bb*_2hPOlVx=dc5}U`s>c$ z!yl86b(wH}oit5Af&FpX?@!O}6a2pNM82$GmJ0S7rS%|7P?d~>3`dNv>zjYlvwT@l zIbpKIi5jA)qN>IOB4B7foCc)GZw!KAt~Lg)87(}i1_h|q3pgY|6d>4KFD7yzvL%&7 zkRkz*Jpft#|ygEi<4^Ty`3buzXGDM%TDNK{+`Fq9$%sYAUENMZxN z#^4(3S>+q&H)sC-Usqozf8N>P{PEFCDf^5A(|&)P985J(!PO_cWGX5!gDyE$G8(cR z@!Y>-k+Y1WT2pX>X+*)O2#y$|Qxh)CUI9WlWyli7scW&u26Ma;|KYEr&;I+n1B7{EBIBhnP0o$36kUBkO?9c7d7(44 zQY|7N)88|CZ{OZ_L_-}UfQTvvU|K-|1w^j%m&}k2oYP#RMnJZ~?)nImLw6_Pp1e3I zoQk`V*se$gQm|Q_?ea)Z6N$}i0NxC6WiXruST-Q{4P!IYn;ADpf~p8M0|&G!6k1vW zh>P_EElg74OG@%pbxE4Xa#jDy!%rsj$8a`015<}2ZhYC^XR+@mkSE9!$;-JVr;`y1 z*-kd@wvR}kG=mz}sDg0{8XQ5?7%J?D90M>wCp(wZEa-QUn5(#Ose%Ac5H%60uElpL zabwg{OLd}_TB=6^vO$oxWn*hLvO%_twGBfQ-+L#%g$)Q&+_0I=n|Z@BVBpO%mgyk2XM2j=o8>Mbkw{1h0^D6d zg9TMEBM?ShtP|3Ru_{_;wI4}SZIT#${l|P;fA%YVT#lT9TsYk)4CQ%dR8wxp>%l3|6@?b5zK?tIWjNJARC+6 z$OhnoY(zpiky45((1r^P*iRHw1z!h=CQ%bib5+^Vni6mA$NMy>;=u3!ncvs*JuCTe z3~~WCfC8lyO46s6ljF%5odI6Llb4)Z-CMvD_9x6xJ!+uL(Sh8{vceD1Bxq6!rP57- zsH$i~;XW#~uK%JvbhPC(BF{RPHmWVlQtK-t!5%0m0)*o!kw_rRcvJ_16x5Pb(gu-0 z&Zf66fNX4L<7qRt5h)wlGK|E9CL%=&f=DEAB$U~zOIN0x)(jC~Mo1C{CosaQIFS?q z4ZVTusp$jYJo>8MVIuRC1>87LoJTwZ-QyF^AV8(8m7=13GK0D7AwmzIO4nGVHi1<` zuYg8W=UjyQlM#5G*$uIMKpN*HBigbDY$Xyjr$R#?7o`LcRKn#IN?NC&7JwA&jHitR zWZQVBk;s-Yw(h59ywijbp^9)}Y%V@E@z^mG)w=360t6wZ;*`{aQ8OJHZ1@IwnZo_k z$3k}YbblI3;TuIk5lS@AmT5r&YO%cA-C9S>XlYsz5d>$H0Geo}H_P?W+VE|=EmnyL zVwFmH@Jy+6QNU^#MX_ol5|QvA0f zB2STmB!EIC8D4W21BH&fL0YEf8a9)0A9d zP(e|UcSMgdGsM;n(m8SV{jwI{S4dVRa)S^dA^@Eo5}QsWf=ZzRz7a_t2_g{{3c4Ps zq}B4oI&DCS&C1BVrf{oe=ltMA0|=c*v}iGD5YHIA&wVz(M3mtVMY((S zYK~@goupPsCaLpj4RQ#S5|M&k*}ZRK)F<>U#&#JMF9sUC>{YTQSj03urgh@C+mRKlT_M5LfnYJfyRbbyRo!^lmxuD&j7k_S*U z_Bj(7>4G1`1*a%Hj9GRRCHkw`KOqwors;SsAOU3ehwSbc6;p9Acpsfz>-~Xv=1L1_ zF=>NevdJ-sD+}J;1LokXTRTx;!TSl7Fe-{e!EPk-d}*1J#_VD@fEpWVf@>_xq692; zQS1Q%5)Psk;iO2BA`t*`c?wb_hy-{5wLps20a7G@ND$S76evNd;VIG?7o^~wN*}h) zg<~>fdQDzEQYFZU%xKehQ?xBOLB?(M{+Eg{xG;{l1epRp;nRhtX_^2Wm@<&3 zJmt%Z184z_Xs2Ycx1P3!$?&(JG|HemrXi&>+PY z)^(Lw@dB}ybpl9{?meJZz`3z{q!2i@B!E%_yy8&{YM-vRwjRa zt^I!QK26i)?5AnJr@FpOPGq!~6?3uP;uD&E+wL z0*e^z#5m1TJ)e3}q&y%^;Le)%84{E7%BCYol*pZ}iGXxnL)CJTL!!uQB%oABB^!_+ zsQYEl1VN=x3l$2r)B-hJfBh^>t zs+wGxI&+rL=#zpIb;|V z=}n&S(cha})>x)CBdHaBRQ$n%0)-UBY0Q_VdX0~54(&z^VBIsRGR0ynYi7d1iCPd* z1-?a23a19hHvrE@-AKV^iUg5R0mxPf5~V_sSGESA+?5Sdur->kmDDVQ@WdKHZxJ~w zi{7v5=3rBP=#;25!Q6T_2(D2?;as!c$Mqg_yY6m4&Y0Q=Z7vGhAOji-y?j z6EjOJr6LFlb;Zwg^-c3g)j|T2Vr?n){2UZDAe)W%jpNAXz(~QSrWFI$%HHh4<&Fb{ zNDy924VMEXil_x@Aw`N*5>bmtg@inS>e^dg2ogl1AQFI|0XYKbEt_sX`=t5;?#2X# z3=0*|1WQkD6)RM)Jz?`G+R$bb@Q*)7`D4#gq_JZ4trf@s?q#Dmr2tF-rEI%EQ(r!# zXhZd=Q7RM!#k%3sTl#ALlU>x5Ss|{0QJaeXJWy0B7_zo|L$++3#%ZKrbDh9f2tk@4 zy9+@Ca-|}sJ&+(soLw$F1zvINV^XOl1xbDe7dPLZy%Io*6o6c9@l*eK$L=|YkyiueADA3R5#O9=vaQ%jAb z^M=7TSXsryG%*FmJ3=nh1WYTq97qAwA_sYbQcDVyC`q^iQUJKNq(}r$DFBxomVGVC zMz;1!7-~$cVp&Dqqv|?lp>=A-#!SA-r{d(`Q6rCk*cGN;QWDd2Idj~s}* zEE6Xy)z5w!CeW5j1z1^OodRXS2FA@!>ws{ehC^}z!8=a`DR2R4i-20#zU--&xpz5| zw*!{QHp!i>rLBcUP0nFDey$$ZdY2X>qRR%AqrR@$^HClv*v0`ml>%7Y$ZQt2I;9kV zjZz$)S@`nF{@Q|ewBU>^xpcj39|KDF<2)Ds6mxU#Wn{eFgn*gE^E(cL2%D9M1?6md zvpYLDG$^&O>Aqj;>W+cq+^F0Ee9MhJgB(Z!a^yEzW_t>dS1#45g&SL^87VSG>oQ_B zKHe`l`;Bg#SMNvha{ubpXGgkHM`X-VXLKf9Yx8aD$Tty_&+LHKQB)@2jsrO*cV}zP zIlE^vpJ=f^*+FNWp+<>-*0e`8#|8>`Pkc*Ha@?_5_axIP$c9$cU^A1yh97utt6-d!KTU!S?a#&iSS*AC# z45nojrdpwLO7-?*QuX5>xAVEtY+6@Cy8-3qJhGc}aahqe4!G)4p|TD(cXIY#E|fWE za?alAo$L?&!E=T-i59eIQ7G#yUOwBY0jQugwu)aXP{c!D`h53EZ@qi0M$s%idZs4) z{O9->7H#{1*_mpps92+$c26=lg|*E^&F zO8NKwNt{sI+uR{*+BD|ua+Cax6M>%th_G5X*0H~10h--H0}6x$#U$OTO_2>!ae>Q4 z>)--XxJX5$nAT~>Xm1>2czY>;c+Voq+H+s09Pz_GLTjta7vqA19jo_p_*dD`B)17v_`5G`5&jA#Tc zShyro%|;F==PTZiHttS<8{VOJ8O?8826h*RSLe?n1u8^}QpYg|$6~q4dp?Aw%L%Z; zq}m!SLjy~t7Lx4&s!A%j02f=f3g_kq{jOxI1-u5pr2WEv*`vBQHY;UeomkgGUGQKk zRZ)Swi_ht^x3_dXIuAiazKgA{BXjlFbk{q)C%>>6_IU?7&^x_Pz4y*1IvUZ4!TT_X z78C0k0PdhN+SY-hUir0OQt#O>`#Q|0Zu@RjR0#6?)*4sgiV6_aankCmBCm!XT%die z027m0Z&(ASsE=~Mp-rWk(FW1jf5iuX%3QGHvc*CFciL~ABCw}|}<5TuuWS)mOYPj9LeE>Oe78x61 zq=)+_X|02_P--dE+SZjln!2j(*`D28jZQ|L_JU@Rr`2!?N7J53848e*B??r_W!WnQ z`EuJs>y3_FOe>qolpeWTN-lThP||6p{XYEg7Cu)p`0G`CpHw#Gc6+n)$WMCd(EES8 zIeVj2H(;wk+GJ}=KuRRG_ug?GQ2qWmq)h_aeWMM2;O9D+C0&qeC|ksU^4=Y<5I6Wd zf5O+_|4&-uR*hmXY`H7F;@?Z3U>pG^n(dDtTPu0gL zHKYm=!0mURay)R>6H!HAm4f!9!f|ymWn;hW$u_MnHYfINDwO>D-|>GAm8 zT3awkRTUEf3|L6A!j?5k2pRzuLqx@-S^_l>(H270fHToVvgom%del(r2oY4Q57L!G zm~v#I48aRY)-*No**NPT|A=B~OEW?{qq7As*{j2M;Q4MnfB1KB?FYQ=+nfF8|NZz@ z_W6VcFmmu3Dh#Fx0uo?nepl-H7E;#;cG!U@J3s&t0HGNOULW=^ok8h29`p8~;Pq$w zDbBq1dfBDz&K1iD5lPZQO?#$BS4u;3ViaeTh@oTG*V+awhUwHBM=ilPLc~PCq?!O^ ziHX6HB|uPOmOz$}CBX@5qKTrI2*Cx1peY_Or3#gz1WFTqC>2BlSVBjOaT-)+@sQrp zv#xf`sCdYl%@|3VxBM=>zVq%|#&>_)_j;}UXzkzlmiQNF0HarmgQTbgQe>1wao;J6 z>Gdt_PxdFC%txpM(b5C~b%sYOx~t_@Oep&mjkCPlZtVQH2X{Xp#I}45GMv_RBExPmDEyKD3w*ffTQMPh+rI9IUa)(6Vc2^;}9h{$hB|T;pxHXG(U^_PrxOhXT$y3h)^?Xy^=pQm923@s z;@2nqQ=B#Z*EbJujxO3ngwg^+5nD_HID#`u3{I%w741{g`n2fV^)(9_34kaV2S%bH zf+B`!Aesm!8W*C88loYZh$$^lqtvuxi$F*K0h4r%!Mq+rV}_toni2!nh+?lcXH5^a zrbJ88zQv5x)HnT`IlgVSHd)`x{r`KI{f9qF`$@ZB^=E^@!8vk3P7q5kWOhefYqB%l zApl-a0@~hnR)zLeZwgg-z;FAsIJLLe-1YI5UtgL~#-b1(h`G{Qu0sGWIHNM*5hCNn zRVIqk$P&^b#U!aA!9?SXIKcoognk<$iw%zcH;p5d0Cpt(KtkHr>sSeN%{bAyIq}w8 ze3_(d!~+L6w3Z5*WpPH7nE*fdaqWG$(Fx zum(&tXjBkX3@Q_TLRGLu7K>3wt+a+DOR|K1XGuj$!M>X%`EW|nB^A{`84|n7`XrRb zbr@NKclvUT8$afIbGH1!cY8eiCOvFL zkWxG)hjGwV)*-m#?$u9xspcms``tJbKB>ETVaEMX&ISYQgA*QwT1IQv=Rmy`_&x%_hOsR1y^> z^;F9evTLMNs!&U$`1lf0(X5m{`Rp1NQBkQOMZ|V)wgl?Lx-CtKua$V~V;ymfOnr6k za&q95?~Oqf7xI>mAhMaAa31e+*;BaJ+pULP$j$Ce$;l`r5Ov@ALljfKzgrgS^NK&_2mHl%|FFmFBhMeb$8|m;31x^< zU>WKg;%>0N21h_NDvU=1bnLD{N)jvvtEG~mrHTSVjS{qz>4cYB0zx)8I%tI=iwc60 z8c!7JrJ=NVTaWcP zFYhp$lnDb!%Dr}SfTDGP6r@tQEB0I9`Wo0PZQu7NyWm=rYcUn63qXD4_2;mqOB;$P zsOP6Zoj&Z&I`z|Oa`^E1JhaG#L`ocf(iK*kmmXOa10-3gS!scK#9MDYb|ir+b#Wu{W4T)I z9LgVaX->nbYfj3zQ*zIZj$Tds8t zyRNZcChWJs4v1?s0R*YkGQ{iBV==?>mg4cNTLP+8cfhat|M0qtJ>w}4?OorjAj;ao zY>-+aX=7w?G(O(-$JH4Z90Xi&MzMIX-Wu1eQCdT(7Cfo9-WIhPi=Pmah*iPYED7RS zy!F;&sh6ooK{PGIA*RT$eUx0a-kQaBKm^p4GpXcgcBAd>57W|y zN~skOViKeAv6i3#P<)E7N3C@G9Ue5Zq z-R$_G_id4VeQsizQLSlGqpU^xh6}OiQ{O6mZSZ!F*DDPUIxP^Sd~?ciMUU`DgrT z&aiJ$y}_YxVk!Nt^${Q`Ci6$Qrz6|k)V~0bXeKq2VyOUb*>_DA>UAy{@6hxd@KX}j zqbxWtRJDGbuaP@@IpMnlAB-0`e4Hz~u&zMWno`9MTPd&w6GaWlHym-hp$0?)#PJwh zKt*FfBgO?H;{q`#M8rTeQ3EbSHId+g8xa+mg*>0u>$Gp3kF-ao^ZEoJWxY+^iAdqU zy3g)3^R(AL{wcb%?K}1UZu4mkZ*jdmi&YY(GMOg8aXZ3x-12^2DYoMVM^pY<04bFq z5|N+;B?7d7UF^FS0eW2vu!`T{;?q=62uAy7xgwyxZ}u8~w$tc@+u8XbagMg5cCBKT zye%?KvO%zlR~uZ2+8B>{bD}Y{VMrAL6-RJ^>MH62h$ARY0=R$+4wW!X0NiN1n``sD z(NJ3DXkK^dhyzB&M^OaGr#9t@>`Z&7-A<_A+1=c~lepcxowBpH#bqh|wSAcY$uv3M z)8vZN)p1v3^(Nd*>Vo^~L71eQ_VN4D_qF0R`G^T?KEZzkwUBCr!0T)~V zhlUv1qg^>Un@($Ll3Tayk*>*Ls;thZN6NI`1~1m9Bl)%8_?bWN^zNiMnLC^BE`3{d z7e8DwFTeS%rS#VWC_pkjz9xybqG}ugIuhGZT|_(GP=iJTBB~&` zpaSAXTQbviYa>Wwdb~Lnu05Ks@e_52DGiC384zz=eMZtkTAOdjo^(5HJ8_-mes{a? zbo)BHi^lF_slG7Q4v1L+`^358OD*3$_ocQd&i=X^5KA$X=nkKbafT-0XMbtPG!*n1L%Dx4CDsU)S zf*2ejg5Yg4rDooIqqt6*8Ki4I`tj@}+xs;)j;m9w6Rpi%x>N0x ztG3`F?GCUQ)dWzmpcx8BX0J}|+y_+GEgB(;M)Xm^)o>m_HBfyJ7N8kKQB*LOdt*|3 zg!!l$kDOvoIq}PU*Nxz#xE1~ZjB)2b+fsA;3Ojz09HWn?hLW1ArnxzgPEC4H{j=iGJU zAL<+5Lb`kWk2Ia1ICbTnA(wOgjI2v-27T)m{a znxcP!(o_^zSCQ7jqGYFVAE4An%`;<{4I>Y!XnEhI-~+h@e!^ejF6YMHd3Bz49_;8| z-`HN!x0W>pRWeP`%y}#nV%2x7Bui2a4l&NxfHo?|2`bGAZ)w`TQDOt7#U!}|(ZP@y zN>he1%=`nk!yJa7T() zoYk3Em$eL2U4{C9j=*adxKvF|%LNvJuATy{_e5Gfq=5i(SKrNeWVm%uyK}fVU<}F_~nE zrVtYAvm{F<6Oj>_NH9=x>nm@~kN79sCbt+*_TipjJlRH?-h1qNxMp*cy`=(HyiY4C zGpwLm0mcL*p{rNuEY{#~1L|N|bgy`&!|GIJf<<4=RH;+}QCvwIO3IG$IZD0rfiiHm zF-QhcR?f@e>x)FehjZ#=__BVPGtODI6aN+$s2zCm_M}I@@|CN~F8N#)1rt}5wFGKW zG&sC1EKN-dQVN?J7hHfcBgufWCX`6m%qNE3$kNUE$NY$IJeOOnx%nd;e{F+JyZk!0 z`AFW}@P~F_6R;leDQQOvDG(F^RUqPmW17&lL|9y`T@4Z)EQ_&9cWI1o_L$-%4{RnWAN)?B{Y&KO(P zppdCsKGxj%WZQCU{Z^jhmYd;MwsrhZHy_tdm7$v)deFoiek^IyF$b-;-r@mYkbYie zDHRC)!2s=i54BU4DXWXF!nGDn)p0e33K)Cs23H%5h5CvCR+r#%bB{{n;bk(mM6o&M zXkKvRNXQDgCNg|g)s9a1%*v7fgwygY<1Bfyd51;qX5atL^SV2GyY(G?=mGO_=>t}* z=)v`dw3cLvWKKE<;<2R_vQmo4GVkUiY@B!a({34Cjs1TsTlTl70iMT*l zFqK(XF?FSAs^|h3JQjz7)M4=1jw@UteU+4Ko2?Khw#c$&w@>kot>EJ;H$MUXVz)ZY zI604#hwQ!WHD39Lw|nen-_vfVdA1k#+TC_RU3z?I=<#~hv3zICC&xPZ_}#l%ZPuC- zx7=iR*p*+?kw+f3k$aSl#wZLA;nkfrMch3VTLaQG7sc5h$wwO93pEl{AY zgJFH2S@l>i0w9P8O4Vr0Vy@KB6y@s5NEjV4&A|gSfF~GFa0##KE`Uf~dSz(I>BHqU z4=*{iWW51}3x|$QXD-B!8Hb>tLVc1(jObd^vfzU(`yUr?=w$p09haZw_{N(ebgE6@o1FOYXfqsu;c|>e;ifVo=dWuQv3ItL{He z=e9l{E9ari@>0@KDajTdP=fQym#4 z(zSqVJ(vr(FdR1k5w=AVXsM~SyHI=DN%4SizkU7scyfRI_$%qB_3HLkFV#N&x4o5r zsjrk@b^a87-haxkIsZ{#X0Yy-82asO< zrat$%-_)xoy1o0j*}7uOg8f5}aoMzmBgeoN8M(s5bpV+ab|j_}2`k0@$&-riLQK7i zX&360fCMsmL^s&3VB5IVmm{W-*3P)Yl66>6>SfD5%yMIlyWBjBWoSgQ-{ zFZH$-bb3G0Q3qoi6TB9NiXWNjmK(=QtOjVcw0Ai#Zj6bVV9$Yp6gFRf8jwH=iHc}q zW%GCoZ;q8C%%q@@fkdrGn}y&OvZN<~Opj*WQhpE6JR|qj^t$6O8=9JrCS z5QrTN?Y-wb&9E#OP3S-eKOiB|2z^Wh3u^^Zz-?m~n=@1c2~QYiK_Vdl0chMJaZPzE zQ0OvXtp--S%ImO=PhpSD%t>CDCpnTa$ipsecW!DrYVa`0b;W9ePv5!G*xFybV5=mS zJ1T+|Ai;9k;yQc_U{t$mJpmbxT%dM=hm8SLpbI)OUFu%F+OlvC7~}o`*a8D%9Fk*_ zqc9i-V|zRn%DAa1uEopw3Uf{b>>0h31f&N?NT@}FfCamOTQV>^uz;Z)+^hwO0Cc@e zfLYvEz{nts@oJ;~VpszVVi*mQJY+B(j2zDfBnF1@cpS_QVjY9EcsO_a{gYZS9NH%S z88$^TApt9}vh~S!JiZBb$65h$twt~>$m}eX3R6iODgX&tU{)iq_6ZwE+juaZeb$UY zk_$)=rXFd#1;zu5$6)h@)Qn3_OHcXDKqFcuSZHhp@T5s%c$q0M z_X~(4HNbQ;5!VPn;`$nq+z2nDi!QnaVC1!9oW}OMg5hlp6F9Mlfh>$capb5bs0?yo zkIU~*f!eWwCO_&tn=#R@aM1fXFr=mG?E)bXlrWP3## z0Ol9~9@v>4gUlQj>A@(ZO*v(IRK_J|?g`|6l}0b+JKFwj|rS^X{;z>pK$wZcfd;*o~&%y{H5)e{>7 z@}<|iAU*G((L>+yGSRNMk^@aE`0E1*2}LLnEA57Cw{@-+2(Y|j9H|xJ6t*Y}$OPR& zfaL|y1zn;Gxmu{p>ri?lZScGAl7?yqHW-GPS{^{YTS*TvfEgn%wdln`ZctXOUh&IZ zpWXysu&LJY1KS&-5-dQ(hVd{`1f&EQ(vc$rKnOteeoZ0-?6(4W83Js}0^E-F+DXhY zEr41vU|<9B%x2(;E072*3K|xcF0=VTZym1Hv(7C$S(f`@3)b<^96(6C1VONHBtZu1 ztCs*#5-f%wq8JUmk767TU=1YH);?7wZ-AJy@~6_W#xLCPe64SF{*9=^N+76ifV zwR@50Yv0y=|CudW;0FgGXqA;kEf;<(qdpNIrhvH@Q%SXGH#9-KXi0SEc ze_}8OTgplgJhlYOW`0Plx|G%$2!h+XHGHvo-%EXe*k}O$8Q%a=5dw|`EM|s19I22= zfB`H~Z{d6nrUKV%fhO1TuE}w(*hOFIRyTD6tTBXe4rdzSGze#A4ss;#iZSuYGMFVB zHkWaxo}jo0H2l`jd+yG`0jxoPbPy6RgH{P0RUPFKXFl2hGyMJl0->PQh~*drFk{r) zTaG{h7UaNDf);>;K&RX5dz2(loVZnCJLG9cbaey63{kdi(8PnOjEtuf7~@@Juqi9` z)LgnxV$rl~X#0Qk^<$flopjjJ06zc-L2cMAj)5E0DEF%%4TYVS={X|T{8T=*9Fa`HGaQ`|HDe4 zqXQmhBO^-^m#F!wTLDzR0yO_WVtxJTzCZW|82$dmwkDxE28-Ctnc4UhB3RRcRTUOn7+WdJ=aGRVj!BV%7C zp^Jd-n|5gb{1@;Sy{^1J^ewH^?;Sv>1+5Mi1YzWPDezAZI37u`AOaiR0s(0302)9F zflP;LU|YllvoZ*ivL6B&3>eJ3C85hB{URW|A9R2RzO`d%Q^K;ef&$V!r>Yh;`n;oX zAf=M2dzi0QnxO#9TsIOV<{5GZ=sSRt;CS?-AE5$tfa9XFfHW<|!;oCy0OmRIO-ggo z`9ZknzV!e+%W-Fsr?hWXO`$WF35qI;`Xi2aE*^=D0bH+xLrwsd>>KRJm;vm-ff?ZF zIJq4~0{Q+S9q1xuf{_owg;qcb{F@A;vvwRPF92QOW4*;}%}8if!GetCD1a8qvkh_r zFv{hm|7v`OzER2s&Zgr)=jJ00M=-q~2f%g!0vHS!1BNfA9il^~J_hVnX9@|2TyG6z&-e!QO*FqrRTXiewhh`*ce=F zR}Ru1&bbyqi_*b)NWxqb-$bnaz$pOjsklUR0ylh1IMqyLT@^f#=Tt4!d4}U@gN)5f zE(d=a2U4)zfwbG03-;u7b4O3-s6W(+$X5F}8?2Wo=qfnU1X!K$XJ|cc65DJxd|;c;M!lxdSBuW;sKuz!3^| zSC5%Vu_wUkIHS&y!88X9Y^VkfYfCgYAK(HIQVpNwy&;Qrp&$H&o<3WpjONvBito${ zlmkx3DJ1^zWGDddeb{fvkTayjJd-gX0vs?H#~c)oVgOvtfS4al$1o{_4Dy2amt;wE z4XP>-d}CVSm*$2%29?$kY{|M-Fo2Fe3p2OU9DfoC}}=EFlR@HSt@Ogj}8r&=a1G z|BF^B&1KarOx~)B;@#=&C^%^Y0}l6{1UbQ+*AfsIEe%^*gMEGgB&>kL}o&6i;ji)fpY+cgYpo~p^YFUrnoBmIvfrR$m%|zFT6LL zb>yWqZ&jrLWSOX4;&9<*0Z+G;E>PfF}s-3T1-JYCV)bBIKYn5J1_%v zX1=P9rL>Xf-hs=6IRj(}vO5kSM>0rywlfSMkHE2jp~Qp%;0w_*Bm@X;2??RO8C@?W zqsCz7O#(SC;?^1PbDjxnk(xHnuuA&>?pNm^cE2 zx^ghB+fl%P$^2kp4j^qTGeE-&a!x>IVi0CifP_f+Q!Q4mT{{%AZ7mLMJ|DGKi^vSS z_P57F{h*hh5n5F!lvFAlx?ilFKeEG9NeQsajRIGC1X66wxpr>Orj4H2T00A4bU^}R z!Q#{eU@$CWgG$RqQHdrBaD<%d-2weB0?{DvnYlJ^g+E#k@ZCd;7w_xv9?w+&o;*$S zu_~3aYz)B3-Fdb_2Xdi8#^39tOad~@c_Ym`FnR_AIHOO-WH8j#nQpmY+e$eY6Aiz% z3}9FW@<;yc`+0nq{z&hC1WLp}$N&-Gd^4=$#i7Zcz9~{Shu&4>3F7hIW4&ebsLu4P z?MEsCICO`;!zsP6)c_9nz#KfSC+Yz52HoLECaFRu^x7eTBijrc zkp##=!T=H3nI^%ul{O9@b{Nv)z)b>yFseC`1QLq1G}q)+7{%nfQaA7MQGFY^m$g!* z(&qx;IF8TkDCvC?1;`l=X(nbM$l#Dlf&rK^P~pvzU_b($7lMSbwd3(vU>pPt3oNwk zn23}N6$>^&Q>}b6tLp}#$)6hRy+7U#ALAz_a0v^O)vR4UlC=04Fo!&W@7c56_G(Gw`P=gXAd@0NL3(vzY<P%_8+#kcHuek#(A0MQl%(J(@Q%7IGG)XnH^37GH?yx{@#I}$WT%u zLrQG5Zov6ScIaoygQDp;VLNTx#W6Vi{W_je1s1?y69}PiMpj|5T@_Lb$J-;ggX0|>N`k};2H-wJ0gTLCxN!$$VL&njnprBQ&&Jr;E{Zh6%NSM0 z%x+^;2@v0GYCI&g`mUb);S7yB*oU9*xGOKyT&hrz9xrVJ@a|mW5pd>`09(q&)tW1b z?VYX8%nTXNnIq-?0*$fg++o0JW803~1z{i-ZHX(8ntb^H32?p{^)b0-4~w*$(N@t{ zg`L0bk7`O%zix4b9dD0-I`5*jQX&P=2k( z*tX*ZF%XLd+6D;NHW=c@p+sVPLc8zEeW>J)^Wq-f6n1~s@qXo{bT6qwYLB|Kjm_>H zoDbm!$N&eQd1?blPyupppd&Eg1hEJoC7!`{;#7tKo#X8h+@Z7U%)m96OG@Mg1N^~(a)Zdg z0?d$&25bNc@Io_#=|*P&+h>nFKrIpo5U_0nh5=mTfAu5kuR!MQpy`A4@lzCuvLNg; z$rG9TuWV#I)1E5Od!yozK$JA3EIo}Q1|40aY^S9vAnoPqos>^h|J%T&EX~_&Sk_s_aSO@wmAJ&9gQDMC+Q0r^XkSHJ(X~(ew z0koP{L7al3pgeCVlP$Gm8s#^yK-@doi5{y={g`=<-XGm&^M*u>*0)a%Uh*SY*3siwR%c%qF z>-$xuL=iy%k&d&O2k)Ne%e?dNF1DxlqtcjcW#}RgLn-GLIR8U?!%R&AQK`dPB^3k_ z1SCSNg0rw_8%h-8FxG>!YpeolNNV5(h$0mT0j&T5q0$+r3Q%9KbuKl_C^8y^${D$! z@16O>&i&_1^O;{ag2HIA6g0eiGpx1Ls7#q}(0*}+5128ikSWxO$ehhOX1M8`mYhW& z&-~Dz7zh(h5QsFz7UK#c;H50n$$&6I3NcpTEPDIlLSfvpVMl(@XV;H-(YRTUxa=2n z{5<(QJx?`m4s@_7KwByhz*Rwn>grIXzI&ZhuUO~Pj$ zs4CKa^Y3Ka;r#o(J^PQ%Dav9)%*Hh_+4jg%x}y!>eU{Gy07+Mgoy-YlIc!FSgY{(= zn51=*J+eI{b77&TnTn;4 z)2*<)LVGX5KmImZ2Xyty`~^SF48$KoAiPXjt&04JznlNwZ|7~)pW|(ew@Gia-WK=2 z`whOWfy5DF6_x|9ZYbGZFH+CD&Mo%&+tGJ7{k>Iv|1mt3ZK)6eT^vf)E53lf7ufA2 z_VFM8Iqp64?OOXr1QC%SLS?x~&!c`PTX@gr`kzCbq8M5a8eMbx=Y*gEyKLGJcJ}0b z`2ODUdu_0;9xlw>V6Di#vhQd10AtcA;1v#72Q#BpuUz$C2ADR5v?#Qp@T0G!pQoL7 zH{qB-$DxXKQ0&1!>O0YWZtSZoUaWg&{k`RV7m#=ll)_?laiYM`eRl6?e;*qA>TmdM zyZ`QtK->pNTSNj?rJQ)d=Uz_#Huj#y=jpHDL`j6UfkxN&Hrqka<`W(~9QGgfoKA0G zE)PpedJEz^Bh!Qsax2^w3*K~?SG;?;i9k2dgh&C!ufyK>d{c??7Q=O z{rj@7Z+Hpr8T9u8It!4NQXzmY22|eNx9xoQ=^E_IbLMmRp6ed_FvbyNR02{VlD@?5 zCG}cQ@9r+9fS@4VOL2`(y>1YccV9aK!j@jw8~xj}@bZGp2G&-~3WA>TEEh#Tuh8(X zxgU_%=S`3VD$TI|g5OeqUga}q$;e17V>G6sSMSo{?a%@2m%HL^_r0aQD|#S}B7gw8 zIL=>hvA>UieP5oot(5+a2yH0?Ri$jd%`iv0Nd7E!w zLg0yKU53pn!GalE2r)O)Q$pA!7GiO|fek(+!dxuy76Jnytthm3UZB5Ed%Ry#BBUeG zae=tkc&qCdRrcfitY_QzX?YKxssiX@&QZ_J-wwro`quY%Z2usRN}#HgUApgjA?-GI zcm1`kbpj&FVQ6D$bF17Q1dXl>5vIQwhB9H2RxA-K2~e*gi(@W<%#18}&av?dEB~7f zTQ6R}J_1DqFdyf4(;xW(Awbt8jyPku=5y>`TCm?gsC$lmU$gb3ZA1WpM60|<&;0!N z!eYO@uX_8=*VqSn89)SP%Fzd}=NEhQyVLEN{>Ltli13iem0LiY+wL5Ipw7Aw<*0pB zV@mwDEXZxzZ&9$8G6ljz_Fx&jrVSh^DO8^ant>E)y`uPdf42Voxc?KO6c|aOF0$3W3T!<2m>qsAIo=QSJqG{ffB+5MYMU^Pb)X?&5d)yJzve zA6yXyoKo}C#Onh-+Qem54R zbJ^&8)N7a-$W2nx3Vi{hzkijfR44@*iG>cmrFtP^pMFr=U@QK>3)XADB)`5!|M<(l zjeWOIEwm8;0abX%e9y0AKi3!U`ZW>)B7iV<;ln$ZJN5p?&*s-nrV0ok3L!2Jw7S8< z3`qcc*adN+R4wWPc;^B0-Eoa@7A*0qOk+`mg&!Ms>us^ryc`6>Z6>gs7cFhzP_(W3 zLmQ}ECKLsve9!-<{@nao1`+}#2o&$E{_u_d{Ux8lxEFifPjnRM?(w0$qI#FzeQQI1 z_!M4H=LKjZ0*C;wKrg5^>?8TDe7h&&qqd*)LgSp>u4q(4`z0bmWnZRG_|EIX{r=z2 z`ge1QARxj+65Z{%W`{LvqvEkq!JB73mfap7U>>w)iJV~VaWec6Cj;JXDHhaa!I6>B z$xh|L`q~iwP*{{D=tQyQ{2?3JIQFKbDJlHxhx+qXy-q;{1VkTr+3V0G8-)U_d?k7*eJ{y9L6!ao zs*1?iJJX%F-}c+H{e8!o3K0?IA&V=!q4h1=Z~PGe5Yh^a&NBnd)sLAZc$4>@q5?zo zf^jUBy0T=N@)hi}?tCo%VhFfB&VVOrWdjGuLF*R&AMYU)6va(m_@tk$ACQtX9i=Q8 zd5nA4*G_-G;dl7D?MN5|;|!HfpWlARWk1**Z?8|i_aIaiUUc^c=>M$wjPfnpJMP38 zhf=v$y_EIN_V>5gM^P%IoVm%nbnYDew%MND@4gL{wn#+fAq$1w(D=sQ-lxExi&{+G z-a8TA&oq1vTUhIkSt9eZpnN&|>;hDp2*HQ z?_cfn+`nr93ZM?a8T1vnN8JZ?pe)lx`K{l-w@G{EpQpRCXd9xTjXtCx!3k~epyPtW zzC*yeV&xFnH+}X{8)$PFurwRa60nPN#~#JpEX`IF1#Z)q0Uy@L7LJ&IY3g-)8fkGJ zyu8t$YrhAiLWvM4|FLgR(a*abFKT;oY;pU(p(GtEK`{}-NP43A&g|bIi{t+EpaP#l zEJ1i-9sR!g3)sIiPZozx3xL5rpZ)tw_Ai2jbm;l{dxdRN@0tGYEO%vzj7T&*WHBHP z+TNrgu(NX-7XKPw0DGSZJ#Arr&VYYwG2pGnkFvut0M>30XXPO*VY^}Ie57)!8!AY@ z(Z}e|=lH0Qrj(?@vCp@D#C{z1a<@|r=qrYMMsKTCpoVB*B)!9Z?DeDZ!hC=iPg=r- zE~O{w}ZyOa(cEQ6iq-4(ZERh7I=Tj#qpQkT>*URNlRYdI<{YT zyFD+zqqIMw4kJzp+zH=m>)$lO3;k;^qhFWb)A`=rTxT={Dcd7N9&%_{(D?2Nc0Wc~ z{3j@GKdgGD*b1JW#We*Brm5?_DZyGDVof&z%PLRF!2kP)KVGcSmlfwme_q#nO{J72 zVqP%l=VRUXc7nhdSYCYi4FydwN~ChGp54}uM|y=S1NhXFmM{B2f0w@S`|r$D`mMO& zKt;k2)-QkSW%@!7_tooaPwRRQdowCY0(AtOIDKWFXJz@cy5%_UCs40zO4ZkA6Ao&ojXD-69yn za>f@m9fv_M&LA){@_v3ti{oWg0PsMM9>DeM9_@MDUk=*8N*6#z`Xw{G==0r|*TsAL zyx043LMcKhK?E0GnK#S>&GO6^%NyJ)glx$$UjWO9yetvZ_w!D@9xNj|iUv7Sz<}GV z!+>|OHVo>;;*Ul@ul;|cGVNeWM{?gfxyqR3a+To2%K~~P4wdxEfoR8 zbACNizuwvXp2h~aprX|Pr83a}C@=aiUXq``r@N<8a71PQ=-M1SvTdmj5C04ivIs)v5PjCu)PN4xuP|LwdCRZ7a45~FSjJ}W5OfX(tiTjC7mItBBiVXeEX#8dVVVXE=(i6BUS|C6A85X@{`^nYY6C|1?-?t_?O#Ze8S(_M1Rf|REEHXqF-<2-dnT>LNtIP zim2$~`hQ-pxVyWj|7}VFl>soJEJaP^m0?j=hXY#X=z=UFZpeggAq<#h_%Noq!8#$t zyh%<2mc$c=MZf*mI@F)%JacqdsTBFyezyMX`*(G|FY9dmeOX`DFZ|Z@_2>LU01?&~vv@Y}43fC+)BfdryKaWYjj2^#0A9Fk~ZGNFXUfFbz}hLym& zG{jwOewGz8vV6L~)n9Qxo;5$HG^KAeP#|R&@k-^+0U|;$hxX@?m%4v{J)@$u!9)`c z(E!mz6U#F8>$G=Y9Y9H$NFW4AvKS32h&)Xm3$1g!C5Z^Izwnj8GGEa;w%l*UGHgka znYS0mV7zyfEqP9mkLgoc%z=Nuf&^A83dlUZ(s8tUVgz?Uf4E z4L}4aWhi#{9NK4(B?-5K4SnYcwuM%aZ+APOOXGXerc zb)d-4rShksg^qMc!rNJAU5TM&m9O_IVIa%)86>)pzAOdTu@PVPNdUyIlG=dloQ1F$ z5EzJFfvJ7LKuMf*ybQnD1Y6Lnd++b(>c`TTvfuA5Eh?Z^EiFg^JiM2#dK!~A#1dSnR2oTg6f_Z@B$f}k9XF@CO>cfHoNn-K7F~yfMgzu$q zYNIl-JRhW3g2j9*FKYYk#S1jcjQ@X~Yny@Bfq}@C3yA9C$8hA?Z5#A0a7tlt0f)gb z{oyOBkkk?|5#tQlq@ePrenGB3&wYFAJk$adRY)tuLnfp1s(*q2F^F+M42qHi?VBn| zH)cXR-Ii&c3q~sFm!+32hMmVcZWvGOFOz$#ei`b_bVJo+bHk^!=I8Qa56HmZz6Y(d_FmtkC�LHG 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 UpbRSzO98R8Yp^F0m$BFt0Cs;9+W-In literal 0 HcmV?d00001 diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/00-example.json b/V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/00-example.json new file mode 100644 index 00000000..2cdad05b --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/00-example.json @@ -0,0 +1,13 @@ +[ + { + "id": "__example__", + "type": "submenu", + "title": "Example (Entry Dir)", + "submenuTitle": "Example Submenu", + "icon": "resources/icons/settings.png", + "color": "teal", + "description": "Example submenu from @be/menu-entries.d (scans childrenDir for menuEntry.json)", + "order": 5, + "childrenDir": "TestSubMenuA" + } +] diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/10-test.json b/V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/10-test.json new file mode 100644 index 00000000..aa4c10d5 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/@be/menu-entries.d/10-test.json @@ -0,0 +1,12 @@ +[ + { + "id": "__submenu_test__", + "type": "submenu", + "title": "Test Folder", + "submenuTitle": "Test Submenu", + "icon": "resources/icons/fun-stuff.png", + "color": "purple", + "order": 1, + "childrenDir": "FunStuffTest" + } +] diff --git a/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/ClockOne/menuEntry.json b/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/ClockOne/menuEntry.json new file mode 100644 index 00000000..398d2446 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/ClockOne/menuEntry.json @@ -0,0 +1,8 @@ +{ + "type": "skill", + "title": "Clock One (launch jibo-tbd)", + "icon": "resources/icons/clock.png", + "color": "blue", + "order": 20, + "skillId": "jibo-tbd" +} diff --git a/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/FunOne/menuEntry.json b/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/FunOne/menuEntry.json new file mode 100644 index 00000000..342db2fd --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/FunOne/menuEntry.json @@ -0,0 +1,8 @@ +{ + "type": "skill", + "title": "Fun One (launch jibo-tbd)", + "icon": "resources/icons/fun-stuff.png", + "color": "orange", + "order": 10, + "skillId": "jibo-tbd" +} diff --git a/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/menuEntry.json b/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/menuEntry.json new file mode 100644 index 00000000..51647f55 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/FunStuffTest/menuEntry.json @@ -0,0 +1,4 @@ +{ + "hidden": true, + "title": "FunStuffTest Root" +} diff --git a/V3.1/build/opt/jibo/Jibo/Skills/LOGGING.md b/V3.1/build/opt/jibo/Jibo/Skills/LOGGING.md new file mode 100644 index 00000000..d3fa4573 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/LOGGING.md @@ -0,0 +1,84 @@ +# Skills logging (robot) + +This modded version of the JiboOS includes a tiny “always works” logging stack for the robot’s old BusyBox + Python 2.7 environment: + +- **UDP log daemon**: receives log messages and appends to a file +- **Web log panel**: lets you watch the same logfile live in a browser +- **Node helper**: a tiny client so JS skills can log without pain + +Default logfile: +- `/tmp/jibo-skills.log` + +Default ports: +- log daemon UDP: `15140` +- web panel HTTP: `15150` + +## 1) Start services on the robot - if you used the installer they should be enabled automatically + +### Log daemon (required) +Init.d: +- `/etc/init.d/jibo-skills-logd start` +- `/etc/init.d/jibo-skills-logd status` + +### Web panel (optional) +Init.d: +- `/etc/init.d/jibo-skills-logpanel start` +- `/etc/init.d/jibo-skills-logpanel status` + +Open in a browser: +- `http://:15150/` + +## 2) Send logs from programs + +### Node.js (skills) +Use the helper: + +- `const rlog = require('/opt/jibo/Jibo/Skills/@be/be/be/robot-logger');` + +API: +- `rlog.info(tag, msg, data)` +- `rlog.warn(tag, msg, data)` +- `rlog.error(tag, msg, data)` +- `rlog.debug(tag, msg, data)` +- `rlog.raw(line)` (sends a plain text line) + +Examples: +- `rlog.info('menu', 'opened main menu')` +- `rlog.error('radio', 'failed to tune', { station: freq, err: String(e) })` + +One-liner test: +- `node -e "require('/opt/jibo/Jibo/Skills/@be/be/be/robot-logger').info('node-test','hello testajhdgjhasgjd',{x:1})"` + +### Python 2.7 +Send a JSON log packet via UDP: +- could be broken atm idk +- `python -c 'import socket, time; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.sendto("{\\\"tag\\\":\\\"py-test\\\",\\\"level\\\":\\\"info\\\",\\\"msg\\\":\\\"hello\\\",\\\"data\\\":{\\\"t\\\":%d}}"%int(time.time()),("127.0.0.1",15140))'` + +### Shell +This bypasses UDP and just appends to the logfile (still useful to verify the panel is tailing): + +- `echo "RAW $(date) hello" >> /tmp/jibo-skills.log` + +## 3) View logs + +- `tail -f /tmp/jibo-skills.log` + +## 4) Configuration (env vars) + +Log daemon: +- `JIBO_LOGD_HOST` (default `127.0.0.1`) +- `JIBO_LOGD_PORT` (default `15140`) +- `JIBO_LOGD_FILE` (default `/tmp/jibo-skills.log`) + +Web panel: +- `JIBO_LOGPANEL_BIND` (default `0.0.0.0`) +- `JIBO_LOGPANEL_PORT` (default `15150`) + +Node client: +- `JIBO_LOGD_HOST` / `JIBO_LOGD_PORT` + +## Notes + +- If the web panel shows `(polling)`, thats ok it means the browser doesn’t support SSE and it’s using `/tail` polling instead. +- If the panel is blank, confirm `/tail` works: + - `wget -qO- "http://127.0.0.1:15150/tail?pos=0&max=5000"` diff --git a/V3.1/build/opt/jibo/Jibo/Skills/MODULARITY_PLAN.md b/V3.1/build/opt/jibo/Jibo/Skills/MODULARITY_PLAN.md new file mode 100644 index 00000000..48947e46 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/MODULARITY_PLAN.md @@ -0,0 +1,80 @@ +# Modularity ground-work (Skills FS) + +Target: make the main menu + skill launching as modular as possible while staying compatible with the existing precompiled BE bundle. + +## What you have today (important choke points) + +### 1) BE is a big precompiled bundle +- The BE “brain” is shipped as [@be/be/index.js](@be/be/index.js) (UMD/browserify bundle). +- A number of runtime steps are already split into editable modules under [@be/be/be/](@be/be/be/): + - [@be/be/be/postinit.js](@be/be/be/postinit.js) is especially valuable because it runs after init and is easy to patch. + +### 2) Menu is already semi-modular (via patch) +- The menu injection is wired in here: [@be/be/be/postinit.js](@be/be/be/postinit.js) +- The injection logic is here: [@be/be/menu/main-menu-patch.js](@be/be/menu/main-menu-patch.js) +- There are two alternate menu implementations that aren’t currently the default path: + - [@be/be/menu/skills-scanner.js](@be/be/menu/skills-scanner.js) + - [@be/be/menu/menu-manager.js](@be/be/menu/menu-manager.js) + +### 3) Hard limit: “menu entry exists” ≠ “skill is loadable” +- BE loads skills listed in [@be/be/package.json](@be/be/package.json) → `jibo.skills[]`. +- So the current menu patch can *show* buttons for new skills, but launching them will fail unless BE can actually load them. + +## What “max modular menu” realistically means + +You can make the **menu definition** fully modular without touching the BE bundle. Making **skill loading** fully modular is harder because the bundle pre-bakes skill modules. + +## Step-by-step path (least risky first) + +### Phase A — Make menu config fully modular (low risk) +1. **Single source of truth for scanning** + - Stop duplicating scanner logic between `main-menu-patch.js` and `skills-scanner.js`. + - Export a stable `scanSkills(rootDir, options)` function that returns the exact menu schema expected by the main-menu skill. + +2. **Make Skills root configurable** + - Replace hard-coded `/opt/jibo/Jibo/Skills` with: + - env var `JIBO_SKILLS_ROOT`, else + - fallback `/opt/jibo/Jibo/Skills`. + +3. **Allow multiple menu providers (plugin style)** + - Add an entries directory, e.g. `/opt/jibo/Jibo/Skills/@be/menu-entries.d/`. + - Providers can be: + - `.js` files that export `getEntries()` + - `.json` static entries + - Patch merges provider entries + scanned `menuEntry.json` entries. + +4. **Move icon/color policy into config** + - Keep defaults, but load overrides from a JSON config file (ex: `@be/be/menu/menu-config.json`). + +### Phase B — Add Python-friendly menu generation (low/medium risk) +1. Implement a “generated menu file” contract: + - Python script writes a JSON file, e.g. `/tmp/jibo-menu.generated.json`. + - Menu patch reads it (if present) and merges into the menu. +2. This lets you write menu logic in Python 2.7 without fighting JS runtime quirks. + +### Phase C — Make skill launching modular (hard) +This is the real blocker for “true modularity”. Options: + +1. **Soft approach** (menu remains modular; launching only works for known skills) + - Accept that new entries are “shortcuts” to existing/registered skills. + +2. **Medium approach** (dynamic skill registry) + - Maintain a small registry mapping `skillId -> folder path` by scanning `/opt/jibo/Jibo/Skills`. + - On launch, route through a single “launcher” skill (registered in BE) that loads content/assets from disk. + +3. **Hard approach** (replace BE bundle / build chain) + - Rebuild BE so skills are not baked into the browserify bundle. + - This is the cleanest long-term solution but requires toolchain alignment and more invasive changes. + +## Logging groundwork (so you can debug all of the above) + +To make JS/Python logging painless on a BusyBox robot, the repo now includes a tiny UDP log daemon + init.d template: + +- tools/robot/logd/jibo_logd.py +- tools/robot/init.d/jibo-skills-logd + +This gives you a single log file you can tail on robot (default `/tmp/jibo-skills.log`) and a trivial Node client under: + +- @be/be/be/robot-logger.js + +Next step is to switch noisy modules (menu patch, loaders) to send logs to the daemon. diff --git a/V3.1/build/opt/jibo/Jibo/Skills/TestSubMenuA/menuEntry.json b/V3.1/build/opt/jibo/Jibo/Skills/TestSubMenuA/menuEntry.json deleted file mode 100644 index 0fa93acc..00000000 --- a/V3.1/build/opt/jibo/Jibo/Skills/TestSubMenuA/menuEntry.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "submenu", - "title": "Test Submenu", - "submenuTitle": "Test Skills", - "icon": "resources/icons/fun-stuff.png", - "color": "purple", - "description": "A submenu containing additional test skills", - "order": 20 -} \ No newline at end of file diff --git a/V3.1/build/opt/jibo/Jibo/Skills/TestSubMenuA/testSkillB/menuEntry.json b/V3.1/build/opt/jibo/Jibo/Skills/TestSubMenuA/testSkillB/menuEntry.json deleted file mode 100644 index bd54eacd..00000000 --- a/V3.1/build/opt/jibo/Jibo/Skills/TestSubMenuA/testSkillB/menuEntry.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "skill", - "title": "Test Skill B", - "icon": "resources/icons/surprise.png", - "color": "green", - "skillId": "testSkillB", - "description": "A skill inside a submenu", - "order": 1 -} \ No newline at end of file diff --git a/V3.1/build/opt/jibo/Jibo/Skills/jibo-tbd/LocalRadioPlayer.js b/V3.1/build/opt/jibo/Jibo/Skills/jibo-tbd/LocalRadioPlayer.js new file mode 100644 index 00000000..a4fffd0a --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/jibo-tbd/LocalRadioPlayer.js @@ -0,0 +1,61 @@ +const EventEmitter = require('events'); + +class LocalRadioPlayer extends EventEmitter { + constructor() { + super(); + this._stations = { + 'Rock': 'http://localhost:8000/rock', + 'Pop': 'http://localhost:8000/pop', + 'Jazz': 'http://localhost:8000/jazz', + 'Classical': 'http://localhost:8000/classical', + 'Electronic': 'http://localhost:8000/electronic', + 'Hip-Hop': 'http://localhost:8000/hiphop' + }; + this._audio = null; + } + + getStations(options) { + return Promise.resolve(Object.keys(this._stations).map(genre => ({ + name: genre, + id: genre + }))); + } + + play(stationData) { + if (this._audio) { + this._audio.pause(); + } + const streamUrl = this._stations[stationData.id]; + if (!streamUrl) { + this.emit('error', new Error(`Station ${stationData.id} not found.`)); + return; + } + + this._audio = new Audio(streamUrl); + this._audio.play() + .then(() => { + this.emit('song-data', { + title: `Streaming ${stationData.id}`, + artist: 'Local Radio', + albumArt: '' + }); + }) + .catch(err => { + this.emit('error', err); + }); + } + + stop() { + if (this._audio) { + this._audio.pause(); + this._audio = null; + } + } + + resizeArtwork(options) { + // Not applicable for local streaming without metadata + return Promise.resolve(''); + } +} + +module.exports = LocalRadioPlayer; diff --git a/V3.1/build/opt/jibo/Jibo/Skills/jibo-tbd/index.js b/V3.1/build/opt/jibo/Jibo/Skills/jibo-tbd/index.js index e2d4b8f4..cc2301a1 100644 --- a/V3.1/build/opt/jibo/Jibo/Skills/jibo-tbd/index.js +++ b/V3.1/build/opt/jibo/Jibo/Skills/jibo-tbd/index.js @@ -1,2 +1,11 @@ -let thisPackage = require('./package.json'); -module.exports = thisPackage.version; +const LocalRadioPlayer = require('./LocalRadioPlayer'); + +/** + * @returns {RadioPlayer} + * + * i tried to make the radio work as well, coldnt get it to work :( + */ +module.exports = function createRadio() { + return new LocalRadioPlayer(); +}; + diff --git a/V3.1/build/opt/jibo/Jibo/Skills/testSkillA/menuEntry.json b/V3.1/build/opt/jibo/Jibo/Skills/testSkillA/menuEntry.json deleted file mode 100644 index 1dfeeda1..00000000 --- a/V3.1/build/opt/jibo/Jibo/Skills/testSkillA/menuEntry.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "skill", - "title": "Test Skill A", - "icon": "resources/icons/settings.png", - "color": "blue", - "skillId": "testSkillA", - "description": "A test skill to demonstrate menu integration", - "order": 10 -} diff --git a/V3.1/build/opt/jibo/Jibo/Skills/testSkillC/menuEntry.json b/V3.1/build/opt/jibo/Jibo/Skills/testSkillC/menuEntry.json deleted file mode 100644 index a0041606..00000000 --- a/V3.1/build/opt/jibo/Jibo/Skills/testSkillC/menuEntry.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "skill", - "title": "AAAAAAAAA", - "icon": "resources/icons/gallery.png", - "color": "blue", - "skillId": "testSkillA", - "description": "A test skill to demonstrate menu integration", - "order": 11 - -} diff --git a/V3.1/build/opt/jibo/Jibo/Skills/tomove.md b/V3.1/build/opt/jibo/Jibo/Skills/tomove.md new file mode 100644 index 00000000..bc56a94a --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/tomove.md @@ -0,0 +1,5 @@ +^BG +/tools/robot/init.d/ -> /etc/init.d/ +/tools/robot/logd/ -> /opt/jibo/Jibo/Skills/tools/robot/logd/ +/tools/robot/logpanel/ -> /opt/jibo/Jibo/Skills/tools/robot/logpanel/ +^ND diff --git a/V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logd/README.md b/V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logd/README.md new file mode 100644 index 00000000..f93fc5d0 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logd/README.md @@ -0,0 +1,55 @@ +# jibo-skills-logd + +A tiny UDP logging daemon intended for **very old BusyBox + Python 2.7** robot environments. + +## What it gives you + +- A single place where all your scripts can log (JS, Python, shell) +- A single file you can `tail -f` on robot +- Minimal moving parts (no external deps) + +## Files + +- `tools/robot/logd/jibo_logd.py` — Python daemon (UDP → append to file) +- `tools/robot/init.d/jibo-skills-logd` — init.d service template + +## Quick test (on robot) + +Start the daemon in foreground: + +- `python /opt/jibo/Jibo/Skills/tools/robot/logd/jibo_logd.py --host 127.0.0.1 --port 15140 --logfile /tmp/jibo-skills.log` + +Send a message: + +- `echo '{"tag":"test","level":"info","msg":"hello"}' | nc -u -w1 127.0.0.1 15140` + +View: + +- `tail -f /tmp/jibo-skills.log` + +## Using from Node + +In your skill code: + +- `const rlog = require('@be/be/be/robot-logger');` +- `rlog.info('menu', 'injected entries', {count: 12});` + +Env vars (optional): + +- `JIBO_LOGD_HOST` (default `127.0.0.1`) +- `JIBO_LOGD_PORT` (default `15140`) + +## Live web panel (optional) + +There is also a tiny HTTP panel that streams the same logfile in real time (SSE). + +- Script: `tools/robot/logpanel/jibo_logpanel.py` +- Init script: `/init.d/jibo-skills-logpanel` + +Run (foreground): + +- `python /opt/jibo/Jibo/Skills/tools/robot/logpanel/jibo_logpanel.py --bind 0.0.0.0 --port 15150 --logfile /tmp/jibo-skills.log` + +Open in a browser: + +- `http://:15150/` diff --git a/V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logd/jibo_logd.py b/V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logd/jibo_logd.py new file mode 100644 index 00000000..4e1121c1 --- /dev/null +++ b/V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logd/jibo_logd.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""jibo_logd.py + +Tiny logging daemon for old BusyBox environments. +- Python 2.7 compatible +- Listens on UDP (default 127.0.0.1:15140) +- Appends newline-delimited logs to a file (default /tmp/jibo-skills.log) +- Optional daemonize + pidfile + +Protocol: +- UDP payload may be plain text (written as-is) +- OR JSON object with optional fields: tag, level, msg, data + +Examples: + echo '{"tag":"menu","level":"info","msg":"hello"}' | nc -u -w1 127.0.0.1 15140 +""" + +from __future__ import print_function + +import argparse +import datetime +import errno +import json +import os +import signal +import socket +import sys +import time + +DEFAULT_HOST = '127.0.0.1' +DEFAULT_PORT = 15140 +DEFAULT_LOGFILE = '/tmp/jibo-skills.log' +DEFAULT_MAX_BYTES = 2 * 1024 * 1024 +DEFAULT_BACKUPS = 3 + + +class Logd(object): + def __init__(self, host, port, logfile, max_bytes, backups, flush_every): + self.host = host + self.port = port + self.logfile = logfile + self.max_bytes = max_bytes + self.backups = backups + self.flush_every = flush_every + + self._sock = None + self._stop = False + self._line_count = 0 + + def stop(self, *_args): + self._stop = True + + def _ensure_parent_dir(self): + parent = os.path.dirname(self.logfile) + if parent and not os.path.isdir(parent): + try: + os.makedirs(parent) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + def _rotate_if_needed(self): + if self.max_bytes <= 0: + return + try: + st = os.stat(self.logfile) + except OSError: + return + if st.st_size < self.max_bytes: + return + + # Rotate: logfile -> logfile.1 -> logfile.2 ... + for i in range(self.backups, 0, -1): + src = self.logfile + ('' if i == 0 else '.%d' % i) + dst = self.logfile + '.%d' % (i + 1) + if i == self.backups: + # drop oldest + try: + os.unlink(self.logfile + '.%d' % (i + 1)) + except OSError: + pass + try: + if os.path.exists(src): + os.rename(src, dst) + except OSError: + pass + + try: + os.rename(self.logfile, self.logfile + '.1') + except OSError: + pass + + def _format_line(self, payload, addr): + ts = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ') + src = '%s:%s' % (addr[0], addr[1]) + + txt = payload.strip() + if not txt: + return None + + if txt.startswith('{') and txt.endswith('}'): + try: + obj = json.loads(txt) + tag = obj.get('tag', 'skill') + level = obj.get('level', 'info') + msg = obj.get('msg', '') + data = obj.get('data', None) + if data is not None: + try: + data_txt = json.dumps(data, separators=(',', ':'), sort_keys=True) + except Exception: + data_txt = repr(data) + return '%s [%s] %s %s %s\n' % (ts, level, tag, msg, data_txt) + return '%s [%s] %s %s\n' % (ts, level, tag, msg) + except Exception: + # fall back to raw + pass + + return '%s [info] raw %s %s\n' % (ts, src, txt) + + def serve_forever(self): + self._ensure_parent_dir() + + self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self._sock.bind((self.host, self.port)) + self._sock.settimeout(0.5) + + f = None + try: + f = open(self.logfile, 'a') + while not self._stop: + try: + data, addr = self._sock.recvfrom(65535) + except socket.timeout: + continue + except socket.error: + continue + + try: + if isinstance(data, bytes): + try: + payload = data.decode('utf-8', 'replace') + except Exception: + payload = str(data) + else: + payload = str(data) + except Exception: + continue + + line = self._format_line(payload, addr) + if not line: + continue + + self._rotate_if_needed() + try: + f.write(line) + self._line_count += 1 + if self.flush_every > 0 and (self._line_count % self.flush_every) == 0: + try: + f.flush() + os.fsync(f.fileno()) + except Exception: + pass + except Exception: + # best effort: reopen file if it moved/rotated + try: + f.close() + except Exception: + pass + try: + f = open(self.logfile, 'a') + except Exception: + time.sleep(0.25) + finally: + try: + if f: + f.flush() + f.close() + except Exception: + pass + try: + if self._sock: + self._sock.close() + except Exception: + pass + + +def daemonize(pidfile): + # Double-fork daemonize (POSIX) + try: + pid = os.fork() + if pid > 0: + os._exit(0) + except OSError: + raise + + os.setsid() + + try: + pid = os.fork() + if pid > 0: + os._exit(0) + except OSError: + raise + + # Redirect stdio + sys.stdout.flush() + sys.stderr.flush() + si = open('/dev/null', 'r') + so = open('/dev/null', 'a+') + se = open('/dev/null', 'a+') + os.dup2(si.fileno(), sys.stdin.fileno()) + os.dup2(so.fileno(), sys.stdout.fileno()) + os.dup2(se.fileno(), sys.stderr.fileno()) + + if pidfile: + try: + with open(pidfile, 'w') as pf: + pf.write(str(os.getpid())) + except Exception: + pass + + +def main(argv): + ap = argparse.ArgumentParser(description='Jibo Skills UDP log daemon') + ap.add_argument('--host', default=os.environ.get('JIBO_LOGD_HOST', DEFAULT_HOST)) + ap.add_argument('--port', type=int, default=int(os.environ.get('JIBO_LOGD_PORT', str(DEFAULT_PORT)))) + ap.add_argument('--logfile', default=os.environ.get('JIBO_LOGD_FILE', DEFAULT_LOGFILE)) + ap.add_argument('--max-bytes', type=int, default=int(os.environ.get('JIBO_LOGD_MAX_BYTES', str(DEFAULT_MAX_BYTES)))) + ap.add_argument('--backups', type=int, default=int(os.environ.get('JIBO_LOGD_BACKUPS', str(DEFAULT_BACKUPS)))) + ap.add_argument('--flush-every', type=int, default=int(os.environ.get('JIBO_LOGD_FLUSH_EVERY', '1'))) + ap.add_argument('--daemonize', action='store_true') + ap.add_argument('--pidfile', default=os.environ.get('JIBO_LOGD_PIDFILE', '/tmp/jibo-skills-logd.pid')) + + args = ap.parse_args(argv) + + logd = Logd(args.host, args.port, args.logfile, args.max_bytes, args.backups, args.flush_every) + + signal.signal(signal.SIGTERM, logd.stop) + signal.signal(signal.SIGINT, logd.stop) + + if args.daemonize: + daemonize(args.pidfile) + + logd.serve_forever() + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logpanel/__pycache__/jibo_logpanel.cpython-313.pyc b/V3.1/build/opt/jibo/Jibo/Skills/tools/robot/logpanel/__pycache__/jibo_logpanel.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0af4d9e0ea2a233ba5798b7d2ee995ec0c86b26d GIT binary patch literal 20210 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 + + + + + Jibo Skills Logs + + + +

+
Jibo Skills Logs (connecting)
+
+ + + + +
+
+
+ + + + +""" + + +def _tail_last_lines(path, max_lines): + if max_lines <= 0: + return [] + + try: + f = open(path, 'rb') + except Exception: + return [] + + try: + # naive but safe: read entire file if small, else chunk backwards + try: + size = os.path.getsize(path) + except Exception: + size = 0 + + if size <= 0: + return [] + + # read up to ~256KB from end + read_size = min(size, 256 * 1024) + f.seek(-read_size, os.SEEK_END) + data = f.read(read_size) + + try: + txt = data.decode('utf-8', 'replace') + except Exception: + try: + txt = data.decode('latin-1', 'replace') + except Exception: + txt = str(data) + + lines = txt.splitlines() + if len(lines) > max_lines: + lines = lines[-max_lines:] + return lines + finally: + try: + f.close() + except Exception: + pass + + +class ThreadedHTTPServer(ThreadingMixIn, HTTPServer): + daemon_threads = True + + +class Handler(BaseHTTPRequestHandler): + server_version = "JiboLogPanel/0.1" + # Use HTTP/1.0 semantics to avoid needing chunked encoding. + protocol_version = "HTTP/1.0" + + try: + _text_type = unicode # Py2 + except NameError: + _text_type = str # Py3 + + def _send(self, code, content_type, body): + if isinstance(body, self._text_type): + body = body.encode('utf-8') + self.send_response(code) + self.send_header('Content-Type', content_type) + self.send_header('Content-Length', str(len(body))) + self.send_header('Cache-Control', 'no-cache') + self.end_headers() + self.wfile.write(body) + + def do_GET(self): + parsed = urlparse.urlparse(self.path) + path = parsed.path + qs = urlparse.parse_qs(parsed.query) + + if path == '/' or path == '/index.html': + return self._send(200, 'text/html; charset=utf-8', INDEX_HTML) + + if path == '/health': + return self._send(200, 'text/plain; charset=utf-8', 'ok') + + if path == '/events': + return self._handle_events(qs) + + if path == '/tail': + return self._handle_tail(qs) + + return self._send(404, 'text/plain; charset=utf-8', 'not found') + + def _handle_tail(self, qs): + logfile = getattr(self.server, 'logfile', '/tmp/jibo-skills.log') + try: + pos = int((qs.get('pos') or ['0'])[0]) + except Exception: + pos = 0 + try: + max_bytes = int((qs.get('max') or ['8192'])[0]) + except Exception: + max_bytes = 8192 + if max_bytes <= 0: + max_bytes = 8192 + if max_bytes > 65536: + max_bytes = 65536 + + out = { 'pos': 0, 'lines': [] } + + try: + st = os.stat(logfile) + size = st.st_size + if pos < 0 or pos > size: + pos = 0 + with open(logfile, 'rb') as f: + f.seek(pos) + data = f.read(max_bytes) + new_pos = f.tell() + except Exception: + out['pos'] = 0 + out['lines'] = [] + body = json.dumps(out) if json else '{"pos":0,"lines":[]}' + return self._send(200, 'application/json; charset=utf-8', body) + + try: + try: + txt = data.decode('utf-8', 'replace') + except Exception: + txt = data.decode('latin-1', 'replace') + # splitlines() drops trailing newline; that's fine for display + lines = txt.replace('\r', '').splitlines() + except Exception: + lines = [] + + out['pos'] = new_pos + out['lines'] = lines + body = json.dumps(out) if json else '{"pos":%d,"lines":[]}' % new_pos + return self._send(200, 'application/json; charset=utf-8', body) + + def _handle_events(self, qs): + logfile = getattr(self.server, 'logfile', '/tmp/jibo-skills.log') + try: + lines = int((qs.get('lines') or ['0'])[0]) + except Exception: + lines = 0 + + self.send_response(200) + self.send_header('Content-Type', 'text/event-stream; charset=utf-8') + self.send_header('Cache-Control', 'no-cache') + self.send_header('X-Accel-Buffering', 'no') + self.send_header('Access-Control-Allow-Origin', '*') + self.send_header('Connection', 'keep-alive') + self.end_headers() + + # Ensure the connection stays open. + try: + self.close_connection = False + except Exception: + pass + + def _b(s): + try: + if isinstance(s, bytes): + return s + except Exception: + pass + try: + if isinstance(s, self._text_type): + return s.encode('utf-8') + except Exception: + pass + try: + return str(s).encode('utf-8') + except Exception: + return b'' + + def _write(data_bytes): + if not data_bytes: + return + try: + self.wfile.write(data_bytes) + try: + self.wfile.flush() + except Exception: + pass + except Exception: + raise + + # Advise client to retry quickly. + try: + _write(_b('retry: 1000\n\n')) + except Exception: + return + + # initial payload: last N lines + try: + for line in _tail_last_lines(logfile, lines): + _write(_b('data: ' + line.replace('\r', '') + '\n\n')) + except Exception: + pass + + # follow + f = None + + last_inode = None + try: + try: + st = os.stat(logfile) + last_inode = st.st_ino + except Exception: + last_inode = None + + last_ping = time.time() + + def _try_open_follow(): + try: + fh = open(logfile, 'rb') + fh.seek(0, os.SEEK_END) + return fh + except Exception: + return None + + f = _try_open_follow() + + while True: + # handle rotation: reopen if inode changes + try: + st2 = os.stat(logfile) + if last_inode is not None and st2.st_ino != last_inode: + try: + if f: + f.close() + except Exception: + pass + try: + f = open(logfile, 'rb') + f.seek(0, os.SEEK_END) + last_inode = st2.st_ino + except Exception: + f = None + except Exception: + pass + + if not f: + # keep-alive heartbeat even if file missing + now = time.time() + if now - last_ping >= 5.0: + last_ping = now + try: + _write(_b(': ping\n\n')) + except Exception: + break + time.sleep(0.5) + continue + + pos = f.tell() + chunk = f.readline() + if not chunk: + f.seek(pos) + now = time.time() + if now - last_ping >= 5.0: + last_ping = now + try: + _write(_b(': ping\n\n')) + except Exception: + break + time.sleep(0.25) + continue + + try: + try: + line = chunk.decode('utf-8', 'replace') + except Exception: + line = chunk.decode('latin-1', 'replace') + line = line.rstrip('\n').rstrip('\r') + _write(_b('data: ' + line + '\n\n')) + except Exception: + # client disconnected + break + finally: + try: + if f: + f.close() + except Exception: + pass + + def log_message(self, fmt, *args): + # keep quiet (panel should not spam stdout) + return + + +def main(argv): + ap = argparse.ArgumentParser(description='Jibo Skills Log Panel (SSE)') + ap.add_argument('--bind', default=os.environ.get('JIBO_LOGPANEL_BIND', '0.0.0.0')) + ap.add_argument('--port', type=int, default=int(os.environ.get('JIBO_LOGPANEL_PORT', '15150'))) + ap.add_argument('--logfile', default=os.environ.get('JIBO_LOGD_FILE', '/tmp/jibo-skills.log')) + + args = ap.parse_args(argv) + + httpd = ThreadedHTTPServer((args.bind, args.port), Handler) + httpd.logfile = args.logfile + + print('logpanel listening on %s:%d, logfile=%s' % (args.bind, args.port, args.logfile)) + try: + httpd.serve_forever() + except KeyboardInterrupt: + pass + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/V3.1/filesystem.parts b/V3.1/filesystem.parts deleted file mode 100644 index e69de29b..00000000 diff --git a/docs.tar.gz b/docs.tar.gz deleted file mode 100644 index 7179bcd20d672b9cb5f5fe6e81251cf3aae24397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91564 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
Dk}U>G-Yst-)Q1NJxw)zpXC6TyCw9?>5tL9F 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 z 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%0AuykH41Yya<;^#6nH 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 b&uwu2{`39k`_GGim!JOuwiqXd00s#F6Jrow diff --git a/docs/Runtime.js b/docs/Runtime.js deleted file mode 100644 index 111adc8b..00000000 --- a/docs/Runtime.js +++ /dev/null @@ -1,199 +0,0 @@ -/** - * Enum of RunMode types. - * - * ``` - * jibo.RunMode.SIMULATOR - * ``` - * - * @typedef module:jibo.Runtime#RunMode - * @prop {string} SIMULATOR Running in the simulator. - * @prop {string} REMOTELY Running in remote mode. - * @prop {string} ON_ROBOT Running on the robot. - * @prop {string} UNIT_TESTS Running in dev mode, no SSM. - */ - - /** Running in the simulator. */ - - /** Running in remote mode. */ - - /** Running on the robot. */ - - /** Running in dev mode, no SSM */ - -/** - * Internal object for an installed plugin - */ - -/** - * @prop {jibo.animdb} animdb The Jibo Animation Database. - * @prop {jibo.bt} bt SDK behaviors and decorators. - * @prop {jibo.context} context Context Service (on robot context provider for Cloud). - * @prop {jibo.embodied} embodied Jibo Embodied Dialog. - * @prop {jibo.emotion} emotion Jibo Emotion System. - * @prop {jibo.expression} expression Jibo's expression client. - * @prop {jibo.face} face API to jibo's face. - * @prop {jibo.flow} flow API for the Jibo Flow Editor. - * @prop {jibo.globalEvents} globalEvents Typed global events for events module. - * @prop {jibo.kb} kb Knowledge Base API - * @prop {jibo.loader} loader Load skill assets. - * @prop {jibo.lps} lps Jibo's Local Perceptual Space. - * @prop {jibo.media} media Jibo's Media API (camera and pictures). - * @prop {jibo.mim} mim Jibo's multimodal interaction manager. - * @prop {jibo.sound} sound Manage playback of audio media. - * @prop {jibo.system} system Non-motion related body services. - * @prop {jibo.timer} timer Jibo's main update loop. - * @prop {jibo.tts} tts Text-to-speech. - * @prop {jibo.utils} utils Utility methods for animation, audio, and pathing. - * @prop {jibo.versions} versions Versions for skills-service-manager, platform, and jibo. - * @module jibo - * @description The Jibo SDK singleton. - */ - - /** - * `true` if Jibo is currently being initialized. - * @name module:jibo.Runtime.isInitializing - * @type {Boolean} - * @readOnly - * @default false - */ - - /** - * `true` if Jibo has finished being initialized. - * @name module:jibo.Runtime.isInitialized - * @type {Boolean} - * @readOnly - * @default false - */ - - /** - * Runtime is running in Electron-based environment. - * @name module:jibo.Runtime.electron - * @type {Boolean} - * @readOnly - */ - - /** - * Collection of installed plugins. - * @name module:jibo.Runtime._plugins - * @type {Boolean} - * @readOnly - * @private - */ - - /** - * Singleton instance of jibo. - * @name module:jibo.Runtime._instance - * @type {jibo.Runtime} - * @readOnly - * @private - */ - - /** - * Current version of the Jibo Runtime. - * @name module:jibo.Runtime#version - * @type {String} - * @readOnly - */ - - /** - * Electron IPCRenderer context of the Jibo Runtime. - * @name module:jibo.Runtime#electronContext - * @type {Object} - * @readOnly - */ - - /** For the SDK tool */ - - /** - * @name module:jibo.Runtime#behaviorEmitter - * @type {BehaviorEmitter} - * @private - */ - - /** - * @name module:jibo.Runtime#session - * @type {SessionManager} - * @private - */ - - /** - * @name module:jibo.Runtime#systemManager - * @type {SystemManager} - * @private - */ - - /** - // * @name module:jibo.Runtime#visualize - // * @type {Object} - // * @private - // */ - - /** - * Initialization options - * @name module:jibo.Runtime#options - * @type {Object} - * @private - */ - - /** - * @description - * Initializes the jibo SDK. - * - * ``` - * let jibo = require('jibo'); - * jibo.init('face', (e) => { - * if (e) return console.error(e); - * // Setup! - * }); - * ``` - * @method module:jibo.Runtime#init - * @param {Object|Function|String|HTMLElement} [options] Either the options, canvas DOM ID or DOM Element for canvas or callback - * @param {DOMElement|String} [options.display] Either the canvas DOM or DOM ID - * @param {Function} [callback] Called when the SDK is finished initializing. - */ - - /** - * Register an external plugin with the jibo runtime. - * @method module:jibo.Runtime#registerPlugin - * @private - * @param {jibo.PluginConstructor} pluginClass The class definition. - * @param {String} id The identifier of the plugin. - * @param {Object} [options] Additional register options or the API name. - * @param {Boolean} [options.api=false] If the plugin is also an API on jibo. - * @param {String[]} [options.depends] The plugin dependencies. - * @param {Boolean} [options.electron=false] If the plugin is electron-only. - */ - - /** - * Stores which mode the current skill is running. It can be: `jibo.RunMode.SIMULATOR`, `jibo.RunMode.REMOTELY`, or `jibo.RunMode.ON_ROBOT`. - * - * ``` - * let jibo = require('jibo'); - * if( jibo.runMode === jibo.RunMode.SIMULATOR ){ - * // ... - * } - * ``` - * @name module:jibo.Runtime.runMode - * @type {RunMode} - * @readOnly - */ - - /** - * Setup plugins to create the jibo API. - * @method module:jibo.Runtime#_installPlugins - * @private - */ - - /** - * Setup plugins to create the jibo API. - * @method module:jibo.Runtime#_initPlugins - * @private - */ - - /** - * Gets singleton instance of Jibo. - * @name module:jibo.Runtime.instance - * @type {jibo} - * @private - * @readOnly - */ \ No newline at end of file diff --git a/docs/bt/BaseElement.js b/docs/bt/BaseElement.js deleted file mode 100644 index b5740e11..00000000 --- a/docs/bt/BaseElement.js +++ /dev/null @@ -1,135 +0,0 @@ -/** - * @class BaseElement - * @memberof jibo.bt - * @private - * @description Parent class for Behavior and Decorator. - * - * Subclasses: {@link jibo.bt.behaviors.Behavior|Behavior}, {@link jibo.bt.behaviors.ParentBehavior|ParentBehavior}, {@link jibo.bt.behaviors.Decorator|Decorator} - * - * @param {Object} [options] Options for the behavior - */ - - /** - * The list of options - * @name jibo.bt.Behavior#options - * @type {Object} - * @readOnly - */ - - /** - * The list of options - * @name jibo.bt.Decorator#options - * @type {Object} - * @readOnly - */ - - /** - * The current internal status of the element - * @name jibo.bt.BaseElement#_currentStatus - * @type {String} - * @private - */ - - /** - * Instance of the blackboard - * @name jibo.bt.Behavior#blackboard - * @type {jibo.bt.Blackboard} - * @readOnly - */ - - /** - * Instance of the blackboard - * @name jibo.bt.Decorator#blackboard - * @type {jibo.bt.Blackboard} - * @readOnly - */ - - /** - * Instance of the behavior emitter - * @name jibo.bt.Behavior#emitter - * @type {jibo.bt.BehaviorEmitter} - * @readOnly - */ - - /** - * Instance of the behavior emitter - * @name jibo.bt.Decorator#emitter - * @type {jibo.bt.BehaviorEmitter} - * @readOnly - */ - - /** - * Name of the asset pack - * @name jibo.bt.Behavior#assetPack - * @type {String} - * @readOnly - */ - - /** - * Name of the asset pack - * @name jibo.bt.Decorator#assetPack - * @type {String} - * @readOnly - */ - - /** - * Name of the behavior - * @name jibo.bt.Behavior#name - * @type {String} - * @readOnly - */ - - /** - * Name of the behavior - * @name jibo.bt.Decorator#name - * @type {String} - * @readOnly - */ - - /** - * Get the current status - * @name jibo.bt.Behavior#currentStatus - * @type {String} - * @readOnly - */ - - /** - * Get the current status - * @name jibo.bt.Decorator#currentStatus - * @type {String} - * @readOnly - */ - - /** - * Stops the behavior or decorator, must override - * @method jibo.bt.Behavior#stop - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ - - /** - * Stops the behavior or decorator, must override - * @method jibo.bt.Decorator#stop - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ - - /** - * Destroys the behavior, removes all references. - * @method jibo.bt.Behavior#destroy - */ - - /** - * Destroys the decorator, removes all references. - * @method jibo.bt.Decorator#destroy - */ - - /** - * Stops and Destroys the behavior or decorator - * @method jibo.bt.Behavior#stopAndDestroy - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ - - /** - * Stops and Destroys the behavior or decorator - * @method jibo.bt.Decorator#stopAndDestroy - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ \ No newline at end of file diff --git a/docs/bt/Behavior.js b/docs/bt/Behavior.js deleted file mode 100644 index d7a322f8..00000000 --- a/docs/bt/Behavior.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * @class Behavior - * @memberof jibo.bt - * @description The baseclass to all behaviors. - * - * Subclasses: {@link jibo.bt.behaviors} - * @param {Object} [options] Options for the behavior - * @param {String} [options.name=''] Name of the behavior instance - * @param {Array} [options.decorators=[]] Decorators - * @param {jibo.bt.Blackboard} [options.blackboard=null] Blackboard instance - * @param {jibo.bt.BehaviorEmitter} [options.emitter=null] Emitter instance - * @param {String} [options.assetPack=''] Name of the asset pack - * @param {Object} [defaultOptions] Defaults for options - */ - - /** - * Reference to the composite parent behavior - * @name jibo.bt.Behavior#parent - * @type {jibo.bt.ParentBehavior} - * @readOnly - */ - - /** - * List of decorators to wait on start - * @name jibo.bt.Behavior#waitDecorators - * @type {Array} - * @private - */ - - /** - * Number of wait decorators - * @name jibo.bt.Behavior#waitDecoratorsLength - * @type {int} - * @private - */ - - /** - * Destroy this - */ - - /** - * Collection of decorators - * @name jibo.bt.Behavior#decorators - * @type {Array} - * @readOnly - */ - - /** - * Starts the behavior or decorator - * @method jibo.bt.Behavior#start - * @returns {Boolean} `true` if this element is started successfully. `false` otherwise. - */ - - /** - * Called every frame. Must be overridden in subclass. - * @method jibo.bt.Behavior#update - * @returns {jibo.bt.Status} The current status of this behavior. - */ - - /** - * Internal pause the behavior - * @method jibo.bt.Behavior#_pause - * @private - */ - - /** - * Internal unpause the behavior - * @method jibo.bt.Behavior#_unpause - * @private - */ - - /** - * Internal start the behavior - * @method jibo.bt.Behavior#_start - * @private - * @return {Boolean} Status result - */ - - /** - * Internal stop the behavior - * @method jibo.bt.Behavior#_stop - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - * @private - */ - - /** - * Internal update the behavior - * @method jibo.bt.Behavior#_update - * @private - * @return {jibo.bt.Status} Resulting status - */ \ No newline at end of file diff --git a/docs/bt/BehaviorEmitter.js b/docs/bt/BehaviorEmitter.js deleted file mode 100644 index d7888119..00000000 --- a/docs/bt/BehaviorEmitter.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @class BehaviorEmitter - * @extends EventEmitter - * @memberof jibo.bt - */ \ No newline at end of file diff --git a/docs/bt/BehaviorTree.js b/docs/bt/BehaviorTree.js deleted file mode 100644 index 6aad9a04..00000000 --- a/docs/bt/BehaviorTree.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * @class BehaviorTree - * @extends EventEmitter - * @memberof jibo.bt - * @description Object for controlling the playback of the behavior tree. - * - * @param {jibo.bt.Behavior} root The root behavior of the tree. - * @param {jibo.bt.Blackboard} blackboard Reference to the global Blackboard instance. - * @param {Object} notepad Reference to a temporary object to use. - * @param {Object} result Reference to the tree's result. - * @param {jibo.bt.BehaviorEmitter} emitter Reference to the behavior's emitter. - */ - - /** - * Get the current status of the behavior tree - * @name jibo.bt.BehaviorTree#currentStatus - * @type {jibo.bt.Status} - * @readOnly - */ - - /** - * Start the behavior tree. - * @method jibo.bt.BehaviorTree#start - * @return {Boolean} Status result - */ - - /** - * When behavior tree starts - * @event jibo.bt.BehaviorTree#start - */ - - /** - * Stop the behavior tree. - * @method jibo.bt.BehaviorTree#stop - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ - - /** - * When behavior tree stops - * @event jibo.bt.BehaviorTree#stop - */ - - /** - * Pause the behavior tree. - * @private - * @method jibo.bt.BehaviorTree#pause - */ - - /** - * When behavior tree pauses - * @event jibo.bt.BehaviorTree#pause - */ - - /** - * Resume the behavior tree. - * @private - * @method jibo.bt.BehaviorTree#pause - */ - - /** - * When behavior tree resumes - * @event jibo.bt.BehaviorTree#unpause - */ - - /** - * Called every frame. - * @method jibo.bt.BehaviorTree#update - * @returns {jibo.bt.Status} The current status of this behavior. - */ - - /** - * Destroy and don't use after this - * @method jibo.bt.BehaviorTree#destroy - */ - - /** - * When behavior tree is destroyed - * @event jibo.bt.BehaviorTree#destroy - */ - - /** - * Stop and destroy, don't use after this - * @method jibo.bt.BehaviorTree#stopAndDestroy - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ \ No newline at end of file diff --git a/docs/bt/Blackboard.js b/docs/bt/Blackboard.js deleted file mode 100644 index 4ddb58e6..00000000 --- a/docs/bt/Blackboard.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * @class Blackboard - * @memberof jibo.bt - */ \ No newline at end of file diff --git a/docs/bt/Decorator.js b/docs/bt/Decorator.js deleted file mode 100644 index 93429123..00000000 --- a/docs/bt/Decorator.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @class Decorator - * @memberof jibo.bt - * @description Baseclass for all decorators. Decorators can force a behavior to succeed or fail. They can restart - * a behavior once it's failed or succeeded, and they can modify when a behavior starts. - * - * Subclasses: {@link jibo.bt.decorators} - * @param {Object} [options] Options for the decorator - * @param {String} [options.name=''] Name of the decorator instance - * @param {jibo.bt.Blackboard} [options.blackboard=null] Blackobard instance - * @param {jibo.bt.BehaviorEmitter} [options.emitter=null] Emitter instance - * @param {String} [options.assetPack=''] Name of the asset pack - * @param {Object} [defaultOptions] Defaults for options - */ - - /** - * The parent behavior - * @name jibo.bt.Decorator#behavior - * @type {Behavior} - * @readOnly - */ - - /** - * Starts the behavior or decorator - * @method jibo.bt.Decorator#start - * @returns {Boolean|Status.WAIT} `true` if this element is started successfully. `false` otherwise. `Status.WAIT` will be returned if the decorated behavior should not start yet. - */ - - /** - * Called every frame. Gives a chance for this decorator to change the status of a behavior. - * @method jibo.bt.Decorator#update - * @param result {jibo.bt.Status} The current status of the behavior this decorator is decorating. - * @returns {jibo.bt.Status} The modified status of the behavior this decorator is decorating. - */ - - /** - * Destroy this - */ - - /** - * Internal start from the behavior tree level - * @method jibo.bt.Decorator#_start - * @private - * @return {Boolean} Success - */ - - /** - * Internal stop from the behavior tree level - * @method jibo.bt.Decorator#_stop - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - * @private - */ - - /** - * Internal update from the behavior tree level - * @method jibo.bt.Decorator#_update - * @private - * @param {jibo.bt.Status} result - * @return {jibo.bt.Status} resulting status - */ \ No newline at end of file diff --git a/docs/bt/Factory.js b/docs/bt/Factory.js deleted file mode 100644 index f61f103a..00000000 --- a/docs/bt/Factory.js +++ /dev/null @@ -1,86 +0,0 @@ -/** - * @class BehaviorConstructor - * @memberof jibo.bt - * @description Abstract type alias (needed by the Factory function) for the constructors of the behavior and decorator classes. - */ - -/** - * Utility methods for registering behaviors and creating behaviors trees. - * @namespace jibo.bt - */ - - /** - * Map of behaviors - * @name jibo.bt#_behaviors - * @type {Object} - * @private - */ - - /** - * The default blackboard - * @name jibo.bt#blackboard - * @type {jibo.bt.Blackboard} - * @private - */ - - /** - * Register a behavior or decorator globally - * @name jibo.bt#register - * @method - * @param {String} name The PascalCased name for the behavior - * @param {String} namespace This behavior's namespace. Pass in a globally unique name for this namesapce. - * @param {Module} classRef Class reference for the behavior or decorator - */ - - /** - * Add all behaviors - * @method jibo.bt#registerCore - * @private - */ - - /** - * Creates a runnable behavior tree from a bt file import. - * @method jibo.bt#create - * @param {String|Function} uri Relative or absolute path to a `.bt` file or module export of behavior tree. - * @param {Object} [overrides] Options for populating behavior tree globals. - * @param {jibo.bt.Blackboard} [overrides.blackboard] Override the default blackboard object for this behavior tree. - * @param {Object} [overrides.notepad] Provide your own notepad object instead of the default one. - * @param {String} [overrides.assetPack] The asset pack name to use for loading assets in this tree. - * @returns {jibo.bt.BehaviorTree} - */ - - /** - * Creates and runs a runnable behavior tree from a bt file import. - * ``` - * const jibo = require('jibo'); - * jibo.init('face', (err) => { - * jibo.bt.run('./behaviors/main', function(status){}); - * }); - * - * // Other supported APIs - * jibo.bt.run('./behaviors/main'); - * jibo.bt.run('./behaviors/main', (status) => {}); - * const overrides = {}; - * jibo.bt.run('./behaviors/main', overrides); - * jibo.bt.run('./behaviors/main', overrides, (status) => {}); - * ``` - * - * @method jibo.bt#run - * @param {String|Function} uri Relative or absolute path to a `.bt` file or module export of behavior tree. - * @param {Object} [overrides] Options for populating behavior tree globals. - * @param {jibo.bt.Blackboard} [overrides.blackboard] Override the default blackboard object for this behavior tree. - * @param {Object} [overrides.notepad] Provide your own notepad object instead of the default one. - * @param {String} [overrides.assetPack] The asset pack name to use for loading assets in this tree. - * @param {Function} onFinishedCallback The callback which gets called when the behavior tree has reached a status of FAILED, SUCCEEDED, or INTERRUPTED. - * @param {Status} status The status which the behavior tree finished with. - * @returns {jibo.bt.BehaviorTree} - */ - - /** - * Resolves the path in relation to a calleeDirname directory. If the supplied uri is an absolute path, the uri is - * returned unmodified - * @param {String} calleeDirname The directory name where the uri is relative to - * @param {String} uri The relative or absolute uri to a file in relation to the calleeDirname - * @returns {String} The result absolute path - * - */ \ No newline at end of file diff --git a/docs/bt/ParentBehavior.js b/docs/bt/ParentBehavior.js deleted file mode 100644 index a0c05728..00000000 --- a/docs/bt/ParentBehavior.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @class ParentBehavior - * @extends jibo.bt.Behavior - * @memberof jibo.bt - * @description The baseclass to all behaviors that contain a collection of child Behaviors. - * - * Subclasses: {@link jibo.bt.behaviors.Parallel|Parallel}, {@link jibo.bt.behaviors.Random|Random}, {@link jibo.bt.behaviors.Sequence|Sequence}, {@link jibo.bt.behaviors.Switch|Switch} - * - * @param {Object} [options] See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {Array} [options.children=[]] Child behaviors - * @param {Object} [defaultOptions] Defaults for options - */ - - /** - * Destroy this - */ - - /** - * Set the collection of children - * @name jibo.bt.ParentBehavior#children - * @type {Array} - */ - - /** - * Internal stop the behavior - * @method jibo.bt.ParentBehavior#_stop - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - * @private - */ \ No newline at end of file diff --git a/docs/bt/Status.js b/docs/bt/Status.js deleted file mode 100644 index 57528efc..00000000 --- a/docs/bt/Status.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Enumeration of behavior states - * @class Status - * @memberof jibo.bt - */ - - /** - * The behavior or flow succeeded. - * @name jibo.bt.Status.SUCCEEDED - * @type {String} - * @readOnly - * @default "SUCCEEDED" - */ - - /** - * The behavior or flow failed. - * @name jibo.bt.Status.FAILED - * @type {String} - * @readOnly - * @default "FAILED" - */ - - /** - * The behavior or flow was interrupted. - * @name jibo.bt.Status.INTERRUPTED - * @type {String} - * @readOnly - * @default "INTERRUPTED" - */ - - /** - * The behavior is in progress and hasn't returned. - * (Not returned for flows) - * @name jibo.bt.Status.IN_PROGRESS - * @type {String} - * @readOnly - * @default "IN_PROGRESS" - */ - - /** - * The behavior is in an invalid state. - * (Not returned for flows) - * @name jibo.bt.Status.INVALID - * @type {String} - * @readOnly - * @default "INVALID" - */ - - /** - * Don't update the state. - * (Not returned for flows) - * @name jibo.bt.Status.PAUSED - * @type {String} - * @readOnly - * @default "PAUSED" - */ - - /** - * Only used by decorators. - * @name jibo.bt.Status.WAIT - * @type {String} - * @readOnly - * @default "WAIT" - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Blink.js b/docs/bt/behaviors/Blink.js deleted file mode 100644 index b5fb60ba..00000000 --- a/docs/bt/behaviors/Blink.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @class Blink - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Plays a single blink animation. Succeeds immediately. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/ExecuteScript.js b/docs/bt/behaviors/ExecuteScript.js deleted file mode 100644 index 3550c86a..00000000 --- a/docs/bt/behaviors/ExecuteScript.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @class ExecuteScript - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description - * Executes arbitrary synchronous JavaScript. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {Function} options.exec Function to execute. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/ExecuteScriptAsync.js b/docs/bt/behaviors/ExecuteScriptAsync.js deleted file mode 100644 index 141ba399..00000000 --- a/docs/bt/behaviors/ExecuteScriptAsync.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @callback jibo.bt.behaviors.ExecuteScriptAsync~ExecuteFunction - * @description This behavior calls this function. ExecuteScriptAsync will succeed or fail only when one of the - * two callbacks are called. - * @param {Function} succeed Call this function when you want this behavior to succeed. - * @param {Function} fail Call this function when you want this behavior to fail. - */ - -/** - * @class ExecuteScriptAsync - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Asynchronously executes JavaScript. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {jibo.bt.behaviors.ExecuteScriptAsync~ExecuteFunction} options.exec Function to execute. Behavior will not stop unless one of the callbacks - * are called. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Listen.js b/docs/bt/behaviors/Listen.js deleted file mode 100644 index 2ba7a652..00000000 --- a/docs/bt/behaviors/Listen.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @typedef {Object} jibo.bt.behaviors.Listen~Options - * @property {boolean} heyJibo Listen for "Hey, Jibo" first. - * @property {boolean} detectEnd Listen for end of speech. - * @property {boolean} incremental Return incremental ASR results as they are streamed from the cloud. - * @property {String} authenticateSpeaker Authenticates against that person. - */ - -/** - * Function that returns the options object. - * @callback jibo.bt.behaviors.Listen~GetOptions - * @returns {jibo.bt.behaviors.Listen~Options} - */ - -/** - * Function that returns the options object. - * @callback jibo.bt.behaviors.Listen~OnResult - * @param {jibo.bt.ListenEmitter} listener Use this instance to listen for listen events. - */ - -/** - * @deprecated - * @class Listen - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Performs audio speech recognition and applies and parses the results according to a rules file. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {jibo.bt.behaviors.Listen~GetOptions} options.getOptions Returns the options object. - * @param {String} options.rule Path the to `.rule` file. This assumes the path starts at `${project}/rules`. - * @param {jibo.bt.behaviors.Listen~OnResult} options.onResult Called and passed a {@link jibo.bt.behaviors.ListenEmitter|ListenEmitter} object. Events are fired from the Listener - * at certain points in this behavior's lifecycle. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/ListenEmbedded.js b/docs/bt/behaviors/ListenEmbedded.js deleted file mode 100644 index 313c8137..00000000 --- a/docs/bt/behaviors/ListenEmbedded.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @typedef {Object} jibo.bt.behaviors.ListenEmbedded~Options - */ - -/** - * Called when the {@link jibo.bt.EmbeddedListenEmitter|EmbeddedListenEmitter} is constructed. - * @callback jibo.bt.behaviors.ListenEmbedded~OnResult - * @param {jibo.bt.EmbeddedListenEmitter} listener Use this instance to listen for listen events. - */ - -/** - * @deprecated - * @class ListenEmbedded - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Succeeds when when the specified audio phrase is spotted. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {jibo.bt.behaviors.ListenEmbedded~Rules} options.rule The embedded rule to listen for. - * @param {jibo.bt.behaviors.ListenEmbedded~OnResult} options.onResult Called and passed a {@link jibo.bt.EmbeddedListenEmitter|EmbeddedListenEmitter} object. Events are - * fired from the emitter at certain points in this behavior's lifecycle. - */ - - /** - * Enum for embedded listen rule types. - * @name jibo.bt.behaviors.ListenEmbedded#Rules - * @readOnly - * @type {enum} - * @prop {string} HEY_jibo Listed for "Hey Jibo". - */ \ No newline at end of file diff --git a/docs/bt/behaviors/ListenJs.js b/docs/bt/behaviors/ListenJs.js deleted file mode 100644 index 2f974a71..00000000 --- a/docs/bt/behaviors/ListenJs.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @typedef {Object} jibo.bt.behaviors.ListenJs~Options - * @property {boolean} heyJibo Listen for "Hey, Jibo" first. - * @property {boolean} detectEnd Listen for end of speech. - * @property {boolean} incremental Return incremental ASR results as they are streamed from the cloud. - * @property {String} authenticateSpeaker Authenticates against that person. - */ - -/** - * Function that returns the options object. - * @callback jibo.bt.behaviors.ListenJs~GetOptions - * @returns {jibo.bt.behaviors.ListenJs~Options} - */ - -/** - * Called when the {@link jibo.bt.behaviors.ListenEmitter|ListenEmitter} is constructed. - * @callback jibo.bt.behaviors.ListenJs~OnResult - * @param {jibo.bt.ListenEmitter} listener Use this instance to listen for listen events. - */ - -/** - * @deprecated - * @class ListenJs - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Performs audio speech recognition and applies and parses the results according to a rules file. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {jibo.bt.behaviors.ListenJs~GetOptions} options.getOptions Returns the options object. - * @param {Function} options.getRule This function returns a string representation of a rule. Use this behavior to dynamically generate rules files instead - * of loading a rule file from disk. - * @param {jibo.bt.behaviors.ListenJs~OnResult} options.onResult Called and passed a {@link jibo.bt.behaviors.ListenEmitter|ListenEmitter} object. Events are fired from the Listener - * at certain points in this behavior's lifecycle. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/LookAt.js b/docs/bt/behaviors/LookAt.js deleted file mode 100644 index c3c12fd1..00000000 --- a/docs/bt/behaviors/LookAt.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @class Point3D - * @memberof jibo.bt.behaviors.LookAt - * @description Defines a point in 3D space. - * @prop {number} x The forward-facing vector in Jibo's coordinate frame (meters). - * @prop {number} y The left-facing vector in Jibo's coordinate frame (meters). - * @prop {number} z The up-facing vector in Jibo's coordinate frame (meters). - */ - -/** - * @class LookAt - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Makes Jibo look at a 3D point in space. - * `LookAt` has two modes. In single-shot mode, this behavior makes Jibo look at the 3D point returned - * by `getTarget` and succeeds when Jibo reaches his this target. In continuous mode, `getTarget` is - * called every frame, and this behavior will remain in progress indefinitely until explicitly stopped by a - * parent bahevior or a decorator. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {Function} options.getTarget Returns a {@link jibo.bt.behaviors.LookAt.Point3D} object. - * @param {boolean} [options.isContinuous=false] `true` if this behavior is in continous-mode. `false` if in single-shot look-at. - * @param {Function} options.config Called and passed a {@link LookatBuilder} object for configuration purposes. Do not call {@link LookatBuilder#startLookat}. This is called automatically by the behavior. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Menu.js b/docs/bt/behaviors/Menu.js deleted file mode 100644 index 6d127b1e..00000000 --- a/docs/bt/behaviors/Menu.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Load or generate the menu configuration data. For the menu to function, the button actions must - * be an 'utterance' or 'press' event - no other button actions will be responded to. - * @callback jibo.bt.behaviors.Menu~GetConfig - * @param {Function} callback When config has been loaded or generated, pass it to this callback. - */ - -/** - * Called when a Menu times out or closes. Return value finds an exception handler within the flow. *Unhandled exceptions use the default behavior of returning to Jibo's idle state. - * @callback jibo.bt.behaviors.Menu~OnMenuClosed - * @param {boolean} timedOut `true` if the menu timed out, `false` if it was closed by the user. - * @param {jibo.face.views.MenuView} menu Created menu. Use to read menu position or any other information before the menu closes. - * @param {Function} overrideMenuTransition Override the transition out of the menu. Pass a [ChangeOptions]{@link jibo.face.views~ChangeOptions} to control the transition, or `remain` in order to leave the menu in place. - * @param {String} results.exception (Flow Only) Exception for the closed menu; either `~InteractionError.MenuTimeout` or `~InteractionError.MenuClosed`. - */ - -/** - * Called when an item has been chosen. - * @callback jibo.bt.behaviors.Menu~OnItemChosen - * @param {any} results Either the listen results or the button press event, depending on how the menu is configured. - * @param {jibo.face.views.MenuView} menu Created menu. Use to read menu position or any other information before the menu closes. - * @param {Function} overrideMenuTransition Call to override the transition out of the menu. Pass a [ChangeOptions]{@link jibo.face.views~ChangeOptions} to control the transition, or `remain` in order to leave the menu in place. - */ - -/** - * Called to confirm that a positional selection makes sense, allowing custom handling to select certain types of items, if desired. This is called when a user says something like 'open the one on the right', and is called before the onItemChosen callback. - * @callback jibo.bt.behaviors.Menu~OnPositionalSelect - * @param {jibo.mim.AsrResult} commandASR Data from NLU service. - * @param {Number} intendedIndex Index that the menu plans to use for selection. - * @param {jibo.face.views.MenuView} menu Created menu. Use to read button data, if you didn't keep track of it yourself. - * @returns {number} An item index to change what will be selected, or NaN to select nothing. Returning undefined will use the default behavior (selecting intendedIndex). - */ - -/** - * @class Menu - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description A single stage menu. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {jibo.bt.behaviors.Menu~GetConfig} options.getConfig Load or generate the menu config data. - * @param {jibo.bt.behaviors.Menu~OnMenuClosed} options.onMenuClosed Called if the menu times out or is closed. - * @param {jibo.bt.behaviors.Menu~OnItemChosen} options.onItemChosen Called when the user picks an item from the list. - * @param {jibo.bt.behaviors.Menu~OnPositionalSelect} options.onPositionalSelect Called when the user uses a positional selection voice command - */ - - /** - * Callback for button 'press' events from the menu. - * @method jibo.bt.Menu#onPressEvent - * @param {any} event Whatever the press event from the menu was, as defined in the view config. - * @private - */ - - /** - * Callback for when the list is closed for any reason. - * @method jibo.bt.Menu#onListClosed - * @private - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Mim.js b/docs/bt/behaviors/Mim.js deleted file mode 100644 index 0e604d1d..00000000 --- a/docs/bt/behaviors/Mim.js +++ /dev/null @@ -1,327 +0,0 @@ -/** - * @class ListenBundle - * @memberof jibo.mim - * @description Internal bundle of listen specific data. - * @private - */ - - /** - * Timeout duration in milliseconds. If NaN, do not timeout. - * @name jibo.mim.ListenBundle#timeout - * @type {Number} - */ - - /** - * Beginning of timeout in epoch time. Timeout is triggered when the difference between this - * time and current time is greater than timeout. - * @name jibo.mim.ListenBundle#startTime - * @type {Number} - */ - - /** - * Listener from jibo.mim#listenDelegate. - * @name jibo.mim.ListenBundle#listener - * @type {any} - */ - - /** - * If we had failed to get a listener previously. Skill will be exited on another failure. - * @name jibo.mim.ListenBundle#failedToGetListener - * @type {boolean} - */ - -/** - * @class MimStates - * @memberof jibo.mim - * @description Bundle all the Mim's state machine states, with strong typing. Each - * property of MimStates is a State from jibo-state-machine. All actions are performed - * by functions of the Mim class. - * @private - */ - -/** - * Return prompt data for MIM. Properties are used as variables - * for MIM condition evaluation and prompt text insertion. - * @callback jibo.bt.behaviors.Mim~GetPromptData - * @returns {any} - */ - -/** - * Called on listen complete during Optional Response or Question, before the MIM analyzes the - * result. Allows skills to implement their own check on the result to tell the MIM how to handle it. - * @callback jibo.bt.behaviors.Mim~CheckResult - * @param {jibo.jetstream.types.ListenResult} result Data from NLU service. - */ - -/** - * Called when an Optional Response or Question MIM completes successfully. - * Optional Response MIMs always complete; - * check `options.state.lastResultState` to see if user responded. - * @callback jibo.bt.behaviors.Mim~OnSuccess - * @param {any} results Bundles data from MIM. - * @param {jibo.jetstream.types.ListenResult} results.asrResults Data from NLU service. - * @param {jibo.mim.SpeakerIds} results.speakerIds If available, the ID of the speaker. - * @param {jibo.mim.MimState} results.state Current state of the MIM. - * @param {String} results.firstGrammarTag (Flow use only) The value of the first rule slot (results.asrResults.entities[results.asrResults.slotActions[0]]). The default transition from a MIM. If a listen has multiple potential slots, this value should not be considered reliable. - */ - -/** - * (Flow use only) Called when a Question MIM fails entirely. Either the user did not - * respond to Jibo or Jibo could not understand the user and has run out of error prompts. - * Return value finds an error handler within the flow. Unhandled - * errors use Jibo's standard MIM exception handling. - * @callback jibo.bt.behaviors.Mim~OnFailure - * @param {any} results Bundles data from MIM. - * @param {jibo.jetstream.types.ListenResult} results.asrResults Data from NLU service. - * @param {jibo.mim.SpeakerIds} results.speakerIds If available, the ID of the speaker. - * @param {jibo.mim.MimState} results.state Current state of the MIM. - * @param {String} results.exception Exception for this failure; either `~InteractionError.noMatch` or `~InteractionError.noInput`. - */ - -/** - * (Internal to Menu behavior only) Called to confirm that a positional selection makes sense, allowing custom handling to select certain types of items, if desired. - * @callback jibo.bt.behaviors.Mim~OnPositionalSelect - * @param {jibo.jetstream.types.ListenResult} commandASR Data from NLU service. - * @param {Number} intendedIndex Index that the menu plans to use for selection. - * @param {jibo.face.views.MenuView} menu Created menu. Use to read button data, if you didn't keep track of it yourself. - * @returns {number} Return an item index to change what will be selected, or null to select nothing. Returning undefined will use the default behavior (selecting intendedIndex). - * @private - */ - -/** - * @class Mim - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Perform a dialogue interaction. Can be an announcement, an - * announcement with optional user response, or a - * question and attempt to get answer from the user. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {String} options.mimPath Path to the MIM file to use. - * @param {jibo.bt.behaviors.Mim~GetPromptData} options.getPromptData Returns the prompt variable data. - * @param {jibo.bt.behaviors.Mim~CheckResult} options.checkResult Called and passed data about what the Mim is hearing when a listen is complete. Optional Response and Question MIMs only. - * @param {jibo.bt.behaviors.Mim~OnSuccess} options.onSuccess Called and passed data about what the Mim heard when it completes. Optional Response and Question MIMs only. - * @param {jibo.bt.behaviors.Mim~OnFailure} options.onFailure Called and passed data about what the Mim heard or did not hear when it completes. Question MIMs only. - */ - - /** - * Stops the MIM. The optional parameter here is considered private - this should be used - * like the stop() method it inherits from Behavior, with no parameters. - * @method jibo.bt.Mim#stop - * @param {boolean} [isMenuTap] If the stop() was due to tapping a menu button. - * @private - */ - - /** - * If this Mim has an active view, pops the top view from the list and destroys this Mim's - * active view. - * @method jibo.bt.Mim#removeView - * @private - * @param {string} intent Reason for removing the view - 'success', 'failure', or null if view should never be left blank. - */ - - /** - * Remove combinedRuleHandle and ruleHandle from NLU memory. - * @method jibo.bt.Mim#unloadRules - * @private - */ - - /** - * Cleans up global event listeners that the MIM added. - * @method jibo.bt.Mim#cleanUpEvents - * @private - */ - - /** - * Opens the MIM's GUI if it is not already open. - * @method jibo.bt.Mim#openGUI - * @private - */ - - /** - * Callback for events from `jibo.mim.openGUI`. Opens the GUI, if it is not already open. - * @method jibo.bt.Mim#onOpenGUIEvent - * @private - */ - - /** - * Callback for events from `jibo.mim.handleSpeech`. Stops active speech or listen to parse a - * spoofed utterance. - * @method jibo.bt.Mim#onSpeechEvent - * @param {string} utterance The spoofed utterance in need of parsing. - * @private - */ - - /** - * Callback for events from `jibo.mim.end`. Ends the MIM immediately. - * @method jibo.bt.Mim#onEndEvent - * @param {any} data Not currently used. In the future, data about how the MIM should end. - * @private - */ - - /** - * Callback for events from `jibo.mim.heyJibo`. Handles barge in via "Hey Jibo". - * @method jibo.bt.Mim#onHeyJiboHeard - * @private - */ - - /** - * State entry for states.loadConfig. Load .mim file(s) and then go to states.loadRule for OR/Q - * mims or states.choosePrompt for AN mims. - * @method jibo.bt.Mim#loadMim - * @private - */ - - /** - * State entry for states.loadRule. Load .mim file(s) and then go to states.loadRule for OR/Q - * mims or states.choosePrompt for AN mims. Sets up loading of rule for mim and unionizing it - * with mim global rule as a Promise. Immediately go to states.choosePrompt. - * @method jibo.bt.Mim#loadRule - * @private - */ - - /** - * State entry for states.choosePrompt. Choose prompt text to be played. Go to states.listen - * if no prompt or silent prompt chosen. Go to states.speak to speak the prompt. - * @method jibo.bt.Mim#choosePrompt - * @private - */ - - /** - * State entry for states.speak. Speaks the chosen prompt through the TTS system. When finished, - * goes to states.reportResults for an AN mim or states.listen for an OR/Q mim. - * @method jibo.bt.Mim#speak - * @private - */ - - /** - * State interuption for states.speak. Stops jibo.mim#speakDelegate playback. - * @method jibo.bt.Mim#stopSpeaking - * @private - */ - - /** - * State entry for states.listen. Starts a listener from jibo.mim#listenDelegate. - * If appropriate, starts timeout. If appropriate, displays the mim GUI. When listen completes, - * transitions to states.analyzeResults for mim results or states.analyzeMimGlobal for mim - * global commands. - * @method jibo.bt.Mim#startListen - * @private - */ - - /** - * Callback for screen interaction. Resets timeouts during listen. - * @method jibo.bt.Mim#resetTimeout - * @private - */ - - /** - * State interuption for states.listen. Stops listener and removes mim GUI if present. - * @method jibo.bt.Mim#stopListen - * @private - */ - - /** - * State exit for states.listen. Stops listener and removes screen touch listeners. - * @method jibo.bt.Mim#listenExit - * @private - */ - - /** - * State update for states.listen. Tracks timeout. If timeout triggered, change state to - * states.analyzeResults. - * @method jibo.bt.Mim#updateListen - * @private - */ - - /** - * State entry for states.analyzeMimGlobal. If global command is 'repeat', go to - * states.choosePrompt. Otherwise, redirect to states.analyzeResults. - * @method jibo.bt.Mim#analyzeMimGlobal - * @private - */ - - /** - * State entry for states.analyzeMenuGlobal. If global command is 'left' or right' and GUI is - * active, scroll list and return to states.listen. Otherwise, redirect to - * states.analyzeResults. - * @method jibo.bt.Mim#analyzeMenuGlobal - * @private - */ - - /** - * State entry for states.parseSpoof. Perform NLU parse on utterance text from GUI, followed * by going to states.reportResults. - * @method jibo.bt.Mim#parseSpoofedUtterance - * @private - */ - - /** - * State entry for states.analyzeResults. Analyze results to determine if result of listen is - * 'noMatch', 'noInput', or 'match'. If result is 'match' or mim has run out of error prompts, - * go to states.reportResults. Otherwise, go to states.choosePrompt. - * @method jibo.bt.Mim#analyzeResults - * @private - */ - - /** - * State entry for states.reportResults. If mim has failed due to noInput or noMatch errors, - * call onFailure to allow flow to handle exception. If exception not handled, go to - * states.handleException. If mim successful, call onSuccess and end Mim behavior. - * @method jibo.bt.Mim#reportResults - * @private - */ - - /** - * State entry for states.handleException. Begins global mim exception flow for either 'noInput' - * or 'noMatch' failures. - * @method jibo.bt.Mim#handleException - * @private - */ - - /** - * State update for states.handleException. Update exception flow. If flow is complete act upon - * flow result. If flow result is 'exit', exit skill and return to be/idle. If flow result is - * 'restart', go to states.choosePrompt. - * @method jibo.bt.Mim#updateException - * @private - */ - - /** - * State interuption for states.handleException. Stop and clean up exception flow. Remove any - * flow created view. - * @method jibo.bt.Mim#stopException - * @private - */ - - /** - * Display text that mim rules could not match. Provided to noMatch exception flow as a - * callback. - * @method jibo.bt.Mim#showInputText - * @param {string} notMatchedText Text from speech to text that NLU could not match. - * @private - */ - - /** - * Remove text display created during noMatch exception flow. - * @method jibo.bt.Mim#hideInputText - * @private - */ - - /** - * State entry for states.waitForHJEnd. Begins waiting for the Hey Jibo listen to end in a way - * that the MIM should recover from. - * @method jibo.bt.Mim#waitForHJEnd - * @private - */ - - /** - * Standard method to tell the waitForHJEnd state to go back to prompt selection. - * @method jibo.bt.Mim#recoverFromHJ - * @private - */ - - /** - * State interuption and exiting for states.waitForHJEnd. Removesevent listeners added in the - * state entry. - * @method jibo.bt.Mim#hjEnded - * @private - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Null.js b/docs/bt/behaviors/Null.js deleted file mode 100644 index bc496e68..00000000 --- a/docs/bt/behaviors/Null.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @class Null - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description `Null` has no behavior. It will remain in-progress until a decorator changes its state. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Parallel.js b/docs/bt/behaviors/Parallel.js deleted file mode 100644 index 9245beea..00000000 --- a/docs/bt/behaviors/Parallel.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @class Parallel - * @extends jibo.bt.ParentBehavior - * @memberof jibo.bt.behaviors - * @description Runs its child nodes in parallel. Returns with `Status.FAILED` if one of the children failed - * and `Status.SUCCEEDED` if all children succeeded. - * @param {Object} options See {@link jibo.bt.Behavior} for all options. - * @param {boolean} options.succeedOnOne If the Parallel should succeed when the first child succeeds. - * @param {Array} [options.children=[]] An array of the Parallel's child behaviors. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/PlayAnimation.js b/docs/bt/behaviors/PlayAnimation.js deleted file mode 100644 index b4d045ab..00000000 --- a/docs/bt/behaviors/PlayAnimation.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @class PlayAnimation - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Plays the animation specified by `animPath`, `animName` or `animQuery`. - * Succeeds when the animation is finished playing. Playing an - * animation consists of two phases: the transition phase and the play phase. The transition phase will - * transition Jibo from his current position to the start position of the specified animation. The play - * phase plays the animation with the current configuration. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {String} options.animPath The path to the `.keys` file. This behavior assumes `${project}/animations` is the root for - * all the animations. - * @param {Function} options.config Called and passed a {@link AnimationBuilder} object for configuration purposes. Do not call - * {@link AnimationBuilder#play}. This is done automatically by the behavior. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/PlayAudio.js b/docs/bt/behaviors/PlayAudio.js deleted file mode 100644 index 9ba9d16d..00000000 --- a/docs/bt/behaviors/PlayAudio.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @class PlayAudio - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Plays the audio specified by `audioPath`. Succeeds when the audio file is finished playing. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {String} options.audioPath The path to any audo file format supported by HTML5 Audio. This behaviuor assumes `${project}/audio` - * is the root for all the audio files. - * @param {Boolean} options.cache=true `true` to cache the audio. `false` to play once and destroy. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Random.js b/docs/bt/behaviors/Random.js deleted file mode 100644 index 21034de0..00000000 --- a/docs/bt/behaviors/Random.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @class Random - * @extends jibo.bt.ParentBehavior - * @memberof jibo.bt.behaviors - * @description On start, will choose a random node in its children and run that node. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {Array} [options.children=[]] An array of child behaviors. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/ReadBarcode.js b/docs/bt/behaviors/ReadBarcode.js deleted file mode 100644 index c9285c86..00000000 --- a/docs/bt/behaviors/ReadBarcode.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Function that returns the options object. - * @callback jibo.bt.behaviors.ReadBarcode~onBarcode - * @param {string|null} error `null` if no error. - * @param {Object} data The result of the barcode if one is found. - * @param {number} data.type The type of barcode found. The types are 0 (EAN8), 1 (UPCE), 2 (ISBN10), 3 (UPCA), 4 (EAN13), - * 5 (ISBN13), 6 (Interleaved 2 of 5), 7 (Code 39), 8 (PDF417), 9 (QR-Code), 10 (Code 128). - * @param {String} data.content The payload of the detected barcode. - */ - -/** - * @class ReadBarcode - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Makes Jibo take a photo and search for a barcode or QR code in that image. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {jibo.bt.behaviors.ReadBarcode~onBarcode} options.onBarcode Called after Jibo takes a picture. The results are passed to this function. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Sequence.js b/docs/bt/behaviors/Sequence.js deleted file mode 100644 index df418f55..00000000 --- a/docs/bt/behaviors/Sequence.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @class Sequence - * @extends jibo.bt.ParentBehavior - * @memberof jibo.bt.behaviors - * @description `Sequence` Runs its child nodes in sequence until one fails. Fails if one of the children fails - * and succeeds if all its children succeeded. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {Array} [options.children=[]] - An array of child behaviors. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Subtree.js b/docs/bt/behaviors/Subtree.js deleted file mode 100644 index 02494268..00000000 --- a/docs/bt/behaviors/Subtree.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @class Subtree - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Encapsulates an external subtree file (`.bt` file) into a single behavior. This behavior fails if the - * `.bt` tree fails, and succeeds if that tree succeeds. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {String} options.behaviorPath The path to the `.bt` file this behavior encapsulates. This assumes the root - * of all `.bt` files is in `${project}/behaviors`. - * @param {Function} options.getNotepad Returns an object that will become this referenced tree's notepad. Think of this as the - * arguments to this subtree. - * @param {Function} options.onResult Called when the external tree either fails or succeeds. A result object is passed as an argument. - * This result object is populated by the external tree. Think of this as the return value. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/SubtreeJs.js b/docs/bt/behaviors/SubtreeJs.js deleted file mode 100644 index 4417aab4..00000000 --- a/docs/bt/behaviors/SubtreeJs.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @class SubtreeJs - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Encapsulates an external subtree file (`.bt` file) into a single behavior. This behavior fails if the - * `.bt` tree fails and succeeds if that tree succeeds. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {Function} options.getFileName Returns the path to the `.bt` file this behavior encapsulates. This assumes the root - * of all `.bt` files is in `${project}/behaviors`. - * @param {Function} options.getNotepad Returns an object that will become this referenced tree's notepad. Think of this as the - * arguments to this subtree. - * @param {Function} options.onResult Called when the external tree either fails or succeeds. A result object is passed as an argument. - * This result object is populated by the external tree. Think of this as the return value. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/Switch.js b/docs/bt/behaviors/Switch.js deleted file mode 100644 index 542ffde3..00000000 --- a/docs/bt/behaviors/Switch.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @class Switch - * @extends jibo.bt.ParentBehavior - * @memberof jibo.bt.behaviors - * @description Runs its child nodes in sequence until one succeeds. Fails if all of the children failed - * and succeeds if one child succeeded. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {Array} [options.children=[]] - An array of the Switch's child behaviors. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/TakePhoto.js b/docs/bt/behaviors/TakePhoto.js deleted file mode 100644 index 300079ba..00000000 --- a/docs/bt/behaviors/TakePhoto.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Callback for when Jibo takes a photo. - * ``` - * let behavior = TakePhoto(2, 2, (url) => { - * let img = new Image(); - * img.src = url; - * }); - * ``` - * @callback jibo.bt.behaviors.TakePhoto~OnPhoto - * @param {String} url The image URL. - */ - -/** - * @class TakePhoto - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Makes Jibo take a photo and will return a URL to get the contents of that photo. - * @param {Object} options Options - * @param {number} options.resolution `1` for a 672x380 photo. `2` for 1280x720 photo. `3` for 1920x1080 photo. `4` for 2688x1520 photo. - * @param {jibo.bt.behaviors.TakePhoto~OnPhoto} options.onPhoto Called after Jibo takes a picture. The image URL is passed to this function. - * @param {boolean} [options.noDistortion=true] Removes camera distortion from photo. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/TextToSpeech.js b/docs/bt/behaviors/TextToSpeech.js deleted file mode 100644 index bb07dd8f..00000000 --- a/docs/bt/behaviors/TextToSpeech.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @class TextToSpeech - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Makes Jibo speak. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {String} options.words The words for Jibo to speak. - * @param {Function} options.onWord Called each time a word is spoken. The word that is spoken is passed as an argument. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/TextToSpeechJs.js b/docs/bt/behaviors/TextToSpeechJs.js deleted file mode 100644 index 0a9b952a..00000000 --- a/docs/bt/behaviors/TextToSpeechJs.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @class TextToSpeechJs - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description Makes Jibo speak. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {Function} options.getWords Function that returns a string of the words for Jibo to speak. - * @param {Function} options.onWord Called each time a word is spoken. The word that is spoken is passed as an argument. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/TimeoutJs.js b/docs/bt/behaviors/TimeoutJs.js deleted file mode 100644 index 13e86669..00000000 --- a/docs/bt/behaviors/TimeoutJs.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @callback jibo.bt.behaviors.TimeoutJs~GetTime - * @returns {number} Time in milliseconds until the behavior succeeds. - */ - -/** - * @class TimeoutJs - * @extends jibo.bt.Behavior - * @memberof jibo.bt.behaviors - * @description - * Succeeds only after the specified amount of time. - * @param {Object} options See {@link jibo.bt.Behavior|Behavior} for all options. - * @param {jibo.bt.behaviors.TimeoutJs~GetTime} options.getTime - Time in milliseconds until `TimeoutJs` succeeds. - */ \ No newline at end of file diff --git a/docs/bt/behaviors/index.js b/docs/bt/behaviors/index.js deleted file mode 100644 index a4dbb68f..00000000 --- a/docs/bt/behaviors/index.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Behavior Tree behavior classes. - * @namespace jibo.bt.behaviors - */ \ No newline at end of file diff --git a/docs/bt/decorators/Case.js b/docs/bt/decorators/Case.js deleted file mode 100644 index 467fb4f7..00000000 --- a/docs/bt/decorators/Case.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @callback jibo.bt.decorators.Case~CaseConditional - * @returns {boolean} Return `true` to succeed the decorated behavior. `false` otherwise. - */ - -/** - * @class Case - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description - * Performs a single check before the behavior it's decorating starts. If that check fails, `Case` fails the - * behavior. Useful for decorating behaviors under a {@link jibo.bt.behaviors.Switch|Switch} behavior. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {jibo.bt.decorators.Case~CaseConditional} options.conditional Function called every frame. - * Return `false` when you want component to fail. - */ \ No newline at end of file diff --git a/docs/bt/decorators/FailOnCondition.js b/docs/bt/decorators/FailOnCondition.js deleted file mode 100644 index 7493eb0f..00000000 --- a/docs/bt/decorators/FailOnCondition.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @callback jibo.bt.decorators.FailOnCondition~FailOnConditionConditional - * @extends jibo.bt.Behavior - * @returns {boolean} `true` when you want component to Fail. - */ - -/** - * @class FailOnCondition - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description Explicitly interrupts the behavior it's decorating and returns Status.FAILED if the - * conditional evaluates to `true`. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {Function} [options.init] Function called at the start of this behavior. Used to initialize any - * variables or data. - * @param {jibo.bt.decorators.FailOnCondition~FailOnConditionConditional} options.conditional Function called every frame. Return `true` - * when you want component to fail. - */ \ No newline at end of file diff --git a/docs/bt/decorators/StartOnAnimEvent.js b/docs/bt/decorators/StartOnAnimEvent.js deleted file mode 100644 index 171ce6d7..00000000 --- a/docs/bt/decorators/StartOnAnimEvent.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @callback jibo.bt.decorators.StartOnAnimEvent~StartOnEventOnReceived - * @argument {AnimationInstance} instance The animation instance the event was dispatched from. - * @argument {Object} payload A payload defined in the `.keys` file. - */ - -/** - * @class StartOnAnimEvent - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description - * `StartOnAnimEvent` will begin the execution of its behavior when an animation fires an event from its event layer. - * @param {String} options.eventName - Name of the event this behavior listens for. - * @param {jibo.bt.decorators.StartOnAnimEvent~StartOnEventOnReceived} options.onReceived - Callback for when `eventName` is dispatched. - */ \ No newline at end of file diff --git a/docs/bt/decorators/StartOnCondition.js b/docs/bt/decorators/StartOnCondition.js deleted file mode 100644 index 4bd37235..00000000 --- a/docs/bt/decorators/StartOnCondition.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @callback jibo.bt.decorators.StartOnCondition~StartOnConditionConditional - * @returns {Boolean} `true` when you want component to start. - */ - -/** - * @class StartOnCondition - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description - * Prevents the behavior it's decorating from starting until its conditional evaluates to - * true. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {Function} [options.init] Function called at the start of this behavior. Used to initialize any - * variables or data. - * @argument {jibo.bt.decorators.StartOnCondition~StartOnConditionConditional} options.conditional - The conditional to evaluate. - */ \ No newline at end of file diff --git a/docs/bt/decorators/StartOnEvent.js b/docs/bt/decorators/StartOnEvent.js deleted file mode 100644 index 0da66cc4..00000000 --- a/docs/bt/decorators/StartOnEvent.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @class StartOnEvent - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description - * Prevents the behavior it's decorating from starting until an event is emitter from a behavior tree's - * global `emitter`. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {String} options.eventName - The name of the event to listen for. - * @param {Function} options.onEvent - called when the event is fired. Any payload with the event is passed in. - */ \ No newline at end of file diff --git a/docs/bt/decorators/SucceedOnCondition.js b/docs/bt/decorators/SucceedOnCondition.js deleted file mode 100644 index ac864be8..00000000 --- a/docs/bt/decorators/SucceedOnCondition.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @callback jibo.bt.decorators.SucceedOnCondition~SucceedOnConditionConditional - * @returns {Boolean} `true` to succeed the decorated behavior. `false` otherwise. - */ - -/** - * @class SucceedOnCondition - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description - * Explicitly interrupts the behavior it's decorating and returns Status.SUCCEEDED if the - * conditional evaluates to `true`. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {Function} [options.init] Function called at the start of this behavior. Used to initialize any - * variables or data. - * @param {jibo.bt.decorators.SucceedOnCondition~SucceedOnConditionConditional} options.conditional Function called every frame. Return `true` - * to force behavior to succeed. - */ \ No newline at end of file diff --git a/docs/bt/decorators/SucceedOnEmbedded.js b/docs/bt/decorators/SucceedOnEmbedded.js deleted file mode 100644 index 98406c82..00000000 --- a/docs/bt/decorators/SucceedOnEmbedded.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @class EmbeddedListenEmitter - * @description Passed to the {@link jibo.bt.decorators.SucceedOnEmbedded~OnResult} function of the {@link jibo.bt.decorators.SucceedOnEmbedded|SucceedOnEmbedded} behavior. - * @extends EventEmitter - * @memberof jibo.bt - */ - -/** - * @typedef {Object} jibo.bt.decorators.SucceedOnEmbedded~Options - */ - -/** - * Called when the {@link jibo.bt.EmbeddedListenEmitter|EmbeddedListenEmitter} is constructed. - * @callback jibo.bt.decorators.SucceedOnEmbedded~OnResult - * @param {jibo.bt.EmbeddedListenEmitter} listener Use this instance to listen for listen events. - */ - -/** - * @class SucceedOnEmbedded - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description Succeeds the behavior its decorating when the specified audio phrase is spotted. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {jibo.bt.decorators.SucceedOnEmbedded.Rules} options.rule The embedded rule to listen for. - * @param {jibo.bt.decorators.SucceedOnEmbedded~OnResult} options.onResult Called and passed a {@link jibo.bt.EmbeddedListenEmitter|EmbeddedListenEmitter} object. Events are - * fired from the emitter at certain points in this behavior's lifecycle. - */ - - /** - * Embedded listen rule types. - * @name jibo.bt.decorators.SucceedOnEmbedded.Rules - * @property {String} HEY_jibo Listen for "Hey, Jibo" - * @static - * @enum {String} - */ - - /** Listen for "Hey Jibo" */ - - /** - * Fired when the phrase is spotted. - * @event jibo.bt.EmbeddedListenEmitter#hey-jibo - * @param {Object} result Reference to the behavior's result. - * @param {Array} speakers Text independent speaker ID results. - */ \ No newline at end of file diff --git a/docs/bt/decorators/SucceedOnEvent.js b/docs/bt/decorators/SucceedOnEvent.js deleted file mode 100644 index 54aaa6bb..00000000 --- a/docs/bt/decorators/SucceedOnEvent.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @class SucceedOnEvent - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description - * Succeeds the behavior it's decorating when an event is emitter from a behavior tree's - * global `emitter`. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {String} options.eventName - The name of the event to listen for. - * @param {Function} options.onEvent - Called when the event is fired. Any payload with the event is passed in. - */ \ No newline at end of file diff --git a/docs/bt/decorators/SucceedOnListen.js b/docs/bt/decorators/SucceedOnListen.js deleted file mode 100644 index 81ae4d6f..00000000 --- a/docs/bt/decorators/SucceedOnListen.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @typedef {Object} jibo.bt.decorators.SucceedOnListen~Options - * @property {boolean} heyJibo Listen for "Hey, Jibo" first. - * @property {boolean} detectEnd Listen for end of speech. - * @property {boolean} incremental Return incremental ASR results as they are streamed from the cloud. - * @property {String} authenticateSpeaker Authenticates against that person. - */ - -/** - * Function that returns the options object. - * @callback jibo.bt.decorators.SucceedOnListen~GetOptions - * @returns {jibo.bt.decorators.SucceedOnListen~Options} - */ - -/** - * Called when the {@link jibo.bt.behaviors.ListenEmitter|ListenEmitter} is constructed. - * @callback jibo.bt.decorators.SucceedOnListen~OnResult - * @param {jibo.bt.ListenEmitter} listener Use this instance to listen for listen events. - */ - -/** - * @class SucceedOnListen - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description Performs audio speech recognition and applies and parses the results according to a rules file. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {jibo.bt.decorators.SucceedOnListen~GetOptions} options.getOptions Returns the options object. - * @param {String} options.rule Path the to `.rule` file. This assumes the path starts at `${project}/rules`. - * @param {jibo.bt.decorators.SucceedOnListen~OnResult} options.onResult Called and passed a {@link jibo.bt.behaviors.ListenEmitter|ListenEmitter} object. Events are fired from the Listener - * at certain points in this behavior's lifecycle. - */ \ No newline at end of file diff --git a/docs/bt/decorators/SucceedOnListenJs.js b/docs/bt/decorators/SucceedOnListenJs.js deleted file mode 100644 index 0800f125..00000000 --- a/docs/bt/decorators/SucceedOnListenJs.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @class ListenEmitter - * @description Used to listen for cloud events. - * @extends EventEmitter - * @memberof jibo.bt - */ - -/** - * @typedef {Object} jibo.bt.decorators.SucceedOnListenJs~Options - * @property {boolean} heyJibo Listen for "Hey, Jibo" first. - * @property {boolean} detectEnd Listen for end of speech. - * @property {boolean} incremental Return incremental ASR results as they are streamed from the cloud. - * @property {String} authenticateSpeaker Authenticates against that person. - */ - -/** - * Function that returns the options object. - * @callback jibo.bt.decorators.SucceedOnListenJs~GetOptions - * @returns {jibo.bt.decorators.SucceedOnListenJs~Options} - */ - -/** - * Called when the {@link jibo.bt.behaviors.ListenEmitter|ListenEmitter} is constructed. - * @callback jibo.bt.decorators.SucceedOnListenJs~OnResult - * @param {jibo.bt.ListenEmitter} listener Use this instance to listen for listen events. - */ - -/** - * @class SucceedOnListenJs - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description Performs audio speech recognition and applies and parses the results according to a rules file. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {jibo.bt.decorators.SucceedOnListenJs~GetOptions} options.getOptions Returns the options object. - * @param {Function} options.getRule This function returns a string representation of a rule. Use this decorator to dynamically generate rules files instead - * of loading a rule file from disk. - * @param {jibo.bt.decorators.SucceedOnListenJs~OnResult} options.onResult Called and passed a {@link jibo.bt.behaviors.ListenEmitter|ListenEmitter} object. Events are fired from the Listener - * at certain points in this behavior's lifecycle. - */ - -/** - * Definition of the reusable dialog listen behavior class - */ - - /** - * Only gets called when stopped from Behavior tree - */ \ No newline at end of file diff --git a/docs/bt/decorators/TimeoutFail.js b/docs/bt/decorators/TimeoutFail.js deleted file mode 100644 index 5ab8a688..00000000 --- a/docs/bt/decorators/TimeoutFail.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @class TimeoutFail - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description Forces the behavior it's decorating to fail after the specified amount of time. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {number} options.timeout - Time in milliseconds until `TimeoutFail` forces the behavior it's decorarting to fail. - */ \ No newline at end of file diff --git a/docs/bt/decorators/TimeoutSucceed.js b/docs/bt/decorators/TimeoutSucceed.js deleted file mode 100644 index 1b35cadc..00000000 --- a/docs/bt/decorators/TimeoutSucceed.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @class TimeoutSucceed - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description - * Forces the behavior it's decorating to succeed after the specified amount of time. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {number} options.timeout - Time in milliseconds until `TimeoutSucceed` forces the behavior it's decorating to succeed. - */ \ No newline at end of file diff --git a/docs/bt/decorators/TimeoutSucceedJs.js b/docs/bt/decorators/TimeoutSucceedJs.js deleted file mode 100644 index faec3d8f..00000000 --- a/docs/bt/decorators/TimeoutSucceedJs.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @callback jibo.bt.decorators.TimeoutSucceedJs~GetTime - * @returns {number} Time in milliseconds. - */ - -/** - * @class TimeoutSucceedJs - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description - * `TimeoutSucceedJs` forces the behavior it's decorating to succeed after the specified amount of time. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {jibo.bt.decorators.TimeoutSucceedJs~GetTime} options.getTime - Time in milliseconds until `TimeoutJs` forces the behavior it's decorating to succeed. - */ \ No newline at end of file diff --git a/docs/bt/decorators/WhileCondition.js b/docs/bt/decorators/WhileCondition.js deleted file mode 100644 index 8d0ee7df..00000000 --- a/docs/bt/decorators/WhileCondition.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @callback jibo.bt.decorators.WhileCondition~Conditional - * @returns {boolean} `true` when you want component to restart. - */ - -/** - * @class WhileCondition - * @extends jibo.bt.Decorator - * @memberof jibo.bt.decorators - * @description When `WhileCondition`'s component succeeds, `WhileCondition` - * will evaluate its conditional. If it evaluates to `true`, `WhileCondition` will - * start its component again. If the conditional evaluates to `false`, `WhileCondition` - * returns the status of its component. - * @param {Object} options See {@link jibo.bt.Decorator|Decorator} for all options. - * @param {Function} [options.init] - Initialization function. - * @param {jibo.bt.decorators.WhileCondition~Conditional} options.conditional - The conditional to evaluate. - */ \ No newline at end of file diff --git a/docs/bt/decorators/index.js b/docs/bt/decorators/index.js deleted file mode 100644 index d5f643bc..00000000 --- a/docs/bt/decorators/index.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Behavior Tree decorator classes. - * @namespace jibo.bt.decorators - */ \ No newline at end of file diff --git a/docs/bt/mim/AsrMetadata.js b/docs/bt/mim/AsrMetadata.js deleted file mode 100644 index e188ab1d..00000000 --- a/docs/bt/mim/AsrMetadata.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @interface jibo.bt.behaviors.Mim~AsrMetadata - * @private - * @description Type of metadata supplied to ASR about MIM listens. Not exposed outside the library. - * @prop {String} interactionId - UUID for that instance of a MIM. - * @prop {String} mimId - ID for the MIM file being used. - * @prop {String} mimType - The type of MIM. - * @prop {String} skill - The name of the skill in use. - * @prop {String} mimState - The state of the MIM. - * @prop {Number} noMatches - The number of no match errors that the MIM has had. - * @prop {Number} noInput - The number of no input errors that the MIM has had. - * @prop {String} lastPromptId - The ID of the last MIM prompt to play. - * @prop {String} [activityName] - Flow only: The name of the MIM activity in the flow. - * @prop {String} [activityId] - Flow only: The uuid of the MIM activity in the flow. - * @prop {String} [flowFile] - Flow only: The flow file that the MIM activity is in. - */ \ No newline at end of file diff --git a/docs/bt/mim/MimConfig.js b/docs/bt/mim/MimConfig.js deleted file mode 100644 index 8251cc05..00000000 --- a/docs/bt/mim/MimConfig.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * MIM configuration data generated from the .mim files. - * @class MimConfig - * @memberof jibo.mim - * @private - */ - - /** - * Promised loading of a single .mim file. - * @method jibo.mim.MimConfig~load - * @param {string} filePath Path to the .mim file. - * @returns {Promise} Promise to load a new MimConfig instance. - * @static - */ - - /** - * If the Mim has a gui available, either as sampleUtterances or guiConfig. - * @name jibo.mim.MimConfig~hasGui - * @type {Boolean} - * @readOnly - */ - - /** - * Find a prompt by id and get the original prompt text for it. - * @method jibo.mim.MimConfig#getOriginalPromptText - * @param {string} id Prompt id to get the text for. - * @return {String} The original prompt text string. - */ - - /** - * Pick a prompt and get the text for it. - * @method jibo.mim.MimConfig~getPromptText - * @param {jibo.mim.MimState} mimState State of the active MIM. - * @param {any} promptData Dictionary of variables to use for condition evaluation and text replacement. - * @param {jibo.kb.Node} [rotationNode] Node used to store data - * @return {Object} An object with 'text', 'id', and 'autoRuleOverride' properties. - */ - - /** - * Generate a view config object for the MIM GUI, using the javascript code from the .mim file. - * @method jibo.mim.MimConfig~getJavascriptGUI - * @param {any} promptData Prompt data for the MIM - * @return {any} The generated view config object - */ - - /** - * See if MimConfig has error prompts of the corresponding type and index. - * @method jibo.mim.MimConfig~hasErrorPrompt - * @param {String} error The error type - * @param {Number} index The prompt index - * @return {Boolean} - */ - - /** - * See if MimConfig has at least one verbose prompt. - * @method jibo.mim.MimConfig~hasVerbosePrompt - * @return {Boolean} - */ - - /** - * See if MimConfig has at least one truncated prompt. - * @method jibo.mim.MimConfig~hasTruncatedPrompt - * @return {Boolean} - */ - - /** - * See if MimConfig has at least one thanks prompt. - * @method jibo.mim.MimConfig~hasThanksPrompt - * @return {Boolean} - */ \ No newline at end of file diff --git a/docs/bt/mim/MimManager.js b/docs/bt/mim/MimManager.js deleted file mode 100644 index 8b74a452..00000000 --- a/docs/bt/mim/MimManager.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * Singleton for hooking into the MIM system. - * @namespace jibo.mim - */ - - /** - * The default listen delegate class, for extending to make more advanced delegates. - * @name jibo.mim~GlobalListenDelegate - * @type {jibo.mim.GlobalListener} - * @private - */ - - /** - * In the currently active MIM, respond to a 'hey jibo' happening. MIMs could listen to - * GlobalListen directly, but getting events through here allows us to limit the event to - * the currently active MIM, in case a MIM is running another MIM. - * @name jibo.mim#heyJibo - * @type {Event} - * @private - */ - - /** - * In the currently active MIM, respond to the completion of a HJ event in which the MIM should - * continue. This includes HJ Only, HJ No Match, and Non Interrupting Global events. - * @name jibo.mim#heyJiboComplete - * @type {Event} - * @private - */ - - /** - * If a Hey Jibo event currently active. Used by MIMs to determine when they started during an - * active HJ event. - * @name jibo.mim#isHeyJiboActive - * @type {boolean} - * @private - */ - - /** - * If `true`, Question MIMs time out after the specfied `timeout` when run in the simulator. - * If `false` (default), time out when `enter` key is pressed. - * @name jibo.mim~timeoutIgnoresSimulator - * @type {Boolean} - */ - - /** - * MimRepeatManager instance with loaded MIM data. - * @name jibo.mim~repeat - * @type {jibo.mim.MimRepeatManager} - * @private - */ - - /** - * Promise to load MIM data used by all MIMs as global prompts. - * @name jibo.mim~globalMimLoad - * @type {Promise} - * @private - */ - - /** - * MIM data used by potentially all MIMs as response to the 'thanks' MIM global. - * @name jibo.mim~thanksResponse - * @type {jibo.mim.MimConfig} - * @private - */ - - /** - * Listen delegate to be used by all MIMs to handle listening. - * @name jibo.mim~listenDelegate - * @type {ListenDelegate} - * @private - */ - - /** - * Speaking delegate to be used by all MIMs to handle speech. - * @name jibo.mim~speakDelegate - * @type {SpeakDelegate} - * @private - */ - - /** - * Root node of the KB model used to store prompt rotation info for MIMs within the `jibo` - * module. - * @name jibo.mim~jiboRotationNode - * @type {jibo.kb.Node} - * @private - */ - - /** - * KB Models for each skill. These are kept in memory, because it isn't that much memory, and - * gives us slightly faster access when we use multiple MIMs from one skill. Also, right now - * everything lives in one process that never shuts down, and it won't matter when we have - * each skill in a separate process. - * @name jibo.mim~kbModels - * @type {Object.} - * @private - */ - - /** - * Loads the root node of a KB slice specific to an asset pack, so that data about prompt - * rotation can be persisted. - * @method jibo.mim~loadMimKB - * @param {string} assetPack The name of the skill/asset pack that the MIM is loaded from. - * @return {Promise} The root node for that asset pack. - * @private - */ - - /** - * Start loading any assets the Mims need. Called on creation of the first Mim. Mim does not - * wait for asset load to complete before continuing. - * @method jibo.mim~loadMimAssets - * @private - */ - - /** - * Attach listeners for HJ and HJ ending events - * @method jibo.mim~attachHJListeners - * @private - */ - - /** - * Callback for Hey Jibo events from the listening service. - * @method jibo.mim~onHeyJiboHeard - * @private - */ - - /** - * Listener for Hey Jibo Only events, for recovering from the MIM's waitForHJEnd state. - * @method jibo.mim#onHJOnly - * @private - */ - - /** - * Listener for Hey Jibo No Match events, for recovering from the MIM's waitForHJEnd state. - * @method jibo.mim#onHJNoMatch - * @private - */ - - /** - * Listener for Non Interrupting Global events, for recovering from the MIM's waitForHJEnd state. - * @method jibo.mim#onShortGlobal - * @private - */ - - /** - * Listener for the end of HJ listens that don't allow a MIM to continue - skill relaunches, - * interrupting globals, etc. - * @method jibo.mim#onHJEnd - * @private - */ \ No newline at end of file diff --git a/docs/bt/mim/MimPrompt.js b/docs/bt/mim/MimPrompt.js deleted file mode 100644 index 2c638024..00000000 --- a/docs/bt/mim/MimPrompt.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Individual prompt within a MIM. Generated by MimConfig from the .mim file. - * @class MimPrompt - * @memberof jibo.mim - * @private - */ - - /** - * Get prompt data. Returns the prompt property. - * @method jibo.mim.MimPrompt~getPromptText - * @returns {String} The prompt - */ \ No newline at end of file diff --git a/docs/bt/mim/MimRepeatManager.js b/docs/bt/mim/MimRepeatManager.js deleted file mode 100644 index 2f51c038..00000000 --- a/docs/bt/mim/MimRepeatManager.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Define how an individual repeat request should be handled. - * @class MimRepeat - * @memberof jibo.mim - * @private - */ - - /** - * Prepend prompt to whatever Jibo repeats. Play alone if it's the last repeat allowed. - * @name jibo.mim.MimRepeat#result - * @type {String} - * @readOnly - */ - - /** - * Take specified action after prompt is played. If 'cached', use exact prompt played when Mim - * was entered. If 'verbose', play verbose prompt or fall back to cached prompt. If 'exit', do - * not play a prompt & quit skill. - * @name jibo.mim.MimRepeat#result - * @type {String} - * @readOnly - */ - -/** - * Manage how Mim repeat requests are handled. - * Instantiate this class to start loading the Announcement Mims to use when Jibo is asked to repeat - * himself. - * @class MimRepeatManager - * @memberof jibo.mim - * @private - */ - - /** - * Maximum number of repeats allowed before before skill should exit. - * @name jibo.mim.MimRepeatManager#maxRepeat - * @type {Number} - * @readOnly - */ - - /** - * Starts loading the default list SFX, for use by lists and Mim GUIs. - * @method jibo.mim.MimRepeatManager~getRepeat - * @param {String} mimType The type of the current Mim (question, announcement, optional-response). - * @param {Number} repeatCount The number of times that the user has requested a repeat (starting at 1 for the first time). - * @returns {jibo.mim.MimRepeat} Information on how to handle the repeat request. - */ \ No newline at end of file diff --git a/docs/bt/mim/MimState.js b/docs/bt/mim/MimState.js deleted file mode 100644 index 3e8f0dd9..00000000 --- a/docs/bt/mim/MimState.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Enum of the different states that a MIM could be in. This controls what prompt is played. - * @typedef jibo.mim~States - * @prop ENTRY {string} 'entry' - * @prop MATCH {string} 'match' - * @prop NO_MATCH {string} 'noMatch' - * @prop NO_INPUT {string} 'noInput' - * @prop REPEAT {string} 'repeat' - * @prop THANKS {string} 'thanks' - * @prop HOLD_RETURN {string} 'holdReturn' - * @prop VERBOSE {string} 'verbose' - * @prop TRUNCATED {string} 'truncated' - * @prop MENU_CLOSED {string} 'MenuClosed' - Only used as an exit state, when the MIM GUI is closed. - */ - -/** - * Keep track of the state of the active MIM. Returned by MIM callbacks. - * @class MimState - * @memberof jibo.mim - */ - - /** - * Number of no-input errors that have happened. - * @name jibo.mim.MimState~noInputCount - * @type {Number} - */ - - /** - * Number of no-match errors that have happened. - * @name jibo.mim.MimState~noMatchCount - * @type {Number} - */ - - /** - * Type of the MIM result. - * @name jibo.mim.MimState~lastResultState - * @type {jibo.mim~States} - */ - - /** - * `true` if the MIM has succeeded. - * @name jibo.mim.MimState~success - * @type {Boolean} - */ - - /** - * `true` if the MIM has failed (too many no inputs or no matches). - * @name jibo.mim.MimState~failure - * @type {Boolean} - */ - - /** - * The last used prompt text. - * @name jibo.mim.MimState~promptText - * @type {String} - * @private - */ - - /** - * The auto rule override settings of the last used prompt. - * @name jibo.mim.MimState~promptAutoRules - * @type {String} - * @private - */ - - /** - * Reset the MimState so that a mim can be restarted. - * @method jibo.mim.MimState~reset - * @private - */ - - /** - * If the MIM is complete, due to success or failure. - * @name jibo.mim.MimState~done - * @type {Boolean} - */ - - /** - * Total number of (no input, no match) errors that has happened during this MIM. - * @name jibo.mim.MimState~errors - * @type {Number} - */ - - /** - * Increase the number of misses due to no-input errors that this MIM has had. - * Also inform the MimManager that an error happened. - * @method jibo.mim.MimState~incrementNoInputCount - * @private - */ - - /** - * Increase the number of misses due to no-match errors that this MIM has had. - * Also inform the MimManager that an error happened. - * @method jibo.mim.MimState~incrementNoMatchCount - * @private - */ - - /** - * Compare the MIM state to the config file to see if a GUI should be shown. - * @method jibo.mim.MimState~shouldShowGUI - * @param {jibo.mim.MimConfig} config The config for the active MIM. - * @return {Boolean} `true` if the MIM's GUI should be shown. - * @private - */ \ No newline at end of file diff --git a/docs/bt/mim/WeightedRotation.js b/docs/bt/mim/WeightedRotation.js deleted file mode 100644 index f9d8dba8..00000000 --- a/docs/bt/mim/WeightedRotation.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Items for weighted rotation require an id and a weight. - * @private - */ - -/** - * Because we need to modify weights, these will be created for each weighted item during - * selection. Not exposed outside WeightedRotation.ts - * @private - */ - -/** - * Selects an item from a list, using weighting and enforced rotation. - * @param {WeightedItem[]} itemList The list of items to choose from. - * @param {Function} validCheck Function to see if an individual item is valid. - * @param {Object} [usedDict] Dictionary of used items, passed in by reference. If null, enforced - * rotation is not used. - * @private - */ - -/** - * Selects an item from a list, using weighting and enforced rotation (if usedDict is passed in). - * Is not exposed otuside of WeightedRotation.ts - * @param {WeightedItem[]} items The list of items to choose from. - * @param {WeightedItem[]} usedItems List of already used items, to add to if needed - * @param {Object} [usedDict] Dictionary of used items, passed in by reference. If null, enforced - * rotation is not used. - * @private - */ \ No newline at end of file diff --git a/docs/bt/mim/analytics/Analytics.js b/docs/bt/mim/analytics/Analytics.js deleted file mode 100644 index b829eabc..00000000 --- a/docs/bt/mim/analytics/Analytics.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * An interface for analytics objects for MIM usage. - * @memberof jibo.mim.analytics - * @private - */ - -/** - * A default analytics object that does nothing. This is to be replaced by Be, which knows about - * the correct way to handle the analytics events. - * @class EmptyAnalytics - * @memberof jibo.mim.analytics - * @private - */ \ No newline at end of file diff --git a/docs/bt/mim/analytics/MimAnalytics.js b/docs/bt/mim/analytics/MimAnalytics.js deleted file mode 100644 index af64e24a..00000000 --- a/docs/bt/mim/analytics/MimAnalytics.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Interface describing data that is attached to each MIM analytics event. - * @private - */ - -/** - * Enum for different ways that MIMs can exit - * @private - */ - -/** - * Enum for states in which the MIM could be interrupted (that we care about) - * @private - */ - -/** - * Enum for different methods of input for MIMs - * @private - */ - -/** - * Value for properties where they are not relevant or there is no data available. - * @private - */ - -/** - * Sends analytics event for the end of a MIM - * @private - */ - -/** - * Sends analytics event for the beginning of a MIM - * @private - */ - -/** - * Sends analytics event for a user response that does not end the MIM (like thanks/repeat) - * @private - */ - -/** - * Sends analytics event for a user response that wouldn't end the MIM, but it isn't being handled for some reason - * @private - */ - -/** - * Sends analytics event for a No Match error - * @private - */ - -/** - * Sends analytics event for a No Input error - * @private - */ \ No newline at end of file diff --git a/docs/bt/mim/delegates/BasicSpeakDelegate.js b/docs/bt/mim/delegates/BasicSpeakDelegate.js deleted file mode 100644 index c18068a1..00000000 --- a/docs/bt/mim/delegates/BasicSpeakDelegate.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Delegate for speaking using the standard TTS system. - * @class BasicSpeakDelegate - * @memberof jibo.mim - * @private - */ - - /** - * Speak text, passing the options directly to the TTS system. - * @method jibo.mim.BasicSpeakDelegate#stop - * @param {any} options Speech options, including text. - * @return {Promise} - */ - - /** - * Stop the TTS. - * @method jibo.mim.BasicSpeakDelegate#stop - */ \ No newline at end of file diff --git a/docs/bt/mim/delegates/GlobalListenDelegate.js b/docs/bt/mim/delegates/GlobalListenDelegate.js deleted file mode 100644 index 0ab8fb4c..00000000 --- a/docs/bt/mim/delegates/GlobalListenDelegate.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Delegate for MimManager to use global listening for all listening. - * @class GlobalListener - * @memberof jibo.mim - * @private - */ - - /** - * Sets the ambient listen mode. - * @method jibo.mim.GlobalListener#setAmbientMode - * @param {string} mode Option from {jibo.embodied.listen#AmbientListenMode} to set the mode to. - * @static - */ - - /** - * Sets the active listen mode. - * @method jibo.mim.GlobalListener#enterActiveMode - * @param {string} mode Option from {jibo.embodied.listen#ActiveListenMode} to set the active mode to. - * @param {jibo.embodied.listen.ActiveModeOptions} [options] - Configuration Options consumed by the different Active Modes - * @returns {Promise} Resolves once Embodied Listen is in - * requested Active Mode or interrupted by another Active Mode request. - * @static - */ - - /** - * Sets the active listen mode. - * @method jibo.mim.GlobalListener#exitActiveMode - * @returns {Promise} Resolves when Embodied Listen returns to Idle - * @static - */ - - /** - * Create a GlobalListener instance to use. - * @method jibo.mim.GlobalListener#create - * @param {jibo.jetstream.types.LocalTurnOptions} options The listening options. - * @returns {GlobalListener} The GlobalListener instance. - * @static - */ - - /** - * Stop listening. - * @method jibo.mim.GlobalListener#stop - * @param {boolean} [cancelTurn=true] Whether we should cancel Jetstream Turn. - */ \ No newline at end of file diff --git a/docs/deprecation.js b/docs/deprecation.js deleted file mode 100644 index 3ce84dca..00000000 --- a/docs/deprecation.js +++ /dev/null @@ -1,573 +0,0 @@ - /** - * @class - * @name SerialTimer - * @memberof jibo.utils - * @see jibo.utils.perf.SerialTimer - * @deprecated since version 2.1.0 - * @private - */ - - /** - * @class - * @name ParallelTimer - * @memberof jibo.utils - * @see jibo.utils.perf.ParallelTimer - * @deprecated since version 2.1.0 - * @private - */ - - /** - * @name jibo.bodySettings - * @deprecated since 1.1.0 - * @see jibo.settings - */ - - /** - * @name jibo.body - * @deprecated since 4.2.6 - * @see jibo.settings - */ - - /** - * @name jibo.audio - * @deprecated since 4.2.6 - * @see jibo.settings - */ - - /** - * Gets the base directory and the name of the project. - * @method jibo.utils.PathUtils~getBaseDirectory - * @deprecated since 3.1.0 - * @see jibo.utils.PathUtils#findRoot - */ - - /** - * Gets the project root running jibo. - * @method jibo.utils.PathUtils~getProjectRoot - * @deprecated since 3.1.0 - * @see jibo.utils.PathUtils#findRoot - */ - - /** Load a list of nodes by id. All KBs in this Model will be - * searched, in order, for each id in the array. An empty array is - * returned (via callback) if none of the ids are found. If - * callback is omitted a promise is returned instead. - * - * @method jibo.kb.Model#loadList - * @memberof jibo.kb - * @see jibo.kb.Model#load - * @deprecated since version 6.0.0 - */ - - /** Fetch a list of nodes by id from cache synchronously. Use on - * models created with `begin()` and preloaded with nodes. - * - * @method jibo.kb.Model#fetchList - * @memberof jibo.kb - * @see jibo.kb.Model#fetch - * @deprecated since version 6.0.0 - */ - - /** - * @name jibo.bt.factory - * @deprecated since 1.1.0 - * @see jibo.bt - */ - - /** - * Current status of the behavior tree. - * @type {String} - * @name jibo.bt.BehaviorTree~status - * @deprecated since 4.0.0 - * @see jibo.bt.BehaviorTree#currentStatus - */ - - /** - * Same constant as `ViewManager.TRANS_UP`, made accessible via `jibo.face.views` for convenience - * @method jibo.rendering.gui.ViewManager#UP - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.UP - */ - - /** - * Same constant as `ViewManager.TRANS_DOWN`, made accessible via `jibo.face.views` for convenience - * @method jibo.rendering.gui.ViewManager#DOWN - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.DOWN - */ - - /** - * Same constant as `ViewManager.TRANS_RIGHT`, made accessible via `jibo.face.views` for convenience - * @method jibo.rendering.gui.ViewManager#RIGHT - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.RIGHT - */ - - /** - * Same constant as `ViewManager.TRANS_LEFT`, made accessible via `jibo.face.views` for convenience - * @method jibo.rendering.gui.ViewManager#LEFT - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.LEFT - */ - - /** - * Same constant as `ViewManager.TRANS_IN`, made accessible via `jibo.face.views` for convenience - * @method jibo.rendering.gui.ViewManager#IN - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.IN - */ - - /** - * Same constant as `ViewManager.TRANS_OUT`, made accessible via `jibo.face.views` for convenience - * @method jibo.rendering.gui.ViewManager#OUT - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.OUT - */ - - /** - * Same constant as `ViewManager.TRANS_NONE`, made accessible via `jibo.face.views` for convenience - * @method jibo.rendering.gui.ViewManager#NONE - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.NONE - */ - - /** - * Transition type for view components to move upwards. - * @method jibo.rendering.gui.ViewManager~TRANS_UP - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.UP - */ - - /** - * Transition type for view components to move downwards. - * @method jibo.rendering.gui.ViewManager~TRANS_DOWN - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.DOWN - */ - - /** - * Transition type for view to move right. - * @method jibo.rendering.gui.ViewManager~TRANS_RIGHT - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.RIGHT - */ - - /** - * Transition type for view to move left. - * @method jibo.rendering.gui.ViewManager~TRANS_LEFT - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.LEFT - */ - - /** - * Transition type for view to fade and scale in from center of screen. - * @method jibo.rendering.gui.ViewManager~TRANS_IN - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.IN - */ - - /** - * Transition type for view to or from eye. - * Use in conjunction with custom View transitions. - * @method jibo.rendering.gui.ViewManager~TRANS_EYE - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.EYE - */ - - /** - * Transition type for view to fade and scale out from center of screens. - * @method jibo.rendering.gui.ViewManager~TRANS_OUT - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.OUT - */ - - /** - * Transition type for no transition. - * @method jibo.rendering.gui.ViewManager~TRANS_NONE - * @deprecated since 7.8.4 - * @see jibo.face.views.TRANSITION.NONE - */ - - /** - * Transition type for no transition. - * @method jibo.rendering.gui.ViewManager~NONE - * @deprecated since 4.1.0 - * @see jibo.face.views#NONE - */ - - /** - * View status triggered once view's init method has been called. - * The same constant is statically accessible via `STATE.INITIALIZED`. - * @name jibo.face.views#INITIALIZED - * @deprecated since 8.1.0 - * @see jibo.face.views.STATE.INITIALIZED - */ - - /** - * View status triggered once initial data has been loaded and configurations set. - * The same constant is statically accessible via `STATE.DATA_LOADED`. - * @name jibo.face.views#DATA_LOADED - * @deprecated since 8.1.0 - * @see jibo.face.views.STATE.DATA_LOADED - */ - - /** - * View status triggered once initial assets have been loaded. - * The same constant is statically accessible via `STATE.ASSETS_LOADED`. - * @name jibo.face.views#ASSETS_LOADED - * @deprecated since 8.1.0 - * @see jibo.face.views.STATE.ASSETS_LOADED - */ - - /** - * View status triggered once loading is complete, at point of dispatch View should be ready for use. - * The same constant is statically accessible via `STATE.LOADED`. - * @name jibo.face.views#LOADED - * @deprecated since 8.1.0 - * @see jibo.face.views.STATE.LOADED - */ - - /** - * View status triggered once View has completed its opening transition. - * The same constant is statically accessible via `STATE.OPENED`. - * @name jibo.face.views#OPENED - * @deprecated since 8.1.0 - * @see jibo.face.views.STATE.OPENED - */ - - /** - * View status triggered once View has completed its closing transition. - * The same constant is statically accessible via `STATE.CLOSED`. - * @name jibo.face.views#CLOSED - * @deprecated since 8.1.0 - * @see jibo.face.views.STATE.CLOSED - */ - - /** - * Category for views that contain an interactive user interface. - * The same constant is statically accessible via `CATEGORY.GUI`. - * @name jibo.face.views#CATEGORY_GUI - * @deprecated since 8.1.0 - * @see jibo.face.views.CATEGORY.GUI - */ - - /** - * Category for views that are primarily used for display and not for interaction. - * The same constant is statically accessible via `CATEGORY.DISPLAY`. - * @name jibo.face.views#CATEGORY_DISPLAY - * @deprecated since 8.1.0 - * @see jibo.face.views.CATEGORY.DISPLAY - */ - - /** - * Category for EyeView type views. - * The same constant is statically accessible via `CATEGORY.EYE`. - * @name jibo.face.views#CATEGORY_EYE - * @deprecated since 8.1.0 - * @see jibo.face.views.CATEGORY.EYE - */ - - /** - * Tap gesture type. - * The same constant is statically accessible via `GESTURE.TAP`. - * @name jibo.face.views.TAP - * @deprecated since 8.1.0 - * @see jibo.face.views.GESTURE.TAP - */ - - /** - * Swipe down gesture type. - * Swipes currently only works for Views. - * The same constant is statically accessible via `GESTURE.SWIPE_DOWN`. - * @name jibo.face.views.SWIPE - * @deprecated since 8.1.0 - * @see jibo.face.views.GESTURE.SWIPE_DOWN - */ - - /** - * Option for setting custom transitions. - * Use with `View.setTransitions` to define custom transitions for adding a View to the view stack. - * @type {number} - * @name jibo.face.views.STACK_ADD - * @deprecated since 8.1.0 - * @see jibo.face.views~STACK_DIRECTION - */ - - /** - * Option for setting custom transitions. - * Use with `View.addTransition` to define custom transitions for removing a View from the view stack - * @type {number} - * @name jibo.face.views.STACK_REMOVE - * @deprecated since 8.1.0 - * @see jibo.face.views~STACK_DIRECTION - */ - - /** - * Option for setting custom transitions. - * Use with `View.addTransition` to define custom transitions where views are swapped, - * this would be when the currentvIew is removed and a new one is added so that the view stack length remians unchanged. - * @type {number} - * @name jibo.face.views.STACK_SWAP - * @deprecated since 8.1.0 - * @see jibo.face.views~STACK_DIRECTION - */ - - /** - * Close all currently active views and open the 'root' view (EyeView). - * @method jibo.face.views#closeAll - * @deprecated 4.1.0 - * @see jibo.face.views#removeAll - */ - - /** - * Close all currently active views up to the root, then add View. - * @method jibo.face.views#closeAllThenAdd - * @deprecated since 4.1.0 - * @see jibo.face.views#removeAllThenAdd - */ - - /** - * Close all currently active views up to the root view but do not open the root view, instead leave an empty screen. - * @method jibo.face.views#closeAllLeaveEmpty - * @deprecated since 4.1.0 - * @see jibo.face.views#removeAllLeaveEmpty - */ - - /** - * Remove the currently displayed View, but do not open the view beneath so that the display is left empty. - * Use when you don't know what the next view will be (i.e. switching skills). - * If current view paused the previous view, proceed as if removeView has been called - * @method jibo.face.views#removeViewLeaveEmpty - * @deprecated since 5.0.0 - * @see jibo.face.views#changeView - */ - - /** - * Close all currently active views up to the root, then add {@link jibo.face.views.View}. - * The newly added view will be one above the root once opened.ed - * @method jibo.face.views#removeAllThenAdd - * @deprecated since 5.0.0 - * @see jibo.face.views#changeView - */ - - /** - * Close all currently active views up to root view. Do not open root; leave screen empty. - * Use when next view is unknown, i.e.switching between skills. - * @method jibo.face.views#removeAllLeaveEmpty - * @deprecated since 5.0.0 - * @see jibo.face.views#changeView - */ - - /** - * Close all currently active views and open the 'root' view ({@link jibo.face.views.EyeView}). - * @method jibo.face.views#removeAll - * @deprecated since 5.0.0 - * @see jibo.face.views#changeView - */ - - /** - * Tap gesture type. - * @name jibo.face.views.TouchManager.TAP - * @deprecated since 8.1.0 - * @see jibo.face.views.GESTURE.TAP - */ - - /** - * Swipe down gesture type. - * @name jibo.face.views.TouchManager.SWIPE - * @deprecated since 8.1.0 - * @see jibo.face.views.GESTURE.SWIPE_DOWN - */ - - /** - * Pan horizontal gesture type. - * @name jibo.face.views.TouchManager.PAN - * @deprecated since 8.1.0 - * @see jibo.face.views.GESTURE.PAN - */ - - /** - * Setup View to trigger its actions list when the hitArea ia clicked. - * @method jibo.face.views#setupScreenClick - * @deprecated since 5.5.2 - * @see jibo.face.views.View#setupScreenClick - */ - - /** - * Intialize the data. - * @method jibo.face.views.View~INITIALIZED - * @deprecated since 8.1.0 - * @see jibo.face.views~STATE.INITIALIZED - */ - - /** - * State set and emitted once initial data has been loaded and configurations set. - * @method jibo.face.views.View~DATA_LOADED - * @deprecated since 8.1.0 - * @see jibo.face.views~STATE.DATA_LOADED - */ - - /** - * State set and emitted once initial assets have been loaded. - * @method jibo.face.views.View~ASSETS_LOADED - * @deprecated since 8.1.0 - * @see jibo.face.views~STATE.ASSETS_LOADED - */ - - /** - * State set and emitted once loading is complete, at point of dispatch View should be ready for use. - * @method jibo.face.views.View~LOADED - * @deprecated since 8.1.0 - * @see jibo.face.views~STATE.LOADED - */ - - /** - * State set and emitted once View has completed its opening transition. - * @method jibo.face.views.View~OPENED - * @deprecated since 8.1.0 - * @see jibo.face.views~STATE.OPENED - */ - - /** - * State set and emitted once View has completed its closing transition. - * @method jibo.face.views.View~CLOSED - * @deprecated since 8.1.0 - * @see jibo.face.views~STATE.CLOSED - */ - - /** - * State set and emitted View has been destroyed. - * @method jibo.face.views.View~DESTROYED - * @deprecated since 8.1.0 - * @see jibo.face.views~STATE.DESTROYED - */ - - /** - * Event emitted if there is a load error. - * @method jibo.face.views.View~LOAD_ERROR - * @deprecated since 8.1.0 - * @see jibo.face.views~STATE.LOAD_ERROR - */ - - /** - * Category for views that contain an interactive user interface. - * @name jibo.face.views.View.CATEGORY_GUI - * @deprecated since 8.1.0 - * @see jibo.face.views~CATEGORY.GUI - */ - - /** - * Category for views that are primarily used for display and not for interfacing. - * @name jibo.face.views.View.CATEGORY_DISPLAY - * @deprecated since 8.1.0 - * @see jibo.face.views~CATEGORY.DISPLAY - */ - - /** - * Category for EyeView type views. - * @name jibo.face.views.View.CATEGORY_EYE - * @deprecated since 8.1.0 - * @see jibo.face.views~CATEGORY.EYE - */ - - /** - * @method - * @name jibo.bt~addBehavior - * @deprecated since 0.10.0 - * @see jibo.bt#register - */ - - /** - * Creates a behavior. - * @method - * @name jibo.bt~createBehavior - * @see jibo.bt#register - * @deprecated since 0.10.0 - */ - - /** - * Creates a decorator. - * @method - * @name jibo.bt~createDecorator - * @see jibo.bt#register - * @deprecated since 0.10.0 - */ - - /** - * @method - * @name jibo.bt~registerBehavior - * @deprecated since 1.1.0 - * @see jibo.bt#register - */ - - /** - * @method - * @name jibo.bt~registerDecorator - * @deprecated since 1.1.0 - * @see jibo.bt#register - */ - - /** - * Creates a behavior. - * @method - * @name jibo.bt.Behavior~setDecorators - * @deprecated since 1.1.0 - * @see jibo.bt.Behavior#decorators - */ - - /** - * Creates a behavior. - * @method - * @name jibo.bt.Behavior~getName - * @deprecated since 1.1.0 - * @see jibo.bt.Behavior#name - */ - - /** - * Creates a behavior. - * @method - * @name jibo.bt.ParentBehavior~setChildren - * @deprecated since 1.1.0 - * @see jibo.bt.ParentBehavior#children - */ - - /** - * @class - * @name AudioUtils - * @memberof jibo.utils - * @deprecated Since 3.0.0 - */ - - /** - * Creates and returns correct full audio path from given file; takes into account asset packs, etc. - * @method jibo.utils.AudioUtils~getPath - * @deprecated Since 3.0.0 - */ - - /** - * Creates a new "Audio" stream based on given audio path and project uri; returns the audio object. - * @method jibo.utils.AudioUtils~startAudio - * @deprecated Since 3.0.0 - */ - - /** - * @method jibo.media~getUrlById - * @deprecated Since 5.8.2 - * @see jibo.media#getUrl - */ - - /** - * - * Stop jibo using voice commands. - * @name jibo.globalEvents#stop - * @deprecated since 6.0.4 - * @see jibo.globalEvents#voiceStop - */ - - /** - * - * Stop jibo using touch commands - * @name jibo.globalEvents#touchOn - * @deprecated since 6.0.4 - * @see jibo.globalEvents#touchStop - */ \ No newline at end of file diff --git a/docs/flow/ActivityImplementation.js b/docs/flow/ActivityImplementation.js deleted file mode 100644 index 25aaa309..00000000 --- a/docs/flow/ActivityImplementation.js +++ /dev/null @@ -1,37 +0,0 @@ - /** - * Perform whatever pre-update setup is required. - * Return true for success, false for failure. - * If a failure, update will not be called. - * @method jibo.flow.ActivityImplementation#start - * @param {jibo.flow.Context} context The executor's context - * @returns {boolean} - */ - - /** - * Perform the activity's normal update action. This will continue to be - * called on every update tick until it returns SUCCEEDED or FAILED. - * @method jibo.flow.ActivityImplementation#update - * @param {jibo.flow.Context} context The executor's context - * @returns {jibo.bt.Status} - */ - - /** - * Stop any ongoing activity (called during the processing of Flow.Interrupt and general exceptions). - * This is provided so that an asynchronous activity can be stopped and its resources released. - * @method jibo.flow.ActivityImplementation#stop - * @param {jibo.flow.Context} context The executor's context - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ - - /** - * Destroy the activity, doing a full cleanup of any resources that need releasing. - * @method jibo.flow.ActivityImplementation#destroy - */ - - /** - * If the Flow has a transition or Flow.Catch in scope capable of handling the given JS exception, turn it into - * a Flow ~Exception.* and process it internally, otherwise stop Flow execution and throw the JS exception. - * @method jibo.flow.ActivityImplementation#formOrThrowException - * @param jsexception {Exception} Javascript Exception object to throw as a JS exception or convert to a Flow exception - * @returns {string} the name of the Flow Exception to be thrown - */ \ No newline at end of file diff --git a/docs/flow/ActivityImplementationFactory.js b/docs/flow/ActivityImplementationFactory.js deleted file mode 100644 index cfb2ce35..00000000 --- a/docs/flow/ActivityImplementationFactory.js +++ /dev/null @@ -1,48 +0,0 @@ - /** - * Given a Flow activity and the current Flow Executor, create the runtime implementation of the activity. - * @method jibo.flow.ActivityImplementationFactory#getImplementationOfActivity - * @param {jibo.flow.Activity} activity - The activity we wish to get the implementation of. - * @param {jibo.flow.FlowExecutor} flowExecutor - The current FlowExecutor. - * @param {any} optionCodeThis - object containing only an '.in' property, whose value is the 'this.out' from the previous activity executed. - * @returns {jibo.flow.ActivityImplementation} an ActivityImplementation for the given activity. - */ - - /** - * Given a Flow activity, return either a Flow-Activity or Behavior constructor for it. - * @method jibo.flow.ActivityImplementationFactory#getActivityOrBehaviorConstructor - * @param {jibo.flow.Activity} activity - The activity to find the constructor for. - * @returns {any} Object with an ActivityImplementation constructor or a Behavior constructor. - */ - - /** - * Return the JS Class name for the given activity. This is simply a permutation of the activity's Flow Type. - * (e.g. it converts Flow.Eval-Async to FlowEvalAsync) - * @param {jibo.flow.Activity} activity - The activity to find the constructor for. - * @returns {string} - The JS Class name of the activity's implementation. - */ - - /** - * Given a BehaviorConstructor, return the Flow implementation of a Behavior (really a Flow Class instance that wraps a Behavior Class instance). - * @method jibo.flow.ActivityImplementationFactory#getBehaviorClassInstance - * @param {jibo.bt.BehaviorConstructor} behaviorConstructor - The Behavior constructor for the Behavior or Decorator being wrapped by this Flow Activity. - * @param {jibo.flow.Activity} activity - The current Behavior-type Flow activity. - * @param {jibo.flow.FlowExecutor} flowExecutor - The current FlowExecutor. - * @param {any} optionCodeThis - The object being used for the "this" object in the option code. - * @returns {jibo.flow.FlowBehavior} - a FlowBehavior instance that wraps the instantiated Behavior. - */ - - /** - * Given an activity constructor, return the constructed activity. - * @param {any} activityConstructor - The ActivityImplementation constructor. - * @param {jibo.flow.Activity} activity - The current Flow activity. - * @param {jibo.flow.FlowExecutor} flowExecutor - The current FlowExecutor. - * @param {any} optionCodeThis - The object being used for the "this" object in the option code. - * @returns {jibo.flow.ActivityImplementation} an ActivityImplementation for the given activity. - */ - - /** - * Log the start of execution of every activity. - * @method jibo.flow.ActivityImplementationFactory#log - * @param {jibo.flow.Activity} activity - The Activity to log a record of. - * @param {jibo.flow.FlowExecutor} flowExecutor - The current FlowExecutor. - */ \ No newline at end of file diff --git a/docs/flow/Context.js b/docs/flow/Context.js deleted file mode 100644 index c7380ac8..00000000 --- a/docs/flow/Context.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * A Notepad object stores each procedure's "local" variables. - * @class Notepad - * @memberof jibo.flow - * @param {jibo.flow.Context} context The context that is referencing the notepad. - * @param {any} params The input parameters to the procedure, available as 'notepad.params' in the procedure. - * @param {jibo.flow.Environment} environment The global environment of the executing flow. - */ - - /** - * A hook so that non-Flow activities (i.e. Behaviors) can set the activity's output transition. - * Available as 'notepad.setTransition'. - * @param {string} transition - */ - -/** - * A Result object is provided during procedure execution to - * hold any outputs the procedure needs to return to the caller. - * It can be filled in as needed by the procedure (e.g. "result.foo = 42"). - * The Result object is made available to the caller throw the invoking Flow.Subflow activity - * (via the "subflow_result_object" parameter of the "getTransition" parameter). - * A procedure's Flow.End activity will always set result.transition. - * @class Result - * @memberof jibo.flow - */ - -/** - * A snapshot of all the relevant info in an exception. This is available as `notepad.FlowEnv.lastException` after an exception occurs. - * @class FlowExceptionInfo - * @property {string} name - The name of the exception, e.g. "~InteractionError.noMatch" - * @property {jibo.flow.ActivityImplementation} activity - The activity in which the exception occurred. Equivalent to `stackTrace[0].activity`. - * @property {jibo.flow.Procedure} procedure - The procedure in which the exception occurred. Equivalent to `stackTrace[0].procedure`. - * @property {Array} stackTrace - An array of objects corresponding to the stack at the time the exception occurred, each having a procedure and activity property. The first element in the array is the inner most frame (ie. where the exception occurred). - * @property {any} payload - An object containing further information about the exception. This may be provided by a `Flow.Throw` activity, or in the case of JS exceptions, is the information passed via the parameter to a JS `catch()` statement. - * @memberof jibo.flow - */ \ No newline at end of file diff --git a/docs/flow/FlowExecutor.js b/docs/flow/FlowExecutor.js deleted file mode 100644 index 7c66f3db..00000000 --- a/docs/flow/FlowExecutor.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Interface specifying what Overrides may be provided during FlowExecutor creation. - * @param {Blackboard} [blackboard] Override the default blackboard object for this flow. - * @param {Object} [notepad] Provide your own notepad object instead of the default one. - * @param {Object} [params] Provide parameters to the Flow code. - * @param {EventEmitter} [emitter] Provide your own emitter object instead of the default one shared with behavior trees. - * @param {jibo.flow.FlowExecutor} [flowExecutor] Provide your own Class for the FlowExecutor (primarly used with DebugFlowExecutor). - * @param {Boolean} [enableLogging] Turn on detailed logging as the flow executes. - * @param {Environment} [environment] Provide a pre-populated FlowEnvironment (normally an empty one is created automatically). - * @param {String} [assetPack] The asset pack name to use for loading assets in this tree. - */ - -/** - * Class representing a FlowExecutor. - * The FlowExecutor runs a FlowRoot. - * @class FlowExecutor - * @memberof jibo.flow - */ - - /** - * Step the primary flow and all parallel flows. - * @method jibo.flow.FlowExecutor#update - * @returns {boolean} - */ - - /** - * Step the flow engine. - * This is overridden by the DebugFlowExecutor so - * that it may intervene in the execution process. - */ - - /** - * Start the Flow Executor. - * This is effectively a nop since all the work is done through update(). - * @method jibo.flow.FlowExecutor#start - */ - - /** - * When FlowExecutor starts - * @event jibo.flow.FlowExecutor#start - */ - - /** - * Called to stop the Flow Executor. - * - * 1) Stop the current activity. - * 2) Emit `stop` to stop update ticks. - * @method jibo.flow.FlowExecutor#stop - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ - - /** - * When FlowExecutor stops. - * @event jibo.flow.FlowExecutor#stop - */ - - /** - * Called when the Flow executor has finished naturally (not via stop or exception). - * We simply emit events indicating that. - */ - - /** - * Send `stop` to the current activity of the Flow Executor in the primary thread. - * @method jibo.flow.FlowExecutor#stopCurrentActivity - */ - - /** - * Send `stop` to the current activity of the Flow Executor in the primary thread of the given context. - * @method jibo.flow.FlowExecutor#stopCurrentActivityInContext - */ - - /** - * Destroy the FlowExecutor. - * Stop the primary thread and destroy all parallel flows within its scope. - * The flow is no longer runnable. - * @method jibo.flow.FlowExecutor#destroy - */ - - /** - * Stop all the parallel flows. - * @method jibo.flow.FlowExecutor#destroyAsyncFlows - * @param {array} contexts the list of stack frames containing async flows to be destroyed - */ - - /** - * Stop and Destroy this flow. - * The flow is no longer runnable. - * @method jibo.flow.FlowExecutor#stopAndDestroy - * @return {Promise} A promise that resolves after any asynchronous cleanup has been performed. - */ \ No newline at end of file diff --git a/docs/flow/FlowExecutorFactory.js b/docs/flow/FlowExecutorFactory.js deleted file mode 100644 index 4a43cdc1..00000000 --- a/docs/flow/FlowExecutorFactory.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Utility methods for registering activities and creating flows. - * @class FlowExecutorFactory - * @namespace jibo.flow - */ - - /** - * Register an activity globally - * @method jibo.flow#register - * @param {String} name The PascalCased name for the behavior. - * @param {String} namespace This behavior's namespace. Pass in a globally unique name for this namesapce. - * @param {Module} classRef Class reference for the behavior or decorator. - */ - - /** - * Add all activities - * @method jibo.flow#registerCore - * @private - */ - - /** - * Give the Flow Executor access to the Activity constructors. - * @param {string} className - Final Class name (e.g. `FlowEvalAsync`) - * @param {string} [namespace] - Namespace of activity -- `core` if unsupplied. - * @returns {jibo.flow.ActivityImplementation} - Constructor of the activity or undefined if not found. - */ - - /** - * Create a runnable flow executor from a flow file import. - * @method jibo.flow#create - * @param {String|Function} uri Relative or absolute path to a `.flow` file or module export of flow. - * @param {FlowExecutorOverrides} [overrides] Options for populating flow globals. - * @returns {jibo.flow.FlowExecutor} - */ - - /** - * Create and run a runnable flow from a flow file import. - * ``` - * const jibo = require('jibo'); - * jibo.init('face', (err) => { - * jibo.flow.run('./flows/main', function(status){}); - * }); - * - * // Other supported APIs - * jibo.flow.run('./flows/main'); - * jibo.flow.run('./flows/main', (status) => {}); - * const overrides = {}; - * jibo.flow.run('./flows/main', overrides); - * jibo.flow.run('./flows/main', overrides, (status) => {}); - * ``` - * - * @method jibo.flow#run - * @param {String|Function} uri Relative or absolute path to a `.flow` file or module export of flow. - * @param {Object} [overrides] Used for supplying optional flow globals and setting FlowExecutor options. - * @param {jibo.bt.Blackboard} [overrides.blackboard] Override the default blackboard object for this flow. - * @param {Object} [overrides.notepad] Provide your own notepad object instead of the default one. - * @param {Object} [overrides.blackboard] Provide your own blackboard object instead of the default one shared with behavior trees. - * @param {Object} [overrides.emitter] Provide your own emitter object instead of the default one shared with behavior trees. - * @param {String} [overrides.assetPack] The asset pack name to use for loading assets in this tree. - * @param {boolean} [overrides.stopOnException] Set to true to cause the FlowExecutor to stop in the debugger with an explorable stacktrace. - * @param {boolean} [overrides.enableLogging] Set to true to cause the FlowExecutor to log an activity trace to the console as it executes. - * @param {function} onFinishedCallback The callback which gets called when the flow has reached a status of FAILED, SUCCEEDED, or INTERRUPTED. - * @returns {jibo.flow.FlowExecutor} - */ - - /** - * Resolve the path in relation to a calleeDirname directory. If the supplied uri is an absolute path, the uri is - * returned unmodified. - * @param {String} calleeDirname The directory name where the uri is relative to. - * @param {String} uri The relative or absolute uri to a file in relation to the calleeDirname. - * @returns {String} The result absolute path. - * @private - */ \ No newline at end of file diff --git a/docs/plugins/ActionPlugin.js b/docs/plugins/ActionPlugin.js deleted file mode 100644 index be4e43ae..00000000 --- a/docs/plugins/ActionPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Installs the Action API, which can be found in the "jibo-action-system" module - * @class ActionPlugin - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/AnimDBPlugin.js b/docs/plugins/AnimDBPlugin.js deleted file mode 100644 index 2769cfc5..00000000 --- a/docs/plugins/AnimDBPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Installs the AnimDB API, which can be found in the "jibo-anim-db" module - * @class AnimDBPlugin - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/AutobotPlugin.js b/docs/plugins/AutobotPlugin.js deleted file mode 100644 index a08c583f..00000000 --- a/docs/plugins/AutobotPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Installs the Autobot API - * @class AutobotPlugin - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/DevShellPlugin.js b/docs/plugins/DevShellPlugin.js deleted file mode 100644 index bdfcdec3..00000000 --- a/docs/plugins/DevShellPlugin.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Jibo plugin designed to communicate with the DevShell service, if it's running - * in int-developer or developer mode - * @class DevShell - * @extends EventEmitter - * @implements Plugin - * @private - */ - - /** - * Called from skills manager - * @param command - */ \ No newline at end of file diff --git a/docs/plugins/EmbodiedPlugin.js b/docs/plugins/EmbodiedPlugin.js deleted file mode 100644 index 1f1b7ef4..00000000 --- a/docs/plugins/EmbodiedPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Installs the Embodied API, which can be found in the "jibo-embodied-dialog" module - * @class EmbodiedPlugin - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/EmotionPlugin.js b/docs/plugins/EmotionPlugin.js deleted file mode 100644 index 08d3bdc7..00000000 --- a/docs/plugins/EmotionPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Installs the Emotion API, which can be found in the "jibo-emotion-system" module - * @class Emotion - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/ExpressionPlugin.js b/docs/plugins/ExpressionPlugin.js deleted file mode 100644 index 85ec50cd..00000000 --- a/docs/plugins/ExpressionPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Installs the DOF Arbiter API, which can be found in the "jibo-dof-arbiter" module - * @class DOFArbiterPlugin - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/FontsPlugin.js b/docs/plugins/FontsPlugin.js deleted file mode 100644 index 3cb87cca..00000000 --- a/docs/plugins/FontsPlugin.js +++ /dev/null @@ -1,3 +0,0 @@ -/** - * Preload the fonts needed for GUI - */ \ No newline at end of file diff --git a/docs/plugins/InteractionMemoryPlugin.js b/docs/plugins/InteractionMemoryPlugin.js deleted file mode 100644 index 3834b1c4..00000000 --- a/docs/plugins/InteractionMemoryPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Installs the interaction memory API, which can be found in the "jibo-interaction-memory" module - * @class InteractionMemoryPlugin - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/Lifecycle.js b/docs/plugins/Lifecycle.js deleted file mode 100644 index 09219852..00000000 --- a/docs/plugins/Lifecycle.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Jibo plugin designed to communicate with Skills Service Manager - * mainly to dispatch events when shutting down, initializing or showing - * the current jibo skill. Available on `jibo.lifecycle` - * @class LifeCycle - * @extends EventEmitter - * @implements Plugin - * @private - */ - - /** - * Call when skill is done and wants to exit - */ - - /** - * Called from skills manager - * @param command - */ \ No newline at end of file diff --git a/docs/plugins/LocationPlugin.js b/docs/plugins/LocationPlugin.js deleted file mode 100644 index 17e849d6..00000000 --- a/docs/plugins/LocationPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Initializes Jibo's location data - * @class LocationPlugin - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/MediaPlugin.js b/docs/plugins/MediaPlugin.js deleted file mode 100644 index eafddcd4..00000000 --- a/docs/plugins/MediaPlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Installs the Media API - * @class MediaPlugin - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/RegistryPlugin.js b/docs/plugins/RegistryPlugin.js deleted file mode 100644 index 83458e56..00000000 --- a/docs/plugins/RegistryPlugin.js +++ /dev/null @@ -1,3 +0,0 @@ -/** - * Fetch the registry host from the IPC host - */ \ No newline at end of file diff --git a/docs/plugins/RenderingPlugin.js b/docs/plugins/RenderingPlugin.js deleted file mode 100644 index 27f1cc62..00000000 --- a/docs/plugins/RenderingPlugin.js +++ /dev/null @@ -1,3 +0,0 @@ -/** - * Registers tasks with the loader related to rendering - */ \ No newline at end of file diff --git a/docs/plugins/ServiceRecordsPlugin.js b/docs/plugins/ServiceRecordsPlugin.js deleted file mode 100644 index 11ec958d..00000000 --- a/docs/plugins/ServiceRecordsPlugin.js +++ /dev/null @@ -1,3 +0,0 @@ -/** - * Fetch the list of services from the registry - */ \ No newline at end of file diff --git a/docs/plugins/ServicesPlugin.js b/docs/plugins/ServicesPlugin.js deleted file mode 100644 index a50be39c..00000000 --- a/docs/plugins/ServicesPlugin.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Init all the clients on the `jibo` object for the running services - * as listed in the services registry. - */ - - /** - * The map of service calls to init. The key must match the - * name of the service as found in the registry. If the - * service isn't currently running (and thus not listed in the - * registry), then the client will not be inited. - */ \ No newline at end of file diff --git a/docs/plugins/VersionsPlugin.js b/docs/plugins/VersionsPlugin.js deleted file mode 100644 index 19470232..00000000 --- a/docs/plugins/VersionsPlugin.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Versions for ssm, platform, jibo. - * @namespace jibo.versions - */ - - /** - * The current version of the jibo API. - * @name jibo.versions#jibo - * @type {String} - */ - - /** - * The current version of skills-service-manager. - * @name jibo.versions#ssm - * @type {String} - */ - - /** - * The content of the current jibo's package.json. - * @name jibo.versions#platform - * @type {String} - */ - - /** - * The full-stack release number of this Jibo's software - * @name jibo.versions#release - * @type {String} - */ - - /** - * The current version of platform. - * @name jibo.versions#_packageInfo - * @type {Object} - * @private - */ - - /** - * Initializes the versions API. - * @private - * @param {Function} done Callback when completed. - */ - - /** - * Check to see if the current version is supported on this platform. - * @method jibo.versions#supported - * @param {String} currentPlatformVersion The current platform version. - * @return {Boolean} `true` if this `jibo` supports the current platform version. - */ - - /** - * The Semver on the platform needed to run this `jibo`. - * @name jibo.versions#requiresPlatform - * @type {String} - */ - - /** - * The content of the current jibo's `package.json`. - * @name jibo.versions#packageInfo - * @type {Object} - */ - - /** - * Internally get the SSM version. - * @method jibo.versions#_getSSMVersion - * @private - * @param {Object} service Current service object for skils. - * @param {Function} done Callback when complete. - */ \ No newline at end of file diff --git a/docs/plugins/VolumePlugin.js b/docs/plugins/VolumePlugin.js deleted file mode 100644 index da902256..00000000 --- a/docs/plugins/VolumePlugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @class VolumePlugin - * @extends EventEmitter - * @implements Plugin - * @private - */ \ No newline at end of file diff --git a/docs/plugins/context/ContextPlugin.js b/docs/plugins/context/ContextPlugin.js deleted file mode 100644 index 356e0dca..00000000 --- a/docs/plugins/context/ContextPlugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Installs the Context Service API, which can be found in services/context - * @class ContextPlugin - * @implements Plugin - * @memberof jibo - * @private - */ \ No newline at end of file diff --git a/docs/plugins/context/ContextProvider.js b/docs/plugins/context/ContextProvider.js deleted file mode 100644 index 37bfd231..00000000 --- a/docs/plugins/context/ContextProvider.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @description - * Context Service for providing on-robot context for cloud and related components. - * - * @namespace jibo.context - */ - - /** - * Updates the Skill portion of the Context with CloudSkill data from The Hub - * @param {jibo.context.SkillData} skill - SkillData provided from the CloudSkill - */ - - /** - * Resets the Skill portion of the Context back to default empty state. - */ - - /** - * Compile on-robot and active cloud skill (if any) context - * @param {jibo.jetstream.types.HubSpeakerRecogResults} [speakers] - List of speakers we've confidently ID'd. - * @param {boolean} [omitLoop=false] - `true` if you would like users/Jibo omitted from the LoopContext - * @returns {Promise} - */ - - /** - * Retrieves all relevant Loop member information. - * @returns {Promise} - * @private - */ \ No newline at end of file diff --git a/docs/plugins/context/api.js b/docs/plugins/context/api.js deleted file mode 100644 index f3a79199..00000000 --- a/docs/plugins/context/api.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Enum of Jibo's colors. - * @typedef jibo.context.JiboColor - * @prop BLACK {string} 'BLACK' - * @prop WHITE {string} 'WHITE' - */ - -/** - * Data provided about a given Loop member. - * @memberof jibo.context - * @interface LooperInfo - * @property {string} firstName - Loop member's first name. - * @property {string} lastName - Loop member's last name. - * @property {string} phoneticName - Loop member's phonetic name. - * @property {string} gender - Loop member's gender. - * @property {number} birthdate - Unix epoch timestamp. - * @property {string} id - Loop member's id in loop. - * @property {string} accountId - Loop member's account id (across loops). - */ - -/** - * Data provided about Jibo himself. - * @memberof jibo.context - * @interface JiboInfo - * @property {jibo.context.JiboColor} color - Jibo's color. - * @property {number} birthdate - Unix epoch timestamp. - * @property {string} id - Loop member's id in loop. - */ - -/** - * Data provided about the Loop and members of it. - * @memberof jibo.context - * @interface LoopContext - * @property {jibo.context.LooperInfo[]} users - Information about every Loop member (except Jibo). - * @property {jibo.context.JiboInfo} jibo - Information about Jibo himself. - * @property {string} owner - Loop owner's id in loop. - * @property {string} loopId - ID of loop. - */ - -/** - * Data provided about Jibo's current emotional state. - * @memberof jibo.context - * @interface EmotionContext - * @property {string} name - Current nearest emotion. - * @property {number} valence - Current valence. - * @property {number} confidence - Current confidence. - */ - -/** - * Data provided about Jibo's current character state. - * @memberof jibo.context - * @interface CharacterContext - * @property {jibo.context.EmotionContext} emotion - Current emotion context. - * @property {jibo.context.MotivationContext} motivation - Current motivation context. - */ - -/** - * Data provided about Jibo's current motivational state. - * @memberof jibo.context - * @interface MotivationContext - * @property {number} social - Current social drive state. - * @property {number} playful - Current playful drive state. - */ - -/** - * Data provided about Jibo's current perceptual information. - * @memberof jibo.context - * @interface PerceptionContext - * @property {string} speaker - ID of the currently active speaker. - * @property {jibo.lps.identity#Person[]} peoplePresent - Data about currently detected present people. - */ - -/** - * Data provided about Jibo's current location. - * @memberof jibo.context - * @interface LocationContext - * @property {string} city - Jibo's current city (or nearest). - * @property {string} state - Jibo's current state. - * @property {string} stateAbbr - ISO 3166 1 alpha 2 spec compliant state (or political equivalent) abbreviation of Jibo's current location. - * @property {string} country - Jibo's current country. - * @property {string} countryCode - ISO 3166 1 alpha 2 spec compliant country code of Jibo's current country. - * @property {number} lat - Jibo's current latitude. - * @property {number} lng - Jibo's current longitude. - * @property {string} iso - ISO 8601 compliant string representing Jibo's current time/timezone. - */ - -/** - * Data derived from last turn of dialog with jibo. - * @memberof jibo.context - * @interface DialogContext - * @property {string} [referent] - ID of a loop member that was referred to in utterance. - */ - -/** - * On-robot context data - * @memberof jibo.context - * @interface RuntimeContext - * @property {jibo.context.EmotionContext} character - Information about Jibo's character state. - * @property {jibo.context.LocationContext} location - Information about Jibo's current location. - * @property {jibo.context.LoopContext} loop - Information about Jibo's loop. - * @property {jibo.context.PerceptionContext} perception - Information about Jibo's perception state. - * @property {jibo.context.DialogContext} dialog - Information about the current turn of Dialog. - */ - -/** - * Cloud skill session data - * @memberof jibo.context - * @interface SkillData - * @property {string} id - Cloud Skill ID. - * @property {Object} [session] - Session data for the currently active Cloud Skill. - */ - -/** - * Combination of on-robot and active cloud skill session data - * @memberof jibo.context - * @interface Context - * @property {jibo.context.RuntimeContext} runtime - On-robot context data. - * @property {jibo.context.SkillData} skill - Cloud skill session data. - */ - -/** - * Retreive the merge of the on-robot context and any active cloud skill session context - * @method jibo.context#getContext - * @param {jibo.jetstream.types.HubSpeakerRecogResults} [speakers] - List of speakers we've confidently ID'd. - * @param {boolean} [omitLoop=false] - `true` if you would like users/Jibo omitted from the LoopContext. - * @returns {Promise} - */ - -/** - * Updates the Skill portion of the Context with active Cloud Skill session data from The Hub - * @method jibo.context#updateSkillContext - * @param {jibo.context.SkillData} data - Skill session data provided from the CloudSkill - */ - -/** - * Resets the Skill portion of the Context back to default empty state - * @method jibo.context#resetSkillContext - */ \ No newline at end of file diff --git a/docs/rendering/FaceRenderer.js b/docs/rendering/FaceRenderer.js deleted file mode 100644 index d50e4132..00000000 --- a/docs/rendering/FaceRenderer.js +++ /dev/null @@ -1,119 +0,0 @@ -/** - * @description - * Controls the rendering of the eye, overlay, and background. - * ``` - * let jibo = require('jibo'); - * jibo.init('face', () => { - * // Setup complete! - * }); - * ``` - * @namespace jibo.face - */ - - /** - * Entire width of Jibo's face. - * @name jibo.face.WIDTH - * @type {int} - * @default 1280 - * @readOnly - */ - - /** - * Entire height of Jibo's face. - * @name jibo.face.HEIGHT - * @type {int} - * @default 720 - * @readOnly - */ - - /** - * Stage container for all PIXI display objects. - * @name jibo.face#stage - * @type {PIXI.Container} - */ - - /** - * If the display is updating. - * @name jibo.face#_paused - * @type {Boolean} - * @private - */ - - /** - * Instance of the update timer for handling events. - * @name jibo.face#_timer - * @type {jibo.timer} - * @private - */ - - /** - * Instance to the GUI/View Manager. - * @private - * @name jibo.face#_views - * @type {jibo.face.views} - */ - - /** - * Instance to the GestureManager for input gestures. - * @private - * @name jibo.face#_gestures - * @type {jibo.face.GestureManager} - */ - - /** - * Instance to the Eye display. - * @private - * @name jibo.face#_eye - * @type {jibo.face.EyeContainer} - */ - - /** - * Creates the canvas for the renderer. - * @private - * @method jibo.face.createView - */ - - /** - * Adds a face animation to play. - * @private - * @method jibo.face#init - * @param {HTMLElement} element HTML element which will contain the view - * @param {boolean} [prepWorkers=true] If Crunch texture loading workers should be prepared. Should be left as the default of true, unless in the SDK. - */ - - /** - * Manage the views on Jibo's face. - * @name jibo.face#views - * @type {jibo.face.views} - */ - - /** - * Create and manage the input gestures. - * @name jibo.face#gestures - * @type {jibo.face.GestureManager} - */ - - /** - * Tweens manager. - * @name jibo.face#tween - * @type {jibo.face.TweenManager} - */ - - /** - * Representation of the eye itself. - * @name jibo.face#eye - * @type {jibo.face.EyeContainer} - */ - - /** - * Update/render the stage. - * @method jibo.face#update - * @private - * @param {int} elapsed Time in milliseconds since the last update - */ - - /** - * If `true`, pauses the face renderer completely. - * @name jibo.face#paused - * @type {boolean} - */ \ No newline at end of file diff --git a/docs/rendering/animation/KeysAnimation.js b/docs/rendering/animation/KeysAnimation.js deleted file mode 100644 index 7ad36d58..00000000 --- a/docs/rendering/animation/KeysAnimation.js +++ /dev/null @@ -1,232 +0,0 @@ -/** - * An abstract Layer for the eye. - * @class Layer - * @memberof jibo.rendering.animation - * @private - */ - -/** - * A layer that represents the Eye. - * @class EyeLayer - * @memberof jibo.rendering.animation - * @private - */ - -/** - * A layer of the KeysAnimation class that represents a timeline animation. - * @class TimelineLayer - * @memberof jibo.rendering.animation - * @private - * @param {Number} index The depth index. - * @param {String} name Name of the timeline. - * @param {jibo.rendering.animation.Timeline} timeline - * @param {Number} startTime The starting time of this animation in seconds. - * @param {Boolean} attach `true` if Timeline should be attached to the eye's position. - * @param {String} offset The frame offset to start playing the animation at - */ - - /** - * Update the position of the animation. - * @method jibo.rendering.animation.TimelineLayer#update - * @param {Number} time Global time of the animation in seconds. - */ - - /** - * Destroy and don't use after this. - * @method jibo.rendering.animation.TimelineLayer#destroy - */ - -/** - * Class used by Animation Utilities to provide playback - * of keys files. - * @class KeysAnimation - * @memberof jibo.rendering.animation - * @extends EventEmitter - * @param {String} id The name of the keys file. - */ - - /** - * The default framerate. - * @name jibo.rendering.animation.KeysAnimation.FRAMERATE - * @type {String} - * @default 30 - */ - - /** - * Event name when animation starts. - * @name jibo.rendering.animation.KeysAnimation.STARTED - * @type {String} - */ - - /** - * Event name when animation stops. - * @name jibo.rendering.animation.KeysAnimation.STOPPED - * @type {String} - */ - - /** - * Event name when builder event is fired. - * @name jibo.rendering.animation.KeysAnimation.EVENT - * @type {String} - */ - - /** - * Event name when animation is cancelled. - * @name jibo.rendering.animation.KeysAnimation.CANCELLED - * @type {String} - */ - - /** - * Event name when audio is played. - * @name jibo.rendering.animation.KeysAnimation.PLAY_AUDIO - * @type {String} - */ - - /** - * Event name when timeline is played. - * @name jibo.rendering.animation.KeysAnimation.PLAY_TIMELINE - * @type {String} - */ - - /** - * Event name when timeline needs to be reordered. - * @name jibo.rendering.animation.KeysAnimation.REORDER - * @type {String} - */ - - /** - * Event when the timeline is updated. - * @name jibo.rendering.animation.KeysAnimation.UPDATE - * @type {String} - * @param {Number} time The current time in seconds from the start of animation. - * @param {Object} dofValues Collection of DOF values for the current frame. - */ - - /** - * Asset Pack name. - * @name jibo.rendering.animation.KeysAnimation#assetPack - * @type {String} - */ - - /** - * Resource root for animation (defaults to root of skill). - * @name jibo.rendering.animation.KeysAnimation#root - * @type {String} - */ - - /** - * Id of the keys file in the cache. - * @name jibo.rendering.animation.KeysAnimation#id - * @type {String} - */ - - /** - * Name of the keys file. - * @name jibo.rendering.animation.KeysAnimation#name - * @type {String} - */ - - /** - * The collection of layers for the animation. - * @name jibo.rendering.animation.KeysAnimation#layers - * @type {Array} - */ - - /** - * Token of an asset load for our keys data, so it doesn't get unloaded under us. - * @private - */ - - /** - * Map of Timeline objects. - * @name jibo.rendering.animation.KeysAnimation#timelines - * @type {Object} - */ - - /** - * Map of PIXI.Texture objects. - * @name jibo.rendering.animation.KeysAnimation#textures - * @type {Object} - */ - - /** - * Map of Sound objects. - * @name jibo.rendering.animation.KeysAnimation#sounds - * @type {Object} - */ - - /** - * The animation options. - * @name jibo.rendering.animation.KeysAnimation#options - * @type {AnimationOptions} - * @private - */ - - /** - * The animation instance. - * @name jibo.rendering.animation.KeysAnimation#instance - * @type {AnimationInstance} - * @private - */ - - /** - * Update the timelines. - * @method jibo.rendering.animation.KeysAnimation#update - * @param {Number} time Current time of this animation - */ - - /** - * Set the keys animation data. - * @name jibo.rendering.animation.KeysAnimation#data - * @type {Object} - * @private - */ - - /** - * Sync a movieclip to the playback of the animation. - * @method jibo.rendering.animation.KeysAnimation#playSync - * @param {animate.MovieClip} instance The clip to play. - * @param {String|Function} [event] The name of the event label or callback function. - * @param {Function} [callback] Callback when play is complete. - */ - - /** - * Destroy the keys animation completely, after the Expression Service has told us that it has finished playing. - * @method jibo.rendering.animation.KeysAnimation#destroyWhenComplete - */ - - /** - * Destroy the keys animation completely. - * @method jibo.rendering.animation.KeysAnimation#destroy - */ - - /** - * Handle animation custom events. - * @method jibo.rendering.animation.KeysAnimation#onEvent - * @private - */ - - /** - * Handle playing audio within the animation. - * @method jibo.rendering.animation.KeysAnimation#onPlayAudio - * @private - * @param {Object} payload - * @param {string} payload.file - */ - - /** - * Reorder the layers of the animation. - * @method jibo.rendering.animation.KeysAnimation#reorder - * @private - */ - - /** - * Handle the playing of a timeline event. - * @method jibo.rendering.animation.KeysAnimation#onPlayTimeline - * @private - * @param {object} payload - * @param {string} payload.file - * @param {number} payload.layerNum - * @param {boolean} payload.attach - * @param {string} payload.offset - */ \ No newline at end of file diff --git a/docs/rendering/animation/KeysData.js b/docs/rendering/animation/KeysData.js deleted file mode 100644 index 23269a02..00000000 --- a/docs/rendering/animation/KeysData.js +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Class used by Animation Utilities to provide playback - * of keys files. - * @class KeysData - * @memberof jibo.rendering.animation - * @extends EventEmitter - * @param {String} id The name of the keys file. - * @param {String} src The absolute path of the keys file. - * @param {String} cache The name of the cache the data was originally loaded into. - */ - - /** - * Asset Pack name. - * @name jibo.rendering.animation.KeysData#assetPack - * @type {String} - */ - - /** - * Resource root for animation (defaults to root of skill). - * @name jibo.rendering.animation.KeysData#root - * @type {String} - */ - - /** - * Source path of animation data - * @name jibo.rendering.animation.KeysData#src - * @type {String} - */ - - /** - * Source path of corresponding `.anim`, if present/valid. - * @name jibo.rendering.animation.KeysData#dotAnimSrc - * @type {String} - */ - - /** - * Name of the initial cache this data was loaded into. Used when determining animation options. - * @name jibo.rendering.animation.KeysData#cache - * @type {String} - */ - - /** - * Map of Timeline objects. - * @name jibo.rendering.animation.KeysData#timelines - * @type {Object} - */ - - /** - * Map of PIXI.Texture objects. - * @name jibo.rendering.animation.KeysData#textures - * @type {Object} - */ - - /** - * Map of Sound objects. - * @name jibo.rendering.animation.KeysData#sounds - * @type {Object} - */ - - /** - * Name of the keys file. - * @name jibo.rendering.animation.KeysData#id - * @type {String} - */ - - /** - * The keys animation data. - * @name jibo.rendering.animation.KeysData#data - * @type {Object} - * @private - */ - - /** - * Add a sound to the animation for playing. - * @method jibo.rendering.animation.KeysData#addSound - * @param {String} id The ID of the sound - * @param {jibo.sound.Sound} sound Instance of sound. - */ - - /** - * Add a timeline to the animation for playing. - * @method jibo.rendering.animation.KeysData#addTimeline - * @param {String} id The ID of the timeline - * @param {jibo.rendering.animation.Timeline} timeline Instance of timeline. - */ - - /** - * Add a PIXI texture to the animation for playback. - * @method jibo.rendering.animation.KeysData#addTexture - * @param {String} id The ID of the texture - * @param {PIXI.Texture} texture Instance of texture. - */ - - /** - * Create a shallow clean copy of this KeysAnimation object resetting all state. - * This should be used when retrieving a keys animation object from cache - * Note: Any clean copy should always be destroyed after use - * @param {CloneOptions} options Options for animation instantiation/playback. - * @method jibo.rendering.animation.KeysData#getCleanCopy - * @return {Promise} - */ - - /** - * Create and immediately play a KeysAnimation from this KeysData. - * Event handlers for `stopped`, `cancelled`, `rejected`, and other animation events must be registered to the - * animation instance immediately (in-stack) upon promise resolution, or else they may be missed. - * @param {CloneOptions} [options] Options for animation instantiation/playback. - * @param {string} [requestor] The system making the animation playback request. - * @method jibo.rendering.animation.KeysData#getAndPlayAnim - * @return {Promise} - */ - - /** - * Destroy the keys data completely. - * @method jibo.rendering.animation.KeysData#destroy - */ - - /** - * Create an animation options from keyframes data or a keyframes file. - * In the case of keyframes data, DOF values are computed and passed to the expression service. - * In the case of a keyframes file, the path to a file of DOF values computed from the keyframes file is passed - * to the expression service. - * @method jibo.rendering.animation.KeysData#createAnimOptions - * @return {AnimationOptions} - * @private - */ \ No newline at end of file diff --git a/docs/rendering/animation/KeysLoader.js b/docs/rendering/animation/KeysLoader.js deleted file mode 100644 index 426d0a1a..00000000 --- a/docs/rendering/animation/KeysLoader.js +++ /dev/null @@ -1,129 +0,0 @@ - /** - * Nested Keys File Loading. - * - * Given a keys file url, load the file and then recursively - * composite into it any keys files it points to (somewhat like macro expansion). - * @return {String} The result of the compositing operation with all reference layers removed. - * @name jibo.rendering.animation.KeysLoader#innerNestedLoad - * @param {String} url Path nanme of the keys file to be loaded - * @param {Callback} complete Callback to call when the load is completed. - * @param {String} [parentId] The layer ID of the referencing frame. - * @param {String} [refBase] The directory that the asset references are with respect to. - * @private - */ - - /** - * Convert keyframes referencing texture, pixi and audio information into assetpack style references if necessary. - * - * The motivation: - * Consider a reference layer in a skill's animation that references an animDB keys file. - * Compositing will pull in the layers from the animDB keys file, but any asset references (textures, audio, pixi) - * in those layers will be relative to the animDB root. If the paths to those assets are not converted to - * asset-pack style references (while we know their provenance) we will not be able to distinguish later on - * whether those references are relative to the animDB or to the local skill. - * - * @param {Keyframes} frames the keyframes object whose asset references will be modified. - * @param {string} assetPack the assetPack that the containing file is in. - */ - - /** - * Convert a non-asset pack reference into an asset-pack one. - * @param assetPack - * @param filepath - * @returns {string} - */ - - /** - * Find all references in a keys file, returning them in reverse-order. - * @name jibo.rendering.animation.KeysLoader#getKeyFileReferences - * @param {Keyframes} frames A keyframes structure containing reference layers. - * @param {String} refBase The directory containing the file from whence the given keyframes were loaded. - * @returns {Array} An array of objects describing references to other keys files, - * each object has these properties: - * `url`: the url of the file being referenced, - * `parentId`: the layerID of the parent, - * `holdFinalPose`: whether the final frame of the referenced layer is held until the next reference (or end), - * `containerDuration`: the duration of the file that contains this reference. - * `layerNumber`: the ordinal layer number of the reference, - * `atEnd`: a boolean that is true if this is the last reference in the layer. - * `nextRefStart`: where the next reference frame is, or Infinity if there are no further references. - * `timeOffset`: the timepoint at which it is to be inserted in the referencing layer. - * @private - */ - - /** - * Place num in a leading-zero-padded field of the given size - * @param {number} num Number to pad - * @param {number} size Size of final field - * @returns {string} - */ - - /** - * Return a full URL for the referenced keys file based on - * the reference mode (by name or by file). - * @param {any} keyframe the keyframe containing the reference. - * @param {string} refBase directory of the file in which the reference is occurring. - * @returns {object} object.url containing the fully resolved path to referenced file and - * object.refBase containing the parent directory of the referencer. - * @method jibo.rendering.animation.KeysLoader#getReferencedUrl - * @private - */ - - /** - * Find any "HOLD_SAFE" events in referenced layers and remove them (by renaming them). - * @name jibo.rendering.animation.KeysLoader#removeHoldSafesInReferences - * @param {Keyframes} frames keyframes to be cleaned. - * @private - */ - - /** - * Strip out any reference-type layers from the keyframes. - * @name jibo.rendering.animation.KeysLoader#removeReferenceLayers - * @param {Keyframes} keyframes keyframes structure containing reference layers. - * @private - */ - - /** - * Shift the layer's validFrom, validUpto and validHoldAfter properties and - * shift the timepoint of all the keyframes within each of the given layers by the given time offset ("validFrom"). - * The validFrom and validUpto parameters are in "referencing" layer coordinates. - * @name jibo.rendering.animation.KeysLoader#timeshift - * @param {Keyframes} frames the layers containing the keyframes to be shifted. - * @param {number} validFrom the beginning of the valid region. - * @param {number} validUpto the ending of valid region, or Infinity for unlimited. - * @param {number} holdAfter the timepoint after which the pose does not change (i.e. it remains fixed at that timepoint). - * @private - */ - - /** - * Insert all the layers of toBeInsertedKeyframes into existingKeyframes at the given layer number. - * Insert them last-first in order to preserve their original ordering at the designated layer. - * @name jibo.rendering.animation.KeysLoader#composite - * @param {Number} layerNumber the layer number in which the keyframes are to be inserted. - * @param {Keyframes} existingKeyframes the existing keyframes into which the layers will be inserted. - * @param {Keyframes} toBeInsertedKeyframes the source of the keyframes to be inserted. - * @private - */ - - /** - * Modifies the layer ids to prefixed by the referencing layer's id (delimited by "-") - * and suffixed with the layer number (delimited by '.'). - * @name jibo.rendering.animation.KeysLoader#fixLayerIds - * @param {Keyframes} frames the set of layers to be modified. - * @param {string} prefix the string with which to prefix each layer id. - * @private - */ - - /** - * Was this layer produced from a keyframes reference? - * @name jibo.rendering.animation.KeysLoader#isReferencedLayer - * @param {any} layer the layer to be checked - * @returns {boolean} - * @private - */ - - /** - // * Return true if frame being referenced already exists in hierarchy. - // * @param frames - // * @param prefix - // */ \ No newline at end of file diff --git a/docs/rendering/animation/Shapes.js b/docs/rendering/animation/Shapes.js deleted file mode 100644 index 3aaaf12f..00000000 --- a/docs/rendering/animation/Shapes.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * The object returned by the ShapesTask. - * @class Shapes - * @memberof jibo.rendering.animation - * @param {String} id ID for the shapes. - * @param {Array} shapes Collection of shapes. - */ - - /** - * Destroys shapes object. - * @method jibo.rendering.animation.Shapes#destroy - */ \ No newline at end of file diff --git a/docs/rendering/animation/Spritesheet.js b/docs/rendering/animation/Spritesheet.js deleted file mode 100644 index 509ce312..00000000 --- a/docs/rendering/animation/Spritesheet.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * The object returned by the SpritesheetTask. - * @class Spritesheet - * @memberof jibo.rendering.animation - * @param {PIXI.BaseTexture} baseTexture - * @param {Object} frames The frames map - * @param {Number} resolution The amount of scale - */ - - /** - * The collection of textures by name. - * @name jibo.rendering.animation.Spritesheet#frames - * @type {Object} - */ - - /** - * Destroys all the textures/frames of spritesheet. - * @method jibo.rendering.animation.Spritesheet#destroy - */ \ No newline at end of file diff --git a/docs/rendering/animation/Timeline.js b/docs/rendering/animation/Timeline.js deleted file mode 100644 index c5a39255..00000000 --- a/docs/rendering/animation/Timeline.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * The object returned by the TimelineTask. Represents a PIXI animation. - * @class Timeline - * @private - * @memberof jibo.rendering.animation - */ - - /** - * Adds a texture for the Timeline. - * @method jibo.rendering.animation.Timeline#addTexture - * @private - * @param {PIXI.Texture} texture Texture reference. - * @param {String} id The id name of texture in cache. - */ - - /** - * Gets a texture/frame that was loaded for this Timeline - * @method jibo.rendering.animation.Timeline#getTexture - * @private - * @param {String} id The id name of texture in cache. - * @returns {PIXI.Texture} Texture reference. - */ - - /** - * Adds shapes to the Timeline. - * @method jibo.rendering.animation.Timeline#addShapes - * @private - * @param {jibo.rendering.animation.Shapes} shapes Texture reference. - */ - - /** - * Adds spritesheet to the Timeline. - * @method jibo.rendering.animation.Timeline#addSpritesheet - * @private - * @param {jibo.rendering.animation.Spritesheet} spritesheet Spritesheet reference. - */ - - /** - * Uploads all the textures to the GPU. - * @method jibo.rendering.animation.Timeline#upload - * @param {PIXI.WebGLRenderer} renderer Reference to face renderer. - * @param {Function} callback Callback when complete. - */ - - /** - * Destroys Timeline object. - * @method jibo.rendering.animation.Timeline#destroy - */ \ No newline at end of file diff --git a/docs/rendering/eye/AbstractEye.js b/docs/rendering/eye/AbstractEye.js deleted file mode 100644 index 2382b655..00000000 --- a/docs/rendering/eye/AbstractEye.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Abstract class for eye overlay and eye classes. - * @class AbstractEye - * @extends jibo.face.AbstractLayer - * @memberof jibo.face - * @param {Boolean} cache `true` to cache textures. - */ - - /** - * The eye mesh. - * @name jibo.face.AbstractEye#eyeMesh - * @type {jibo.face.EyeMesh} - */ - - /** - * Default eye texture when nothing is set. - * @method jibo.face.AbstractEye#init - * @param {PIXI.Texture} texture The default texture to use - */ - - /** - * Destroy and don't use after this. - * @method jibo.face.AbstractEye#destroy - */ - - /** - * Set current eye texture. - * @method jibo.face.AbstractEye#setTexture - * @protected - * @param {PIXI.Texture} texture Texture to set - */ \ No newline at end of file diff --git a/docs/rendering/eye/AbstractLayer.js b/docs/rendering/eye/AbstractLayer.js deleted file mode 100644 index 209fa8f1..00000000 --- a/docs/rendering/eye/AbstractLayer.js +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Abstract class for background, eye overlay and eye classes. - * @class AbstractLayer - * @extends PIXI.Container - * @memberof jibo.face - * @param {Boolean} cache `true` to cache textures. - */ - - /** - * If should update according to DOFValues. - * @name jibo.face.AbstractLayer#connected - * @type {String} - */ - - /** - * `true` if layer has been initialized. - * @name jibo.face.AbstractLayer#initialized - * @type {String} - * @protected - */ - - /** - * Current cached timestamp. - * @name jibo.face.AbstractLayer#timestamp - * @type {Number[]} - * @protected - */ - - /** - * Current cached dofValues. - * @name jibo.face.AbstractLayer#dofValues - * @type {Number[]} - * @protected - */ - - /** - * Empty placeholder texture. - * @name jibo.face.AbstractLayer#_defaultTexture - * @type {PIXI.Texture} - * @private - */ - - /** - * Reference to the current texture. - * @name jibo.face.AbstractLayer#_texture - * @type {PIXI.Texture} - * @private - */ - - /** - * Current path of the texture loaded/loading. - * @name jibo.face.AbstractLayer#_texturePath - * @type {String} - * @private - */ - - /** - * The current asset loading - * @name jibo.face.AbstractLayer#_load - * @type {jibo.loader.AssetLoad} - * @private - */ - - /** - * The cache key of the texture currently in use. - * @name jibo.face.AbstractLayer#_textureCacheKey - * @type {jibo.loader.AssetToken} - * @private - */ - - /** - * Default eye texture when nothing is set. - * @method jibo.face.AbstractLayer#reset - * @param {Boolean} [resetPath=true] `false` to ignore resetting default path - */ - - /** - * Default eye texture when nothing is set. - * @method jibo.face.AbstractLayer#init - * @param {PIXI.Texture} texture The default texture to use - */ - - /** - * Display of DOFValues. - * @method jibo.face.AbstractLayer#display - * @param {Array} timestamp Timestamp when update is called. - * @param {jibo.face.DOFValues} dofValues Update display according to these values. - * @return {Boolean} `true` proceeds with update. - */ - - /** - * Full path to the texture to use. - * @name jibo.face.AbstractLayer#texturePath - * @type {String} - */ - - /** - * Destroy and don't use after this. - * @method jibo.face.AbstractLayer#destroy - */ - - /** - * Set current eye texture. - * @method jibo.face.AbstractLayer#setTexture - * @param {PIXI.Texture} texture Texture to set. - * @override - */ - - /** - * Value to tint. - * @method jibo.face.AbstractLayer#rgb2hex - * @protected - * @param {Number} red Red value from 0 to 1 - * @param {Number} green Green value from 0 to 1 - * @param {Number} blue Blue value from 0 to 1 - * @return {int} The resulting uint color - */ - - /** - * Check to see a path matches the default texture. - * @method jibo.face.AbstractLayer#_isDefaultTexture - * @param {PIXI.Texture} texture The default texture. - * @param {String} value Full path to test. - * @return {Boolean} `true` if the value is the default texture. - * @private - */ - - /** - * If there's a current load happen, stop it. - * @method jibo.face.AbstractLayer#_cancelLoad - * @private - */ - - /** - * Set the current texture path. - * @method jibo.face.AbstractLayer#_applyTexture - * @param {String} value Path to the texture - * @private - */ - - /** - * Set the current texture path. - * @method jibo.face.AbstractLayer#_loadTexture - * @param {String} value Path to the texture - * @private - */ \ No newline at end of file diff --git a/docs/rendering/eye/Background.js b/docs/rendering/eye/Background.js deleted file mode 100644 index ee798946..00000000 --- a/docs/rendering/eye/Background.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Represents a background. - * @class Background - * @extends jibo.face.AbstractLayer - * @memberof jibo.face - * @param {Boolean} cache Cache the texture. - */ - - /** - * The base sprite for holding the texture. - * @name jibo.face.Background#sprite - * @type {PIXI.Sprite} - */ - - /** - * Default eye texture when nothing is set. - * @method jibo.face.Background#init - * @param {PIXI.Texture} texture The default texture to use - */ - - /** - * Update of DOFValues. - * @method jibo.face.Background#display - * @param {Array} timestamp Timestamp when update is called. - * @param {jibo.face.DOFValues} dofValues Update display according to these values. - */ - - /** - * Override destroy - * @method jibo.face.Background#destroy - * @override - */ - - /** - * Set current eye texture. - * @method jibo.face.Background#setTexture - * @protected - * @param {PIXI.Texture} texture Texture to set - */ \ No newline at end of file diff --git a/docs/rendering/eye/Eye.js b/docs/rendering/eye/Eye.js deleted file mode 100644 index dee34df4..00000000 --- a/docs/rendering/eye/Eye.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Represents an eye. - * @class Eye - * @extends jibo.face.AbstractEye - * @memberof jibo.face - */ - - /** - * Update of DOFValues. - * @method jibo.face.Eye#display - * @param {Array} timestamp Timestamp when update is called. - * @param {jibo.face.DOFValues} dofValues Update display according to these values. - * @return {Boolean} `true` proceeds with update. - */ \ No newline at end of file diff --git a/docs/rendering/eye/EyeContainer.js b/docs/rendering/eye/EyeContainer.js deleted file mode 100644 index f12b4d3f..00000000 --- a/docs/rendering/eye/EyeContainer.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * The representation of the eye. - * @class EyeContainer - * @memberof jibo.face - * @extends PIXI.Container - */ - - /** - * Eye display. - * @name jibo.face.EyeContainer#eye - * @type {jibo.face.Eye} - */ - - /** - * Eye overlay display. - * @name jibo.face.EyeContainer#eyeOverlay - * @type {jibo.face.EyeOverlay} - */ - - /** - * The background border for debugging. - * @name jibo.face.EyeContainer#backgroundBorder - * @type {PIXI.Graphics} - */ - - /** - * The background of eye. - * @name jibo.face.EyeContainer#background - * @type {jibo.face.Background} - */ - - /** - * `true` if the eye is connected to the DOF values. - * @name jibo.face.EyeContainer#connected - * @type {Boolean} - */ - - /** - * Glow Filter for eye display. - * Must enable with `jibo.face.eye.glow.enabled = true` - * @name jibo.face.EyeContainer#glow - * @type {jibo.face.GlowFilter} - */ - - /** - * Lighting Filter for eye display. - * Must enable with `jibo.face.eye.lighting.enabled = true` - * @name jibo.face.EyeContainer#lighting - * @type {jibo.face.LightFilter} - */ - - /** - * Adds a face animation to play. - * @method jibo.face#addAnimation - * @param {jibo.rendering.animation.KeysAnimation} anim The animation to play. - */ - - /** - * Removes a face animation. It will be destroyed in the future (but soon) to avoid flickering - * between animations. - * @method jibo.face#removeAnimation - * @param {jibo.rendering.animation.KeysAnimation} anim The animation to remove - this should a playing animation. - */ - - /** - * Holds the current face animation if it is scheduled for removal. It will be removed the next - * time that an animation is set. - * @method jibo.face#holdCurrentAnim - */ - - /** - * Get a texture from the current loaded animation. - * @method jibo.face#getTexture - * @param {String} value Full path to the file to use. - * @return {PIXI.Texture} Texture from the animation. - */ - - /** - * If the eye is active. - * @method jibo.face#active - * @type {boolean} - */ - - /** - * Update the DOFValues for display. - * @private - * @method jibo.face.EyeContainer#display - * @param {Array} timestamp Global timestamps in seconds and milliseconds. - * @param {jibo.face.DOFValues} dofValues Collection of animation values. - * @param {Object} [meta] Optional object for timeline timestamps. - */ - - /** - * Changes the zoom level. Default is 1 = 100%. - * @method jibo.face.eyeContainer#zoom - * @type {number} - * @private - */ - - /** - * Make a border around the screen. - * @method jibo.face.EyeContainer#makeBorder - * @param {Array} timestamp Timestamp when update is called. - * @param {String} dofValues Update display according to these values. - * @param {Object} meta - * @private - */ - - /** - * Cleans up the renderer. - * @method jibo.face.EyeContainer#destroy - * @private - */ - - /** - * Get the default texture names. - * @method jibo.face.EyeContainer#_getDefaultTextures - * @private - */ - - /** - * Handle when the timeline needs to be reordered. - * @method jibo.face.EyeContainer#onAnimationReorder - * @private - */ - - /** - * Handle when the animation stops. - * @method jibo.face.EyeContainer#onAnimationStopped - * @private - */ - - /** - * Queues a face animation for removal. - * @method jibo.face#queueAnimRemoval - * @private - */ - - /** - * Removes the current face animation, and sets up the pending one. - * @method jibo.face#swapLastAnimForPending - * @private - */ - - /** - * Removes the current face animation, destroying it. - * @method jibo.face#removeLastAnim - * @private - */ - - /** - * Removes the current face animation, destroying it and resetting the eye. - * @method jibo.face#removeLastAnimAndReset - * @private - */ \ No newline at end of file diff --git a/docs/rendering/eye/EyeMesh.js b/docs/rendering/eye/EyeMesh.js deleted file mode 100644 index 27d08129..00000000 --- a/docs/rendering/eye/EyeMesh.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The mesh of the eye. - * @class EyeMesh - * @extends PIXI.mesh.Mesh - * @memberof jibo.face - * @param {PIXI.Texture} texture - */ - - /** - * The points for DOF transforms. - * @name jibo.face.EyeMesh#points - * @type {Array} - */ \ No newline at end of file diff --git a/docs/rendering/eye/EyeOverlay.js b/docs/rendering/eye/EyeOverlay.js deleted file mode 100644 index 79ca13a5..00000000 --- a/docs/rendering/eye/EyeOverlay.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Represents an eye overlay. - * @class EyeOverlay - * @extends jibo.face.AbstractEye - * @memberof jibo.face - */ - - /** - * Update of DOFValues. - * @method jibo.face.EyeOverlay#display - * @param {Array} timestamp Timestamp when update is called. - * @param {jibo.face.DOFValues} dofValues Update display according to these values. - * @return {Boolean} `true` proceeds with update. - */ \ No newline at end of file diff --git a/docs/rendering/eye/filters/glow/GlowFilter.js b/docs/rendering/eye/filters/glow/GlowFilter.js deleted file mode 100644 index 2bfa32ad..00000000 --- a/docs/rendering/eye/filters/glow/GlowFilter.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Apply a glow and halo effect to a Display Object. - * - * @class GlowFilter - * @extends PIXI.Filter - * @memberof jibo.face - */ - - /** - * Render the glow over the displayObject. - * Can use Add (recommended), or Screen. - * @name jibo.face.GlowFilter#blendMode - * @type {Number} - */ - - /** - * Target that the glow centers on. - * @name jibo.face.GlowFilter#target - * @type {DisplayObject} - */ - - /** - * Set the blur amount of the glow (increases size of glow). - * - * @name jibo.face.GlowFilter#blur - * @type {Number} - * @default 15 - */ - - /** - * Set the quality of the blur. High quality (10) will degrade performance. - * Low quality (1) will sacrifice quality for performance. - * - * @name jibo.face.GlowFilter#blurQuality - * @type {Number} - * @default 7 - */ - - /** - * Speed (in pixels per frame) halo moves outward at each update. - * Use negative values to animate in reverse. - * @name jibo.face.GlowFilter#haloSpeed - * @type {Number} - * @default 0 - */ - - /** - * Maximum distance (in pixels) that the halo can be away from the edges. - * @name jibo.face.GlowFilter#haloMaxDistance - * @type {Number} - * @default 80 - */ - - /** - * Set the distance of the halo from the glow from 0 to 1. 0 makes the halo touch the glow. - * 1 puts the halo haloMaxDistance from the edge of the glow. - * @name jibo.face.GlowFilter#halo - * @type {Number} - * @default 0 - */ - - /** - * Filter amount from 0 to 1. - * 0 to apply no lighting effect. 1 to make lighting effect fully visible. - * @name jibo.face.GlowFilter#amount - * @type {Number} - * @default 1.0 - */ - - /** - * Color of the glow in hexadecimal. - * eg 0xFF0000 - * @type {Hexadecimal} - * @name jibo.face.GlowFilter#color - */ - - /** - * Conversion utility to convert hex into alpha - * @method jibo.face.GlowFilter#hex2rgba - */ - - /** - * Update of DOFValues. - * @method jibo.face.Eye#update - * @param {Array} timestamp Timestamp when update is called. - * @param {String} dofValues Update display according to these values. - */ - - /** - * Update the halo animation. - * @private - * @method jibo.face.Eye#animate - */ \ No newline at end of file diff --git a/docs/rendering/eye/filters/light/LightFilter.js b/docs/rendering/eye/filters/light/LightFilter.js deleted file mode 100644 index 38bf5049..00000000 --- a/docs/rendering/eye/filters/light/LightFilter.js +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Apply a light effect to a displayObject. - * Create a gradient scaled to match the dimensions of the object. - * Automatically adjust gradient position based on location of light effect. - * - * @class LightFilter - * @extends PIXI.Filter - * @memberof jibo.face - */ - - /** - * Move the gradient center this distance in relation to the light source. - * The higher the value, the greater the effect of the light movement. - * @name jibo.face.LightFilter#radius - * @type {Number} - * @default 250 - */ - - /** - * Distance the gradient center will move based on the distance from the light source. - * The higher the values the greater the effect of the light movement. - * @name jibo.face.LightFilter#distanceMagnification - * @type {PIXI.Point} - */ - - /** - * Position of the light source. For the best effect this should be set to be the center of the screen - * @name jibo.face.LightFilter#lightPosition - * @type {PIXI.Point} - */ - - /** - * Target that the glow centers on. - * @name jibo.face.LightFilter#target - * @type {DisplayObject} - */ - - /** - * Darkest (furthest) color of the light effect in hexadecimal numbers. - * i.e. 0xFF0000 - * @type {Number} - * @default 0x5a5552 - * @name jibo.face.LightFilter#dark - */ - - /** - * Mid-color of the light effect in hexadecimal numbers. - * i.e. 0xFF0000 - * @default 0xc0bab6 - * @type {Number} - * @name jibo.face.LightFilter#mid - */ - - /** - * Lightest (closest) color of the light effect in hexadecimal numbers. - * i.e. 0xFF0000 - * @default 0xffffff - * @type {Number} - * @name jibo.face.LightFilter#light - */ - - /** - * Amount of the light between 0 and 1 to (creates speaking light effect). - * Apply to darkest areas first. 0 = no extra brightness. 1 = full white. - * @default 1 - * @type {Number} - * @name jibo.face.LightFilter#amount - */ - - /** - * Brightness of the filter between 0 and 1. - * 0 = no lighting effect. 1 = full light effect visible. - * @default 1 - * @type {Number} - * @name jibo.face.LightFilter#brightness - */ - - /** - * Ratio of the midpoint of the gradient between 0 and 1. - * Lower value = mid color gradient sits closer to center of light gradient. - * Higher value = mid color gradient sits closer to outer dark part of gradient. - * @default 0.5 - * @type {Number} - * @name jibo.face.LightFilter#gradientRatio - */ - - /** - * Conversion utility to convert hex into alpha. - * @method jibo.face.LightFilter#hex2rgba - */ - - /** - * Update the DOFValues for display. - * @private - * @method jibo.face.LightFilter#update - * @param {Array} timestamp The timestamps. - * @param {jibo.face.DOFValues} dofValues - */ - - /** - // * Convert R, G and B values to Uint - // * @method jibo.face.LightFilter#rgbToUint - // * @private - // * @param {Number} r Red value - // * @param {Number} g Green value - // * @param {Number} b Blue value - // * @return {Number} Uint of color. - // */ \ No newline at end of file diff --git a/docs/rendering/gui/Component.js b/docs/rendering/gui/Component.js deleted file mode 100644 index 0f8a35bf..00000000 --- a/docs/rendering/gui/Component.js +++ /dev/null @@ -1,291 +0,0 @@ -/** - * @interface jibo.face.views.Component~ComponentOptions - * @description Interface - Configuration values for creating a Component. - * @prop {String} [id] - Identifier for component. - * @prop {String} [type] - Type of component. - * @prop {jibo.face.views~AssetDescriptor[]} [assets] - List of required asset descriptors. - * @prop {jibo.face.views~ActionDescriptor} [action] - Action triggered when user interacts with the component. - * @prop {jibo.face.views~ActionDescriptor[]} [actions] - List of possible actions for the interactions with the component. - */ - -/** - * Base component class for GUI elements. - * @class Component - * @extends EventEmitter - * @memberof jibo.face.views - * @abstract - */ - - /** - * String used for identification, each Component within a - * ComponentGroup should have a unique id to help with retrieval. - * @name jibo.face.views.Component#id - * @type {String} - */ - - /** - * Reference to the parent group of this Component. - * @name jibo.face.views.Component#parentGroup - * @type {jibo.face.views.ComponentGroup} - */ - - /** - * Reference to the top most parent group of this Component, which is a View. - * @name jibo.face.views.Component#_parentView - * @type {jibo.face.views.View} - * @private - */ - - /** - * Subcomponent to handles interactive aspects of Component. - * Manages actions and their gesture association. - * @name jibo.face.views.Component#_touchInteractivity - * @type {jibo.face.views.TouchInteractive} - * @private - */ - - /** - * Set to `true` class has changed its - * state in a way that needs to be recorded between Views (e.g when a - * list moves from one page to another). - * @name jibo.face.views.Component#stateChanged - * @type {Boolean} - * @default false - * @readOnly - */ - - /** - * The Component type. Should equal the Class name. - * In some case, `type` may not be equal to Class name if you're using variants. - * Variants allow for different behavior within the class without having to extend it. - * @name jibo.face.views.Component#type - * @type {String} - * @readOnly - */ - - /** - * Holds Subcomponents. - * @name jibo.face.views.Component#_subcomponents - * @type {{jibo.face.views.Subcomponent}} - * @private - */ - - /** - * Flag determining whether to respond to input. - * @name jibo.face.views.Component#inputLocked - * @type {Boolean} - */ - - /** - * Return array of objects that describe assets to be loaded. - * Refer to {@link jibo.loader} for documentation. - * @name jibo.face.views.Component#assetDescriptors - * @type {jibo.face.views~AssetDescriptor[]} - * @readOnly - */ - - /** - * Get the View the Component is ultimately parented to. - * @name jibo.face.views.Component#parentView - * @type {jibo.face.views.View} - * @readOnly - */ - - /** - * Add a Subcomponent. - * @method jibo.face.views.Component#addSubcomponent - * @param {jibo.face.views.Subcomponent} subcomponent - Subcomponent to add. - * @returns {jibo.face.views.Subcomponent} Subcomponent added. - */ - - /** - * Retrieve a Subcomponent. - * @method jibo.face.views.Component#getSubcomponent - * @param {string} type - Type of SubComponent, can access type statically from class like Subcomponent.TYPE. - * @returns {jibo.face.views.Subcomponent} Subcomponent matching given type, otherwise null. - */ - - /** - * Applies data contained within the given `configData` object (generally derived - * from JSON) to the class. Override this method to configure further. - * data and/or make manual additions to the class's variables. - * @method jibo.face.views.Component#assignConfig - * @param {Object} configData The configuration object for the Component. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Takes initial config Object that was provided to define class and updates it - * with any necessary values regarding any new `state` of the component. - * Returns the updated Object, though it shouldn't be necessary to reassign - * the returned Object, since generally the updated values are assigned through `Object.assign` - * to merge new values into original. - * @method jibo.face.views.Component#updateConfig - * @param {Object} configObject The configuration Object for the Component. - * @abstract - */ - - /** - * To be overridden, should create DisplayObjects from given assets and add the - * to stage via the given container. - * @method jibo.face.views.Component#createDisplay - * @param {PIXI.Container} container Parent container, which all DisplayObject - * created within this Component should be added to. - * @param {Object} [assets] Object passed back from loader namespace load method. - * Refer to {@link jibo.loader} for details. - * @abstract - */ - - /** - * Register with the parent group to enter the update loop. - * If `true` registers for update, if `false` unregisters for update. - * @method jibo.face.views.Component#registerUpdate - * @param {Boolean} bool Flag to register or unregister with update. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Frame enter loop update. - * @method jibo.face.views.Component#update - * @param {number} elapsed Time in milliseconds since the last frame update. - * @abstract - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Cleanup method to assist with garbage collection. - * @method jibo.face.views.Component#destroy - */ - - /** - * Called by parent ComponentGroup once parent has finished its loading and setup. - * Allows opportunity to do additional setup that may depend on other components. - * - * ATTENTION : This should not be called directly, the parent View {@link jibo.face.views.View} - * will call this, which will recurse through Component tree. - * @method jibo.face.views.Component#ready - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Method for `open` transition, override to custom how Component opens. - * Method is responsible for calling the callback in all situations as - * the parent ComponentGroup is waiting for all children to trigger the callback in oder to complete. - * - * ATTENTION : This should not be called directly, {@link jibo.face.views} - * will manage when Components should close during the view process. - * @method jibo.face.views.Component#open - * @param {Function} callback Function to be called once open is complete. - * @param {String} transitionType String used to determine way Component opens. - * Refer to {@link jibo.face.views} for constants used - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Method for `close` transition, override to custom how Component opens. - * Method is responsible for calling the callback in all situations as - * the parent ComponentGroup is waiting for all children to trigger the callback in oder to comple - * - * ATTENTION : This should not be called directly, {@link jibo.face.views} - * will manage when Components should close during the view process. - * @method jibo.face.views.Component#close - * @param {Function} callback Function to be called once open is complete. - * @param {String} [transitionType] String used to determine way Component closes. - * Refer to {@link jibo.face.views} for constants used. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - */ - - /** - * Manually add an asset descriptor via parameters. - * Refer to {@link jibo.loader} for documentation. - * @method jibo.face.views.Component#addAssetDescriptor - * @param {String} id The id for the asset, ids must be unique, otherwise they will override each other. - * @param {String} src The source path of the asset to be loaded - * @param {String} type The type of asset to load. Refer to {@link jibo.loader} for valid types. - * @param {Boolean} [upload = false] Flag determining if asset should be loaded to the CPU as part of the load process. - * @param {String} [cache] - Cache asset is associated with. Will use the loader's current cache unless otherwise specified. - * @returns {Object} Asset descriptor added - */ - - /** - * Manually add an asset descriptor object. Refer to {@link jibo.loader} for documentation on format. - * @method jibo.face.views.Component#addAssetDescriptorObject - * @param {jibo.face.views~AssetDescriptor} assetDescriptor See {@link jibo.loader} for asset format. - * @returns {Object} Asset descriptor object added. - */ - - /** - * Component has interactivity. - * NOTE: Possible that interactivity is not active, will still return `true` in this case. - * @name jibo.face.views.Component#hasTouchInteractive - * @type {Boolean} - * @readOnly - */ - - /** - * Whether Component has interactivity and it is active. - * @name jibo.face.views.Component#isTouchInteractive - * @type {Boolean} - * @readOnly - */ - - /** - * Add a {@link jibo.face.views.ActionData} and associate it with given gesture. - * Generally these actions are triggered on a screen press (if a screen press is set up). - * Adding an action adds interactivity to the Component. - * @method jibo.face.views.Component#addAction - * @param {jibo.face.views.ActionData | string} action - The action to be triggered on click, - * can pass the ActionData or provide the action type - * @param {any} [data] - The data Object for the action, generally used if passing the action type. - * @param {boolean} [clearPrevious = false] Flag to determine if we should clear out the existing actions. - * @param {boolean} [toFront = false] If `true` adds action to front of actions list, causing it to be called first when actions are triggered. - * @param {jibo.face.views.GESTURE} [gesture = tap] - Type of gesture the actions are associated with. - * @returns {jibo.face.views.ActionData} The ActionData added. - */ - - /** - * Clear all actions associated with given gesture type. - * @method jibo.face.views.Component#clearActions - * @param {jibo.face.views.GESTURE} [gesture = tap] - Type of gesture the actions ae associated with. - */ - - /** - * Remove all actions of given type associated with given gesture. - * @method jibo.face.views.Component#removeActionsByType - * @param {string} actionType - Type of ActionData to remove. - * @param {jibo.face.views.GESTURE} [gesture = tap] - Type of gesture the actions are associated with. - */ - - /** - * Trigger actions associated with given gesture type. - * Calls Component or the Component parent's actionHandler for each action. - * @method jibo.face.views.Component#triggerActions - * @param {jibo.face.views.GESTURE} [gesture = tap] - Type of gesture the actions are associated with. - * @return {boolean} `true` if at least one action was triggered. - */ - - /** - * Get actions associated with given gesture type. - * @method jibo.face.views.Component#getActions - * @param {jibo.face.views.GESTURE} [gesture = tap] - Type of gesture the actions ae associated with. - * @return {jibo.face.views.ActionData[]} Array of actions. - */ - - /** - * Returns `true` if there are actions associated with given gesture type. - * @method jibo.face.views.Component#hasActions - * @param {jibo.face.views.GESTURE} [gesture = tap] - Gesture actions related to. - * @return {boolean} `true` if actions found for given gesture type. - */ - - /** - * Turn interactivity on and off. - * @method jibo.face.views.Component#lockInput - * @param {Boolean} flag - Flag to turn interactivity on or off. - */ \ No newline at end of file diff --git a/docs/rendering/gui/ComponentCreator.js b/docs/rendering/gui/ComponentCreator.js deleted file mode 100644 index 0d0dcf4b..00000000 --- a/docs/rendering/gui/ComponentCreator.js +++ /dev/null @@ -1,94 +0,0 @@ - /** - * Instance used for singleton. - * @name jibo.face.views.ComponentCreator._instance - * @type {jibo.face.views.ComponentCreator} - * @private - */ - - /** - * Hash table for registered classes. - * To be able to create Classes dynamically must first keep reference to them - * that can later be retrieved by key value pairing. - * @name jibo.face.views.ComponentCreator#_classRegistry - * @type {any} - * @private - */ - - /** - * Default view to create if none is specified in creation methods. - * @name jibo.face.views.ComponentCreator.DEFAULT_VIEW - * @type {String} - * @default 'View' - * @readonly - * @private - */ - - /** - * Create a View from its class and configuration data. - * @method jibo.face.views.ComponentCreator#createView - * @param {any} [viewClass] Can be the class Object or the string name of the class (name must match class names in registry). - * @param {any} [config] Can config as an Object or a string of the path the JSON config file. - * @returns {jibo.face.views.View} The View created. - */ - - /** - * Creates a view from a config. - * @method jibo.face.views.ComponentCreator#createViewFromConfigObject - * @param {Object} config The configuration Object for the Component. - * @returns {jibo.face.views.View} The View created. - */ - - /** - * Create a View from its configuration path. - * This process requires a load, the {@link jibo.face.views.View} will be returned within the given callback - * @method jibo.face.views.ComponentCreator#createViewFromConfigPath - * @param {String} configPath Path to the configuration file defining the View to create. - * @param {jibo.face.views~ViewCallback} complete Callback called once when View is created. - * @param {Function} [failure] Callback called if View fails to be created. - */ - - /** - * Creates a {@link jibo.face.views.ViewState} that represent a {@link jibo.face.views.View}. - * ComponentCreator keeps a registry of known View classes, which allows the classes to be constructed. - * @method jibo.face.views.ComponentCreator#createViewState - * @param {Object|String} viewClass Can be View class or string name of View class. - * @param {Object|String} [config] Can be configuration Object or the path to JSON config file. - * @returns {jibo.face.views.ViewState} The created ViewState. - */ - - /** - * Create a {@link jibo.face.views.View} from a {@link jibo.face.views.ViewState}. - * @method jibo.face.views.ComponentCreator#createViewFromState - * @param {jibo.face.views.ViewState} viewState The ViewState associated with the View to create. - * @returns {jibo.face.views.View} The created View. - */ - - /** - * Create a {@link jibo.face.views.Component} from configuration data. - * @method jibo.face.views.ComponentCreator#createComponentFromConfig - * @param {Object} componentConfig Configuration Object for the Component, generally derived from JSON. - * @returns {jibo.face.views.Component} The Component defined by the configuration Object. - */ - - /** - * Register class so it can be referenced later for dynamic creation. - * A `key` must be provided to retrieve the class, if none is provided - * then the method looks for a `DEFAULT_TYPE` property on the class. - * When creating a custom class it is helpful to define `DEFAULT_TYPE`. - * This `key` is also used within the JSON configuration to specify the component Class. - * @method jibo.face.views.ComponentCreator#registerClass - * @param {any} componentClass The Class to register. Class must be or extend {@link jibo.face.views.View}. - * @param {String} [classType] If specified the given string will be used as the registry key, - * otherwise registry key is derived from the Class's name. - * classNameOverride allows for multiple registries for the same Class, - * which can be used for type variation within the same Class. - * @example - * static public static get DEFAULT_TYPE():string {return 'YourClassName';} - */ - - /** - * Unregister a class from the class registry. - * Pass the 'key' used to register the class. - * @method jibo.face.views.ComponentCreator#unregisterClass - * @param {String} [classType] The string used to identify the class, often this is defined by the class via DEFAULT_TYPE - */ \ No newline at end of file diff --git a/docs/rendering/gui/ComponentGroup.js b/docs/rendering/gui/ComponentGroup.js deleted file mode 100644 index 48b17cce..00000000 --- a/docs/rendering/gui/ComponentGroup.js +++ /dev/null @@ -1,265 +0,0 @@ - /** - * DO NOT ADD TO DIRECTLY - * - * Object serving as hash table for child Components using the Component's id variable as a key. - * To add components use [addComponent()]{@link jibo.face.views.ComponentGroup#addComponent} - * @name jibo.face.views.ComponentGroup#componentLibrary - * @type {Object} - * @protected - */ - - /** - * DO NOT ADD TO DIRECTLY - * - * Array of child Components. - * To add components use [addComponent()]{@link jibo.face.views.ComponentGroup#addComponent} - * @name jibo.face.views.ComponentGroup#componentList - * @type {jibo.face.views.Component[]} - * @protected - */ - - /** - * DO NOT WRITE DIRECTLY - * - * Array of config Objects (generally derived from JSON). - * Gets defined within various creation methods. - * @name jibo.face.views.ComponentGroup#componentConfigs - * @type {any[]} - * @protected - */ - - /** - * Container for displays, is set within [createDisplay()]{@link jibo.face.views.Component#createDisplay} - * which receives the container as a parameter. - * @name jibo.face.views.ComponentGroup#container - * @type {PIXI.Container} - * @protected - */ - - /** - * List of Components that have registered to be updated. - * @name jibo.face.views.ComponentGroup#_updateRegistry - * @type {jibo.face.views.Component[]} - * @private - */ - - /** - * Get the number of child components. - * @name jibo.face.views.ComponentGroup#componentsTotal - * @type {number} - * @readOnly - */ - - /** - * List of assets required by the ComponentGroup and its Component children. - * Compiles list of all assets on each call. - * @name jibo.face.views.ComponentGroup#assetDescriptors - * @type {jibo.face.views~AssetDescriptor[]} - * @readOnly - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Compiles together required assets for the ComponentGroup and its children. - * @name jibo.face.views.ComponentGroup#groupAssetDescriptors - * @type {jibo.face.views~AssetDescriptor[]} - * @readonly - * @protected - */ - - /** - * Turn the interactivity of the child components off or on. - * @method jibo.face.views.ComponentGroup#lockInput - * @param {boolean} flag - Flag to turn interactivity on or off. - */ - - /** - * Turn the interactivity of the child components off or on. - * @method jibo.face.views.ComponentGroup#lockChildInput - * @param {boolean} flag - Flag to turn interactivity on or off. - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Update configuration Object to reflect the current configuration state. - * This ensures that when the Component is recreated from its configuration it reflects its last state. - * @method jibo.face.views.ComponentGroup#updateConfig - * @param {Object} configObject Configuration Object to update. - * @returns {any} The given configuration Object with any required values updates applied. - */ - - /** - * Add component to this ComponentGroup, allows parent and child to reference to each other. - * @method jibo.face.views.ComponentGroup#addComponent - * @param {jibo.face.views.Component} component The Component to add this group's component list and library. - * @param {String} [componentId] The id to assign to the Component, if specified will overwrite existing id, - * if none is specified an id will be automatically generated and assigned. - * @returns {jibo.face.views.Component} The given Component. - */ - - /** - * Get index of Component within the ComponentGroup's component list. - * @method jibo.face.views.ComponentGroup#getIndexOfComponent - * @param {jibo.face.views.Component} component - Component to check for index. - * @returns {number} Index of the Component in the component list - */ - - /** - * Remove ComponentGroup's reference to a Component. - * This does not destroy the Component or remove its assets from the manifest. - * It only removes it from the ComponentGroup array and hash that reference it. - * @method jibo.face.views.ComponentGroup#removeComponent - * @param {jibo.face.views.Component|Number|String} componentDeterminer Provide Component, index of component, or id of component to remove. - * @returns {jibo.face.views.Component} The Component being removed. - */ - - /** - * Retrieve a child Component by its id. - * @method jibo.face.views.ComponentGroup#getComponentById - * @param {String} componentId The ID of the component to retrieve. - * @returns {jibo.face.views.Component} The retrieved component. - */ - - /** - * Retrieve a child Component by its index. - * @method jibo.face.views.ComponentGroup#getComponentByIndex - * @param {number} index The index of the component to retrieve. - * @returns {jibo.face.views.Component} The retrieved component. - */ - - /** - * Returns first component found in Component tree that returns `true` for given test. - * Iterates downward, breadth-first search, starting from this ComponentGroup. - * @method jibo.face.views.ComponentGroup#findComponent - * @param {Function} testFunction - Function must take a Component parameter and return a boolean, - * passing an additional Object to test against is optional. - * @param {any} [against] - Object to test against. - * @return {jibo.face.views.Component} First Component found that the testFunction return `true` for. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Frame enter loop update. - * Calls update method of any child that has registered for updates. - * @method jibo.face.views.ComponentGroup#update - * @param {number} elapsed Time in milliseconds since the last frame update. - */ - - /** - * Register for the given component's update method to be called. - * @method jibo.face.views.ComponentGroup#registerComponentUpdate - * @param {jibo.face.views.Component} component The component to update. - */ - - /** - * Stop the given component's update method from getting called. - * @method jibo.face.views.ComponentGroup#unregisterComponentUpdate - * @param {jibo.face.views.Component} component The Component to stop providing updates to. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Create this Component's display as well as calling createDisplay on all child Components. - * This method should should 'visualize' the component, creating DisplayObjects and adding them the container. - * @method jibo.face.views.ComponentGroup#createDisplay - * @param {PIXI.Container} container Is ultimately a child of the stage. - * @param {any} assets Object passed back from loader namespace load method, - * refer to loader namespace within jibo for details. - */ - - /** - * Called by parent ComponentGroup once parent has finished its loading and setup, - * calls ready on all child Components. - * Allows opportunity to do additional setup that may depend on other components. - * - * ATTENTION: This should not be called directly; the top level [View]{@link jibo.face.views.View} - * will call this, which will recurse through Component tree. - * @method jibo.face.views.ComponentGroup#ready - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Method for `open` transition. - * Iterates through components and calls their open method. - * Method is responsible for calling the callback in all situations. - * - * ATTENTION : This should not be called directly; {@link jibo.face.views} - * will manage when Components should open during the view process. - * @method jibo.face.views.ComponentGroup#open - * @param {Function} callback Function to be called once open is complete. - * @param {String} transitionType String used to determine way Component opens, - * refer to ViewManager for constants used - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Method for `close` transition. - * Iterates through components and calls their close method. - * Method is responsible for calling the callback in all situations. - * - * ATTENTION : This should not be called directly; {@link jibo.face.views} - * will manage when Components should close during the view process. - * @method jibo.face.views.ComponentGroup#close - * @param {Function} callback Function to be called once close is complete. - * @param {String} [transitionType] String used to determine way Component closes, - * refer to ViewManager for constants used. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - */ - - /** - * Call open method on all component children. - * Iterates through components and calls their open method, passing given transitionType. - * Method is responsible for calling the callback in all situations. - * @method jibo.face.views.ComponentGroup#openChildren - * @param {Function} callback Function called once all component children have completed their open. - * @param {String} transitionType Transition type passed to all component children. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @protected - */ - - /** - * Call close method on all component children. - * Iterates through components and calls their close method. - * Method is responsible for calling the callback in all situations. - * @method jibo.face.views.ComponentGroup#closeChildren - * @param {Function} callback Function called once all component children have completed their close. - * @param {String} transitionType Transition type passed to all component children. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @protected - */ - - /** - * Method to bubble actions up from Components. - * Actions pass through this method up to next ComponentGroup parent, ultimately reaching the ViewManager. - * Passing action up through parents allows each to augment or block the action if desired. - * @method jibo.face.views.ComponentGroup#actionHandler - * @param {jibo.face.views.ActionData} action Contains string for type of action and data Object - * with any pertinent data dependent on action type. - * @param {jibo.face.views.Component} [fromComponent] The component that triggered the action (if applicable). - */ - - /** - * Method to pass actions downward to Components. - * Passing actions through parent chain allows parents to interrupt and augment actions. - * @method jibo.face.views.ComponentGroup#actionEnactor - * @param {jibo.face.views.ActionData} action Contains string for type of action and data Object - * with any pertinent data dependent on action type. - * @return {boolean} `true` if action is acted on by this ComponentGroup or any of its ComponentGroup children. - */ - - /** - * Handler for when transitions are all complete. - * @method jibo.face.views.ComponentGroup#transitionComplete - * @param {Function} callback The callback triggered once all components have completed their transitions. - * @param {Error} [err] Error returns if there is an issue with the asynchronous method. - * @param {any[]} [results] Results returned from asynchronous method, will be empty. - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/DisplayUtils.js b/docs/rendering/gui/DisplayUtils.js deleted file mode 100644 index fd6cc1c1..00000000 --- a/docs/rendering/gui/DisplayUtils.js +++ /dev/null @@ -1,24 +0,0 @@ - /** - * Get the uniform scale required for DisplayObject to fit given dimensions. - * @method jibo.face.DisplayUtils#getScaleByWidthHeight - * @param {PIXI.DisplayObject} displayObject - DisplayObject to get the scale for. - * @param {number} width - Target width. - * @param {number} height - Target height. - * @returns {number} Uniform scale to apply to given DisplayObject for it to fit given dimension. - */ - - /** - * Check whether display if contained by another display. - * @method jibo.face.DisplayUtils#isContained - * @param {PIXI.DisplayObject} display - DisplayObject checking for containment. - * @param {PIXI.Container} container - Container to check if display is contained within. - * @returns {boolean} `true` if display is contained within container. - */ - - /** - * Takes position value provided for the element and makes sure that it is positioned properly + processes LEFT/RIGHT/CENTER/TOP/BOTTOM alignment options - * Remember, that RIGHT/BOTTOM alignment does not include actual element bounds, this should be handled separately - * @method jibo.face.DisplayUtils#getElementPosition - * @param {Object} position - Position data for the element - * @returns {PIXI.Point} Contains proper point value of the element on the screen - */ \ No newline at end of file diff --git a/docs/rendering/gui/TouchManager.js b/docs/rendering/gui/TouchManager.js deleted file mode 100644 index 93883143..00000000 --- a/docs/rendering/gui/TouchManager.js +++ /dev/null @@ -1,282 +0,0 @@ -/** - * @typedef jibo.face.views~GESTURE - * @description Static class with static members that describe possible types of gestures - * @prop TAP Gesture type for a single tap - * @prop SWIPE_DOWN Gesture type for a swipe down - * @prop SWIPE Old name for SWIPE_DOWN - * @prop SWIPE_UP Gesture type for a swipe up - * @prop PAN Gesture type for a pan. - */ - - /** - * Gets singleton instance of TouchManager. - * @name jibo.face.views.TouchManager#instance - * @type {jibo.face.views.TouchManager} - * @readonly - */ - - /** - * Instance used for singleton. - * @name jibo.face.views.TouchManager._instance - * @type {jibo.face.views.TouchManager} - * @private - */ - - /** - * Threshold of movemnent between gesture types. - * @type {number} - * @name jibo.face.views.TouchManager.THRESHOLD - * @readOnly - * @private - */ - - /** - * Pixi interaction manager reference. - * @type {PIXI.interation.TouchManager} - * @name jibo.face.views.TouchManager#_interactionManager - * @private - */ - - /** - * Reference to canvas element. - * @type {Object} - * @name jibo.face.views.TouchManager#_canvas - * @private - */ - - /** - * Reference to GestureManager instance. - * @type {jibo.face.GestureManager} - * @name jibo.face.views.TouchManager#_gestureManager - * @private - */ - - /** - * Reference to ViewManager instance. - * @type {jibo.face.views} - * @name jibo.face.views.TouchManager#_viewManager - * @private - */ - - /** - * Reference to the tap gesture. - * @name jibo.face.views.TouchManager#_tapGesture - * @type {HammerJS.Tap} - * @private - */ - - /** - * Reference to the swipe down gesture. - * @name jibo.face.views.TouchManager#_swipeDownGesture - * @type {HammerJS.Swipe} - * @private - */ - - /** - * Reference to the swipe up gesture. - * @name jibo.face.views.TouchManager#_swipeUpGesture - * @type {HammerJS.Swipe} - * @private - */ - - /** - * Reference to the pan horizontal gesture. - * @name jibo.face.views.TouchManager#_panHorizontalGesture - * @type {HammerJS.Pan} - * @private - */ - - /** - * Object (PIXI.interaction.InteractionEvent) used to pass input position for PIXI hit testing. - * @name jibo.face.views.TouchManager#_interactionEvent - * @type {any} - * @private - */ - - /** - * Holds reference to element most recently hit. - * @name jibo.face.views.TouchManager#_elementHit - * @type {jibo.face.views.Element} - * @private - */ - - /** - * Flag for whether in simulator or not. - * @name jibo.face.views.TouchManager#_isSim - * @type {boolean} - * @private - */ - - /** - * Value holding the latest X coordinate when emulating panning. - * @name jibo.face.views.TouchManager#_prevX - * @type {Number} - * @private - */ - - /** - * Value holding the latest Y coordinate when emulating panning. - * @name jibo.face.views.TouchManager#_prevY - * @type {Number} - * @private - */ - - /** - * Flag indicating current state of pan emulation. - * @name jibo.face.views.TouchManager#_isEmulatingPan - * @type {boolean} - * @private - */ - - /** - * Flag indicating whether user has his finger on the screen - * This flag is set only on real Jibo and only by core event listener - * @name jibo.face.views.TouchManager#_isMouseDown - * @type {boolean} - * @private - */ - - /** - * Remove gesture by type. - * @method jibo.face.views.TouchManager#addGesture - * @param {jibo.face.views.GESTURE} [gesture = 'tap'] - type of gesture to remove. - * @param {Function} [gestureEventCallback] - For use with Pan gesture, handler called on each pan event. - */ - - /** - * Remove gesture by type. - * @method jibo.face.views.TouchManager#removeGesture - * @param {jibo.face.views.GESTURE} [gesture = 'tap'] - type of gesture to remove. - */ - - /** - * Remove all possible TouchManager gestures. - * @method jibo.face.views.TouchManager#removeAllGestures - */ - - /** - * Create gestures required by Component tree. - * NOTE :: Does not create pan gesture, must be created by Component that requires it. - * @method jibo.face.views.TouchManager#createRequiredGestures - * @param view {jibo.face.views.View} View to create gestures for. - */ - - /** - * Destroy. - * @method jibo.face.views.TouchManager#destroy - */ - - /** - * Add listener for input exiting viewport. - * @method jibo.face.views.TouchManager#addViewportOut - * @private - */ - - /** - * Remove listener for input exiting viewport. - * @method jibo.face.views.TouchManager#removeViewportOut - * @private - */ - - /** - * Create listener for input exiting viewport. - * @method jibo.face.views.TouchManager#createViewportOut - * @private - */ - - /** - * Add listeners that will track core mouse events. - * We need them to emulate panning in those cases when user started panning outside of the touch screen. - * @method jibo.face.views.TouchManager#addCoreTouchEvents - * @private - */ - - /** - * Remove listeners for core mouse events. - * @method jibo.face.views.TouchManager#removeCoreTouchEvents - * @private - */ - - /** - * Listener of mouse core events that we might need to determine if user - * has started panning outside of the screen - * @method jibo.face.views.TouchManager#onCoreTouchEvent - * @private - */ - - /** - * Set the input coordinates and clear the target. - * @method jibo.face.views.TouchManager#resetInput - * @param {Number} x - x poisition - * @param {Number} y - y position - * @private - */ - - /** - * Create a gesture for tap. - * Refer to HammerJS documentation for Tap values {@link http://hammerjs.github.io/recognizer-tap} - * @method jibo.face.views.TouchManager#createTapGesture - * @returns {boolean} `true` if a new gesture was created. - * @private - */ - - /** - * Handler for tap complete event. - * @method jibo.face.views.TouchManager#tapHandler - * @param gestureEvent {any} - * @private - */ - - /** - * Find Element within View whose display was tapped. - * @param {jibo.face.views.View} currentView - View to check. - * @returns {boolean} - * @private - */ - - /** - * Function required by PIXI processInteractive method, create method to speed up process - * @method jibo.face.views.TouchManager#checkElementHit - * @param {any} event - PIXI.interactive.InteractionEvent passed from Pixi's hit test - * @param {PIXI.DisplayObject} displayObject - dis - * @param {boolean} hit - Flag for hit test against display object - * @private - */ - - /** - * Create a gesture for swipe down. - * @method jibo.face.views.TouchManager#createSwipeDownGesture - * @returns {boolean} `true` if a new gesture was created. - * @private - */ - - /** - * Handler for swipe down complete event. - * Currently only activates for Views. - * @method jibo.face.views.TouchManager#swipeDownHandler - * @param gestureEvent {any} - * @private - */ - - /** - * Create a gesture for swipe up. - * @method jibo.face.views.TouchManager#createSwipeUpGesture - * @returns {boolean} `true` if a new gesture was created. - * @private - */ - - /** - * Handler for swipe up complete event. - * Currently only activates for Views. - * @method jibo.face.views.TouchManager#swipeUpHandler - * @param gestureEvent {any} - * @private - */ - - /** - * Create a gesture for horizontal pan. - * @method jibo.face.views.TouchManager#createPanHorizontalGesture - * @param {Object} gestureEventCallback - * @returns {boolean} `true` if a new gesture was created. - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/ViewGlobalEvents.js b/docs/rendering/gui/ViewGlobalEvents.js deleted file mode 100644 index ee679651..00000000 --- a/docs/rendering/gui/ViewGlobalEvents.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * @class ViewGlobalEvents - * @description Typed global view events for ViewManager (`jibo.face.views.events`) - * @example - * jibo.face.views.events.process.on(onProcess); - * - * onProcess = (result:ViewProcessResult) => { - * // act accordingly - * } - * - * // When finished with event listening - * jibo.face.views.events.process.removeListener(onProcess); - * - * @memberof jibo.face.views - */ - - /** - * Emits results from view change process. - * @name jibo.face.views.ViewGlobalEvents#process - * @type {Event} - */ - - /** - * Emits results from View emitted events. - * @name jibo.face.views.ViewGlobalEvents#view - * @type {Event} - */ - -/** - * @class ViewProcessResult - * @description Result from change in view change process. - * @memberof jibo.face.views - */ - - /** - * Current state of view process. - * Refer to {@link jibo.face.views.ViewProcess} for status values. - * @name jibo.face.views.ViewProcessResult#status - * @type {String} - * @readOnly - */ - - /** - * Id of current view in process. - * @name jibo.face.views.ViewProcessResult#currentId - * @type {String} - * @readOnly - */ - - /** - * Id of closing view in process. - * @name jibo.face.views.ViewProcessResult#closingId - * @type {String} - * @readOnly - */ - - /** - * Serialized change options of process. - * @name jibo.face.views.ViewProcessResult#changeOptions - * @type {jibo.face.views~ChangeOptions} - * @readOnly - */ - -/** - * @class ViewResult - * @description Results from events emitted by View. - * @memberof jibo.face.views - */ - - /** - * Event emitted from view. - * @name jibo.face.views.ViewResult#event - * @type {String} - * @readOnly - */ - - /** - * Id of view emitting the event. - * @name jibo.face.views.ViewResult#id - * @type {String} - * @readOnly - */ - - /** - * Type of view emitting the event. - * @name jibo.face.views.ViewResult#type - * @type {String} - * @readOnly - */ - - /** - * Statis of view emitting the event. - * Refer to {@link jibo.face.views.View} for status values. - * @name jibo.face.views.ViewResult#status - * @type {String} - * @readOnly - */ - - /** - * Any additional data that may be passed with the event. - * @name jibo.face.views.ViewResult#data - * @type {any} - * @readOnly - */ \ No newline at end of file diff --git a/docs/rendering/gui/ViewManager.js b/docs/rendering/gui/ViewManager.js deleted file mode 100644 index cfb3473a..00000000 --- a/docs/rendering/gui/ViewManager.js +++ /dev/null @@ -1,633 +0,0 @@ -/** - * Callback given to view process methods, called once process completes successfully. - * @callback jibo.face.views~ViewCallback - * @param [view] {jibo.face.views.View} View associated with view process, not all view processes return a View. - * @param [done] {Function} ONLY used for the onLoaded callback within [changeView()]{@link jibo.face.views#changeView}. - * Not specifying this parameter on the onLoaded callback makes it synchronous. - * Specifying makes the callback asynchronous and requires that `done()` be called at some point within the method. - */ - -/** - * @interface jibo.face.views~ChangeOptions - * @description Interface for changing view process options. - * @prop {Boolean} [remove] - `true` to remove current element. - * This is exclusive from the other `remove*` methods, with the order of override: `removeAll > removeTo > removeToInclude > remove` - * @prop {Boolean} [removeAll] - `true` to remove all views down to root. - * This is exclusive from the other `remove*` methods, with the order of override: `removeAll > removeTo > removeToInclude > remove` - * @prop {String} [options.removeTo] - Id of a view within the stack, all views above it will be removed. - * This is exclusive from the other `remove*` methods, with the order of override: `removeAll > removeTo > removeToInclude > remove` - * @prop {String} [options.removeToInclude] - Id of a view within the stack, that view and all views above it will be removed. - * This is exclusive from the other `remove*` methods, with the order of override: `removeAll > removeTo > removeToInclude > remove` - * @prop {Boolean} [leaveEmpty] - `true` to prevent next view in stack from opening and leaving the display empty. - * Setting to `true` overrides `addView`. - * @prop {String|jibo.face.views.View|any} [addView] - Add view, can specify a path to config file, instantiated View, or view config Object. - * @prop {jibo.face.views.PauseOverlay#PauseOptions} [pause] - If when adding the next view the current view should be paused. If so, how. - * @prop {String} [transitionClose] - Type of transition the current View should use to close. - * @prop {String} [transitionOpen] - Type of transition the next View should use to open. - */ - -/** - * @interface jibo.face.views~AssetDescriptor - * @description Interface for asset description objects, used in conjunction with [loader]{@link jibo.loader}. - * @prop {String} id - Id of asset, should be unique within cache. - * @prop {String} type - Type of asset, for valid types refer to [loader]{@link jibo.loader}. - * @prop {String} src - URI of asset. - * @prop {Boolean} [upload] - If `true` will also load to GPU. - * @prop {String} [cache] - Cache asset is associated with. Will use the loader's currently default cache unless otherwise specified. - */ - -/** - * @typedef jibo.face.views~STACK_DIRECTION - * @description Enum - For use with `View.addTransition` & `View.applyTransitions` - * to define transitions by the way the view stack will change. - * @prop 1 ADD - * @prop 2 REMOVE - * @prop 3 SWAP - */ - -/** - * @typedef jibo.face.views~TRANSITION - * @description Static class with static members that describe possible transitions for views. - * @prop UP Transition type for view to move up. - * @prop DOWN Transition type for view to move down. - * @prop LEFT Transition type for view to move left. - * @prop RIGHT Transition type for view to move right. - * @prop IN Transition type for view to fade and scale in from center of screen. - * @prop OUT Transition type for view to fade and scale out from center of screens. - * @prop EYE Transition type for view to or from eye. - * @prop NONE Transition type for no transition. - */ - -/** - * @class ViewManager - * @description Everything in this class is now accessible as part of {@link jibo.face.views}. - * Please update your code to use the `face.views` namespace instead of the `ViewManager` class. - * @memberof jibo.face.views - * @deprecated Since 7.4.1 - * @see jibo.face.views - */ - -/** - * Manages the creation and transition of the GUI. - * @namespace jibo.face.views - */ - - /** - * Default duration, in milliseconds, of open and close view transitions. - * @type {number} - * @private - */ - - /** - * Top level container. - * @name jibo.face.views#stage - * @type {PIXI.Container} - */ - - /** - * If the view manager is disabled, in which case all view changes will fail immediately. - * This will only be used when the WebGL context is lost. - * @name jibo.face.views#disabled - * @type {boolean} - * @private - */ - - /** - * If movement should be disabled due to screen taps - don't want to move around once the GUI - * has begun to be used. - * @name jibo.face.views#_disableMovement - * @type {boolean} - * @private - */ - - /** - * Array of ViewStates in order of the view hierarchy. - * @name jibo.face.views#_viewStates - * @type {Array} - * @private - */ - - /** - * Class to assist in creation of Views and Components. - * @name jibo.face.views#_creator - * @type {jibo.face.views.ComponentCreator} - * @private - */ - - /** - * Class to manage interactions. - * @name jibo.face.views#_interactionManager - * @type {jibo.face.views.TouchManager} - * @private - */ - - /** - * Handle to the Menu attention mode pushed with a GUI view. - * @name jibo.face.views#_menuMode - * @type {jibo.attention.AttentionModeHandle} - * @private - */ - - /** - * Event dispatched when the View is going to close because of a 'back' command. - * Currently closing a View and going back to the previous view is triggered by a swipe down. - * The same constant is statically accessible via `View.BACK`, but duplicated here for convenience. - * @type {string} - * @name jibo.face.views#BACK - * @constant - * @readOnly - */ - - /** - * Option for setting custom transitions. - * Use with `View.addTransition` for transitions to be used when opening from or closing to an empty screen. - * The same constant is statically accessible via `View.EMPTY`, but duplicated here for convenience. - * @type {string} - * @name jibo.face.views.EMPTY - * @readOnly - */ - - /** - * Option for setting custom transitions. - * Use with `View.addTransition` for transitions to be used when opening over a paused view or closing while being paused. - * The same constant is statically accessible via `View.PAUSED`, but duplicated here for convenience. - * @type {string} - * @name jibo.face.views.PAUSED - * @readOnly - */ - - /** - * Current top-level view. - * @name jibo.face.views#currentView - * @type {jibo.face.views.View} - * @readOnly - */ - - /** - * Class to assist in creation of Views and Components. - * @name jibo.face.views#creator - * @type {jibo.face.views.ComponentCreator} - * @readOnly - */ - - /** - * Maintains view processes. - * @name jibo.face.views#_viewProcess - * @type {jibo.face.views.ViewProcess} - * @private - */ - - /** - * Source for global events related to GUI processes. - * @name jibo.face.views#_events - * @type {jibo.face.views.ViewGlobalEvents} - * @private - */ - - /** - * Black gradient border at edge of screen, layered above ViewManager stage. - * @name jibo.face.views#_border - * @type {PIXI.Container} - * @private - */ - - /** - * Image that exist above all displays and the border, there can only be one watermark at a time. - * Use for things like remote mode indication. - * @name jibo.face.views#_waterMark - * @type {PIXI.Container} - * @private - */ - - /** - * Flag to keep track of visibility of border. - * @name jibo.face.views#_borderVisibility - * @type {Boolean} - * @private - */ - - /** - * Visibility of border. - * @name jibo.face.views#borderVisible - * @param {Boolean} visible Determines border's visibility - */ - - /** - * Will return the total number of views in the view stack. - * @name jibo.face.views#viewStackLength - * @type {number} - * @readOnly - */ - - /** - * Determines if views are currently in process. - * @name jibo.face.views#viewsInProcess - * @type {boolean} - * @readOnly - */ - - /** - * Create a View by specifying the class and the configuration. - * @method jibo.face.views#createView - * @param {Object|String} [viewDeterminer] Can be the Class or name of Class of the the view to create. - * @param {Object} [config] Config can be an Object or a string of the path to the JSON file for the config. - * @param {Boolean} [open=false] If true continue process of adding and opening the view. - * @param {jibo.face.views~ViewCallback} [onOpenComplete] Callback for when View has finished opening, will only be used if the open flag is set to true. - * @param {String} [openTransition=TRANSITION.UP] Type of transition to open view. - * @param {String} [closeTransition=TRANSITION.UP] Type of transition to close view. - * @return {jibo.face.views.View} The View created. - */ - - /** - * Create a View from only the View's configuration path. - * Unlike the the createView method, this method does not require the view class to be specified, - * instead the view class is derived from the configuration file. - * This method does not return the View directly, but rather through the provided callback. - * If the open flag is set to true the callback will be fire when the View is created, and opened, - * if not the callback is fire as soon as the View class is created. - * @method jibo.face.views#createViewFromConfigPath - * @param {String} configPath Path to the configuration for the view. - * @param {Boolean} [open=false] If true continue process of adding and opening the view, callback will be fired after View finishes opening. - * @param {jibo.face.views~ViewCallback} callback Callback that returns the View - * @param {String} [openTransition=TRANSITION.UP] Type of transition to open view. - * @param {String} [closeTransition=TRANSITION.UP] Type of transition to close view. - */ - - /** - * Add the view that is at the top of the stack. - * This is generally used when there is no current view present - * (i.e. to create the first eye view, or when a view was removed to empty) - * @method jibo.face.views#addViewNextInStack - * @param {jibo.face.views~ViewCallback} callback Callback that returns the View - * @param {String} [openTransition=TRANSITION.UP] Type of transition to open view. - * @param {String} [closeTransition=TRANSITION.UP] Type of transition to close view. - * @param {Function} [onFailure] Callback for if process does not complete - */ - - /** - * Passes {@link jibo.face.views.ActionData} to the current {@link jibo.face.views.View} and its children. - * @method jibo.face.views#actionEnactor - * @param {jibo.face.views.ActionData} action - The action to be passed. - * @return {boolean} `true` if action is acted on by the current View or any of its ComponentGroup children. - */ - - /** - * Process for changing views, takes a config that defines process particulars. - * @example - * Option examples - * - * 'Example of closing all views and leave display empty' - * { - * removeAll: true, - * leaveEmpty: true, - * } - * - * 'Example of opening view lower in the view stack and having it fade in' - * { - * removeTo: 'myView', - * transitionOpen: "trans_in" - * } - * - * 'Example of closing current view and leaving display empty' - * { - * remove: true, - * leaveEmpty: true - * } - * - * 'Example of opening a new view while pausing the view beneath it but fully hiding it using standard overlay tween' - * { - * addView: "resources/views/myViewConfig.json", - * pause:{ - * "alpha": 1, - * } - * } - * - * 'Example of removing all views above a particular view in the stack and then opening that view, using view's id' - * { - * removeTo: "myView" - * } - * - * 'Example of removing a particular view and all views above it in the stack, then adding a new view.' - * { - * removeToInclude: "myView", - * addView: "resources/views/myViewConfig.json" - * } - * - * @method jibo.face.views#changeView - * @param {jibo.face.views~ChangeOptions} options - Options for view change process. - * @param {jibo.face.views~ViewCallback} [onComplete] Callback when process completes, gives the current view as a parameter. - * @param {Function} [onFailure] Callback for if process does not complete. - * @param {jibo.face.views~ViewCallback} [onLoaded] Callback when next view has loaded, use to augment view prior to it opening. - */ - - /** - * Add a new {@link jibo.face.views.View} to the hierarchy. - * Adding process involves disposing of or pausing current view and storing its state. - * @method jibo.face.views#addView - * @param {jibo.face.views.View | string} view - Info for the view to load, can pass the View class directly, - * or pass a string that is the path to the config file defining the View. - * @param {jibo.face.views~ViewCallback} [onAdded] Callback when process completes, gives the current view as a parameter. - * @param {String} [openTransition = TRANSITION.UP] Type of transition the next View should use to open. - * @param {String} [closeTransition = TRANSITION.UP] Type of transition the current View should use to close. - * @param {Function} [onFailure] Callback for if process does not complete. - */ - - /** - * Remove current {@link jibo.face.views.View} and open the View beneath it in the stack. - * Removal process involves disposing of current view and recreating prior View using its stored ViewState. - * If top most view was pausing the previous view then we don't need to recreate it, only un-pause it. - * @method jibo.face.views#removeView - * @param {jibo.face.views~ViewCallback} [onRemoved] Callback when process completes, gives the current view as a parameter. - * @param {String} [openTransition = TRANSITION.DOWN] Type of transition the next View should use to open. - * @param {String} [closeTransition = TRANSITION.DOWN] Type of transition the current View should use to close. - * @param {Function} [onFailure] Callback for if process does not complete. - */ - - /** - * Force open the eye view and clear the view stack. - * @method jibo.face.views#forceEyeView - * @param {jibo.face.views~ViewCallback} [onOpenCallback] called once eyeView is opened or if it is already open, returns the EyeView as a parameter. - * @param {Function} [onPressCallback] handler for when EyeView is pressed, if nothing is specified will remove any existing callbacks. - * @param {String} [openTransition=TRANSITION.IN] Type of transition to open view. - * @param {String} [closeTransition=TRANSITION.UP] Type of transition to close view. - * @param {Function} [onFailure] Callback for if process does not complete. - */ - - /** - * If there is an active process attempting to make the EyeView the current view we want to try not to interrupt that process as it has the same purpose as forceEyeView. - * We determine if that is the state of the process if a closing view is defined (so we know that the EyeView is not what the process may be closing) - * AND the current view (which is an EyeView) has a status indicating it is going to open, basically that it is loaded but not yet open. - */ - - /** - * Clear the view stack, if current view is of category EYE leave the eye as the current view, - * if any other category remove call views and leave the current view empty. - * @method jibo.face.views#viewStackCleanup - * @param {jibo.face.views~TRANSITION} [closeTransition=TRANSITION.DOWN] Type of transition to close the current view. - * @returns {Promise} - */ - - /** - * Check if a view exists with a given ID, and can be used as `removeTo` or `removeToInclude` - * in [changeView]{@link jibo.face.views#changeView}. - * @method jibo.face.views#hasView - * @param {String} id View ID to look for. - * @returns {Boolean} `true` if a View exists with the given ID. - */ - - /** - * Resets the TRANS_TIME to default, or transTime if specified - * @method jibo.face.views#resetTransTime - * @param {number} [transTime] Optional time in milliseconds to set the TRANS_TIME to - */ - - /** - * Handles process failure or interruption. - * Cleans up current process. and queue stack. - * If queue has members, start process for top most member and clean up any below it. - * @method jibo.face.views#viewProcessFailure - * @param {jibo.face.views.ViewProcess} process Active view process - * @private - */ - - /** - * This allows us to more logically recover from an interruption in the case where the interrupting process will remove the current view. - * Interrupting a process normally destroys the current view involved immediately, which would skip it's close transition. - * In the case where the interrupting process will attempt to remove the current view, - * we want to allow it to do so, so we prevent the process fail from destroying the current view so that the next process can close and destroy it naturally. - */ - - /** - * Add a new {@link jibo.face.views.View} to the view hierarchy and display. - * Adding process involves disposing of or pausing current view and storing its state. - * @method jibo.face.views#add - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} nextView - View to add and make current. - * @param {jibo.face.views.PauseOverlay#PauseOptions} [pauseOptions] - Pause options, defined within change view options.ß - * @param {String} [openTransition = TRANSITION.UP] Type of transition the next View should use to open. - * @param {String} [closeTransition = TRANSITION.UP] Type of transition the current View should use to close. - * @private - */ - - /** - * Remove current {@link jibo.face.views.View} from the hierarchy and display. - * @method jibo.face.views#remove - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} [nextView] - View to add after current view is closed. - * @param {boolean} leaveEmpty - If next view in stack should be opened after current view closes, if 'true' display is left empty. - * @param {String} [openTransition = TRANSITION.UP] Type of transition the next View should use to open. - * @param {String} [closeTransition = TRANSITION.UP] Type of transition the current View should use to close. - * @returns {Promise} - * @private - */ - - /** - * Close all currently active views and open the 'root' view ({@link jibo.face.views.EyeView}). - * @method jibo.face.views#removeToRoot - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} [nextView] - View to add above root view after current views and stack have been cleared. - * @param {boolean} leaveEmpty - If root View should be opened after close completes, if 'true' display is left empty. - * @param {String} [closeTransition = TRANSITION.DOWN] Type of transition the current View should use to close. - * @param {String} [openTransition = TRANSITION.DOWN] Type of transition the next View should use to open. - * @returns {Promise} - * @private - */ - - /** - * Close all currently active views and open the 'root' view ({@link jibo.face.views.EyeView}). - * @method jibo.face.views#removeToRoot - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} [nextView] - View to add above root view after current views and stack have been cleared. - * @param {boolean} leaveEmpty - If root View should be opened after close completes, if 'true' display is left empty. - * @param {String} [closeTransition = TRANSITION.DOWN] Type of transition the current View should use to close. - * @param {String} [openTransition = TRANSITION.DOWN] Type of transition the next View should use to open. - * @returns {Promise} - * @private - */ - - /** - * Load and open View. - * @param {jibo.face.views.ViewProcess} process Active view process. - * @method jibo.face.views#openView - * @param {jibo.face.views.View}view - View to open. - * @param {string} openTransition - Type of transition view will open with. - * @returns {Promise} - * @private - */ - - /** - * Close and destroy View. - * Does not take into account any paused Views that may be associated with the given view. - * @method jibo.face.views#closeView - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} view - View to close. - * @param {string} [closeTransition] - Type of transition view will close with. - * @param {boolean} [addToStack = false] - if 'true' closed views are added to the view stack. - * @param {boolean} [destroyViews = true] - if 'true' views will be destroyed. - * @param {boolean} [toPaused = false] - if view is closing over a paused if 'true' views will be destroyed. - * @returns {Promise} - * @private - */ - - /** - * Close and open separate views. - * Supports async behavior, making sure the view being opened has been fully loaded and prepped before opening. - * @method jibo.face.views#closeAndOpenViews - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} nextView - View to open. - * @param {jibo.face.views.View} closeView - View to close. - * @param {string} [openTransition] - Type of transition next view will open with. - * @param {string} [closeTransition] - Type of transition closing view will close with. - * @param {boolean} [addToStack = false] - if 'true' closed views are added to the view stack. - * @returns {Promise} - * @private - */ - - /** - * Close and destroy given view and all paused views beneath it, and open next view. - * Supports async behavior, making sure the view being opened has been fully loaded and prepped before opening. - * method jibo.face.views#closeWithPausedAndOpenViews - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} nextView - View to open. - * @param {jibo.face.views.View} closeView - View to close. - * @param {string} [openTransition] - Type of transition next view will open with. - * @param {string} [closeTransition] - Type of transition closing view will close with. - * @param {boolean} [addToStack = false] - if 'true' closed views are added to the view stack. - * @param {jibo.face.views~STACK_DIRECTION} [stackDirection] - Specifies the stack direction associated with the transition, if undefined does not take stack direction into account - * STACK_DIRECTION.UP indicates view is being added to stack. - * STACK_DIRECTION.DOWN indicates view is being removed. - * STACK_DIRECTION.SWAP indicates the views are being swapped and there is no change to the stack size. - * @returns {Promise} - * @private - */ - - /** - * Close and destroy given view's paused views. - * method jibo.face.views#closePaused - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} view - View whose paused views to close. - * @param {string} [closeTransition] - Type of transition Views will open with. - * @param {boolean} [addToStack = false] - if 'true' closed views are added to the view stack. - * @param {boolean} [destroyViews = true] - if 'true' views will be destroyed. - * @returns {Promise} - * @private - */ - - /** - * Close and destroy given view and all paused views beneath it. - * method jibo.face.views#closeViewWithPaused - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} view - View to close. - * @param {string} [closeTransition] - Type of transition Views will open with. - * @param {boolean} [addToStack = false] - if 'true' closed views are added to the view stack. - * @param {boolean} [destroyViews = true] - if 'true' views will be destroyed. - * @returns {Promise} - * @private - */ - - /** - * Close a list of views. - * Generally used to close a view and the pause chain beneath it. - * @method jibo.face.views#closeGroup - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View[]} closingViews - Array of Views to close in order of stack, with lowest at 0. - * @param {string} [closeTransition] - Type of transition Views will open with. - * @param {boolean} [addToStack = false] - if 'true' closed views are added to the view stack. - * @param {boolean} [destroyViews = true] - if 'true' views will be destroyed. - * @returns {Promise} - * @private - */ - - /** - * Pause current view and open next above it. - * method jibo.face.views#pauseThenOpen - * @param {jibo.face.views.ViewProcess} process Active view process. - * @param {jibo.face.views.View} nextView - View to open. - * @param {jibo.face.views.View} pausingView - View to pause. - * @param {jibo.face.views.PauseOverlay#PauseOptions} [pauseOptions] - Specific pause options, if undefined falls back to nextView.pauseOptions. - * @param {string} [openTransition] - Type of transition nextView will open with. - * @returns {Promise} - * @private - */ - - /** - * Helper to sets transitions for opening and closing views. - * @param {jibo.face.views.views.View} nextView - View that will be opening - * @param {jibo.face.views.views.View} closingView - View that will be closing. - * @param {jibo.face.views~STACK_DIRECTION} [stackDirection] - Specifies the stack direction associated with the transition, if undefined does not take stack direction into account - * STACK_DIRECTION.UP indicates view is being added to stack. - * STACK_DIRECTION.DOWN indicates view is being removed. - * STACK_DIRECTION.SWAP indicates the views are being swapped and there is no change to the stack size. - */ - - /** - * Returns the View from the top of the stack of ViewStates. - * @method jibo.face.views#popViewFromStack - * @return {jibo.face.views.View} - * @private - */ - - /** - * Converts given View to ViewState and adds to top of the stack of ViewStates. - * Given View must be in acceptable state to be converted to ViewState, otherwise it will not be added to stack. - * @method jibo.face.views#pushViewToStack} - * @private - */ - - /** - * Converts given View and its paused View chain to ViewStates and adds them to the stack of ViewStates in the right order. - * Views must be in acceptable state to be converted to ViewState, otherwise they will not be added to stack. - * @method jibo.face.views#pushViewWithPausedToStack - * @private - */ - - /** - * Clear view stack so only root ViewState remains. - * If the currentView given is an EyeView remove all view states, - * otherwise leave EyeView ViewState as the only view state in view stack. - * @method jibo.face.views#clearViewStack - * @param {jibo.face.views.View} [currentView] - The view that is or will be the current view. - * @private - */ - - /** - * Update the attention mode, ensuring that it is a Menu mode when a GUI view is active, and - * deactivating our Menu mode if it is no longer a GUI. - * @method jibo.face.views#updateAttentionMode - * @param {jibo.face.views.View} [view] - The view that is or will be the current view. - * @private - */ - - /** - * Set PIXI's texture garbage collection to auto garbage collect or manually collect. only run when an Eye view is active. - * @method jibo.face.views#setTextureGC - * @param {boolean} [autoOn] - If `true` texture garbage collection is set to auto, if 'false' it is set to manual - * @private - */ - - /** - * Using supplied assets creates a border around the screen. - * Placed above ViewManager.stage so that everything created within ViewManager will be beneath it. - * @method jibo.face.views#createBorder - * @param {PIXI.Texture} cornerTexture - asset for corner - * @param {PIXI.Texture} edgeTexture - asset for edge - * @private - */ - - /** - * Register default GUI classes. - * @method jibo.face.views#registerDefaults - * @private - */ - - /** - * Check if given views are in a valid state (e.g. not destroyed) - * @method jibo.face.views#checkViewsValid - * @private - */ - - /** - * Log view process and view status events, useful for debugging. - * @method jibo.face.views#logEvents - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/ViewProcess.js b/docs/rendering/gui/ViewProcess.js deleted file mode 100644 index 41a608b2..00000000 --- a/docs/rendering/gui/ViewProcess.js +++ /dev/null @@ -1,194 +0,0 @@ - /** - * Process is currently in the queue. - * @type {string} - * @name jibo.face.views.ViewProcess#QUEUED - * @readOnly - */ - - /** - * Process has been started. - * @type {string} - * @name jibo.face.views.ViewProcess#STARTED - * @readOnly - */ - - /** - * Process has successfully completed. - * @type {string} - * @name jibo.face.views.ViewProcess#COMPLETED - * @readOnly - */ - - /** - * Process was interrupted by another process. - * @type {string} - * @name jibo.face.views.ViewProcess#INTERRUPTED - * @readOnly - */ - - /** - * Process failed. - * @type {string} - * @name jibo.face.views.ViewProcess#FAILED - * @readOnly - */ - - /** - * Get flag to determine if views currently in process. - * If a new process is requested while active the active process will be interrupted.applied. - * @name jibo.face.views.ViewProcess#active - * @type {Boolean} - * @readOnly - */ - - /** - * Options for current view change. - * @name jibo.face.views.ViewProcess#changeOptions - * @type {jibo.face.views~ChangeOptions} - */ - - /** - * Callback for process completes. - * @name jibo.face.views.ViewProcess#_onComplete - * @type {jibo.face.views~ViewCallback} - */ - - /** - * Callback for process fails, due to error or interruption. - * @name jibo.face.views.ViewProcess#onFailure - * @type {Function} - */ - - /** - * Callback for when next view in process has loaded. - * Use to access view prior to it being added to display and opened. - * @name jibo.face.views.ViewProcess#onLoaded - * @type {jibo.face.views~ViewCallback} - */ - - /** - * Queue of view change processes. - * @name jibo.face.views.ViewProcess#processQueue - * @type {jibo.face.views.ViewProcess[]} - */ - - /** - * Current state of process. - * @name jibo.face.views.ViewProcess#status - * @type {String} - */ - - /** - * Flag to determine if views currently in process. - * If a new process is requested while active the active process will be interrupted. - * @name jibo.face.views.ViewProcess#_active - * @type {Function} - * @private - */ - - /** - * Array of Views involved in the current process. - * A reference is kept so that views can be destroyed if process is interrupted. - * @name jibo.face.views.ViewProcess#_activeViews - * @type {Array} - * @private - */ - - /** - * Currently active view in display. - * @name jibo.face.views.ViewProcess#_currentView - * @type {jibo.face.views.View} - * @private - */ - - /** - * Currently active view in display. - * @name jibo.face.views.ViewProcess#currentView - * @type {jibo.face.views.View} - */ - - /** - * View that was previously current but is now in process of closing. - * @name jibo.face.views.ViewProcess#_closingView - * @type {jibo.face.views.View} - * @private - */ - - /** - * View that was previously current but is now in process of closing. - * @name jibo.face.views.ViewProcess#closingView - * @type {jibo.face.views.View} - */ - - /** - * Flag for process interruption, if 'true' process has been interrupted. - * @name jibo.face.views.ViewProcess#_interrupted - * @type {boolean} - * @private - */ - - /** - * Flag for process interruption, if 'true' process has been interrupted. - * @name jibo.face.views.ViewProcess#interrupted - * @type {boolean} - * @readOnly - */ - - /** - * Prepare change options for logging - * @method jibo.face.views.ViewProcess#serializeOptions - * @param {jibo.face.views~ChangeOptions} changeOptions - Options for the change view process being queued. - * @public - */ - - /** - * Start the view process. - * Before starting a process should check for interrupt. - * @method jibo.face.views.ViewProcess#start - * @param {jibo.face.views~ViewCallback} onComplete Callback for process completes. - * @param {Function} onFailure Callback for process fails, due to error or interruption. - * @param {jibo.face.views~ViewCallback} onLoaded - Callback for when next view in process has loaded. - * @param {jibo.face.views~ChangeOptions} changeOptions - Options for the change view process being queued. - */ - - /** - * Adds View to Array of Views involved in the current process. - * A reference is kept so that views can be destroyed if process is interrupted. - * @method jibo.face.views.ViewProcess#storeView - * @param {jibo.face.views.View} view View to keep reference to for current process. - */ - - /** - * Call to complete process. - * Completion callbacks are triggered and process is cleared. - * @method jibo.face.views.ViewProcess#complete - * @param {jibo.face.views.View} [view] View established by process, not all processes will return a view. - */ - - /** - * Fail current process, call appropriate callbacks and clean up. - * @method jibo.face.views.ViewProcess#fail - * @param {Boolean} retainCurrent - if `true` prevents currentView from being destroyed. - */ - - /** - * Check for active process, if active sets the interrupted flag to `true`. - * @method jibo.face.views.ViewProcess#interrupt - * @param {jibo.face.views~ChangeOptions} changeOptions - Options for the process being queued. Identifier for interrupting process, useful in debugging. - * @returns {boolean} `true` if a process is interrupted. - */ - - /** - * Add a change view process to the queue. - * @method jibo.face.views.ViewProcess#addProcessToQueue - * @param {jibo.face.views~ChangeOptions} changeOptions - Options for the process being queued. - * @param {jibo.face.views~ViewCallback} [onComplete] - Callback if process completes, returns current view as param. - * @param {Function} [onFailure] - Callback if queued process fails, gets interrupted, or does not get to execute. - * @param {jibo.face.views~ViewCallback} [onLoaded] Called when next view has loaded, can be used to augment View prior to it being displayed. - */ - - /** - * Clear the view process references. - * @method jibo.face.views.ViewProcess#clear - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/ViewState.js b/docs/rendering/gui/ViewState.js deleted file mode 100644 index fe70a155..00000000 --- a/docs/rendering/gui/ViewState.js +++ /dev/null @@ -1,60 +0,0 @@ - /** - * Identifier, same as id of View that ViewState represents. - * @name jibo.face.views.ViewState#id - * @type {String} - */ - - /** - * URI to the configuration JSON file for the corresponding view. - * @name jibo.face.views.ViewState#configPath - * @type {String} - */ - - /** - * Class name of the corresponding view. - * @name jibo.face.views.ViewState#viewClassName - * @type {String} - */ - - /** - * Configuration Objects, generally derived from JSON, - * that defines corresponding view. - * @name jibo.face.views.ViewState#viewConfig - */ - - /** - * Array of configuration Objects, generally derived from JSON, - * that define corresponding view's components. - * @name jibo.face.views.ViewState#componentConfigs - * @type {Object[]} - */ - - /** - * Flag to determine whether, when corresponding view is opened, - * it should pause the view below it. - * @name jibo.face.views.ViewState#pauseParent - * @type {boolean} - * @default false - */ - - /** - * Flag to determine if corresponding view should enact close on swipe down. - * @name jibo.face.views.ViewState#ignoreSwipeDown - * @type {boolean} - * @default false - */ - - /** - * Can pass in the name of the corresponding ViewState class and config if available at construction. - * @param {String} [viewClassName = 'View'] - Class name of View the ViewState represents. - * @param {Object} [config] - Configuration Object for the corresponding View, generally derived from JSON. - * Contains both view and components configurations. - */ - - /** - * Derives separate references to view configuration, component configurations, - * and View type from the given configuration. - * @method jibo.face.views.ViewState#applyConfig - * @param {Object} config Configuration Object for the corresponding View, generally derived from JSON. - * Contains both view and components configurations. - */ \ No newline at end of file diff --git a/docs/rendering/gui/actions/ActionData.js b/docs/rendering/gui/actions/ActionData.js deleted file mode 100644 index 2df9ad54..00000000 --- a/docs/rendering/gui/actions/ActionData.js +++ /dev/null @@ -1,414 +0,0 @@ -/** - * @interface jibo.face.views.ActionData~ActionDescriptor - * @description Interface for an Object to be turned into instance of an ActionData class. - * @prop {String} type - The type of the action. - * @prop {any} [data] - Additional data for action, requited data depends on type. - */ - -/** - * Use to pass actions across the view architecture. - * @class ActionData - * @memberof jibo.face.views - */ - - /** - * The type of the action. - * Supported types are this class's constants. - * @name jibo.face.views.ActionData#type - * @type {String} - */ - - /** - * The data Object that is passed with the action. - * Not all action types require data. - * Refer to this class's constants for action type requirements. - * @name jibo.face.views.ActionData#data - * @type {Object} - */ - - /** - * Change view by specifying view change options. - * Data requirements include [ChangeOptions]{@link jibo.face.views~ChangeOptions} - * @example - * JSON format - * "action": { - * "type": "changeView", - * "data": { - * "options": { - * "removeAll": true, - * "leaveEmpty": true - * } - * } - * } - * @constant jibo.face.views.ActionData.CHANGE_VIEW - * @type {String} - */ - - /** - * Add a view. - * Data requirements include a path to view configuration to be opened. - * @example - * JSON format - * "action": { - * "type": "openView", - * "data": { - * "configPath": "resources/menus/myMenu.json" - * } - * } - * @constant jibo.face.views.ActionData.OPEN_VIEW - * @type {String} - * @readOnly - */ - - /** - * Remove the current view. - * This action has no data requirements. - * @example - * JSON format - * "action": { - * "type": "closeView", - * } - * @constant jibo.face.views.ActionData.CLOSE_VIEW - * @type {String} - * @readOnly - */ - - /** - * Remove the current view and not open the next view in the hierarchy. - * Will leave the display empty and the current view equal to null. - * This action has no data requirements. - * @example - * JSON format - * "action": { - * "type": "closeViewEmpty", - * } - * @constant jibo.face.views.ActionData.CLOSE_VIEW_EMPTY - * @type {String} - * @readOnly - */ - - /** - * Remove all the views up to, but not including, the root view. - * @example - * JSON format - * "action": { - * "type": "closeAll" - * } - * @constant jibo.face.views.ActionData.CLOSE_ALL - * @type {String} - * @readOnly - */ - - /** - * Remove all the views and clear hierarchy up to but not including root, then add view. - * Added view will be one above the root view. - * Data requirements include a path to view configuration to be opened. - * @example - * JSON format - * "action": { - * "type": "closeAllOpen", - * "data": { - * "configPath": "resources/menus/myMenu.json" - * } - * } - * @constant jibo.face.views.ActionData.CLOSE_ALL_OPEN - * @type {String} - * @readOnly - */ - - /** - * Close all the views and clear hierarchy up to but not including root, - * but do not add the root view to the display. - * Added view will be one above the root view. - * Data requirements include a path to view configuration to be opened. - * @example - * JSON format - * "action": { - * "type": "closeAllEmpty" - * } - * @constant jibo.face.views.ActionData.CLOSE_ALL_EMPTY - * @type {String} - * @readOnly - */ - - /** - * Emulate a swipe right gesture. - * @example - * JSON format - * "action": { - * "type": "swipeRight" - * } - * @constant jibo.face.views.ActionData.SWIPE_RIGHT - * @type {String} - * @readOnly - */ - - /** - * Emulate a swipe left gesture. - * @example - * JSON format - * "action": { - * "type": "swipeLeft" - * } - * @constant jibo.face.views.ActionData.SWIPE_LEFT - * @type {String} - * @readOnly - */ - - /** - * Emulate a swipe down. - * @example - * JSON format - * "action": { - * "type": "swipeDown" - * } - * @constant jibo.face.views.ActionData.SWIPE_DOWN - * @type {String} - * @readOnly - */ - - /** - * Emulate a swipe up. - * @example - * JSON format - * "action": { - * "type": "swipeUp" - * } - * @constant jibo.face.views.ActionData.SWIPE_UP - * @type {String} - * @readOnly - */ - - /** - * Go to first page of a list. - * Enact action on [List]{@link jibo.face.views.List} to take effect. - * @example - * JSON format - * "action": { - * "type": "goToBeginning" - * } - * @constant jibo.face.views.ActionData.GO_TO_BEGINNING - * @type {String} - * @readOnly - */ - - /** - * Go to last page of a list. - * Enact action on [List]{@link jibo.face.views.List} to take effect. - * @example - * JSON format - * "action": { - * "type": "goToEnd" - * } - * @constant jibo.face.views.ActionData.GO_TO_END - * @type {String} - * @readOnly - */ - - /** - * Emit an event from the owning View when triggered. - * Required data is an event string. - * - * @example - * JSON format - * "action": { - * "type": "event", - * "data": { - * "event": "danceParty" - * } - * } - * - * @example - * To listen for these events just add a listener to - * the View that contains the action. - * - * myView.on('danceParty', getDown); - * - * @example - * You must specify the event string for the event to fire, - * but can include as much additional data as needed. - * The entire data Object is returned when the event is fired. - * Here we add another value to the data Object in JSON: - * - * "action": { - * "type": "event", - * "data": { - * "event": "danceParty" - * "dance": "funkyChicken" - * } - * } - * - * @example - * Then in your code you can listen for the event, - * which will pass back the data Object: - * - * myView.on('danceParty', (eventData) => { - * if(eventData.dance === 'funkyChicken'){ - * console.log('Booo'); - * } - * }); - * - * @constant jibo.face.views.ActionData.EVENT - * @type {String} - * @readOnly - */ - - /** - * Play a sound. - * Within data, provide either the type of sound or the URI for the sound file. - * @example - * - * JSON format. Playing a preloaded or gloabl sound by giving the the ID. - * "action": { - * "type": "sound", - * "data": { - * "id": "button" - * } - * } - * @example - * JSON format. Playing sound by just giving src of sound asset. - * "action": { - * "type": "sound", - * "data": { - * "src": "resources/sfx/button_sfx.m4a" - * } - * } - * @example - * JSON format. Loading a sound and giving it an ID for repeat usage. - * "action": { - * "type": "sound", - * "data": { - * "id": "unique_sound" - * "src": "resources/sfx/button_sfx.m4a" - * } - * } - * - * @name jibo.face.views.ActionData#SOUND - * @type {String} - * @readOnly - */ - - /** - * Spoof an utterance that will be used as the result of the current MIM listen. Strings are - * handled as the result intent, otherwise a properly formatted NLU result must be provided - * @example - * JSON format with string - * "action": { - * "type": "utterance", - * "data": { - * "utterance": "whatIsWeather" - * } - * } - * @example - * JSON format with full result - * "action": { - * "type": "utterance", - * "data": { - * "utterance": { - * "intent": "whatIsWeather", - * "entities": { - * "time": "tomorrow" - * } - * } - * } - * @constant jibo.face.views.ActionData.UTTERANCE - * @type {String} - * @readOnly - */ - - /** - * Results passed from the MIM systems. - * @example - * JSON format for select elements on a page - * "action": { - * "type": "verbalCommand", - * "data": { - * "intent": "selectItem", - * "entities": { - * "itemPosition": "first" - * } - * } - * } - * - * JSON format tp control pages - * "action": { - * "type": "verbalCommand", - * "data": { - * "intent": "right", - * } - * } - * - * - * @constant jibo.face.views.ActionData.VERBAL_COMMAND - * @type {String} - * @readOnly - */ - - /** - * Immediately end the currently active MIM. - * @example - * JSON format for ending a MIM - * "action": { - * "type": "mimEnd" - * } - * - * @constant jibo.face.views.ActionData.MIM_END - * @type {String} - * @readOnly - */ - - /** - * Immediately show the available GUI for the currently active MIM. - * @example - * JSON format for showing a MIM's GUI - * "action": { - * "type": "mimShowGUI" - * } - * - * @constant jibo.face.views.ActionData.MIM_SHOW_GUI - * @type {String} - * @readOnly - */ - - /** - * Call a method when action is triggered. - * Not something easily defined via JSON; more likely to be defined in code. - * @example - * Creating in code - * new ActionData( ActionData.CALLBACK, { - * callback: this.foo.bind(this) - * }); - * Adding to a Component - * component.addAction(ActionData.CALLBACK, {callback: this.foo.bind(this)}); - * @constant jibo.face.views.ActionData.CALLBACK - * @type {String} - * @readOnly - */ - - /** - * Create an ActionData object from a configuration Object. - * Generally derived from JSON. - * @method jibo.face.views.ActionData.createFromConfig - * @example - * JSON format - * { - * "type": "openView", - * "data": { - * "configPath": "assets/menu/myMenu.json" - * } - * } - * @param {jibo.face.views.ActionData~ActionDescriptor} configData Object defining the action. - * @returns {jibo.face.views.ActionData} A new ActionData with values specified by given configuration. - */ - - /** - * Constructor for ActionData. - * @param {String} [type] The type of action. - * @param {Object} [data] The data Object with action values. - */ - - /** - * Apply the configuration Object's values to this ActionData class. - * @method jibo.face.views.ActionData#applyConfig - * @param {jibo.face.views.ActionData~ActionDescriptor} configData Object defining the action. - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/Button.js b/docs/rendering/gui/components/Button.js deleted file mode 100644 index 626da9e4..00000000 --- a/docs/rendering/gui/components/Button.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Button element. - * Can be assigned {@link jibo.face.views.ActionData}, which are triggered on button click. - * - * @class Button - * @extends jibo.face.views.Element - * @memberof jibo.face.views - */ - - /** - * `PIXI.animate.MovieClip` containing button states. - * Buttons do not require MovieClips, so if a `PIXI.animate.Timeline` - * is not given as the base asset this remains undefined. - * @name jibo.face.views.Button#timeline - * @type {PIXI.animate.MovieClip} - */ - - /** - * FOR OVERRIDE ONLY. DO NOT ALTER. - * - * The Class name as a string. - * @name jibo.face.views.Button#_type - * @type {String} - * @protected - */ - - /** - * Flag used to keep track if button is down. - * Is set within button state methods e.g. over, down, up, etc. - * @name jibo.face.views.Button#isDown - * @type {Boolean} - * @protected - */ - - /** - * Create a Button from a configuration Object derived from JSON. - * @method jibo.face.views.Button.createFromConfig - * @param {Object} configData Object derived from JSON, must be a specific format refer to examples. - * @returns {jibo.face.views.Button} The Button created from the given configuration. - */ - - /** - * Create a Button object by passing the DisplayObject and specifying the {@link jibo.face.views.ActionData}. - * This allows for a more direct way to create Buttons that is not reliant on the configuration data. - * @method jibo.face.views.Button.createFromDisplayObject - * @param {PIXI.DisplayObject} displayObject The DisplayObject with the button assets. - * @param {jibo.face.views.ActionData} [actionData] The action to be triggered on button click. - * @param {PIXI.Container} container Display container for the button. - * @returns {jibo.face.views.Button} The created Button. - */ - - /** - * Set up the display. - * Assign assets, set timelines, etc. - * @method jibo.face.views.Button#setupDisplay - * @param {Object} [assets] - Object passed back from loader namespace load method, - * refer to {@link jibo.loader} for details. - */ - - /** - * TO BE CALLED INTERNALLY ONLY. - * - * Define the interactive hit area of the display. - * The `DisplayObject.hitArea` is what Pixi uses to define the interactive area. - * Should be called within `setupDisplay()`. - * @method jibo.face.views.Button#setupHitArea - * @param {PIXI.Rectangle} [bounds] Optionally specify the bounds for the hit area. - * If not defined, defaults to using the display's bounds. - * @protected - */ - - /** - * Lock or unlock input, lock value is applied to the display's interactive variable. - * @method jibo.face.views.Button#lockInput - * @param {Boolean} flag - Determines if input is locked. - */ - - /** - * Manually force a click. - * @method jibo.face.views.Button#click - * @param {any} mouseData Returned from Pixi. - * @protected - */ - - /** - * Handler for out touch input. - * @method jibo.face.views.Button#out - * @param {any} mouseData Returned from Pixi. - * @protected - */ - - /** - * Handler for down touch input. - * @method jibo.face.views.Button#down - * @param {any} mouseData Returned from Pixi. - * @protected - */ - - /** - * Handler for up touch input. - * @method jibo.face.views.Button#up - * @param {any} mouseData Returned from Pixi. - * @protected - */ - - /** - * Activate the button, used for non-touch input. - * @method jibo.face.views.Button#activate - * @public - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/Clip.js b/docs/rendering/gui/components/Clip.js deleted file mode 100644 index 834f874a..00000000 --- a/docs/rendering/gui/components/Clip.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Clip to manage timelines and images. - * - * @class Clip - * @extends jibo.face.views.Element - * @memberof jibo.face.views - */ - - /** - * Timeline for the display content. - * @name jibo.face.views.Clip#timeline - * @type {Timeline} - */ - - /** - * MovieClip for the display content, the instance of the Timeline. - * @name jibo.face.views.Clip#movieClip - * @type {PIXI.animate.MovieClip} - */ - - /** - * Create a Clip from a configuration Object derived from JSON. - * @method jibo.face.views.Clip#createFromConfig - * @param configData Object derived from JSON, must be a specific format refer to examples. - * @returns {jibo.face.views.Clip} The created Clip. - */ - - /** - * Create a Clip object by passing the DisplayObject. - * This allows for a more direct way to create Clips that is not reliant on the configuration data. - * @method jibo.face.views.Clip#createFromDisplayObject - * @param {PIXI.DisplayObject} displayObject The DisplayObject with the button assets. - * @param {PIXI.Container} [container] Display container for the button. - * @returns {jibo.face.views.Clip} The created Clip. - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/ContactButton.js b/docs/rendering/gui/components/ContactButton.js deleted file mode 100644 index bb83312e..00000000 --- a/docs/rendering/gui/components/ContactButton.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Contact button, extends MenuButton to handle specifics required for contacts - * - * @class ContactButton - * @extends jibo.face.views.MenuButton - * @memberof jibo.face.views - */ - - /** - * The default class identifier. - * MenuButton uses variants, so this should be defined specifically at - * Generally used to register the class. - * @name jibo.face.views.ContactButton.DEFAULT_TYPE - * @type {String} - * @readOnly - */ - - /** - * Loop member associated with button. - * @method jibo.face.views.ContactButton#looper - * @returns {jibo.kb.loop.UserNode} Loop member associated with button. - * @readOnly - */ - - /** - * Looper member associated with button. - * @name jibo.face.views.ContactButton#_looper - * @type {jibo.kb.loop.UserNode} - * @private - */ - - /** - * Create a ContactButton from a configuration Object derived from JSON. - * @method jibo.face.views.ContactButton#createFromConfig - * @param {Object} configData Object derived from JSON, must be a specific format refer to examples. - * @returns {jibo.face.views.ContactButton} The ContactButton created from the given configuration. - */ - - /** - * Create and add a button asset descriptor that corresponds with the type value. - * If `type` is provided as a parameter, it is applied to the internal type variable. - * Add an asset descriptor for the looper's photo, if defined. - * @method jibo.face.views.ContactButton#applyButtonType - * @param {String} [type] If definfed, applied to [MenuButton#_type]{@link jibo.face.views.MenuButton#_type}, - * which is then used to determine which timeline assets to use for the button. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Destroy. - * @method jibo.face.views.ContactButton#destroy - */ - - /** - * Keep reference to looper Object and use to define variables. - * @method jibo.face.views.ContactButton#assignLooper - * @param {jibo.kb.loop.UserNode} looper Reference to Looper. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Set up the timeline asset associated with the button. - * @method jibo.face.views.ContactButton#setupTimeline - * @param assets {any} Assets associated with the button. - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Handler for toggleDown-transition executed in {@link jibo.face.views.StandardButton#down} - * @method jibo.face.views.ContactButton#toggleDownTransition - * @protected - */ - - /** - * Handler for click touch input. - * If `willToggle` is `true`, toggle the check mark on each click. - * @method jibo.face.views.ContactButton#click - * @protected - */ - - /** - * Show or hide the button's checkmark according to its state. - * @method jibo.face.views.ContactButton#animateToggleState - * @param {Boolean} [isToggled = false] State the button needs to be animated into - * @param {Boolean} [shouldAnimate = true] Flag determining if check mark should animate. - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/ContentButton.js b/docs/rendering/gui/components/ContentButton.js deleted file mode 100644 index 655e1655..00000000 --- a/docs/rendering/gui/components/ContentButton.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @interface jibo.face.views.ContentButton~ContentButtonOptions - * @extends jibo.face.views.MenuButton~MenuButtonOptions - * @description Interface describing data provided in the config. - * @prop {Boolean} [isVideo] - Flag indicating if the content in the button is video. - * @prop {jibo.face.views.ContentButton.AlbumInfo} [albumInfo] - Information about album shown in the button. - */ - -/** - * @interface jibo.face.views.ContentButton~ContentButtonOptions - * @extends jibo.face.views.MenuButton~MenuButtonOptions - * @description Interface describing data provided in the config. - * @prop {Boolean} [isVideo] - Flag indicating if the content in the button is video. - * @prop {jibo.face.views.ContentButton.AlbumInfo} [albumInfo] - Information about album shown in the button. - */ - -/** - * Information about album displayed on the button. - * @class AlbumInfo - * @memberof jibo.face.views.ContentButton - */ - - /** - * Album title. - * @name jibo.face.views.ContentButton.AlbumInfo#title - * @type {String} - */ - - /** - * Number of items in the album. - * @name jibo.face.views.ContentButton.AlbumInfo#length - * @type {Number} - */ - -/** - * Content button, extends MenuButton to handle specifics required for displaying photo, video, or - * album thumbnails. - * @class ContentButton - * @extends jibo.face.views.MenuButton - * @memberof jibo.face.views - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.ContentButton#DEFAULT_TYPE - * @type {String} - * @private - * @readOnly - */ - - /** - * Create a ContentButton from a configuration Object derived from JSON. - * @method jibo.face.views.ContentButton#createFromConfig - * @param {Object} configData Object derived from JSON, must be a specific format refer to examples. - * @returns {jibo.face.views.ContentButton} ContentButton created from the given configuration. - */ - - /** - * Assign configuration. - * @method jibo.face.views.ContentButton#assignConfig - * @param {Object} configData - Configuration to apply - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Destroy. - * @method jibo.face.views.ContentButton#destroy - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Set up the timeline asset associated with the button. - * @method jibo.face.views.ContentButton#setupTimeline - * @protected - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/Element.js b/docs/rendering/gui/components/Element.js deleted file mode 100644 index 469bd04e..00000000 --- a/docs/rendering/gui/components/Element.js +++ /dev/null @@ -1,223 +0,0 @@ -/** - * @description Interface describing some point in space with 'x' and 'y' properties. - * @interface jibo.face.views.Element~PointData - * @property {Number|String} [x] X value for the point - * @property {Number|String} [y] Y value for the point - */ - -/** - * @description Interface for describing position of the element on the screen. - * @interface jibo.face.views.Element~PositionData - * @extends jibo.face.views.Element~PointData - * @property {Number|String} [x] X value for the position. May take numbers and such values as LEFT/CENTER/RIGHT. - * @property {Number|String} [y] Y value for the position. May take numbers and such values as TOP/CENTER/BOTTOM. - * @property {Number|jibo.face.views.Element~PointData} [margin] Sets the margin value for position specified. May be a number or {jibo.face.views.Element~PointData} structure. - */ - -/** - * @description Interface for basic transformations. - * @interface jibo.face.views.Element~TransformData - * @property {Number} [scaleX] From 0 to N. - * @property {Number} [scaleY] From 0 to N. - * @property {Number} [rotate] In degrees. Positive value to rotate object clockwise. Negative value to rotate object counterclockwise. - * @property {Number} [pivotX] From 0 to 1. - * @property {Number} [pivotY] From 0 to 1. - */ - -/** - * @description Interface for describing hit area of the element. - * @interface jibo.face.views.Element~HitAreaData - * @extends jibo.face.views.Element~PointData - * @property {Number} [x] X value of the hit area. - * @property {Number} [y] Y value of the hit area. - * @property {Number} [width] Width value of the hit area. - * @property {Number} [height] Height value of the hit area. - */ - -/** - * @description Interface for width and height. - * @interface jibo.face.views.Element~DimensionData - * @property {Number} width Width value of the hit area - * @property {Number} height Height value of the hit area - */ - -/** - * @description Interface - Configuration values for creating an Element. - * @interface jibo.face.views.Element~ElementOptions - * @extends jibo.face.views.Component~ComponentOptions - * @prop {jibo.face.views.Element~PositionData} [position] - Position of the element on the screen. - * @prop {jibo.face.views.Element~TransformData} [transform] - Transformation values to be applied to the element. - * @prop {jibo.face.views.Element~HitAreaData} [hitArea] - Structure desribing hit are a for the element. - * @prop {Boolean} [interactable] - Flag that indicates if user can interact with the element. - */ - -/** - * Base class for components elements (non-groups) that appear in component - * groups (buttons, labels, .etc) Has base methods that deal with display - * and positioning. - * - * @class Element - * @extends jibo.face.views.Component - * @memberof jibo.face.views - */ - - /** - * Flag determines if Element can be interactive. - * If `false` prevents locking and unlocking input from effecting the display's interactivity. - * @name jibo.face.views.Element#interactable - * @default false - * @type {boolean} - */ - - /** - * Display container for the Element. - * @name jibo.face.views.Element#display - * @type {PIXI.Container} - */ - - /** - * The target position. - * Can be specified prior to the creation of the display, when the display is created this position is applied. - * @name jibo.face.views.Element#targetPosition - * @type {PIXI.Point} - */ - - /** - * The transformation data. - * @method jibo.face.views.Element#transformData - * @return {jibo.face.views.Element~TransformData} - */ - - /** - * Set transformData for Element. - * @name jibo.face.views.Element#setTransformData - * @type {jibo.face.views.Element~TransformData} - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Assign data passed via Object to class. - * Method can be overridden to allow for manual definition of values, assets, etc. - * @method jibo.face.views.Element#assignConfig - * @param {any} configData - Object derived from JSON containing values specific to Element. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Update data representation of element with any `state` changes - * (anything that should persist between views). - * @method jibo.face.views.Element#updateConfig - * @param configData {any} - Object derived from JSON containing values specific to Element. - * @returns {any} Updated element. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Frame enter loop update, should be overridden. - * @method jibo.face.views.Element#update - * @param {number} elapsed Time in milliseconds since the last frame update. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Create Element's display and add to container. - * @method jibo.face.views.Element#createDisplay - * @param {PIXI.Container} container Parent Container which all DisplayObject - * created within this Component should be added to. - * @param {Object} assets Object passed back from loader namespace load method, - * refer to {@link jibo.loader} for detail - */ - - /** - * Set up the display. - * Assign assets, set timelines, etc. - * @method jibo.face.views.Element#setupDisplay - * @param {Object} [assets] Object passed back from loader namespace load method, - * refer to {@link jibo.loader} for detail - */ - - /** - * Destroy display's children - * Clean up all processes using display's children - * (i.e. tweens). - * @method jibo.face.views.Element#emptyDisplay - */ - - /** - * Stop all tweens whose targets are children of Element's display. - * Option to stop tweens on Element's display as well. - * @param {boolean} [includeDisplay = false] If `true` will stop tween on display. - * @method jibo.face.views.Element#stopChildTweens - */ - - /** - * Called by parent ComponentGroup once parent has finished its loading and setup. - * Allows opportunity to do additional setup that may depend on other components. - * - * ATTENTION: This should not be called directly, the parent View {@link jibo.face.views.View} - * will call this, which will recurse through Component tree. - * @method jibo.face.views.Element#ready - */ - - /** - * Used to define the position for the display before it is created. - * @method jibo.face.views.Element#setTargetPosition - * @param {Number} [x = 0] The x position target. - * @param {Number} [y = 0] The y position target. - * @param {Boolean} [applyNow = false] Flag determining if given target position should be applied to display within this method. - * (Display must be defined for this to take effect.) - */ - - /** - * Apply position that was defined in config to display's actual position. - * @method jibo.face.views.Element#applyPosition - * @public - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Open transition, defaults to vertical tween upward from below viewport. - * @method jibo.face.views.Element#open - * @param {Function} callback Function to be called once open is complete. - * @param {String} transitionType String used to determine Element's open transition, - * refer to ViewManager for constants used - * @param {number} [duration = ViewManager.TRANS_TIME] Duration in milliseconds of the transition. - * @param {String} [tweenType = 'backOut'] Type of tween used. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Close transition, defaults to vertical tween upward out of viewport. - * @method jibo.face.views.Element#close - * @param {Function} callback Function to be called once open is complete. - * @param {String} [transitionType] String used to determine way Element's close transition, - * refer to ViewManager for constants used. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration in milliseconds of the transition. - * @param {String} [tweenType = 'backIn'] Type of tween used. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Destroy, stops any tweens that may be active on the Elements' display. - * @method jibo.face.views.Element#destroy - */ - - /** - * Lock or unlock input. - * If display is defined and interactable is `true` sets display's interactivity. - * @method jibo.face.views.Element#lockInput - * @param {Boolean} flag Determines if input is locked. - */ - - /** - * Center the pivot of the display. - * Overwrite in inheriting classes - * @method jibo.face.views.Element#centerPivot - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/ElementGroup.js b/docs/rendering/gui/components/ElementGroup.js deleted file mode 100644 index 82f7dc02..00000000 --- a/docs/rendering/gui/components/ElementGroup.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * @description Interface describing some point in space with 'x' and 'y' properties. - * @interface jibo.face.views.ElementGroup~PointData - * @property {Number|String} [x] X value for the point - * @property {Number|String} [y] Y value for the point - */ - -/** - * @description Interface - Configuration values for creating an ElementGroup. - * @interface jibo.face.views.ElementGroup~ElementOptions - * @extends jibo.face.views.Component~ComponentOptions - * @prop {Boolean} [interactable] - Flag that indicates if user can interact with the element. - */ - -/** - * Base class for element groups that extend component - * groups. Has base methods that deal with display - * and positioning. - * - * @class ElementGroup - * @extends jibo.face.views.ComponentGroup - * @implements jibo.face.views.IElement - * @memberof jibo.face.views - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.ElementGroup.DEFAULT_TYPE - * @type {String} - * @readOnly - */ - - /** - * Flag determines if ElementGroup can be interactive. - * If `false` prevents locking and unlocking input from effecting the display's interactivity. - * @name jibo.face.views.ElementGroup#interactable - * @default false - * @type {boolean} - */ - - /** - * Display container for the ElementGroup. - * @name jibo.face.views.ElementGroup#display - * @type {PIXI.Container} - */ - - /** - * The target position. - * Can be specified prior to the creation of the display, when the display is created this position is applied. - * @name jibo.face.views.ElementGroup#targetPosition - * @type {PIXI.Point} - */ - - /** - * Create ElementGroup from configuration. - * @method jibo.face.views.ElementGroup#createFromConfig - * @param {Object} configData Configuration to create list from. - * @returns {jibo.face.views.ElementGroup} - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Assign data passed via Object to class. - * Method can be overridden to allow for manual definition of values, assets, etc. - * @method jibo.face.views.ElementGroup#assignConfig - * @param {any} configData - Object derived from JSON containing values specific to ElementGroup. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Create ElementGroup's display and add to container. - * @method jibo.face.views.ElementGroup#createDisplay - * @param {PIXI.Container} container Parent Container which all DisplayObject - * created within this ElementGroup should be added to. - * @param {Object} assets Object passed back from loader namespace load method, - * refer to {@link jibo.loader} for detail - */ - - /** - * Set up the display. - * Assign assets, set timelines, etc. - * @method jibo.face.views.ElementGroup#setupDisplay - * @param {Object} [assets] Object passed back from loader namespace load method, - * refer to {@link jibo.loader} for detail - */ - - /** - * Destroy display's children - * Clean up all processes using display's children - * (i.e. tweens). - * @method jibo.face.views.ElementGroup#emptyDisplay - */ - - /** - * Stop all tweens whose targets are children of ElementGroup's display. - * Option to stop tweens on ElementGroup's display as well. - * @param {boolean} [includeDisplay = false] If `true` will stop tween on display. - * @method jibo.face.views.ElementGroup#stopChildTweens - */ - - /** - * Used to define the position for the display before it is created. - * @method jibo.face.views.ElementGroup#setTargetPosition - * @param {Number} [x = 0] The x position target. - * @param {Number} [y = 0] The y position target. - * @param {Boolean} [applyNow = false] Flag determining if given target position should be applied to display within this method. - * (Display must be defined for this to take effect.) - */ - - /** - * Apply position that was defined in config to display's actual position. - * @method jibo.face.views.ElementGroup#applyPosition - * @public - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Open transition, defaults to vertical tween upward from below viewport. - * @method jibo.face.views.ElementGroup#open - * @param {Function} callback Function to be called once open is complete. - * @param {String} transitionType String used to determine ElementGroup's open transition, - * refer to ViewManager for constants used - * @param {number} [duration = ViewManager.TRANS_TIME] Duration in milliseconds of the transition. - * @param {String} [tweenType = 'backOut'] Type of tween used. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Close transition, defaults to vertical tween upward out of viewport. - * @method jibo.face.views.ElementGroup#close - * @param {Function} callback Function to be called once open is complete. - * @param {String} [transitionType] String used to determine way ElementGroup's close transition, - * refer to ViewManager for constants used. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration in milliseconds of the transition. - * @param {String} [tweenType = 'backIn'] Type of tween used. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Destroy, stops any tweens that may be active on the ElementGroup's display. - * @method jibo.face.views.ElementGroup#destroy - */ - - /** - * Lock or unlock input. - * If display is defined and interactable is `true` sets display's interactivity. - * @method jibo.face.views.ElementGroup#lockInput - * @param {Boolean} flag Determines if input is locked. - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/IElement.js b/docs/rendering/gui/components/IElement.js deleted file mode 100644 index 65fc4e8a..00000000 --- a/docs/rendering/gui/components/IElement.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Interface for elements and element groups that appear in component - * groups (buttons, labels, .etc) Has base methods that deal with display - * and positioning. - * - * @interface IElement - * @extends jibo.face.views.Component - * @memberof jibo.face.views - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/Label.js b/docs/rendering/gui/components/Label.js deleted file mode 100644 index 42da5b15..00000000 --- a/docs/rendering/gui/components/Label.js +++ /dev/null @@ -1,181 +0,0 @@ -/** - * @interface jibo.face.views.Label~LabelOptions - * @extends jibo.face.views.Element~ElementOptions - * @description Interface describing data provided in the config for label initialization. - * @prop {PIXI.TextStyle} [style] - Structure that describes text style. - * @prop {String} [text] - Text value shown in the label. - * @prop {jibo.face.views.Element~PointData} [targetAnchor] - Anchor point for the label. - * @prop {jibo.face.views.Element~DimensionData} [bounds] - Bounds for text. When specified font will be decreased to fit. - */ - -/** - * Wraps text label in Pixi. - * - * @class Label - * @extends jibo.face.views.Element - * @memberof jibo.face.views - */ - - /** - * Default value for the text style if one's missing. - * @name jibo.face.views.Label.DEFAULT_STYLE - * @type {PIXI.TextStyle} - * @readOnly - * @private - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.Label.DEFAULT_TYPE - * @type {String} - * @readOnly - */ - - /** - * Object describing the font specification used by `PIXI.Text`. - * ``` - * fontSize: 100, - * fontFamily: 'Proxima Nova Soft', - * fill: '#FFFFFF', - * fontStyle: 'bold' - * wordWrap: true, - * wordWrapWidth: 100, - * align: 'center' - * ``` - * @name jibo.face.views.Label#style - * @type {PIXI.TextStyle} - */ - - /** - * Reference to the PIXI.Text object. - * @name jibo.face.views.Label#textDisplay - * @type {PIXI.Text} - */ - - /** - * Bounds of the label component - * @name jibo.face.views.Label#_bounds - * @type {jibo.face.views.Element~DimensionData} - * @private - */ - - /** - * Dimensional boundaries of the label that text display cannot exceed. - * If defined, {@link jibo.face.views.Label#style}`.fontSize` will be scaled to fit. - * Does not increase `fontSize` if text will fit provided boundaries. - * @example - * x: 300, // width - * y: 100 // height - * @name jibo.face.views.Label#bounds - * @type {jibo.face.views.Element~DimensionData} - */ - - /** - * Anchor values for display, values range from 0 to 1 - * and represent a percentage of the total width or height. - * If defined anchor values will be applied to display on its creation. - * @name jibo.face.views.Label#_targetAnchor - * @type {PIXI.Point} - * @private - */ - - /** - * Text message to display. - * @name jibo.face.views.Label#_text - * @type {String} - * @private - */ - - /** - * Keeps reference to original font size specified by style. - * A reference is necessary as the font size can be adjusted to fit the bounds. - * @name jibo.face.views.Label#_originalFontSize - * @type {String} - * @private - */ - - /** - * Text to display. - * If display exists updating the text value will also update the display. - * @name jibo.face.views.Label#text - * @type {String} - */ - - /** - * Helper method to create font style Objects for use with `PIXI.Text`. - * @method jibo.face.views.Label.createFontStyle - * @param {Number|String} size The size of the font. - * @param {String} family The font family/name. - * @param {String} color The font color. - * @param {String} [style] The font style (e.g. bold, italic) - * @param {String} [align] The font alignment (e.g. left, center, right) - * @returns {PIXI.TextStyle} [style] Object in format required by Pixi to define text style. - */ - - /** - * Create Label from config Object. - * @method jibo.face.views.Label.createFromConfig - * @param configData {any} Configuration object to create label for. - * @returns {jibo.face.views.Label} Label created. - */ - - /** - * Get the width and height of `PIXI.Text` based on current text and style. - * If text has not been defined method will use given `sampleText`, if that is not given uses an internal default. - * @method jibo.face.views.Label#getTextDimensions - * @param {String} [sampleText] Used only if {@link jibo.face.views.Label#text} is undefined. - * @returns {jibo.face.views.Element~DimensionData} Dimensions of text. - */ - - /** - * Predefine the anchor point for your text. These anchors are applied when `applyTransition` is called. - * This is useful for defining anchor of the label before the display is created. - * @method jibo.face.views.Label#setTargetAnchor - * @param {int} [x = 0] - Value between 0 and 1, percentage of width where the anchor should be placed. - * @param {int} [y = 0] - Value between 0 and 1, percentage of height where the anchor should be placed. - * @param {Boolean} [applyNow = false] If `true` will apply anchor position to Text within method, - * as long as Text has been defined. - */ - - /** - * Apply target position and anchors if they were defined and if display and text have been created. - * @method jibo.face.views.Label#applyPosition - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Open transition, defaults to fading alpha in from zero. - * @method jibo.face.views.Label#open - * @param {Function} [callback] Function to be called once open is complete. - * @param {String} transitionType String used to determine way Component opens, - * refer to ViewManager for constants used - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @param {String} [tweenType = sineOut] Type of tween used. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Open transition, defaults to fading alpha out to zero. - * @method jibo.face.views.Label#close - * @param {Function} [callback] Function to be called once open is complete. - * @param {String} [transitionType] String used to determine way Component closes, - * refer to ViewManager for constants used. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @param {String} [tweenType = sineIn] Type of tween used. - */ - - /** - * Adjust text font size to fit within bounds. - * Applies autofit if bounds were specified and display and text are defined. - * @method jibo.face.views.Label#applyTextBounds - */ - - /** - * Extract font size from a text style and return as a number. - * @method jibo.face.views.Label#getFontSize - * @return {number} - Font size as a number - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/List.js b/docs/rendering/gui/components/List.js deleted file mode 100644 index 8fe037a4..00000000 --- a/docs/rendering/gui/components/List.js +++ /dev/null @@ -1,661 +0,0 @@ -/** - * @interface jibo.face.views.List~ListOptions - * @extends jibo.face.views.Element~ElementOptions - * @description Interface - Configuration values for creating a List. - * @prop {String} [axis] - Orientation of the list. Can be either `horizontal` or `vertical`. - * @prop {jibo.face.views.Element~ElementOptions[]} [componentConfigs] - Object containing list of element configurations contain within list. - * @prop {Boolean} [noPan = false] - If `true` disables gesture for panning left and right on list. - * @prop {Number} [elementsPerPage] - Number of elements that will appear fully on screen at a time. - * @prop {Number} [pageIndex] - Index of active page of list. - * @prop {Number} [indexOfAction] - Index of the element within list that last triggered an action. - * @prop {jibo.face.views.Element~DimensionData} [elementDimensions] - Width and height of the elements. - * @prop {Number} [elementBuffer] - Minimum space between the elements in the list. - * @prop {jibo.face.views.Element~ElementOptions} [defaultElement] - Default configuration for the elements in the list. - * @prop {Boolean} [dynamic = false] - If `true`, list elements will load as needed. If `false`, all elements assets are loaded with view. - * @prop {Boolean} [dynamicPreload = true] - Use only when `dynamic` is `true`. - * If `true` will load the assets for active elements prior to open, if `false` assets for active elements start laod after open is called. - * @prop {Number} [dynamicBuffer] - Use only when `dynamic` is `true`. Number of pages on either side of current page that will be loaded. - */ - -/** - * Format for methods that will handle destroy transitioning for an Element - * @callback jibo.face.views.List~ElementTransition - * @param {jibo.face.views.Element} element - Element to transition. - * @param {Function} done - Called once transition is complete. - */ - -/** - * Manage lists of elements using pagination. - * - * @class List - * @extends jibo.face.views.ComponentGroup - * @memberof jibo.face.views - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.List.DEFAULT_TYPE - * @type {String} - * @readOnly - */ - - /** - * Action type triggered when page changes. - * @name jibo.face.views.List.PAN - * @type {String} - * @readOnly - */ - - /** - * Action type triggered/Event string dispatched when page changes. - * @name jibo.face.views.List.PAGED - * @type {String} - * @readOnly - */ - - /** - * Event dispatched when page forward attempt is made from end of list. - * @name jibo.face.views.List.AT_END - * @type {String} - * @readOnly - */ - - /** - * Event dispatched when page backward attempt is made from front of list. - * @name jibo.face.views.List.AT_FRONT - * @type {String} - * @readOnly - */ - - /** - * Number of elements that will appear fully on screen at a time. - * @name jibo.face.views.List#elementsPerPage - * @type {number} - */ - - /** - * Number of elements permitted to remain active at - * the edge of the 'page' in addition to the elements per page, - * a value of 1 will allow the elements on either end to remain visible and active. - * @name jibo.face.views.List#numElementsAtEdge - * @type {number} - * @default 1 - */ - - /** - * The width and height of the elements. - * @name jibo.face.views.List#elementDimensions - * @type {jibo.face.views.Element~DimensionData} - */ - - /** - * Minimum space between the elements in the list. - * Buffer is calculated during List creation to guarantee appropriate page positioning, - * and uses this value as the minimum allowable spacing between elements. - * @name jibo.face.views.List#elementBuffer - * @type {number} - * @default 20 - */ - - /** - * Default configuration for the elements within the list. - * Properties of `defaultElementData` are merged into the element configs on List creation, - * filling in any unspecified values. - * @name jibo.face.views.List#defaultElementData - * @type {Object} - */ - - /** - * Position of list axis. - * Only horizontal lists are currently supported. - * @name jibo.face.views.List#axisPosition - * @type {number} - */ - - /** - * In case of dynamic element lists, the number of pages on either side of current page that will be loaded. - * @name jibo.face.views.List#dynamicLoadBuffer - * @type {number} - * @default 1 - */ - - /** - * Flag to disable gestures for panning left and right on list. - * Set value before List's `createDisplay` is called to take effect. - * @name jibo.face.views.List#noPan - * @type {boolean} - * @default false - */ - - /** - * Flag to determine if all the list elements will be created dynamically. - * Dynamic elements within the list are not supported yet, so this should remain false. - * The use case for dynmic creation be for a list with a large or unknown number of elements. - * @name jibo.face.views.List#dynamicElements - * @type {boolean} - * @default false - */ - - /** - * Flag to include assets for elements that are in initial load range as part of the assets included in the View setup. - * This guarantees that the initially visible elements will have their required assets when the View is opened. - * @name jibo.face.views.List#dynamicPreload - * @type {boolean} - * @default false - */ - - /** - * `true` to allow automatic recalculation of elementsPerPage to fit as many elements on page as possible, `false` to respect elementsPerPage - * @name jibo.face.views.List#autoFitElements - * @type {Boolean} - * @default true - */ - - /** - * `true` to display portion of elements from next pages at edge of screen, `false` to disable it - * @name jibo.face.views.List#pageHinting - * @type {Boolean} - * @default true - */ - - /** - * Get the standard distance between element positions, calculated from element dimensions and buffer. - * @name jibo.face.views.List#elementSpacing - * @type {number} - */ - - /** - * Whether the list requires a pan or not, determine at ready. - * @name jibo.face.views.List#_requiresPan - * @type {Boolean} - * @private - */ - - /** - * In case of list with multiple pages, amount element for next page appears on screen. - * Determines amount element shows to indicate there are more elements in that direction. - * @name jibo.face.views.List#EDGE_HINT - * @type {Number} - * @constant - * @private - */ - - /** - * The max distance of buffer 'spread' when scrolling. - * @name jibo.face.views.List#BUFFER_SPREAD - * @type {number} - * @constant - * @private - */ - - /** - * Minimum amount of pan distance required for page change. - * @name jibo.face.views.List#PAN_THRESHOLD - * @type {int} - * @constant - * @private - */ - - /** - * The max distance of buffer 'spread' when panning. - * @name jibo.face.views.List#PAN_SPREAD - * @type {number} - * @constant - * @private - */ - - /** - * Constant springs value used for spring movement. - * @name jibo.face.views.List#SPRING - * @type {number} - * @constant - * @private - */ - - /** - * Constant friction value applied to spring movement. - * @name jibo.face.views.List#FRICTION - * @type {int} - * @type {number} - * @constant - * @private - */ - - /** - * The threshold the velocity must surpass in order to start the 'spread' between elements. - * Assume a velocity of 0 if the velocity gets below or equal to this threshold. - * @name jibo.face.views.List#REST_THRESHOLD - * @type {number} - * @constant - * @private - */ - - /** - * The x delta that all list elements must be below in order to unlock inputs during a swipe. - * @name jibo.face.views.List#SWIPE_THRESHOLD - * @type {number} - * @constant - * @private - */ - - /** - * The axis of the list, only supports horizontal for now. - * @name jibo.face.views.List#_axis - * @type {String} - * @default 'horizontal' - * @private - */ - - /** - * List of Elements currently awaiting assets to load. - * @name jibo.face.views.List#_loadingElements - * @type {jibo.face.views.Element[]} - * @private - */ - - /** - * left page bound - * @name jibo.face.views.List#_leftPageBound - * @type {number} - * @private - */ - - /** - * right page bound - * @name jibo.face.views.List#_leftPageBound - * @type {number} - * @private - */ - - /** - * Current page the list is on, 0 being the first page. - * @name jibo.face.views.List#_pageIndex - * @type {int} - * @private - */ - - /** - * The current element offset of the pages. - * @name jibo.face.views.List#_pageElementOffset - * @type {int} - * @private - */ - - /** - * The list index of the element that last triggered an action. - * @name jibo.face.views.List#_indexOfAction - * @type {number} - * @private - */ - - /** - * The current page the list is on, 0 being the first page. - * @name jibo.face.views.List#pageIndex - * @type {number} - * @readOnly - */ - - /** - * Maximum buffer distance, this is the standard buffer plus the max distance of buffer 'spread' when scrolling - * @name jibo.face.views.List#_bufferMax - * @type {int} - * @private - */ - - /** - * Current type of movement, refer to Movement enum for values. - * @name jibo.face.views.List#_currentMovement - * @type {int} - * @private - */ - - /** - * Total distance of the list has mpved from when pan began. - * This is reset to zeroed once the pan stops. - * @name jibo.face.views.List#_panTotalDelta - * @type {number} - * @private - */ - - /** - * Holds index range for active elements. - * For use in dynamic lists where we don't want to keep calculating the active range. - * @name jibo.face.views.List#_dynamicActiveIndexRange - * @type {number[]} - * @private - */ - - /** - * Create List from configuration. - * @method jibo.face.views.List#createFromConfig - * @param {Object} configData Configuration to create list from. - * @returns {jibo.face.views.List} - */ - - /** - * Add Element to the List. - * Assigns the Element's index within the list to the Element.index variable. - * @method jibo.face.views.List#addComponent - * @param {jibo.face.views.Element} element The Element to add this group's component list and library. - * @param {String} [elementId] The id to assign to the Element, if specified will overwrite existing id, - * if none is specified an id will be automatically generated and assigned. - * @returns {jibo.face.views.Element} Returns the given Element. - */ - - /** - * Remove Element from list, ultimately destroying the Element. - * @method jibo.face.views.List#removeComponent - * @param {jibo.face.views.Component|Number|String} componentDeterminer - Provide Component, index of component, or id of component to remove. - * @param {Function} [done] - Callback for when element has been fully removed. - * @param {jibo.face.views.List~ElementTransition} [transition] - Optional method to transition element prior to destruction, if not defined uses default. - * @returns {jibo.face.views.Component} - */ - - /** - * Compiles together Objects that describe the assets to load from this Component and its children. - * If list is dynamic, only loads an asset to display loading, the element asset are then loaded on the fly. - * @name jibo.face.views.List#assetDescriptors - * @type {jibo.face.views~AssetDescriptor[]} - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Updates the indexes, so list can remember which page it was on when it closed and what element closed it. - * @method jibo.face.views.List#updateConfig - * @param {Object} [configData] Object defining configuration. - * @returns {Object} - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Create the display, sets up touch controls. - * @method jibo.face.views.List#createDisplay - * @param {PIXI.Container} container Parent Container which all DisplayObject - * created within this Component should be added to. - * @param {Object} [assets] Object passed back from loader namespace load method, - * refer to loader namespace within jibo for details. - */ - - /** - * Called by parent ComponentGroup once parent has finished its loading and setup. - * Allows opportunity to do additional setup that may depend on other components. - * Register for update if multiple pages are required. Also register for panning if its not disabled. - * - * ATTENTION: This should not be called directly, the top level View {@link jibo.face.views.View} - * will call this, which will recurse through Component tree. - * @method jibo.face.views.List#ready - */ - - /** - * Destroy, unregister for update, remove gestures. - * Should not be called directly, is called through the owning ComponentGroup - * @method jibo.face.views.List#destroy - */ - - /** - * Lock input for List and all child Components, - * and activate or deactivate gestures. - * @method jibo.face.views.List#lockInput - * @param {Boolean} [flag = true] - Flag for pausing or un-pausing the Component. - */ - - /** - * Turn the interactivity of the child components off or on. - * @method jibo.face.views.List#lockChildInput - * @param {boolean} flag - flag to turn interactivity on or off. - * @protected - */ - - /** - * Open the list, has unique implementation for vertical transitions (TRANS_UP, TRANS_DOWN, & TRANS_EYE). - * Once open is complete start registering for pans if criteria are met. - * Should not be called directly, is called through the owning ComponentGroup - * @method jibo.face.views.List#open - * @param {Function} callback Function to be called once open is complete. - * @param {String} transitionType String used to determine way Component opens, - * refer to ViewManager for constants used - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @param {String} [tweenType = 'backOut'] Type of tween used. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Close the list, has unique implementation for vertical transitions (TRANS_UP, TRANS_DOWN, & TRANS_EYE). - * Should not be called directly, is called through the owning ComponentGroup. - * @method jibo.face.views.List#close - * @param {Function} callback Function to be called once open is complete. - * @param {String} [transitionType] String used to determine way Component closes, - * refer to ViewManager for constants used. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @param {String} [tweenType = 'backIn'] Type of tween used. - */ - - /** - * Bubble up action to parent, keep a reference to the index of the element that triggered action for later use with transitions. - * @method jibo.face.views.List#actionHandler - * @param {jibo.face.views.ActionData} action Contains string for type of action and Object with any pertinent data required for that action type. - * @param {jibo.face.views.Component} [fromComponent] Component that triggered action. - */ - - /** - * Blocks actions from reaching child Elements. - * Listens for actions that will effect the page to change, - * namely ActionData.SWIPE_RIGHT, ActionData.SWIPE_LEFT - * @method jibo.face.views.List#actionEnactor - * @param {jibo.face.views.ActionData} action Contains string for type of action and data Object with any pertinent data dependent on action type. - * @return {boolean} Returns true if given action is acted on. - */ - - /** - * Move forward or backward one page. - * @method jibo.face.views.List#changePage - * @param {Boolean} [pageForward = true] - If `true` moves forward through the list, if `false` moves backwards. - * @return {Boolean} `true` if list was able to change pages - */ - - /** - * Move to start or end of list. - * @method jibo.face.views.List#pageToEnd - * @param {Boolean} [pageToFront = false] - If `true` moves to the beginning of the list, if `false` moves to end of the list. - * @return {Boolean} `true` if list was able to change pages - */ - - /** - * Get the start index of the element for the given page index. - * Make sure page index is set before using as it to guarantees offsets is correct. - * The offset guarantees that pages will always show the max elements per page, - * leaving no 'empty' slots when the page displays. - * @method jibo.face.views.List#getStartIndexByPage - * @param {number} pageIndex The index of the page. - * @return {number} The adjusted start index for the page, so that the page is always 'full'. - * @public - */ - - /** - * Set the active page index. - * Updates variables that keep track of element offset and range for dynamic elements. - * @method jibo.face.views.List#setActivePage - * @param {number} index - index of page - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL FROM EXTERNAL CLASS. - * - * Custom list open for opening vertically. - * Should not be called directly, but from within List.open() - * @method jibo.face.views.List#openVertical - * @param {Function} callback Function to be called once open is complete. - * @param {String} [transitionType] String used to determine way Component closes, - * refer to ViewManager for constants used. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @param {String} [tweenType = 'backIn'] Type of tween used. - * @private - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL FROM EXTERNAL CLASS. - * - * Custom list close for closing vertically. - * Should not be called directly, but from within List.close() - * @method jibo.face.views.List#closeVertical - * @param {Function} callback Function to be called once open is complete. - * @param {String} [transitionType] String used to determine way Component closes, - * refer to ViewManager for constants used. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @param {String} [tweenType = 'backIn'] Type of tween used. - * @private - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL FROM EXTERNAL CLASS. - * - * Custom list open for opening from an EyeView. - * Should not be called directly, but from within List.open() - * @method jibo.face.views.List#openFromEye - * @param {Function} callback Function to be called once open is complete. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @private - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL FROM EXTERNAL CLASS. - * - * Custom list close for closing an EyeView. - * Should not be called directly, but from within List.close() - * @method jibo.face.views.List#closeToEye - * @param {Function} callback Function to be called once open is complete. - * @param {number} [duration = ViewManager.TRANS_TIME] Duration of the transition. - * @private - */ - - /** - * Load and destroy elements dynamically based on page index. - * @method jibo.face.views.List#dynamicElementsPageChange - * @param {number} pageIndex - Page index to reference for dynamic loading, generally the current page. - * @private - */ - - /** - * Enables recursive iteration through each asset descriptor in given object, loading each individually. - * This is to reduce the impact of one bad asset corrupting a load batch. - * @method jibo.face.views.List#iterativeLoad - * @param {any} assetsToLoad Object containing AssetDescriptors using their id as key - * @private - */ - - /** - * Run through list of loading components and check to see if their required assets have been loaded. - * If assets are available update display. - * @method jibo.face.views.List#assignElementAssets - * @private - */ - - /** - * Remove loader display and create Element's display now that assets are available. - * @method jibo.face.views.List#updateElementDisplay - * @param {jibo.face.views.Element} element - Element to update. - * @private - */ - - /** - * Remove loader stand-in and create Element's display now that assets are available. - * @method jibo.face.views.List#emptyElementDisplay - * @param {jibo.face.views.Element} element - Element to empty display. - * @private - */ - - /** - * Set the list element targets based on page index. - * This is used in conjunction with changePage(). - * @method jibo.face.views.List#setTargetsByPage - * @param {number} pageIndex - we can expect that the pageIndex is possible - * @private - */ - - /** - * Set the list element targets based on touch input. - * This is used when panning the list. - * @method jibo.face.views.List#setTargetsByInput - * @param {number} panState The t of the pan, refer to Pan Case enum for valid states - * @param {number} velocity The velocity of the pan, equal to the delta of the mouse x position since last update - * @param {number} inputX - Position x of input. - * @private - */ - - /** - * Updates the position of the list elements by springing them toward their targets. - * @method jibo.face.views.List#springUpdate - * @private - */ - - /** - * Setup panning, determining the pan state and setting spring strength. - * The parameters are supplied by the GestureManager. - * @method jibo.face.views.List#pan - * @param {number} inputX - Position x of input. - * @param {number} velocity - Distance input has moved since last GestureManager dispatch. - * @private - */ - - /** - * Stop panning. - * @method jibo.face.views.List#panStop - * @private - */ - - /** - * Handler for events sent from pan gesture. - * @method jibo.face.views.List#onPanEvent - * @param {Object} event - Event object sent from HammerJS's Pan gesture. - * @private - */ - - /** - * Check the input events received from the gesture manager. - * @method jibo.face.views.List#checkGestureInput - * @param {Boolean} active - Flag determining if pan is active. - * @param {Number} [inputX = 0] - Current x position of pan input. - * @param {Number} [deltaX = 0] - Difference between start position on current position of pan input. - * @private - */ - - /** - * Default transition for removing a list element. - * @method jibo.face.views.List#elementRemovalTransition - * @param {jibo.face.views.Element} element - Element from list to destroy - * @param {Function} done - Callback when transition is complete - * @private - */ - - /** - * Destroy a single element, removal of element form the list is handle in List. - * Removes assets associated with Element, while checking for asset conflicts. - * @method jibo.face.views.List#destroyElement - * @param {jibo.face.views.Element} element - Element from list to destroy - * @param {Function} [done] - Callback when destruction of element is complete - * @private - */ - - /** - * Merge Component configurations together. - * @method jibo.face.views.List#mergeConfigs - * @param {Object} data - Object that defaultData is merging into and that will be returned. - * @param Object} defaultData - Object to merge into data - * @param {Boolean} [mergeArrays = true] - if `true` will merge Arrays together, if 'false' arrays will overwrite each other. - * @returns {Object} - resulting object from merge. - * @private - */ - - /** - * Returns page index that has been tested against the number of elements in list. - * Does not adjust the original parameter. - * @method jibo.face.views.List#normalizePageIndex - * @param {Number} pageIndex The index of the page - * @return {Number} the normalized page index - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/ListProgress.js b/docs/rendering/gui/components/ListProgress.js deleted file mode 100644 index 5025d971..00000000 --- a/docs/rendering/gui/components/ListProgress.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * @typedef jibo.face.views.ListProgress~ListProgressOptions - * @description Interface - Configuration values for creating a ListProgress. - * @prop {number} [width] - Value for the desired width of the component. - * @prop {number} [height] - Value for the desired height of the component. - * @prop {number} [backgroundColor] - Background color value. - * @prop {number} [progressColor] - Progress color value. - * @prop {Object} [position] - An object with 'x' and 'y' properties. - */ - -/** - * Indicate current position (page) while navigating in MenuView. - * - * @class ListProgress - * @extends jibo.face.views.Element - * @memberof jibo.face.views - */ - - /** - * Default value for WIDTH of the component. - * @name jibo.face.views.ListProgress.DEFAULT_WIDTH - * @type {number} - * @readOnly - * @private - */ - - /** - * Default value for HEIGHT of the component. - * @name jibo.face.views.ListProgress.DEFAULT_HEIGHT - * @type {number} - * @readOnly - * @private - */ - - /** - * Default value for backgroundColor of the component. - * @name jibo.face.views.ListProgress.BACKGROUND_COLOR - * @type {number} - * @readOnly - * @private - */ - - /** - * Default value for progressColor of the component. - * @name jibo.face.views.ListProgress.PROGRESS_COLOR - * @type {number} - * @readOnly - * @private - */ - - /** - * Set of options which are used to specify position, size and look of progress bar - * @name jibo.face.views.ListProgress#_listProgressOptions - * @type {jibo.face.views.ListProgress~ListProgressOptions} - * @private - */ - - /** - * Graphics instance that represents progress bar - * @name jibo.face.views.ListProgress#_progressDisplay - * @type {PIXI.Graphics} - * @private - */ - - /** - * Graphics instance that represents background - * @name jibo.face.views.ListProgress#_backgroundDisplay - * @type {PIXI.Graphics} - * @private - */ - - /** - * Last passed-in page index from MenuView - * @name jibo.face.views.ListProgress#_pageIndex - * @type {number} - * @private - */ - - /** - * Last passed-in pages count from MenuView - * @name jibo.face.views.ListProgress#_pagesCount - * @type {number} - * @private - */ - - /** - * The radius of the round corner to be drawn on the left and right of the progress bar - * @name jibo.face.views.ListProgress#_cornerRadius - * @type {number} - * @private - */ - - /** - * Set up the display. - * Assign assets, set timelines, etc. - * @method jibo.face.views.ListProgress#setupDisplay - * @param {Object} [assets] Object passed back from loader namespace load method, - * refer to {@link jibo.loader} for detail - */ - - /** - * Updates progress position based on provided current page and pages quantity available in the MenuView - * @method jibo.face.views.ListProgress#updatePage - * @param {number} [pageIndex = -1] Index of the current page - * @param {number} [pagesCount = -1] Number of pages available in MenuView - */ - - /** - * Retrieves the actual height of the component. - * @method jibo.face.views.ListProgress#getHeight - * @type {Number} - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/MenuButton.js b/docs/rendering/gui/components/MenuButton.js deleted file mode 100644 index c080fa61..00000000 --- a/docs/rendering/gui/components/MenuButton.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * @interface jibo.face.views.MenuButton~MenuButtonOptions - * @extends jibo.face.views.StandardButton~StandardButtonOptions - * @description Interface describing data provided in the config. - * @prop {Number[]|String} [colors] - Array with colors that can be used for button filling. - * @prop {String} [label] - Value for the text label to be shown for the button. - * @prop {String} [iconSrc] - Path to the icon placed inside of the button. - */ - -/** - * @interface jibo.face.views.MenuButton~ButtonData - * @description Interface for required data for MenuButton types. - * @prop {String} assetPath - Path to button timeline source. - * @prop {jibo.face.views.Element~DimensionData} dimensions - Width and height of button. - * @prop {String} [cache] - Optionally define cache. - */ - -/** - * Menu button. - * - * @class MenuButton - * @extends jibo.face.views.StandardButton - * @memberof jibo.face.views - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.MenuButton.DEFAULT_TYPE - * @type {String} - * @readOnly - */ - - /** - * Text to appear below the MenuButton - * @name jibo.face.views.MenuButton#label - * @type {String} - */ - - /** - * MovieClip that may be placed inside of the MenuButton instead of a static image - * @name jibo.face.views.MenuButton#iconMovieClip - * @type {PIXI.animate.MovieClip} - */ - - /** - * Array of 2 colors to be applied to button base. - * @name jibo.face.views.MenuButton#_colors - * @type {number[]} - * @private - */ - - /** - * Mapping for button-specific data. - * @name jibo.face.views.MenuButton#_buttonURIs - * @type {Object} - * @private - */ - - /** - * String identifier for skill button. - * @name jibo.face.views.MenuButton.SKILL - * @type {string} - * @readOnly - */ - - /** - * String identifier for action button. - * @name jibo.face.views.MenuButton.ACTION - * @type {string} - * @readOnly - */ - - /** - * String identifier for large action button. - * @name jibo.face.views.MenuButton.ACTION_BIG - * @type {string} - * @readOnly - */ - - /** - * The predefined dimensions of the button. - * This only returns the dimensions that have been explicitly set; - * it does not return the dimensions of the display itself. - * @name jibo.face.views.MenuButton#dimensions - * @type {jibo.face.views.Element~DimensionData} - * @readOnly - */ - - /** - * Array of 2 colors to be applied to button base. If set to a value of `default`, `confirm`, - * or `cancel` uses the global color for that button type. - * @name jibo.face.views.MenuButton#colors - * @type {number[]} - */ - - /** - * Get button data object. - * @method jibo.face.views.MenuButton.getButtonData - * @param {string} type - Type of button. - * @returns {jibo.face.views.MenuButton~ButtonData} ButtonData for the object. - * @protected - */ - - /** - * Add button data object. - * @method jibo.face.views.MenuButton.addButtonData - * @param {string} type - Type of button. - * @param {string} assetPath - Path to button timeline src. - * @param {jibo.face.views.Element~DimensionData} dimensions - Width and height of button. - * @param {string} [cache] - Optionally define cache. - * @returns {jibo.face.views.MenuButton~ButtonData} ButtonData for the object. - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Set up the display. - * Assign assets, set timelines, etc. - * @method jibo.face.views.MenuButton#setupDisplay - * @param {Object} [assets] Object passed back from loader namespace load method, - * refer to {@link jibo.loader} for detail. - */ - - /** - * Set new icon for MenuButton. - * @method jibo.face.views.MenuButton#setIcon - * @param {PIXI.DisplayObject} icon DisplayObject instance to use as new icon. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL EXTERNALLY. - * Define the interactive hit area of the display. - * The DisplayObject.hitArea is what Pixi uses to define the interactive area. - * @method jibo.face.views.MenuButton#setupHitArea - * @param {PIXI.Rectangle} [bounds] Optionally specify the bounds for the hit area. - * If not defined, defaults to using the display's bounds. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Destroy. - * @method jibo.face.views.MenuButton#destroy - */ - - /** - * Assign colors to display, works for 'Menu' style buttons. - * @method jibo.face.views.MenuButton#applyColors - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/StandardButton.js b/docs/rendering/gui/components/StandardButton.js deleted file mode 100644 index ef1ce4dd..00000000 --- a/docs/rendering/gui/components/StandardButton.js +++ /dev/null @@ -1,246 +0,0 @@ -/** - * Animates view according to its toggled state - * @callback jibo.face.views.StandardButton~ToggleAnimate - * @param {Boolean} toggleOn Value to assign to flag holding button's current toggle state - * @param {Boolean} [shouldAnimate = false] `true` to animate state change. - */ - -/** - * @interface jibo.face.views.StandardButton~StandardButtonOptions - * @extends jibo.face.views.Element~ElementOptions - * @description Interface describing data provided in the config. - * @prop {Boolean} [willToggle] - Flag that indicates whether button will be toggleable or not. - * @prop {Boolean} [toggledOn] - Value indicating current state of the button - * @prop {jibo.face.views.StandardButton~ToggleAnimate} [toggleAnimate] - Function that performs animation for the changes of the toggling state - */ - -/** - * StandardButton element. - * Describes general behavior for buttons when graphical asset responses to basic touch events. - * - * @class StandardButton - * @extends jibo.face.views.Button - * @memberof jibo.face.views - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.StandardButton#DEFAULT_TYPE - * @type {String} - * @private - * @readOnly - */ - - /** - * FOR OVERRIDE ONLY. DO NOT ALTER. - * - * The Class name as a string. - * @name jibo.face.views.StandardButton#_type - * @type {String} - * @protected - */ - - /** - * Scale value for down state of button. - * @name jibo.face.views.StandardButton#downScale - * @type {number} - */ - - /** - * Scale value for activate state of button. - * @name jibo.face.views.StandardButton#activateScale - * @type {number} - */ - - /** - * Duration of tweens for button state changes. - * @name jibo.face.views.StandardButton#tweenTime - * @type {number} - */ - - /** - * Flag that indicates whether button will be toggleable or not. - * @name jibo.face.views.StandardButton#willToggle - * @type {Boolean} - * @default false - */ - - /** - * Flag that indicates whether button will do default down-state transitions - * @name jibo.face.views.StandardButton#disableStateAnimations - * @type {Boolean} - * @default false - */ - - /** - * Flag determining current toggle state of the button - * @name jibo.face.views.StandardButton#_toggledOn - * @type {Boolean} - * @default false - * @private - */ - - /** - * Create a StandardButton from a configuration Object derived from JSON. - * @method jibo.face.views.StandardButton.createFromConfig - * @param {Object} configData Object derived from JSON, must be a specific format refer to examples. - * @returns {jibo.face.views.StandardButton} The StandardButton created from the given configuration. - */ - - /** - * Create a StandardButton object by passing the DisplayObject and specifying the {@link jibo.face.views.ActionData}. - * This allows for a more direct way to create Buttons that is not reliant on the configuration data. - * @method jibo.face.views.StandardButton.createFromDisplayObject - * @param {PIXI.DisplayObject} displayObject The DisplayObject with the button assets. - * @param {jibo.face.views.ActionData} [actionData] The action to be triggered on button click. - * @param {PIXI.Container} container Display container for the button. - * @returns {jibo.face.views.StandardButton} The created StandardButton. - */ - - /** - * Optional function that implements animation switching of toggle state - * @name jibo.face.views.StandardButton#toggleAnimate - * @type {jibo.face.views.StandardButton~ToggleAnimate} - */ - - /** - * Returns button's current toggle state value - * @method jibo.face.views.StandardButton#toggledOn - * @returns {Boolean} `true` if the button is currently toggled - * @readOnly - */ - - /** - * The display containing the button assets. - * Additionaly this is the DisplayObject that transforms are applied to for button states. - * @name jibo.face.views.StandardButton#buttonDisplay - * @type {PIXI.Container} - * @readOnly - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Assign data passed via Object to class. - * Method can be overridden to allow for manual definition of values, assets, etc. - * @method jibo.face.views.StandardButton#assignConfig - * @param {any} configData - Object derived from JSON containing values specific to StandardButton. - */ - - /** - * Destroy display's children and stop tweens on content. - * @method jibo.face.views.StandardButton#emptyDisplay - */ - - /** - * Set up the display. - * Assign assets, set timelines, etc. - * @method jibo.face.views.StandardButton#setupDisplay - * @param {Object} [assets] - Object passed back from loader namespace load method, - * refer to {@link jibo.loader} for details. - */ - - /** - * - * Add asset to content container of button, content is effected by state change transitions (e.g. down, out, up) - * If the given asset is a PIXI.Sprite a center registration is applied, - * in all other cases it is expected that the assets has been given appropriate registration. - * @method jibo.face.views.StandardButton#addToContent - * @param {PIXI.DisplayObject} asset DisplayObject instance to be placed within content container. - * @param {PIXI.Container} [container] If not specified will uses default content container. - * @param {boolean} [emptyContent = false] If `true` will empty content of all children - */ - - /** - * Method to change the state of the button and trigger visual change of the state - * @method jibo.face.views.StandardButton#toggle - * @param {Boolean} toggleOn Value to assign to flag holding button's current toggle state - * @param {Boolean} [animate = true] `true` to animate state change. - */ - - /** - * Activate the button. Used for non-touch input. - * @method jibo.face.views.StandardButton#activate - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Handler for out-transition executed in {@link jibo.face.views.StandardButton#out} - * @method jibo.face.views.StandardButton#outTransition - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Handler for toggleOut-transition executed in {@link jibo.face.views.StandardButton#out} - * @method jibo.face.views.StandardButton#toggleOutTransition - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Handler for down-transition executed in {@link jibo.face.views.StandardButton#down} - * @method jibo.face.views.StandardButton#downTransition - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Handler for toggleDown-transition executed in {@link jibo.face.views.StandardButton#down} - * @method jibo.face.views.StandardButton#toggleDownTransition - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Handler for up-transition executed in {@link jibo.face.views.StandardButton#up} - * @method jibo.face.views.StandardButton#upTransition - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Handler for toggleUp-transition executed in {@link jibo.face.views.StandardButton#up} - * @method jibo.face.views.StandardButton#toggleUpTransition - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Animation for simple button behavior when it's pressed down - * @method jibo.face.views.StandardButton#animateDown - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Animation for simple button behavior when touch event is released - * @method jibo.face.views.StandardButton#animateUp - * @protected - */ - - /** - * This method takes array of functions and starts them asynchronously - * @method jibo.face.views.StandardButton#executeAsyncTransitions - * @param {any[]} [transitionArray] Array of transition functions to be executed in parallel - * @param {Function} [callback] Function to execute once execution is done - * @private - */ - - /** - // * Handler for when transitions are all complete. - // * @method jibo.face.views.StandardButton#transitionComplete - // * @param {Function} callback The callback triggered once transitions are completed - // * @param {Error} [err] Error returns if there is an issue with the asynchronous method. - // * @param {any[]} [results] Results returned from asynchronous method, will be empty. - // * @private - // */ \ No newline at end of file diff --git a/docs/rendering/gui/components/subcomponents/ListMember.js b/docs/rendering/gui/components/subcomponents/ListMember.js deleted file mode 100644 index e5fcd2ec..00000000 --- a/docs/rendering/gui/components/subcomponents/ListMember.js +++ /dev/null @@ -1,31 +0,0 @@ - /** - * Subcomponent identifier. - * @name jibo.face.views.ListMember.ID - * @type {String} - * @default 'ListMember' - * @readOnly - */ - - /** - * Target position of list member. - * @name jibo.face.views.ListMember.targetPosition - * @type {PIXI.Point} - */ - - /** - * Velocity of list member. - * @name jibo.face.views.ListMember.velocity - * @type {PIXI.Point} - */ - - /** - * Offset from target. - * @name jibo.face.views.ListMember.targetOffset - * @type {Number} - */ - - /** - * If assets are loaded for owning Component. - * @name jibo.face.views.ListMember.loaded - * @type {Boolean} - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/subcomponents/Subcomponent.js b/docs/rendering/gui/components/subcomponents/Subcomponent.js deleted file mode 100644 index 7cf36ad0..00000000 --- a/docs/rendering/gui/components/subcomponents/Subcomponent.js +++ /dev/null @@ -1,39 +0,0 @@ - /** - * Subcomponent identifier. - * @name jibo.face.views.Subcomponent.TYPE - * @type {String} - * @default 'TouchInteractive' - * @readOnly - */ - - /** - * Type of Subcomponnet, used for identification - * @name jibo.face.views.Subcomponent#type - * @type {String} - * @readOnly - */ - - /** - * Owning Component. - * @name jibo.face.views.Subcomponent.component - * @type {Boolean} - * @protected - */ - - /** - * Type of Subcomponent, used for mapping storage and retrieval. - * @name jibo.face.views.Subcomponent._type - * @type {String} - * @private - */ - - /** - * Initialize Subcomponent. - * @method jibo.face.views.Subcomponent#init - * @param {jibo.face.views.Component} component - Component this Subcomponent is being added to. - */ - - /** - * Destroy. - * @method jibo.face.views.Subcomponent#destroy - */ \ No newline at end of file diff --git a/docs/rendering/gui/components/subcomponents/TouchInteractive.js b/docs/rendering/gui/components/subcomponents/TouchInteractive.js deleted file mode 100644 index 27111f3b..00000000 --- a/docs/rendering/gui/components/subcomponents/TouchInteractive.js +++ /dev/null @@ -1,64 +0,0 @@ - /** - * Subcomponent identifier. - * @name jibo.face.views.TouchInteractive.TYPE - * @type {String} - * @default 'TouchInteractive' - * @readOnly - */ - - /** - * Whether interactivity is active or not. - * @name jibo.face.views.TouchInteractive.isActive - * @type {Boolean} - */ - - /** - * Object of array of actions, with gesture type as key. - * @name jibo.face.views.TouchInteractive._gestureActions - * @type {Object.} - * @private - */ - - /** - * Destroy - * @method jibo.face.views.TouchInteractive#destroy - */ - - /** - * Add a {@link jibo.face.views.ActionData}. All actions with will be triggered on triggerActions. - * Generally these actions are triggered on a screen press (if a screen press is set up). - * @method jibo.face.views.TouchInteractive#addAction - * @param {jibo.face.views.ActionData} actionData - The action to be triggered on tap. - * @param {boolean} [clearPrevious = false] Flag to determine if we should clear out the existing actions. - * @param {boolean} [toFront = false] If `true` adds action to front of actions list, causing it to be called first when actions are triggered. - * @param {jibo.face.views.GESTURE} [gesture = 'tap'] Gesture actions are related to. - * @returns {jibo.face.views.ActionData} The ActionData added. - */ - - /** - * Returns `true` if there are actions associated with given gesture type. - * @method jibo.face.views.TouchInteractive#hasActions - * @param {jibo.face.views.GESTURE} [gesture = 'tap'] Gesture actions are related to. - * @returns {boolean} `true` if there are actions associated with given gesture type. - */ - - /** - * Get actions associated with given gesture type. - * @method jibo.face.views.TouchInteractive#getActions - * @param {jibo.face.views.GESTURE} [gesture = 'tap'] Gesture actions are related to. - * @return {jibo.face.views.ActionData[]} Actions associated with the given gesture type. - */ - - /** - * Clear all actions associated with given gesture type. - * @method jibo.face.views.TouchInteractive#clearActions - * @param {jibo.face.views.GESTURE} [gesture = 'tap'] Gesture actions are related to. - */ - - /** - * Trigger actions associated with given gesture type. - * Calls Component or the Component parent's actionHandler for each action. - * @method jibo.face.views.TouchInteractive#triggerActions - * @param {jibo.face.views.GESTURE} [gesture = 'tap'] Gesture actions are related to. - * @return {boolean} `true` if at least one action was triggered. - */ \ No newline at end of file diff --git a/docs/rendering/gui/views/ContactsView.js b/docs/rendering/gui/views/ContactsView.js deleted file mode 100644 index b05ce179..00000000 --- a/docs/rendering/gui/views/ContactsView.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Sort the list of Loop members. - * @callback jibo.face.views.ContactsView~LoopListSort - * @param loopList {jibo.kb.loop.UserNode[]} List of Loop members to sort. - */ - -/** - * Check to see if a Loop member is in the list. - * @callback jibo.face.views.ContactsView~LooperCheck - * @param looper {jibo.kb.loop.UserNode} Loop member to check the list for. - * @return {Boolean} `true` if the Looper exists in the list. - */ - -/** - * Menu display for a list of Contacts. - * - * @class ContactsView - * @extends jibo.face.views.MenuView - * @memberof jibo.face.views - */ - - /** - * Optional function used to edit the looper list. - * Should determine what ContactButtons are created and in what order. - * Need to take and return an array of Loop members. - * If not explicitly defined will be set to a default when createListComponents is called. - * @name jibo.face.views.ContactsView#sortLoopList - * @type {jibo.face.views.ContactsView~LoopListSort} - */ - - /** - * Optional function used to determine if a ContactButton's checkmark should be displayed. - * Requires a Looper and return a boolean. - * If true is returned, a checkmark on the Loop member's ContactButton will be displayed. - * @name jibo.face.views.ContactsView#determineCheck - * @type {jibo.face.views.ContactsView~LooperCheck} - */ - - /** - * Optional parameters indicating whether show the "Not a Loop Member" button. - * @name jibo.face.views.ContactsView#showNotALoopMemberButton - * @type {Boolean} - */ - - /** - * @name jibo.face.views.ContactsView#_loopMembers - * @type {jibo.kb.loop.UserNode[]} - * @private - */ - - /** - * Destroy. - * @method jibo.face.views.ContactsView#destroy - */ - - /** - * Default LoopListSort used to edit list of Loop members. - * @method jibo.face.views.ContactsView#removeInvalidLoopers - * @param {jibo.kb.loop.UserNode[]} loopList List of Loop members objects - * @returns {jibo.kb.loop.UserNode[]} The edited list of Loop members objects - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/views/EyeView.js b/docs/rendering/gui/views/EyeView.js deleted file mode 100644 index 91186797..00000000 --- a/docs/rendering/gui/views/EyeView.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * View class that serves as a container for the Eye. - * - * @class EyeView - * @extends jibo.face.views.View - * @memberof jibo.face.views - */ - - /** - * Construct View - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Adjust provided transition before calling inherited method. - * @method jibo.face.views.EyeView#open - * @param {Function} [callback] - Callback fired when close is complete, can also listen for View.OPENED event. - * @param {String} [transitionType] - This will be ignored as EyeView defines its own transition types. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * We want to override the close transition type for EyeView - * @method jibo.face.views.EyeView#close - * @param {Function} [callback] - Callback fired when close is complete, can also listen for View.CLOSED event. - * @param {String} [transitionType] - This will be ignored as EyeView defines its own transition types. - */ \ No newline at end of file diff --git a/docs/rendering/gui/views/ImageView.js b/docs/rendering/gui/views/ImageView.js deleted file mode 100644 index 883b5589..00000000 --- a/docs/rendering/gui/views/ImageView.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @description Interface - Configuration values for creating a ImageView. - * @interface jibo.face.views.ImageView~ImageViewOptions - * @extends jibo.face.views.View~ViewOptions - * @prop {AssetDescriptor} [image] - Relative source path to the resource. - */ - -/** - * View designed to display standard Clips. - * - * Takes a simplified JSON configuration. Example: - * ```json - * { - * "viewConfig": { - * "type": "ImageView", - * "id": "my_image_view", - * "image": { - * "id": "clipTest", - * "src": "resources/images/my-image.png", - * "type": "texture" - * }, - * "scaleToFit": true - * } - * } - * ``` - * @class ImageView - * @extends jibo.face.views.View - * @memberof jibo.face.views - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.ImageView.DEFAULT_TYPE - * @type {String} - * @readOnly - */ - - /** - * If clip is smaller than screen determine if it should be stretched to fit - * @name jibo.face.views.ImageView#scaleToFit - * @type {boolean} - * @public - */ - - /** - * AssetDescriptor for the ImageView's Clip - * @name jibo.face.views.ImageView.imageDescriptor - * @type {jibo.face.views~AssetDescriptor} - * @public - */ - - /** - * Clip for the ImageView. - * @name jibo.face.views.MenuView#clip - * @public - * @readOnly - * @type {jibo.face.views.Clip} - */ - - /** - * Construct ImageView - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL EXTERNALLY. - * - * Determine x and y positions for the clip element, and its scaling relative to the screen. - * @method jibo.face.views.ImageView#positionComponents - */ \ No newline at end of file diff --git a/docs/rendering/gui/views/MenuView.js b/docs/rendering/gui/views/MenuView.js deleted file mode 100644 index 8fbb6bd3..00000000 --- a/docs/rendering/gui/views/MenuView.js +++ /dev/null @@ -1,208 +0,0 @@ -/** - * @description Interface for describing default values of the list elements that will be shown in the MenuView. - * @interface jibo.face.views.MenuView~ListDefaultData - * @extends jibo.face.views.MenuButton~MenuButtonOptions - * @property {String} [menuButtonType] The name of the MenuButton type that will be generated in the list. - */ - -/** - * @description Interface - Configuration values for creating a MenuView. - * @interface jibo.face.views.MenuView~MenuViewOptions - * @extends jibo.face.views.View~ViewOptions - * @prop {String} [title] - Position of the element on the screen. - * @prop {jibo.face.views.MenuView~ListDefaultData} [listDefault] - Default values that will be applied to list elements upon creation. - * @prop {jibo.face.views.MenuButton~MenuButtonOptions[]} [list] - Structure specifying the contents of the list. Its values override those given in {~listDefault}. - * @prop {Boolean} [useEyeTransitions] - Flag indicating whether eyeTransitions should be used. - */ - -/** - * View designed to display standard list menus. - * - * Takes a simplified JSON configuration. Example: - * ```json - * { - * "viewConfig": { - * "type": "MenuView", - * "id": "my_menu", - * "title": "Menu Title", - * "progress": { //setting to true will use default values, setting to false prevent creation - * "width" : 500, - * "height": 20, - * "backgroundColor": "0xff892f", - * "progressColor": "0x1E90FF", - * "position": { - * "x": "390", - * "y": "170", - * "margin" : { - * "x": 100|LEFT|CENTER|RIGHT, - * "y": 100|TOP|CENTER|BOTTOM - * } - * } - * }, - * "listDefault": { - * "menuButtonType": "SkillButton" - * }, - * "list": [ - * { - * "id": "mySkill", - * "label": "My SKill", - * "colors": ["0xff892f", "0xaf4123"], - * "iconSrc": "resources/icons/mySkill.png", - * "action": { - * "type": "event", - * "data": { - * "event": "openSkill" - * "skill": "mySkill" - * } - * } - * } - * ] - * } - * } - * ``` - * @class MenuView - * @extends jibo.face.views.View - * @memberof jibo.face.views - */ - - /** - * Default value for X padding of the listProgress. - * @name jibo.face.views.MenuView.LISTPROGRESS_LEFT_MARGIN - * @type {number} - * @readOnly - * @private - */ - - /** - * Default value for Y padding of the listProgress. - * @name jibo.face.views.MenuView.LISTPROGRESS_BOTTOM_MARGIN - * @type {number} - * @readOnly - * @private - */ - - /** - * Margin value for X padding on either side of title to edge of screen. - * @name jibo.face.views.MenuView.TITLE_MARGIN - * @type {number} - * @readOnly - * @private - */ - - /** - * Buffer value for Y padding beween bottom of title and top of list buttons. - * @name jibo.face.views.MenuView.TITLE_BUFFER - * @type {number} - * @readOnly - * @private - */ - - /** - * Maximum height of title text. - * @name jibo.face.views.MenuView.TITLE_HEIGHT - * @type {number} - * @readOnly - * @private - */ - - /** - * Maximum height of button label text. - * @name jibo.face.views.MenuView.LABEL_HEIGHT - * @type {number} - * @readOnly - * @private - */ - - /** - * A constant specified by design - * @name jibo.face.views.MenuView#MENU_LABEL_BUFFER - * @private - * @type {number} - * @readOnly - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.MenuView.DEFAULT_TYPE - * @type {String} - * @readOnly - */ - - /** - * List for the MenuView. - * @name jibo.face.views.MenuView#list - * @public - * @readOnly - * @type {jibo.face.views.List} - */ - - /** - * Title for the MenuView, only created if specified. - * @name jibo.face.views.MenuView#titleLabel - * @public - * @readOnly - * @type {jibo.face.views.Label} - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Create and add components for List. - * @method jibo.face.views.MenuView#createListComponents - * @param {jibo.face.views.List} list The List components components will be added to. - * @protected - */ - - /** - * Add eye specific transitions for use when this instance of MenuView opens from or closes to an EyeView. - * Call on instance of MenuView prior to starting a change view process. - * @method jibo.face.views.MenuView#addEyeTransitions - */ - - /** - * Apply List config update values (pageIndex, indexOfAction) directly to view config. - * This occurs because MenuView does not use a standard component configuration, - * instead storing List related data directly to its viewConfig. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL EXTERNALLY. - * - * Determine y positions for the menu elements, as they are relative to each other. - * @method jibo.face.views.MenuView#positionComponents - * @param {number} [overrideTitleHeight] Override the calculated title height (or if there is no title but you want more spacing). - */ - - /** - * Positions button labels according to list start position to match buttons location on the screen - * @method jibo.face.views.MenuView#positionButtonLabels - * @protected - */ - - /** - * Update the button labels to match the list elements. - * Enacts the Label close and open transitions by default. - * @method jibo.face.views.MenuView#updateButtonLabels - * @param {Boolean} [labelRemovalNeeded = false] Flag indicating that we need to remove label component - * and reposition labels - * @param {Boolean} [playTransition = true] Flag determining if close and open transitions will be used, - * if false updates the text without any transitions. - * @param {number} [duration = 200] Duration of the transition. - * @protected - */ - - /** - * Calls the close transition on all of the button labels. - * @method jibo.face.views.MenuView#fadeOutButtonLabels - * @param {number} [duration = 100] Duration of the transition. - * @private - */ - - /** - * Manages eye tween aspect of the close to eye transition. - * @method jibo.face.views.MenuView#eyeOpenTransition - * @param {Function} callback - Callback fired when eye completes tween. - * @param {number} duration - Duration of the transition. - * @private - */ \ No newline at end of file diff --git a/docs/rendering/gui/views/PauseOverlay.js b/docs/rendering/gui/views/PauseOverlay.js deleted file mode 100644 index a74f9cc3..00000000 --- a/docs/rendering/gui/views/PauseOverlay.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @interface jibo.face.views.PauseOverlay~PauseOptions - * @description Interface for pause options. - * @prop {number} [alpha] - Alpha value for overlay when opened. Supports values between `0` and `1`. - * @prop {number} [duration] - Duration in milliseconds of tween, if `0` no tween is used. - * @prop {String} [type] - Type of tween applied to alpha transition when opening and closing. - */ - - /** - * Level of opacity for overlay. - * Supports values between `0` and `1`. - * @name jibo.face.views.PauseOverlay#alpha - * @default .7 - * @type {number} - */ - - /** - * Duration in milliseconds of tween. - * If `0` no tween is used. - * @name jibo.face.views.PauseOverlay#duration - * @default 550 - * @type {number} - */ - - /** - * Type of tween applied to alpha transition when opening and closing. - * @name jibo.face.views.PauseOverlay#type - * @default 'sineOut' - * @type {string} - */ - - /** - * Graphic for display overlay. - * @name jibo.face.views.PauseOverlay#_overlay - * @type {PIXI.Graphics} - * @private - */ - - /** - * Flag set to `true` after open is called, reset to `false` on close. - * @name jibo.face.views.PauseOverlay#_isOpen - * @type {boolean} - * @private - */ - - /** - * Apply values from options. - * @method jibo.face.views.PauseOverlay#applyOptions - * @example - * { - * "alpha": ".7", - * "duration": 550, - * "type": "sineOut", - * } - * @param {jibo.face.views.PauseOverlay~PauseOptions} options - Options for pause. - * @param {number} [options.alpha] - Level of opacity for overlay. - * @param {number} [options.duration] - Duration in milliseconds of tween. - * @param {String} [options.type] - Type of tween applied to alpha transition. - */ - - /** - * Apply default values. - * @method jibo.face.views.PauseOverlay#applyDefaults - */ - - /** - * Open the overlay. - * Creates PIXI.Graphic and adds to stage. - * @method jibo.face.views.PauseOverlay#open - * @param {PIXI.Container} container - Container for the overlay, should be View's stage. - */ - - /** - * Close the overlay, once closed remove overlay from display. - * @method jibo.face.views.PauseOverlay#close - */ - - /** - * Destroy - * @method jibo.face.views.PauseOverlay#destroy - */ \ No newline at end of file diff --git a/docs/rendering/gui/views/TextView.js b/docs/rendering/gui/views/TextView.js deleted file mode 100644 index adeb4575..00000000 --- a/docs/rendering/gui/views/TextView.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * @description Interface - Configuration values for creating a TextView. - * @interface jibo.face.views.TextView~TextViewOptions - * @extends jibo.face.views.View~ViewOptions - * @prop {string} [text] - Text to show. - * @prop {PIXI.TextStyle} [style] - Style of the text. - * @prop {jibo.face.views.Element~DimensionData} [margins] - Margins between edge of screen and text bounds. - */ - -/** - * View designed to display standard text. - * - * Takes a simplified JSON configuration. - * @example - * { - * "viewConfig": { - * "type": "TextView"," - * "id": "text_view_id", - * "text":"This is a text" - * } - * } - * @class TextView - * @extends jibo.face.views.View - * @memberof jibo.face.views - */ - - /** - * Default value for the text style if one's missing. - * @name jibo.face.views.Label.DEFAULT_STYLE - * @type {PIXI.TextStyle} - * @readOnly - * @private - */ - - /** - * Margin value for X padding on either side of text to edge of screen. - * @name jibo.face.views.TextView.TEXT_MARGIN_X - * @type {number} - * @readOnly - * @private - */ - - /** - * Margin value for Y padding on either side of text to edge of screen. - * @name jibo.face.views.TextView.TEXT_MARGIN_Y - * @type {number} - * @readOnly - * @private - */ - - /** - * Object describing the font specification used by `PIXI.Text`. - * Will be applied to the text on - * ``` - * fontSize: 100, - * fontFamily: 'Proxima Nova Soft', - * fill: '#FFFFFF', - * fontStyle: 'bold' - * wordWrap: true, - * wordWrapWidth: 100, - * align: 'center' - * ``` - * @name jibo.face.views.Label#style - * @type {PIXI.TextStyle} - */ - - /** - * Margins between text and edge of screen. - * If not specified will use the defaults. - * @name jibo.face.views.Label#margins - * @type {DimensionData} - */ - - /** - * Text of TextView label. - * @name jibo.face.views.TextView#text - * @public - * @readOnly - * @type {String} - */ - - /** - * Text of TextView label. - * @name jibo.face.views.TextView#text - * @public - * @type {String} - */ - - /** - * Label of the TextView. - * @name jibo.face.views.TextView#label - * @public - * @readOnly - * @type {jibo.face.views.Label} - */ - - /** - * Construct View - */ \ No newline at end of file diff --git a/docs/rendering/gui/views/View.js b/docs/rendering/gui/views/View.js deleted file mode 100644 index d22a9c72..00000000 --- a/docs/rendering/gui/views/View.js +++ /dev/null @@ -1,428 +0,0 @@ -/** - * @interface jibo.face.views.View~ViewOptions - * @extends jibo.face.views.Component~ComponentOptions - * @description Interface - Configuration values for creating a View. - * @prop {String} [category] - Category of view. - * @prop {String} [soundSet] - Set of sounds for view sfx. - * @prop {Boolean} [ignoreSwipeDown] - Flag to block or enable swipe down gesture. - * @prop {Boolean} [transitionStageOnly] - If 'true' view transition apply to View's stage only, - * if 'false' possible for transition to be acted out by individual Components where applicable. - * @prop {Boolean | jibo.face.views.PauseOverlay#PauseOptions} [pause] - Determine if view will pause the view it is opening over. - * If 'true' will use default pause options, pass PauseOptions for custom values. - * @prop {Boolean} [pauseParent] - Deprecated. - * @prop {jibo.face.views.PauseOverlay#PauseOptions} [pauseOptions] - Deprecated. - * @prop {Boolean} [border] - Flag to turn screen border visibility true or false. - */ - -/** - * Handler for custom View transitions. - * @callback jibo.face.views.View~TransitionHandler - * @param {Function} done - Must call when transition is complete. - * @param {jibo.face.views.View} [view] View to apply the transition to. - */ - -/** - * @typedef jibo.face.views~STATE - * @description Static class with static members that describe possible states of the views. - * @prop INITIALIZED Intialize the data. - * @prop DATA_LOADED State set and emitted once initial data has been loaded and configurations set. - * @prop ASSETS_LOADED State set and emitted once initial assets have been loaded. - * @prop LOADED State set and emitted once loading is complete, at point of dispatch View should be ready for use. - * @prop OPENED State set and emitted once View has completed its opening transition. - * @prop CLOSED State set and emitted once View has completed its closing transition. - * @prop DESTROYED State set and emitted once View has been destroyed. - * @prop LOAD_ERROR Event emitted if there is a load error. - */ - -/** - * @typedef jibo.face.views~CATEGORY - * @description Static class with static members that describe possible categories of the views. - * @prop GUI Category for views that contain an interactive user interface. - * @prop DISPLAY Category for views that are primarily used for display and not for interfacing. - * @prop EYE Category for EyeView type views. - */ - -/** - * Base class for groupings of GUI elements on screen at once. - * Views are the unit which {@link jibo.face.views} acts upon. - * - * @class View - * @extends jibo.face.views.ComponentGroup - * @memberof jibo.face.views - */ - - /** - * The default class identifier. - * Generally used to register the class. - * @name jibo.face.views.View.DEFAULT_TYPE - * @type {String} - * @readOnly - */ - - /** - * Event dispatched when the View is going to close because of a 'back' command. - * Currently closing a View and going back to the previous view is triggered by a swipe down. - * @type {string} - * @name jibo.face.views.View#BACK - * @readOnly - */ - - /** - * Option for setting custom transitions. - * Use with `View.defineTransitions` for transitions to be used when opening from or closing to an empty screen. - * @type {string} - * @name jibo.face.views.View.EMPTY - * @readOnly - */ - - /** - * Option for setting custom transitions. - * Use with `View.defineTransitions` for transitions to be used when opening over a paused view or closing while being paused. - * @type {string} - * @name jibo.face.views.View.PAUSED - * @readOnly - */ - - /** - * Reference to the paused View below this View. - * @name jibo.face.views.View#pausedParent - * @type {jibo.face.views.View} - */ - - /** - * Overlay used when view is paused. - * @name jibo.face.views.View#pauseOverlay - * @type {jibo.face.views.PauseOverlay} - */ - - /** - * Flag, if `true` the closure of the View on swipe down behavior will be setup. - * @name jibo.face.views.View#closeOnSwipeDown - * @type {boolean} - * @default true - */ - - /** - * Flag that when `true` will pause, instead of closing and destroying, the current View when this View opens above it. - * Once this View finishes opening the previous View, which is now paused, is referenced here {@link jibo.face.views.View#pausedParent} - * @name jibo.face.views.View#willPauseParent - * @type {boolean} - * @default false - */ - - /** - * Options applied to parent view when pausing. - * @name jibo.face.views.View#pauseOptions - * @type {jibo.face.views.PauseOverlay#PauseOptions} - */ - - /** - * Set of sounds to use when triggering sfx connected to menu button clicks, view open transition, and view close transition. - * - * The global sound sets include: - * - `main` - Used for the eye view and the main menu. - * - `skill` - Default sound set for standard views. - * - `action` - Use for confirmation view overlays. - * - * The soundSet value is combined with the sound type to determine which sound to play. - * For example clicking a menu button will trigger a 'button' sfx, this is combined with the soundSet value to determine the sound id. - * So a clicking a button in a view with a soundSet of `skill` will play the sound with id `skill_button`. - * - * Example for Setting a view's soundSet value via the config: - * ``` - * "viewConfig": { - * "type": "MenuView", - * "id": "confirmation_view", - * "soundSet": "action", - * ``` - * @name jibo.face.views.View#soundSet - * @type {string} - * @default `skill` - */ - - /** - * Flag to transition using only stage. - * If `true` prevents components from handling open and close individually. - * @name jibo.face.views.View#transitionStageOnly - * @type {boolean} - * @default false - */ - - /** - * Flag, if `true` the screen border is made visible just before opening view. - * Must set before view opens to take effect. - * @name jibo.face.views.View#borderNeeded - * @type {boolean} - * @default true - */ - - /** - * Specify a custom transition for either close or open, whichever is happening next. - * Can be set to a Function, in which case that Function will be used instead of the `open` or `close` methods, - * or set to a string, in which case that string will become the transition type checked by the `open` or `close` methods. - * @name jibo.face.views.View#transitionHandler - * @type {jibo.face.views.View~TransitionHandler | string} - */ - - /** - * View category, helps determine behavior and function expected from view. - * Category is not directly bound to `View.type`. - * @name jibo.face.views.View#_category - * @type {string} - */ - - /** - * Reference to ViewState the View was created from. - * A View will may not always have a ViewState defined, - * reference to ViewState is made within applyState. - * @name jibo.face.views.View#_viewState - * @type {jibo.face.views.ViewState} - * @private - */ - - /** - * Reference to loadAsset created by loader, kept for cleanup. - * @name jibo.face.views.View#_assetLoad - * @type {jibo.loader.AssetLoad} - * @private - */ - - /** - * Tokens of assets loaded and cached by this loader. - * @name jibo.face.views.View#_loadedAssets - * @type {jibo.loader.AssetToken[]} - * @private - */ - - /** - * Queue for assets that require loading. - * When _assetLoad completes a single load task queued asset are added to _assetLoad's load list. - * @name jibo.face.views.View#_assetLoadQueue - * @type {jibo.face.views~AssetDescriptor[]} - * @private - */ - - /** - * List of pending asset load requests. - * When _assetLoad completes asset load requests are checked, - * if requested assets have been loaded executes callback. - * @name jibo.face.views.View#_assetLoadRequests - * @type {any[]} - * @private - */ - - /** - * Object used to store custom transitions, uses a specific structure to manage nested choices. - * @type {any} - * @private - */ - - /** - * Get top most PIXI.Container of this View. - * @name jibo.face.views.View#stage - * @type {PIXI.Container} - * @readOnly - */ - - /** - * The assets loaded by the View, these are returned from the loader as an Object using the asset id as keys. - * Assets available after the view has completed its load methods. - * @name jibo.face.views.View#assets - * @type {Object} - * @readOnly - */ - - /** - * Type is equal to Class name. - * @name jibo.face.views.View#type - * @type {string} - * @readOnly - */ - - /** - * The current state of view. - * Refer to documentation for valid states e.g. LOADED, OPENED, CLOSED - * @name jibo.face.views.View#state - * @return {String} Refer to the View static constants or ViewManager for valid values. - */ - - /** - * View category, helps determine behavior and function expected from view. - * Category is not directly bound to `View.type`. - * @name jibo.face.views.View#category - * @type {string} - * @readOnly - */ - - /** - * Construct View - */ - - /** - * Method to acquire the source of data needed to setup the View. - * Once the data source is available calls internal methods to assign the data to the class appropriately. - * By default this method handles the loading of a configuration file, but could also be extended to get data from the KB, servers, or web services. - * @method jibo.face.views.View#loadData - * @param {Boolean} [loadAssetsOnComplete = true] - If `true` will call loadAssets() once data finishes loading. - * @protected - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Loads view configuration if a configPath has been defined, but the viewConfig is undefined. - * @method jibo.face.views.View#loadConfig - * @returns {Promise} Promise with View it was called from. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Apply data once all required data has finished loading. - * Custom View classes can overrdie this class to manually create custom Components. - * @method jibo.face.views.View#applyData - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * All data and assets have finished loading, create the display and update the status. - * For classes that override View this is where a lot of the setup logic will go. - * @method jibo.face.views.View#loaded - * @protected - */ - - /** - * Called when loaded process is completed and View is ready to become current. - * Calls ready on all child Components, which allows opportunity to do additional setup - * that may depend on other components or parent Components. - * @method jibo.face.views.View#ready - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Pause the View and its Components. - * Pausing locks/unlocks the input and applies/removes a black overly to the stage. - * @method jibo.face.views.View#pause - * @param {Boolean} [flag = true] - Flag for pausing or un-pausing this View. - * @param {jibo.face.views.PauseOverlay#PauseOptions} [pauseOptions] - Options defining how the pause executes. - */ - - /** - * FOR OVERRIDE ONLY. DO NOT CALL. - * - * Destroy the view, calls destroy on all child components first. - * @method jibo.face.views.View#destroy - */ - - /** - * Load given asset descriptions. - * Callback executes once requested assets are available within the `View.assets`. - * @method jibo.face.views.View#addAssets - * @param {jibo.face.views~AssetDescriptor|jibo.face.views~AssetDescriptor[]|Object} assets - * The assets to load. - * @param {Function} [callback] - Called when requested asset are available in `View.assets`. - * If there is an error while loading callback is called with err - */ - - /** - * Adds custom `open` and `close` transitions. - * Custom transitions to use when opening or closing from specific view types - * or certain states, such as an empty screen (`View.EMPTY`) or a paused view (`View.PAUSED`). - * @method jibo.face.views.View#addTransition - * @param {string} viewType - Type of view or state. Accepted states include `View.EMPTY` and `View.PAUSED`. - * @param {boolean} openFrom - If `true`, transitions will be used when opening from the given viewType. If `false`, when closing from that type. - * @param {jibo.face.views.View~TransitionHandler | string} [myTransition] - Handler for executing transition or transition type on owning view. - * A Function will be used instead of the `open` or `close` methods, and a string will be the transition type used by the View's `open` or `close` methods. - * @param {jibo.face.views.View~TransitionHandler | string} [theirTransition] - Handler or transition type used by matching view for their transition. - * If the owning view is closing then this will be set as the opening view's transition. - * @param {jibo.face.views~STACK_DIRECTION} [stackDirection] - Specifies the stack direction associated with the transition, - * if undefined does not take stack direction into account - * STACK_DIRECTION.ADD indicates view is being added to stack. - * STACK_DIRECTION.REMOVE indicates view is being removed. - * STACK_DIRECTION.SWAP indicates the views are being swapped and there is no change to the stack size. - */ - - /** - * Method to bubble actions up from Components. - * Actions pass through this method up to the ViewManager. - * By passing actions through the View the View can augment the action, supply additional parameters, etc. - * @method jibo.face.views.View#actionHandler - * @param {jibo.face.views.ActionData} action The action called. Contains string for type of action and data Object - * with any pertinent data dependent on action type. - * @param {jibo.face.views.Component} fromComponent The component that triggered the action (if applicable). - */ - - /** - * Method to pass actions downward to Components. - * Passing actions through parent chain allows parents to interrupt and augment actions. - * @method jibo.face.views.View#actionEnactor - * @param {jibo.face.ActionData} action Contains string for type of action and data Object - * with any pertinent data dependent on action type. - * @return {boolean} Returns true if action is acted on by this View or any of its children. - */ - - /** - * Set up swipe down to close current view, if no other swipe actions were defined. - * This is a standard UX specification for Menus, but may want to be excluded in certain use cases. - * @method jibo.face.views.View#setupSwipeDownToClose - * @protected - */ - - /** - * Apply default values for use by loader. - * @method jibo.face.views.View#setAssetDescriptorDefaults - * @param {jibo.face.views~AssetDescriptor} asset Description of asset. - * @return {jibo.face.views~AssetDescriptor} Description of asset. - * @private - */ - - /** - * Adds asset to load queue if not already loaded or loading. - * @method jibo.face.views.View#addAssetToQueue - * @param {jibo.face.views~AssetDescriptor} asset - Asset to add to queue. - * @returns {boolean} `true` if asset was added to queue. - * @private - */ - - /** - * Remove asset from manifest and `View.assets` and unload from cache. - * NOTE: Use carefully; removing shared assets can have adverse effects. - * @method jibo.face.views.View#removeAsset - * @param {jibo.face.views~AssetDescriptor} asset - Asset to remove. - * @private - */ - - /** - * Remove asset from manifest and `View.assets` and unload from cache. - * NOTE: Use carefully; removing shared assets can have adverse effects. - * @method jibo.face.views.View#removeFromManifest - * @param {jibo.face.views~AssetDescriptor} asset - Asset descriptordescribing asset to remove - * @private - */ - - /** - * Check if given assets exist in `View.assets`. - * @method jibo.face.views.View#checkForAssets - * @param {jibo.face.views~AssetDescriptor|jibo.face.views~AssetDescriptor[]|Object} assets - * The assets to check. - * @returns {boolean} `true` if all assets were found in `View.assets`. - * @private - */ - - /** - * Remove assets from manifest and unload tokens if they do not exist in `View.assets`. - * @method jibo.face.views.View#removeMissingAssets - * @param {jibo.face.views~AssetDescriptor|jibo.face.views~AssetDescriptor[]|Object} assets - * The assets to check. - * @private - */ - - /** - * Play sound, considering the View's sound set. - * @method jibo.face.views.View#playSound - * @param {string} soundType - Kind of sound to use ('button', 'enter', 'exit'). - * Combined with with View's soundSet to create sound id, for example the skill button sound id is 'skill_button'. - * @private - */ \ No newline at end of file diff --git a/docs/rendering/input/GestureManager.js b/docs/rendering/input/GestureManager.js deleted file mode 100644 index ab79b51a..00000000 --- a/docs/rendering/input/GestureManager.js +++ /dev/null @@ -1,194 +0,0 @@ -/** - * @description - * A wrapper around HammerJS to register gesture input events with the PIXI DOM Element. - * @class GestureManager - * @memberof jibo.face - */ - - /** - * Pan gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PAN - * @readOnly - */ - - /** - * Panstart gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PANSTART - * @readOnly - */ - - /** - * Panmove gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PANMOVE - * @readOnly - */ - - /** - * Panend gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PANEND - * @readOnly - */ - - /** - * Pancancel gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PANCANCEL - * @readOnly - */ - - /** - * Panleft gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PANLEFT - * @readOnly - */ - - /** - * Panright gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PANRIGHT - * @readOnly - */ - - /** - * Panup gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PANUP - * @readOnly - */ - - /** - * Pandown gesture event string. - * @type {string} - * @name jibo.face.GestureManager.PANDOWN - * @readOnly - */ - - /** - * Swipe gesture event string. - * @type {string} - * @name jibo.face.GestureManager.SWIPE - * @readOnly - */ - - /** - * Swipeleft gesture event string. - * @type {string} - * @name jibo.face.GestureManager.SWIPELEFT - * @readOnly - */ - - /** - * Swiperight gesture event string. - * @type {string} - * @name jibo.face.GestureManager.SWIPERIGHT - * @readOnly - */ - - /** - * Swipeup gesture event string. - * @type {string} - * @name jibo.face.GestureManager.SWIPEUP - * @readOnly - */ - - /** - * Swipedown gesture event string. - * @type {string} - * @name jibo.face.GestureManager.SWIPEDOWN - * @readOnly - */ - - /** - * Tap gesture event string. - * @type {string} - * @name jibo.face.GestureManager.TAP - * @readOnly - */ - - /** - * Pixi gesture. - * Instance of HammerJS.Manager - * @type {*} - * @name jibo.face.GestureManager#_hammerManager - * @private - */ - - /** - * Create the singleton instance of the GestureManager. - * @method jibo.face.GestureManager.init - * @return {jibo.face.GestureManager} - */ - - /** - * Instantiate a HammerJS Manager object with the PIXI renderer. - * This should be called before a call to addStageGesture. - * @method jibo.face.GestureManager#init - * @param {PIXI.WebGLRenderer} renderer - The pixi renderer object. - */ - - /** - * Get a reference to HammerJS, - * @method jibo.face.GestureManager#hammer - * @return {Object} The HammerJS object. See [hammer's documentation](http://hammerjs.github.io/getting-started/) - * for information on what objects are accessible through this module. - * @readOnly - */ - - /** - * Stop all recognizers. - * @method jibo.face.GestureManager#stop - */ - - /** - * Add a gesture recognized by the PIXI renderer stage DOM element. - * See [hammer's documentation](http://hammerjs.github.io/getting-started/) for specifics on gesture options and hammer api objects. - * @method jibo.face.GestureManager#addStageGesture - * @param {Object} hammerType - This can be retrieved from the jibo.face.gestures.hammer reference. This is the hammer object type to be instantiated to create the gesture. - * eg. ```jibo.face.gestures.hammer.Pan``` - * @param {Object} gestureOptions - This varies between each gesture. This must include an event field (which is of type string, some of which are specified as constants in this class). - * eg. ```event { GestureManager.SWIPE }``` - * @param {Function(Object)} gestureCallback - Upon successful gesture recognition against the supplied displayobject, this callback will be triggered. - * It will have the event parameter supplied from the HammerJS event callback. - * @return {Object | null} The hammer object which was successfully created, or null if it was not successfully created. - * An example in calling this would be: - * ``` - * GestureManager.addStageGesture(pixiDisplayObject, - * jibo.face.gestures.hammer.Swipe, - * { event: blackboard.GestureManager.SWIPELEFT}, - * function(gestureEvent){ - * // Got event! - * }); - * ``` - */ - - /** - * Removes a gesture for Hammer Manager. - * @method jibo.face.GestureManager#removeStateGesture - * @param {any} gestureRecognizer - The gesture to remove. - */ - - /** - * Allows a gesture event to be 'spoofed', useful for testing. - * @method jibo.face.GestureManager#spoofGesture - * @param {String} [gestureEvent = tap] - Type of gesture event to spoof. Defaults to event for a tap. - * @param {Number} [xPos = 0] - The x position of input. - * @param {Number} [yPos = 0] - The y position of input. - */ - - /** - * Allows a gesture event to be 'spoofed' with options provided. - * @method jibo.face.GestureManager#spoofGestureWithOptions - * @param {String} [gestureEvent = tap] - Type of gesture event to spoof. Defaults to event for a tap. - * @param {any} options - Options that HammerJs uses to fire correct event. - */ - - /** - * Spoofs left/right pan gesture on the screen that will trigger list page swiping - * @method jibo.face.GestureManager#spoofFullPanGesture - * @param {Boolean} [panLeft = true] - Type of pan event to spoof. Defaults to left pan. - */ \ No newline at end of file diff --git a/docs/rendering/tasks/ColorAlphaTask.js b/docs/rendering/tasks/ColorAlphaTask.js deleted file mode 100644 index 47ad6ec1..00000000 --- a/docs/rendering/tasks/ColorAlphaTask.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Internal class for loading an image that has been split into an alpha channel image and a - * RGB only color image. - * @class ColorAlphaTask - * @extends jibo.loader.Task - * @memberof jibo.loader - * @private - * @param {Object} asset The data properties. - * @param {String} asset.src The source path to the color image. - * @param {String} asset.alpha The source path to the alpha image. - * @param {Boolean} [asset.cache=false] `true` to cache the result. - * @param {String} [asset.id] ID of asset. - * @param {Function} [asset.complete] The event to call when done. - * @param {Object} [asset.sizes=null] Define if certain sizes are not supported. - */ - - /** - * Tests if task should be run. - * @method jibo.loader.ColorAlphaTask.test - * @static - * @param {Object} asset The asset to check. - * @return {Boolean} `true` if the asset is compatible with this task. - */ - - /** - * Pulled from EaselJS's SpriteSheetUtils. - * Merges the rgb channels of one image with the alpha channel of another. This can be used to - * combine a compressed JPEG image containing color data with a PNG32 monochromatic image - * containing alpha data. With certain types of images (those with detail that lend itself to - * JPEG compression) this can provide significant file size savings versus a single RGBA PNG32. - * This method is very fast (generally on the order of 1-2 ms to run). - * @method jibo.loader.ColorAlphaTask.mergeAlpha - * @static - * @param {Image} rbgImage The image (or canvas) containing the RGB channels to use. - * @param {Image} alphaImage The image (or canvas) containing the alpha channel to use. - * @param {Canvas} [canvas] If specified, this canvas will be used and returned. If not, a new - * canvas will be created. - * @return {Canvas} A canvas with the combined image data. This can be used as a source for a - * texture. - */ - - /** - * The atlas color source path. - * @type {String} - * @name jibo.loader.ColorAlphaTask#src - */ - - /** - * The atlas alpha source path. - * @type {String} - * @name jibo.loader.ColorAlphaTask#alpha - */ - - /** - * Starts the task. - * @method jibo.loader.ColorAlphaTask#start - * @param {jibo.loader.Task~completeCallback} callback Callback when finished. - */ \ No newline at end of file diff --git a/docs/rendering/tasks/CompressedImageTask.js b/docs/rendering/tasks/CompressedImageTask.js deleted file mode 100644 index bbf1e18d..00000000 --- a/docs/rendering/tasks/CompressedImageTask.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Loads an image and sets it up for Pixi to use as a PIXI.Texture. - * @class CompressedImageTask - * @memberof jibo.loader - * @private - * @param {String} asset.src The texture image path. Must end in .dds or .crn - * @param {Boolean} [asset.remote=false] `true` to force a remote download over XMLHttpRequest. - * @param {Number} [asset.timeout=0] Number of milliseconds for remote load to timeout. - * @param {Boolean|String} [asset.cache=false] `true` to cache the result. String to add to a specific cache. - * @param {String} [asset.id] The ID of the task. - * @param {Function} [asset.complete] The callback to call when the load is completed. - */ - - /** - * Tests if an asset should be loaded. - * @method jibo.loader.CompressedImageTask.test - * @static - * @param {Object} asset The asset to test. - * @return {Boolean} `true` if the asset qualifies for this task. - */ - - /** - * The atlas source path. - * @name jibo.loader.CompressedImageTask#src - * @type {String} - */ - - /** - * Starts the load. - * @method jibo.loader.CompressedImageTask#start - * @param {jibo.loader.Task~completeCallback} callback Callback to call when the load is done - */ \ No newline at end of file diff --git a/docs/rendering/tasks/KeysDataTask.js b/docs/rendering/tasks/KeysDataTask.js deleted file mode 100644 index 48b3fc70..00000000 --- a/docs/rendering/tasks/KeysDataTask.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Loads an animation timeline with PixiAnimate. - * @class AnimDataTask - * @memberof jibo.loader - * @private - * @param priority {number} - * @param src {string} - * @param data {any} - * @param root {string} - */ \ No newline at end of file diff --git a/docs/rendering/tasks/KeysTask.js b/docs/rendering/tasks/KeysTask.js deleted file mode 100644 index 37a370c4..00000000 --- a/docs/rendering/tasks/KeysTask.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Loads an animation timeline with PixiAnimate. - * @class KeysTask - * @memberof jibo.loader - * @private - * @param {String} asset.type Must be set to "keys". - * @param {String} [asset.src] The keys file path. - * @param {String} [asset.data] The keys file object. - * @param {String} [assets.root] The root directory of stored keys file. - * @param {Boolean} [asset.cache=false] `true` to cache the result. - * @param {String} [asset.id] The ID of the task. - * @param {Function} [asset.complete] The callback to call when the load is completed. - */ - - /** - * Tests if an asset should be loaded. - * @method jibo.loader.KeysTask.test - * @static - * @param {Object} asset The asset to test. - * @return {Boolean} `true` if the asset qualifies for this task. - */ - - /** - * The timeline source path. - * @name jibo.loader.KeysTask#src - * @type {String} - */ - - /** - * The timeline object. - * @name jibo.loader.KeysTask#data - * @type {String} - */ - - /** - * The root for the project. - * @name jibo.loader.KeysTask#root - * @type {String} - */ - - /** - * Load texture immediate to the GPU. - * @name jibo.loader.KeysTask#upload - * @type {Boolean} - */ - - /** - * Starts the load. - * @method jibo.loader.KeysTask#start - * @param {jibo.loader.Task~completeCallback} callback Callback to call when the load is done - */ \ No newline at end of file diff --git a/docs/rendering/tasks/ShapesTask.js b/docs/rendering/tasks/ShapesTask.js deleted file mode 100644 index 4d0cc915..00000000 --- a/docs/rendering/tasks/ShapesTask.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Loads a shapes manifest file and sets it up for PixiAnimate. - * @class ShapesTask - * @memberof jibo.loader - * @private - * @param {String} asset.type Must be "shapes" to signify that this asset should be parsed - * specifically for PixiAnimate. - * @param {String} [asset.src] The texture image path. - * @param {Boolean} [asset.cache=false] `true` to cache the result. - * @param {String} [asset.id] The ID of the task. - * @param {Function} [asset.complete] The callback to call when the load is completed. - */ - - /** - * Tests if an asset should be loaded. - * @method jibo.loader.ShapesTask.test - * @static - * @param {Object} asset The asset to test. - * @return {Boolean} `true` if the asset qualifies for this task. - */ - - /** - * The atlas source path. - * @name jibo.loader.ShapesTask#src - * @type {String} - */ - - /** - * Starts the load. - * @method jibo.loader.ShapesTask#start - * @param {jibo.loader.Task~completeCallback} callback Callback to call when the load is done. - */ \ No newline at end of file diff --git a/docs/rendering/tasks/SpritesheetTask.js b/docs/rendering/tasks/SpritesheetTask.js deleted file mode 100644 index e1564f8e..00000000 --- a/docs/rendering/tasks/SpritesheetTask.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Loads an JSON atlas and sets it up for Pixi to use as a collectino of PIXI.Texture objects. - * @class SpritesheetTask - * @memberof jibo.loader - * @private - * @param {String} asset.type Must be "spritesheet" to signify that this asset should be parsed - * specifically for Pixi.js. - * @param {String} [asset.src] The JSON atlas path. - * @param {Boolean} [asset.upload=false] `true` to upload the GPU immediate after loading. - * @param {Boolean} [asset.cache=false] `true` to cache the result. - * @param {Number} [asset.timeout=0] Number of milliseconds for remote timeout. - * @param {Boolean} [asset.remote=false] `true` for force remote load. - * @param {String} [asset.id] The ID of the task. - * @param {Function} [asset.complete] The callback to call when the load is completed. - */ - - /** - * Tests if an asset should be loaded. - * @method jibo.loader.SpritesheetTask.test - * @static - * @param {Object} asset The asset to test. - * @return {Boolean} `true` if the asset qualifies for this task. - */ - - /** - * The atlas source path. - * @name jibo.loader.SpritesheetTask#src - * @type {String} - */ - - /** - * `true` if the texture should be uploaded to the GPU immediately. - * @name jibo.loader.SpritesheetTask#upload - * @type {Boolean} - */ - - /** - * Starts the load. - * @method jibo.loader.SpritesheetTask#start - * @param {jibo.loader.Task~completeCallback} callback Callback to call when the load is done - */ \ No newline at end of file diff --git a/docs/rendering/tasks/TextureTask.js b/docs/rendering/tasks/TextureTask.js deleted file mode 100644 index 0c8849e3..00000000 --- a/docs/rendering/tasks/TextureTask.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Loads an image and sets it up for Pixi to use as a PIXI.Texture. - * @class TextureTask - * @memberof jibo.loader - * @private - * @param {String} asset.type Must be "texture" to signify that this asset should be parsed - * specifically for Pixi.js. - * @param {String} [asset.src] The texture image path. - * @param {Boolean} [asset.upload=false] `true` to upload the GPU immediate after loading. - * @param {Boolean} [asset.remote=false] `true` to force a remote download over XMLHttpRequest. - * @param {Number} [asset.timeout=0] Number of milliseconds for remote load to timeout. - * @param {Boolean|String} [asset.cache=false] `true` to cache the result. String to add to a specific cache. - * @param {String} [asset.alpha] The alpha image path, if not using image property. - * @param {String} [asset.id] The ID of the task. - * @param {Function} [asset.complete] The callback to call when the load is completed. - */ - - /** - * Tests if an asset should be loaded. - * @method jibo.loader.TextureTask.test - * @static - * @param {Object} asset The asset to test. - * @return {Boolean} `true` if the asset qualifies for this task. - */ - - /** - * The atlas source path. - * @name jibo.loader.TextureTask#src - * @type {String} - */ - - /** - * The atlas alpha source path. - * @name jibo.loader.TextureTask#alpha - * @type {String} - */ - - /** - * `true` if the texture should be uploaded to the GPU immediately. - * @name jibo.loader.TextureTask#upload - * @type {Boolean} - */ - - /** - * Starts the load. - * @method jibo.loader.TextureTask#start - * @param {jibo.loader.Task~completeCallback} callback Callback to call when the load is done - */ \ No newline at end of file diff --git a/docs/rendering/tasks/TimelineTask.js b/docs/rendering/tasks/TimelineTask.js deleted file mode 100644 index 78da3899..00000000 --- a/docs/rendering/tasks/TimelineTask.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Loads an animation timeline with PixiAnimate. - * @class TimelineTask - * @memberof jibo.loader - * @private - * @param {String} asset.type Must be "texture" to signify that this asset should be parsed - * specifically for Pixi.js. - * @param {String} [asset.src] The texture image path. - * @param {Boolean} [asset.upload=false] Upload the GPU immediate after loading. - * @param {String} [asset.alpha] The alpha image path, if not using image property. - * @param {Boolean} [asset.cache=false] `true` to cache the result. - * @param {String} [asset.id] The ID of the task. - * @param {Function} [asset.complete] The callback to call when the load is completed. - */ - - /** - * Tests if an asset should be loaded. - * @method jibo.loader.TimelineTask.test - * @static - * @param {Object} asset The asset to test. - * @return {Boolean} `true` if the asset qualifies for this task. - */ - - /** - * The timeline source path. - * @name jibo.loader.TimelineTask#src - * @type {String} - */ - - /** - * Texture are uploaded to the GPU immediately. - * @name jibo.loader.TimelineTask#upload - * @type {Boolean} - */ - - /** - * Cause timeline to add an instance on load. - * @name jibo.loader.TimelineTask#instance - * @type {Boolean} - */ - - /** - * Starts the load. - * @method jibo.loader.TimelineTask#start - * @param {jibo.loader.Task~completeCallback} callback Callback to call when the load is done - */ \ No newline at end of file diff --git a/docs/rendering/tween/Tween.js b/docs/rendering/tween/Tween.js deleted file mode 100644 index 435fa9ad..00000000 --- a/docs/rendering/tween/Tween.js +++ /dev/null @@ -1,212 +0,0 @@ -/** - * Abstract Tween base object. - * Uses `ease npm` for all ease functions. - * For ease types, refer to [ease APIs]{@link https://www.npmjs.com/package/eases}. - * @class Tween - * @memberof jibo.face - */ - - /** - * `true` if the tween is to be paused. - * @name jibo.face.Tween#paused - * @type {Boolean} - */ - - /** - * The local lerp value for just this tween. - * @name jibo.face.Tween#_time - * @type {Number} - * @protected - */ - - /** - * Duration in milliseconds. - * @name jibo.face.Tween#_duration - * @type {Number} - * @protected - */ - - /** - * Finished callback - * @name jibo.face.Tween#_complete - * @type {Function} - * @private - */ - - /** - * Flag used to block tween from being manually stopped. - * @name jibo.face.Tween#_inProcess - * @type {Boolean} - * @private - */ - - /** - * the number of milliseconds to delay this tween from playing from the time it was added to the TweenMgr - * @name jibo.face.Tween#_delay - * @type {Number} - * @private - */ - - /** - * Elapsed time in milliseconds - * @name jibo.face.Tween#_elapsed - * @type {Number} - * @private - */ - - /** - * Starting value - * @name jibo.face.Tween#_start - * @type {Object} - * @private - */ - - /** - * Ending value - * @name jibo.face.Tween#_end - * @type {Object} - * @private - */ - - /** - * Ease callback. - * @name jibo.face.Tween#_ease - * @type {Function} - * @private - */ - - /** - * Target for tweening. - * @name jibo.face.Tween#_target - * @type {Object} - * @private - */ - - /** - * Initial the tween. - * @method jibo.face.Tween#init - * @param {*} [target] The thing to tween. - * @param {Object} options Options for tweening. - * @param {Object} [options.to] The values to tween the object to. - * @param {Object} [options.from] The initial values to set the object to. - * @param {String} [options.ease='linear'] The ease function to use. - * @param {int} [options.delay=0] The delay to start. - * @param {int} [options.duration=500] Length of tween, in millseconds. - * @param {Function} [complete] Callback function, if any. - */ - - /** - * Update the tween value. - * @method jibo.face.Tween#reset - * @param {Number} v0 start number - * @param {Number} v1 end number - * @param {Number} t Time - * @private - */ - - /** - * The delay of start of tween in milliseconds. - * @name jibo.face.Tween#delay - * @type {Number} - */ - - /** - * The duration of this tween. - * @name jibo.face.Tween#duration - * @type {Number} - * @readOnly - */ - - /** - * The current time from 0 to 1. - * @name jibo.face.Tween#time - * @type {Number} - * @readOnly - */ - - /** - * The target to tween. - * @name jibo.face.Tween#target - * @type {any} - * @readOnly - */ - - /** - * Flag indicating if tween is in a process that should not be manually stopped. - * @name jibo.face.Tween#inProcess - * @type {Boolean} - * @readOnly - */ - - /** - * Call the finished callback. - * @method jibo.face.Tween#completed - */ - - /** - * Event when tween is completed. - * @event jibo.face.Tween#complete - * @param {*} target The target of tween. - */ - - /** - * Update the tween value. - * @method jibo.face.Tween#update - * @param {Number} elapsed Milliseconds since the last update. - */ - - /** - * Event when tween value has changed. - * @event jibo.face.Tween#change - * @param {*} value The value or values set. - * @param {*} target The target of tween. - */ - - /** - * Assign a collection of properties. - * @method jibo.face.Tween#assign - * @param {Object} values Map of properties to set - * @private - */ - - /** - * Assign a specific property and value to the target. - * @method jibo.face.Tween#assignValue - * @param {String} prop Property name. - * @param {Number|String} value Value to set. - * @private - */ - - /** - * Update the tween value. - * @method jibo.face.Tween#lerp - * @param {Number} v0 start number - * @param {Number} v1 end number - * @param {Number} t Time - * @private - */ - - /** - * Auto-generate the start key values. - * @method jibo.face.Tween#startDefaults - * @param {Object} to end keys - * @private - * @return {Object} Default start keys - */ - - /** - * Auto-generate the end key values. - * @method jibo.face.Tween#endDefaults - * @param {Object} from start keys - * @private - * @return {Object} Default end keys - */ - - /** - * Check that both objects have the same keys. - * @method jibo.face.Tween#validate - * @private - * @param {Object|Number} obj1 Object 1 to compare - * @param {Object|Number} obj2 Object 2 to compare - * @return {Boolean} `true` if both have the same keys. - */ \ No newline at end of file diff --git a/docs/rendering/tween/TweenManager.js b/docs/rendering/tween/TweenManager.js deleted file mode 100644 index 23c34a8b..00000000 --- a/docs/rendering/tween/TweenManager.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Manage the tweens. - * Uses `ease npm` for all ease functions. - * For ease types, refer to [ease APIs]{@link https://www.npmjs.com/package/eases}. - * @class TweenManager - * @memberof jibo.face - */ - - /** - * Collection of tweens. - * @private - * @name jibo.face.TweenManager._tweens - * @type {Array} - */ - - /** - * Collection of tweens to pool (recycle). - * @private - * @name jibo.face.TweenManager._tweens - * @type {Array} - */ - - /** - * Add a tween to play. - * @method jibo.face.TweenManager.play - * @param {Object} target The object to tween. - * @param {Object} options Options for tweening. - * @param {Object} options.to The values to tween the object to. - * @param {Object} [options.from] The initial values to set the object to. - * @param {String} [options.ease='linear'] The ease function to use. - * @param {int} [options.delay=0] The delay to start. - * @param {int} [options.duration=500] Length of tween, in millseconds. - * @param {Function} [complete] Function callback wehen completed - * @return {jibo.face.Tween} Instance of new tween. - */ - - /** - * Play a set of tweens. - * @method jibo.face.TweenManager.playSet - * @param {Array} targets The list of items to tween. - * @param {Object} options Options for tweening. - * @param {Number} options.to The value to tween to. - * @param {Number} [options.from=0] The initial value to tween. - * @param {String} [options.ease='linear'] The ease function to use. - * @param {int} [options.delay=0] The delay to start. - * @param {int} [options.duration=500] Length of tween, in millseconds. - * @param {Object|Function} [setOptions] Either the set options for complete function - * @param {Number} [setOptions.focus=0] Index to lead with if `setOptions.delay` is set. - * @param {Boolean} [setOptions.focusIsLast=false] `true` if `setOptions.focus` is first in. - * @param {Number} [setOptions.delay=0] Milliseconds delay between items. - * @param {Function} [setOptions.complete] Function callback wehen completed - * @param {Boolean} [setOptions.completeOnFirst=false] If 'true' fires callback after first tween completes, if `false` fires after all tween complete - */ - - /** - * Stop a tween by target or stop all tweens. - * @method jibo.face.TweenManager.stop - * @param {Object} [target] The tween target, if non is specified, all tweens removed. - * @return {Boolean} If the tween was deleted. - */ - - /** - * Stop all tweens whose targets return true against provided method. - * @method jibo.face.TweenManager.stopCheck - * @param {Function} check - Function must take a tween target and return a boolean, - * passing an additional Object to test against is optional. - * @param {any} [against] - Object to test against in check method. - */ - - /** - * Pause or resume all tweens. - * @name jibo.face.TweenManager.paused - * @type {Boolean} - */ - - /** - * Update the tweens. - * @method jibo.face.TweenManager.update - * @param {int} elapsed Time elapsed in Milliseconds since the last update. - */ - - /** - * Recycle the tween. - * @method jibo.face.TweenManager._pool - * @private - * @param {jibo.face.Tween} tween Tween to re-pool - */ - - /** - * Recycle the tween. - * @method jibo.face.TweenManager._create - * @private - * @return {jibo.face.Tween} Tween to use - */ \ No newline at end of file diff --git a/docs/services/SessionManager.js b/docs/services/SessionManager.js deleted file mode 100644 index 076a3fa8..00000000 --- a/docs/services/SessionManager.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @class SessionManager - * @memberof jibo.services - * @private - */ \ No newline at end of file diff --git a/docs/services/events/GlobalEvent.js b/docs/services/events/GlobalEvent.js deleted file mode 100644 index c1da1ad9..00000000 --- a/docs/services/events/GlobalEvent.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @description Interface for an event handler function - * @interface jibo.globalEvents.GlobalEvent~Handler - * @prop [data] Type - */ - -/** - * @class GlobalEvent - * @description Typed global event for globalEvents module (`jibo.globalEvents`). - * In addition to subscribing to events, allows a special meta-subscribe - * event which fires whenever a listener is added and when the last listener - * is removed. - * ``` - * event = new GlobalEvent('name'); - * function handler = (data) => { - * // data is of type asrResult - * // the ASR service has finished listening a cloud result - * // and all subscribed listeners will be removed - * } - * event.on(handler); - * // special meta-events like... - * event.onNoListeners( () => { - * // no listeners are subscribed to this event - * }); - * // When finished with event listening - * event.removeLastListener(); - * ``` - * @memberof jibo.globalEvents - */ - - /** - * Subscribes a handler for once no other listeners are subscribed. - * @method jibo.globalEvents.GlobalEvent#onNoListeners - * @return {jibo.globalEvents.GlobalEvent} This - */ - - /** - * Emit that we have no subscribed listeners to all handlers. - * @method jibo.globalEvents.GlobalEvent#emitNoListeners - */ - - /** - * Subscribes a handler for every time another listener subscribes. - * @method jibo.globalEvents.GlobalEvent#onAddedListener - * @return {jibo.globalEvents.GlobalEvent} This. - */ - - /** - * Emit that we added a subscriber to the typed event. - * @method jibo.globalEvents.GlobalEvent#emitAddListener - */ - - /** - * Subscribes a handler function to this event (same as `addListener`) - * @method jibo.globalEvents.GlobalEvent#on - * @return {jibo.globalEvents.GlobalEvent} This. - */ - - /** - * Subscribes a handler function to only the next event - * @method jibo.globalEvents.GlobalEvent#once - * @return {jibo.globalEvents.GlobalEvent} This. - */ - - /** - * Subscribes a handler function to this event (same as `on`) - * @method jibo.globalEvents.GlobalEvent#addListener - * @return {jibo.globalEvents.GlobalEvent} This. - */ - - /** - * Unsubscribes a handler function from this event - * @method jibo.globalEvents.GlobalEvent#removeListener - * @param {jibo.globalEvents.GlobalEvent~Handler} handler Handler to unsubscribe. - * @return {jibo.globalEvents.GlobalEvent} This. - */ - - /** - * Unsubscribes a handler function from this event (alias removeListener) - * @method jibo.globalEvents.GlobalEvent#off - * @param {jibo.globalEvents.GlobalEvent~Handler} handler Handler to unsubscribe. - * @return {jibo.globalEvents.GlobalEvent} This. - */ - - /** - * Unsubscribes all handler functions from this event - * @method jibo.globalEvents.GlobalEvent#removeAllListeners - * @return {jibo.globalEvents.GlobalEvent} This. - */ - - /** - * Unsubscribes oldest added subscriber - * @method jibo.globalEvents.GlobalEvent#removeFirstListener - * @return {jibo.globalEvents.GlobalEvent} This. - */ - - /** - * Unsubscribes most recently added subscriber - * @method jibo.globalEvents.GlobalEvent#removeLastListener - * @return {jibo.globalEvents.GlobalEvent} This. - */ \ No newline at end of file diff --git a/docs/services/events/GlobalEvents.js b/docs/services/events/GlobalEvents.js deleted file mode 100644 index f3cf2d32..00000000 --- a/docs/services/events/GlobalEvents.js +++ /dev/null @@ -1,129 +0,0 @@ - /** - * Set of names of all events that globalEvents currently has - * subscribed handlers for - * @name jibo.globalEvents#eventsWithHandlers - * @type {Set} - */ - - /** - * Received any global event - * @name jibo.globalEvents#global - * @type {TypedEvent} - */ - - /** - * Global voice stop command received - * @name jibo.globalEvents#voiceStop - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Received global help command - * @name jibo.globalEvents#help - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Received global sleep command - * @name jibo.globalEvents#sleep - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Received global pause command - * @name jibo.globalEvents#pause - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Received global volume command - * @name jibo.globalEvents#volume - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Received global whatCanIDo - * @name jibo.globalEvents#whatCanIDo - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Received global holdOn - * @name jibo.globalEvents#holdOn - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Received global overHere - * @name jibo.globalEvents#overHere - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Received global skill launch - * @name jibo.globalEvents#skillLaunch - * @type {Event} - */ - - /** - * Received global skill relaunch - * @name jibo.globalEvents#skillRelaunch - * @type {Event} - */ - - /** - * Received global touchStop event. - * WARNING: this refers to the global `touchStop` event, which is - * otherwise used to stop Jibo. If you want to listen for the - * touch event but NOT clobber the stop behavior, please - * refer to {@link jibo.system.SystemEvents#touchOn}. - * @name jibo.globalEvents#touchStop - * @type {jibo.globalEvents.GlobalEvent} - */ - - /** - * Global events that are shared - anyone can listen and not interfere with other listeners. - * @name jibo.globalEvents#shared - * @type {jibo.globalEvents.shared} - */ - - /** - * Announce to the skills service manager (SSM) if we can handle a specific global command. - * @param {string} action Global action for the SSM to recognize. - * @param {boolean} canHandle `true` if the `jibo` module can handle the global comand. - * @method jibo.globalEvents#announceGlobalHandler - */ - - /** - * We got a message from WS - * @param {any} data Data from websocket message. - * @method jibo.globalEvents~onMessage - * @private - */ - - /** - * We got a message from WS - * @param {WSResponse} data Data from websocket message. - * @method jibo.globalEvents~onGlobal - * @private - */ - - /** - * Called when ws with message 'skill-relaunch' is received. - * @param {any} data JSON Data received from websocket. - * @method jibo.globalEvents#onSkillRelaunch - * @private - */ - - /** - * Called when ws with message 'skill-launch' is received. - * @param {any} data JSON Data received from websocket. - * @method jibo.globalEvents#onSkillRelaunch - * @private - */ - - /** - * Initialize the touch listener. - * @method jibo.globalEvents~_initializeTouchListener - * @private - */ \ No newline at end of file diff --git a/docs/services/events/SharedGlobalEvents.js b/docs/services/events/SharedGlobalEvents.js deleted file mode 100644 index 48e4934e..00000000 --- a/docs/services/events/SharedGlobalEvents.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Namespace for global events that are shared so that - * anyone can listen and not interfere with other listeners. - * @namespace jibo.globalEvents.shared - */ - - /** - * Received only a `hey jibo` - * @name jibo.globalEvents.shared#hjOnly - * @type {TypedEvent} - */ - - /** - * Parsed against global grammar and no result. - * @name jibo.globalEvents.shared#noGlobalMatch - * @type {TypedEvent} - */ - - /** - * A non-interrupting global command (like volume setting) was heard and handled. This should - * be emitted by global handlers after something like changing the volume, or answering "No" to - * a question of "Are you sure you want to quit" - * @name jibo.globalEvents.shared#nonInterruptingGlobal - * @type {TypedEvent} - */ - - /** - * Received whenever the touch manger registers a screen gesture - * @name jibo.globalEvents.shared#screenGesture - * @type {TypedEvent} - */ - - /** - * @private - */ \ No newline at end of file diff --git a/docs/services/events/index.js b/docs/services/events/index.js deleted file mode 100644 index 4b04b8c9..00000000 --- a/docs/services/events/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @description Typed global events for events module (`jibo.globalEvents`). - * Only emits event to LAST subscriber. - * Also emits when a subscriber is added to a particular event AND - * when all subscribers have been removed from particular event (no handlers - * are registered for that event). - * ``` - * function handler = (data) => { - * // data is of type asrResult - * // the ASR service has finished listening a cloud result - * // and all subscribed listeners will be removed - * } - * jibo.globalEvents.touchOn.on(handler); - * // When finished with event listening - * jibo.globalEvents.touchOn.removeLastListener(); - * // or - * jibo.globalEvents.touchOn.removeListener(handler); - * ``` - * @namespace jibo.globalEvents - */ \ No newline at end of file diff --git a/docs/services/index.js b/docs/services/index.js deleted file mode 100644 index 2dfa046d..00000000 --- a/docs/services/index.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * List of robot services for speech, language processing, etc. - * @namespace jibo.services - * @private - */ \ No newline at end of file diff --git a/docs/services/media/Media.js b/docs/services/media/Media.js deleted file mode 100644 index 31a589e5..00000000 --- a/docs/services/media/Media.js +++ /dev/null @@ -1,198 +0,0 @@ -/** - * @typedef jibo.media#ThumbnailType - * @description Enum of thumbnail types - * @property thumb {any} Mobile - * @property thumb_robot {any} Robot - */ - -/** Callback for {@link jibo.media#takePhoto}. - * - * ``` - * jibo.media.takePhoto((err, data) => { - * if(!err) { - * let img = new Image(); - * img.src = data.url; - * } - * else { - * console.error(err); - * } - * }); - * ``` - * - * @callback jibo.media~TakePhotoCallback - * @param [error] {Error|null} An error object if there was an error, or `null`. - * @param data {object} Data about the photo. - * @param data.id {string} Content ID of temporary in-memory preview photo. - * @param data.url {string} URL to retreive temporary in-memory preview photo. - */ - -/** Callback for {@link jibo.media#storePhoto}. - * - * @callback jibo.media~StorePhotoCallback - * @param [error] {Error} error `null` if there is no error. - * @param [result] {object} The object's keys correspond to the - * thumbnail keys provided in the `thumbnails` argument of - * `storePhoto`. Values are the photo id as assigned by the media - * service. Use `getPhoto` to retrieve the PIXI.Texture that - * corresponds to this photo, or `getUrl` to get the url as served by - * the media service. - */ - -/** Media API - jibo.media - * - * ``` - * let params = {camera: jibo.media.CameraID.LEFT}; - * jibo.media.takePhoto(params, (err, data) => { - * jibo.loader.load({src: data.url, format: 'binary'}, (error, buffer) => { - * jibo.media.storePhoto( - * buffer, - * (error, result) => { - * let thumbnailId = result.thumbnails[jibo.media.ThumbnailType.thumb_robot]; - * jibo.media.getPhoto(thumbnailId, (err, pixiTexture) => { - * const s = new PIXI.Sprite(); - * s.texture = pixiTexture; - * jibo.face.stage.addChild(s); - * }) - * }); - * }); - * }); - * - * ``` - * You can use Promises instead of callbacks by simply omitting the callback. - * ``` - * let params = {photoType: jibo.media.CameraID.PREVIEW}; - * jibo.media.takePhoto(params) - * .then( (data) => { - * return jibo.media.storePhoto(data.id); - * }) - * .then( (result) => { - * let thumbnailId = result.thumbnails[jibo.media.ThumbnailType.thumb_robot]; - * return jibo.media.getPhoto(thumbnailId); - * .then( (pixiTexture) => { - * const s = new PIXI.Sprite(); - * s.texture = pixiTexture; - * jibo.face.stage.addChild(s); - * }); - * }); - * ``` - * - * @namespace jibo.media - */ - - /** Take a photo. Returns data about photo including the content - * id and url to the temporary in-memory copy of the photo. - * - * @method jibo.media#takePhoto - * @param [params] {object} Optional parameters object. - * @param [params.camera=jibo.media.CameraID.RIGHT] {jibo.media#CameraID} - * Which camera to use, left or right. - * @param [params.photoType=jibo.media.PhotoType.FULL] {jibo.media#PhotoType} - * Size/type of photo to take. - * @param [params.undistort=true] {boolean} Undistort (flatten) - * the photo. If `false` image will have fish-eye distortion. - * @param [params.flip=true] {boolean} Flip (mirror) the photo. - * If `false` image will not be flipped. - * @param [params.colorCorrection=true] {boolean} Apply a default - * set of filters to the photo (brightness, contrast, vibrance, - * hue, saturation and RGB curve) to give it a more natural - * appearence. - * @param [params.filters] {jibo.media~Filter[]} List of filters - * to apply to the image in order. Embedding in an array is - * optional if only one filter is specified. - * @param [callback] {jibo.media~TakePhotoCallback} Called with an - * error, or with data about the photo including the content ID - * (`data.id`). If callback is omitted a promise is returned - * instead. - * @returns {Promise} A promise that resolves when the operation is - * finished. - */ - - /** Save a temporary in-memory photo via the content id returned - * from `takePhoto`, or via a buffer object. Photo will be saved - * locally to disk and in the cloud. Default thumbnails (`thumb` - * for mobile, and `thumb_robot` for Jibo) will be generated and - * also saved. The KB media list `jibo.kb.media` will also be - * updated. Data including the content id and url is provided. - * - * @method jibo.media#storePhoto - * @param [id] {string} Content id of in-memory recently taken - * photo to be stored. Can also be specified via `params.id`. - * @param [buffer] {Buffer} Instead of providing an id, an image - * in a buffer object to store. Can also be specified via - * `params.buffer`. - * @param [params] {object} Optional parameters object. - * @param [params.id] {string} Content id of in-memory recently taken photo to be stored. - * @param [params.buffer] {Buffer} An image in a buffer object to be stored. - * @param [callback] {jibo.media~StorePhotoCallback} Called when - * photos are stored. If callback is omitted a promise is returned - * instead. - * @returns {Promise} A promise that resolves when the operation is - * finished. - */ - - /** Delete a photo from the local image store and from the cloud. - * - * @method jibo.media#deletePhoto - * @param id {string} Content ID of photo to delete. - * @param [callback] {function} Called with err object if there - * was an error. If callback is omitted a promise is returned instead. - * @returns {Promise} A promise that resolves when the operation is - * finished. - */ - - /** Retrieve the PIXI.Texture that corresponds to the specified photo. - * - * @method jibo.media#getPhoto - * @param id {string} The photo ID to retrieve the texture for. - * @param [callback] {function} Node style callback that returns a - * `PIXI.Texture`. If callback is omitted a promise is returned - * instead. - * @returns {Promise} A promise that resolves when the operation - * is finished. - */ - - /** Get a URL given a photo ID. - * - * @method jibo.media#getUrl - * @param id {string} Content ID of the photo. - * @returns {string} URL to the photo. - */ - - /** Get the preview URL of a recently taken - * in-memory photo that hasn't been stored yet. - * - * @method jibo.media#getPreviewUrl - * @param id {string} Content ID of the photo. - * @returns {string} URL to the photo. - */ - - /** Set up a viewfinder in a window with camera preview positioned - * at a given location on-screen. - * - * @method jibo.media#setViewfinder - * @param [enable=false] {boolean} Show (enable) or hide - * viewfinder. Can also be specified via `params.enable`. - * @param [params] {object} Optional parameters object. - * @param [params.enable=false] {boolean} Show (enable) or hide - * viewfinder. - * @param [params.width=1280] {number} Width of the viewfinder in pixels. - * @param [params.height=720] {number} Height of the viewfinder in pixels. - * @param [params.x=0] {number} X-coordinate for placing the viewfinder. In pixels. - * @param [params.y=0] {number} Y-coordinate for placing the viewfinder. In pixels. - * @param [params.camera=1] {number} Camera to use. 0=Left, 1=Right. - * @param [callback] {function} Callback for the method. If callback - * is omitted a promise is returned instead. - * @returns {Promise} A promise that resolves when the - * operation is finished. - */ - - /** Get the current state of the viewfinder preview window. - * - * @method jibo.media#getViewfinder - * @param [callback] {function} Callback for the function that - * returns an error, or if request is successful returns object - * with timestamp, enable, and window. If callback is omitted a - * promise is returned instead. - * @returns {Promise} A promise that resolves when the - * operation is finished. - */ \ No newline at end of file diff --git a/docs/services/media/MediaModel.js b/docs/services/media/MediaModel.js deleted file mode 100644 index 8cfaa8f4..00000000 --- a/docs/services/media/MediaModel.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * KB Media APIs - * @namespace jibo.kb.media - */ - -/** MediaModel Class. The Media Model subclass - * - * @example - * jibo.kb.media#loadMedia( (err, media) => console.log(media) ); - * @class MediaModel - * @extends jibo.kb.Model - * @memberof jibo.kb.media - */ - - /** Create an Error with a good message from an AxiosError object - * - * @method jibo.kb.media.MediaModel#_processError - * @param {AxiosError} err Axios error object. - * @returns {Error} Error object. - * @private - */ - - /** Load media nodes in the media list. Deleted media nodes are - * excluded. If callback is omitted a promise is returned instead. - * - * @method jibo.kb.media.MediaModel#loadMedia - * @param {Function} [callback] Called with (err, media). If callback - * is omitted a promise that resolves to `media` is returned - * instead. - * @returns {Promise} A promise that resolves with the list of - * media nodes if the callback is omitted. - */ - - /** Load all media nodes, including deleted ones. - * - * @method jibo.kb.media.MediaModel#loadMediaAll - * @param {Function} [callback] Called with (err, media). If callback - * is omitted a promise that resolves to `media` is returned - * instead. - * @returns {Promise} A promise that resolves with the list of - * media nodes if the callback is omitted. - */ - - /** Load the node for the thumbnail for a given media item node. - * @method jibo.kb.media.MediaModel#loadThumbnail - * @param {jibo.kb.media.MediaNode} mediaNode The media node you want the thumbnail to. - * @param {jibo.media#ThumbnailType} [type=thumb_robot] Type of thumbnail. - * @param {function} callback Called with the media node for the - * thumbnail, or `undefined` if there is no thumbnail of that - * type. - */ - - /** Get the url for the thumbnail for a given media item node. - * @method jibo.kb.media.MediaModel#getThumbnailUrl - * @param {jibo.kb.media.MediaNode} mediaNode The media node you want the thumbnail to. - * @param {jibo.media#ThumbnailType} [type=thumb_robot] Type of thumbnail. - * @returns {string} Url for the thumbnail of that type, if any, - * `undefined` otherwise. - */ - - /** Download a list of thumbnails to the local image store. - * - * @method jibo.kb.media.MediaModel#downloadThumbnails - * @param {string[]} ids Array of thumnails Content IDs to download. - * @param {Function} [callback] Called with err object if there - * was an error. If callback is omitted a promise is returned instead. - * @returns {Promise} A promise that resolves when the operation is - * finished. - * @private - */ - - /** Download a photo to the local image store. - * - * @method jibo.kb.media.MediaModel#downloadPhoto - * @param {string} id Content ID of photo to download. - * @param {Function} [callback] Called with err object if there - * was an error. If callback is omitted a promise is returned instead. - * @returns {Promise} A promise that resolves when the operation is - * finished. - * @private - */ - - /** Filter out media items that have been deleted. - * - * @method jibo.kb.media.MediaModel#_onlyNotDeleted - * @param {jibo.kb.media.MediaNode[]} media Media nodes to filter. - * @returns {jibo.kb.media.MediaNode[]} Media nodes where `isDeleted` is - * `false`. - * @private - */ \ No newline at end of file diff --git a/docs/services/media/MediaModelEvents.js b/docs/services/media/MediaModelEvents.js deleted file mode 100644 index 4447b4ed..00000000 --- a/docs/services/media/MediaModelEvents.js +++ /dev/null @@ -1,6 +0,0 @@ - /** - * Event emitted whenever the media list has been updated (including on - * mobile devices) - * @name jibo.kb.media.MediaModelEvents#mediaListChanged - * @type {Event} - */ \ No newline at end of file diff --git a/docs/services/media/MediaNode.js b/docs/services/media/MediaNode.js deleted file mode 100644 index b782dde4..00000000 --- a/docs/services/media/MediaNode.js +++ /dev/null @@ -1,32 +0,0 @@ -/** Specific type of node for media. All nodes returned by {@link jibo.kb.media.MediaModel} - * will be MediaNodes. - * - * @class MediaNode - * @extends jibo.kb.Node - * @memberof jibo.kb.media - */ - - /** UUID of the media. - * - * @name jibo.kb.media.MediaNode#id - * @type {String} - */ - - /** The loopId this media belongs to. - * - * @name jibo.kb.media.MediaNode#loopId - * @type {String} - */ - - /** The url that points to the actual media content. - * - * @name jibo.kb.media.MediaNode#url - * @type {String} - */ - - /** Get the content ID of the thumbnail for this media item. - * @method jibo.kb.media.MediaNode#getThumbnailId - * @param {jibo.media#ThumbnailType} [type=thumb_robot] Type of thumbnail. - * @returns {string} Content ID of the thumbnail, if any, - * `undefined` otherwise. - */ \ No newline at end of file diff --git a/docs/services/remote/RemoteService.js b/docs/services/remote/RemoteService.js deleted file mode 100644 index b9017736..00000000 --- a/docs/services/remote/RemoteService.js +++ /dev/null @@ -1,42 +0,0 @@ - /** - * Initialize websocket to remote service in ssm - * @param {Service} service - * @param {Function} any - */ - - /** - * Request a command library connector - * @return {CommandConnector} connector used to communicate with command library - */ - - /** - * Call to when remote connection user is ready for session to start - * In the case of remote skill ready will be called once remote intro MIM completes - */ - - /** - * Force disconnect of remote connection from command library - * @param {JIBO.v1.DisconnectCodes.DisconnectCodeType} [code = DisconnectCode.RobotError] - */ - - /** - * Send video message to remote socket - * @param {string} assetUrl - * @param {string} videoType - */ - - /** - * Send photo message to remote socket - * @param {string} assetUrl - * @param {string} photoUrl - */ - - /** - * Send message to remote socket to cancel asset - * @param assetUrl - */ - - /** - * Handler for messages received from remote web socket - * @param {string} message - */ \ No newline at end of file diff --git a/docs/sound/ChainBuilder.js b/docs/sound/ChainBuilder.js deleted file mode 100644 index d0f1476b..00000000 --- a/docs/sound/ChainBuilder.js +++ /dev/null @@ -1,79 +0,0 @@ -/** - * @class ChainBuilder - * @private - * @param {AudioContext} audioContext The audio context. - */ - - /** - * Cleans up. - * @method ChainBuilder#destroy - */ - - /** - * Gets the nodes. - * @method ChainBuilder#nodes - * @return {Object} - */ - - /** - * Gets the first node. - * @method ChainBuilder#first - * @return {Object} - */ - - /** - * Gets the last node. - * @method ChainBuilder#last - * @return {Object} - */ - - /** - * Adds a node to the chain. - * @method ChainBuilder#_addNode - * @private - * @param {*} node - * @param {*} properties - */ - - /** - * Clones the bufferSource. Used just before playing a sound. - * @method ChainBuilder#cloneBufferSource - * @returns {AudioBufferSourceNode} The clone AudioBufferSourceNode. - */ - - /** - * Adds a bufferSource. - * @method ChainBuilder#bufferSrouce - * @param {Object} [properties] Properties to set in the created node. - */ - - /** - * Adds a createMediaStreamSource. - * @method ChainBuilder#mediaStreamSource - * @param {Object} [properties] Properties to set in the created node. - */ - - /** - * Adds a createMediaElementSource. - * @method ChainBuilder#mediaElementSource - * @param {HTMLElement} element The element to add. - * @param {Object} [properties] Properties to set in the created node. - */ - - /** - * Adds a panner. - * @method ChainBuilder#panner - * @param {Object} [properties] Properties to set in the created node. - */ - - /** - * Adds an analyser. - * @method ChainBuilder#analyser - * @param {Object} [properties] Properties to set in the created node. - */ - - /** - * Adds a gainNode. - * @method ChainBuilder#gainNode - * @param {Object} [properties] Properties to set in the created node. - */ \ No newline at end of file diff --git a/docs/sound/Sound.js b/docs/sound/Sound.js deleted file mode 100644 index 97eeaf24..00000000 --- a/docs/sound/Sound.js +++ /dev/null @@ -1,248 +0,0 @@ -/** - * Callback when sound is loaded. - * @callback jibo.sound.Sound~loadedCallback - * @param {Error} err The callback error. - * @param {jibo.sound.Sound} sound The instance of new sound. - */ - -/** - * Callback when sound is completed. - * @callback jibo.sound.Sound~completeCallback - * @param {jibo.sound.Sound} sound The instance of sound. - */ - -/** - * Represents a single sound element. Can be used to play, pause, etc. sound instances. - * - * @class Sound - * @memberof jibo.sound - * @param {jibo.sound.SoundContext} [context] The context. - * @param {ArrayBuffer|String|Object} options Either the path or url to the source file. - * or the object of options to use. - * @param {ArrayBuffer|String} [options.src] If `options` is an object, the source of file. - * @param {Boolean} [options.autoPlay=false] true to play after loading. - * @param {Boolean} [options.preload=false] true to immediately start preloading. - * @param {Boolean} [options.block=false] true to only play one instance of the sound at a time. - * @param {Number} [options.volume=1] The amount of volume 1 = 100%. - * @param {Boolean} [options.useXHR=false] true to use XMLHttpRequest to load the sound. Default is false, loaded with NodeJS's `fs` module. - * @param {Number} [options.panning=0] The panning amount from -1 (left) to 1 (right). - * @param {jibo.sound.Sound~completeCallback} [options.complete=null] Global complete callback when play is finished. - * @param {jibo.sound.Sound~loadedCallback} [options.loaded=null] Call when finished loading. - * @param {Boolean} [options.loop=false] true to loop the audio playback. - */ - - /** - * Reference to the sound context. - * @name jibo.sound.Sound#_context - * @type {SoundContext} - * @private - */ - - /** - * Reference to the WebAudio API AudioContext. - * @name jibo.sound.Sound#_ctx - * @type {AudioContext} - * @private - */ - - /** - * Instance of the chain builder. - * @name jibo.sound.Sound#_chain - * @type {ChainBuilder} - * @private - */ - - /** - * `true` if the buffer is loaded. - * @name jibo.sound.Sound#isLoaded - * @type {Boolean} - * @default false - */ - - /** - * `true` if the sound is currently being played. - * @name jibo.sound.Sound#isPlaying - * @type {Boolean} - * @default false - * @readOnly - */ - - /** - * true to start playing immediate after load. - * @name jibo.sound.Sound#autoPlay - * @type {Boolean} - * @private - * @default false - * @readOnly - */ - - /** - * `true` to block successive plays. - * @name jibo.sound.Sound#block - * @type {Boolean} - * @default false - */ - - /** - * `true` to immediately start preloading. - * @name jibo.sound.Sound#preload - * @type {Boolean} - * @default false - * @readOnly - */ - - /** - * Callback when finished playing. - * @name jibo.sound.Sound#complete - * @type {jibo.sound.Sound~completeCallback} - * @default false - */ - - /** - * Callback when load is finished. - * @type {jibo.sound.Sound~loadedCallback} - * @name jibo.sound.Sound#loaded - * @readOnly - */ - - /** - * The file source to load. - * @name jibo.sound.Sound#src - * @type {String} - * @readOnly - */ - - /** - * The file buffer to load. - * @name jibo.sound.Sound#srcBuffer - * @type {ArrayBuffer} - * @readOnly - */ - - /** - * `true` to use XMLHttpRequest object to load. - * Default is to use NodeJS's fs module to read the sound. - * @name jibo.sound.Sound#useXHR - * @type {Boolean} - * @default false - */ - - /** - * The collection of instances being played. - * @name jibo.sound.Sound#_instances - * @type {Array} - * @private - */ - - /** - * Starts the preloading of sound. - * @method jibo.sound.Sound#_beginPreload - * @private - */ - - /** - * Destructor, safer to use `SoundPlugin.remove(alias)` to remove this sound. - * @private - * @method jibo.sound.Sound#destroy - */ - - /** - * Getter of the chain nodes. - * @name jibo.sound.Sound#nodes - * @type {Object} - * @private - * @readOnly - */ - - /** - * Gets and sets the volume. - * @name jibo.sound.Sound#volume - * @type {Number} - */ - - /** - * Gets and sets the looping. - * @name jibo.sound.Sound#loop - * @type {Boolean} - */ - - /** - * Gets and sets the buffer. - * @name jibo.sound.Sound#buffer - * @type {AudioBuffer} - */ - - /** - * Gets and sets the panning -1 (full left pan) and 1 (full right pan). - * @name jibo.sound.Sound#panning - * @type {Number} - * @default 0 - */ - - /** - * Gets the list of instances that are currently being played of this sound. - * @name jibo.sound.Sound#instances - * @type {Array} - * @readOnly - */ - - /** - * Plays the sound. - * @method jibo.sound.Sound#play - * @param {jibo.sound.Sound~completeCallback|object} options Either completed function or play options. - * @param {Number} [options.offset=0] time when to play the sound. - * @param {jibo.sound.Sound~completeCallback} [options.complete] Callback when complete. - * @param {jibo.sound.Sound~loadedCallback} [options.loaded] If the sound isn't already preloaded, callback when - * the audio has completely finished loading and decoded. - * @return {SoundInstance} Current playing instance. - */ - - /** - * Sound instance completed. - * @method jibo.sound.Sound#_onComplete - * @private - * @param {jibo.sound.SoundInstance} instance - */ - - /** - * Stops all the instances of this sound from playing. - * @method jibo.sound.Sound#stop - * @return {jibo.sound.Sound} Instance of this sound. - */ - - /** - * Stops all the instances of this sound from playing. - * @method jibo.sound.Sound#pause - * @return {jibo.sound.Sound} Instance of this sound. - */ - - /** - * Stops all the instances of this sound from playing - * @method jibo.sound.Sound#stop - * @return {jibo.sound.Sound} Instance of this sound. - */ - - /** - * Removes all instances. - * @method jibo.sound.Sound#_removeInstances - * @private - */ - - /** - * Loads a sound using XHMLHttpRequest object. - * @method jibo.sound.Sound#loadUrl - * @private - */ - - /** - * Loads using the file system (NodeJS's fs module). - * @method jibo.sound.Sound#loadPath - * @private - */ - - /** - * Decodes the array buffer. - * @method jibo.sound.Sound#decode - * @param {ArrayBuffer} arrayBuffer From load. - * @private - */ \ No newline at end of file diff --git a/docs/sound/SoundContext.js b/docs/sound/SoundContext.js deleted file mode 100644 index 47341b66..00000000 --- a/docs/sound/SoundContext.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @description Main class to handle webkit audio. - * - * @class SoundContext - * @memberof jibo.sound - */ - - /** - * The instance of the AudioContext for WebAudio API. - * @private - * @property {AudioContext} _ctx - */ - - /** - * The WebAudio API AudioContext object. - * @property {AudioContext} context - * @private - * @name SoundContext#context - * @type {AudioContext} - */ - - /** - * Sets the muted state. - * @type {Boolean} - * @name SoundContext#muted - * @default false - */ - - /** - * Sets the volume from 0 to 1. - * @type {Number} - * @name SoundContext#volume - * @default 1 - */ - - /** - * Pauses all sounds. - * @type {Boolean} - * @name SoundContext#paused - * @default false - */ - - /** - * Returns the entry node in the master node chains. - * @private - */ - - /** - * Toggles the muted state. - * @method SoundContext#toggleMute - * @return {Boolean} The current muted state. - */ \ No newline at end of file diff --git a/docs/sound/SoundInstance.js b/docs/sound/SoundInstance.js deleted file mode 100644 index 924bc222..00000000 --- a/docs/sound/SoundInstance.js +++ /dev/null @@ -1,83 +0,0 @@ - /** - * Recycle instance, because they will be created many times. - * @type {Array} - * @name jibo.sound.SoundInstance._pool - * @static - * @private - */ - - /** - * Recycle instance, because they will be created many times. - * @method jibo.sound.SoundInstance.create - * @static - * @private - */ - - /** - * The source node chain. - * @type {ChainBuilder} - * @name jibo.sound.SoundInstance#_chain - * @private - */ - - /** - * The starting time. - * @type {int} - * @name jibo.sound.SoundInstance#_startTime - * @private - */ - - /** - * true if paused. - * @type {Boolean} - * @name jibo.sound.SoundInstance#_paused - * @private - */ - - /** - * The time in milliseconds to wait. - * @type {int} - * @name jibo.sound.SoundInstance#_currentPosition - * @private - */ - - /** - * Initializes the instance. - * @method jibo.sound.SoundInstance#init - * @private - */ - - /** - * Stops the instance. - * @method jibo.sound.SoundInstance#stop - */ - - /** - * Plays the sound. - * @method jibo.sound.SoundInstance#play - * @param {Number} [offset=0] Number of seconds to offset playing. - */ - - /** - * Pauses the sound. - * @type {Boolean} - * @name jibo.sound.SoundInstance#paused - */ - - /** - * Callback when completed. - * @method jibo.sound.SoundInstance#_onComplete - * @private - */ - - /** - * Don't use after this. - * @method jibo.sound.SoundInstance#destroy - */ - - /** - * To string method for instance. - * @method SoundInstance#toString - * @return {String} The string representation of instance. - * @private - */ \ No newline at end of file diff --git a/docs/sound/SoundPlugin.js b/docs/sound/SoundPlugin.js deleted file mode 100644 index 79e4c183..00000000 --- a/docs/sound/SoundPlugin.js +++ /dev/null @@ -1,163 +0,0 @@ -/** - * @description Manages the playback of sounds. - * @class SoundLibrary - * @memberof jibo.sound - */ - - /** - * Sets the base path to prepend to all relative sound paths. - * @name jibo.sound#basePath - * @type {String} - */ - - /** - * Sets the base URL to prepend to all remote sound paths. - * @name jibo.sound#baseUrl - * @type {String} - */ - - /** - * The global context to use. - * @name jibo.sound#_context - * @type {jibo.sound.SoundContext} - * @private - */ - - /** - * The map of all sounds by alias. - * @name jibo.sound#_sounds - * @type {Object} - * @private - */ - - /** - * The global context to use. - * @name jibo.sound#context - * @readOnly - * @type {jibo.sound.SoundContext} - * @private - */ - - /** - * Adds a new sound by alias. - * @method jibo.sound#add - * @param {String} alias The sound alias reference. - * @param {ArrayBuffer|String|Object} options Either the path or url to the source file. - * or the object of options to use. - * @param {ArrayBuffer|String} [options.src] If `options` is an object, the source of file. - * @param {Boolean} [options.autoPlay=false] true to play after loading. - * @param {Boolean} [options.preload=false] true to immediately start preloading. - * @param {Boolean} [options.block=false] true to only play one instance of the sound at a time. - * @param {Number} [options.volume=1] The amount of volume 1 = 100%. - * @param {Boolean} [options.useXHR=false] true to use XMLHttpRequest to load the sound. Default is false, loaded with NodeJS's `fs` module. - * @param {Number} [options.panning=0] The panning amount from -1 (left) to 1 (right). - * @param {jibo.sound.Sound~completeCallback} [options.complete=null] Global complete callback when play is finished. - * @param {jibo.sound.Sound~loadedCallback} [options.loaded=null] Call when finished loading. - * @return {jibo.sound.Sound} Instance to the Sound object. - */ - - /** - * Adds multiple sounds. - * @method jibo.sound#addMap - * @param {Object} alias Map of sounds to add, the key is the alias, the value is the - * string, ArrayBuffer or the list of options (see `add` method for options). - * @param {Object|String|ArrayBuffer} globalOptions The default options for all sounds. - * if a property is defined, it will use the local property instead. - * @return {jibo.sound.Sound} Instance to the Sound object. - */ - - /** - * Removes a sound by alias. - * @method jibo.sound#remove - * @param {String} alias The sound alias reference. - * @return {jibo.sound} Instance for chaining. - */ - - /** - * Pauses any playing sounds. - * @method jibo.sound#pauseAll - * @return {jibo.sound} Instance for chaining. - */ - - /** - * Resumes any sounds. - * @method jibo.sound#resumeAll - * @return {jibo.sound} Instance for chaining. - */ - - /** - * Mutes all playing sounds. - * @method jibo.sound#muteAll - * @return {jibo.sound} Instance for chaining. - */ - - /** - * Unmutes all playing sounds. - * @method jibo.sound#unmuteAll - * @return {jibo.sound} Instance for chaining. - */ - - /** - * Stops and removes all sounds. They cannot be used after this. - * @method jibo.sound#removeAll - * @return {jibo.sound} Instance for chaining. - */ - - /** - * Stops all sounds. - * @method jibo.sound#stopAll - * @return {jibo.sound} Instance for chaining. - */ - - /** - * Checks if a sound by alias exists. - * @method jibo.sound#exists - * @param {String} alias Check for alias. - * @return {Boolean} true if the sound exists. - */ - - /** - * Gets a sound. - * @method jibo.sound#sound - * @param {String} alias The sound alias reference. - * @return {jibo.sound.Sound|null} Sound object or `null` if it doew not exist. - */ - - /** - * Plays a sound. - * @method jibo.sound#play - * @param {String} alias The sound alias reference. - * @param {Object|Function} options The options or callback when done. - * @param {Function} [options.complete] When completed. - * @param {Function} [options.loaded] If not already preloaded, callback when finishes load. - * @param {Number} [options.offset=0] Start time offset. - * @return {jibo.sound.SoundInstance|null} The sound instance, this cannot be reused - * after it is done playing. Returns `null` if the sound has not yet loaded. - */ - - /** - * Stops a sound. - * @method jibo.sound#stop - * @param {String} alias The sound alias reference. - * @return {jibo.sound.Sound|null} Sound object or `null` if it does not exist. - */ - - /** - * Pauses a sound. - * @method jibo.sound#pause - * @param {String} alias The sound alias reference. - * @return {jibo.sound.Sound|null} Sound object or `null` if it does not exist. - */ - - /** - * Resumes a sound. - * @method jibo.sound#resume - * @param {String} alias The sound alias reference. - * @return {jibo.sound.Sound|null} Instance for chaining or `null` if it does not exist. - */ - - /** - * Destroys the sound module. - * @method jibo.sound#destroy - * @private - */ \ No newline at end of file diff --git a/docs/sound/SoundUtils.js b/docs/sound/SoundUtils.js deleted file mode 100644 index 45bfa196..00000000 --- a/docs/sound/SoundUtils.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Utilities that work with sounds. - * @class SoundUtils - * @memberof jibo.sound - */ - - /** - * Create a new sound for a sine wave-based tone. - * @method jibo.sound.SoundUtils.sineTone - * @param {jibo.sound.SoundContext} soundContext - * @param {Number} hertz Frequency of sound. - * @param {Number} seconds Duration of sound in seconds. - * @return {jibo.sound.Sound} New sound. - */ - - /** - * Create a new "Audio" stream based on given audio path and project uri; returns the audio object. - * @method jibo.sound.SoundUtils.playOnce - * @static - * @param {String} fileName Full path of the file to play. - * @param {Function} callback Callback when complete. - * @return {string} New audio element alias. - */ - - /** - * Setup sounds to play automatically when hitting a frame label. For instance, a frame label of "playAudio-pop" - * will play the sound alias "pop" and "playAudio-breeze-1" will play the sound alias "breeze". - * @method jibo.sound.SoundUtils.addClipSounds - * @static - * @param {PIXI.animate.MovieClip} clip MovieClip to add sounds. - * @param {String} [labelPrefix=playAudio] Label name should start with this. - * @param {String} [separator=-] The separater between the labelPrefix, sound alias and the unique id (for playing multiple times) - * @return {PIXI.animate.MovieClip} MoveClip - */ \ No newline at end of file diff --git a/docs/sound/index.js b/docs/sound/index.js deleted file mode 100644 index a7f8605e..00000000 --- a/docs/sound/index.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Playing sound files with WebAudio API - * @namespace jibo.sound - */ \ No newline at end of file diff --git a/docs/sound/tasks/SoundTask.js b/docs/sound/tasks/SoundTask.js deleted file mode 100644 index 5e723853..00000000 --- a/docs/sound/tasks/SoundTask.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Internal class for dealing with async load assets through Loader. - * @class SoundTask - * @extends jibo.loader.Task - * @memberof jibo.loader - * @constructor - * @private - * @param {Object} asset The data properties. - * @param {String} asset.src The source. - * @param {Boolean} [asset.cache=false] true to cache the result. - * @param {String} [asset.id] ID of asset. - */ - - /** - * Tests if tasks should be run. - * @method jibo.loader.SoundTask.test - * @static - * @param {Object} asset The asset to check. - * @return {Boolean} true if the asset is compatible with this asset. - */ - - /** - * The source URL to load. - * @type {String} - * @name jibo.loader.SoundTask#src - */ - - /** - * true to block the audio from being played more than once at a time. - * @type {Boolean} - * @name jibo.loader.SoundTask#block - */ - - /** - * The initial volume of the sound (0 to 1). - * @type {Number} - * @name jibo.loader.SoundTask#volume - */ - - /** - * The panning from -1 (left) to 1 (right). Default is 0 (center). - * @type {Number} - * @name jibo.loader.SoundTask#panning - */ - - /** - * true if the sound should play. - * @type {Boolean} - * @name jibo.loader.SoundTask#loop - */ - - /** - * true to start playing the sound immediately after loading. - * @type {Boolean} - * @name jibo.loader.SoundTask#autoPlay - */ - - /** - * true to use XMLHttpRequest to download file. - * @type {Boolean} - * @name jibo.loader.SoundTask#useXHR - */ - - /** - * Starts the task. - * @method jibo.loader.SoundTask#start - * @param {jibo.loader.Task~completeCallback} callback Callback when finished. - */ \ No newline at end of file diff --git a/docs/utils/AnimationUtils.js b/docs/utils/AnimationUtils.js deleted file mode 100644 index 5e12a18f..00000000 --- a/docs/utils/AnimationUtils.js +++ /dev/null @@ -1,45 +0,0 @@ - /** -// * we want to wrap the loading of animations into our own runtime file resolution -// * and format conversion -// * @private -// */ - - /** -// * provided for backwards compatibility -// * @deprecated -// * @private -// */ - - /** -// * Creates an animation builder from a .keys file. -// * @function jibo.animate#createAnimationBuilderFromKeysPath -// * @param {String} uri Path to the .keys file. -// * @param {String} root Base path from which texture files are located. -// * @param {jibo.animate~AnimationBuilderCreatedCallback} cb Callback function that takes an {@link AnimationBuilder} as an argument. -// * @deprecated since 3.1.0 -// * @see jibo.loader#load -// */ - - /** -// * provided for backwards compatibility -// * @deprecated -// * @private -// */ - - /** -// * Shared three.js module reference. -// * @member jibo.animate.THREE -// */ - - /** -// * Wrapping this call because we already have a reference to robot info -// * and the timeline. -// * @private -// */ - - /** -// * Creates a face renderer bound to the given DOM element. -// * @function jibo.visualize#createFaceRenderer -// * @param {HTMLElement} element The element to draw the eye to. -// * @returns {FaceRenderer} -// */ \ No newline at end of file diff --git a/docs/utils/DelayedCall.js b/docs/utils/DelayedCall.js deleted file mode 100644 index e829f4ff..00000000 --- a/docs/utils/DelayedCall.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * A class for delaying a call through the application, instead of relying on `setInterval()` or - * `setTimeout()`. - * - * @class DelayedCall - * @memberof jibo.timer - * @param {function} callback The function to call when the delay has completed. - * @param {int} delay The time to delay the call, in milliseconds (or optionally frames). - * @param {Object|Boolean} [options=false] The options to use or repeat value. - * @param {Boolean} [options.repeat=false] `true` if the DelayedCall should automatically repeat itself when - * completed. - * @param {Boolean} [options.autoDestroy=true] `true` if the DelayedCall should clean itself up when completed. - * @param {Boolean} [options.useFrames=false] `true` if the DelayedCall should use frames instead of - * milliseconds for the delay. - */ - - /** - * The root timer. - * @private - * @type {Timer} - * @name jibo.timer.DelayedCall#parent - */ - - /** - * The function to call when the delay is completed. - * @private - * @type {function} - * @name jibo.timer.DelayedCall#_callback - */ - - /** - * The delay time, in milliseconds. - * @private - * @type {int} - * @name jibo.timer.DelayedCall#_delay - */ - - /** - * The timer counting down from _delay, in milliseconds. - * @private - * @type {int} - * @name jibo.timer.DelayedCall#_timer - */ - - /** - * `true` if the DelayedCall should repeat itself automatically. - * @private - * @type {Boolean} - * @name jibo.timer.DelayedCall#_repeat - * @default false - */ - - /** - * `true` if the DelayedCall should destroy itself after completing - * @private - * @type {Boolean} - * @name jibo.timer.DelayedCall#_autoDestroy - * @default true - */ - - /** - * `true` if the DelayedCall should use frames instead of milliseconds for the delay. - * @private - * @type {Boolean} - * @name jibo.timer.DelayedCall#_useFrames - * @default false - */ - - /** - * `true` if the DelayedCall is currently paused (not stopped). - * @private - * @type {Boolean} - * @name jibo.timer.DelayedCall#_paused - */ - - /** - * The callback supplied to the Application for an update each frame. - * @private - * @method jibo.timer.DelayedCall#update - * @param {int} elapsed The time elapsed since the previous frame. - */ - - /** - * Restart the DelayedCall, whether it is running or not. - * @method jibo.timer.DelayedCall#restart - */ - - /** - * Stop the DelayedCall without destroying it. - * @method jibo.timer.DelayedCall#stop - */ - - /** - * `true` if enabled for updates, `false` otherwise. - * @private - * @type {Boolean} - * @name jibo.timer.DelayedCall#enabled - */ - - /** - * `true` if the DelayedCall is paused, `false` otherwise. - * @type {Boolean} - * @name jibo.timer.DelayedCall#paused - */ - - /** - * Stop and clean up the DelayedCall. Do not use after calling. - * destroy(). - * @method jibo.timer.DelayedCall#destroy - */ \ No newline at end of file diff --git a/docs/utils/Timer.js b/docs/utils/Timer.js deleted file mode 100644 index 1b501390..00000000 --- a/docs/utils/Timer.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * @description - * Handle the update loop and timing events. - * ``` - * let jibo = require('jibo'); - * jibo.timer.on('update', (elapsed) => { - * // do update - * }); - * ``` - * @namespace jibo.timer - */ - - /** - * Fire when timer pause state changes. - * @event jibo.timer#pause - * @param {boolean} pause `true` if currently paused, `false` if resumed from stop. - */ - - /** - * Fire when sound is resumed. - * @event jibo.timer#resumed - */ - - /** - * Fire when sound is paused. - * @event jibo.timer#paused - */ - - /** - * Fire every `requestAnimationFrame`. Should be considered - * the main update "loop." All skills should use this for frame updates. - * @event jibo.timer#update - * @param {int} elapse The time in milliseconds since the last frame update. - */ - - /** - * Start the update loop. - * @method jibo.timer#start - */ - - /** - * Stop the update loop. - * @method jibo.timer#stop - */ - - /** - * Update loop callback. - * @method jibo.timer#update - * @private - */ - - /** - * Pause loop callback. - * @name jibo.timer#paused - * @type {Boolean} - * @readOnly - */ - - /** - * Works just like `window.setTimeout` but respects the pause. - * State of `jibo.timer`. - * @method jibo.timer#setTimeout - * @param {Function} callback Pass one argument, which is the `DelayedCall` instance. - * @param {int} delay The time in milliseconds or the number of frames (useFrames must be true). - * @param {Boolean} [useFrames=false] If the delay is frames (`true`) or milliseconds (`false`). - * @param {Boolean} [autoDestroy=true] If the DelayedCall object should be destroyed after completing. - * @return {jibo.timer.DelayedCall} The object for pausing, restarting, destroying etc. - */ - - /** - * Drop-in replacement for `window.clearTimeout`. Works with `jibo.timer.setTimeout` - * @method jibo.timer#clearTimeout - * @param {jibo.timer.DelayedCall} call The call to remove. - */ - - /** - * Works just like `window.setInterval` but respects the pause. - * State of jibo.timer. - * @method jibo.timer#setInterval - * @param {Function} callback Pass one argument, which is the DelayedCall instance. - * @param {int} delay The time in milliseconds or the number of frames ( if useFrames is `true`). - * @param {Boolean} [useFrames=false] If the delay is frames (`true`) or milliseconds (`false`). - * @return {jibo.timer.DelayedCall} The object for pausing, restarting, destroying etc. - */ - - /** - * Calls the provided callback function on the next timer frame. - * State of `jibo.timer`. - * @method jibo.timer#nextTick - * @param {Function} callback Pass one argument, which is the `DelayedCall` instance. - * @param {Boolean} [autoDestroy=true] If the `DelayedCall` object should be destroyed after completing. - * @return {jibo.timer.DelayedCall} The object for pausing, restarting, destroying etc. - */ - - /** - * Drop-in replacement for `window.clearInterval`, works with `jibo.timer.setInterval` - * @method jibo.timer#clearInterval - * @param {jibo.timer.DelayedCall} call The call to remove. - */ - - /** - * Destroy the timer object. - * @method jibo.timer#destroy - * @private - */ \ No newline at end of file diff --git a/docs/utils/decorators.js b/docs/utils/decorators.js deleted file mode 100644 index ed531eb7..00000000 --- a/docs/utils/decorators.js +++ /dev/null @@ -1,35 +0,0 @@ -/** @isInitialized method decorator - * - * Enforces that `this.isInitialized` is true or calls the callback with an error. - * Assumes the last argument is the callback. Must appear after @promisfy decorator, if any. - * @internal - */ - -/** @promisify method decorator - * - * Assumes the last argument is suppose to be a callback. If the last - * argument isn't a function, then assume the callback was left off on - * purpose and wrap the method call in a promise and return the - * promise. - * - * Note: only works with callbacks that return one result (or less) in - * addition to the err argument. e.g. callback(err), or callback(err, res), - * but not callback(err, res, res2) (because of the way promises work) - * @internal - */ - -/** @promisify_n method decorator - * Takes one argument, the argument number of the callback. If that - * argument isn't a function, then assume the callback was left off on - * purpose and wrap the method call in a promise and return the - * promise. The argument number is one-based: the first argument - * number is 1 (not zero), the second argument is 2, etc. - * - * The decorator takes the argument just like a function: - * @promisify_n(2) // if the second argument is the callback - * - * Note: only works with callbacks that return one result (or less) in - * addition to the err argument. e.g. callback(err), or callback(err, res), - * but not callback(err, res, res2) (because of the way promises work) - * @internal - */ \ No newline at end of file diff --git a/docs/utils/index.js b/docs/utils/index.js deleted file mode 100644 index 9c1912f8..00000000 --- a/docs/utils/index.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Utility methods for animation, audio, and pathing. - * @namespace jibo.utils - */ \ No newline at end of file diff --git a/docs/utils/location/HomeLocation.js b/docs/utils/location/HomeLocation.js deleted file mode 100644 index de42dbcd..00000000 --- a/docs/utils/location/HomeLocation.js +++ /dev/null @@ -1,3 +0,0 @@ -/** - * @private - */ \ No newline at end of file diff --git a/docs/utils/perf/GlobalPerfTimer.js b/docs/utils/perf/GlobalPerfTimer.js deleted file mode 100644 index 606b1f8d..00000000 --- a/docs/utils/perf/GlobalPerfTimer.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Global performance timer. - * @class GlobalPerfTimer - * @memberof jibo.utils.perf - * @private - */ \ No newline at end of file diff --git a/docs/utils/perf/ParallelTimer.js b/docs/utils/perf/ParallelTimer.js deleted file mode 100644 index bb6eb024..00000000 --- a/docs/utils/perf/ParallelTimer.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Parallel Timer - * @class ParallelTimer - * @extends PerformanceTimer - * @memberof jibo.utils.perf - * @private - */ \ No newline at end of file diff --git a/docs/utils/perf/PerformanceTimer.js b/docs/utils/perf/PerformanceTimer.js deleted file mode 100644 index 2100bc38..00000000 --- a/docs/utils/perf/PerformanceTimer.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Base Timer for measuring performance. - * @class PerformanceTimer - * @memberof jibo.utils.perf - * @private - */ \ No newline at end of file diff --git a/docs/utils/perf/SerialTimer.js b/docs/utils/perf/SerialTimer.js deleted file mode 100644 index efb0c540..00000000 --- a/docs/utils/perf/SerialTimer.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Serial Timer - * @class SerialTimer - * @extends PerformanceTimer - * @memberof jibo.utils.perf - * @private - */ \ No newline at end of file

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 delta 8534 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 diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/JiboSplash.png~ b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/JiboSplash.png~ index 0d69035977efb13823b05fe8ee9a0a2e40428ab9..5e79a72343ec137472a287a4a7e73da5ae4c537a 100644 GIT binary patch literal 24547 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 diff --git a/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo.png b/V3.1/build/opt/jibo/Jibo/Skills/@be/be/resources/jibo_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac68b4264cd6c248532cd049bddfe075de23e4c3 GIT binary patch literal 114056 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