AI Floating Bubble

Adds a draggable floating AI bubble to all webpages with an updated list of AI sites appearing above it on hover, with a delay and fade-out on mouse leave.

// ==UserScript==
// @name         AI Floating Bubble
// @version      1.3
// @description  Adds a draggable floating AI bubble to all webpages with an updated list of AI sites appearing above it on hover, with a delay and fade-out on mouse leave.
// @author       monit8280
// @match        *://*/*
// @grant        GM_addStyle
// @license      MIT
// @namespace    http://tampermonkey.net/
// @noframes
// ==/UserScript==

(function() {
    'use strict';

    // 현재 창이 AI 팝업 창인지 확인합니다.
    // URL에 'bubble_popup' 쿼리 파라미터가 있는지 검사하여 팝업 여부를 판단합니다.
    const urlParams = new URLSearchParams(window.location.search);
    const isAIPopup = urlParams.has('bubble_popup');

    // 현재 창이 AI 팝업 창으로 감지되거나, iframe 내라면 버블을 초기화하지 않습니다.
    if (isAIPopup || window.top !== window.self) {
        console.log("AI 플로팅 버블: AI 팝업 창으로 감지되어 버블을 초기화하지 않습니다.");
        return;
    }

    /**
     * @class AIIcons
     * AI 사이트 아이콘 URL을 관리하는 클래스입니다.
     * 각 AI 서비스에 사용될 아이콘 이미지의 URL을 정의합니다.
     */
    class AIIcons {
        // 메인 버블 버튼에 사용될 아이콘 이미지 URL
        static get BUBBLE() { return "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPg0KPHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik0xMC4yNzY4IDE2LjUxNDhDMTAuMjgxNSAxNi40MDUgMTAuNDYzNCAxNi4zNjEzIDEwLjUxNzQgMTYuNDU3MUMxMC43NzA3IDE2LjkwNjggMTEuMjAyOSAxNy41NjgyIDExLjY5MzIgMTcuODY4OUMxMi4xODM2IDE4LjE2OTYgMTIuOTY5IDE4LjI1NDkgMTMuNDg0NyAxOC4yNzY4QzEzLjU5NDUgMTguMjgxNSAxMy42MzgxIDE4LjQ2MzQgMTMuNTQyMyAxOC41MTc0QzEzLjA5MjYgMTguNzcwNyAxMi40MzEzIDE5LjIwMjkgMTIuMTMwNiAxOS42OTMyQzExLjgyOTkgMjAuMTgzNiAxMS43NDQ2IDIwLjk2OSAxMS43MjI3IDIxLjQ4NDdDMTEuNzE4IDIxLjU5NDUgMTEuNTM2IDIxLjYzODEgMTEuNDgyMSAyMS41NDIzQzExLjIyODcgMjEuMDkyNiAxMC43OTY2IDIwLjQzMTMgMTAuMzA2MiAyMC4xMzA2QzkuODE1ODggMTkuODI5OSA5LjAzMDQ4IDE5Ljc0NDYgOC41MTQ4MSAxOS43MjI3QzguNDA0OTUgMTkuNzE4IDguMzYxMzMgMTkuNTM2IDguNDU3MTMgMTkuNDgyMUM4LjkwNjgyIDE5LjIyODcgOS41NjgxOCAxOC43OTY2IDkuODY4ODkgMTguMzA2MkMxMC4xNjk2IDE3LjgxNTkgMTAuMjU0OSAxNy4wMzA1IDEwLjI3NjggMTYuNTE0OFoiIGZpbGw9IiMxQzI3NEMiLz4NCjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTE4LjQ5MTkgMTUuNTE0N0MxOC40ODM0IDE1LjQwNTEgMTguMjkxNiAxNS4zNTkxIDE4LjIzNDMgMTUuNDUzQzE4LjA2MiAxNS43MzU1IDE3LjgxMzUgMTYuMDc2NCAxNy41Mzc0IDE2LjI0NThDMTcuMjYxMiAxNi40MTUyIDE2Ljg0NDYgMTYuNDgyIDE2LjUxNDcgMTYuNTA3NUMxNi40MDUxIDE2LjUxNiAxNi4zNTkxIDE2LjcwNzggMTYuNDUzIDE2Ljc2NTFDMTYuNzM1NSAxNi45Mzc0IDE3LjA3NjQgMTcuMTg1OCAxNy4yNDU4IDE3LjQ2MkMxNy40MTUyIDE3LjczODIgMTcuNDgyIDE4LjE1NDggMTcuNTA3NSAxOC40ODQ3QzE3LjUxNiAxOC41OTQzIDE3LjcwNzggMTguNjQwMyAxNy43NjUxIDE4LjU0NjRDMTcuOTM3NCAxOC4yNjM5IDE4LjE4NTggMTcuOTIzIDE4LjQ2MiAxNy43NTM2QzE4LjczODIgMTcuNTg0MiAxOS4xNTQ4IDE3LjUxNzQgMTkuNDg0NyAxNy40OTE5QzE5LjU5NDMgMTcuNDgzNCAxOS42NDAzIDE3LjI5MTYgMTkuNTQ2NCAxNy4yMzQzQzE5LjI2MzkgMTcuMDYyIDE4LjkyMyAxNi44MTM1IDE4Ljc1MzYgMTYuNTM3NEMxOC41ODQyIDE2LjI2MTIgMTguNTE3NCAxNS44NDQ2IDE4LjQ5MTkgMTUuNTE0N1oiIGZpbGw9IiMxQzI3NEMiLz4NCjxwYXRoIGQ9Ik0xNC43MDM0IDQuMDAxODFMMTQuNDYxMSAzLjY5NTc0QzEzLjUyNDUgMi41MTI2NiAxMy4wNTYxIDEuOTIxMTIgMTIuNTExMyAyLjAwODQ1QzExLjk2NjUgMi4wOTU3NyAxMS43MDU5IDIuODA0MTIgMTEuMTg0OSA0LjIyMDgzTDExLjA1MDEgNC41ODczNUMxMC45MDIgNC45ODk5MyAxMC44MjggNS4xOTEyMiAxMC42ODYgNS4zMzg5N0MxMC41NDQgNS40ODY3MSAxMC4zNTAxIDUuNTY0MTcgOS45NjI0MiA1LjcxOTExTDkuNjA5NDIgNS44NjAxNkw5LjM2MTU2IDUuOTU5MzNDOC4xNjIwNCA2LjQ0MDYgNy41NTc2MSA2LjcxMzMxIDcuNDgwNDQgNy4yNDMyNEM3LjM5ODEzIDcuODA4NDkgNy45NzAyMyA4LjI5MjA1IDkuMTE0NDMgOS4yNTkxNUw5LjQxMDQ1IDkuNTA5MzVDOS43MzU2IDkuNzg0MTcgOS44OTgxNyA5LjkyMTU4IDkuOTkxMzcgMTAuMTA4OUMxMC4wODQ2IDEwLjI5NjIgMTAuMDk3OCAxMC41MTIxIDEwLjEyNDQgMTAuOTQ0MUwxMC4xNDg1IDExLjMzNzNDMTAuMjQxOSAxMi44NTc0IDEwLjI4ODYgMTMuNjE3NCAxMC43ODI2IDEzLjg3OTRDMTEuMjc2NSAxNC4xNDE0IDExLjg5MDYgMTMuNzMxOSAxMy4xMTg4IDEyLjkxMjlMMTMuMTE4OCAxMi45MTI5TDEzLjQzNjYgMTIuNzAxQzEzLjc4NTYgMTIuNDY4MyAxMy45NjAxIDEyLjM1MTkgMTQuMTU5NyAxMi4zMkMxNC4zNTkzIDEyLjI4OCAxNC41NjEzIDEyLjM0NCAxNC45NjU1IDEyLjQ1NkwxNS4zMzM0IDEyLjU1OEMxNi43NTU1IDEyLjk1MjIgMTcuNDY2NiAxMy4xNDkzIDE3Ljg1NDIgMTIuNzQ2QzE4LjI0MTggMTIuMzQyNyAxOC4wNDkzIDExLjYwNjEgMTcuNjY0MSAxMC4xMzI4TDE3LjU2NDUgOS43NTE2M0MxNy40NTUxIDkuMzMyOTcgMTcuNDAwMyA5LjEyMzY0IDE3LjQzMDUgOC45MTY1N0MxNy40NjA2IDguNzA5NTEgMTcuNTcyMyA4LjUyODE2IDE3Ljc5NTUgOC4xNjU0NkwxNy43OTU1IDguMTY1NDRMMTcuOTk4NyA3LjgzNTIyQzE4Ljc4NDMgNi41NTg4MyAxOS4xNzcxIDUuOTIwNjMgMTguOTIyNyA1LjQwOTM1QzE4LjY2ODIgNC44OTgwNiAxNy45MzUxIDQuODUyMjkgMTYuNDY4OSA0Ljc2MDc2TDE2LjA4OTYgNC43MzcwOEMxNS42NzI5IDQuNzExMDcgMTUuNDY0NiA0LjY5ODA3IDE1LjI4MzYgNC42MDIwOEMxNS4xMDI3IDQuNTA2MSAxNC45Njk2IDQuMzM4IDE0LjcwMzQgNC4wMDE4MUwxNC43MDM0IDQuMDAxODFaIiBmaWxsPSIjMUMyNzRDIi8+DQo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik04LjgzNSAxMy4zMjZDNi42OTc3MiAxNC4zNzAyIDQuOTE5MzEgMTYuMDI0IDQuMjQ4NDQgMTguMDAwMkMzLjQ5NTg5IDEzLjI5MjYgNC41Mzk3NiAxMC4yNTI2IDYuMjEzMDggOC4zNjMyOEM2LjM1NzI4IDguNjU4IDYuNTQ0NjYgOC45MDIgNi43MTI5NyA5LjA5MjY5QzcuMDYyODYgOS40ODkxMSA3LjU2NTE4IDkuOTEzNDcgOC4wNzUyMyAxMC4zNDQ0TDguNDQyMjUgMTAuNjU0NUM4LjUxMTg0IDEwLjcxMzQgOC41NjU5NyAxMC43NTkyIDguNjExOTcgMTAuNzk4OUM4LjYxNjY1IDEwLjg2MzIgOC42MjEyOSAxMC45MzgzIDguNjI3MjcgMTEuMDM1N0w4LjY1NzA4IDExLjUyMTJDOC42OTcxNyAxMi4xNzYxIDguNzM2MyAxMi44MTU1IDguODM1IDEzLjMyNloiIGZpbGw9IiMxQzI3NEMiLz4NCjwvc3ZnPg=="; }
        // Gemini AI 서비스 아이콘 URL
        static get GEMINI() { return "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0iTGF5ZXJfMSIgdmlld0JveD0iMCAwIDE5MiAxOTIiPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcHBhdGgiPjxwYXRoIGQ9Ik0xNjQuOTMgODYuNjhjLTEzLjU2LTUuODQtMjUuNDItMTMuODQtMzUuNi0yNC4wMS0xMC4xNy0xMC4xNy0xOC4xOC0yMi4wNC0yNC4wMS0zNS42LTIuMjMtNS4xOS00LjA0LTEwLjU0LTUuNDItMTYuMDJDOTkuNDUgOS4yNiA5Ny44NSA4IDk2IDhzLTMuNDUgMS4yNi0zLjkgMy4wNWMtMS4zOCA1LjQ4LTMuMTggMTAuODEtNS40MiAxNi4wMi01Ljg0IDEzLjU2LTEzLjg0IDI1LjQzLTI0LjAxIDM1LjYtMTAuMTcgMTAuMTYtMjIuMDQgMTguMTctMzUuNiAyNC4wMS01LjE5IDIuMjMtMTAuNTQgNC4wNC0xNi4wMiA1LjQyQzkuMjYgOTIuNTUgOCA5NC4xNSA4IDk2czEuMjYgMy40NSAzLjA1IDMuOWM1LjQ4IDEuMzggMTAuODEgMy4xOCAxNi4wMiA1LjQyIDEzLjU2IDUuODQgMjUuNDIgMTMuODQgMzUuNiAyNC4wMSAxMC4xNyAxMC4xNyAxOC4xOCAyMi4wNCAyNC4wMSAzNS42IDIuMjQgNS4yIDQuMDQgMTAuNTQgNS40MiAxNi4wMkE0LjAzIDQuMDMgMCAwIDAgOTYgMTg0YzEuODUgMCAzLjQ1LTEuMjYgMy45LTMuMDUgMS4zOC01LjQ4IDMuMTgtMTAuODEgNS40Mi0xNi4wMiA1Ljg0LTEzLjU2IDEzLjg0LTI1LjQyIDI0LjAxLTM1LjYgMTAuMTctMTAuMTcgMjIuMDQtMTguMTggMzUuNi0yNC4wMSA1LjItMi4yNCAxMC41NC00LjA0IDE2LjAyLTUuNDJBNC4wMyA0LjAzIDAgMCAwIDE4NCA5NmMwLTEuODUtMS4yNi0zLjQ1LTMuMDUtMy45LTUuNDgtMS4zOC0xMC44MS0zLjE4LTE2LjAyLTUuNDIiIGNsYXNzPSJzdDAiLz48L2NsaXBQYXRoPjxjbGlwUGF0aCBpZD0iY2xpcHBhdGgtMSI+PHBhdGggZD0iTTE2NC45MyA4Ni42OGMtMTMuNTYtNS44NC0yNS40Mi0xMy44NC0zNS42LTI0LjAxLTEwLjE3LTEwLjE3LTE4LjE4LTIyLjA0LTI0LjAxLTM1LjYtMi4yMy01LjE5LTQuMDQtMTAuNTQtNS40Mi0xNi4wMkM5OS40NSA5LjI2IDk3Ljg1IDggOTYgOHMtMy40NSAxLjI2LTMuOSAzLjA1Yy0xLjM4IDUuNDgtMy4xOCAxMC44MS01LjQyIDE2LjAyLTUuODQgMTMuNTYtMTMuODQgMjUuNDMtMjQuMDEgMzUuNi0xMC4xNyAxMC4xNi0yMi4wNCAxOC4xNy0zNS42IDI0LjAxLTUuMTkgMi4yMy0xMC41NCA0LjA0LTE2LjAyIDUuNDJDOS4yNiA5Mi41NSA4IDk0LjE1IDggOTZzMS4yNiAzLjQ1IDMuMDUgMy45YzUuNDggMS4zOCAxMC44MSAzLjE4IDE2LjAyIDUuNDIgMTMuNTYgNS44NCAyNS40MiAxMy44NCAzNS42IDI0LjAxIDEwLjE3IDEwLjE3IDE4LjE4IDIyLjA0IDI0LjAxIDM1LjYgMi4yNCA1LjIgNC4wNCAxMC41NCA1LjQyIDE2LjAyQTQuMDMgNC4wMyAwIDAgMCA5NiAxODRjMS44NSAwIDMuNDUtMS4yNiAzLjktMy4wNSAxLjM4LTUuNDggMy4xOC0xMC44MSA1LjQyLTE2LjAyIDUuODQtMTMuNTYgMTMuODQtMjUuNDIgMjQuMDEtMzUuNiAxMC4xNy0xMC4xNyAyMi4wNC0xOC4xOCAzNS42LTI0LjAxIDUuMi0yLjI0IDEwLjU0LTQuMDQgMTYuMDItNS40MkE0LjAzIDQuMDMgMCAwIDAgMTg0IDk2YzAtMS44NS0xLjI2LTMuNDUtMy4wNS0zLjktNS40OC0xLjM4LTEwLjgxLTMuMTgtMTYuMDItNS40MiIgY2xhc3M9InN0MCIvPjwvY2xpcFBhdGg+PHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWwtZ3JhZGllbnQiIGN4PSItMTIyLjQ5IiBjeT0iLTIyMy41MyIgcj0iMTEwLjk4IiBmeD0iLTEyMi40OSIgZnk9Ii0yMjMuNTMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLS41NCAwIC0uOTMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMzEiIHN0b3AtY29sb3I9IiMzMTg2ZmYiLz48c3RvcCBvZmZzZXQ9Ii40MiIgc3RvcC1jb2xvcj0iIzQ0OTFmZiIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjNGM5NmZmIi8+PHN0b3Agb2Zmc2V0PSIuODEiIHN0b3AtY29sb3I9IiNlN2YxZmYiLz48c3RvcCBvZmZzZXQ9Ii44OSIgc3RvcC1jb2xvcj0iI2ZmZiIvPjwvcmFkaWFsR3JhZGllbnQ+PHN0eWxlPi5zdDB7ZmlsbDpub25lfTwvc3R5bGU+PC9kZWZzPjxnIHN0eWxlPSJjbGlwLXBhdGg6dXJsKCNjbGlwcGF0aCkiPjxpbWFnZSB4bGluazpocmVmPSJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80UzUrYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THdBOFAzaHdZV05yWlhRZ1ltVm5hVzQ5SXUrN3Z5SWdhV1E5SWxjMVRUQk5jRU5sYUdsSWVuSmxVM3BPVkdONmEyTTVaQ0kvUGdvOGVEcDRiWEJ0WlhSaElIaHRiRzV6T25nOUltRmtiMkpsT201ek9tMWxkR0V2SWlCNE9uaHRjSFJyUFNKQlpHOWlaU0JZVFZBZ1EyOXlaU0E1TGpFdFl6QXdNeUF4TGpBd01EQXdNQ3dnTURBd01DOHdNQzh3TUMwd01Eb3dNRG93TUNBZ0lDQWdJQ0FnSWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0YlhCSFNXMW5QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2Wnk5cGJXY3ZJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenBwYkd4MWMzUnlZWFJ2Y2owaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOXBiR3gxYzNSeVlYUnZjaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGtZejBpYUhSMGNEb3ZMM0IxY213dWIzSm5MMlJqTDJWc1pXMWxiblJ6THpFdU1TOGlDaUFnSUNBZ0lDQWdJQ0FnSUhodGJHNXpPbmh0Y0UxTlBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZiVzB2SWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwemRFVjJkRDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDNOVWVYQmxMMUpsYzI5MWNtTmxSWFpsYm5RaklqNEtJQ0FnSUNBZ0lDQWdQSGh0Y0RwRGNtVmhkRzl5Vkc5dmJENUJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlPUzQySUNoTllXTnBiblJ2YzJncFBDOTRiWEE2UTNKbFlYUnZjbFJ2YjJ3K0NpQWdJQ0FnSUNBZ0lEeDRiWEE2UTNKbFlYUmxSR0YwWlQ0eU1ESTFMVEEyTFRJMVZERXhPakU0T2pJeExUQTNPakF3UEM5NGJYQTZRM0psWVhSbFJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhodGNEcFVhSFZ0WW01aGFXeHpQZ29nSUNBZ0lDQWdJQ0FnSUNBOGNtUm1Pa0ZzZEQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhKa1pqcHNhU0J5WkdZNmNHRnljMlZVZVhCbFBTSlNaWE52ZFhKalpTSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHg0YlhCSFNXMW5PbmRwWkhSb1BqSTFOand2ZUcxd1IwbHRaenAzYVdSMGFENEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQSGh0Y0VkSmJXYzZhR1ZwWjJoMFBqSTFNand2ZUcxd1IwbHRaenBvWldsbmFIUStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHg0YlhCSFNXMW5PbVp2Y20xaGRENUtVRVZIUEM5NGJYQkhTVzFuT21admNtMWhkRDRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhodGNFZEpiV2M2YVcxaFoyVStMemxxTHpSQlFWRlRhMXBLVW1kQlFrRm5SVUZCUVVGQlFVRkVMemRSUVhOVlIyaDJaRWM1ZW1GSE9YZEpSRTExVFVGQk5GRnJiRTVCS3pCQlFVRkJRVUZDUVVGQlFVRkJRVUZGUVNZamVFRTdRVkZCUVVGQlFVRkJVVUZDTHlzMFFVUnJSbXRpTWtwc1FVZFVRVUZCUVVGQlppOWlRVWxSUVVKblVVVkNRVlZGUW1kVlJrSm5hMGRDVVZsS1EzZG5SMEpuWjB4RVFXOUxRM2R2U3lZamVFRTdSRUpCVFVSQmQwMUVRWGRSUkVFMFVFVkJPRTlFUWsxVVJrSlJWRVY0ZDJKSGVITmpTSGc0WmtoNE9HWkllRGhtU0hkRlNFSjNZMDVFUVRCWlJVSkJXVWRvVlZKR1VtOW1TSGc0WmlZamVFRTdTSGc0WmtoNE9HWkllRGhtU0hnNFpraDRPR1pJZURobVNIZzRaa2g0T0daSWVEaG1TSGc0WmtoNE9HWkllRGhtU0hnNFpraDRPR1pJZURobUx6aEJRVVZSWjBFdlFVVkJRWGRGVWlZamVFRTdRVUZKVWtGUlRWSkJaaTlGUVdGSlFVRkJRVWhCVVVWQ1FWRkZRVUZCUVVGQlFVRkJRVUZSUmtGM1NVZEJVVUZJUTBGclMwTjNSVUZCWjBsRVFWRkZRa0ZSUlVGQlFVRkJRVUZCUVNZamVFRTdRVkZCUTBGM1VVWkNaMk5KUTFGdlRFVkJRVU5CVVUxRVFXZFJRMEpuWTBSQ1FVbEhRVzVOUWtGblRWSkNRVUZHU1ZKSmVGRldSVWRGTWtWcFkxbEZWVTF3UjJoQ2VGZDRVV2xRUWlZamVFRTdWWFJJYUUxNFdtazRRMUo1WjNaRmJGRjZVbFJyY1V0NVdUTlFRMDVWVVc1ck5rOTZUbWhrVlZwSVZFUXdkVWxKU205TlNrTm9aMXBvU2xKR1VuRlRNRlowVGxaTFFuSjVOQzlRUlNZamVFRTdNVTlVTUZwWVYwWnNZVmN4ZUdSWWJEbFhXakpvY0dGdGRITmlWelYyV1ROU01XUnVaRFJsV0hBM1prZ3hLMll6VDBWb1dXRklhVWx0UzJrMGVVNXFieXREYXpWVFZteHdaVmx0V2lZamVFRTdjV0p1U2pKbGJqVkxhbkJMVjIxd05tbHdjWEYxYzNKaE5uWnZVa0ZCU1VOQlVVbEVRbEZWUlVKUldVVkRRVTFFWWxGRlFVRm9SVVJDUTBWVFRWVkZSbFZTVG1oSloxcDRaMXBGZVNZamVFRTdiMkpJZDBaTlNGSTBVMDVEUmxaS2FXTjJSWHBLUkZKRVoyaGhVMVY1VjJsWk4weERRak5RVTA1bFNrVm5lR1JWYTNkblNrTm9aMXBLYWxwR1IybGthMlJHVlRNNGNVOTZkM2xuY0NZamVFRTdNQ3RRZW1oS1UydDBUVlJWTlZCU2JHUlpWMVp3WWxoR01XVllNVkpzV20xa2IyRlhjSEppUnpGMVlqSlNNV1J1WkRSbFdIQTNaa2d4SzJZelQwVm9XV0ZJYVVsdFMyazBlVTVxYnlZamVFRTdLMFJzU2xkWGJEVnBXbTF3ZFdOdVdqWm1hM0ZQYTNCaFlXNXhTMjF4Y1RaNWRISnhLM1l2WVVGQmQwUkJVVUZEUlZGTlVrRkVPRUU1VlRSeE4wWllXWEUzUmxoWmNUZEdXRmx4TnlZamVFRTdSbGhaY1RkR1dGbHhOMFpZV1hFMmRVdDBWbmhUTVZoQmNsSmlSa3hZVEVaaFlUVTBjSEIyYkdscGJrSnpWbkJrV0VaRVpHTkxkWGhXZGtaRWMxWmthWEp6Vm1ScGNuTldaR2x5Y3lZamVFRTdWbVJwY25OV1pHbHljMVprYVhKelZtUnBjbk5XWkdseWMxWmthWEp6Vm1GNFV6UTBjWE5NV1VWeVIyWkJhMEpaTUhWRE1sRnBjSFJPYW1KSlVsY3JkVTFHY0RSWVEyTlpNblpEY1NZamVFRTdURTVvZEdsWmNXbDVXV0paYTB0bllrTjRXRUUwYjJKM2NUTnBhREpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVlBTM1JGTkNZamVFRTdjRmRHYzBOV1NqVkxXVXhhWjBsbFUyTkVkbXRUVjNsTlZVaE1aWEZQSzFGTmJUWlBUa0o1Tm10dk56VkZlbUp2TkZWUFpGWlllSGxRUnpKbFFYVlVWa1pLTmpRNFlVUm5VbU5QYnlZamVFRTdRVGs0YlVwT1RYTlRUMmgxVVRObVNtZDBSVzlKZFU5VGRWTjBjVWxXYkdKS1RVTkdORTlNUm5aRGNtVkxTRmx4TjBaWVdYRTNSbGhaY1RkR1dGbHhOMFpZV1hFM1JsaFpjVGRHV0NZamVFRTdXWEUzUmxoWmNUZEdWM05WY2xkUFFrdHBOemRaUTNwQlVWWjRUMFpDTTNsQ1RHUkRRMVpZWkN0eE1UTjVjVlZ1VEhnMGEydDFPVlZCU2l0TVMxcFVZek5JWjFOdE5ERmpZaTlHYkNZamVFRTdVbTAxWTA1UFp6SXhhbVkzVjFFNFVuWkhibGhTWVhoMk9YSkRTbk5hWVdST1RGQldVVk5RYVhsNVRUTkhlVmxGTDNOeU9FMUNkbTFTUjFSeU9HMUtUM0poTkVSQllqVmpRelJOTkNZamVFRTdielpPT0cxSFoyaFlWbk5NUW1WRWFGRXlUVlZQZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0Vm5oNFZtODBjRlZhUjI5TmFWZFpRME4xU2lZamVFRTdkMjlQSzFGS1ltOVNVMHhWVGxGRFp6YzFWRXRVYmpSelZFZGtVakZYYkdacGVrZHVUakpsU0VGNE1qZ3hVV3R1Wmt0S1ZHUnFhbmRLVms1eFJFVTVZM0ZOYmt4cWFWRjRkbGR5TVNZamVFRTdlVkJGTWtSSGRtcDJiVUkyTkZKS1JYTlRXakpYYjA1NVJ5dFhlR3MwYlZoRmVXcFVUbEV5Unl0YVZVTTJjbEJxV2xSWldHeFJUamg1TkU5d2VYaFViVWRqUjIxWVFVOUdTa2RLU3lZamVFRTdUVTVPVWxac1prUlVSbVZFYVdoa1dFRnljMVprYVhKelZtUnBjbk5XWkdseWMxWmthWEp6Vm1ScGNuTldaR2x5YzFaa2FYSlNlRk56WkhGYVJXeEpRMFYxU21kdlQxRk5iVFpGVlNZamVFRTdhVEZETDBOb2MzQnNUbnB6VjA1cFQzRTJjakY2UjI1T01pdEVRM2hoTHpGSmMxUnRUa3RVZEdOWFJrbzFjbTl6WTNCS1kzbE5SVTB3Y0U5U2RIUkZWbTVOTkVVd2RWWjZhRU5EUlNZamVFRTdXR0pVYTAxTmRHYzBLMUZOYWpCNU4wbHdiV1JwYVRabVZVSnNaVzB6ZFhkNldWazBUMnA2YkZBM1lUbEhNaXRhUVhoMWRXNUtUVWx5YzJWUFNHZGhWRXBHZUROSmQwZE1SekJUYXlZamVFRTdiMDlTVFZaMFYwUm5OVWRyY21kalExYzRRM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll4WTBOeVIyRnRVa3BhUVVsWFlXRnNaRGh3YkU1emFrWktkRkYyVHlZamVFRTdTMjVtVFZkbFducE5WMDVwVjNFMloyWnBNM3BJYkd4a2RHZDRUVkF4U3psWmF6YzFWVnAxTlhjME1HdHViVXBQVm10MVpFTkxSMXB4TlVaMVFWYzBjR1JuVm5OYVNVMVRjbmR1TkNZamVFRTdjM2xOWTFoR2VYbFViWGhyU1hCdE1YZFpNMUkyY2tsNVEzaDFhVUZPT0RKMVRFVTRMM0ZOYVdOUldEVklaazF2V1ZoWVUzbEtha1J4VUhacFkweFRXbThyUkZWUVprdDZhVko0Y0NZamVFRTdha0psVmpjMVZFeEhlVVZyWmtaalZuQjJiRXBwTWtOVFMxTlRkVlpyVFdkV1VVaEpjRmhaUlhWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa0pXYWs1VVNWTk1TVUpEZWlZamVFRTdWRlZIV1N0VVNsUmlSMHRXV0d3MVVVaG1UbVpzZW5WV2FuaHpXakZVVlU1cWRtMTJiSEZJV2xsTlZFVk9VM1pUVXpJclFWcE1aSFpvZUUxa2RYQnBla2hNUVZoYU5EUnZTakp5YXlZamVFRTdiVGhDV21sNVpHbHljMHRHZDNsNVNXRTFlVlp2YUhadGQzZFpjbVJpY1UxMFFrMXlXbkZFVGpkd2MwUjZaWEo2Y0d4Q1l6aGhZalYxVFZkQ01FZG1UV2xyZG1sUEsxcEpkM1ZFVENZamVFRTdTMmx2ZEZOUWFtbGpURlZqYVU5ME9WVTVPSEpzYUZWYVJUTjBUbFJ5VkdaTllXVkdjMnByVkcweGRuZGhZalZwVkhoT09GcHdjbUl6VVVrMk5XbDVaek5EVTA5cWJFSjVhMmh6UWlZamVFRTdWbWRqWjJ4a1oxTTNSbGhaY1RkR1dGbHhOMFpZV1hFM1JsaFpjWFJaTlVWc1NWRXdNR3hDYlU1cmJUSjRRMVl6WkhoVGRTdGhlazVzWTIxRlJXaDJOM0p5ZG0xd2VscHVVSGhSV1NZamVFRTdkbkZrZVZSWVRVdFBVek5oV1ZsTldYWmFVMU5qZVRoYVpIQnBhV3hOY2xaUFdtdFlUV2xHUVRWT2JUZEdUSE5MUjNkTmEwRjRTbGhMVGpoNU9FOVBNMFI2V2t0U1JWTTFkVGxNWnlZamVFRTdaRUp4T1ZGcE5IcFJXakJQYm5kMlRXRnlUM0pEVjIxaVUwZE9NVWRVU1RjMmVEYzFZMDFpYVhsdE1uUXhWSFpyZGtSaGVrNUZkek14VHl0V2VYaHllSEJ1WVdGb01ETjZTRzVwWWlZamVFRTdTWHBVSzNreFJHTmlOV2hhVFZScmVHMTVRM2wyVVZGT09IZE5iVTU1V1ZSVWNURjFRVkZPT0hjMWVHSTBiRTFKTTNKc1FrUmhRM0pCTlVKTVpVSk1jMVprYVhKelZtUnBjbk5XWkNZamVFRTdhWEpxWjFaVGEySmlTelZzYlVWMWRUVmhRVFZ5Y3pnelNXaEdTVGN5WXpjMWNFNVNiR016U0VaSmNqSlZiWFZoY2twcll5OUlSbXAxYjBWdGRWRjRiREpQU21veE0xZHdlbGswYVNZamVFRTdOMGhIYkRCbk0zcE9hVmhMYVhCVmVXSktNMGhEZEhKbmRWTkJXVWRUTkVsamVYTmxUek5HZVRWaFdIRnRZbXBVWVdRd2RYRXhWa3Q1YVcxa1JIQjBUemg2Y1RsVmNXTnpNMWRNUmlZamVFRTdWRzlqTW1FeGNHdDZUR3BDZDFwVVYwNUtiR2RwTVVkVE16RlVhM1ZHYUhoTWEyNXdaMDFXTkd0YVFtUnJSV0kxVkV4SGVVVnJOWE0zTkRGSEsxbHRWRWMxUlZwemF6QTJMM2REYlNZamVFRTdLMkV2VEdwamNVVXlVelptWkRGQk0zcFhOVmxQV0VOVFpUSTRkR0ZhYUZOcE5VVlRhbFZoYjNscmRHZFdUV2xzTWt0MWVGWXlTM1Y0VmpKTGRYaFdielJEYkVSNlNGazFhalZEZWlZamVFRTdhV3hHTmk5WVRsSnhXazlhYWtOU1dHdG9NM3BTV2pWUFpHcERWRE5LU25KdGRHeEtla2xLVUdWU2F6RjVWVU0xYlUxd1JtUlJiWEI2VDNoNll5OUlTa3hhV1ZSWVRUSk5NMHRxU2lZamVFRTdVemxKTldGS2MzVktjMUZ1U21sVVExZFNaVWxVYlZacGFtSnBOV00wUXpjd2NWcDFUazVuZERGSGNERlJaRk50WkVod1pFMDRNM0U1VnpCWGNHMDNkelJoWkVSdWVqSjBURFZ1VWlZamVFRTdaellyWXpGb1preFJSMnQ1VjBaemJsUkJiR0o1ZUZKaVp6SkxSbEphUTAxQ1EySlVUekoxUTBOT09IaHdkMkp2ZVZwQ2NERXlaSFE0ZDJOelNFcG9TbXhYYkROV1lXSTFjVGd3U0NZamVFRTdUWGg1V2xCYVZGWndiWFI1VW1OMVNsUmhSbkZxVFZkUlluZHBUWEphVDNoV01rdDFlRll5UzNWNFZqSkxkRWh3WjB0VlRsQXdUMWt5VW5OcGEzUTVNM3BUTm14NlkxTlJNMlZoVENZamVFRTdUelV5VGt4YVVsaE9aRXA1YjI5SFpVdHZkMUpNWmtkVFYxUXliR0UzV210M2JUVk5UV2xCYkhOMEsyMWFUV055WlUxeGFXSklNbmt3V2xWdVRURTVWWEJ0Vm1sc1ltcGFUbEpVYWlZamVFRTdRVUp0T1RCdFR6TlZZVzVYUzAxcFFWb3hSMnQzVDJjeFQzTjBSRTlSVFRaTVFtbGtTRzE2TW05Tk1tSkRSVWhCYms4eGFHSk1aMGR2YkdGVWFGa3lNVmhEYUhKR1dGbHZZbkpwY1NZamVFRTdUR2hsYUVkV1UwUlpRMjVXYUV0a2MzYzRjMWNyUWxwV2NGVXpWR1pPV201cE5XMU5jM1F3SzFOMFRURlhWVTlrUVhBNVluUnpUWGRhVDFKR1J6VlRNazk0VmpKTGRYaFdNa3QxZUNZamVFRTdWakpMZEVoQlZXOWxXV0pJVFdaSlIyTlZiM1pWTmpWeFRsUkdlazFhVTBjM2FqWTFiM000V0U5NGJFeEtWak42VjFSRWJGSkxTRnBMTlZSaVdVTndUbUpuTlUxVFdrTmhhVEZyUkNZamVFRTdNbmxaYlc1NFZrWTNTVVIwYkRCS2RHTTROa1Z0WjBNeE1ucGFObGwxZEhvMmJFRlVRMjFrV205Qk5raFZObTl2UzFrMU1USnJhVWhVTldONFMwTnNZbVpPTjJsRWFIbHVZV2Q0ZWlZamVFRTdURUZoVTFad1QxTlJNV2x5YzFWUGVGWXlTM1Y0VmtWU1NHTmFRWE4zYlRGcFpIaHRUR3RpYjAxeE1HdHRiM3BYV2pOTmVITjNNREE1VFRGSFZucHZUV2gwWldkNlFXMDFWVlZtYkNZamVFRTdSRmszUmxoWmNUZEdXRmx4TjBaWVdYRTBORVpWY0VZeWVYRlpXbWR3WW1SNFZrSjZXRm8wVDFKRFUxTXphMEo2VXpacVJUVjFUMU5WZW5kRlNFNVViSGgxV0VkVFJrMWxXVXBFV2lZamVFRTdlRTlEUkVKVVJYcGlUV1ZUUVdGd1drWkhWMHhpY0d3d1FUUjFWRXRzYkRGRlpEZ3lkVzFNY1RnclVrcHliRk5EWXpaeVVUVkxaRXh0YTJ3d01XUTROamRTTlVoWWVrdEZhMGRpTHlZamVFRTdRVUY1WVdsdlRtMWFSWE5HZFZSUk1XbHljMVprYVhKelZtUnBjVWxwUnpSNVJXMVpWR1Y0V0dOYWFWcERNMUZhVm5CTE9VMHhiV04xWW1wYWFuQjVPVTB4VDFWMVpFSnJSbk5PYUNZamVFRTdiVUpPZVZsdk4wdEhlREpMZFhoV01rdDFlRll5UzNWNFZqSkxjbGRIVWtsVFJVNU9TRlZhYWxwSlRuTlRiSFI2WWtFMWNtTXlSbmxKVkZOeE5IUmxkV0Z1VUdkamNVOVNURnBaU3lZamVFRTdXbkZhTkZjemVFWkJjbFJMYW1waGNGcElSRVZTWVVwYVNGQkhRMDF6YVVkcFkydENaRkZpU0UxNlJFdHVRbmx3U21WWE9VTmpNekpyZVRBMmRreEdTamR0VDJoUFpGWnZjemRuZWlZamVFRTdRMEpyV0U5dE1DdFdjRXRuZVRWMFkyTXlRMjFTYkRSTFIzRlpWbVIyYVdoeVJsaFpjVGRHVlZwRGRuaEVTM0JHYzBGVWJsUTBPWGh0U0d4TVprRk5kREJ0VUhCdGNucHNlbU5aV2lZamVFRTdaSEEyWkUweFYxVjFZa0ZLTjJKcVdWcG5lV05yU1haTGJXSnpWbVJwY25OV1pHbHljMVprYVhKelZtUm5WbGw1TVhsRmIzTm5WVkJNUTBOTmIyNXFkRzFLU1VNMGRHUnFkRzFFYkNZamVFRTdkMDUzZVVwUVpWY3ZSM1V5WVhaS2NHdHVTMnM0TDNkck5XaFVkMVV3VTNwTFNXeEdZM2cxV1RKMmVGWmtXRUpIVmpoTVRHcDBWRzFXVTAxeloxZDFZVlF6YTFFemVscFpTakEyTHlZamVFRTdTMFZwZGtrMlJUVXdWMnA2VDNWNVFrczFWak42Y1dSTWJtTlpjVUpUY0hwbFdXTjZRbTkzYmsweVQxSmhZVTFDZVRCVVYyeHdhRTlUTkd0Vk1UWk1aVWRRUlhSUE9VWjJSRWhwVnlZamVFRTdia05GTkRoVE1HMU5SblZoYW1KTlpWVXlNRkpVZWxRM1l6ZGlXbWhhV25WU1EweExkRXRuY0ZSaVRscHRhelZ0VFUxeWMxazJRVnB4T0doak1rRlVhVVZpV21sVFluZHBUWEphVHlZamVFRTdlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1YzUzNSYVkwSkRZbEU0TUdVeVZsTm5ka1ZyZFc5dlFVUnRTR3Q0VGxVMWMxZDJiVFJyTldkYVkweG9lWGx3VlRGNVFUTllUVVJLYVNZamVFRTdXVVJOYVVseWMyVlBXV3R6WW1aSVRYRkhOVUpJV0VscFJFMDFWVVJrVTJjeGVrdDRRbmhqYXpCcmRrZENjbTAwTURCeFpHWnJTMVo1T1dNMlJGUmFia2RLVlRGWGNIcGxXV00zUmlZamVFRTdSWGgzVmtoVVRtaEVUM3BCVWtOWFVtSjBiVkZOZWsxU1dDOXZNRzUwYkdkNlNqUkhkakJaWmtSRU5Ia3JSekVyYVhvMFdTdE5kbWh5YkRCekswZEJOV3NyUjJvMFRsQmhieko1YlNZamVFRTdWMVp6UlVVMWMySkZhVzB5V1dWVVNUVkZTVTFxTURZeVNYQjBiWFo1ZW1OeFJWZFJNbk5rUzFwblZFeHJlRU5hVW1waVRXTjBiMVpqWjNsa2FYSnpWbVJwY25OV1pHbHljMVprYVNZamVFRTdjbk5XWkdseWMxWlZjRkowYTFORlJrcGtWRWgzYmt0d1VtTllTMWRIWVc5VFF6SlpiVk5FY21OcmJVOVlSWGhFU0daTlJFcHFZMk0xUm5GWWFFaG1UVmRYU201SVRYRnBLekkyTlNZamVFRTdXRFJVV2pSNWFreGtNVGMxV2tkRVExZFdRVlI1TVhwTmVHSlBVRXRUUTJNeFQySk1SbXR3Y0VwaWFWaG1UbTVwZW05VVYzcG5OVlY2V1ZrNVVUTlJWSFV4YzA5UlJ6SmFWV00zYkNZamVFRTdVV2xxYXpCeGJ6WmFXVTAzWTAxaEx6bEZaalZQVXpoa2JEUmlkakJTTjFrclQzWm9jbXd3YWpKM1NFOXVkekJXUm5CV1JEQjVkVmRhYlUxaFdUSXlibFUzV21wNmVYUnJXVXAwWVNZamVFRTdNblpIYlRKWmN6VjBPRmx3YmtSR1ZFMWhVbUpSUlZOdmVXOXpNU3RDVEhOV1pHbHljMVprYVhKelZtUnBjbk5XWkdseWMxWmthWEY1VkhCblVWVnVNVVpMY1dObldFWjVhR2hsY2lZamVFRTdlRzF5V21wNlJIRTRiMWxzWlRGRVNFMVRZMWhEYTFWRFdsTk5lSEJSVW5oUEszTkllSGxJUVc1cFYyMWpia05KYnpSc1NqTnliSE5YU2t0dFpEaDJha3BEZEVGMmVGcHNVWGxMYmlZamVFRTdLMjVSTVhCMGJXSkVTek0wZDNsMlZISk5SVVJpVFhGUFZqSkhTMHRrVVRabFMyUk5jMGRXZWtKQ1YwZHVSSGQzSzB0NU5FY3ZNR05RUkVRMGNUaEVXVEEwWlVkRWVGVTRRM0ZzWnlZamVFRTdRako1U25sd05FVlNTR0ZCWkhOeVRUSlphV2x2TkVGTmNrMXRVVU5KVm1GYVYxTjZXR2RaUlhRMFJtUnBjbk5XWkdseWMxWmthWEp6Vm1ScGNuTldaR2x5YzFaWGRVNXpWVXBrWmlZamVFRTdVakZWTlVWMFIxRk5VekZsTXlzeGJFMW5Oak5PUm1obGNGRXdXVFZxVkVSeVdtaEtjRlpKVDFrNFp6RnhTa3A1ZFd4WGF6UXdjbkUwVm1KVlZrOVVRMjk1TVdweGQzazJRMmhzUnlZamVFRTdhekk1WVZwc1VVeHNOR2Q2VUZNM1kyTldNbnBKYVZoYU5HOXdPVVJCUzJSTmN6UnVUV2xHWWpCR09FMVFSWHB3TTI5cVNHbFhiUzlTU0docWVFeFVXV2xIUkdsVVV6UlNha0poTUNZamVFRTdka00wVEZNeVFtZFRNMmx5YzFaa2FYSnpWbVJwY25OV1pHbHljMVprYVhKelZtUnBjbk5XWVVsNFZrUllSV1pKU0VGWGRWRlRSRlZ5U1hOSGVYRlVhRFZOVm5OUE1XSlVWek5QV1NZamVFRTdPRE5ZV2sxQ1dYcGtNbFJMWTNnMVQweE1SbE5ZVUVWUlkzSk1XSGR4V2tKM1NYQnpTMVJwZEVzNFRVSlpOVWxOYUVNd05EQXZWREphYUd3d1Z6WkhSV3hzSzJ4aFkzZEJObHByZUNZamVFRTdZemRHWjFwYVdWZDRWbEpzTkdSb2FtaFRZWGh3VVZwT2VVRkdVMjFMV0ZWM2NHUlVSbGhWZDBzelZFWllXWEUzUmxoWmNUZEdXRmx4TjBaWVdYRTNSbGhaY1RkR1dGbHhOMFpZV1NZamVFRTdjVGRHV0ZseGMyUmhha0ZuY0daa1VWWkNNbmxLUkZaSlRXSXhUM2x4UkhSc1JXOTFTbXRuZUZoVllrRTNOMXBxZVdrMFQxTkRVVE5HYjFGbGJWWkZUMDVMUzBWaE0yRjJWRWt3TVNZamVFRTdPRXMxVEZwcFpXMU9Ta1ZWZVhNM1NtbFNkR3huYVROUlozbFVWRXhCTVVjeVdGSnBOV1ZQUkVzNVVIUmhTMDV6ZVVsb2VtOVNWSGt6YW05Q2JHOUVhMUpEUzBGNVZFNTJSa3h6VmlZamVFRTdaR2x5YzFaa2FYSnpWbVJwY25OV1pHbHljMVprYVhKelZtUnBjbk5XWkdseWMxWmthWEp6Vm1ScGNuTldZVWw0VmxOcmFuRk5RbGxyU2xwbFYyZFpTR0pMZVVkdFZWVm5kamxPY2lZamVFRTdXR0pMY0ZKalYyVk9TVXgyVTNSNmRHeEtaelJ6YzFOWWRuQktjakI1U0VFeGJrVnhVVFpUWVdwaVEwbEtSMHBPTjB4VGNVVmlXbHBIUkdaRVIzbERlREF2YWxSaVRHOTRZM0ZGUlNZamVFRTdPSFJ5WTB0UGJWZG5UMVJIUzA1U1lVUktUbWRZTkZWMWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmlZamVFRTdiMnBHUTJwTVJVUm5jRUpEUVhWTVRVMVBiVkZKWVhCUlV6Sm1WRUZVTUhsQ2FUQnVSMmN5TUdkV05scElaMWxsUlhGU05sTkJaVzFKWjJ0WmEyWmlObU5HY0hScmVFWjBha0pOYnlZamVFRTdURmxNTW5sWlJHRkpiM1JGYjAxck1rRkxaMGRHVEhOV1pHbHljMVprYVhKelZtUnBjbk5XWkdseWMxWmthWEp6Vm1ScGNuTldaR2x5YzFaa2FYSnpWbVJwY25OV1pHbHljMVprYVNZamVFRTdjbk5XWVVsNFZsbDVRVFJGVlhCT1FVUXlkMVY0Y0ZST2NYWm9hbE5QUm5SaVdtWkVSMncwVmxaSlVVOHlSMjFXUzI5VlJFWkxObTFHVEhOV1pHbHljMVprYVhKelZtUnBjbk5XWkNZamVFRTdhWEp6Vm1ScGNuTldaR2x5YzFaa2FYSnpWbVJwY25OV1pHbHljMVprYVhKelZtUnBjbk5XWkdseWMxWmtWRVpYY1ZseE4ybE5WbVI0ZUZaMWJVdDFlRll5UzNWNFZqSkxkWGhXTWlZamVFRTdTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5U3lZamVFRTdkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFNZamVFRTdlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUNZamVFRTdWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmlZamVFRTdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWlZamVFRTdTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNWNFZqSkxkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5U3lZamVFRTdkWGhXTWt0MWVGWXlTM1Y0VmpKTGRYaFdNa3QxZUZZeVMzVjRWakpMZFhoV01rdDFlRll5UzNZdkwxbzhMM2h0Y0VkSmJXYzZhVzFoWjJVK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dmNtUm1PbXhwUGdvZ0lDQWdJQ0FnSUNBZ0lDQThMM0prWmpwQmJIUStDaUFnSUNBZ0lDQWdJRHd2ZUcxd09sUm9kVzFpYm1GcGJITStDaUFnSUNBZ0lDQWdJRHg0YlhBNlRXVjBZV1JoZEdGRVlYUmxQakl3TWpVdE1EWXRNalZVTVRFNk1UZzZNakV0TURjNk1EQThMM2h0Y0RwTlpYUmhaR0YwWVVSaGRHVStDaUFnSUNBZ0lDQWdJRHg0YlhBNlRXOWthV1o1UkdGMFpUNHlNREkxTFRBMkxUSTFWREU0T2pFNE9qSXhXand2ZUcxd09rMXZaR2xtZVVSaGRHVStDaUFnSUNBZ0lDQWdJRHhwYkd4MWMzUnlZWFJ2Y2pwSmMwWnBiR1ZUWVhabFpGWnBZVWx1YzNSaGJuUlRZWFpsUGtaaGJITmxQQzlwYkd4MWMzUnlZWFJ2Y2pwSmMwWnBiR1ZUWVhabFpGWnBZVWx1YzNSaGJuUlRZWFpsUGdvZ0lDQWdJQ0FnSUNBOFpHTTZabTl5YldGMFBrcFFSVWNnWm1sc1pTQm1iM0p0WVhROEwyUmpPbVp2Y20xaGRENEtJQ0FnSUNBZ0lDQWdQSGh0Y0UxTk9rUmxjbWwyWldSR2NtOXRJSEprWmpwd1lYSnpaVlI1Y0dVOUlsSmxjMjkxY21ObElpOCtDaUFnSUNBZ0lDQWdJRHg0YlhCTlRUcEViMk4xYldWdWRFbEVQbmh0Y0M1a2FXUTZaR0l3T0dNNE1XRXRNMlExTXkwME0yVmlMVGczTnpVdFpEWTBOMkl4TWpVek1HTTFQQzk0YlhCTlRUcEViMk4xYldWdWRFbEVQZ29nSUNBZ0lDQWdJQ0E4ZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDU0YlhBdWFXbGtPbVJpTURoak9ERmhMVE5rTlRNdE5ETmxZaTA0TnpjMUxXUTJORGRpTVRJMU16QmpOVHd2ZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDRLSUNBZ0lDQWdJQ0FnUEhodGNFMU5Pazl5YVdkcGJtRnNSRzlqZFcxbGJuUkpSRDU0YlhBdVpHbGtPbVJpTURoak9ERmhMVE5rTlRNdE5ETmxZaTA0TnpjMUxXUTJORGRpTVRJMU16QmpOVHd2ZUcxd1RVMDZUM0pwWjJsdVlXeEViMk4xYldWdWRFbEVQZ29nSUNBZ0lDQWdJQ0E4ZUcxd1RVMDZTR2x6ZEc5eWVUNEtJQ0FnSUNBZ0lDQWdJQ0FnUEhKa1pqcFRaWEUrQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh5WkdZNmJHa2djbVJtT25CaGNuTmxWSGx3WlQwaVVtVnpiM1Z5WTJVaVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThjM1JGZG5RNllXTjBhVzl1UG5OaGRtVmtQQzl6ZEVWMmREcGhZM1JwYjI0K0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeHpkRVYyZERwcGJuTjBZVzVqWlVsRVBuaHRjQzVwYVdRNlpHSXdPR000TVdFdE0yUTFNeTAwTTJWaUxUZzNOelV0WkRZME4ySXhNalV6TUdNMVBDOXpkRVYyZERwcGJuTjBZVzVqWlVsRVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThjM1JGZG5RNmQyaGxiajR5TURJMUxUQTJMVEkxVkRFeE9qRTRPakl4TFRBM09qQXdQQzl6ZEVWMmREcDNhR1Z1UGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOGMzUkZkblE2YzI5bWRIZGhjbVZCWjJWdWRENUJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlPUzQySUNoTllXTnBiblJ2YzJncFBDOXpkRVYyZERwemIyWjBkMkZ5WlVGblpXNTBQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4YzNSRmRuUTZZMmhoYm1kbFpENHZQQzl6ZEVWMmREcGphR0Z1WjJWa1Bnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBOEwzSmtaanBzYVQ0S0lDQWdJQ0FnSUNBZ0lDQWdQQzl5WkdZNlUyVnhQZ29nSUNBZ0lDQWdJQ0E4TDNodGNFMU5Pa2hwYzNSdmNuaytDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2p3L2VIQmhZMnRsZENCbGJtUTlJbmNpUHo3LzRBQVFTa1pKUmdBQkFnRUFTQUJJQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUFTQUFBQUFFQUFRQklBQUFBQVFBQi85c0FoQUFLQndjSENBY0tDQWdLRHdvSUNnOFNEUW9LRFJJVUVCQVNFQkFVRkE4UkVSRVJEeFFVRnhnYUdCY1VIeDhoSVI4ZkxTd3NMQzB5TWpJeU1qSXlNakl5QVFzS0Nnc01DdzRNREE0U0RnNE9FaFFPRGc0T0ZCa1JFUklSRVJrZ0Z4UVVGQlFYSUJ3ZUdob2FIaHdqSXlBZ0l5TXJLeWtyS3pJeU1qSXlNakl5TWpMLzNRQUVBQjcvN2dBT1FXUnZZbVVBWk1BQUFBQUIvOEFBRVFnQnpRSFlBd0FpQUFFUkFRSVJBZi9FQWFJQUFRQUJCUUVBQXdFQUFBQUFBQUFBQUFBSEFRSURCQVlGQ0FrS0N3RUJBQUVGQVFBREFRQUFBQUFBQUFBQUFBVUJBZ1FHQndNSUNRb0xFQUVBQVFJQUFRSUNQbHNBQUFBQUFBQUFBZ0VERVJJeEJCTUZCZ2NJQ1FvVUZSWVhHQmthSVNJakpDVW1KeWdwS2pJek5EVTJOemc1T2tGQ1EwUkZSa2RJU1VwUlVsTlVWVlpYV0ZsYVlXSmpaR1ZtWjJocGFuRnljM1IxZG5kNGVYcUJnb09FaFlhSGlJbUtrWktUbEpXV2w1aVptcUdpbzZTbHBxZW9xYXF4c3JPMHRiYTN1TG02d2NMRHhNWEd4OGpKeXRIUzA5VFYxdGZZMmRyaDR1UGs1ZWJuNk9ucThQSHk4L1QxOXZmNCtmb1JBUUFBQXdBQkFRT0NGd0FBQUFBQUFBQUJBZ01SSVFReFlRVUdCd2dKQ2hJVEZCVVdGeGdaR2lJakpDVW1KeWdwS2pJek5EVTJOemc1T2tGQ1EwUkZSa2RJU1VwUlVsTlVWVlpYV0ZsYVltTmtaV1puYUdscWNYSnpkSFYyZDNoNWVvR0NnNFNGaG9lSWlZcVJrcE9VbFphWG1KbWFvYUtqcEtXbXA2aXBxckd5czdTMXRyZTR1YnJCd3NQRXhjYkh5TW5LMGRMVDFOWFcxOWpaMnVIaTQrVGw1dWZvNmVydzhmTHo5UFgyOS9qNSt2L2FBQXdEQUFBQkVRSVJBRDhBbVlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFVd2lxcW1GVENZUXNLNFZNS21Fd3FLMkZjSmhXNFRDRmhjWVZ1RXdoWVhZVmNLekNyaEN3dXdpbUVWVXNMaFRDQXFBS0tpZ0NvQUFBQUFBQUFBQUFBQVAvOUNaZ0FBQUFBQUFBQUFBQUFBQUFBQUFBVUFBQVVGQlZWVENwaFVyVlJXd3JoVXdyYTFXMWtMb1FYMWt0eFN5c2x0WnFXVjBKV1RGR0tZSzNGTW1LV1YxNEdmRks0cHJaTlZ5WVdTOERZeFM3Rk5hbHhmU2F0bFNNalBTcXRLc05KTDZTTEsyTXJKaFZXVXF1cFZWWkdDNVZhcXFvcUFBcW9xS0FBQUFBQUFBQUFBQVAvL1JtWUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGRlZLaXFpbGFsYXJhMVVWaEFyVmJXU2xaTWNwcVdYcENWZFdUSEtiSE80d3p1cll4ZXNzak5LNHhTdXRlZDVnbmY1RmJHWjd5MFc1VzhzcmZhTXNpT1JZNjVFY2l0dkU5WVVMZzlISjZ0TDd5ODFISXEweUk1RlM4YTY4aTRQVnBlWkkzWGxSeUk1Rm1oZjVGV0V6em1vdlVqY1pZemVkQzgySVhGOElzZWVuWWJ0Skw2VmEwSnMwWkw0UmVNMHJMU3E1anBWZlNxcnpqQmNxdFZWV3FnQ2lvQUFBQUFBQUFBQUFQLy9TbVlBQUFBQUFBQUFBQUFBQUFBQUFGQUFVRlNxbFNxMnRWRllLVnFzbFZXVldHY2xJeGVrc0NVMkNkeFM1Y2F0MjZzakZrU1U3SzY1ZGExeTh4WGJ6VHUzK1JlYzB6TXAwV2U1ZjVGcnp5STVGcTNML0FDTFduZmVVWjJiSlFia3NpT1JZNjVFY2kwWlgyT3Q1Wkdka1MwSG9acU9SVnBrUnlMek1uSzB2S1hpWFhrUFdoa1J5TFp0NUVQRmhlYkZ1OHZoTThaNkQzTFY3a1czYXU4aThTemViOW02OVpabURWcFdIcjI3alloSjV0cTQzTGMzckNMQXFTV0c1R3ErbFd2R1RMR1MrREhtZ3pVcXJSanBWZlNxNTV4WEtyYVZWRkZWVkFVVkFBQUFBQUFBQUIvL1RtWUFBQUFBQUFBQUFBQUFBQUFBQlJWUUJTcXEydFJWU3RWa3FycFZZcHlXeGl2bGd0bkpyWEpycmx4cDNycXlNekpweVdWTHQxbzNyeGZ2UFB2WDNqTk1rS05GZGV2dEs3ZjVGWmR2Tk81ZWVNMHlTcFVXVzVlYTg3ckZPNHgxbTg0ek11V215U3VMSzNHT3NsdUtXMlhyQ1JteFpTYkRpakNXVmJ3dHFOeHNXN3JRakptaE5kQ0x5bmtlclp1dCt4ZHhualdwdCt4Y2U4a1VmWGtlMVp1TjIxTjVGbTQzN1Z4a3l3Uk5hRDBvVFpveWFOdWJZak42d2d3WjIzU1Mra210R2JKU2E2dzhveFo2VlhZV0drbDFKRmhiWlpjS3JIU3E2bFZMQXVGTUtxZ3FLQUtnQUFBQUEvOVNaZ0FBQUFBQUFBQUFBQUFBQUFVQUNxbGFxV1ZUQ3NyVld0V09VbHNabDBJS1NrMTdrMTA1dFM3ZGVVMVI3MDVMS3k5ZGFGKzh2djNYblg3enhtcUpHalNXWDcyTzgrOWRYWHJ1TzBydHg1Um5TbEdrcGN1TmFjeWMyS1Vsa1lzNlNRbEpiV3FsYXFMWHJDQmhNS2dMbFJSVUYxS3NzS3NWRjhWMHJ5bnR6YnRTYjFtVHo3ZFczYXF5cWNxT3RvamIzcVdadDYxY2VWYW0yN2R4bTA1RUxYbXQ3MUxkeG5qY2ViQzZ6eHVzaUZOSFR6UFJqY1pJM0hueHVzc2JxdDVieGpNOUNOeGZHYlJqZFpZM1ZzWkZMeE4yazE5Sk5TTnhrak5aR1ZXeTJhVlhVcXcwa3VwSlpHQ3NJc2lxMmxWY0tpcXFxZ29xcUFBQUQvOVdaZ0FBQUFBQUFBQUFBQUFBVUFCU3RWSXhDdFZsYWtxc2NwUEthZXd2aEJXVW1HY3ljMnRjdU1hZXJZZTBraWwyNDBiMTNIWDNyclF2M2NkaXpWbWRScE1kKzY4Ni9kWkw5MW9YcmkyOHl5bEtOSmp1M0dwT2ErNU5yeXFyQ0tRcHlXRkpWV1ZxcldxMWM5NFFGQUZ3QUFxb3JRZ3BGZFJmRlpSa2pSNnlTMlhoVm1zUVo3Ylp0MWEwR3hDcVFvMDBSYlRWdDdidHliTUp0S01tV00wbFNwSUt2VnRXOUc0eTB1dENseGZTNnlZVW1CUFVlakc4eVJ2UE5wZFh4dkt4cFBLTlI2a2J6TkM4OHFON2tXYUY3a1ZrMUpTOGIxbzNXYU54NWNMelloZGVFMU5mQ2Q2VWJqTEdiUWhkWjRYSGpOSTlJVE55a2w5S3RhTTJXTW5sR1ZmQ0xOU3FxeWxWMUtyTEM1VlZRVVZWQUIvL1dtWUFBQUFBQUFBQUFBQUFCUUZCU3EydFZhMVk1VmVjODFoZENDa3BNRTVycHlhMDVzS3RWc1BlU1V1VGFsMjR1dVRhZDI0amF0ZGwwNUZsNjQ4KzljeDJhOU5vM3A0N3d2TnN4U0ZHUmd2VGFWMmJOZGsxTGxYdkpHeWtxVXJIT1RGV3E2VldPckpsWmNzRktxS3FMbDRBcUFxQUswS1VYVW91bGhaZWMwMWdwUmxqUmJHakpHak1vMDdLUHRvcTJJUlpJc3NXT0srbFV2UW8yNUEyMVY3ZXpVcXVwSmh3cTRwSlU2U0ZyVmJNV2ZGbVRHdldaaTJSQ214SnAyMVM2dXBkYWVURmFYRmJ5M2xHZHZ4dk0wTDNJdk1wZFpZWFZrMU12RzlhRjVzMjd6eDRYV3pidlBDZWt2bG5leGJ1OGkycmQxNDl1OXlMYnQzV05QVGU4czcxWVhHZUUzblc3amF0ellzOGoybG1ic1pNbEt0YUVtV05YaE5CNndpelVWV1VxdVdMbFZWQlJWLy9YbVlBQUFBQUFBQUFBQUFGQUZLcXJhcll4Vmd0bFZobkpmS3JCT1RGcXoySVBTV0RIY2sxYmsyVzVKcTNKSW0yaXJiMlhUbFlyazJwZGt5M0pOVzVWRjFLbHF6S2NyQmRrMHJ0VzFkcTA3cXRPYXpGbjBvTlM3VnJUcTJialZtejZVV2ZUWXBNZFdTU3lyTGxaRUZvcUxseWlwZ1Z3Q2xsVEFyU2l1QmRTaTZFTEt5YWF3cFNpNmxGYVVYVW95cVZPeXc2MWFFSUZLTWxLS1VvdW9sTFo2TnV0RUpiVmJSYjdWZFJkaFdHRkwwYVZoQlcwVjdNWXI4S21LV1lWS3lac3NpTm5xV1YxWktWa3NySmJpbnJDVjR4bVpNV1l0aXhSaWxid3ZPTXpQU2ErTnhxMGt1cE5TTXFsNG05QzQyTGQxNTBiak5DNDhwcEY4Sm5xMjdyYnRYWGtXN2pidFhXTlVwdmFTZDdOcTYzTFZ4NDltNjNyVnhoVktiSmttZXBibTJJU2VmYW0yN2NtSlBLeUpZdHVOVjlLc01hc2xLdkNNSHJDTElLVUZpNS8vOUNaZ0FBQUFBQUFBQUFBRkZWQVVxdGt1cXNrODU0cm9NVTZ0ZTVWbm5WcTNLc0N2TmFQZVNEQmNrMUxrbWU1VnEzS29TMmllM3N5bkJoblZyVFo1MVlKbzJhYTFaY2tHdGNhdHlqYm5ScjNJdlduTXk2Y1dqY28xcDBidHlMWG5CSVVwMmJUbWFzcUxLMFo1UldWaXk1WjN2Q1ppd0dCa3hCaVY5NGwxNGxtQldrV1NrRjFJTG9Sc3ZPYXBDREhTSzZrV1NrRmNTeXFVbGxpVmE4SVpPc3BGV2xGK0pNQ1Z0bm9XNUVXMDIxVysxVUNxMnRVeFFvMkVEYlJiUlpzMnF1RlRDdHJWU3RVaEpKWVJkU3JaWFZrdHJWYldxbGF2YUVySGpNdXJWYldxbUZUQ3VzTEl4VndxWVZNSXJZVzJWY0t0SkxNS3BZVXNzbEpNc0o2RzFzSytNdERvcEdWV0VXL2JtMnJWeDUwSk5pM05qenlQV1daNnRtNDM3TnpHZVBhdU42emN4bUhWa1pNa3oyTE0yN2FtOHF6TnZXWnNDcEt5cEpub3drelJxMWJjbXhDckVtZ3lKWXMxRlZ0S3F2SmUvL1JtWUFBQUFBQUFBQUFBQlJWUUZLc2NtU3JISjVUcm9NTTJyY2JNMnJjUnR0R1RzaW0xYmxXcmNiTnhxM0VIYlJrN05wc0UyR1ZHYVRIS2lPbWphc21WZ2xSZ25GdFNveFNpdWttc1BlV1pwVGd3VGczNVFZcFcyWFRxc2lTZG9TdHJLMjI5VzBzcmFaTXRaN1FxdFBKWmt0dDVLTWx2V0ZXeXBHczFxVzExSU0rU3pFTXVqR3pGaTFiYUxHVHNPSU1TeTFvc3JSTTJ5MDdOaEUyMFcxMisxWTYwV1ZYeVk1VlQxczlHM0lXMmkybXpadFZ0YXJLMVZsVlpXcVRweVdFWlVxMlN0Vk1LbGFxWVh2Q0RIak1yV3FtRlRDTHJDeXlZVkFWVXNnQW9BQUt4cm9haFRIQm5qVm50eWEwYXMwS3ZLYUQwaEZ2V3BONnpMR2ViYXEzYk1zWmkxSVBlU0wxYkVub1daUEtzU2VqWXFqNnNHWFRpOUsxVnN3cTA3VlczYnF3WjRNcVdMWWlxdGl1ZUVYby85S1pnQUFBQUFBQUFBQUFGRlZBVXFza3ZxdGs4NTRMb05lZEd0Y28yNTBhMXlpUHRvbHRIdkpGcFhLTlc1UnUzSXRXNUZDVzBTMjltVTR0U1ZHT3RHZWRHS3RFWlBMYXNtV0xGV2kyc1dXdEZ1QjVQU0VXR3NWbFlOakVtSWVrc3k2RTdWcmJXMXROdkVLVmc5Wlo0cTNtMkdwa3BiVzIyNndXU2d5S2M4Ykx4cVY3RUxlMWF3V1ZvMkpVWUpwZTJXMWpCR1cwVzAyKzFZcE1VcXNrNnNNcXRsdGpsaGFJYXZiUkdPVHJKVllwVlh5cXhTcW5xRUlXSU1DZXJHS3l0VmxhcnFyS3M2V0R3akVGQjZMYklBS0FBQUFBQUJUSENnTWxHV0RGUmtnc21YUWJWcXJkczF4bWpiYnRuYUdOVWU4ajBiRlhvMks0enpyRDBiRzBJK3F5NmIwTExjdHRPeTI3YVBxTXVSc1JYTFlybmhGNndmL1RtWUFBQUFBQUFBQUFBQlJVQlJiVmNwVmJOQldEREtqQk9MWmxSaW5GaVZaTEwxbGkwYmtXdGNpMzdrV3RjZ2liYUtWdlpWT1pvVGl4U2kzSndZSlFSVldreVpabXRXSmdaYXhXNGxpUmtlbDRsbUpNU3Z3R0JTOEsyTTYzRXFZbGt3R0JmTEs4cHFqREtMRktMWnJGaW5GazA0V3JGcTFXcE9qV3VVYmx5TFd1UlM5c3NiRVlJdTJpZU5xMUpzRW14Y28xNTBiSmJIVXR5S3FUUnNzVW1PVEpKanFucUU5cEI0UmlzcXNxdnF0cWtKSXFMUlZSNndVQUFBQUFBQUFDbU9GTWNHU2pMQmlpelFXVEw0TmkwM2JOTVpwMnFONnpUR1l0U0wya2I5aWowYkZNWm9XS1BSc1V4a2ZWaXpLYmRzMGJsdHEycU51M1JnVkdWSXpSWHJZcm1QRjZ3Zi9VbVlBQUFBQUFBQUFBQUFBRkNvS0N5dEdPVVdhdEZ0YVBPZVd5dWhGcXppd1RnM1pSWVpRWVZXbFplMHN6Um5iWUpXMi9PRERLMmphdHM5d1pFdFJveWd4MWkyNXdZWlJZTTlCZmVZd1Zvb3ZsUlpWNHhwV0huTlZWTUNtRmRSUzhGaDR4cVdWdGFNY29zMkJTdEhwTGFQR2VObHFUaTFia0cvT0xYdVFadEdleEZoVm9QT3VSYTA0dCs1QnEzSXB1Mld0YmtkVmxhY3FNVXFOaWRHR1ZHdzJ6VmJjeG9zVlZ0YU1sYUxhMFMxS2V6QmF4aTZ0Rk1ESmhGVmFLNERBdnNxS0N1QlRBQUdBd0FCZ01BQlRITUNzYWFIUUdTTkdhRkZrYU0xdWp5bWk5SVFiRnFqZXMwYWxxTGZzUnhtSlZpOTVJTjJ4UjZObWpSc1J4bm8yYUkrckZtVTROdTFSdHdvMXJWRzFDakJuaXlaV1dLNVNLcnhpOVgvL1ZtWUFBQUFBQUFBQUFBQUFCUlVCUlN0RlJTTUZWbGFNY29zMkJiV2p6bWtzcXdpMTVRWVp3YmxZc1Vvc2FlalpYd25hTTROYTVGdjNJdFM3UmlWTFoxSnFyVG13MXF6WFdyT1REbm9QQ2FzdXhTNmttdmkxMUpzYWFuWVd3ck5tbFJpak5kU1R6dkRZWDNqaEVsUmd1VVpxMVlwMWVzbHBGNVZJd2kxTGtXbmRpM3JqVXVwSzJlZU1MREFyUWFWeWpCS2padU5hYWR0bHEyNWd6eFk2cmNDNnFpYW8xYlI1MlZNQmlWOUtMcVJaMGxWZkJoeEttSmJPSU1sdmFGUmRZYTJKcXBpYXRySlNtU3FycnhsNFd0aVRFdGpKVlRKVlZieHdMd3RiRW1KYkdTcW1TcWw0NEY0V0RFMVhRam9xak5rcXErRnJSVkZJemtKVkl3WjdjRjBiYlBidHZHYWQ2eXlxMm9OK3pIR1liVnR1MllNU3BPOTVKV3pZaTM3TVd0WmczclVXQlZtWmNrR3hibzJJVVliZEd4R2pEbml5SllMNkxsS0t2SmUvLzFwbUFBQUFBQUFBQUFBQUFBQUFVVkFVVXdLaWd0clJqbFJscXNrdGpLUmkxYmxHbGVvMzdsR2pmZVUwandxVFBQdmJTMHJrbTVmMmw1MTZyRXFVMkZVcVdGdFpsTGpYblBRMXVUR0pQU2VVSzFxM28zRjlMalFqZFpLWFdOTlNlMHRkdVZ1TEpUWU1tclpYRklVMTBheXR5VFZ1Vlh6dU5lNU5sMG9XR0pWcU1WeXJYblZsbkpyeXFsS0UxaXd3cDUxdFNpbGFsRXJTcXZLRXpMR2pMR0xIQnNXNHMyU3M5cElxeGd2cGJaSVFiRWJUM2hXWk1zTExWcFo1QlhKRGRwWlgwc0w0VlhyQ1I1MlNESkhJUFJ5UVpJNUJXODVXOHQ1MlNPUU0wL0lQUnlSeUJrZ3ZPTHkzbjB5SDVCZEd3MzhrTHFXT1FValdJVTJuR3l6UXRObU5qa0dhRm5rSG5OVlh3a1lyZHB1V3JhdHUwMmJkdGp6MUh0TEl1dFFiZHVLeTNCc3dpeEo1bVJMQmZDak5HaXlOR1dsR1BORjZ3Z3VvQ3F4Yy8vOWVaZ0FBQUFBQUFBQUFBQUFBQUFBRkZRRktySkw2ckpDa1d2Y2FOL2FXL2NhVitpeU1HTlVlVmtSdEx6YjlYcVpFVXgzbDVFVXgzalBLamEwV2pja3hWbXV1dGFVbU5OSXdwcDdFV2VseGZTNjA4V3JTNDhacWFzS3pjeWFWdXRUSmhreGJlV3V2UFo1WEdHYzJPdHhaS2IwbGtzUEtlclpWbkpobFZXVW1PdFdWSmFNZWFkWEN1aXg0VjhXVkpQWVd3bVo3YmJ0VWExcWpkczBaTWxWbFVvdG0xQnQyN1RIWmhqTisxYmU4dFZJVW9XVmtiTEpTdzJZV21hTmw2UXFzdVdSbzVJNUJYSkhJTitsbFhKS3Q1cSs4dDUyU09RVnlROURKSmtrdk5MeTJoa2hXbGprRzlrbGRTeXBlYVhsdEtsbmtHU05sdDB0THFXbHNhcTZFakJDMHp3dHNrYmJMR0R5bW5Yd2xXd2d6UmlSaXlVaThacG5wQ0JHaStsQ2xGVmtZcjRLMEFXcXYvMEptQUFBQUFBQUFBQUFBQUFBQUFBQUJSYkpjdHFLUllMbEduZW8zcDBhdDZLMkx3cVFlVGtSSEhlVmtSRjdXUkVjZDVXUk1NZDV6UVJ0ZVY1RjZtTzA1dlF2eHgyaGRvOG93UmRXMFlLeVV4YWtsbGFySXlzZU16Sml6RnNPS01VdHZDWGpaS3pVckpqeFNtRldFcTJNNjZ0Vk1LM0NMNExieExxTWtHT2pOQ2owaEZkSzJMVkhvV0l0T3pGNk9ROGNaNlN6TXlqQnZXSVl6MGJNR3BrUERHZWxaZzlvVEpXakt5MjdiUEcycmJob1RZakJmQ2RueVNzTkxaa3RzVWdyaUZieHI3d3RmSlprdHNZZ3hCZU5XOExYeVdya3RueEN1Skx4bDRXQ2x0ZFNETGlWY1NwZUpXOExIU0M2a1YrSlhZRnNabGJDMmtWMUtLNEJiWlZGUVVWRlFCLzlHWmdBQUFBQUFBQUFBQUFBQUFBQUFBVVVxcVZCaWxScjNZdHFWR0c1UlNMeW5nOHkvREhlWmtSYngzdFhvWTd6c2lMYXlNR0RXa2VGa1JieDNuWG9QYXlJdDQ3emI5dkhlY1lJcXRJOHU1RmhrM0xzR3RPS3lNR0JQQ3d3MVV3cnEwV3FXSGxFVUFVRmFGS0xxVVZWZ3VqUm50eFk0UmJkcUdNckI3U1NzOWlEMDhoNE5TeGJlcGtQYmVrRWhRa2JtUThNWjZObURWc1F4bm9Xb3ZTQ1dveXMxdUxQR0t5RkdXbEYxbG1Td01DdUJYQXFyWlhyY0JnWEJaRnVBd0xnc2kzQXJnVkFVd0tnb3FBcUNpb0FBQS85S1pnQUFBQUFBQUFBQUFBQUFBQUFBQUZGVkFVclJpblJtcXNsUVd4ZzA3c0dsZnR2VG5GcTNZTFlzZXBKWmVKa1JheDNtWDdPTzkrL2FlZGZzckl3UnRhazhHOWFhZHkyOW0vWmFOMjBzakJHMWFielpRWTZ4Yms3YkRLMnRZczBqQmdNRExpQ2tGRnQ0VmxJc2tZTG8yMmVGcFZmTElwYnR0MnphVXRXbTlZczR5NkVHVlNwc21ROW5HZW5rUGFZYkZsNk5tMnZoQkowYWJOWnQ0emR0eFlyVUcxQ0srQ1JweTJGOGFMNlVVcFJjdVpFSUFxQ3FncUFvS2dBQUFBQUFBQUFBUC85T1pnQUFBQUFBQUFBQUFBQUFBQUFBQUFBVVVyUlVCaWxSZ3VRYlZhTWNvcVBPYUR6N3R0b1hyTDJMa0dwZHRMWXdZdFNuWmVIZXNOQzdZZS9kc3RLN1k1QmJHREFxMFhoWExEWGxaZXpjeUg1QnJ6eUg1QlpZWVU5RjVkYkpTeTlHdVEvSUZNaCtRTER6dkphVUxMWnQyR3pESWZrR3pieUg1QldFSHJKUlliTmprRy9aczR5KzFZNUJ1V3JQSUxvUVp0S2lXYlRldFcxdHEwMm9RWHdnejZkT3d1aEZtalJTTVY5S0tzcVdDdEZSVlZlQUFBQUFBQUFBQUFBQUFBQS8vMUptQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVWQVVxdHJSY3BVVVlaUllaMjIzV2pIS0tpeWFXeTgrNWFhdHl3OVdVR0dkcFNNR1BQVHN2SG5rUHlEQkxJZmtIc1Nzc1VySElMYkRIbW9QSXJrTnlDdE1odVFlcFhJZmtDbGprQ3c4N3lHaERJZmtHZTNrUHlEY2pZNUJsalpMRDFsb3NGdXp5RFp0Mm1TRnBtakJkQ0RJa3AyRnNJTTBZcXhpdnBSVjd5eWxLTGdWWGlvQ29BQUFBQUFBQUFBQUFBQUFELy8xWm1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVVkFVVzFvdUJSanJGWldETmdVclFVaksxcTIxbGJUYXJGVEVLV0ZrWkdya29wYWJXSU1RV0ZMd05lbHBmUzJ6WWxXa1N3ckNSWlNDK2tWYVVWd0tyNFFLVVZBWENvQUFBQUFBQUFBQUFBQUFBQUFBQS85YVpnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZGUUZCVUJUQXBnVkFVd0dCVUZGTUN1QUJVRlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSC8vWG1ZQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFILy8wSm1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUIvLzlHWmdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWYvL1NtWUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSC8vMDVtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCLy85az0iIHdpZHRoPSI0NzIiIGhlaWdodD0iNDYxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTg3LjIgLTk1LjgxKSIvPjxnIHN0eWxlPSJjbGlwLXBhdGg6dXJsKCNjbGlwcGF0aC0xKSI+PHBhdGggZD0iTS0zMjEuOTggOGgyMjEuOTZ2MjIxLjk2aC0yMjEuOTZ6IiBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbC1ncmFkaWVudCkiLz48L2c+PHBhdGggZD0iTTE2NC45MyA4Ni42OGMtMTMuNTYtNS44NC0yNS40Mi0xMy44NC0zNS42LTI0LjAxLTEwLjE3LTEwLjE3LTE4LjE4LTIyLjA0LTI0LjAxLTM1LjYtMi4yMy01LjE5LTQuMDQtMTAuNTQtNS40Mi0xNi4wMkM5OS40NSA5LjI2IDk3Ljg1IDggOTYgOHMtMy40NSAxLjI2LTMuOSAzLjA1Yy0xLjM4IDUuNDgtMy4xOCAxMC44MS01LjQyIDE2LjAyLTUuODQgMTMuNTYtMTMuODQgMjUuNDMtMjQuMDEgMzUuNi0xMC4xNyAxMC4xNi0yMi4wNCAxOC4xNy0zNS42IDI0LjAxLTUuMTkgMi4yMy0xMC41NCA0LjA0LTE2LjAyIDUuNDJDOS4yNiA5Mi41NSA4IDk0LjE1IDggOTZzMS4yNiAzLjQ1IDMuMDUgMy45YzUuNDggMS4zOCAxMC44MSAzLjE4IDE2LjAyIDUuNDIgMTMuNTYgNS44NCAyNS40MiAxMy44NCAzNS42IDI0LjAxIDEwLjE3IDEwLjE3IDE4LjE4IDIyLjA0IDI0LjAxIDM1LjYgMi4yNCA1LjIgNC4wNCAxMC41NCA1LjQyIDE2LjAyQTQuMDMgNC4wMyAwIDAgMCA5NiAxODRjMS44NSAwIDMuNDUtMS4yNiAzLjktMy4wNSAxLjM4LTUuNDggMy4xOC0xMC44MSA1LjQyLTE2LjAyIDUuODQtMTMuNTYgMTMuODQtMjUuNDIgMjQuMDEtMzUuNiAxMC4xNy0xMC4xNyAyMi4wNC0xOC4xOCAzNS42LTI0LjAxIDUuMi0yLjI0IDEwLjU0LTQuMDQgMTYuMDItNS40MkE0LjAzIDQuMDMgMCAwIDAgMTg0IDk2YzAtMS44NS0xLjI2LTMuNDUtMy4wNS0zLjktNS40OC0xLjM4LTEwLjgxLTMuMTgtMTYuMDItNS40MiIgY2xhc3M9InN0MCIvPjwvZz48L3N2Zz4g"; }
        // ChatGPT AI 서비스 아이콘 URL
        static get CHATGPT() { return "https://chatgpt.com/favicon.ico"; }
        // Claude AI 서비스 아이콘 URL
        static get CLAUDE() { return "https://claude.ai/favicon.ico"; }
        // Copilot AI 서비스 아이콘 URL
        static get COPILOT() { return "https://copilot.microsoft.com/favicon.ico"; }
        // Grok AI 서비스 아이콘 URL
        static get GROK() { return "https://grok.com/favicon.ico"; }
        // Perplexity AI 서비스 아이콘 URL
        static get PERPLEXITY() { return "https://www.perplexity.ai/favicon.ico"; }
        // 아이콘 로드 실패 시 표시될 대체 이미지 (Placeholder)
        static get PLACEHOLDER() { return "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPgo8c3ZnIHdpZHRoPSI4MDBweCIgaGVpZ2h0PSI4MDBweCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEyIDMuNTM4NDZDNy4zMjY4MiAzLjUzODQ2IDMuNTM4NDYgNy4zMjY4MiAzLjUzODQ2IDEyQzMuNTM4NDYgMTYuNjczMiA3LjMyNjgyIDIwLjQ2MTUgMTIgMjAuNDYxNUMxNi42NzMyIDIwLjQ2MTUgMjAuNDYxNSAxNi42NzMyIDIwLjQ2MTUgMTJDMjAuNDYxNSA3LjMyNjgyIDE2LjY3MzIgMy41Mzg0NiAxMiAzLjUzODQ2Wk0yIDEyQzIgNi40NzcxNSA2LjQ3NzE1IDIgMTIgMkMxNy41MjI4IDIgMjIgNi40NzcxNSAyMiAxMkMyMiAxNy41MjI4IDE3LjUyMjggMjIgMTIgMjJDNi40NzcxNSAyMiAyIDE3LjUyMjggMiAxMloiIGZpbGw9IiMwMzBENDUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMiA4LjE1Mzg1QzExLjI5MTkgOC4xNTM4NSAxMC43MTc5IDguNzI3ODQgMTAuNzE3OSA5LjQzNTlDMTAuNzE3OSA5Ljg2MDczIDEwLjM3MzYgMTAuMjA1MSA5Ljk0ODcyIDEwLjIwNTFDOS41MjM4OCAxMC4yMDUxIDkuMTc5NDkgOS44NjA3MyA5LjE3OTQ5IDkuNDM1OUM5LjE3OTQ5IDcuODc4MTcgMTAuNDQyMyA2LjYxNTM5IDEyIDYuNjE1MzlDMTMuNTU3NyA2LjYxNTM5IDE0LjgyMDUgNy44NzgxNyAxNC44MjA1IDkuNDM1OUMxNC44MjA1IDkuOTk2MjQgMTQuNjU2MyAxMC41MjA2IDE0LjM3MzEgMTAuOTYwNkMxNC4xOTU4IDExLjIzNjMgMTMuOTg4NCAxMS40OTk0IDEzLjc5NzIgMTEuNzM3MUMxMy43NjIyIDExLjc4MDUgMTMuNzI3OSAxMS44MjMxIDEzLjY5NDEgMTEuODY0OUMxMy41MzU1IDEyLjA2MTIgMTMuMzg5OCAxMi4yNDE1IDEzLjI1NTMgMTIuNDI2NEMxMi45MjM0IDEyLjg4MjYgMTIuNzY5MiAxMy4yMjUzIDEyLjc2OTIgMTMuNTM4NUMxMi43NjkyIDEzLjk2MzMgMTIuNDI0OCAxNC4zMDc3IDEyIDE0LjMwNzdDMTEuNTc1MiAxNC4zMDc3IDExLjIzMDggMTMuOTYzMyAxMS4yMzA4IDEzLjUzODVDMTEuMjMwOCAxMi43MTg3IDExLjYzMzIgMTIuMDQwOCAxMi4wMTEyIDExLjUyMTNDMTIuMTcxIDExLjMwMTggMTIuMzQ2IDExLjA4NTMgMTIuNTA1MSAxMC44ODg0QzEyLjUzNyAxMC44NDkgMTIuNTY4MyAxMC44MTAzIDEyLjU5ODYgMTAuNzcyNkMxMi43ODg1IDEwLjUzNjUgMTIuOTUwMiAxMC4zMjg5IDEzLjA3OTQgMTAuMTI4MkMxMy4yMDc2IDkuOTI4OTEgMTMuMjgyMSA5LjY5MjI3IDEzLjI4MjEgOS40MzU5QzEzLjI4MjEgOC43Mjc4NCAxMi43MDgxIDguMTUzODUgMTIgOC4xNTM4NVoiIGZpbGw9IiMwMzBENDUiLz4KPHBhdGggZD0iTTEzLjAyNTYgMTYuNjE1NEMxMy4wMjU2IDE3LjE4MTggMTIuNTY2NCAxNy42NDEgMTIgMTcuNjQxQzExLjQzMzYgMTcuNjQxIDEwLjk3NDQgMTcuMTgxOCAxMC45NzQ0IDE2LjYxNTRDMTAuOTc0NCAxNi4wNDg5IDExLjQzMzYgMTUuNTg5NyAxMiAxNS41ODk3QzEyLjU2NjQgMTUuNTg5NyAxMy4wMjU2IDE2LjA0ODkgMTMuMDI1NiAxNi42MTU0WiIgZmlsbD0iIzAzMEQ0NSIvPgo8L3N2Zz4="; }
    }

    /**
     * @class AISites
     * AI 사이트 이름과 URL 목록을 관리하는 클래스입니다.
     * 이 목록은 플로팅 버블 메뉴에 표시될 AI 서비스들의 정보를 담고 있습니다.
     * 목록 순서는 AI 목록 표시 순서와 동일하게 유지됩니다.
     */
    class AISites {
        static get LIST() {
            return [
                { name: "Perplexity", url: "https://www.perplexity.ai/", icon: AIIcons.PERPLEXITY },
                { name: "Grok", url: "https://grok.com/", icon: AIIcons.GROK },
                { name: "Gemini", url: "https://gemini.google.com/", icon: AIIcons.GEMINI },
                { name: "Copilot", url: "https://copilot.microsoft.com/", icon: AIIcons.COPILOT },
                { name: "Claude", url: "https://claude.ai/", icon: AIIcons.CLAUDE },
                { name: "ChatGPT", url: "https://chatgpt.com/", icon: AIIcons.CHATGPT }
            ];
        }
    }

    /**
     * @class BubbleConfig
     * 버블의 크기, 간격, 애니메이션 타이밍 등 모든 숫자형 설정 값을 관리하는 클래스입니다.
     * 모든 단위는 픽셀(px) 또는 밀리초(ms)입니다.
     * 이 값을 조정하여 버블의 외형과 동작을 커스터마이징할 수 있습니다.
     */
    class BubbleConfig {
        static get BUBBLE_SIZE() { return 50; } // 버블 버튼의 너비와 높이 (px)
        static get OPTION_ICON_SIZE() { return 16; } // AI 목록 각 항목의 아이콘 크기 (px)
        static get OPTION_MENU_GAP() { return 10; } // 버블 버튼과 AI 목록 메뉴 사이의 간격 (px)
        static get OPTION_ITEM_PADDING_VERTICAL() { return 10; } // 각 AI 목록 항목의 상하 패딩 (px)
        static get OPTION_ITEM_PADDING_HORIZONTAL() { return 15; } // 각 AI 목록 항목의 좌우 패딩 (px)
        static get OPTION_ITEM_ICON_MARGIN_RIGHT() { return 10; } // AI 목록 항목의 아이콘과 텍스트 사이 간격 (px)
        static get OPTION_MENU_WIDTH() { return 150; } // AI 목록 메뉴의 고정 너비 (px)
        static get MENU_TRANSITION_DURATION() { return 0.3; } // 메뉴가 나타나고 사라지는 애니메이션 시간 (초)
        static get MENU_HIDE_DELAY() { return 100; } // 마우스가 메뉴에서 벗어난 후 메뉴가 숨겨지기까지의 지연 시간 (밀리초)
        static get POPUP_WINDOW_WIDTH() { return 800; } // 새 창으로 열릴 AI 사이트 팝업의 기본 너비 (px)
        static get POPUP_WINDOW_HEIGHT() { return 600; } // 새 창으로 열릴 AI 사이트 팝업의 기본 높이 (px)
    }

    /**
     * @class AIFloatingBubble
     * AI 플로팅 버블을 관리하는 메인 클래스입니다.
     * 이 클래스는 버블의 생성, 드래그 기능, AI 목록 메뉴 표시/숨김,
     * AI 사이트 클릭 시 새 창 열기 등의 모든 기능을 담당합니다.
     */
    class AIFloatingBubble {
        constructor() {
            // DOM 요소 참조 변수 초기화
            this.bubbleContainer = null; // 전체 버블 컨테이너 (드래그 가능 영역)
            this.bubbleButton = null; // 버블 아이콘이 표시되는 버튼 영역
            this.siteOptions = null; // AI 사이트 목록 메뉴 영역
            this.hideTimeout = null; // 메뉴 숨김 지연을 위한 타이머 ID
            this.isDragging = false; // 버블 드래그 중인지 여부
            this.offsetX = 0; // 드래그 시작 시 마우스 X 오프셋
            this.offsetY = 0; // 드래그 시작 시 마우스 Y 오프셋

            this._init(); // 클래스 초기화 메서드 호출
        }

        /**
         * @private
         * 초기화 메서드: DOM 요소 생성, 스타일 적용, 이벤트 리스너 설정.
         * 스크립트가 로드될 때 가장 먼저 호출됩니다.
         */
        _init() {
            this._createElements(); // 필요한 HTML 요소들을 생성하고 문서에 추가합니다.
            this._applyStyles();        // 생성된 요소들에 CSS 스타일을 적용합니다.
            this._loadPosition(); // 저장된 위치를 로드하고 적용합니다.
            this._updateAlignment(); // 초기 위치 기준으로 좌우/상하 메뉴 정렬 업데이트
            this._setupEventListeners(); // 드래그, 호버, 클릭 등의 이벤트 리스너를 설정합니다.
        }

        /**
         * @private
         * DOM 요소를 생성하고 문서에 추가합니다.
         * 플로팅 버블의 구조 (컨테이너, 버튼, 옵션 메뉴)를 만듭니다.
         */
        _createElements() {
            // AI 플로팅 버블 컨테이너 요소 생성
            this.bubbleContainer = document.createElement('div');
            this.bubbleContainer.id = 'aiFloatingBubbleContainer';
            // 초기 위치는 _loadPosition에서 설정되므로 여기서는 기본값 또는 빈 값으로 둡니다.
            document.body.appendChild(this.bubbleContainer);

            // 플로팅 버블 버튼 요소 (메인 아이콘) 생성
            this.bubbleButton = document.createElement('div');
            this.bubbleButton.id = 'aiFloatingBubbleButton';
            // 버블 아이콘 이미지를 설정합니다.
            this.bubbleButton.innerHTML = `
                <img src="${AIIcons.BUBBLE}" alt="AI 아이콘" style="width: ${BubbleConfig.BUBBLE_SIZE * (2/3)}px; height: ${BubbleConfig.BUBBLE_SIZE * (2/3)}px;">
            `;
            this.bubbleContainer.appendChild(this.bubbleButton);

            // AI 사이트 선택지 메뉴 요소 생성
            this.siteOptions = document.createElement('div');
            this.siteOptions.id = 'aiSiteOptions';

            // AISites 클래스에서 AI 목록을 가져와 메뉴 HTML을 동적으로 생성합니다.
            let optionsHtml = '';
            AISites.LIST.forEach(site => {
                optionsHtml += `
                    <div class="ai-option" data-url="${site.url}">
                        <img src="${site.icon}" alt="${site.name} 아이콘" class="option-icon" onerror="this.onerror=null;this.src='${AIIcons.PLACEHOLDER}';">
                        <span>${site.name}</span>
                    </div>
                `;
            });
            this.siteOptions.innerHTML = optionsHtml;
            this.bubbleContainer.appendChild(this.siteOptions);
        }

        /**
         * @private
         * 필요한 CSS 스타일을 문서에 동적으로 추가합니다.
         * Tampermonkey의 GM_addStyle 함수를 사용하여 전역 스타일을 적용합니다.
         * 모든 크기 관련 값은 BubbleConfig 클래스에서 가져옵니다.
         */
        _applyStyles() {
            GM_addStyle(`
                /* 플로팅 버블 전체 컨테이너 스타일 */
                #aiFloatingBubbleContainer {
                    position: fixed;
                    z-index: 9999;
                    width: ${BubbleConfig.BUBBLE_SIZE}px;
                    height: ${BubbleConfig.BUBBLE_SIZE}px;
                    cursor: grab;
                }

                /* 드래그 중일 때의 커서 스타일 */
                #aiFloatingBubbleContainer.grabbing {
                    cursor: grabbing;
                }

                /* 플로팅 버블 버튼 (원형 아이콘) 스타일 */
                #aiFloatingBubbleButton {
                    position: absolute;
                    bottom: 0;
                    right: 0;
                    background-color: #fff;
                    border: 1px solid #ccc;
                    border-radius: 50%;
                    width: ${BubbleConfig.BUBBLE_SIZE}px;
                    height: ${BubbleConfig.BUBBLE_SIZE}px;
                    display: flex;
                    justify-content: center;
                    align-items: center;
                    cursor: pointer;
                    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
                    transition: transform 0.2s;
                }

                /* 버블 버튼 내부 이미지 스타일 */
                #aiFloatingBubbleButton img {
                    user-select: none;
                    -webkit-user-drag: none;
                    pointer-events: none;
                }

                /* 버블 버튼 호버 시 확대 효과 */
                #aiFloatingBubbleButton:hover {
                    transform: scale(1.1);
                }

                /* AI 사이트 옵션 메뉴 스타일 */
                #aiSiteOptions {
                    position: absolute;
                    /* 수직/수평 정렬은 동적으로 클래스에서 제어 */
                    top: auto;
                    bottom: auto;
                    /* 수평 정렬은 동적으로 left/right 클래스로 제어 */
                    left: auto;
                    right: auto;
                    flex-direction: column;
                    background-color: #fff;
                    border: 1px solid #eee;
                    border-radius: 8px;
                    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.15);
                    overflow: hidden;
                    white-space: nowrap;

                    max-height: 0;
                    opacity: 0;
                    pointer-events: none;
                    transition: max-height ${BubbleConfig.MENU_TRANSITION_DURATION}s ease-out, opacity ${BubbleConfig.MENU_TRANSITION_DURATION}s ease-out;
                }

                /* 버블이 화면 우측 절반에 있을 때: 메뉴를 버블의 오른쪽 가장자리에 맞춤 (메뉴가 왼쪽으로 펼쳐짐) */
                #aiSiteOptions.align-right {
                    right: 0;
                }

                /* 버블이 화면 좌측 절반에 있을 때: 메뉴를 버블의 왼쪽 가장자리에 맞춤 (메뉴가 오른쪽으로 펼쳐짐) */
                #aiSiteOptions.align-left {
                    left: 0;
                }

                /* 버블 기준 위쪽에 메뉴를 배치 (메뉴가 위로 펼쳐짐) */
                #aiSiteOptions.align-above {
                    bottom: ${BubbleConfig.BUBBLE_SIZE + BubbleConfig.OPTION_MENU_GAP}px;
                }

                /* 버블 기준 아래쪽에 메뉴를 배치 (메뉴가 아래로 펼쳐짐) */
                #aiSiteOptions.align-below {
                    top: ${BubbleConfig.BUBBLE_SIZE + BubbleConfig.OPTION_MENU_GAP}px;
                }

                /* AI 사이트 옵션 메뉴가 보일 때의 스타일 */
                #aiSiteOptions.visible {
                    max-height: 500px;
                    opacity: 1;
                    pointer-events: auto;
                    transition: max-height ${BubbleConfig.MENU_TRANSITION_DURATION}s ease-out, opacity ${BubbleConfig.MENU_TRANSITION_DURATION}s ease-out;
                }

                /* 각 AI 사이트 옵션 항목 스타일 */
                .ai-option {
                    display: flex;
                    align-items: center;
                    padding: ${BubbleConfig.OPTION_ITEM_PADDING_VERTICAL}px ${BubbleConfig.OPTION_ITEM_PADDING_HORIZONTAL}px;
                    cursor: pointer;
                    border-bottom: 1px solid #f0f0f0;
                    transition: background-color 0.2s;
                    width: ${BubbleConfig.OPTION_MENU_WIDTH}px;
                }

                /* 마지막 메뉴 항목의 하단 구분선 제거 */
                .ai-option:last-child {
                    border-bottom: none;
                }

                /* 메뉴 항목 호버 시 배경색 변경 */
                .ai-option:hover {
                    background-color: #f5f5f5;
                }

                /* 메뉴 항목 내부 아이콘 스타일 */
                .ai-option .option-icon {
                    width: ${BubbleConfig.OPTION_ICON_SIZE}px;
                    height: ${BubbleConfig.OPTION_ICON_SIZE}px;
                    margin-right: ${BubbleConfig.OPTION_ITEM_ICON_MARGIN_RIGHT}px;
                    border-radius: 2px;
                    vertical-align: middle;
                    user-select: none;
                    -webkit-user-drag: none;
                    pointer-events: none;
                }

                /* 메뉴 항목 내부 텍스트 (AI 이름) 스타일 */
                .ai-option span {
                    font-family: 'Inter', sans-serif;
                    font-size: 14px;
                    color: #333;
                    font-weight: normal;
                }
            `);
        }

        /**
         * @private
         * 모든 이벤트 리스너를 설정합니다.
         * 드래그, 호버, 클릭 관련 이벤트를 등록합니다.
         */
        _setupEventListeners() {
            this._setupDrag(); // 버블 드래그 기능 설정
            this._setupHover(); // AI 목록 표시/숨김 호버 기능 설정
            this._setupClick(); // AI 사이트 옵션 클릭 기능 설정
            // 윈도우 리사이즈 시 정렬 재계산
            window.addEventListener('resize', () => this._updateAlignment());
        }

        /**
         * @private
         * 버블 드래그 기능을 설정합니다.
         * 마우스 다운, 이동, 업 이벤트를 사용하여 버블을 드래그 가능하게 합니다.
         */
        _setupDrag() {
            this.bubbleContainer.addEventListener('mousedown', (e) => {
                // AI 옵션 메뉴 자체를 드래그하는 것은 방지합니다.
                // 만약 클릭된 요소가 '.ai-option' 클래스를 포함한다면 드래그를 시작하지 않습니다.
                if (e.target.closest('.ai-option')) {
                    return;
                }

                this.isDragging = true;
                this.bubbleContainer.classList.add('grabbing');

                this.offsetX = e.clientX - this.bubbleContainer.getBoundingClientRect().left;
                this.offsetY = e.clientY - this.bubbleContainer.getBoundingClientRect().top;
            });

            document.addEventListener('mousemove', (e) => {
                if (!this.isDragging) return;

                let newLeft = e.clientX - this.offsetX;
                let newTop = e.clientY - this.offsetY;

                const maxX = window.innerWidth - this.bubbleContainer.offsetWidth;
                const maxY = window.innerHeight - this.bubbleContainer.offsetHeight;

                newLeft = Math.max(0, Math.min(newLeft, maxX));
                newTop = Math.max(0, Math.min(newTop, maxY));

                this.bubbleContainer.style.left = `${newLeft}px`;
                this.bubbleContainer.style.top = `${newTop}px`;
                this.bubbleContainer.style.right = 'auto'; // left/top을 사용할 때는 기존 right/bottom 속성을 초기화
                this.bubbleContainer.style.bottom = 'auto'; // left/top을 사용할 때는 기존 right/bottom 속성을 초기화

                // 드래그 중에도 메뉴 정렬을 실시간 반영
                this._updateAlignment();
            });

            document.addEventListener('mouseup', () => {
                this.isDragging = false;
                this.bubbleContainer.classList.remove('grabbing');
                this._savePosition(); // 드래그가 끝나면 위치를 저장합니다.
            });
        }

        /**
         * @private
         * 현재 버블의 화면 내 가로 위치를 기준으로 메뉴 정렬 클래스를 업데이트합니다.
         * - 버블 중심 x가 화면 중앙보다 크면 align-right (메뉴가 왼쪽으로 펼쳐짐)
         * - 작으면 align-left (메뉴가 오른쪽으로 펼쳐짐)
         */
        _updateAlignment() {
            if (!this.bubbleContainer || !this.siteOptions) return;
            const rect = this.bubbleContainer.getBoundingClientRect();
            const bubbleCenterX = rect.left + rect.width / 2;
            const bubbleTop = rect.top;
            const screenCenterX = window.innerWidth / 2;
            const screenThresholdY = window.innerHeight * 0.25; // 상단 25%

            this.siteOptions.classList.remove('align-left', 'align-right', 'align-above', 'align-below');

            // 좌/우 정렬
            if (bubbleCenterX >= screenCenterX) {
                this.siteOptions.classList.add('align-right');
            } else {
                this.siteOptions.classList.add('align-left');
            }

            // 상/하 정렬 (상단 25% 이내면 아래로 펼침)
            if (bubbleTop <= screenThresholdY) {
                this.siteOptions.classList.add('align-below');
            } else {
                this.siteOptions.classList.add('align-above');
            }
        }

        /**
         * @private
         * AI 목록 표시/숨김 호버 기능을 설정합니다.
         * 마우스가 버블 위에 있을 때 메뉴를 표시하고, 벗어났을 때 지연 후 숨깁니다.
         */
        _setupHover() {
            this.bubbleContainer.addEventListener('mouseenter', () => {
                clearTimeout(this.hideTimeout);
                this.siteOptions.classList.add('visible');
            });

            this.bubbleContainer.addEventListener('mouseleave', () => {
                this.hideTimeout = setTimeout(() => {
                    this.siteOptions.classList.remove('visible');
                }, BubbleConfig.MENU_HIDE_DELAY);
            });
        }

        /**
         * @private
         * AI 사이트 옵션 클릭 기능을 설정합니다.
         * AI 목록에서 특정 AI 사이트를 클릭하면 새 팝업 창으로 해당 사이트를 엽니다.
         */
        _setupClick() {
            this.siteOptions.addEventListener('click', (event) => {
                const option = event.target.closest('.ai-option');
                if (option) {
                    let url = option.dataset.url;
                    if (url) {
                        url += (url.includes('?') ? '&' : '?') + 'bubble_popup=true';

                        const windowName = 'AIFloatingWindow';
                        const features = `width=${BubbleConfig.POPUP_WINDOW_WIDTH},height=${BubbleConfig.POPUP_WINDOW_HEIGHT},menubar=no,toolbar=no,location=no,status=no,resizable=yes,scrollbars=yes`;

                        window.open(url, windowName, features);
                    }
                }
            });
        }

        /**
         * @private
         * 버블의 현재 위치(left, top)를 localStorage에 저장합니다.
         */
        _savePosition() {
            const position = {
                left: this.bubbleContainer.offsetLeft,
                top: this.bubbleContainer.offsetTop
            };
            localStorage.setItem('aiFloatingBubblePosition', JSON.stringify(position));
        }

        /**
         * @private
         * localStorage에서 저장된 버블 위치를 불러와 적용합니다.
         * 저장된 위치가 없으면 기본 위치(우측 하단)를 설정합니다.
         */
        _loadPosition() {
            const savedPosition = localStorage.getItem('aiFloatingBubblePosition');
            if (savedPosition) {
                const position = JSON.parse(savedPosition);
                this.bubbleContainer.style.left = `${position.left}px`;
                this.bubbleContainer.style.top = `${position.top}px`;
                this.bubbleContainer.style.right = 'auto'; // 기존 right/bottom 초기화
                this.bubbleContainer.style.bottom = 'auto'; // 기존 right/bottom 초기화
            } else {
                // 저장된 위치가 없으면 기본 위치 설정
                this.bubbleContainer.style.bottom = `${BubbleConfig.OPTION_ITEM_PADDING_VERTICAL * 2}px`;
                this.bubbleContainer.style.right = `${BubbleConfig.OPTION_ITEM_PADDING_HORIZONTAL}px`;
            }
        }
    }

    // 스크립트 실행 시 AI 플로팅 버블 인스턴스를 생성하여 모든 기능을 시작합니다.
    new AIFloatingBubble();
})();