/* ---------------------------------------------------------------------------------------------------------------------- //DESCRIPTION:Downloads and installs the Octopus Startup-Installer + This script is part of project-octopus.net + Author: Gerald Singelmann, gs@cuppascript.com + Supported by: Satzkiste GmbH, post@satzkiste.de + Modified: 2023-05-03 + License (MIT) Copyright 2023 Gerald Singelmann/Satzkiste GmbH Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ---------------------------------------------------------------------------------------------------------------------- */ var script_version = "1.0.5"; init(); init_classes(); install_files(); function install_files() { if ( ! zustimmung() ) return; // ------------------------------------------------------------------------------------- // Remote JSON laden // ------------------------------------------------------------------------------------- try { var _json_path = download("data", gd.json_url, "", gd.config_name, undefined, true); } catch(e) { var os = $.os; // Result: Macintosh OS 10.14.6 if ( os.indexOf("Macintosh") != -1 && os.indexOf("10.14.") != -1 ) { alert( __("curl-problem") ); } else { alert( __("Download-Fehler") + "\n" + e); } return; } if ( ! _json_path ) { alert(__("not-online")); return; } var _remote_data = read_file(_json_path); var remote_satz = new Satz(_remote_data); // ------------------------------------------------------------------------------------- // Installer-Startup installieren // ------------------------------------------------------------------------------------- for (var sid in remote_satz.scripts) { if ( sid == "octopus_installer" || sid == "Octopus-Installer" || sid == "Octopus-Includes") { var _s = remote_satz.get_script(sid); try { _s.download(); } catch(e) { // log ( "Fehler beim Laden des Scripts", sid ); } _s.install(); // var sp = get_script_path(); // if ( sp.dbg == false ) { // Nicht in VSCode // var _manuelles_script = new File( sp.path ); // if ( ! dev ) _manuelles_script.remove(); // log ("Manuell installierter Installer wurde entfernt"); // } } } cs_alert("", __('meldung'), undefined, "OK" ) } function __( id ) { if ( typeof loc_strings == "undefined" ) loc_strings = load_translation(); if (loc_strings.hasOwnProperty(id)) { return localize(loc_strings[id]); } else { return id } } function load_translation() { return { "PO": {"de": "Projekt Octopus", "en": "Project Octopus"}, "meldung": { "de": "Der Octopus Installer wurde kopiert. Beim nächsten Neustart von InDesign sollte Octopus einsatzbereit sein.", "en": "Octopus Installer was copied and should install the rest of Project Octopus on next opening of InDesign" }, "not_now": {"de": "Nicht jetzt", "en": "I’d rather not right now"}, "OK": {"de": "Ich stimme zu", "en": "I agree"}, "what_we_do": { "de": "Projekt Octopus installiert und aktualisiert InDesign-Scripte beim Starten von InDesign.\n\nAußerdem werden zur Diagnose anonymisierte Daten wie z.B. Fehlermeldungen erfasst", "en": "Project Octopus installs and updates InDesign-scripts during startup\n\nSome anonymised data like usage and error messages are collected" }, "more": { "de": "Erzähl mir mehr über die Details", "en": "Tell me more" }, "Download-Fehler": { "de": "Fehler beim Download der Config-Datei", "en": "Error during download" }, "not-online": { "de": "Config-Datei wurde nicht geladen\nSind Sie online?", "en": "Unable to load config.\nAre you online?" }, "curl-problem": { "de": "Veraltetes Betriebssystem\nCurl auf MacOS Mojave verwendet abgelaufene Zertifikate. Daher sind Scripte nicht in der Lage, per https auf Services zuzugreifen.\nEs gibt wenig, was wir auf unserer Seite daran ändern können.", "en": "Problem with old OS\nCurl under MacOS Mojave uses expired SSL-certificates and therefore scripts are unable to connect to https-based services\nThere is very litte we can do about this.\n" } } } function fread(f) { f.encoding = "UTF-8"; f.open("r"); var aux = f.read(); f.close(); return aux; } function fwrite(f, ctnt, append) { f.encoding = "UTF-8"; if ( append ) { f.open("a") } else { f.open("w"); } var aux = f.write( ctnt ); f.close(); return aux; } function cs_alert( level, msg, titel, btn ) { var rs = true; if ( ! titel ) titel = "Obacht"; var w = new Window("dialog {text: '" + titel + "'}"); w.g = w.add("group {orientation: 'row', alignChildren: ['left', 'top']}") w.g.spacing = 20; if ( level == "stop" ) { // stop.png w.g.add("image", undefined, unescape("%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%000%00%00%000%08%06%00%00%00W%02%F9%87%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD%7E%FC%00%00%06%94IDATh%81%CDZ%0BPTU%18%FEy%B8%0B%2C%8F%85%1D%D0%C5V@%C4%17%8B%92hVV%80%CE%E88%8D%9A9Nj5%D8%8C%3D%1Ck%24%B3%CC%A6%C6lF%CD%B1i%88%C6%D1j%AC%A54S%D3%28%8A%1AK%05%13%B5%92%09%93%7C%80%0C%1A%22%8A%A2%02%8A%81%E26%DFa%EF%F5%DE%7D%9C%FB%80%85%BE%99%9D%BD%F7%EE%B9%E7%7E%DF9%FF%EB%9C%BB%01N%A7%93%B4%E2%8A-%C5AD9%9Ao%E4%A3%20%A6%AEz%BE%D6%9B%02%FF%27%E4%81%1CW%DF%9A%A0I%80%1F%C9%0B%D0%2CB%B5%09%F5%14%F9cIqTf%B7Q%B3%29%84%FE%89%8Bd%D7%065%B6%D0%A0%C6f%F6%99PYGZ%CC%29XM%A3%EE%92%DF%3A%D1N%3F%8CO%A1%B24%1B%B5%84%19%B9m%23%DB%DA%E9%85%EF%CAs%16%27%8F0%C4%D7%9C%98%A7%D4%B7%E2%0C%E8%25%DFl2%D2%C6ici%E3%F4%0CE%D2%DE%60%3F%D3H%A5%B9%05%8A3%C1%15%A0%97%FC%C6i%19%B4v%EE%04%5D%C4%A5x%BE%A8%9CVo%DA%CB%15%E1S%80Z%F2%C6%D9%8F%93%E9%FD%B5%ECx%DB%95%1Az%E6l%29%DD%BCs%BB%5B%C4%05%C0%9Cj%E7%E5%13%CF%27%BCF%21%3D%E4%17%9C%DDOsk%F7%F4%18y%003%08%87%E7E%27%0F%01z%C9o%BA%7C%92%B4%A7De%20j%B9%E0U%84L%80%1E%F2%07%AE_%60%E4%FD%05%84%5B%09%3CD%88%02%F4%90%07%5E%AA+%F3%1By%1F%90%89%60%02%F4%92%07N%FD%DB%DC%5B%C4%A5%10E%04w%87%3C%D0%93N%AB%11%10%C1f@7%F9%DE@Zm%23%EF%299%8A%C5%5C_%92%07%EC%7C%01%FCj%B4%AF%C9%07%07%04PJ%E6%24n%1B%AE%005%E4%F1%10w%24%1A%22dW%B2%22%E2%29%3D%CC%C2%8E%F1%FD%989Q%3C%E7a%82i%80%22%07U%D5%28%0F%09%86%08%EAt%3A%19%29s%B0%81%B5%84%80%C2kg%D8%07%C8%8D%B3%D3%B5%CE%0E%D6%26*%C8@3kvSE%5B%13%B7_%0CKAR%B6%E2%F35%AF%C8%DC%81%D1%05%CEt%B4%D2%0Ak%06%CD%88JdD%05%F2%80%A3%A9%8Ar%2CCi%C5%F9%23%EC%5C%CD%E8%3F%12n%A5%04C%B8%FF%05%BCe%1D%C3%C8%0B%A4%DEn%28g%A3%2C%05F_v%7E%BB%C3%5BW%22B%03%83U%8D%3E%F5%84%00%8C%D2%80%7EaT%D2%DA@%CD%9D%1D%E4H%CC%A2%95%0D%E5%B26%25%AD%E7%E9%83%C6J%CA%8E%88%A7%EC%AA%EF%29%AF%F1%98%CF%FE%60%3A%9F%25d%AA%1A%7D%D6%BE%E9%9E%21%3Ek%B0%98%BAjU%9D%08%C5%9C9%C8@%E6%20%23%9B%11%BD%F8*i%12%3D%11%93%2C%BB%1B%09%CB%17%BA%ED%C4%80%3D%24%9A%7D%C3T%DC%CDE-%606%18yw%F2J%E0%0A@%A48%D2v%89%86%87%98%E9%A1%F0%01%3E%DB%15%5C%A9%D2E%1A%CE%9E%19n%A5%B1%A6Xn%FF%3Cp%05%DC%7Bb%A7x%8C%07%C1%B1%BC%D9%E6Q%85%90%E8%0B%F0%8Do%92%27%EB%BAW%80j%27.%BD%DE@%23%FE%DENg%3B%AE%CB%AEC%A4%96%85%8C4%F1%C1%DC%E0%3F%DD%81%A2%80%D1a%16%12%1E%89%CA%13%22%B0%F6%25%97%F3*%25%24w%E4X%86%C9%AE%7Cz%F9%A4%C7%A0%08%C0s%B2N%15Q%F1%F8%14%B6%CB%E1%0D%DC%28%B4%E4%D7OXX%C4%03@%5CZ%3A%C3%E9%A4%E7%10%19%14%10@%B7%15%B6i%9C%19%CF%B1Y%93%0AG%F4%BA%9A._%B3/%AF%FF%9D%DE%BDP%21%9Ec%9B%E5%8B%D5%85l%F3K%0A%EE%0C%CC%B7%0Ce%D3%BC%AF%F5%3C%1D%1E%3E%83%92%8D%91%E2o%EE%E4g%98%13E%F2%9E%D5%91%1C%85%C9S%3CL%09%23-%C5%7B%17%8FR%20%05%D0%A2%B8T%9A%FA%DBi%AAL%8C%A3%17%17O%F5%E8%8B%EB%C4%E88%BA%A2k%F5%96%19a%A5%D3%F69ld%D0%B9@%16%A3%87%12%E2%D5%FA%C3%E2%7D%C8%C4%DE%C2%A9%D9%95%A1%11%08%D6%0D%BC%9F%5E%3EwH%FC%0D%3E%96w%F1%18%E5%F6Oc%E7%A8%AFF%85ZhsS5%FD%99_LQ7%DA%BDr%E4%CE@%D4%B2%95ld%17%C7%D9%A9%B4%B5%81M%FB%9A%81%F7%D1%AD1%CF2S@%D2%B1%04%87%D0%92s%87d%A3%3F+z%F0%DD%11%F2R%AD%02%20%3A%25%D2%26%BB%86%7E%B0I%00%0C6F%B2%84%B8%E9%C3%DD%3E%C9+%0A%18%5D%7C%80%B6%AC%DF%C3%B2+%B9%0A6%00%3E%81%99%99S%BB%87j%DA%5B%C4%28%04%AA%5B%93%26%D1i%C9%3A%19%25%B1%3B%E0%03%D6%BF6%D3G%09%0F%CB%CC%12%FDL%AE.f%FD%CF%8E%1EL%0Bv%94Q%F6%EE%3Fx%14%95%A3P%FB%8E%5D4%EC%CDu%EC%183%00%D3%80C%BB%9B%08%88lu%95%01Go%DEu%D0%85%B1%23e%ED%10Y%D0%CF%85%5Bm%94%7E%FCkf%96%EE%BE%85%FE_%5B%B7%9D%DE%F8%BCD%89%1E%13P%A0%D4h%CA%CF%E5%B4%3E%FFG%969s%EB%0E%8A%0E%8C%11%9F%1B3%84%99%13%88%08e%80%20%0E%E6%E3%5E%1Al%B8t%9C%7D%A3%00D%3B%98%8C%BB%88%DC-%A5%E4%DC%F9%AD%22yp%0Ft%ED9*%8A%98%B3%B7%92%AC%CBWQASW%D9%10%DF%CFD%FB%87M%A7/%93%26%CA%DA%C1%C9%05%D8Cc%D8%91%E0%BC%ED%CE%3B%E29%22%1C%E0p%F5%07%11%E3L%B1%F4%8E%A3%84%96n%3B%A8%8A%3C%B83%13R+%A2%DF%AE%226%13%C0%AA%81%E3%E8%97%96z%0FS%12%08%01%AF%F7Og%DFpt%92%84%5E%08%11%89K%FCe%DF%C7%87iQ%21%DF%E6%A5%E4I%1AFq%C1U%B6r%B7Y0%13%D1AFZ%BB%D4%C2l%1D%8E%8DdG%AEmF%D86%B9%99OZh%0Csv%20%240%88%09%19j%8CbmaJ%C0%8D%25%CB%98%BFi%21O%EEN%ACv%26%E0%13%3B7%94%B0%DC%20%C5S%B5%7B%C5%B3%85%B1%A9%E2%F1+%FDG%89%C7%C8%E0%F0%99%3C%DB%03%EC%1C%95%AE%5E%F2%1E%02%B4%88%88.%FC%89%9E%5C%ED%10w%20%B0%06%16j%1A%D4O%F9%B6%07%C5%B6%28%95SC%BB%D6%0CW%3B%BBb%BA%60BO%AFq%E8%26O%3D%F1%82%E3%C6%CCG%C9%96%9FGYUE%2C%D9%21%0BW%8C%9C%E5%B1%B5%82%D2%19%CBIreu%B4%85%3F%C1%24%F5%92%E7%0A%D0%22%C2%CF%E0%BEb%E2%262%B5%E6%E4G%28%BE%E4S%CC%C4%7D%28B%D5%BBbU+%B2%3E%10%A1%FAE%B7%EA%25e/%8A%D0%F4%A7%0FM%1B%5B%BD%20B%F3%3FV4%EF%CC%F9Q%84%F6%BF%DB%10%D1%7F.%CA%0A%CF%AE%21%84%00%00%00%00%00IEND%AEB%60%82") ); } else if ( level == "vorfahrt" ) { // vorfahrt.png w.g.add("image", undefined, unescape("%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%001%00%00%000%08%06%00%00%00%B8%C0%92%B9%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD%7E%FC%00%00%05%7CIDATh%81%DDZmh%5BU%18%7E%B2%B4%09%ED%92.Mg-%5D%E22l%A4v%9D%0D%94%D1%E9%C4%C6%FE%19%08%96%B12%ED%26%D2%88s%20%F8%A3%8A%B6%B8%09K%99%03%7F%88%A4+e%CEZ%9B%EA%8F%EA%04Y+%ED%EC%14M%90%AE%9B0%97%B0%82lA%9A%9A%AE%D5IB%9B%B8%F5%C3%B9%C8%B9%BD7%BB%B99%F7%DE%DC%7C%14%E7%03%21%E7%9E%F3%9E%8F%E7%BC%E7%BC%E7%3D%EF%BD%AAx%3C%8E%FB%1D%1B%EE%7B%06%FF%17%12%05%EB%D9%99%EA%F2G%16%006%F6g%60%FF%3D%00%16%00%F8%C8/%5E%7FxAq%BBaS%95%03%80%25%3F%C3%06FwY+%DC%7B%EAl%3FWUT/%E8%8B6%C9%C97%FC2%EB%EFr%7B%3D%3B%AF%CD%A5K%C6%C3%91%18%C8%7E%B8%C9%18j%AA%C5%87%CD%F5%98%B2%94+%AE%5Br%7B%19%23G%BF%C0%8E%E9%9Br%A2%8BD%01%8Cu%8A%98%ADD%A5%8DY%8F%1C%C0D%AD%19G%0E5e4x%3E%CC%7FF%E1%7B%E5%B4%9CX%971%14pr%1B%DB%99U%8FdJ6jq%E4%E5%264%BF%DB%9A5%01%82%D0%03%25%18k%B0J%89%CC%10%02%E0%AC%931%14%20%9A%18%CC%B4%C3%AB%DB%CA%D1%7C%A2%15%A7%9F%AD%CF%B4%09*F%1B%AA%A4%8A%1D%5C%82o%9D%08%AB%BD%00R6%9F%BA%A6%1A%AA%92%12%3A%81%07uh%3E%F8%18%A2%DA%C2%9C%12%20%08U%1A%C5%8A%BC%EC%C43H%900%86%02%C1%88%D9%EA%02pLXCm2A%D7%7F%8A%DA%DA%D1%EB%23%88%C6%7E%CF%C9%A0%85%98%A8%AE%14+r%F0%1F%92%0E%3Bv%8D%CD%08k%AC%9E%FF%0E%7FO%5EJi%C9w%3B%0Co%9E%08H%A0%9BL8%BF%98vb%B7%D3%EA%DFz%A33%25%EF%ECB%90%26%9A3%10S+%C0%22%CD%08%A5%900%86%02g%C9%9A%13%E6%DF%9D%BD%81%E5%8F%DDIy%C1%D5X%5EIP%CE%09%A71%14H9%04%C5%7C%27%AA6%96%3E8%89x4%9Ax%0E%AEFib%F9%82%DF%18%0A%B8hmSI%18C%01%E2%C7t%0B%F3%E3%B1%18Cd%BD%B0%FB%EA%AC%EC%C4%8A%92%60%E1d%D7%60%12%96%FB%07%99%A5%B5%1Exr%EA7%AE%97a%BEIM%9B%04%BB%F6%A8%27%F9_%AFw0%FFv%DD%16j%5D%8BF%9FH%1B%D4%1A8%CA%1EI%E4%DB%F5%95h/%DF%21%3B%05%C4%ED%D8%3D%15%E2%1EE%B5%009W%9C%AC%C1%88%D9J%1A%D8%CA%CF%BFs%F1%27%AC%8E%7F%0B%FB%13%DB%D15%0Ff%90%16%ED%BD%81%93%C1%3A%82k%13%B7%D7%60%81A%AD%85%AF%A6%05uEe%18%5E%08%26%CA%A4%D094%C1%95v%09M%AA%10%B2%D7%D3%88%D9j%07%F0%830%7F%83i%0B%0C%93%1E%94%FA%DC%0C%81+%8F%B6%24%AC%D5KA/%3C%B1%B9%84l%BC%FE0s%A6%90%F2R%B5%16%F6%EB_K%F6%C9s%FE%18/%95f%91%92%C6%227%23%ECZ%A4%9A%5C%B2%C9%1B%F5%95%CC%00%09%3C%B1y%04Wb%B0%15%95%25%C9%FA%97%C2r%DD%24%A1%B7%7B%8C%7Bl%97%23%90%16%09%16%0EZ%2697%DA%8ALL%DA%1B%9Bg%96Ni%81%16%EE%F0%B5%249%E7%DCe%2C%FE%B3%BA%26%F3%EB%B8dG%1D%9F_%E0%F6%02%F1%8F%DC%92%C2%2C%D2%8EvD%CCV%27%CD%AF%D2%EE%DF%07%DD%0B%0F3i%5BqYB+%99%A0%F5%FB%29%F4%9E%3C%C7%D5%7CZ%CA%22%F1%A1%24P%E0%A2%99%DC%95/%BFB%ADj%23%93%CE%94%00q/%88%06x%04%06%D3%25%00%25%9A%C0%9A6%A8W%D9%F1%17%9F%C1%C1%96%EDi%B7Cp@%5B%89%8E%B6cX%29%2C%80%F5F%84_D%26%CA%26g%91%F8P%14%B2a%D7%A8_%98%BF%E7%B31%3C%B5%A4%EC%3E%D186%89%87nF%85%04%08%5CJ%08%20%C3%B8%13%F5%E09%E1%1A%91%AD%B8I%ADa%FE%1B%EF%EA%B0%BF%E7%0CM%24q%E5T%02%C5%24%D8%B5%3A%2C%CC%AF%B94%85%D7f%EFH%D6%25%27u%A3%BE%02%1D%FD%E7EE%94%8E%07YD%00%DBi%9B%FC%CD%E3%9F%C2%A0%12_V%86%02%0D%FA.%86%B1kt%82V%ECe%AF%01%8A%91%11%09v%CD%A6%B8%C5%FA%3F%C2x%FB%C7il-%D4Q%EB%D5%A3%18%9B%DF%EB%11k6%23-%20%CBX%AC%8Bv%95%3D%F4%FE%10%9AV4%89gn%1F%10l%1E8%C3%B8%F3%14%0C%B2%EE%7FF%C8%98%84%94%97%FB%7C%DF%3D%DF%C8V%BC%16%B1%B0%A8%8BP%DE%FB%09M%9C%2C%CB%8C%B5%80l%A3%E2%AC%C9M%F1%ABv%9E%BB%80%E6%5B%1Af%13s%E8%1C%B9%02%15%FDH%A2%5E9%95%20%17%A1%7D%AA6%8E%BF3%80%C7%0BJ%9941%A9%CF%F5Q%3D%D7%19%B1+%E7%BA%92%10%8B%1E%9A%A6%E7%D0%F6%8D%8F%B98%BD%D5%23jt%A8%8E%A5R%E4%E4uW%C4l%25%EF%1A%82%B4%E8%A1%FF%D5%03%A8%3B5D%ABFL%AA%FD%3FC%02%12%5E%AE%04%B6%29u/%C4%90%D3%17%8F%11%B35%28%BC%CA%8A%80D%F1%B2%B2H%7C%E4%FA%9D%5D%3A%03%A3F%F1%B2ANI%88E%0F%05H%EB%CA%A9%04%F9x%7B*eq%FC%E9%5E9%95%20%E7%24%D8%CD%9A%12%3Dd%91%B3%7D%C0G%BE%DEc%D3%A2%87%92Q%BCl%90%17%12%22%7EU%5E%B4%80%7C%7EQ%C0%BA%13%9C%97+%1B%C5%CB%06%F9%FE%2C%C2%C1%12%C9%DA%3F%92B%DE%BF%B2%89%98%AD%96%7Cj%81%E0%FE%FFT%08%C0%BF%D5%2C%FF%83m%20%1E%25%00%00%00%00IEND%AEB%60%82") ); } else if (level == "question" ) { //question w.g.add("image", undefined, unescape("%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%000%00%00%001%08%06%00%00%00%9C%5E*%22%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD%7E%FC%00%00%05%F2IDATh%81%EDZ%5Dh%1CU%14%3E%23i%A1%1AI%9C%A0U%CC%BAm%D3%7D%B0%28%5B%18%B0%F8%94%B5%28%E2%83%9A%22i%FB%96%94%C0%14%11u%FB%20%AD%BEt%03%82%0D%05%B3%05A%3A%28%D9%80%0F%AD%7D%E8%F6%C1%1Fl%D1%0D%88%96%E2%60J%E3C%19%13%B7.j%AB%B8%C9b%04+%C8%C8%99%7Ew%BD%7B3%7F%FB%93%D4%8A%1F%5Cv%E6%DE%3B%F7%9Es%EE%F9%9DY%CDu%5D%BA%95q%DB-M%FD%7F%81%81%AE%A0%81j%22e%10%D1%E3D%C4%BFw%E1Z%E0%1C%11-%10%91%ADW%1Ck%CD%A8%F5A%83%0DT%13%29%26%D4D%DB%12s%8DE%22%9A%D0+%CE%C4%1A%D1%DC%00%95%81*%A4%DD%0A%2C%BD%E2%EC_k%06T%1B8%D5%C6Zf5%91%3A%D2%26%3DMC%3D%01%D6%F3%B3%B8%5D%84%AE%DBh%84%D31%A0bA%27%F5%84%5Eq%CE%DD%14%06%E8%06%13_%B1%3A%F0i%E8%15g%D1%EF%21%D8%CA%110%A2%82%9F%DB%BD%06%B4%7Bh+%90U%13%A9%B3%8Aw%F2%A0W%1C-rc%DB%CA%10%D1v%B4M%E8.%A3%15%5D%C3%9C%8DCC%BB%0C%0C%13%D1%FB%3EC%03z%C5Y%F0%21z%88%88D%EB%89X%7E%86%88r%AEa%96%C2%26%B5%9DJT%13%29%BF%05%1A%EC%00%84%E7%89%28%D9%C2%16%8F%851%11%18%C8%3A%01%CD%B6X5%0AD4%D8%C6r%05I%C5V%A0%ADT%02%C6%EC%07%1BR%9Fm%93xFR%B3%AD%EDA%83%ED%E6B%C3%3E%7Dv_%F1%95%11%22%3A%1DC%CF%E3b%ED%188%FF%60%3F%EB%FEd%87%08%17%E8%BC%0A%21%E8%A9.t%F1%B9%F1%E1%07Z%5D%B3%15%B4%C4%80%14%C8TL%FC%B1%BEk%DB%BF%9E%01%10o%28%7D62%D2t%07%E8R%B1%144%D04%03%D5D%CA%F4I%218%E5X%CDL40*7%C5%00%8A%9C%E3%3EC%87%F4%8Ac%FB%F4w%04a%81%2C6%03%D0%FB%B3%3EC%13JUvE%9D%90%5C%DF%5D%BF%CEn%7C%D8%BB%E7%C6%D7%7B%F4%81%A8%AD%CF%84%0D6%13%89%8F%FB%A4%D0%E7%F4%8AsH%E9+%ED%D1%07F%9E%BF%FB%1F%5B%EE_w%07m%9D%3B%E1%5D%1F%DC%98%F6%DA%BD%EBn%A7%A5%BF%FE%A4%A7%BF%FD8j%DF%5C%D8%60%AC%13%80%CBT%7D%3E%EB%BD_%DA%5C%3AY%9D%A7%F4%86%3EO%CA%9Ck%BD%F5%CB7%F5%C1%CB%D7k%1E%F1%B9%1Foh%DC%E7%CBW%C3%B6%9E%8E%CAJ%E3%AA%D0A%9F%BEC%01%F5B%91%88j%E2%86%A5%BC%B1kC%7D%F0%CB%E5k%DEo%E6%CE%FB%A8%7C%FD%B7%B0%3Dy%8Dl%14a%91%D9h5%91%E2%E2%7E%5E%E9%5E%D0+N%A0%F2j%B6U%605%CA%F7%3FJ%E7%7F%FF%99v%CD%7F%D20%FE%C6%FD%8F%D0%07%B5%EF%C3%A4%CF%C4g%E2%D4%04ql%C0/%DF%89z%95Rf5%E2%E6%87W%7F%B8%10%F6%AC%A8%03b%154q%18P%03%16%A1V%0EC%60%EE%12%803%F0%F5%A5%A8%02FE%1C%15%AA%97%8D/%BC%F4%14%9D%D8%F9%90%18bw%99u%0D%B3%28%CF%D7l%AB%17ea3%99%E8E%D70%033%CE0%C4%8E%03%976%DF%23%13O%A8%AEN%B3%BE+S%F31%89%97%E3EZ%B3%ADH%83%F5C%EC8%F0%E1%8E%94%7C%7B%0Cu-31%02%A93%01%A3%7C%1FsI%3E%A5%924%3F%A7%D9%16%17%F3ey%92f%5B%A3X%97%E7%E6%5D%C3l%C8%8B%9A%3A%01%C6%DEO%E78%B4gQd%88%28%F9%2C%11%7DGD%87%A5GB%23%28t%3E+%B9%DC%1E%B8%60%99x%7Es1ED%BDX%BB%04a%C5g@%AF8%5C%A0k%1F%ED%D8%CA%DE%81%D5h%5C%B3%AD%3C%08%E0%289.%FB%7D%E0%98b%C8%EA8c%09%D2%94U%27%8D%B5%05%04%83%DC7%8DL%B7A%D5%9AI%E6%E4%A3%CD%20%C5-%B8%86%99%C3i%1C%003%07p/%D2%EA%19%29%1D%AE%A9%EB%B9%86Y%00q%02/CmHzO%94%95%D6%C8%B4%CA%80po%19%E8%7FQ%10%09%BD%5D%82%AENJ%85%FCE%F4%89%D7%29%B2o/k%B6%B5G%B3-%5E%F7M%CC%15%C8%A3%90/%60%8F%C0%1A%A3%19%06D%8A0%08%A2%3CI%F0F%90%D8%94Dh%0DR%CD%28%05%B9%EA%B1%A6%B0%DE%0C%E6%0A%26z%24%81mF%13%1A%D0%60%E4q%93%B9%E1_%87%8E%EE%CFM%CF%BC%83%AE%C3%D8%B8%06%C9OI%84%EFs%0D%B3%D75%CCQ%E8%F8%90%18%83%BA%080c%9C%24%5D%85%91%3E%E9%C3%C4%D7%10%D6%90%94%956%18z%A8%1B%95j%00/%1A%BFx%FA%02%25%AF%D5%96_%1B%DBY%FA%A9%AF%3B%01%E3%12Fu%05%F9KYYF%E8lQ%9A%97%04%D1%8C%09%A8%DD%5E%D70O%C2%F3%14%255%94%3D%DB%8C%1A8%A3N%60E%ED%FB%CC%17%97%BB%E7%C6%DE%DE%C6%91%13%12%95%09%2C%E1%85%96%07%A8VR%1A%27%C9%0E%84%97%3A%8A%7B%AF%D6%E0Ss%0D%93%D7%DC%A7%D8%C5E%E94%EB%88%0Ad+%DE%3C%03%5B8K%C5%0B%5C%D9%C0%84%C7%10%C4%D6OG%92%5C%09q%83%89%7C%17%7Dcj%DD%0B%E1%14%20%88M%3E%27%EB%21%EA%04%C2%BE%93%891%91%12%CC%C2%1E%CA%D84+1%27%FBn%C1%08%9F%CC%EBD%F4%9E%F4%BC/%82%88%8F%C3@%60%D6%29%BD%7D%16%C65%05%C9%AA%D2%3F%23%EB-%88%11Q%BA%00%3B%22%D5%BB%C4E%14%03Ay%7F%FD%8B%24%8Ez%1Cns%17%13%0B%3BH%C2+%154%DB%CA%29/h%B3%92KN%23%1Bm*%8D%16%08%B5%01%BD%E2%9C%AA%26R%BBQR%1A%F86l%A9%9FT%11%8De%08%03%15j%91E%EB%C5%FC2%BCM%06%7Dyj%11%AB%F2_%09%10%F7%99%28%0D%D1%26%5D%C3%8C%FC%F4%D4%2CV%EB%03%C7%2C%A2%EB%20%82%11%29.%B1cX%D5%7F%AB%20%0E%08uZ%91%CBwd%8F%FF%FFns3AD%7F%03%B1%DF-%86%25%83%8EE%00%00%00%00IEND%AEB%60%82") ); } else { // warnung.png w.g.add("image", undefined, unescape("%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%000%00%00%000%08%06%00%00%00W%02%F9%87%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD%7E%FC%00%00%07%C3IDATh%81%E5Z%5BL%5CE%18%FE%CAn%B7%14%CB%A5%60%D0%A2%D05%15l+%28%86F%A9%1A%BBj%AD%3E%A8%C5%A81%D6%07%D6x%A9O%EDj%8C%89%D1X%8C%89%26%3E%28X%7D0j%5C%1E%AA%D1j%84%B6%DA%A6%DE%96%C4k-J%83%B5%16%AC%DDBl-%16%DC%05%C4%8A%20%E6%1Bf%0Es%CE%99%BD%B0%944%C6/%D9%87svv%E6%FB%FE%F9o%E7%CC%CE%99%98%98%C0L1PZ%1E%00%A0%3E%7E%00%8B%13Ly%04@%14@%84%9F%C2%DE%EE%C8L%D7%CEX%80%24%1D%04P%07%20%3F%C3%F5%E3%00Z%00%843%153m%01%92x%03%80U%99%2C%98%04m%9Cw%BAB%D2%160PZN%D7h%04%B06S%86%9D%E7%15%E3%F3%CAR%C4%CF%C8FOq%9E%B8W%D67%88%B2%BE%B8%F8%5C%F1%7D/%EF%B5%02%08%15%F6vGO%99%80%81%D2r%BAI8%13Wy%F3%9AJ%BC%7FY9%3E%AF%3A%17%839%D9I%C7%E6%8D%9C%C4%03%DB%BE%C5%FA%1D%ED%83%05%C3%27%EB%0B%7B%BB%5BR%CD%9FR%C0@i9%AD%BE1%E5D%B9%B9%98%BB%F22x.%5C%86%E1%95+%B0%D9%F3%1B%5E%F0%9C@%1C%E3%A9%7E%EABe%B4%0Fm%A1f%DEn*%EC%ED%0Ee%2C%60%A0%B4%9CV%AFO6%81%B7%F6Rd%DF%1B%84%EF%FA%EB%C4uc_%27%1A%8E%B6%23%3E%3E%3Am%E2%3A%D6oo%C7%D3%AF%7D%C2%3B%CD%85%BD%DD%C1i%0BHE%9E%C4%E7%3F%B4AX%9D%E8%18%E9G0%1A%C1%BE%3F%FBgD%5C%81%EEtx%DDfu%99PDV%02%F2%8D%89%C8%D3Ur6%3D%86%BC%AD%5B%2C%F2%E1%FE.%04%BA%B6%9F2%F2%04%E3%85%01/Q/9%A5%16%20%03%D6%E8%F3%9E%E5K%05q%BA%8C%02%C9%DF%1D%8D%CC%D8eL%60%D6%D2%B0QrK%2C@%A6%CAp2%F2%0CR%85%E8%E8%90%20%3F%5B%60%BAu%20%2C9%9A%05%C8%3C%EFJ%95%8A%FC%9C%BC%3C%FB%E0%E3%9D%B3F%3E%01%F2%25G%0B%96%00Ya%5DE%8A%3E%BF%E0%B9g%5D%E4%89%C8%D0%B1Ye%3Bg%9E%CFt%7B%AD%E4*%A0%EF@%83i43%8D%EE6%3ANe%D0%9A%E0%95I%C2%00%8B%AB%10%20%15%B9z%1B%95%E3O%17V%5Cq%AD%E0%60%C0*%B5%0Bj%07%8C%2Ci%FD%D3%89%EA%9C%A2d%1C%82%BA%00Wz%A2%F2%B9%89%B7p%D6%B1x%EE%02%F8%7D%93%EDI%82%5D%10%9C%B3%E4V%B82O%3A%AE%C3E%9C%E0%A2%3A%02%B9%25%C2%92%90%16%AD+%F0%5B%D7%C9%10%3C%F3%82T%5C%F2%C9%DD+%9F%A2l%60%E6Q%BDM2%04%F2J%D06tL%90*%F0Nf%0C%0Ah%89E%C5%87%08%15W%226%3E*%C6%E4%7B%7C%B8%E5%D0n%D1v%24%03%C7%85%CE%AA%B2F%90%0B9M%0C%0D9%7F%15%C82%09H%D7uh%5D%C8%82%B6iQ%0D%D6%E6%FB%05QE%1E%B2R%D7%17U%60%D3%D1%BD%D6.%A4B%A8%B8%0A%05%1E%7B%0AM%C0I%08%F0%3B%EF%26J%9BN%90%2C%C9+R%0D%C7%DA%85%F5t%C4%1C-Fl%2Cy%CBq%F1%FC%22%9B%F5Sp%F2g%99%1E%C0%93%E4_%1Bh%A5%B5%05%7EQ%D0%D8%0B%85%FD%01%3Cy%AC%DD6%262t%14M%7D%DF%E3%EA%DC%12%5C%DD%B5C%B4%DB%89@%F1%9C%C3i%FD%24%9C%16%7B%D3b%9A%04%DC%05%F6C%FE%CE7P%E0%99%27v%C4%89P%EF%17i%CD%15%A9%B8%29-%17%D31c%01%7E%DFd%26%A2%AB8%DD%25%5D%D0mh%F9%E9%92G*%01%CC%16%CC.%CE%D4%A8C%0F%D8%E9%E0%F9%D2%95%A8%9E_%04%FF%BC%DC%A4%F3g%24%E0.%CF%11lm%DFg%5D3%C30%B0L%BE%C9%2C%93%09Zb%87E%B6%99%29%8COd%7Ds%C6l%D7%0C%CC%C0%C1%ED.%17%A1oO%E7AF/%7CmC%BFf%2C%5EG%96%7C%DDg%C3%95%3D1q%B9*%F7l+-%B2%F3%A4%08U%84hyf%97%E9%A0%E1%9C%15.%03%24%8A%1B%AE%C3%97%03tQ%8E%19%FB%F2k%D3%B0%23%5E%F9%AE%D2%96J%AB%0E%F4%A0%BE%E6%06%11X%FC1%89S%00%3F%97%1CxW%04%9D%DEJSdA%96%0FG%FE%1EN*%27XT%81%8E%91%13%96p%EE%5E%DD%A1%5D%88T%DCl%1BG%D2%AC%D8%0A%5C%EF%C3%83%07%E1qO%19%CD%92/Zm%A8m%89%88%C5H%5E%B4%05%E7%AF%11%D5T%C1I%BE%A1%A4%C6%22%EF%2CdN4%94%ACp%B9%12-%AD%23%D4%F3%85%98%87%81N/%E0z%A3%7B%BE1M%171%0A%C8%3D%DE%0F%EF%9Eo%B1%B0%23%2Cr%7C0%FA%A9%D8%8D%F7%96%AC%B1-%CE%C9%5B%96%ACA%E3%AFS%C5%A9%3A%A7%D0H%9Cc%21%8B_%F8%3C%7B%F7%C2%18c%C1S%88%FD3%D9%3BQX%81%27%1B7%8F%E6%60%FE%89%DF%CD%02%E4%CB%D4%B8%F3%9B%05o%B5%88*%BB%B1%B8RX%89%3E%29Z%87%8B%D6a%A2%E6%7E%7C%B7%ECV%F8%7Dy%A8%3B%B4%DBf%FD%60%D1Rk%0ES%B7%0A%D9C1%B3%E9%E0%3C%AA%08r%1D%AEGc%C4%C6Ob%FD%3B_%9A%A6%89%93%BB%CAB%AEw%90e%3B%DB%B0%B5/_TW%C8%86%0D%B2%60%05%BA%B6%89Xh%EE%EF%B2%B2%10%C9%B3%92F%FF%9A%AA%C4zK%AC%C0%C0%25Y%A6e%DD-E%3C%FC%B4%DB%EA%5C%B9%5E%C7%C8%00%1A%06%16%A0%F6%ED%DD%AEy%14g%25%C0%F8*e%FF%EB%AFX%85%8A%16Q%01%CD%1D%D1A%22%AA%0D%88%0C%FFb%7DC%22%3A8%07%03%B85%16%15%C1K%B7t%C6%16%E7%E7%0EE%AB%D6%21V%1D%C4%92%17%9BM%D4%2C%CEB%80t%A36%D3.%5C%F4%CB%EF%16%19ZO%05%B0%0A2%BA%93%DE%06%28qt%1Fgk%A0%8CA%D7%E48Z%D9%24%82%7D%15%C7%7E%B5%E5u%9C%D1f%EC%A3%DA%D49B%CA%B7%12O%3D%FA*%1E%F7%96%89%96%A2Y%16%1E%A6%B5%8E%E5%B7%BA*%A9%DEV%D4-%9C%B4%BE%0A%DE%D8%D8%DF%D6uP%12V%AFe%9C%22%E8N%8D%3D%DF%60%D1%F3/%9B%28%C1%F5V%02S%BB%D0%EA%1C%C9%8C%F4%F0%23/%E1%83%E3SU%93%FE%1B%3E%D1%E5*Bz%5B%11%2C%9A%F4%7F%06%3A%B4%D4K%21j%9C%1E/z%96cMy%A9%E9%03%B1%B6%01%AD%FA%29%8E%B3%95%08%992%D2%F8%0F%3Fb%F5%83%CF%88%89i%7D%BE%91c%EA%D3%DBd%BAC%AB%DC%01%DD%7D%9CnD%21%A6%9E%0A%D2M%0F%FBo%C4%FE%27Z%B1%EC%E3%3D%A6%21q%C9%D1%82M%80%3C%D61%3EA%9F%F9%F5%3E%ECh%FA%105%A3%5E4%CA%02%A3%83%B5B%A1%B1%ECr%1B%29%05%BA%21c%26%A8%B9%8B%CDP%FB%0F%60%F0%F6%BB%90%DD%91%B0E%09%3A%8F%9E%5C%CD%9C%3C%D6i2%FD%9AV%D9t%CF3%18%DC%B9K%A48%D5%06%D3%F7U%F0R%98N%9Ac%94Xv%A0%D0%5C-%90%BB%C8%1Aw%F2%D5%B0%20%CF%DDN%80%26%D3%91S%C6%07%1C%7Bo%5B%8D%B2%3B%EE%C4%D2%DA%ABD%5D%A0%00f%26%06%B7%B3%BFg%95%E5%E3%A4%12%A8%C4%1E%AE%BA%13%E7%B4%FF%80%3F%9F%7B%01c_%19%5DF%21%E1%01%C7%8C%8F%98%C6%AE%AC%C5%7D%1B%AE%C76%DF%88%A8%AE%7C@ap%3A%9F%1Fxz%D3%AC%05%F9S%7F%2C%C4%86%CD-%A9%88%23%E3%23%26MDZ%87%7CCg%15%21%A7%A6%06%EF%5D%B5%1CoT%2CD%F1%84%17%5B%C6%A7%9A%DCa%FC%83%AE%CE%BD%98%7B%F0g%94%7C%F4%19%7C%03%B1TSb%C6%87%7C%9A%88%8C%8FY3D%5C%06l%CAcV%E3%13%99%13r%A2jS%9D%98%05p%8D%EAt%C8%E3%7F%F5W%03%27%FE%B3%7F%F60%E1%B4%FD%DD%06%C0%BF%80%C0%A1%F2%E5%7F%E8*%00%00%00%00IEND%AEB%60%82") ); } w.msg = w.g.add("statictext", undefined, msg, {multiline: true} ); w.msg.preferredSize.width = 400; if ( btn.constructor.name == "Array") { w.btns = []; w.btn_group = w.add("group {orientation: 'row', alignChildren: ['center', 'top'] }"); for ( var n = 0; n < btn.length; n++ ) { w.btns.push( w.btn_group.add("button", undefined, btn[n].text )); (function( _button, _value ) { _button.onClick = function() { rs = _value; this.window.close() } })( w.btns[n], btn[n].value ) } } else { w.btn = w.add( "button", undefined, btn ) w.btn.onClick = function() { w.close(); } } w.show(); return rs; } function zustimmung( ) { var title = __('PO'); var width = 400; var w = new Window('dialog', title ); w.orientation = 'column'; w.alignChildren = ['fill', 'fill']; w.fish = w.add( 'group {orientation: "row", alignChildren: ["fill", "bottom"]}'); w.main = w.add( 'group {orientation: "column", alignChildren: ["fill","fill"]}'); w.btns = w.add('group {orientation: "row", alignChildren: ["fill", "fill"]}'); w.footer = w.add('group {orientation: "row", alignChildren: ["right", "fill"]}'); var _fl = w.fish.add("group {alignChildren: ['left', 'bottom']}"); _fl.add("image", undefined, unescape("%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%01%B2%00%00%00C%08%06%00%00%00%F9%CA%80%14%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD%7E%FC%00%00%20%00IDATx%9C%ED%9D%09xT%D5%D9%C7%CFlwf2%93%3Ddc%0B%24%EC%5B%02b%C2%96%20%90%A2Pk@E%29*P%ADU%B4%95j%AB%A1%C0%07j%15%B4%15lkQlK%22%8B%88%B8%C4Z%B6%26laI%02%86%04%08kV%B6%EC+%99%C9d%EEl%DF%F3%1F%EEMo%86%99d%92%CC%04%22%E7%F7%3C%F3d%E6f%E6.%E7%9C%7B%DE%FB%AEGd%B1X%08%85B%A1P%28%3D%151%ED9%0A%85B%A1%F4d%A8%20%A3P%28%14J%8F%86%0A2%0A%85B%A1%F4h%A8%20%A3P%28%14J%8F%86%0A2%0A%85B%A1%F4h%A4w%EB%C9%CF%CF%DE%D9%BF%C9%C0%CE%C1%7B%8D%5E%1F%87%BFj%B9%FC0%FE%7E%17%B3%E0%C3%3B%7D%7E%14%0A%85B%B9%3B%B8k%C2%EF%E7%9D%DC1%B9A%AF%5BT%AD%D5N%BDR_%DB%BF%D9h%90%0E%F4%0D%20%A3%83C%89%8A%91%93%20%B5%27%29%AA%AD%B6%7E%F7Ly%29i%D0%EB%D8PO%EF%F3%21%9E%DEk%BF%89%9E%BF%E3%8E_%00%85B%A1P%EE%08wT%90A%EB%AA%D5iW%16%D5%D6%3CZPS%E5%13%D3w%80UpM%E87%C0*%B8%DA%03%02-%AD%E0%22%29%D7%DC%2C%1F%19%14%1A%B3%7D%DC%E3W%E80%A2P%28%94%7B%8B%3B%22%C8%A0%7D%15%D6V%27%D7%EA%9A%C2%82%D5%5E%92%B3%157%C8%7B3%1F%21%03%FD%02%3A%B5%BF%D4%82%8Bds%CE%09c%7C%C4%D0%08*%CC%28%14%0A%E5%DE%A2%5B%7Dd%D0%C0n%DC%AC%FF%EC%C6%CD%FA%B8%05c%C6%5B5%AF7%F6%7EG%3Ezx%9ES%1A%98%23%E2%23%86%12-%CBJ%8F_-%CA%24%84%84%B8%FB%3A%28%14%0A%85r%F7%D0mQ%8B%B3%8FoYs%FCj%D1%E5a%BD%82%E3%20%B8%20%C42%AE%16%5BM%89%5D%11b%3C%09%C3G%93%BC%8A%B2%E0%B9Y%DB%9Fp%D59S%28%14%0A%E5%EE%C7%ED%1A%19%B4%B0%BC%8A%D2L5%A3%08%FE%E0%A19%D6%C0%0D%1E%04o%2C%88%1C%DF%E5c%C0%B4x%B6%BC%94%CC%08%1FB%CA%1A%1B%12%09%214%F8%83B%A1P%EE%11%DC*%C8%A0%1De%97%5E%DD%BC0*%9A%81%FF%EB%F8%D5b%AB%19%90G%28%D4%3A%0B%84%21%F6y%CB%BC%A8%27%BF%DD%FD%CD%10%3Ax%29%14%0A%E5%DE%C1m%A6E%08%B1%CB%D5%95%5B%DF%88%8Dg%20l%10%5D%B8%ED%F4%0F%D6%FFA%E0%10%CE%1C%D8%15%10%B5%88%17%0F%04%23%23%91%28%E9%F8%A5P%28%94%7B%07%B7%082%98%13%A1%89%AD%9E%FE%90%F4t%D9%0D%EB%B6%0AM%23%F9%D5%F8Id%5B%EEI%B2%F1%C41%AB9%B0+%A4%9C%3Fm%F5%B1%D9%0AC%E4%9EQ%3F%19%85B%A1%DC%3B%B8%C5%B4%88%C8%C4%25%D1%B1%0C4%24%04u%08%7Da%1AVO4%2CK%82%D4%5E%9D%DE%7F%CA%F93dtpo%BB%E1%FA%08%1Cid%F54r%91B%A1P%EE%11%DC%22%C8%9A%0C%86%F1%88F%84%00%83%F6%05a%C6%23%F4%91u%06%5E%93%EBl%CE%19%85B%A1P%7E%5C%B8%DC%B4%08%B3%5E%1F/%1F%0F%BC/%AC%AD%B6jHBA%D6Y%60%9A%7C%EB%C0%5E%E4%8Bu%D9%B7F%A1P%28%94%1F%0F.%D7%C8L%16s%C8%C4%7E%03%AD%EF%F9h%C2%CE%82%A0%10%98%11%11%D0QTWM%5E%9D4%CD%25B%91B%A1P%28%3F%1E%5C.%C8%EAtM%09%FC%7BhQ%88V%1C%15%DC%DB%9A%F8%DCQ%E0c%83o-%81%D5%93%D4%82Kd%DB%E9%93V%93b%5B%09%D4%10zC%7B%05%FD@%C7%28%85B%A1%DC%1B%B8%C5G%A6f%18%B2%EE%E8%01%12%15%DA%87%CC%88%18%DA%E5%CA%1D%10h0%27B%18%9E%29%BFA%26%F6%1B%E00%07Mk%D0%93/%C7%3Fq%B4K%07%A4P%28%14J%8F%C1-%82lk%EE%0F%E4%B5%C9%0F%B8%24%E1Y%08%B4%B1%F6%82%3C%C4%22q%BDK%0FJ%A1P%28%94%BB%1A%B7%E4%91%85%FB%F9%BB%5C%889%03%CC%8A%01%1E%AA%92n%3F0%85B%A1P%EE%18%DDV4%B8%3B%80%3F.P%ED%F9%19%1DN%14%0A%85r%EF%E0rA%E6%AB%F4Hi%EB%FF%08%00%B1%05%15%3A%F8%B2U%F8%0B%CD%0A%DB%10%B1%E8%2C%F8%5DN%D9u%E3w1%0B%3E%A4%E3%97B%A1P%EE%1D%5C%EE%23%F3%901%DF%16%D6%D6%AC%E7%3F%0Bk%21%02%94%A8z%EF%C1G%88%F0%FF0C%A2%A0%F0%FE%82K%84%11I%C85M%3D%F9%ED%A4i%24%3E%C2%7E%A4%23/%F4%84%E6K%08%BD1%C1%BD%FFs/u%1E%85B%A1P%DC%A0%91a%85f%BD%D1%D0%00%8D%0AU%3D%BE%3A%7D%8A%A8%B5%22RYQG2%0B%0Bo%CB%03C%24%22%84%5BIE5%F9w%EC%D3d%E7%94%9F%93MS%1E%23%15%9A%9Bv%FDl%D0%E8%B0%1D%E1%F8%C2mG%AE%14%B2%FB%E3%7E1%87%F6%29%85B%A1%DC%5B%B8%C5G%A6%96%CBs%F9%8A%1EoF%CD%20/%0D%8A%21%26%D6D%BE%9D%F2%14%D1%B3%86%DB%BE%3F%7F%F8X%F2%CD%94%05%E4%60Y%11I%CE%CF%26%B3%82%87%90J%07%26H%84%DFCp%F1/%80P%FF%C8%90%3Eo%D0%B1K%A1P%28%F7%1En%11d%01%1E%EA%8Fy%8DI%C2%1D%A2DSG%AEh%EAH%B9%1D%01%A5%23F%B2%AF%3C%9FD%FA%87%900%B5/%F9%BE%ECV%12%B5-0C%A2X0%82%3A%E2%23%86%B4%F8%D1T%0C%93K%7Dc%14%0A%85ro%E2%16A%F6M%F4%FC%1D%17%AB%CA5%08%C3%7F%EF%DCaR%C56%91%BFD%3FLV%9D%DBO%9E%BB%7F%C2m%DF%87y%F1_%25%D9%24%B7%B1%9C%5Ca%1B%C8%8A%9C%FFZC%F8mA%A25%5E%19%D7%8A%AD%F9d%29%17%CE%90%DD%97%CF%E92f%BC%10E%C7/%85B%A1%DC%9B%B8m%85%E8%FE%BE%7E%3B%CE%94%97%3E%BBdR%2C%F9%D5%A9%14%93%9A%91%5B%A6%0D%1B*%B5%E7%F7%C2%B6%C5%F7O%B0j%5C%0A_%25Y%3B%EC%11%BB%FB%C4%F2/%85%B55D%25%93%5B%B51F%22%D1M%EE%1F%3E%8C%8E%5D%0A%85B%B9wq%9B%20%F3%96+%93%8Bj%AB%9F%85%9F%EC%97%F7O%928%F3%9B%F6%EA1bY%98%A7%22%EF%23%15%DAF%F2%C1%D1%03%96%D9CF%FC%04%C1%25%AE%3Ag%8A%EB%11%25%25N%25%84L%B5%DD%B1e%F1%DA%D5%B4%B9%29%14%8A+p%9B%203%9A%CD%BD%19%89S%F2%EB6%F8%AA%F7B%A0%8D%9D%AD%28%25%8Fo%DFD%C6%86%F6-%1C%1C%108%DD%DDB%CC%D1%24%EC%00T%14%C9%B5%2C%5E%9B%EB%CEs%EA*%A2%A4%C40B%C8%22%3B%BBI%B6%2C%5E%EB%F2%AA%28%BDT%EA9%C1j%AF%DF%08%1FR%B6%9D%B6%D6t%EEQ%82%8Ck%B70%3B%E3%01%FD%5Dr%B7%F7%3B%85%F2c%C6m%82Lk%D0%C7G%F7%0Dk%F9%0C%C1%E4%EC%3Ab%7C%91%60%98%1A7d%1D1%22%3FL-%97%1F%FE%D9%B0Q%D6%3C%B5%EE%D2%C2%ECM%C2%8E%80%C9%F3%5Ce%E9Mf%F3r%C6%602%BDG%08%F9%D0%B2x%ED%DDX%F71%CC%DFC%B5%FC%C1A%C3Z%FA%7E%F7%E5%F3%CDu%BA%A6C%9C0v9h%3F%7E%85p%F2%3FA%D6%23%10%25%25.R1%CCJ%94%FA%1C%1C%10%D88%ACW%B0%27%FC%B4%3C%DC%12Cu%CC%E6%E5J%83%C9%B4%91%EBwZ%26%8DB%E9F%DA%14dX%24%B3%AC%F1%E6_%B4%AC%3E%08%93QI%7Dm%ADX%24%3A%9B%FE%C0/%DB%D5R%AE%D4%D5%3E%C1%0B%00hX%7C%123%E1L%84%8E%8A%FF%22%A4%1E%13%05%84%19%CC%92%19W%8B%A5%BEJ%8F%0F%EETE%7B%DBI%B8%1D%BCpm%7F%CFL%7F%A3%B8%AEv%BE%28%291%FAn%14f%81*%B5qA%E4%F8%96%BE%CF%BCV%A2%AB%D35%DD%D9%93%BA%CB%806%CEH%A4_%0C%0E%08%F4%98%3Dd%84%27%B7%AE%DEm%CB8%2C%B8%F5%C7%17%FD%9Er%FE%CC+i%85%97%5E%11%25%25%BEIM%A7%14J%F7%E1P%90%CD%3B%B9c%F2%8D%9B%F5%5B%7E%3Fe%BAL%10%A0%E1w%A6%BC4n%F2%81Ok%02U%9EK%10%9Dh%EF%B7%10%80C%7B%05%AB%F9%CF%D6%00%0DA%90%07%025xA%96j%0D%A5%1F%DA%EA%7F*%86i%D9%06%21%B2%FE%D8%81o%A1%20%DD%0D%E3%02%C9%DBBl%D7Z%C3u%7D0k%AEbe%EA%7Fz%9F%AF%2C_C%08y%F1%CE%9D%ED%8F%13%CE%E4%0B%22%09%21%3E%AE6%8BB%0Bc%24%92O%16%8D%8D%96%0B%AD%08%7C%F94%08-%10%A8%F6%B4%A6%83%20g%12%FD%FE%EA%E4iVK%C2%DA%F4%D4%D7%D5%DB%FEo%92%96e%1Fw%F7%83%8C%BB%DB%82B%E9%098%14d%85%B5%D5%C9%CB%E2%E2e%B6Q%86%98%B4%C3%FD%FC%FDV%EF%DF%B3un%D6vb+%CC%E6g%EF%EC%7F%BE%B2%EC%9F%89q%3Fi%D9%06%E1%24%AC%E8%21%AC%B7h%9B%F8%5C%A7kj%B8XU%21%89%8F%18j%15%84%98%24F%05%85%06%CC%3E%BEe%CD%AE%89O/%BB%D3m%CA%99%C5%DE%E4%3E%FA%A8.%9Cy%98%91HC%DF%9E1%5B%21%D42_%9E%10%A7z%3Ee%FB%A2%BBQ%90Uj5R%A1@%AE%D55%29%EF%E8%099%89%28%29%11Z%CE*_%A5GY%B0%DA%D3%D7%5B%E1%A1%B8T%5D%E1R%B3%E8-%21%26%DD%B8n%D6%1CF%D8%9F0%8D%27%9F%CAb%C5%22QI%B3%D1%B0%9D%DB%1C%29%93HfN%EE%3FP%BC%24z%0A%83%7B%05%BFY%3Fk%AE%F2%B5%3D%DF%C6%1AL%E6%0D%84%90%9F%F7%D4%B6%A0Pz%0A%0E%05%99%B7B%D1%97%17b%10%3C%B9e%D7ub%91H%09M%09%DBWO%7FH%BA%21%EB%C8f%5Bav%B9%BAr%FF%E2q%13%D4%FCb%9Axz%FD%EE%C2%19k%023%0F%027%EC%BD%27%B7%26U%8DB%26%DD%8B%D0%7D%5E%D3%81V%F6%FB%3D%29%BF%9B%9F%BD%F3%93%F6%FCc%D0%24%11h%E2H%5Bt%056f%A3%A5%98%FCV%A6%ED%FAx%DB%BC%85%0A%7E%23%AE_%25c%CCxb%B6%2C%5E%7B%E8.%1A%0F%255M%DAw%EC%F8%A9z%C4%E4%F7%D8%C8%A8%BA_%8C%8B%09%E1%3F%FF%FA%FB%9D.3%8B%22%A0C%26%91%7C%FC%D6%8C%D9%AD%84%18*%C7%A4%97%14V%B0%26%E3%93%B6%7D%29JJ%F49z%A5h%5B%7EM%D5%03%10%60%B87%F0%FA%E0%A19%CC%0B%DF%EDxT%94%94%B8%D4%B2x%AD%5B%92%F5%DD%D9%16%14JO%C2%AE%20%83i02%A4%8F%D5%A3%0D%21%B6%F1%C4%D1%5C%24%1D%3F%92%B9mi%C6%81%BD%89OE%DE%17%84%1B%FD%F7Sf0%DBrO%7E1n%DF%DF%DF%E9%E3%ED%F3QI%5D%CD%F2G%86%8D%0E%10%FA%C6%FE%9E%99%DE%3C%ACW%10%9ET%AD%93%3CL%89m%AD%18%CD%9A%8C%05%E9%B1%BF%7Cn%F2%81O%E7%8C%0E%0E%F5%E3%B7%FFn%CAt%E9%86%AC%F4%23%84%90%7E%8E%7E%3B%F3hrnt%9F%B01%98H%E2%D3%93%BE%D0%B0%FA%DC%EEH%96%B6%2C%5E%9B%AC%DC%B2%F2%FD3%E5%A5%0A%A1%99%D1%DFC%A5%AFo%D6Y%DFC%D8qQo%B6%BFm%11%8A6Q%92%0EMD%DC%F7xS%12%0F%A2%E6%0E%B9%CB%94%85%09%9B%3B%B7H%C1%E6%12%EE%98%AE%D2%86%ECE%89b5%85z.%D2%D2%91ov%91%C0%C4%D6%E9%D0%7E/%B9%E2%83%D8%01%11%22a%1F%C2%9Ap%A88%BF%C9h6%C7%D8%BBN%AE%BDg3%9B%97%EFZ%7B85%EE%ED%F8%9F%AA%08%17%B0%84%FBcE%EA%F7%EF%8A%92%12%93%DB%EB%17QRb%24%D7%B6%C21%92%CBE%C2%96%08%BE%17%E6%AA%B6%E8%CA8j/%AD%C2%CEx%C1%FER%DA%1A+%0E%EE%11D%84%26%DB%F9%AE%BD%EB%B2%FB%5D%C1o%9CjcJ%CF%C3%AE%203Y%CC%21Aj/%EB%7B%DC%C8a%BE%FE%09x%CF%95%81%FAp%DC%BE%BF%17%C4%0D%88%08%87v%06m%A9B%D3%18%5E%A1i%5C%FFt%E4%F8V%BE%B0%0DYG%D8%10O%EF%BDb%91%28%81%DF%96Vp%A9%95OIhf%14%BE%F7%F7P%BD%BD-%F7%E4z%3E%D0%02%C2%EF%C1A%C3%FBN%3F%BC%E9%5B%7B%C5%81g%1EM%FE%E7%FC%D1%F7%8DA-F%9C%F3%AF%EE%9F%04m/r%E8%F7%EB%1A%A3B%FB%8Etw%A4%A3%85X%8A%DA%F2%E3%C9%A5%D2%17%A6%F4%0F%8F%16%0Aq%3E%0C%1D7%A5T%2C%7E%3DX%ED%A5%8F%EE%1B%E6s%F4J%A1%B1%A6I%DB%CAD%C4M%0CKe%12%C9%1B%5Er%85%F1%FE%3E%FD%5B%B4%5Eh%B5%17%AA%CA%1B/WWz*%B6%AC%C8%D2%1B%8D%89mh%81%1D%8AZ%C4%C4%C9H%A4%EF%C2jl%1B%B5%97%5Bv%C3x%AE%B2L%CA%1D%F3%C9%AEL%06%B8%3E%A9X%BCk%F6%90%91%1E%7C%F5%96%D2%9B7%AB%9A%8D%06%8C%B9H%FE%9CmK%97%FDl%D8%28%DFJM%E3B%DB6%ED%C4%F11%B9%CD%5D%18u%7F%AB%ED%1Fe%A67%1B%CD%E6%97%DA%BB6%83%C9%B4%E0t%F9%8D%D2%5Be%D4n%8Do%FC%1D%E4%DFKt%A1%AA%02%13%F4mZ%19%DF%A7J%99%ECe%15%C3%88G%05%F5%F6%15V%B4A%FB%5E%AE%A94*%B7%ACll6%1A%3E%B7%2C%5E%BBT%D8%7F%9Di%0BW%8D%23D%F4%8E%09%EE%FD%1B%07%E3y%A9T%2C%7E7%D8%D3%8B%C4%85EX%CD%D6%F0%93g%97%5E%5D%A3%D8%B2%E2%B4%A3%B1%D2K%A5%5E6%26%B8%F7%60%7E%9F%98%0FN%97%DF%B8%8C%87%3A%3B%A7%B0j%C1%98%FBZ%3Ep%85%C3%B3%EC%7D%17%02R%21%95%BD%AFb%18%A9%A36%F6%D8%BAR%AB3%18%B6rmL%E9a%B4%1B%7E%7F%B1%AABs%F8%81%E7%ACB%00%C2B%25%93%A7f%CF%7C%29bB%DA%279%95%9A%C6H%08%1A%0C%3C%E1%80%86%26%B6z%FF%1E%E3%E0%80%C0g%CEV%94%7E%B2%7C%EAL%EBv%98%19%EB%9A%9Bt%A3%82%7B+%F9%C1%27%8Cf%C4g%A5LV@8%A19%21%ED%93%85E%B5%D5%91%BC%99%87%8BbL%80%C6hk%3A%ACij%9A%0F%01VR_%F3/_%A5G%F2%FBG%D2%3E_%18%15%DD%F7%D7%13%E2%D4%3B%CE%9E%FA%AC%03%F9%60%9DB*%16%DF%26%C4%B4%2C+%12%7E%9E%111%94%D8%E6S%29%B6%AC%C8%EC%E3%ED3%FA%E5%988%E5%E8%E0Pk%BB%5C%AE%AE%80%20k%F9%1E%9E%24%19%89t%EF%A8%A0%10%F5%E2q1%0A%07%11%9F%9E%5C%FE%5D%F4%CE%BC%DC%7D%A2%A4%C45%8E%9E%C6%9D%8DZ%C4q%A5b%F1%B1%D8%B0p%0F%AE%9F%5B%A9%D2%D8%07%8E%B95%F7%87%E8%5D%97%F2%CE%89%92%12%27u6%9FJ%26%91l%8B%0A%E9%23%C3%03%08%C6%C1%CE%BC%1C%3Dk2%CD%83f%20JJ%BC%ED%9Cy%84%81B%A4k%A1%FD%09%0F%0C%1C%C4%AA%18yKl%FD%ADu%F2%D8%86%B6%9E%F2y%B8%F3%7C%7F_%FE%F9e%A3%83C%5B%F6%F1%D8%C8%28%C5%BAc%07%7Em+%C8%F8%3E%0D%F7%F3%F7%5E86Fa/%C5%83%BB%5Ei%C6%D5b%C5%DB%07%F7%BE%02%01D%EC%F4%1FO%7Bm%E1%EAqdo%3C%8B%92%12%3F%F4Uz%FC%EA%8D%D8%F8%DB%AEI%CB%EA%15%18+%FF%B9%98%97%27JJ%9Clo%AC%08%F7%89%87%82%D3%E57%EC%1D%9Ao%9F%96%F7%F8%EE%91+%85%B7%7DG%BEy%C5%E7%BEJ%8F9/%C7%C4*lW%DE%20%826.%AA%ADV%BC%FC%FD%CE%966%A6%F4%2C%DA%15d%3EJe%0D%04%07%22%18%27%F5%1F%28%3B%5B%5E%FA%EC%23%99%DBB%60%B2C%00%06%7CW%93%FA%0F%94%F2%83%AF%B0%B6%9Ad%5C-%A9%18%1C%10%F8Ju%93%E6%C5%E8%3E%FD%7Dx%21%B77%FF%82%BE%8F%97%CF%A5p%3F%7F%AB%B9%81%8F%FE%12%A2%90%CA%F2%F8%8F%D0%04%B7%9F%C9%3E%B5t%E2T%3F%5E%D3%C3D%B76%3Dm%D3%FC%EC%9D%99%BC%96%05%93%E7%B8%D0%BE%1E%98x%142%E9O%CCf%CB%B3%9E%8C%22%25%A7%ECz%AFGGD*%A4b%F1%ED%05%1E%5D%087A%F4%11%3E%E9a2%28%D7%DC%F4%E1L%17%0E%09R%7BF%C1%9Fb%AFt%17%F9%9F09%FER%CC%14%A5p%A2%C2d%8F%E2%C9%84%8B%94%C4M%8A%7D%E0%E6%9E%D0o%00%F3%BB%3D%29%CB%21%00%3Akf%C3qe%12I%06%26%00%FE%B8%B8%26%14%83%C6_D%EC%F1%FER%F4%89%9Aa%3C%BE%3Ew%1A%0F%17C%DA%DD%F9%ED%C7J%90K%A5%F1%88%90%C5%E7%F7%D3S%9BY%93i%A3P%1B%E0%03Tl%A3Da%AA%B6%B7RBGQ1%F2%A7ys%3AON%D9u%3Dk2%7E%D2%81%5D%A5%1C%BBR%94%F8%FB%29%FF%DB%80%7E%D1%1Ed%07B%13%E2%CDu%7C%9F.%1A%1B%AD%B4%8D%8A%C4%BA%7C%FC%F5%F0Q%91%B6%13pg%DA%A2%BB%C6%91%5C*%5D%B2n%D6%5C%99%3D%F7%01%3FV%F0v_%FE%85N%8D%95%8E%00M%0CB%EC%D3%84%27%15%FC%FDe%AF%8D%C3%FD%02%1C%A6%03Qz%06%ED%0A%B2z%9D%CE_-%97GB%BB%F8%FEb%5E%FDs%F7M%F4I/%CE%7F%0BO%98%5C%14%E12%08%92%82sUq%06%B3%C9%D7S%AE%C8%E8%EB%ED%B3%EBZC%DD%DF%82%D4%5E%91%FCS%13%84VC%B3.%B3%C9%C0%8E%E0%07%15%B6I%C5%E2%06%C4%96%10%EBMu%B3%D5%B1%21%A8%E6fm_%F2Y%CE%89%CF%96DO%91%F37%C3%CB1%B1%1E%B6%FE2%7E%9D%B20_%BF%297%9Bug%C5b%F1CUZM9%CA%3E%86zz3%F6%B48%17%DD%2CS%25%22%F1%7F%16%8D%8Dfl%17%FAT1L%9Af%C1%5B%0E%7D%0DH3%E0%85%18%840/%D81Q%F1%DFQHe%3B%1E%1D1%A6%D5%E4%83%09%0B%26/%83%C9%84%EB%29a%24%D2%17%02%D5j/%3E%D8%007%E5%9F%1FJ%90%BE%BA%FB%9BDQR%E2%A1%CE%04%9B%C8%24%92%DD%8B%C7%C6%B4%081%9C%DB%EF%F6%A4%18%8DfS%96%D1lNS1%F2%87w%E6%E5%0C%FB4a%BEU%8BD%3F%EF%BE%7C%BE%1F%26%0Fg4%18A%FB%85I%C5%E2%CF%DF%9C%3E%DB%1A%21%8B%09%BA%B8%AE%F6%AA%8D%89%87%0FP%99%FA%98%C94ztp%A8/%FF%8F%7F_8%5BWX%5B%FD%EF%AE%06%AB%E8%8D%86a%A3mLu%17*%CB%A1%A6%3A%DDv%D00%98%CD%CB-%18%8B%C2%89%7C%80%AF%7FUq%5DM%24%BF/%BEO%85B%0C%ED%BB%22%F5%3FM%CDF%E3u%3E*R*%16%CF%10%89D%E3%104%845k%BB%D2%16%DD5%8E%96DO%91%C14%CC%0BU%08%8A%89%9Cp%E4%810K/%29%E8%F0X%E9%28Hd%C7%83%980h%ED%85%EF%BE%C0%3AR%A7%F4F%E3%5Enw%D6%C8S%A5TfD%5Drw%9D%0B%C5%BD%D8%15d%A8%9E%91q%B5x%3D%9E%F6%18%89Dm4%9Bz%F5%F6%F6%FEl%DF%E4E%CFMH%DBh%99%D0/%CC%13%C2%8B_%3A%85%F7%9D%C1%F4x%BD%A1%EE%B9@%95gb%C2%F01-O%8B%B8I%DF%3C%B0%C7%3C%3D%7C%C8B%11%11%B5h%5C%D7%1A%EA5%22%91%A8%9A%17d%F6%9E%26%21%7Cf%1EM%8EO-%B8%F8%2C%7F%13b%92%80%D90%F6%E0%3F%0E%219%1B%C7%1F%B9%EB/%7F%9A%3Bb%8C4%E5%FC%99%12%3CU%9E%AB%2C%AB5%99--Q%84%F0%FB%B9%AA%259G%B3%8F%8Aa%10z%DF%07BL8%29%DD2%8D%E5%B2%AC%C9%F8N%5B%FByu%D24%EBwW%A6%7D%D1%CC%9A%8C%A5Z%96%DD%22%F8w%09%F7D%D9%CF%D6%84%C2M%3E%13%04%A6%99%D5%086%D8%90ud%06%02%0C%08%F7t%FD%F8%C8%28%F9W%E7r%D7%12Bb%3Ax%7D8%AE%AF%F0%9A%10%B4%D3l4%BC%27x2_%AD%DE%B6*%3B%B5%E0%E2X%BE_%16%8D%8DVl%CA%CE%5C%E4%C0%A7a%17%B9T%FAE%7C%C4P1%C6%0A%C6%09g%0E%7BB%F8%5D%CE%9F%B2%9Akw%7B%E5a%92%BB%1A%19j4%9B%95%B6ZD%95V%23%E3%82%14%9C%C6C%C6%5C%AE%D04%8E%16%EEK%21%95z%F2%01%15%F6%FA%14c%E0%B5%3D%DF%1A%F4F%E3K6%13%3B%1F8%01%1FsBg%DB%A2%BB%C6%11%84%96%1A%DA%DC%97%9BY%91%88%E4@X%C8%A5%D2%07%93Oe%8DY7k%AEB%D8%26%9D%19+%1DE%CB%B2%03%85%DA%2C%1E%16%A5b%F1a%CD%82%B7%E2mw%C5%05%82%D8+%DDF%E9%01%D8%15d%D0%84%26%A4m%AC%80%CC%C0@8T%9C%1F%C1W%F3%80j%8E%27%AC%1Fn%5CM%E0%ED%FE%10j%F9%D5%95k%1E%1C%3C%5C%B1t%E2%03%AD%F6%85%EF%FF%F9%E8%01%D3%E4%FE%E1%D6%22%08%7D%BD%7DZ%9EzjuZ%8D%AF%D2%E3%3A%21%24%9C%DF%C6%0BGD%20%D6%EBt%C3%7D%94%CA%CD%10%A0%B1%07%FF%11A%08%89%E3%27M%DC%60%F7%F5%EE%17%07%E1%89%FF%87%FB%07%FC%FE%AB%BC%9C5%F0I%E4U%94U%F8%7B%A8%D6%0A%ED%DD%10%CE%AE%E8%0E%CE%C1%BC%8A%3F%07L%C0%C2%A7ML%C6k%D3Su%AC%C9%F8i%7B%93+n%ECWw%7F%0B%81%B7%CC%5E%88%B6%CF%F67%17%E1%86%17n%DBy%F6%94%D6%602%FD%D9%D6%BF%80%60%83%A3W%8A%CA%9E%89%FA%9F6%00A%B43/%27%12ZOG%021%BC%15%CAV%C7%C5D%7B%A1%AABa%EB%E7%D1%B2%FA-%B9e%D7G%C6G%0C%B5Nz%D0h%1A%9Auq%CE%1E%07A%01%FE%1E%AA%A8%85Q%F7%5B%7F%8Fv%83e%F1n%A9%5BxS%DF%ACv%C5%B9%8C%08%0A%D5%5D%A8%AA%C0D%99b%DB%B6%60sN%16k%B1%90%AF%1Di%27%96%C5kS%B8%E8%CDNa%EF%98%EE%18GA*O%F4%21%84%E3%7C%EE%9C%09%27t%937eg%CC%5D%16%F7%93%16I%869d%FD%B1%83N%8F%15W%80%FBUo4N%B2%97%12%C3%B5%03%F5%8F%F5P%1C%AEG%16%A8V%AF%85y%00%82Lo4ND%7E%16%7Cb%18%0C%C2%89%1B%DB%9AXv%FD%5B3f+l+t%20%FFf%CD%E1%D4%C2%F1%BD%FBM%85fU%AB%D3%AE%E4%23%AD0%E1%07%AA%3C3%09%27%EC%84%60%9F%D3%06%0E%19%B3z%FA%2CY%98%8F%FF%B3%F8%0CAz%B8%B8%A0%10%FB%E5%C1%F1zy%A8%9F%850%83%00%3C%FF%D3%DF*%F3*%CA%9E%FC%26z%7E0%04%97%5C%22%B5%3E%05c%22vU%D4%22%9Ej%F9%D7%04%81%C9%04%C7%80Y%0C%82%E9zC%FD%A7%CED%3F%ADL%DB%05M%EC%0DGyF%10%0A%B6%E6%AE%EC%D2k*%7B%11p%F0%BF0%12%C9Qa%FB%E0%DC%86%07%86%E8%3A%1A%E8b%7B%5C%5C%9BL%22%29%E3r%E6V%F3/%98e%AE%D6%D7%B5D%A5%60%E2%F3%92+4%DC%D3m%9Bp%3E%B85oN%9F%C5%F0%26%C5%0AMc%C9%8F%BD%B4%93%BD%3E%3Dv%A5%C8%C2%9A%8C%7F%E8%CEc%BAc%1C%5D%AA%AEd%0D%26%D3%8B%02%21%C6%B3%F4HIa+u%17%FBtv%ACt%16%85TV%05%CD%93%07%0F%9D%BF%9E%10%A7d%24%D2%7D%B0%26@S%E5%A28%29%3D%1C%87%3E%B2%5BQ%83%1B%13%27%F6%1B%10%04%27%FC%D6%DC%1F%8E%F4%F1%F2%B1N%DE%98%D8%E0%0BC%15%8Fj%AD%E6%B5%D5%D3gY%7F%03%81%B47%FFBsN%E9%F5%1B%01*%D5%A1%00%95%FA%ED%D4%D8%C5-%02%A4Z%AB%9D*%8CH%F2V%28%BFhh%D6%3D%89%D0%5C%7E%3B%B4%3B%A3%D9%F4%10%EC%EC%9BsN%E8g%0E%1A%26%7F%3F%3D%15Ba%19%A2%25%11%FA%AFa%F5%E1%C2%12V0%3BNH%FBd%1C%02Px%3FX%9D%AEi%E3%C3CGz%E3%9C%1A%F4%BAk%AE%EA%26%DB%12Uh%8B%BC%8A%B2z%04v%C0%AFd0%99%FE%E4%AC%99%ABN%D7%A4p%24%C4%F8%1BLh%8E%81%F0W%CAd5MO%BDm%D7%DC%A5e%D9c7%F5%CD%93q%0F%F3%DBF%04%06%FB%E4%96%5D%BF-%7F%CD%11%F6%8E%8B%BE%9872*%84%D7D%85%04%DA%98%E3z%A9%D4%86%9B%FA%E6v%27%07%CEgc%8D%9C%C3X%F82/%07O%F2%B3%9C%3D%CF%EE%80%9Fh%BB%AA%95%9D%AB%28%85%1F1%97Ke%60%83%D4%9E-A%25%18%3Ff%8B%C5%EC%AE%3C%A6%EE%1CG%AC%C9%C8%D8%D3*%21%1C%BD%3E_u%E5Lyi%7Fap%8A%B3c%A5%B34%1B%0D%1B6d%A5/%FB%E4%91%27%5B%DA%1B%F3%C6%C4%7E%03%98%E3W%8B%C7%EE%CC%CB%D9P%A1i%FCX%94%94x7%17%F9%A68A%9B%C1%1E%7D%BD%7D%1E%5B%BD%7F%CFAT%F1%E0%A2%8D%AC%FC%E9H%1A%7B%20%EE%D9e%F0Q%BD%18%3D%C5%1Ai%86%9B%E3%AB%BC%DC%A2%60O%AFi%D93_%B2%AB%FD%A8%19y%10%FF%3E%BB%F4Z%D3%0F%3FY%B2%03%11%90%BC%FD%1F%93bc%AD%1E%93%9C%0F%F7D8d%E3%89c%25%83%03%82%14%10%9A%D0%AAxa%A6e%D9p%DE%87%83%C1%89%C0%12%D4%80DQc%A5L%E63%220d%0C%26I%08%9E%10O%EFu%AE%1A%0C6%25%AA%08%E7C%B1%26U%B2%CF%BC%E3%CA%1B%21%B2%9F%8F/%B4%A0%16%DF%1E%F2%7C%18%89%D4q%3C2%21%25%F9%D5%95%26%DB%8D*%86Q%D8%FF%BAs%C7%1D%D8%81%A8.F%22q%AA%DCU%80J%D5%97%F7%D9%20%C8%C7b%B1%98%3B%EA%8Fr%25R%B1XW%A1il%E5%27%EB%CCD%DB%D0%AC%1Bm%EBkk6%1A%1B%B9k%0B%0B%F6%F4%AC%11%B6-%17%A4%94%EF%C6K%BBS%E3%A8%15b%915%A8%AB%5B%81v%CFl%5E%3E%EF%85%EF%BE%08%7Fs%FAl%86%EF%17k%C1%84%88%A1x%291o%7D%7D.w%D9%91%92%C2%D7EI%89K%DC%19%7CBq%1Fm%0A2T%9C%9F%9B%B5%FD%A9%DF%EE%FE%26%A9%8F%97/%F2%9C%C8%7F%0B.%9A%06%07%F4%B2%06%25%88%88h%1C%3F8%FE%F5CF%C3%A9%07_%0Ew%B4%AF%5B%85%84%83%AC%FE1%AB%A9J%2CF%A2%23%91K%A4%3F%9C-%BFa%D5%C8%90%84%8D%F0%FD%C8%90%3E%B8%E9%EB%DF%EC%1Fw%E5%FE%D4%0D%D7%26%F4%1B%D07%BD%A4%E0%05he%F8%0D%84%19%12%A3%DF%3A%B07%E1%B5%C9%0FX%07%26%7E%CFU%02i%B1%BB%E38g+J%ABO%3F%F4%1B%97%96%08%FA%B1%9B%BFt%06C%AB0ta%88v%7B%08%23.%DB%82O%94%25%DC%83Hn%D9u%E9%F1%AB%C5%7B%3B%1A%98%E2*%E4R%D9%853%E57%C6%0A%CD%E3%C3%02%83%3D%0Ak%AB%13%9C%8D%5C%BC%95%86%21%D1%07%A9%3D%5B%E5R%14%D7%D5%F4%E2%1Ev%DCfF%A3%D8%87%7D%E6%9D%E1%C8m%5B%FC%F5%D6Wf%84%0F%21%7C%DE+%0F_%A1h%E6%A0%E1%E4%FF%D2vm%E4R%0D%A80%EBa%B4%3B%E9p%A6%BA%1D%10D%E5%9A%9B%211%7D%C3%AC%EB%81-%3A%FD%EDs%E3z%F7%B5%0A%26%84%9A%87%F9%FA%FF%0AfAG%EB%85%9556%24b%3D1b5+%DE%80%96%84%60%0C%AB%B0%7C8c+%9Cdr%98%B0%EAtM%09%8D%FAf%EByAX%99%CC%16%16Bj%D7%A5%BCV%B9%60%A8%EE%81sz%F7%D0%7F7N%1D8%C8%DB6%19%14%93%EF%3F%7F8%5E%3B%24%20%E8%B6*%20%3D%84%DC%AB%F5u%AD%22-%D1%3E%AC%C9%D8%BB%8D%D3%0F%1B%14%10x%DBj%A6Z%96mv%F6%92a%16%15%25%25%FA%0B%B7%A1-w%9C%3D%852M%7Frr7%ED%9A%C9%A0%D9%C2L%CDkz%28%BA%9B_S5%1A%BE%B7%3B%F1%A0%60%1B%B8%02%A2B%FA%C8%D3%0A.%FD%BC%03A%00%09%93%FA%0Fl%95%04%CF%AD%E6P%844%0CQRbIycc%AB%B6%C5%A4%DAd%60%07%BB%EA%3A%ECpG%C6%913t%26*%94%08%CC%A5%CE%02%7F5%84YZ%E1%A5%D5%87K%0A%9E%18%E0%EBo%10%2C%CDc%05s%0C%0AE/%DD%F5%F5%06QRb%0A53%F6%2C%9C%5EX%D36%07%AB%A8%B6%FA%A9%A9%E3n%C9%96%9C%B2k%D7%FC%94%AA%C5%0F%0C%1C%3C%F3%9Bs%B9%EF%CF%CF%DE9H%28%CC%60%16%0CP%A9%87%F1OB%27%AE_%A9%3D%3A%ED%F9%96%FDUk%B5%184%D6%FA%8D%06%93%C9%BB%A4%AE%B6%A9%97J%3D%BE%A8%AEfh%B0%DA%F3l%3B%E7%84%F0%FC%7F%1E*%CA%7F%AC%9F%8F%9F7nRL%BC%F0%8B%85%FB%F5%9A%D2%5D%8Bp%BA%1A%BE%A2%850%27%09%ED%A33%18%FC%85%C9%B5B%18%89t%B0%97%5C%D1%CA%FCs%F2%C6%D5%C6%8E%E6X%C1%CCVT%5B%AD%E4%85%0C%12%BD%8Df%B3%87%8B%FD%08ob%B9%13a%A1%DD%C4%D8x%25%97%B3%94k%27%60%C0%DD%A4%1C%2C%CA_%BF%24zJK%00%0F%04%ADR%26%F3t%26%DF%89+%B1%F5%FA%CCA%C3%5Bi%B3%BB/%9D%D3jY%F6o%84%0B%9D%17%25%252%C2%3E%C5_%11%11%89%5D%E1%8B%B3%C7%9D%1CGBlM%AE%F0%5D%B7%17%15%CA%3D%D8%F6%B5s%7E%1B%C2%FD%FC%9B%85%3E%BC%F6%E0%7C%90%08%EEXz%B9%BA2%A1%B8%AE%E6%DD%9Dy9%3Eo%CF%F8%A9R%D8.%28%ABu%BD%A1%3E%B2%23%F9%83%94%3B%8F%C3%A8Eg%C0%00%80%8D%B9%8F%97o%F9%A9%D2k%F1%BB/%9D%D3%C0gv%E3f%FDg%C2%9F%E3%F3%E4%FE%E1%D6%D9%01%8E%7D%15%D3%3A%14%5E%26%11_%E4%23%17%25b1%92%9C%3F%A8%D2jN%0E%09%08L%93I%24%ED%DA%D6%11%7E%7F%EA%C1%97%7D%942YX%23%AB%FFmj%ECb%D1%89%F8%25%FDz%AA%10%E3%F1V%28%0F%9F%B1%29%D13.%B4%AF%D6%91%86%60%B6%98%13%84%CEt%B4iI%5D%0D%D3%D1%9BR%2C%12%A7%D8F%AD%B5u%DC%CE%00%AD%ABJ%AB9%83z%9C%FC%CF1%91%BC%11%1B/%97%8A%C5%DB%B8%DA%87%B7Q%A1%B9%E9%96U%CD1%D11%12%E9%F6%CFrN%B4%0A%A1EB%ADT%2C%FE%7B%7BZ%00Jl%8D%09%EEm%16%B6%3FWbI%2C%CC%95%B2%D7%A7%93%FA%0F%C0%E4%FCzG%CF%D9%D9%B6%B8S%E3%88%07%0F%02%A1%9E%DE%8DBA%C6%CD%03E%C2%EF%99%CCf%A3%F03%C6%03%F2%FB%84m%8FP%7E%15%C3%CCAY%AF%CE%9C%0B%047%1EJ%D8g%DE%09%BD%DEP%FF%E5G%19%87%B5%C2%FF%0F%F0%F57%BA%BB%9C%1D%C5%F5tI%90%11%CEq%EC%ADP%14M%EE%1F%FEs%0B%B1d%DB%86%D2%23l%DF%5B%A1%8C%E1o%8C%9Dy9M%10%3C%C2%EF%F8*%3DR%8Es%13g%80%87%DAO.%95f%7E%13%3D%FF%FE%BD%93%17%3Eh%B6XFU8Y%82%08%82%8B%CFC%FB1%D0%D0%ACKN%3E%95%D5%CA%9C%F3%F8%A8%B1*%14%7C%B5%0D%5B%C6%0D%8E%02%B5%B6kh%89D%A2%0EW%F6F%0E%1C%12%BA%85%7D%B9x%5C%8C%8A%91H%A0-9%14f%10%3E%F8%BF%B3%21%D5z%A3%F1%C1%23%25%85F%A1%D0%84%16%84%C2%C1%0A%A9l%9F%9D%9F%1C%B2%1D%0B%F0c1%12%E9%F3N%5EZ%9B%20%04%7E_%FE%05%8B0d%1B%E73u%C0%20%1C%E3%A2%B0%AA%BC%E0%9A%7D%90D%1C%A4%F6%7C%201.%5E%C5oG%DB%7D%94yXg4%9B%FF%20%D4z%EC%F5%E93Q%D1%0C%21%96%B9%5CZ%C3m%02%93kW%5B%8D%D0%E9%B6%E8%AEq%D4%C7%DBG%87%DA%866%82%C7%07%05%7B%9F%18%3D%B6U%04%CCWy9%CD%BC%A6%CAc%B2X%8C6%BB%24%3F%1D%3AR%AF%90%CA%B2%D06%F2%CD+%CA%FBx%FB%CCCr%F5%BAc%07%DA%3A%15%FE%D8%AB%ED%F5%99%80%94FVo%16n%E0%DA%94jc%3D%8CN%3F%DD%CA%C4%92%3At%3A%04%D4%E7%A7ON%1F%12%10%F4Q%B3%D10%D06b%AB%A4%BE%E6%F3%25%D1%B1Vm%0C7Do/%EF%E5%B6%FB%82%F0%99v%F8_%EF%C1%3F%81u%CB%FE%7D%F1%ECJB%C8s%10%82%10l%C2b%C2%F7%12%DC%F20%CB%B6%E5%9E%1C%CCG%F8%A1%BD%A1%25%7C%94%99%9E%21JJ%B4%96%16RHe%F3C%3D%BDC%90%CB%C77%0F4e%AE%F0nbG%9B%0C%7E2%C5%96%159%1B%B2%8ED%09+%3C%AC%9B5W%BE2m%D7%1A%E5%96%95%7F%B0%92t%F4%00%00%07%C9IDAT@5v%81%7F%23R%C50%B12%89D%E9%25W%88k%9A%B43%9D%3C%0E%CC%5E%0B%DEKO%FDbc%C2%7C9%3Fv%10%21%9BSv-%0C%93%A2%FE%99%3F%0A%17%A6%2C%E14%83%16%1E%1D%11%29O-%B8%F8%98%7C%F3%0A%08%A2%CB%DC%F6N%AD%92%CC%99%FE%5E%84%D3_%B8%B0%26V%7E%1E%E8%17%10%94%7C*k%9Fr%CB%CA%96%855e%12%C9x%99D2M%B8%B0%26%E1%84%D8k%7B%BEe+4%8D%07m%D3+%EC%F5%29%AE%FB%A5%98X%F9%FAc%07Wq%B9z%FCo%C2%3C%E5%F2%A9%8CD%12%CC%9ALr%9B%CA%13%1Di%8Bn%19G0%D3%BD%9F%9E%3A%27%BF%A6*A%94%94%F8%29%B9e%A6%FE%E5%84%7EaR%A1%3F%0A%0F%0A%F95U%16%DB%AA%1E%3A%83%E1%5C%C6%D5%E2%D1Bm%10%A5%E9%06%F9%F7%1A%5C%A9i%5C%C5%D7%82D%24%B2%93%F55W%05%AB%BD%5E%810%F5Sz%9C%AF%D55%E5%0Bj%9Fb%ED%B9%27%9E%185%B6U%E2%3F*%FF%B7W%1F%95r%F7%D1iA%16%A8%F6%5C%FA%EF%0Bg%27%FCr%FC%C4%A0%E7%C7O%0A%C8%B8Z%7CdaT4%81i%26X%ED%B5%82p9a%83%FD%03%FB%E2F%C5%20%81/%EDD%FC%12%BB%1A%93%D1l%CE%A8%D04%C6a%B06%1B%8CO%3C%92%B9-%AF%AC%B1%E1%D5%25%D1%B1%B7%EA%16%CA%E4%A9%F7%E2%F8i6%1A%9E%D8q%F6%D4%F1@%B5gK%9D%BCxk%85%F0%DE%8A%B4%82%8B%D6%25%3B%F8%02%BE%3C%98%7C%DE%3D%F4%DFF%D6d%DA%D4%D9%D2M%D0%96%8E%5D%29%BE%28%11%1D%08%C2DN8a%86%C5C%B1%EE%DA%D9%F2%1B%AF%F0%DF%15%16%5E%DD%94%9DY%F7U%5E%8E%D3%C7%81/%CCc%CB%CA%A4U%FBw%FDB%98%EF%83%1A%94O%ED%DC%FC%98%28%29%F1%BF%BC%7F%0A%82F%BDm%D5%B9%94%F3g%C6%F2%A9%17%18%5B%5B%1F%7FF%96Zpi%3E%04H%5BK%D28y%3E%C9%F0%29%BD%BA%FB%9BO%16%8D%8D%91%F3%C7%C1%DF%F8%88%21%CC%99%F2%D2%C1E%B5%D5%AB%88%A0%A8%AFm%8E%16*%94%C0l%8A*%19%F6%8E%D1F%9F%22%3A%D4%5B%98%AF%C7%17%06%9E%F5%D9%C7%B6%E7%D9%A1%B6%E8%8Eq%F4%F6%C1%3D%E4%BD%99%8F%28p%AFg%5C-%7EEx%FE%C2%7D%AE%DA%BF%CB%604%9B%97%D8%FA%E7%60%09%D8s%F9%FC%A3OE%DE%D7%AAn%A9%AD%10%EC%C8%0A%07%9B%1E%5D%E0%83%B6%28%AC%AD%19%5ET%5B%3D%5C%CB%EA%1F%21%9C%B9%1CB%91%EF%3B%7Cg%D5%FE%5D%ACR*%DB%D4%F4%B4%FD%FC%3A%CA%DDK%A7M%8B%9C%FF%E9%95%0DYG%10nl%0Dk%C5%203%5B%2C%EB%11%89H%AC%B5%135%89%FCM%96%94%9D%A9A%F0%85%A3%FD%F5%F6%F2Y%88R%3Dx%FF%EB%09%B1jOF%BE%FE%D1%11QV%21%98Sv%8Du%E7%8A%CFw3p%86%1B%CD%E6%89%7F%3D%7EX%BBz%FFn%03_X%98os%BC%84%D5%E9%F9%EA%22%A5%8D%0D%EB%BA%B2%B6%12%26%19%D6d%1Cz%F4J%D1%E5%E7S%B6%EB%84%E6%3FLL%C2%0A%278%3E%84%18%CE%AD%B8%B6%9Ais%C7vhz%FA%ED%17+5%9A%12a%B29%26%1A%14%12%C6%8A%CDB%F3%97%96%D5%3F%BB%29%3BC%87%87%1B%E1w1%CEp.%7EJ%0F%5DW%BB%D3%EAC1%99P%23%B0b%E9%AE%AF%1B%F9k%E7%27%3F%E1u%0BWBG%25%9B%97%BF%DF%89%60%81%F7%9B%9F%FEc%8C%A3%C0%18g%FA%94%7F%F15%28%ED%D1%91%B6%E8%8EqTT%5BC%9E%DA%B9%D9%00w%83%F0%FCy0%3Fp5%25%3Fw%908%7DH%26%11%A7C%9B%B5uQ%10%CE%A2%93%B8%EF%3B%BC%5D%EC%CC%F9%10A1q%9C%07%DF.x%E1%3D%DFw%E8%DF%E7S%BEh.ol%FC%1Ac%D1%D9%7DS%EE%1E%BA%E48%87p%99wr%C7%8D%BFf%1C%FE%23%B9%E5%DF%FAx%D7%C4%A7%AD%02%07%91%8AAj%CF%20%0C%22%0C%60%85L%BA%A3%C9%C0%CE%89%3D%F8%8F%04%98%25%A1%D1%09%831%F0%7E%E6%D1%E4-%7Cq%60%DE%04%82%C1%3B2%28%D4e%09%CD%1D%C5%EA/%B1%A9%E6%D1Y%90%8Bu%B6%8D%F5%95%1C%81IH%94%94%D8%E7%C4%F5+Ks%CA%AE%BF%E1%AFT5%8F%0C%0AiY%1EG%B8%20%22*%EE%A3XqW%8B%E8%92%FF%AD%7E%3C%04%CE%FA%3F%1D%D9%FF%BE%C9b%F6%1C%1A%10%D4j%9D%29L%14W%1B%EA%1A%8B%EBj%AC%89%F1%06%93%29%CDV%1Br%A6%0D%A11%7C%99%97%93%A1aY%05%BFp%27%B9%95%94%AF%B8%DE%D0%B0W%94%948%94s%D4%A3-%26b%8D%B9%E4S%99C%C6%86%F6%93%0B%97%CF%A9%D559%95%90%ED%C4%B5%23%0Da%E8%E5%EA%CAEXO%0CK%B1%0C%EB%15%D4%8C%E4%7C%E1%F9%F1%0B3J%C5b%EB%C2%8C%5Cdg%BB%DA%A0m%9F%A2%FA%BA%ED%22%97%97%AB+%9A%0Bn%AD%10%81%80%84%AD%0E%F6%E1t%5Bt%C78%D2%1B%8D%F3V%EF%DF%FD%A9B*U%C5%0D%18d%5D%24%15%FB%3D%5C%9C%8F%CA%FEZ%BD%D1%F8%7C%5B%11%A9Z%96%7D%9C5%99%B6-%F8%F2%B3%E9%B1a%11Vs3%FF%FB%26%83%01%F6%C4%27%B9%BEI%12%3E%F8%D8%F3%A3%A3%D2%CE%F3%29%DB%AD%E6%84%08%BF%00%3C%2C%B7*%5C%8C%8AB%E7*Ko%1ALf%7D%B3%D1%F0%3A%CD%1F%EB%B9%88%2C%16%8B%5BN%1Ef%C51%C1%BD%D7%F36%ED%ADc%1F%13a%B5%E6%B8%01%83%D4%98%08%B9%04%EA%DB%1C%DBX%B0%93%10Q%24n%C8%D2%C6%06V%29c%D6q%CB%C5t%3B%ED-%E7%DE%11%1C%2C%E3%DE%D9%7D%D9%5B%A2%FE%10%B7d%7B%7BK%D4/%9A%12%16%FEWa%01%D7_%7C%BD%0D%25%B6%E6%B47i9X*%9E%3Fv%89%BD%09%BC%23m%C8Uyw%14%28r%DB2%22m%9CO%A7%7Cdm%C1EQ%86%D9%B9%96%5C%EE%DA%BB%E4Wq%D0%A7N/%C3%DF%99%B6%E8%CA8%0A%FC%F2%8F%7Fym%F2%F4%DF%08%1Fj%60%FE%B4%2C%5E+%22%F6%FB%BDC%CB%09q%ED%9D%208%B7V%BF%E7j%7D%DARbO%18%09%FA%CE%F6ZK%B8k%A5%3E%B1%1EN%B7%092%93%C5%12%06%AD%0B%DB%7B%A9%D4k%AA%B5ZEJ%CC%CFE%F6%7E%0Bm%0E%DA%DB%8F%29%02%B1%BB%E1%26%B6%04%DB%DC/%04P%3C%3E2r%BEpI%0F%CE%FF%E2K%93@%29%CE%D2%9E%20%A3P%BA%13%B7%E4%E4%00%89H%5C%06%DB3%04%19%5E%5BsO%C2%9C%10%85%92T%AC%D1T%ABf%98%DB%D7v%E7%E0L%8ET%88u%0D%3Cy%AEB%885%B3y%F9%01%83%C9%04%3BL%82%8FB9h%86%CD*%05%7C%E5%89%9Ey%99%14%0A%E5%5E%C7m%82%0C%FE%B31%7B%FE%FA%91%96%D5%07%20%10%20%3Ebhdt%EA%C7l%88%A7%B7l%DE%A8%28%22tPS%DCC%B8_@%DD%8A%07%1E%F4%3DS%7EcV%A5%A6q%96%B0%24%14%E1%9C%FAI%A72uZ%96%7D%9Bv%01%85B%E9%A9%B8M%90%81%E1%81%21%F7%7Dx%FC%D0%A9i%03%07%FB%C1%041%A1%DF%00%19%26%CF%D4%82KDg4%FC%CD%89%5DP%BA%80%CE%60%90%C2%D9n%5B%87%92p%CEq%84%1B%23L%9C%3A%B9%29%14JO%C6%AD%82%8C3%11%FA%5Bk%21%16%E7Gx%C8%98%E6%26%03%AB@t%E3%BD%1AN%DF%8D%944%E8uY%8Fo%DF4%03%D1vcC%FBZ%13%3F%11%01v%F2%FA%95%C6%AA%26%8D%CC%602%BD%F7c%AF%E4Oq%1F%9D%8D%C2%A5P%5C%8D%DB%82%3D%28w%07%5C%B9%A0%A96%D1%80NE%A6Q%28%8EpeD/%85%D2U%A8%20%A3P%28%14J%8F%A6%CBE%83%29%14%0A%85B%B9c%10B%FE%1F%BF%00Q%BD%7D%2CP%CF%00%00%00%00IEND%AEB%60%82") ); w.main.add('statictext', [undefined, undefined, width, 100], erklaerung(), {multiline: true}); w.tellme = w.main.add('button', undefined, erzaehl_mehr()) w.tellme.onClick = function() { if ( app.locale == Locale.GERMAN_LOCALE ) { openWebsite( "https://www.project-octopus.net/agb" ); } else { openWebsite( "https://www.project-octopus.net/conditions" ); } } w.main.add("statictext", undefined, " "); w.cancelElement = w.btns.add('button', undefined, __('not_now')) w.defaultElement = w.btns.add('button', undefined, __('OK')) w.footer.add('statictext', undefined, 'v' + script_version) var what = w.show(); return what == 1; function erklaerung() { return __('what_we_do'); } function erzaehl_mehr() { return __('more'); } } function openWebsite(url) { url = url.split(" "); url = url.join("+"); url = encodeURI( url ); if (File.fs == "Macintosh") { var tempFile = File("~/Desktop/tempurl.webloc"); tempFile.open("w"); tempFile.write("\ \ \ \ URL\ "+url+"\ \ "); tempFile.close(); tempFile.execute(); for (var aux = 0; aux < 100; aux++) { $.sleep(10); } tempFile.remove(); } else { var tempFile = File("~/Desktop/cuppascript.url"); tempFile.open("w"); tempFile.write("[InternetShortcut]\ URL="+url); tempFile.close(); tempFile.execute(); for (var aux = 0; aux < 100; aux++) { $.sleep(10); } tempFile.remove(); } } /** * * @param {data|file} data_type: data wird in file geschrieben, file wird einfach kopiert * @param {string} src_base_path: Pfad zum repos auf Fileserver oder url zum Download * @param {string} subpath: subpfad vom repos aus, ohne Dateiname * @param {string} filename: Dateiname von sowohl quelle als auch Ziel * @param {string} tgt_basepath: idR der Pfad zum userData Ordner * @param {boolean} overwrite * @returns Pfad zur neuen Datei */ function download(data_type, src_base_path, subpath, filename, tgt_basepath, overwrite) { if (!data_type) data_type = "file"; var url = null; if (src_base_path.substr(0, 4).toLowerCase() == "http") url = src_base_path; var tgt_path; if (!tgt_basepath) tgt_basepath = gd.ud_path; if (subpath) { var tgt_path = tgt_basepath + "/" + subpath + "/" + filename; ensure_path_exists(subpath, tgt_basepath); } else { var tgt_path = tgt_basepath + "/" + filename; } if (url) { var request = { url: url, command: "", // defaults to "" port: "", // defaults to "" method: "GET", } if (data_type == "data") { var response = restix.fetch(request); if (response.error) throw new Error(response.error + "\n" + response.errorMsg); var json = clean_from_api( response.body ); var f = new File(tgt_path); // f.encoding = gd.encoding; f.open("w"); f.write(JSON.stringify(json, undefined, 2)); f.close(); return unescape(tgt_path) } else { if (overwrite || !File(tgt_path).exists) { var temp = new File(tgt_path); var response = restix.fetchFile(request, temp); if (response.error) throw new Error(response.error + "\n" + response.errorMsg); } } } else { if (subpath) { var src_path = src_base_path + "/" + subpath + "/" + filename; } else { var src_path = src_base_path + "/" + filename; } var src = new File(src_path); if (src.exists) { src.copy(tgt_path); return unescape(tgt_path); } else { throw ("File does not exist" + ": '" + src_path + "'"); } } } // -------------------------------------------------------------------------------------------------------- // Die Laravel-API gibt die Daten ganz anders zurück als ursprünglich geplant. // Also bau ich hier einen Adapter, dann ist die API unabhängig vom Script // API-Struktur in /api-response-v.json // -------------------------------------------------------------------------------------------------------- function clean_from_api( body ) { var json = { repos: gd.json_url, scripts: [] } if ( typeof body == "string" ) body = JSON.parse( body ); for ( var n = 0; n < body.data.length; n++ ) { var rs = {}; var b = body.data[n]; if ( b.hasOwnProperty('media')) { rs.script_id = b.script_id; rs.description = { de: b.description_de, en: b.description_en }; rs.subpath = b.subpath; rs.status = b.status; rs.type = b.type; rs.version = b.version; rs.in_id_folder = b.in_id_folder; rs.in_id_startup = b.in_id_startup; rs.in_menu = b.in_menu; rs.in_hub_panel = b.in_hub_panel; rs.help_url = b.help_url; rs.menu_label = { de: b.title_de, en: b.title_en } rs.filename = ""; rs.url = ""; rs.order = 0; for ( var p in b.media ) { if ( b.media[p].hasOwnProperty('order') && b.media[p].order > rs.order) { rs.filename = b.media[p].file_name; rs.url = b.media[p].original_url rs.order = b.media[p].order } // has order } // media loop } // has media json.scripts.push( rs ); } // data-loop return json; } function remove() { var _main = app.menus.item("$ID/Main"); var hub_menu = _main.submenus.item(gd.hub_name) hub_menu.remove(); } function get_paths_to_script_folder() { var panel_folder = app.scriptPreferences.scriptsFolder var startup_folder_path = panel_folder.parent.fullName + "/Startup Scripts"; var startup_folder = new Folder(startup_folder_path); if (!startup_folder.exists) startup_folder.create(); return { "panel": panel_folder.fullName, "startup": startup_folder_path } } function ensure_path_exists(sub_path, base_path, is_file_path) { if (!sub_path) return base_path; var path = unescape(base_path); sub_path = sub_path.replace(/^\//, ""); var bits = sub_path.split("/"); if (is_file_path) { // Das letzte bit ist der Dateiname bits.pop(); } for (var n = 0; n < bits.length; n++) { if (!Folder(path + "/" + bits[n]).exists) Folder(path + "/" + bits[n]).create(); path += "/" + bits[n]; } return path; } function read_file(file_path) { // Es soll möglich sein, ein Fileobject zu übergeben if (file_path.constructor.name == "File") { if (file_path.exists) { file_path = file_path.fullName; } else { file_path = file_path.name; } } // Wir haben absoluten Pfad if (file_path.charAt(0) == "/" || file_path.charAt(0) == "~") { var f = new File(file_path); if (!f.exists) { return null; } // f.encoding = gd.encoding; f.open("r"); var rs = f.read(); f.close(); return rs; } // Wir haben relativen Pfad file_path = file_path.replace(/^\.\//, ""); var doc_path, desktop_path, script_path, user_path; if (app.documents.length && app.activeDocument.saved) doc_path = File(app.activeDocument.fullName).parent.fullName; desktop_path = Folder.desktop.fullName; script_path = File(get_script_path().path).parent.fullName; // user_path = Folder.userData.fullName + "/" + gd.ud_base; user_path = gd.ud_path; var read_this_path = ""; if (doc_path && File(doc_path + "/" + file_path).exists) { read_this_path = doc_path + "/" + file_path; } else if (File(desktop_path + "/" + file_path).exists) { read_this_path = desktop_path + "/" + file_path; } else if (File(script_path + "/" + file_path).exists) { read_this_path = script_path + "/" + file_path; } else if (File(user_path + "/" + file_path).exists) { read_this_path = user_path + "/" + file_path; } if (read_this_path) { var f = new File(read_this_path); // f.encoding = gd.encoding; f.open("r"); var rs = f.read(); f.close(); return rs; } else { return null; } } function get_script_path( ) { var scriptPath, scriptFolderPath; try { scriptPath = app.activeScript.fullName; return { path: scriptPath, dbg: false }; } catch (e) { /* We're running from the ESTK*/ scriptPath = e.fileName return { path: scriptPath, dbg: true }; } return scriptPath; } function is_installable( status ) { if ( status == "public" ) return true; if ( status == "beta" && beta ) return true; if ( status == "dev" && dev ) return true; return false; } function init_classes() { // wir haben den Namen der neu geladenen JSON und den Namen der lokalen, angereicherten JSON gd = {}; gd.scriptname = 'Octopus-Starter'; gd.hub_name = "Octopus"; gd.config_name = "config.json"; gd.local_config_name = "local_config.json"; gd.ud_base = "cs_octopus_" + app.version.split(".").shift(); // Der Name des Ordners in userData gd.ud_path = ensure_path_exists(gd.ud_base, Folder.userData); gd.encoding = "UTF-8"; // Beim lesen und schreiben ("ISO-8859-1" auf Windows?) gd.json_url = "https://octopus.cuppascript.de/api/v1/scripts"; // urls mit Dateiname // gd.json_url = "/Users/me/Dropbox/Documents/CS4 Scriptfolder/ octopus/scripthub/hub"; // muss ohne Dateiname sein // ------------------------------------------------------------------------------------------------ // Script-Class // ------------------------------------------------------------------------------------------------ if (typeof Skript !== "object") { Skript = function (cfg, repos) { this.repos = repos; var _props = { script_id: "test", // description: "test", url: "", subpath: "", filename: "", status: "public", type: "script", version: "0.1", in_id_folder: false, in_menu: false, in_hub_panel: true, sub_menu: "", menu_position: "", menu_item: "", menu_label: "", menu_separator: false } // this.create_log = []; for (var _p in _props) { if (cfg.hasOwnProperty(_p)) { this[_p] = cfg[_p] //this.create_log.push( _p + " found in cfg ( " + (typeof cfg[_p] + ")")) } else { this[_p] = _props[_p] // this.create_log.push( _p + " taken from default") } } for ( var _p in cfg ) { if ( ! this.hasOwnProperty(_p) ) { this[_p] = cfg[_p]; } } } // Der Pfad zum Script im repository Skript.prototype.repos_path = function () { if (this.subpath) { return this.repos + "/" + this.subpath + "/" + this.filename; } else { return this.repos + "/" + this.filename; } } // Der Pfad zum Script im UserData-Hub-Folder Skript.prototype.ud_path = function () { if (this.subpath) { return ensure_path_exists(this.subpath, gd.ud_path) + "/" + this.filename; } else { return gd.ud_path + "/" + this.filename; } } // Der Pfad zum Script im "Script Panel" oder "Startup Script" Folder Skript.prototype.id_path = function () { var panel = null, startup = null; var scriptfolder_paths = get_paths_to_script_folder(); if (this.type == "startup") { return { panel: null, startup: ensure_path_exists(this.subpath, scriptfolder_paths.startup) + "/" + this.filename } // return ensure_path_exists(this.subpath, scriptfolder_paths.startup) + "/" + this.filename; } else if (this.type == "hybrid") { return { panel: ensure_path_exists(this.subpath, scriptfolder_paths.panel) + "/" + this.filename, startup: ensure_path_exists(this.subpath, scriptfolder_paths.startup) + "/" + this.filename } } else { return { panel: ensure_path_exists(this.subpath, scriptfolder_paths.panel) + "/" + this.filename, startup: null } // return ensure_path_exists(this.subpath, scriptfolder_paths.panel) + "/" + this.filename; } } Skript.prototype.download = function () { // Aus dem Internet oder aus einem Fileserver-Hub? if (this.url) { var src_url = this.url; // log( "download from url", this.script_id) var request = { url: src_url, command: "", // defaults to "" port: "", // defaults to "" method: "GET", } var temp = new File(this.ud_path()); var response = restix.fetchFile(request, temp); if (response.error) throw new Error(response.error + "\n" + response.errorMsg); return this.ud_path(); } else { // log("download from hub"); var src_file = new File(this.repos_path()); if (src_file.exists) { var aux = this.ud_path(); var rs = src_file.copy(this.ud_path()) } else { throw new Error("Script-Datei '" + this.script_id + "' liegt nicht vor im Repository"); } } } Skript.prototype.install = function () { var a = this; if ( is_installable(this.status) && (this.in_id_folder || this.in_id_startup)) { var src_file = new File(this.ud_path()); var tgt_path = this.id_path(); // log( "Kopiere in ID-Folder", this.script_id); // log( "...von '" + this.ud_path() + "' in '" + tgt_path.panel + "'") if (!src_file.exists) { throw new Error("Script '" + this.script_id + "' ist anscheinend nicht runtergeladen"); return; } if ( tgt_path.panel ) { var aux = src_file.copy(tgt_path.panel); // log( "...panel-copy success: " + aux.toString() ) } if ( tgt_path.startup ) { if ( this.in_id_startup ) { var aux = src_file.copy(tgt_path.startup); // log( "...startup-copy success: " + aux.toString() ) } } } } Skript.prototype.uninstall = function ( startup_only ) { // log("uninstalling", this.script_id); var tgt_path = this.id_path(); var tgt; if ( tgt_path.panel && ! startup_only ) { tgt = new File( tgt_path.panel ); if (tgt.exists) tgt.remove(); } if ( tgt_path.startup ) { tgt = new File( tgt_path.startup ); if (tgt.exists) tgt.remove(); } } } // ------------------------------------------------------------------------------------------------ // Satz-Class // ------------------------------------------------------------------------------------------------ if (typeof Satz !== "object") { Satz = function (rawdata) { if (!rawdata) { var data = {}; this.scripts = {}; } else { var data = JSON.parse(rawdata); this.repos_path = data.repos_path; this.scripts = {}; for (var n = 0; n < data.scripts.length; n++) { // Damit sind Kommentare im JSON möglich if (typeof data.scripts[n] !== "string") { this.scripts[data.scripts[n].script_id] = new Skript(data.scripts[n], this.repos_path); } } } } Satz.prototype.get_script = function (script_id) { if (this.scripts.hasOwnProperty(script_id)) { return this.scripts[script_id]; } return null; } Satz.prototype.save = function () { // ------------------------------------------------------------------------------------- // remote_satz.scripts ist { id: {} } // aber in der config ist data.scripts [ {id:...} ] // ------------------------------------------------------------------------------------- var _l = { repos_path: this.repos_path, scripts: [] } for ( var _s in this.scripts ) { _l.scripts.push( this.scripts[_s] ); } var f = new File(gd.ud_path + "/" + gd.local_config_name); f.encoding = gd.encoding; f.open("w"); f.write(JSON.stringify(_l, undefined, 2)); f.close(); } } } // -------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------- // JSON und RESTIX // -------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------- function init() { uid = ($.os.substring(0, 7)=="Windows") ? $.getenv("USERNAME") : $.getenv("USER") beta = (uid == "cstef" || uid == "Gerald Singelmann" || uid == "me"); dev = (uid == "Gerald Singelmann" || uid == "me"); // ------------------------------------------------------------------------------------------------ // Globale base64 Variablen // ------------------------------------------------------------------------------------------------ END_OF_INPUT = -1; base64Chars = new Array( 'A','B','C','D','E','F','G','H', 'I','J','K','L','M','N','O','P', 'Q','R','S','T','U','V','W','X', 'Y','Z','a','b','c','d','e','f', 'g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v', 'w','x','y','z','0','1','2','3', '4','5','6','7','8','9','+','/' ); reverseBase64Chars = new Array(); for (var i=0; i < base64Chars.length; i++){ reverseBase64Chars[base64Chars[i]] = i; } // ------------------------------------------------------------------------------------------------ // JSON // ------------------------------------------------------------------------------------------------ if (typeof JSON !== "object") { JSON = {}; } (function () { "use strict"; var rx_one = /^[\],:{}\s]*$/; var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g; var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; var rx_four = /(?:^|:|,)(?:\s*\[)+/g; var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; function f(n) { // Format integers to have at least two digits. return (n < 10) ? "0" + n : n; } function this_value() { return this.valueOf(); } if (typeof Date.prototype.toJSON !== "function") { Date.prototype.toJSON = function () { return isFinite(this.valueOf()) ? ( this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" ) : null; }; Boolean.prototype.toJSON = this_value; Number.prototype.toJSON = this_value; String.prototype.toJSON = this_value; } var gap; var indent; var meta; var rep; function quote(string) { // If the string contains no control characters, no quote characters, and no // backslash characters, then we can safely slap some quotes around it. // Otherwise we must also replace the offending characters with safe escape // sequences. rx_escapable.lastIndex = 0; return rx_escapable.test(string) ? "\"" + string.replace(rx_escapable, function (a) { var c = meta[a]; return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); }) + "\"" : "\"" + string + "\""; } function str(key, holder) { // Produce a string from holder[key]. var i; // The loop counter. var k; // The member key. var v; // The member value. var length; var mind = gap; var partial; var value = holder[key]; // If the value has a toJSON method, call it to obtain a replacement value. if ( value && typeof value === "object" && typeof value.toJSON === "function" ) { value = value.toJSON(key); } // If we were called with a replacer function, then call the replacer to // obtain a replacement value. if (typeof rep === "function") { value = rep.call(holder, key, value); } // What happens next depends on the value's type. switch (typeof value) { case "string": return quote(value); case "number": // JSON numbers must be finite. Encode non-finite numbers as null. return (isFinite(value)) ? String(value) : "null"; case "boolean": case "null": // If the value is a boolean or null, convert it to a string. Note: // typeof null does not produce "null". The case is included here in // the remote chance that this gets fixed someday. return String(value); // If the type is "object", we might be dealing with an object or an array or // null. case "object": // Due to a specification blunder in ECMAScript, typeof null is "object", // so watch out for that case. if (!value) { return "null"; } // Make an array to hold the partial results of stringifying this object value. gap += indent; partial = []; // Is the value an array? if (Object.prototype.toString.apply(value) === "[object Array]") { // The value is an array. Stringify every element. Use null as a placeholder // for non-JSON values. length = value.length; for (i = 0; i < length; i += 1) { partial[i] = str(i, value) || "null"; } // Join all of the elements together, separated with commas, and wrap them in // brackets. v = partial.length === 0 ? "[]" : gap ? ( "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]" ) : "[" + partial.join(",") + "]"; gap = mind; return v; } // If the replacer is an array, use it to select the members to be stringified. if (rep && typeof rep === "object") { length = rep.length; for (i = 0; i < length; i += 1) { if (typeof rep[i] === "string") { k = rep[i]; v = str(k, value); if (v) { partial.push(quote(k) + ( (gap) ? ": " : ":" ) + v); } } } } else { // Otherwise, iterate through all of the keys in the object. for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = str(k, value); if (v) { partial.push(quote(k) + ( (gap) ? ": " : ":" ) + v); } } } } // Join all of the member texts together, separated with commas, // and wrap them in braces. v = partial.length === 0 ? "{}" : gap ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}" : "{" + partial.join(",") + "}"; gap = mind; return v; } } // If the JSON object does not yet have a stringify method, give it one. if (typeof JSON.stringify !== "function") { meta = { // table of character substitutions "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", "\"": "\\\"", "\\": "\\\\" }; JSON.stringify = function (value, replacer, space) { // The stringify method takes a value and an optional replacer, and an optional // space parameter, and returns a JSON text. The replacer can be a function // that can replace values, or an array of strings that will select the keys. // A default replacer method can be provided. Use of the space parameter can // produce text that is more easily readable. var i; gap = ""; indent = ""; // If the space parameter is a number, make an indent string containing that // many spaces. if (typeof space === "number") { for (i = 0; i < space; i += 1) { indent += " "; } // If the space parameter is a string, it will be used as the indent string. } else if (typeof space === "string") { indent = space; } // If there is a replacer, it must be a function or an array. // Otherwise, throw an error. rep = replacer; if (replacer && typeof replacer !== "function" && ( typeof replacer !== "object" || typeof replacer.length !== "number" )) { throw new Error("JSON.stringify"); } // Make a fake root object containing our value under the key of "". // Return the result of stringifying the value. return str("", {"": value}); }; } // If the JSON object does not yet have a parse method, give it one. if (typeof JSON.parse !== "function") { JSON.parse = function (text, reviver) { // The parse method takes a text and an optional reviver function, and returns // a JavaScript value if the text is a valid JSON text. var j; function walk(holder, key) { // The walk method is used to recursively walk the resulting structure so // that modifications can be made. var k; var v; var value = holder[key]; if (value && typeof value === "object") { for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v; } else { delete value[k]; } } } } return reviver.call(holder, key, value); } // Parsing happens in four stages. In the first stage, we replace certain // Unicode characters with escape sequences. JavaScript handles many characters // incorrectly, either silently deleting them, or treating them as line endings. text = String(text); rx_dangerous.lastIndex = 0; if (rx_dangerous.test(text)) { text = text.replace(rx_dangerous, function (a) { return ( "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) ); }); } // In the second stage, we run the text against regular expressions that look // for non-JSON patterns. We are especially concerned with "()" and "new" // because they can cause invocation, and "=" because it can cause mutation. // But just to be safe, we want to reject all unexpected forms. // We split the second stage into 4 regexp operations in order to work around // crippling inefficiencies in IE's and Safari's regexp engines. First we // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we // replace all simple value tokens with "]" characters. Third, we delete all // open brackets that follow a colon or comma or that begin the text. Finally, // we look to see that the remaining characters are only whitespace or "]" or // "," or ":" or "{" or "}". If that is so, then the text is safe for eval. if ( rx_one.test( text .replace(rx_two, "@") .replace(rx_three, "]") .replace(rx_four, "") ) ) { // In the third stage we use the eval function to compile the text into a // JavaScript structure. The "{" operator is subject to a syntactic ambiguity // in JavaScript: it can begin a block or an object literal. We wrap the text // in parens to eliminate the ambiguity. j = eval("(" + text + ")"); // In the optional fourth stage, we recursively walk the new structure, passing // each name/value pair to a reviver function for possible transformation. return (typeof reviver === "function") ? walk({"": j}, "") : j; } // If the text is not JSON parseable, then a SyntaxError is thrown. throw new SyntaxError("JSON.parse"); }; } }()); // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ // HTTP // ------------------------------------------------------------------------------------------------ /**************** # Connect InDesign to the web * HTTPS supported * Works form CS4 to CC 2018 (ExtendScript based library) * Based on VBScript/ServerXMLHTTP (Win) AppleScript/curl (Mac) relies on app.doScript() ## Getting started See examples/connect.jsx * @Version: 1.2 * @Date: 2019-02-20 * @Author: Gregor Fellenz, http://www.publishingx.de * Acknowledgments: ** Library design pattern from Marc Aturet https://forums.adobe.com/thread/1111415 */ $.global.hasOwnProperty('restix') || (function (HOST, SELF) { HOST[SELF] = SELF; /**************** * PRIVATE */ var INNER = {}; INNER.version = "2019-02-20-1.2"; /** Returns if the operating system is windows * @return {String} true | false */ INNER.isWindows = function () { return ($.os.indexOf("Windows") > -1); } /** Check the request information object and construct a full URL * @param {request} Request information object * @returns{request} Request information object or throws an error */ INNER.checkRequest = function (request) { if (request.url == undefined || request.url == "") throw Error("No property [url] found/set"); if (request.url.toString().slice(-1) == "/") request.url = request.url.toString().slice(0, -1); if (request.command == undefined) request.command = ""; if (request.command.toString()[0] == "/") request.command = request.command.toString().substr(1); if (request.port == undefined) request.port = ""; if (isNaN(request.port)) throw Error("[port] is Not a Number"); // Add port if (request.port != "") { request.fullURL = request.url + ":" + request.port; } else { request.fullURL = request.url; } // Add command if (request.command != "") { request.fullURL = request.fullURL + "/" + request.command; } if (request.method == undefined || request.method == "") request.method = "GET"; if (!(request.method == "GET" || request.method == "POST" || request.method == "PUT" || request.method == "PATCH" || request.method == "DELETE")) throw Error("Method " + request.method + " is not supported"); // Missing HEAD if (request.method == "POST" && (request.binaryFilePath == undefined || request.binaryFilePath == "")) request.binaryFilePath = false; if (request.headers == undefined) request.headers = []; if (!(request.headers instanceof Array)) throw Error("Provide [headers] as Array of {name:'',value''} objects"); if (request.body == undefined || request.body == "") request.body = false; if (request.body && request.binaryFilePath) throw Error("You must not provide [body] and [binaryFilePath]"); request.unsafe = false; if (request.proxy == undefined) request.proxy = false; return request; } /** The main connection function. Need to be slashed * @return {response} Response result object */ INNER.processRequest = function (request, outFile) { var response = { error: false, errorMsg: "", body: "", httpStatus: 900 }; var scriptCommands = []; var systemCmd = ""; var result = ""; if (INNER.isWindows()) { // Since Win10 Update Feb 2019 msxml3 does not work anymore... scriptCommands.push('Dim xHttp : Set xHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")'); // Konstanten für ADODB.Stream scriptCommands.push('Const adTypeBinary = 1'); scriptCommands.push('Const adSaveCreateOverWrite = 2'); scriptCommands.push('Const adModeReadWrite = 3'); scriptCommands.push('Dim res'); scriptCommands.push('On Error Resume Next'); scriptCommands.push('xHttp.Open "' + request.method + '", "' + request.fullURL + '", False'); if (request.proxy != false) { // xHttp.SetProxy 1 scriptCommands.push('xHttp.setProxy 2, "' + request.proxy + '"'); } for (var i = 0; i < request.headers.length; i++) { scriptCommands.push('xHttp.setRequestHeader "' + request.headers[i].name + '","' + request.headers[i].value + '"'); } if (request.unsafe) { //~ ' 2 stands for SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS //~ ' 13056 means ignore all server side cert error scriptCommands.push('xHttp.setOption 2, 13056'); } if (request.body) { scriptCommands.push('xHttp.Send "' + request.body.replace(/"/g, '""').replace(/\n|\r/g, '') + '"'); } else if (request.method == "POST" && request.binaryFilePath) { // http://www.vbforums.com/showthread.php?418570-RESOLVED-HTTP-POST-a-zip-file scriptCommands.push(' Dim sFile'); scriptCommands.push(' sFile = "' + request.binaryFilePath + '"'); scriptCommands.push(' Set objStream = CreateObject("ADODB.Stream")'); scriptCommands.push(' objStream.Type = adTypeBinary'); scriptCommands.push(' objStream.Mode = adModeReadWrite'); scriptCommands.push(' objStream.Open'); scriptCommands.push(' objStream.LoadFromFile(sFile)'); scriptCommands.push(' xHttp.SetRequestHeader "Content-Length", objStream.Size'); scriptCommands.push(' xHttp.Send objStream.Read(objStream.Size)'); scriptCommands.push(' Set objStream= Nothing'); } else { scriptCommands.push('xHttp.Send'); } scriptCommands.push('If err.Number = 0 Then'); if (outFile) { scriptCommands.push(' Set objStream = CreateObject("ADODB.Stream")'); scriptCommands.push(' objStream.Type = adTypeBinary'); scriptCommands.push(' objStream.Mode = adModeReadWrite'); scriptCommands.push(' objStream.Open'); scriptCommands.push(' objStream.Write xHttp.responseBody'); scriptCommands.push(' objStream.SaveToFile "' + outFile.fsName + '" , adSaveCreateOverWrite'); scriptCommands.push(' objStream.Close'); scriptCommands.push(' Set objStream= Nothing'); /* ADODB.Stream let's you also save text data and let's you specify charset (codepage) for text-to-binary data conversion (against of Scripting.TextStream object). Const adTypeText = 2 Const adSaveCreateOverWrite = 2 'Create Stream object Dim BinaryStream Set BinaryStream = CreateObject("ADODB.Stream") 'Specify stream type - we want To save text/string data. BinaryStream.Type = adTypeText 'Specify charset For the source text (unicode) data. If Len(CharSet) > 0 Then BinaryStream.CharSet = CharSet End If 'Open the stream And write binary data To the object BinaryStream.Open BinaryStream.WriteText Text 'Save binary data To disk BinaryStream.SaveToFile FileName, adSaveCreateOverWrite End Function */ scriptCommands.push(' res = "outFile" & vbCr & "------http_code" & xHttp.status'); } else { // ' give respones scriptCommands.push(' res = xHttp.responseText & vbCr & "------http_code" & xHttp.status'); } scriptCommands.push('Else'); scriptCommands.push(' res = "xHttpError " & Err.Description & " " & Err.Number'); scriptCommands.push('End If'); scriptCommands.push('Set xHttp = Nothing'); scriptCommands.push('returnValue = res'); scriptCommands = scriptCommands.join("\r\n"); try { result = app.doScript(scriptCommands, ScriptLanguage.VISUAL_BASIC); } catch (e) { result = "doScriptError: " + e.message; } } else { // Mac // -L follow redirects var curlString = 'curl --silent --show-error -g -L '; for (var i = 0; i < request.headers.length; i++) { curlString += (' -H \'' + request.headers[i].name + ': ' + request.headers[i].value + '\''); } if (request.unsafe) { // Es gab einen Fall wo am Mac mit -k es nicht funktioniert hat curl: (35) Server aborted the SSL handshake curlString += ' -k '; } if (request.proxy != false) { curlString += ' --proxy ' + request.proxy } curlString += ' -X ' + request.method; if (request.body) { curlString += ' -d \'' + request.body.replace(/"/g, '\\"').replace(/\n|\r/g, '') + '\''; } else if (request.method == "POST" && request.binaryFilePath) { curlString += ' --data-binary \'@' + request.binaryFilePath + '\''; } if (outFile) { curlString += ' -w \'outFile\n------http_code%{http_code}\''; curlString += ' -o \'' + outFile.fsName + '\'' } else { curlString += ' -w \'\n------http_code%{http_code}\''; } curlString += ' \'' + request.fullURL + '\''; //~ $.writeln(curlString); try { result = app.doScript('do shell script "' + curlString + '"', ScriptLanguage.APPLESCRIPT_LANGUAGE); } catch (e) { result = "doScriptError: " + e.message; } } // Fill response if (typeof result == 'undefined') { throw Error("No result value. Probably System Script could not run?"); } if (result.match(/^xHttpError|^curl: \(\d+\)|^doScriptError:/)) { response.error = true; response.errorMsg = result; } else { var resArray = result.split("\r------http_code"); if (resArray.length == 2) { response.httpStatus = resArray[1] * 1; response.body = resArray[0]; } else { throw Error("Wrong result value: [" + result + "]"); } } return response; } /**************** * API */ /** Process an HTTP Request * @param {request} Request object with connection Information * @return {response} Response object {error:error, errorMsg:errorMsg, body:body, httpStatus:httpStatus} */ SELF.fetch = function (request) { request = INNER.checkRequest(request); return INNER.processRequest(request, false); } /** Process an HTTP Request and writes the result to a give File * @param {request} Request Object with connection Information * @param {outFile} File to write to * @return {response} Response object {error:error, errorMsg:errorMsg, body:body, httpStatus:httpStatus} */ SELF.fetchFile = function (request, outFile) { if (outFile == undefined) throw Error("No file provided"); if (outFile instanceof String) outFile = File(outFile); request = INNER.checkRequest(request); var response = INNER.processRequest(request, outFile); if (!outFile.exists) { response.error = true; response.errorMsg = "File was not created\n" + response.errorMsg; } return response; } })($.global, { toString: function () { return 'restix'; } }); // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ // MD5 // ------------------------------------------------------------------------------------------------ md5 = function(s) { function md5cycle(x, k) { var a = x[0], b = x[1], c = x[2], d = x[3]; a = ff(a, b, c, d, k[0], 7, -680876936); d = ff(d, a, b, c, k[1], 12, -389564586); c = ff(c, d, a, b, k[2], 17, 606105819); b = ff(b, c, d, a, k[3], 22, -1044525330); a = ff(a, b, c, d, k[4], 7, -176418897); d = ff(d, a, b, c, k[5], 12, 1200080426); c = ff(c, d, a, b, k[6], 17, -1473231341); b = ff(b, c, d, a, k[7], 22, -45705983); a = ff(a, b, c, d, k[8], 7, 1770035416); d = ff(d, a, b, c, k[9], 12, -1958414417); c = ff(c, d, a, b, k[10], 17, -42063); b = ff(b, c, d, a, k[11], 22, -1990404162); a = ff(a, b, c, d, k[12], 7, 1804603682); d = ff(d, a, b, c, k[13], 12, -40341101); c = ff(c, d, a, b, k[14], 17, -1502002290); b = ff(b, c, d, a, k[15], 22, 1236535329); a = gg(a, b, c, d, k[1], 5, -165796510); d = gg(d, a, b, c, k[6], 9, -1069501632); c = gg(c, d, a, b, k[11], 14, 643717713); b = gg(b, c, d, a, k[0], 20, -373897302); a = gg(a, b, c, d, k[5], 5, -701558691); d = gg(d, a, b, c, k[10], 9, 38016083); c = gg(c, d, a, b, k[15], 14, -660478335); b = gg(b, c, d, a, k[4], 20, -405537848); a = gg(a, b, c, d, k[9], 5, 568446438); d = gg(d, a, b, c, k[14], 9, -1019803690); c = gg(c, d, a, b, k[3], 14, -187363961); b = gg(b, c, d, a, k[8], 20, 1163531501); a = gg(a, b, c, d, k[13], 5, -1444681467); d = gg(d, a, b, c, k[2], 9, -51403784); c = gg(c, d, a, b, k[7], 14, 1735328473); b = gg(b, c, d, a, k[12], 20, -1926607734); a = hh(a, b, c, d, k[5], 4, -378558); d = hh(d, a, b, c, k[8], 11, -2022574463); c = hh(c, d, a, b, k[11], 16, 1839030562); b = hh(b, c, d, a, k[14], 23, -35309556); a = hh(a, b, c, d, k[1], 4, -1530992060); d = hh(d, a, b, c, k[4], 11, 1272893353); c = hh(c, d, a, b, k[7], 16, -155497632); b = hh(b, c, d, a, k[10], 23, -1094730640); a = hh(a, b, c, d, k[13], 4, 681279174); d = hh(d, a, b, c, k[0], 11, -358537222); c = hh(c, d, a, b, k[3], 16, -722521979); b = hh(b, c, d, a, k[6], 23, 76029189); a = hh(a, b, c, d, k[9], 4, -640364487); d = hh(d, a, b, c, k[12], 11, -421815835); c = hh(c, d, a, b, k[15], 16, 530742520); b = hh(b, c, d, a, k[2], 23, -995338651); a = ii(a, b, c, d, k[0], 6, -198630844); d = ii(d, a, b, c, k[7], 10, 1126891415); c = ii(c, d, a, b, k[14], 15, -1416354905); b = ii(b, c, d, a, k[5], 21, -57434055); a = ii(a, b, c, d, k[12], 6, 1700485571); d = ii(d, a, b, c, k[3], 10, -1894986606); c = ii(c, d, a, b, k[10], 15, -1051523); b = ii(b, c, d, a, k[1], 21, -2054922799); a = ii(a, b, c, d, k[8], 6, 1873313359); d = ii(d, a, b, c, k[15], 10, -30611744); c = ii(c, d, a, b, k[6], 15, -1560198380); b = ii(b, c, d, a, k[13], 21, 1309151649); a = ii(a, b, c, d, k[4], 6, -145523070); d = ii(d, a, b, c, k[11], 10, -1120210379); c = ii(c, d, a, b, k[2], 15, 718787259); b = ii(b, c, d, a, k[9], 21, -343485551); x[0] = add32(a, x[0]); x[1] = add32(b, x[1]); x[2] = add32(c, x[2]); x[3] = add32(d, x[3]); } function cmn(q, a, b, x, s, t) { a = add32(add32(a, q), add32(x, t)); return add32((a << s) | (a >>> (32 - s)), b); } function ff(a, b, c, d, x, s, t) { return cmn((b & c) | ((~b) & d), a, b, x, s, t); } function gg(a, b, c, d, x, s, t) { return cmn((b & d) | (c & (~d)), a, b, x, s, t); } function hh(a, b, c, d, x, s, t) { return cmn(b ^ c ^ d, a, b, x, s, t); } function ii(a, b, c, d, x, s, t) { return cmn(c ^ (b | (~d)), a, b, x, s, t); } function md51(s) { txt = ''; var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i; for (i = 64; i <= s.length; i += 64) { md5cycle(state, md5blk(s.substring(i - 64, i))); } s = s.substring(i - 64); var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (i = 0; i < s.length; i++) tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(state, tail); for (i = 0; i < 16; i++) tail[i] = 0; } tail[14] = n * 8; md5cycle(state, tail); return state; } /* there needs to be support for Unicode here, * unless we pretend that we can redefine the MD-5 * algorithm for multi-byte characters (perhaps * by adding every four 16-bit characters and * shortening the sum to 32 bits). Otherwise * I suggest performing MD-5 as if every character * was two bytes--e.g., 0040 0025 = @%--but then * how will an ordinary MD-5 sum be matched? * There is no way to standardize text to something * like UTF-8 before transformation; speed cost is * utterly prohibitive. The JavaScript standard * itself needs to look at this: it should start * providing access to strings as preformed UTF-8 * 8-bit unsigned value arrays. */ function md5blk(s) { /* I figured global was faster. */ var md5blks = [], i; /* Andy King said do it this way. */ for (i = 0; i < 64; i += 4) { md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); } return md5blks; } var hex_chr = '0123456789abcdef'.split(''); function rhex(n) { var s = '', j = 0; for (; j < 4; j++) s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; return s; } function hex(x) { for (var i = 0; i < x.length; i++) x[i] = rhex(x[i]); return x.join(''); } function add32(a, b) { return (a + b) & 0xFFFFFFFF; } return hex(md51(s)); } }