diff options
88 files changed, 6218 insertions, 0 deletions
diff --git a/.DS_Store b/.DS_Store Binary files differnew file mode 100644 index 0000000..d0d732e --- /dev/null +++ b/.DS_Store diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/AlicornDesktop.iml b/.idea/AlicornDesktop.iml new file mode 100644 index 0000000..0c8867d --- /dev/null +++ b/.idea/AlicornDesktop.iml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="WEB_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/temp" /> + <excludeFolder url="file://$MODULE_DIR$/.tmp" /> + <excludeFolder url="file://$MODULE_DIR$/tmp" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module>
\ No newline at end of file diff --git a/.idea/deployment.xml b/.idea/deployment.xml new file mode 100644 index 0000000..827cf26 --- /dev/null +++ b/.idea/deployment.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="PublishConfigData" autoUpload="Always" remoteFilesAllowedToDisappearOnAutoupload="false"> + <serverData> + <paths name="Alicorn Dev Machine"> + <serverdata> + <mappings> + <mapping deploy="/root/alicorn/gui" local="$PROJECT_DIR$" web="/" /> + </mappings> + <excludedPaths> + <excludedPath local="true" path="$PROJECT_DIR$/node_modules/electron/dist" /> + </excludedPaths> + </serverdata> + </paths> + </serverData> + <option name="myAutoUpload" value="ALWAYS" /> + </component> +</project>
\ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..edbb1c1 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,21 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true"> + <option name="myValues"> + <value> + <list size="7"> + <item index="0" class="java.lang.String" itemvalue="nobr" /> + <item index="1" class="java.lang.String" itemvalue="noembed" /> + <item index="2" class="java.lang.String" itemvalue="comment" /> + <item index="3" class="java.lang.String" itemvalue="noscript" /> + <item index="4" class="java.lang.String" itemvalue="embed" /> + <item index="5" class="java.lang.String" itemvalue="script" /> + <item index="6" class="java.lang.String" itemvalue="webview" /> + </list> + </value> + </option> + <option name="myCustomValuesEnabled" value="true" /> + </inspection_tool> + </profile> +</component>
\ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..de3c9a9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/AlicornDesktop.iml" filepath="$PROJECT_DIR$/.idea/AlicornDesktop.iml" /> + </modules> + </component> +</project>
\ No newline at end of file diff --git a/.idea/webServers.xml b/.idea/webServers.xml new file mode 100644 index 0000000..1e2a665 --- /dev/null +++ b/.idea/webServers.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="WebServers"> + <option name="servers"> + <webServer id="581ee2b8-43e3-4f99-9cfd-6932e288fd91" name="Alicorn Dev Machine"> + <fileTransfer accessType="SFTP" host="192.168.1.60" port="22" sshConfigId="7a1c37e0-c000-45af-ad97-c7de566ccaf6" sshConfig="root@192.168.1.60:22 password"> + <advancedOptions> + <advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" /> + </advancedOptions> + </fileTransfer> + </webServer> + </option> + </component> +</project>
\ No newline at end of file @@ -0,0 +1,7 @@ +#!/bin/sh + +main () { + ./node_modules/electron/dist/electron . +} + +main
\ No newline at end of file @@ -0,0 +1 @@ +51
\ No newline at end of file diff --git a/data/user/Applications/org.minteck.alicorn.demoapp.aap/AlicornApp.svg b/data/user/Applications/org.minteck.alicorn.demoapp.aap/AlicornApp.svg new file mode 100644 index 0000000..e647c07 --- /dev/null +++ b/data/user/Applications/org.minteck.alicorn.demoapp.aap/AlicornApp.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14h-2V9h-2V7h4v10z"/></svg>
\ No newline at end of file diff --git a/data/user/Applications/org.minteck.alicorn.demoapp.aap/AlicornApp.yml b/data/user/Applications/org.minteck.alicorn.demoapp.aap/AlicornApp.yml new file mode 100644 index 0000000..b01fba3 --- /dev/null +++ b/data/user/Applications/org.minteck.alicorn.demoapp.aap/AlicornApp.yml @@ -0,0 +1,33 @@ +# The common display name of this app. +# It may be used as the directory name. +name: Demo App + +# A generic name for the app. +# Shown in the application menu and used by the system-wide search engine. +generic_name: Testing Program + +# The type of package. +# Can be: app, command, service; check the documentation for details. +type: app + +# The name of the app developer. Commonly shown in app stores +author: Minteck + +# A website that can provide support and optionally bug reports. +website: https://minteck.org + +# A description for the app. Commonly shown in app stores +description: Just a demo application for the Alicorn Operating System + +# A unique package name for the app. +# NOTE: This should only contain alphanumerical characters and periods, +# or it may break the window manager and other core system functionality. +package: org.minteck.alicorn.demoapp + +# The app version, can be any type of data. +# Used by app stores to check against new updates +version: 1.0 + +# Size of the base app window. Can be adjusted from an API call. +width: 256 +height: 256
\ No newline at end of file diff --git a/data/user/Applications/org.minteck.alicorn.demoapp.aap/index.html b/data/user/Applications/org.minteck.alicorn.demoapp.aap/index.html new file mode 100644 index 0000000..eea5356 --- /dev/null +++ b/data/user/Applications/org.minteck.alicorn.demoapp.aap/index.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>app</title> + <style>body { font-family: sans-serif; color: white; }</style> +</head> +<body> + <b>Hello world!</b> + <button onclick="alicorn.close();">Close</button> + + <script> + window.addEventListener('load', async () => { + window.alicorn = (await AlicornSDK.init()) + eval(AlicornKeyboardHandler); + alicorn.ready(); + }) + </script> +</body> +</html>
\ No newline at end of file diff --git a/data/user/Applications/org.minteck.alicorn.demoapp2.aap/AlicornApp.svg b/data/user/Applications/org.minteck.alicorn.demoapp2.aap/AlicornApp.svg new file mode 100644 index 0000000..10dc769 --- /dev/null +++ b/data/user/Applications/org.minteck.alicorn.demoapp2.aap/AlicornApp.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4 8c0 1.11-.9 2-2 2h-2v2h4v2H9v-4c0-1.11.9-2 2-2h2V9H9V7h4c1.1 0 2 .89 2 2v2z"/></svg>
\ No newline at end of file diff --git a/data/user/Applications/org.minteck.alicorn.demoapp2.aap/AlicornApp.yml b/data/user/Applications/org.minteck.alicorn.demoapp2.aap/AlicornApp.yml new file mode 100644 index 0000000..1f01aa3 --- /dev/null +++ b/data/user/Applications/org.minteck.alicorn.demoapp2.aap/AlicornApp.yml @@ -0,0 +1,33 @@ +# The common display name of this app. +# It may be used as the directory name. +name: Demo App 2 + +# A generic name for the app. +# Shown in the application menu and used by the system-wide search engine. +generic_name: Testing Program + +# The type of package. +# Can be: app, command, service; check the documentation for details. +type: app + +# The name of the app developer. Commonly shown in app stores +author: Minteck + +# A website that can provide support and optionally bug reports. +website: https://minteck.org + +# A description for the app. Commonly shown in app stores +description: Just another demo application for the Alicorn Operating System + +# A unique package name for the app. +# NOTE: This should only contain alphanumerical characters and periods, +# or it may break the window manager and other core system functionality. +package: org.minteck.alicorn.demoapp2 + +# The app version, can be any type of data. +# Used by app stores to check against new updates +version: 1.0 + +# Size of the base app window. Can be adjusted from an API call. +width: 256 +height: 256
\ No newline at end of file diff --git a/data/user/Applications/org.minteck.alicorn.demoapp2.aap/index.html b/data/user/Applications/org.minteck.alicorn.demoapp2.aap/index.html new file mode 100644 index 0000000..d8c738f --- /dev/null +++ b/data/user/Applications/org.minteck.alicorn.demoapp2.aap/index.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>app</title> + <style>body { font-family: sans-serif; color: white; }</style> +</head> +<body> + <b>Bonjour le monde !</b> +</body> +</html>
\ No newline at end of file diff --git a/debug.js b/debug.js new file mode 100644 index 0000000..3451c39 --- /dev/null +++ b/debug.js @@ -0,0 +1,4 @@ +setInterval(async () => { + mem = await process.getProcessMemoryInfo(); + document.getElementById("debug-info").innerText = "Electron " + process.versions.electron + "\nChromium " + process.versions.chrome + "\nNodeJS " + process.versions.node + "\n\nCPU: " + process.getCPUUsage().percentCPUUsage.toFixed(2) + "%\nCore: " + mem.shared + "K\nGUI: " + mem.private + "K\n\n" + WindowManager.stack.map((w) => { return w.id.substring(7).split("-app-")[0] }).join("\n"); +}, 1000)
\ No newline at end of file diff --git a/debugmenu.js b/debugmenu.js new file mode 100644 index 0000000..c901617 --- /dev/null +++ b/debugmenu.js @@ -0,0 +1,18 @@ +const DebugMenu = { + show: () => { + document.getElementById('debugging-options').classList.remove('hidden'); + document.getElementById('debugging-options').focus(); + }, + processKey: (key) => { + if (key === "Escape" || key === "Enter") document.getElementById("debugging-option-close").click(); + if (key === "q") document.getElementById("debugging-option-forcequit").click(); + if (key === "d") document.getElementById("debugging-option-debug").click(); + if (key === "c") document.getElementById("debugging-option-closeall").click(); + if (key === "r") document.getElementById("debugging-option-reload").click(); + }, + hide: () => { + document.getElementById('debugging-options').classList.add('hidden'); + document.getElementById('debugging-options').blur(); + WindowManager._.refreshStack(); + } +}
\ No newline at end of file diff --git a/defaultapp.svg b/defaultapp.svg new file mode 100644 index 0000000..36780a4 --- /dev/null +++ b/defaultapp.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M13 13v8h8v-8h-8zM3 21h8v-8H3v8zM3 3v8h8V3H3zm13.66-1.31L11 7.34 16.66 13l5.66-5.66-5.66-5.65z"/></svg>
\ No newline at end of file diff --git a/fonts.css b/fonts.css new file mode 100644 index 0000000..8c566d6 --- /dev/null +++ b/fonts.css @@ -0,0 +1,15 @@ +@font-face { + src: url('./fonts/Rubik-VariableFont_wght.ttf'); + font-family: "Rubik"; + font-style: normal; +} + +@font-face { + src: url('./fonts/Rubik-Italic-VariableFont_wght.ttf'); + font-family: "Rubik"; + font-style: italic; +} + +* { + font-family: "Rubik", sans-serif; +}
\ No newline at end of file diff --git a/fonts/Rubik-Italic-VariableFont_wght.ttf b/fonts/Rubik-Italic-VariableFont_wght.ttf Binary files differnew file mode 100644 index 0000000..8f9c9cc --- /dev/null +++ b/fonts/Rubik-Italic-VariableFont_wght.ttf diff --git a/fonts/Rubik-VariableFont_wght.ttf b/fonts/Rubik-VariableFont_wght.ttf Binary files differnew file mode 100644 index 0000000..c253818 --- /dev/null +++ b/fonts/Rubik-VariableFont_wght.ttf diff --git a/icons/.DS_Store b/icons/.DS_Store Binary files differnew file mode 100644 index 0000000..5008ddf --- /dev/null +++ b/icons/.DS_Store diff --git a/icons/battery-000-001-charging.svg b/icons/battery-000-001-charging.svg new file mode 100644 index 0000000..cf77de9 --- /dev/null +++ b/icons/battery-000-001-charging.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<path class="st0" d="M0,0h24v24H0V0z"/> +<path class="st1" d="M20,15.7V14h2v-4h-2V8.3C20,7.6,19.4,7,18.7,7H3.4C2.6,7,2,7.6,2,8.3v7.3c0,0.7,0.6,1.3,1.3,1.3h15.4 + C19.4,17,20,16.4,20,15.7z M6,13v-2h2v2H6z M10,13v-2h5v2H10z"/> +</svg> diff --git a/icons/battery-000-001.svg b/icons/battery-000-001.svg new file mode 100644 index 0000000..ea4ce50 --- /dev/null +++ b/icons/battery-000-001.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFAAAA;} +</style> +<path class="st0" d="M0,0h24v24H0V0z"/> +<path class="st1" d="M20,15.7V14h2v-4h-2V8.3C20,7.6,19.4,7,18.7,7H3.4C2.6,7,2,7.6,2,8.3v7.3c0,0.7,0.6,1.3,1.3,1.3h15.4 + C19.4,17,20,16.4,20,15.7z M6,13v-2h2v2H6z M10,13v-2h5v2H10z"/> +</svg> diff --git a/icons/battery-001-010-charging.svg b/icons/battery-001-010-charging.svg new file mode 100644 index 0000000..04f16a3 --- /dev/null +++ b/icons/battery-001-010-charging.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + H4v6H18z"/> +</g> +</svg> diff --git a/icons/battery-001-010.svg b/icons/battery-001-010.svg new file mode 100644 index 0000000..89a1807 --- /dev/null +++ b/icons/battery-001-010.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFAAAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + H4v6H18z"/> +</g> +</svg> diff --git a/icons/battery-010-020-charging.svg b/icons/battery-010-020-charging.svg new file mode 100644 index 0000000..46b790b --- /dev/null +++ b/icons/battery-010-020-charging.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + H6v6H18z"/> +</g> +</svg> diff --git a/icons/battery-010-020.svg b/icons/battery-010-020.svg new file mode 100644 index 0000000..1b1a177 --- /dev/null +++ b/icons/battery-010-020.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFAAAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + H6v6H18z"/> +</g> +</svg> diff --git a/icons/battery-020-035-charging.svg b/icons/battery-020-035-charging.svg new file mode 100644 index 0000000..5dd208a --- /dev/null +++ b/icons/battery-020-035-charging.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + H8v6H18z"/> +</g> +</svg> diff --git a/icons/battery-020-035.svg b/icons/battery-020-035.svg new file mode 100644 index 0000000..4032325 --- /dev/null +++ b/icons/battery-020-035.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFFFFF;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.5,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.5,17,19,17z M18,15V9 + H8v6H18z"/> +</g> +</svg> diff --git a/icons/battery-035-050-charging.svg b/icons/battery-035-050-charging.svg new file mode 100644 index 0000000..c3e8191 --- /dev/null +++ b/icons/battery-035-050-charging.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + h-8v6H18z"/> +</g> +</svg> diff --git a/icons/battery-035-050.svg b/icons/battery-035-050.svg new file mode 100644 index 0000000..637ce21 --- /dev/null +++ b/icons/battery-035-050.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFFFFF;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.5,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.5,17,19,17z M18,15V9 + h-8v6H18z"/> +</g> +</svg> diff --git a/icons/battery-050-060-charging.svg b/icons/battery-050-060-charging.svg new file mode 100644 index 0000000..e457735 --- /dev/null +++ b/icons/battery-050-060-charging.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + h-6v6H18z"/> +</g> +</svg> diff --git a/icons/battery-050-060.svg b/icons/battery-050-060.svg new file mode 100644 index 0000000..f6b423a --- /dev/null +++ b/icons/battery-050-060.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFFFFF;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.5,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.5,17,19,17z M18,15V9 + h-6v6H18z"/> +</g> +</svg> diff --git a/icons/battery-060-080-charging.svg b/icons/battery-060-080-charging.svg new file mode 100644 index 0000000..6b2e0c4 --- /dev/null +++ b/icons/battery-060-080-charging.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + h-4v6H18z"/> +</g> +</svg> diff --git a/icons/battery-060-080.svg b/icons/battery-060-080.svg new file mode 100644 index 0000000..5d33457 --- /dev/null +++ b/icons/battery-060-080.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFFFFF;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.5,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.5,17,19,17z M18,15V9 + h-4v6H18z"/> +</g> +</svg> diff --git a/icons/battery-080-095-charging.svg b/icons/battery-080-095-charging.svg new file mode 100644 index 0000000..bc81a18 --- /dev/null +++ b/icons/battery-080-095-charging.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.6,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.6,17,19,17z M18,15V9 + h-2v6H18z"/> +</g> +</svg> diff --git a/icons/battery-080-095.svg b/icons/battery-080-095.svg new file mode 100644 index 0000000..c9a69f6 --- /dev/null +++ b/icons/battery-080-095.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFFFFF;} +</style> +<g> + <rect class="st0" width="24" height="24"/> +</g> +<g> + <path class="st1" d="M19,17H3c-0.5,0-1-0.5-1-1V8c0-0.6,0.5-1,1-1h16c0.5,0,1,0.4,1,1v2h2v4h-2v2C20,16.5,19.5,17,19,17z M18,15V9 + h-2v6H18z"/> +</g> +</svg> diff --git a/icons/battery-095-100-charging.svg b/icons/battery-095-100-charging.svg new file mode 100644 index 0000000..ab888ca --- /dev/null +++ b/icons/battery-095-100-charging.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#CBFFAA;} +</style> +<path class="st0" d="M0,0h24v24H0V0z"/> +<path class="st1" d="M20,15.7V14h2v-4h-2V8.3C20,7.6,19.4,7,18.7,7H3.4C2.6,7,2,7.6,2,8.3v7.3c0,0.7,0.6,1.3,1.3,1.3h15.4 + C19.4,17,20,16.4,20,15.7z"/> +</svg> diff --git a/icons/battery-095-100.svg b/icons/battery-095-100.svg new file mode 100644 index 0000000..fc74069 --- /dev/null +++ b/icons/battery-095-100.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFFFFF;} +</style> +<path class="st0" d="M0,0h24v24H0V0z"/> +<path class="st1" d="M20,15.7V14h2v-4h-2V8.3C20,7.6,19.4,7,18.7,7H3.3C2.6,7,2,7.6,2,8.3v7.3C2,16.4,2.6,17,3.3,17h15.3 + C19.4,17,20,16.4,20,15.7z"/> +</svg> diff --git a/icons/battery-unknown.svg b/icons/battery-unknown.svg new file mode 100644 index 0000000..e78fe6e --- /dev/null +++ b/icons/battery-unknown.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#FFFFFF;} +</style> +<path class="st0" d="M0,0h24v24H0V0z"/> +<path class="st1" d="M20,15.7V14h2v-4h-2V8.3C20,7.6,19.4,7,18.7,7H3.3C2.6,7,2,7.6,2,8.3v7.3C2,16.4,2.6,17,3.3,17h15.3 + C19.4,17,20,16.4,20,15.7z M6,12.9v-1.9h1.9v1.9H6z M11.3,14.3c0,0-0.4-0.4-0.7-0.7c-0.5-0.5-1.1-0.8-1.6-0.8v-1.6 + c0.8,0,1.5,0.5,2,0.9l0.9,0.9c0.3,0.3,0.6,0.4,1.1,0.4c0.8,0,1.5-0.7,1.5-1.5s-0.7-1.5-1.5-1.5V9c1.7,0,3,1.3,3,3s-1.3,3-3,3 + C12.3,15,11.7,14.7,11.3,14.3z"/> +</svg> diff --git a/icons/debug-closeall.svg b/icons/debug-closeall.svg new file mode 100644 index 0000000..ea96032 --- /dev/null +++ b/icons/debug-closeall.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><rect fill="none" height="24" width="24"/><path d="M6.83,4H20c1.11,0,2,0.9,2,2v12c0,0.34-0.09,0.66-0.23,0.94L20,17.17V8h-9.17L6.83,4z M20.49,23.31L17.17,20H4 c-1.11,0-2-0.9-2-2V6c0-0.34,0.08-0.66,0.23-0.94L0.69,3.51L2.1,2.1l19.8,19.8L20.49,23.31z M15.17,18l-10-10H4v10H15.17z"/></svg>
\ No newline at end of file diff --git a/icons/debug-debugger.svg b/icons/debug-debugger.svg new file mode 100644 index 0000000..4066ca9 --- /dev/null +++ b/icons/debug-debugger.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z"/></svg>
\ No newline at end of file diff --git a/icons/debug-dump.svg b/icons/debug-dump.svg new file mode 100644 index 0000000..b7a46e2 --- /dev/null +++ b/icons/debug-dump.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M15 9H9v6h6V9zm-2 4h-2v-2h2v2zm8-2V9h-2V7c0-1.1-.9-2-2-2h-2V3h-2v2h-2V3H9v2H7c-1.1 0-2 .9-2 2v2H3v2h2v2H3v2h2v2c0 1.1.9 2 2 2h2v2h2v-2h2v2h2v-2h2c1.1 0 2-.9 2-2v-2h2v-2h-2v-2h2zm-4 6H7V7h10v10z"/></svg>
\ No newline at end of file diff --git a/icons/debug-reload.svg b/icons/debug-reload.svg new file mode 100644 index 0000000..d5cb6af --- /dev/null +++ b/icons/debug-reload.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><g><path d="M12,5V2L8,6l4,4V7c3.31,0,6,2.69,6,6c0,2.97-2.17,5.43-5,5.91v2.02c3.95-0.49,7-3.85,7-7.93C20,8.58,16.42,5,12,5z"/><path d="M6,13c0-1.65,0.67-3.15,1.76-4.24L6.34,7.34C4.9,8.79,4,10.79,4,13c0,4.08,3.05,7.44,7,7.93v-2.02 C8.17,18.43,6,15.97,6,13z"/></g></g></svg>
\ No newline at end of file diff --git a/icons/debug-stop.svg b/icons/debug-stop.svg new file mode 100644 index 0000000..50193aa --- /dev/null +++ b/icons/debug-stop.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h10c2.76 0 5-2.24 5-5s-2.24-5-5-5zm0 8c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"/></svg>
\ No newline at end of file diff --git a/icons/debug.svg b/icons/debug.svg new file mode 100644 index 0000000..435e4ad --- /dev/null +++ b/icons/debug.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z"/></svg>
\ No newline at end of file diff --git a/icons/network-offline.svg b/icons/network-offline.svg new file mode 100644 index 0000000..0fbee1f --- /dev/null +++ b/icons/network-offline.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1.73z"/></svg>
\ No newline at end of file diff --git a/icons/network-wifi-0.svg b/icons/network-wifi-0.svg new file mode 100644 index 0000000..2932171 --- /dev/null +++ b/icons/network-wifi-0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><path d="M12,4C7.31,4,3.07,5.9,0,8.98L12,21L24,8.98C20.93,5.9,16.69,4,12,4z M2.92,9.07C5.51,7.08,8.67,6,12,6 c3.33,0,6.49,1.08,9.08,3.07L12,18.17L2.92,9.07z"/></g></svg>
\ No newline at end of file diff --git a/icons/network-wifi-1.svg b/icons/network-wifi-1.svg new file mode 100644 index 0000000..cb32279 --- /dev/null +++ b/icons/network-wifi-1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><g><rect fill="none" height="24" width="24"/></g><g><path d="M12,4C7.31,4,3.07,5.9,0,8.98L12,21L24,8.98C20.93,5.9,16.69,4,12,4z M15.32,14.84C14.34,14.3,13.2,14,12,14 c-1.2,0-2.34,0.3-3.32,0.84L2.92,9.07C5.51,7.08,8.67,6,12,6s6.49,1.08,9.08,3.07L15.32,14.84z"/></g></svg>
\ No newline at end of file diff --git a/icons/network-wifi-2.svg b/icons/network-wifi-2.svg new file mode 100644 index 0000000..1b2e979 --- /dev/null +++ b/icons/network-wifi-2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><g><rect fill="none" height="24" width="24"/></g><g><path d="M12,4C7.31,4,3.07,5.9,0,8.98L12,21L24,8.98C20.93,5.9,16.69,4,12,4z M16.78,13.38C15.4,12.5,13.76,12,12,12 c-1.76,0-3.4,0.5-4.78,1.38l-4.3-4.3C5.51,7.08,8.67,6,12,6s6.49,1.08,9.08,3.07L16.78,13.38z"/></g></svg>
\ No newline at end of file diff --git a/icons/network-wifi-3.svg b/icons/network-wifi-3.svg new file mode 100644 index 0000000..a44fd1d --- /dev/null +++ b/icons/network-wifi-3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><g><rect fill="none" height="24" width="24"/></g><g><path d="M12,4C7.31,4,3.07,5.9,0,8.98L12,21L24,8.98C20.93,5.9,16.69,4,12,4z M2.92,9.07C5.51,7.08,8.67,6,12,6 s6.49,1.08,9.08,3.07l-2.85,2.86C16.46,10.71,14.31,10,12,10c-2.31,0-4.46,0.71-6.23,1.93L2.92,9.07z"/></g></svg>
\ No newline at end of file diff --git a/icons/network-wifi-4.svg b/icons/network-wifi-4.svg new file mode 100644 index 0000000..f2ce277 --- /dev/null +++ b/icons/network-wifi-4.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><path d="M12,4C7.31,4,3.07,5.9,0,8.98L12,21L24,8.98C20.93,5.9,16.69,4,12,4z"/></g></svg>
\ No newline at end of file diff --git a/icons/network-wifi-nointernet.svg b/icons/network-wifi-nointernet.svg new file mode 100644 index 0000000..6812648 --- /dev/null +++ b/icons/network-wifi-nointernet.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><path d="M24,8.98C20.93,5.9,16.69,4,12,4C7.31,4,3.07,5.9,0,8.98L12,21v-9h8.99L24,8.98z M19.59,14l-2.09,2.09L15.41,14L14,15.41 l2.09,2.09L14,19.59L15.41,21l2.09-2.08L19.59,21L21,19.59l-2.08-2.09L21,15.41L19.59,14z"/></g></svg>
\ No newline at end of file diff --git a/icons/network-wired.svg b/icons/network-wired.svg new file mode 100644 index 0000000..0a8aea9 --- /dev/null +++ b/icons/network-wired.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.28L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1.54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z"/></svg>
\ No newline at end of file diff --git a/icons/volume-0.svg b/icons/volume-0.svg new file mode 100644 index 0000000..c727507 --- /dev/null +++ b/icons/volume-0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"/></svg>
\ No newline at end of file diff --git a/icons/volume-1.svg b/icons/volume-1.svg new file mode 100644 index 0000000..6101b79 --- /dev/null +++ b/icons/volume-1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M7 9v6h4l5 5V4l-5 5H7z"/></svg>
\ No newline at end of file diff --git a/icons/volume-2.svg b/icons/volume-2.svg new file mode 100644 index 0000000..1b4403d --- /dev/null +++ b/icons/volume-2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z"/></svg>
\ No newline at end of file diff --git a/icons/volume-3.svg b/icons/volume-3.svg new file mode 100644 index 0000000..704e9be --- /dev/null +++ b/icons/volume-3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/></svg>
\ No newline at end of file diff --git a/icons/window-close.svg b/icons/window-close.svg new file mode 100644 index 0000000..0b3a55f --- /dev/null +++ b/icons/window-close.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
\ No newline at end of file diff --git a/icons/window-maximize.svg b/icons/window-maximize.svg new file mode 100644 index 0000000..a1e514a --- /dev/null +++ b/icons/window-maximize.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><rect fill="none" height="24" width="24"/><polygon points="21,11 21,3 13,3 16.29,6.29 6.29,16.29 3,13 3,21 11,21 7.71,17.71 17.71,7.71"/></svg>
\ No newline at end of file diff --git a/icons/window-minimize.svg b/icons/window-minimize.svg new file mode 100644 index 0000000..1d0769e --- /dev/null +++ b/icons/window-minimize.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M6 19h12v2H6z"/></svg>
\ No newline at end of file diff --git a/icons/window-restore.svg b/icons/window-restore.svg new file mode 100644 index 0000000..803c719 --- /dev/null +++ b/icons/window-restore.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><rect fill="none" height="24" width="24"/><path d="M22,3.41l-5.29,5.29L20,12h-8V4l3.29,3.29L20.59,2L22,3.41z M3.41,22l5.29-5.29L12,20v-8H4l3.29,3.29L2,20.59L3.41,22z"/></svg>
\ No newline at end of file diff --git a/index.css b/index.css new file mode 100644 index 0000000..220add1 --- /dev/null +++ b/index.css @@ -0,0 +1,251 @@ +#appbar { + position: fixed; + bottom: 0; + left: 0; + right: 0; + background: rgb(24 24 24 / 75%); + height: 48px; + border-radius: 10px 10px 0 0; + backdrop-filter: blur(10px); + border-top: 1px solid rgb(255 255 255 / 15%); + color: white; + z-index: 999999; + transition: border-radius 200ms; +} + +body { + background-color: black; + background-image: url('./wallpaper'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + position: fixed; + inset: 0; + margin: 0; + background-attachment: fixed; +} + +*::selection { + background: transparent; +} + +#menubtn-icon { + pointer-events: none; +} + +#menubtn { + display: inline-block; + width: 24px; + height: 24px; + padding: 7px; + margin: 5px; + border-radius: 999px; + background-color: transparent; + transition: background-color 200ms; +} + +#menubtn:hover, .statusbar-item:hover, .statusbar-app:hover { + background-color: rgba(70, 70, 70, 0.75); +} + +#menubtn:active, #menubtn.menubtn-active, .statusbar-item:active, .statusbar-item.statusbar-item-active, .statusbar-app:active { + background-color: rgba(70, 70, 70, 1); +} + +#statusbar { + float: right; + margin: 7px; + height: 33px; + vertical-align: middle; + display: flex; + align-items: center; + padding-right: 7px; +} + +#statusbar-apps { + position: fixed; + vertical-align: middle; + bottom: 5px; +} + +.statusbar-app { + padding: 7px; + vertical-align: middle; + display: inline-block; + border-radius: 999px; + border-width: 1px; + border-style: solid; + border-color: rgba(255, 255, 255, .5); + transition: border-color 200ms, background-color 200ms; + background-color: transparent; + margin-right: 5px; +} + +.statusbar-app.pinned { + border-color: rgba(255, 255, 255, 0); +} + +.statusbar-app.focused { + border-color: rgba(255, 255, 255, 1); +} + +.statusbar-app.minimized { + border-color: rgba(255, 255, 255, .1); +} + +.statusbar-app-icon { + width: 24px; + height: 24px; + vertical-align: middle; +} + +#statusbar * { + vertical-align: middle; + cursor: default; +} + +#appbar-tooltip { + z-index: 99999999; + position: fixed; + color: white; + bottom: 52px; + background: rgba(24, 24, 24, .75); + padding: 5px 10px; + backdrop-filter: blur(10px); + border-radius: 5px; + left: 3px; + border: 1px solid rgba(255, 255, 255, .15); + pointer-events: none; + opacity: 1; + transition: opacity 200ms; + width: max-content; + height: max-content; +} + +#appbar-tooltip.hidden { + opacity: 0; + transition: opacity 500ms; +} + +.statusbar-item { + width: 24px; + height: 24px; + display: inline-block; + padding: 5px; + border-radius: 999px; + background-color: transparent; + transition: background-color 200ms; + cursor: default; +} + +#statusbar-time { + margin-left: 5px; + cursor: default; +} + +.top { + z-index: 99999999; + opacity: 1; + backdrop-filter: blur(10px); + background: rgba(0, 0, 0, .75); + position: fixed; + inset: 0; + transition: opacity 200ms; + display: flex; + align-items: center; + justify-content: center; +} + +.top.hidden { + opacity: 0; + pointer-events: none; +} + +.top-inner { + color: white; + height: max-content; + width: 50vw; + padding: 20px; + background: #333; + border-radius: 10px; +} + +.top-header { + text-align: center; + margin: -20px; + padding: 20px; + background: #444; + border-top-left-radius: 10px; + border-top-right-radius: 10px; +} + +.top-header-icon { + width: 48px; + vertical-align: middle; +} + +.top-header-title { + display: inline-block; + font-size: 20px; + margin-left: 5px; + vertical-align: middle; +} + +.top-content { + margin-top: 40px; +} + +.top-footer { + margin-top: 5px; + font-size: 12px; + opacity: .25; +} + +.top-options { + margin: 20px -20px; +} + +.top-option { + padding: 10px 20px; + border-top: 1px solid #222; + cursor: default; +} + +.top-option:nth-last-child(1) { + border-bottom: 1px solid #222; +} + +.top-option-icon { + height: 24px; + vertical-align: middle; + width: 24px; +} + +.top-option-name { + vertical-align: middle; + margin-left: 5px; +} + +.top-option-key { + vertical-align: middle; + float: right; + font-size: 11px; + border: 1px solid white; + border-radius: 2px; + padding: 2px 5px; + margin-top: 2px; + opacity: .5; + border-bottom-width: 2px; +} + +.top-option:hover { + background: rgba(0, 0, 0, .25); +} + +.top-option:active { + background: rgba(0, 0, 0, .5); +} + +.window:not(.loading) .window-loader { + display: none; +}
\ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..661fcf1 --- /dev/null +++ b/index.html @@ -0,0 +1,100 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>AlicornDesktop</title> + <link rel="stylesheet" href="fonts.css"> + <link rel="stylesheet" href="index.css"> + <link rel="stylesheet" href="windowmanager.css"> + <script> + global.$ = global.jQuery = require('jquery'); + global.fs = require('fs'); + global.YAML = require('yaml'); + global.si = require('systeminformation'); + global.wifi = require('node-wifi'); + global.loudness = require('loudness') + global.uuid = require('uuid') + + wifi.init({ + iface: null + }); + </script> +</head> +<body> + <div id="debug" style="position:fixed;font-size:12px;z-index:-1;color:white;margin:5px;"><button onclick="WindowManager.openApp('org.minteck.alicorn.demoapp')">win1</button><br><button onclick="WindowManager.openApp('org.minteck.alicorn.demoapp2')">win2</button><br><button onclick="window.close();">abort</button><br><button onclick="DebugMenu.show();">debug</button><br><br>Alicorn <script>require("fs").writeFileSync("refresh", (require("fs").readFileSync("refresh") - 1 + 2).toString());document.write(require('./package.json').version + " (version " + require('./package.json').release + ", build " + require('fs').readFileSync('refresh') + "." + require('fs').readFileSync('build') + ")")</script><br><br><div id="debug-info"></div></div> + <div id="appbar"> + <span id="menubtn"> + <img id="menubtn-icon" src="./menu.svg"> + </span> + <span id="statusbar-apps"></span> + <span id="statusbar"> + <div> + <span id="statusbar-network" class="statusbar-item"> + <img id="statusbar-network-icon" src="./icons/network-wired.svg"> + </span><span id="statusbar-sound" class="statusbar-item"> + <img id="statusbar-sound-icon" src="./icons/volume-0.svg"> + </span><span id="statusbar-battery" class="statusbar-item"> + <img id="statusbar-battery-icon" src="./icons/battery-unknown.svg"> + </span> + <span id="statusbar-time">00:00</span> + </div> + </span> + </div> + <div id="appbar-tooltip" class="hidden">Hello!</div> + + <div id="tracked-windows"></div> + <div class="top hidden" id="debugging-options"> + <div class="top-inner"> + <div class="top-header"> + <img class="top-header-icon" src="icons/debug.svg"> + <span class="top-header-title">Debugging Options</span> + </div> + <div class="top-content"> + If the system or a specific app had become unresponsive, you can close it within this menu. Press Ctrl+Alt+Del to access this menu at any time. + </div> + <div class="top-options"> + <div class="top-option" id="debugging-option-forcequit" onclick="window.close();DebugMenu.hide();"> + <img src="icons/debug-stop.svg" class="top-option-icon" alt=""> + <span class="top-option-name">Force quit UI</span> + <span class="top-option-key">Q</span> + </div> + <div class="top-option" id="debugging-option-reload" onclick="location.reload();"> + <img src="icons/debug-reload.svg" class="top-option-icon" alt=""> + <span class="top-option-name">Reload UI</span> + <span class="top-option-key">R</span> + </div> + <div class="top-option" id="debugging-option-debug" onclick="require('@electron/remote').getCurrentWindow().toggleDevTools();DebugMenu.hide();"> + <img src="icons/debug-debugger.svg" class="top-option-icon" alt=""> + <span class="top-option-name">Open debugging utility</span> + <span class="top-option-key">D</span> + </div> + <div class="top-option" id="debugging-option-closeall" onclick="WindowManager.closeAll();DebugMenu.hide();"> + <img src="icons/debug-closeall.svg" class="top-option-icon" alt=""> + <span class="top-option-name">Close all windows</span> + <span class="top-option-key">C</span> + </div> + <div class="top-option" id="debugging-option-close" onclick="DebugMenu.hide();"> + <img src="icons/window-close.svg" class="top-option-icon" alt=""> + <span class="top-option-name">Close this menu</span> + <span class="top-option-key">Esc</span> + </div> + </div> + <div class="top-footer"> + <script>document.write(require('./package.json').version + ", v" + require('./package.json').release + ", " + require('fs').readFileSync('refresh') + "." + require('fs').readFileSync('build'))</script> + </div> + </div> + </div> + + <script src="./debugmenu.js"></script> + <script src="./sdk/host.js"></script> + <script src="./status-time.js"></script> + <script src="./status-battery.js"></script> + <script src="./status-network.js"></script> + <script src="./status-sound.js"></script> + <script src="windowmanager.js"></script> + <script src="./debug.js"></script> + <script src="./shortcuts.js"></script> + <script src="./status-apps.js"></script> + <script src="./status-tooltip.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/loader.svg b/loader.svg new file mode 100644 index 0000000..d0b6d58 --- /dev/null +++ b/loader.svg @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: rgba(0, 0, 0, 0) none repeat scroll 0% 0%; display: block; shape-rendering: auto;" width="200px" height="200px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> +<g transform="rotate(0 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.9166666666666666s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(30 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.8333333333333334s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(60 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.75s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(90 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.6666666666666666s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(120 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5833333333333334s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(150 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(180 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.4166666666666667s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(210 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.3333333333333333s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(240 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.25s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(270 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.16666666666666666s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(300 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.08333333333333333s" repeatCount="indefinite"></animate> + </rect> +</g><g transform="rotate(330 50 50)"> + <rect x="48.5" y="24" rx="0" ry="0" width="3" height="12" fill="#ffffff"> + <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="0s" repeatCount="indefinite"></animate> + </rect> +</g> +<!-- [ldio] generated by https://loading.io/ --></svg>
\ No newline at end of file @@ -0,0 +1,1957 @@ +%PDF-1.6
%
+1 0 obj
<</Metadata 2 0 R/OCProperties<</D<</ON[22 0 R]/Order 23 0 R/RBGroups[]>>/OCGs[22 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<</Length 50005/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> +<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 6.0-c006 120.b669747, 2021/05/19-19:07:51 "> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <rdf:Description rdf:about="" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:xmp="http://ns.adobe.com/xap/1.0/" + xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/" + xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" + xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" + xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" + xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/" + xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/" + xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" + xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/" + xmlns:pdf="http://ns.adobe.com/pdf/1.3/"> + <dc:format>application/pdf</dc:format> + <dc:title> + <rdf:Alt> + <rdf:li xml:lang="x-default">logo</rdf:li> + </rdf:Alt> + </dc:title> + <xmp:MetadataDate>2022-03-23T20:59:43+01:00</xmp:MetadataDate> + <xmp:ModifyDate>2022-03-23T20:59:43+01:00</xmp:ModifyDate> + <xmp:CreateDate>2022-03-23T20:59:42+01:00</xmp:CreateDate> + <xmp:CreatorTool>Adobe Illustrator 25.3 (Macintosh)</xmp:CreatorTool> + <xmp:Thumbnails> + <rdf:Alt> + <rdf:li rdf:parseType="Resource"> + <xmpGImg:width>220</xmpGImg:width> + <xmpGImg:height>256</xmpGImg:height> + <xmpGImg:format>JPEG</xmpGImg:format> + <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADcAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FUNqep6fpenz6jqNwlrY2qGS4uJSFRFHck4q+XPzN/5yl1vUZpdO8lV03ThVG1ORQb
qX3jDVWJT8i3uuKaeHanrOr6rcG51S9nvrgkkzXMryvU9fick4q9U/5x5/NXWPL3m6w8v3t283l7
VZVtfq8rFlgmkPGKSKv2AXIV6bUNewxUvsnFDsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi
rsVdirsVdirsVdirTMqKWYhVUVZjsAB1JOKvjP8AP3845/Oesto+kzFfK+nyERcSQLuVdjO3io/3
WPDfvspDyPFLsVVrK6ktLyC7i/vbeRJY6/zIwYfiMUP0jxQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
q7FXYq7FXYq7FXYq7FXYq7FXYq8Q/wCcn/zKbQfLieVtOl4apraE3TqaNFZA8W/5HEFPlyxV8i4s
nYq7FV8MUk0qQxjlJIwRF2FWY0A3xV+k2LF2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2
KuxV2KuxV2KqdxcQ21vLcTuI4IUaSWRuiqoqxPyAxV+f/wCY/nG484edNT16Un0rmUrZxt+xbR/D
ClPZAK+9TiljWKXYq7FU+8g6c2peePL9gBX6zqNrG3+q0y8jvXotcUP0LxQ7FWpJEjRpJGCIgLO7
GgAG5JJxV8+fmn/zlJZ6fJLpPkdY766WqS6zIOVuh/4oT/dp/wAo/D7MMU0+edd8/eddeuWudX1u
8u5CahWlZY1/1I0KxoPZVGKpl5I/Nnzx5Q1KK60/UpprRWBn024keS3lWvxKUYkKT/MtCMVp9zeW
dfsvMPl/T9csSfquowJPGD1XmKlG91NVPvihMsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVeU
/wDOSvm06D+Wd1awvxu9ccafGO/pOC05+XpqUP8ArYq+LMWTsVdirsVem/8AOOGj/pL83NIYgmKw
We8kp/xXEyof+RjrigvtzFCyeeGCGSed1ihiUvLI5CqqqKszE9ABir5D/PP8/LvzXPP5e8uStb+W
UPCecVWS9Knqe6xeC9+reAUvFcUuxV2KvuD/AJxyZm/Jny6WJY0uxU77C9nAH0DFi9JxV2KuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV8mf85b+ZDe+dNO0KNqw6TaepIPCe6bk23/GNI/vxSHhOKXYq
7FXYq+iv+cPdDL6p5h1102gghsoXPczOZZAPl6KV+eKC+n8UPlP/AJyN/OxtZupvJ3l24/3EW78d
UvIif9JlU7xKw6xIev8AMfYbqQ8CxS7FXYq7FX6Aflbor6L+XXl3TZAVmhsYWmU9RLKvqyD6HcjF
iynFXYq7FUq8zeavL/ljSpNV1y9jsrKL9uQ/EzfyRoKs7H+VRXFWH/8AKzNd/wAL/wCNv0G/+Fuf
P6tX/cj9Qp/vfwr6dK7+l14fHz/ZxV6LirsVdirsVdirsVdirsVdirsVfAn5t62da/MvzJqHLkrX
0sMTVrWO3PoRn/gIxikMRxS7FXYq7FX2l/zjJ5f/AET+VVncunGbV55r569eJb0Y/oKQhh88WKTf
85I/nAfLemHyros3HXdRjrdzofitrZttj2kl6DwXf+XFXyNiydirsVdirKfyv8qt5p8+6LovDnBP
cK94KVAt4v3k1fmikfPFD9AAABQbAYodirsVeR/mp/zkT5Z8n+tpuk8NZ8wr8LQI3+jwN/xdIvVh
/Iu/iVxV5B+WXl7zT+c3no695vuZLvQ9KYPcq3wwlieSWkKD4VU9Xp+z1NSDil9cejD6Po8F9Hjw
9Og48aU406UpihfirsVdirsVdirsVdirsVdiqhf3a2djc3bCq28TysPZFLfwxV+cE80s88k8rc5Z
WLyMe7Mak7e+LJZirsVdiqtZWc97eQWduvO4uZEhhTxeRgqj7zir7q82eZ9H/K38toZX4v8Ao22i
sdLtSeJnnSMJGnjT4eTnwBxYvh3W9a1LW9Xu9W1OY3F/eyNNcSt3Zuw8ABsB2G2KUDil2KuxV2Kv
p7/nE78vryzTUPOGpWrwtcoLTSfVXiWiJDzSqG3oxCqrD/KxQX0XihKvM3mry/5Y0qTVdcvY7Kyi
/bkPxM38kaCrOx/lUVxV8q/mr/zkr5g8ymbSvLPqaPoZqjzg0u7hDt8TL/dKf5UNfFu2KaeW+UvK
2reafMNnoWlR+pd3j8Qd+KIN3kcjoqLucVfenkjydpPk/wAtWeg6Yv7i1X95MQA80p/vJXp+0x+7
p0GKE9xV2KuxV2KuxV2KuxV2KuxV2KpB+YVwbbyD5luAORh0q+kC1pXhbOaV+jFX564snYq7FXYq
9M/5x28trrX5o6dNMB9T0dX1O5dvsr9XA9IknYUmZDigrfz3/M5/PHm9xaSk6BpZa30xAfhk3/eX
FPGUjb/JA98VDzXFLsVdiqZeXvLeueYtUi0vRLKS+vpvsxRCtB3ZmPwqo7sxpih9TflV/wA4zaJo
Ho6r5s9PVtYFHjsqcrSBuu4P98w8WHH2PXFD3EAAAAUA2AGKvIPzV/5yL8t+UfW0zReGs+YFqrRo
1baBun76RftMP5F38SuKvlDzb5z8yebdVbU9evXu7g1EanaOJSa8Iox8KL8vpxSkgBJoNyegxS+z
f+cefym/wb5e/S+qwhfMmrIDMrD4re3PxJBv0Y7NJ70H7OLF65irsVdirsVdirsVdirsVdirsVdi
rGvzN/8AJbebP+2NqH/ULJir8+8WTsVdirsVZ1ofmM+V/wAudTis34a15skFqXB+KLTLeolYeH1i
VjH8kbFDBcUuxV2KvWPyr/5x78z+czDqWo8tH8utRhdSL++nXr+4jPY/zt8Phy6Yot9Y+TPIflby
bpg0/QLJbaM0M8x+KaZgPtSyH4mPt0HYDFCJ80ebPL3lfSpNU129jsrNOjOas7UrwjQVZ2PgoxV8
qfmr/wA5JeYfM/raX5d9TRtCaqvIDS7uF/y3X+7U/wAqn5k9MU08YxS7FXu3/OM/5SfpzVF84axD
XSNNk/3HQuNp7pDXnv1SE/e3yOKC+s8UOxV2KuxV2KuxV2KuxV2KuxV2KuxVjX5m/wDktvNn/bG1
D/qFkxV+feLJ2KuxV2Kr5JpZOAdiwjUIgPRVG9B9JriqzFUz8ueWde8yapHpeh2Ul9fS9Ioh0Hdn
Y0VFHdmIGKH1R+VX/OM+heXfR1XzV6esa0tHjtacrOBv9Vh+9YeLCngO+KHtwAAoNgMVdirF/Mn5
Y+RvM16L3XtLGoXKrxRppZyEXwRA4VRtvxGKpR/yoT8of+pag/5GT/8AVTFXf8qE/KH/AKlqD/kZ
P/1UxV3/ACoT8of+pag/5GT/APVTFWaaTpOm6RptvpmmW6WthaoI7e3jFFVR2H8T3xVF4q7FXYq7
FXYq7FXYq7FXYq7FXYq7FWNfmb/5LbzZ/wBsbUP+oWTFX594snYq7FXYq7FXrH5V/wDOPfmfzmYd
S1Hlo/l1qMLqRf3069f3EZ7H+dvh8OXTFFvrLyb5F8seTtLGm6BZLbRGhmmPxTTMP25ZD8TH8B2A
GKFfzV5v8ueVdKfVNevY7K0XZS5q8jUrwjQVZ29lGKvCb3/nMezS7lSy8qyT2isRDNNeiGRl7Fo1
glCn25nFNKP/AEOV/wB+h/3Mf+zXFad/0OV/36H/AHMf+zXFad/0OV/36H/cx/7NcVpWsv8AnL66
vbyCztPJbT3VzIsUEKahVnkc8VVR9V6knFafQ9jJeS2UEl7AttdvGrT26SeqsbkVZBJxTlxO1eIx
Qr4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqxr8zf/ACW3mz/tjah/1CyYq/PvFk7FXYqmvlrytr/m
bVI9L0Oykvr2T9iMbKvdnY0VFHixpih9U/lV/wA41aB5b9HVfM3p6xra0dICOVpbsN/hVh+9YfzM
KeA74oe1gACg2AxV47+av/OR3lzyn62l6F6es6+tVYK1bW3YbfvXU/GwP7CH5lcVfKPmvzh5j816
q+qa9eyXl01QnI0SNf5IkHwovsBilJsUuxV2KuxV9Of84v8A5S+hCvnvWYf30wK6FA43VDUNc0Pd
/sp7VPcYoL6NxQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWNfmb/AOS282f9sbUP+oWTFX594snY
q9b/ACr/AOcd/M3nH0tS1Xno/l5qMJ3X/SJ1/wCKI26A/wA7beAbFFvrHyf5I8s+UNLXTdAsktYN
jLJ9qWVh+3LIfiY/Pp2xQv8ANnnLy35T0p9T169SztlqIwxrJIwFeESD4nb2GKvlT81f+ckPMfmr
1tL0D1NG0Bqq5VqXdwv/ABa6n4FP8iH5k4pp43il2KuxV2KuxV6T+Rn5Vzee/NKm7Rh5f00rNqcu
4D71S3U+MlN/Ba96YoL7WurnTdH0uS4uHjs9NsIS8jmixxQxLU9OgVRih5Z+S35qap5+82eb5ypT
Q7T6oukwEUMaEzDk1P25ePJvClO2KvXcVdirsVdirsVdirsVdirsVdirsVdirsVY1+Zv/ktvNn/b
G1D/AKhZMVfCPlnyr5h8z6ommaFYyX14+5SMfCi/zSOaKi+7HFL6o/Kr/nGrQPLfo6r5m9PWNbWj
pARytLdhv8KsP3rD+ZhTwHfFD2sAAUGwGKvGvzV/5yR8u+VvW0vy/wCnrOvLVWZWraQN/wAWOp+N
h/Ip+ZGKvlPzT5u8xeatVfVNdvZL27eoUuaIik14RoPhRfYDFKT4pdirsVdirsVTPy15d1XzHrtn
omlRetfX0gjiXsO7Mx7Kqgsx8MUPvP8AL7yPpXkrytaaFp4qIRzurgijTTsB6krfM9B2FB2xQ8A/
5yf/ADa+u3TeRtGmraWzBtbmQ7STLutuD3WPq/8AlbfsnFIek/8AONPkqby5+Xkd7dxmO/12T666
sKMsHELAp+a/H/ssUPWcVdirsVdirsVdirsVdirsVdirsVdirsVQOvaPb61oWo6Ncu8dvqVrNZzS
R0Dqk8bRsV5BhyAbaoxVBeUfJflryjpa6ZoFklnb7GVhvJK4FOcsh+J2+f0bYq35s85eW/KelPqe
vXqWdstRGGNZJGArwiQfE7ewxV8o/mr/AM5G+ZPNnraZofPRtAaqsqtS6uF6fvXX7Kn+RfpJxTTx
7FLsVdirsVdirsVdir7C/wCccPylPlXQ/wDEWrw8df1aMGONh8VtatRljNejvsz+Gw7HFinP58fm
rH5G8sGCxkX/ABFqitFp6bExL0e4I/yK/DXq3sDir5z/ACM/LC58/ebvreoqz6FpzrcarNJU+u5P
JYORNS0h3c9lr3IxS+2VVUUKoCqooqjYADoAMUN4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXi/
5p/85KeXfLBl0vy56eta4tVeQNW0t2BoQ7qf3jD+VD8yOmKvlbzT5u8xeatVfVNdvZL27eoUuaIi
k14RoPhRfYDFKT4pdirsVdirsVdirsVe2f8AONv5SnzLrQ80avDXQtKkBt43Hw3N0u4HukWzN4mg
8cUF9UeafM2k+WNAvNc1WX0rKyjLv05O3RI0B6s7UVR44ofFnpecPzn/ADJkkjX/AEi8apY8mgsr
NDRQSOioP+CY+JxS+y/JPk3R/J/lu00HSU429stZJWpzmlb7cshHVmP3dBsBihPcVdirsVdirsVd
irsVdirsVdirsVdirsVSTzd508teUdLbU9fvUs7fcRKd5JXArwijHxO3y+nbFXyf+an/ADkV5l83
+tpmj89G8vN8LRI1Lmdf+LpFOyn+RdvEtimnkOKXYq7FXYq7FXYq7FXYqyb8uvImp+d/NVroVjVF
kPqXlzSqwW6EepIfvoo7sQMUPvLy/oOleXtEtNG0uIQafYxiKFO9BuWY92Y7se5xQ+X/AM3/ADfr
n5see7fyT5PVrrS7GVlVlNIppl+GW5kYVAij6K3zIryAxS9+/Kz8sNG8geXksLQLPqM4D6lqJWjz
SeA/ljStFX6epOKGZ4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq1IGZGCNwcghWpWh7GmKvHvM/wDz
jZpPmjVZNU13zNq97eSdGdrfii/yRoIgqKPBRiqU/wDQoPkj/q86n99v/wBU8U27/oUHyR/1edT+
+3/6p4rbv+hQfJH/AFedT++3/wCqeK27/oUHyR/1edT++3/6p4rbv+hQfJH/AFedT++3/wCqeK27
/oUHyR/1edT++3/6p4rbv+hQfJH/AFedT++3/wCqeK27/oUHyR/1edT++3/6p4rbv+hQfJH/AFed
T++3/wCqeK29E/LP8qfLf5fWF1b6SZLi4vHD3N7ccTMyqKJHVAoCrUkbd8UMa/Onzbr908X5d+S4
2n8zaylb6eM0FlZMQrPI4+x6laV7LXuVxVkX5VflVof5f6GLS0AuNUuAG1LUmFHlcfsr/LGv7K/S
d8VZvirsVdirsVdirsVdirsVdirsVdirsVSLzh538s+UNLbUtfvUtYNxFH9qWVh+xFGPiY/Lp3xV
5x/0Nd+Vv8mo/wDSOn/VTFXf9DXflb/JqP8A0jp/1UxV3/Q135W/yaj/ANI6f9VMVd/0Nd+Vv8mo
/wDSOn/VTFXf9DXflb/JqP8A0jp/1UxV3/Q135W/yaj/ANI6f9VMVd/0Nd+Vv8mo/wDSOn/VTFXf
9DXflb/JqP8A0jp/1UxV3/Q135W/yaj/ANI6f9VMVd/0Nd+Vv8mo/wDSOn/VTFXf9DXflb/JqP8A
0jp/1UxV6T5N822HmzQYdc06C5gsbhmFubuMRPIqmnNVDN8JNQD7eGKpretdraymzRHuuNIVkJCc
jsC5G/EdTTfFUm8p+TtP8vrdXIY3etanJ6+r6rIP3txL954Rp9mONdlH34qn+KuxV2KuxV2KuxV2
KuxV2KuxV2KuJAFTsBirxT81f+cldA8t+tpXln09Y1tao84PK0t2G3xMp/esP5VNPE9sVfK3mXzT
r/mbVJNU1y9kvr2T9uQ7KvZUUUVFHgopilKsUuxV2KuxV2KuxV2KuxV2KuxV6B+S35X3Pn3zUlvM
rpodjxm1a4Xb4K/DCrfzyEU9hU9sUPt//cbpOmf7rstNsIfZIooYl+5VVRih4xef85c/l9DcvFb6
dqV1CpoLgJCgb3VWlDU+YBxWnp/kXz75c87aINX0KZnhDGOeCUBJoZAK8JFBYA0NdiQfHFWRYq7F
XYq7FXYq7FXYq7FXYq7FUi84ed/LPlDS21LX71LWDcRR/allYfsRRj4mPy6d8VfJ35qf85EeZvOP
q6bpXPR/LzVUwI3+kTr/AMXyL0B/kXbxLYpp5Jil2KuxV2KuxV2KuxV2KuxV2KuxVH6Fompa7rFp
o+mQme/vpVht4h3Zu5PZVG7HsN8UPvD8tPIGm+RvKlrolmFecfvb+6AoZ7hh8bn2H2VHZQMUPEv+
cofzaLO3kPRpvgXi2uzoep6pbVHhsz/QPHFIfNuKX0f/AM4cPN9b81IC3oenZFh+zz5TU+mlcUF9
NYodirsVdirsVdirsVdiriQBU7AYq8R/NX/nJjQvLvraV5V9PWNaWqSXVeVnA3+sp/esPBTTxPbF
Xyx5j8z6/wCZNTk1PXL2W+vZeskp2UfyoooqKOyqAMUpXil2KuxV2KuxV2KuxV2KuxV2KuxV2Kvr
j/nGn8pT5e0j/FmsQ8da1SOlnDIPit7Vtwd+jy9T4LQd2xYss/O780oPIXlVpLd1bX9QDQ6VCaHi
afHOy/yx1Hzag8cVfD9xPPcTyXE8jSzzM0ksrkszOxqzMTuSScWSnir7A/5xT8syaZ+X0+rToVl1
u6aWOop+4gHpR9fF/UPyxYl7TirsVdirsVdirsVdirsVfH/56fnL5/1LWL7ytNby+XdNt3MU1gG/
fzr2aaVdmRxuFT4SD+11xSHi2KXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXsX/ADjr+Up83a/+ndVh
r5e0iRWKt9m5uVoyRe6Lsz/QO+KC+tvMGvaV5e0S71nVJRBp9jGZZn70GwVR3Zjso7nFD4N/MXz1
qnnfzVda7fkqsh9Oztq1WC3Un04x8q1J7kk4pYzilNPK/l6+8x+YdP0OxFbrUJ0gQ0qFDH4nPsi1
Y+wxQ/QjRNHstF0ey0mxThaWEEdvAv8AkRqFBPuaVJxQjcVdirsVdirsVdirsVdirz/82/yf0T8w
dLAkIs9ctVP1DUgKkd/SlA3aMn6V6juCq+KvMvlrWvLWtXOjazbNa39q3F0bow/ZdG6MrDcEYpSv
FLsVdirsVdirsVdirsVdirsVdirIPIfkvVfOfme00HTVpJcNynnIqsMKkepK3so+80HfFD708reW
dJ8saBZ6HpUXpWVlGETpyduryOR1Z2qzHxxQ+V/+ckvza/xNrR8saRNy0LSpD9YlQ/Dc3S1Bbbqk
VSq+JqfDFIeJ4pdir6Y/5xO/Lt40uvPF/FT1A1po4Yb8a0nmHzI9Mf7LFBfSOKHYq7FXYq7FXYq7
FXYq7FXYqwX81vyl0L8wdIENzS11e2U/o7U1FWQnfhIP24yeq/SMVfE/mryrrnlXXLjRdatzb3tu
dx1R0P2ZI2/aRux/jilKMUuxV2KuxV2KuxV2KuxV2KroopJZEiiQySSEKiKCWZiaAADqTir7a/If
8qo/I3lgT3sYPmLVFWXUHIBMS0qlup/yK/FTq3yGLFJf+cjvzb/wtoZ8u6RMF1/VoyJJEPxW1q1V
Z9ujyfZTw3PYYq+PcWTsVZh+Vn5dal5881QaTbBo7GMiXU7wD4YYAd9/53+yg8fYHFD7v0rS7DSt
NtdN0+FYLKziWG3hXoqIKAYoRWKuxV2KuxV2KuxV2KuxV2KuxV2KsK/NH8q/L/5gaMLS/H1fUbcM
dO1KMAyRMf2T/PGx+0v3UO+KvBv+hQPOf/V7077p/wDmjFNu/wChQPOf/V7077p/+aMVt3/QoHnP
/q96d90//NGK27/oUDzn/wBXvTvun/5oxW3f9Cgec/8Aq96d90//ADRitu/6FA85/wDV7077p/8A
mjFbd/0KB5z/AOr3p33T/wDNGK27/oUDzn/1e9O+6f8A5oxW3f8AQoHnP/q96d90/wDzRits2/KX
/nGmTyr5nXXvMV5bai9mOWm29uH4LMdvVk5hfsD7I8d+wxQ9V/MHzxpfkrytd69qB5CEcLW3Bo00
7f3ca/M9T2FT2xV8GeZfMWq+Y9dvNb1WX1r6+kMkrdh2VVHZVUBVHhilLMUsh8jeRPMXnTXI9J0S
3Mkho1xcNURQRk0Mkrdh+J7Yofb35cfl1ofkPy8mk6YPUlciS+vXAEk81KFm8FHRV7D3qSoZVirs
VdirsVdirsVdirsVdirsVdirsVdirsVSPXfPPk7QLpLXW9ZtNOuZE9SOK5lWNmQkjkAxFRUYqlv/
ACt78r/+pp0z/pJj/rirv+Vvflf/ANTTpn/STH/XFXf8re/K/wD6mnTP+kmP+uKu/wCVvflf/wBT
Tpn/AEkx/wBcVd/yt78r/wDqadM/6SY/64q7/lb35X/9TTpn/STH/XFU10Dzl5U8wvNHoerWupPb
hWnW2lWTgGqFLcSaVoaYqnJIAJPQbnFXxZ+e3njzB5382PHDZXcOhaWWh063eGRS1ftzupH2pKbe
C098Uhg2keQ/OusyrFpehX12zftR28nAdqs5ARR7k4q9e8jf84neZL6WO583XSaTZ1q9lbss10w8
OY5RR/OrfLFbfSvlTyf5c8qaUml6DZJZ2q7vx3eR6U5yOas7e5OKE5xV2KuxV2KuxV2KuxV2KuxV
2KuxV2KuxV2KuxVi35h/lz5d896I2mavFSWPk1lfIB6tvIRTkp7j+ZTsfuxV8R+ffIWv+SNfl0fW
IqMKva3SA+lPFWgkjJ/EdQdjiljeKXYq7FXYqi9J0rUNW1K20zToGub68kWG3gTqzuaAe3uT0xV9
3flX+XVh5D8p2+kQcZb2T99qd2BQy3DDeld+C/ZUeHuTixZhirsVdirsVdirsVdirsVdirsVdirs
VdirsVdirsVdirsVdirsVdirG/P35f8Al3zxob6TrUPICrWl0m01vKRQPG361Ox74q+IvzD/AC81
/wAi6/JpOrR8kar2V6gPpXEVaB0J7/zL1U/QSpYvil2KuxV9Xf8AOMn5SnR9OHnPWYeOqX6U0qFx
vDbON5T4PKOngv8ArHFi97xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K
uxVj/nfyL5e86aHJpGt24liNWt512lgloQJIm7MK/I98VfEf5k/ltr3kLXm0zU19S2kq9hfoCIri
IHqPBh+0vb5UJUsSxS9X/wCcfvymPnXzF+kdTi5eW9KdWugw+G4m+0luPb9p/wDJ2/axQX2iqqqh
VACgUAGwAGKG8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqSecP
Jvl/zfok2j63bCe2k3jfYSRSUIEkTfsutf4HbFXx9r35Bec9N/MC08pwxm4h1KQnT9VCn0WgXd5J
KV4GJftr91aiqm32F5N8paT5S8uWeg6WnG2tEoXI+OSQ7vK/iztv+HTFCdYq7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FX/2Q==</xmpGImg:image> + </rdf:li> + </rdf:Alt> + </xmp:Thumbnails> + <xmpMM:InstanceID>uuid:2e18f06d-5717-4548-a71f-b55c9742b164</xmpMM:InstanceID> + <xmpMM:DocumentID>xmp.did:b4e4be3c-402f-4377-98fd-4e057fde3bdb</xmpMM:DocumentID> + <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID> + <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass> + <xmpMM:DerivedFrom rdf:parseType="Resource"> + <stRef:instanceID>uuid:7714bbb3-cb4b-9e4b-a7cc-ba1f08c54dbc</stRef:instanceID> + <stRef:documentID>xmp.did:09a6dae5-d973-4c6c-9883-0fe9bfce3a2a</stRef:documentID> + <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID> + <stRef:renditionClass>proof:pdf</stRef:renditionClass> + </xmpMM:DerivedFrom> + <xmpMM:History> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <stEvt:action>saved</stEvt:action> + <stEvt:instanceID>xmp.iid:b4e4be3c-402f-4377-98fd-4e057fde3bdb</stEvt:instanceID> + <stEvt:when>2022-03-23T20:59:40+01:00</stEvt:when> + <stEvt:softwareAgent>Adobe Illustrator 25.3 (Macintosh)</stEvt:softwareAgent> + <stEvt:changed>/</stEvt:changed> + </rdf:li> + </rdf:Seq> + </xmpMM:History> + <illustrator:Type>Document</illustrator:Type> + <illustrator:StartupProfile>Print</illustrator:StartupProfile> + <illustrator:CreatorSubTool>AIRobin</illustrator:CreatorSubTool> + <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint> + <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency> + <xmpTPg:NPages>1</xmpTPg:NPages> + <xmpTPg:MaxPageSize rdf:parseType="Resource"> + <stDim:w>256.000000</stDim:w> + <stDim:h>256.000000</stDim:h> + <stDim:unit>Pixels</stDim:unit> + </xmpTPg:MaxPageSize> + <xmpTPg:PlateNames> + <rdf:Seq> + <rdf:li>Black</rdf:li> + </rdf:Seq> + </xmpTPg:PlateNames> + <xmpTPg:SwatchGroups> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>Default Swatch Group</xmpG:groupName> + <xmpG:groupType>0</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>White</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>Black</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>100.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Red</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Yellow</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Green</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Cyan</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Blue</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Magenta</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>15.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>90.000000</xmpG:yellow> + <xmpG:black>10.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>90.000000</xmpG:magenta> + <xmpG:yellow>85.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>80.000000</xmpG:magenta> + <xmpG:yellow>95.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>50.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>35.000000</xmpG:magenta> + <xmpG:yellow>85.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>5.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>90.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>20.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>50.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>75.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>85.000000</xmpG:cyan> + <xmpG:magenta>10.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>10.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>90.000000</xmpG:cyan> + <xmpG:magenta>30.000000</xmpG:magenta> + <xmpG:yellow>95.000000</xmpG:yellow> + <xmpG:black>30.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>75.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>75.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>80.000000</xmpG:cyan> + <xmpG:magenta>10.000000</xmpG:magenta> + <xmpG:yellow>45.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>70.000000</xmpG:cyan> + <xmpG:magenta>15.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>85.000000</xmpG:cyan> + <xmpG:magenta>50.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>95.000000</xmpG:magenta> + <xmpG:yellow>5.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>25.000000</xmpG:yellow> + <xmpG:black>25.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>75.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>50.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>35.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>35.000000</xmpG:yellow> + <xmpG:black>10.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>10.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>50.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>95.000000</xmpG:magenta> + <xmpG:yellow>20.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>25.000000</xmpG:cyan> + <xmpG:magenta>25.000000</xmpG:magenta> + <xmpG:yellow>40.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>40.000000</xmpG:cyan> + <xmpG:magenta>45.000000</xmpG:magenta> + <xmpG:yellow>50.000000</xmpG:yellow> + <xmpG:black>5.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>50.000000</xmpG:cyan> + <xmpG:magenta>50.000000</xmpG:magenta> + <xmpG:yellow>60.000000</xmpG:yellow> + <xmpG:black>25.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>55.000000</xmpG:cyan> + <xmpG:magenta>60.000000</xmpG:magenta> + <xmpG:yellow>65.000000</xmpG:yellow> + <xmpG:black>40.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>25.000000</xmpG:cyan> + <xmpG:magenta>40.000000</xmpG:magenta> + <xmpG:yellow>65.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>30.000000</xmpG:cyan> + <xmpG:magenta>50.000000</xmpG:magenta> + <xmpG:yellow>75.000000</xmpG:yellow> + <xmpG:black>10.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>35.000000</xmpG:cyan> + <xmpG:magenta>60.000000</xmpG:magenta> + <xmpG:yellow>80.000000</xmpG:yellow> + <xmpG:black>25.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>40.000000</xmpG:cyan> + <xmpG:magenta>65.000000</xmpG:magenta> + <xmpG:yellow>90.000000</xmpG:yellow> + <xmpG:black>35.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>40.000000</xmpG:cyan> + <xmpG:magenta>70.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>50.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>50.000000</xmpG:cyan> + <xmpG:magenta>70.000000</xmpG:magenta> + <xmpG:yellow>80.000000</xmpG:yellow> + <xmpG:black>70.000000</xmpG:black> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>Grays</xmpG:groupName> + <xmpG:groupType>1</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>100.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>89.999400</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>79.998800</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>69.999700</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>59.999100</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>50.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>39.999400</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>29.998800</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>19.999700</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>9.999100</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>4.998800</xmpG:black> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>Brights</xmpG:groupName> + <xmpG:groupType>1</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>75.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>10.000000</xmpG:magenta> + <xmpG:yellow>95.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>85.000000</xmpG:cyan> + <xmpG:magenta>10.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>90.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>60.000000</xmpG:cyan> + <xmpG:magenta>90.000000</xmpG:magenta> + <xmpG:yellow>0.003100</xmpG:yellow> + <xmpG:black>0.003100</xmpG:black> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + </rdf:Seq> + </xmpTPg:SwatchGroups> + <pdf:Producer>Adobe PDF library 15.00</pdf:Producer> + </rdf:Description> + </rdf:RDF> +</x:xmpmeta> + + + + + + + + + + + + + + + + + + + + + +<?xpacket end="w"?>
endstream
endobj
3 0 obj
<</Count 1/Kids[5 0 R]/Type/Pages>>
endobj
5 0 obj
<</ArtBox[31.3215 15.4726 224.678 240.527]/BleedBox[0.0 0.0 256.0 256.0]/Contents 24 0 R/CropBox[0.0 0.0 256.0 256.0]/LastModified(D:20220323205942+01'00')/MediaBox[0.0 0.0 256.0 256.0]/Parent 3 0 R/PieceInfo<</Illustrator 7 0 R>>/Resources<</ExtGState<</GS0 25 0 R>>/Properties<</MC0 22 0 R>>>>/Thumb 26 0 R/TrimBox[0.0 0.0 256.0 256.0]/Type/Page>>
endobj
24 0 obj
<</Filter/FlateDecode/Length 454>>stream
+HlSnT1+[ĪB>!"$$̌jtGÑ7G7o8=}>DO{;(W{_L"IZtp*xhY%*KXNn(9Eɓ)ݵߢ(]z5yڢ?M\lމ6Wn}(oN/3 +8;X.);%CAa#X]-P_g$R3ZRtGD>:C^R;*SA[24F1@BR7TO-GRk`Nj[L:B7^eDaj[ti +%FTeU?Ct`Nal`R,Gs30fb$B?/De%VjRn5]Ud^0g_#5r]cNs7pX")$)us#`u:g^;8J +%0.GhJ`?~>
endstream
endobj
27 0 obj
[/Indexed/DeviceRGB 255 28 0 R]
endobj
28 0 obj
<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1 +VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH< +PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
endstream
endobj
22 0 obj
<</Intent 29 0 R/Name(Layer 1)/Type/OCG/Usage 30 0 R>>
endobj
29 0 obj
[/View/Design]
endobj
30 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 25.3)/Subtype/Artwork>>>>
endobj
25 0 obj
<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>
endobj
7 0 obj
<</LastModified(D:20220323205942+01'00')/Private 14 0 R>>
endobj
14 0 obj
<</AIMetaData 15 0 R/AIPrivateData1 16 0 R/AIPrivateData2 17 0 R/AIPrivateData3 18 0 R/AIPrivateData4 19 0 R/AIPrivateData5 20 0 R/ContainerVersion 12/CreatorVersion 25/NumBlock 5/RoundtripStreamType 2/RoundtripVersion 24>>
endobj
15 0 obj
<</Length 1442>>stream
+%!PS-Adobe-3.0
%%Creator: Adobe Illustrator(R) 24.0
%%AI8_CreatorVersion: 25.3.1
%%For: (Minteck Dash) ()
%%Title: (Untitled-1)
%%CreationDate: 23.3.2022 20.59
%%Canvassize: 16383
%%BoundingBox: 31 -241 225 -15
%%HiResBoundingBox: 31.3215514457943 -240.527387044905 224.678448554205 -15.4726129550945
%%DocumentProcessColors: Black
%AI5_FileFormat 14.0
%AI12_BuildNumber: 390
%AI3_ColorUsage: Color
%AI7_ImageSettings: 0
%%CMYKProcessColor: 1 1 1 1 ([Registration])
%AI3_Cropmarks: 0 -256 256 0
%AI3_TemplateBox: 128.5 -128.5 128.5 -128.5
%AI3_TileBox: -178 -524 434 268
%AI3_DocumentPreview: None
%AI5_ArtSize: 14400 14400
%AI5_RulerUnits: 6
%AI24_LargeCanvasScale: 1
%AI9_ColorModel: 2
%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
%AI5_TargetResolution: 800
%AI5_NumLayers: 1
%AI17_Begin_Content_if_version_gt:24 4
%AI10_OpenToVie: -419.74418319622 182.16998698165 1.36594053131642 0 8056.15812628899 8171.47224150351 1428 849 18 0 0 6 45 0 0 0 1 1 0 1 1 0 1
%AI17_Alternate_Content
%AI9_OpenToView: -419.74418319622 182.16998698165 1.36594053131642 1428 849 18 0 0 6 45 0 0 0 1 1 0 1 1 0 1
%AI17_End_Versioned_Content
%AI5_OpenViewLayers: 7
%AI17_Begin_Content_if_version_gt:24 4
%AI17_Alternate_Content
%AI17_End_Versioned_Content
%%PageOrigin:-178 -524
%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142
%AI9_Flatten: 1
%AI12_CMSettings: 00.MS
%%EndComments
endstream
endobj
16 0 obj
<</Length 65536>>stream
+%AI24_ZStandard_Data(/ +lU [QmkmH:SdwỏfP%0Y +8 +RcKLIQ<WZ$Qw)6w^@CzMoA'*;>+F٦lΞE,8գ}65v,Li0YVgϡxsw]VoC]!M{<5$;hc;Ёw< y>oJGQ}E*^D*BgbRQHQvrE[C;RDsquIDu" WJUvI㒌ƞ$%'f-13tBի'-2>(vLeK4
aidH&%{[OMW~w$.:\SOg@p``<çCIUhw2yfhfu'܃r^h$Jsnu+dqwXfF(B1&[wŲGi|>{b/SYaD 80>pPB + *H`@p`Ph@p@p`dp@p`H88X +,"qH3,Qe@,`$"nna +ÖvcRHA$#E=Z$0cD9d,A5ãEd;$u52GVUUIՁG
X$҉0eX(x@p'0CH,0jyVIpόJ,`-4YXWG) E jF3.^(Y+]IԪ3S&m]xxgLpL 2ʐVfDB`a0qH(0!#@(bMP88*REψ%CơEC5<B1UU] 3wH, 3L<$CA|ޏa(5JeWz),C|J s~aeՉ?3ol|2Fp<D"H, (!Oa +ZM\C!*QZCl!,a +[:;<pKpEBCDLȀMJKL"E2>ھF8afpO_su8o`DFaDBq`8Ô? @$)f9 z`p\АA +(po<<ΨRf&y)G #:z4\@ 8.pBlPaB1h%*es,s2H wYuaP,`ẐAij2@D +RP @ɔttdTTDDT2袊&(b*Nf1Ibs'Ʀ3`4VXqBP$ BP,A1Yt-hQ[.r/8,"H,b`X0,aPb b(c0c8dHd0pÁ`H0$ +Â\&c\"C>I\Ec!p?_ޝ]o!`7[ڙYYmD!P/ +8D (!aqPq8~!x@O?+0v}6Vc`\0jA.fX(8("8)JA*FX$DxL`%bP 0q +&4`@"X +BFsffd9L氀q +c:Pq
* +6p +&D `!B \@aЀXp!*PႄG$\Xh@B@&L`p¡"D(D`B +Pha
4\Ѐ4L@"&T@$ +,`aG +@AL + + + 3H@ +
.D@V_1۱@@H +(H@4`!R
*p4@B
"PpaB@0Y^ՈҤYMHUdjKzGX! ·\4H@ Ph + $`ЀB "4
LA.4``!z1G tP0 +4L`A
X +880@(PBÄ
$0cV +pP !h0ae=8}0A'6\04LsP,D +$HA@ +$80@(Hp"d +,4l
p Ppq!B*04L +FP Pؠ\H@!!hHJ +.DPP a>a (P +#{dONwfFq2vrVKxD'Y*!~ХK]nJG"LW}-_VczFK8YiYj|y7eF1չ{^٭-9hDSk$+<}P[_WJwӴ4::"hdyt\}N=,[y9j!ͮYFK]IoF5g2!:*3`ݝsw7U]ruO^jgޡϕw7 +{d5՞yg[&iG.x:é)9]^^ģE{vβ[GwsBxb6]-4Bv"t,fOՃm;ı<ϝUejx$]OΎ:Fd| +7$k#+pz/MRv`j7M_dzfCdl:1Qr9 VLe =3kSQOA:m,~Sq3h*Z+ir|>33w7I5uGy%lt6S +so&h|#9k%雚sOg;K:΅|74o&l'Gv6:j.d2v\$KCDk2v ZGfK)CO7aH'yGsLȚɣ7Y_q3x|\< m#kRvLgݫ-2; +q$:տgWi&@BuИtup,c&]+Sa-I&NN*xL6!]ӵxqZl%&&yF<ٜ)Sq**DJ:N#dMLվMI;ܪky.-usI;nNI()cdڥ +l/Qgګ(y,I
CI Q_q5; +'.<ʎBwFG}3if#HxԘȱp.㣊\2gLóUZ3=,Lbؚ zXC^1ÿEfQDASTif
ސU>$7=w?K$LAN<"sἤ|iM£(G^xV#2OɛwQ~z VHA12c4LU"IJM,ƃ,3<R>D#<V_y$$QWxo˱Q-x<zf_Pn87'|xwyrK8u)+.yLA=%7YJ9;rHȈxR<IL<F(̝Z?F*_uSS4#Ѩ-nbÌF +^YeK8R<T:Ǐ(O$ԏ7fI2?:Ýq2XbUq̏lMK<Ly aćf7o4(m~j !800P+ p ]p&pP 2PP!c,\ $@.P \ +`,8 80
+pLP ++ucbZ +o~WxurؙVyGФҜ:&Y餐.+_&ZWJi˰ +[w| +*CYϘ YnFVkK^'2hwTx֧5Kx+yg5^SfahbYn4HUVK|bMպ3՚pַTTX|ԺxMj]j4
w bg~Re6(x=J_|>w)xbWyuY䤒֚e4zFxJ҂KF2EQهvv%^aG!Ȇ(s,ȊQ>FHh?* Ap`` +(9?娕Ej9Vh#a o״VsCUy}Gtز֜iqO$/0/;vS4Pk{qVSwiP]}sRDX+RVE**㐝JNòQ"nFSY:'QkXfO>w˺KŬK)9{>{ YMHF,l +[>٣;daAֻgv˱Jvudbfl{e.uvk?RC|Ktnq)5mH
ء}J(->5Y'RȈ^~DDg%"Ks^U9Q?gW=iv#<q) +jo=d_Ap`dp"z˽QG1WYzpz;!˹d9Txd]ψVT_[*WXǜHMk:'B
MVlfb1
ͺJw2`#wv$*ѥݧΤ\ b^E'}vfP!HiwEK{FEJšbh=;p6aٯttڋDE&B;$8BkZWU{J_:vS2J2m>+QkYyefpΈ5VL*̴%#U&enKή #u0
ˮObr>8eg9@WK"YϓO`\WR>Heޫ#^>(TvdCJB{NhAxɺ:Ol3rJ%H̨c/fF?f_cT(nWtE6.Dh +)ճVN~/jSw74Yyuvj|K1
-|+ #^sC[yW4>h +wsWYHc1k|×V4V9tgҺ-)G9ˌBHH6LaZ}3eULАQh8'/-d<l=x)8t,0r@<$t$.$T%KJzB7sy,m.<.MMc{E,ݧK^$<Y>D(C_H~srf^ \7c!3i״\mwxfx;C!-AWş7vktu7]eBꞮY$Sa^&9J)e2% Fpzp~$,2aɯp~6UffKsuro>'eβ'+KVQڦǞ}Swzg]MR?_άgV7e6vٴn[3Kjb)\˲~JT'Y5miOcCh1Wir2{%FV/Vn$3!&yNe*{<y/~C<yY|
g=YMKtX+m28V3ntU*M +NX:SHM9k3z{eV H?}n$ssyT-IddWS/=^$ӳNҥ$ROcrw&S_˼&N_W ڨƬ;;iY}RKY+l묯ʬ:TF+C/X?KxagJ=fs9Z-˰nXJ,#ezzFt8A*rgIE:982Nvi^Es6s-ƆD5t(T?[Stc-K<j9j)m+MS#4e$8Α$}:<mWx~u$h4I#O +^Ŭxb褬i?vlCTӘ6Uwf8'3q.tdvWF?}L:02ex6ET5LK9eǙY#)mtzKBqù9"B*Jǡ)Vas:hN&
͚i;>E'˲bA6yU~6$SLLJ}8ta7Nkw:gi$f!p{!cdOsDX+ǜ>sgin1)3;yٔ7<敞Nuu1On"ȠNf3|UvUUSGslZc+d:"<>رX`mTUaVem1^oիHhwѕc<_$~zZ
cs6U:g*
h 80e,ybŪcV\uE[]Jtr^$W7'z +gLc5˰v>[$Ib%bU(jH4
oוܩd[Ӽ\9OӘ0O5u>2cѕ>*Q:*izw)u:J<N甮lD+r*ĩj>%NEeGd7=OXi]U>'teyk+Q*_e!UXɫN^Uq~[rziZ7PzzaI5t,\zTm3C23cOexeVW{Ts墜`Y]甕ͥnI*뜗8?Xx3뚅uΛe?g={yG*3G.ܘo%QWglSثZ:4Gɹ:OWe.Pʪ+ +_YL?r,(t'SX.g$CYb6ǪUdy<a#EbYck$ް0Y.1c7ʤhvgXf6{津Uj+ziSV0-+hy:2L"-ڵmȪ̃&;[d13;<+49$h(ꖵ>bƮ~Z6fU͊=*Yw&6#{蛑 +-6;xsgg[ۢfDS\6FsWʎetbfvjWFWRngwo7|̞5#Vx}2zjӔwbc{jsDwOh,4ֹ7UZwR:f=;2dYfug5&wfꠝYu[3TUx,&~iYre$K]ccݗwc +ՌgKj,c~aK;\\Hˌ4*LLTμ\]ãyQՙMܱoY4pl22d.+s^-cMNv#umk$veW7HW]dY49&3=6SVf4ŒNxGE5ݦ`+T(-\+YX3NNOptgQKOˑ<`W٦*^K.N<яit'YI^.Mt6薷QNQdS
>˴ΒZnpz)ҳL~Z%JK*LT~M+ѭD{XSγ^W*ASEI*f[U8#eKMQAkϪ Y=H0?xud=ӗ꤮U5k*2cUSJfBXuutTןrUDqdE7JMU|3E)|ޜM]PV՛fVR_%l\UIh8!CH +
8^FlZ=KA +Ѡ@["-B[ҊvIKKŦ8^x#,Lw=|АjD)N{ʪ@xEu6qʩmQCК1e4<bSJFE(>>\si.5Q4u?
Juk3k4J:)S[_XhjpIí>ޛi(a=ӊm!CZ1.C<UK(gIvldm*gdh1m +\7 +~'~^+xx2y>Yaӌm Il|Ztя!ܨzA܄qoN}r'/`RrJ~%F]".ӳZnvT#F+u'B+dS>+E>L8r +W8[Ŏd#ǜ60$B4 +[-|p(ǐUk/'`~$SF/_<]ۥ<ȋ%&E4Ԉv -~3!SQWBb/v1sHL^Oio\HF$)LVh>dMK +·
@
˸4)
ڞ(te9eBc5YO'N"$JQ"ӳwRa%*ŋ>kE Lb'$\]' (l쓚\l5f +P͏{@Z\k"a]lwb$lk%׃fl`-& k@Nae*A?cY+`۹Hg5C^#;"'oZλ _jh#_q(=5!:sV]A]uK.ğ'sByF9"?YDO!M7cU3=@P:g$NeߨU5@d(uq +DA8~eU࣏#Ù2opbQN0aMǵ<xJ{K^ AѬ=_5DM%"'
t{/٠}DY<r.]iAFV> + +]1ʂd:ëkD:hF|@?tmZDw<ZOKJjEq:.xx3_+j
+|
5v?)Κ<m4X=H
[S6
'REdydmW#Sx5B
5bP< +2fMk*<jjaU8h{"p<7ȩ*{oUgF*:Ը[5n_ܿ*-}ZJ +}0mP!? +Qf&sڃCifZ N,* +| ,@A +hTRQ. Rn*N}7 0
K]!*:FZz! 0S!]僞ATv2'ːf !Tlc f]T?K, +b$EX Uo +X
섮 7H7}JHBvTHB~e"c! +BLC̬?N +wAHzb1,M3UR@&ĿH(8A+VBRgFٔa +ɪD4C9> O>z8Go]A/y0^OK@`"uhLdۗ
_ +i}MP66)lZ7 g(b<Pc +P1a?·믫h?J~C,N6Y
"~6$O>,&K}j/>*?b9C@mgPJqpcdp'q +u4n0d+C +~BCq02jԬ)LN
Hu ݃gRIL%Ǝ7X-AɉTX@0 +|1mjח ة=T^+2;n~5#b\H{l|;07mr +1)+u Xn> ~U[
KB)ŬoO;RC3#lAEP`Qw Rw4bpȘ|J*؆>y`%0A|hK| +fρCuXcw`eIka!,],@10)1 `@0>+J`f"_[$<4@|}[Q!Ĺ"F];k.@ Uˠw8&D_
v_g}HQ64~[13*Kn4rӣC4;T7K9 +ǖdq2*.#4UUʙ, Mh#[{sj0zVG
6unbap3}YgӜe*W[ +sGu|A)O~zFyF
AT c)apXq3R(sfJ@\܊]< +c'ACMtP/UyX/Z`l+&KEϰޙ1/R:玒&旫0}&^_tcD +>Cl<CH+VTM=J6BC'Gk0/X=J~R\bƔXv$G\ƠKaMfSNzDgd8n1."}"#`WQ]F⾍/%aGu>om OVĂCw/a + #xf4N|2Aloln3Kem +D[%<@`u=mP+ns1O\;̽[['+WmPjm&wA5-1rp2\\DT*hTc +`<ZA)0ܥIq
ZQZq}6XA22"j)S2QH%9c Xfw9 ]`'huR/MIbs)O]]Ҏ\dq]'n䈒}:R1)ޔ#(9L4*t=jSb~fD:,hUjj030h5\lg.iw]O,Q +OcVzŏ~ ٯſ0`W?k
_,b.p\Z%lP߯49PV|OIJT`??~"`iUwfZǹcʏ֩ҪexR5-jQtoE
6k19 +/ {ƋTe2eAI<*H,l =pD\/rF eo*`P}=KEL\ܝVx!T)&?79Ck_W<LOǟ E<Áe%Ӌқb_mACo,zӤ}/h +J9}Ǯ'Pի(}d*"}sqQ!g4D|7D|>B?&X{!4*pYb&Ct0r.!B1˅icfkY-"굫YE`3BVUЂ|$˫1&"߷LcKxRw%l_Hc!%1
U%&~EJ=L:kɰ12
>kl/j
CZT'2u)Xi Yzts%r(uTslV2PHХUBؔYZYԠAhl%*w6C.V|hD7$QWYy4e D}L=ǧQ^⽔LEC@i)ʆZ Ds}2:HW D[
{w{C
)W9ݡzuV*偍hlwz;
i^_хPny X;_D7X1Ǣj_ +M^ECAu[xFžaēCfòUD$y2姇w>mfq`4h~ZIxfu6sjnQ b|b`w B{\~>gB-φFcqX{> +4F-p#o0n^x4h#8|8[u˜Ma乪(F:d<F|^+0_M=zP\BaA4sLj,$S6a`0DC~KحdwSD:FdntTU
%r'OQ(VlSfv1kŗ@';"DU,/(ōF`KFq/g zp/RCEEs̀3Wْ'/1'Fu$xzAE.9wږx!&Рߠ",jtP5I226EҸ+iH(ř +%&h&BeULVBՅ'1IR!uڝ:`sut!ه +徥CsW{MldoߝX o~(i}K=DPb +W%3]:eqHRg^Ơ*t FĂjXPsK0oÎJ7Oi&ieg3)̔Mi4[l=sM}V5QwRX#Ӵ껛3 +&;`o3.-" +Ʋ
= 4_,POy5c"zC/k=}z[q=<ʿFe̹)U6(
L̚pj6#9!3SGoA˃e +Ww<W㧠i7
#4Q~.NJYjSN@hdW*IĘ<$CGe?H3\=Bȗ4b0,R]0~ѩ +a&UTH}fpAϙ.KXZw5h.ͩ0iLC%Lg3{W +LXVx\xzʏ+.w"fN)1V]cb|Ę$$+OwuX3s1?P*+Oά[û.d<LBcIgZVt&?zR +#z:aL٭nݑnvryMV{H_PJWۮ*X#j;Dlf|$Uh#cK>zOl}(Ň>F8jZ篏҄rxFAFEdJ'SؗGbGL}|J1cQF8b?U6Ǡ +?R +gP">+ +Y"8gt]Ui} &,A7燕ːS +Ejtm7MƉsa㤓
lcU*γqROy]㴼qƟZҡH)&8)k⤒8" ;\R^Fӥԩqڶ q7T Nz(lK +m6@Ly/pU>_atV9v%8)ll@FKͶWŵVl1^g2PR6ˬSȴ_cItp0eDvyƖI*TmHf1ێtƿAmPDj0CGmԲhC8O9?76{h`dmң17
=+\ +^Ylsh>5hcQ _49(*>d8D$t0NWP30eD +KUޝrCA9)9(ƐZۡ7FK2tRetlLiVː E-嶊e
PJɖhYc&afͲL`\ i]QmRÙ +,p巐Or3lr{&ZɸL:i0.\EW'RJt +\6;i
|NPLEVJqaYL$fuh;֍/e'FOzC9N<@J/</,T*o +l8畷B'DŚ6-yyWp_XPAԬE#e\W8=:6ݴ'Ph$KA1i_ՔFĮj +OÓfPdTn*E.a2\uq.d]\x.K|߹(,:m-}-%' +aF L_k}/=<%=یAJ-:=a%WT.Xx2"k4jdhu%)j¨P{PXr;jHLĄSeUhH!:IH1P՜He1e .rRt3x!dӀ:bFcVDמݣ.z\x3Qcb{$VѢ (xM=R}$_j/u+@%OL>db}:tƣHIE`#t .}>KݎH754NA +QH.߶ 1-9x8$6Q.˽ie|Jb'ԇq|o:&fS&5⿌UfdRYwg8 C<!k:k=Gi쐄k(q0 +d54x?un>s + +O[IpMT'ČpV/@K)r=bHw<AEV|3{BM7Ja16<< +O 726hX#W yIF[j.$*RoK +ۭ[(0`p\=)aAtd:iI`?!L4F}r'P<S0?%g.g)SB1%-OB*&TN<8GArى$aA=xgMEQ`0˫~fw +~+ꑚ BGΒR(t +sY]"b5k:bY]ϼChVxW5#N>}6h
Z*{f0 sV
V)r"a64VظJVƸ]lΒЅroX%wOJ +0J ߯G%%jkc<s +xK(|5ްEș¤&Mr`sn44M&<к1@!C +бIJ5 +N:fY}2FNMwG,("'Skɉ'}^0R>ogzOB뾾::ߡjNɱ"S +zn ?7*!\GlDdI-Gf +WLشZ\L;D!BBfEk9XpX'84n ++zll$"/#eIB'Yl5ß
0DUg];|rU}v@&n5C ;Ua)jDNøsRC*杇.ׇ>N9v{VY#< 11(ERAG[U@WbpAJiԗEf˵z,H/vSA/@W&>TXχ]YlCIc oڃ0l9A0}Ӑ28Sf狝14?rN&ZJoK~LLfYj?|,C#}^c1
\ށs4C4k<[@Ɔ1)4||~ j¼vPr`7y]E^b#q 6Ji!C_DnWI˥ˮ'Ca@0QV[X?=QV +5aZܴ.'/#MVfk]=c^s6^!fz%}ujcdxr%ѾWUxU]B=&^AGbL*wE=
^$̀qU:'%EBcIܿhN +h* xu +L?{nnb CUø'F & fր*j=k}qǘlm~/\{_ +YN-*<(G]L i#°BF@2mQZ6wvmUb>!sDfG@Fsl-&f=_i{z;:Qܽ䡄Y/a=#=(/Fߢej,a*Sb7)X>a'Q[ rS\/8ub9Q.֤"*d +p?ȂDדR]{A[e-g[pnEyb[qT1+\m +*^TDABp&+kԈТBS8"2<Zfԕ]utǵWfZj-ki-1QyH9gcy2o`Xed#TOU u@燠/CPB +&$xNX>8.&y5[x';("$$I4X<H*wt0Q,DDeUHw:(:ZE-2`0:&<e^aQs5y14 fe{Pg,<~}r㿮<!.Y;;S45I*0) +X\r=.>@Mн0=[bsEgKC+[iԧG&ʲiZUX((";#/E@IOX&'* +xf{5Ӂu|1 +J7o`e6H-gk#u\t.ۣ#:tҖ3,mn$uJVa6KX1,DBd +$LY{{1I 1~ơxF#5B:wA(D?
H!q%!C#3CcHeeٯKI9\Ks.;w@\4ҚH'89}7u
LP#jYVMzf1ˍ|!a,Kw:a]l4O` +Є-N?%1)I.?%\\Q-;sx1J}QI*JL]P<SM"]05,C.CR3$Dl Ϝ`" +u@Y_Kٿ2gD-y(o
.uNy
ҍY0T&)x)077-VۗE]5|'8+.~6o=i}r.UvX=:}хģ` wFY[4("ieOs o,X-J +ܜNd_BփO$(B' +F.XυH.ņP(J*(![)N%uZTʴM"Z58TG*"=am2Y{%P^aMvhN[m|2RED/HnioS!
T.ĮF<`:6߭=(<QJ`A@|pȦgɩ&L
~i`'K|"vAv%FRd +`[7ɸ;TЄ +"mEϳi$rrxi/wKK3HAG\r[tXIJyH5"Hă-&P-PI0\s'`F-*JBkJT(9t#
rv]'/4WJ\-@ѝnS(HJJDL, O1_τr<ckEAynd7$w:bBn@6pFIg6e]nj]y,oi!TZ
j2WHF o={K̭T`j*)Cܣ2#.KffpSK؋<nzڕGNuD&ՅF`iO1+GL$FX=$D
Jڂ҈VbΞ`*&0 wMoxp{hoT&Dy}?PЮXɤױ\C8$;>Qku埮aXugǭ=i +J7_2t!AAs(BK0I"|GQQݍq~.!WZ+7*t6&!Ԙyʢ;.,1ޙhSGpO25P] 9-,]n? +,A#P"
4: +KxX.J8.SĿEW8+DTp̟ +JzȂ8g8NXc'Z`b)'CDD2!t8N]%8U1DeNa"O4GA>AbBz;U78ц0jQA侙|k24/q &9BVl&(ؙ*YT-̄Ԇ +U +c:Bkt.%Tz_ +M?3vW/>f)A,A?䝱LJ&Hq)dhUxE(Nھ*-D keJǡMg
ߢN[?M䅆3Ԡ(z9gENej&KaФ>"k *RJ+{`9r}GѺאyA4
N%$mIKt@nj<sH5r,\
nBsaCm +Ħ`[FHv댋]MX݁l8bdū^Cq6-0ٝR'V#"% U +R@ȥFL;y9wT%lW18#uD)ȑS8g%)9"ɭL(,HtH +$9Eھ%3\.oбpa d/6BP6۲kic&pd<vbyWԢ[}8=|I8ӳQaէ44=J.{"J;rơY8QŌ߈^k7$c#X47z$_ILuƃOpEڂ?)t iuR9("inU$Eg$M$jM9;fjƇ\6ޱH[j AZO9T}GOG[Qkik7f9Fv-f.a1+),3dF[ӽiɒ⌔-qsy +ErH,rrg 2Z +
Q➄U&:K-:IU1D:cNTf1.4S^jyr\Q:E'i@^bO1oRS֭ m;WAK>abiut(=TxjmADm";x:{ 5$]W-!:O:"5ק$sy4ȹC>(ez!E>}d]䐢&2/71'V=F 3V$ #CJ +dNQPbhѻ]4(:4!=8̓+! )w-}"IԤ;بr]ѹM/,thPhe"c +*N#(HTGwVT/7LHѹXhF:)J`òs%qCHobuxةJ}vf㨿RKâN?"- KZ!l82Ǽ{JRB1Z}TMѢ%qB/EX0DC2nR.qb}̈́pedE,qr_(a>+QeB*JpӪLZieVv3a5N|ϢLNGV J#*
B!yP&U=ȶ@ +ƑTIoKvw.K9+9IiJhE*UPd2<=LQ"BUI-{f,kԷ)#ՖCna=ܮ.Tv[ɰgZB%$ (BLشEU44bBco3SᓡR"냹]ߋ~eBRkH*`j'3?&tA
!Ţ5D$A))"E37%zU!!՞
'j{V(u"?SiQ!;}MCC\#F2BԴ[ySmG;oWԡ3X~tڸ{C +#-V'J|@4uk!NCE{#D1o8Hn5,]·)rPA15)x%E#rd'C!nhB/L^(XvmѢhlt(6j`14yPZ'%.S܃q5JSȰTDT ;2G(JЂJ "σs7 +jGn'lm脢PD8Dݎ\V"Rrpƃzu ruz|gHlZj6dqE6k>+b03!*^ks@>8AS9(ƚyZ6"9hY&xleI^&3$|K@,OQbV&},/ː!"#}`.Rّ!%-ٖ#*!h(Vc4Ҫ$r05dDĹP&"a燢id1̺ш9&\dWfBՙp̸3&T yX Ee<IIYH\.;SB^q:;(z,Ug6Uv2EdEŦ.ElRT4zk̍D[ZsC4-vb<0bwm{3b5Bb +5F&TzUtDSeд0"LV
ӃN;Z=; +aD+ +"TmЩEK}bA8eAYσsy <\%)/7Nx/%AvGزM!d$,i>5^جǪwfM96%XQ^f; WGKHKDcxHgrD1Ģy:4Zby )fղOLZ=
aǐ!1HRH(T;3:ciUWfUn5:P3mԪ"䪐.Dhfѐ5#UB8!} Xl'UVY?hp#@eF)'32ICJq%P578HJX)_ňجu|UuT$pLyj`;DlOU bfS:Ztz5WTƼ.TV\!.M:RFƖ=
#4Zer0iLYSL~%3Aޑ%HZ~n8X`ٓ:X:R1A~]Ix*bD~dA&D&*çPٹho**r*"cj$djH3* +r8hܡڃjS*I+3Yidɧ6u2JJ[&uq9pxB ízD$n("3(au~ՊVB<$aSI;EsS_)6tT92U鯩dP+KRuD("̔=ljHl(S99>âi*"ԗOB;=7RJM{Gx]̚QQF{%dY ++F,-oMtב=gZWn)FC.
"-KroI͝#{9*i67sJ:?%Po&TbCA"5Y5^9<+1*hdTՋq^F^j2[Og(O +O-J)FqP)zG!\<NC*H{#(FRvH C%/(<ĻD#%H%B%*҈#4Șb4Ca21Onj̈Ϳ|>DE^3QH.;1sKKͿi*Ϋ%W>g<1M4{2HF4]/2EHhyi>s&/l*fddÔ8fhkޡHmrK+ʦ~4(J,#㝟ˁeH/ٍvshB%qjB5%*6-8ƔtOǤE2.oj}eM ȢfKEy3d7;ikՄH:P lg*:Uk }.ڸIUAhzU"iJCzi>3 Ru*Z"n5Cc jsPt@2쓼Mq+WahӘabEBF(gE%9?K=qKU1j7W- +ФRj\]dcHeFƴP7Sh9<XLY[Bcң'r+hԑ,5T4y<-!NmrG82Dќ>%Nz>B~$H)La +rWi8=%ڜNysi}<3T5L-C3>(-3/яs'+BbYE!QD3X2kăő^1UR>0MZH82[2Bn(2WJED]+ՓK>:U3~Y($z*d*{[3QE+>\L;^A尼jE)3%"J,S[%ray*,.q)RqK4$iS~ЈU>Fjq?T`CCeNXtz_ -( 5x!4griHhF?"Fh1+EUC#W4Ħ}2EDE8l-M,64<XKj1n4$uB"v:H[E2E>]=[TQKp6$
(BxЄAAz +EʬO4L(,%MGyx㥢G'+.P1.fh!/[s5#f\KnZՓஇn15Ut("tMb>2y2`Z=I(B]?斶̩?*@ܕRi +cxNTt`K9_>𘪾z#Η#H'2'j܃Et`B:ԟúI>߰wMħ60KE3,^|cdrF/lօq"BO!UDa{#wo}NO5]L3%ֈJLxj7Z9XW{.6sĘZ'U\YEX0inۉޗRDZ(ݤ6Fm饇t4R"CMwtcFZJt.=cwߧ嬪Y6#SxQ*>ć_"4VjŬ4H|[j".ڸ[Gb+ 3>fP(&=|TːRh29xXSS'ņ[&HSMU|^݊sXCU)q!^>o<4)6[$ILQ̎tPĉOQ1G֑.K\{F#[);)KP}Ihy}IC;\
aN^-o&{ [cZ3%[rGNR*
N!-+.ʑɫ)UvjBA|$W`JUt>Ym&TB$ڑU.16LX^n.jiRdUb'iTgH1)3BO,$s1ͩBEC2XnΕV6)bϕ7/Uz6]jrgtDZP4j[Ż+J*BE5qMDPmFY9NC2٪]xH3Q-m: ɳL{k<j}uU+& E3Hͧ2dNuHj\&JdRs4+OIHQGl%,b9$iR"h$2$OZp,*eb<iMԫX{ǛԈg\Z?ADkUT%馣3LɸT'3F7S!vEUIu&Iø\xX
+/rUMr%y'+,"m_<ȵ#ҍ8EHdʼnX(.3>d4Ԣe)69QOqf8F9Tp}\jŬE2Pβb8SRzSRx)YO>"Ҧʌb:e$&FA9BA,b&OFqr*7B㼕j,|*Ϲ//i ?zNY'\u4xꊟG|O5ӛݵB3yZlum{b#H1n\UxU]GVB"X!
~s}~~&-hze6~5SIU<1yoFM&EDVW~Q7-6IIO^h%) 9[tjddN艋bfV'npMlx[Z9G! DQ^y +;'Uq_p:1N=ANl`Q79N/N)gMqUP$iMWt*t)K:"V}n<BnRT"!BNRo")(!
CNE!f!+jdt,ʥH1s5\.NU9=4דY3E'{\'Y%_"#GnGC#(}H>ʆf_+S.SG+_MK? rJa FA-]zˈDK'iUjlSZ*tʉWW!}p,>&'!~{uiSE4)q#)Q$IZ#$E4Xޑl_ء|]Mƙ/J\?+rX!u$,әRjЦ,39.1u)!22ȄU\v&X6hUı:]I66:^G41_]QK#o/7|i_'Gwnh0p@RA P*:CE:794~Dw& +iaQmq^Lr"(:eo6ZTqgjGz +
=(4dH}b$MJ0$l0f-k:K+\.TN9K&'{OF= -Tk +8K, 7")q;*"fj% #w*r>Uw@ +̨dpf$nf +Cb!ldَ6@(uN* +V@(" o* I~)Iҫ72(\|'H@V}RBM%t0LMYs%SvŴߛ*?|? +7,~ +F.o*R"Rk$O l4"S&NHģ|'s!S'rW` 1xD"~ G,Dܗ{lT^UȎ=6Sך8N))ecM8n NY3ȞopjF2^S[S,4MwL/5exبI18wIA6D4p2~.^=zpj'AʀP5yXblA֨A꥓} [p*.AkDla©;(je ؋$V]:˵jX,U\f(bp*7ӮWx`ØȃFK8(=U:j5ݖg7&NLuZat+FYĩ herq*3<3v#cYl\-^^rzESODa:VM):EWc6N$+H')Tɦ5StJ^+Lt:7ٱt<5Ej
P4QEj㻶#aPGϳtб<BЩJ{m, N깫lMUSc3@~ڋ(ـ/#jAsw:%8QtLc/$~w C:HfyL.,锔 u32p:5'0W[N=2\z:5%q\HF!ńNYCmBH_:ErOҩ>9P9nބS'dCۥS?ȷ[:0$mٙ]t*/;,Q%,^B-bJ;*(%k..%vJNک $i2?CԼid%¿}i[ltݸ*v)"PDSUC +OJy2ҧNED뜣T + +NsMo#~T3kYT\SuR}\^;,o +%N}vJ]}^49/#vj +02'U)F*}c;q>'SIɷS4NVQCMwjf{.FBʝ2KK|Bh{s|kڽ2S {bΝL0[#wjT_#`G>Ulv5~զ%wvwZ)NqtvXqꐮ#<]
o}NbТ;?'НriFH(?w8{r3TTf'(VvׁNE;UV(ܝ9T(c@8)h_'FwV78rE
hσwD;r) 3]<wjahܯS<n%%)V~݂y61(yﭫwJ_ѝ4N-ӝJH@v+;eupJv)pSlwU{Ơ6d}ݳa;(( +u62#ޝZtOو1_SLe9I)X)>z + +bWH/ϒч]P}| + W^QO rS̺T +×3iGK܁[Z=U)GтOq>x +4QU$z-%"IR2|JSJԲ22 1
24٩t ' +.^>Xuçlr^ZxO!K܃,JKPyK%xg%cH{E˲[Z>UM}J`R[ h§m=_aZ!,Sňm;AJJ@OMT황 ԯM3gT9^h +_: +y>7EͰ˭S:1 +"iΧ.egZ|*ٱWO]&oS5aL>_gSJO1!%T)R'Y + +hdV"D=e)&P>[4V +>UXWO|ŧ|!~)Զ5@2N+HfI%`:Uy|l/T;>YUF)8H|G.]V5\E|*)uM?Տ-)c⣐kSxfϷӚMݞ2P{1ecʺ'StD.l3NO3"@WJ`SpRўOOn/8p>59O_٧<e>$`gjh-6Qe[tB xŔ^=y*<Yd>5T܅}JƝ#9S!,oOb/?Ţ{iO%Z> +^-:k%ibu2.q8ݧjRc ާ\ 5" +Rjɪ=A& +OC] +YK;SK +s/rB.Ydɸnt$x=ńʨ,TRpϺPT>ra +xURj1{pC3A+uUqPd,粃T_)*nW})*[EJPAeRkۀTao!+AN:䓝A'GKO}ˉ{8dC$>G*osҵWPcI䝹PkVXsŐ?Lnoy*2:$/TZtMB9L)g&'qWL[Eqq $QR/+1wT0\w;A7vN +n[Br*FiO;!Sbhɾ4T"8o
P9`ő2BeUȄubL`S#唠K|HAd'TijЀ*1WQ, ./bd>j*j;L(T=SUPJ0B}P v,*]zF [bHuPm蔊)h&T۴! &`av.jL:'-5m<"wN_5a$qo/8{ ++z1YБT:jz:GF/
\ +q/@fft֍-I2z +UdUmǏTBm^1 +hI
+\bWRo0=cF*i"maJÖp +TJ;IXB|FND> +Pl0PDNP&P۫B5,5,|]%k~VQ\7ߕO*\JPBPry=NOE +vQ$!U;#>'$ +3bV'2J%i8*lJca,/o,_R~B(P*OBi"{Lfo2vT`EZO).pZJ\ +bl9?B給NBdo +)b>ygzBe\[;GJ4GJШQ= !{[ɼX)~rf=Z)T_ӟďq~b),J=`]2)jUUoPiȿܼ)Tձ?7)s +U@n^WGpBEitf +Ց
tJR*T)jdxkeUC|ʪyTR@JOP]zxe!^Pt^gi*CpmW<Tt8ʌfL;==TgB]c^ѡ'^PeO`
n,HU9Owt؛ +{vmx0Tv^շȢPU?C:2ZQ#y{ä+w]>0Ukj.P
HBU2lB/0? +Jʱ
P==7*)0TbIyCCUz=EfB02GgfF}Vfr<5㖙1)HA %dUX}IPr +HY
P: +s +qN{]n +>K=bJƸQ}S#fPm5hW4 +$#+iXS:q)3RWP5I=6̰r`x0T!&Pi2H\&l甹Q㒨PPTJ^l<Cn&)jd6p,`^TCW[ww*ÀཾQ?E;4T7fի*GI|"-MҠEq;EYc3TwEr٩jf0,XMk^6P^YiP4?A8TL߇Cel>ySY UqEka:5FT2T5ؠ7昡:9 J玝&9P%euff8NLITPl +c*3C[ jWflD~yH2TV^+:+ةPVݒn6Urg$2͙W`Ijt؉pTZ).uD smu)C[z2T[E.2gi3TN]8#5ػ{FCi>@j+FvtwƘ飄^[TeMI48r\YhcBq)2* !8g@e #vn\I*s*_GS
tU8dȭH*();+^ʋϽYF7j;o!TW*1jJ$'l*x'CcU!`4PnD TVUyp;UGmCxJ~}"\8ɄYd](,Ƶ]}a2I7Deq%!T-~!TM}ʮKB1r@.4c4,C&FȆ!T7*}*P$UHV[,>B0OHOX-,@u7mM;, V?e?Xx'0E~Fi6^\tÓ%
q7VyM1?mό6CxRΒQz9#,_M/=U +uZW2xfB' +`N0VSPL/ۂ8hB"-+y_Y{=hP>$?,SGl
ݦ\7:dVr@ + WBĉģRsUd92+:jSlKsCLUZ*܍sIA(8TP Bu=0GSjlP0HA|5 E5bĊؓMTudB)U l2(.c +hhPX#<BQ PC!T.dIRO YqTA8:}UV1UG UG'\;¾0ȅqi-|I/%N%J c1S+:u#rfA;"F$i>*n2iE#jO2!p_ +t#3i垹RV[S U!9t-#jBC=DrqeP}UNqNrb:|3C;JEY{KضpJ%tmMJ܅WݜH'璞)xjm`n%*Ĝ0z僤bL]L%tUf0XQ%cOQu'BP + +S&R_f>>jG'odNv% +H@v`[X5#'QZ +SBTZt.Av-T43浙Aa]*} W_U
":y/t><eҧDD@Bv)`{ZcYIu*wȌ29ӳ +N ++q4xѢ<v +!)&eFD_&$7(Mkz7Dۙd/$us/U8<iq
fsOb)$L:0/xbJX͢
җ)P|ݔ$_@<i^µinqOޚ&(uEtm7' +?@,f!n8z0AtN$CF˜)%[EQ̾D:O50wywA-m@zcmDtᦔfy)B-;H06gWOy0vV
rDK8#%8p!m'0 ڱ@A_|C$gfr'<B7_L +s)yܷot~opB7I̿El"ki!֦߆2T۩Fޛ\ +AxvCkaf:e 4+Qw4:%6DYdvDQt٢P' dHQ]VҞs၌@Fd2s;k +c=f|]r#-5Ɇ=㱫/g|9AΗS1^\<cQ67P0 P9ԺHs2UtfС,#XŲ?C]C9SRjwsT.Phohw5q)U
+K]'vgh&~Nzc,u&Ճ[dH#Ѱm/fo2r(9clEυ͞ `lN2 +sPgLrdQeK +m$q +~R3gtMpDp~zbF|rwlo&<e)_ZLc <vn S_$fƂ/WվȆ +!C$ JKPd/vEAў)Wh [2{ubbZ_C)IGJ$ ufÀ$\yj<T#=e&{30";HS5Gi.n ii!*I$5L*IbTRm1L< <V0bЪ!'Ar<>}I6*8K'5Eq#oRI|#)~Ky9rkyl ER):¢ڮ; +41&IqLF'ypV<\ǐ~k +*E[~:
+t+˼VA=[p΅q%631 A$GfMx/Fm81ȯ?ey ++-5[$!kej!lW}$7PmYY[ڷlhGu,#Fߩ$wNAzo"70' + +35,+}'t9McSn wjc,9NbTn +~.05SY*Sk߃@f:YRzܨǻ +Pq2xFZ
1A>R-ot]57蛭Lx)Bdby)P((/+ S)6GRwewLWEٓ&ʅ
cI<:XI=?ۡmB3ǯMtה05IzmJ3eŔ!@
%
~-U)#Py_UR**[5\7 + +;k%p*zfoBI_,1M)o@j_X*8 a +V12CO5hAL!^^0{ԯe8JCI?),8*ݙQ:Ňz"J )1Pc|J\Wm`jAA*gV*\ήaU:To/@@`[,nJprse}d#Zƨ+wchu=f Т]C46e^^$|uM!$h~h6-.nf79K\K,74`S?,Hs.1чAw8] 4=^*/O!Ph7 %HpK3|1ЙI<fJ,x9ϒtp͠W_cZGiW2ON]@pX߇X]Q^=p"W +DzWQ~2 +4fN + +>vcUxRS5l5ifq;ĢjBh-<>Kgqۣ(͟U +" h&IGZ +RFEu79 +3'/e
KQ8¢IDwVt- i(⚒PM,kB2[v.ۣ~ORިxM91_ + O4vUf jfmEDEJWm8P`7"T + ؘpb)+ku~Қ<A}~\PU7hUdQ(ԔS ʪT\mRni=xQ8dRj)zm3.(qkJQ~r
ʻD|k}%VVOWOi +PPkzcHyUj$!vޘLs䌮MU.`
ޘv$(n)bPL:*yvU'xk%qWN[>{A$W/c^~v$zHq>ηP2B+S-bh_= +$9E3JyOrP(|'Ҷmo,D|c:'x}Ni[WC@_wdϑ(ž-yRdpw`aQeqglJXsKK8ϖ"c#J tW ?sI0]{qt0J4 %8fĐWH$_ju1߯\ +ƫvfq~:adV?Lejc<nJ9l=
ɣ~
jITf__٩L Z<B-LNfKGO(]~cOLF "D>Ւ[UKO8g$ctzL;fuWQ.|a +S=X4|դs%0W]'#`6nHN茐s0>Gn
®3JZ0Aq2 +=V^X6ؿ#4ax +w-J"F +p6riB_kaȑZcvOueaܕ%
WUPZ!5]@'[4!},iFnM0]SRZV
i(lA_ &eF`ηz@{!5WdMK^ؤ\9詹oJ4,I솤7I϶a +Z1 #
#pmn螺͉On.# +-IoD +-JL5W/ +<87~Wx/nwJ`ma5|-j 6q"-Z\&\r\;kԵb0:UraQpQTPVJք<kñ[((BC_+fOqcӀ@o} +zֱ|`"qkpn=۷pZN/?e0SOX9HB9ەHSǧ0!bm7eB;猪243jRD%=#FT2u4x0: +NUMÔm.W2jUm6`ab;@4FC/g'$ +' +gM BSg|B KM+>1(R=^ o,*?,^
rqg\--;^ +Q|@{Blh@"m][) Xv +jEc:*T&[7gEDр Nxh^Yg +mfy3Ѯ4gdZ80W)@R&"P6rL=1o) +khd} 7_ʧ1kA#H?ɨ|]%r
QKLZw +H{ {e^iqk?h5~EV v\\}D'|Xod +Gh6A^JHdXIb~ +IEP~lh@o9o|LWٿ.7 Y[ɥm^hCҕR= +l^{%ހRVr.nʺ7pr&FE.fa; ($Q +>rL1=ms9Ǵ|#RAqQVܼDFy\=.'MءFRs~LtQhbwp_ԧzwrfbi>.n)OI2ԏ$V$>ɸ[\aY:)BY6a#y7Z,ÏI+2f+ncUpS"1M1xW`(|;;8ytdHaC7ͶOZOeǷ+ z?n
zCƵ:ָx|vo(E0W˵J.\/.";!=ٷׁ^hI[8+[4kOȆt.T1 !|Pv3_q@pq~g~o_VT_*Ap\Ƃ)q}e^{ҍ!o?qqM8.G? +
d=)
~C?ܗ#ގ+kW9g/ruq}ʯqTH>h TqWP!c:<8FсѸWS~N;$Z|7&֊Bs{r*.<:5}n?nkǹ'Ɲ*.p
:q-mFho?#K +SS^=
FM+ŧ\,5md[vo7+Dy4͒fJ=i0@-x
endstream
endobj
17 0 obj
<</Length 65536>>stream
+ώz</d +HwQnpޥ8JZ&,.KK{//[>T (''<W"> +"p5-yqH~+i,'xA#cv.D6YކL/q_3l"ةRT,@p&6bSI +y_ +wӿB:fp1ȏ2$2Y3 ! nmZҊ_Pr%_!hϷYڍ꧙mL]i'v;|1íia* 02jDMoQM +
^;,$Z +&p6{~[bf#QЧc0 +H#b:g\@BzH*X]?3 +eg6^ď䮖ſ{̱"fqx5_E +[!"DyI
kJ +КY[is*8?ޗq>w{ӫW{sf/U^uJws + +wT~ꁳn7l>kJ^ +K[EWPoř[6W哀4[_yh +;&Izsf
XRW$Dڭv*V(Ux*n^EVR`+VX0]|s,ZeܚV +&¤$]8kYd,Fr*4
+r +9?A. (5~{8opu ^ZMTiB}Y̧&(L K$14E"3lsup_}U^:P}R +pD5dbC$HyN~4U&)<PLg[rs3oϐ#$?^-gvX!GFk7LDg25>6M(}0iȁ + +Z3hcؠCuMcƓ4K.xY>>l. hNZ*.?as2<'fAR
Y8'[q`,i{%1輬@zי|zͬލm|/1LI{6Z +0WG1%=c'cA|H8t_nȠMf+@&q;㱪4D[WٟB*8+m5h{&h+pMΨlY(^vp$)}w>&Ӊe?tH6DNV3[F`FO=m{GWUm.eЮ8]
a7{ѳ}a
4h9Mh%\GQ-1wE(ͦAu4[6(64{j!;dɠf1lp h#b*:kgeMIDf3efoR
lR93[h3I:3[y&r4<`t?gygv/ݲ<,E8%
ɺ{9{'=E_A< mB-N'FәT$y ·SEpJ!'1) +;}x+!4t/N;4,N4Z5QN_;sU{OGV¡YJDȨ_HD-&¥BIz8ri=uߴ[ѫ#cpvz})6|Zs4Y0<lY0VGw(Nv:U^jT*N$KbttEXghoc=E{:"5=kGzLN~v@,N"+S6̆a^Ȫ-[au#vP%U)KyO skNưL㈙F'F.ׅM59;<٬xJ#Xq=f +dij-$qͪ?gƏ7=ȩ}0d~MEzW@<08jCbkYc8"߈`zf-: +a[?g$[yS(nEyjTBZ9O8:(qClmqWhǗ6PI YRwTr
@\=0nFfJC
f|CeḐ0©1VAMYȯ4<5,o'`Z*䦉 G],+ز,M>5gS6 +pw~#aFyV`zGyWGQAOis9sonvD|.:T8}Tat6<$VMr
Z G5벰$5١C/kJ9\MT5Sdj27ݡfݸ:͎}Uv}
JM9G1(^܁}PP +ˈ: Hڠ`Od0ߎ`<zmx%:{JZOs8~$峼!9V><k@;3FxLWzƅWcT,D\"m +ώ8dRPAPf;0g}@g˭D|Q7jư~,Xyyd7dӅ>4; E>̾l;% |[,|8)mfLzP&4r 83*TeW!0pO@ĺoگqտp$\ɿN]H%u1Gڸ?'4E~871;.nًR&xk$[FT^>ԡqԮb[\[F&fx/Q"IF<a ӎAXt&bؚ{3⽐#ksi5* +Zo~ + +&<mUz?];DpŖj-Rjg%J\Jcd|Ă SA+ ǂIscߴ5**Q%LhVe6 8B.ﴴ=R +~P'ܚlط1H?+V[TTȍޖQE:gp
&Ie%dB`Vunt7>&!~ ,Py0o~R3cCDff /pŌGP6'z`4ha' +2$'Qe!0_ޟp"trTLw}E>#EÉfOHSu0CLR~ivru t3jiXv#>3;A`GYaZhZF#uTӨ#ZdI=%ORB_'OH[u xa
a5 +<GO +9 +!"]Rz=ZIp~TQr +xbY O3XeYd}9~WUJZtKG!} +{Dw|=G]߯l-5ma5둢VY]xHlZUQ@zYle IPTFwCJ`=qZOQd?q-To%4D9X+QVyw,lSk5-m_.KJ Iq&t8*D$dθ +i'gBrcKjh$ꗛŊloH`k} W +SJ}I#S9LGK«ƍF%wPكt<g\P@oؚ#4 kO 俋fE4q^mRuyu\el +ļڈveG>{M^KO;Ry,qyc +eiiTi'+]! 6n%FhxҫLrz?α&2]MBD'zː8Ն$GQ$|P<#^j:r(CKyM$R߯!rx8jkO}3%#/'qkJ渵RL);Kї>#
+⢢"isCPXa(kPjd]8:p]NQW3E FpҐqJbA= ,;$ǁiz>?eCu*530ND؋}U>
¶M$F. +P:MdQyDl.*AE,N_A2u:5F^R!X +%8Ȃôa*a0
dD60\aTwc<C3~E ӴIMLN妲[pAĶf^tHw4NQbRQ^>rb(F..Ê**j4.j;)i\VfJNWZ*"S[brf]Z^}WnJ$Sl:Qb]~aǢwU]I+ 鳙WӞ܊zZ;ѨU|U*XTaEu17WkgdFL[YͥB:ڪJa߿Qw>=EkWt?jUp|j./,gO#mYEfM*ZOM5I43WR]M"҅yZ6Z|B=>q 7RU 9WJH.F[&gNDH",)~x.kZbxALPgCxs86K]Xo+ȖըDcJ,FjBcU*v^[J!D{Q}ǨL2"+j5)Es+qZB|٤E<=1<~Ψ'*LXO;dTp0rQZC^Kt[d:G$V(FVq^I+8'f3BP72sb?=^pNJddvŚs(QП7fSh=q7Rb1\4oPL%JgV"!5k- +GÔSi$W$^3ӊrVAjHy!^'&edQ0OYgjµcv626sD8%maMm.Wplo"nHQf"$
ӦlKV W$4sITp\`KK,`#XL6y%rW7Te+: TcC.]7PP:"1$qLVO-ui,D!E<".Üv,<DeQA͞ċ
uyAޗ(Y]dVo%IdQBB}{J}Y-MR*f$qB5ONP.{LCt&(J/Q)WD*n[~QH7:=Ɏ*9wZH>DX*u"XԸ)Kp)T^P,aH-tiZ .9J 6!1tGV"-:AJCD@a4j^D8~)j6S$ +xZNMSˁLដ +bbkA +5uLQCD%%U%U1(H8UdY#F<FuOxaS1sXS8%Clr6I:
{fah8A iA K gRlbzL[HImgEƢUj&#rL0MF+|M]hm qTG␢idM/.3]c|tZ%ƣG8Y䊳M+jK6
2(81!.OPU$c_/иhbJ R`,f~M0f"]jCE:FF?d]2.O +QR2{2KY͞+V_/H2Q0觏 _+iafL!ZNNzqEbnT^lwwCkjkSDmʕ6+5C1\<gާ +I:O#h635(ڜ&4G9aGYkgE'xv(bwI1S$8u:Kј+ +(U:t<meA i,V1wQ|Bޑj٫G2T$1Bs)h匜
[7Z7"-B X2Rm+zV.B#֣QjV3NX ;"%hWڬhTmV֢2y<;[JcVrpYݢKF|!c˄nX##FIk%!+KGH,ri<!DJ1*<: +ȈI'%wEaTw$E#irx3D,7[TEVT/qRV,4`EN +FD2کS8$|_ +oh1"eBFI4Y=NxɊ%Q:A8Y˜ҫ.&Jո)=$%]_*- 6zk)Mf1QJq#$z<It1d(3FokD:\$C\]$kd*͙$T]jSً({XDJIcHcw{t֠Wj_\.픈!NNt(d]6:+ NoGmZZLĴ"g&lg6v6Y Ɉ4UD'f;$T.Z*#Z%*aF?6^j@I< -FWD&q7GE0*r#*jA2.}>(=)OY'֑:~jj>Hu5N 2iJVkZ$:jHfBS8:7Sۦ<QxS|1fhw6$}ˌ$A=ѬxY;h
czT9u'eMb\e5FҌd<~"|D*&>JiҊFUw{#Uwn}VbL+F<EH*2c8߇7QmшC#3)Xƥ)X8>s +i%QJ$BI =edHHH +R$=eQoE;1rˢe1ST OC9BHL&OnBXk"spdyuc +2QO_6[r+bɢVaՑIQaœ51* mJc͙SĐ4D)*a/+U𦟙iMB'o//AaU*Yq -kfj84IXq'qJq\袋-G9u*B (_!S;ROo3&Ғȝ*Dq4W29f);YTBc KʩْOUAR"pդ%c1TB +Iւ!A42,q팙)}3ɾx$D<_,"I$m}̈́Fq7M;
1Du)wu7JS%R̤?77:ϛ6hi )QTWI2r2JD:ЉB!DCIZ_ŵ"$I#h$HA$&)G6,bT8X]F}e<$).f>tiӣɐLV͊"!"5mp$Ű<OXЬYu`Jp&uRWԴ+jek5V5Z7%ԯf ɑQEؙYӭS*g5ϵ51?k[!gb)Ŏ/N)J7VPh-(Zp}
O9bDB"+$FȚhQO}4![m
Hs!aeZJl4"&H +>)DC)ggY%gEJ뾵|JZn:+ei<A1$GA+1YS)
+.EܙH~DD(|
4.-S"2jEۍ\cWk5橔pY]U5r<xL\:Dn4GI2eJ3
+-AF0(-!acxTk/Ep8Ybc(}0Ę?"մ Yr5p[E39ѩZ (FnmN(B8qv72<26y=S;{kD$;D/vZd& +&nZKU4$ރ"%ßgDPy#-gȀ<` ȃp +\*i ADbi;xd1뀿:Z\tPt%E:MYK]#9H"9́Tu[^AG]
rJndLl_/AQ J8( +>7X40s=*6-g?7
4g|}<3A7o513ʱ.FfYT .1As1}b2Ah,`_h#W7h0 pVa0}!>l\At4}͑S$ֈ#+J$ p>{䛑>A҇|f>S2r1(aJx#Fqc͕/W:y5wMs :wa$n$c9|A*O"FtDG/@Yl(} GrN$F{xG^]HHu\E\N +-=̾{okXЂ<|H,y'8,xR4ǂ8T5_pKĂĂ$n}1"X +΅b`5AW,rH +S}$@8-0y +q +~J/[UZd1=r]r±X_]y렉rA6[YbLrdRa> {*Zx*8V +1
Y<Ncː +g][PAc\^Ru}Ʈml}\ŻTp%{H7U[,SP^= e `!]XRP& +) j}0DACA
<l}R$$Z~ӐO 瞞@w3a/xCujlTzqΛ`ܻ`-ecal[_3BЌ v07<4˲8S$*AE;%.JP$@$X4 v:j*䘒e/S $ n p~;vAm#HS,Ҭ cfv"_ߗBޥ 7Cq + +>p|Ob@$ +@-XOO- Q +0^ +7E
Pxu} 4: BJGJ:t-IoS%X8wQiqjKct@Lt@TX:2k<=F\4@P1L: rբn耈 :drGbZ(^1 +8JfmVq4c7ڼ`8B4peZ2Ke%V,ht$`,t#|G@̮kS:@./S`RwB3llU _50tU}UZ G)k绾 +lN@IKU(B|`3y9
#w V{3 +"p ]1x}"d + G*S +")[= + +J/ +d=e9cӗr$PʕovCe!Z4a/^r#pO剾Tt 9֒U怒kAD͠i$+L*?K[Seܨiu
asω~.7H||0&b*?O[Ο59V)ҰSZX2_p@%%X)$0@_WmG~p3P+fLo%IwC} +;fƿ
41?di8#J
2GbgA@p9$bn0b
L3`D:o@O+ɣ˔,^IftYgd-;2 +>:ɗ_MX8$B0֜]AAUl1IJd( +48dbBd̆dꝄЇ +_TO9(B9 ̆㠗鱺!n-yN~ +>jUF32tom@G;|CpfI +|e?IEXvP#f"XO~qXT4
4Ә`^,7@g5AzB~Mƞ-IPkI[W//H`4TURXpo7=|xM%.o=_)98U
rj}_# =ڷR[*?zr2$3Aþmg݆iC()5,JE\8yK_\Jă-
'U""A$ ~tEn\ ??\@hʈu92M{W^(xl]~)+C*F:ֹe` +Р#;
M[8uk'"`~~TS?S!-zJT^Uר!tTGl"|툈J?ǽ\Cl/9ϥ,a8!g$~~y[k[ WCPlS k4?ra 47;Gi(` +FSJ{V,!c/qתZ˯°V[w8N1i*Q1R*(75 3u}Ug\$(;\cGD~4^u#<FbmJ:cQPϣ)i-tB`f\8kYj +Z@Gq"i6@w
k3r`鑏~lvx^R +߳_ج،UF#"'X:ߟ ytnW9__I1 1TW9RܳxS+\č8D%GjQ\s(zCc?`7c_ K;
8z+++Wlq`#*cS5Dؾr}iΕ^O]4\$es}ZE3Jɔ>`D35yOrE;Wo
@ֿi3k-E]7 +;(x__Dm[y_nևE\ru!lQ@=߄]w߽} pǤ'+fybl7U΄< +a +EQ_(a?TQ|I%ЫkisYA[ >>z<' +y +I[t/H_vE/'n:GBNX6㣺w\ub|`HȋOJIY5JZ|eO:DX{<3tܚD4J +>n';dߪ~ Vϱ> +C~ɴ'aGj8jSI>-v3MȒU.ww +ho@r
y{uSG6w_ +Vbwu c^d_y:*|0]
gڻ ƆobC<'Ɠ/'f)w;j9,A18JzDBͨېE +Sl +M0#j7%ث딎;tu>xim=HH +3
z6ȁn5wiWܼP3
]A
ns\0ZE$m="Gվ\.ÁCݫdh*G[ O!z^N\-hJ%#qK/ax`{sv> +PNL:s
ݓFu֖C B֗7a.>bp{$ !EL;>D"ynAOԻ + +vacj}m<[`.o*}jQ*R¡[NJ'<SbGmў^U>e1k4C~_2b~ahU6 ɣvImj\Tn˚N|$Wn҆H @!U{b?ɧXF^7H|A}ؗM:4ˉ
Ca+N\{nl/:!\>!nb©
TcN彗$gyˊQcÕi^g}?twmg!egsٛt!gˣ~15Us!9%ܟ7qto̳Oc9Ԋ@r0m/*?^>]P_]'f;f_7gaVۏsu}>喪#6fC +L̛QXd"c~J6a2ufV\n~4;p;R.m컒3n5Jdr"=L}psT~BOrCG49p4=.l>arj +h?'hXpgt[r9Zzqc\rR-xك%/+Z-UXZ;0n}Vj
5DAdEMM +eDZ9{~3.r@4²Μ}|s֬t!BxL&N#|8g?8] ~Ξ+ߜ=QTNVgh_VfZO"sA0Ț8@#J=_[PdT7g?Qc^FBA'TYǗg¢Yt`ҧqXf0'
1Ulda.; ^Q_ +F}L +sxZ=2 +JX"gϓW.JkI]UUC{ 43MJ&c$~Oi*|d/PbM^uQF<Gff}}GG$G>Fd +fRY/TEtbyz=@
p:#/w簑oR愷FAdk +A܈dd?JMAl +Yj{Qc8K.76*AR!Ay
$k+.Kzbl3H02S=)VUWY;hQTs'I.}W@bL)(n/6,?vL Oܖ% +| {F1қRr8=EIW컱W")`),n8=*|Oʉ>ޚ鰷*V =nH9'w!5?[0*g^9}I:, OwրG`H`uUmͅ= +' Ĭ.qAǤ3]nzqy҄hwJsv%dJgG2"a ejdh^z&٪ +pS2OmÐi;=~SwaU +ڨgH6:'FcvI=DK +[.~x(8z +?nV>xֵ.חAqsʪj*v#n>Cz>LR] +@ױw-T9L-2(wufX2%&Hhp8oM36KS|(g~+D0<p0"g'klpT+QKZwB}[n\]eyWͬ;-4)%
g9VzhT0z*!DKu +7G1nb/I}q'>Bi]#fYbHKJ(ь[vZ'ڂNP\N=pN1/ +Jik]ݏ\XP )1X .͏/ӂhY=]y_YtÏcSBaaH9J^6]t㯣쿯.,BHWYxxҕ\[ou4ZƏj)'GU1^FEVa<s$[Se/ऩFu^+pYa՛]MV|f
?}jM#( R@5y{}h%pǎ.S4dXfHċʷ̄x#L߳ +Vz[9ww4&:n1֒wAQ1~ wMݨ't`eP߸07ubh#D}ũna_6>%ԐQ<iSrH,Ĵh6r8yP'e43WF0FԱf^'i@Ù +f-uk,mVZvP,sQ>,M|2 ݗsb9~Bi{%ϯthOey%2R1xw.U\i,)pPڄ*aKS1'SѩYe՞]lXqVЌ'ae,E.@-Y$KwI$݉+b="bfB3 {ާ1(/*DEG3O +"ѲQ])GE,7$ˍ/-sNOVW)COдyT{}>7vX~nxÊ2rR,leFɼ犒Ġ%1ՊUC +h@
N-_MEpu4)Bv<;4obMU:@?UI.5LucAe$2Jr9o'in&ucuEA.7E&v@v!i7
6W_fo _%&[1Iľ<uF^IڥeK8/V7~+Z'[4l|8 ~rãZwpQnȯG^IBF
PU>-è3%zdiInLnFvsE>2Lnؼ :+J"C${E\ "G]W Yib$k c uU\57Ӡf,lnJ8 jAK*R\!|p7qɛMl5
fH7GmM&I463Y7)j,@ZIq/âuz<LP= o-v01<y·b!ȍ:,gT(HP{i{X?_z@O.ZlBZDceWF_![ECip/oN(*BMnŹkPhRJzX䄞LxnCM"!<fXDA}ĢY/o3OXidQ~&,u&APG4$|T
Lnj +sC"ǟGCKH9ϧcaC;bA!V*;uQRɘ0d{|Hكǁ4lOUKBw3 HI'~RON ,ʺi^A ?|6B)L/ͧEKvpvCK.Ȫ*=pRy2{? +"N
2,U15|D"!>}_\FBbnd31,FJI-M⌯Ъ1NF@csde?~0~gtp98O|c@z\'d$ryZՅ4Z5UXnvC{|Wu{ i4|ZTI+sYFH5dkpn|bF +8ecZ >|m-0@bNjH~mGE[&dv$̓>d[+"g3?CSGWǧN|>x B%XIqCh]_WiGLǧZr!'r#9&:
?BA6:(ZjHj6>N˂%h_:ޯv\c4p SGa11őD^ +_⢍}
@QZƧO2o9*Kfqs1dB`|QPJCHz3-LkEfy
O. +jVuώL߳JKOC}af1\8%J]ORMF?x@Ƨ8zTݜj[iAG5p;y7ѼֹZ濁cJG9RZȩ1`_劅Y8z0LƘ7xQ&>_,K>8>Gʽ`"ek^gWv +(G i;XG5rN/")]NowFHBTa.:-BR аC# ɾ%벸$ۆόݩ% iΊK^>lTFI)ag8'*aAI+WV += + +0dz$5jaףi^FCo$6cyH9Eo|^>r[: gS$tgdbX|:CF6>sߕ]%;YƎW6r}jɉvrH.ԓ6Z8}m*IF篪Ho GDyҢsΉF$1q1d#>^Wi
/Eh,?:)0jJt|<xÁoW;}`nutѧ;O](}{GtMqrglxG]u #s)+1ǣ56eo}𑨷!7B3:>W&#"=RMb@{2]LBŧIoSo(oCFq|<vB)C1GP9)>Gug-dO5:EFSKh+F -=##n\\UD/ޠ[Gh
pHƆy䒄%b*GXa;>#b +6-ڶQ#txsO#Ft:#'[p1JTE#GD+a=δy!ۑ\ \FdP#r JȎvWiOsdB*&:RDFD"H;HGnOJÇr!3X\)oDr~2|p(WR42|0yq<8!9BM֑3c52&ةWY +B(T@0D[3o!Ot!R6ڠT8KDNR2[) +n
KN!uEeןZ2oA Sib]GSK7 p"@V|RK#^էRj"IKw98}IKtМK}*6z_P.8iCA }yj h{),ce~$mF|g26pY5(BRrT*5ꅺC
èQuJ\J-I
$ 㵤䩅8D +tr]JBAFn!#Kw(RPvC99(u$D{uvCDXʭmDΪLq!i5= +R=AQFl*[#~cmܰhDkt"IR#'p("&xo@RHd\S"*IGLɞ4x6*jwN^&'K}MTAH3F%L-Cp> KuX(h|D*!/VT?*A"LkYó堺ȳ&M5
+=\tׇξd6Stl#<N$3'<L-awz,d-o{
IhI<yL{b.o;4<Fc[50E6f9CvB˚E1oUqA2U;2@_G.R&xT +KrG|c[FIcIU'fhhYJ +2ƻiGSXpЁ&vPѐ߈n00@M,^!GP,ch&یjp6 + G(ª0r$C +L3]$ʮMgnkfpDw!bG[3t16)rm3{#bq5z<I:ln(f1{pJtMVg&N>ٿ6%B?IdG"=w^zm5uWɎ*aXsd`φ^ +ݝhtDsx+&;fl1 +a"c+j<7;8Gy:0ϮMI7! +©,t HJOUn|GEHf x43X5GTeAK'Fԙ.'Eqɠ6^6"# kS>G#ѫw,r:zY?jN'#c(55Dt'Mo覕86}|aG#]#1\K7Ϸ+,Ph#iu/dp)y$'ХUH]4Oshv?8Hd#N tFINϻE*7&6uG-0HDoِ@MTTE=$ +Q,b\'\gЭ$9SY;;q$VR{g?J;u$-(r\HiXVҸo*;MRvn@t>7>W$nI&GyXɪ.2N F/R:G+4@|a5NΨtIs<Z+=+,cHiPz~())l8I*;co'aUI>qӒYJG4_{])m/JY)֣P/JIndE)cPFmz +:hld-/J/M +Y(eD"Pz$B_xx,4.C}OPVA<{">lj+eAZ2Q3\xA)dINCzE&J 6<X[" يh`]Sjv,`+ o[#7N%"$D8Wk;awnk+S2u9٥8ռB|w + +
+l/ft${Ҫ&aHz^,K3#I
%Iᛱ@q5&x+`@|B t~+'I!3ST큡'kh)Jh{L)Ҩ:%GQ=PUeݓ'1kԾ=I|EC)ȘV-]&+Fv%8G\&1^HliUG.fj-=m!ÐKK W &әluIOx퐫E'UkƟę9xiɟ keHzn]2`2Oޤ+J B%\8 Ia\ e֘']r>-¡I݇b=zea63>.v4c&ܺPd{ +UX u6M.Y6. Bi.⽴0&pdjV%.jD+ +rE
y|҃H辔m4iOrX՚8)tgyΉrq%j +@I<P $+X]y;'cʛ×%KI +t4aU|u?Eq]\^Í[Ӆ|,;EF)x܊}* +[:Py.0w?#h^#_:#NbJR</.9egͳjLab@SD{ +̤.eNF-B$إ5/t9R@XO" +OWYX\ +L5@ZD/QQFR~eq2%o
t->)|yRSN@ +)SiL8٥;{ܙMΟW]F'ǕMhXps
ny?VhCKSs)^}RMY3K#E̿.Tӣqyg.D`qH5$_,lE*FEO8{jЩXK̜ͺG`rddڸ4Ɋ1aD b2ÞFVZpX=i ǙI"#tķJ(VYO(~O4Fz[xB~BJ +p+joNO +𧰱J)}'{: +JTM^Q }I"R*PHI9BWoRm%5@B7 +;GHN]:xV#21Q(ooFM*{J)@J Z=Z\uFiy +bQ J{LG"#y+f(>*4DLi~:5lͦ"C$%Rj#MZڥbξIqR(7§rzԭ0?'VwBu`aȭORnBW"\JŗRYP,iN
DV'OL͎ >Sr}s`Ěxye*6@Am)WK귛QD
Q+L][o +|βa +AOiOMU^-*/@7u +tY$?B?ܶ:y~x5=5uU/L P|V, +T(9"Mx%:/%sԶ +wR4:CyS)≔Hz- +JN.dҼ!6
o)R$ J#A*ST%+0y)Lr*Ʈkw +aL`#)\᳐鈁!~ +bϥ)88FV>&fqͣ$8堭[LDȕNuYRDpgWvd +fY{e88ݔjMPZ_pSQ.*2 NQ!^ũuzajY=("4k%OwSҵY,NWSUqؙJSsd='v@N32G:[SQ~qd[
}4n<|z!? +4@)!) +Kp7Lݘʙ7J''"(S{X~Dep*Db09M.A +)\2|uzLTjC`IEwoamPSx)qj=Gr +%NER")UN:'ހ&{*2N~τSŋCM2Ro)
ƅS| +⾼vbvԏ`WZDˇ+pϋdE8u\I=(jȸ:)L\ +2QSĩy9K`z݃8MScԌ)1$iujOj +hNf;pgs(Jw+{%o""RSv +J|A{> +Sc<`(pJ3*fpDr«ol7 f{.(# +,FfrNM-ߣN4br9+|4V?JFSQoGAu$+$נ*-6BScKbڝ75jl +Zɡ&7E MFŚ|SVր~W75Ɏ 7a%.lGK)f'$B._>P23T +_p*!
V7KoT= +7uJoJC7Z+u[x:o7o*Fg4]ߔ>ʓ^?]W'<rWD1fߔT3~b7epJp972!9oj`:ɔpCTAᅙ%FcL{gȝ{S;j@ʤ):o +E?7In-"NH:,ꂺ+7EyVNMM@]
)/nyJRW!D!iS{SۑZgG7ť2C[iX'Ԑ7[MѴtBV:XDBĜ2s@cvScL;(WRLڱe뙮!`D*PCDc7U.NwS/^ͼaQM+Pn8M*EJǵB]F<`N<|'{?[{f81.YȘOYy3^;M}ּ)v>)o +SMܨM@ib]oj +\Moo8|&On#_ǡ^ׅiCvSɋT
Bx>yD%U}$+RҔ#B|},ca!a]hEH8䂱Tl`EAee>0g&`~D Rܰy, +Ƹ!6qu($.[tŢi$H棸\Md& +t{?R!I=&M9 +'>1
!?XNYSfIiBiЋ2ADOg1ibO$Sf"
CIS`)MGObf%'уT-AW15 ń.S)MIئqF.^ܮ]~xbhی.̻ݏ3cbDBE]t ~0e$TC~ +%He2|"~!Lԁ3T/gZ%jsŏS9RxPaC>^-O/R$L_!v~aRt!bbϰ]hE "LIR`8ٵfŌjjJf_--Q\O@7~Q0)ğS\
gO+%/FGp1a2͈(%ĥS}E Q)[Q0AFџ +E +)*qT<jJfR>fT3$sQx3~UK*A9Yeyvr,$_;WJl㸜Z> +Qs>h
.F )ʰ`*P~hU3SӲ-ABcr?~Ma7*pMᓂd6b'![ڱZX\ǜ!tABIT:_*A:3ğmuYxjmhϼŋ?m'ES=t~!aÿZ:][t?'[?0M@Z|?JVQgJN'D Z=ؿaG7B||di>Y8D5B&FilAaM*=ѣ38eed|f<DG/L"ĸZ AB02V{_'u9+i:l~!3}J`GI4481sd(PQCY'UϿ%iþ0r"E/R;f'X-NN +_&a>H(5,DgC͌1n&/P +j! ,5oii\҆wO~}L=?P RS:Գ J5wxAQ~`3LPxgŃCkX!vNeg\fw1Efd$aMӷzb$H!$?f>cg5pC>1|m"IdId4bg.3'V$&>AV(<m,yC]AOAX?f`Payu5h{#l^5I|Su)$Q!BU/LMmԽk{qU^ۼak!3lJ^䞅C oT0A7JFxeJ1<bV㊺9E>6!>8SEkjBJE\ْ>~d7.b塢g}GUb+ˋer:(!oT~D'S>uK +3P'\qV[k
.I͂fqx +cg:~X
C%,'af2=J~yDy/gr9%Ԙiw[q̓p4[h;a63(BsD*KhFQ#csHFR-_h(33%D> C3lmSPBJHBy/tl2Q3B<.>\=[z$yV +@Z#Y +ӗK(7|ˬ,keAW3}+t6}엀>m 0R3dG-<x1eNEeQ +ar]kTS^:es$
\ X}ʂmV* FTYkW}Ue! +sxaY}0InpԚYզM^}G Q- ȚxޗSNV,8hTpXuX֧YN`wOJ +G0V:3Uj$x6h}^3}[iIyTB!e`bKY[18b+8O%J4>i$X46I"fYa2.F)
r,Sʢ\mxJ[To0SnNYz&[Fx&s3e! +"W]_Kc]_ʂ(P+KF,oGv}#(]OD'E8vEj{^if}U) +,)
(:EY +eey6CY,UE61 +FR.>B3Rk,+Xp<pbڢ\(D"ʢYP{j۟/?|j',!f;-w{
͡}(0t +~PDYt &)B,@,hۜ(TMhxIU +e!B@YV +ʂ͇YihG=L)%֊ +[6J'WO~A9 $俇#̂l(\$,@ɉUY,I(x!=b'(45bE@izd N@5A{5˜,fPE=,--Ks$SE%d)?sRo#Wdӳ +d(OP.f`]~j#FQ{>ed!V!ay,.3MAoH5)B5]SCܦ"Jsci1XQ*^7pcʬ(Rl,$QeGڹd/,RC3bQw }9:H =Daʻ(QD^&Ja pAU%?^j y.Ѩ;Hr2ʂ~oAIk +P-+˒Rӓ +MP3,)Q27R$pSzՋ`(76NHfDfYMYཱྀ3e,B Ӧ,AUAk>fB_N
UMY{.nOѺguBh#o딅 +p@z+?"1U3`Y0+$C/w,X2 +6+n;+Ѭ,:uH
W% +7Y
{RļDzԙwڞRA +,Zc}^Ymfw%,X|L_hIEvYMcT(Vp +,raF鵟9:eQ#kȾlKE>\T
+~XR +(dJ?.jEP+A?^%<|eLr·2ςW,; /ӯ,bL'y&!fER{2 +4W@"D8"(uO{8BiBwh-iW*خ0k '+"Ų +A(VDz@u!9>hXWaXrit% 5 +{;5)X,C@v+-ۑ6= k,u<J3 }FE0xg8][Z"{Hz[ZQ>ePFdV0B;((Tn"Ȳ5{ϟv-OA(,6OE +$ +sW,7;А;Yy6:^R
O#^O9 +r#MeۇrJgY]zzfY1rU3B\xW=1@Tn)bs +bYl +^_(ŇhA,MDrY>1"t~s:ewOeY ʙ9uW8v.&,H7(ea.x/Z뮐#*CkPm`<ջ wg{y,jѲXTH"˩vhYq uo١Jb;ybgY/eIeF#9bQGxȲ M/pd8>eY(g]ρ$TWEA`e16hB_,-i +k# Dhp >XVo? z,(BvwˣT(݇XB,: *RPa(DQ +L +J6@"D
IʢP +h ߾pGH+IPʂ<IpT) +?h4_=Chd3,oY4. rAh5@s|`gc' ceޟV;2ޠ/b +*R=x@ ?D)V=,{nT}+aa90;J2fe b{&+ i :WRCHFI'ahe<.4Գ+ +!|a3)^) +zeqD.}eJ<a lZpbp/ȑ*|(Ά@
+$>`d^Y#oUR!q$4T"K'Kѡ,J,C}=Sb_HGO9ɼ+$}P⊘2 5X3U^Bk;$aYte ĚN}=6kXB#oE*R" (eN#*{rN"x0ڢ%W"`Y95olM7*<\Å/ +Ybe5Tebd +X\cW?n,# 3e*+&5`YCƨ,?10F4ĚI0]uI²pKs>,f$t[,pv*yx+oBLQ +v)xR ~tOZv@?*<cBa_ +6%%LbYl~^4ݥ1(1{%<~!b"or7C/vo)xEe\S`~`yt b)Qto`w]GMwxe_YܸW J3y}eL)p0
X +0q +"ƏBJd +&ɼΰ?}eq%m?UӼQPȵx7H,p7`eZPP{FH +IJ`/o + +V2 + +zZ + +BЎC9lpcY&y=΅nGY,Ǧ1JAwT?zA"fl<,@|:+;idl0^VRP]?_7SP8bkT44BFR_:eBzʦŲrk9_g+& {$ED.=DAa0J§ᴊR +|xUf82Dz;hOۼc^,[!q/Z]%,Dt^aT48NPPvTgò`!tk/˂k k +8ƥ.=0U܅&?騈t@OYRܬ˾g!T,qT.OZةν5"O +` V.|uR<V'B"{XӇz'GY@D|
p2=@m<ʪ<tXh4C3k+"'&,~e1sB)s}< _ʢyy,Y0ke(3'D~bx)R"4 +tH%vxBk/u +ܿ:%=I=~i))V; +-._e3<:ek>wͰU*$ODʂ Ņpi{`>ʢ~taUx(,"r({/gUYe1_(Vҥپ;yCP59@^eQtyzU\0e$}'01XeGb6n&D(dnnYe1AZ^ãQq\uYe]aBр}'),0tuSY8;AKEf}'kB3FeqCR9}'N#V nNJuvb3}e +o,Hs)>@eE&!|ZbNkI{b`F:T,t$*sQLg=Aeʂ)ǔ\*X&rG"2)v8Z#m'XzK)ڐ.#]r-5SY|oU`cbN,SYy=ƩfQ5Ic%==2toLr4~1 +
V_wMe +b&]WLCD,-'X]tSۮwhxge*ye%]tчh6dgsP$fDL +бNUYUB9l7աjeeC T,9::z95̚je#U'ʢ`DQf$gED,ڱAƓЄm$u@ZYK)u%ke< +,VIh#TmeUn[(r+suS: %q[dZXYҥ$Racu7KA@ [!D_Z#mGpZӝAPkΉ,ZQ[peXzZY[CC!»4J1p~#!t
x(-qR(*Ih__EX-F +Eiw~]egAIJe:Ɵ~.8,AqʂH=_,L):<#gub;@* O;c\Yn$Cʾ2B(6`AaZaFJ,ijiO + ;4(^P5 M3'*̶ CKX:YYA)͌uQzNGYuc~!KG8D#0!D@X߿#{=eC0R<oic`K +LY]ůH^V[dLY4!?]m-'w;JAF8MSFSl."Sqb5ayO>)a +OJ*i)XfJ*,35p1ha:`)tͿVFA/:2<eLFLo,9 +Tx1?"?#*gv15*w#|7ҧm3Q1lemAX(B4JrM^e!vy9UZeA+q|6+(zqV~r;|1²/~ID<2.F6UYS\Tm
ۧTY7D/Fu(._fs1@#Dv*棨,D˽ACb +IXB"x,ϪkHOrqAhZl,J^NVB)ԧ_K9i"$q!,ܫ/i~IUrʘt"sBo$|YW\3і'$,Z>JrEUYUysFSU +ߚB%-EPWz3C\Rpa)l! +USp `vob_so%,$+g;ƶRYВ6)նM)ܐ7aΉ-u[a&DTf/D`#<EUm崮& Z8 +w]Xt
jLE\)u?!{\SGʢ]gA ea.2ҬUl +7|H*BCЮ,W(K<g.I( +ˊ"@AgmT-e +i&PVW7$)~pLR;vL@xFYDl +,yjSR*`>R(5b ^(M<IIFYReC@]hTo5,HAAI9+>J+8'p|'q!DcLg(,6_=`EeqE/{0(G~l϶ܻc{:cLZ[y0n(iVVceh2n]a:;wHjTC9?3ae]d +y¥ +3b(Q.}E]Gn:]84 +t({XҤؼ1Y0yOA~p P(RpI/),:`T; c'^Ld*hX0)Ue-7YpN/YA"M +,=~Wr&r'B$Qlpx&E tz&ƴ+N6)Y7Y +UIBdF``x3 ֶr.'&~.1YxnO'!:~:&r4]'gh-el\PRd!* Z%9LU Mdzvk'=]'GAiJ.6LV.)*n4ehXqН{|8@\1LO{&a6Kd +.oEDIX*j&Uv?CZb1y}JѨm>$8EZmDmXE&*|pA6(4^SWaM+hތf%C,g:N1didEw-.f`NHbb=ND7d=.]ɱf +S;jKgr9Bl1Q)3Dz,(9,Ţ(ر zN0(IΰzokFژEdJ:[,)HFu R2yw +#<
ݠWG,$z_]ڢlZC7`$2h,dZ<t1a2,`^?,H%ʂn\moPI"Q +e!^Pznpf80tCӹdwQz{`Gx<7O)AeWn"DP1z.y@Y+³5cgvnϧly#0Ҕ,mӌcT{=F_ż/Eym0s,~KZ~,&s]bCxXLW;_eƂѿ06,,`,E#Ⱥa!hyAsX-'v`%l@ &*E{|c_ +G{o+S2Ԣm>usPlWH[ +2ў}SHK4TNc&P*I"R@z2*./.n`)=TBEAt@VOA+?#|QS90;ũ:i8q.X%<K)zSun +l}iLFtRRAԭ3_ +fՍR:0ɘ}:0nK1t$KAA[?t=RRs{Ub%[H +Q0 +Q +! +";EaW'0g + +p)0L;Px<>!MR'@
LD5㑳g`se>HO%3Jq#[F`( +ˬ4:9!FX-a
*´KM(a̰2V`W Ef>\Bb^E캎$6*^bu +BpS P F +5b,0d9u74o6FXrLAaej + + +,Z[%HS fWYbQe%ey'()HN-e<2of&< +n̢vf?3 L%<=c3ܲ.%(DT{$PQZ7 JPhfٌPPmR3OI|Pj-3ik:PhPP@LOfj5Qڸx6;v3?FzQA6LC',(n_ +ȓ1OEn3@1fynvj 'T'ĉ}>'ǭFOfDO2OVA|xpwBDE;Q,NP87iԉH'?'F{ZN\INt,a&h8mgx N{pbo&ķ7o$눠9 7&U<HZUgtrLrV&T33@ЙؕZ3Pxl4T3 +IB3nmr{*vL<1#Nsփ%g :9#q`3\K,-)9%#g|g\h8gCq 劳[JhKdrV`-Ybc
4,Q+!_9Cƙl}DJ̬&Cv=~ +o$f_ʙk HFb%uW$FHj)g_
."AYqV87c҈HķY!FYs +U!$tg8HTNgqggB<q˙h˙g7Ό +{,@"IÇl!8O1;j9=ԃ ݦzwiCl\[UC`hQǵ2Loy]k
C\"_SS.BZ`!>5 +qUtv-; +b,ْQ(H-!짫ٶq-
z&@)mUF6\wU;6Kl&oFq-nK&q7}Hne] 5n\ vnqur$WR.mmMn<[%^ p\ pԺՎzSKʋIBmtVu.{ݬ/g7Dݼ9x(ʛwt] VsM79vO~] [J\ &/xkcpP_"9q`& +YA i|=A1pBpǫԧ7U38$sg+hp7dD&+e +'gSp z@"'/*@pk50ts}NC,W(45C0h(Cm=Ŵz}p8O~\:cSF[+@p; @a +.q;O
+^- n%}8ơgJr؇K79xRN?b8Ä*$X!,`:X0{X}&/$ax̿_[\kN$\bm|h4Z̍샡ǜ|@~ɏ9TP$sW1gV,E}rC`[h)|=o>T|XIZAVs~`NɇÌHBz0{r{yl'O>`s?s'j + +) R<@t +Ppi^Iw:]:uP]QuX@! K)yvXr!a2tp:0?H&9܄s +I +pO@nҸ +gJ+4Y ++H +|jU*qU^BFR=*\c,8I*ɥB6I3$*MpZ}P[RqPOS` t-<
Bh_ +j +T̲@| +Ba$])L(GU/A|JQ3&Q@..`̷B,[(4'pOx>31|OW&2̧cYAYj=A!VO؎o2_v$S +*IHh>kTO4d>n@ +.'S%<ڻטwLUee>gkl2Ja1L=A1%m@0.I"u|+|8zBrj]qTt%zBLOV5J=/|݄%vO,OQO +&pKK#q7 |zEsͳ|Ap*GJ*aRGQaIC%t^B ir!pFjgwWNM·
$H [ " W A?1a'.#`4BbGxF腍0X\2{JfFp4l|W^ +B*ʃ6oiPxrx?]>Xǩ
LcK D?(} +Jܘm>TJK(RJ zR5333KPҙv0
}w +JvˈQ\rO!A$K ,A mP87h!W%BkRj5u"/dzl]9"[y\M`.='ܞ3('.(fEWĆP1gg|RE7QpR&wgֲqUؾHnCKڎ!ĸZ +"✟T|rSx6!}5 XlIZ37xI%?4qMnO.;B.# RP85
E9B(F_1%%J"LOÛ7̎rV$< \K+eWZA2qrWnSpLN +.A`#*~gwg +!aPed-jpVazIїk#ӳ
:IʤwuNPnM6̈ĞY(
fzRIMoЁ$Kqa'ȖN0>Ck +08&(ˏ-5&qZ/
\pEZ1¤U66FcˌPb";\F8'F
~ T܂ÚUp!b%JcT#sP)];N` k~d=*JaQ{ +1}[F\
7YnjL
6%.hzX7J]"f1njE,:h(6v똖d>q7hJ+]S=?ǐFdx.,DH
X3y=Կ&9?XhLԥJ[<H]N-?|dfD
L.HYtLNZFC=gK'oid۰ۀٲ/(;geY^YP +=O%A%66r_];>[-%߅OTl
siviq"9fA8<cj B3%w-ܰ\u{~q0mHWiW-Ȯ< NJM##e>*'[ +Yr[k|L2E5bBc#ZûvL<f}`R*!7&X(
\Ad+R8Jǵ!LNAǽ#kˮZ~M_W1SxM^P+V64^6cTgéw4>aw5䰢QMHqKb +F%Qs +w1=hAIfvhyyM`۱'JN`X)°҃X̯!a :N\㣒gz~=õt;J2:bq*
PJ&A{5@ Wlrа*<(d|oΰpflXa6\l螾NrNӿpmXzO_==R1G6, >y}5qA̜8heE1JO ,PCAdHʮ +f˵ 6̚`uÊɬCta髦''}</: +Z,UQ&4)Xw$D3^)~*N9yyŪ+f88fG
b/[ 8}߆_cO0d`Ke_&feT6>(8ikԅN4a;AmB*E'
>J5qsrkzTp
*VZDLlOqtAs~u~VXˀW'ĒRbQ_23tCѱ=5iцSq+Y%Ac*q
endstream
endobj
18 0 obj
<</Length 65536>>stream
+{ +&b 03ºbZaԌr C<X)ZE,=]WKrs``LR˵ sR09gzG]3¤-[ɫl1ձ09eç=5uqF(2. llV!fn"*)dY9M&64xّe
{5D[RfwHW]-i(W`T^ĻNSe9<#N*9ӗWKȘ! ima='CFp9zH(ن$.KkY9A,q.yPC.щF/4yIԚbRG*,aR] g[%;/%/3^+V4>%1uI<-~avN],=% XbW$^$춝, +}t,:8㱘5^4_<8Nx>so<߱kkzX=7OM{]ӱi|y8^{s{yu^={<:x=;N75^ +2 $u<75u=mozwo{=wOM8ﱞi{={x^{<:uc:uNn<zyޮ}wy,v79v,WMM9N7xߴ~|N8y\w +y螯q:F=Nzk>o^<s>F^:<~ۼ.A&ny:_ڶqov^y=Nxc{չ;o1i<V9]zo۴9O;oic8mu.A&Co4^=t85N<빽x=n:=}x^tw|c1zc=;uܾ;mս7<z۶]n}O9tk}c{7~9y=y~^~<>qczct>W{_6tM:Vzm1{j\<۾sZX119O{<59|N89u>۴7n9}57}1<ILݮ:q~Bzy6w:黏| @;]1 }^4߸ yX&Ll͓ +rr:F !eBaBL<(a2!&Ät/^|m۸nz}b1Q:0?(oLOn9$&a?`0 ՌcԿ`^!]̨+HOa1>쓤 +K"b[ښ 6j(Dm9ţ<ÛGnMݗt,5krƭYPɄzLVğ(Y)Jٖoi?2jGvzzt(P5y38uIN[ o#ebb, V4cSV3KU3un7"!?C*̨҆pܚɫo<Z6!| >~F(7- +⣑܃:ۄүm8q~UGĖQ$#!:"+LR*~0IWqPr'%´S\b3<7<DFUhBY!k،hD(nOՠܰc^p2sFԆOrbOcl3t3FB=T0!Hu|3BuuN_¤?1utszKrMnq"K>bA+}0HܔFȀ|QIA 'O f5ø!UmdQ2IlCXN
;J[5>xG|Y?iR'5ShQ$gyS57?ⶌĕ[2bp
kEA}q/>;Nˮ)p"cVLo$-<^ZF&a%4[67 nG[NWٵ>;ɤQ9 +MȰ +nO\ jIX'8x
r^8~xrO94e*RW~S[1=ʚZ.*s4#zF) +f>R?S +0Ë2>.[k*c1:&"d>_G]bj>X?D
?M d4sv?ؐJܜJrMnL>c%+BdABؒzGY%&p^īY$jL`)~daSAeӓJhȫgi52X6+Z ? +J|0};`QrВՠ%IsmEk7?(!Y fO_dS4g$0CKVv1?qICB6C'p %ѿNq12qmP3%%s1ix!qjK]HJKz%yF"pH[fMZfO].h>Q1qӌN0S%'Y?WsoUt#E;R?Kl(,d.u<ؐfvׯ +c(*l,AE:Mm8
ԱШ-RG=ٚ}zb\qV"%=H@RgA۲!,xĒUtЮSl7է̎: %JfTsXC.r`ӛqĪx̒U`}X~In-V4<,نixXӖUdD؟WzUxPY;B闊.-a{vgzSqN5~RD\rԱ1+f@t̖ܳu+yE
gڔ:8=[`-z)Rqkf]#B
k8'5x4QK
_1'~0f5uGlL`2THO!%7gnƨ"ȣjª/:<xFtyG:}`|`>ʮ6=';C2&aSqr][0{M(cN/:g6(N,4O +0J`x4bԇ=8AV;ԎDМ`8M^&[uey6'qL7:L`${OtN[74-^f=8"l?!%lOܘU'NSU3=i8F76X&BbG]7$Ina'K&d;Pa%=a]J5}EԐ@ԚHVtN0^`BKΑ"3Y5/p +
~eUF-#s+G΄qkӻw<n7"bJf*eK0*E)8e>*іWHƪ07 V:>*yS
+6sv9̘LpNn8WvOp_mx0-*Tg_U,jɸ!J3[.~nX&YEW0[o{ cTaղzQrϮK>DL^BTU9'cv0nh5/["BJp8&g&7@&5GӂX-\,|>O?"{zw&t#f!<{;EB^vЮT؎x5ς2 KrsruE\J>$#tazЈ
9CywZ({yǩO[2A2)9%k%u]95qKtOܖ^{KЦ.;r*/
md^_S,Eӣ90q3XqEǐh~hbMnX䎼HptA#ɉ'.JE"tT:}E㔜9c,ue
.ik.)hԆymyPSCkaCHVks`^TL1xY"dr5. mU`T&zXp_^TLӣ_z 8|\xL)bbnE'.rm9y:wEU=-hwwQ1%.7hwE7`K&rkZnA(P?%2L,Jm?o8uFH?-]^k#R*:(E7]kVTHyGEȞ]2{UDW#Ua8!֧|dڰ:N"Jdxܖ$nZ߄VHEdEȜ_&(X 6Ӌz{GC
Q23{m*7xE._Ûgts
JaAˬ$wĵ*7O5i8wD)s>aUyh&lq +^49ՈԯR- +F
OpbbvG,#PL~wВca5Mؠ_'nׅٓ~.&dZ*b
,nK!Ete. +|mŷTy +ARWD]h:Lk]!*Qka4WeφPq95TϵtR6>iAJƩ3sk6",OdZ۲8uzTEH0"ֱ+ZF= ?FE&he'Tu:IlWĖwUˎJ 6L`LcpSED"D>"% [xbrڲN/NY]8/J>=qQL/:Q<+ۖy|3/{E-f(sMhKr/3''[lbm~Qrq
aK1ƴ +hUԨ`FU]dKeN-+Į){Aae'y|0Z 3Ҋ9e`tzSq.M60Jo. B
)bzeeY䔾cSxy@G<7>lF[jFZ%pP&N==V"8&p*Î.:.AyEМ5( +ϩ;J9t\Ȃ%]ɈnO!xW' +`I/ZSL/*vM\p@kvKrPݛ!W9E*s +k-}y@;r_l'c=Yr3:߄?,VLH+yQnSGl7 +;?@Bz[ʍ*^IdNN,çܓEeUX +U8U,Ja+ZItd6-;(1kQ;PNT(oPq J$&u3/=۰z=uyT2- + d 1\,N-Sa>Ó~wֱr[IjQQ~%UG8?XEbZũ"ǣT_1! 1FS$/6F=qj J}^4[7ĎkzүOR3U~eè"k7+<J&d;>N}X`Vow^dKHud镲M?"˒ũ9UvCeCuCuS<V 6ܢQn2MM*S,~AYr8*lF] pGY,fW'(D̪s[Z8>ZZYv:D3YGĒJhĒm|Q4ausx̖uixLwgA?BF_yz#qK>*3V'
Ъ~ܠ[ӣ_+9 +YA[c=-w-⒜S3U`2f]l[*CRA<("T)(0C>/9JpdrFDV\vM/-=9EVj<jɥ/9-I{rAԔF~J=u +^9uE䐾JtM/ۂZhH-Eչljxrq|U.2,$n.Xfwozٳn5`JeL?GmeI"2<ixOa FóSdkgy1ܟ%VDn֬f>*3ʜ)1\jj V;"e0Ax( eTY7U06| +f1?rU1r,:@Rum>=Ԯh?=UGԊF̪dԯb9U^rNR&RRw-BF +,4VRNq,%Q?Px!971?g7Ī0THY_H-\$3VK&dwe5^:>g +g]6,'ԚsCx2ׄUqU#R1c(ek!UjVH,'ӄSp*S +Vѣ%)ZrfE
,z[JC`vP[GcKrO^6+X܊HxvZ{zeL4bȣVLbE%\Z.*a'^1 +k-h)E24r>*/ pTacUpV>2{orLЂX?hĚƩPַ-P<g(2-^ޒWR֍QJ
bfNvLY3
pv̈́Y*YAԯB$@eB5ᕌDn9?WM.8֢~m~ѰY_Y7@Y1ICКElYXPnHaY];<LV:FɵJe4`*rj3`l5¶eRBT"-\MQNO$Rk
ᝢP P`3PDJ&<bk~]rQn:EŻb"dD|CHkv=ӆQ6Rq{ d*d$Tʼnxs~q--[",̞sb!H=ˆҮl=XQihܒIoZ=bv'$Y`#r{M}N Y!1Xpj\0{]˼6,gg;<2\<fGeիL^bUYYRcgʌ)eduFBU.c6<BvMlU-4~ξ!5<baDL3 -DvLc
$RM'&!8Ib))]GP`0lAxDJ7E$Χ5U*vM"YGД9O\Zb +ceٔk +HHy
{5nBqD*WJm\DqT[J]2¥:̏ioA>=PrUDZ4RT.#zYH5BБHoD0h7GIhR1m*vIdM . +~HzoT6;D(8"b1,u5ȔH\tOq +.fCdN\DP7$&W FzGO<Jäӛ3B<g[tL_y+T쳼Q0)N9):'ؘ uAF㖬bYEDi:Q^J
Or*)U$gyN*"ea1, +K"fKF&>S(fܐ/L\byOم_&d>SgBÆszYo}Q>!?GԹ&?̜p|S0-Km7a@r㳒ũ0pK b qKBVr&bJ+|c(E,181O/܂ÂyxRXEe]f敬#Z}:N= n`!v|c +=JiWIrar5qfPcZ!5g&啂{z.X4<TpHpH5Ѩ=/YJs|UdZ^"g4^eAT'L8 +~[ӛ<AFaUR7g1%VEG<P5+N}aRߊRE +N_aꂐ5a4lG;*`_+7O#\, `77}G-rO?L2/*ヂʫYnT2oe)۳c:BMS褾dQ0RAWG +.9yyYҲM="6L7ADJ;CG)EF~pπWFaq2-e'ôuB+b}=S҉0?S5h8E.h
Xo-%Vl>LBd +lU0nXNH*P%a{=f˽bW">ވpN-[)[DfCl +
+aԥz>OpOݖ`(,8lrT5FZ7ATT|#Et;Ռmf)"T-Q0q +*1$mЪgna[Ts윾I&լ왚oV}Zf5^̸ +h$5+B#g)HXE$Hܖs~0p + FG$,ܞe +1E(xCG ցf$DŽsnZ;bT^?ڰZ&L@CAڲ aAYF5L#(Y3K!TԥM0*Hd[1=sf;Ff8XXۄW2P^
qX 23R\qJ^&%%ZÊ0dj:tǦ"OD=Mcy3t6¤no.-&. SW!_L:E)Rb{zS2 BL&<P\9<kCi0qJ;N5>eKԞu& + DF)R{!A /6ɤ -# T~.QQ=1ڠ5r[Q@ #SS Tm,AnhHY)xK`0 [<F%.d=`;A +m0'lEXlj\Ax;@@К͍+ RN\+`":M%pAQĐBMi.aAL*2Y njHu!=GFT끊n^(.\j\} C˂UKmId84l2@g@5F[(& K+ +h1*DXT@DnE%G] Â +ZX\y+nq\`mpdH]{JDZ1$"L8I.2ߍ*\@Àчë@r,ĮLƕ䕲; v̰a8$
x@e@(8(Hx?2 q +x +ZX`A!$cCH+X٠`raɌ +$ +af&Hj0Ccj1 +*7h4AƀA +-fRX9Yawpy@ Cc*hwCB1@OrXX;t\43,yx`au`HmpkbTqZdD5Ӄ +|aA
\`D48p +NR\!8VԀ*̧ bt=pj@N>`L\E +3DWZGƔV|E%>F~PsCJҀYC^=&6 + A*HVl3`ّED$4Q" +S*ljPz"q3jPY"<:@hi> +@5!T`CvCÀFuN6Z {( Bt(`D醚n&U#0`HSBDРէ^2D%#SW 0nXrng:zڎWGV6.6\+VЬV1DF(1*@" є[fnT9>C, +81XyVqlT\AR|F_
dbR5Dd1,A*y! +/*a1,l6ܲT3C.!!(
-釰RB +bȈBvhZ#< `)/= \
l\l5q B[l16hgV];R$pK`:X'9'8[s~[vP1mEJ)y?؊>Qe̊l2Q"fLuA&q#w5C;pCÎQWC8Qv3J.ҀRS#}7F_.htdq츪@WOoCb9:2v\rNޕ!9E48(bvB
`bHVl:B䌼6،,สPcF,(ІJVї;BCGׅ-z܍!)&CNQ`Hg + )2+t+|W/+`㡅[3&x苄CC
vQ$5%UT:6HtJ萾R~I_:hgqC*Cȋ)VҝՇw6%.`x!u)hQU +bP\1!fB#|!`"jM''ZACNТJAˊi$Keb3T욺vz`::6А4̒,u4,4^r<܀9%qUzM`^F6) +6De#dHu`b{VUԨআ5^Դ %ȩv3l7Ўr\hG^%tL_7@+f/`i5*ؠ`fFԭ#苧=g8*a+FJK +M&tI\$jK_"<EasPCC:3@ȡ!UPSdX1BQhb\E:䊺>~x]uvpCqKr5lE[A+C˂lT`;r9Ӂcֱ!ّ+&Qfe"ԥE jL]kYfh+=vu:H]$lͯ
Hvl.]eC:"{ +ֳ(eڐ{uޒ-NwiEԚ_uC,zrWŐDΩecP0Ft5R{M6g8Ge-ÓUtϰI F9%jM ؉+geC(Wgv{EkFGo|UxO`, &bPc)ywY,4 ]#pI ,{߆_G0zADz,h!E.[잺#pJ^h?+\A%ԭ>9'X5\B$xg^DK{b[Pk]9wi|PY)e_ƢUrSZ~E'(D s6?XV!7F!:}S؆peQ{5}]xNlKEVX3AolFʮ)6qsvnͰ697B'DKXZ!pH^%8'D
;s9EW{NT<rk<<@ȡ!EaFFT,gVI*wUذp3Z5q/v`|qp3j9yMro:aS;9pG롦 TVh9QVSv!qsCDY
pX`7Ԑ<И*9x
;YhӀW߃L+!ai蠺3bT\#NEdlG<#HWDuZ6A}48m?#Ln' CnH!uܞ7&7!j1q0!(Ȫ&ܢ
`1h82ۂQ̭(+ߠevܒi~0dG#UN똨nETtPU좳ƨ2QLԣze"
=ExNp-"Þk?yi~.ϕLJ2iGXEWG(yDx22X}9LJ=~oZDNpR1='=%-\qʥ clŀjU3u;ZEd#gC藈CؔJؠ0*yǷ=~TP1qIЀpyupنQEp'J)N# +lN3?8'Ml?Vb@K0Sꎸ1yKvL]vjǐ(+jLKf-ۂYsnxEϔul#Bu_1:8fgWtSˎ*iBbT3!%UaB=Xn
g6LWqvTN:
c +^-:+R1+xԒŢ+ p0Cbid3UN.8 .Fa +<r[CTQ͔樹h&Ȯ/J#C$)0N9#:brP
NN uGU* +VDMp!Z]~X/LALA8ps[p< +>(V:OAG$Jpw.k,ۥ{EfvNJ,,kNB>oWYI0ߎ@ɵ@C{k;8 =D֯:0f,bT]lMA$l}PIe,YkANXX1KI⑸ +ᨵ{v\)jL5p +& +pm!<`>dWz'5'KC+B#<[dF1B3\p)or'BJTd2UV˻ΎjxnWt8# +6(cj) +%U?uHC6EB8ZFI.lQ]UmGv˞!ԊBqNn +O^K&L:e:G Z5;$d/Vx +Z$Hjr I&\20ϡ@۟mFC/ +<k)%hXnnY係(4`.A@];"Kԁ"'+tT?b[D<vDnvō?$zl$*8r4KnGчo;g>r83^6* ?ЉEryЙ4>IWQe +3~~VƠ9ӈ9DP!H'm +q+7y@>MZy9W5z߶tP%!@|/)^.qf{a9R2&QJz'rPR%2^6< +# +z)jA_#
IeMCH%5jZҧ6"u7#гBH.z-!|P,9z,'〢 +)h-%R4)Kl<)VqPy4w%}PDkc'
`n8(-[Y?1:N?mx{6to{, +5T>m=~-Ԇ)L +BD7A!gV
{Ə&>Nus"@ 쪳g=A%< 殨A)>yZ9쾈tǙusm^D+46b0)-g@Ϲ͚ BK6!yHN[cRd!4?! `/f}/ne|ՋrH$gȫFV+a9ÉAZi`$ +[ˆjpg^^a4pWb85E\>8\GfNs⇉sej<'o?3k"mprgJfeki;%XK>[S]tQ&e]&VsGqgmt%qK4IwRLWpZi$<цyGJi5W2W- 6M8ԯHe|8:xOڒ,(^ҕNCU)ƼƜfT]sQ_7D!o69Y.{[ZGtUkH>o7*xj1CQDJ821Sz9ZmsdyMbFǖs
xO8L9ܦ<2dN_][$ +319{Jm¯J~(*acB($Wjm$U'?sRw
p?'DZfi
G6/ã:t>EE\gtR;̵ +f#>&;rzS8!sŋ]6j
<6.),?mmo&%;p +ag#QVYեȒHG+(ֵk !VBKPd-&C&Fh3c,&lCQQ;$fhwC4IPdvιwEkS?EAd!Sj mH!Gٿ#a0?/E]"g)p? +,RAMA_'o!r%[WMDQ]}f/#V.2NI>)^LV0[`Khr(Zz`1_|y{OGMB3bm1tP +i\WzP<(&rYdfZ?ptvu"νZD^۩lo+%srMvcő(A/.3̠2OBΜMS6t-=eer[<bK1ɿcqUu6!h{`/\,̋ě-%b7Ռ!b+,
+aE3*Q?(RM?.D(Yb2 !*lA[Scba}(U|IJ.iD#2JMV|I(*]Qpl>;s+>ϝN35j_)~ pZj'rmah-K +F8п$1L|?f:<g+}|C9n8CpT6qd16nlFf&k(^:mY7Q!= Bܾ'*|du-kݠA} +uOA+\tk=Zܜ63K]'sBź㧫 SmK6GeEp"y4'g1O]rq|>K==992.? uZ/ك89 'y =i֒;QG)`0]AX#JUJٮp[ t~PN'V3(uJ|rt%ePfrYӜZ NvXЕ5䬫O H¢#Hk~T?^؈b\\wwr?yuA'C^-|pF$pӭ\v"L`&A
I_DebT)اAuSVhc +[xRt?e22
*F
/P K|VJRw*H/|Xf]w9W^pmI7 +
]S +$E[_Yx]@LfEZ~fv(QmFǑbm-Bz#+< L^FVhm_[3KC3Bv:2F:6(q9swøP7szy|XtŤO^Q`9|O{)A6 +NJ쵄0{`-t)p*
yVɧ4/mCKͮ ++O<:k;'XjsB1(ph!r4E>rXOa`|S{d9 s& {G*R.설oL(3
\!0T
O +oZasxa4(HR'@Qb堃iU/|5#9QΖOVF>}q^auVO}eCml
^X{Gzm"O1D3WVɁK^
bֲ}m,B&ec:IB1FF^Dׄ]
آ:#ꗥآ3;Rs}[}_<?~#qݤo|
`jP
]-(~ȓ%j'=9ar{<bz5Ε8wlI +DYAl1P]3ZjLi! 9ZRJiR_̕7`a/OǕ)Ji5T0R +6u]b1I J% a;̰@-DnPHf4)ԄNiyY0avf#QDȌ!\TߴuaCPk +@v\",eH*n]E| +(J:/h&F٭mٷ@֮ +WHR߮q{5SQM/7t^9c|$:35J?3oYf|&obneU1ۙt-AS{fpl+ĕFRX
6ԌUN:u&_zu5#)풟8ȭRĊ+0J7` AB!؋S)V/mtP u@lU皼jz̗W[xb!\6#J!, -1t(&~!-g3@351ڭ}qMKdTV|RAb#m`]H7\+cS=TB9ۘػ7l>CJi-ʻe3N)BH6`Y+5w¶WӜv +iz-jtfa_+_,1Uz#*/=Uqnn +;>X\iOL{Lh)wr8OzW1L_[ϖ#q{mdR?5->-_m*Hذ`|J<'0|Rd
+dh9f"nZ=tD"g[~Hh=CQDB|Gq]K&Ic#̆YpuIHii;Q0%6OSV5ofJoG[o7*6g;>>Uv6+@ +O!IuyW'>1qV̞ƔR~
`G\RwlǩNɯ݊7zviV Nerc#q Ĝ"6DXzRZ\t!
2""[*(ev`̇":rPͼzeJdh +闧j⓬x,uH8O:C迒k<.(
EC[\~+2`|E/;acF)D=~-G>
btU`BX( ]JK1a!a
B`a7:"⠄Su&v/
#5}Y]`8 +M 0m(P:H9.4vhŃel?(~ȫ(f jOOXB@6hR@ +\!@b +rЬeO^m8-FceH`n&Ǿ4R=~j?dS6^3 +\I\_^[晹Hw8U>*r~,Ƌ + 覸7WA(i'f>f.!C@?zW;΄ۀxĩ +Zű)x,RFClkͤ +~hZɘ&.[S[YWK {GʟeF`gbW'x} ++f0}nW$a2:jLѩ'ұ8cmc0eٌe{o5=L֬$рz-B:Ozt>C|;
2tɾ7bI>Atm˟UONfԿòi1ܶݢB4Mo +0`+
#JǸQ1/HLOL;i'U^ԇ`U|dK`+"F4=ݾ!ߙȟn}K/@!~lP( +a:"ʟ]pF_*jЩ%Ui}a8I)Ʊc_m?ꒌ"M>wۖx>B}PJa* 1gsK$vcZM}`m'=|ШɚYڌ? +l*VYQ8rVEđ~ҭTa~\u1{Ow=>
xPfJ('ӡ;п<(pY."*_&P5%YQdP|SxSFK3#lp%50x-nW-ݩM&9k4D\aR$}.e
4Ʌyj/H<g4BÊ\gJdB|ANWLid5?4QK-xHG}Cf0| +$J !BN $k
MMz%b䦘牆,g!Ƶ0E6]A7v| +- _Tf#]M.c<#uUp~ܬFpރ+^gg($oL-}d`}fP$^ceCdN#!OS4Od}n4y}G16$3px;lߠc@??C-3 @D!!i@F7)O2*uJϻnȬV4*#4e4"@)
@8B$ +E]1Ug?]ty]I5!baxjtijnH;L7Y49OȳHv^v6;tVGLQzDs5Y]1 } =F +"=%n7g`ULgȡ30ҩ*yjSk +)5k6)+߮yA8ycUkYrA4r?*S}3XhT,Ǵܙ\[D:9k!$LR?ha~`sor,(&|")h4!rƒIӑʰ#ȐPVlSNM0A@bAsIAO_̉|S72Ƙ +fop%D +СC]|m>yYMUܧ2R$|%U80 hLޫԳMg5/'Zxd~UYBsK,gr.}fXÙ +&V˘4
3lsb0*(ގ9&gĤV]eZ`/c'U
&3`Y(|̂H͢jv6`..Wb-;M +mfA3YQ7P|^J2˂ô`Y#8nY,Mq.~͂2pZlVYPdl`|VV +vKTxsL]qW&n#&C$a6a4&/Ȱa9Ն437ͤVoTahuMF,Db&X6+141Ā3SL2:"۸9g\LɟqAfAqY3/>tf{fca2;F̱q@5A构L͂p6dF,. Yf!,h%,dF"oK6K@b2d^vd!b[2n:rEiicYoʾǖ,B.7u%7n^v~YD(z}.Cfj,3hVhVf֎6+s'f>8q`8%*g,SJQ$6ꌎ\7,f16m:2sEt{rD[J07a~o
Qn#'h>Dff.b7jR[ +(,٧Y[=A;tB.[~M_YhkxY,0!Bś%b͂OX/&XcPlf٪٤y}s5 ل f@LcBm,Mjhm6g]lBVP6 +m[G~}[ n5[Ӛ͡)7en$v~
^j +nї +nC8C=0Y +Ԏfwfa=)Ҕ4fwp
u.33E,w&B5{xNW4/Mj5up5_6dAk9ӄ +zG5XVpt'k~øO!EyTpe1FvN1$܃I6.:4R*EY.BI5fj 4,(JU,hnlb,c.BdAH"!,hr.i299pe9rkkVNɌ.yAj([8pj +@eR\#
0Kp,.%[0N4V8Rj~TIfAl 绥6,NYǍ,*w\r9i}Bj=cbN%p~R7s#Ę%H p)H cs4]>Sm_/LL\Y)]E[qܜn@19gL-)pf1as{u͵=5U,ߦZs3|1YNyR4:Ț{PKP{m$^Ida"tbhf^ۮ07o;sf>̂ ݽܴz95{;%9mhD9r>gS9 +<钄j: +,MwyY4a#"TჺQu
b¥ԕSgk: |yy02e]1L밳Tuu#^BlUؽ,bpEEv1]1,3;}gj`׀BÎ+g;[5O3vUFpgŝM];wfafxLoSHE;Eu("ѻvbSH{]wݱ̢ALe_Q^f0z'bfQkθw;W,vۻfY(]ޡ +i!*9,pC;:5eu4)IdE|IYX?e|vLhq:s;k>j>u",)"F=F$Z2$Fnuz NDkڶT|UKM\+3g>431ʂEW֕|V>gW=o棍2_P {HF}ҕV x3Z"2 +C1fY(U^@ϧ@^P[,e[eYؘYB
,<f4pC$r/߀/kn]،UZVH +cm +<&?;W* +(}nF˙$S>aţ/V\o3.ib{VY,qEi)5 +O3<E>3,BIa5BAI6ZЗ5]WKIk:JeaoDMʾRYH쵶*G xE)kx9,/20HwpC"+{VYnWEN,TYxWYrvh
.ZCsR.mn/bg"?TV }MeP]Y`,A)$}u>aY콲G:WYwKj]*Cۛ+ʢ:
Ȳ(8ZYɭG@(>=dWVŘ#ܕEo<YJϕA(I߇c0@}(y̑>"ԔRLWY4,!}++ѤR*鋛>I_qb'}bSYiJUYHt83Ye!aYY̟FS]Jf%ālμO<M@0}w}8WJ)T(.5ujzdfff*믿?b<X<< A ,B"'Y1 +X`zFb9".X]iseyA]W >{限Qbs +K2zu9>zh5I)7>` +1NtCy-sTk:R=Ƴ +:NX(A7RÛZdz?xj^1Q1PP6Eof8o8MMr#2(P|,3=%LH%?qk֧HԈ2ܶ1ILM89@Ux)Kx z(|T{0;PYӫ
r˶ulZPﳞl;͒4|%ND߅նGھ#yZDivAh[o4ekdۮIZ]Ybm>ܺG+|.D"[XN8u;'vn3UE} +/^d^p?5ퟡ=16-')|\ +5ܭV + 8Gd%~Rj-Vl)O07+wN'*vCzDκ]MIa7ZN&J@y`s4;~&s +Z?P^b,F9fJ!Q|`&AgInBĤcqf'l()3mW$z1W\ӛփex뛮&knMBZ9z
=Q{;i}.r+34FV2N4/+Nә +"\GѪtH@Cv$kj?SP$W?BZR콋JALycrd)L=csVDhvm';'Ivy(ZϢ˹$eZ.)ʍ
|2(F 06z dx;8ϓݏIx:a.Yi)I݄vWTŖs +
':Ƨ'z8Rqp*x.p\Un +{n}9:D&oLBcubHgy6̪28n<R2!f$v<LfMtWaG1QBCH|Trjd]`$$Qr4Kr\|Gbtmڟ2^Xeն(Ke(Z<hN$D:}s.h5S]uf:轍,3U9HoKk]N-Y[B;I*ernGTsaܺfH{ 3Seٵg-zCa2OHs7ϵ3^w+%7E] +rwa@S6g} +^fnr Je*. +N!D +_Y +d`qA٭iȌϼRLuji_Zs]Co5*JMj}=bVLWn}D$:P!ʭ6iNuI1\Z-Dg%F|D``V-ua7)XNԽG"=xXiFG,fDo}U{
A;eh+"z
.ܯ熄t4qd)Dw+Ng4Z-9ԲU1g&GR#QzD~W}3
Z{lN +}S;@2-dy5aJ!$&L5[]n/6 +nYBau;z7]B0fb,ca;V7
Gpn<dVcrt.m痂t406ޢ=eu?Pฮ'M8]JeR\?!2=*w^G
ucMf6nYb{Q^w]SQ8momWfs,]ҐԢ!wъߔZ5^i/-O +/تw\hΨKF7P[c.0,G-翌̳k&5"1q9T;H1x!j[YXߴ=抍Y':#U~Hc<uFe4*B,m;Y]{W^s30#ՙof>djū.xem:3 \МNiHq%tІx-U@5v6w-PoPDt|
S-Tg74?-]U +N~KAvh5H=wTs}d6-8~w"T%Duqoڕ]{jYFyVIibo1[o%|Ullʒ[4IIZb% +nOk̨MUaCW\3,wJﯔsQDcx'Pc7Lhñ8p<u]tg9]ʦ˙B+,q}tWi*P/8@&wԛY ++~zpH9d(jyqPb=YnfD̺|iTTFDi喆$zݶ4LC=
)t"ha,*`q?ViHuLX3Kǫz}#}SHxu.hfҗ킬W~V/{~Kx]d&ҭ1y**Vf{JbY!NEq{;%yr;A>)O%6YleMlL`k&N05>B}"MB5hzj^{$VJבwGAs&Y +V
a<K
4 +s;}qڸLbn(,'V +t>c{,9.%嘒}i~DIhh~^m6L1%[ǑFjCjqFCc(xS~z~MߋcvͿrg|2d<5_%# +5י8_ޤvXO[lOoZNHW]3R>'qW&{5oВ$eȼ[CnhRobdӡtjqr$ڎS_K~{eV z!^ +REZo"*TVZS^f:U[c>ud6T?hve*rb^pN+JCTB26ILbT6iDq@\UKve4_-墒%#x^(HVfJe`(Y*(!,HY( +J(M؍SWIlRV$[lƌ̮86S{ʚ>%2$BCW)]0SZsbQj;KS瘢(VYQ(̭G˥VXвAk>kn~vHJg>9TR +c8$DTS!H%$ًYRpUi-ت3:tv[~lGHUYO$;O,w
j녌Ob ΌJZdܩ4+/4TVMjƖD"V՚t\P[~Cnu%"9oymN-ױCg<h|.ui؊NPgS^&IՊyFEenLL路Of#ggE[-
%09HVxlHp +7& >l@q!'<09DgyIEJ!%ZFH[s!kmۉqݷ
kmڎѕ +N#o@ِ 6D`!CF +" +%B~F(b`` )zV:E6Mj`&DHѲ!tؘ +kFU͇VEk@/rH~ 1TCO Q%T,J[:U"ZrSQj{hCHP၆ >lH@b&l p@,Had FHɊQ d
Ad6-D^<dV+* +%6<`@@6X
+pؐ@
,`(lhb#H`ĥ('}xNGThUPebx0@!Ć6,H +#6N8HeK"#<K+U$V+IΡ"aj0rd%T +-p`R|.X4UZH!G +0( +@\ + +fRz&%
Cn~x^g/vg +bԙR,nKM(n0"<:$ +tI&qt-حxKDwm:7`2¦Rtlh +,Z{z /ՍXij2Q_
%O71t6"`aCl$ +P {E]Ǜ.Ñ-̪+O*\'뽰:p`\Q
dL
dC6(hxa@?b@Pì +1Ćz.Ehܗ+qv( n+q'k i* + +GWfyU-e,y,Xh6@8a&f +x +Б2ЕZ(>[n!@}5H՜MEsyO2'"xGO^}b1æV^ԢTa|[0[;&wf*MJ^{zpWFc~N$-.֪Pŏ6yZr<ְfK +lXp +GMi$֨5hYsꌥ=-QO
U:\j-Oe-V8P dX;?RvT!Pl;D3ۦ@-hI'2h,5B[_G*>]Q)pJBxՖ-9h|G`@~Wڶ;Qq?gD;TRPu{ l%j)n@[j(N8TÆ`<ec6J7@3lD*-f*foxQYOY|Jp!OrGUz=XjCn3 bnlF)֛ܮ\':x@(z"u Bd넄t6S1;ѪlxM\6 +.R###9bqB_qBk35O[pD5hXk7%SFcaga*˲}iQD8~M*u(a%#,uqx]BOܚ<Y݇%l=Q֧q&|Uh.?̲ςz1 ~,#B2i%փ
c:&/)
3Lfba9"ۉ?_x$D\*ćaZuɱXthc */3G#[[2Pd~yFlEuf'CVj) sj<EZT+P,9L(?`*I'ɓ슋q;UsMb=5,Ē8Uj)Wcl?ܢ0Ю +.iلŪ?*S$2`̗~"x3 +Ƴ$ve<I]p$Me(Qk1˰[G:Canq +4#2aB^V=Xn&Ʋd;?9'zL\J;QՋڳEc|S v +P0Ck<Tj%Y(-I-82 m^o(ή6:Mef+io%_JDz(Yo§iB
QEMx=﹘"W/̢(N:"4bfفbɲ.bhՆUe<Qo0Qk'JK~J|_{CȊ8TXpTa&OAx++RN+ְ%а +7AiVhn\<Uh)ȱ^ɶyS4 +X:@G*))Xq. +.Lc$H0{{i0j0+O[8(W1.[1 |'vbEifMp\(J_*t|Ok.WF6FN˭vSۏ7
wA$l@<jSp;sn +uW2M+M1 S䪷<LnH(~T$S{紆,bf{\7mrk#9RHy/~R;crX̪?8ajڶtg +Sai_ Oiv}b Bv8vdf3ۻCjRe'1Y ++[0Toq*`4aK@$;F :_Sܗ1G\M*6
C| +5Jp$ZΧBuijvCw0Nsθ`wX-Eo\p#)4
=B03DӘf,yFUשvIVV8Pf0Q18,ؽ? +*CVv-Ir>hUwh1܂u#"u +`98i, 0Hf4Y yj܍4LBW̮Y*-Q|L +IJ ϡ'8NYv(EĚCk.Y + )j? +Nbj9d,4?)3=L"z
crq,^6vr~d^dzz(7/녆waԚلVu݈e۱TbX<%$-R.7ێ[Q:`p.βK~Kvq.:N--:mݤCe*fI/.C{:!@Fy"\ƭS[VnI#8+mViLVkRJdVK~kCEn<P҆1R}Z/;F%~PF9PZdPX$ 7֝pr@E\*-I?}fGgKT5iHvbk/-j,:ԄhZC]qmJ":UoAٍʈZׅ\Z +
[zi3\y(tGZnUsbh9^8ӫv}|Uw"-?YnV:Bo$vM +[sTRXʶDMVk̤ZNrTNUh;ڰfH>14bS꼌Ӝ'I~@p<Wr6m~zo<t,zv-akM
`g\\0[Tޖ\eoG+ +Y,gJnt?wyT;_ZYbiUm&swo(9]lMfxgj{1{K{72RDv!ghb 5$sZXBɅ\
f +63%Xr^nY|Vg8~Ef_kL+_rc96,5!DNu<Hag2t݆ uA,f٭P-3V.7ܮ-CtDMوS%՚ +a\c,+$vOGGA&-SbB!eqчMV'qYT()G%"LXbuۏ# x,F*sLBxlaniŧ1XPip'N,7pN$O,.ZMn<!>p1jQgQ:Ky
ԜC/E#VDsr>JJy,ZjKl#" D +9Hg;NDUKQ(lƋvqȩ2ѓLV\P,ԂWvZ@PUi/Rf%Lm";P`"bov TW^]-Vhx<@A,sz_VGsCYv<m[.˞cf/`)w:e05GH}A8 |_`Fcsvh~8f
Y#NsHΘZxM߁Q0qC_4z|mx+v&ܞjᵔ)Mum(>H6c"0 @!>=@Z\n;Z07Ǜ"~z跣P^g,=Jo]zz%ؙOU}/f|Uofzzn-^=P*Uc]p v+GdxL,'T&֙K~~}/IdL
A5C"N,3'q,sG4XRoB1sUR=mUK[bvkzCT6Gi=ԆT@IZMɆ7 Ubb!7~w):VF+q\O4>ㅹy'J/"qDTKDJ)LybAힺpKew)Dː)8{v]#,y~wCA<SĖ +1Ξ;A{N`P$NjF`yȱz6B +"!z"8!zjfH}8\T +㑺o<OHu&Ԣ:s15NX*V"8,1BlF)hU +/FiEfg_eZn%7p:/hJAk< +>ԒzO'I8.Bk1F/BB2&pBx.WXh K+7 +6Ldl|Od)ѭW];\^WTnXb& pJ7M}*D'
'pkVفfyC^B[2v~Wnfrlt_:ƓN.Oc7p]8] +(Ws!|H:_2z!E1>"CHτT+gX + (|&ή8z$o@ѶX]X|ne4^=ף7S%|NR̾x'bx#>EsVh!K>N@+4@Zm%Uj-Nt${Dd|K2]U@ӷu;6L\n#%9q?tzvܮ|n5דTH(o>K3|7A$EbYS썫E[^sJ>CB4u?.8'En?Tm0O8dV!ʫ/87VrD7`v|a5)nyu1jaJN/O+)Gry0LWl%-7jvMJ_nے^j(bq4PDV^_An]1b(ڱ<Hӹ]slyFŝ]W& +-xާt^&訆)h EP LrXHIJ,j0Ql>Hc @Ug2ī8ϪjXW1*7(oC
/jq{sϰ2raz +H^agȁi8*=Jd|1R4`ËB\H7pJavU7U"5B ;[
<FVH!pTv(-Dگ)w u"YCx4]3P# ANAB
kc*@7R^t)>%0Ml1ȨNl8L(I(8tbu븎PG>XޏrپܶYDٙ >_k>S>eϵ0NI9ga@HPf?JQf7APgEoʥf"8f +[}c<^fhA{Q94ͿsicN+d *HEXb]gSLt` +-]3_4mi-(L8\2U(n +0,? !%|MhA&4)PBp4N1)NP('bUjBLk^Svwp;0ۋS
)73%KUgf]1Ttf݅N|,!ՅsfYa<OL +&-J)9 RLNEp+E'cuaEoH?1s+q:&Unk(-cNu'NJ\z9by/B'u*LTR<Z +ll9WhW糊>Uڕ]} +S<:й +gD1 {Vݮ_r=EPr +n k: bS9Pˑ +zʒ\"_~@%4
9Cp(d'Ն M<7 +mDYajWCix3L.6=D?(/まCH_x]APq?$'r$02+媳HDvXgA/ .@#sOX+-!'+RAM!;B
`k6|*zmx#W\:Dۮ)9-\SmDw+x^}zu7!3VBnB
j-eu9n
b_Vcfa
+(,ma#p&t +:S3偷j> +ZVc6ɫf3q)xde|I(6
6[O,b#C +J%_I2ۓq'U1l(<Px]2^r,vLY^Kc#Dn +8D-w D@c(t&ATZZQtxei$bLj wEM\nm?Dá*Ͱe6NWlj>pl)"EJF#x4gVc C, +%L2OX7Bn,/CmYiLOHemj<z]8=Ӳ^Yַ4yjXԺ)QcwpYDVL2ryB.}_n +pBcZi~LscyH,Y@cy-L-=WĢ,|Wj
RJjAR<cW`f +6g:,ӚAB>O,ŚQq,mC'8Pd/|j|w% +lZׄn;)V~1> +Np0s%|X +l%2)6&ߕq.IP9 +auIq:OIO:wt}lNz{b@/O04Sc31^Absyj]r(!B-`2| +BDrm6ذ8 W\gYJ\ +i +R+=B(X`"~Ng!Ω46 "J&[M'cfxLBh8r22穞ũ$rRmoi}ary/<Xo#˯4a'Ȍe&bz0^(VLB1z@SOTL> ?VQҩEg멞/ĥ : +Wt oV_jWm>O,+Ĕ[ +fYv0'syBLDW%"@vS H<Hc Mj/Wp*ЮzU~RP|Dw)<ϼU]%Jv"CgctʂL:n]]y{w*jc
`a'쾈XqHp&e;FgrS"D 8pjp#@% H|.Xvahܠ=Fi]z B2RTjԶFCw$/LJmf;Yr(>Se2N5VmRgfI]r<Kq=q}=ۭFhHq8 쟤t^1Xd246MΕXKUӪCfUO_j#Ivۡzxt@hYP^wN4
4[fmAbp4]k1po>uyE}wR$aa;Ou|gi#C+438\9ܰ, +<B
BTJY'814Z8fŝ<H홟s}ua;ј;VSqnМ.DﻝP>3Z뱆٘茆}!"==PqJmܺMk9Nj(g@uWWd+v-r`iEbYzsx94UHY^ExAN{7kvMbn^NqKn(/Y8_uA콌273Cs]n!̫2 6]j{S,CM?TfJQ'xJ?<?^q(|Uk4N4I/(4XR᳟tbvoNtftm{_dZXp9r˪0
S +fK62P|.аU5@CY aBci|thH:"r~#\{fTR{ GTRlzf(A)TY"8%IN#ebgMr,ܦDC>|nM7^wC1 Vs䤴\/[NƳ*n*5K3PV"4ǽ(r4ϳQnm]goxm9p4o&B,d4͇hĀ \&rBvTЌڴ(H4<WPQ[n(GPv*[?5t*,KVC-?Wfr-&PHn:*7>7U=9*7^7:/H`30T=*ߋZGmxQD9-=TeGbn#|FH0v7Q3P^u@$' ѢJzN+\iZ9G<OXanJD9'Y;FDDCfy՝wa7Jx)Et:/<`R-Xw|ZbRRƩC()W +3A2fpR|iq|CgQQ_\0|NZSfuL8H% }өzaYiNv,JQC(V/9(J
endstream
endobj
19 0 obj
<</Length 65536>>stream
+s>Moa4̶>[p-SeI5
8MeVp:Tp~B
K>"
xE6dn83yY.}權ꄾrߔ瑺/N2% +zS +S +h,ç +MBδYnp*F-A(Ī6WNՌ/jv+$7B0::~;n(7S15}n<T8t\a7aXe"Jsѣ4g1^4:̾1Tf-O10;HE@>YY4P<z(:HBc=Wjjr>Xp<VM4='X!unQ+gIC9)3nViVCEK1-]m!ŮZ5" +*ЬA4#N9] +R2Ls^$llfg|;r5YlO1őD8/ﮈw?Y1
T;Td"Ȭ5=ŐfZ +EV%Z<YmRl6He1]MgDB2ZQjsK]7g4:<0}bpbztQkB +)5V㹒bV9DMlǹb3!b@~ɭ^yRX jˊۯZC
sTFcwuKF-˱]Rcj (Ѭ ,`2KsĊZ]=n4lG8 jvry\Ϻ#CsxՒV*{9izoĮRn{N}סqJ$d2(ZQxE)'+-PK-UP._Lr'3mI}i^gݎ9q7^sIv8s0H݈80I8Of0b*~Qe7/{ASjP2nU*#>avבJE'9)5KfsK-ܪNn$4fKI<Qh,yΨUB,cAnO +:ARKyzD|[6p(#4b8ErsaS*\"abKa~ik^] cfV>}ezA_2,$_IJ8eƇq!I7f\ +3
-T:0u;L2LamΔѪC?Zk~rz@ rO=Tjꈂ%\?r㕾h3<|%jJuMZ/0&:)LJ\W1~ÔQs=(^M3+=B@c:& +VÍ\W}+S:"8?Zu75_s"uy%mX~swy + 6?\r`Z +vb&A% +=˹aOXCHuz6_i0`@Lj^iĜѻT[ͧz櫘):_WTi$r*pf.Xl7U1b (Y|`?Nt'?Tmhh +Ӽ u1~UmԜGQ~1`ņRs>yeyja6L}1v,ۅ9?Ne)TcMjZ4I3XX4&0CD8zWnT +)0v4r8Q%7KS,.hMaY+ϰjm$+$ 7esAMw>h\eZw$J&ܧ˃$#F>x2L4'+qç[
4E+B +3aGh}#N!SY%L:-I=uoaS%Wgb + 2J1Zh)Uip5@٪?T +MΓ#2 +2Kg*G3)h^cō_Qa{ym +P +,hk1<{q"@u!'JMp_z"]k'2v +*-e7R#s4Ge40QX]d')1b r;Sj9T1ޅvwX{b&V.]p,$ 90@fn~"[bnFl Wz{0V?P[zO&cX}F:(jm9q*0z@~r~DU/!Rd冲qR˦ۙ(La-M<sh@\q\z*6킛F
fˡ}g*/d{-BKƏK]
X>\CN<@Q(*Uojփ ڐ3xq.r*r:n#bi5ݵ[Ƌx" + +>L#t&E1[1nZ +))/ZMU&WLmWY:Ä6鬃TZ3hd lvX(Jd1Ϫ5P`9Kcj:TyڻZETm.Zn/1@@Tnd`+z2^$koAQB㑦nl= 0<2WjLHPvEPEɲb3C-MPk^] J4ÍUۇOrD(ɮ| KNև헊ⷍ%Э +3Cl/H)$9JV/l +8@%@h3Wm2LKS'@ N!`S%Q:CjF~|:Vo-v^@|b7{VCzMr
ibGguJ^/;Cќ ďj
I7
+Hֳb+ +2vB49Yp.Wq(|\bh0~$S*H1-;@[p=w]ϳ]!b$?~ZnPb`xvA8yZsHuXZ
Vp"V +6T+Ȩ
;Pn
x0\A5'~f*>5 EzZFC(_˂Cb;#3%)dp%t>|/< + /9H|,BHF3h<ANJ8'G7UkF/|Ǒ>鬁LrXZq$<(#|rx*Nc,M+8Ba$D<[u@`8<]'4<}mfV20bQttڿdwhn8-5sR`688){xzѺoP +R2=:Sft?#I1#u-4>i5 +pY(Zz fm`1nIb>ZfA6{fBGMs|ߕW`yZsbT4w,Iv]:qr<e? | - +_bbu X]-xn[čZ*@ mjs(XbZB ++F)'B/I-VK3MH1HA +UfV(2`T~!ԋϓ \W'$((.zzw:Gb;qSAƈNAvh@&Ҙ&3ì8"W܈P뭃hԒ\#R8V5!*{T6"+NP=G84t: +\V,~9Ys {> rk/NU[_V\H +O>\cʞjup8vvk;<*7-; +(/CU)6h/>`x> + N\*4%.Z=Nǩi^U| +n\G.Ē,- -BFn%Bm8#u=jcW̟Df"$Wn(fj3F"(6#aamxDM5 +*SjbV_0)jw@J4&ge)key>R?fֿwܮHAhbZCAjYv*3Oj)l>4$t=Swp:<s
T,rzcj3)K_W]t%ص6548TU~f>Lq=l1?-XIƷ,c^Abu̮DDplPun6!^AA8"~X`m?Zˡ(@(?Dc|_x!H#EM\p!ȯ'fZ^ZCnr\0zAzr<0_O"<?L>~Vk\_(*/Y]Nt=grߏD,|&Uk&qDI0vWP^TZk֏HQ\m-Siv&,=A*c!Բ,'*3Ww
qr|*[b;)xgtVu'M6$[`W\ +;_uڟEe<͇Gk?$;_rZ@psmW^A +,;DT.|b꿍3Mۿ 2<[O[>Yl$N6ބu?H0(bZl*O|)6mDSwݳ*c^v6ې^*G#YzPqڮ<?5t7+kS
upW{F8Aw)t2XqdrG]<NY+Sct(x2$1$zKեZ2:!=w-=0JMZ24 +ZV&쓊%ngO -WA,DSQN%v7s՚TƦٲzVcfy +M2N5yg|IKF3Br<^(@Xg6O3>)<V~7ܖ,а5;vEi1ltKw-EG8mY͇Y4U"NC!JcyDbu> }Q%鐚y+Mˍ$ +[z}YoIz@b\ޚC\m$M#x8ŏVZ
\BZw' +"L!/JKvsQ}|KY`E/**2Y|ܞזl{N-sq<Qv(hviE/Lt~׀+4tuN&a ϣX[Ԣ`j?5ܵϋ!-m UZiha5v]vul-* +}$"Tl8Ts˶3uhm'2j㏈Rl(NRbDvlQJBv98vv%V>zVkh/L` ӨuK-ǞlmO'cņPEJcnu)Z#Mk]lW)9U쫚RTDtڜFP d!"SFDԑIiYjR]Y$v"r,E3˝m%t;07>b㍮c.MQT&RKH,YF`nVUe!Z=\E-D(XEQ4RNY7EUmVVyIĤm@0ZH4e6hWޤI+.z1ETJ$ġ
D4d[Q:CjH80;D0/N
Bk(f5ZI͐M\RWfL2$5º:"PNLap&Vܮ]Cbkf
<R/LXe:PRkSx唵veDbud(gdR(]L%01^3łDnbX,j),i|nFi-u])>/3#xbLŒ5Յ-Ƨf|T\ZKUb-dֿ*IG垜jasze
IEER(i$)##;XI#`FX)͡ +@_*TWK=Byqڠ:v[\R'e7m)TVɂ`*u0iE5Ry:IrJYbʲyny]1W/76#UËr}^+Hmmha=鐛&
AȠ,eMbB*BS1ь|g(& /&,/x֣Zá\XZd:SMc^V#BNML$;VlhP@KlY^8O%$YcBǮPRI1k7Io9OFc044B-Rpt(g$Ɉi +E~,Bl:T8&8(P~P"CDwЕtUB;ϓHˬeUfo'B9mvP #2RϐEG+~^TW(Q'l)d(FVvcbi1/3oY->By{>ң k7-6)vX<Po<XI'Uꋯ5Ľұ\ZS%{LܳZq LSM*F=(
lF)) +? +0အ,4 +-X`B@{" +PtxGoEV{")+} +Bf4YJPԆ#H0D@T¢ +
60HaC֏4Ɉ<PD.Pę6TUP:IYaAO8SY$NCVYgĒ`"DP!6+Hlpa
6$0 +SrjP"NjC +_Iӕz\tLpHWA,\)ʂUL]zԓ{+vRư]̯~JUIyGD(2"d}lذ6n,LqdqbåÇ +1 +ʀ(rjp cDՑepl+MR2bgiʯifSSR%M*6@H(*bB 6|&D( +K>sMAJLe5%"( +LΗ6=(T)R1IۜqOLĹR2GAuynwrpBI60XYSL) +$dy Ce 8,lX Cc +dVؒnc]1cBC'l]-:0o0i!-%+V{ +P0H(cblDXؠ8Q
+@@ +51? +'Ɓ/*1@WD +vcCU-uXVK`_!#5ҘD[c*)1Kx(넉EzPBX1YAp"<D3^3?Ր]Q +v׳v'-.5K(;DUgCCca&Jn*)WK^jjJjɒʂyy
Y;XَTlMFei&ɪ"}5^% H¸`OP9 +[`B/^XYH *FvS#,ί3j;vZ2Y]^9Dc|"0[lKT2,Wf2Hgz^TE1`CH'MԠ[aTS31݄-QHEu|VR[eZkK=2@Fm\k3ܫ2.[i묅VzTaRRN$ +[{c̠>~畐p6R0'%wg4٭6HLhEPb;{e|4;,7QznvV4Dַ:ӓ啕_Bǡ8:T1zSe:eEWS#TU(j<u̾'1S L}EJӗmӯ;n˥㿐&?PNJFcrnO[q)':J!B:" +":IU¾Ud.*fے[6t3;0nKvlV!6~*ՒNSl$)vo@PPSg<Suܺ +80f--m=\0,wˬMo!6f✢P%DM+
eĆV2\]1E1@U%D`7[,MD/5K懓$Ns
Xe%š0*>bH]'$xWH}ߡL_f;pZj cdIbWC`2<Z=-{&S-Z%jjprխ_qQa{KnAaTM`EY^`gI9UuF"uɿ,\S"x +&,AGPzLRbe_P븮)x̋tVEzzhpd7~2B㋓PEcrYHdrR!/8<\i*6FKɎq<Fg%qZB ;t}$F3&
w垊QE9Dkeq8=Ed!!HLfbVIīT˭:&vS^w>w#"JQUr*YPk~;nww}ovvsOZann8
Ejo@TugeY4SZ3rv4T<cj}T#nsa~mkCR_pۦ09V[KQRY5eҀY3e
ui&14hE?&uŭO_c?BYd so+S(H +c9Ლu$6~h&[6^qlW9Vp;TwnDmjEB&,x̜Bd{1(VDFKGNFovl +!ʬ4&9HQrR[au!1!!4 GAqPY
oM(ʮ@HVqS*UwKBc>=ZJQ?̊tb7UPnU!u\JNAGݸ\snjgM^C,ێD:Bry"0U4~"|ǙTwvDF#_03Zv슥Xr`l0-mڐQODj0B8l牒]]
踎tԾl>WK34烺fzMD?<,NpaK`'R +'F\xfdsB)!.nXy,nz2d~9a4G +:4DFc@{ꖌFS@Ɖ@USfb4ײY*v{ (ap%h##-( +M("#4,V +k4ϢD8SPZ
UnL?c} ++[<9[X,inn*:$vFt Ӂ|w*#9Nyme4ݸފZiXo1
Ij:ςT3 e)ʱK%*v*Q/8d-7:_8֝ Ⱦpr\r=izi53:N76 +Azs(LȫVA938ַ +<pP<XU0̺C!w<QԪG@Bвb\5c325L8U[VH߅|:Sm$vdj>bs/3?й?=bgMGÜ@Vv_X<|$[52ggP=gIl] U8(Z_H2qO!-^4ݷ8Pu_Jve_g= ,WR\3=&pZ
e^#=?^n,˴^gyVVV:U!\}z紖
dtݍ2ǢG_Q2=?2,m$0Z
LOF/l*yg 7e1y.H D_`R&&LȶV.xZj({.~g5Vr:ǜts(+11LEti뾋z"6^]'2DV?v5ヾt=i(♮Xt']kvW^4$E~y!Ԭg\O嘦04&bہ|NR`%_ +BM7Sb뱆U~~[͈VhXg49TN~Un*Ğ/t%d1v4R1(ŕXy^*;A%~^iNjjz,z8GX~&Y<hkx%n|)Tf)z~q<oJǂT3,E +O4^h^t.uWԷdy.?F0o뉶S,]O,Χ);:ff3jq=`w6*3o*{9'ZVEQ||3QOTŝe/刾z{Z9~
l>3bz2Ns W]֚_yBdHzؾTc4`q6Pl
FbLb>+7jXMU|2c_Bl,v ?8/RD<u)|r45ʶeN{$1;DX0ΓMgYgjL־A=]xX,(`70 ng:ƿ8uf^deu:a5n#UM|,<Zv@Yp.Mr^hmU<-&]Ed֫</ir<#lFs^3AXpHc涝G$Dg5Q +Q| +LbXeAv}J;{:tNBi̇e5b8CYocd0z>q^D̕2&:evy4v]/{3ōb8s8NH%bTMSm4un\L_r:V|D*^:%߹)a-Psg{NMw86
4ݿD+x]`~eZ5'~(% +My3N=#H!´8-j,j,(N*hXl7X}b1G+]-%`i%lϥt7vFn3E4-6:_${=tU +J)謂~afPh'Et$)"<u>#E]6:f7TA^vb)3&7T/;+.pWK.̖$έg}ɦ{I-sg8(Hm +8eOÄ=;kNG:ж%k*5 'LdP` +Gy`6jT8r;0萎9@8~!ٌ|9%kم)Y}NEȞs3?fx:6?KQJwENX]Ae5X +g$ԸLs=7d*jZ4=X){t)q1Iw؞C)@\gBrk +2|i(Ͱʒy|ce&ԹM4=xt8yN~G2 +*I<x2|l,8Y,o<y>Yp"5}$n|yWz"Xh}Ycv#JYN]zMHq~NaFy@*|*ThѬDyc6?AőBCb~'ڏEHaehmDgz/hmϱr(ښT_|f +aD~/Oy/ccx+&cw?(=D!OTuRVw.ΥIt%rEYֻ r8{Զ*Ny4w4KrMDx.KFZwdul{=Y^p;ε5.+';zzHw#؛
a>HaAr>k8YgEe~1Iq[ +=ڵ>%ۋyovDڍ4V^mg#5sgIR|i=ܰ3Rf0jx;ɳ +ne4br9Znd:tﱢ@xMB'N2Lm̾<8];N4P"nȮ>ێgGotdu,L$qly4!5$GwclY)hx*af +ͨd!cy=ֳ=gƯ0&$jjDf3F|it +/'b'Cp;G*t̖#EWj + ?a<Lo߹8xE.5&Z<Yf1Oth]ex@5Q+-Ϫ, ֆ#Mnޗ$+L1=%/*ͅ0m$UǑTg>\ [qF: ɑ,$`쐺ܪ;R^%vj$[I̿@-Zo?Mm9!u~E)'>Ɖ(z#F뭂TUڏv\ +[g+Jxsjw^oY
wL +B[bv"ı⇌0U#e&ZT{hyOR$At+l+`AXi*qGH'YCf14Q?rObtR-Tx8?䪇Y"Ӱ4uC5wݎT?l:ns=>R9z+,5hY.e gZXYgMY]TKә?vGj>>3Jp ņ@oI]`ߩ{$*}#V=$7̱lf,RvjOP,ݲJ+Jճohf8#5 TNLcm?MiG4<@-6=VjͬZ/tͦ@F@xl3;@C)ԋ>YZkfW{ʥ8
U_j8hLoI%'-fI0s-KfJ/qƱV?1-J'sf3nfjtG߳<_b+ndx{{gN=v6Ic; :R#!8];JWg3ѰZЊ*caS!J
GS<#EXv]ΛY^ +ѴZ;ᚯZapHAc*"3;&9'=g5T2=hN'ʞ#9'I'q +vY~A;2r;ޯTN_pƭ6*dۏ5?jnr=XfJZ8p:Cq;%Yρ&EVً\^h@qt +
c/,o%>Wp0M4>U3<,O(I:\dQ
Ro~#9zMk^T;Ӽ[ + + !hQ Vwu-Z܋ZЗUkOHZs!v(0 sۮNyeוfDu"1~D(v@_
R煆|'G))=
]ƯFwmfy3܊{+
uQft8K2/#54EA\q"nD]]o&@aG0Lny<9픂j@n=9Qk,|]r @`_#%ݳ
4t䮣nvNyCe%F4JVγM<T2=s +_F)Zk~p4WWQN?#iĎUKr>kyn@BDq|Ǣ<}Q5mE⻏*2$xƋr黮'e<5z9|PP.xMQe}57^v#NnB^m*J1QИS!V.P٪J^rIL\<&8Rcv/b51:ˉխ85{vϸ?ha[bjkr|GIȪ'ʮKQ,I3$I<仮HU,",Dtj\k&Wbߕ~SNZ#EF=z?離6Eip@2Dfr,ӑ詪6U1XoE%׀c/V[oY:Uަ*Ώ4|=_TQ89J30Wh {/hű +3KhX4qsa,>Oم.BW=aglj
Ldk:LhM5λ n݂#JCqTŸojzT20@XpjB`ŭrC4/ +9LR?9`.0Q齗FG0.FVJ:@M[eI`:f7jMؾQTVXF
6LEUÚ|U=|q[*w.%~`Զܱg"Wj֚OA>Q6,&*&.Ş͈#v [P{κkZ9ChcٗkFfZbWnduxxAJy>Q +DMN@ސ47/=Od*HfپIlD:jwhͧzt+08(4E)k=Xem弇2
D!jSY)Q6C(+f{.&RQ,UR<T0y=b<MxŽ8wMv9?/{6EPKydm0s+Xr
Z
9C(rLxc[aVLΈܷ +#p(@Y*MgV7vz<Ot
0J>biIi +כ1r<}P]Nv=PjwlύԂ6߆ޗZAsܮțV3A|mΒs6`r6oYwXmLs-L=er,˱{bx12?gnᅈ
"Fi6NuDO\0G;tnB$O^-`"}ω*sZ2_^xL,nMI 'XbuD,{bɌ4IgV(}M$}h}>A̦ +$ +k3y^n+F0 ,; [-w
~ښD㴢eFE2+
RKtƏwA(=+-)&T={Hp~?"zne#=DDG,Q2NwU6Ck6LvKfw
m} +&t`LrM[>(\Z3=t'S4_\ip4'Hv 2vHQ?{e0e5̶䲋tY\}0ΰFJsyB4'eHu;R_SY NbgJM +u7Nw*Z4ʲnER~yg/J|xHLE$9Zp/WgIlANð)$,Db\0{ַ<<]m1MB]'@@f8HXj(+X1MvJD.Cq''W[+Z2
-t_?Xn-ΰ<4ND}P7}"8Ei,LT0aqj&/Lv7Pxf˭ŏ'7~DvmMfdbn;7ϑ +aV/Pղy^cH1@~c9b w%m[Z\D(Ϋj2~b9>`o1vߪ-^jCMQ,?2OfJ4A\R\8"˻qɭ(>Tjb/QeNxt~ +6yi?2*\
XTPErkv!"3IZyN +Tl.DpPNnΣqB[
4Qgh*@y"[r{]PAN麐bxaD(XtMY\u
7UoZ(@Y#ѣإC襖I_5.~@<4*6MH}] +Ӝ%zSB[q}JZct^4cj]KWᶝ"(s^V}i_9Ir}OMwMGn%yT}a6̞cr;Ad8` +<B`+$B~ϊ0vQEK}>)pQ: hũ0=;Q`HZ^}Mi6\FSU#W-N$zDrV|ߊ֦j®RTiqS0qӴͿT0M0k3A`ԒAoAg5 kW0jɠ73c5+dFx{1ȚZ2
#ƀ=d +F-t^cofpz:1` Dj6AM&In4M &R j5L$MrIl1MP d"i Mb$mDM Ii@L&i$jH&`O5 +o||
sr +e)=Y0:\Wl + +8a8CAJCD$P*Y+}X(;UCs +FR<)"P87Ga'G4XCLaS\!zN[; +B=0'E+ӞJKcj%Ƙɘj'ώV~w3133?[={sL;>kg}lbM@2zp0P<tC\ +,<4$ A@cAx0X(偱 +wRҔRJ)M)M'e6aD"XƁH$xH)@BDFphX p$Ҳa, BD +0"1z +v]+Q|*m3c>@~IA̟ɹW q&\EtkO-T2isw+%1m<c?F$ޯ
D65wo'J7R0G(aSw+~k) j$i)`%>gVDQOM=j_EJ]ƜإX1A&UT67RƴmRP5Q
Xj-!D15mh%خ٭P>ZI#Sv5:B'+YW5dLjWrZI^3HFEWl5W#dJQt
Y3k~&ה]_QP*LqD-eM,r5qԥ*y9څJ{y|A澉y*={{ES|YTsRJ1kӃi\(:l{uռls*fz/Ŕ.!;®{buL0+9*UQ)Kl)[o4[;uJ[RJ|MJIC'$v\ciWzeF#ǭ1c\aj(u|>8T I*!X)߸16sz%GUkJhJY#?Z
7gnjkLdozc5fzciSNAv\w?ov^#؇mXH]9gdE^E`gxkdG7mgf1fv3,UT4 `0( + +ޕNܞiueap.ܚg>{Jr2
RM xWu9I
eWVKșfz]WjjRW)ڡZumbC%3? +^0\+/ +4MMaܝW .wx0YFo"ͅϲk
pg)QCM{48zV3,"#bab4F@p_^35 +܆[WE3Te/=93ˑQyq%n{;C,go~
'exI"# + לXBV4>Iۇ:owYЩl\[o@ U+@i jkhDC7;Fjgwdr/ngae$CN'1B!"|z(RtE=)3E@jsdSZ*)w&攱1ti} +ϖ'p3EN17R?}Geى*T-=<ḁlu2GpezXrΣf@R( |_4+464Q02~ +G41xڔ-m/~iYo)&0hJ̴bP1g{O ud]g1012ϏvITѪC&Cѳzā
ou52Ev&
y*ʱeM>f>n_E_^rc +9@T:ķQ,mGNN8d%9[n1(e_F,d;TPoY?# +nKTgJ]<E/wD(1*TȚxKX:l$`wIXe*Y6k>Om +3 +$*S )bJ%AJ>蘄<٫O#ƥ+;ȉLRѲ:C( +E@sy@3xl %GQhl<@]0j+P=368.ƺQl:U1ngI@aGFϢ"a_ +ׅ
fbg&.2.2,JC\&R
!<v3T8**Z +PЃ{Ca%NJuzr4+5$ZstWY W}7w8HTR& J(VrsYPC +Zn6mL{9W 5J{:q'M^y +^`
?EV<~ 7=Q`(*3Pa_
G%,(NXxS"Oŷf lca0՟%L2B +VR9Z3&$2(EȆt'!4OM|Qҁ`J|$f,(̑F&JW)?Ie`LlYJUxZmK)l3p^e:N9c0O,"cN',:J%l:]ޛQ 'p91fAC=xZ=@k==%If&MJ$NN5#neLz>c^5~BlY_w!)L i)` jP^*4yKm_ls#'5_A:S);ڒpq +#caSZJ\G3nN+S߳X.z"]3))}̑"R4z] +P8(KM<0+-6Eό++m&Ḝ^5f%[@\6tyD&{*.{K w'DΩmBl#`8$uѧ\ Zu1њFGjF"Vn$/t'Q5%BRf|73+!UU`WcK*.lZE橇3(X=Nr'6ݗ$*؝({T!en- 8my>YūB9=ljPs@(Af81/Jvbsn-Ee!B;}h`$nZ QXҘ*ũlAB ?O[ՅeR%ڊZWq
֪ܤڊo<zLM.bWu9 +ɝ +~]ȑڡ KYOi}u<$]OaOEkVr2NE8F.(KgJXґI~Z\yc.@z{rq|G,7Оxdߕ'<dA ,m^t?
'EP4Ԕ^WF?+]`zcLFPA8g?O!b0h̐V&٥pϔ9&;^_&YWo.\H\ RSrijL +R{%Iqie5jC3>LCU:yz{L˥R9U9UwP&g=(LWJDѠWR ȨHsv,"I:P4Eâ=(P* +6D(T8Hr)K1SJjHNQN/93`_!C
vD,:7bKX߶+F\Qt'm H
y*>ZG)oܹϥ={;GxlF,J#D%7%+WE@vʃQr4t:ܜ>F_(t_%eM~Y.k5)5<dQA:W.(ǮAF+fCp˂w +pT_CBRfL.rty27xhc.;ALRj~? +^$\KQQ՝:)i2%vSߌ8aŒIL_
Oa͌w6QqaF*I4K#J&csFPFg66o <OM'~QPTRfTB@nκ=b6ak}pVu?WJp*gHR
|[kPvս;k8F\d<8`Zd|˰FXb=w8Cjrs^o@TngW` + A=?j.Bo%xulAgGfJu(M22Gm\
+[܋!QHO\|pMJ,8@"^d*gU#GBX4~fF#Q#e?JH:`rT4[?qT(ΑC&J}8|^<L/-|R".x)(uCs@c|T(pQ +qѨbKFOH#"ls(z9L}|9,9g<4jơe">kz
e8jD0K ɆeҢ?ӇT+ih;;
$*Ef:lT}T,oE\4:F)dkƼd=ע +j̾ɸt +oYCSo2+HmqhGV=y0i0=,g>*[uNC/:K3Bv(hKFTjZrR%$mJ
.Yͅ{ԒndBГkF2bUo ?Vߊԁ^>\3nDޥק,=EM.jZ#`NX PX<Ij{ai#&tU߮ +>e'ɜաrz_(u)ڥyEtO4 eQ(ᘘqt͗sNJ
[^g +k-#"c|r7z"c`esie)ܯ2-;Q-!G~iEl
:DhRģV\0W;RW ->RC{ +"t7.dFG,K͔D8=xkkʑG@Ppd=Nf<2ZXW +'Ӷ!+85pLFJ?eZ&&x"J/c'Ն<1w\Srhbfi'l
)3$85 ͏ +,/,<3_HpgLԿQVxʭ,(aFlt_Ԁ Etg(sg%PEF{kæ +hiΘe.Fc`4H>X7nZ?U)T\cbsXdߪ4Ю4?͕>,o~7mBT3`yvG:_j
*-HY;ˡɢW.*9y84"P>'gPy2*c&IC +CKh%3*HqvgD{6w, Q>E
MCqu5%$ż!Th N䃔'Jvt/0j#Ҝa
Eׅd@R/ٽiLtP$w" +ڿw;sy睓ռ;93ygwV>nG5zs6'g)Ȕ35ΎN:wMmKIiyV_g:mVIgٓ}9s֧ls9~skӮ]_ڵv>{ϞW5SRgjϷU:T8}[Z=/srsWg>k;Ƿv^9o_wJ-קNvZU +mvMgY[2<ml/ky6*ҧuRnW +7ljUv_y22|k#W.d4} +-Gf]yeF<+JjmUiE[i }fH%mT^2U]F;]FWFZU.!w-w#efoU3eM\2N6Z,5)ϷFmFْVtZY/WF{*:S&Xa{䬾}*'Wޔ]ʎ-]Z=v+TX%wGfF]RvuF=RdZy~65:}i~zÞ֩m\iWչ|edQWqNgrۧ+//RVhem>+a[l) +ZA,KgQ~V}_VotO!3z=Җ]nJ]zul8lXu{dʸt[l"x<,f2=j䖽jIڇ4jw6ozƮM3lԲeFή?8){5d60$ I(
U[Ȝ_j>ϊ^^3RB0,yN1m-ʗή+!K_fʸ=٭B4]:W&l0(n l-.ڦ]&G4$ᠼd +v|L0HRɑ$!,
3ñ+SQVSP2sV$Flum(9J42K(YzoteKCF +* +aB9h'DNF%|P&D>0!#ï m VP^(>2K҆3 0mۀ:PL&L4 +kN{V+6 +KeN{m_{lZk)O)tRXɵ{idJ_ە^:[<vEeSoʐ^Mh'˞m_ʒ8!|FV3re'W]9^kO+J+Ke^ZUUrV>];JNeإޮXWr?Gr;j۳zeKz%YwsΪ9e^(?uޟNص.Ke&Uw5Tu Wm֩L W>ߝJe$Sس&8Sd)2YHO]r)ZVmC{ULr +U +e)d>[9\{E.:?tuV+ΊV_QuGZuORhTNrVI~okCJ#.;2uFyj̍mg6L+RƦʰo'Nս[YaJe S_*3OWߴcSY>~S +2Max饕^JTJB#ᬳoR;/e߳VδFng^:ekk)*I')V֊VO+ȳު,`W־u`a}ri\a5Z!K7J~t>>W,ʇҥtj[zNxM$ҫٳ6Ge}62CyRJ@JRV2ʗG]F"\ hHx +zڛUAk:o2 `P!MQ &4UB +$ +2 &Z 2AB< +ƅ9t6܊(qD *db?42 +)(p +`4!i֥afAB./a +(c4F +q5F*
wa@BuHR£Нq0TpA,ñ(">,, +4,h,
Mxp2
"191$Tv14P0lTBƃ(M-%( + +BtP>:}t,Ȇ\8CQ8KRppp(.G<ʈut,jBu,Ji YYB%MGZ&U1 $$wAc"ą/o,Ƅ0u"D
.ID@B1ČkB!J +u$ł|*
4ɎP!q:G9;b`"\v$*? +K(El"c9(X[,3A̔$Db3.5E|08pKnh0,laB@ +FHhX2,dc@xktaAsP$K6Do$h ICBND|*
ѱ#a&$)E2:u kt*P1G+t +BD +8Rp>>&pA +E6hC +E$L6HЂp10l@Iz(<G3qu7֤PP>0FS0@6q$FX +xBBm&?怄kEELx]14t
^#<Ev a=Rq0`xAi'_<DBn$X /HDYAx(
2#dLT!@9$ptȊXNL$pO0PlȘ a$#|#iX0HzA˜ sNsGd讷X 8u : %$:&Ҡ$ < T*tB(HhKIPV .D +T6RcJ(tI!AIRaH&UHc)3~$DΧ`BTX-T lOdBDHH( +ڵW;Fb)+Vqq@y7Ky
"1c4c%I!*7v} +}vWjV(bpbqx?=ZtfŽ<fٝ߭ ^M{ёuށ]jf螬
dnffI1X>^|q.|]:Nl2ϊ~>5tHP^)Zו棏AI}V>0JrG_OYoȱ\@pCTczQ>:S91T&ڛ[>jМ|ӳ1r+^`g4#G'mRSf$ԉ腃f0{(e? +!˺ԧfnjMrNX'a1
/3{УNa͙mͦmcaaplRS9hZco
T1V!#s7eƴ܆i]t=<QL*n=K>%ۯf[^XuQwB]LbҏS~`>{$,+8à![|u:I߿Uɉ`l"=ʶ}2swN +Tpwf[Ckc}W^ +>-DkQ%a'6kgIL!ȧ؟P
obB|j_[+b${IvH?`5T#طU:ՠ5ќ~qWiAzc*SޮS~2?ll|j!^uSc] itR
7 u}\΄7_ƿojÛDhpLu_ι}F/zY\!bfd
pd֘|Ҭu3%ud2L~3Uwkbawb^ +;;q1X)$]3y筟IB0|뛓;ȫXqL;[,sSir
Z5RZ:$x&Y` +N#0'(4QA\Ma؍s[\NgVYcH#K?bM=Y.R=1uptL7>,y)m5 qI I/&
+4d,́rOw=L1np.+&Ƌ=L;2Vo~z]EWro1U9Tp0,eZISu#=;h7]Yc>QڛJi+]#P4")ivjfp'L$2Ktl(GQR(d˅NuM[`%?YAc:=0}s33%FEONîoC@.|㛧)0P&&1Rҕ}<F1䑴1
}84M`be8U#QٝJ'VBB=s´#>'6Y.#(<AfhA!s<O9&}tno>s2 +(yS2EQ~PpiPF;tA':}BțzťdJ
$5WXDR!h:&Yi˚WQ⊂(R^l00gғLk8o{6N$y_RYe8҄4LQp=/ +lĢGyOkIֆP0u2W=0,t'%-_@H +bXpcAaVc̃zVC|NBF#Tb9;[ݍ<MP`
7]8;lL%i9 gタG*K#DpK~9SphMZ&chƴʎm1ƓdOCoQ;]UpĢb-h9ٝDs,ڇbc_!y!jXTu'I?=v2!Z7O4lweL|Av"j>c?
OMMD(v`73K9^@FVlb5<]HDŽX˻̴x/ +SbjsP">\+m(i~M/ AE2qce[vw>ەiajt0FF<)xeQ0ˑ?5,i!ŢF,=n5s\Mpi}_ѿ +j1B8?њ,Xd
5r^Xrgŗ`8pY*0\v|Q a앣SLPl +`j&47mD6u
5qƮ'WtkԷn.4jiߛ/pd XZkkTu+lX&CYH-֙k8=W(^X7#lI1 ~*QorA*>@\ac-Ac;Nc$x̘z}oաޙ>06/CVܜ+M(pDI϶XK5!gz +~7[0锖,4u +l1ED9@%R\v&KCO@.(<e'T!P~ +n,3C]̿f^+ng`[d2Ors应0C UxcлQ ;T gD|}BQ +G +$"^dql4JSj4-F#!k &}NonGI +\T"cY2ũ'O-74WIz34BaXK]3D + +@
F)jJlE%sfAr覄N3REN]yz6xMV}d%QCX@ۓ;Q;T].uVWߗS
4Qq,:/h=umaqa@[fgљ^gl[F.n~5E_I&fC*rGkTh>͆[~4ӗK}8=/BY#ѝb6=2Ut{/L9;&(0)ÑU4 +=j<= +14+f=F3*W += FX[s]*!i&$$.FPB_:6-m?`Ƌ+*@ψv l +MhRbH8E[7o_ը;? 5ڕ0D#s HX3hcʒmen/M$hi*ܰi?h]x)BMs\Th}dvNLcކ&ݥ~zѲ>$! +?VT<Y[zw2 + MSј#A
3υ&D!TInlZ7}7-g~pxr +_Y{ﹸ҃Qc%\Ur9klK1Iyڄ5O(¬B۲AsnX +6sϋKl$t}@9àd3fzELC3~Qwk;ꉛX({P:xEL +K_Co{f*炈4I%}.E_ȏ|ٕCog;@U'H+
߶]#m1p%cHz<nԓB,`7b3W*!$̺(7ً-ĩ5^h&h5 +>REԶ#qʆD)-&Tž,okʕCi0.$1=)zTu'j +hfpm + pf/X;VMUq6!&kI4gpJ>Oy >)t1c 6la;4 +o{ p|=M(uT0A~a +{FXFE]JK6.v8mW5OCI8Hau*N yBR&:ְ/ +ylDQ7@Ƥr)$W8IwEhP`R٭)VÚhL<2~ĕIo&o'P=|г +j+ R)N\eh@~;g>)MK\Kַ_:hBHnS]T55,h@AL&m(Ƿ +C(7܄Bf="J7N ` x('FK0, {LJF?JDB 1дJs'in:X3AscESeT1U)'m[-X0߿BTpRXɀ?ӡJ|
ѐGǒ9U2X;r$6 Ywl6~H`x6m;g 7d#~vG +)& 6-3#N?>$>F>>T Q(*98v$
?C[BTN
_\a|*Oo)l +Qa}l4f]
{.:-fB
Q&ƹ9_,^fG|IڐK.Jx^aS#([b-
<)dd݈U8t8mVt;"v>
@nܺlb ,>Lp6z[6އޖh;>wQ`0n#ŏߛYQj,h[ Z^4o +G`PsP@'\hNMjڊ/:X>C$OpZj+qȖ|iSgXhf~ +<[,&<V?{ +ᕧ(l¶x;ʯ_:.mI$$5P6GzHԚ,4^t2;ޣ}4nq2,aG3RU&g=1a`8*иdjk%T;jN,kld.
&>DA-:A,wZTsjNnDsjT]1|[D^[W8A֩e70H +&ǑҖ<k4M44.-I l'_ +
^"g3۵myƟ`Fmڲ\R[ F8:Jl 7t$ +gFqhRߠ<WzFjf%M$9}c㖜LjΊpV^֕ht-DYAϭ'O3CQjK_,&skd'<Q544oJe7hy8K;s!iJGXHD$goN(GۨHG乶q|xVoMJz7[`ٶ +Nyޔ.U7"ʚ^?<?n/~td=Z81N CjdžE#<SH0ZKp^7lUh`fTz
oVg]8[t*Fl)w2ىpr,
b@T +a0,d[l@&t6,|>gwzh1*W=|;}(T3FdJS2$4&t2_M0pmCՋVs`,ѫj_Z|@T3J:QwC\ +kuֲfC6ӸU:X,#(s$;
*G'!$LVM3fz!%!W糤
N!Xg 2+ݮFY\Z4
d(^GLJ~'%隡cOoԺF\d!w;Y +7gM-ot߹`iW#CTMe?BCJw$Д<[bӍ_j~9" +ۘǍ"n0ߒQɢ5(ȩ +5]蹲bW6(y!\_TO}bTtwu2CiVPl@egpb
$ge11 lCvcBZWaoǧ8{5o)oeV )aL1@DֹP +^{`~]C;RA6C+icțAeZkA +70N` +@T]2go鸆@8ja#u%z^aWl&25IǀHiPE`=TuhяhNS3s}lhծLHk@Z5C,Fh,DnâuK@ u=%Zx6'(ù^N?4AGFw`XaH#W[%!y&B/NudzͣQ[牢
S1l!;FoHK424V+DQnӖxz@jfV^YȽH%z-bRWbUKp섓kU7KdSqh:Z؛F +D+CzpF__Jh +Pxi +hz0lVW1/=0B?EeWӜA
T]bOrpؘEWÉܱɂA2
l;Y.VeVs{qF,}ya9q +#~Djcu+}&I(QY0Y=> +,a*a>טO7O?'\K8*^mKѯ h20Sj"0jJ^,W]xpG/څWh2NŊanK$K܁M"~b(5{b1 &XpT6fwtg1d@٪0 +lhՊa6dz#ݏB +*-ذJƖ1ZK9!:_ag +^ \Љ56 +hBY[]@7hCVzSEncP"ZymЪlqx:bO/(|^B,f=ARe=S.1mO
̅ma2GzqZ{a*>ԏmՠhYFF)2~o,zuFYXs7gZd3Q遠.>]Tukb33r|6$롷b,j+&Q1(7&s%W7q,tϋ_Y-yV$R=sCŊ<#B>{QVŝLaalVr+ԩ%ٛ. Jxy͊x Yd<f</ +?{&y*xOxokjOkPtD_zӨp͠xxi7R-m!+ŧcsyPԡC +7πW0ZӃp"d]BX 6Ш_,RJMum]Fm#'s0=IUٜisA0+Ze61vfpSl}j|^I>
$ ! d]a|TdoXAU.U*WvEi&c.ג6f).@?${0qb;6f;vSbL|-@l +E>|
9w0F/$; ~XI8@,(geu&3@=_NeI^vyѲoqø-!țX>7{}bkEX4MYQ@(c2d@y4Rb*xFs #$3k:D(g`!(P-h]J`L
5MjΣ/H3vFK(C3 +4ˁ +`jnܴd8Jշ +Λ9: +w:\
k +:J!x9$ +,Pw4}rcn0:[5Pg&=dSG⍱k[^!t~4-Fy4d9aVsy[6-3mVUĐz, +db~сaOA"ߞ'qs HUX=ٴ讓Őӊ{DB?ooefb«ۜꡁ#{#tBHBSWt@ɆBQl/m=kRrQ\v`fϞt
'K), +QnI!j/ScRmade¤+8A*NkZ.cBߒАR,\I3jv'}];ObNӿEtC)[wY^:}{X +6n=WwڤVpg1hYDv$f0u˝JR遏NP:6V<4+whܙ_xiǠ]v?M}:nSiۓKS? +E^WJ Lds`|9[IgJӶYc2;hUN{3^%\w6oH8˵ˠwLXHp_jxwHw+dt;araDGdw +dyTI +Mꑻ;#RQs;;/a:ImO:50q~"22^a +BVy[5Phw+ݢ3CSYbBBt<,K:unєJ+,m
u篧4rc/`%ABV¡F>K0?cQPE#,)"q9)Op4Q08Z4%>9-cHW +KWl0G<l^ +2ۄjDTcԊne"p%Vۂ|9Wb*Ljyh՛bB+[RibAޤ!6eIKa#@t`mg̵j%!+ +J j94PU\EfEt@#-n'.>)5˟]}UY5K>6'<Z/vbzNdEe
k]V AH텰~]ފ?]d%x8S-Tk +87sK1oaQwV4q<u,{?Մd;z]W_{> +-QeE9ia1s%@v>-9ô-qW2icJNbs]m^UkVĪQ[S.R3&E\i|6}׆-ѶBC_kd:R*[3"뒉yC %(*;!w'cUX$N} N2.TStɹd(87NZˈQĘ[#I, %x:dI5
+Oji;>Z0Sjbp5n$(#?uOptD "5ψV|ٗ`]͉rIH-j,<Dt/11U1t][K?- uJi!#RndYa8ĭf,ZK3s"w\~7`w]XaCPU3Z+WEO(v~.GBΧúWV +<}CqOiVRSFzr^(/l?KR^-.ȟ`M]a'4IWjU +COPDYYI{%u*b)ȬMq4]hW4`f wKr;.<Ż+2V՝-CHu%G{syiYGf :ب9k'Ǡ6/*c[A.ۚ[MƭN^!:-jL:,==>5ooE9l=asU &o{M%; v/fpEv)AX:&7E*5tZHKK0vNI-JY lAX7A"_?-lB PmXDpc<&9O6ZzCj1x +<[8vP#C\ +-~^0JaU.Q1:DH&X.0Qɞ5XgQ*NLpˢ+7EeR>Whq +^!uE7Y𤵰=bCA?IR!fҹlQ1=T[۔2}s"؎1s$&ܙJݼ
=q1G +s`նYKt#Ϭ__cկU:
|zpy%uOJsNH#A'ԫH1y"1 \Iń=0J.bjMJ7J}1qq|p-V]o
߂gẔ̌)qz֫ʔ|3{~X*7G),v",wjP̠{=>:mNI;`*5n2ьaа?}Q>n(OZJIAV`̋%zӏhFZc]БۤU'z'"n2 G"S業=]rwhw9~H*\9F<7>K̏t8juG#4iu^6fQA$i*Q$@A)ZqAyEW̖d\
SZoVގe"Pӷm=&b]@}D#Ig"FmO?cCK@|OV +AsҤ.oqf}5h*Κ)uDBCɚ)H
(;Q Gj`}GuAI +ֹv6 +Gqn=y8j'I0TT3!2IF_l$(k'*W-UQkt<Gt~7U5 +ɅPlM? J~dB䮷y&<]fg#ksLӀ& +l3A+5RY±p\u`Vk3RB퐄Zݰ<{82T D|I<U"Y5 +;(AZW:CGBB!/7>.y
VsM"XJN<n!ƾ +TY@P +*\0ZP@.v:_.s]0߷$ڮ+JV)`IajNKkzʶ$6ҟ7ThZg~lSKL~3|0H\RՋX,Syi}M9ղ(`e2uaIݜDG \6"3}ДQza]ru9R;O\ ;$,b43x1f.g^O͛rOEUAIU5ne'GO* +(x$K\mG8,*'Xm5`ϐCMLaD\NbǛ2Eŋ0Zc&ױƋaiAcLϔJ<6 +a$-QHc5\|giuF;ܢ@"cAG8ASnv^\@ gdGSqS]nRF!S2w?ލ[q$Βrl_7'#L%?0L5ᩙ1]pP<'`Ui:Kfu0ЁPZG˦yͲ$<~\k,?@g'awQ]9AMAzQ +ph@rWPGa*O\lY~gXGFXo\1 +ow~.wEר&)KNg_n!3u!.4 +8v&Ba7cW!@ӈԁ䀏D<D!I^1?mh4Pδ +6Ii{z'8)Fv?Q*]Dlq^r^}SG< +"3,4laƦ@BkUQ<K +r_$1;^v_Q!?[NJEr%3p$`8MJ?ٝwou>puw5&琟OĆ vdp/-Κs#M516).M!4- +MCXJZqD'$q`<QS6xmLjx +r[LLWUYLS)E=T8!|8K%w@n"IA b mی\~Ƿ|!ቤn!,RNä&㾐rZ-@=>tΖti.,|j;a8Ū$z^¦Xd-\M6b88ج^}>fjmTy<:X4R@ pOjXM94ރ Rh&#Sk +Ƣ)95o͘>('1p% +}k,1Z1Ð|V6m+Nm-۶m/=]q+ +8庠=#6_"[jҵFlm
6+6K\KsYZ;'{3t@bqā+~ueG%cߩ© +BFGQv)MdOb^C>P6ObfhhǓhԦyjO%~O{܀JUtxȞѺCw]K2;dR !°"<VF> QH4n{4]ފ!@zB9
3&ǎ\E :pLBs:F2|j|u45p#!k2L*RFۊ +\yItǨ +En [LwdEL 8-L +<:Qp80GUki/wB*Lښj j~MKeWJm~i敲ONDXb3jPaǽf4 R$NEuPyz +/ȩJu蓡QB?e,`~giI4i&U
T&½@/ҍO[YgV5@q},*?/ +BQi~O CIO^%Ly̭槹oFݰ[$ŷa/?͈ڃ-FRRHɕbhM4>+OӀ(VGL-|!YHWqՆ;l;\ҨU!g3H[:X*aS_s)s9∭Dn3HBԖ&9M1ZbtJG7bY*(X"b&^xͨ"L= +݉c<`W/d +k}i}(u}VL+뤶35K+'igRHx}zNH
GI]3|^qb
E +l^m6?
Oi&hAEC XXkv|-B-d@pj5))*ܠ~UD<s2駹t=CJqKt-NbovcEjpjo$=!gqg!dMԱVR. +73˘L
] +K?ŀ,aW2G-0`vjz\J37U-UK^JǽR!U{STQ ,s_n
uR.fro+TJ\F#>rg#WZZvYMeߚ)S4$@Q;n\>uvS1&*zִx +N:,B^\zqoE^xf_%x[(kC ^ +b?M7;#яz{ˮ?oQൊo[MtDYKpQˮ(GGϯ +P=-Mw-K'\EsO(j_GM~z +睟smno5:jKwozs}_~w9s۟Oܗws{s,MQTn>Qoޛ(־O.97MQiӏ]D>9ɽdq +Iiw'DP(5=6d[bXC}lࣰiN +Ή~I}cCfe^mi#>D!A +eCVq338%%$FTR2 +zoG@ +BHahC4P@X=|"3g$Fb>d;R뭍":#03Z| +&6_chjtc\;{ +qG<`R4\~%J +S%B +Gl;5~T-'(w+8+~>ϫ_^9|NZV$@&vJy1cUF<"*+>|GI 31#vR4i_k?;Fzsْ"9RppQ++ w.1ҫ>M6G=?l?$!\Dj|$f
QnDEZ"m68%A?+ + +H")EGSY-U1wv6+bRx]Ȟ)o J6ra,,f{lIrEnF!rb:cƺM&t +`xa5 3 +a' +w%UiMO*j9pa ӏm]qseh +B;6'_ɎYU +Sj,h = /{z=L T^ڎU +zq@}m<oP謀4(_P\ۡP~ZG͙N"p +,mb$9Nr]|Xnvo/ޕv2W}Ԗ0 /yrW^f!A,}M+1K[:%qAhֳZ
'S"'%#D`t&n37Qӥ1z4G|L-@9(RhNm +O><+`ɭMBIrLÛ[o@_5)z<Mf!s8<99/3pl0@OٴQ_SfW9%<HRf^`!]~ +H;\Woꥏ3RjJ|qJ 8c`ͲC^ar8z۳;t ➫{>ݼLu1RВ "zs`n큨&Yǻs4NI1PPML'S"sF%xaOWSjm|vVzu1|&-ww,fR20cwh;e0-ҌU:qܓNam2GE0hz<Ëp#p'
flt"WGi
+|IGU*`Rwk%,һ?I"ALDZdi)[3Ʉ$eXz"櫿qoG#ƪܟ_CG<]i·N't.9%x +yf!_j~xH{W>붵13B^]Y>Lh*])Yp2\wrzBbI^9r-E%ƪ
Ajė:8O;I,˖XF,s͏S})xFg+oJYrָ"r/3.+ ت'ϊ@%~60M-g5"EOȃ<q[ljHm2IMJ(TPq~v+dׅtS,Nг)s
#ni]GG4%cϬٲp6ҷ'F~8mθ
XS]O[!G2h3㒣9n"MZdXgՅsDy`(N3+\cCV_P3InOzRcV^zB{>P;mg9m+/J:Fܻ4uåFƻ:+ip͒6pX>Z*\~|9~1k> +qobfZЗX(U7IO@/@AfSJmo^";hCUƼ[ډ-`>w\ܿ9Lw\uFЛbmczglFg5D_EVoIB_]Gi4RLEBP>d2Uҵ)OOz
d8$8fXĠrt=/'Ţ+7_.r9oѭfz-7(LUµNl MSH& +vH^ YzVCo\P):bj}<~ƌ<-6bV F<(fPyI]OƇyr\5ԍ*bj'Ű.bX9oć{<7r2 +|aTE +SqetZUJ !#=QBn/kn D;;lUɟ+G!K:$p}>偤&T
[RA?"%$,!=XޗkIͼl?{c##IvLˑhܓQ+|9oCgfṶHCGp8#u +:BL7Fg*Ό-P([^)H+H0ݖQQ_DWL58h"\2
{E TRHuϲ +1t4~B;GmO^2JeU_@1h2:*A{Ff,~$aXFFete>E-!@m(?,ppPf}0 +Kf"0
rd?Ol0m2zxj2oxx l4wDlchIt(LT=/ ԝF[lLCܿV.3zUb`1ߧ̋)0S-4gҗM<dj3WiKdHttlEQ_JПuO1sR+N5a=ja;
endstream
endobj
23 0 obj
[22 0 R]
endobj
31 0 obj
<</CreationDate(D:20220323205942+01'00')/Creator(Adobe Illustrator 25.3 \(Macintosh\))/ModDate(D:20220323205943+01'00')/Producer(Adobe PDF library 15.00)/Title(logo)>>
endobj
xref
+0 32
+0000000004 65535 f
+0000000016 00000 n
+0000000147 00000 n
+0000050229 00000 n
+0000000000 00000 f
+0000050280 00000 n
+0000000000 00000 f
+0000052312 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000052385 00000 n
+0000052625 00000 n
+0000054118 00000 n
+0000119706 00000 n
+0000185294 00000 n
+0000250882 00000 n
+0000316470 00000 n
+0000000000 00000 f
+0000052012 00000 n
+0000344677 00000 n
+0000050645 00000 n
+0000052199 00000 n
+0000051168 00000 n
+0000051451 00000 n
+0000051499 00000 n
+0000052083 00000 n
+0000052114 00000 n
+0000344702 00000 n
+trailer
<</Size 32/Root 1 0 R/Info 31 0 R/ID[<5C16F3B7B2884AB2995648996EC0CCA8><437909FC73174C3AB9544DB4B1B60217>]>>
startxref
344886
%%EOF
\ No newline at end of file @@ -0,0 +1,38 @@ +const { app, BrowserWindow, screen, ipcMain } = require('electron') +const path = require('path') + +require('@electron/remote/main').initialize() + +const createWindow = () => { + const mainWindow = new BrowserWindow({ + width: process.argv.includes("0") ? screen.getPrimaryDisplay().size.width + 1 : 800, + height: process.argv.includes("0") ? screen.getPrimaryDisplay().size.height + 1 : 600, + fullscreen: process.argv.includes("0"), + fullscreenable: true, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + webviewTag: true, + enableRemoteModule: true + } + }) + + ipcMain.on('sdk-call', (event, message) => { + mainWindow.send("sdk-call", message) + }) + + mainWindow.loadFile('index.html') + mainWindow.setMenu(null); +} + +app.whenReady().then(() => { + createWindow() +}) + +app.on('window-all-closed', () => { + app.quit() +}) + +app.on('web-contents-created', (_, webContents) => { + require('@electron/remote/main').enable(webContents) +}) diff --git a/menu.svg b/menu.svg new file mode 100644 index 0000000..715216f --- /dev/null +++ b/menu.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 256 256" style="enable-background:new 0 0 256 256;" xml:space="preserve"> +<style type="text/css"> + .st0{display:none;fill:#FFFFFF;} + .st1{fill:#FFFFFF;} +</style> +<path class="st0" d="M140.7,163.9V116c0,0,6.9-30.5,17-30.7c10.1-0.2-2.6,35.7-2.6,35.7s15.5-28.7,25.2-25 + c9.7,3.6-10.5,34.3-10.5,34.3s9.1-6.7,16.1-1.2c7.1,5.4-17.2,25.4-17.2,25.4l-1.2,1.8c0,0,11.3-5,3,11.5s-20,12.5-20,12.5 + S140.7,175.6,140.7,163.9z"/> +<g> + <path class="st1" d="M176.9,73.3l4.6-3.1c6.4-15,9.8-29.4,0.9-32.8c-20-7.5-52,51.5-52,51.5s26.2-74,5.4-73.6 + C115,15.9,100.9,54,100.9,78.7s0,45.1,0,45.1L176.9,73.3z"/> + <path class="st1" d="M176.7,135.3l-8.2,11.6l-4.9,6.9c11.2-9.9,37.6-34.8,32.4-45.7L176.7,135.3z"/> + <path class="st1" d="M158.5,161l-34,48l-1.9,2.7c5.3,1.1,25.2,3.2,39.8-26.1C176,158.3,164,159.4,158.5,161z"/> +</g> +<g> + <polygon class="st1" points="159.8,144.8 194.2,96.4 160,96.4 87,144.8 "/> + <polygon class="st1" points="153.4,153.9 73.4,153.9 31.3,181.8 52.5,202.3 119,202.3 "/> + <polygon class="st1" points="200.6,87.3 224.7,53.4 173.6,87.3 "/> + <polygon class="st1" points="61.9,211.4 92,240.5 112.6,211.4 "/> +</g> +</svg> diff --git a/missing.png b/missing.png Binary files differnew file mode 100644 index 0000000..8bab934 --- /dev/null +++ b/missing.png diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7e74ac3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2237 @@ +{ + "name": "AlicornDesktop", + "version": "r1alpha1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "r1alpha1", + "dependencies": { + "@electron/remote": "^2.0.8", + "electron": "^17.1.2", + "jquery": "^3.6.0", + "loudness": "github:LinusU/node-loudness", + "node-wifi": "^2.0.16", + "systeminformation": "^5.11.9", + "uuidv4": "^6.2.12", + "yaml": "^1.10.2" + } + }, + "node_modules/@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=8.6" + }, + "optionalDependencies": { + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1" + } + }, + "node_modules/@electron/remote": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.0.8.tgz", + "integrity": "sha512-P10v3+iFCIvEPeYzTWWGwwHmqWnjoh8RYnbtZAb3RlQefy4guagzIwcWtfftABIfm6JJTNQf4WPSKWZOpLmHXw==", + "peerDependencies": { + "electron": ">= 13.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" + }, + "node_modules/@types/uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==" + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "optional": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dependencies": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "optional": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "optional": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "optional": true + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/electron": { + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.2.tgz", + "integrity": "sha512-hqKQaUIRWX5Y2eAD8FZINWD/e5TKdpkbBYbkcZmJS4Bd1PKQsaDVc9h5xoA8zZQkPymE9rss+swjRpAFurOPGQ==", + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^1.13.0", + "@types/node": "^14.6.2", + "extract-zip": "^1.0.3" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 8.6" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "optional": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "optional": true, + "dependencies": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "optional": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "optional": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "optional": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node_modules/loudness": { + "version": "0.4.1", + "resolved": "git+ssh://git@github.com/LinusU/node-loudness.git#444a4cd94cde3e1d7b3bad40433bb17b9de7eb76", + "license": "MIT", + "dependencies": { + "execa": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-wifi": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/node-wifi/-/node-wifi-2.0.16.tgz", + "integrity": "sha512-WOgs7kqTvijHij1GLMVW/ReIZHEtcvJuZSMDExEDhBhLquQJPUbBOIsQxavnhJJ06MQnGXnW1qJKe9ADibOTIA==", + "dependencies": { + "command-line-args": "^5.2.0", + "command-line-usage": "^6.1.1" + }, + "bin": { + "wifi": "bin/wifi.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "optional": true, + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "optional": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "optional": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/systeminformation": { + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.11.9.tgz", + "integrity": "sha512-eeMtL9UJFR/LYG+2rpeAgZ0Va4ojlNQTkYiQH/xbbPwDjDMsaetj3Pkc+C1aH5G8mav6HvDY8kI4Vl4noksSkA==", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "optional": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uuidv4": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/uuidv4/-/uuidv4-6.2.12.tgz", + "integrity": "sha512-UnN4ThIYWhv3ZUE8UwDnnCvh4JafCNu+sQkxmLyjCVwK3rjLfkg3DYiEv6oCMDIAIVEDP4INg4kX/C5hKaRzZA==", + "dependencies": { + "@types/uuid": "8.3.1", + "uuid": "8.3.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, + "dependencies": { + "@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "requires": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + } + }, + "@electron/remote": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.0.8.tgz", + "integrity": "sha512-P10v3+iFCIvEPeYzTWWGwwHmqWnjoh8RYnbtZAb3RlQefy4guagzIwcWtfftABIfm6JJTNQf4WPSKWZOpLmHXw==", + "requires": {} + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" + }, + "@types/uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + }, + "boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "optional": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "requires": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" + } + } + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "optional": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "optional": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "optional": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "electron": { + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.2.tgz", + "integrity": "sha512-hqKQaUIRWX5Y2eAD8FZINWD/e5TKdpkbBYbkcZmJS4Bd1PKQsaDVc9h5xoA8zZQkPymE9rss+swjRpAFurOPGQ==", + "requires": { + "@electron/get": "^1.13.0", + "@types/node": "^14.6.2", + "extract-zip": "^1.0.3" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "optional": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "optional": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "optional": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "requires": { + "array-back": "^3.0.1" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "optional": true, + "requires": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "optional": true, + "requires": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + } + }, + "globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "optional": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "optional": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "optional": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "optional": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "loudness": { + "version": "git+ssh://git@github.com/LinusU/node-loudness.git#444a4cd94cde3e1d7b3bad40433bb17b9de7eb76", + "from": "loudness@github:LinusU/node-loudness", + "requires": { + "execa": "^4.0.3" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "optional": true, + "requires": { + "escape-string-regexp": "^4.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node-wifi": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/node-wifi/-/node-wifi-2.0.16.tgz", + "integrity": "sha512-WOgs7kqTvijHij1GLMVW/ReIZHEtcvJuZSMDExEDhBhLquQJPUbBOIsQxavnhJJ06MQnGXnW1qJKe9ADibOTIA==", + "requires": { + "command-line-args": "^5.2.0", + "command-line-usage": "^6.1.1" + } + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "optional": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "optional": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "optional": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "optional": true, + "requires": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "optional": true + }, + "serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "optional": true, + "requires": { + "type-fest": "^0.13.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "requires": { + "debug": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "systeminformation": { + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.11.9.tgz", + "integrity": "sha512-eeMtL9UJFR/LYG+2rpeAgZ0Va4ojlNQTkYiQH/xbbPwDjDMsaetj3Pkc+C1aH5G8mav6HvDY8kI4Vl4noksSkA==" + }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "optional": true + }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "uuidv4": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/uuidv4/-/uuidv4-6.2.12.tgz", + "integrity": "sha512-UnN4ThIYWhv3ZUE8UwDnnCvh4JafCNu+sQkxmLyjCVwK3rjLfkg3DYiEv6oCMDIAIVEDP4INg4kX/C5hKaRzZA==", + "requires": { + "@types/uuid": "8.3.1", + "uuid": "8.3.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8c97273 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "version": "r1alpha1", + "release": "0.1.1", + "dependencies": { + "@electron/remote": "^2.0.8", + "electron": "^17.1.2", + "jquery": "^3.6.0", + "loudness": "github:LinusU/node-loudness", + "node-wifi": "^2.0.16", + "systeminformation": "^5.11.9", + "uuidv4": "^6.2.12", + "yaml": "^1.10.2" + } +} @@ -0,0 +1 @@ +376
\ No newline at end of file diff --git a/sdk/host.js b/sdk/host.js new file mode 100644 index 0000000..4d76832 --- /dev/null +++ b/sdk/host.js @@ -0,0 +1,42 @@ +AlicornSDK = {}; +AlicornSDKInternal = {}; + +class AlicornSDKError extends Error { + constructor(props) { + super(props); + } +} + +AlicornSDKInternal["checkWindow"] = (w) => { + if (w === null) { + throw new AlicornSDKError("Cannot make SDK call before window is initialized"); + } +} + +AlicornSDKInternal["resolveWindow"] = (w) => { + let wr = null + wr = WindowManager.stack.filter(i => i.id.substring(7).split("-app-")[0] === w)[0] + + return wr; +} + +AlicornSDK["close"] = (_window) => { + AlicornSDKInternal.checkWindow(_window); + let w = AlicornSDKInternal.resolveWindow(_window); + + WindowManager.queueClose(w); +} + +AlicornSDK["ready"] = (_window) => { + AlicornSDKInternal.checkWindow(_window); + let w = AlicornSDKInternal.resolveWindow(_window); + + w.classList.remove("loading"); +} + +AlicornSDK["keyboard"] = (_window, data) => { + AlicornSDKInternal.checkWindow(_window); + let w = AlicornSDKInternal.resolveWindow(_window); + + KeyboardShortcutHandler(data); +}
\ No newline at end of file diff --git a/sdk/keyboard.js b/sdk/keyboard.js new file mode 100644 index 0000000..06a0623 --- /dev/null +++ b/sdk/keyboard.js @@ -0,0 +1,15 @@ +document.addEventListener('keyup', (e) => { + processKey = true; + if (e.key === "Ctrl" || e.key === "Alt" || e.key === "Shift" || e.key === "Meta") { + if (keyPressShortcut) { + processKey = false; + keyPressShortcut = (e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) || (!e.ctrlKey && e.altKey && !e.shiftKey && !e.metaKey) || (!e.ctrlKey && !e.altKey && e.shiftKey && !e.metaKey) || (!e.ctrlKey && !e.altKey && !e.shiftKey && e.metaKey); + } + } else { + keyPressShortcut = e.ctrlKey || e.altKey || e.shiftKey || e.metaKey; + } + if (processKey) { + shortcut = (e.ctrlKey ? "Control+" : "") + (e.altKey ? "Alt+" : "") + (e.shiftKey ? "Shift+" : "") + (e.metaKey ? "Meta+" : "") + e.key; + alicorn.keyboard(shortcut); + } +})
\ No newline at end of file diff --git a/sdk/main.js b/sdk/main.js new file mode 100644 index 0000000..e0f571c --- /dev/null +++ b/sdk/main.js @@ -0,0 +1,32 @@ +console.log("Alicorn SDK") +const { contextBridge, ipcRenderer } = require('electron'); +global.windowId = null; + +let host = require('@electron/remote').getCurrentWindow().webContents.executeJavaScript; + +ipcRenderer.on('window-id', (event, data) => { + console.log("[SDK] Alicorn Window ID: " + data); + contextBridge.exposeInMainWorld('AlicornWindowID', data); + global.windowId = data; +}) + +contextBridge.exposeInMainWorld('AlicornRoot', require('path').dirname(__dirname)); +contextBridge.exposeInMainWorld('AlicornKeyboardHandler', require('fs').readFileSync("sdk/keyboard.js").toString()); + +contextBridge.exposeInMainWorld('AlicornSDK', { + init: async () => { + let api = {}; + + console.log("[SDK] Establishing features set... This may take a while."); + let features = await host("Object.keys(AlicornSDK)"); + console.log("[SDK] Established features set"); + + for (let feature of features) { + api[feature] = (options) => { + return host("AlicornSDK[" + JSON.stringify(feature) + "](\"" + windowId + "\", " + JSON.stringify(options) + ");"); + }; + } + + return api; + } +})
\ No newline at end of file diff --git a/shortcuts.js b/shortcuts.js new file mode 100644 index 0000000..027bd3d --- /dev/null +++ b/shortcuts.js @@ -0,0 +1,63 @@ +let keyPressShortcut = false; +global.KeyboardShortcuts = {} + +function KeyboardShortcutHandler(shortcut) { + if (Object.keys(KeyboardShortcuts).includes(shortcut) && document.getElementById("debugging-options").classList.contains("hidden")) { + KeyboardShortcuts[shortcut](); + } else if (!document.getElementById("debugging-options").classList.contains("hidden")) { + DebugMenu.processKey(shortcut); + } +} + +document.onkeyup = KeyboardEventHandler = (e) => { + processKey = true; + if (e.key === "Ctrl" || e.key === "Alt" || e.key === "Shift" || e.key === "Meta") { + if (keyPressShortcut) { + processKey = false; + keyPressShortcut = (e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) || (!e.ctrlKey && e.altKey && !e.shiftKey && !e.metaKey) || (!e.ctrlKey && !e.altKey && e.shiftKey && !e.metaKey) || (!e.ctrlKey && !e.altKey && !e.shiftKey && e.metaKey); + } + } else { + keyPressShortcut = e.ctrlKey || e.altKey || e.shiftKey || e.metaKey; + } + if (processKey) { + shortcut = (e.ctrlKey ? "Control+" : "") + (e.altKey ? "Alt+" : "") + (e.shiftKey ? "Shift+" : "") + (e.metaKey ? "Meta+" : "") + e.key; + console.log(shortcut); + KeyboardShortcutHandler(shortcut); + } +} + +KeyboardShortcuts["Alt+Tab"] = () => { + WindowManager.cycleForward(); +} + +KeyboardShortcuts["Alt+Shift+Tab"] = () => { + WindowManager.cycleBackward(); +} + +KeyboardShortcuts["Meta+ArrowUp"] = KeyboardShortcuts["Alt+Shift+ArrowUp"] = () => { + if (!WindowManager.stack[0].classList.contains("minimized")) WindowManager.maximize(WindowManager.stack[0]); + if (WindowManager.stack[0].classList.contains("minimized")) WindowManager.unminimize(WindowManager.stack[0]); +} + +KeyboardShortcuts["Meta+ArrowDown"] = KeyboardShortcuts["Alt+Shift+ArrowDown"] = () => { + if (!WindowManager.stack[0].classList.contains("maximized")) WindowManager.minimize(WindowManager.stack[0]); + if (WindowManager.stack[0].classList.contains("maximized")) WindowManager.restore(WindowManager.stack[0]); +} + +KeyboardShortcuts["Meta+Q"] = KeyboardShortcuts["Alt+Shift+Q"] = KeyboardShortcuts["Alt+Shift+Ω"] = () => { + WindowManager.close(WindowManager.stack[0]); +} + +KeyboardShortcuts["Meta+ArrowLeft"] = KeyboardShortcuts["Alt+Shift+ArrowLeft"] = () => { + if (WindowManager.stack[0].classList.contains("maximized")) WindowManager.restore(WindowManager.stack[0]); + if (!WindowManager.stack[0].classList.contains("minimized")) WindowManager.paneLeft(WindowManager.stack[0]); +} + +KeyboardShortcuts["Meta+ArrowRight"] = KeyboardShortcuts["Alt+Shift+ArrowRight"] = () => { + if (WindowManager.stack[0].classList.contains("maximized")) WindowManager.restore(WindowManager.stack[0]); + if (!WindowManager.stack[0].classList.contains("minimized")) WindowManager.paneRight(WindowManager.stack[0]); +} + +KeyboardShortcuts["Control+Alt+Delete"] = KeyboardShortcuts["Control+Alt+Backspace"] = () => { + DebugMenu.show(); +}
\ No newline at end of file diff --git a/status-apps.js b/status-apps.js new file mode 100644 index 0000000..7fa3acf --- /dev/null +++ b/status-apps.js @@ -0,0 +1,88 @@ +/* +<span class="statusbar-app" id="app-test"> + <img class="statusbar-app-icon" src="defaultapp.svg"> +</span> + */ + +WindowManager._.updateAppbar = () => { + let apps = WindowManager.stack.map((w) => { + let pkg = w.id.split("-app-")[1]; + if (fs.existsSync("./data/user/Applications/" + pkg + ".aap") && fs.existsSync("./data/user/Applications/" + pkg + ".aap/AlicornApp.yml")) { + try { + let app = YAML.parse(fs.readFileSync("./data/user/Applications/" + pkg + ".aap/AlicornApp.yml", "utf-8")); + if (fs.existsSync("./data/user/Applications/" + pkg + ".aap/AlicornApp.svg")) { + return { + package: $('<div>').text(pkg).html(), + name: $('<div>').text(app.name).html(), + icon: "./data/user/Applications/" + $('<div>').text(pkg).html() + ".aap/AlicornApp.svg", + window: w + }; + } else if (fs.existsSync("./data/user/Applications/" + pkg + ".aap/AlicornApp.png")) { + return { package: $('<div>').text(pkg).html(), name: $('<div>').text(app.name).html(), icon: "./data/user/Applications/" + $('<div>').text(pkg).html() + ".aap/AlicornApp.png", window: w }; + } else { + return { package: $('<div>').text(pkg).html(), name: $('<div>').text(app.name).html(), icon: "./defaultapp.svg", window: w }; + } + } catch (e) { + return { package: $('<div>').text(pkg).html(), name: $('<div>').text(pkg).html(), icon: "./defaultapp.svg", window: w }; + } + } else { + return { package: $('<div>').text(pkg).html(), name: $('<div>').text(pkg).html(), icon: "./defaultapp.svg", window: w }; + } + }).sort((a, b) => a.name.localeCompare(b.name)); + + html = ""; + for (let app of apps) { + classes = ["statusbar-app"]; + + if (!app.window.classList.contains("unfocused")) { + classes.push("focused"); + } + + if (app.window.classList.contains("minimized")) { + classes.push("minimized"); + } + + html += `<span class="${classes.join(' ')}" id="app-${app.package}"> + <img class="statusbar-app-icon" src="${app.icon}"> + </span>` + } + + document.getElementById("statusbar-apps").innerHTML = html; + + for (let app of apps) { + let item = document.getElementById(`app-${app.package}`); + + item.onclick = () => { + if (item.classList.contains("minimized")) { + WindowManager.unminimize(app.window); + WindowManager.bringToFront(app.window); + } else if (item.classList.contains("focused")) { + WindowManager.minimize(app.window); + } else { + WindowManager.bringToFront(app.window); + } + } + + item.onmouseover = () => { + if (app.window.classList.contains("loading")) { + if (item.classList.contains("minimized")) { + WindowManager.showTooltip(item, app.name + "|Starting, minimized", true); + } else { + WindowManager.showTooltip(item, app.name + "|Starting", true); + } + } else { + if (item.classList.contains("minimized")) { + WindowManager.showTooltip(item, app.name + "|Minimized", true); + } else { + WindowManager.showTooltip(item, app.name, true); + } + } + } + + item.onmouseleave = () => { + WindowManager.hideTooltip(); + } + } +} + +WindowManager._.updateAppbar();
\ No newline at end of file diff --git a/status-battery.js b/status-battery.js new file mode 100644 index 0000000..3a209bf --- /dev/null +++ b/status-battery.js @@ -0,0 +1,77 @@ +global.lastKnownBattery = { + name: "Unknown", + description: "Unknown", + time: "" +} + +let getBatteryRemainingTime = async () => { + let battery = await navigator.getBattery(); + + let time = 0; + if (battery.charging) { + time = battery.chargingTime; + } else { + time = battery.dischargingTime; + } + + if (time === Infinity) { + return "Calculating..."; + } else { + if (time > 60) { + if (time > 60**2) { + if (time > 60**3) { + return "About " + Math.round(time / 60**3) + " day" + (Math.round(time / 60**3) > 1 ? "s" : "") + (battery.charging ? " before charged" : " remaining"); + } else { + return "About " + Math.round(time / 60**2) + " hour" + (Math.round(time / 60**2) > 1 ? "s" : "") + (battery.charging ? " before charged" : " remaining"); + } + } else { + return "About " + Math.round(time / 60) + " minute" + (Math.round(time / 60) > 1 ? "s" : "") + (battery.charging ? " before charged" : " remaining"); + } + } else { + return "About " + Math.round(time) + " second" + (time > 1 ? "s" : "") + (battery.charging ? " before charged" : " remaining"); + } + } +} + +let updateBattery = async () => { + let battery = await navigator.getBattery(); + + global.lastKnownBattery.name = "Battery: " + Math.round(battery.level * 100) + "%"; + global.lastKnownBattery.time = await getBatteryRemainingTime(); + if (battery.level <= 0.01) { + global.lastKnownBattery.description = "Critically low" + (battery.charging ? ", charging" : ", discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-000-001" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.01 && battery.level <= 0.1) { + global.lastKnownBattery.description = "Very low" + (battery.charging ? ", charging" : ", discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-001-010" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.1 && battery.level <= 0.2) { + global.lastKnownBattery.description = "Low battery" + (battery.charging ? ", charging" : ", discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-010-020" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.2 && battery.level <= 0.35) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-020-035" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.35 && battery.level <= 0.5) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-035-050" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.5 && battery.level <= 0.6) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-050-060" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.6 && battery.level <= 0.8) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-060-080" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.8 && battery.level <= 0.95) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-080-095" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.95 && battery.level <= 1) { + global.lastKnownBattery.description = (battery.charging ? "Charged" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-095-100" + (battery.charging ? "-charging" : "") + ".svg"; + } else { + global.lastKnownBattery.description = "Unknown"; + document.getElementById("statusbar-battery-icon").src = "./icons/battery-unknown.svg"; + } +} + +(async () => { + setInterval(updateBattery, 10000) + await updateBattery(); +})()
\ No newline at end of file diff --git a/status-network.js b/status-network.js new file mode 100644 index 0000000..05c4bfe --- /dev/null +++ b/status-network.js @@ -0,0 +1,43 @@ +global.lastKnownNetwork = { + name: "Wired connection", + description: "Connected" +} + +let updateNetwork = async () => { + let connections = await wifi.getCurrentConnections() + + if (connections.length > 0) { + let connection = connections[0]; + + if (connection.quality <= 20) { + global.lastKnownNetwork.name = connection.ssid; + global.lastKnownNetwork.description = "Connected, unstable"; + document.getElementById("statusbar-network-icon").src = "./icons/network-wifi-0.svg"; + } else if (connection.quality <= 40) { + global.lastKnownNetwork.name = connection.ssid; + global.lastKnownNetwork.description = "Connected, poor"; + document.getElementById("statusbar-network-icon").src = "./icons/network-wifi-1.svg"; + } else if (connection.quality <= 60) { + global.lastKnownNetwork.name = connection.ssid; + global.lastKnownNetwork.description = "Connected, usable"; + document.getElementById("statusbar-network-icon").src = "./icons/network-wifi-2.svg"; + } else if (connection.quality <= 80) { + global.lastKnownNetwork.name = connection.ssid; + global.lastKnownNetwork.description = "Connected, good"; + document.getElementById("statusbar-network-icon").src = "./icons/network-wifi-3.svg"; + } else { + global.lastKnownNetwork.name = connection.ssid; + global.lastKnownNetwork.description = "Connected, perfect"; + document.getElementById("statusbar-network-icon").src = "./icons/network-wifi-4.svg"; + } + } else { + global.lastKnownNetwork.name = "Wired connection"; + global.lastKnownNetwork.description = "Connected"; + document.getElementById("statusbar-network-icon").src = "./icons/network-wired.svg"; + } +} + +(async () => { + setInterval(updateNetwork, 10000) + await updateNetwork(); +})()
\ No newline at end of file diff --git a/status-sound.js b/status-sound.js new file mode 100644 index 0000000..e76c576 --- /dev/null +++ b/status-sound.js @@ -0,0 +1,28 @@ +global.lastKnownAudio = "Muted"; + +let updateAudio = async () => { + let volume = await loudness.getVolume() + let muted = await loudness.getMuted() + + if (!muted) { + global.lastKnownAudio = volume + "%"; + + if (volume <= 0) { + document.getElementById("statusbar-sound-icon").src = "./icons/volume-0.svg"; + } else if (volume <= 33) { + document.getElementById("statusbar-sound-icon").src = "./icons/volume-1.svg"; + } else if (volume <= 66) { + document.getElementById("statusbar-sound-icon").src = "./icons/volume-2.svg"; + } else { + document.getElementById("statusbar-sound-icon").src = "./icons/volume-3.svg"; + } + } else { + global.lastKnownAudio = "Muted"; + document.getElementById("statusbar-sound-icon").src = "./icons/volume-0.svg"; + } +} + +(async () => { + setInterval(updateAudio, 10000) + await updateAudio(); +})()
\ No newline at end of file diff --git a/status-time.js b/status-time.js new file mode 100644 index 0000000..6c469c1 --- /dev/null +++ b/status-time.js @@ -0,0 +1,6 @@ +let updateTime = () => { + document.getElementById("statusbar-time").innerText = new Date().getHours() + ":" + (new Date().getMinutes() > 9 ? new Date().getMinutes() : "0" + new Date().getMinutes()); +} + +setInterval(updateTime, 1000) +updateTime()
\ No newline at end of file diff --git a/status-tooltip.js b/status-tooltip.js new file mode 100644 index 0000000..3a562e2 --- /dev/null +++ b/status-tooltip.js @@ -0,0 +1,58 @@ +document.getElementById("menubtn").onmouseover = () => { + WindowManager.showTooltip(document.getElementById("menubtn"), "Alicorn Application Launcher|Start and manage apps on the system"); +} + +document.getElementById("statusbar-network").onmouseover = () => { + WindowManager.showTooltip(document.getElementById("statusbar-network"), lastKnownNetwork.name + "|" + lastKnownNetwork.description); +} + +document.getElementById("statusbar-sound").onmouseover = () => { + WindowManager.showTooltip(document.getElementById("statusbar-sound"), "Volume: " + lastKnownAudio); +} + +document.getElementById("statusbar-battery").onmouseover = () => { + WindowManager.showTooltip(document.getElementById("statusbar-battery"), lastKnownBattery.name + "|" + lastKnownBattery.description + "\n" + lastKnownBattery.time); +} + +document.getElementById("statusbar-time").onmouseover = () => { + a = new Date().toString().split(":")[0].split(" "); a.pop(); + WindowManager.showTooltip(document.getElementById("statusbar-time"), a.join(" ") + "|" + new Date().toTimeString().split("(")[1].split(")")[0]); +} + +document.getElementById("statusbar-time").onmouseleave = document.getElementById("statusbar-battery").onmouseleave = document.getElementById("statusbar-sound").onmouseleave = document.getElementById("statusbar-network").onmouseleave = document.getElementById("menubtn").onmouseleave = () => { + WindowManager.hideTooltip(); +} + +WindowManager.showTooltip = (element, message, _appIcon, floating) => { + document.getElementById("appbar-tooltip").classList.remove("hidden"); + + message = $('<div>').text(message).html().replaceAll("\n", "<br>") + if (message.split("|").length > 1) { + document.getElementById("appbar-tooltip").innerHTML = message.split("|")[0] + "<br><span style='opacity:.5;'>" + message.split("|")[1] + "</span>"; + } else { + document.getElementById("appbar-tooltip").innerHTML = message.split("|")[0]; + } + let position = element.getBoundingClientRect(); + let left = position.left; + let top = position.top; + + if (left <= 50) { + document.getElementById("appbar-tooltip").style.left = "3px"; + } else if (left >= (window.innerWidth - (document.getElementById("appbar-tooltip").clientWidth / 2) - 3)) { + document.getElementById("appbar-tooltip").style.left = (window.innerWidth - document.getElementById("appbar-tooltip").clientWidth - 5) + "px"; + } else { + document.getElementById("appbar-tooltip").style.left = (left - (document.getElementById("appbar-tooltip").clientWidth / 2) + 12) + "px"; + } + + if (floating) { + if (top <= 10) { + document.getElementById("appbar-tooltip").style.top = "20px"; + } else if (top >= (window.innerHeight - (document.getElementById("appbar-tooltip").clientHeight / 2) - 3)) { + document.getElementById("appbar-tooltip").style.top = ((window.innerHeight - document.getElementById("appbar-tooltip").clientHeight - 5) - 25) + "px"; + } else { + document.getElementById("appbar-tooltip").style.top = ((top - (document.getElementById("appbar-tooltip").clientHeight / 2) + 12) - 25) + "px"; + } + } else { + document.getElementById("appbar-tooltip").style.top = ""; + } +}
\ No newline at end of file diff --git a/test.png b/test.png Binary files differnew file mode 100644 index 0000000..6bfbbce --- /dev/null +++ b/test.png diff --git a/wallpaper b/wallpaper Binary files differnew file mode 100644 index 0000000..96b8f98 --- /dev/null +++ b/wallpaper diff --git a/windowmanager.css b/windowmanager.css new file mode 100644 index 0000000..528a16a --- /dev/null +++ b/windowmanager.css @@ -0,0 +1,213 @@ +.window-titlebar { + background: rgba(51, 51, 51, 0.75); + border-top-left-radius: 10px; + border-top-right-radius: 10px; + border-bottom: 1px solid black; + color: rgba(255, 255, 255, 0.75); + cursor: default; + display: flex; + align-items: center; + justify-content: left; + font-weight: bolder; + font-size: 14px; +} + +.window-titlebar:active { + cursor: move; +} + +.window { + background-color: rgba(18, 18, 18, 0.75); + border-radius: 10px; + border: 1px solid rgba(199, 199, 199, 0.5); + box-shadow: 1px 5px 15px rgba(0, 0, 0, .75); + backdrop-filter: blur(15px); + transition: background-color 200ms; +} + +.window.unfocused { + background-color: rgba(18, 18, 18, 1); +} + +.window.unfocused .resizers *:not(.window-titlebar) { + opacity: .75; + pointer-events: none; +} + +.window.maximized { + top: 0 !important; + left: 0 !important; + right: 0 !important; + bottom: 0 !important; + position: fixed !important; + width: 100% !important; + height: calc(100% - 50px) !important; + border-radius: 0; + border-color: transparent; + box-shadow: none; + transition: height 200ms, width 200ms, top 200ms, bottom 200ms, left 200ms, right 200ms; +} + +.window.restored { + transition: height 200ms, width 200ms, top 200ms, bottom 200ms, left 200ms, right 200ms; +} + +.window.maximized .resizer { + display: none; +} + +.window.dragging .window-content { + pointer-events: none; +} + +.window.maximized.maximized-left { + width: 50vw !important; + left: 0 !important; +} + +.window.maximized.maximized-right { + width: 50vw !important; + left: 50vw !important; +} + +.window.minimized { + opacity: 0; + position: fixed; + height: 0 !important; + width: 0 !important; + transition: height 200ms, width 200ms, top 200ms, bottom 200ms, left 200ms, right 200ms, opacity 200ms; +} + +.window.unminimized { + transition: height 200ms, width 200ms, top 200ms, bottom 200ms, left 200ms, right 200ms, opacity 200ms; +} + +.window.maximized .window-titlebar, #appbar.has-maximized { + border-radius: 0; +} + +.resizable .resizers{ + width: 100%; + height: 100%; + box-sizing: border-box; + opacity: 1; + transition: opacity 200ms; +} + +.resizable .resizers .resizer{ + width: 10px; + height: 10px; + border-radius: 50%; + position: absolute; + background: white; +} +.resizable .resizers .resizer.top-left { + left: -5px; + top: -5px; + cursor: nwse-resize; /*resizer cursor*/ + } +.resizable .resizers .resizer.top-right { + right: -5px; + top: -5px; + cursor: nesw-resize; + } +.resizable .resizers .resizer.bottom-left { + left: -5px; + bottom: -5px; + cursor: nesw-resize; + } +.resizable .resizers .resizer.bottom-right { + right: -5px; + bottom: -5px; + cursor: nwse-resize; + } + +.window-sandbox { + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; + height: 100%; +} + +.window-content { + height: calc(100% - 25px); + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; +} + +.window.loading .window-loader { + height: calc(100% - 25px); + width: 100%; + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; + background: rgba(51, 51, 51, 1); +} + +.window.loading .window-titlebar { + border-bottom: none; + background-color: rgba(51, 51, 51, 1); +} + +.window.loading:not(.dragging) * { + cursor: wait !important; +} + +.window-loader { + display: flex; + align-items: center; + justify-content: center; + text-align: center; +} + +.window-loader-icon { + width: 64px; +} + +.window-loader-spinner { + width: 36px; +} + +.window.maximized .window-loader, .window.maximized .window-content, .window.maximized .window-sandbox { + border-radius: 0 !important; +} + +.window.loading .window-content { + display: none; +} + +.window-action { + width: 16px; + vertical-align: middle; + padding: 4px; + pointer-events: all !important; + cursor: default !important; +} + +.window-action:nth-child(1) { + padding-right: 2px; +} + +.window-action:nth-child(2) { + padding-left: 2px; + padding-right: 2px; +} + +.window-action:nth-child(3) { + padding-left: 2px; +} + +.window-action:hover { + opacity: .5; +} + +.window-action:active { + opacity: .1; +} + +.window-title { + margin-left: 5px; +} + +.window-action.disabled { + pointer-events: none; + opacity: .25 !important; +}
\ No newline at end of file diff --git a/windowmanager.js b/windowmanager.js new file mode 100644 index 0000000..02d82b9 --- /dev/null +++ b/windowmanager.js @@ -0,0 +1,347 @@ +function dragElement(elmnt) { + console.log(elmnt.id); + + var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; + if (document.getElementById(elmnt.id + "-titlebar")) { + document.getElementById(elmnt.id + "-titlebar").onmousedown = dragMouseDown; + document.getElementById(elmnt.id + "-titlebar").addEventListener('click', WindowManager._.doubleClickTitlebar(elmnt), false); + } else { + elmnt.onmousedown = dragMouseDown; + elmnt.addEventListener('click', WindowManager._.doubleClickTitlebar(elmnt), false); + } + + function dragMouseDown(e) { + elmnt.classList.add("dragging"); + elmnt.classList.remove("restored"); + elmnt.classList.remove("unminimized"); + e = e || window.event; + e.preventDefault(); + if (e.target.parentElement.classList.contains("maximized") || e.target.classList.contains("window-action") || e.target.classList.contains("window-actions")) { + return; + } + pos3 = e.clientX; + pos4 = e.clientY; + document.onmouseup = closeDragElement; + document.onmousemove = elementDrag; + } + + function elementDrag(e) { + elmnt.classList.remove("restored"); + elmnt.classList.remove("unminimized"); + e = e || window.event; + e.preventDefault(); + pos1 = pos3 - e.clientX; + pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; + elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; + } + + function closeDragElement() { + elmnt.classList.remove("dragging"); + document.onmouseup = null; + document.onmousemove = null; + } +} + +function makeResizableDiv(div) { + const element = document.querySelector(div); + const resizers = document.querySelectorAll(div + ' .resizer') + const minimum_size = 20; + let original_width = 0; + let original_height = 0; + let original_x = 0; + let original_y = 0; + let original_mouse_x = 0; + let original_mouse_y = 0; + for (let i = 0;i < resizers.length; i++) { + const currentResizer = resizers[i]; + currentResizer.addEventListener('mousedown', function(e) { + e.preventDefault() + original_width = parseFloat(getComputedStyle(element, null).getPropertyValue('width').replace('px', '')); + original_height = parseFloat(getComputedStyle(element, null).getPropertyValue('height').replace('px', '')); + original_x = element.getBoundingClientRect().left; + original_y = element.getBoundingClientRect().top; + original_mouse_x = e.pageX; + original_mouse_y = e.pageY; + window.addEventListener('mousemove', resize) + window.addEventListener('mouseup', stopResize) + }) + + function resize(e) { + element.classList.remove("restored"); + element.classList.remove("unminimized"); + if (currentResizer.classList.contains('bottom-right')) { + const width = original_width + (e.pageX - original_mouse_x); + const height = original_height + (e.pageY - original_mouse_y) + if (width > minimum_size) { + element.style.width = width + 'px' + } + if (height > minimum_size) { + element.style.height = height + 'px' + } + } + else if (currentResizer.classList.contains('bottom-left')) { + const height = original_height + (e.pageY - original_mouse_y) + const width = original_width - (e.pageX - original_mouse_x) + if (height > minimum_size) { + element.style.height = height + 'px' + } + if (width > minimum_size) { + element.style.width = width + 'px' + element.style.left = original_x + (e.pageX - original_mouse_x) + 'px' + } + } + else if (currentResizer.classList.contains('top-right')) { + const width = original_width + (e.pageX - original_mouse_x) + const height = original_height - (e.pageY - original_mouse_y) + if (width > minimum_size) { + element.style.width = width + 'px' + } + if (height > minimum_size) { + element.style.height = height + 'px' + element.style.top = original_y + (e.pageY - original_mouse_y) + 'px' + } + } + else { + const width = original_width - (e.pageX - original_mouse_x) + const height = original_height - (e.pageY - original_mouse_y) + if (width > minimum_size) { + element.style.width = width + 'px' + element.style.left = original_x + (e.pageX - original_mouse_x) + 'px' + } + if (height > minimum_size) { + element.style.height = height + 'px' + element.style.top = original_y + (e.pageY - original_mouse_y) + 'px' + } + } + } + + function stopResize() { + window.removeEventListener('mousemove', resize) + } + } +} + +WindowManager = { + stack: [], + windows: {}, + webContents: {}, + + bringToFront: (w) => { + if (w.classList.contains("minimized")) WindowManager.unminimize(w); + WindowManager.stack.sort(function(x,y){ return x === w ? -1 : y === w ? 1 : 0; }); + WindowManager._.refreshStack(); + WindowManager._.updateAppbar(); + WindowManager._.updateWindowButtons(); + }, + maximize: (w) => { + document.getElementById("appbar").classList.add("has-maximized"); + w.classList.add("maximized"); + w.classList.remove("restored"); + WindowManager._.updateAppbar(); + WindowManager._.updateWindowButtons(); + }, + restore: (w) => { + w.classList.remove("maximized"); + w.classList.remove("maximized-left"); + w.classList.remove("maximized-right"); + w.classList.add("restored"); + hasMaximized = false; + for (let win of Array.from(document.getElementsByClassName("window"))) { + if (win.classList.contains("maximized")) { + hasMaximized = true; + } + } + if (!hasMaximized) document.getElementById("appbar").classList.remove("has-maximized"); + WindowManager._.updateAppbar(); + WindowManager._.updateWindowButtons(); + }, + minimize: (w) => { + w.classList.add("minimized"); + w.classList.remove("unminimized"); + w.classList.remove("maximized"); + w.classList.remove("maximized-left"); + w.classList.remove("maximized-right"); + hasMaximized = false; + for (let win of Array.from(document.getElementsByClassName("window"))) { + if (win.classList.contains("maximized")) { + hasMaximized = true; + } + } + if (!hasMaximized) document.getElementById("appbar").classList.remove("has-maximized"); + WindowManager._.updateAppbar(); + WindowManager._.updateWindowButtons(); + WindowManager.hideTooltip(); + WindowManager.cycleForward(); + }, + unminimize: (w) => { + w.classList.remove("minimized"); + w.classList.add("unminimized"); + WindowManager._.updateAppbar(); + WindowManager._.updateWindowButtons(); + }, + paneLeft: (w) => { + WindowManager.maximize(w); + w.classList.add("maximized-left"); + WindowManager._.updateAppbar(); + WindowManager._.updateWindowButtons(); + }, + paneRight: (w) => { + WindowManager.maximize(w); + w.classList.add("maximized-right"); + WindowManager._.updateAppbar(); + WindowManager._.updateWindowButtons(); + }, + close: (w, i) => { + w.outerHTML = ""; + try { + if (i) { + WindowManager.stack[i].outerHTML = ""; + } + } catch (e) { + console.error(e); + } + WindowManager.stack = WindowManager.stack.filter(i => i !== w); + if (WindowManager.stack.length > 0) WindowManager.bringToFront(WindowManager.stack[0]); + WindowManager.hideTooltip(); + WindowManager._.updateAppbar(); + WindowManager._.updateWindowButtons(); + }, + closeAll: () => { + for (let win of WindowManager.stack) { + WindowManager.close(win); + } + }, + queueClose: (w) => { + setTimeout(() => { + WindowManager.close(w); + }, 100) + }, + hideTooltip: () => { + document.getElementById("appbar-tooltip").classList.add("hidden"); + }, + cycleForward: () => { + if (WindowManager.stack.length > 1) WindowManager.bringToFront(WindowManager.stack[1]); + }, + cycleBackward: () => { + if (WindowManager.stack.length > 1) WindowManager.bringToFront(WindowManager.stack[WindowManager.stack.length - 1]); + }, + openApp: (app) => { + if (fs.existsSync("./data/user/Applications/" + app + ".aap")) { + if (fs.existsSync("./data/user/Applications/" + app + ".aap/AlicornApp.yml") && fs.existsSync("./data/user/Applications/" + app + ".aap/index.html")) { + let windowId = uuid.v4(); + let data = YAML.parse(fs.readFileSync("./data/user/Applications/" + app + ".aap/AlicornApp.yml", "utf-8")); + let icon; + + if (fs.existsSync("./data/user/Applications/" + app + ".aap/AlicornApp.svg")) { + icon = "./data/user/Applications/" + app + ".aap/AlicornApp.svg"; + } else if (fs.existsSync("./data/user/Applications/" + app + ".aap/AlicornApp.png")) { + icon = "./data/user/Applications/" + app + ".aap/AlicornApp.png"; + } else { + icon = "./defaultapp.svg"; + } + + let startPosX = (window.innerWidth / 2) - (data.width / 2); + let startPosY = (window.innerHeight / 2) - (data.height / 2); + + let div = document.createElement("div"); + div.innerHTML = ` +<div style="width:${data.width}px;height:${data.height}px;position: absolute;left:${startPosX}px;top:${startPosY}px;z-index:2;" id="window-${windowId}-app-${data.package}" class="window resizable loading unfocused"> + <div class='resizers'> + <div style="height:24px;width:100%;" id="window-${windowId}-app-${data.package}-titlebar" class="window-titlebar"> + <span class="window-actions"> + <img src="icons/window-close.svg" onmouseenter="WindowManager.showTooltip(document.getElementById('window-${windowId}-app-${data.package}-close'), 'Close', null, true)" onmouseleave="document.getElementById('appbar-tooltip').classList.add('hidden');" onclick="WindowManager.close(WindowManager.stack[WindowManager.windows['${windowId}']], WindowManager.windows['${windowId}']);" id="window-${windowId}-app-${data.package}-close" class="window-action window-action-close"><img src="icons/window-maximize.svg" onmouseenter="WindowManager.showTooltip(document.getElementById('window-${windowId}-app-${data.package}-maximize'), WindowManager.stack[WindowManager.windows['${windowId}']].classList.contains('maximized') ? 'Restore' : 'Maximize', null, true)" onmouseleave="document.getElementById('appbar-tooltip').classList.add('hidden');" onclick="WindowManager.stack[WindowManager.windows['${windowId}']].classList.contains('maximized') ? WindowManager.restore(WindowManager.stack[WindowManager.windows['${windowId}']]) : WindowManager.maximize(WindowManager.stack[WindowManager.windows['${windowId}']])" id="window-${windowId}-app-${data.package}-maximize" class="window-action window-action-maximize"> + </span> + <span class="window-title">${data.name}</span> + </div> + <div class="window-content" id="window-${windowId}-app-${data.package}-content"> + <webview src="./data/user/Applications/${data.package}.aap/index.html" preload="./sdk/main.js" id="window-${windowId}-app-${data.package}-sandbox" class="window-sandbox"></webview> + </div> + <div class="window-loader" id="window-${windowId}-app-${data.package}-loader"> + <div> + <img src="./data/user/Applications/${data.package}.aap/AlicornApp.svg" class="window-loader-icon" alt="Loading..."><br> + <img src="loader.svg" class="window-loader-spinner" alt="Loading..."> + </div> + </div> + </div> +</div> +` + document.getElementById("tracked-windows").appendChild(div); + let win = document.getElementById(`window-${windowId}-app-${data.package}`); + WindowManager.stack.unshift(win); + win.addEventListener('click', () => { + WindowManager.bringToFront(win); + }) + win.addEventListener('mousedown', () => { + WindowManager.bringToFront(win); + }) + dragElement(win); + WindowManager._.refreshStack() + WindowManager._.updateAppbar() + WindowManager._.updateWindowButtons() + } + } + }, + _: { + updateWindowButtons: () => { + for (let win of WindowManager.stack) { + if (win.classList.contains("maximized")) { + document.getElementById(win.id + "-maximize").src = "icons/window-restore.svg"; + } else { + document.getElementById(win.id + "-maximize").src = "icons/window-maximize.svg"; + } + } + }, + refreshStack: () => { + index = 0; + WindowManager.windows = {}; + for (let win of WindowManager.stack) { + win.style.zIndex = "" + (WindowManager.stack.length - index); + if (index === 0) { + win.classList.remove("unfocused"); + } else { + win.classList.add("unfocused"); + } + WindowManager.windows[win.id.substring(7).split("-app-")[0]] = index; + WindowManager.webContents[win.id.substring(7).split("-app-")[0]] = -1; + document.getElementById(win.id + "-sandbox").addEventListener('dom-ready', () => { + WindowManager.webContents[win.id.substring(7).split("-app-")[0]] = document.getElementById(win.id + "-sandbox").getWebContentsId() + document.getElementById(win.id + "-sandbox").send("window-id", win.id.substring(7).split("-app-")[0]); + }) + document.getElementById(win.id + "-sandbox").focus(); + index++; + } + }, + doubleClickTitlebar: (w) => { + let clicks = 0, timeout; + return function() { + clicks++; + if (clicks === 1) { + timeout = setTimeout(function() { clicks = 0; }, 400); + } else { + timeout && clearTimeout(timeout); + if (w.classList.contains("maximized")) { + WindowManager.restore(w); + } else { + WindowManager.maximize(w); + } + clicks = 0; + } + }; + } + } +} + +for (let win of Array.from(document.getElementsByClassName("window"))) { + WindowManager.stack.push(win); + win.addEventListener('click', () => { + WindowManager.bringToFront(win); + }) + win.addEventListener('mousedown', () => { + WindowManager.bringToFront(win); + }) + dragElement(win); + WindowManager._.refreshStack(); +}
\ No newline at end of file |