From 814f4f904b1e7463c45ce36bb6438dc22b7448cb Mon Sep 17 00:00:00 2001 From: Toufic Batache <taffou2a@gmail.com> Date: Fri, 12 May 2023 12:38:41 +0200 Subject: [PATCH] I - Barre de navigation : - Faire fonctionner la barre de recherche MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Faire fonctionner le bouton "partager/sauvegarder" II - Panneau gauche : - Faire en sorte de changer d'onglet en "impact dispositif" lorsqu'un paramètre est cliqué - Revoir le panneau dans son état initial III - Zone principale de travail : - Surligner le dispositif sélectionné - Ajout d'un bouton flottant "cas types" --- src/lib/components/NavBar.svelte | 468 ++++++---- src/lib/components/ReformsChanges.svelte | 2 + .../components/WaterfallCompareView.svelte | 4 +- src/lib/components/WaterfallView.svelte | 208 ++--- .../components/pictos/PictoFicheDePaie.svelte | 14 + src/lib/components/search/NavBarSearch.svelte | 33 + .../test_cases/TestCaseCompareView.svelte | 4 +- .../test_cases/TestCaseRelatedCarousel.svelte | 2 +- .../test_cases/TestCaseSelectModal.svelte | 82 +- .../components/test_cases/TestCaseTab.svelte | 18 +- .../components/test_cases/TestCaseView.svelte | 191 ++-- .../VariableReferredParameterHeader.svelte | 2 +- src/lib/displays.ts | 1 - src/lib/urls.ts | 3 - src/routes/+layout.svelte | 10 + src/routes/+page.svelte | 850 +++++++++--------- static/illustration-exoneration-tode.png | Bin 0 -> 16461 bytes static/illustration-pepa.png | Bin 0 -> 19904 bytes static/illustration-ticpe.png | Bin 0 -> 10943 bytes static/picto-csg.png | Bin 0 -> 9197 bytes static/picto-impot-sur-le-revenu.png | Bin 7613 -> 9716 bytes 21 files changed, 1032 insertions(+), 860 deletions(-) create mode 100644 src/lib/components/pictos/PictoFicheDePaie.svelte create mode 100644 src/lib/components/search/NavBarSearch.svelte create mode 100644 static/illustration-exoneration-tode.png create mode 100644 static/illustration-pepa.png create mode 100644 static/illustration-ticpe.png create mode 100644 static/picto-csg.png diff --git a/src/lib/components/NavBar.svelte b/src/lib/components/NavBar.svelte index 709d5d254..c59dfa82c 100644 --- a/src/lib/components/NavBar.svelte +++ b/src/lib/components/NavBar.svelte @@ -2,6 +2,26 @@ import { page } from "$app/stores" import { getContext } from "svelte" import type { Writable } from "svelte/store" + import type { SearchResult } from "minisearch" + import WaterfallVariablesSearchWorker from "$lib/search/search_worker_variables_waterfall?worker" + import { browser } from "$app/environment" + import type { DisplayMode } from "$lib/displays" + import { openModal } from "svelte-modals" + import NavBarSearch from "$lib/components/search/NavBarSearch.svelte" + import ShareLinkModal from "$lib/components/ShareLinkModal.svelte" + import type { ParametricReform } from "$lib/reforms" + import { type Situation } from "$lib/situations" + + // Search + const isSearchActive = getContext("isSearchActive") as Writable<boolean> + const searchParameterName = getContext("searchParameterName") as Writable< + string | undefined + > + + // Save / share + const displayMode = getContext("displayMode") as Writable< + DisplayMode | undefined + > let openMobileMenu = false let openUserMenu = false @@ -22,33 +42,124 @@ $showTutorial = true localStorage.removeItem("hideTutorial") } + + // Search + + let isSearchInProgress = false + let pendingQuery: string | null = null + + let searchResults: SearchResult[] = [] + let searchWorker: Worker | undefined = undefined + if (browser) searchWorker = new WaterfallVariablesSearchWorker() + if (searchWorker !== undefined) { + searchWorker.onmessage = function (event) { + searchResults = event.data + + // If there's no pending query, we're done! + if (pendingQuery === null) { + isSearchInProgress = false + } else { + // If we were waiting for results before searching again, run search + searchWorker?.postMessage(pendingQuery) + pendingQuery = null + } + } + } + + function search(query: string) { + if (searchWorker === undefined) return + + // If search is already running, save the query inside the + // pending query variable, awaiting results before searching again + if (isSearchInProgress) { + pendingQuery = query + return + } + + isSearchInProgress = true + searchWorker.postMessage(query) + } + + let searchQuery = "" + $: $isSearchActive = searchQuery != undefined && searchQuery.length > 0 + $: $isSearchActive ? search(searchQuery) : (searchResults = []) + + const inputInstantsByVariableNameArray = getContext( + "inputInstantsByVariableNameArray", + ) as Writable< + Array<{ + [name: string]: Set<string> + }> + > + const parametricReform = getContext( + "parametricReform", + ) as Writable<ParametricReform> + const testCases = getContext("testCases") as Writable<Situation[]> + + async function shareLink(): Promise<void> { + const displayModee = $displayMode + const urlString = "/simulations" + const res = await fetch(urlString, { + body: JSON.stringify({ + displayModee, + inputInstantsByVariableNameArray: $inputInstantsByVariableNameArray.map( + (inputInstantsByVariableName) => + Object.fromEntries( + Object.entries(inputInstantsByVariableName).map( + ([variableName, inputInstants]) => [ + variableName, + [...inputInstants], + ], + ), + ), + ), + parametricReform: $parametricReform, + testCases: $testCases, + }), + headers: { + Accept: "application/json", + "Content-Type": "application/json; charset=utf-8", + }, + method: "POST", + }) + if (!res.ok) { + console.error( + `Error ${ + res.status + } while creating a share link at ${urlString}\n\n${await res.text()}`, + ) + return + } + const { token } = await res.json() + openModal(ShareLinkModal, { + token, + }) + } </script> <div class="relative z-50 w-full md:top-0"> <nav - class="mx-auto h-14 w-full bg-le-jaune-very-dark px-2 shadow-md md:px-5 lg:pr-10" + class="mx-auto w-full bg-le-jaune-very-dark px-2 shadow-md md:h-14 md:px-5" > - <!-- Création d'un div sur l'ensemble de la nav bar pour répartir les blocs--> + <!-- Répartition des blocs sur la barre de navigation --> <div class="hidden justify-between md:flex"> - <!-- Premier div pour le logo AN et le menu A propos--> - <div class="flex items-center"> - <!-- À propos dropdown --> + <!-- Bloc gauche pour le logo AN et le logo "Simulateur LEXIMPACT" --> + <div class="flex flex-1 items-center justify-between gap-5"> + <!-- Bouton accueil --> <a href={portalUrl} - class="rounded-sm p-1 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" - on:click={help} + class="flex h-full items-center gap-3 rounded-sm px-3 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" > - <iconify-icon - class="mr-1 align-[-0.3rem] text-xl" - icon="ri-arrow-left-line" + <img + class="w-16 items-start self-start object-scale-down pb-2 pr-2 pt-0" + src="/logo-assemblee-nationale-blanc-blanc.png" + alt="Logo de l'Assemblée nationale" /> - Page d'accueil + <span>Accueil</span> </a> - </div> - <!-- Deuxième div pour le logo Contrib. & prestas sociales--> - <div class="hidden items-center md:flex"> - <a href="/"> + <!-- Logo --> + <a href="/" class="px-3"> <div class="flex h-full flex-col justify-center rounded p-1 text-white" > @@ -56,33 +167,16 @@ <span class="text-xl uppercase leading-4">LexImpact</span> </div> </a> - - <div - class="my-2 ml-4 flex overflow-hidden rounded-t-md border-b-2 border-b-le-jaune" - > - <input - autocomplete="off" - class="min-w-[500px] border-none bg-gray-100 text-base text-gray-900 placeholder-gray-400 !ring-transparent focus:outline-none" - id="search" - placeholder="impôt sur le revenu, CSG, ..." - type="search" - /> - <button class="flex items-center bg-le-jaune px-10" - ><iconify-icon - icon="ri-search-line" - width="22" - height="22" - /></button - > - </div> </div> - <!-- Troisième div pour les commandes avancées--> - <!-- connexion/déconnexion --> - <div class="flex items-center justify-end gap-5"> + <!-- Bloc centre pour la barre de recherche --> + <NavBarSearch {$isSearchActive} bind:searchQuery /> + + <!-- Bloc droite pour les commandes avancées--> + <div class="flex flex-1 items-center justify-end gap-5"> <!--Bouton tutoriel--> <button - class="rounded-sm p-1 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" + class="rounded-sm p-2 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" on:click={help} > <iconify-icon @@ -92,13 +186,13 @@ Tutoriel </button> - <!--Bouton sauvegarder partager--> + <!-- Bouton sauvegarder/partager --> <button - class="rounded-sm p-1 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" + class="rounded-sm p-2 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" id="situation_savebutton" title="Sauvegarder/partager votre écran de travail tel qu'il est visible actuellement" + on:click={shareLink} > - <!-- on:click={shareLink}--> <iconify-icon class="mr-1 align-[-0.2rem] text-base" icon="ri-share-fill" @@ -106,10 +200,11 @@ Sauvegarder / partager </button> + <!-- Bouton se connecter --> {#if authenticationEnabled} {#if user === undefined} <a - class="rounded-sm p-1 uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" + class="rounded-sm p-2 uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" data-sveltekit-reload href={loginUrl} > @@ -117,7 +212,6 @@ class="mr-1 align-[-0.3rem] text-2xl" icon="ri-key-fill" /> - <span class="hidden pl-1 lg:inline-block">Se connecter</span> </a> {:else} <!-- User profile + se déconnecter --> @@ -179,145 +273,171 @@ </div> <!--Menu écran téléphone--> + <div class="flex flex-col md:hidden"> + <div class="flex items-center justify-between"> + <!-- Premier div pour le logo AN--> + <div class="flex flex-1"> + <!-- logo assemblee nationale --> + <a class="w-16" href={portalUrl}> + <img + class=" items-start object-scale-down px-2 pb-2 pt-0" + src="/logo-assemblee-nationale-blanc-blanc.png" + alt="Logo de l'Assemblée nationale" + /> + </a> + </div> - <div class="flex items-center justify-between md:hidden"> - <!-- Premier div pour le logo AN--> - <!-- logo assemblee nationale --> - <a class="w-16" href={portalUrl}> - <img - class=" items-start object-scale-down pb-4 pl-2 pr-2 pt-0" - src="/logo-assemblee-nationale-blanc-blanc.png" - alt="Logo de l'Assemblée nationale" - /> - </a> - - <!-- Deuxième div pour le logo Contrib. & prestas sociales--> - <h1> - <span - class="flex h-7 items-center rounded object-center text-center text-2xl font-light uppercase text-white" - > - LexImpact - <span - class="rotate-6 rounded bg-le-gris-dispositif p-0.5 px-1 text-xs" - > - Beta - </span> - </span> - <span - class="block rounded object-center text-center text-xs font-bold uppercase text-white" - > - Cotis. & presta. sociales - </span> - </h1> - - <!-- Troisième div pour le bouton menu--> - - <section> - <button - aria-haspopup="true" - class="w-16 rounded-sm p-1 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" - id="share" - type="button" - > - <!-- aria-expanded={shareLink}--> - <!-- on:click={shareLink}--> - <span class="sr-only">Share link</span> - <iconify-icon - class="ml-1 align-[-0.2rem] text-2xl" - icon="ri-share-fill" - /> - </button> - <button - aria-expanded={openMobileMenu} - aria-haspopup="true" - class="w-16 rounded-sm p-1 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" - id="user-menu" - on:click={() => (openMobileMenu = !openMobileMenu)} - type="button" - > - <span class="sr-only">Open user menu</span> - <iconify-icon - class="ml-1 align-[-0.2rem] text-2xl" - icon="ri-menu-line" - /> - </button> - </section> - - {#if openMobileMenu} - <!-- - Dropdown menu - - Entering: "transition ease-out duration-100" - From: "opacity-0 scale-95" - To: "opacity-100 scale-100" - Leaving: "transition ease-in duration-75" - From: "opacity-100 scale-100" - To: "opacity-0 scale-95" - --> + <!-- Deuxième div pour le logo--> <div - class="absolute right-0 top-0 z-50 mt-24 flex w-full flex-col rounded bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none" - role="menu" - aria-orientation="vertical" - aria-labelledby="user-menu" + class="flex h-full flex-1 flex-col items-center justify-center rounded p-1 text-white" > - {#if authenticationEnabled} - {#if user === undefined} - <a - class="flex border-b px-4 py-3 text-base font-bold text-gray-700 hover:bg-gray-100" - data-sveltekit-reload - href={loginUrl} - role="menuitem" - > - <span> - <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri-key-fill" - />Se connecter</span - ></a - > - {:else} - <a - class="flex border-b-4 px-4 py-3 text-base text-gray-700 hover:bg-gray-100" - data-sveltekit-reload - href={logoutUrl} - role="menuitem" - ><span> - <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri-logout-box-r-line" - />Se déconnecter ({user.preferred_username.split( - "@", - )[0]})</span - ></a - > - {/if} - {/if} + <span class="text-lg font-light leading-4">Simulateur</span> + <span class="text-xl uppercase leading-4">LexImpact</span> + </div> - <a - href={new URL("a-propos", portalUrl).toString()} - class="block border-b px-4 py-3 text-base text-gray-700 hover:bg-gray-100" - role="menuitem">À propos de LexImpact</a - > - <a - href={new URL( - "comment-fonctionnent-les-simulateurs", - portalUrl, - ).toString()} - class="block border-b px-4 py-3 text-base text-gray-700 hover:bg-gray-100" - role="menuitem">Comment fonctionnent les simulateurs LexImpact ?</a + <!-- Troisième div pour le bouton menu--> + + <section class="flex flex-1 justify-end gap-3"> + <button + aria-haspopup="true" + class="rounded-sm p-2 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" + id="share" + type="button" + aria-expanded={shareLink} + on:click={shareLink} > - <a - href={portalUrl} - class="flex items-center border-b bg-gray-200 px-4 py-3 text-base text-gray-900 hover:bg-gray-400" - role="menuitem" + <span class="sr-only">Share link</span> + <iconify-icon + class="align-[-0.2rem] text-2xl" + icon="material-symbols:share" + /> + </button> + <button + aria-expanded={openMobileMenu} + aria-haspopup="true" + class="rounded-sm p-2 text-sm uppercase text-white hover:bg-gray-400 hover:bg-opacity-20 hover:text-white focus:outline-none" + id="user-menu" + on:click={() => (openMobileMenu = !openMobileMenu)} + type="button" > + <span class="sr-only">Open user menu</span> <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri-home-2-line" - />Page d'accueil</a + class="align-[-0.2rem] text-2xl" + icon="ri-menu-line" + /> + </button> + </section> + + {#if openMobileMenu} + <!-- + Dropdown menu + + Entering: "transition ease-out duration-100" + From: "opacity-0 scale-95" + To: "opacity-100 scale-100" + Leaving: "transition ease-in duration-75" + From: "opacity-100 scale-100" + To: "opacity-0 scale-95" + --> + <div + class="absolute right-0 top-0 z-50 mt-24 flex w-full flex-col rounded bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none" + role="menu" + aria-orientation="vertical" + aria-labelledby="user-menu" > - </div> - {/if} + {#if authenticationEnabled} + {#if user === undefined} + <a + class="flex border-b px-4 py-3 text-base font-bold text-gray-700 hover:bg-gray-100" + data-sveltekit-reload + href={loginUrl} + role="menuitem" + > + <span> + <iconify-icon + class="mr-1 align-[-0.2rem] text-lg" + icon="ri-key-fill" + />Se connecter</span + ></a + > + {:else} + <a + class="flex border-b-4 px-4 py-3 text-base text-gray-700 hover:bg-gray-100" + data-sveltekit-reload + href={logoutUrl} + role="menuitem" + ><span> + <iconify-icon + class="mr-1 align-[-0.2rem] text-lg" + icon="ri-logout-box-r-line" + />Se déconnecter ({user.preferred_username.split( + "@", + )[0]})</span + ></a + > + {/if} + {/if} + + <a + href={new URL("a-propos", portalUrl).toString()} + class="block border-b px-4 py-3 text-base text-gray-700 hover:bg-gray-100" + role="menuitem">À propos de LexImpact</a + > + <a + href={new URL( + "comment-fonctionnent-les-simulateurs", + portalUrl, + ).toString()} + class="block border-b px-4 py-3 text-base text-gray-700 hover:bg-gray-100" + role="menuitem" + >Comment fonctionnent les simulateurs LexImpact ?</a + > + <a + href={portalUrl} + class="flex items-center border-b bg-gray-200 px-4 py-3 text-base text-gray-900 hover:bg-gray-400" + role="menuitem" + > + <iconify-icon + class="mr-1 align-[-0.2rem] text-lg" + icon="ri-home-2-line" + />Page d'accueil</a + > + </div> + {/if} + </div> + + <NavBarSearch {$isSearchActive} bind:searchQuery /> </div> </nav> + + {#if searchQuery.length > 0} + <div + class="absolute top-28 w-full overflow-hidden rounded-b-lg border bg-white shadow-lg md:left-[calc((100%-600px)/2)] md:top-14 md:w-[600px]" + > + <ul class="max-h-72 list-none overflow-y-auto py-2 md:max-h-[600px]"> + {#if searchResults.length > 0} + {#each searchResults as variable, index (`found_variable_$${index}`)} + <li> + <button + class="flex w-full flex-col px-8 py-4 hover:bg-gray-200" + on:click={() => { + searchQuery = "" + $searchParameterName = variable.name + }} + > + <h2 class="flex-shrink-0 text-start text-xl font-bold"> + {variable.short_label ?? variable.label ?? variable.name} + </h2> + {#if variable.short_label !== undefined && variable.short_label !== variable.label} + <span class="text-start">{variable.label}</span> + {/if} + </button> + </li> + {/each} + {:else} + <li class="px-8 py-4">Aucun résultat trouvé</li> + {/if} + </ul> + </div> + {/if} </div> diff --git a/src/lib/components/ReformsChanges.svelte b/src/lib/components/ReformsChanges.svelte index b16806db4..7305156e2 100644 --- a/src/lib/components/ReformsChanges.svelte +++ b/src/lib/components/ReformsChanges.svelte @@ -225,6 +225,7 @@ parameterName, parametersVariableName: undefined, })} + on:click > <iconify-icon class="mr-1 align-[-0.1rem] text-sm text-gray-500" @@ -273,6 +274,7 @@ parameterName, parametersVariableName: undefined, })} + on:click >{parameter?.title} : {#if parameterReform.type === ParameterReformChangeType.Scale} diff --git a/src/lib/components/WaterfallCompareView.svelte b/src/lib/components/WaterfallCompareView.svelte index cebbe912f..f8a24e1ca 100644 --- a/src/lib/components/WaterfallCompareView.svelte +++ b/src/lib/components/WaterfallCompareView.svelte @@ -476,7 +476,9 @@ class="checked rounded bg-gray-100 accent-gray-500" type="checkbox" /> - Montrer tous les dispositifs, y compris si le montant est nul. + <span class="ml-2" + >Montrer tous les dispositifs, y compris si le montant est nul.</span + > </label> </div> </div> diff --git a/src/lib/components/WaterfallView.svelte b/src/lib/components/WaterfallView.svelte index 305be2e43..2967d5f6f 100644 --- a/src/lib/components/WaterfallView.svelte +++ b/src/lib/components/WaterfallView.svelte @@ -106,6 +106,22 @@ return } } + + function getCorrectSimulationUrl(variableOrParameterName: string) { + const newDisplayMode = + displayMode.edit !== undefined + ? { + ...displayMode, + variableName: variableOrParameterName, + } + : { + ...displayMode, + mobileLaw: true, + parameterName: undefined, + parametersVariableName: variableOrParameterName, + } + return newSimulationUrl(newDisplayMode) + } </script> {#if visibleDecompositions.length > 0} @@ -119,7 +135,7 @@ {#each rows as { calculationName }} {#if calculationName === "law"} <div - class="flex h-8 items-center whitespace-nowrap" + class="flex h-8 items-center whitespace-nowrap px-4" class:font-bold={decomposition.name === displayMode.parametersVariableName} class:bg-gray-200={decomposition.name === @@ -130,31 +146,12 @@ class="ml-2 overflow-x-hidden text-ellipsis border-gray-400 text-base text-gray-500 hover:z-20 hover:overflow-x-visible hover:bg-white" class:border-t={index !== 0} > - {#if displayMode.edit !== undefined} - <!-- Trunk decomposition node, in variable inputs mode => link --> - <a - class="cursor-pointer text-base hover:underline" - href={newSimulationUrl({ - ...displayMode, - variableName: decomposition.name, - })} - data-sveltekit-noscroll - >{decomposition.short_label ?? decomposition.label}</a - > - {:else} - <!-- Trunk decomposition node with parameters, in parameters mode => link --> - <a - class="cursor-pointer text-base hover:underline" - href={newSimulationUrl({ - ...displayMode, - mobileLaw: true, - parameterName: undefined, - parametersVariableName: decomposition.name, - })} - data-sveltekit-noscroll - >{decomposition.short_label ?? decomposition.label}</a - > - {/if} + <a + class="cursor-pointer text-base hover:underline" + href={getCorrectSimulationUrl(decomposition.name)} + data-sveltekit-noscroll + >{decomposition.short_label ?? decomposition.label}</a + > </div> {:else} {#each [...iterToDepth(depth)] as _level} @@ -196,102 +193,55 @@ </Popover> {/if} - {#if displayMode.edit !== undefined} - <!-- Leaf decomposition node in variable inputs mode => link --> - <a - class="cursor-pointer overflow-x-hidden text-ellipsis font-serif text-base hover:z-20 hover:overflow-x-visible hover:bg-white hover:text-le-gris-dispositif hover:underline" - href={newSimulationUrl({ - ...displayMode, - variableName: decomposition.name, - })} - data-sveltekit-noscroll - >{decomposition.short_label ?? decomposition.label}</a - > - {:else} - <!-- Leaf decomposition node with parameters in parameters mode => link --> - <a - class="cursor-pointer overflow-x-hidden text-ellipsis font-serif text-base hover:z-20 hover:overflow-x-visible hover:bg-white hover:text-le-gris-dispositif hover:underline" - href={newSimulationUrl({ - ...displayMode, - mobileLaw: true, - parameterName: undefined, - parametersVariableName: decomposition.name, - })} - data-sveltekit-noscroll - >{decomposition.short_label ?? decomposition.label}</a - > - {/if} + <a + class="cursor-pointer overflow-x-hidden text-ellipsis font-serif text-base hover:z-20 hover:overflow-x-visible hover:bg-white hover:text-le-gris-dispositif hover:underline" + href={getCorrectSimulationUrl(decomposition.name)} + data-sveltekit-noscroll + >{decomposition.short_label ?? decomposition.label}</a + > {:else} <!-- Non-trunk, non-leaf variable --> - {#if decomposition.open} - <button - class="-ml-1 text-black" - on:click={() => zoomOut(index)} - > - <iconify-icon - class="align-[-0.2rem] text-lg" - icon="ri-arrow-down-s-line" - /> - </button> - {:else} - <button - class="-ml-1 text-black" - on:click={() => zoomIn(index)} - > - <iconify-icon - class="align-[-0.2rem] text-lg" - icon="ri-arrow-right-s-line" - /> - </button> - {/if} + <button + class="-ml-1 text-black" + on:click={() => + decomposition.open ? zoomOut(index) : zoomIn(index)} + > + <iconify-icon + class="align-[-0.2rem] text-lg" + icon={decomposition.open + ? "ri-arrow-down-s-line" + : "ri-arrow-right-s-line"} + /> + </button> - {#if displayMode.edit !== undefined} - <!-- Non-lead decomposition node in variable inputs mode => no-link --> - <button - class="cursor-pointer overflow-x-hidden text-ellipsis font-serif text-base text-black hover:z-20 hover:overflow-x-visible hover:bg-white hover:text-black hover:underline" - on:click={() => { - if (decomposition.open) { - zoomOut(index) - } else { - zoomIn(index) - } - }} - > - {decomposition.short_label ?? decomposition.label} - </button> - {:else} - <!-- Leaf decomposition node with parameters in parameters mode => link --> - <a - class="cursor-pointer overflow-x-hidden text-ellipsis font-serif text-base hover:z-20 hover:overflow-x-visible hover:bg-white hover:text-le-gris-dispositif hover:underline" - href={newSimulationUrl({ - ...displayMode, - parameterName: undefined, - parametersVariableName: decomposition.name, - })} - on:click|preventDefault={() => { - if (decomposition.open) { - zoomOut(index) - } else { - zoomIn(index) - } - goto( - newSimulationUrl({ - ...displayMode, - parameterName: undefined, - parametersVariableName: decomposition.name, - }), - { noScroll: true }, - ) - }} - data-sveltekit-noscroll - >{decomposition.short_label ?? decomposition.label}</a - > - {/if} + <button + class="cursor-pointer overflow-x-hidden text-ellipsis font-serif text-base hover:z-20 hover:overflow-x-visible hover:bg-white hover:text-le-gris-dispositif hover:underline" + on:click={() => { + // Non-leaf decomposition node in variable inputs mode => no-link + decomposition.open ? zoomOut(index) : zoomIn(index) + + // Leaf decomposition node with parameters in parameters mode => link + if (displayMode.edit === undefined) { + goto(getCorrectSimulationUrl(decomposition.name), { + noScroll: true, + }) + } + }} + data-sveltekit-noscroll + >{decomposition.short_label ?? + decomposition.label}</button + > {/if} {/if} </div> {:else if !decomposition.open || trunk} - <div class="flex h-7 items-center whitespace-nowrap"> + <div + class="flex h-7 items-center whitespace-nowrap px-4" + class:font-bold={decomposition.name === + displayMode.parametersVariableName} + class:bg-gray-200={decomposition.name === + displayMode.parametersVariableName} + > {#if !trunk} {#each [...iterToDepth(depth)] as _level} <div class="ml-2 h-full border-l border-le-gris-dispositif"> @@ -306,7 +256,7 @@ </div> <!-- ticket de caisse--> - <div class="relative mr-1 flex flex-none px-2 md:mr-4"> + <div class="relative flex flex-none"> {#if Object.values($calculationByName).filter((calculation) => calculation.running && (calculation.situationIndex === undefined || calculation.situationIndex === situationIndex)).length > 0} <div class="absolute inset-0 z-10 bg-le-jaune bg-opacity-20"> <Spinner /> @@ -317,14 +267,18 @@ {#each rows as { calculationName, deltaAtVectorIndex }} {#if !decomposition.open || trunk || calculationName === "law"} <div - class="h-7 border-t {calculationName === 'law' - ? 'my-1' + class="h-8 border-t {calculationName === 'law' + ? 'py-1' : '-mt-1 mb-1'} px-1 text-sm {decomposition.open && trunk && visibleChildren.length > 1 && calculationName === 'law' ? 'border-gray-400' : 'border-transparent'}" + class:font-bold={decomposition.name === + displayMode.parametersVariableName} + class:bg-gray-200={decomposition.name === + displayMode.parametersVariableName} > {#if decomposition.open}{#if trunk}<span class="align-middle text-gray-500">=</span @@ -348,10 +302,14 @@ visibleChildren.length > 1 && calculationName === 'law' ? 'border-gray-400' - : 'border-transparent'} h-7 border-t {calculationName === + : 'border-transparent'} h-8 border-t {calculationName === 'law' - ? 'my-1' - : '-mt-1 mb-1'} text-right text-sm" + ? 'py-1' + : '-mt-1 mb-1'} pr-1 text-right text-sm md:pr-4" + class:font-bold={decomposition.name === + displayMode.parametersVariableName} + class:bg-gray-200={decomposition.name === + displayMode.parametersVariableName} > {#if decomposition.open || index === 0} {#if trunk || index === 0} @@ -406,16 +364,18 @@ <!-- Choix d'affichage des montant nuls --> <div - class="mt-5 flex p-2" + class="mx-6 mt-3 flex" id="situation_{situationIndex}_waterfall_showall" > - <label class="inline text-xs leading-none text-gray-600"> + <label class="inline py-2 text-xs leading-none text-gray-600"> <input bind:checked={$showNulls} class="checked rounded bg-gray-100 accent-gray-500" type="checkbox" /> - Montrer tous les dispositifs, y compris si le montant est nul. + <span class="ml-2" + >Montrer tous les dispositifs, y compris si le montant est nul.</span + > </label> </div> </div> diff --git a/src/lib/components/pictos/PictoFicheDePaie.svelte b/src/lib/components/pictos/PictoFicheDePaie.svelte new file mode 100644 index 000000000..29ebf8ad6 --- /dev/null +++ b/src/lib/components/pictos/PictoFicheDePaie.svelte @@ -0,0 +1,14 @@ +<svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" +> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M16.4789 20.9V4.1H3.21128V19.85C3.21128 20.1285 3.32776 20.3955 3.53511 20.5925C3.74246 20.7894 4.02368 20.9 4.31692 20.9H16.4789ZM19.7959 23H4.31692C3.43721 23 2.59354 22.6681 1.9715 22.0774C1.34946 21.4866 1 20.6854 1 19.85V3.05C1 2.77152 1.11649 2.50445 1.32383 2.30754C1.53118 2.11062 1.81241 2 2.10564 2H17.5846C17.8778 2 18.159 2.11062 18.3664 2.30754C18.5737 2.50445 18.6902 2.77152 18.6902 3.05V10.4H23.1128V19.85C23.1128 20.6854 22.7633 21.4866 22.1413 22.0774C21.5192 22.6681 20.6756 23 19.7959 23ZM18.6902 12.5V19.85C18.6902 20.1285 18.8067 20.3955 19.014 20.5925C19.2214 20.7894 19.5026 20.9 19.7959 20.9C20.0891 20.9 20.3703 20.7894 20.5777 20.5925C20.785 20.3955 20.9015 20.1285 20.9015 19.85V12.5H18.6902ZM4.54156 5.65476H9.84862V7.48085H4.54156V5.65476ZM8.96411 9.30952H4.54156V11.1356H8.96411V9.30952ZM9.84581 17.5246H15.1529V19.3507H9.84581V17.5246ZM15.1557 13.8699H4.54156V15.696H15.1557V13.8699ZM13.3793 9.30952H15.1529V11.1356H13.3793V12.9604H11.6103V11.1356H9.84581V9.30952H11.6103V7.48214H13.3793V9.30952Z" + fill="currentColor" + /> +</svg> diff --git a/src/lib/components/search/NavBarSearch.svelte b/src/lib/components/search/NavBarSearch.svelte new file mode 100644 index 000000000..f24d7c425 --- /dev/null +++ b/src/lib/components/search/NavBarSearch.svelte @@ -0,0 +1,33 @@ +<script lang="ts"> + export let isSearchActive: boolean + export let searchQuery: string +</script> + +<div class="flex-1 items-center"> + <div + class="my-2 flex w-full overflow-hidden rounded-t-md border-b-2 border-b-le-jaune bg-gray-100 md:w-[600px]" + > + <input + autocomplete="off" + class="w-full border-none bg-transparent text-base text-gray-900 placeholder-gray-400 !ring-transparent focus:outline-none" + id="search" + placeholder="impôt sur le revenu, CSG, ..." + type="search" + bind:value={searchQuery} + /> + {#if isSearchActive} + <iconify-icon + class="mx-1 cursor-pointer self-center p-1 text-black" + icon="ic-baseline-clear" + flip="horizontal" + width="22" + height="22" + on:click={() => (searchQuery = "")} + on:keyup + /> + {/if} + <button class="flex items-center bg-le-jaune px-10" + ><iconify-icon icon="ri-search-line" width="22" height="22" /></button + > + </div> +</div> diff --git a/src/lib/components/test_cases/TestCaseCompareView.svelte b/src/lib/components/test_cases/TestCaseCompareView.svelte index c3ee37254..30220a3b0 100644 --- a/src/lib/components/test_cases/TestCaseCompareView.svelte +++ b/src/lib/components/test_cases/TestCaseCompareView.svelte @@ -98,7 +98,7 @@ </button> {/if} </div> - <div class="sticky top-0 z-20 flex border-b-2 border-l border-gray-200"> + <div class="flex border-b-2 border-l border-gray-200"> <div class="flex w-10/12 justify-self-end bg-[url('/background_image/background_compareview_header.svg')] bg-cover bg-center bg-no-repeat px-4 md:w-11/12" id="situation_{situationsToCompareIndex.join('_')}_cases_summary" @@ -304,7 +304,7 @@ </div> <!--Onglets--> <div - class="sticky top-72 flex h-[30em] w-2/12 flex-col justify-between bg-gray-100 md:w-1/12" + class="flex h-[30em] w-2/12 flex-col justify-between bg-gray-100 md:w-1/12" > {#each waterfalls as { icon, label, name }} <a diff --git a/src/lib/components/test_cases/TestCaseRelatedCarousel.svelte b/src/lib/components/test_cases/TestCaseRelatedCarousel.svelte index 1422097e0..0290871bb 100644 --- a/src/lib/components/test_cases/TestCaseRelatedCarousel.svelte +++ b/src/lib/components/test_cases/TestCaseRelatedCarousel.svelte @@ -108,7 +108,7 @@ class="mb-12 w-[600px] shrink-0 snap-center border-2 bg-white hover:border-le-bleu hover:bg-gray-200 md:rounded-md" > <button - class="flex h-full w-full flex-col items-center justify-center gap-5" + class="flex h-full min-h-[320px] w-full flex-col items-center justify-center gap-5" on:click={() => dispatch("openTestCaseSelectModal")} type="button" > diff --git a/src/lib/components/test_cases/TestCaseSelectModal.svelte b/src/lib/components/test_cases/TestCaseSelectModal.svelte index 6a40805b5..08fefb130 100644 --- a/src/lib/components/test_cases/TestCaseSelectModal.svelte +++ b/src/lib/components/test_cases/TestCaseSelectModal.svelte @@ -1,4 +1,5 @@ <script lang="ts"> + import VariableValueChange from "$lib/components/variables/VariableValueChange.svelte" import TestCaseSummary from "$lib/components/test_cases/TestCaseSummary.svelte" import { Dialog, @@ -15,18 +16,34 @@ import type { DisplayMode } from "$lib/displays" import type { Situation } from "$lib/situations" import { newSimulationUrl } from "$lib/urls" - import type { ValuesByCalculationNameByVariableName } from "$lib/variables" + import { + variableSummaryByName, + type ValuesByCalculationNameByVariableName, + variableSummaryByNameByReformName, + } from "$lib/variables" + import type { EvaluationByName } from "$lib/decompositions" export let displayMode: DisplayMode export let isOpen = false export let year: number const dispatch = createEventDispatcher() + const billName = getContext("billName") as Writable<string | undefined> const testCases = getContext("testCases") as Writable<Situation[]> const testCasesIndex = getContext("testCasesIndex") as Writable<number[]> const valuesByCalculationNameByVariableNameArray = getContext( "valuesByCalculationNameByVariableNameArray", ) as Writable<ValuesByCalculationNameByVariableName[]> + const evaluationByNameArray = getContext("evaluationByNameArray") as Writable< + EvaluationByName[] + > + + $: variableSummary = + $billName === undefined + ? variableSummaryByName[displayMode.parametersVariableName] + : variableSummaryByNameByReformName[$billName][ + displayMode.parametersVariableName + ] function changeTestCaseIndex(value: number) { isOpen = false @@ -90,7 +107,7 @@ type="button" > <iconify-icon - class="ml-2 h-10 w-10" + class="w-10 p-2 text-2xl" icon="ri-close-line" /></button > @@ -103,35 +120,50 @@ <div class="grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3"> {#each $testCases as situation, situationIndex} - <div - class="w-full bg-white py-1 text-sm" - value={situationIndex} - > + <div class="w-full bg-white text-sm" value={situationIndex}> <button class="group w-full" on:click={() => changeTestCaseIndex(situationIndex)} type="button" > - <div - class=" border-b-2 bg-gray-100 p-4 pb-2 text-left hover:border-le-bleu hover:bg-gray-200 md:rounded-t-md" - id="situation_{situationIndex}_case_summary" - > - <TestCaseSummary - {displayMode} - mode="select" - {situation} - {situationIndex} - valuesByCalculationNameByVariableName={$valuesByCalculationNameByVariableNameArray[ - situationIndex - ]} - {year} - /> - </div> - <div> - <span class="group-hover:text-le-bleu" - >{situation.title} - </span> + <div class="overflow-hidden border-2 md:rounded-md"> + <div + class="bg-gray-100 p-4 pb-2 text-left hover:border-le-bleu hover:bg-gray-200" + id="situation_{situationIndex}_case_summary" + > + <TestCaseSummary + {displayMode} + mode="select" + {situation} + {situationIndex} + valuesByCalculationNameByVariableName={$valuesByCalculationNameByVariableNameArray[ + situationIndex + ]} + {year} + /> + </div> + {#if variableSummary !== undefined} + <div class="flex flex-col gap-2 bg-white p-3"> + <span class="text-start" + >{variableSummary.short_label ?? + variableSummary.label ?? + displayMode.parametersVariableName} :</span + > + <div class="flex gap-5 text-3xl font-semibold"> + <VariableValueChange + evaluationByName={$evaluationByNameArray[ + situationIndex + ]} + legend + name={displayMode.parametersVariableName} + /> + </div> + </div> + {/if} </div> + <span class="group-hover:text-le-bleu"> + {situation.title} + </span> </button> </div> {/each} diff --git a/src/lib/components/test_cases/TestCaseTab.svelte b/src/lib/components/test_cases/TestCaseTab.svelte index 7708791bc..bf542a65a 100644 --- a/src/lib/components/test_cases/TestCaseTab.svelte +++ b/src/lib/components/test_cases/TestCaseTab.svelte @@ -1,19 +1,33 @@ <script lang="ts"> + import { onMount } from "svelte" + export let href export let icon + export let picto export let text export let isActive export let isDisabled + + let pictoComponent + onMount(async () => { + if (picto !== undefined) + pictoComponent = (await import(`$lib/components/pictos/${picto}.svelte`)) + .default + }) </script> <a - class="flex gap-2 border-r-2 px-8 py-4 uppercase text-gray-600" + class="flex gap-2 border-r-2 px-4 py-4 uppercase text-gray-600 md:px-8" class:bg-white={isActive && !isDisabled} class:shadow-md={isActive && !isDisabled} class:!text-gray-400={isDisabled} class:cursor-not-allowed={isDisabled} href={!isDisabled ? href : undefined} > - <iconify-icon {icon} class="text-2xl" /> + {#if pictoComponent !== undefined} + <svelte:component this={pictoComponent} /> + {:else} + <iconify-icon {icon} class="text-2xl" /> + {/if} {text} </a> diff --git a/src/lib/components/test_cases/TestCaseView.svelte b/src/lib/components/test_cases/TestCaseView.svelte index cec54649e..0d4194a1b 100644 --- a/src/lib/components/test_cases/TestCaseView.svelte +++ b/src/lib/components/test_cases/TestCaseView.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import type { DecompositionReference, Waterfall } from "@openfisca/json-model" + import type { Waterfall } from "@openfisca/json-model" import { Popover } from "flowbite-svelte" import { getContext } from "svelte" import type { Writable } from "svelte/store" @@ -7,7 +7,6 @@ import { variableValueByCalculationNameFromEvaluation, type CalculationByName, - type CalculationName, isNullVariableValueByCalculationName, } from "$lib/calculations" import Spinner from "$lib/components/Spinner.svelte" @@ -38,6 +37,8 @@ export let situationIndex: number export let valuesByCalculationNameByVariableName: ValuesByCalculationNameByVariableName export let year: number + export let defaultTab: string + export let tabs const oilSpendings = oilTypes.map((name) => ({ depenseTtcVariableName: `depense_${name}_ttc`, @@ -62,26 +63,6 @@ const waterfall = getContext("waterfall") as Writable<Waterfall> $: evaluationByName = $evaluationByNameArray[situationIndex] - - const defaultTab = "impacts_globaux" - const tabs = [ - { - title: "Impact dispositif", - icon: "material-symbols:location-on", - tab: "impact_dispositif", - }, - { - title: "Impacts directs", - icon: "ri:mastercard-line", - tab: "impacts_directs", - disabled: true, - }, - { - title: "Impacts globaux", - icon: "ph:globe-simple-bold", - tab: "impacts_globaux", - }, - ] </script> <div @@ -89,7 +70,7 @@ id="situation_{situationIndex}" > <div - class="sticky top-14 z-20 bg-gray-100 md:rounded-t-md" + class="bg-gray-100 md:rounded-t-md" id="situation_{situationIndex}_case_summary" > <div class="p-4 pb-2"> @@ -113,6 +94,7 @@ tab: tabData.tab, })} icon={tabData.icon} + picto={tabData.picto} text={tabData.title} isActive={displayMode.tab === tabData.tab || (tabData.tab === defaultTab && displayMode.tab === undefined)} @@ -122,10 +104,10 @@ </div> </div> - {#if displayMode.tab === "impact_dispositif" || (displayMode.tab === undefined && defaultTab === "impact_dispositif")} + {#if displayMode.tab === "dispositif" || (displayMode.tab === undefined && defaultTab === "dispositif")} <div class="w-full bg-white px-8 py-5"> {#if displayMode.parametersVariableName !== undefined && decompositionByName[displayMode.parametersVariableName] !== undefined} - <div> + <div class="flex flex-col gap-5"> <div class="grid grid-cols-3 gap-5"> <div class="flex flex-col"> <div @@ -372,121 +354,84 @@ class="checked rounded bg-gray-100 accent-gray-500" type="checkbox" /> - Montrer tous les dispositifs, y compris si le montant est nul. + <span class="ml-2" + >Montrer tous les dispositifs directs, y compris si le montant est nul.</span + > </label> </div> {:else} - <span>Aucun paramètre séléctionné.</span> + <p>Aucun dispositif sélectionné.</p> + <!-- <br/>--> + <!-- <p>Choissez-en un</p>--> + <!-- <ul>--> + <!-- <li>- parmi ceux proposés à gauche, ou</li>--> + <!-- <li>- dans la fiche de paie, ou</li>--> + <!-- <li>- en lançant une recherche.</li>--> + <!-- </ul>--> {/if} </div> {/if} - {#if displayMode.tab === "impacts_globaux" || (displayMode.tab === undefined && defaultTab === "impacts_globaux")} + {#if displayMode.tab === "fiche_de_paie" || (displayMode.tab === undefined && defaultTab === "fiche_de_paie")} <div class="bg-white"> {#if variableSummaryByName !== undefined} <div class="flex justify-between bg-gray-100"> <!--Impacts et waterfall--> - - <div - class="{displayMode.compact - ? 'w-full' - : 'w-10/12 md:w-11/12'} rounded-b-lg bg-white px-4" - > + <div class="w-10/12 bg-white py-4 md:w-11/12"> {#if Object.values($calculationByName).filter((calculation) => calculation.running && (calculation.situationIndex === undefined || calculation.situationIndex === situationIndex)).length > 0} <Spinner /> {/if} - <!--Bouton pour passer du mode compact au mode waterfall--> - <div class="flex w-full justify-between"> - {#if displayMode.compact} - <a - class="mb-2 flex w-full cursor-pointer items-center border-gray-300 py-1 pr-4 text-gray-600" - href={newSimulationUrl({ - ...displayMode, - compact: undefined, - })} - data-sveltekit-noscroll - > - <iconify-icon - class="mr-1 align-[-0.2rem] text-xl" - icon="ri-arrow-right-s-line" - /><span class="tracking-wider">Voir tous les dispositifs</span - > - </a> - {:else} - <a - class="flex w-full cursor-pointer items-center border-b border-gray-300 py-1 pr-4 text-gray-600" - href={newSimulationUrl({ - ...displayMode, - compact: true, - })} - data-sveltekit-noscroll - > - <iconify-icon - class="mr-1 align-[-0.2rem] text-xl" - icon="ri-arrow-down-s-line" - /> - <span class="tracking-wider">Tous les dispositifs</span> - </a> - {/if} - </div> - - {#if !displayMode.compact} - <div class="h-5 bg-gradient-to-b from-gray-100 to-transparent" /> - - <WaterfallView - {decompositionByName} - {displayMode} - {evaluationByName} - on:changeDecompositionByName - {situation} - {situationIndex} - {variableSummaryByName} - {year} - /> - {/if} + <WaterfallView + {decompositionByName} + {displayMode} + {evaluationByName} + on:changeDecompositionByName + {situation} + {situationIndex} + {variableSummaryByName} + {year} + /> </div> - {#if !displayMode.compact} - <!--Onglets--> - <div - class="sticky top-72 flex h-[30em] w-2/12 flex-col justify-between bg-gray-100 md:w-1/12" - id="situation_{situationIndex}_Employeur" - > - {#each waterfalls as { icon, label, name }} - <a - class="flex grow items-center justify-around shadow-inner" - class:bg-white={name === $waterfall.name} - class:border-le-bleu={name === $waterfall.name} - class:border-r-4={name === $waterfall.name} - class:shadow-none={name === $waterfall.name} - href={newSimulationUrl({ - ...displayMode, - waterfallName: name, - })} - data-sveltekit-noscroll - > - <div class="origin-center rotate-90"> - <div class="mr-5 flex"> - {#if icon !== undefined} - <img - class="block origin-center -rotate-90" - alt="Icone pour {label}" - src={icon} - /> - {/if} - <span - class="ml-2 text-xs uppercase tracking-wide text-gray-600 xl:text-sm" - class:text-le-bleu={name === $waterfall.name} - class:font-bold={name === $waterfall.name} - > - {label} - </span> - </div> + <!--Onglets--> + <div + class="flex h-[30em] w-2/12 flex-col justify-between bg-gray-100 md:w-1/12" + id="situation_{situationIndex}_Employeur" + > + {#each waterfalls as { icon, label, name }} + <a + class="flex grow items-center justify-around shadow-inner" + class:bg-white={name === $waterfall.name} + class:border-le-bleu={name === $waterfall.name} + class:border-r-4={name === $waterfall.name} + class:shadow-none={name === $waterfall.name} + href={newSimulationUrl({ + ...displayMode, + waterfallName: name, + })} + data-sveltekit-noscroll + > + <div class="origin-center rotate-90"> + <div class="mr-5 flex"> + {#if icon !== undefined} + <img + class="block origin-center -rotate-90" + alt="Icone pour {label}" + src={icon} + /> + {/if} + <span + class="ml-2 text-xs uppercase tracking-wide text-gray-600 xl:text-sm" + class:text-le-bleu={name === $waterfall.name} + class:font-bold={name === $waterfall.name} + > + {label} + </span> </div> - </a> - {/each} - </div> - {/if} + </div> + </a> + {/each} + </div> </div> <div class="px-4 py-2"> <p class="text-right text-xs font-bold text-gray-600"> diff --git a/src/lib/components/variables/VariableReferredParameterHeader.svelte b/src/lib/components/variables/VariableReferredParameterHeader.svelte index 9e7edcc55..8973c737b 100644 --- a/src/lib/components/variables/VariableReferredParameterHeader.svelte +++ b/src/lib/components/variables/VariableReferredParameterHeader.svelte @@ -35,7 +35,7 @@ > {ancestor.title} </a> - > + <span> > </span> {/each} {/if} {#if parameter.title !== parameter.parent?.title} diff --git a/src/lib/displays.ts b/src/lib/displays.ts index ee08c3952..027a49046 100644 --- a/src/lib/displays.ts +++ b/src/lib/displays.ts @@ -1,7 +1,6 @@ export interface DisplayMode { action?: string // TODO: Remove attribute "action". budget?: boolean - compact?: boolean mobileLaw?: boolean // For mobile, when not in edit mode: When true, show law, otherwise show impacts. parameterName?: string parametersVariableName?: string diff --git a/src/lib/urls.ts b/src/lib/urls.ts index a6104c217..695c78b0d 100644 --- a/src/lib/urls.ts +++ b/src/lib/urls.ts @@ -17,9 +17,6 @@ export function newSimulationUrl(displayMode: DisplayMode): string { if (displayMode.budget) { query.append("budget", "true") } - if (displayMode.compact) { - query.append("compact", "true") - } if (displayMode.edit !== undefined) { query.append("edit", displayMode.edit.toString()) } diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 525b5348a..8d013f77b 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -59,6 +59,7 @@ import type { WebSocketByName, WebSocketOpenByName } from "$lib/websockets" import type { LayoutData } from "./$types" + import type { DisplayMode } from "$lib/displays" export let data: LayoutData @@ -1039,6 +1040,15 @@ $evaluationByNameArray = updatedEvaluationByNameArray } } + + const isSearchActive: Writable<boolean> = writable(false) + setContext("isSearchActive", isSearchActive) + + const searchParameterName: Writable<string | undefined> = writable(undefined) + setContext("searchParameterName", searchParameterName) + + const displayMode: Writable<DisplayMode | undefined> = writable(undefined) + setContext("displayMode", displayMode) </script> <svelte:head> diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 3833eb948..6e08bef21 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -15,7 +15,6 @@ import { Popover } from "flowbite-svelte" import introJs from "intro.js" import { getContext, setContext } from "svelte" - import { openModal } from "svelte-modals" import type { Writable } from "svelte/store" import { browser } from "$app/environment" @@ -33,7 +32,6 @@ import IrGagnantsPerdantsView from "$lib/components/IrGagnantsPerdantsView.svelte" import CsgGagnantsPerdantsView from "$lib/components/CsgGagnantsPerdantsView.svelte" import ReformsChanges from "$lib/components/ReformsChanges.svelte" - import ShareLinkModal from "$lib/components/ShareLinkModal.svelte" import Spinner from "$lib/components/Spinner.svelte" import TestCaseSelectModal from "$lib/components/test_cases/TestCaseSelectModal.svelte" import TestCaseExamplesSelectBar from "$lib/components/test_cases/TestCaseExamplesSelectBar.svelte" @@ -41,7 +39,6 @@ import TestCaseEdit from "$lib/components/test_cases/TestCaseEdit.svelte" import TestCaseRelatedCarousel from "$lib/components/test_cases/TestCaseRelatedCarousel.svelte" import TestCaseView from "$lib/components/test_cases/TestCaseView.svelte" - import Search from "$lib/components/search/Search.svelte" import NonVariableReferredParameter from "$lib/components/variables/NonVariableReferredParameter.svelte" import VariableReferredInputsPane from "$lib/components/variables/VariableReferredInputsPane.svelte" import VariableReferredParameters from "$lib/components/variables/VariableReferredParameters.svelte" @@ -71,7 +68,8 @@ } from "$lib/variables" import type { PageData } from "./$types" - import { SearchMode } from "$lib/search/search_mode" + import PictoFemme from "$lib/components/pictos/PictoFemme.svelte" + import PictoEtat from "$lib/components/pictos/PictoEtat.svelte" export let data: PageData @@ -116,6 +114,13 @@ ) as Writable<ValuesByCalculationNameByVariableName[]> let windowInnerWidth: number | undefined = undefined const year = getContext("year") as Writable<number> + const isSearchActive = getContext("isSearchActive") as Writable<boolean> + const searchParameterName = getContext("searchParameterName") as Writable< + string | undefined + > + const displayModeWritable = getContext("displayMode") as Writable< + DisplayMode | undefined + > $: ({ user } = data) @@ -637,44 +642,7 @@ // goto(newSimulationUrl(displayMode)) } - async function shareLink(): Promise<void> { - const urlString = "/simulations" - const res = await fetch(urlString, { - body: JSON.stringify({ - displayMode, - inputInstantsByVariableNameArray: $inputInstantsByVariableNameArray.map( - (inputInstantsByVariableName) => - Object.fromEntries( - Object.entries(inputInstantsByVariableName).map( - ([variableName, inputInstants]) => [ - variableName, - [...inputInstants], - ], - ), - ), - ), - parametricReform: $parametricReform, - testCases: $testCases, - }), - headers: { - Accept: "application/json", - "Content-Type": "application/json; charset=utf-8", - }, - method: "POST", - }) - if (!res.ok) { - console.error( - `Error ${ - res.status - } while creating a share link at ${urlString}\n\n${await res.text()}`, - ) - return - } - const { token } = await res.json() - openModal(ShareLinkModal, { - token, - }) - } + $: $displayModeWritable = displayMode let validateBtnHeight = 0 @@ -684,6 +652,105 @@ if (displayMode.edit !== undefined) setTimeout(() => changeTestCaseToEditIndex(undefined), 1) } } + + const dispositifsTypes = [ + { + title: "Impôt sur le revenu", + icon: "picto-impot-sur-le-revenu.png", + foyer: { + budget: undefined, + parametersVariableName: "irpp_economique", + }, + budget: { + budget: true, + parametersVariableName: "irpp_economique", + }, + }, + { + title: "Contribution sociale généralisée - CSG", + icon: "picto-csg.png", + foyer: { + budget: undefined, + parametersVariableName: "csg_imposable_salaire", + }, + budget: { + budget: true, + parametersVariableName: "csg_imposable_salaire", + }, + }, + { + title: "Prime de partage de la valeur", + icon: "illustration-pepa.png", + foyer: { + mobileLaw: true, + budget: undefined, + parametersVariableName: "prime_partage_valeur_exoneree", + testCasesIndex: [3, 4], + waterfallName: "brut_to_super_brut", + }, + }, + { + title: "Taxes sur les carburants", + icon: "illustration-ticpe.png", + foyer: { + mobileLaw: true, + budget: undefined, + parametersVariableName: "essence_sp95_e10_ticpe", + testCasesIndex: [15], + }, + }, + { + title: "Exonération TO-DE", + icon: "illustration-exoneration-tode.png", + foyer: { + mobileLaw: true, + budget: undefined, + parametersVariableName: "exoneration_cotisations_employeur_tode", + testCasesIndex: [13, 14], + waterfallName: "brut_to_super_brut", + }, + }, + ] + + const defaultTab = "fiche_de_paie" + const tabs = [ + { + title: "Dispositif", + icon: "ri:zoom-in-line", + tab: "dispositif", + }, + // { + // title: "Impacts directs", + // icon: "ri:mastercard-line", + // tab: "impacts_directs", + // disabled: true, + // }, + { + title: "Fiche de paie", + picto: "PictoFicheDePaie", + tab: "fiche_de_paie", + }, + ] + + // $: tabs[0].disabled = !(displayMode.parametersVariableName !== undefined && $decompositionByName[displayMode.parametersVariableName] !== undefined) + + function loadParameter(parameterName: string | undefined) { + if (parameterName === undefined) return + + goto( + newSimulationUrl({ + ...displayMode, + parameterName: undefined, + parametersVariableName: parameterName, + tab: "dispositif", + }), + { noScroll: true }, + ) + } + + $: loadParameter($searchParameterName) + + let testCasesBtnHeight = 0 </script> <svelte:window bind:innerWidth={windowInnerWidth} on:keydown={onKeyDown} /> @@ -691,7 +758,10 @@ <title>Calculs | {data.title}</title> </svelte:head> -<main class="fond flex h-full flex-1 overflow-x-clip md:overflow-hidden"> +<main + class="fond flex h-full flex-1 overflow-x-clip after:absolute after:inset-0 after:z-10 after:bg-[rgba(0,0,0,.3)] after:transition-all md:overflow-hidden" + class:after:content-none={!$isSearchActive} +> <div class="flex flex-[1_0_100%] flex-col overflow-x-clip transition-transform duration-500 ease-in-out-quart md:overflow-hidden" class:!translate-x-[-33.3%]={displayMode.edit !== undefined} @@ -758,66 +828,137 @@ <div class="flex flex-1 overflow-x-hidden"> <!-- Panneau de gauche les zones éditables par l'utilisateur (amendement)--> <div - class="flex flex-[1_0_100%] overflow-y-scroll bg-white shadow-lg transition-transform duration-500 ease-in-out-quart md:z-10 md:!h-full md:flex-[1_0_33.3%] md:translate-x-0 md:overflow-visible" + class="flex flex-[1_0_100%] overflow-y-scroll bg-white shadow-lg transition-transform duration-500 ease-in-out-quart md:z-10 md:!h-full md:flex-[1_0_33.3%] md:translate-x-0 md:overflow-visible md:!p-0" class:translate-x-[-100%]={!displayMode.mobileLaw} class:!h-[calc(100vh-96px)]={!displayMode.mobileLaw} + style:padding-bottom="{$testCasesIndex.length === 1 && + displayMode.parametersVariableName === undefined + ? testCasesBtnHeight + 40 + : 0}px" id="situation_left_part_law" > <div class="flex min-h-full w-full flex-col"> + <!-- Header (fixed) --> <div - class="hidden items-center justify-between border-b border-black px-5 pb-3 pt-5 md:flex" + class="mx-5 flex items-center justify-between border-b border-black pb-3 pt-5 md:m-0 md:px-5" > + <!-- Titre --> <h1 class="flex text-2xl font-bold text-black"> - Modifier le droit en vigueur + {#if (displayMode.parametersVariableName !== undefined && $decompositionByName[displayMode.parametersVariableName] !== undefined) || displayMode.parameterName} + Modifier le droit en vigueur + {:else} + Sélectionner un dispositif + {/if} </h1> - <button - class="mx-4 flex h-8 grow-0 items-center rounded-md bg-le-jaune px-2 py-1 text-sm uppercase text-black shadow-md hover:bg-le-jaune-dark hover:text-white focus:outline-none md:mx-0" - class:!bg-gray-200={Object.keys($parametricReform).length === 0} - class:!text-gray-500={Object.keys($parametricReform).length === 0} - class:!shadow-none={Object.keys($parametricReform).length === 0} - class:!cursor-default={Object.keys($parametricReform).length === - 0} - class:bg-le-jaune-dark={modificationsOpen} - class:text-white={modificationsOpen} - on:click={Object.keys($parametricReform).length > 0 - ? () => { - modificationsOpen = !modificationsOpen - } - : undefined} + <!-- DESKTOP - Modifications en cours --> + <div class="hidden md:block"> + <button + class="mx-4 flex h-8 grow-0 items-center rounded-md bg-le-jaune px-2 py-1 text-sm uppercase text-black shadow-md hover:bg-le-jaune-dark hover:text-white focus:outline-none md:mx-0" + class:!bg-gray-200={Object.keys($parametricReform).length === 0} + class:!text-gray-500={Object.keys($parametricReform).length === + 0} + class:!shadow-none={Object.keys($parametricReform).length === 0} + class:!cursor-default={Object.keys($parametricReform).length === + 0} + class:bg-le-jaune-dark={modificationsOpen} + class:text-white={modificationsOpen} + on:click={Object.keys($parametricReform).length > 0 + ? () => { + modificationsOpen = !modificationsOpen + } + : undefined} + > + {Object.keys($parametricReform).length === 0 + ? "Aucune modification" + : Object.keys($parametricReform).length === 1 + ? "1 modification" + : `${Object.keys($parametricReform).length} modifications`} + </button> + + {#if modificationsOpen} + <!-- + Dropdown menu + + Entering: "transition ease-out duration-100" + From: "opacity-0 scale-95" + To: "opacity-100 scale-100" + Leaving: "transition ease-in duration-75" + From: "opacity-100 scale-100" + To: "opacity-0 scale-95" + --> + <div + class="absolute left-80 top-0 z-50 mr-6 mt-14 w-64 rounded bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none" + role="menu" + aria-orientation="vertical" + aria-labelledby="user-menu" + > + <button + class="ml-4 h-10 place-self-start text-sm uppercase text-gray-600 hover:text-black" + on:click={() => { + reset() + modificationsOpen = false + }} + title="Retirer les modifications de votre réforme" + > + <iconify-icon + class="mr-1 align-[-0.2rem] text-lg" + icon="ri:refresh-line" + /> + Réinitialiser + </button> + <ReformsChanges + {displayMode} + on:click={() => (modificationsOpen = false)} + /> + </div> + {/if} + </div> + </div> + + <!-- MOBILE - Modifications en cours --> + {#if billName !== undefined} + <div + class="mx-5 flex flex-col rounded-b border bg-gray-200 px-2 py-1 shadow-md md:hidden" > - {Object.keys($parametricReform).length === 0 - ? "Aucune modification" - : Object.keys($parametricReform).length === 1 - ? "1 paramètre modifié" - : `${ - Object.keys($parametricReform).length - } paramètres modifiés`} - </button> - - {#if modificationsOpen} - <!-- - Dropdown menu - - Entering: "transition ease-out duration-100" - From: "opacity-0 scale-95" - To: "opacity-100 scale-100" - Leaving: "transition ease-in duration-75" - From: "opacity-100 scale-100" - To: "opacity-0 scale-95" - --> - <div - class="absolute left-80 top-0 z-50 mr-6 mt-14 w-64 rounded bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none" - role="menu" - aria-orientation="vertical" - aria-labelledby="user-menu" + <button + class="place-self-start text-lg font-light" + on:click={() => { + modificationsOpen = !modificationsOpen + }} > + {#if !modificationsOpen} + <iconify-icon + class="mr-1 align-[-0.2rem] text-lg" + icon="ri:arrow-down-s-line" + /> + {:else} + <iconify-icon + class="mr-1 align-[-0.2rem] text-lg" + icon="ri:arrow-up-s-line" + /> + {/if} + + Modifications en cours + {#if Object.keys($parametricReform).length !== 0 && displayMode.mobileLaw} + <iconify-icon + class="align-[0.1rem] text-sm text-le-jaune" + icon="ri-checkbox-blank-circle-fill" + /> + {/if} + {#if $billName !== undefined && Object.keys($billName).length !== 0 && displayMode.mobileLaw} + <iconify-icon + class="align-[0.1rem] text-sm text-le-rouge-bill" + icon="ri-checkbox-blank-circle-fill" + /> + {/if} + </button> + + {#if modificationsOpen} + <ReformsChanges {displayMode} /> <button - class="ml-4 h-10 place-self-start text-sm uppercase text-gray-600 hover:text-black" - on:click={() => { - reset() - modificationsOpen = false - }} + class="place-self-end text-sm uppercase text-gray-600 hover:text-black" + on:click={reset} title="Retirer les modifications de votre réforme" > <iconify-icon @@ -826,13 +967,110 @@ /> Réinitialiser </button> - <ReformsChanges {displayMode} /> + {/if} + </div> + {/if} + + <!-- Content --> + <div class="w-full overflow-y-scroll bg-white p-4"> + <!-- Vue par défaut - choix de dispositifs --> + {#if displayMode.parametersVariableName === undefined && displayMode.parameterName === undefined} + <div class="grid grid-cols-1 gap-8 text-center sm:grid-cols-2"> + {#each dispositifsTypes as dispositifType} + <div + class="flex flex-col items-center justify-between gap-4 rounded-lg border bg-white p-5 shadow-md" + > + <h3 + class="mb-2 text-xl font-bold sm:text-base lg:text-xl 2xl:text-xl" + > + {dispositifType.title} + </h3> + <img + class="max-h-24" + src={dispositifType.icon} + alt="Pictogramme représentant une feuille d'impôt" + /> + <div class="flex gap-2 md:flex-col"> + {#if dispositifType.foyer !== undefined} + <a + class="inline-flex justify-between gap-2 rounded-lg border-2 border-le-bleu p-2 px-5 text-center text-base uppercase tracking-wide text-le-bleu shadow-md hover:border-blue-900 hover:bg-blue-900 hover:text-white" + href={newSimulationUrl({ + ...displayMode, + ...dispositifType.foyer, + tab: "dispositif" + })} + > + <span>Foyer</span> + <PictoFemme /> + </a> + {/if} + {#if dispositifType.budget !== undefined} + <a + class="inline-flex justify-between gap-2 rounded-lg border-2 border-le-bleu p-2 px-5 text-center text-base uppercase tracking-wide text-le-bleu shadow-md hover:border-blue-900 hover:bg-blue-900 hover:text-white" + href={newSimulationUrl({ + ...displayMode, + ...dispositifType.budget, + })} + > + <span>Budget</span> + <PictoEtat /> + </a> + {/if} + </div> + </div> + {/each} </div> - {/if} - </div> - <!--Partie I Paramètres de la loi--> - <div class="w-full overflow-y-scroll bg-white p-5"> - {#if displayMode.parameterName !== undefined} + <!-- Vue modification de la loi --> + {:else if displayMode.parametersVariableName !== undefined && displayMode.parameterName === undefined} + <div class="mb-5 flex flex-col gap-2"> + <div class="flex justify-end"> + <button + class="text-sm uppercase text-gray-600 hover:text-black" + on:click={closeParametersEditionPane} + >Changer de dispositif<iconify-icon + class="ml-1 align-[-0.23rem] text-lg" + icon="ri-arrow-up-line" + /> + </button> + </div> + {#if displayMode.parametersVariableName === "csg_deductible_salaire" || displayMode.parametersVariableName === "csg_imposable_salaire"} + <div class="flex justify-end"> + <a + class="flex items-center text-sm uppercase text-gray-600 hover:text-black" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: + displayMode.parametersVariableName === + "csg_deductible_salaire" + ? "csg_imposable_salaire" + : "csg_deductible_salaire", + })} + > + <span> + {#if displayMode.parametersVariableName === "csg_deductible_salaire"} + CSG - part imposable + {:else} + CSG - part déductible + {/if} + </span> + <iconify-icon + class="ml-1 align-[-0.2rem] text-lg" + icon="ri-arrow-right-line" + /> + </a> + </div> + {/if} + </div> + + <div class="flex-1 overflow-y-auto bg-white"> + <VariableReferredParameters + date={$date} + {displayMode} + name={displayMode.parametersVariableName} + /> + </div> + <!-- Vue modification d'un paramètre --> + {:else} <!-- Bouton de fermeture du dispositif en cours - DESKTOP --> <div class="mx-5 mb-2 hidden justify-end md:flex"> <button @@ -869,230 +1107,6 @@ /> </div> </div> - {:else if displayMode.parametersVariableName !== undefined} - <div class="hidden justify-end md:flex"> - <button - class="text-sm uppercase text-gray-600 hover:text-black" - on:click={closeParametersEditionPane} - >Changer de dispositif<iconify-icon - class="ml-1 align-[-0.23rem] text-lg" - icon="ri-arrow-up-line" - /> - </button> - </div> - {#if displayMode.parametersVariableName === "csg_deductible_salaire"} - <div class="mx-5 mb-2 hidden justify-end md:flex"> - <a - class="text-sm uppercase text-gray-600 hover:text-black" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "csg_imposable_salaire", - })} - > - CSG - part imposable<iconify-icon - class="ml-1 align-[-0.23rem] text-lg" - icon="ri-arrow-right-line" - /> - </a> - </div> - {:else if displayMode.parametersVariableName === "csg_imposable_salaire"} - <div class="mx-5 mb-2 hidden justify-end md:flex"> - <a - class="flex items-center text-sm uppercase text-gray-600 hover:text-black" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "csg_deductible_salaire", - })} - > - CSG - part déductible<iconify-icon - class="ml-1 align-[-0.2rem] text-lg" - icon="ri-arrow-right-line" - /> - </a> - </div> - {/if} - - <div class="flex-1 overflow-y-auto"> - <h1 - class="flex border-b border-black pb-3 text-2xl font-bold text-black md:hidden" - > - Modifier le droit en vigueur - </h1> - <!--Partie II modification de la loi - MOBILE--> - <div class="flex flex-col md:hidden"> - {#if billName !== undefined} - <div - class="flex flex-col rounded-b border bg-gray-200 px-2 py-1 shadow-md" - > - <button - class="place-self-start text-lg font-light" - on:click={() => { - modificationsOpen = !modificationsOpen - }} - > - {#if !modificationsOpen} - <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri:arrow-down-s-line" - /> - {:else} - <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri:arrow-up-s-line" - /> - {/if} - - Modifications en cours - {#if Object.keys($parametricReform).length !== 0 && displayMode.mobileLaw} - <iconify-icon - class="align-[0.1rem] text-sm text-le-jaune" - icon="ri-checkbox-blank-circle-fill" - /> - {/if} - {#if $billName !== undefined && Object.keys($billName).length !== 0 && displayMode.mobileLaw} - <iconify-icon - class="align-[0.1rem] text-sm text-le-rouge-bill" - icon="ri-checkbox-blank-circle-fill" - /> - {/if} - </button> - - {#if modificationsOpen} - <ReformsChanges {displayMode} /> - <button - class="place-self-end text-sm uppercase text-gray-600 hover:text-black" - on:click={reset} - title="Retirer les modifications de votre réforme" - > - <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri:refresh-line" - /> - Réinitialiser - </button> - {/if} - </div> - {/if} - - <button - class="mx-3 place-self-end py-3 text-sm uppercase text-gray-600 hover:text-black" - on:click={closeParametersEditionPane} - >Changer de dispositif<iconify-icon - class="ml-1 align-[-0.2rem] text-lg" - icon="ri-arrow-up-line" - /></button - > - </div> - - {#if displayMode.parametersVariableName === "csg_deductible_salaire"} - <div class="mx-3 mb-2 flex justify-end md:hidden"> - <a - class="text-sm uppercase text-gray-600 hover:text-black" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "csg_imposable_salaire", - })} - > - CSG - part imposable<iconify-icon - class="ml-1 align-[-0.23rem] text-lg" - icon="ri-arrow-right-line" - /> - </a> - </div> - {:else if displayMode.parametersVariableName === "csg_imposable_salaire"} - <div class="mx-3 mb-2 flex justify-end md:hidden"> - <a - class="text-sm uppercase text-gray-600 hover:text-black" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "csg_deductible_salaire", - })} - > - CSG - part déductible<iconify-icon - class="ml-1 align-[-0.23rem] text-lg" - icon="ri-arrow-right-line" - /> - </a> - </div> - {/if} - - <div class="bg-white"> - <VariableReferredParameters - date={$date} - {displayMode} - name={displayMode.parametersVariableName} - /> - </div> - </div> - {:else} - <div class="flex-1"> - <h1 - class="flex border-b border-black pb-3 text-2xl font-bold text-black md:hidden" - > - Modifier le droit en vigueur - </h1> - <!--Partie II modification de la loi - MOBILE - vue choisir un dispositif --> - {#if billName !== undefined} - <div - class="mb-3 flex flex-col rounded-b border bg-gray-200 px-2 py-1 shadow-md md:hidden" - > - <button - class="place-self-start text-lg font-light" - on:click={() => { - modificationsOpen = !modificationsOpen - }} - > - {#if !modificationsOpen} - <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri:arrow-down-s-line" - /> - {:else} - <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri:arrow-up-s-line" - /> - {/if} - - Modifications en cours - {#if Object.keys($parametricReform).length !== 0 && displayMode.mobileLaw} - <iconify-icon - class="align-[0.1rem] text-sm text-le-jaune" - icon="ri-checkbox-blank-circle-fill" - /> - {/if} - {#if $billName !== undefined && Object.keys($billName).length !== 0 && displayMode.mobileLaw} - <iconify-icon - class="align-[0.1rem] text-sm text-le-rouge-bill" - icon="ri-checkbox-blank-circle-fill" - /> - {/if} - </button> - - {#if modificationsOpen} - <div> - <ReformsChanges {displayMode} /> - </div> - <button - class="place-self-end text-sm uppercase text-gray-600 hover:text-black" - on:click={reset} - title="Retirer les modifications de votre réforme" - > - <iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri:refresh-line" - /> - Réinitialiser - </button> - {/if} - </div> - {/if} - <Search - {displayMode} - searchMode={SearchMode.variables} - showOnlyWaterfallVariables={true} - /> - </div> {/if} </div> </div> @@ -1130,68 +1144,7 @@ <!--Affichage du titre "impacts" et onglets de choix cas types ou budget--> - {#if displayMode.parametersVariableName !== undefined && budgetVariablesName.has(displayMode.parametersVariableName)} - <div class="flex items-center justify-center md:justify-start"> - <a - data-sveltekit-noscroll - href={newSimulationUrl({ - ...displayMode, - budget: undefined, - })} - > - <div - class="flex h-14 items-center border-b-4 border-transparent px-3 pb-1 text-2xl text-black" - class:!border-black={!displayMode.budget} - > - <span - class="hidden tracking-wide sm:flex" - class:text-black={!displayMode.budget} - class:font-bold={!displayMode.budget} - class:hover:text-le-bleu={displayMode.budget} - > - Impact cas type - </span> - <span - class="flex tracking-wide sm:hidden" - class:text-black={!displayMode.budget} - class:font-bold={!displayMode.budget} - class:hover:text-le-bleu={displayMode.budget} - > - Cas type - </span> - </div> - </a> - <a - data-sveltekit-noscroll - href={newSimulationUrl({ - ...displayMode, - budget: true, - })} - > - <div - class="flex h-14 items-center border-b-4 border-transparent px-3 pb-1 text-2xl text-black" - class:!border-black={displayMode.budget} - > - <span - class="hidden tracking-wide sm:flex" - class:text-black={displayMode.budget} - class:font-bold={displayMode.budget} - class:hover:text-le-bleu={!displayMode.budget} - > - Impact budgétaire - </span> - <span - class="flex tracking-wide sm:hidden" - class:text-black={displayMode.budget} - class:font-bold={displayMode.budget} - class:hover:text-le-bleu={!displayMode.budget} - > - Budget - </span> - </div> - </a> - </div> - {:else if displayMode.parametersVariableName === undefined} + {#if displayMode.parametersVariableName === undefined || (displayMode.parametersVariableName !== undefined && budgetVariablesName.has(displayMode.parametersVariableName))} <div class="flex items-center justify-center md:justify-start"> <a data-sveltekit-noscroll @@ -1235,7 +1188,6 @@ > <span class="hidden tracking-wide sm:flex" - class:text-black={displayMode.budget} class:font-bold={displayMode.budget} class:hover:text-le-bleu={!displayMode.budget} > @@ -1243,7 +1195,6 @@ </span> <span class="flex tracking-wide sm:hidden" - class:text-black={displayMode.budget} class:font-bold={displayMode.budget} class:hover:text-le-bleu={!displayMode.budget} > @@ -1256,18 +1207,16 @@ <div> <h2 class="flex"> <div - class="flex h-14 items-center border-b-4 border-black px-3 text-2xl text-black sm:text-3xl md:px-1 md:text-xl lg:px-2 lg:text-2xl xl:px-3 xl:text-3xl" + class="flex h-14 items-center border-b-4 border-black px-3 pb-1 text-2xl text-black" > - <span class="pb-2 font-bold tracking-wide text-black"> - Impact cas type - </span> + <span class="font-bold tracking-wide"> Impact cas type </span> </div> <div id="onglet-impact-budgetaire" - class="flex h-14 items-center px-3 pb-1 text-2xl text-black sm:text-3xl md:px-1 md:text-xl lg:px-2 lg:text-2xl xl:px-3 xl:text-3xl" + class="flex h-14 items-center border-b-4 border-transparent px-3 pb-1 text-2xl text-black" > - <span class="pb-2 tracking-wide text-gray-300"> + <span class="tracking-wide text-gray-300"> Impact budgétaire </span> </div> @@ -1300,7 +1249,13 @@ {/if} </div> <!--Impacts--> - <div class="px-0 md:mb-4 md:px-6 lg:px-8"> + <div + class="px-0 md:mb-4 md:px-6 lg:px-8" + style:padding-bottom="{$testCasesIndex.length === 1 && + displayMode.parametersVariableName === undefined + ? testCasesBtnHeight + 40 + : 0}px" + > {#if displayMode.budget && displayMode.parametersVariableName !== undefined && budgetVariablesName.has(displayMode.parametersVariableName)} {#if user === undefined} <div class="mx-5 my-10 flex flex-col justify-center md:mx-10"> @@ -1473,6 +1428,8 @@ $testCasesIndex[0] ]} year={$year} + {defaultTab} + {tabs} /> {:else} <TestCaseCompareView @@ -1491,17 +1448,7 @@ {/if} {#if $testCasesIndex.length === 1} - {#if displayMode.parametersVariableName === undefined} - <button - class="mx-4 mb-3 flex h-8 grow-0 items-center rounded-md bg-gray-300 px-2 py-1 text-sm uppercase text-black shadow-md hover:bg-le-bleu hover:text-white focus:outline-none md:mx-0" - on:click={() => (isTestCaseSelectModalOpen = true)} - title="Choisir un cas type" - ><iconify-icon - class="mr-1 align-[-0.2rem] text-lg" - icon="ri-user-search-fill" - />Autres cas types</button - > - {:else} + {#if displayMode.parametersVariableName !== undefined} {@const variableSummary = $billName === undefined ? variableSummaryByName[displayMode.parametersVariableName] @@ -1510,7 +1457,7 @@ ]} <h2 class="text-2xl"> - Situations types pour analyser le paramètre "{variableSummary.short_label ?? + Situations types pour analyser le dispositif "{variableSummary.short_label ?? variableSummary.label ?? displayMode.parametersVariableName}" : </h2> @@ -1614,6 +1561,7 @@ {/if} </div> </div> + <!--Bouton flottant mobile pour fermer volet édition du cas type--> <button bind:clientHeight={validateBtnHeight} @@ -1628,6 +1576,102 @@ icon="ri-check-fill" /> </button> + + <!-- Bouton flottant "Situations types" --> + <!--{#if displayMode.tab === "fiche_de_paie" || (displayMode.tab === undefined && defaultTab === "fiche_de_paie")}--> + {#if $testCasesIndex.length === 1 && displayMode.parametersVariableName === undefined} + <button + class="fixed bottom-5 right-5 flex items-center gap-3 rounded-lg border bg-white px-4 py-3 shadow-lg hover:bg-gray-50 active:bg-gray-100 md:bottom-10 md:right-10" + on:click={() => (isTestCaseSelectModalOpen = true)} + bind:clientHeight={testCasesBtnHeight} + > + <div> + <p class="text-start text-xl">Cas types</p> + <p class="text-start text-sm">Cliquer pour choisir</p> + </div> + <div class="flex flex-col items-center"> + <div class="flex h-[7px] w-[80%] rounded-t border bg-gray-100" /> + <div + class="mt-[-1px] flex h-[8px] w-[90%] rounded-t border bg-gray-100" + /> + <div + class="mt-[-1px] flex rounded border" + style="background: linear-gradient(to bottom, #f5f5f5 50%, white 50%);" + > + <svg + width="50" + height="50" + viewBox="0 0 268 268" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M239.691 136.889C241.643 135.453 243.23 133.578 244.326 131.417C245.422 129.256 245.995 126.867 246 124.444C245.993 121.261 245.008 118.158 243.178 115.553C241.349 112.949 238.763 110.97 235.771 109.884C238.339 107.056 239.767 103.376 239.778 99.5553C239.778 95.4297 238.139 91.4731 235.222 88.5558C232.304 85.6386 228.348 83.9997 224.222 83.9997L224.148 84.0059C226.12 81.3988 227.333 78.1882 227.333 74.6664C226.5 71 225.917 69.4172 223 66.5C220.083 63.5828 212.626 64.5 208.5 64.5C204.81 64.5137 204.525 60.4601 201.735 62.8753C184.437 41.7695 160.108 63.6678 134 63.6678C107.282 63.6678 82.424 40.637 65.064 61.8859C62.7308 60.274 60.8306 66.7969 58 66.624C55.1694 66.4511 55.5 63.6678 55.5 63.6678C55.5 63.6678 51.5 61.8859 46 65.5C42.6144 67.7247 40.6699 71.8305 40.6667 74.6664C40.6667 78.1882 41.88 81.3988 43.8524 84.0059L43.7778 83.9997C39.6522 83.9997 35.6956 85.6386 32.7783 88.5558C29.8611 91.4731 28.2222 95.4297 28.2222 99.5553C28.2222 103.538 29.7653 107.134 32.2293 109.884C29.2373 110.97 26.6513 112.949 24.8216 115.553C22.9919 118.158 22.0069 121.261 22 124.444C22 129.559 24.5013 134.051 28.3093 136.889C26.3574 138.325 24.7697 140.199 23.6739 142.36C22.5781 144.521 22.0047 146.91 22 149.333C22 156.041 26.2747 161.709 32.2293 163.893C29.6611 166.721 28.2333 170.402 28.2222 174.222C28.2222 181.882 33.7724 188.216 41.0587 189.504C40.8047 190.614 40.6733 191.749 40.6667 192.889C40.6667 197.014 42.3056 200.971 45.2228 203.888C48.14 206.805 52.0966 208.444 56.2222 208.444C60.0425 208.433 63.7229 207.005 66.5511 204.437C67.6367 207.429 69.6157 210.015 72.2201 211.845C74.8244 213.674 77.9283 214.659 81.1111 214.666C84.9314 214.655 88.6118 213.227 91.44 210.659C92.5256 213.651 94.5046 216.237 97.109 218.067C99.7133 219.897 102.817 220.882 106 220.889C109.642 220.886 113.167 219.603 115.96 217.265C118.752 214.926 120.634 211.681 121.276 208.096C125.463 208.307 129.694 208.444 134 208.444C138.3 208.444 142.524 208.251 146.712 207.959C147.324 211.572 149.195 214.851 151.993 217.218C154.791 219.584 158.336 220.884 162 220.889C165.183 220.882 168.287 219.897 170.891 218.067C173.495 216.237 175.474 213.651 176.56 210.659C179.388 213.227 183.069 214.655 186.889 214.666C190.072 214.659 193.176 213.674 195.78 211.845C198.384 210.015 200.363 207.429 201.449 204.437C204.277 207.005 207.958 208.433 211.778 208.444C215.903 208.444 219.86 206.805 222.777 203.888C225.694 200.971 227.333 197.014 227.333 192.889C227.333 191.725 227.184 190.599 226.941 189.504C230.535 188.871 233.792 186.992 236.139 184.198C238.486 181.403 239.775 177.871 239.778 174.222C239.767 170.402 238.339 166.721 235.771 163.893C238.763 162.807 241.349 160.828 243.178 158.224C245.008 155.62 245.993 152.516 246 149.333C246 144.218 243.499 139.726 239.691 136.889Z" + fill="#FFAC33" + class="s-y_bCXRrkrYfP" + /> + <path + d="M59.333 137.496C59.333 84.4455 92.765 41.4375 134 41.4375C175.234 41.4375 208.666 84.4455 208.666 137.496C208.666 190.547 175.234 233.555 134 233.555C92.765 233.555 59.333 190.547 59.333 137.496Z" + fill="#FFDC5D" + class="s-y_bCXRrkrYfP" + /> + <path + d="M134 208.666C119.397 208.666 111.756 201.448 110.934 200.62C110.353 200.047 109.89 199.364 109.572 198.612C109.254 197.859 109.087 197.051 109.081 196.234C109.075 195.417 109.231 194.607 109.538 193.85C109.845 193.093 110.299 192.404 110.872 191.822C111.446 191.24 112.128 190.777 112.881 190.459C113.634 190.141 114.442 189.975 115.259 189.969C116.075 189.963 116.886 190.118 117.643 190.426C118.4 190.733 119.089 191.186 119.67 191.76C119.988 192.052 124.686 196.221 134 196.221C143.452 196.221 148.143 191.928 148.342 191.748C149.537 190.628 151.123 190.02 152.76 190.054C154.397 190.088 155.956 190.76 157.103 191.928C158.242 193.09 158.876 194.655 158.869 196.282C158.862 197.909 158.214 199.468 157.066 200.62C156.245 201.448 148.604 208.666 134 208.666Z" + fill="#C1694F" + class="s-y_bCXRrkrYfP" + /> + <path + d="M140.222 177.556H127.778C126.128 177.556 124.545 176.9 123.378 175.733C122.211 174.566 121.556 172.984 121.556 171.334C121.556 169.683 122.211 168.101 123.378 166.934C124.545 165.767 126.128 165.111 127.778 165.111H140.222C141.873 165.111 143.455 165.767 144.622 166.934C145.789 168.101 146.445 169.683 146.445 171.334C146.445 172.984 145.789 174.566 144.622 175.733C143.455 176.9 141.873 177.556 140.222 177.556Z" + fill="#C1694F" + class="s-y_bCXRrkrYfP" + /> + <path + d="M102.889 158.889C101.239 158.889 99.6563 158.233 98.4894 157.066C97.3225 155.9 96.667 154.317 96.667 152.667V140.222C96.667 138.572 97.3225 136.989 98.4894 135.822C99.6563 134.656 101.239 134 102.889 134C104.539 134 106.122 134.656 107.289 135.822C108.456 136.989 109.111 138.572 109.111 140.222V152.667C109.111 154.317 108.456 155.9 107.289 157.066C106.122 158.233 104.539 158.889 102.889 158.889ZM165.111 158.889C163.461 158.889 161.879 158.233 160.712 157.066C159.545 155.9 158.889 154.317 158.889 152.667V140.222C158.889 138.572 159.545 136.989 160.712 135.822C161.879 134.656 163.461 134 165.111 134C166.762 134 168.344 134.656 169.511 135.822C170.678 136.989 171.334 138.572 171.334 140.222V152.667C171.334 154.317 170.678 155.9 169.511 157.066C168.344 158.233 166.762 158.889 165.111 158.889Z" + fill="#662113" + class="s-y_bCXRrkrYfP" + /> + <path + d="M207.491 80.3462C209.783 78.6202 211.644 76.3864 212.927 73.8203C214.211 71.2541 214.883 68.4253 214.889 65.556C214.889 60.6053 212.922 55.8573 209.422 52.3567C205.921 48.856 201.173 46.8893 196.222 46.8893C193.765 46.8893 191.431 47.3933 189.278 48.2582C188.222 44.3031 185.892 40.8064 182.648 38.3093C179.404 35.8123 175.427 34.454 171.333 34.4449C168.12 34.4651 164.967 35.323 162.187 36.9338C160.513 34.2698 158.191 32.0736 155.438 30.5503C152.685 29.0269 149.591 28.2261 146.445 28.2227C141.641 28.2227 137.31 30.0893 134 33.0698C130.599 29.9634 126.162 28.2354 121.556 28.2227C118.409 28.2261 115.315 29.0269 112.562 30.5503C109.809 32.0736 107.488 34.2698 105.813 36.9338C103.033 35.323 99.8802 34.4651 96.6668 34.4449C92.5731 34.454 88.5965 35.8123 85.3526 38.3093C82.1086 40.8064 79.7782 44.3031 78.7219 48.2582C76.5164 47.3609 74.1589 46.8961 71.7779 46.8893C67.7755 46.8917 63.88 48.1805 60.6658 50.5655C57.4517 52.9505 55.0892 56.3053 53.927 60.1352C52.7647 63.9651 52.8641 68.0671 54.2107 71.8361C55.5572 75.6052 58.0795 78.8416 61.4054 81.068C53.5654 92.4795 48.6437 103.848 46.1112 111.445C39.1112 132.445 63.7014 182.49 61.2748 157.72C58.3628 127.928 68.9654 102.248 90.5441 94.4644C91.1103 106.063 101.943 115.334 115.333 115.334C123.061 115.334 129.887 112.185 134.448 107.344C135.485 113.073 138.5 118.256 142.966 121.99C147.432 125.724 153.067 127.772 158.889 127.778C166.822 127.778 173.804 123.995 178.365 118.215C180.605 127.312 187.71 134 196.222 134C206.533 134 214.889 124.25 214.889 112.223C214.867 110.306 214.625 108.397 214.167 106.536C214.597 105.434 214.889 104.246 214.889 102.889C214.889 97.0902 212.481 88.8955 207.491 80.3462Z" + fill="#FFAC33" + class="s-y_bCXRrkrYfP" + /> + <path + d="M219.763 146C219.763 157.046 212.152 166 202.763 166C193.374 166 200.763 159.046 200.763 148C200.763 136.954 200.763 133.5 208.5 128C216 130.5 219.763 134.954 219.763 146Z" + fill="#FFDC5D" + class="s-y_bCXRrkrYfP" + /> + </svg> + <svg + width="40" + height="40" + class="-ml-1" + viewBox="0 0 268 268" + fill="none" + xmlns="http://www.w3.org/2000/svg" + ><path + d="M219 163.362C219 155.622 214.419 149.176 208.266 147.377C201.844 112.164 171.069 85.4453 134 85.4453C96.9306 85.4453 66.1558 112.164 59.7336 147.377C53.5806 149.176 49 155.622 49 163.362C49 171.56 54.1331 178.322 60.8528 179.616C69.1592 212.322 98.7108 236.556 134 236.556C169.289 236.556 198.841 212.322 207.147 179.616C213.862 178.322 219 171.56 219 163.362Z" + fill="#FFDC5D" + /><path + d="M134 194.056C119.834 194.056 115.111 189.333 115.111 198.778C115.111 208.222 124.556 217.667 134 217.667C143.445 217.667 152.889 208.222 152.889 198.778C152.889 189.333 148.167 194.056 134 194.056Z" + fill="#662214" + /><path + d="M155.25 175.166C161.77 175.166 167.055 169.88 167.055 163.36C167.055 156.84 161.77 151.555 155.25 151.555C148.73 151.555 143.444 156.84 143.444 163.36C143.444 169.88 148.73 175.166 155.25 175.166Z" + fill="#662214" + /><path + d="M112.75 175.166C119.27 175.166 124.555 169.88 124.555 163.36C124.555 156.84 119.27 151.555 112.75 151.555C106.23 151.555 100.944 156.84 100.944 163.36C100.944 169.88 106.23 175.166 112.75 175.166Z" + fill="#662214" + /><path + d="M134 198.777H143.444V203.5C143.444 203.5 143.444 208.222 138.722 208.222C134 208.222 134 203.5 134 203.5V198.777Z" + fill="white" + /><path + d="M133.915 127.945H133.769C131.015 127.96 128.286 127.423 125.743 126.365C123.2 125.308 120.895 123.751 118.965 121.787C117.222 120.027 115.87 117.921 114.994 115.605C114.119 113.289 113.741 110.815 113.884 108.343C113.918 107.724 114.075 107.118 114.345 106.56C114.615 106.002 114.993 105.503 115.457 105.093C115.921 104.682 116.463 104.367 117.049 104.167C117.636 103.967 118.257 103.886 118.875 103.927C121.477 104.083 123.465 106.326 123.309 108.933C123.172 111.27 124.041 113.575 125.684 115.242C126.746 116.327 128.013 117.19 129.412 117.781C130.81 118.372 132.312 118.679 133.83 118.684C136.914 118.514 139.827 117.518 142.023 115.355C144.967 112.443 146.635 108.484 146.664 104.343C146.692 100.203 145.078 96.221 142.174 93.2693C138.314 89.3655 133.062 87.1523 127.572 87.1151C122.081 87.0779 116.801 89.2198 112.887 93.071C112.446 93.5063 111.923 93.8504 111.348 94.0836C110.774 94.3168 110.159 94.4346 109.539 94.4302C108.287 94.4214 107.089 93.9154 106.21 93.0237C105.331 92.132 104.842 90.9276 104.851 89.6753C104.86 88.4231 105.365 87.2257 106.257 86.3465C111.956 80.7407 119.645 77.6236 127.639 77.6784C135.632 77.7333 143.278 80.9558 148.899 86.6393C151.206 88.9755 153.03 91.7435 154.266 94.7851C155.503 97.8267 156.127 101.082 156.104 104.365C156.082 107.649 155.412 110.895 154.133 113.919C152.855 116.943 150.993 119.686 148.653 121.99C144.706 125.89 139.469 127.945 133.915 127.945V127.945Z" + fill="#FFAC33" + /></svg + > + </div> + </div> + </button> + {/if} </main> <style> diff --git a/static/illustration-exoneration-tode.png b/static/illustration-exoneration-tode.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c9e73db95770c115b64dddcbb59789a77001cd GIT binary patch literal 16461 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 D-fe;a literal 0 HcmV?d00001 diff --git a/static/illustration-pepa.png b/static/illustration-pepa.png new file mode 100644 index 0000000000000000000000000000000000000000..e32c769d296facc8e92d53ab4a7dc25056235222 GIT binary patch literal 19904 zcmeAS@N?(olHy`uVBq!ia0y~yU^Hf6U@YQbV_;yI8Dl%0fq{Xuz$3Dlfq`2Xgc%uT z&5>YWU|=i`a(7}_cTVOd0|Ns~x}&cn1H;CC?mvmF3=F=Zo-U3d6^w89a?S|(I`jSi zd8^jNy;%0LElqern_5>_n`)uwBD2TqIuHHHFWEDhHEmNyQF=>Gaq_(X&L8in8~dwC z6+WA3_{!(NoeEjscMNJ>-bPyvvie4d2pA~zDny&_UB7ki@89#5ZP;ZIT6*riPU*Ro z-ydHt3yv0Vx4QrNoxb2<10EzaQ{#w1&+{K2*YCe9!*yBqkx1;KNw+G#@rB-8sgdQK zWAX9B_v!00RiEkTr13mfR7mog5!NX`o7*<5<JPVl0Y#?Ww>UsDjQ<iZcOC19+BS`+ zBSMW!bM3~5Ka#{u#EjcCwJv_ueswHt+TG==L{uwx1+Cijqk8+_3iYW5I%zz?DsmMM zcYoK^G+iZhbz<qRM~6FEm*y;-DtOpnU6GmIw4m9cn|gP7v_4y=w@j#2*SM{a^T^Rt zS5G)AS?_F-aq4({>ixZ62c)zdBhE-1OT1KQxX?s9r%3bjMNv7wGf_KBe8s0qC?-i9 zGkg%#x3=SrL&JSmMds3#U7JEfnl_{!GvNEse}3%@`JhvBN|Tq0l__qT&F!VT`y?kr z+eX2&OGTzl+;Avtg39EqWtYF)vJ8oh^M3k}t4p>0WypO&t6RkrekI$s#VIdYA#iDu z7aPbtv&5}elA>~jb!S~$(;1=1SGvc0x8J@*k1JPHbpO43E|;-TsPSk|qRyhJQ7u#2 zJp!LkX4!B=Z*I-hZ+AHaHr<!~lj`W`T<(xzv2Q`hB*r&sMm;KvqbHmR?{RJ6<`mpr z@Q5k+eDl+?*vrqkxum472tQ3NC|?}H1hQIf<Kioi4z;nCyqvPy#BuV|ko$qY7q|k9 z<}&8YH0<I0_i<;wF1Pl>&{eYxryXZ0P+dQ#F!<h%88fdR5_i$%FMT>SaY~lX@`l6H zBo9j*IFlh~s}Lt(xVX@e<>&Y9Zx`%1k#bI|e&e&gSDXpY6QuWkxTnvxFHTd1`G!&Q z44Vkutqsza+Y=Xxi5ou(TEvq4dg64qqlYFOJThNU{q(YZS&N=+dY6BH;`h??9EIGh z65Gy5sIl|s{W_<mUAQswt9bTOF*g^Uq^)01bXUe6TP<zxe);%W%jacR7TWIqe&1AE zPu}tU?G(f089HumVcOa5y{pX{X9jU|T-f*R?Uvt1t~K?y&aOPo8h=6b`1cm?U2h}2 z7f$CWxv#c+CQotOnIP`aO;?gGR-TROInD9D{LR9*$Ky0J0+%*^-L^h=_cYeC&zK$_ zlY4W=IaaA{TKg`A=~)|6k4>>D^Qrc|-YwbN{nl#d)&Q{}@h#?eb=DZ~O=&n7#M{OF zTBl>FRL)F8)w3QeU0*0FrUVrl8ZQ;waNq%#(gJ<%N6EL3X2;yEuztB$oO!8~$Q8vt zkmAnSOT}L9h}d=I5Z}7&U-^&9&s#h%+p%c&z2B}6Qydt)O>Y<_dvys;H{$Wmk@TFP zw{?d3Q!nTK>)Km4Fdw<~ATN!1;?dvEbEE7gJP^2_7TAz*x<`}qPM)JtP*&p9*5|R> zk4m`D@04Aq!IjC)xkBK})%$zjHfpf4h#9MW*b$pGaoxRgDHZ0t{V&#+9{rl}-SO6? zUpWh>bA+s9+db1KVPjMl<8)r7v@KVdLVxV`+mjd_vqoUUfqR07I*TUcEbGrUy0X18 z?Z`JTE{2?$hK-9QbUijL6)S7FA$e=oCc~&zf>Tl)W=N<xB;3k&wb<e~^-R#AS&=rs z&zqiBlR5Q%$CAfM`SSH=zcK8WtZK8)`1Zs5+)mkPs%ws1W>)`X7ta~^*xP^KKbD^| z+s@2zNZ5LXY1&z*hwDUFUpb_;)62ByTkf(eS3bSJ`)zXRljMjq67k8U8`s^;T<^Y{ zKO<G}=$0d2PF&yKx$nHwQYlA?jb}L-j!o~;+ZrINzg43wW{tqlUuJ>A-|L>wJJ5e4 z?R3vaS^KJgx4lnke3>vch<nGBD#y<`cXYOH=;E!Ny-#lA*=drGrHvjZZCWapwruaN z*sR2<HzXe(y>BSJSb5vuJKIlAlYCsc$KdT%|0!Ab)uPjSmT%k@A$~bd(A~)B>Y<Zj zODc5yV&~qyqPvgn7rUlhf9Gu>5l#KY9!usN3keTA{Df`QYI*lC$DH?8vWCXDwy%84 zplY=J|2gIjsmCfNCHYiu-F=0LsqD=Q&R-Ay@|y^DAAig`-*{OSPi*bo<(WQbB{n(j z+jn+B-;FfGWSgTej_!J97@d_^c5AhuLK6G8{r>FVWldBPZn~UOF1h^HJmY@q$?MxY zE3-B@a6j0+&$rB2(m&yN2>147d!HRz)sedI+(T#i3v;+<dx%9O?DR6dklhv3yWnf? zrqp91b2nd(J1KuT?rVniO~2dQ-wAx&z__VdO)+J<?kxAP#?rLZBV}HpVm0r#$-h^T zKQK))*u-sm)Qsb&l47kZ({JZl?f9>7)AR5X&J^|n^{?M@AI(s-ELvf_e?_~9=t+k7 zDWJ@@<DC2DxT&csjp57o@_pgGa7{Nq^I)yA!Vdn4PC7b5of+#i;+Svx)*PQ-_}g`Q z?25>=vc#?VlZ9SgdVlBN1GY~VI%z$tD{?ok(-D}jyT5wvf@sddS;pmNbM1fE_@3!v z)QQ+JyNYFH{^Ywp$3)Lfi&}9nYK?ZYprUto#N|6`Z=WYI1-h#{udAKy`0{qj>7GIn zYcJh1I@d}Uv%cJKw)IJ=?sC8RPTlLGB1!~LtHiH#3;1Pr(<oWy;H#wA^?ucNcW1}P zDeiu8X{X8eOWY^3pGa@a-IH(JlyV^GlSa-=!)?i1Sx@?`Y<=d`Ir+-FAa2`$x{s?0 z^ot*cDxOw}zppllvGqd{I1S~_(cS8?vTu5nNb)W1S0{=dvMVzG{AFf%pEs|{?%b41 zTPCn4p6=P$WA=9Hq19`qM9s)_)H)Wz{Uto_v|?I@fV=(D_#H{ddUshf|GBsQWYRH@ z$KR6fo;zrEt8UFwjmvTIcYYL|d-K${{7%4@P27^7dT-SEN9=krL8C$ax7p3JDN71= zUs*Kca-5*{Y1NeH=jT1tR%HI^ma{nIvB!DF_-~-(FyoQ@{Afe_B~uhvU-c0>pyl9} zd&?qO^j+MHZ@b?1%6>VxkiX>p@6FM(Gh^o7;n`HDIAKNPY>hi1+czd2F+18?`fO<s zZ@A88=hur5$u3m&>af$hvN`aMiTw7}%J$hEx1*1m&se)wYu}_VUS3PDd2V;Dz4%0` zq|5NF=;F!;QDU>d1;5?3{jkzxK_d={NBJ+WAAKFO?M2X9yR*6i@~5wF@9aL?e)s2Z z-@Rr@w+&D8Foi`g)eCkyCA&(iT=aUt3h%&`s#6#B7EW}XS>?TDszmt4s4T;^+dQ)! zwZ3f$mkbDQQ;M{GkfgV(NKsPteusi}+KiI|O9XHCbwob*Uj5#CqLk>e=~vqA<-3$x zbUppQ@Lg<+^j^I0?#JisTY|WI0>ZBRRB04nwl_*OUhH#Mw%+p3%luW9AC!K3cWeH3 z)>B=lwYbef4&J?TIKOuGwp}wf96J_z`PY<HW|N%{oDzPQRh(;TTk>n^i?)bKVVk$6 z=|gJ%lRnjVYl~K^i+7YfUHMJl{KC4HCkO2mlXk{j_366!kHx%hzX#ik-W%Vd?=Q=p zcJrg}#bciYa+md3%*fW*(&u{CDsOsJMeRnt8^3;UfAQnu<6YmMYM*TI=JY=EVve!T z)V){Q5_^oEyuNLt^(ZYmYQF9lp?MltH=H%no;87S>a@=L`+Xv^bh0M(_*A<-TwSxW zb!O)Jy2v%s{YOve%<7PonLBshI>Yamc82JD`kLz}-pQa`JA36R1EV{qS9aV;npwJU zN7Ym@<<A@oCkU<GpLjJZiEEPO+o>uaPHhQae&f^a@Ye2%sPFr7PM>-6B1c7F!qG3M zN_dZ)`?77%VbNMg6=tr$Hz^INr+MBjo!-K;#O2xBFWnbYH;U+{Y5U5@t;wFd<>}Pe ztU!(}_OT}Ko!;)A?oi$uw~~$J9DnU>#Z4YRPsAVSR%k0<@%ic1xY~MG=F4%d6J#fe z8u?W3bv_bdux;0b366UL8h-9>-p@5<LgTu=yt7MdKHi+p%l<<=Zl}ZR$6sbmVB9gu zeK-G$d*<gOWVT2?<kAwFcIS+-<A3KTwNW>{w9h5QE?>5Hm+L;3hQK{0rP~DR-re5v zB+X4^r*^gA1*5fZ&%1}4-I4nGCy8zMNu8|$s@}S1e5y;6Hs)=V2#$3PYhc~x5s{qs z%X}iI@AQ@(cVC69$p4)1T<+DW`%?qM*97r;Pn+4{eNZb~MLy8$B;)GKagH0sUyIFV zR?^;?{X5Ty`v|vE+O@f7&b65NWG&EMzw^%3a}3hI%({(|qHh^BcYE3i8#O#>=vW+h zf%Wa1q}Z$byG!>r-0YOtwE9s|s*_;1Gxrr&J-#}Zm28t3!_Dv2ovS_Op0oS@cFo+G zTlY)ED$Uz7?@yQ0YqdKPx>>P3!aE|f9$pnw*=-P=)p+RoPNx%RjvVbtaY~#UTf6u7 zVfnw;wrk28JAdBM&(5*3^T(#g{<Slg-TUjJ!18wS(Op}5R6d+aiq(JMw$gRi%bNS^ zYFXv2mmQ0`<2S8FdE3WG%`4kGQzri~>yB}X>a&XL$O{wYzHHFtQM6*Z(B0!6p}`_u zQ?~p3egFTq`0M9i3wE=f%nsIlb0mj5NNV#^u?(yF^xJudWtlP@^sh0TXnh{L`u29t zaFNz6t$JyBeK)3w84Lb#XPtY+q%~>Mi)``u$eR)mi~N3Hy1Z}mg*$p%KX`Lb;^FwR zSn*EBft2RlrySqJ5BXfSoN%(`mhZlOzDGO?6SW(%mr8|s8Ry8qe{9k@Z}Jq07Z%_7 z9?q)$@p<<N{id|7SD5mcT+VoRmv(cmQQ3SgLT!a}_wi>>&sZFKbol)V)3s*OH+?e9 z1pGPFlkzsH%KiLh_VMSz5Z?7YH?}3sJeeb`&6TC)`f;7|l&+`zPuiTaN?wW2|Clpv zvxKgPqxRMlY#$9nK8Q0pu?C)E-86lAs_)(t<~@Pm%RSPZzMc@vFxeD+vg44|W}~Fr zy(tY(%hc8{R(mY++9D?4goD;nm;SYTPfu<=FymX+QdZ7&Dq6dHw<-MH_cd}YtL6zO zHm*({7B;2O3@)7(<>JehYm|IexHjDHn4l<Jb$OC>j-b(wGdHKH-E%JwH$OS)^xPxQ zxeTv6Y3OaSWvj9djymz-?uTNhFBd+lzk4(1*VFWQ3j7JB8}(+jh;xZIdh32^^qzkD z)hWHL8M_L$iG4oBYP29cuC_98_PNANIgx7%<X)&wotx6#Eu~YsH;DI3?!Nm!^A?`> z`OJL2uKHwoUj2oQd@_~hpO<DV7f#;z)~T02aLwx#nu@0vc<)%&y<Go)>cwd*GrCK! zo^V!D+t#9DVEtB<_gID_SJFyX#Vv0heY=~^%6q8j=AlZHb#-4l`+q;2^sLyt*J#s` z6ggj0i?Z7qKg~R6N`7AJzHgtee$S0<LFsMgPdp7z>+GGN7$UZ6cEwB9*;n^oWIg5j z&TM(V-qwK1TdTPhq&XRzLz%U8qmNvAu+QmQq~e?$D|h?!eJY2KcwSqxzovFJN4!Y& zk!@3F%v7J=sq)*}WyAj!TP8H_x@oKt6By^d(12y_#F$6!=j*Fa-sn2P_a*4mm7arB zUHtDJ$~?>3s#CWtb*adsB)5j8ERLsDQ!*b^otoyAFjXe&m_Sc?Qq{59`|Guz*GjNt zy4OFie!J6I;DwB4%c2Xl|2NdRDqA*eNnO_SX8V_rxij;4XL=s<o9{C9@$qH<Z>-?F z#h18Hw;)eAB#nDg4!BTv)Zbbl#BpfpA=cXB)6s47A0IPtOVR(lH8wWoa>TnEGwot* z9~#};E_txy?a~zEOG(p$UT%1_ux!~J(-gIa2@kcq-L@L_$c5bA%~Ek|_5Kq&TMf8e zQq~>zeN=Vxw9lG|$yEy?%F6y8-F1?o<Id*l|9cN;ukbEl+`c=+`QF)(lftu)ZI#+| zPI+2u&Y2@twu+ZuSWe6l<Luv>q8#R}Yw-4}&q~*T<$HIrawVUg61BuqXA*bEQA^f1 z`}-YA9TG;H%9<@!%e`!R<CO6`BG>KKHmk2OC3QP`x^CTOQoQV?FXWuU$`Khmd0)5L zg@u;_&U^eh+ZUN}bjG(RuccyTm+xL&n`+fNE$RiMqvQW)Go-3-PvSZoRlIBc=PpU} zOK(0-pHpld6Bv=sx;*Q~o$Z;q7RiFAjZ?Btd^w?>(j2?$htyn;38Gsrc9))2-W*}B zaXGG=b<M`L`_1K~wOg)g{V{Qqe)Rv%v}aA6yxLD*-_|+Sk?ZZc*{iEeEV-yn+R5xn z@wy3&xjP<rua175AC<ad#kIbbVoUAbZjE?TyS#vtZO#0Z#>+0Szn9ni5wT;%ip;}7 z!Z+hQ7aL!@aQo$w35*d5KizWVUs^uMy1z{I^qSmY6Dh8pyXT(NyKdyZAwGGB|I&Zo z{w$S!l&dqZ!h4JA{p53g)vEKpy>hSny!!cPu@j5#Ff!KdC_LUTvphHdok2`M_p^MP z`e$!GbK8lnuYB`@)0cyL=Wc=Uo||RazbEr5Z*w&YjQp_oc3qAoTYl)7S<cF{&%`nx z{P(0lKJwtI33C@}Pg}%VB|X1lW1hi@tqd07D_N_IA5N2+>r?&hYs&^xpLq%{8-KlF zn%el!@#9thx9a}c>$6o}E;#yZ-Ty7Gm770UUcJ4Yb6ed9CD~Ux6^*$+&#mQ;SSPk2 zCgx$<oikaokt=juwi=(me8=0?ha+-Up!OTPS>IOaD05caTD`qNBlqXq?DV52PlR;8 zdA@_SB{aGwXh~>UoW#c5$TPR%JJvad>Ra+WN<N&+?lG;vwdGiRg`MlM7ySy;1U8wh zUC0>qVe=_F??S^VQ94EeJNfrmyxkf<XOD(sgDYb~=#s{xjY*e1miU~05h`AIV*yWr zqT}HyY=@H?f82=U&h>ZOSe!FK^ntH}<bw9-+S${Vr>)S+EpR@wCL-nO)~hBDn?8GL za=*T}e)?7u$K>kJRmPKoG}Hq3zCV6+*Gmb$JMu>g6q3@^w;bB))F3718XLRzZ7O$} zQEA)HXE`Z)7eBvTGIg5dW^J<_2i}RFWY{Zs+k<V##qF8iy!)kpGbBtsnWBIE>>RJF z!Rk-;++Q?d?$d@@3v@Lfdvb2>F73YC#KP#@_^ePdDJ*MU(L}zE#gey9A5vpx`o7`P z8zEEkTZ>apgs*ydY@cuRvze-%cO{gT&XhT_X2QX>YyRK(88R<<bMLI6mFr`d{%Eje zE`F|&D#9IlVfM;DNsqT@uGe67xY=kXWtCU^#aB;ZLgvI4*W!O`B-iDCF5`OpUU}cG zqZ@5%JYod;<`~rKB-Wl4N$S5|cu8os;l9pg{qubvAM3gPuV&SA30a$+vv;vubK9BU z@5o(TJNxO>M3r+(j$OZ<G_y3X@7mHwB_~e0IIMZh>~-`Pw;iA3zbwJqD`pxgE{~q+ zwc<*#lIp(6YZv6C{0<P`8yvW<djHHI?io)yj73&oIrQceulj|kLcP5g0)95#Z`iQ4 zGkJBYR_oQ-eWuGC!-U1O+BD~>--%fsdvdj18MAKIo;IyhTBYyr-`mw{_P%yn&jfAB z3zj#Q<(6o*<QN^;7FM`C`<%fysjsO&9dg#}%al6y{YecE(_dy;&7if_(-vRgs<iIU z`kH_HxZi@mQ{`)a{Miz5{mmy{^9Jr!xtd%ve!pZ@yE@OkTqnkDYv@;2`Q6VC+h5{- zZxj2&^z)Rgoc|kKxo3(vtO`-~F)REZKC7Ioafkb#2v5EREfZaX&dq$v@4Y67WzzAp zv%I!mR`0Zb{eS9%utPy|Z+rxAK8~EnDwZtMx@V=}^~9{434T+<gVyYs^~`_oEIZrJ zVb0eiVoptSe*N<ByXGlE)77^-u9r_sDxIhICTIs|lCK1-Y`<zojk9g*;cc}!-clSl z=Z4?$zABo`YrD@VXz9*5hgrF<Jq%5Vsm^`+qxjwI0Nbg2bLy5~c)t5%+x|Zx-%tDR z%hS4?`dUEV+=?lIQS+qVsujA+H+Xyx=g8KXZaq`Yu;s^$zj>+`+8n>lvw8k)hSH*r z?tP9Ecim)-XMSeRrYfeb$Ck}g{8~`_vz4D|?sTcgEvny+p09Z=vt7t(>+=`#85(vT z&;4gCK6<|3_BZF~jN1?IUoN;4F-iM=NAB`pX1Suq=1J+Ird*-s60>8LL?*|Ul)Y-b zE28u0=+u|O_a%O=YZe!Ky=YC+>GyZ^KW*uX^}W6Hl(_xoNou{e`B!pvmDINR9yw;T zGv${03y<TDuOv<K*PfqUvo!C%nuB8Q^@M*#+M!D!<7$#eu7wtV?Oq%^B|!GBb!23= zPyI!Wd!;5%=S)bHNLhGm`$E1&_Wxd=_^u;heq+b?``ub868X)Nv30^m4U0mKe3SUB zkeumqg5gn$krSIil683Q%(!F5(yj|b)7)}y?=vqxw08A%4Xv#coS$&tIV|Mdu>W<& zrHKmvPrNs<<PmcE_U(L&q}imkPBA=^vMf&BH@!P&ZTw%g@aV-N?&SwLWJH$U+Nis7 zO2#akDz=*&e&oF3oGEzhsi(}5b8lu|VD@ave9Tp@>!Njvhu^g{B|lBcMf>n7<7Vl= zCst*rGG6l-8t(YC;ZR6Ak74hbo~4>q{ed~xt!^2uJ1DH{Az;)qk&{V7wsCfk#VlEF zYp=#ro3w)a+f~g2Rk$yGG>ynQ-02u~qhf2?L)(9+>@%8H91om$=G4}F;cJrT+MRxz z_4eH;b2+1SSK{u?e@<T#)o;yt<g7d`JaVVg$s-<TXG~_AcI*|;)=z!*7g<f6OS-za zV@}617M~ATeYDBU$#qGP@C;?y_p>YfriP_|J2pSg?zdF2+S$dD!m~2YJ*l+JKF=_T zS@^i$(#4f^@@*|iJ^^MPLJJ!91l(6sGw#mcyn><c>5l#Xub++9^fd35Uq0ci!=442 zQDxVk8FAme-`;xY(AF(RJVMItY5vlgtF5e_)ZJut*zo`Bw6!KSB6|WIe^~SK@@2Cw zTgt`qa`Wf?9>vSgE#KbXaalk7S6qZ-g^${XeRf|rN@reNll>yNIPZ!J&r<2sg@3-C z`}f#7v-<VwN_pcc5*MQ8O07Eocl*lKvpnQW-s-2!y?Xb<efy<*{?y0ipZu<HJ2@?L z0#88DmXIgjwmai5YphV*Y;{%aF2~ECne(OMJ-Lrh4L1CceC-mC#+TCMpw{aR0<~Lz z*7>$1xE{O|W%1eAQhvU^_002Jmzi(+)rcm2Ke={S6YIq23?0dW`_8Y!pRAo!;B&^o z_F0YPoVz7LS0*g%J$1_I;fWbut8!&(U8C*<xK8gWy)LV@CEQR$;dE!(k06GF->uj0 zaQ}U3-Glb2tbv!AKk6z^{qx+$f5((6rHYeZ4kb-{cl%26E)N!o7k!@nH_mk~PGXyI zHzc%bMh#omi7#D=XB*PKw{?Gw{d?M3)FiI(&xh;<=QmyW)UB{F_jQ^3_1&V<N4Ct; z-!*ri(i+2v)SCxBRXsa9{~6Dzbh~37H(6bHK5jW4UFTt6|8`;Vyyou{ye*6!H|C`G z-7->s{c^)J!IKR!-*;aUf0Xj)4Ck90J@dpiP4IJ&lDz5C?{#^qL9GH)y<t0Z{d%tN zm(Ht7q<N|aD`{R3KEYO+A~0PiYMpkHfTT(D;<Pgz9uEyO6zmJK__uD`@4hzox9LNt zH9BYKEv{ek|M&6ZNB{obDj~D)L6?%{gp;@B_XKV@>-l@`VcA`;Uryj@kglpy*dMC9 z?tibo?ay8Bj1<Ftnm2zmUKIAp;^VvIZJaaX4p-+qSo|~7^wEd=LhG*VvpyR4uxx5m z^-NwbGd`9RQmqxWFE49nZrpI<OVoq}%fElN&d+dNmzMe3a#>_ycT2#s$MKn`-?qm3 z&%b<ViX8uxzj8edK|E8kUKr+|3Uxb{WSSf};ht>Yl(ZL(KO&zmd+{h_Mwv+V^)y9= zl#>VZHaXcTdLKI{dzM#mw_b?n?4agt(HR9>d)7E`Ye^)U6kq$fPw%=z%$sGW-(A{z z<Ur%(>K4;&fxEoye}7f<ntlK7j9`(E6)9H6jUS#CXKp@tk8AHfUlnGxaR23tZGY-J zDXM-+{g`{#a{J_NhYORG{`txs;Zt<pU_X7rLb-L{r_=@NC#4IR?A}<sYo)wn`hmv3 z$6l}9b0T2c?dfdSM0A$--oE}+)ac0dFRQ*3T6<Yu$l+78&c3_%m+>Pt;{Z1{rB zHt8OItG1i{!lRbj*;Ow@ufMvmM%=pitdaL((JOgfdg9O5KQv=q?$~o?)r8Q#^-F)< zyj-GQAtA|T>3Zb+I<cm-v@d0L2~%bNU-%ttFo&(P-%|YCx3#5g-Oo!EjSBRQ9S{5s zdB1Vb`PS1remt^%5puqL)`!&l^Tbpm!cOEJdi3kkOi!uL%W8wN3l9|^5AD5fG_C5| z!`Jmyo}2m3HtqA>tM=tpQS#%C7RhTm|L#w!ocub8O)9T*UG{B}+>+|X4RR+B>YX+; zx-v0!di)YY<EvtexBs3}bZg<U6IvaTh36l+Uz;hfmUAHLlJrLA)6bKgG7S3EdA$q+ zyuTf5oPNI2#)UmBJgVl>;tir7<Db3V@NR-Z!;D0S$8&n-`R=LP*6?bt{@(lfEfIZ6 zH$QD~<X3h1yg6U1Yer+|c9+FY7go$@YIBN+NDVu&-M}@?=KG%s1%a*FS)muaHddI3 z$8A6N;8N_@jnXTt7bq{cIKbp&8>z-|W50G%^vj=r1P&h+zq>H{NEc7WEg|Vb&3LJ+ zF?@-$jDHFlHQoDsw&`kD)sacZY$i`wRr6=g?G+sk7hF#K=F}3}a3V$fx8RHU3XhU^ zw(uORyJ^cTu*I_LPiOnCO+kHAQy*Ww5t(*pRe-4Nn&mm=eCyO+oxQaF^VMhaPip3F znc%o3K!2L9OU2*b+w(PMcsQ(Ndz2N{!o#}hhTv-Vg%9fOy3%GY&D^26Yt7@<7e33w zufCip^-5Ke>#fv=<nsqaoi11fdA^!ZF)`>|!ZW7sn!V4m>Rw*HZ)8$!&%0@wvDz82 zLtg?LwI0R9&ox+{ART0-H_d+y-<&&ZkDf^Q=(}oe*|)u={ACv|UVcA&mdR>%x6H+* zn(<rrPhDx`DsH?W<U&x_#k9nwXVs@SxT;-V7LviQ-sa?VVoi|VBkAoet1^;{Cj2^a z=e20@;z{8z-@UqKrc{}EJ!RVj(M?@jl&(9k&kBoB``N;CzOlpcOwR<pJzIsRBrG^2 z|626(M*H&y$8$o0qBrMjubMq`nS|@su9IO(5y`^(*{3v9BzP<@B=%33`**H@iJ-vR zu-@zQ6}wOBEwjsA?l<}V&9aK_lVVHuo9m?b6(k;J+VyzRem#wpTUkei^Cu*RJbn9S zwvA#MgK5S>5#6%fQ*IhQ3qQR&#IMbrc}?Qgai!!hzt3N4tW$R@3IDd`V(DCUjid`* zDXVqNZ|J-$ck?ohJN0`;Nz9wC%)k1by|2h}@AvUz3KudyBi3~zV&SSf4#{nEXV2WD z^Jqc#ru@$>vuCn3mAzW};?V}D*>_(Eb@a@hRlKKvV(KA=x1K9rl^5}=t9;+J&g@t0 zU6(HL4H~<x)?Pi$DjBiHgKfvut7k&95=BFvpP&8jWZ+V%1rxkGC-F>)_OS_W>3%N% zc7wTLlbpBD1XCj+=>uC^T+^~z_AFZW``;zgwKvVHz0Mq%x#-r^JdvwO;^{|QBBLtZ zv@98tdzG$+hJ@O0d%$I_Zf^h5ck5dJBN>75;<>WccJGUKN1pjq^yWq3ap?<}b)7WK zT1A&$mr6-F<+AVk_3p`vY}bu%O#J*eMSSnSo37;<!3J*_u8A)@c4)52h4__U)03ET zpD)-c<==W`-Hm{t@-;J_AK_WB;@g+ct6yoXxlz32v!ckFMTtgN{WvFIG?+EH+G1<# zp$#WWeD+2<|GlDr@BO-0g_iU0-%ZtNh+35}t1b9|P&0SCVrOQam{QZtq!TV_)52bK z27XU)KX`q=*B-M?y*nE+mahJL`F(oeW7A#x^EC`tbgr7Y&&zh%RkO^cVs2uwhnL=| zdgA(WO{&&PovWKqHK-ruN#KjRy)0v{wCmPnbxC2PBgcN-4$b9n6n+w=G3Vr-#)*>y z{VzOlD!f`>$M);@Nlpcs7tv?p9<n7EE<7YBCe`J;TXohU(}{m>^rpLVevR{ByHk49 zcCnY~rK|rm)}E-TQ7aSK%XH-Egrz115rM_Z-?!#p57R!CquT7srg(b$jU$_r*aAXs z|8v@MuJfqIOc9CVbvvgx+m@7-^b60Jxsc8AHTU$33r}6-<T;llc1-g$&&G}a|Gsjb z720O!w)fY@FCCd3Qb$g3+$_{Pa(Kd0pW{crc$pfl{=4~L@!D(MlDb<xKGz+W%gxz# zaTB*}RMO#-Pj~8UGMOi4e4(JY#PxXh#hHi1qMY~`w{Kh%ba8L(3jc^C=5u)sm&CZF z?;fsf)2_B&5zldJ<q7wXof6Thtc6h@COY2v`%wN|*DN`KEpH61Zc50WWqz#_ZS%F| zjK{?_f&p2DD>v>;j*7{dE?^irJt!i1?IEe?yp*#tANI^(Tsmi3aF5hntyM=e=AF7F z(0clOPF+{8j&NC3tE?E8dX>M2|C=4VcF&EHT6Q6`oQ;j0jpNpgSB6hSqQVNVU!Jw$ zsgSAd!N!8EU*)7lpEq^n+HX-^ZaQ_|^Z9qTTfW*mLu1xi)|ivp>332z^w`XWUO#>i zbZWuQDXTse#Ov%-+f~y0Fi5wx#_9R8jASjB*+=_(MHm!PqK+9U=D%B<)3VHeS$f~s z;BuR#R|9joPZY(g{{+w6-L)v{p2#UuE|K-5ts=GmnPHOeUDZdWGnY!09X$$K7NT5e zI6=&C=8hR{i`KoC_F8A6oRmJ_i*G~O+h4mPLQ`f2mF1=H7R_>Q?)|#(Uz+iG$;CXu zu@w$Ayq9K7F#qNn6|2Exz)|!lwRp??Y9USE3uSNfQw@z7rm>1IUduU6eA8^VUxtSB z*qg<B)wl(M4@cxSEQ*Y14SSrF=B;bsc+D%u$M;g!V!fqu+qxuObOMDVm#*5<WOL%o zr?Oo;9#sUo`bKNqDZMgj!pq)gdD4ED_P??5*<brIH0e`v$e9TX*NDtKl-FIjEJwh& zd4=RbA2yM9nrkdM7K$3oOP|<ysur~JKrb~YG`#Npw)tz6yKhJtcZa(N?0g@!c}FDQ zaj6x$hSS!qty{0rG;Mv`8I7G~JU(kUf<N!r_$4}N&7{crtuw9|=i4Q%Ua<A6l=$p3 zJQ<3Cx8quZy6>uQo1}B-MP#m--ZcK(O2_;Ee=^r7DAjqKAzrw(XIF4?%hYFimkpc# zeAJ8C`y~6yg`}$mg_BS0d6i$gN`9S)VPDa$x}M{y&zWTzlC!=DGZe7?-|t@+dfIGS z>!~e^f;v3i|7(6s%~dM=_0`_`Klk$z1_d*=?E(4s><_%H@E5qX?cU>Cr_6UZu$KM& z@_MVCmoj7B7Vz-D)y3)=Dw&=9>SF)zzO}!3;nSC}+rRea6dKD{X4NKJ$XL4AJ(~6E zugONAym>Pt-`qINsW^MW;+wKZ_uM^h_lm#v)!gzIE4P;mF7{u?!eG?2bDIL=k%a-v zRhf@)G>a7PwYzp?>sOiUN%7uddZ(qsot++JChA7%Zl2KDy)!Z^QLOsTnSx4V%RMKq z<?$VtjuA9AZ{ZQPHnP3GTYtCD5u>CpZ{p<Uu60*gbU&jn?o`c^+f&YPM3r$1ZR&CN zlebadJd^L5^1arLwj0<256;)kdbucawNu)*D@nIEidkLxsCROL-qs)Ia{1j(I_3y& zHdy-X_li@_%o~lDZ_GCS^@IETby1@dwI@<%|4#L<Y4ZEVdttVF#j6~%ompo#yj>Bn zOt6XV;$eovPPV-_bv<6{JYKT#GS{@sj98{e+PYZ^;g@$wo|zIAk?VL#K<S#ax69kE z?x%;v41+_r`UU<`O=DhJBxuha?BY2|c)|HgC(pk4*`jl{%Rkoh`~EBL?N)Ek9{V}7 z=4<L*t5^wv9dGKqIe79;hgwaHZJKzuDTS?L`nD8v!wm10NB3xkOI7WuT`Fdur#OAX z@v|Y$)~$)p-fS^vf8igRVVY6a{HfcC_i?L(tfbDS8mDPG8xC-uY>+pJ*JgRUy=2w? zeu>1XSD(o3ZN3?IQ&`h1FM4^T+s$q#f!j{Wm1)b2ce7@uuzYn}xp&gc9XFd=CfeNY z-x|@?tr}XoRd%UZ+D6wiL0L7;8w%&hUr#oUJ*jp3sE>BX+ez`K7>@a@xxDQ5tFytz zS}B=oS3@q}zh6=7$$jgFVRGg_*YFF|a`!JS{JK-uSm*NzwnIxoAM%&XyL^H7G<Vas zmvjFwkQAPE?${NstqL<Elag3BFBLnQ;kZdS`pBDmyQgon`*o&R`bhkV&r2m|mZ%F_ zZ`|&}{BG&grW+eCt7pbnDctC{yR_uw)L8;sev8LD+Y2<c9dXbseC~Vt#rl7L@>jTV z+`9kg19ynA=JzR)5e@~<joe=;aPNHXY-QaP<$vLV*A%uei8UMN9elL&+d7|W+1`aK z#r%?^FXmLLY_pN;Uy!hEV$C6kRU2;Risg7rXOuksi#sh#IPdF(NR2rs-~6iDwZGEk zf>$GJ@p=KJZ}u6D8%|tuxDr?Me&wF?&Xq1{{mE&XtSr3Dyv4b{j;%6#GjB?wMdIE& zr``r}2W2ilv1onCsw;<dwuzq2tNHbEVf6n$pQW7_ZgTs0eCHG9Ng|8-LnFF#Qzv!t zdUQ&f+5678y`uNcHRfQOD*veYIo3OuseN$W8m#WO`1k&A%DcX=d*3mCdHP-Rxqkd} zPDKCdinvi(YJC2mWb5X9`I}YSJW3OGOkc)5ebcT-cXEFGnB^H2wEsd(ZHm#uX-q8N z4JF0aXS42@)Sdp{(pUUi#Et_E`%1Vk-98>and`&hr6Ha_|CQ%gC;U9^zxSS(+`(&Q zYCC2>x_!xg-mlW)h=r<NH}1K8u351vP0(ysW#47VvrY%3q^)y{4%*I<;L5yivFNt` zEbqS`BOY{R35x&TQ=s{NPvy*KL21Pgn)hz`c{hEf``P__wRW!;oce2PXz3N@GZSi* zS6o)eYx8-|y?frt=v|4|Gvt)JOE3Red*zVMzg5dm99BMWvt7q$)k{^4>sR+=#|tS; zUGi`nb6b@@cdje@jl(aG9GdbZK;QP?wXmvxA2hj`!u5B}d-wYge}>oLEyeF%OTSn; zf9-$us%Ne0FP2&7X;>WRG2F1;?7sagvmO02rT6tRY&>=KGUw~_S;jkVLKc{DyR4ZK zwdBf?Q}6F?OH;2DiRVc-Y5FjIDc`2Gl4k>E97<LXT=d-KT)V>&fd}VBrI|N1)+sOH zuAClg5F3%fS@m?rPR{LdPWpP&P8#d4TRi{obNlS3YX&P1UT|>RtKzV5<%XHYCoU~9 zo?F$F7J6cj&D*UrSlrGiO^jIW;V>cc&AE(ey(_P8Tk33ZDbjbx<cY7OR?Re1T;IXy zv*T!3$?fk2%YsDSTP-^J^^(r+0yf!qvP-VTW#6v6!>0H2)6#nFm{WI__SQ1nrnmCU zv9D&6RJG=u&|PAv!<BvU`pnoEZpYt`mWOA(zVqfp-l3^2-kjGr2{>wOHSkWj<MZK$ z@qWk6)r)67pA&w~H9S;aVK--Mu*gc8C7)(#b%ltEMPBLuy0!m}^oH3rhZTMcd;Yq2 zZSNJc7k?-9Iu&lrQAo3o{(pX!E1URcf!46iOB)SdZWUYj%6{{XYwLE*xS6?rnzyb< zX>5(g&RsW_iluS(q%IQ-Dhu+;HTgVc-ITYR9~6qNUOiVzP;925_r-S#^=hqcj$zYV zHFv#W>dLD=|GDYgckTb7#k!jtzp_sMw0_#Zvny@~c5Qrl_5YHUzLUB3Zds_gp|vaV z^3ko_>9KRa7rJTQ+j5;f`b0a6_nDxThtqm}*^OqEp6F@kk%`QymwHo_$G`ky;soK< zr%WB2TiLwNu0C+-*Yn@*-8Vl+|C{{prMSJ#Yriz^TdVTzW^CW4Q*FY(M)S<s^XpWN zt@`D+W`w!&B;3+|l$57)?P`oyP+0x<YwXu1^m9&`p{lvXSjVvI#5+0P4EB9Rx?*Kf zM;gp{Hr=jRAldY7?$6DcU*-S1#HAj;w>{(dK6BI8Imhprn~Do<U+Q>FNc8_qy%&3y zwQgDd_iS<2{x5EyQ=)?B|GL4ucoKugW&^43o0L-W^scd%`B&?zH3}K~r<i2AocMJs zIK(ziP;AzsqlYKVJYo`I9(LnopWLn`bvm_=C(Zn_zIuszht)ZL`M>j(sw*vXZ*BTF z=eJwazyB`vzgy*dcKw}p`k&Km!D(*!)<2%rO1pOkoKFz<m9ef0-ZA-v&NbJSty9I8 z{3uxTLf4~ANW<{6mz%J{g!`)d6w)-d7I3dNzLGbm+K$)s%Ej|>m9zJp=={cC+NyKb zSl`Yuy#CRzz>TIy4vLx8xt$J@l0EzR;7ewwGt1`v{p|5EXRosD^i09WLEPCaUT3E1 z$KFyknzc4%m+*mqa%WBQxFqj*-E2L?@cDAUiQnPk=P&(x6Y8kl5|_hUt$q2)DYvvs zlau{sUVYdxlcn%hwjpO26GMga;+I-wIwEqB(>`5PII(}%v&SWiR`<`Vza16nX!yc+ z?zN<ps;x;Ij`Xm+=zkTFUDo@qu=dvKMeANqjal<ry-7W7lH}P$t=o}~oafh_Jl!hG z-RgMvjpXw!VR!3)FVFnHk<aSJv-zG|S7`1oxoBf`wb&>84Bwnvxf%}hBe&*XFZ=Mw zxB6@P%GO9G^|VcrXRlYy3X2Qh{a^8;&wY+rxlY$i=4u_EAKk(w{<Hmhynp@gH)`=b zWi1o#);^#9;@8jeCp<S6^DqZ%aW%eC4cjFvxY2m^?SqXo#Z>fluYDD66gIxuleRqS z?usQDE2S2lP5JI)*1D@@-?fRo8Amq=7<I1<{L-1UDc9`f&&=dgr)mvXiY>1H_y7M# z<y|@7p5B^&d8ycRpZ`ZRz6&U^cdxxLL+-=p@Or1P!s3nV<fA9NQ3-hKlkoP}*HWd$ znfLU)R`S=s)wkQes5p3w;nS7{H#_D!P0L=D`+eh+6>i^yYyXzqFFs$L7qm96J2)+d z=dJ6BgtVpycE41)bHg_==@|G_&o%v*<lMhK`BwG?FWoaj7KY45wzHJl_I;eU|Hm4$ zZ@;g2U;KIK(CwV<rm5^@oRTr#w%t5mwl9`@cjtQj{>_(*7jOSxcXa<H)9!WG>&}HP z?caFq=11cc<NFp0+b@{QJ4Ua0t?ne^GU1}h?<p7Dn^n~BO59z!YRep(Hd&{(HK}%r zhj~nG6`3XW{+;TtqqN?j_}b4cyB}{g-h8-jRqe~EAr3n>IX<<|I{t=b-4k8$8b|IA z;zFBBV&0Uq*Q=_gC|{1te7Zfqwm^*gCI{ozGj)62{#<>hJlW;f<FBWu>)T3aTm1dA zN>n7wW@G88zJ&UHXJ0VrhGkUfAK6^}{o?+=h0>zjIV$^KY~o(|(&=&NPxJVy>0<V$ zS-NYsN1q93O7f|G+kMp55>)!HH)(!iJd641)7~i)9cC1~er1|Fdr|2^fwha2l0#2? z(iLHIYvmCs{!(`M30qXjQzqwTG2@$i-bc<dek!!~{-t%b)6$|R{Miw4-Jd1sjLVZ< zt%si7o~1NV<&=@z&K1J>oo=_|JFaPR&D{3o4U?`{Sc^~ejG}`-cU4<7o~d{TYI%Ee z{dt%0aLoeQ6A{TX6>j|B<-rreWw<$cRqO5UQsF~O|Ll&IzvJNJ$MiCdX(Ee3{;att zGhW@j`Y)+uu0_PV{M_SljhEY(9My?GCdB)JS$2xCTN=xhoHurv_uE$IC?pj>JGX4v zPTyPSk1mtwF8!U{IZ0=$fwzI~X2GbFIc}4u%<1Q!ewoYEO}>2h3bEvMsV!$t$oW}+ z<N34Tr<CsnzS3K_RT;{QUTx7d+5ED`zhlPl?$W8e8y_Ay6{H8MxsLjz{D}*k60msY z^Nt%gw(fklI$q}Ot2-j4%T}22uga>6NLqN-KTMn}y~%ctea60P(-uV?Ihb~C-a=jZ z#u=52GlRH$o;7A`avndb!ntPl&li{X_i1${SryEmd-2S%w~L}8(m4J}GhT~$d**Y| zv{;5SA+Phd*SmZ_`A+ZG!`JICw%`3L(l5SEB{8>mrKGY;Hq+IsS2ORQW&1ieEegCn z<jm!`TBiiv%~OQ3rk>2;3!QebH|Jz&{a@XS*Mjw3r|$|4k=Bw|c3Bk^5xA52n!v_a zn!F*#sZQs>lM?F3im&s|UGl!ZNbm2uJSAS0Nh1A6GZ*B4IdIye^2uU-{vCZg3#xCe zo-Y3SSLcIcXH<-5DY~B2PGfN0ntSLePj5s<pYY20>!N2Rh8%eiwrJJ;PQ$x14=cPD zHr%yodGofOY>AC~Y|=7CoziZ-em6N<cWTs>D(*>hS+1RBDN8rmoOxd)c3I1bFJh&U z1{H=bdqq~RTF~_|d1Z}HYMdamUtXQpmpMz09N6jIa(}gy_w6j3>zvcX<JP>cZ<=$K zWo?StHqn18)~*!b-R^RolY8yOwTo{3iu@W9W_j;I^4u-QzKC(97adH{KPu8%7TT}8 zKDq2x_DXO;CuTgeXIV${Os%~Rfola!ilQzkO?@Q4dea8Q-dh_N${EF+%@<po8~T~8 zs%1fI#{S0Cy+;qcNxHkG<Kvd__d*%wpD+IZah9vlZsxnSI#VuQIs9_btqy@r8-t6^ zvwCz(F#Yk%t)KLg|E^V;jqIv5YU=~`9NqOM$jW!aT_4q}TE-Gf0^EZ6mv?79)Kg2+ znmV<A-@gR*<<i=3Qq;?I-n?FPZd1`KE$zB*Lfxf-SqCr2HG3{Nsx#H=9Z&n&?wJ#N z(#)a)-#&Yhq?p06!ekQj7a8x)1^XA}db=OgW;yp#b`C>lyUTgbl^30#KC<j?-~Dp` zDz(7!JFVucn`d8+bDSXd`d6pJ?wJlLCKuC_^|q!dEuPscuXc5o;?4VxALD-B^PbZ0 zv!{gbYy0UJ&)t7zSUkP=%69YRxXO*|_H*u;Vf*j&{Wk%jm)FIw_Bgh6lFHSE507c7 zUh}YHUmKDY^Xtg911}bqM2GfoII~OmU1a(U<1jh1ZNj2V*A(wJsc5|JT9UQooBy1| zbftxPd%nLrzg0ll^}*3M7njeERX3XT&VP4;grw7{T`4x(eu4UJLdjhTeP_?P@J8;8 zGV0mA<Vxzpf|Sp<w!Z!wTKa~uNk1*hZE|9bYx0_1ceb9Jv_PQ3(AjOW#IbaZC3-)% z|Nni*Cy7V6!q8f{`hke$W9vzUrJ9Cqocm^LZkRMPWk%A%mY(mN#;QtbD??u8CQ0m{ z=v6A5JY$l8@wp76Iv3TYQzZ^hX`4~#Hu<BXX6V!I4V+#_&OYf;du*@OF7#)ospA7{ zhD#n_GmLybzW8-(?)<gt#|)M}OcP2sk*rs=Tc0y^rpk-t&F7nXmMv=WIWIN)iov{7 zhZ2jL?(M64^;X{C@1D<U{wn64Dw9iA?LGYE^BkM9of+15JwLYWY+VpKRW!tY-G>`F zk$rPb?jKmE7JBZ$>?J8jd`@R*JySpEH`}ID&9~s#t^Xffq~F%PXPBAl_qb%$sue2R zC1j+g32mNvdD*23c2}qV|5bnaQ^fxKK9@Vo)vtkj+LRfEYL`t^AE%v4GhuIUJE5s0 zXt{dn_WTJmiaj~H&#Vb$TctI3x51Ig&&)3|pG%pwJmrXw+2WhZ>(=-gZi~t@tFuY0 zVXN1?sQhqK^G4HiZ#7;_{qv_l?Xr!ka@r=_S$k`X)H?(PR!>}b-LdhjF(>D0o++(! zySJ5;d5eB5pBcO2@RUijJ&PpI9!$)h9LBAvobj<`&TFBPl(jEzNj*1PfBf;Y|7$HK zYr1=O&h+V5TlcN`@VTRBQ~Xra*SgwYzMda<CS`5%;u9&WEg@=h`j<^+{O;AcX36Di zi{dA4Y|@eyF>YZ_5fYkna?0W@N6s`$`bwU5Fv}J%Nm;YtRu+4#&$*OcUY$E<-aDOf zYL{iRvtg2*Q`m#kr{-|~D^|N4>*aN3&y0&xbkDzd`(F8(a=;C3=UiW2OV)IwyGys+ z@%a?zW*npzZlPWMiB0ro{o+$x&y&*ToGh6>N!WOOs>#D=Cw9!zNn1S8RxWhv(<dTO z8T~Yq)hcV4_0CK5_RM(bBvh!8c5J54cg?wOpN$oQMW#tS-j;mc?vv2ozkk0xdVgO* z|8x8H?-Qms9(}tt`NT}0O0RQ9tJgg75qunLF<I09q|dCgEz8dt$+a#&9kt*~Qd)zt zTMzp~pJk?A!Dm9wNf_R1HlBG+!_zQ0c#dJx9`<yjwSkk8j!7yX>;CZkl9Z}u+MJ6i zdpN+tH+>FB`W{OzP`j+ObS4AC9LppdmUN@F!Ml=<N%|ghE>OE{rK$~94;J2(w5(-{ zSdv8lftfz9r^GC-oaLc%O{(AhgwEH;S(&${cs^nI&A)Bdye$UX(s<6!DU-A0l-l&Y z^LyH~WiyRs;w6e+m9$^k_O(*{oTB=KTKhRCxA>jxy7_6T_ih)r&7ps8WIW1zbj0t{ zmXpFKIdA#RUpD#e+-LKaX!Y%#Zz8c?Svl?T>#WQ@0`=+#4UM^%{kHm<ufga)eQV<- zUxtPWNx!mQJh>8i?@Ef?%*=JEf;(UCb9?Y|)6vCSj_ORc@=+@+dbQ@wGBx$@RaLU< zb5kCHq?R1j@w_+7N?SU<>v(WT*NME8RjW+$8KoPSpB9@wNzC|Rjz{Or;A)e~;K`O% zzn;3aTdSt+QQy2{%9a_5i#>%bwz>z`wWnnsJ1aD)d&1mXCyrDbb$feuOB&636s<k; z$jMZtJu6RIY!Vk;Zf5jx-kC>1w>TLdZ0t$P?fv<nWMy8~r(14n=TgMP#f<w?O%5l1 zR*zEBe4h7nt|F(QboAkwXBGr~N_w^xtX_pdXG+DQFD$;tocdZS{nG+8D-AzKxo!6O zlp-zD6}Zyyh2rTR<C#a7KRJ3PTk>qw$;r7Zj#x3K7`JaVHGRS|=cJCE>h0Mx-L|<4 zJAUtbC$~xZW>ItBx;()<Wy^fs&7yBzejf98_L>SF9^S5c^WXi#QfE{j_$=$4vS&u7 z!s3}h(r0a!Zr?xu--mB<pSarXZPwLRcK&7eeI6!r-1~i}@yu_BZu%%pyqF@fx<Ku6 zT*Mg<yTvCB!XEf6+q+@L#2UBBiE9qb^r=oXRQ}ncb~vIDq#?=elkF^?WX5wTw|KfE zr8?z&+a|Ue&-`{cX<D1{te)-ywaax8XU>6AsISH3OnaTQ^anj^kJaX!+#)Zw*|@-M za-s0Klw17WHzh3=pWMNbZY0}qR7dz+hLPTZnLg<c+&=qk=~?EKHnaSp%*#}jod=$M zk*)qVF*40>w$o%OwFz@i?3=#RcXQ5s`L;|+quW<!r=7cCw&wQPbGE;I`BR_xEHmCP zBekI?E#k?{Gfgu;JwAT3e$k15X9ub$$}+MjZvMUZM4!hjlf*q=*6fJ+P!gGcFfWZQ zZno9w*|W|a^_HGlv1`rt1jEw`9Kq?$`&OPrh#bhSHc2%z<z=g>*)|=NFnsb4CQWNy zwJc6?vW2RG(d=0Q!Caq~sp;pYJhGj6uj%L;nKSI^b8js^2{YM$8OUU%r7cmOOzPh< zPNm(i`aL&VCCF#bmWiFlGw(GY)tQ~Lrd6dtX|ZPX?zUYU6qIJ$mLz41rW@^L?~WAv zesAxVsbJaJt;JfqqjFMoH*dW9ZTHMMC%?$)r2X15$#c%Bj4-c=bjPh{_JmA3IMe6- z!K7u)(~V{sg|U`Zu?b3MuUK{Hp4ny-h>l$q>WfdtGRP|mFW<B~-HaDx&-b)f4L!?z z`ky^qd^~f_*_oRaJrfU=eKwkXNBd^oiQu=(b49}>PxHM0dw6ngiu$IlHFHjuh>027 zPPoY9enO|+-o`P`F>O=J-HL}5B_-c8;^P{OXP!HhH0|K6t*>7TnLho#a@DRLiDPLN zlV9pQYcFS=03Jq+oVm#>bmdHmW0Je}l|4^?-C5W(Y1<h&@ccu}zX=^_I)P`~Pe>dy zm~*mZ-lVf>cHhnve{VfJQC7exNuvFs&$7=`=A@bliFdCNFWi`xBr*K~NNCE8gKK-* zm1iGSUp-Ocn5)I)mo}=8)B27aZ<!#-E&13EY?y$tn9;HmTZ;UbeP)R}6LDh3qRBpM z)s7W1>8GWpPTYFL>6i#_>f!6}_SMQ7_6cVgR{xoPzEDvo*yKq1`%aJg981G>0yp>? zjNd&~Op++i6kUGxT#C`x4|~h&*R@Jq=g7%CHuF^7rbaz3P3cL6RjnG=l&m|aB}$}o zE=g^RJ6#ZQ)92cYpwO=mKQ$haI_F~8^PO`^YT2^PJ6wl+JM>evdlLURKM-Q*m>S9X ztDhzJad+eiiDU6B=Zv`BPlX41UDF9RtNFX`_B6r62K$sNmP%^AWcw86x7fI+o^#3! z#Si|IST`xTZJWXTm*;UjlWLlx>rDS3jn@`##|-|d1tcw-qIrE1%gK~ioJkVLuCsWb z3E4XF%;i&4Z}B{?XHrdD<t3E2?2;4D;UDu3blkl4_4R8HCex#vZ%V3hu(+LRYxD3r zQ!&TzFiZ2KyXTG=_-xRqG~`~nYKrS|gP!diJu^bXCWRba9pt8y#v{zYq?~qode+t7 z&scR;qcct$^i1cNH9IrzjMGBvjzo$3!W*nMU(rsH+WOJQU;VIwom#}SnNpLqHginZ zT-}i<5ih)^Y}teq)BRp&bLJZM?B~40*KmB^Pv7M~)Fv;?>HTtC{DXu-+edZAHO9fI z>Io*tRx8iGzApCsQYoIt&P?iQCslG4DxW!D*x=qE(e_caQP?<lPQR0`%K1M97Mp&8 zTCyNtwmEDwRuz7gwaIPqqLyp+-&Q}rR+Q9`_{ULUIz#jEx}USprX)U%5nHQbv^2}9 z_VzkWY56kVi-8}vetqzw=I~VC(h^tY_P28$oxL{k@!ZNg%ddxK9j~4BBTh%FUC7$< zXG-sZF3Cr6hhlA9<Q`@`7m&@7UbJnW#MZCJGA$;a`u(HR^r=Z<PRp|E;T@CLHf615 z+PVH_U_lT6JSmamHhO*k4ZiZIev<p%wP`}xnZh?)AM5Qan4R4+rSxP)j_Lcw6O=b3 zvB~}IzrQBH>5G79=az=O)qD0Ys1RjRzjicu^~%hosk_x@@E<I^U$w$r*kJXNe#?D# zl$KoDwEoW5$a~(2lN`DwH{85y(lS>)*lg?6)RK>t$uAyhUd>sX+R%NpPkHZ_$IW)9 z#rbRt?yR2^ySj6>w94dHN%wpc`wn#9lq@ec_I!8Q#5p>@C+=tPbY-P!y|>k;Pq(~b z=COXy^`$!}`ZYhUdwlfkp`bF0eQHLZ;(z~17Z*;RaiCk$LOH{_W6tbYw$%*kQ*J+a z@++TPecF<#Y}{{_mRp+`7SCoiK9(getR7pp?cA9_p@ZTqA&-|l(7NtrcG-Bwg7{qf zP!Yw;b^ABC&8vC6L~OdYY67eM&u1qWaY!CG%DrFy|35#){a1FGXwLNbWd43nZn}}= z_RtG%Eo;t-Za0$8<W7CPFi(qB;f}?-yd6`2dc=E7m|Mou>b`6C!X=lIHe4`q3_ek` zHX`aoSFKa(rmuhJ9pIMIQR3Jx>{uuH!ERp7>lWi_8&?(FoyqB?cbwl*xbZ6MDy{pf z4_p<!g;N}x6GTqW)n{S3mdC9-@d@kIG>w~0OV{83x^u;bOKF_Z_d=3)O>foVW#JX` znc&dF)ATS^z<R58+p><FXXgJuncaJt)ii0{zAJ0CSm#G~t(lm#!BTdqc%0ZK69JRs zNtSxdjX%CxFF*PEz|$kG=h(z|Xix0WS3f4A8aOLaWJ*Dc)5H}5+p;~E>#dD=D!yq! z&SU-cGv55}V~j|tJ9TYQ&f{C$OOn6Gp4g+D=-Q(hai-{l{&^eo{W?p{v=yI5xduw_ zW*7QAapxzm2RAiVwC*apX7Nc|z;ONU=~WB9oli;3o!;@-F2-&`#9`j&MH^;FK6$j> zep6UYw3}H$<YSjvwoB)w`L7kee>~7P)$%Lv(G~R?e(&eMSX9n8caixwS>@R;cJ0}i z_ENOhbnO#ox%#(P`W9B4nkK|5^L@46EVs$8R~;>suRQssu>N^~^xG_3*Y{htO_b%x z-tjei{>+peP4j1;UVAtxtzqYPn@bWwCqJ?9&GD(<`9tVqZP3Bv^WMC=?zcwW{Joex z{{+`-dw;*!yRZ9TOwIYlt37;OPcmJdDi~FCm37OPQ`}qTb2mQz*L}A7#dhoHlSZ0R z|K2_RzE1g=Xv7(wgsWQ3svp)aoo}L&bn`}O(Nd9FTi-ALzHL&!z;Rje32u{E#QXDg z_d3b^H%t+e`My7T_sv_aE}`Z7e%~+`6L`#(nDmKhwU5R>t4T{dcNqVF-F-dlerf~v zFU^Ni4>xT--Ne0Q#maZva?fv{;J@R?>i?U1L{cR^nX=#1*ZtEf{KFNUT=ihbV^hDf z@7e42i*y;K9%`B$pLu`Z%Bd2^A0CWg4G3EGMUNpO#Xf3Z#3`c_&$!P{&(K?C;`PGr zlc1NzpVUb#$6vlSzkT`IkGHDRFMs8h@|+g1!{^uggEN|su3=DARr#9e!yUPGN$LW2 zmfX&czaBy6-?jhW@v&pLw!tgQ*puP9(D9Rg?{-!;Zb{XRxU?fl_j|-HhVDqYb8|w1 zrvK3AczuAc`^>rPp@&lU-LMe#S~km*DaJxTd9(DMcV2>@rz}~wX?_3l_#GfEDgIg! z?AOodtEfv@ChDt8iiGZ+_Qye^hTXG4V!E)nzy*_~alh_g(H9roe>iDce}KoUuByXL zkxx`kbb0Mu-(_^4U$0+j=D|IQ`!*l1eHnU5@89vxLK(5mHX2K2{1b3WnX~DX(Zt@l zuD{r&PCh=d<6HRIxzA>VPGf7`wqe&<r6V)%`iLhOo^G~SDRolCXlsg5jM?cwo~%l8 z_8aZK^&VexZ+_UmM@%p7Ojyu2nc>{wq-pcrj84AMd{>h;`-z`ckm%9N>Y)}>r&QHX zmf3dd(uue=s~&m&H#_l*Ma+1%qi37+fw@yVXKOxr8+gXc>)l`9m8%uaXT<2M&+5Ff z;m*}|L!R!L{VO+aY&)yn(X)EFuJO%X2RF=0GQXS{ai+%Set<!newxyqgq8Oe249=~ zk+*Qu<}KS2esYQ#&weT2HBmYt$9I3rjFnH`s!C>gy!-o=Z|7#k)$v8AHUtHxR=(nz zEHAeC&z4D^OJ+~<E&5QQ?s>`U-m<AG75{fwd<2n_&H}d16848%7-^owUjTl{GW2 zf3Nk(D+mZOxf*im^0dgO7baZ!eK^6@e8L~w*tOZyK7Wa5Pc%H;?Da}JMJP9GCAa#u zV{6|}<Z(7Noi|T+fAL+fIbYVM2*tSklI>Gm#-29IRrS*sLw+uuw4WYJm)N!V=iPJm z`}FBt*v^HGt9D)H7i(H|D%R!Nens^UZa-W9?0<dxhy`DFq+HO$0B+BQ)!QdulXT1U zUZ_#GQDDiv=WK~<ty1S6)S5i++v-)i5S8b8X6C7K)@}O7-!~^>!><%~%jJ_g)laa8 z9BI2gk;UR3|GN6_ISk5MQYB@AuR8TS-Y`SdNl}y0<NSo}!57Rp%wLJ?7Om^+xV`1w z@9q0D73CXt%=Fl|Wdcin$BmhH^ZqTKUFH?<aHR15iG%g!35MDZKQCO6n#3aMzMF;D z>DvqLPjQQ!j+t$%Zk;mgmd7NA4{wD`IBvGB6-z2ywX07e{6VW4tHs98M;Cg|{}E&C zdG5xmH`0s3%j6fX)|;hwwT?wG=JzMPs!d04otznzk@;JG{^#CSgTI$ve^)*Hu-awL z`73I7O**0%J<EUB!?yA<-|1iVwqIv`%U9=K^Kfr}?c=zln8u@L7=-OAZzmo-w91l0 zXx+QzM>vhDv-U2W%zeJ{A3ys`b?JMHa@qYRxL$i(`z0>^$mvTDl#D)3p1)Se-fXgp z`|WDe?ZU^4ifVfwKK^%F_xB6O!aE;pv{!Jg6%iNEJ6*teZ+7Mc?|uI+pWWnbw&|i- z_W8NXdbv-{+0^*<*8BM{u5lT^T{HXB<8wX+^*5bMH-74JPPu$TN#^s!+)s=9t=AYt z6bjhwHk*|lc60G}E9+m=Bw4#>I&N9}OtX}|vPLe#?9q~{h&dtJCzi*QykD$6CFGUj zC&@=ln_^-dt_ePtn!{kgp(AZ76X$EkbnRe5XzG-jGxyy0?Q=8R9O-gx<Ak03-7`7= zlqGe}IQvLp3ag4}>CO{ezaG7B<nGvTs;2ZJH<wPD+QH7HRrQ}(tWJghHuPJ@{!eb@ zgiTZS^a;eoI5ZXA`ODTl)6=9pxF*3iSCd1r`uoOwH%*6*$M+VsIcc9fta9k#Q=OEf z%}0Hh-ZHOVbx&jq16QQfj-O8g#rYWjf0z6Di!G^(E!|kRfoJ)mOKCTkZrvuFpm_R7 zu%ut1qp;owFTNk*@?yr_6;2lfRx3vB{k}2ZV|(0B-oiVxj~2#9pLyJOW2L~=rSI+j z`Ret2Wzb18EBt8N?{ai`wdl?suTy@iQ)A+~)J61E5<?@i!wolUhLj#YFk{uzJ1*~J zBhKU;3DxHPxNE|v54-L6ntQ4CS-d-aq%i*JvBGxKWql$?wh27ej5s56;Ns-hJsrFu zVe1lCKTzJn$Ga$Xl~??;$8obZ%&_bbyY9L2w213Zqezzs7TqqV^&d`#NW}QG{QjA0 zeaBy>Trq{eyFw*h%a*TuCb!ADi0E)rgBw0wmt>TlK4$aZ6c#jfuGZ4HK<86z>*9_0 z*O-1>YdIz8oxuE(kDIOTAGjRF87sH)i8k}qWU~*ghwV4a5bZQpk6L^#cCGW&se5Lf zQPlhQYX2GkR_Ch2Oi@3Z4x*ewhI}F!$!uYPfAanJCsxMnnpDETz`)??>gTe~DWM4f DBk+OC literal 0 HcmV?d00001 diff --git a/static/illustration-ticpe.png b/static/illustration-ticpe.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8412889fcfa2d5608b6ebcb7b0dbe372608386 GIT binary patch literal 10943 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 literal 0 HcmV?d00001 diff --git a/static/picto-csg.png b/static/picto-csg.png new file mode 100644 index 0000000000000000000000000000000000000000..274ea5f289e48b7521760a50d8dd7f156222ed77 GIT binary patch literal 9197 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 J);T3K0RT(&-);Z^ literal 0 HcmV?d00001 diff --git a/static/picto-impot-sur-le-revenu.png b/static/picto-impot-sur-le-revenu.png index 75f07056b0462a7c31601a110df03f207c1451dd..9cecb717dc34b90aef36abeb744648d8377fc542 100644 GIT binary patch literal 9716 zcmeAS@N?(olHy`uVBq!ia0y~yVED|yz$nkb#=yWZh5bVj0|NtRfk$L90|U1(2s1Lw znj^u$z_ueZB%&n3*T*V3KUXg?B|j-uuOhdA0R(L9D+&^mvr|hHl2X$%^K6yg@7}MZ zkeOnu6mIHk;9KCFnvv;IRg@ZB<rk7%m7Q#vqGWHUU{hgLkz0_PT9T+xk(-lOY*k^a z1UA<yuh<GCtgoa1R#K8}tK<l>P$9xMK*2e`C{@8s&p<cXz`#hs+)~fb%*4dZKu5vI zz{o(~z*OJRNY~KJ%D}|R&|Coul<X92ic-?7f?V97b`_<h*(zm}loVL$>z9|8>y;bp z<rk&v8(Lag>Khp88yV>qrKIT=SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WAUs__T zqy#m#BDVl;Y+f-mn3D5z^(zt!^bPe4Kwbj-H6<CYuAsCi2W)vtvVLk#YHn&?NwL16 zo*`UqK}LQ_esM-V4x{1HC>B)Y7Wn$Y?ZE1m++4U7#U-v~CHPerhg24%>IbD3=a&{G zr@EG<=9MUeyj@`BT$Gwvl3x^(pPvJZr~sIg6^sn^j1)9{6O%LZK%US<(vs?uSdwb1 zWMp7utZQJbYiJ%~XkcY%Vr62XZD43+U;t6-o1c=IR*9_CRM*fj#L&>n$i<K-<6w zp)|E5F(t7ik)Yy~WUI9NqTIw1Tcyn0#Pn4Cg1mGk1$aPOIp^o(7y0I=q}nPOBa3@F zI|mfyr)B1(+A0+XxjQL%x;mQ~TAG>Z8tEB=o$Kps<(XGpl9-pA>gi&uRFPYtmzkMj zm1JygkeqCkrkj+UXsl~uVVJ0EVQ6NqYo45BXqJ*>nVgzv4AbwDpIiz`1Tg(6nJHH0 zCaD&N=EfGfCgvu|x+azu2D+9h<|(>HW{Ih3=4r-e1_ov@{r*Ln>6v+nIb@py%9^0m zW95-qT#{c@3C%pgsfAEhPNo7l!B{0GgEE4xQZgt7q^2lAg)^~)0C7Hm7+ao^nuj-C zK$I2dr<If^7Nt6-r{<Lqk@EC$Ilnlu48P+oO;Zd~%##dsO;gR2bxjg2({wEj%*=Ex zEi6ou%u~!0jZzX}o=0{(Jf#|0nV7>;DtV5F25oXiVqSV`imj5q68YXCE;T~jiPbyE z84se2)VRRz9eq%d3Q1@B-~tRO34-O2ieEbg8?aE2iyMdut|>sZhMfYUI!et;u~jNk zvbTFZA$TtXgWMxe7srr_IdAXQ=SW{~RR8c^`rjrGtz|0S8|SJmD%x5sUin(SBlh_Q zk0mkh|8;Pw9Ltq?Qjq)R-$vK`X73`4Ck;nqb)FW~$CPc%Y}~fv_wzYr{2FhzY~8$K zbGPgHusgO_CKgYd8+EgHYVQh_tw~ywGJ>5aIv3shYpA4qTF6wTUFzKB@5~~lDQEY% z&x+q?o`0`edC3$7rT3TbtYZ+gY)(`QVma)ygrjYyhaivfL?wwdC0BzpE?o&TIz<i| z2x~UcM!}D}8X+7HPgMH#o;&)v@=N9cIfoMOMq8$igTLf+1B5&{6c{zvJACe)mG<$} zL+0G+ch`lh`q@N9?)X^qtm;rrR*7Dk*cNf$6Us~-*5TSgGZ}<}Iuhrfm$BNiUH4&G z?X=qgiFL0Z#msN8U|VqhBiBVYV;#lzc{lHyy(x3`GIN>X|F=vp?n|e+!iSQ_SuWC( z1oF+iz2Ca<&8}j2^IX|HUgy_Qjb<NS#itXK9BV#xcboU`j1^TkNj<%%BDTiIY2Ow* z(?z`gk3y^z_7|7rN1vMdDD+L*e5twJqTG*U8f;&ODJn5A&A9OA6Q}vEyQfMwOQsY} zW~n;UWKo?}qW7*WHtS+YV%mh0xl0}7<>z+qjGdlk>N}&p@Z&S-gb6D-Jr*qAs!;c` z%y!jPk;H#LPn;FEyy5D*?EPBqV*Q=5omo5V7|LF4FaEeFzNabJVC7Gb;8V4)4Mjsb z88__VZ%&x7(vs7+V}HSJp|YK~jP$pi5`G=WsPubDOU<H-!S=TIK|(HPeK<P8@2+c+ zUAOg2&eW66QunN^Cpw2;GiG+U*gk#L&%Ya2DxK?<=3T{`%d&gh&x_lY15Ph=627&a zk;gh(Ien*Cn&Oe*t2N@j=VwdEoi|@&x5e;^M4E@@d^<a<@A7wM?apo2zJ6x8+p}*T zc{&dFgu2CMRR>MhPCQq<OuVwc;pQFb<Q+n3y@_i1x89bqY85`eHbubq?=pe4E|+Kh zE`IGbqjIlL+?6-;qr(rKi8VdBdRArTlGnwXJNKwuJMx+XZ!%q{+qfpof}_Os=UwNm z-7I(4IVM-Conha_Y;hs>c2vls-UeS;JSqMBo%Ch9|LzvfRC#{=f2WG~(L+*kZ}N|N z`@0Bohu=4wvwzl+-QoEr3)0HDx3>uFe}Au3^E5Ay@zpiDYaYHiJ@>}vskfGg*=}3S z&F#jhd_7HO&CO#+41#@G8p7Glu8TgIlE)x0!{=4s)okTpqcbPBbiS+<-laIvu;JVa z2Ney0_a996<k+ek+U6@+=1)7#)^IO3Ywy+b_EHDE{as#Lx$6iW`MKKjjz_BOs;kGA z9Z~l=@7Yruc;G{YT=?>?6B4WA-M{61URdugz@Pth;p(e1Kib=>8~!PjQ=VMe<12c7 zYmWJsoR5!xY`-mQc|Cdet__w#2i)i1KjglD|I-te=33|5f1a7qC_KGLlzGpU8zF+p z!Q3x;vR>SmJn(Su!d<8AEoU8GzfNk~sq$Sp<{S*^@vln0%-LOit0351;+a*Y*_kT8 zM_>O>UU@?(%*ZzX(UYYz=VDJMzc^WNRX5cr_mTVl$Q3L9RGlunJh55ui1nQRH&iO_ z#+bja>6+%T%=gdn%b!izD_6d(6h40Mq{2+I)mr~=SXbSBdOc{{Y?g-O<z~ywKVGQ) zZt`T0bf@~^Kfl%+&nWxw@70$*S5Mt4eIt8!<0tRNYq@c1J9M{Rn4v%Ku5B)_<$JeB zI}PT`oK-Z;e$RYW^r`?SSM+{sv(O_m4G)L?ENhbC<huQI`mVcY{g`%qx_Rq;pspEf zZHMcQpDwmGrDx~(tpB^Pe|xq?Re|s$*?mP5mOb~KvwPa{^~bdML+0+8a@gVhtM9&V zr`+Ftwg2$%rt&*ovu0>MdXm8>uFkz$t~~9`fyTW0%l8jS{kyT#fIt59!@Jp$JpIo< ze0e9f#kI-fW##d6`!80kO0~0$vh?_C&Gh55bKsY}&-X7XmARS9+!H@^VRB-N_LeET z6b;R`Ry}w##ok0<pY{Y>S-U^W^INp*0&iH>8+)7)nQ+RY*z>}6<Cb@P_G;-}6*bS* zQh4)wWKFdFTXzOs*tJON-;<5gx{iM@`SIbbDbv<l3&M<YlPYSyhAq}!_3*?&U(xfq zUnRooPp^#*U%mg>GKI#|^Q}KGHQt`^=&d&Qi`#-n=B;P>;J^RUs}q&xTIX9Tla@t% zjQV=Qv3l{E-@CQTlP7=H-p-dD>u<kVKjrnWA1|(Jv)3(g3g2__k!+oerG%T#o?ovg zFvM9uKJ)j%HZk7gZ0`=n+a&YW$==w>I=k|2jPd!FpNF}&H||<A>+M|Y>T5GDS<a37 z$(@{1^fk;<NaV%+#Pxsf<^Jo6{p+>1UU~12maU&&eqoP%vs1rAnf-7@RXO*svbJ|o zyr#b@<($*=tb*Rn``!HXb3WIv4_B_gFMqN}I<UBZo6g1EciRtFJI|Q0@mZ{T+S&s5 zCZ_d&PM^B_x+=1GueQJ7TDSjw2Uh9UzT8!7%YMi!*tq@NokJh<x9YcfD_wi!yytLx zM8x5kV@I;n^Art(4+QUC``vo#MA7JvQ6=TB1^H`O&4a$>i%vRfoY=Shw?O`WW0R9x zBEP;_x%J(1x3Cv$*OzMN)KC3g`91G*_?vC&X+B@_R==8J+SzI<^FPe`QFM*P7yC3& zG%l{U?5@}?zj1@Z{XPM?`;t!g&-rF>XIDI)8R7hTvT2va&+^GUMZGqc&&GM`URJn1 zEBEToL&3(^q^7*eT)$2(d+U?rc$0s-Ebl!$zVdzELH=_~H-6uL7i3sp{chRC^;P=2 zZr4ien|AoY%;*>O$x{6Po@?^NZw@o#jX$0A;*9T{eV1k&xI5!9*Q%(>WvOLeOSAJ6 zo-UZW>&xnwYd(3a3W;#AA6@l*k9wL^efP6o`>uyC{L?4S*tpL^uYR6;(z1?<cKPM| zx3e-7{5r+t7aw=PU+=|>`s7_TIngeM-^{=Nykf51ufMt}pTGKFyt~5YuF>^J;mND- zhjp?X?Yh3Is@2+X;(`sfr*l?%oj<#2H`AIh|Mz(ZPuu%XZRUx%Y?7?|Xx;tl&p*pz zeqF9U-5kPnK>EMcwFy<Jylgw=q*tZN$(;|EIdSX$+jzqntM9I3YFL+%%j__B?X6Y1 z`|><qw5@sReW>r@$2YRV_K#%i=2Y(#ZqWE&^CL=Z@@CdK`!+Q^%)YigGCJb0{{G#p zwcXvibL1Fi&v|xgWmV1!gZVo`epbD?S*v}2^|~uTZOvOt^A=^l*|zw(l=!o!j&d?P z*xl=`x*uj+9yuhHq{~$Oj{nh@)YrQzelDx+oT;?0-mLdvV|BvTtLG9<$IRyyezsN2 zL*|}zRN;qgWs6UjZ+@B|EGfK_XTpq)O*#xR(l>gP*_A!cJp1^Lb@fy|)}QR@mn(js zVmi0)PU`A4+QP*@ZhHqaG*sU<QxxM&DpqNbE{=T18n&EQ@R@P4+fi1b*zV%(;YP6w zyYG5j{(SX*+3KU0UO$^^vroC@$aK~@`zAT=Io$u8-%Wr!`^UeVCT-{LI7N4FbzZ)9 z(<G~ZulAll{oi)x6+=$88=9xuE0dOW2#bP>OCH{q>l@w9K0m4+_3_I)F$N+1{iVXw z?aeRjH*SfqE9YitJdz_f-Tw6BQ_tD_;v)~-4i}p+Lvz9M!~L7}%WvJQTyjMzI9WqB zE!%y9&(Z9A_LVuoN8fFYj?K5ee!AJ;O-6HddN=>gIgOqA+&>=I%drT!oENj#`?I*O zQ$K(E9Y;o+Evyw!<0C$wzI{mQ-@{)_{~qqzTlDVcowjPTV&NvYK(jMT*VbyW{`_!n z!duI`uh(As^H%72nYihDtNUK|t4r3%Ha2XM-@a_YlMa8)6WP2KYs=>DiCLNux+^#I zWYlq2r(VgE>#puBOg?+k_=(=rLvKnZG@jZ%F>CIFhgV#tJQf!_6&xaL9CqVe%+~$V zCvJo!p8fesUH|EXlZ?XgVgH!4rtYpem1C5<F7nuo5J7eQr#ZQIQ`}$f)wozZ)qGw+ zV^CtA%LK*+yALt=XEwQSoinS$Xl~pkQL*jk*FFzhfBDkWIVZo&{l0m+ygH-L88O2R z+8wdC-_Lus>&y4aOP6;%N&UG}slimXtWxsy>6!D)FYZ3u{+Iv9d#n7H=e=LY{<`_; z^OS$qLP8$P&K9i@-h8yQa#82(DLXqdLnbtCJ#0GHOmO9+=1D%YMWai07w;`~o>s1R zk+-w>`X`AOTc6d)*Xws5u6Ew>Ba^YpFUt5_T9?Izx5rN`*?OdCso0;N|K}dNxIX{T zfpylqm6zI{YCHaU!h{)q(W&lEOv;^1d?mk6*WcfLwcR+GZQoAq9Y3Z_bgI-==X}t< z|D=<{qpA6K_H`Q=2D@0iXts+!@}WX*m*U0!$_>Tc^>q(7PAl5me*Ck?GT$%nc^;ez zW&XYUuZ8)%<IS>mIgv6OdRW$8P5;QpE4+Ex*L)F?(7)D|y+XRh%FR4$_AYeX`a6C7 z)+L+DSMPm)W8+FCt7uc7Ga?gxW_OhTm@vcC@Pf2Uc!>7&%iEP3eEc5G-rdwu{$tJl z*_uj1LNB7XtpwGuU*7KdyZPmo&UGu=_N`}I@LWYLtxG`Q#eGSKq+_obWnO&KXFJYr ztA1KHAwA^qjS$Aa)=W>QMKb(2ckqI2w2f!PY$ur)d=DJT8FncaetDp#l6KbGtXAV{ zw7CjfRkO!3)n8>1$4gvIOSb>MaCx2L<jF7YK5Ng5c)mq!LdL1>XXf#5o~ywBg)N)U zXv4QKXXW`}+pRs8#(Fb^+)>Y2>2V^fkzw`fyP~2mUS60m#~hR*=J92(zVG3&pnUiG zn%Qg1XRqH={qj@ewx_cd(>@8=%G$;J+0yXg(c$ltGK&qjbgxbDP}rCH@y_kq3%rqW zwcGaJt`G09nx5-8$57>0*}b~{-{Sjys<!_WV}7as-RY66-I3dC<s8Fbzil=AYt8&3 zOSFOEQM5@4Pbc%oqYlTz=M}G)QhfR=f8W3E@A+0iE9NSEf6uXI=f(N5Q|BcJa&rCo zadX96{xjeGmV~b@4i7opKY#7}mtDP!q=gP&|MVh9^u@~$xkp~Ezw~@Mzuc|c(+d6^ z;d^pn^Yt^YB~uQ(`n66h?d}AN;;S33{#w7a==DRbZ3<CVC$_|Stt~Xlt$Mc6O4a*& zQ20dk!+Y*IvNbfu9_;!ZHDA)$V1stV$HR-Br<~Q^9+p%((LCn0$LbF;Ggk9%nzy<B zb;i={6HDu_Z&%*%>fOv;iXVTiH<nmsaP-sJi8)Vu8Mpsh{c6{>U4~36PX;G$6MnKT ztnpkJ@9}#V4Gn{Tie2#Hd(XZ0*PSQn-&?ivT0u?6?|x?<zc_gNvdh;wE=kv_Y|ch4 zzNc>!SLy%u>6bZ2j{2|d6qtMQcC+KjEuG!-#je#f9jlU@tu^KU*+Y&dZ$+ZkfA*R2 zmgVLz+sNzAH~ivGEi7N1fAnp$)nX~W_q?HR^8C-wuK0VMn?dZtRjmmzsq*ihvQ;&Q z@@u#{F{$gP7Cw2PHb>^{!uq&H##$3*Y;~J0Z0xG?d~I%%vSZ`lyVv$UWiDLJZeSFt zabKFP;V=IWMV5khQF5TD?8&k)pXZ)p*pM8|s*-lLNIx~@(yo8<FL)o_skmo#ee0gm z|DKC#*6-RJdYJ!w`iE2IQEP5Tb|>>poN(YD`=6(t`b%}&yzAqw>MCsZS7@Koxo@r? zd#T6g+3D?@+txn?wXF&q9z0skTH?00ao0r8*E8<rYX9H8>X5N`jQy{(O^f>r*Q!Lm ztoyoe!rR(SZ`pQgXW7147Zw}HyGwDSs@8?8s}fZbx1PE-rzmiry^T@ifg9qiEzDux zYpMzvvQ+{P9FDI2aq*{))nci(<DZ}EPkXtA^X>*FQ?t+`4*3_V1nw=3`FW?owAM&S z<eJawvbTM=E0-3h@^C7y+4*kihyO43n6?!t=RP|AeDej~&Vqo1q-#fB??0y?B=Yp& zHu=A4jJ4KGpe%oE!VGhjx(d7QjVqmY=Gdx#yq3ZDv5Yr%tyEOgwI$OI|909Yw!UJf z`k|a$p8GbF|HS`v+wpAg{%NnfvP#!4w=<mO93FCb-O(`h<QW$K=7~=7xG<}alVNw* z51}p=R-?Aevmd(F-^+?zyR7t&c{!`0S*Xta$9i*@r=)BOc=vDm6uok<$KsOCkLqJj zJbJPCn(A5WWH!0`iDzF3ZP=#&?(VDOAGssH==in0yqk4b|6Nbki=M2C`b)DWZ2B|N z&i`9f^VE|^BjY6xANj}~`SiHBjo>r4_hFH1Jpvw_=X1S2$7j>Ddu!|d++65!_j@+~ z`@1bi&b)0u*V-%<SFt9w@Seqm%kK_fY`(VZ?WK9C-uc>7>*{~pntRz=eVR^~M(Js9 zdwYTHa+??Hb89lly!e*<pZTA4omzsghi2^YcJXp2+w!;HB#s=uT~m>M(y9CKZ>JLy zVe1zeYn}StIX&;>Uh|p9|K-{1`Q6(a@uc;5)Q4-2o=$7{dckhJ&4qno`wkvFSgQZ! z{rcytv`mscj)z^oQMkZ*!!wa{3;ZAO%kwPQ9D4YPk6@MP)ovEne{Yp%e>h&hgVQno z?b_C>f2ZuwU$!vcUEu%s$xPewuYLGErSr&|&IR|Q=1w(C`5E<bp`Lu(@z2+`oR4)} zVsvfm*Drf?{2%))%a@-YHQ_}U*Pqq(Vn@DC>HL@?cv$}V$1m5Net4Y;{}=h*Onz6C zsY=?K<m1b`pEj;L(sT9i+pMbs+}ShyqKlXEzvWXjOy1iT(S3EZhV4?7tqL1Azy4<W zZr#zDnak}BCd@Du{E%1}l_{`GQSbw!<l$X*`|E<043i%{e7ls<F|y9~`_WgkFRje{ zaj^6M&-=lpb5mITo?H+%KCtY$@1GBMzgAy5X#BhBsov_?=f^%vc#3>@D6Xxq*~7y6 z=&hYh$M1{VQ`T()jlcZ38oJnKYtdSLJN3B|XCJ=izhmoKGS}oQkAZ*7&FpFC&T#49 z<Bsb;`*X#^SypFW^<Cb*Vs&V8Mdsa)!tVG-{#w%2dRc0iW*`2xuUf1~Xjh_=(3J~G zpAGfRjnzK6cAib-Wt{za>3*MRZoxNlll7U*jjtI-N4@oR*V#KQt?uvXsoM_cnoT@< z*ERI%OoM#B?212%)w{#?*-vb=OMcX-%V@Lb?merA`+wfmebRm4-S6lNH?!X7{yh5I zoROjb-((J@g<G4==ITB8<8F0G@%Q?thhInj`TJF7+i|9fCCBg0OMCtCm$9XA{ombR zV(q6h^zEOXyGnJnYOOU>#leHM4`=c2zDdbIrp?z1DeLSu#seB2Pr8K|=Q~`;&tJHA z-ex)V;M0a>uR~88ZrwBOYu(@Szjr1)eQstx*~8<??;d@-dB-$Y*H(m0){l~Z<t87T zyEn@+ZEu{n?r|M)&TFz#s~C};b;$VonTHG7{AOE6P4hYTgppyR*!;J1bs4i6o}VsZ zWZ0nl%>BZ%yr~UaPp4)r>}c>$s9v*c`}e9<4K;zgzD0!_8O?M*wqli*?`mVM3%k!6 z%l}+e`D|*dGgJSUmep2iMaOR07Dvy%|4nbIL#DXzYvz5w|4m!vw%UHrysd}ctlziq zx&0->xq3UkMTLKQ)~Yk<^I3DF*zS94>v(u8o+-zhmTjhF6u2U*+)rt`>DPC2a%SQ& zry@=G;n_sq-S6`^e%<}pyl94(=!Lt24&SFOSeyJWUWwUO{o~f(=89t5wln_y*<ZqN zU}Jen^#1tO_tw_Q+!J5*Ye!UE_ub@AteyA&C8r(TZ(XO@eI(~%o$GbaweJ^)SE!v~ zobQmndhaX0x=h<9MVU)E^1(vfzgO9%<*eE$f9G6AuIvi12}Y}Jjs`J#oDq}$H}A@# zYu_(wU#Tl~k>((4c>Kc|p%YGwGyKGJ{^lK<@bv%o>Yj~1vRC?i_5NP9-RxWLo0l85 zt5xoVSbXf1w*qTJ#cuuyi(YM#UJJ5%2dCY{+B+=sJEZz`H+z5j$+XE$&TSvVWs`~L zZ|{~-C_kINY5C{YLn<mkOiGEflnj5YwU=1;eUIOh35jv;znsL(^Iz^*s(-*FeBU#b z{7DBksBJax-udTtv-|gDtL)|_=GD1gK9Zx=J2PY!<2{KW2EW-Fe7tts%@e;b;1zwQ zyVlM|h(Ema%>6%lybM3G!Uf{@UjMhQC;puHhkr+y7#?hFSK?rQ%dcBgquky<neC7w z?`&qabG08>o%a~3GJJft`uyL66XwR3DYehrY0AnlF(CJGDdYYXuWs}d{w_c4xOP=C zb6w-2%twd)^At8uSiNfAk|`Dn?D4;EvY(%=VHfDD9jo1!X00<{|IuXs{RtCRE^%*u z|7PRl#nn==0*Bu$(0?ZOVf%Z3rT7OYOzti`9{wfv*LwAJHuq0BNu;$eDPhk4dw2PX zXS4G^muGP~&3g3X!TGxD*H<t}q_Hn4VXm(%W751^uv_cOoffvArw`8WJtkdP)OM5c z`Fb_UlufIBo8P~A@bTh|%j#(}UYDdM@rA2ByR(k1(!2lKqw1?KCmWq9wW>FLStfd- zTP3dO*RPq0>kd!tv@Bb{GR(=r>Xw!9nbL&SK3@eK=1*R0d^l$D$tCB)X1-E2IZ^-q z%1Mc5QiT_~WiCCxa>DFz%wqj#oASaNuLyj0ukE)kRBGGF7P+`XdL`@j)s9&LNB6ub ze&mwZYWXy1XWx#ANvnPMgp#%kFE32xT*4B>)Dc?jqo!_X8GO6p@>$l+tCGLodHePF z^<Y+(>3hBBpDl6~v2<rBR6qB4=GQZlhjsEL0@l7Ru8f&~`g+M5_W5^X(_V>1rxk_V z>74vw)=oCp$=Zuo{M;dw#;9^f<GSXuor&8Fl=%}+`z+xIKa?}8=u&S{XUMT>JK64t zb;wLBc%-r?O)aQJJ8{~f+lgjBG$e~Ad?`A;CiC7r#$y+AvfS3S+)S_9ovJ7HvxTdu z@7dF7meF6zPM={kD4LXc%73m!zjk8XyNlacY<Asf>W@=x_f(v7vMGD}vL)_^b3`nr zPM(v>^>&l+^FrM-PLDQ4r(SQ?HMaEq#igl!?(w4~g8Ao|9)C5m%zg3U-f6!%$F~~H z{*ZQh&e=j?`=UOUwz*c*vlIC$OwLrs8BcDWGl%zOoVoRbv(;yFW}b8u3aWc><zx)^ z=Y@N7H7nMXUi-;VS`=|HpU=8fuRPq>^XIzNPs255C(k$;sJWbNKg0CHZ?-ya;E7Hv zn$WVjcjoFuK9+)8XFsi;diLrzO@)hGOO{#w{#kB%rv2NtrE{YGUCnS?c%b^slNF0H zS6wz@ZkX^Xcl+xEceTTMW|p3Day5DRhfW&rl1tOvbMdO*Ysu}a9bQeC@MGm=^-|k2 z=ilT@x3P=GzTm#|W8R!(uFqR8KQFO8!@!_f|ENq<>!Ntko!Ax`<;KM2yKgv5ZrOQr z_pO!DpF!zI(R8h0Z+LJ^<;K;vZ;DLAj=oMU>ht+CJ-vLjbQ(j$1p9*BT-u&@FWo$< zw%lW3;)+0Z@t}48*+V%tK01GY*Nj;OuRc!m`}t(E{*E0@GD_-kwRzv0wg2@pTjtE0 zCfP7$Q{w%otrx_Lc#JHUE?jGLAtlkSX2DxulZ#tFf5|!ZR%?RQy__psi#&r{B^gv^ zEiSz#UKA7I$Tv|~t!usMt|`m7KO6tP-8MVX;LWdIke9P2I2{g9ey6Q}y(E#X!M<wA zTh$#qY>KMBsfmY9P*!=8-TN+Xx=HE`MuqqZ?RO#qQ$@ID%-g&3-qA@-Do<t~pLg4K zN8D4>+!^z$x9A3HocQ;ZXG@?)!l%zqszlwnqIo`D{Hn7#^Dxhv`~}_1I?pfPm-2nq zD>cRTYt|<mCi_Z7o;_b@EzbYrs3t?TRN(wYnMt3%d)^CPW_8jsxa&R7zuD{OuKVS| zUi6~VVEUfY!n^>7Jsb+pLSn^=*rHQb&7Sh<w^2GDuiV|)t3LkN_4>g|1Lp3vTlkv= z9%)_?e6=Vu$!zMg1o5km%a$DRUt+L7{{7nJypqo*JziYA(L>HZTfpD5(YEY)$!qS& zC0|>QvWnDXScU2`W>0&xJ8fIVu4~gOcJj(Td)n83?&u=cH-b!tm-lQwdQQ4>iILTp zDSbH;8JE49p`n(b#LCRM{Lt<>>4$w>&Sk%f4t7bAC##;Ke4h8m{}pc&HZxaV69TQv N@^tlcS?83{1OOzVtt|im literal 7613 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 KxvX<aXaWEyBz*<| -- GitLab