From b5dc19d5d9c148732748ce12e9b921bece06e426 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 10:40:23 +0200 Subject: [PATCH 01/26] repackage --- conf/app.src | 6 +++ conf/nginx.conf | 13 ++--- manifest.json | 22 ++++++-- scripts/backup | 0 scripts/change_url | 0 scripts/install | 115 +++++++++++++++++++++++++++++---------- scripts/remove | 43 +++++++++++++-- scripts/restore | 0 scripts/upgrade | 131 ++++++++++++++++++++++++++++++++++++--------- 9 files changed, 264 insertions(+), 66 deletions(-) create mode 100644 conf/app.src create mode 100644 scripts/backup create mode 100644 scripts/change_url create mode 100644 scripts/restore diff --git a/conf/app.src b/conf/app.src new file mode 100644 index 0000000..27001ea --- /dev/null +++ b/conf/app.src @@ -0,0 +1,6 @@ +SOURCE_URL=https://github.com/jatekos101/20euros/archive/v0.1.tar.gz +SOURCE_SUM=a119aaf8130756616e79bad040a1fe3db4b1f9b5a09b37a8eb0f2b4a04e3cca5 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME=20euros-0.1.tar.gz \ No newline at end of file diff --git a/conf/nginx.conf b/conf/nginx.conf index 8ec2b2d..11cb4b2 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,13 +1,14 @@ -location YNH_WWW_PATH { - alias YNH_WWW_ALIAS ; +#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; +location __PATH__/ { - # Force https + # Path to source + alias __FINALPATH__/ ; + + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } - index index.html; - # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; -} +} \ No newline at end of file diff --git a/manifest.json b/manifest.json index c29c92c..30f2530 100644 --- a/manifest.json +++ b/manifest.json @@ -1,19 +1,30 @@ { "name": "20euros", "id": "20euros", + "packaging_format": 1, "description": { "en": "2048 - 20euros", "fr": "2048 - 20euros" }, + "version": "1.0~ynh1", + "url": "https://github.com/jatekos101/20euros", + "license": "MIT", "developer": { "name": "Moul", "email": "moul@moul.re" }, - "multi_instance": "false", + "requirements": { + "yunohost": ">= 3.7.0" + }, + "multi_instance": true, + "services": [ + "nginx" + ], "arguments": { "install" : [ { "name": "domain", + "type": "domain", "ask": { "en": "Choose a domain for 20euros", "fr": "Choisissez un nom de domaine pour 20euros" @@ -22,6 +33,7 @@ }, { "name": "path", + "type": "path", "ask": { "en": "Choose a path for 20euros", "fr": "Choisissez un chemin pour 20euros" @@ -31,12 +43,16 @@ }, { "name": "is_public", + "type": "boolean", "ask": { "en": "Is it a public game?", "fr": "Est-ce un jeu public ?" }, - "choices": ["Yes", "No"], - "default": "Yes" + "help": { + "en": "If enabled, 20euros will be accessible by people who doesn’t have an account. This can be changed later via the webadmin.", + "fr": "Si cette case est cochée, 20euros sera accessible aux personnes n’ayant pas de compte. Vous pourrez changer ceci plus tard via la webadmin." + }, + "default": true } ] } diff --git a/scripts/backup b/scripts/backup new file mode 100644 index 0000000..e69de29 diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..e69de29 diff --git a/scripts/install b/scripts/install index 07e1fd2..c560a3e 100755 --- a/scripts/install +++ b/scripts/install @@ -1,41 +1,98 @@ #!/bin/bash +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source /usr/share/yunohost/helpers + +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= # Retrieve arguments -domain=$1 -path=$2 -is_public=$3 -# Check domain/path availability -sudo yunohost app checkurl $domain$path -a 20euros -if [[ ! $? -eq 0 ]]; then - exit 1 -fi +domain=$YNH_APP_ARG_DOMAIN +path_url=$YNH_APP_ARG_PATH +is_public=$YNH_APP_ARG_IS_PUBLIC +app=$YNH_APP_INSTANCE_NAME -# Save app settings -sudo yunohost app setting 20euros is_public -v "$is_public" +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= +ynh_script_progression --message="Validating installation parameters..." --weight=1 # Copy files to the right place -final_path=/var/www/20euros -sudo mkdir -p $final_path -sudo cp -a ../sources/* $final_path +final_path=/var/www/$app +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" -# Set permissions -sudo chown -R www-data: $final_path +# Register (book) web path +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url -# Modify Nginx configuration file and copy it to Nginx conf directory -sed -i "s@YNH_WWW_PATH@$path@g" ../conf/nginx.conf -sed -i "s@YNH_WWW_ALIAS@$final_path/@g" ../conf/nginx.conf -nginxconf=/etc/nginx/conf.d/$domain.d/20euros.conf -sudo cp ../conf/nginx.conf $nginxconf -sudo chown root: $nginxconf -sudo chmod 600 $nginxconf +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= +ynh_script_progression --message="Storing installation settings..." --weight=2 -if [ "$is_public" = "Yes" ]; -then - sudo yunohost app setting 20euros skipped_uris -v "/" -fi +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=path --value=$path_url +ynh_app_setting_set --app=$app --key=is_public --value=$is_public -# Reload web server & sso -sudo service nginx reload -sudo yunohost app ssowatconf +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_script_progression --message="Setting up source files..." --weight=1 + +ynh_app_setting_set --app=$app --key=final_path --value=$final_path + +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source --dest_dir="$final_path" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring Nginx web server..." --weight=2 + +# Create a dedicated nginx config +ynh_add_nginx_config + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +# Set permissions to app files +chown -R root: $final_path + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Configuring SSOwat..." --weight=1 + +# Make app public if necessary or protect it +[ $is_public -eq 0 ] || ynh_permission_update --permission "main" --add "visitors" + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading Nginx web server..." --weight=1 + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Installation of $app completed" --last diff --git a/scripts/remove b/scripts/remove index d70c7e4..2c06727 100755 --- a/scripts/remove +++ b/scripts/remove @@ -1,6 +1,43 @@ #!/bin/bash -domain=$(sudo yunohost app setting 20euros domain) +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -sudo rm -rf /var/www/20euros -sudo rm -f /etc/nginx/conf.d/$domain.d/20euros.conf +source /usr/share/yunohost/helpers + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +#================================================= +# STANDARD REMOVE +#================================================= +# REMOVE APP MAIN DIR +#================================================= +ynh_script_progression --message="Removing app main directory..." --weight=3 + +# Remove the app directory securely +ynh_secure_remove --file="$final_path" + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Removing Nginx web server configuration..." --weight=1 + +# Remove the dedicated nginx config +ynh_remove_nginx_config + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore new file mode 100644 index 0000000..e69de29 diff --git a/scripts/upgrade b/scripts/upgrade index 21363b7..a252a5a 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,34 +1,115 @@ #!/bin/bash -# Retrieve settings -domain=$(sudo yunohost app setting 20euros domain) -path=$(sudo yunohost app setting 20euros path) -is_public=$(sudo yunohost app setting 20euros is_public) +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Remove trailing "/" for next commands -path=${path%/} +source /usr/share/yunohost/helpers -# Copy files to the right place -final_path=/var/www/20euros -sudo mkdir -p $final_path -sudo cp -a ../sources/* $final_path +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 -# Set permissions -sudo chown -R www-data: $final_path +app=$YNH_APP_INSTANCE_NAME -# Modify Nginx configuration file and copy it to Nginx conf directory -sed -i "s@YNH_WWW_PATH@$path@g" ../conf/nginx.conf -sed -i "s@YNH_WWW_ALIAS@$final_path/@g" ../conf/nginx.conf -nginxconf=/etc/nginx/conf.d/$domain.d/20euros.conf -sudo cp ../conf/nginx.conf $nginxconf -sudo chown root: $nginxconf -sudo chmod 600 $nginxconf +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) -if [ "$is_public" = "Yes" ]; -then - sudo yunohost app setting 20euros skipped_uris -v "/" +#================================================= +# CHECK VERSION +#================================================= + +upgrade_type=$(ynh_check_app_version_changed) + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 + +# Fix is_public as a boolean value +if [ "$is_public" = "Yes" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=1 + is_public=1 +elif [ "$is_public" = "No" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=0 + is_public=0 fi -# Reload web server & sso -sudo service nginx reload -sudo yunohost app ssowatconf +# If final_path doesn't exist, create it +if [ -z "$final_path" ]; then + final_path=/var/www/$app + ynh_app_setting_set --app=$app --key=final_path --value=$final_path +fi + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=3 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# CHECK THE PATH +#================================================= + +path_url=$(ynh_normalize_url_path --path_url=$path_url) + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +if [ "$upgrade_type" == "UPGRADE_APP" ] +then + ynh_script_progression --message="Upgrading source files..." --weight=4 + + # Download, check integrity, uncompress and patch the source from app.src + ynh_setup_source --dest_dir="$final_path" +fi + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading nginx web server configuration..." --weight=2 + +# Create a dedicated nginx config +ynh_add_nginx_config + +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +# Set permissions on app files +chown -R root: $final_path + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Upgrading SSOwat configuration..." --weight=1 + +# Make app public if necessary or protect it +[ $is_public -eq 0 ] || ynh_permission_update --permission "main" --add "visitors" + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." --weight=1 + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of $app completed" --last From d15b6314e912a2b40b88ac364d72705da0500b54 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 10:47:08 +0200 Subject: [PATCH 02/26] remove source --- sources/README.md | 8 - sources/comment.html | 33 - sources/faq.html | 79 --- sources/images/bg_hr.png | Bin 943 -> 0 bytes sources/images/blacktocat.png | Bin 1428 -> 0 bytes sources/images/icon_download.png | Bin 1162 -> 0 bytes sources/images/sprite_download.png | Bin 16799 -> 0 bytes sources/index.html | 161 ----- sources/javascripts/main.js | 1 - sources/js/animframe_polyfill.js | 26 - sources/js/application.js | 3 - sources/js/game_manager.js | 328 ---------- sources/js/grid.js | 84 --- sources/js/html_actuator.js | 337 ----------- sources/js/keyboard_input_manager.js | 130 ---- sources/js/local_score_manager.js | 48 -- sources/js/tile.js | 17 - sources/statistics.html | 122 ---- sources/style/example.css | 50 -- sources/style/main.css | 869 --------------------------- sources/stylesheets/pygment_trac.css | 70 --- sources/stylesheets/stylesheet.css | 423 ------------- 22 files changed, 2789 deletions(-) delete mode 100644 sources/README.md delete mode 100644 sources/comment.html delete mode 100644 sources/faq.html delete mode 100644 sources/images/bg_hr.png delete mode 100644 sources/images/blacktocat.png delete mode 100644 sources/images/icon_download.png delete mode 100644 sources/images/sprite_download.png delete mode 100644 sources/index.html delete mode 100644 sources/javascripts/main.js delete mode 100644 sources/js/animframe_polyfill.js delete mode 100644 sources/js/application.js delete mode 100644 sources/js/game_manager.js delete mode 100644 sources/js/grid.js delete mode 100644 sources/js/html_actuator.js delete mode 100644 sources/js/keyboard_input_manager.js delete mode 100644 sources/js/local_score_manager.js delete mode 100644 sources/js/tile.js delete mode 100644 sources/statistics.html delete mode 100644 sources/style/example.css delete mode 100644 sources/style/main.css delete mode 100644 sources/stylesheets/pygment_trac.css delete mode 100644 sources/stylesheets/stylesheet.css diff --git a/sources/README.md b/sources/README.md deleted file mode 100644 index 6bf2010..0000000 --- a/sources/README.md +++ /dev/null @@ -1,8 +0,0 @@ -20euros -======= - -A 2048 variant with Euro coins and notes. - -You'll find the game forum here: http://20euros.freeforums.net/ - -Feel free to fork my version and make pull requests! diff --git a/sources/comment.html b/sources/comment.html deleted file mode 100644 index cb35282..0000000 --- a/sources/comment.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - 20 Euros Forum - - - - - - - - - - - - - - diff --git a/sources/faq.html b/sources/faq.html deleted file mode 100644 index b36cc61..0000000 --- a/sources/faq.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - 20 Euros FAQ - - - - - - - - - - - - - -
-
-

20 Euros FAQ

-
-

Frequently asked questions about my game 20 Euros.

- -
-

Rules

-

Q: The game is buggy, sometimes it won't let me add two equal coins.
-A: Read the rules under the game first! For example, you can't add up two 2's to make 5, it wouldn't even make sense! To make a 5 cent coin, you have to combine two 2's and a 1.

- -

Q: Why doesn't 2+2+2+2+2 make 10?
-A: It's clearly written in the rules that at most 3 coins can merge at a time. Otherwise it would be too easy.

- -

Q: Can I continue after winning and make a 50 Euro note?
-A: Yes! You can even go all the way up to the 500 Euro note, if you can! That has actually been achieved (with an AI).

- -
-

Variants

-

Q: Does the game have any variants?
-A: The only official variant is the undo version.

- -

Q: Can I make my own variant/fork?
-A: Yes! You are free to make your own forks based on my variant, you can download it or fork it on GitHub.

- -
- -

Others

-

-Q: Is there a forum about the game?
-A: Yes, it's here. Feel free to add comments, suggestions or further questions!

- -

Q: Are the statistics of the game public?
-A: Yes, you can find them here.

- -
- -If you didn't find the answer to your question, you can ask it on the forum. - -
- - - - - - - - diff --git a/sources/images/bg_hr.png b/sources/images/bg_hr.png deleted file mode 100644 index 7973bd69888c7e10ccad1111d555ceabb7cd99b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmaJ=O^ee&7!FiK7FWCot{@Ck@nrMW&tx0B-6VAbrk1u~FTzffX&bu9#AIsIdef8t z!QZfdz=K}>3m(LO;6X3qN}Y6@>cJYA%)G<%Jn!ec>9im1@7>wsIBwrMF}iHO!q%;8 zSJ@xEd~(FL18NRvkBsOXMVM>4WQc*~qcQGc17IjxRnj!O_^B1gan0x#EWT48PK->5B2>mI;LIx zC*FSw$Nfc!g)WZCEOJ=mM)}lLsOk|$ltg_(&ax_YCWMlBLPDVT%D_gB7o_$YZ`-OB z#1sV%whRq21>W;qwN$N?OUGtQQe;JvOsQrna;+v+j8dth=*?orHHb6waX>S!yXCgT zo!oR3{E&GzaOAzfZYv@_Sf{LdyJInS>TS60&R9%yCs$y>2x(*gYIJtRrYAja$Ceq} z!N&oc_K1!3-Ft`U>`CM;quEbB4KG%!MovB*9_3!QzFhqHwrbwK|Doo-y>auDJNSP6 T=d)j*_4El@X4^PFK7I8YBT*xD diff --git a/sources/images/blacktocat.png b/sources/images/blacktocat.png deleted file mode 100644 index 6e264fe57a2e35a2855405ac7d4102c3f6ddcdae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1428 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 diff --git a/sources/index.html b/sources/index.html deleted file mode 100644 index d56b4f9..0000000 --- a/sources/index.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - 20 Euros - - - - - - - - - - - - - - - - -
-
-

20 Euros

- - -

-

-
0
-
0
-
-
- -

Join the coins until you reach 20 Euro! - - -

- -
- - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
- -
-
- - -

- HOW TO PLAY: Use your arrow keys to move the coins. If two or three mergeable coins touch, they merge into one! Your goal is to reach the 20 Euro note! Restart with Space. -

-
-

- Mergeable combinations:
- 1+1=2
- 2+2+1=5
- 5+5=10
- 10+10=20 or 5+10+5=20
- 20+20+10=50
- and so on. -

-
-

-FAQ: Click here for the frequently asked questions.
- Forum: Click here for the game's forum.
-Statistics: Click here for the statistics. -

-
-

-Undo version: You can play the undo version of the game here. -
-GITHUB: You can see and fork my game on GitHub here. -

-
-

-This is not the original version of 2048.
-Original created by Gabriele Cirulli. -

-
- - - - - - - - - - - - - - - - - diff --git a/sources/javascripts/main.js b/sources/javascripts/main.js deleted file mode 100644 index d8135d3..0000000 --- a/sources/javascripts/main.js +++ /dev/null @@ -1 +0,0 @@ -console.log('This would be the main JS file.'); diff --git a/sources/js/animframe_polyfill.js b/sources/js/animframe_polyfill.js deleted file mode 100644 index c45a13e..0000000 --- a/sources/js/animframe_polyfill.js +++ /dev/null @@ -1,26 +0,0 @@ -(function() { - var lastTime = 0; - var vendors = ['webkit', 'moz']; - for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { - window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; - window.cancelAnimationFrame = - window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; - } - - if (!window.requestAnimationFrame) { - window.requestAnimationFrame = function(callback, element) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = window.setTimeout(function() { callback(currTime + timeToCall); }, - timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - } - - if (!window.cancelAnimationFrame) { - window.cancelAnimationFrame = function(id) { - clearTimeout(id); - }; - } -}()); diff --git a/sources/js/application.js b/sources/js/application.js deleted file mode 100644 index 7cf796a..0000000 --- a/sources/js/application.js +++ /dev/null @@ -1,3 +0,0 @@ -// Wait till the browser is ready to render the game (avoids glitches) -window.requestAnimationFrame(function () { - new GameManager(5, KeyboardInputManager, HTMLActuator, LocalScoreManager);}); diff --git a/sources/js/game_manager.js b/sources/js/game_manager.js deleted file mode 100644 index c5e145b..0000000 --- a/sources/js/game_manager.js +++ /dev/null @@ -1,328 +0,0 @@ -function GameManager(size, InputManager, Actuator, ScoreManager) { - this.size = size; // Size of the grid - this.inputManager = new InputManager; - this.scoreManager = new ScoreManager; - this.actuator = new Actuator; - - this.startTiles = 2; - - this.inputManager.on("move", this.move.bind(this)); - this.inputManager.on("restart", this.restart.bind(this)); - this.inputManager.on("keepPlaying", this.keepPlaying.bind(this)); - - this.setup(); -} - -// Restart the game -GameManager.prototype.restart = function () { - this.actuator. - continue (); - this.setup(); -}; - -// Keep playing after winning -GameManager.prototype.keepPlaying = function () { - this.keepPlaying = true; - this.actuator. - continue (); -}; - -GameManager.prototype.isGameTerminated = function () { - if (this.over || (this.won && !this.keepPlaying)) { - return true; - } else { - return false; - } -}; - -// Set up the game -GameManager.prototype.setup = function () { - this.grid = new Grid(this.size); - - this.score = 0; - this.highestTile = 5; - this.over = false; - this.won = false; - this.keepPlaying = false; - - // Add the initial tiles - this.addStartTiles(); - - // Update the actuator - this.actuate(); -}; - -// Set up the initial tiles to start the game with -GameManager.prototype.addStartTiles = function () { - for (var i = 0; i < this.startTiles; i++) { - this.addRandomTile(); - } -}; - -// Adds a tile in a random position -GameManager.prototype.addRandomTile = function () { - if (this.grid.cellsAvailable()) { - var value = Math.random() < 0.9 ? 1 : 5; - var tile = new Tile(this.grid.randomAvailableCell(), value); - - this.grid.insertTile(tile); - } -}; - -// Sends the updated grid to the actuator -GameManager.prototype.actuate = function () { - if (this.scoreManager.get() < this.score) { - this.scoreManager.set(this.score); - } - - this.actuator.actuate(this.grid, { - score: this.score, - highest: this.highestTile, - over: this.over, - won: this.won, - bestScore: this.scoreManager.get(), - terminated: this.isGameTerminated() - }); - -}; - -// Save all tile positions and remove merger info -GameManager.prototype.prepareTiles = function () { - this.grid.eachCell(function (x, y, tile) { - if (tile) { - tile.mergedFrom = null; - tile.savePosition(); - } - }); -}; - -// Move a tile and its representation -GameManager.prototype.moveTile = function (tile, cell) { - this.grid.cells[tile.x][tile.y] = null; - this.grid.cells[cell.x][cell.y] = tile; - tile.updatePosition(cell); -}; - -// Move tiles on the grid in the specified direction -GameManager.prototype.move = function (direction) { - // 0: up, 1: right, 2:down, 3: left - var self = this; - - if (this.isGameTerminated()) return; // Don't do anything if the game's over - var cell, tile; - - var vector = this.getVector(direction); - var traversals = this.buildTraversals(vector); - var moved = false; - - // Save the current tile positions and remove merger information - this.prepareTiles(); - - // Traverse the grid in the right direction and move tiles - traversals.x.forEach(function (x) { - traversals.y.forEach(function (y) { - cell = { - x: x, - y: y - }; - tile = self.grid.cellContent(cell); - - if (tile && tile.merged) { - self.grid.removeTile(tile); - } else if (tile) { - var positions = self.findFarthestPosition(cell, vector); - var next = self.grid.cellContent(positions.next); - var pos2 = null; - var next2 = null; - if (next) { - pos2 = self.findFarthestPosition({ - x: next.x, - y: next.y - }, vector); - next2 = self.grid.cellContent(pos2.next); - } - // Only one merger per row traversal? - if (next && next2 && !next.mergedFrom && next != next2 && (((tile.value == 1) && (next.value == 2) && (next2.value == 2)) || ((tile.value == 2) && (next.value == 1) && (next2.value == 2)) || ((tile.value == 2) && (next.value == 2) && (next2.value == 1)) || ((tile.value == 10) && (next.value == 20) && (next2.value == 20)) || ((tile.value == 20) && (next.value == 10) && (next2.value == 20)) || ((tile.value == 20) && (next.value == 20) && (next2.value == 10)) || ((tile.value == 100) && (next.value == 200) && (next2.value == 200)) || ((tile.value == 200) && (next.value == 100) && (next2.value == 200)) || ((tile.value == 200) && (next.value == 200) && (next2.value == 100)) || ((tile.value == 1000) && (next.value == 2000) && (next2.value == 2000)) || ((tile.value == 2000) && (next.value == 1000) && (next2.value == 2000)) || ((tile.value == 2000) && (next.value == 2000) && (next2.value == 1000)) || ((tile.value == 10000) && (next.value == 20000) && (next2.value == 20000)) || ((tile.value == 20000) && (next.value == 10000) && (next2.value == 20000)) || ((tile.value == 20000) && (next.value == 20000) && (next2.value == 10000)) || ((tile.value == 5) && (next.value == 10) && (next2.value == 5)) || ((tile.value == 50) && (next.value == 100) && (next2.value == 50)) || ((tile.value == 500) && (next.value == 1000) && (next2.value == 500)) || ((tile.value == 5000) && (next.value == 10000) && (next2.value == 5000)))) { - - var merged = new Tile(pos2.next, tile.value + next.value + next2.value); - merged.mergedFrom = [next2, next, tile]; - tile.merged = true; - next.merged = true; - next2.merged = true; - - self.grid.removeTile(tile); - self.grid.removeTile(next); - self.grid.removeTile(next2); - - self.grid.insertTile(merged); - // Converge the two tiles' positions - tile.updatePosition(pos2.next); - next.updatePosition(pos2.next); - // Update the score - self.score += merged.value; - - if (merged.value > self.highestTile) self.highestTile = merged.value; - - // The mighty 20 Euro tile - if (merged.value === 2000) self.won = true; - } else if (next && next.value === tile.value && !next.mergedFrom && next.value != 2 && next.value != 20 && next.value != 200 && next.value != 2000 && next.value != 20000 && next.value != 50000) { - - var merged = new Tile(positions.next, tile.value * 2); - merged.mergedFrom = [tile, next]; - tile.merged = true; - next.merged = true; - - self.grid.insertTile(merged); - self.grid.removeTile(tile); - - // Converge the two tiles' positions - tile.updatePosition(positions.next); - - // Update the score - self.score += merged.value; - - if (merged.value > self.highestTile) self.highestTile = merged.value; - - // The mighty 20 Euro tile - if (merged.value === 2000) self.won = true; - } else if (!tile.merged) { - self.moveTile(tile, positions.farthest); - } - - if (tile && !self.positionsEqual(cell, tile)) { - moved = true; // The tile moved from its original cell! - } - } - - }); - }); - - if (moved) { - this.addRandomTile(); - - if (!this.movesAvailable()) { - this.over = true; // Game over! - } - - this.actuate(); - } -}; - -// Get the vector representing the chosen direction -GameManager.prototype.getVector = function (direction) { - // Vectors representing tile movement - var map = { - 0: { - x: 0, - y: -1 - }, - // up - 1: { - x: 1, - y: 0 - }, - // right - 2: { - x: 0, - y: 1 - }, - // down - 3: { - x: -1, - y: 0 - } // left - }; - - return map[direction]; -}; - -// Build a list of positions to traverse in the right order -GameManager.prototype.buildTraversals = function (vector) { - var traversals = { - x: [], - y: [] - }; - - for (var pos = 0; pos < this.size; pos++) { - traversals.x.push(pos); - traversals.y.push(pos); - } - - // Always traverse from the farthest cell in the chosen direction - if (vector.x === 1) traversals.x = traversals.x.reverse(); - if (vector.y === 1) traversals.y = traversals.y.reverse(); - - return traversals; -}; - -GameManager.prototype.findFarthestPosition = function (cell, vector) { - var previous; - - // Progress towards the vector direction until an obstacle is found - do { - previous = cell; - cell = { - x: previous.x + vector.x, - y: previous.y + vector.y - }; - } while (this.grid.withinBounds(cell) && this.grid.cellAvailable(cell)); - - return { - farthest: previous, - next: cell // Used to check if a merge is required - }; -}; - -GameManager.prototype.movesAvailable = function () { - return this.grid.cellsAvailable() || this.tileMatchesAvailable(); -}; - -// Check for available matches between tiles(more expensive check) -GameManager.prototype.tileMatchesAvailable = function () { - var self = this; - - var tile; - var i = 0; - while (i < 4) { - for (var x = 0; x < this.size; x++) { - for (var y = 0; y < this.size; y++) { - var vector = this.getVector(i); - tile = this.grid.cellContent({ - x: x, - y: y - }); - - cell = { - x: x, - y: y - }; - tile = self.grid.cellContent(cell); - - if (tile) { - var positions = self.findFarthestPosition(cell, vector); - var next = self.grid.cellContent(positions.next); - var pos2 = self.findFarthestPosition({ - x: cell.x + vector.x, - y: cell.y + vector.y - }, vector); - var next2 = self.grid.cellContent(pos2.next); - // Only one merger per row traversal? - if (next && next2 && next != next2 && (((tile.value == 1) && (next.value == 2) && (next2.value == 2)) || ((tile.value == 2) && (next.value == 1) && (next2.value == 2)) || ((tile.value == 2) && (next.value == 2) && (next2.value == 1)) || ((tile.value == 10) && (next.value == 20) && (next2.value == 20)) || ((tile.value == 20) && (next.value == 10) && (next2.value == 20)) || ((tile.value == 20) && (next.value == 20) && (next2.value == 10)) || ((tile.value == 100) && (next.value == 200) && (next2.value == 200)) || ((tile.value == 200) && (next.value == 100) && (next2.value == 200)) || ((tile.value == 200) && (next.value == 200) && (next2.value == 100)) || ((tile.value == 1000) && (next.value == 2000) && (next2.value == 2000)) || ((tile.value == 2000) && (next.value == 1000) && (next2.value == 2000)) || ((tile.value == 2000) && (next.value == 2000) && (next2.value == 1000)) || ((tile.value == 10000) && (next.value == 20000) && (next2.value == 20000)) || ((tile.value == 20000) && (next.value == 10000) && (next2.value == 20000)) || ((tile.value == 20000) && (next.value == 20000) && (next2.value == 10000)) || ((tile.value == 5) && (next.value == 10) && (next2.value == 5)) || ((tile.value == 50) && (next.value == 100) && (next2.value == 50)) || ((tile.value == 500) && (next.value == 1000) && (next2.value == 500)) || ((tile.value == 5000) && (next.value == 10000) && (next2.value == 5000)))) { - return true; - } - if (next && next.value === tile.value && next.value != 2 && next.value != 20 && next.value != 200 && next.value != 2000 && next.value != 20000 && next.value != 50000) { - return true; - } - - } - } - } - i += 1; - } - - return false; -}; - -GameManager.prototype.positionsEqual = function (first, second) { - return first.x === second.x && first.y === second.y; -}; \ No newline at end of file diff --git a/sources/js/grid.js b/sources/js/grid.js deleted file mode 100644 index 05fe057..0000000 --- a/sources/js/grid.js +++ /dev/null @@ -1,84 +0,0 @@ -function Grid(size) { - this.size = size; - - this.cells = []; - - this.build(); -} - -// Build a grid of the specified size -Grid.prototype.build = function () { - for (var x = 0; x < this.size; x++) { - var row = this.cells[x] = []; - - for (var y = 0; y < this.size; y++) { - row.push(null); - } - } -}; - -// Find the first available random position -Grid.prototype.randomAvailableCell = function () { - var cells = this.availableCells(); - - if (cells.length) { - return cells[Math.floor(Math.random() * cells.length)]; - } -}; - -Grid.prototype.availableCells = function () { - var cells = []; - - this.eachCell(function (x, y, tile) { - if (!tile) { - cells.push({ x: x, y: y }); - } - }); - - return cells; -}; - -// Call callback for every cell -Grid.prototype.eachCell = function (callback) { - for (var x = 0; x < this.size; x++) { - for (var y = 0; y < this.size; y++) { - callback(x, y, this.cells[x][y]); - } - } -}; - -// Check if there are any cells available -Grid.prototype.cellsAvailable = function () { - return !!this.availableCells().length; -}; - -// Check if the specified cell is taken -Grid.prototype.cellAvailable = function (cell) { - return !this.cellOccupied(cell); -}; - -Grid.prototype.cellOccupied = function (cell) { - return !!this.cellContent(cell); -}; - -Grid.prototype.cellContent = function (cell) { - if (this.withinBounds(cell)) { - return this.cells[cell.x][cell.y]; - } else { - return null; - } -}; - -// Inserts a tile at its position -Grid.prototype.insertTile = function (tile) { - this.cells[tile.x][tile.y] = tile; -}; - -Grid.prototype.removeTile = function (tile) { - this.cells[tile.x][tile.y] = null; -}; - -Grid.prototype.withinBounds = function (position) { - return position.x >= 0 && position.x < this.size && - position.y >= 0 && position.y < this.size; -}; diff --git a/sources/js/html_actuator.js b/sources/js/html_actuator.js deleted file mode 100644 index 5cdf9cf..0000000 --- a/sources/js/html_actuator.js +++ /dev/null @@ -1,337 +0,0 @@ -function HTMLActuator() { - this.tileContainer = document.querySelector(".tile-container"); - this.scoreContainer = document.querySelector(".score-container"); - this.bestContainer = document.querySelector(".best-container"); - this.messageContainer = document.querySelector(".game-message"); - this.sharingContainer = document.querySelector(".score-sharing"); - - this.score = 0; - this.highestTile = 1; -} - -HTMLActuator.prototype.actuate = function (grid, metadata) { - var self = this; - - window.requestAnimationFrame(function () { - self.clearContainer(self.tileContainer); - - grid.cells.forEach(function (column) { - column.forEach(function (cell) { - if (cell) { - self.addTile(cell); - } - }); - }); - - self.updateScore(metadata.score); - self.updateBestScore(metadata.bestScore); - self.highestTile = metadata.highest; - - if (metadata.terminated) { - if (metadata.over) { - self.message(false); // You lose - } else if (metadata.won) { - self.message(true); // You win! - } - } - - }); -}; - -// Continues the game (both restart and keep playing) -HTMLActuator.prototype.continue = function () { - if (typeof ga !== "undefined") { - ga("send", "event", "game", "restart"); - } - - this.clearMessage(); -}; - -HTMLActuator.prototype.clearContainer = function (container) { - while (container.firstChild) { - container.removeChild(container.firstChild); - } -}; - -HTMLActuator.prototype.addTile = function (tile) { - var self = this; - - var wrapper = document.createElement("div"); - var inner = document.createElement("div"); - var position = tile.previousPosition || { x: tile.x, y: tile.y }; - var positionClass = this.positionClass(position); - - // We can't use classlist because it somehow glitches when replacing classes - var classes = ["tile", "tile-" + tile.value, positionClass]; - - if (tile.value > 50000) classes.push("tile-super"); - - this.applyClasses(wrapper, classes); - - inner.classList.add("tile-inner"); - inner.textContent = tile.value; - - if (tile.previousPosition) { - // Make sure that the tile gets rendered in the previous position first - window.requestAnimationFrame(function () { - classes[2] = self.positionClass({ x: tile.x, y: tile.y }); - self.applyClasses(wrapper, classes); // Update the position - }); - } else if (tile.mergedFrom) { - classes.push("tile-merged"); - this.applyClasses(wrapper, classes); - - // Render the tiles that merged - tile.mergedFrom.forEach(function (merged) { - self.addTile(merged); - }); - } else { - classes.push("tile-new"); - this.applyClasses(wrapper, classes); - } - - // Add the inner part of the tile to the wrapper - wrapper.appendChild(inner); - - // Put the tile on the board - this.tileContainer.appendChild(wrapper); -}; - -HTMLActuator.prototype.applyClasses = function (element, classes) { - element.setAttribute("class", classes.join(" ")); -}; - -HTMLActuator.prototype.normalizePosition = function (position) { - return { x: position.x + 1, y: position.y + 1 }; -}; - -HTMLActuator.prototype.positionClass = function (position) { - position = this.normalizePosition(position); - return "tile-position-" + position.x + "-" + position.y; -}; - -HTMLActuator.prototype.updateScore = function (score) { - this.clearContainer(this.scoreContainer); - - var difference = score - this.score; - this.score = score; - - this.scoreContainer.textContent = this.score; - - if (difference > 0) { - var addition = document.createElement("div"); - addition.classList.add("score-addition"); - addition.textContent = "+" + difference; - - this.scoreContainer.appendChild(addition); - } -}; - -HTMLActuator.prototype.updateBestScore = function (bestScore) { - this.bestContainer.textContent = bestScore; -}; - -HTMLActuator.prototype.message = function (won) { - var type = won ? "game-won" : "game-over"; - var message = won ? "You won!" : "No more moves. Game over."; - - // Build some firebase references. - var rootRef = new Firebase('https://20-euros.firebaseio.com'); - var scoreListRef = rootRef.child("scoreList"); - var highestScoreRef = rootRef.child("highestScore"); - var RefPlays = rootRef.child("plays"); - var Ref50 = rootRef.child("reached_50c"); - var Ref100 = rootRef.child("reached_1e"); - var Ref200 = rootRef.child("reached_2e"); - var Ref500 = rootRef.child("reached_5e"); - var Ref1000 = rootRef.child("reached_10e"); - var Ref2000 = rootRef.child("reached_20e"); - var Ref5000 = rootRef.child("reached_50e"); - var Ref10000 = rootRef.child("reached_100e"); - var Ref20000 = rootRef.child("reached_200e"); - var Ref50000 = rootRef.child("reached_500e"); - - // Keep a mapping of firebase locations to HTML elements, so we can move / remove elements as necessary. - var htmlForPath = {}; - - // Helper function that takes a new score snapshot and adds an appropriate row to our leaderboard table. - function handleScoreAdded(scoreSnapshot, prevScoreName) { - var newScoreRow = $(""); - newScoreRow.append($("").append($("").text(scoreSnapshot.val().name))); - newScoreRow.append($("").text(scoreSnapshot.val().score)); - - // Store a reference to the table row so we can get it again later. - htmlForPath[scoreSnapshot.name()] = newScoreRow; - - // Insert the new score in the appropriate place in the table. - if (prevScoreName === null) { - $("#leaderboardTable").append(newScoreRow); - } - else { - var lowerScoreRow = htmlForPath[prevScoreName]; - lowerScoreRow.before(newScoreRow); - } - } - - // Helper function to handle a score object being removed; just removes the corresponding table row. - function handleScoreRemoved(scoreSnapshot) { - var removedScoreRow = htmlForPath[scoreSnapshot.name()]; - removedScoreRow.remove(); - delete htmlForPath[scoreSnapshot.name()]; - } - -function makeid() -{ - var text = ""; - var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - - for( var i=0; i < 8; i++ ) - text += possible.charAt(Math.floor(Math.random() * possible.length)); - - return text; -} - - // Create a view to only receive callbacks for the last LEADERBOARD_SIZE scores - var scoreListView = scoreListRef.limit(10); - - // Add a callback to handle when a new score is added. - scoreListView.on('child_added', function (newScoreSnapshot, prevScoreName) { - handleScoreAdded(newScoreSnapshot, prevScoreName); - }); - - // Add a callback to handle when a score is removed - scoreListView.on('child_removed', function (oldScoreSnapshot) { - handleScoreRemoved(oldScoreSnapshot); - }); - - // Add a callback to handle when a score changes or moves positions. - var changedCallback = function (scoreSnapshot, prevScoreName) { - handleScoreRemoved(scoreSnapshot); - handleScoreAdded(scoreSnapshot, prevScoreName); - }; - scoreListView.on('child_moved', changedCallback); - scoreListView.on('child_changed', changedCallback); - - var newScore = this.score; - var name = makeid(); - $("#scoreInput").val(""); - - var userScoreRef = scoreListRef.child(name); - - // Use setWithPriority to put the name / score in Firebase, and set the priority to be the score. - if ((newScore <= 500)||(this.highestTile <= 20)||(this.highestTile >= 2000)){ - userScoreRef.setWithPriority({ name:name, score:newScore, highest:this.highestTile }, newScore);} - -// Track the highest score using a transaction. A transaction guarantees that the code inside the block is - // executed on the latest data from the server, so transactions should be used if you have multiple - // clients writing to the same data and you want to avoid conflicting changes. - highestScoreRef.transaction(function (currentHighestScore) { - if (currentHighestScore === null || newScore > currentHighestScore) { - // The return value of this function gets saved to the server as the new highest score. - return newScore; - } - // if we return with no arguments, it cancels the transaction. - return; - }); - - RefPlays.transaction(function(current_value) { - return current_value + 1; - }); - - if (this.highestTile >= 50){ - Ref50.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 100){ - Ref100.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 200){ - Ref200.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 500){ - Ref500.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 1000){ - Ref1000.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 2000){ - Ref2000.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 5000){ - Ref5000.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 10000){ - Ref10000.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 20000){ - Ref20000.transaction(function(current_value) { - return current_value + 1; - }); - } - -if (this.highestTile >= 50000){ - Ref50000.transaction(function(current_value) { - return current_value + 1; - }); - } - - // Add a callback to the highest score in Firebase so we can update the GUI any time it changes. - highestScoreRef.on('value', function (newHighestScore) { - $("#highestScoreDiv").text(newHighestScore.val()); - }); - - if (typeof ga !== "undefined") { - ga("send", "event", "game", "end", type, this.score); - } - - this.messageContainer.classList.add(type); - this.messageContainer.getElementsByTagName("p")[0].textContent = message; - - this.clearContainer(this.sharingContainer); - this.sharingContainer.appendChild(this.scoreTweetButton()); - twttr.widgets.load(); -}; - -HTMLActuator.prototype.clearMessage = function () { - // IE only takes one value to remove at a time. - this.messageContainer.classList.remove("game-won"); - this.messageContainer.classList.remove("game-over"); -}; - -HTMLActuator.prototype.scoreTweetButton = function () { - var tweet = document.createElement("a"); - tweet.classList.add("twitter-share-button"); - tweet.setAttribute("href", "https://twitter.com/share"); - tweet.setAttribute("data-via", "gabrielecirulli"); - tweet.setAttribute("data-url", "http://git.io/2048"); - tweet.setAttribute("data-counturl", "http://gabrielecirulli.github.io/2048/"); - tweet.textContent = "Tweet"; - var text = "I got " + this.score + " points in 20 Euro, a game where you " + - "join numbers to score high! #20eurogame"; - tweet.setAttribute("data-text", text); - - return tweet; -}; diff --git a/sources/js/keyboard_input_manager.js b/sources/js/keyboard_input_manager.js deleted file mode 100644 index a29744c..0000000 --- a/sources/js/keyboard_input_manager.js +++ /dev/null @@ -1,130 +0,0 @@ -function KeyboardInputManager() { - this.events = {}; - - if (window.navigator.msPointerEnabled) { - //Internet Explorer 10 style - this.eventTouchstart = "MSPointerDown"; - this.eventTouchmove = "MSPointerMove"; - this.eventTouchend = "MSPointerUp"; - } else { - this.eventTouchstart = "touchstart"; - this.eventTouchmove = "touchmove"; - this.eventTouchend = "touchend"; - } - - this.listen(); -} - -KeyboardInputManager.prototype.on = function (event, callback) { - if (!this.events[event]) { - this.events[event] = []; - } - this.events[event].push(callback); -}; - -KeyboardInputManager.prototype.emit = function (event, data) { - var callbacks = this.events[event]; - if (callbacks) { - callbacks.forEach(function (callback) { - callback(data); - }); - } -}; - -KeyboardInputManager.prototype.listen = function () { - var self = this; - - var map = { - 38: 0, // Up - 39: 1, // Right - 40: 2, // Down - 37: 3, // Left - 75: 0, // vim keybindings - 76: 1, - 74: 2, - 72: 3, - 87: 0, // W - 68: 1, // D - 83: 2, // S - 65: 3 // A - }; - - document.addEventListener("keydown", function (event) { - var modifiers = event.altKey || event.ctrlKey || event.metaKey || - event.shiftKey; - var mapped = map[event.which]; - - if (!modifiers) { - if (mapped !== undefined) { - event.preventDefault(); - self.emit("move", mapped); - } - - if (event.which === 32) self.restart.bind(self)(event); - } - }); - - var retry = document.querySelector(".retry-button"); - retry.addEventListener("click", this.restart.bind(this)); - retry.addEventListener(this.eventTouchend, this.restart.bind(this)); - - var keepPlaying = document.querySelector(".keep-playing-button"); - keepPlaying.addEventListener("click", this.keepPlaying.bind(this)); - keepPlaying.addEventListener("touchend", this.keepPlaying.bind(this)); - - // Listen to swipe events - var touchStartClientX, touchStartClientY; - var gameContainer = document.getElementsByClassName("game-container")[0]; - - gameContainer.addEventListener(this.eventTouchstart, function (event) { - if (( !window.navigator.msPointerEnabled && event.touches.length > 1) || event.targetTouches > 1) return; - - if(window.navigator.msPointerEnabled){ - touchStartClientX = event.pageX; - touchStartClientY = event.pageY; - } else { - touchStartClientX = event.touches[0].clientX; - touchStartClientY = event.touches[0].clientY; - } - - event.preventDefault(); - }); - - gameContainer.addEventListener(this.eventTouchmove, function (event) { - event.preventDefault(); - }); - - gameContainer.addEventListener(this.eventTouchend, function (event) { - if (( !window.navigator.msPointerEnabled && event.touches.length > 0) || event.targetTouches > 0) return; - - var touchEndClientX, touchEndClientY; - if(window.navigator.msPointerEnabled){ - touchEndClientX = event.pageX; - touchEndClientY = event.pageY; - } else { - touchEndClientX = event.changedTouches[0].clientX; - touchEndClientY = event.changedTouches[0].clientY; - } - - var dx = touchEndClientX - touchStartClientX; - var absDx = Math.abs(dx); - - var dy = touchEndClientY - touchStartClientY; - var absDy = Math.abs(dy); - - if (Math.max(absDx, absDy) > 10) { - // (right : left) : (down : up) - self.emit("move", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0)); - } - }); -}; - -KeyboardInputManager.prototype.restart = function (event) { - event.preventDefault(); - this.emit("restart"); -}; - -KeyboardInputManager.prototype.keepPlaying = function (event) { - event.preventDefault(); - this.emit("keepPlaying"); -}; diff --git a/sources/js/local_score_manager.js b/sources/js/local_score_manager.js deleted file mode 100644 index ec4575d..0000000 --- a/sources/js/local_score_manager.js +++ /dev/null @@ -1,48 +0,0 @@ -window.fakeStorage = { - _data: {}, - - setItem: function (id, val) { - return this._data[id] = String(val); - }, - - getItem: function (id) { - return this._data.hasOwnProperty(id) ? this._data[id] : undefined; - }, - - removeItem: function (id) { - return delete this._data[id]; - }, - - clear: function () { - return this._data = {}; - } -}; - -function LocalScoreManager() { - this.key = "bestScore"; - - var supported = this.localStorageSupported(); - this.storage = supported ? window.localStorage : window.fakeStorage; -} - -LocalScoreManager.prototype.localStorageSupported = function () { - var testKey = "test"; - var storage = window.localStorage; - - try { - storage.setItem(testKey, "1"); - storage.removeItem(testKey); - return true; - } catch (error) { - return false; - } -}; - -LocalScoreManager.prototype.get = function () { - return this.storage.getItem(this.key) || 0; -}; - -LocalScoreManager.prototype.set = function (score) { - this.storage.setItem(this.key, score); -}; - diff --git a/sources/js/tile.js b/sources/js/tile.js deleted file mode 100644 index de08333..0000000 --- a/sources/js/tile.js +++ /dev/null @@ -1,17 +0,0 @@ -function Tile(position, value) { - this.x = position.x; - this.y = position.y; - this.value = value || 2; - - this.previousPosition = null; - this.mergedFrom = null; // Tracks tiles that merged together -} - -Tile.prototype.savePosition = function () { - this.previousPosition = { x: this.x, y: this.y }; -}; - -Tile.prototype.updatePosition = function (position) { - this.x = position.x; - this.y = position.y; -}; diff --git a/sources/statistics.html b/sources/statistics.html deleted file mode 100644 index 9b51d9d..0000000 --- a/sources/statistics.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - 20 Euros Statistics - - - - - - - - - - - - - - - - - - - - -
-
-

Statistics

-
-

Statistics of my game 20 Euros.

- -
-

-Statistics since 2014-04-06. -

- - Out of the plays,
- reached the 50 cent coin,
- reached the 1 euro coin,
- reached the 2 euro coin,
- reached the 5 euro note,
- reached the 10 euro note,
- and won the game!
-

-

- The highest score achieved was . -

-
- - - - - - - - diff --git a/sources/style/example.css b/sources/style/example.css deleted file mode 100644 index c941903..0000000 --- a/sources/style/example.css +++ /dev/null @@ -1,50 +0,0 @@ -/* Global */ - - - -#leaderboardTable { - background-color: white; - overflow: auto; - width: 100%; - padding: 10px; - border: 8px solid #424547; - margin-bottom: 5px; -} - -#scoreInput { - width: 68%; -} - -#highestscore { - margin-top: 20px; - font-size: 14px; -} - -/* Presence */ - -#presenceDiv { - text-align: center; -} - -/* Tetris */ - -.tetris-body { - width: 600px; -} - -#canvas0, #canvas1 { - display: inline-block; - border: 4px solid #424547; -} - -#restartButton { - margin-top: 5px; -} - -#gameInProgress { - font-size: 14px; -} - -.hide { - display: none; -} \ No newline at end of file diff --git a/sources/style/main.css b/sources/style/main.css deleted file mode 100644 index 1d9a609..0000000 --- a/sources/style/main.css +++ /dev/null @@ -1,869 +0,0 @@ -@import url(fonts/clear-sans.css); -html, body { - margin: 0; - padding: 0; - background: #faf8ef; - color: #776e65; - font-family: "Clear Sans", "Helvetica Neue", Arial, sans-serif; - font-size: 18px; } - -body { - margin: 80px 0; } - -.heading:after { - content: ""; - display: block; - clear: both; } - -h1.title { - font-size: 80px; - font-weight: bold; - margin: 0; - display: block; - float: left; } - -@-webkit-keyframes move-up { - 0% { - top: 25px; - opacity: 1; } - - 100% { - top: -50px; - opacity: 0; } } - -@-moz-keyframes move-up { - 0% { - top: 25px; - opacity: 1; } - - 100% { - top: -50px; - opacity: 0; } } - -@keyframes move-up { - 0% { - top: 25px; - opacity: 1; } - - 100% { - top: -50px; - opacity: 0; } } - -.scores-container { - float: right; - text-align: right; } - -.score-container, .best-container { - position: relative; - display: inline-block; - background: #bbada0; - padding: 15px 25px; - font-size: 25px; - height: 25px; - line-height: 47px; - font-weight: bold; - border-radius: 3px; - color: white; - margin-top: 8px; - text-align: center; } - .score-container:after, .best-container:after { - position: absolute; - width: 100%; - top: 10px; - left: 0; - text-transform: uppercase; - font-size: 13px; - line-height: 13px; - text-align: center; - color: #eee4da; } - .score-container .score-addition, .best-container .score-addition { - position: absolute; - right: 30px; - color: red; - font-size: 25px; - line-height: 25px; - font-weight: bold; - color: rgba(119, 110, 101, 0.9); - z-index: 100; - -webkit-animation: move-up 600ms ease-in; - -moz-animation: move-up 600ms ease-in; - animation: move-up 600ms ease-in; - -webkit-animation-fill-mode: both; - -moz-animation-fill-mode: both; - animation-fill-mode: both; } - -.score-container:after { - content: "Score"; } - -.best-container:after { - content: "My best"; } - -p { - margin-top: 0; - margin-bottom: 10px; - line-height: 1.65; } - -a { - color: #776e65; - font-weight: bold; - text-decoration: underline; - cursor: pointer; } - -strong.important { - text-transform: uppercase; } - -hr { - border: none; - border-bottom: 1px solid #d8d4d0; - margin-top: 20px; - margin-bottom: 30px; } - -.container { - width: 640px; - margin: 0 auto; } - -@-webkit-keyframes fade-in { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } - -@-moz-keyframes fade-in { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } - -@keyframes fade-in { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } - -.game-container { - margin-top: 40px; - position: relative; - padding: 15px; - cursor: default; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - background: #bbada0; - border-radius: 6px; - width: 640px; - height: 640px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - - .game-container .game-message { - display: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: rgba(238, 228, 218, 0.5); - z-index: 100; - text-align: center; - -webkit-animation: fade-in 800ms ease 1200ms; - -moz-animation: fade-in 800ms ease 1200ms; - animation: fade-in 800ms ease 1200ms; - -webkit-animation-fill-mode: both; - -moz-animation-fill-mode: both; - animation-fill-mode: both; -} - -.game-container .game-message p { - font-size: 60px; - font-weight: bold; - height: 60px; - line-height: 60px; - margin-top: 222px; } - .game-container .game-message .lower { - display: block; - margin-top: 59px; } - .game-container .game-message a { - display: inline-block; - background: #8f7a66; - border-radius: 3px; - padding: 0 20px; - text-decoration: none; - color: #f9f6f2; - height: 40px; - line-height: 42px; - margin-left: 9px; } - .game-container .game-message a.keep-playing-button { - display: none; } - .game-container .game-message.game-won { - background: rgba(237, 194, 46, 0.5); - color: #f9f6f2; } - .game-container .game-message.game-won a.keep-playing-button { - display: inline-block; } - .game-container .game-message.game-won, .game-container .game-message.game-over { - display: block; } - -.grid-container { - position: absolute; - z-index: 1; } - -.grid-row { - margin-bottom: 15px; } - .grid-row:last-child { - margin-bottom: 0; } - .grid-row:after { - content: ""; - display: block; - clear: both; } - -.grid-cell { - width: 110px; - height: 110px; - margin-right: 15px; - float: left; - border-radius: 3px; - background: rgba(238, 228, 218, 0.35); } - .grid-cell:last-child { - margin-right: 0; } - -.tile-container { - position: absolute; - z-index: 2; } - -.tile, .tile .tile-inner { - width: 110px; - height: 110px; - line-height: 116.25px; } - -.tile.tile-position-1-1 { - -webkit-transform: translate(0px, 0px); - -moz-transform: translate(0px, 0px); - transform: translate(0px, 0px); } -.tile.tile-position-1-2 { - -webkit-transform: translate(0px, 125px); - -moz-transform: translate(0px, 125px); - transform: translate(0px, 125px); } -.tile.tile-position-1-3 { - -webkit-transform: translate(0px, 250px); - -moz-transform: translate(0px, 250px); - transform: translate(0px, 250px); } -.tile.tile-position-1-4 { - -webkit-transform: translate(0px, 375px); - -moz-transform: translate(0px, 375px); - transform: translate(0px, 375px); } -.tile.tile-position-1-5 { - -webkit-transform: translate(0px, 500px); - -moz-transform: translate(0px, 500px); - transform: translate(0px, 500px); } - -.tile.tile-position-2-1 { - -webkit-transform: translate(125px, 0px); - -moz-transform: translate(125px, 0px); - transform: translate(125px, 0px); } -.tile.tile-position-2-2 { - -webkit-transform: translate(125px, 125px); - -moz-transform: translate(125px, 125px); - transform: translate(125px, 125px); } -.tile.tile-position-2-3 { - -webkit-transform: translate(125px, 250px); - -moz-transform: translate(125px, 250px); - transform: translate(125px, 250px); } -.tile.tile-position-2-4 { - -webkit-transform: translate(125px, 375px); - -moz-transform: translate(125px, 375px); - transform: translate(125px, 375px); } -.tile.tile-position-2-5 { - -webkit-transform: translate(125px, 500px); - -moz-transform: translate(125px, 500px); - transform: translate(125px, 500px); } - -.tile.tile-position-3-1 { - -webkit-transform: translate(250px, 0px); - -moz-transform: translate(250px, 0px); - transform: translate(250px, 0px); } -.tile.tile-position-3-2 { - -webkit-transform: translate(250px, 125px); - -moz-transform: translate(250px, 125px); - transform: translate(250px, 125px); } -.tile.tile-position-3-3 { - -webkit-transform: translate(250px, 250px); - -moz-transform: translate(250px, 250px); - transform: translate(250px, 250px); } -.tile.tile-position-3-4 { - -webkit-transform: translate(250px, 375px); - -moz-transform: translate(250px, 375px); - transform: translate(250px, 375px); } -.tile.tile-position-3-5 { - -webkit-transform: translate(250px, 500px); - -moz-transform: translate(250px, 500x); - transform: translate(250px, 500px); } - -.tile.tile-position-4-1 { - -webkit-transform: translate(375px, 0px); - -moz-transform: translate(375px, 0px); - transform: translate(375px, 0px); } -.tile.tile-position-4-2 { - -webkit-transform: translate(375px, 125px); - -moz-transform: translate(375px, 125px); - transform: translate(375px, 125px); } -.tile.tile-position-4-3 { - -webkit-transform: translate(375px, 250px); - -moz-transform: translate(375px, 250px); - transform: translate(375px, 250px); } -.tile.tile-position-4-4 { - -webkit-transform: translate(375px, 375px); - -moz-transform: translate(375px, 375px); - transform: translate(375px, 375px); } -.tile.tile-position-4-5 { - -webkit-transform: translate(375px, 500px); - -moz-transform: translate(375px, 500px); - transform: translate(375px, 500px); } - -.tile.tile-position-5-1 { - -webkit-transform: translate(500px, 0px); - -moz-transform: translate(500px, 0px); - transform: translate(500px, 0px); } -.tile.tile-position-5-2 { - -webkit-transform: translate(500px, 125px); - -moz-transform: translate(500px, 125px); - transform: translate(500px, 125px); } -.tile.tile-position-5-3 { - -webkit-transform: translate(500px, 250px); - -moz-transform: translate(500px, 250px); - transform: translate(500px, 250px); } -.tile.tile-position-5-4 { - -webkit-transform: translate(500px, 375px); - -moz-transform: translate(500px, 375px); - transform: translate(500px, 375px); } -.tile.tile-position-5-5 { - -webkit-transform: translate(500px, 500px); - -moz-transform: translate(500px, 500px); - transform: translate(500px, 500px); } - - -.tile { - position: absolute; - -webkit-transition: 100ms ease-in-out; - -moz-transition: 100ms ease-in-out; - transition: 100ms ease-in-out; - -webkit-transition-property: -webkit-transform; - -moz-transition-property: -moz-transform; - transition-property: transform; } - .tile .tile-inner { - border-radius: 3px; - background: #eee4da; - text-align: center; - font-weight: bold; - z-index: 10; - font-size: 0px; } - - -.tile.tile-1 .tile-inner { - background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_1cent.gif'); - background-size: cover; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); } - - -.tile.tile-2 .tile-inner { - background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_2cent.gif'); - background-size: cover; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); } - - - -.tile.tile-5 .tile-inner { - background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_5cent.gif'); - background-size: cover; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); } - - - -.tile.tile-10 .tile-inner { - background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_10cent.gif'); - background-size: cover;} - - - -.tile.tile-20 .tile-inner { - background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_20cent.gif'); - background-size: cover;} - - - -.tile.tile-50 .tile-inner { - background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_50cent.gif'); - background-size: cover;} - - - - .tile.tile-100 .tile-inner { - background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_1euro.gif'); - background-size: cover;} - - - - .tile.tile-200 .tile-inner { - background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_2euro.gif'); - background-size: cover; -} - - - .tile.tile-500 .tile-inner { - - background: #ffffff url('http://www.126bay.com/images/banknote/europe/eURO/5%20Euro%202002%20-%20F.jpg'); - background-size: contain; background-repeat: no-repeat;} - - -.tile.tile-1000 .tile-inner { - - background: #ffffff url('http://www.126bay.com/images/banknote/europe/eURO/10%20Euro%202002%20-%20F.jpg'); - background-size: contain; background-repeat: no-repeat;} - -.tile.tile-2000 .tile-inner { - background: #ffffff url('http://www.126bay.com/images/banknote/europe/eURO/20%20Euro%202002%20-%20F.jpg'); - background-size: contain; background-repeat: no-repeat;} - - -.tile.tile-5000 .tile-inner { - background: #ffffff url('http://www.126bay.com/images/banknote/europe/eURO/50%20Euro%202002%20-%20F.jpg'); - background-size: contain; background-repeat: no-repeat;} - - -.tile.tile-10000 .tile-inner { - background: #ffffff url('http://www.blogger42.com/wp-content/uploads/100euro.jpg'); - background-size: contain; background-repeat: no-repeat;} - - -.tile.tile-20000 .tile-inner { - background: #ffffff url('http://www.blogger42.com/wp-content/uploads/e.jpg'); - background-size: contain; background-repeat: no-repeat;} - - -.tile.tile-50000 .tile-inner { - background: #ffffff url('http://www.rivistastudio.com/wp-content/uploads/2014/03/500euro.jpg'); - background-size: contain; background-repeat: no-repeat;} - - -.tile.tile-super .tile-inner { - - background: #ffffff url('http://upload.wikimedia.org/wikipedia/commons/c/c3/Euro_symbol_gold.svg'); - background-size: cover; - font-size: 30px; } - - - @media screen and (max-width: 520px) { - .tile.tile-super .tile-inner { - font-size: 10px; } } - -@-webkit-keyframes appear { - 0% { - opacity: 0; - -webkit-transform: scale(0); - -moz-transform: scale(0); - transform: scale(0); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - transform: scale(1); } } - -@-moz-keyframes appear { - 0% { - opacity: 0; - -webkit-transform: scale(0); - -moz-transform: scale(0); - transform: scale(0); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - transform: scale(1); } } - -@keyframes appear { - 0% { - opacity: 0; - -webkit-transform: scale(0); - -moz-transform: scale(0); - transform: scale(0); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - transform: scale(1); } } - -.tile-new .tile-inner { - -webkit-animation: appear 200ms ease 100ms; - -moz-animation: appear 200ms ease 100ms; - animation: appear 200ms ease 100ms; - -webkit-animation-fill-mode: backwards; - -moz-animation-fill-mode: backwards; - animation-fill-mode: backwards; } - -@-webkit-keyframes pop { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - transform: scale(0); } - - 50% { - -webkit-transform: scale(1.2); - -moz-transform: scale(1.2); - transform: scale(1.2); } - - 100% { - -webkit-transform: scale(1); - -moz-transform: scale(1); - transform: scale(1); } } - -@-moz-keyframes pop { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - transform: scale(0); } - - 50% { - -webkit-transform: scale(1.2); - -moz-transform: scale(1.2); - transform: scale(1.2); } - - 100% { - -webkit-transform: scale(1); - -moz-transform: scale(1); - transform: scale(1); } } - -@keyframes pop { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - transform: scale(0); } - - 50% { - -webkit-transform: scale(1.2); - -moz-transform: scale(1.2); - transform: scale(1.2); } - - 100% { - -webkit-transform: scale(1); - -moz-transform: scale(1); - transform: scale(1); } } - -.tile-merged .tile-inner { - z-index: 20; - -webkit-animation: pop 200ms ease 100ms; - -moz-animation: pop 200ms ease 100ms; - animation: pop 200ms ease 100ms; - -webkit-animation-fill-mode: backwards; - -moz-animation-fill-mode: backwards; - animation-fill-mode: backwards; } - -.game-intro { - margin-bottom: 0; } - -.game-explanation { - margin-top: 50px; } - -.sharing { - margin-top: 20px; - text-align: center; } - .sharing > iframe, .sharing > span, .sharing > form { - display: inline-block; - vertical-align: middle; } - -@media screen and (max-width: 520px) { - html, body { - font-size: 15px; } - - body { - margin: 20px 0; - padding: 0 20px; } - - h1.title { - font-size: 27px; - margin-top: 15px; } - - .container { - width: 280px; - margin: 0 auto; } - - .score-container, .best-container { - margin-top: 0; - padding: 15px 10px; - min-width: 40px; } - - .heading { - margin-bottom: 10px; } - - .game-container { - margin-top: 40px; - position: relative; - padding: 10px; - cursor: default; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - background: #bbada0; - border-radius: 6px; - width: 280px; - height: 280px; - -ms-touch-action: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .game-container .game-message { - display: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: rgba(238, 228, 218, 0.5); - z-index: 100; - text-align: center; - -webkit-animation: fade-in 800ms ease 1200ms; - -moz-animation: fade-in 800ms ease 1200ms; - animation: fade-in 800ms ease 1200ms; - -webkit-animation-fill-mode: both; - -moz-animation-fill-mode: both; - animation-fill-mode: both; } - .game-container .game-message p { - font-size: 60px; - font-weight: bold; - height: 60px; - line-height: 60px; - margin-top: 222px; } - .game-container .game-message .lower { - display: block; - margin-top: 59px; } - .game-container .game-message a { - display: inline-block; - background: #8f7a66; - border-radius: 3px; - padding: 0 20px; - text-decoration: none; - color: #f9f6f2; - height: 40px; - line-height: 42px; - margin-left: 9px; } - .game-container .game-message a.keep-playing-button { - display: none; } - .game-container .game-message .score-sharing { - display: inline-block; - vertical-align: middle; - margin-left: 10px; } - .game-container .game-message.game-won { - background: rgba(237, 194, 46, 0.5); - color: #f9f6f2; } - .game-container .game-message.game-won a.keep-playing-button { - display: inline-block; } - .game-container .game-message.game-won, .game-container .game-message.game-over { - display: block; } - - .grid-container { - position: absolute; - z-index: 1; } - - .grid-row { - margin-bottom: 10px; } - .grid-row:last-child { - margin-bottom: 0; } - .grid-row:after { - content: ""; - display: block; - clear: both; } - - .grid-cell { - width: 57.5px; - height: 57.5px; - margin-right: 10px; - float: left; - border-radius: 3px; - background: rgba(238, 228, 218, 0.35); } - .grid-cell:last-child { - margin-right: 0; } - - .tile-container { - position: absolute; - z-index: 2; } - - .tile, .tile .tile-inner { - width: 58px; - height: 58px; - line-height: 67.5px; } - .tile.tile-position-1-1 { - -webkit-transform: translate(0px, 0px); - -moz-transform: translate(0px, 0px); - transform: translate(0px, 0px); } - .tile.tile-position-1-2 { - -webkit-transform: translate(0px, 67px); - -moz-transform: translate(0px, 67px); - transform: translate(0px, 67px); } - .tile.tile-position-1-3 { - -webkit-transform: translate(0px, 135px); - -moz-transform: translate(0px, 135px); - transform: translate(0px, 135px); } - .tile.tile-position-1-4 { - -webkit-transform: translate(0px, 202px); - -moz-transform: translate(0px, 202px); - transform: translate(0px, 202px); } - .tile.tile-position-2-1 { - -webkit-transform: translate(67px, 0px); - -moz-transform: translate(67px, 0px); - transform: translate(67px, 0px); } - .tile.tile-position-2-2 { - -webkit-transform: translate(67px, 67px); - -moz-transform: translate(67px, 67px); - transform: translate(67px, 67px); } - .tile.tile-position-2-3 { - -webkit-transform: translate(67px, 135px); - -moz-transform: translate(67px, 135px); - transform: translate(67px, 135px); } - .tile.tile-position-2-4 { - -webkit-transform: translate(67px, 202px); - -moz-transform: translate(67px, 202px); - transform: translate(67px, 202px); } - .tile.tile-position-3-1 { - -webkit-transform: translate(135px, 0px); - -moz-transform: translate(135px, 0px); - transform: translate(135px, 0px); } - .tile.tile-position-3-2 { - -webkit-transform: translate(135px, 67px); - -moz-transform: translate(135px, 67px); - transform: translate(135px, 67px); } - .tile.tile-position-3-3 { - -webkit-transform: translate(135px, 135px); - -moz-transform: translate(135px, 135px); - transform: translate(135px, 135px); } - .tile.tile-position-3-4 { - -webkit-transform: translate(135px, 202px); - -moz-transform: translate(135px, 202px); - transform: translate(135px, 202px); } - .tile.tile-position-4-1 { - -webkit-transform: translate(202px, 0px); - -moz-transform: translate(202px, 0px); - transform: translate(202px, 0px); } - .tile.tile-position-4-2 { - -webkit-transform: translate(202px, 67px); - -moz-transform: translate(202px, 67px); - transform: translate(202px, 67px); } - .tile.tile-position-4-3 { - -webkit-transform: translate(202px, 135px); - -moz-transform: translate(202px, 135px); - transform: translate(202px, 135px); } - .tile.tile-position-4-4 { - -webkit-transform: translate(202px, 202px); - -moz-transform: translate(202px, 202px); - transform: translate(202px, 202px); } - - .game-container { - margin-top: 20px; } - - .tile .tile-inner { - font-size: 35px; } - - .game-message p { - font-size: 30px !important; - height: 30px !important; - line-height: 30px !important; - margin-top: 90px !important; } - .game-message .lower { - margin-top: 30px !important; } - - .sharing > iframe, .sharing > span, .sharing > form { - display: block; - margin: 0 auto; - margin-bottom: 20px; } } -.pp-donate button { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - border: none; - font: inherit; - color: inherit; - cursor: pointer; - display: inline-block; - background: #8f7a66; - border-radius: 3px; - padding: 0 20px; - text-decoration: none; - color: #f9f6f2; - height: 40px; - line-height: 42px; } - .pp-donate button img { - vertical-align: -4px; - margin-right: 8px; } - -.btc-donate { - position: relative; - margin-left: 10px; - display: inline-block; - background: #8f7a66; - border-radius: 3px; - padding: 0 20px; - text-decoration: none; - color: #f9f6f2; - height: 40px; - line-height: 42px; - cursor: pointer; } - .btc-donate img { - vertical-align: -4px; - margin-right: 8px; } - .btc-donate a { - color: #f9f6f2; - text-decoration: none; - font-weight: normal; } - .btc-donate .address { - cursor: auto; - position: absolute; - width: 340px; - right: 50%; - margin-right: -170px; - padding-bottom: 7px; - top: -30px; - opacity: 0; - pointer-events: none; - -webkit-transition: 400ms ease; - -moz-transition: 400ms ease; - transition: 400ms ease; - -webkit-transition-property: top, opacity; - -moz-transition-property: top, opacity; - transition-property: top, opacity; } - .btc-donate .address:after { - position: absolute; - border-top: 10px solid #bbada0; - border-right: 7px solid transparent; - border-left: 7px solid transparent; - content: ""; - bottom: 0px; - left: 50%; - margin-left: -7px; } - .btc-donate .address code { - background-color: #bbada0; - padding: 10px 15px; - width: 100%; - border-radius: 3px; - line-height: 1; - font-weight: normal; - font-size: 15px; - font-family: Consolas, "Liberation Mono", Courier, monospace; - text-align: center; } - .btc-donate:hover .address, .btc-donate .address:hover .address { - opacity: 1; - top: -45px; - pointer-events: auto; } - @media screen and (max-width: 480px) { - .btc-donate { - width: 120px; } - .btc-donate .address { - margin-right: -150px; - width: 300px; } - .btc-donate .address code { - font-size: 13px; } - .btc-donate .address:after { - left: 50%; - bottom: 2px; } } diff --git a/sources/stylesheets/pygment_trac.css b/sources/stylesheets/pygment_trac.css deleted file mode 100644 index e65cedf..0000000 --- a/sources/stylesheets/pygment_trac.css +++ /dev/null @@ -1,70 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f0f3f3; } -.highlight .c { color: #0099FF; font-style: italic } /* Comment */ -.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ -.highlight .k { color: #006699; font-weight: bold } /* Keyword */ -.highlight .o { color: #555555 } /* Operator */ -.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #009999 } /* Comment.Preproc */ -.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ -.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ -.highlight .go { color: #AAAAAA } /* Generic.Output */ -.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #99CC66 } /* Generic.Traceback */ -.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #006699 } /* Keyword.Pseudo */ -.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #FF6600 } /* Literal.Number */ -.highlight .s { color: #CC3300 } /* Literal.String */ -.highlight .na { color: #330099 } /* Name.Attribute */ -.highlight .nb { color: #336666 } /* Name.Builtin */ -.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ -.highlight .no { color: #336600 } /* Name.Constant */ -.highlight .nd { color: #9999FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #CC00FF } /* Name.Function */ -.highlight .nl { color: #9999FF } /* Name.Label */ -.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #003333 } /* Name.Variable */ -.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ -.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ -.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ -.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ -.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ -.highlight .sc { color: #CC3300 } /* Literal.String.Char */ -.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ -.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ -.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ -.highlight .sx { color: #CC3300 } /* Literal.String.Other */ -.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ -.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ -.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ -.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #003333 } /* Name.Variable.Class */ -.highlight .vg { color: #003333 } /* Name.Variable.Global */ -.highlight .vi { color: #003333 } /* Name.Variable.Instance */ -.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ - -.type-csharp .highlight .k { color: #0000FF } -.type-csharp .highlight .kt { color: #0000FF } -.type-csharp .highlight .nf { color: #000000; font-weight: normal } -.type-csharp .highlight .nc { color: #2B91AF } -.type-csharp .highlight .nn { color: #000000 } -.type-csharp .highlight .s { color: #A31515 } -.type-csharp .highlight .sc { color: #A31515 } diff --git a/sources/stylesheets/stylesheet.css b/sources/stylesheets/stylesheet.css deleted file mode 100644 index 7a08b01..0000000 --- a/sources/stylesheets/stylesheet.css +++ /dev/null @@ -1,423 +0,0 @@ -/******************************************************************************* -Slate Theme for GitHub Pages -by Jason Costello, @jsncostello -*******************************************************************************/ - -@import url(pygment_trac.css); - -/******************************************************************************* -MeyerWeb Reset -*******************************************************************************/ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} - -ol, ul { - list-style: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -/******************************************************************************* -Theme Styles -*******************************************************************************/ - -body { - box-sizing: border-box; - color:#373737; - background: #212121; - font-size: 16px; - font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; - line-height: 1.5; - -webkit-font-smoothing: antialiased; -} - -h1, h2, h3, h4, h5, h6 { - margin: 10px 0; - font-weight: 700; - color:#222222; - font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; - letter-spacing: -1px; -} - -h1 { - font-size: 36px; - font-weight: 700; -} - -h2 { - padding-bottom: 10px; - font-size: 32px; - background: url('../images/bg_hr.png') repeat-x bottom; -} - -h3 { - font-size: 24px; -} - -h4 { - font-size: 21px; -} - -h5 { - font-size: 18px; -} - -h6 { - font-size: 16px; -} - -p { - margin: 10px 0 15px 0; -} - -footer p { - color: #f2f2f2; -} - -a { - text-decoration: none; - color: #007edf; - text-shadow: none; - - transition: color 0.5s ease; - transition: text-shadow 0.5s ease; - -webkit-transition: color 0.5s ease; - -webkit-transition: text-shadow 0.5s ease; - -moz-transition: color 0.5s ease; - -moz-transition: text-shadow 0.5s ease; - -o-transition: color 0.5s ease; - -o-transition: text-shadow 0.5s ease; - -ms-transition: color 0.5s ease; - -ms-transition: text-shadow 0.5s ease; -} - -a:hover, a:focus {text-decoration: underline;} - -footer a { - color: #F2F2F2; - text-decoration: underline; -} - -em { - font-style: italic; -} - -strong { - font-weight: bold; -} - -img { - position: relative; - margin: 0 auto; - max-width: 739px; - padding: 5px; - margin: 10px 0 10px 0; - border: 1px solid #ebebeb; - - box-shadow: 0 0 5px #ebebeb; - -webkit-box-shadow: 0 0 5px #ebebeb; - -moz-box-shadow: 0 0 5px #ebebeb; - -o-box-shadow: 0 0 5px #ebebeb; - -ms-box-shadow: 0 0 5px #ebebeb; -} - -p img { - display: inline; - margin: 0; - padding: 0; - vertical-align: middle; - text-align: center; - border: none; -} - -pre, code { - width: 100%; - color: #222; - background-color: #fff; - - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - font-size: 14px; - - border-radius: 2px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; -} - -pre { - width: 100%; - padding: 10px; - box-shadow: 0 0 10px rgba(0,0,0,.1); - overflow: auto; -} - -code { - padding: 3px; - margin: 0 3px; - box-shadow: 0 0 10px rgba(0,0,0,.1); -} - -pre code { - display: block; - box-shadow: none; -} - -blockquote { - color: #666; - margin-bottom: 20px; - padding: 0 0 0 20px; - border-left: 3px solid #bbb; -} - - -ul, ol, dl { - margin-bottom: 15px -} - -ul { - list-style: inside; - padding-left: 20px; -} - -ol { - list-style: decimal inside; - padding-left: 20px; -} - -dl dt { - font-weight: bold; -} - -dl dd { - padding-left: 20px; - font-style: italic; -} - -dl p { - padding-left: 20px; - font-style: italic; -} - -hr { - height: 1px; - margin-bottom: 5px; - border: none; - background: url('../images/bg_hr.png') repeat-x center; -} - -table { - border: 1px solid #373737; - margin-bottom: 20px; - text-align: left; - } - -th { - font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; - padding: 10px; - background: #373737; - color: #fff; - } - -td { - padding: 10px; - border: 1px solid #373737; - } - -form { - background: #f2f2f2; - padding: 20px; -} - -/******************************************************************************* -Full-Width Styles -*******************************************************************************/ - -.outer { - width: 100%; -} - -.inner { - position: relative; - max-width: 640px; - padding: 20px 10px; - margin: 0 auto; -} - -#forkme_banner { - display: block; - position: absolute; - top:0; - right: 10px; - z-index: 10; - padding: 10px 50px 10px 10px; - color: #fff; - background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; - font-weight: 700; - box-shadow: 0 0 10px rgba(0,0,0,.5); - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; -} - -#header_wrap { - background: #212121; - background: -moz-linear-gradient(top, #373737, #212121); - background: -webkit-linear-gradient(top, #373737, #212121); - background: -ms-linear-gradient(top, #373737, #212121); - background: -o-linear-gradient(top, #373737, #212121); - background: linear-gradient(top, #373737, #212121); -} - -#header_wrap .inner { - padding: 50px 10px 30px 10px; -} - -#project_title { - margin: 0; - color: #fff; - font-size: 42px; - font-weight: 700; - text-shadow: #111 0px 0px 10px; -} - -#project_tagline { - color: #fff; - font-size: 24px; - font-weight: 300; - background: none; - text-shadow: #111 0px 0px 10px; -} - -#downloads { - position: absolute; - width: 210px; - z-index: 10; - bottom: -40px; - right: 0; - height: 70px; - background: url('../images/icon_download.png') no-repeat 0% 90%; -} - -.zip_download_link { - display: block; - float: right; - width: 90px; - height:70px; - text-indent: -5000px; - overflow: hidden; - background: url(../images/sprite_download.png) no-repeat bottom left; -} - -.tar_download_link { - display: block; - float: right; - width: 90px; - height:70px; - text-indent: -5000px; - overflow: hidden; - background: url(../images/sprite_download.png) no-repeat bottom right; - margin-left: 10px; -} - -.zip_download_link:hover { - background: url(../images/sprite_download.png) no-repeat top left; -} - -.tar_download_link:hover { - background: url(../images/sprite_download.png) no-repeat top right; -} - -#main_content_wrap { - background: #f2f2f2; - border-top: 1px solid #111; - border-bottom: 1px solid #111; -} - -#main_content { - padding-top: 40px; -} - -#footer_wrap { - background: #212121; -} - - - -/******************************************************************************* -Small Device Styles -*******************************************************************************/ - -@media screen and (max-width: 480px) { - body { - font-size:14px; - } - - #downloads { - display: none; - } - - .inner { - min-width: 320px; - max-width: 480px; - } - - #project_title { - font-size: 32px; - } - - h1 { - font-size: 28px; - } - - h2 { - font-size: 24px; - } - - h3 { - font-size: 21px; - } - - h4 { - font-size: 18px; - } - - h5 { - font-size: 14px; - } - - h6 { - font-size: 12px; - } - - code, pre { - min-width: 320px; - max-width: 480px; - font-size: 11px; - } - -} From 8e944b87263e6958e5a170233001354e04532b83 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 10:53:58 +0200 Subject: [PATCH 03/26] fix --- check_process | 0 manifest.json | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 check_process diff --git a/check_process b/check_process new file mode 100644 index 0000000..e69de29 diff --git a/manifest.json b/manifest.json index 30f2530..908a48f 100644 --- a/manifest.json +++ b/manifest.json @@ -9,14 +9,14 @@ "version": "1.0~ynh1", "url": "https://github.com/jatekos101/20euros", "license": "MIT", - "developer": { + "maintainer": { "name": "Moul", "email": "moul@moul.re" }, "requirements": { "yunohost": ">= 3.7.0" }, - "multi_instance": true, + "multi_instance": false, "services": [ "nginx" ], From c954afed058384d4df5c94e96560c0ffa313e024 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:00:40 +0200 Subject: [PATCH 04/26] Update check_process --- check_process | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/check_process b/check_process index e69de29..d920cdf 100644 --- a/check_process +++ b/check_process @@ -0,0 +1,29 @@ +;; Test complet + auto_remove=1 + ; Manifest + domain="domain.tld" (DOMAIN) + path="/path" (PATH) + is_public="Yes" (PUBLIC|public=Yes|private=No) + ; Checks + pkg_linter=1 + setup_sub_dir=1 + setup_root=1 + setup_nourl=0 + setup_private=1 + setup_public=1 + upgrade=1 + backup_restore=1 + multi_instance=0 + incorrect_path=1 + port_already_use=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto + Level 4=0 + Level 5=auto + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 \ No newline at end of file From 69b0404471bda13538ee085fc9f1843cb960c028 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:02:01 +0200 Subject: [PATCH 05/26] Update backup --- scripts/backup | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/scripts/backup b/scripts/backup index e69de29..ee32cca 100644 --- a/scripts/backup +++ b/scripts/backup @@ -0,0 +1,47 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source /usr/share/yunohost/helpers + +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 + +app=$YNH_APP_INSTANCE_NAME + +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) + +#================================================= +# BACKUP THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Backing up the main app directory..." --weight=1 + +ynh_backup --src_path="$final_path" + +#================================================= +# BACKUP THE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Backing up Nginx web server configuration..." --weight=2 + +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last From 49c91346f9975bbdd7c3ef8ca3b7535b6ebb1726 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:02:05 +0200 Subject: [PATCH 06/26] Update change_url --- scripts/change_url | 107 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/scripts/change_url b/scripts/change_url index e69de29..7fcf700 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -0,0 +1,107 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source /usr/share/yunohost/helpers + +# Stop script if errors +ynh_abort_if_errors + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 + +# Needed for helper "ynh_add_nginx_config" +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its url (may take a while)..." --weight=2 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi + +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= +ynh_script_progression --message="Updating Nginx web server configuration..." --weight=3 + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the nginx config file +if [ $change_path -eq 1 ] +then + # Make a backup of the original nginx config file if modified + ynh_backup_if_checksum_is_different --file="$nginx_conf_path" + # Set global variables for nginx helper + domain="$old_domain" + path_url="$new_path" + # Create a dedicated nginx config + ynh_add_nginx_config +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum --file="$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + # Store file checksum for the new config file location + ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" +fi + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading Nginx web server..." --weight=2 + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Change of URL completed for $app" --last From 4e7d0c3a937d6eb8a87d583b490eebae25a53402 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:02:09 +0200 Subject: [PATCH 07/26] Update restore --- scripts/restore | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/scripts/restore b/scripts/restore index e69de29..61703fb 100644 --- a/scripts/restore +++ b/scripts/restore @@ -0,0 +1,82 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source /usr/share/yunohost/helpers + +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading settings..." --weight=1 + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +#================================================= +# CHECK IF THE APP CAN BE RESTORED +#================================================= +ynh_script_progression --message="Validating restoration parameters..." --weight=1 + +ynh_webpath_available --domain=$domain --path_url=$path_url \ + || ynh_die --message="Path not available: ${domain}${path_url}" +test ! -d $final_path \ + || ynh_die --message="There is already a directory: $final_path " + +#================================================= +# STANDARD RESTORATION STEPS +#================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." --weight=2 + +ynh_restore_file --origin_path="$final_path" + +#================================================= +# RECREATE THE DEDICATED USER +#================================================= +ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 + +# Create the dedicated user (if not existing) +ynh_system_user_create --username=$app + +#================================================= +# RESTORE USER RIGHTS +#================================================= + +# Restore permissions on app files +chown -R root: $final_path + +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." --weight=3 + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Restoration completed for $app" --last From 727ef3519c7a5a21f1b142c13a1b91b30f756786 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:16:00 +0200 Subject: [PATCH 08/26] fix --- conf/nginx.conf | 16 ++++++++-------- scripts/install | 2 ++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 11cb4b2..bc3fa3d 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,14 +1,14 @@ #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; location __PATH__/ { - # Path to source - alias __FINALPATH__/ ; + # Path to source + alias __FINALPATH__/ ; - # Force usage of https - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } + # Force usage of https + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; } \ No newline at end of file diff --git a/scripts/install b/scripts/install index c560a3e..c16b8d1 100755 --- a/scripts/install +++ b/scripts/install @@ -59,6 +59,8 @@ ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" +chown -R www-data: $final_path + #================================================= # NGINX CONFIGURATION #================================================= From 6763162b0b90192d3460ec5549b69479004667ce Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:32:35 +0200 Subject: [PATCH 09/26] fix --- conf/nginx.conf | 2 ++ scripts/install | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index bc3fa3d..9c99b58 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,6 +4,8 @@ location __PATH__/ { # Path to source alias __FINALPATH__/ ; + 20\ Euro.html + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; diff --git a/scripts/install b/scripts/install index c16b8d1..c560a3e 100755 --- a/scripts/install +++ b/scripts/install @@ -59,8 +59,6 @@ ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" -chown -R www-data: $final_path - #================================================= # NGINX CONFIGURATION #================================================= From 6c74ffd7624ad7634177a31c31cdb82eb4b94348 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:37:38 +0200 Subject: [PATCH 10/26] Update nginx.conf --- conf/nginx.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 9c99b58..4f96459 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,8 +4,8 @@ location __PATH__/ { # Path to source alias __FINALPATH__/ ; - 20\ Euro.html - + 20\ Euro.html; + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; From 04f58749aa5de894955d218f025d4b3489bf0b6b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:44:04 +0200 Subject: [PATCH 11/26] Update nginx.conf --- conf/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 4f96459..58b691d 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,7 +4,7 @@ location __PATH__/ { # Path to source alias __FINALPATH__/ ; - 20\ Euro.html; + 20 Euro.html; # Force usage of https if ($scheme = http) { From 5c0a143863430e187dc94e57180233d59be0dc39 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 11:52:46 +0200 Subject: [PATCH 12/26] sources --- conf/nginx.conf | 2 - scripts/install | 5 +- sources/README.md | 8 + sources/comment.html | 32 + sources/faq.html | 79 +++ sources/images/bg_hr.png | Bin 0 -> 943 bytes sources/images/blacktocat.png | Bin 0 -> 1428 bytes sources/images/icon_download.png | Bin 0 -> 1162 bytes sources/images/sprite_download.png | Bin 0 -> 16799 bytes sources/index.html | 161 +++++ sources/javascripts/main.js | 1 + sources/js/animframe_polyfill.js | 26 + sources/js/application.js | 3 + sources/js/game_manager.js | 328 ++++++++++ sources/js/grid.js | 84 +++ sources/js/html_actuator.js | 337 +++++++++++ sources/js/keyboard_input_manager.js | 130 ++++ sources/js/local_score_manager.js | 48 ++ sources/js/tile.js | 17 + sources/statistics.html | 122 ++++ sources/style/example.css | 50 ++ sources/style/main.css | 869 +++++++++++++++++++++++++++ sources/stylesheets/pygment_trac.css | 70 +++ sources/stylesheets/stylesheet.css | 423 +++++++++++++ 24 files changed, 2792 insertions(+), 3 deletions(-) create mode 100755 sources/README.md create mode 100755 sources/comment.html create mode 100755 sources/faq.html create mode 100755 sources/images/bg_hr.png create mode 100755 sources/images/blacktocat.png create mode 100755 sources/images/icon_download.png create mode 100755 sources/images/sprite_download.png create mode 100755 sources/index.html create mode 100755 sources/javascripts/main.js create mode 100755 sources/js/animframe_polyfill.js create mode 100755 sources/js/application.js create mode 100755 sources/js/game_manager.js create mode 100755 sources/js/grid.js create mode 100755 sources/js/html_actuator.js create mode 100755 sources/js/keyboard_input_manager.js create mode 100755 sources/js/local_score_manager.js create mode 100755 sources/js/tile.js create mode 100755 sources/statistics.html create mode 100755 sources/style/example.css create mode 100755 sources/style/main.css create mode 100755 sources/stylesheets/pygment_trac.css create mode 100755 sources/stylesheets/stylesheet.css diff --git a/conf/nginx.conf b/conf/nginx.conf index 58b691d..bc3fa3d 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,8 +4,6 @@ location __PATH__/ { # Path to source alias __FINALPATH__/ ; - 20 Euro.html; - # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; diff --git a/scripts/install b/scripts/install index c560a3e..ad5adaa 100755 --- a/scripts/install +++ b/scripts/install @@ -57,7 +57,10 @@ ynh_script_progression --message="Setting up source files..." --weight=1 ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir="$final_path" +#ynh_setup_source --dest_dir="$final_path" + +mkdir -p $final_path +cp -a ../sources/* $final_path #================================================= # NGINX CONFIGURATION diff --git a/sources/README.md b/sources/README.md new file mode 100755 index 0000000..6bf2010 --- /dev/null +++ b/sources/README.md @@ -0,0 +1,8 @@ +20euros +======= + +A 2048 variant with Euro coins and notes. + +You'll find the game forum here: http://20euros.freeforums.net/ + +Feel free to fork my version and make pull requests! diff --git a/sources/comment.html b/sources/comment.html new file mode 100755 index 0000000..bd0b53c --- /dev/null +++ b/sources/comment.html @@ -0,0 +1,32 @@ + + + + + + 20 Euros Forum + + + + + + + + + + + + + diff --git a/sources/faq.html b/sources/faq.html new file mode 100755 index 0000000..b36cc61 --- /dev/null +++ b/sources/faq.html @@ -0,0 +1,79 @@ + + + + + 20 Euros FAQ + + + + + + + + + + + + + +
+
+

20 Euros FAQ

+
+

Frequently asked questions about my game 20 Euros.

+ +
+

Rules

+

Q: The game is buggy, sometimes it won't let me add two equal coins.
+A: Read the rules under the game first! For example, you can't add up two 2's to make 5, it wouldn't even make sense! To make a 5 cent coin, you have to combine two 2's and a 1.

+ +

Q: Why doesn't 2+2+2+2+2 make 10?
+A: It's clearly written in the rules that at most 3 coins can merge at a time. Otherwise it would be too easy.

+ +

Q: Can I continue after winning and make a 50 Euro note?
+A: Yes! You can even go all the way up to the 500 Euro note, if you can! That has actually been achieved (with an AI).

+ +
+

Variants

+

Q: Does the game have any variants?
+A: The only official variant is the undo version.

+ +

Q: Can I make my own variant/fork?
+A: Yes! You are free to make your own forks based on my variant, you can download it or fork it on GitHub.

+ +
+ +

Others

+

+Q: Is there a forum about the game?
+A: Yes, it's here. Feel free to add comments, suggestions or further questions!

+ +

Q: Are the statistics of the game public?
+A: Yes, you can find them here.

+ +
+ +If you didn't find the answer to your question, you can ask it on the forum. + +
+ + + + + + + + diff --git a/sources/images/bg_hr.png b/sources/images/bg_hr.png new file mode 100755 index 0000000000000000000000000000000000000000..7973bd69888c7e10ccad1111d555ceabb7cd99b6 GIT binary patch literal 943 zcmaJ=O^ee&7!FiK7FWCot{@Ck@nrMW&tx0B-6VAbrk1u~FTzffX&bu9#AIsIdef8t z!QZfdz=K}>3m(LO;6X3qN}Y6@>cJYA%)G<%Jn!ec>9im1@7>wsIBwrMF}iHO!q%;8 zSJ@xEd~(FL18NRvkBsOXMVM>4WQc*~qcQGc17IjxRnj!O_^B1gan0x#EWT48PK->5B2>mI;LIx zC*FSw$Nfc!g)WZCEOJ=mM)}lLsOk|$ltg_(&ax_YCWMlBLPDVT%D_gB7o_$YZ`-OB z#1sV%whRq21>W;qwN$N?OUGtQQe;JvOsQrna;+v+j8dth=*?orHHb6waX>S!yXCgT zo!oR3{E&GzaOAzfZYv@_Sf{LdyJInS>TS60&R9%yCs$y>2x(*gYIJtRrYAja$Ceq} z!N&oc_K1!3-Ft`U>`CM;quEbB4KG%!MovB*9_3!QzFhqHwrbwK|Doo-y>auDJNSP6 T=d)j*_4El@X4^PFK7I8YBT*xD literal 0 HcmV?d00001 diff --git a/sources/images/blacktocat.png b/sources/images/blacktocat.png new file mode 100755 index 0000000000000000000000000000000000000000..6e264fe57a2e35a2855405ac7d4102c3f6ddcdae GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/sources/index.html b/sources/index.html new file mode 100755 index 0000000..d56b4f9 --- /dev/null +++ b/sources/index.html @@ -0,0 +1,161 @@ + + + + + 20 Euros + + + + + + + + + + + + + + + + +
+
+

20 Euros

+ + +

+

+
0
+
0
+
+
+ +

Join the coins until you reach 20 Euro! + + +

+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+ + +

+ HOW TO PLAY: Use your arrow keys to move the coins. If two or three mergeable coins touch, they merge into one! Your goal is to reach the 20 Euro note! Restart with Space. +

+
+

+ Mergeable combinations:
+ 1+1=2
+ 2+2+1=5
+ 5+5=10
+ 10+10=20 or 5+10+5=20
+ 20+20+10=50
+ and so on. +

+
+

+FAQ: Click here for the frequently asked questions.
+ Forum: Click here for the game's forum.
+Statistics: Click here for the statistics. +

+
+

+Undo version: You can play the undo version of the game here. +
+GITHUB: You can see and fork my game on GitHub here. +

+
+

+This is not the original version of 2048.
+Original created by Gabriele Cirulli. +

+
+ + + + + + + + + + + + + + + + + diff --git a/sources/javascripts/main.js b/sources/javascripts/main.js new file mode 100755 index 0000000..d8135d3 --- /dev/null +++ b/sources/javascripts/main.js @@ -0,0 +1 @@ +console.log('This would be the main JS file.'); diff --git a/sources/js/animframe_polyfill.js b/sources/js/animframe_polyfill.js new file mode 100755 index 0000000..c45a13e --- /dev/null +++ b/sources/js/animframe_polyfill.js @@ -0,0 +1,26 @@ +(function() { + var lastTime = 0; + var vendors = ['webkit', 'moz']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = + window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + } + + if (!window.cancelAnimationFrame) { + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; + } +}()); diff --git a/sources/js/application.js b/sources/js/application.js new file mode 100755 index 0000000..7cf796a --- /dev/null +++ b/sources/js/application.js @@ -0,0 +1,3 @@ +// Wait till the browser is ready to render the game (avoids glitches) +window.requestAnimationFrame(function () { + new GameManager(5, KeyboardInputManager, HTMLActuator, LocalScoreManager);}); diff --git a/sources/js/game_manager.js b/sources/js/game_manager.js new file mode 100755 index 0000000..c5e145b --- /dev/null +++ b/sources/js/game_manager.js @@ -0,0 +1,328 @@ +function GameManager(size, InputManager, Actuator, ScoreManager) { + this.size = size; // Size of the grid + this.inputManager = new InputManager; + this.scoreManager = new ScoreManager; + this.actuator = new Actuator; + + this.startTiles = 2; + + this.inputManager.on("move", this.move.bind(this)); + this.inputManager.on("restart", this.restart.bind(this)); + this.inputManager.on("keepPlaying", this.keepPlaying.bind(this)); + + this.setup(); +} + +// Restart the game +GameManager.prototype.restart = function () { + this.actuator. + continue (); + this.setup(); +}; + +// Keep playing after winning +GameManager.prototype.keepPlaying = function () { + this.keepPlaying = true; + this.actuator. + continue (); +}; + +GameManager.prototype.isGameTerminated = function () { + if (this.over || (this.won && !this.keepPlaying)) { + return true; + } else { + return false; + } +}; + +// Set up the game +GameManager.prototype.setup = function () { + this.grid = new Grid(this.size); + + this.score = 0; + this.highestTile = 5; + this.over = false; + this.won = false; + this.keepPlaying = false; + + // Add the initial tiles + this.addStartTiles(); + + // Update the actuator + this.actuate(); +}; + +// Set up the initial tiles to start the game with +GameManager.prototype.addStartTiles = function () { + for (var i = 0; i < this.startTiles; i++) { + this.addRandomTile(); + } +}; + +// Adds a tile in a random position +GameManager.prototype.addRandomTile = function () { + if (this.grid.cellsAvailable()) { + var value = Math.random() < 0.9 ? 1 : 5; + var tile = new Tile(this.grid.randomAvailableCell(), value); + + this.grid.insertTile(tile); + } +}; + +// Sends the updated grid to the actuator +GameManager.prototype.actuate = function () { + if (this.scoreManager.get() < this.score) { + this.scoreManager.set(this.score); + } + + this.actuator.actuate(this.grid, { + score: this.score, + highest: this.highestTile, + over: this.over, + won: this.won, + bestScore: this.scoreManager.get(), + terminated: this.isGameTerminated() + }); + +}; + +// Save all tile positions and remove merger info +GameManager.prototype.prepareTiles = function () { + this.grid.eachCell(function (x, y, tile) { + if (tile) { + tile.mergedFrom = null; + tile.savePosition(); + } + }); +}; + +// Move a tile and its representation +GameManager.prototype.moveTile = function (tile, cell) { + this.grid.cells[tile.x][tile.y] = null; + this.grid.cells[cell.x][cell.y] = tile; + tile.updatePosition(cell); +}; + +// Move tiles on the grid in the specified direction +GameManager.prototype.move = function (direction) { + // 0: up, 1: right, 2:down, 3: left + var self = this; + + if (this.isGameTerminated()) return; // Don't do anything if the game's over + var cell, tile; + + var vector = this.getVector(direction); + var traversals = this.buildTraversals(vector); + var moved = false; + + // Save the current tile positions and remove merger information + this.prepareTiles(); + + // Traverse the grid in the right direction and move tiles + traversals.x.forEach(function (x) { + traversals.y.forEach(function (y) { + cell = { + x: x, + y: y + }; + tile = self.grid.cellContent(cell); + + if (tile && tile.merged) { + self.grid.removeTile(tile); + } else if (tile) { + var positions = self.findFarthestPosition(cell, vector); + var next = self.grid.cellContent(positions.next); + var pos2 = null; + var next2 = null; + if (next) { + pos2 = self.findFarthestPosition({ + x: next.x, + y: next.y + }, vector); + next2 = self.grid.cellContent(pos2.next); + } + // Only one merger per row traversal? + if (next && next2 && !next.mergedFrom && next != next2 && (((tile.value == 1) && (next.value == 2) && (next2.value == 2)) || ((tile.value == 2) && (next.value == 1) && (next2.value == 2)) || ((tile.value == 2) && (next.value == 2) && (next2.value == 1)) || ((tile.value == 10) && (next.value == 20) && (next2.value == 20)) || ((tile.value == 20) && (next.value == 10) && (next2.value == 20)) || ((tile.value == 20) && (next.value == 20) && (next2.value == 10)) || ((tile.value == 100) && (next.value == 200) && (next2.value == 200)) || ((tile.value == 200) && (next.value == 100) && (next2.value == 200)) || ((tile.value == 200) && (next.value == 200) && (next2.value == 100)) || ((tile.value == 1000) && (next.value == 2000) && (next2.value == 2000)) || ((tile.value == 2000) && (next.value == 1000) && (next2.value == 2000)) || ((tile.value == 2000) && (next.value == 2000) && (next2.value == 1000)) || ((tile.value == 10000) && (next.value == 20000) && (next2.value == 20000)) || ((tile.value == 20000) && (next.value == 10000) && (next2.value == 20000)) || ((tile.value == 20000) && (next.value == 20000) && (next2.value == 10000)) || ((tile.value == 5) && (next.value == 10) && (next2.value == 5)) || ((tile.value == 50) && (next.value == 100) && (next2.value == 50)) || ((tile.value == 500) && (next.value == 1000) && (next2.value == 500)) || ((tile.value == 5000) && (next.value == 10000) && (next2.value == 5000)))) { + + var merged = new Tile(pos2.next, tile.value + next.value + next2.value); + merged.mergedFrom = [next2, next, tile]; + tile.merged = true; + next.merged = true; + next2.merged = true; + + self.grid.removeTile(tile); + self.grid.removeTile(next); + self.grid.removeTile(next2); + + self.grid.insertTile(merged); + // Converge the two tiles' positions + tile.updatePosition(pos2.next); + next.updatePosition(pos2.next); + // Update the score + self.score += merged.value; + + if (merged.value > self.highestTile) self.highestTile = merged.value; + + // The mighty 20 Euro tile + if (merged.value === 2000) self.won = true; + } else if (next && next.value === tile.value && !next.mergedFrom && next.value != 2 && next.value != 20 && next.value != 200 && next.value != 2000 && next.value != 20000 && next.value != 50000) { + + var merged = new Tile(positions.next, tile.value * 2); + merged.mergedFrom = [tile, next]; + tile.merged = true; + next.merged = true; + + self.grid.insertTile(merged); + self.grid.removeTile(tile); + + // Converge the two tiles' positions + tile.updatePosition(positions.next); + + // Update the score + self.score += merged.value; + + if (merged.value > self.highestTile) self.highestTile = merged.value; + + // The mighty 20 Euro tile + if (merged.value === 2000) self.won = true; + } else if (!tile.merged) { + self.moveTile(tile, positions.farthest); + } + + if (tile && !self.positionsEqual(cell, tile)) { + moved = true; // The tile moved from its original cell! + } + } + + }); + }); + + if (moved) { + this.addRandomTile(); + + if (!this.movesAvailable()) { + this.over = true; // Game over! + } + + this.actuate(); + } +}; + +// Get the vector representing the chosen direction +GameManager.prototype.getVector = function (direction) { + // Vectors representing tile movement + var map = { + 0: { + x: 0, + y: -1 + }, + // up + 1: { + x: 1, + y: 0 + }, + // right + 2: { + x: 0, + y: 1 + }, + // down + 3: { + x: -1, + y: 0 + } // left + }; + + return map[direction]; +}; + +// Build a list of positions to traverse in the right order +GameManager.prototype.buildTraversals = function (vector) { + var traversals = { + x: [], + y: [] + }; + + for (var pos = 0; pos < this.size; pos++) { + traversals.x.push(pos); + traversals.y.push(pos); + } + + // Always traverse from the farthest cell in the chosen direction + if (vector.x === 1) traversals.x = traversals.x.reverse(); + if (vector.y === 1) traversals.y = traversals.y.reverse(); + + return traversals; +}; + +GameManager.prototype.findFarthestPosition = function (cell, vector) { + var previous; + + // Progress towards the vector direction until an obstacle is found + do { + previous = cell; + cell = { + x: previous.x + vector.x, + y: previous.y + vector.y + }; + } while (this.grid.withinBounds(cell) && this.grid.cellAvailable(cell)); + + return { + farthest: previous, + next: cell // Used to check if a merge is required + }; +}; + +GameManager.prototype.movesAvailable = function () { + return this.grid.cellsAvailable() || this.tileMatchesAvailable(); +}; + +// Check for available matches between tiles(more expensive check) +GameManager.prototype.tileMatchesAvailable = function () { + var self = this; + + var tile; + var i = 0; + while (i < 4) { + for (var x = 0; x < this.size; x++) { + for (var y = 0; y < this.size; y++) { + var vector = this.getVector(i); + tile = this.grid.cellContent({ + x: x, + y: y + }); + + cell = { + x: x, + y: y + }; + tile = self.grid.cellContent(cell); + + if (tile) { + var positions = self.findFarthestPosition(cell, vector); + var next = self.grid.cellContent(positions.next); + var pos2 = self.findFarthestPosition({ + x: cell.x + vector.x, + y: cell.y + vector.y + }, vector); + var next2 = self.grid.cellContent(pos2.next); + // Only one merger per row traversal? + if (next && next2 && next != next2 && (((tile.value == 1) && (next.value == 2) && (next2.value == 2)) || ((tile.value == 2) && (next.value == 1) && (next2.value == 2)) || ((tile.value == 2) && (next.value == 2) && (next2.value == 1)) || ((tile.value == 10) && (next.value == 20) && (next2.value == 20)) || ((tile.value == 20) && (next.value == 10) && (next2.value == 20)) || ((tile.value == 20) && (next.value == 20) && (next2.value == 10)) || ((tile.value == 100) && (next.value == 200) && (next2.value == 200)) || ((tile.value == 200) && (next.value == 100) && (next2.value == 200)) || ((tile.value == 200) && (next.value == 200) && (next2.value == 100)) || ((tile.value == 1000) && (next.value == 2000) && (next2.value == 2000)) || ((tile.value == 2000) && (next.value == 1000) && (next2.value == 2000)) || ((tile.value == 2000) && (next.value == 2000) && (next2.value == 1000)) || ((tile.value == 10000) && (next.value == 20000) && (next2.value == 20000)) || ((tile.value == 20000) && (next.value == 10000) && (next2.value == 20000)) || ((tile.value == 20000) && (next.value == 20000) && (next2.value == 10000)) || ((tile.value == 5) && (next.value == 10) && (next2.value == 5)) || ((tile.value == 50) && (next.value == 100) && (next2.value == 50)) || ((tile.value == 500) && (next.value == 1000) && (next2.value == 500)) || ((tile.value == 5000) && (next.value == 10000) && (next2.value == 5000)))) { + return true; + } + if (next && next.value === tile.value && next.value != 2 && next.value != 20 && next.value != 200 && next.value != 2000 && next.value != 20000 && next.value != 50000) { + return true; + } + + } + } + } + i += 1; + } + + return false; +}; + +GameManager.prototype.positionsEqual = function (first, second) { + return first.x === second.x && first.y === second.y; +}; \ No newline at end of file diff --git a/sources/js/grid.js b/sources/js/grid.js new file mode 100755 index 0000000..05fe057 --- /dev/null +++ b/sources/js/grid.js @@ -0,0 +1,84 @@ +function Grid(size) { + this.size = size; + + this.cells = []; + + this.build(); +} + +// Build a grid of the specified size +Grid.prototype.build = function () { + for (var x = 0; x < this.size; x++) { + var row = this.cells[x] = []; + + for (var y = 0; y < this.size; y++) { + row.push(null); + } + } +}; + +// Find the first available random position +Grid.prototype.randomAvailableCell = function () { + var cells = this.availableCells(); + + if (cells.length) { + return cells[Math.floor(Math.random() * cells.length)]; + } +}; + +Grid.prototype.availableCells = function () { + var cells = []; + + this.eachCell(function (x, y, tile) { + if (!tile) { + cells.push({ x: x, y: y }); + } + }); + + return cells; +}; + +// Call callback for every cell +Grid.prototype.eachCell = function (callback) { + for (var x = 0; x < this.size; x++) { + for (var y = 0; y < this.size; y++) { + callback(x, y, this.cells[x][y]); + } + } +}; + +// Check if there are any cells available +Grid.prototype.cellsAvailable = function () { + return !!this.availableCells().length; +}; + +// Check if the specified cell is taken +Grid.prototype.cellAvailable = function (cell) { + return !this.cellOccupied(cell); +}; + +Grid.prototype.cellOccupied = function (cell) { + return !!this.cellContent(cell); +}; + +Grid.prototype.cellContent = function (cell) { + if (this.withinBounds(cell)) { + return this.cells[cell.x][cell.y]; + } else { + return null; + } +}; + +// Inserts a tile at its position +Grid.prototype.insertTile = function (tile) { + this.cells[tile.x][tile.y] = tile; +}; + +Grid.prototype.removeTile = function (tile) { + this.cells[tile.x][tile.y] = null; +}; + +Grid.prototype.withinBounds = function (position) { + return position.x >= 0 && position.x < this.size && + position.y >= 0 && position.y < this.size; +}; diff --git a/sources/js/html_actuator.js b/sources/js/html_actuator.js new file mode 100755 index 0000000..5cdf9cf --- /dev/null +++ b/sources/js/html_actuator.js @@ -0,0 +1,337 @@ +function HTMLActuator() { + this.tileContainer = document.querySelector(".tile-container"); + this.scoreContainer = document.querySelector(".score-container"); + this.bestContainer = document.querySelector(".best-container"); + this.messageContainer = document.querySelector(".game-message"); + this.sharingContainer = document.querySelector(".score-sharing"); + + this.score = 0; + this.highestTile = 1; +} + +HTMLActuator.prototype.actuate = function (grid, metadata) { + var self = this; + + window.requestAnimationFrame(function () { + self.clearContainer(self.tileContainer); + + grid.cells.forEach(function (column) { + column.forEach(function (cell) { + if (cell) { + self.addTile(cell); + } + }); + }); + + self.updateScore(metadata.score); + self.updateBestScore(metadata.bestScore); + self.highestTile = metadata.highest; + + if (metadata.terminated) { + if (metadata.over) { + self.message(false); // You lose + } else if (metadata.won) { + self.message(true); // You win! + } + } + + }); +}; + +// Continues the game (both restart and keep playing) +HTMLActuator.prototype.continue = function () { + if (typeof ga !== "undefined") { + ga("send", "event", "game", "restart"); + } + + this.clearMessage(); +}; + +HTMLActuator.prototype.clearContainer = function (container) { + while (container.firstChild) { + container.removeChild(container.firstChild); + } +}; + +HTMLActuator.prototype.addTile = function (tile) { + var self = this; + + var wrapper = document.createElement("div"); + var inner = document.createElement("div"); + var position = tile.previousPosition || { x: tile.x, y: tile.y }; + var positionClass = this.positionClass(position); + + // We can't use classlist because it somehow glitches when replacing classes + var classes = ["tile", "tile-" + tile.value, positionClass]; + + if (tile.value > 50000) classes.push("tile-super"); + + this.applyClasses(wrapper, classes); + + inner.classList.add("tile-inner"); + inner.textContent = tile.value; + + if (tile.previousPosition) { + // Make sure that the tile gets rendered in the previous position first + window.requestAnimationFrame(function () { + classes[2] = self.positionClass({ x: tile.x, y: tile.y }); + self.applyClasses(wrapper, classes); // Update the position + }); + } else if (tile.mergedFrom) { + classes.push("tile-merged"); + this.applyClasses(wrapper, classes); + + // Render the tiles that merged + tile.mergedFrom.forEach(function (merged) { + self.addTile(merged); + }); + } else { + classes.push("tile-new"); + this.applyClasses(wrapper, classes); + } + + // Add the inner part of the tile to the wrapper + wrapper.appendChild(inner); + + // Put the tile on the board + this.tileContainer.appendChild(wrapper); +}; + +HTMLActuator.prototype.applyClasses = function (element, classes) { + element.setAttribute("class", classes.join(" ")); +}; + +HTMLActuator.prototype.normalizePosition = function (position) { + return { x: position.x + 1, y: position.y + 1 }; +}; + +HTMLActuator.prototype.positionClass = function (position) { + position = this.normalizePosition(position); + return "tile-position-" + position.x + "-" + position.y; +}; + +HTMLActuator.prototype.updateScore = function (score) { + this.clearContainer(this.scoreContainer); + + var difference = score - this.score; + this.score = score; + + this.scoreContainer.textContent = this.score; + + if (difference > 0) { + var addition = document.createElement("div"); + addition.classList.add("score-addition"); + addition.textContent = "+" + difference; + + this.scoreContainer.appendChild(addition); + } +}; + +HTMLActuator.prototype.updateBestScore = function (bestScore) { + this.bestContainer.textContent = bestScore; +}; + +HTMLActuator.prototype.message = function (won) { + var type = won ? "game-won" : "game-over"; + var message = won ? "You won!" : "No more moves. Game over."; + + // Build some firebase references. + var rootRef = new Firebase('https://20-euros.firebaseio.com'); + var scoreListRef = rootRef.child("scoreList"); + var highestScoreRef = rootRef.child("highestScore"); + var RefPlays = rootRef.child("plays"); + var Ref50 = rootRef.child("reached_50c"); + var Ref100 = rootRef.child("reached_1e"); + var Ref200 = rootRef.child("reached_2e"); + var Ref500 = rootRef.child("reached_5e"); + var Ref1000 = rootRef.child("reached_10e"); + var Ref2000 = rootRef.child("reached_20e"); + var Ref5000 = rootRef.child("reached_50e"); + var Ref10000 = rootRef.child("reached_100e"); + var Ref20000 = rootRef.child("reached_200e"); + var Ref50000 = rootRef.child("reached_500e"); + + // Keep a mapping of firebase locations to HTML elements, so we can move / remove elements as necessary. + var htmlForPath = {}; + + // Helper function that takes a new score snapshot and adds an appropriate row to our leaderboard table. + function handleScoreAdded(scoreSnapshot, prevScoreName) { + var newScoreRow = $(""); + newScoreRow.append($("").append($("").text(scoreSnapshot.val().name))); + newScoreRow.append($("").text(scoreSnapshot.val().score)); + + // Store a reference to the table row so we can get it again later. + htmlForPath[scoreSnapshot.name()] = newScoreRow; + + // Insert the new score in the appropriate place in the table. + if (prevScoreName === null) { + $("#leaderboardTable").append(newScoreRow); + } + else { + var lowerScoreRow = htmlForPath[prevScoreName]; + lowerScoreRow.before(newScoreRow); + } + } + + // Helper function to handle a score object being removed; just removes the corresponding table row. + function handleScoreRemoved(scoreSnapshot) { + var removedScoreRow = htmlForPath[scoreSnapshot.name()]; + removedScoreRow.remove(); + delete htmlForPath[scoreSnapshot.name()]; + } + +function makeid() +{ + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + for( var i=0; i < 8; i++ ) + text += possible.charAt(Math.floor(Math.random() * possible.length)); + + return text; +} + + // Create a view to only receive callbacks for the last LEADERBOARD_SIZE scores + var scoreListView = scoreListRef.limit(10); + + // Add a callback to handle when a new score is added. + scoreListView.on('child_added', function (newScoreSnapshot, prevScoreName) { + handleScoreAdded(newScoreSnapshot, prevScoreName); + }); + + // Add a callback to handle when a score is removed + scoreListView.on('child_removed', function (oldScoreSnapshot) { + handleScoreRemoved(oldScoreSnapshot); + }); + + // Add a callback to handle when a score changes or moves positions. + var changedCallback = function (scoreSnapshot, prevScoreName) { + handleScoreRemoved(scoreSnapshot); + handleScoreAdded(scoreSnapshot, prevScoreName); + }; + scoreListView.on('child_moved', changedCallback); + scoreListView.on('child_changed', changedCallback); + + var newScore = this.score; + var name = makeid(); + $("#scoreInput").val(""); + + var userScoreRef = scoreListRef.child(name); + + // Use setWithPriority to put the name / score in Firebase, and set the priority to be the score. + if ((newScore <= 500)||(this.highestTile <= 20)||(this.highestTile >= 2000)){ + userScoreRef.setWithPriority({ name:name, score:newScore, highest:this.highestTile }, newScore);} + +// Track the highest score using a transaction. A transaction guarantees that the code inside the block is + // executed on the latest data from the server, so transactions should be used if you have multiple + // clients writing to the same data and you want to avoid conflicting changes. + highestScoreRef.transaction(function (currentHighestScore) { + if (currentHighestScore === null || newScore > currentHighestScore) { + // The return value of this function gets saved to the server as the new highest score. + return newScore; + } + // if we return with no arguments, it cancels the transaction. + return; + }); + + RefPlays.transaction(function(current_value) { + return current_value + 1; + }); + + if (this.highestTile >= 50){ + Ref50.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 100){ + Ref100.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 200){ + Ref200.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 500){ + Ref500.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 1000){ + Ref1000.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 2000){ + Ref2000.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 5000){ + Ref5000.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 10000){ + Ref10000.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 20000){ + Ref20000.transaction(function(current_value) { + return current_value + 1; + }); + } + +if (this.highestTile >= 50000){ + Ref50000.transaction(function(current_value) { + return current_value + 1; + }); + } + + // Add a callback to the highest score in Firebase so we can update the GUI any time it changes. + highestScoreRef.on('value', function (newHighestScore) { + $("#highestScoreDiv").text(newHighestScore.val()); + }); + + if (typeof ga !== "undefined") { + ga("send", "event", "game", "end", type, this.score); + } + + this.messageContainer.classList.add(type); + this.messageContainer.getElementsByTagName("p")[0].textContent = message; + + this.clearContainer(this.sharingContainer); + this.sharingContainer.appendChild(this.scoreTweetButton()); + twttr.widgets.load(); +}; + +HTMLActuator.prototype.clearMessage = function () { + // IE only takes one value to remove at a time. + this.messageContainer.classList.remove("game-won"); + this.messageContainer.classList.remove("game-over"); +}; + +HTMLActuator.prototype.scoreTweetButton = function () { + var tweet = document.createElement("a"); + tweet.classList.add("twitter-share-button"); + tweet.setAttribute("href", "https://twitter.com/share"); + tweet.setAttribute("data-via", "gabrielecirulli"); + tweet.setAttribute("data-url", "http://git.io/2048"); + tweet.setAttribute("data-counturl", "http://gabrielecirulli.github.io/2048/"); + tweet.textContent = "Tweet"; + var text = "I got " + this.score + " points in 20 Euro, a game where you " + + "join numbers to score high! #20eurogame"; + tweet.setAttribute("data-text", text); + + return tweet; +}; diff --git a/sources/js/keyboard_input_manager.js b/sources/js/keyboard_input_manager.js new file mode 100755 index 0000000..a29744c --- /dev/null +++ b/sources/js/keyboard_input_manager.js @@ -0,0 +1,130 @@ +function KeyboardInputManager() { + this.events = {}; + + if (window.navigator.msPointerEnabled) { + //Internet Explorer 10 style + this.eventTouchstart = "MSPointerDown"; + this.eventTouchmove = "MSPointerMove"; + this.eventTouchend = "MSPointerUp"; + } else { + this.eventTouchstart = "touchstart"; + this.eventTouchmove = "touchmove"; + this.eventTouchend = "touchend"; + } + + this.listen(); +} + +KeyboardInputManager.prototype.on = function (event, callback) { + if (!this.events[event]) { + this.events[event] = []; + } + this.events[event].push(callback); +}; + +KeyboardInputManager.prototype.emit = function (event, data) { + var callbacks = this.events[event]; + if (callbacks) { + callbacks.forEach(function (callback) { + callback(data); + }); + } +}; + +KeyboardInputManager.prototype.listen = function () { + var self = this; + + var map = { + 38: 0, // Up + 39: 1, // Right + 40: 2, // Down + 37: 3, // Left + 75: 0, // vim keybindings + 76: 1, + 74: 2, + 72: 3, + 87: 0, // W + 68: 1, // D + 83: 2, // S + 65: 3 // A + }; + + document.addEventListener("keydown", function (event) { + var modifiers = event.altKey || event.ctrlKey || event.metaKey || + event.shiftKey; + var mapped = map[event.which]; + + if (!modifiers) { + if (mapped !== undefined) { + event.preventDefault(); + self.emit("move", mapped); + } + + if (event.which === 32) self.restart.bind(self)(event); + } + }); + + var retry = document.querySelector(".retry-button"); + retry.addEventListener("click", this.restart.bind(this)); + retry.addEventListener(this.eventTouchend, this.restart.bind(this)); + + var keepPlaying = document.querySelector(".keep-playing-button"); + keepPlaying.addEventListener("click", this.keepPlaying.bind(this)); + keepPlaying.addEventListener("touchend", this.keepPlaying.bind(this)); + + // Listen to swipe events + var touchStartClientX, touchStartClientY; + var gameContainer = document.getElementsByClassName("game-container")[0]; + + gameContainer.addEventListener(this.eventTouchstart, function (event) { + if (( !window.navigator.msPointerEnabled && event.touches.length > 1) || event.targetTouches > 1) return; + + if(window.navigator.msPointerEnabled){ + touchStartClientX = event.pageX; + touchStartClientY = event.pageY; + } else { + touchStartClientX = event.touches[0].clientX; + touchStartClientY = event.touches[0].clientY; + } + + event.preventDefault(); + }); + + gameContainer.addEventListener(this.eventTouchmove, function (event) { + event.preventDefault(); + }); + + gameContainer.addEventListener(this.eventTouchend, function (event) { + if (( !window.navigator.msPointerEnabled && event.touches.length > 0) || event.targetTouches > 0) return; + + var touchEndClientX, touchEndClientY; + if(window.navigator.msPointerEnabled){ + touchEndClientX = event.pageX; + touchEndClientY = event.pageY; + } else { + touchEndClientX = event.changedTouches[0].clientX; + touchEndClientY = event.changedTouches[0].clientY; + } + + var dx = touchEndClientX - touchStartClientX; + var absDx = Math.abs(dx); + + var dy = touchEndClientY - touchStartClientY; + var absDy = Math.abs(dy); + + if (Math.max(absDx, absDy) > 10) { + // (right : left) : (down : up) + self.emit("move", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0)); + } + }); +}; + +KeyboardInputManager.prototype.restart = function (event) { + event.preventDefault(); + this.emit("restart"); +}; + +KeyboardInputManager.prototype.keepPlaying = function (event) { + event.preventDefault(); + this.emit("keepPlaying"); +}; diff --git a/sources/js/local_score_manager.js b/sources/js/local_score_manager.js new file mode 100755 index 0000000..ec4575d --- /dev/null +++ b/sources/js/local_score_manager.js @@ -0,0 +1,48 @@ +window.fakeStorage = { + _data: {}, + + setItem: function (id, val) { + return this._data[id] = String(val); + }, + + getItem: function (id) { + return this._data.hasOwnProperty(id) ? this._data[id] : undefined; + }, + + removeItem: function (id) { + return delete this._data[id]; + }, + + clear: function () { + return this._data = {}; + } +}; + +function LocalScoreManager() { + this.key = "bestScore"; + + var supported = this.localStorageSupported(); + this.storage = supported ? window.localStorage : window.fakeStorage; +} + +LocalScoreManager.prototype.localStorageSupported = function () { + var testKey = "test"; + var storage = window.localStorage; + + try { + storage.setItem(testKey, "1"); + storage.removeItem(testKey); + return true; + } catch (error) { + return false; + } +}; + +LocalScoreManager.prototype.get = function () { + return this.storage.getItem(this.key) || 0; +}; + +LocalScoreManager.prototype.set = function (score) { + this.storage.setItem(this.key, score); +}; + diff --git a/sources/js/tile.js b/sources/js/tile.js new file mode 100755 index 0000000..de08333 --- /dev/null +++ b/sources/js/tile.js @@ -0,0 +1,17 @@ +function Tile(position, value) { + this.x = position.x; + this.y = position.y; + this.value = value || 2; + + this.previousPosition = null; + this.mergedFrom = null; // Tracks tiles that merged together +} + +Tile.prototype.savePosition = function () { + this.previousPosition = { x: this.x, y: this.y }; +}; + +Tile.prototype.updatePosition = function (position) { + this.x = position.x; + this.y = position.y; +}; diff --git a/sources/statistics.html b/sources/statistics.html new file mode 100755 index 0000000..9b51d9d --- /dev/null +++ b/sources/statistics.html @@ -0,0 +1,122 @@ + + + + + 20 Euros Statistics + + + + + + + + + + + + + + + + + + + + +
+
+

Statistics

+
+

Statistics of my game 20 Euros.

+ +
+

+Statistics since 2014-04-06. +

+ + Out of the plays,
+ reached the 50 cent coin,
+ reached the 1 euro coin,
+ reached the 2 euro coin,
+ reached the 5 euro note,
+ reached the 10 euro note,
+ and won the game!
+

+

+ The highest score achieved was . +

+
+ + + + + + + + diff --git a/sources/style/example.css b/sources/style/example.css new file mode 100755 index 0000000..c941903 --- /dev/null +++ b/sources/style/example.css @@ -0,0 +1,50 @@ +/* Global */ + + + +#leaderboardTable { + background-color: white; + overflow: auto; + width: 100%; + padding: 10px; + border: 8px solid #424547; + margin-bottom: 5px; +} + +#scoreInput { + width: 68%; +} + +#highestscore { + margin-top: 20px; + font-size: 14px; +} + +/* Presence */ + +#presenceDiv { + text-align: center; +} + +/* Tetris */ + +.tetris-body { + width: 600px; +} + +#canvas0, #canvas1 { + display: inline-block; + border: 4px solid #424547; +} + +#restartButton { + margin-top: 5px; +} + +#gameInProgress { + font-size: 14px; +} + +.hide { + display: none; +} \ No newline at end of file diff --git a/sources/style/main.css b/sources/style/main.css new file mode 100755 index 0000000..1d9a609 --- /dev/null +++ b/sources/style/main.css @@ -0,0 +1,869 @@ +@import url(fonts/clear-sans.css); +html, body { + margin: 0; + padding: 0; + background: #faf8ef; + color: #776e65; + font-family: "Clear Sans", "Helvetica Neue", Arial, sans-serif; + font-size: 18px; } + +body { + margin: 80px 0; } + +.heading:after { + content: ""; + display: block; + clear: both; } + +h1.title { + font-size: 80px; + font-weight: bold; + margin: 0; + display: block; + float: left; } + +@-webkit-keyframes move-up { + 0% { + top: 25px; + opacity: 1; } + + 100% { + top: -50px; + opacity: 0; } } + +@-moz-keyframes move-up { + 0% { + top: 25px; + opacity: 1; } + + 100% { + top: -50px; + opacity: 0; } } + +@keyframes move-up { + 0% { + top: 25px; + opacity: 1; } + + 100% { + top: -50px; + opacity: 0; } } + +.scores-container { + float: right; + text-align: right; } + +.score-container, .best-container { + position: relative; + display: inline-block; + background: #bbada0; + padding: 15px 25px; + font-size: 25px; + height: 25px; + line-height: 47px; + font-weight: bold; + border-radius: 3px; + color: white; + margin-top: 8px; + text-align: center; } + .score-container:after, .best-container:after { + position: absolute; + width: 100%; + top: 10px; + left: 0; + text-transform: uppercase; + font-size: 13px; + line-height: 13px; + text-align: center; + color: #eee4da; } + .score-container .score-addition, .best-container .score-addition { + position: absolute; + right: 30px; + color: red; + font-size: 25px; + line-height: 25px; + font-weight: bold; + color: rgba(119, 110, 101, 0.9); + z-index: 100; + -webkit-animation: move-up 600ms ease-in; + -moz-animation: move-up 600ms ease-in; + animation: move-up 600ms ease-in; + -webkit-animation-fill-mode: both; + -moz-animation-fill-mode: both; + animation-fill-mode: both; } + +.score-container:after { + content: "Score"; } + +.best-container:after { + content: "My best"; } + +p { + margin-top: 0; + margin-bottom: 10px; + line-height: 1.65; } + +a { + color: #776e65; + font-weight: bold; + text-decoration: underline; + cursor: pointer; } + +strong.important { + text-transform: uppercase; } + +hr { + border: none; + border-bottom: 1px solid #d8d4d0; + margin-top: 20px; + margin-bottom: 30px; } + +.container { + width: 640px; + margin: 0 auto; } + +@-webkit-keyframes fade-in { + 0% { + opacity: 0; } + + 100% { + opacity: 1; } } + +@-moz-keyframes fade-in { + 0% { + opacity: 0; } + + 100% { + opacity: 1; } } + +@keyframes fade-in { + 0% { + opacity: 0; } + + 100% { + opacity: 1; } } + +.game-container { + margin-top: 40px; + position: relative; + padding: 15px; + cursor: default; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + background: #bbada0; + border-radius: 6px; + width: 640px; + height: 640px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + + .game-container .game-message { + display: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: rgba(238, 228, 218, 0.5); + z-index: 100; + text-align: center; + -webkit-animation: fade-in 800ms ease 1200ms; + -moz-animation: fade-in 800ms ease 1200ms; + animation: fade-in 800ms ease 1200ms; + -webkit-animation-fill-mode: both; + -moz-animation-fill-mode: both; + animation-fill-mode: both; +} + +.game-container .game-message p { + font-size: 60px; + font-weight: bold; + height: 60px; + line-height: 60px; + margin-top: 222px; } + .game-container .game-message .lower { + display: block; + margin-top: 59px; } + .game-container .game-message a { + display: inline-block; + background: #8f7a66; + border-radius: 3px; + padding: 0 20px; + text-decoration: none; + color: #f9f6f2; + height: 40px; + line-height: 42px; + margin-left: 9px; } + .game-container .game-message a.keep-playing-button { + display: none; } + .game-container .game-message.game-won { + background: rgba(237, 194, 46, 0.5); + color: #f9f6f2; } + .game-container .game-message.game-won a.keep-playing-button { + display: inline-block; } + .game-container .game-message.game-won, .game-container .game-message.game-over { + display: block; } + +.grid-container { + position: absolute; + z-index: 1; } + +.grid-row { + margin-bottom: 15px; } + .grid-row:last-child { + margin-bottom: 0; } + .grid-row:after { + content: ""; + display: block; + clear: both; } + +.grid-cell { + width: 110px; + height: 110px; + margin-right: 15px; + float: left; + border-radius: 3px; + background: rgba(238, 228, 218, 0.35); } + .grid-cell:last-child { + margin-right: 0; } + +.tile-container { + position: absolute; + z-index: 2; } + +.tile, .tile .tile-inner { + width: 110px; + height: 110px; + line-height: 116.25px; } + +.tile.tile-position-1-1 { + -webkit-transform: translate(0px, 0px); + -moz-transform: translate(0px, 0px); + transform: translate(0px, 0px); } +.tile.tile-position-1-2 { + -webkit-transform: translate(0px, 125px); + -moz-transform: translate(0px, 125px); + transform: translate(0px, 125px); } +.tile.tile-position-1-3 { + -webkit-transform: translate(0px, 250px); + -moz-transform: translate(0px, 250px); + transform: translate(0px, 250px); } +.tile.tile-position-1-4 { + -webkit-transform: translate(0px, 375px); + -moz-transform: translate(0px, 375px); + transform: translate(0px, 375px); } +.tile.tile-position-1-5 { + -webkit-transform: translate(0px, 500px); + -moz-transform: translate(0px, 500px); + transform: translate(0px, 500px); } + +.tile.tile-position-2-1 { + -webkit-transform: translate(125px, 0px); + -moz-transform: translate(125px, 0px); + transform: translate(125px, 0px); } +.tile.tile-position-2-2 { + -webkit-transform: translate(125px, 125px); + -moz-transform: translate(125px, 125px); + transform: translate(125px, 125px); } +.tile.tile-position-2-3 { + -webkit-transform: translate(125px, 250px); + -moz-transform: translate(125px, 250px); + transform: translate(125px, 250px); } +.tile.tile-position-2-4 { + -webkit-transform: translate(125px, 375px); + -moz-transform: translate(125px, 375px); + transform: translate(125px, 375px); } +.tile.tile-position-2-5 { + -webkit-transform: translate(125px, 500px); + -moz-transform: translate(125px, 500px); + transform: translate(125px, 500px); } + +.tile.tile-position-3-1 { + -webkit-transform: translate(250px, 0px); + -moz-transform: translate(250px, 0px); + transform: translate(250px, 0px); } +.tile.tile-position-3-2 { + -webkit-transform: translate(250px, 125px); + -moz-transform: translate(250px, 125px); + transform: translate(250px, 125px); } +.tile.tile-position-3-3 { + -webkit-transform: translate(250px, 250px); + -moz-transform: translate(250px, 250px); + transform: translate(250px, 250px); } +.tile.tile-position-3-4 { + -webkit-transform: translate(250px, 375px); + -moz-transform: translate(250px, 375px); + transform: translate(250px, 375px); } +.tile.tile-position-3-5 { + -webkit-transform: translate(250px, 500px); + -moz-transform: translate(250px, 500x); + transform: translate(250px, 500px); } + +.tile.tile-position-4-1 { + -webkit-transform: translate(375px, 0px); + -moz-transform: translate(375px, 0px); + transform: translate(375px, 0px); } +.tile.tile-position-4-2 { + -webkit-transform: translate(375px, 125px); + -moz-transform: translate(375px, 125px); + transform: translate(375px, 125px); } +.tile.tile-position-4-3 { + -webkit-transform: translate(375px, 250px); + -moz-transform: translate(375px, 250px); + transform: translate(375px, 250px); } +.tile.tile-position-4-4 { + -webkit-transform: translate(375px, 375px); + -moz-transform: translate(375px, 375px); + transform: translate(375px, 375px); } +.tile.tile-position-4-5 { + -webkit-transform: translate(375px, 500px); + -moz-transform: translate(375px, 500px); + transform: translate(375px, 500px); } + +.tile.tile-position-5-1 { + -webkit-transform: translate(500px, 0px); + -moz-transform: translate(500px, 0px); + transform: translate(500px, 0px); } +.tile.tile-position-5-2 { + -webkit-transform: translate(500px, 125px); + -moz-transform: translate(500px, 125px); + transform: translate(500px, 125px); } +.tile.tile-position-5-3 { + -webkit-transform: translate(500px, 250px); + -moz-transform: translate(500px, 250px); + transform: translate(500px, 250px); } +.tile.tile-position-5-4 { + -webkit-transform: translate(500px, 375px); + -moz-transform: translate(500px, 375px); + transform: translate(500px, 375px); } +.tile.tile-position-5-5 { + -webkit-transform: translate(500px, 500px); + -moz-transform: translate(500px, 500px); + transform: translate(500px, 500px); } + + +.tile { + position: absolute; + -webkit-transition: 100ms ease-in-out; + -moz-transition: 100ms ease-in-out; + transition: 100ms ease-in-out; + -webkit-transition-property: -webkit-transform; + -moz-transition-property: -moz-transform; + transition-property: transform; } + .tile .tile-inner { + border-radius: 3px; + background: #eee4da; + text-align: center; + font-weight: bold; + z-index: 10; + font-size: 0px; } + + +.tile.tile-1 .tile-inner { + background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_1cent.gif'); + background-size: cover; + box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); } + + +.tile.tile-2 .tile-inner { + background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_2cent.gif'); + background-size: cover; + box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); } + + + +.tile.tile-5 .tile-inner { + background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_5cent.gif'); + background-size: cover; + box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); } + + + +.tile.tile-10 .tile-inner { + background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_10cent.gif'); + background-size: cover;} + + + +.tile.tile-20 .tile-inner { + background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_20cent.gif'); + background-size: cover;} + + + +.tile.tile-50 .tile-inner { + background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_50cent.gif'); + background-size: cover;} + + + + .tile.tile-100 .tile-inner { + background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_1euro.gif'); + background-size: cover;} + + + + .tile.tile-200 .tile-inner { + background: #f0f url('https://www.ecb.europa.eu/euro/coins/common/shared/img/common_2euro.gif'); + background-size: cover; +} + + + .tile.tile-500 .tile-inner { + + background: #ffffff url('http://www.126bay.com/images/banknote/europe/eURO/5%20Euro%202002%20-%20F.jpg'); + background-size: contain; background-repeat: no-repeat;} + + +.tile.tile-1000 .tile-inner { + + background: #ffffff url('http://www.126bay.com/images/banknote/europe/eURO/10%20Euro%202002%20-%20F.jpg'); + background-size: contain; background-repeat: no-repeat;} + +.tile.tile-2000 .tile-inner { + background: #ffffff url('http://www.126bay.com/images/banknote/europe/eURO/20%20Euro%202002%20-%20F.jpg'); + background-size: contain; background-repeat: no-repeat;} + + +.tile.tile-5000 .tile-inner { + background: #ffffff url('http://www.126bay.com/images/banknote/europe/eURO/50%20Euro%202002%20-%20F.jpg'); + background-size: contain; background-repeat: no-repeat;} + + +.tile.tile-10000 .tile-inner { + background: #ffffff url('http://www.blogger42.com/wp-content/uploads/100euro.jpg'); + background-size: contain; background-repeat: no-repeat;} + + +.tile.tile-20000 .tile-inner { + background: #ffffff url('http://www.blogger42.com/wp-content/uploads/e.jpg'); + background-size: contain; background-repeat: no-repeat;} + + +.tile.tile-50000 .tile-inner { + background: #ffffff url('http://www.rivistastudio.com/wp-content/uploads/2014/03/500euro.jpg'); + background-size: contain; background-repeat: no-repeat;} + + +.tile.tile-super .tile-inner { + + background: #ffffff url('http://upload.wikimedia.org/wikipedia/commons/c/c3/Euro_symbol_gold.svg'); + background-size: cover; + font-size: 30px; } + + + @media screen and (max-width: 520px) { + .tile.tile-super .tile-inner { + font-size: 10px; } } + +@-webkit-keyframes appear { + 0% { + opacity: 0; + -webkit-transform: scale(0); + -moz-transform: scale(0); + transform: scale(0); } + + 100% { + opacity: 1; + -webkit-transform: scale(1); + -moz-transform: scale(1); + transform: scale(1); } } + +@-moz-keyframes appear { + 0% { + opacity: 0; + -webkit-transform: scale(0); + -moz-transform: scale(0); + transform: scale(0); } + + 100% { + opacity: 1; + -webkit-transform: scale(1); + -moz-transform: scale(1); + transform: scale(1); } } + +@keyframes appear { + 0% { + opacity: 0; + -webkit-transform: scale(0); + -moz-transform: scale(0); + transform: scale(0); } + + 100% { + opacity: 1; + -webkit-transform: scale(1); + -moz-transform: scale(1); + transform: scale(1); } } + +.tile-new .tile-inner { + -webkit-animation: appear 200ms ease 100ms; + -moz-animation: appear 200ms ease 100ms; + animation: appear 200ms ease 100ms; + -webkit-animation-fill-mode: backwards; + -moz-animation-fill-mode: backwards; + animation-fill-mode: backwards; } + +@-webkit-keyframes pop { + 0% { + -webkit-transform: scale(0); + -moz-transform: scale(0); + transform: scale(0); } + + 50% { + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + transform: scale(1.2); } + + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + transform: scale(1); } } + +@-moz-keyframes pop { + 0% { + -webkit-transform: scale(0); + -moz-transform: scale(0); + transform: scale(0); } + + 50% { + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + transform: scale(1.2); } + + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + transform: scale(1); } } + +@keyframes pop { + 0% { + -webkit-transform: scale(0); + -moz-transform: scale(0); + transform: scale(0); } + + 50% { + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + transform: scale(1.2); } + + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + transform: scale(1); } } + +.tile-merged .tile-inner { + z-index: 20; + -webkit-animation: pop 200ms ease 100ms; + -moz-animation: pop 200ms ease 100ms; + animation: pop 200ms ease 100ms; + -webkit-animation-fill-mode: backwards; + -moz-animation-fill-mode: backwards; + animation-fill-mode: backwards; } + +.game-intro { + margin-bottom: 0; } + +.game-explanation { + margin-top: 50px; } + +.sharing { + margin-top: 20px; + text-align: center; } + .sharing > iframe, .sharing > span, .sharing > form { + display: inline-block; + vertical-align: middle; } + +@media screen and (max-width: 520px) { + html, body { + font-size: 15px; } + + body { + margin: 20px 0; + padding: 0 20px; } + + h1.title { + font-size: 27px; + margin-top: 15px; } + + .container { + width: 280px; + margin: 0 auto; } + + .score-container, .best-container { + margin-top: 0; + padding: 15px 10px; + min-width: 40px; } + + .heading { + margin-bottom: 10px; } + + .game-container { + margin-top: 40px; + position: relative; + padding: 10px; + cursor: default; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + background: #bbada0; + border-radius: 6px; + width: 280px; + height: 280px; + -ms-touch-action: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + .game-container .game-message { + display: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: rgba(238, 228, 218, 0.5); + z-index: 100; + text-align: center; + -webkit-animation: fade-in 800ms ease 1200ms; + -moz-animation: fade-in 800ms ease 1200ms; + animation: fade-in 800ms ease 1200ms; + -webkit-animation-fill-mode: both; + -moz-animation-fill-mode: both; + animation-fill-mode: both; } + .game-container .game-message p { + font-size: 60px; + font-weight: bold; + height: 60px; + line-height: 60px; + margin-top: 222px; } + .game-container .game-message .lower { + display: block; + margin-top: 59px; } + .game-container .game-message a { + display: inline-block; + background: #8f7a66; + border-radius: 3px; + padding: 0 20px; + text-decoration: none; + color: #f9f6f2; + height: 40px; + line-height: 42px; + margin-left: 9px; } + .game-container .game-message a.keep-playing-button { + display: none; } + .game-container .game-message .score-sharing { + display: inline-block; + vertical-align: middle; + margin-left: 10px; } + .game-container .game-message.game-won { + background: rgba(237, 194, 46, 0.5); + color: #f9f6f2; } + .game-container .game-message.game-won a.keep-playing-button { + display: inline-block; } + .game-container .game-message.game-won, .game-container .game-message.game-over { + display: block; } + + .grid-container { + position: absolute; + z-index: 1; } + + .grid-row { + margin-bottom: 10px; } + .grid-row:last-child { + margin-bottom: 0; } + .grid-row:after { + content: ""; + display: block; + clear: both; } + + .grid-cell { + width: 57.5px; + height: 57.5px; + margin-right: 10px; + float: left; + border-radius: 3px; + background: rgba(238, 228, 218, 0.35); } + .grid-cell:last-child { + margin-right: 0; } + + .tile-container { + position: absolute; + z-index: 2; } + + .tile, .tile .tile-inner { + width: 58px; + height: 58px; + line-height: 67.5px; } + .tile.tile-position-1-1 { + -webkit-transform: translate(0px, 0px); + -moz-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + .tile.tile-position-1-2 { + -webkit-transform: translate(0px, 67px); + -moz-transform: translate(0px, 67px); + transform: translate(0px, 67px); } + .tile.tile-position-1-3 { + -webkit-transform: translate(0px, 135px); + -moz-transform: translate(0px, 135px); + transform: translate(0px, 135px); } + .tile.tile-position-1-4 { + -webkit-transform: translate(0px, 202px); + -moz-transform: translate(0px, 202px); + transform: translate(0px, 202px); } + .tile.tile-position-2-1 { + -webkit-transform: translate(67px, 0px); + -moz-transform: translate(67px, 0px); + transform: translate(67px, 0px); } + .tile.tile-position-2-2 { + -webkit-transform: translate(67px, 67px); + -moz-transform: translate(67px, 67px); + transform: translate(67px, 67px); } + .tile.tile-position-2-3 { + -webkit-transform: translate(67px, 135px); + -moz-transform: translate(67px, 135px); + transform: translate(67px, 135px); } + .tile.tile-position-2-4 { + -webkit-transform: translate(67px, 202px); + -moz-transform: translate(67px, 202px); + transform: translate(67px, 202px); } + .tile.tile-position-3-1 { + -webkit-transform: translate(135px, 0px); + -moz-transform: translate(135px, 0px); + transform: translate(135px, 0px); } + .tile.tile-position-3-2 { + -webkit-transform: translate(135px, 67px); + -moz-transform: translate(135px, 67px); + transform: translate(135px, 67px); } + .tile.tile-position-3-3 { + -webkit-transform: translate(135px, 135px); + -moz-transform: translate(135px, 135px); + transform: translate(135px, 135px); } + .tile.tile-position-3-4 { + -webkit-transform: translate(135px, 202px); + -moz-transform: translate(135px, 202px); + transform: translate(135px, 202px); } + .tile.tile-position-4-1 { + -webkit-transform: translate(202px, 0px); + -moz-transform: translate(202px, 0px); + transform: translate(202px, 0px); } + .tile.tile-position-4-2 { + -webkit-transform: translate(202px, 67px); + -moz-transform: translate(202px, 67px); + transform: translate(202px, 67px); } + .tile.tile-position-4-3 { + -webkit-transform: translate(202px, 135px); + -moz-transform: translate(202px, 135px); + transform: translate(202px, 135px); } + .tile.tile-position-4-4 { + -webkit-transform: translate(202px, 202px); + -moz-transform: translate(202px, 202px); + transform: translate(202px, 202px); } + + .game-container { + margin-top: 20px; } + + .tile .tile-inner { + font-size: 35px; } + + .game-message p { + font-size: 30px !important; + height: 30px !important; + line-height: 30px !important; + margin-top: 90px !important; } + .game-message .lower { + margin-top: 30px !important; } + + .sharing > iframe, .sharing > span, .sharing > form { + display: block; + margin: 0 auto; + margin-bottom: 20px; } } +.pp-donate button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + font: inherit; + color: inherit; + cursor: pointer; + display: inline-block; + background: #8f7a66; + border-radius: 3px; + padding: 0 20px; + text-decoration: none; + color: #f9f6f2; + height: 40px; + line-height: 42px; } + .pp-donate button img { + vertical-align: -4px; + margin-right: 8px; } + +.btc-donate { + position: relative; + margin-left: 10px; + display: inline-block; + background: #8f7a66; + border-radius: 3px; + padding: 0 20px; + text-decoration: none; + color: #f9f6f2; + height: 40px; + line-height: 42px; + cursor: pointer; } + .btc-donate img { + vertical-align: -4px; + margin-right: 8px; } + .btc-donate a { + color: #f9f6f2; + text-decoration: none; + font-weight: normal; } + .btc-donate .address { + cursor: auto; + position: absolute; + width: 340px; + right: 50%; + margin-right: -170px; + padding-bottom: 7px; + top: -30px; + opacity: 0; + pointer-events: none; + -webkit-transition: 400ms ease; + -moz-transition: 400ms ease; + transition: 400ms ease; + -webkit-transition-property: top, opacity; + -moz-transition-property: top, opacity; + transition-property: top, opacity; } + .btc-donate .address:after { + position: absolute; + border-top: 10px solid #bbada0; + border-right: 7px solid transparent; + border-left: 7px solid transparent; + content: ""; + bottom: 0px; + left: 50%; + margin-left: -7px; } + .btc-donate .address code { + background-color: #bbada0; + padding: 10px 15px; + width: 100%; + border-radius: 3px; + line-height: 1; + font-weight: normal; + font-size: 15px; + font-family: Consolas, "Liberation Mono", Courier, monospace; + text-align: center; } + .btc-donate:hover .address, .btc-donate .address:hover .address { + opacity: 1; + top: -45px; + pointer-events: auto; } + @media screen and (max-width: 480px) { + .btc-donate { + width: 120px; } + .btc-donate .address { + margin-right: -150px; + width: 300px; } + .btc-donate .address code { + font-size: 13px; } + .btc-donate .address:after { + left: 50%; + bottom: 2px; } } diff --git a/sources/stylesheets/pygment_trac.css b/sources/stylesheets/pygment_trac.css new file mode 100755 index 0000000..e65cedf --- /dev/null +++ b/sources/stylesheets/pygment_trac.css @@ -0,0 +1,70 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f0f3f3; } +.highlight .c { color: #0099FF; font-style: italic } /* Comment */ +.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #006699; font-weight: bold } /* Keyword */ +.highlight .o { color: #555555 } /* Operator */ +.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #009999 } /* Comment.Preproc */ +.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ +.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.highlight .go { color: #AAAAAA } /* Generic.Output */ +.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #99CC66 } /* Generic.Traceback */ +.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #006699 } /* Keyword.Pseudo */ +.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #FF6600 } /* Literal.Number */ +.highlight .s { color: #CC3300 } /* Literal.String */ +.highlight .na { color: #330099 } /* Name.Attribute */ +.highlight .nb { color: #336666 } /* Name.Builtin */ +.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ +.highlight .no { color: #336600 } /* Name.Constant */ +.highlight .nd { color: #9999FF } /* Name.Decorator */ +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #CC00FF } /* Name.Function */ +.highlight .nl { color: #9999FF } /* Name.Label */ +.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #003333 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ +.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ +.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ +.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ +.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ +.highlight .sc { color: #CC3300 } /* Literal.String.Char */ +.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ +.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ +.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ +.highlight .sx { color: #CC3300 } /* Literal.String.Other */ +.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ +.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ +.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ +.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #003333 } /* Name.Variable.Class */ +.highlight .vg { color: #003333 } /* Name.Variable.Global */ +.highlight .vi { color: #003333 } /* Name.Variable.Instance */ +.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/sources/stylesheets/stylesheet.css b/sources/stylesheets/stylesheet.css new file mode 100755 index 0000000..7a08b01 --- /dev/null +++ b/sources/stylesheets/stylesheet.css @@ -0,0 +1,423 @@ +/******************************************************************************* +Slate Theme for GitHub Pages +by Jason Costello, @jsncostello +*******************************************************************************/ + +@import url(pygment_trac.css); + +/******************************************************************************* +MeyerWeb Reset +*******************************************************************************/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + vertical-align: baseline; +} + +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +ol, ul { + list-style: none; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +/******************************************************************************* +Theme Styles +*******************************************************************************/ + +body { + box-sizing: border-box; + color:#373737; + background: #212121; + font-size: 16px; + font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} + +h1, h2, h3, h4, h5, h6 { + margin: 10px 0; + font-weight: 700; + color:#222222; + font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; + letter-spacing: -1px; +} + +h1 { + font-size: 36px; + font-weight: 700; +} + +h2 { + padding-bottom: 10px; + font-size: 32px; + background: url('../images/bg_hr.png') repeat-x bottom; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 21px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 16px; +} + +p { + margin: 10px 0 15px 0; +} + +footer p { + color: #f2f2f2; +} + +a { + text-decoration: none; + color: #007edf; + text-shadow: none; + + transition: color 0.5s ease; + transition: text-shadow 0.5s ease; + -webkit-transition: color 0.5s ease; + -webkit-transition: text-shadow 0.5s ease; + -moz-transition: color 0.5s ease; + -moz-transition: text-shadow 0.5s ease; + -o-transition: color 0.5s ease; + -o-transition: text-shadow 0.5s ease; + -ms-transition: color 0.5s ease; + -ms-transition: text-shadow 0.5s ease; +} + +a:hover, a:focus {text-decoration: underline;} + +footer a { + color: #F2F2F2; + text-decoration: underline; +} + +em { + font-style: italic; +} + +strong { + font-weight: bold; +} + +img { + position: relative; + margin: 0 auto; + max-width: 739px; + padding: 5px; + margin: 10px 0 10px 0; + border: 1px solid #ebebeb; + + box-shadow: 0 0 5px #ebebeb; + -webkit-box-shadow: 0 0 5px #ebebeb; + -moz-box-shadow: 0 0 5px #ebebeb; + -o-box-shadow: 0 0 5px #ebebeb; + -ms-box-shadow: 0 0 5px #ebebeb; +} + +p img { + display: inline; + margin: 0; + padding: 0; + vertical-align: middle; + text-align: center; + border: none; +} + +pre, code { + width: 100%; + color: #222; + background-color: #fff; + + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + font-size: 14px; + + border-radius: 2px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; +} + +pre { + width: 100%; + padding: 10px; + box-shadow: 0 0 10px rgba(0,0,0,.1); + overflow: auto; +} + +code { + padding: 3px; + margin: 0 3px; + box-shadow: 0 0 10px rgba(0,0,0,.1); +} + +pre code { + display: block; + box-shadow: none; +} + +blockquote { + color: #666; + margin-bottom: 20px; + padding: 0 0 0 20px; + border-left: 3px solid #bbb; +} + + +ul, ol, dl { + margin-bottom: 15px +} + +ul { + list-style: inside; + padding-left: 20px; +} + +ol { + list-style: decimal inside; + padding-left: 20px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + padding-left: 20px; + font-style: italic; +} + +dl p { + padding-left: 20px; + font-style: italic; +} + +hr { + height: 1px; + margin-bottom: 5px; + border: none; + background: url('../images/bg_hr.png') repeat-x center; +} + +table { + border: 1px solid #373737; + margin-bottom: 20px; + text-align: left; + } + +th { + font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; + padding: 10px; + background: #373737; + color: #fff; + } + +td { + padding: 10px; + border: 1px solid #373737; + } + +form { + background: #f2f2f2; + padding: 20px; +} + +/******************************************************************************* +Full-Width Styles +*******************************************************************************/ + +.outer { + width: 100%; +} + +.inner { + position: relative; + max-width: 640px; + padding: 20px 10px; + margin: 0 auto; +} + +#forkme_banner { + display: block; + position: absolute; + top:0; + right: 10px; + z-index: 10; + padding: 10px 50px 10px 10px; + color: #fff; + background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; + font-weight: 700; + box-shadow: 0 0 10px rgba(0,0,0,.5); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#header_wrap { + background: #212121; + background: -moz-linear-gradient(top, #373737, #212121); + background: -webkit-linear-gradient(top, #373737, #212121); + background: -ms-linear-gradient(top, #373737, #212121); + background: -o-linear-gradient(top, #373737, #212121); + background: linear-gradient(top, #373737, #212121); +} + +#header_wrap .inner { + padding: 50px 10px 30px 10px; +} + +#project_title { + margin: 0; + color: #fff; + font-size: 42px; + font-weight: 700; + text-shadow: #111 0px 0px 10px; +} + +#project_tagline { + color: #fff; + font-size: 24px; + font-weight: 300; + background: none; + text-shadow: #111 0px 0px 10px; +} + +#downloads { + position: absolute; + width: 210px; + z-index: 10; + bottom: -40px; + right: 0; + height: 70px; + background: url('../images/icon_download.png') no-repeat 0% 90%; +} + +.zip_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom left; +} + +.tar_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom right; + margin-left: 10px; +} + +.zip_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top left; +} + +.tar_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top right; +} + +#main_content_wrap { + background: #f2f2f2; + border-top: 1px solid #111; + border-bottom: 1px solid #111; +} + +#main_content { + padding-top: 40px; +} + +#footer_wrap { + background: #212121; +} + + + +/******************************************************************************* +Small Device Styles +*******************************************************************************/ + +@media screen and (max-width: 480px) { + body { + font-size:14px; + } + + #downloads { + display: none; + } + + .inner { + min-width: 320px; + max-width: 480px; + } + + #project_title { + font-size: 32px; + } + + h1 { + font-size: 28px; + } + + h2 { + font-size: 24px; + } + + h3 { + font-size: 21px; + } + + h4 { + font-size: 18px; + } + + h5 { + font-size: 14px; + } + + h6 { + font-size: 12px; + } + + code, pre { + min-width: 320px; + max-width: 480px; + font-size: 11px; + } + +} From 196dff83fd5fecfb7c4117962bdff8b0888af740 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 12:02:47 +0200 Subject: [PATCH 13/26] fix --- check_process | 4 ++-- manifest.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/check_process b/check_process index d920cdf..84ef06a 100644 --- a/check_process +++ b/check_process @@ -8,12 +8,12 @@ pkg_linter=1 setup_sub_dir=1 setup_root=1 - setup_nourl=0 + setup_nourl=1 setup_private=1 setup_public=1 upgrade=1 backup_restore=1 - multi_instance=0 + multi_instance=1 incorrect_path=1 port_already_use=0 ;;; Levels diff --git a/manifest.json b/manifest.json index 908a48f..a8368bb 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "20euros", - "id": "20euros", + "id": "20", "packaging_format": 1, "description": { "en": "2048 - 20euros", @@ -16,7 +16,7 @@ "requirements": { "yunohost": ">= 3.7.0" }, - "multi_instance": false, + "multi_instance": true, "services": [ "nginx" ], From d130e773bf8d3bece36791de518a3866292ebd5d Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 12:11:54 +0200 Subject: [PATCH 14/26] fix --- check_process | 2 +- sources/index.html | 6 +++--- sources/statistics.html | 19 ------------------- sources/style/main.css | 2 +- 4 files changed, 5 insertions(+), 24 deletions(-) diff --git a/check_process b/check_process index 84ef06a..cb5f2e0 100644 --- a/check_process +++ b/check_process @@ -8,7 +8,7 @@ pkg_linter=1 setup_sub_dir=1 setup_root=1 - setup_nourl=1 + setup_nourl=0 setup_private=1 setup_public=1 upgrade=1 diff --git a/sources/index.html b/sources/index.html index d56b4f9..43bab97 100755 --- a/sources/index.html +++ b/sources/index.html @@ -31,7 +31,7 @@ -

Join the coins until you reach 20 Euro! +

Join the coins until you reach 20 Euros!

@@ -40,7 +40,7 @@

@@ -91,7 +91,7 @@

- HOW TO PLAY: Use your arrow keys to move the coins. If two or three mergeable coins touch, they merge into one! Your goal is to reach the 20 Euro note! Restart with Space. + HOW TO PLAY: Use your arrow keys to move the coins. If two or three mergeable coins touch, they merge into one! Your goal is to reach the 20 Euros note! Restart with Space.


diff --git a/sources/statistics.html b/sources/statistics.html index 9b51d9d..7368191 100755 --- a/sources/statistics.html +++ b/sources/statistics.html @@ -74,8 +74,6 @@ Ref50000.on('value', function(newPlays) { - -

Statistics

@@ -100,23 +98,6 @@ Statistics since 2014-04-06.

- - - - diff --git a/sources/style/main.css b/sources/style/main.css index 1d9a609..5aa8fda 100755 --- a/sources/style/main.css +++ b/sources/style/main.css @@ -584,7 +584,7 @@ hr { padding: 0 20px; } h1.title { - font-size: 27px; + font-size: 25px; margin-top: 15px; } .container { From e7daa9261f76c6f1710b74ae6c3c1a5fe80d0c46 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 13:08:52 +0200 Subject: [PATCH 15/26] Update main.css --- sources/style/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/style/main.css b/sources/style/main.css index 5aa8fda..1d9a609 100755 --- a/sources/style/main.css +++ b/sources/style/main.css @@ -584,7 +584,7 @@ hr { padding: 0 20px; } h1.title { - font-size: 25px; + font-size: 27px; margin-top: 15px; } .container { From 0aea2ff2eb2087839b77663770c548ecf5f071d1 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 13:10:02 +0200 Subject: [PATCH 16/26] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index a8368bb..e0e837d 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "20euros", - "id": "20", + "id": "20euros", "packaging_format": 1, "description": { "en": "2048 - 20euros", From 1e05ec8fb23dfceefba6c96995cc6dd57db43ffe Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 14:06:41 +0200 Subject: [PATCH 17/26] add readme --- README.md | 31 ++++++++++++++++++++++++++++--- README_fr.md | 27 +++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 README_fr.md diff --git a/README.md b/README.md index 2ee28af..5ad75b0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,32 @@ -# 20euros +# 243 for YunoHost -[![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) ![](https://ci-apps.yunohost.org/ci/badges/20euros.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/20euros.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) ![](https://ci-apps.yunohost.org/ci/badges/20euros.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/20euros.maintain.svg) [![Install 20euros with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=20euros) + + +*[Lire ce readme en français.](./README_fr.md)* + +> *This package allow you to install 20euros quickly and simply on a YunoHost server. +If you don’t have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* + +## Overview A clone of 2048 game with euro coins and bills -https://github.com/jatekos101/20euros +## Screenshots + +![](Screenshot-243.jpg) + +## Demo + +* [Official demo](https://github.com/jatekos101/20euros) + +#### Supported architectures + +* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/20euros%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/20euros/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/20euros%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/20euros/) + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/20euros_ynh/issues + * Upstream app repository: https://github.com/jatekos101/20euros + * YunoHost website: https://yunohost.org/ diff --git a/README_fr.md b/README_fr.md new file mode 100644 index 0000000..c0c906e --- /dev/null +++ b/README_fr.md @@ -0,0 +1,27 @@ +# 20euros pour YunoHost + +[![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) ![](https://ci-apps.yunohost.org/ci/badges/20euros.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/20euros.maintain.svg) [![Installer 20euros avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=20euros) + +*[Read this readme in english.](./README.md)* + +> *Ce package vous permet d’installer 20euros rapidement et simplement sur un serveur Yunohost. +Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l’installer et en profiter.* + +## Vue d’ensemble + +Clone du jeu 2048 avec pièces et billets en euros. + +## Captures d’écran + +![](Screenshot-20euros.jpg) + +#### Architectures supportées + +* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/20euros%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/20euros/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/20euros%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/20euros/) + +## Liens + + * Signaler un bug : https://github.com/YunoHost-Apps/20euros_ynh/issues + * Dépôt de l’application principale : https://github.com/jatekos101/20euros + * Site web YunoHost : https://yunohost.org/ From 381ac0a9b72f3450f744ffa0d87750fe7454517f Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 14:08:05 +0200 Subject: [PATCH 18/26] screenshot --- Screenshot-20euros.jpg | Bin 0 -> 259300 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Screenshot-20euros.jpg diff --git a/Screenshot-20euros.jpg b/Screenshot-20euros.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7776f5ed330f7fcc848f4a83c2b25e607f28a04f GIT binary patch literal 259300 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�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

kl}h0#Z8ndAp;AK87st??XP|GG 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

sd<*@R!Mis;f^*d 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

^NRv!Q0#diW)aMg5kKNRbC; zM@CQcAlAFm3<(UWhkqv_&AGBdETAeLJiKm+^2XIUj2;f4$cEB7(9|x&@Lxp;DTHBO z=xMVyDiSL1p)nRtP9aFmB2JFvroCtvR2O6ui7#3{RVS-Nwcq)T|Hq*PwU7UJ>OSAa zpW#@Q^|UP8?!6oBowv`~`t6Vfaj1X>oKv9uzp4*r;?tHNX05Sitcp!`?zt~RUL`G6zTsVrq63`P zp7Y!MoWHAycn{vR<`}#OgML?kq&83tMP)^?9d7elV>Wz0&(zrZGPFk3) zai0A20yX%9U2WEQZyB2!rFIbB*g0LKgYDo|9Gp|V2;?9*q<}oG#9TzAT8F6qU0uIL1lg_m&;fhaU1|`#?mE-z;>5WQ-mktSwR6JNx*8@q}FCOXooLSi*z%ki4&KsyS;}>6-r+rd9Km{RO?f%z9(>OJPfFh)v+r8ERmj)2yl)}ZcL>YIU3#P%NCMvHIAq8FNxF=o6tqYuYJ4u&fo zWDUv*kRaHGSOk)$$ci`gGg!YWk(C=EXR?v5h-WYM*b6T;fy#vtkm7k^UbtL%HC{>~ zLsnXi)<-sy$b7z#E2R)JNogfe>QtI76!wF*Y;t`_CI&mLX79)8qkyyGCXzR#duS}y zp7Y!OoToed@Ad1}9E10I2JW)YcaasFjG7OXRc*4fXWzDi5YIZVwAjhRr|rOFAHs+e z$;zCxPnbrKTt6K%1fdX0z1>tT$+D6T}TH>IiVoD9zK#b~78T2w!ZH zDp6!(cJQu%UN&o~C?#YjiWAGEd$M=(5t7OmW1rQ4ry z&WFzVZX5$G1F1T$5>?kf^pG9>+~3-LpZG7_3q}Sbpa|6+atvg(b;x0$&9dVjaE%fe zQVo3TSN_^IKJqBw0g}(8Nv=Nk4a=q#bnStM2v0FKK+kXd+3(q=9UCow-6l65{w#IP zWQ>u4mb9@K#9?lHELDDpQSy<7SYZx?6eKANRZjzHM>qyPuZ1D!qHzz#GTzl{lZ!rE z!XeqdvC!rxMpzSzHb(hkoHA1%yp%T&pR^y_iB<)zh%*a{EnL0HPJHTR$h&SN~#9pREx~fA4IanEF8Dyq`0Um z0WWWslOYE{yc;JhrMcx?;ySFr6Ue6Pm^!lJn;uIyKVL7KXUjhY?Qy|WapK2N* z3|i=Zo~0$yN+K_g4UbxW7JWzHlH^wJvuj75F*S)QthtBf!o2eOTUnPk$8zmCzx~ho zEiUW#&mGSZujYc6= z6;>#R59G-v8Vt+A-LP^JJHps!z%6hVoehsTjo-6jvKgzaP?2&D_43XbV(=X+oX9q{ zae)HUcY!zwE&%oPt3LGaud{i2t)yz5jr4TWDp#e8ybhQ zqc?z0jse%pExAaL4|C^tWt58k3x-8uh_CXV|^WOLyCK zD~2Z^mBTrreLpCOj7b7P9?iAu5-5X*L3Bbaw=}Tj~C%1FpjM41qdoC%T)SH zOW*Is$-;qfbLtQq(iOb6x-!qIs|%b!nED*Jsb=0;U93^A14mI^9;I)fj*_zz!$<}VYh4J zbP<|T0&Ku;!&B5R_WjL+XiDcH(Bl2Pj!o8&9)S!%qzn;y_gGtbE}Wcy%R!Klkdp-bKMzFS|LWJR@zEz-Uor(FACIdeh|QhF2^D6VT&BuW0BrZ!(~t*^ZLij{BOWF3bOTg%lBYuwUk zQ_UCc^*2sgU2Un=)|Svln*4Y127CFhK4Xm=s%-18{aNbX-t`cs#^1~Qt=o3UuCz#a zXuW;wYp-EUml=BEpjY|-8l=I z7R?703R;^&inLyYl1a6Yckz2?$|)PHwgJ>Yd%LIxi4~C|;PYsdl!=ozKB@i=g>XU; z`l91w81iay9rDW)kWZOrPU#Lg2y#Z`6gXdk&roVi)es(tx1}W!tJ<)Ej*(lf<;Yh^ z#nez@x!0{_Et7Y%F5SKJ>1)sVZGO&EQ+h}Lx#k$$(bIG1UEIwLMw_4_vvqZ4^gGyS zojsHG!KWU!zRo^7jp&h|val5FDii?GBMjTX^%m=DzQVtkFr@Sc$f5-;yOu;^u)WTB z@n_12xu^`%AAhTiD+nx|WHaxFAlP=9y87-uM;=pi8_W_l-o^B0Ks^zdHkt=~O^~e! z-v>&tfHBL#C{EIpsK2il6rt2+W+8`-(E@nKURdmYO1?-NkWSD>tR_pkPYD(2OM*PA zy$>L~6t1|By8b2`Za+b#LKMGZs};g6aE4dLn&ajez1!K7F2bhmJMHXrhPA!+A}InQ zaYcPN0cbGuMV=o~qp?w>q)CO0UTd7U53r~N>8mjUvT2|?TAN8qX3HqSJcJMB zcifSezjKUxr)mU)F7AnptbIRckdoe|4y zh;ErtbR4FpaF$v79uyI$7XsFDZOF!lPk2m+xFi$xnBwc)liHq<|C6+54#S|ZPlgBu+F_^0u?`ICS7@0+h(d(MAw&-uSR z`tSX3)*OTPeh%*9D+9-vId8R^bz1RkXLED& zmXnXPF6C$$` zXBMsdT05I-rVVuUSI6j~wU zc|$RqnxsP{>TnStWs&Lx3o8fhzCa0-LXduafI9o!s(ldjLU!fIv-J6i+4y`u<(l`q z*Yd*KHjlY=TU-;N-}GQQ-rec)$))3(x`@{xUw+(O7=2R=ai=2koM z>`PX@VZBv<@TYFe7&@cId}u~?-~WEfB4buwUWg+&Y*(7Dqbra_;EiGB_nPlH1h7>0 z`v0?c9sqKbN7{aOcQ)sovsThdT1Av4M9vwLj4?J&9M19Xe8<`6JBM@5BpZWGFgb`U zBv8&dYqhJ*Ip;k8Q#~3G`oUfl0Kqh9C-wAnSASnseN}J06$W+m2rPrvZ^8mKBN${S zlErg#0{n;$c%lVFmMp5k*o}mcsidSuOK>{2uHCL}>-MOOejU51FzD{=q@*>CUJYgH zCshzci{ycR!^Ctb3CF9dv{V^m3yEA+sj*Dl?jL zyyUDb3>r}cMqXoWHFWmW=>rP0sDTr*HHA)y+Z3=hDhiCsgh-}cyVtFu{7v*;$fEg8 zrqXGEGXjF$7SbUW4mZyF_;AINyLLfu957<_>VO7&TO7LH=8C-_y@MQdxSzXE(P1cd zR=@T8HYqDT0%Dvf47@oa<_O>*@Lf)Vb76I6bjc}WIhS$Ty>c<{cLAWwRNk};6qA_r z#(s8_y)rqT8*YXve(IU3+duewj|QnM4SZokRG?XQ>4Tt8M!hO}~OwI$iey zNYM;Lr0MQYd{U{b-rFiFwB%3sJD|cuR-%aahou8MYt1g_WG)Q?;izdqj zBj5Ai`){3f^?5q&lV9Qbjz}XNj{uLj58>R`Df2JY&b-2houyGjon($+QW!MF@K zfWregVEtfa>fn3Wv37%Em|FxZoCtxf-VHxv&bW2{G;WPBSQ6uMiWHtQUKt? zfIf3PqGRZR06~zoIJOm@br5u-1~>+0hXZM|8%1efXhNa(!*JMMvlG&qM0oyB*ZAp+ zoK>F5!u!uFztX+iy-(lq(Z*$JHo5+{*<7Iedm3w%OkTXE4aceKfD$L4<}ps3Ytz1M zG<&L3M0UPn^CxN9laDLbe}J(6G*3iiw0-F- zYUe&pTsWKSCS8J4&@~dGmB0CsF1_he1=Ha$3FoT`Jjf$|dy4xPtUTKL8mKLva?=io zq9&bjy7I^6D1-g-CU6c()Ykj=sSR{|8;)F7S^}%#eBF27Q~J%HpV0-RHLkjBK6Jj( zN+t>sHt!1E|1Y0c+Spu8x$JsHPn>Jo_H85~jYgLCMH`!M9hba`b+qzDiZ!%v$9l?D zQ}x=CO@JKpaTsZ7jYl;=e}z6eBu3&?*28I0U0zLtqHsd=;1C$DmQEUmHM6IkQcO}U z2F8qLOdQ&?TN_ue*Zle8m5gIy&aXAzGWO3Ncp8$ja~upt1jajpMq^P?q@pM%v~oi? zsWk%&_H=bp9vi9z@HuAiQ(z3WGTIKJFv&?!cjJ_q^J^`_ogN4{twBT%!r<62ryw>h zM{#4%)Be>@sRF{KspozM985kJ?vbTe9^S`yBTJL1_j~r-PQ*9QJ#*b7kI{|IoU!0& zPO;4wF*wC;*az)&J&MDW5Znd@GZc|HMZ0&G(cvx^QlkOA{Ooe|f?D?@9B*~qRxeLX zmVCBbvE-PovtJMnK{xr=9+>-_l^h1sfL#IfH|VM_CbYUw`Gm$TcWbSeE&tokV+7HN znD{8T3=$zI>L(>&o$!JnDxzgFr<9a81y1>4)m1m5l#M_r&1nWSLeryzyALQnXO`Lr zLUmwYh1z=q)mYc+gl0YI1b|(kE}VificFuO18ZMX)y`L)oUSW&igG5-cfz`M{clyC zC*}@W3L|sD#cCT4)p_U4)8Z97Rl0halgHmq`C&**w8ouzjtc0?*sy=Q#!Q{Ax{6BJ z7iooz!_!bws(sJ=Rr9a7NI~&L3NUVd)a!41?l}cDS8MXwXE?ya!1z>k_{V77-M`dA zQVpTBzIKJd*q1$CX;cfO#zg3z-#x55?tVfqKfg>RJNAI@s8wwZta`OIs@=O=C0lpX zy>Tn8tcSGy02mI!<2%=H(pSIrb8TL}Q48`?b?L{>f{id%F}Y(DdfJ6r_R}9YxRR-h z7Ab!2#qa189E&u)_rrT{3`ly~{BvlBJyoTpa2h0s>uJDAJO`~77 zeg#n&v&OmxrRU~g*rD?!>>i(-g#ST9p@9)qRkk=FGIK%(AWAZ4BN3Y1#GDD*xpkM4 zk|GrxKu8(pK5OA@)XK)Y5S3h@$c%Y9uw|VN?O3T^LcE>BS;{Foi%13d2)4J%z?P1?GAjc)tKE&BUI&&%CZt|E+jWE7YPx={wEW@+2wkLsmA{!VGMy#`!Q-TteJ zj}6qU3(kR*iM|dN`iA{(<)446c)xBH%$en24+070x5B%>^t)fu+)K`ri%5ud{tE_& zP`q)Qc0BcnF1zMj-Toi9D38_c`W0LB%X^;H1JAC|qxU?bJAePEmcF!3k3ajmo_S@x z?)u}ST0v-i*OO1`l@;5SNA3NU7thmGm&{fIhAb{MQE?Z1PMhxdg_=qaY2vgA%DDPV zCsbbEgB^Ka?0Eu{HYh7QnFtkw*p~GSW`hRWb6fStQyvKnLm>gf zntIv<0I}>x^QEMWTsj^O>QEV68l;BelT-Pf4$dJ+J2!4u5~a3qA!^t5gZyR!Or1o~ zhz{5}Sb1jzpaYxNX!ok6N}G6rawmd!v64}u1xH>#ZyeY5)?-<34c|OJ zE`go`U-mf$r@&1*6;9DsxVFW_#cRgtSD?6xw0YA(B|>@YqRi{DdmqDS(L^RL$yq5{ z-qgw2Qa9ew-i{##SHNn^O2TRYE_S1MhrkEe>b<+yR&&&Y^UqdrhCc|T!AV~q>pV*V zv%;#Q+MuSUjTA-5X-{12_HODR!|QcYQns$P0h7k=(0-TLGI(J(|p;WUBD&dXHUhK;mk zj>ANZsM{5z<-hs4#uEBZnNWxbX$pliRkC%vcHDP|F1Yn(a2nwlMw~W`)|$URrK*)n zweX@d35BzQ29$TzO&95FpSf7)&z+WNKBjahuBk7<&LkdxrXh@ht9d2ObMEqw)jbzqtfIvTxNLcD-)L)YQgcm}6VWoTVmEELyCE>L z2!jC;`@nPrf>W>vmg5gNze1G_AW$oNwQ<)$`oRUzvww(kSE_O1D3@eVGtv#G5QH3i zNq^CIgt6JxQm5!}f1K+XDl4gCE+K{!rHIF42{@5R%oD{lOGs@$_)1{`uljn`0ITK;qEUW)#v+%TcJJ}9G2!>ob)|Z#+Q$PDJ4I_iq4?L*Jv!-ZF(HN)u-w3Nxe~|K( zrDdvOr8)27GwEVTlPanb+%c(Iea}7WudmUJv#7u@RK6{Fsgt*;Lu^`_&V$KLGWjEZaS02BMakE=l8JSxAe~UPfL6$)$qYv`%>Mb~vQ=Hv!Wg#_$Ucle<(oJW0ig*hFD?Phm`1c= zP&qV9il9|<1Y*{(2%#Bt^|%$K;9KaR2)X+iW`+(xKLZSSI}11rOc#o?ccOfufMdM)e;SC z3HQ5#Fd{ezMwnv&Le^kTZ~I^aj1EKc!s^T)`rU2ow`u?GQo_Kk@DU7X&!(+Tnc=W2 zMZ4FpAoS}}K4eS&;0O9(-RtNMPzhysmYa=@Atlj3sT$>sF>!Ikf+L9lWNG)74NjeT zcsMu*^2g!S|3_xdrS3dLn_gY4k}a>PgFJ9##vF~EaT!hlphdQ~UhkWV_+&~sC@fr) zue(jFUtOUueEMQ7e{!*2dgM`-!SQmF^IrSJ6YARhs^*N=?T`%(sA1P8o%Y!; zYWIe1O3TlYA1#fC$a!ylcCofSc)#Xdb}oG$kOxkMD>Yjy{(QHRf(JDP$Bp2+T`1KM zAz(%5qhS0605)x9Y^Zr_)KgTHqbW2Jnm9R6xmk%yNT))>2&=%94EJ@^92Pbo~HeKN|c)sp*`!V zF4%B@7SiPU)8ieU0~aN==1c@JMtkXF5lH1g2qlLjP$<_`)u@@qMf-~DofLtAV8f9~ zNCKe5{l!Yj&7<*GGik7PEj)dKie^p$PXp~Xk(%DlZk#8`vH%?B6l7`dmTfo$G^WBC zNgFdBM`D<0R;x0JV1<+3iU))kmkNXE*o6v;9;01=ao4~6f`6gOhgY|6cad-N-e_cLU-MSX9DRr*@00g=7?jVc^nh zlifXjG*jA5%Af}Wo~G3=EhUxEg;SOdo}i6N1S2>~*YYK+6&)D}c-GoYkLa~m)@j1H zR7KLZJUXpNuRiw*0NO)Zc*YcrJ}s!hhs5N};avKln0^c<&t_#zx=523Tt>9Z(nU5d z-*ixqe15bnPKGRf^ZaNjzxDO0Se4*&4BmPVKeDfm*D)}`9jTDK&qG-0X0p-_fyTHL zBhgS_OAa6KASs7x%Bz~-$2Y)Vf`y=||L%ZKKLB2X5LnxcY0ib=jstj@Ky)EKo=$w^ zTB9g2Oi7LB5kj7Bc;dk^#3e-Yy*?Cr7|oE#`wp~0)0|4>1DzEyT810Q%1wvofO1Aw zvx8lAwBjGGa3c_ zZXE;rEz3)fU2u-mlDT^8CQUwVlJ5BFAC(_Vm&7SENhySYr=TW&$2#T0&rq~z0f05g zq@rWhR#lFOZwJxJ50`f|!1haug`%5YjYTXQ7)XWo{f@SVInsS~@W zgG6`S0OqW{wWV~hj}8t5atfz(GaURy+|+sU%bW<<@lL&V=eh|3!nQ zcb`5OjVw(z@8lTRXGd;Fj?Hv>QG`Y%Y9kSYVeTN>fnh@g#f zEo5CSP6=-U&PN?p3N0<2DuDOFstu}2%4qIX40~rJQHIkLmp_v}AaOWY+rehMs{Vik zjhlOo3Z^U|ngBI8_r!ZW-fKMiwfB8{JQ1=y^7!88zIlG6l;8UNRCEmd2Kri04oc;% zvN{O9v5>W7=U{ZnEBH}ekd%|HIKXR3@cSEZYmgf6A#1YaR3YF@uxzzs`qPlf zum(d`21)pJm^8!yy$)=Z3wjWR47Du=)b<@BM{X4k!G}xJY!^-ij)M#$1ULkc1RaFv zr*iKur?Md~Ar5C@5!?XhDm51l27q*S9CHl3n^zfnU%%bstF$!!XPb@7>8DewcMO|_ zxZ5gAwfx8bst`il{jB6GnmTpM|9%%FI{>$)GWoL_H5eVsPPNrlX~kduCO0(H3(jB2 zDmYfkpAY!(*Lvo;6}s(TuEsGlyaK5JqBB@|$1$+gzZ<&fq26u>17d}J!&I6WDAe7@ za@#giJwZ4h(HN@$=%(w*eLwY!JLQTeB+q@i_SbhSZcGvP@6Bk7=ZmBJI~rNqk>1VN z^!~B|2d%+Ybw#OGzW5MjmdiAwC`Fl>X-+gHJtNT}(;DdM(?C}o6n!Eb`5+sk zSH^+0v1nt(#1Z-WKP$FIhWzEP*O^y#s=n*WAVu6-s?O1@np!-=7(>d zA1&!OUoX1&@;6_cBF}u_!&Br&ol2)^3d)=VkD~M#R6i;Q#!Q?^x*!qi*gS1V0hjLI z2LN#x&>CTB0@3ZP+S4y|`CqWMi|(=)#}5Gj+qu@mVnaGTO-Vzv48r_=~=H76@U-Jv+Nqzpku@>_fdnYIhicRW#*aR=)GEE;Lb|K%LVuR3uyCPpy0+p&Cw3 z)K-OA)@gC$bePiURZmiW_+nyZuL=`{Z#h#9HNwm zD1*`LBPmzc$S)1WjLDX5BTPA*T?bhg_j>{usM#y{t@QLkVL=we>V-?90!6zcA0%;9 zfeWH>!0$U+YF4HNIr?_X0Vkl}8T36WXE!0M!wfULA?Pf^LOnIB;T^-y;sGyTLMa@CF%B z9!etL#^H!gdY>Fo`eF^Df#F^&Wvio(bZPs&ib&r=b1iIROHAY!e04jYen2X(_q=z)FFR4uRLyr{N(Y06p@g6|&Zmtj z?5B-lqQ^>v>`9os|F?;342=bj6T9E_YMHjzSj1KV>dpBeqoU#0YYH?!B3I|xvQsyP zB&wN(oMvJ#Pl|Dk+eRCu;gU5bmsJ$F(;zdKhbkBF*hn%yaM5Vqx^mldzVs%nA391v z^t}%>S8=Y^@c-P8wZv8}v;4}g8Z3hv+n=Z>RfCz#WK%I5$*fyJqY3(ltzs)**lYulV}@_%h>7pr^TN z?R}AcczK`6;n?*U=YWXFYx}<9yS66XEtHwR0mDEp$nd>0{aj*T+t+RrCExbiW%&i3 ziaCSN9Zkw3`QhK?FM8tvs9*l!gcT0+enaG{VCzy2YSuqAv3LB$X1F-0$>Gv85LLy~ zUn+QzMe$*36rH&ZL5*CAgiynxx7mD?p5Y5xDV#s%&nTj}mE()jlo@m#Rq(KdHtJTi zhR~_1m&CKm4{vAQ&%sCd(k2G?Yld$#V{9$sqps2KCfYvAoVX-ApRR(u?E1W*?;9wS ztx(;y<42R)A&?=dEiF9yW@o|H0#O3mdXUm}!9F4WRR2|Wyu$BLP-)XXWeNAuE;~Km zP^elIBcZSNw#%<_X8p;GVwiReD>k0o+@4l?e310AQmbhAadasSZtie8@SLK6;= zv9ZaRJr-3IfUoFmRZ)d)EGsJ&+E4VB!1TZk6&(^2w#+CWPQeCHDbXjmg|0atwb#Um zptXjhYWPEAaRef}cE?Z4?v*8f0D@eeZEQ__l(Mi<2QSI6s3A4U&3c=0;sy31UVjH& zyRFqkO*{%ExmAjDGZNl=ez-ke27Q3UA$%-YT0+5^9O~@7%b{rXHz7&4iD-sqY)W&Q zZ!;X)mQrHA#AtlmX(HG=19x1;ueLEmfwgIPR;ump#iIrc6|_bD)tyS2ECo16)_rgc z2FbwwZ;StuqazD^nR74fMjv2~^spkfn;6cg8MYmSe+xgJ3T+=K{Z7``C`lOiaqxhX z8V0~}8!;`w3!1%iW;X2*w;#IGjyB7t1 z8c$lfK;`(sZ={ka{j+pTbaaxwx*PB)-5%f-w_j~&hM}=uklVX%0PZ=#0NAKaF-dN+ zoydX;Z-(dOahm%(om3XX!0Q6~$8uzlYOQ(siG+HT8F!rV9HZS^39}GdH_=l-V-XCl zdqY`yD%*%@p~`eZkH&I%#!DvCgyHbtQ0y>61LGa=Bqh$1VUGaH$lM3uhC8f?WRg`l z%p4j-uHsKwU|u(Bf1$~5!f=XO^xca3^JF>*xB56%PQX~R55K7;@~pULR(8ZzUu>{3 z18(8Y+7JbJHk8lzE6Hw(Ky7V2Y6=#6IhC-uJ(E@n72 z^Owu5(3E5FotJ-LlUZBHIteOUtCQ7bkv=X4mvL|i@Y=pXF$;zbn=@jC^7BjhgBSBj zA0_VXo4Km3jrlvN#OhL6N~gkTb~cgam_^h)CYR3oNs`yrdY;K_HcIh!rc1rHKJucH zUQvD@c_0{O78uL-O;HgZ=_a2_p~I_O3S)W$7zf7JcNNz58&fu{ZF-Ngm8NkNMehX^ zRDQgyK~wUc$aD@UoJet3GPQ(7iH%xZ9$^;W#|{<^rYSf0XK&Nlr|Zc-c%Y4xl9_^o zW&di6i1_KwvQ*Mm7sobY>j8Za58wS121`lKrUBK)}=&9o~^W{R#sD! z%B2{etEh+tH zg6GTE8HV7K`s(xf!Dsvrz2YS9(xm zLmue@GltQAeCP5y+%*}Qtu$}0k`|6Oy(z}|=kFc_v8FYzrk6J$y;Pc4D^=(^5kb!N zH>x7fQUx6qmqfjJXd4fZr%WvM)4?JamDasx|gJ^EelFpCMFQ3HYYwXP8z6E?u8E=Q_YsK|at0y2`T(Lq*C|gje zQ-73ME<%|SG8;rVl>z`1TU+!RI+uhda;yCNKaaw{UF9vu;Ngu$QIqj!u_veAk@48U@0_7YMCSzh5k z!!A)m`AW-E7x_zqSN)iv3m)DshSsk9%)@-{Raon)FQ@LnBm&a)mT=WxEa}Wk3B)Sa zApbmO2bGX}m8k=ki%lc5)%A_@2XHXaddt}U^#BOUmX9bypwMreWdEI}Ei5%TiI`rg@#AI}sn0sy7;6cSnfQ`*AsvQG@Q!n#0QJNo#s zjr?svetexaMd^!Htd;5fEQzTB^QpPS!|}!CRAmg*^gJT2xsljhX>RQn*!>3-5rB+O z0t*m)-;9iXex+#ji|(u4@}=HzGv$<Kc4MQD6e+lAqJ|S%xMH0fSNfan5+#X~zzky)_ki^^dSrwB8a>j(9m5_M zs|@TYC5i8~WQ~-JWUnQXy4(y@p3aAh3Sb(H*oiR~FO6G8X{CVr;~tf4d{kyWq4YV8 zi%Jy-u5Y#JQhGXr0w zOcnz+=)s-2#8ny#v)lUtkx>c4))*t=2p^7>ub?nS>DtL%RMV zhSn73c)%x*ZQR+p`AWBagC>?|>QPLJ@J;{vOKtdu0O|Yp_2 z+Q;fX4bJ&wSO#>v%V7GZk|K`;ivy2>GVXy{r z=1eAaz(-yw>j)(@0#^!c@fxiz7o!W1-&o8>MPxI0Wuc)(Ai`y!hrVEz?68TPvf8Fh zyBwwOJhiD)mN7Q|Sh0P$R;LQy!gY<8)N`x%ulH--YGs9ua<_*VM>jMFqxL02`*{Av zbYtHW`QJ$)eGVsG+M;qAhzhwDJ2mS z1n@;P0*Wgj68g; z^)7Rys*Yy4BWEes`&U|t$NuBBzcw5E9Cla&t+Cbg3OaN&cA*Lna{ofy5^9SG5lqNM ztt?B@l;U{sx*D^JaCB&*zofiu=^~n2RdFt-bPgU;dc;>^tjCdWl@qZ zyQT)50byG2L)3c=n%gOuxHPA&hGFm;#_cfIX7&+IWzP&V$6(Ih&Hdub$`*v`tU1Qq zYQsqv$7A9S#R&n$csZ?kW1{aWfl&d~v;EYpv3`;NTLAX9FgFAose<|$zjv#33jWLq zdtQ%aHZ-0ST4+y%u} z%?09nv&M%Ecpl1A+@t0#Eq=*ZQK%*RzO0RojBGIkU_5UaM-xPu>7>zufV6SJ=JW(^ zm1m~X#+j>WqY26QIYHV<*4KUVao=qQ|42<2F6os>&JE_aNu(og*RwZqZGEY08^&xq z#mV)Lh?nV<8xN!o3XU5?TCPTHLfK}M=(<>eVdroCMg7QShFE{IOK-Gat6EC7b3Axu zWzWd({euJL06RaMUeaAKmlzImxeIna`5{@I?>PvLlD{fOI;C85UOUBzJ#cOhYLn#7 zdT*O8npD!#YelB>Rh{Cy<7l}+ozP=Z=437kNFw7!9TPAX;2s<`HMC<^V5Vb?h>T>b7Emk^ z%*OD(y1x4RtD{e~Sz)N(OtwXt1*|n~M)z{OEZNLHD(7yWSkDk4&!lC)3;6pxX4*Z? zFL3P^rI(C{3wx3vR4&-w?11@A!bdHcJt=k`oTLN9Wx!LN1oUFo0f9SE0MHpJe+GoP zs=;dtJfo-fKp3zU2FTP8Ty-tK>$bm8-@f~k=6+9hVr{7^zsjQ8$8pzfcgd$!n}!s~GTqjTCxoby*}cw;EkB zkDEhQSGVpk`Zvc4r8Y1{0tI@uj-mZE4(_^Zz_B~)>+!aY7=`$lzOmhuvU|onzq$QX zZMLUN&+l~Z!_6fGY?$!cPG$AF7%`0?5B@m!??|%3+NI2lJpKoAKXo>V&6_rFMdiXloGi^PkLl#b$-GDJ$%y- zGU^1dbbYgGhhp7-h?>5RVjd0gu!w^?B{3K%IsO`_D)gY_NJAp2hjh9eREWaKLN9j~ z2~S)znU6oKex%XTwgzN5#xZ>(n?1rp&H1i`WSs<5HWyDWl9`;_8%aGOAQ6pY(9QkB zjA2oT(&!0w>^ZqPGwi~0!-I(*6tMPryV>~}`ctlkVt?RO+;z}1L|MFHbB6og&CTNT z7R6$!{Fl{-c^4%XXWvlQJ!?m!W0T!W|Ff3Eb4x@z!-(KGy7Ny}uyB;CT*4OnE&%~Y zO0dr@2fV&4!O&g@m~>GTK#a$qm{iA`Cj!u&08L8unVe010Z$Pkh7)eDaifG^PCN_W5}#n-+#bEKxIZq${2h@TVz+r;k=*Z*wdI4X=1cE z$cknhG;kiIwDtitJ=$b&Wg9IA0U*tgZ>Pf%{xTWxWCUB@M!Gzc)y*?ARBV1;lPOs{ zzC1O2L8o=^yO+5UNi702@f_hIJkh_uv)Gfjn3q^*LoY2^&Gf=cB4L)>pMDbr*Y*gY%?-?y*Hd& zRanm?;Ow%lyM7a|QX;JsDI4m|H0FF9zLlOF@VuW=RDT&9`-%WUcQ8Sj4$LJtOi8i%}QryF6#CC=3J;D~S5#01ft8XSe$LP{7zU&yR8Yr8D1{UQPJVrZ3 zesdGJx1hz@b-#vO+EA$&UyO0IpQ*aHyz25wc&TDz_M!dD45LbH_j%P&tnMGj%V8)t zF6*+iCRTZEvA;u`6b+ust-qf(TuA&#o0F~h@Bj(*WEz+zSNWH6Ot8Kz_?p&8RO`qT zxXFq)Ig@jSC_7Nwc@R0hKZB%>4oCyb$<@|oSq)C7Y@%s*4e!Xnkxm)^)S z2t~gIAfdV{^dZkSqN!}=F7HXnfBc?t^nd)`+GeOf8(YWV96{zxKQ;{&cfnPFuoO(m z!?Z5S(U%zf;=oc?skD8&US*2Q0)B;xyK{{bg?wRsbB|+t>PiNf!56r_aRu8cl!Qiu z*$CTf4w~&ELzS+LgV+H?c#u7`Y_NL9xjQqf>&K?YdB9-o9FAcG7XDh@Z^6p+CgMieAm0yT#>vXZVu_V!i_iRv`*Qp*p_8?w(~XC#InnI?_e06 zS4~%Kyn%(rr9cDaeVb1zWX)x_YrO&op{Ts7RPR19G3Aj#szn+DBNOTyBj6&8IxmRh zEPSkzl$KUSumEa&8@~FxsdJVG%OBVrQd|DIw-{0ZkwNrpN5}JnU`Ktrf8iGmkD0gi z-V^3O(BM%J_EPA9+D+*v40mRVZ2N_QCuc}%Di6>mzPB7KFFh+~VLWU6PRRcWuZ%`p ziNDohI>moh+rNIz6?$OC%yO?BjGbE8ZSoalB`bXCU9y|+m!?k^7({`H!GVu5G1^%$ zy2E#fqJm=93C2cJ-ZEoooe%_bI0B2$NCX0j&In=T-ukBSz^9N3~E&L(3=(KTF3$`2B$ z%$icbYOE9ITt3Mzj!|OaOnYH~jeZQ1>|3Vp!-&EQF%Fin%i@-USRKe#$k#_rL78L8 zohb+q+7ggheABj@X_uayf#iQe%Bj_OCiKu9C{N;y2!ZUpO#dqKylP(!F7K4-5$=b@ylFv1vz*m8|{84CO_TjKvl>OpMZ zG@oSdI?u+RQv)KB3??5oL@QFzS!5d*APSgseRUTX9L4aJhnAVm6AzQDuo)2%V?+ZA ziBqvM?=!(3e&0u5Zsdt3(@vv&Uc$wo=h=g}lu_Pqq`h`#%%6~l8gIAQZMbi=GTG&> z2#1zC9c7qX?T~65s5ZOsVaw$p7phJ_JMT#yph{o1dHKJfSEAHVRSI;2Z`UDsBx;E|v#(5EEJqn(0l+R=a~r1ESF-Z99?;s_>Y%=SuZ>J@dbqOhl%8XClT6XuYSpJ})lg~J}u$mOHdv0>V6b{NIX zN}ggp$EpBqCO^i0FjZG((_-~*_Aj2 z*javFNQxtF}tM!jHcsd3j$g8^WGe zxx$|z!ceRg->A81eGP6`2>(_e&wN28HQ*0<`Iy5-K+Ml6oep=udA)96+bOBO9Ij2Td>-awG*4tA44U=#4bHTgi|JCzsV)tDoZL^GKKV_;WHbVjcwtrx*$^ zl(&xiGhf5yMn#OT_PnPZ#f1`nBAJG; zQP%4h`Eo>1FxqJ0_~W;;%efH!w+!S9I(22onw_*J>$SRAhqmV{-({b#svE+)L~-|R zhAJP;dztXs7XFpGuWi2HeWw3H6sNJv`{9=YFK-H^Ac|$xkB7ROCIYL?p=$le7e|v* z2AA{94OF~=5+tkJqENdAL03C4O~?+;V-d)oOb`<}YhpHm{AM}RI1kyPu%4z&3wA4DLI;v$qZw3$=ZWHy7kHaqA ziy}mkKR&G+>o`8nhj+R72Z_bQXIWLw6m{+b*!cXr{65zx?vMRHYb%>ClvHiBg!iXT zIUw*cAZvyNhoHATP=u}5=Oq^ed=p82zb9m-3a|=QITdFi6Dwjs+25=D=++KkHfV=# zT*+u;`AsD|#XY?E!zgUu41sP9(6UMxUunExYj0wmecL&*9<#l(Jg7Lc#GCV6EDxcM zQDmF$sPr<*9~XECL^;?0YMebSUg$N65htD|yq4NqzY9Me z-76od#Afkpn3S- z$tIslXkY-T>Xh=VHHK2^H)Y2P-f2k>%8x07rx>?=FoXIX^NqYKWZ}Cr(=&Cjc#Y%q zM`&r74iB>gF=gTE2DhrmO2cRdhb&MRz?qb$hs=OvuoG4OOXCg!${RHh*+o^#!Qxs4Y7K@#ZJ!z z@;No78rO#3gp&9(zJ^ zU-&YV9S`yT>eXVChpg;3Idfg#T>7UyB&)o)riLO!*t*b8ydW!kYjt&R<|yww_FNwh zDpLF(d`(4Dsb9l0|8S;)i~EN*+OPhZF#cHUb~CHs&BMr8C_9E_wkRUxK@P&9rocDr zgg6$e$ckng@<^34#5CMIm;t~e;Npsngmxm}cdv=i+qK-oBbo*fco@}nUIWV;9#S`t z6V0=Yeo0%W#XCI#&NwIxZbzq_DY@B{(P7IEw#=w0aPMA({pYhU{Ny%YcTrfZ#lS-w zV1`ODM-OQ+>Dp0u@@(kmfT6Rxt8KRVJEZG!`$9@mFza-55#iG6LS~gOYbd3ym3RPl zB0HDzU7`-dt@9HG_2ID|+Z<)yDOtBOJ4Fp{#=GDa6gL0!cHY?bhYYst+pZ0~k5uNx zg@vj-Nlz(ptg~g!!PgJm3U9@8RlLo&7-!hCtq0x9K%Of83V+`iaCf);RbD51KeZ4n zy;7k2r&LvEwMzB}h&_?PGNM%xb%S+(@?<_5_7YZNqFvKJDyeH9%JUAgoeiwEr45FZ zFtunqhq4St4=h6@C1c&#-U1-gn1M*3RT`S+wUB_H$EglMV|u_KR#I9MkC6=? z8C?v9XBr8`eAK8!1`!bA{P7H}0NlHz>T>?7pP2(-)`lu@t1`b!Fxy7)M$)eugYC{B z)`((}1D*t?uF3A!GOz5GVB4!L6ld2G64+Wq2tYV01?K*p(t zz~Wd*6OU{)p6h@lAPD%`aqB%gDK!sbEg#-R*Cf+Af`<#sVEM-f6J!;to&#)+QtBZQ z6@{WPzR?*liCK7fzhgCAVS%7A>Ir7t;t18iM&c~@iu|Sl$>J}KfAty@h58T2&-pt~ zw_GeFgAtMOTG#}qdgB8$!T{2!|mcw(sp1lHH@ zu8sJ2fYU3+&G0La&X3%W*En~?GHUCE&zE;x=VMl`>OD_hx694@)GA-x#aeYdnfRCNmqO{)Qp`nS`e(TF+!MhEszz$cq4(PN;R4PCZwg(bKjVHv+2-7gthGQ zYyFq>-+i9n6@lMsfGHm}xZXQluv7PM6m9xn^0OLm1L%0%(Plc3m8AB^=iHQnU4+R9 zL7R%DVo@5X9$CSAEL>liK;eSCq;b(dK8rz0HV>;k-EFBHM()|an~sR$rhx{ zKDBX1gGP8)wnzvLLa)&ifNrzr!{6;$uc#)vM(9ZYo;S=8cV>r-y!5y7;C0rVmDFm!4u=&}z$p zDep@^^~MXKzJi@wQ3U(t?+4xpXgT=9fKHQ(L>t}WT3>EUzk{NG+%OQO1P%aWO!@qL zgD!Ftxe<~j;~{qBAc4v%!owj+3I)Nf1blC(h;Z5yqh4R-m;-W-(9h^o*04Z{Kuv!W z>%~oH#5OAsyQuMIP1SXFG2nZaRK|zM4^=}$JJ!ZE`=|2v?%fRgXmkJ92gBIj*I{kK z)pOEI>@)3Wcru;OyppyrSm^bA8aTy8@BAkyR9h3}>`xO1eo z5rR^z1Ej~p{?5VxClZ33xSwCTS|KWsWS(CY=R_{w-?OaC1Sbe$+$A%75iE?tE0&$2 zB?ok=MklJOtU1!idWsBiub; zvzY99h5ffx=1d_aRY1Y$wnxhS3hRXy@0L}!Do3F|Ul3j~dP7UkYLUTR{v0B>_prK` z){F9NRS~ODYW4~@u!tbAj=Won@~SfI9}N@r)f29xJR4vP(U8Q!l%gjU%=jz!_46l* zpRdGJ$sMb={lZ$G^F~tLZ}(x`pP^9@J=QtvO+bo0O<>S3{=&>DIyHGnQ^U=7`|dB) z7;*aroN;Kc&dA3{OMJumbyz~1L7W!sTOuCeo&iNv`MZf-XN~9EEbH!CDC5aFwK709 z%I~p*kOnWVHZ%Mg1p{u6APlgGOc7X_#5BR0lE9&-W&2$k0O)C*1lEQCf-pml&7ANx z3y1l2O0B74n0MRGdm@-U$Yk4o4LcT@5>31%ENOCS(;@32k*%i*tq^ZAVnP1%ohIj! z?$BWJZu`=s(=)@LSAAh_WmJdcUA!^-tq0cBwQRPD_MzA&rd* z{Bep}IKKBbYQX708U0^rq5|QO=lFSPln4W@iJ|_Y?}@hi-yM^h2m8l)s`(OiP-ZYQ zXp1q>Tb}VAde2%45j8A4Y`B?N6`Gt)E*rc|j&&-Ghds~NQ3%e=u4WyF5z&7m%1+9$ zgvKIGXZ}Ua-_9~~Mf{FWaG|Qbg0Lk`l;(VqkAIq9vtscfVaH}k;Jd>*fscNGy-(qP z$2`I9oAkYyE?^8$jrIoG2vCkn?v4$d(bFr7Nwd0t5~VbpxtHR-#SJMm+qPm-Jc;Ce zwiE~g4@N8R1}lip4uBL$joSR1hH|F(mU1np8W?Dlp(Mr^+0*8jbacd>tn-L14E~OE!f~QaHC1Ifa5P-S}_iR>_IQrK1PZ zOFol|P*ZI}fkg&F6JMuAt)5PU;1_QiExw04Q0~l@@B$(j6Q`WQ-#?7c@m}bQhY#%o zPQ>J(v5HKfa`4Pv;<%6>048i{@vpa`U~J%Itr|@X@*Ir8ws#FCto4nQC42O5arRJL zPNFN=<}C_BUZqc$5`{(sbOgMqO^&>_AO{#}d(qz~m5dm^%-Nd#Ch`VZAmpk*kM7PFTcIUI6)ig4@P-2vU`bJg%(g3 zWnGYF-|?ghxYy(;_uH72lU-`;^G=$34ZZXE>-Q&ezAcTJ)EcH6@ERmCR(or7_xA2j zCdFQHYTpLurYJO}wi9vvtw`0)NeyO(M0@{*ij!BFQ?tSjyeX#IUq-6)H)JaYAU%Kb zLZKlZ7qQw3_fz30u9yogm>A4uQfe~~QjY?h^z-1^Lj@RS5Se)LSC!CU4-gbY+U;!a ze3q8k5!N%+Y5$3Hv;cC}gWPhyeK+i$`qA>X%xZ4A(TF?2?Hvg5`fz-)xna0C<;*d} zv1&>XrpW!KyDM{aUKWB>tMvGBmfU*vLgPC4T&LRA6&x=83m>I$a#2hb>vER98VdJF zLBr&`ZJ9UfpX}ZCW}*nD_29UH2G^H4p3)d{Gh@z8;$m4}Lq*~Z^3&8M4uK*XxX3P3>Kh{Df$zD`m}9-iRAsccP4?>H`%#Pu zb?Z1BoTO-&d;TpRJI7>D-PkrS?-YN#KYwkE;B${s^yw-k7Fqb%m%?b?tkO1Ra|%{d za8U2gaa=$#9vDeWIWRsU07(UJt{t&6ZW1h#y7>zuy_ispR5Nv0dZ!hSM2U4HXq#3}qbEL<6ra%V^4#CR&$Rw(nMO zfAX;X_@2Np8erGq5aag}+2#^H4f+ETbI8!iMO(d2)-P$Pmr>@sbu~dl7C_MHkAI|c z+o5eqAHzsX5T;XTAC;zVI2kyszgfUs6(AcX&LBj%_9Sm>;i&kRaz-!J#P@t|Z$(iU z^5cM_U`Ip*VoQxZm*Wje#>N@G71yd%&O$VBtGuUEt?a&?{<22zlP>qB?00* z5ddaJ;q=k^^oHyN%=qu$@A7c?Ha-PS5C#BKR2r7wzVp#?--3Owpk=ij=#3K?mo!es zM>qxtdw990!3&0C*t)~?wL@ZX2*qfeH*cqAV6nZ2g7d|Bs(5L9BQZGS0)Q5rp|@#{ zm&C%ofZ8hJ)hD2T@P*=vfD+F4ltS_Eitevu^E(tIB0@&W$T3|)hIj2y;7~|wZ>q>W=S?e ztcCNLNq^iTM9jm3#WR~7P}+{WxPIw88x3TA8?I~Hl)ta9Z8YYZTd#qH)y1*mNU9AZ zRK%a*U0g9Y-7hd+SM0s_b^v$6Plu$Z*ckSkmA^xRLs8Dvuai1j5480Qw$UKdVYnd! zOobSl0|#-s1tP-1Wtwb(YWyGWz?akP`<+X{*D9T%E%G!2G-!lN&6H^vgh7YqeBmAy z%D>VEO0QH2!@tpr7?d+rBk-z8w!B!+*5oXWFsLHARL_?yJF42j4#i`Pp~~Iu)ODQx z4bF7B&fPS~wN0bl{u4Zf?JtVQ0`34T_k@nKUCpD29zlAVMYi6=XWb)?eZ$L`X%&m_ zZ3!va#dYQ}sz2n0cDVhWd&6oH^&b?Y9hasqXS?2}no!tNh$*!_1y+*%uSZ zS#Hz*1#*VP7_Mu$D*AO?G36)gT-AjGxn8P@@+nH%NaCO-SM=2Fh`JFTF0X*pBJKZz z%W}C|aE5d1dZobXjPJ>mii8FdS08N@hW#teRHaL;*`WlTtW)K%O2w^;L>Y_vDY(iN z)RDrk-j>{6f#H<*L+FkYDMlFc4}U_b2Zx*p1zwopX+BD6jYl?nVl%$(!}0@=sO1%=?59 zrE1X3xe~rdpj%#$=8C44!(?iOmN$OCKLY{;7R)*|1|pdGRxfZ&PYGP-btS}kK05BM zIKyrkU))q0oy_wp+F`W_V%$gLnIvc?3%`*f%5o?t1+v@hrPtcRfvIACMv`$^oUO5A zi}N+6&uf&YX_|d9unoC^m@k5gDOyGt=>Dzmns<%OOmakW0p&Qs4(rd;*vU#0zHTUic&*0|XL0qJ>{PL32 zFEotL{1n+v9uy=Y|9q4eP3*>mcA-O?(K%lCCC+7SlReJ2u!AbebJ8Z;wN`ayCQBV5 z^ExcQTkp(|>oI}cFishB$O;UIK2k>H97FIajeerPMbyu`H!Rt9p|^HV!IRC`@uL#* zFH^kj9Xy-EumJW0BNXT1oCru`cTTFDET2W&i*($rfW!{h7Rp1`#o_VLn9{?vNu z^Is^oYnK2|jpt}&jlkJ^bcb9n2#!ZRHx@DdT?>DI{rQ4ss!!B>Y;o^NCp1wcct*zLzYYgh|i^M4upiTOGH%sX2A z8l^&p+|0dVkyd`1i_QEdB?%n?jY@$XH=QFGJ+fbyOHe3Z!=!SPqWEW8Mp=2nYN)*d zOpR*){=7`*I`4+62aF>o>nRqUg0pIvR+*H;JR~v0L~dR;S1N>89haxm z*wz-#6t+3wiWt#RM2Ngy{o{lfIIW{z8nq61l3q<|qYwEhtF&@)UseuWNI7=iyEr%T zGupCciCTtFFt^8MWi}~jKkFZN-kRBFF(53yTS?)Z5LmIcAMIWl(p&rLb8QabI3Nea zb0Z3-6k@+Q7PWD6vARlCTH$hg0IC?2;HCBbGIe=FuRWqt3JKe^r~^0`k7xM#3+k#` zbu^(ha~|3K6gC7j)YA8>X0$LG4(Wkf?abNro|8#DoIApSCPu_Yi?_^+6$2GOLH#8!3QEP`fuVot4_ z!?(z1pQonS4C84dy$hO0DsoJWa|C%vrnsAfaZ)2}nCWmaevi_{i#aJ19T`7$je=r~ z5fVs58Bzi`vNTj-YdvQIKoL`VMdRweBfd-5_8z6JseQ@L(>QH+KwuekYTH{Azxw&Z zMA=G*F08&+gj1$YVwGN5P&!)=DX3(pm{8GKv-CvZvZ-daDi2skI4Nds+kl(Ch7-Nl z?O=n#=bBCZcu{DS7eeWg=Y~$^pwPfU!--Bo#Yv&fsTL?xY8L8UC4UyJp7i zyWHLOXm`e_rZO?FttEkv4ObvC_(_r3ZP|jvEx^(Z2Nx<{QnvRO0^BFld7;6otU$;4 zQjYHRe5!s2g?}N<`%-Q1j=BD}#=GIEm|s|u^{9dWO-WlXvep-SOU1e7E-%GCf5h6_Yds$BU3D3+v!Qkn6l;pkk~2SDaT{UUQs| zQ@06!06V*}Spi%nN0QF?X8m!Q2^NAL&h1~&gRGL8<6?Ra@i&NVQX-KK=Ls&|`_jmi zd>D&c_ukb&a8l}xP9c0-d?|{&19N0H}XC{!(kt1#;}dOQEogdjEVNkFzbGl z!_EweS@cIxl`YK=>+SvI-+8evYIkhnw$3p<$|%oqoOt7yuicC$X5$R1KYANWFw=(; zRtR8(*un^Pz|k0uf0!JfVgD3g0?08gKjK4<_|%eefN@Dt-}ZE>G$30K&dbnw?!{W! zojNJO5A9%ch@ooUfxRK29Fs)XO3`h6BzR_3(H}*JaWolb9Or_N(@4%0m7D;>9|}P~ z;$Q?&s#_eIWnx3)&P$Nt2NXpPyyb;&~h?fJWr~S@1l#9MbT3N_!W6O41vg_I; zB4yn+THj;)bQ-8%0M^js7(2X|83o+a^S90-h0S7PuEmqcr`V%fH}r=_YMVGU5BdJK z_D~5NLE(Y@b<($CJaCEzOFSfr*jro)aGp*Kw zd_T}u>+J~P;$wsu}gbHu(rj_;c?$TOMpCr`q7Q1)P! zb0_mWY<^#&uUDtmm=w#w@3AexZ$jHpRHnTmqRaig8n{Mo0n_`zE6ftyCcWe8Wx)Xi zh5J#4M32rkmY1hh=$OknbyXbV#1#<{C=HaA?IO9mMJH!giA>jpGD8?{xgd7 zLp)&X!HX$Tzc%i@eNWr66?5*@n%W7qJ-j+0h^@Sy9^FrG*6fsBDACg}<75>e(Nk}) z2F=hhJ?BCvf?69F;;Doq0YurvLcP9_GFnbih72TG-uwHwf-4%4?^!toS*7mnU-1O72~v* z9ghsqC@j+!_4aJ(6XaA}mLirS=os!>Adc`X0je#YTO>?q`+ zxm%>$*iXZN)`UDSJ4VV}UfU_aFM>a+TVeS_E!ORF;8j!EFW)boV|=H)vuZbD37BbY zp-fop*gvjm`0f>N>5XX33@Vn&B6}aU45yD|bvY1r*;bh?TtnuwN>dL4xG4#78*0Y> zcJMsUWUtS9zaMnkfOuEt0YNp_hHIcW)2fdvTkDMtyYtsahEAS?_j^xFj*Bg$o10qO z&-_@fB7s+}IQmjB6O>{SuvdZt9y~;;F*E}>Vb?CqRl5-WhD%_tv?~{OpOhs2^ zbSPSGR{foCg_kSL*{`D2kl=WDMXa1q$dQ5)QrAm!Zup2czqg8I)BhDZU{Dht;cior z$&qv$z4x2`Lx2@AT!HXG+^s~YB?0%oh~HxCzwJhhhoZ}$El=fc_ubHM{ z_n!TK0ER$$zgprf$)VCZ>Sc16vf!IpWjNCLQ|Ijvq)Qnm1O1~nb5rgRXgzg4*Go7A zti3uur0Z1zR^}#!4hx0BB*A<;J8%i!7;q)geVpgsK0Z*6fl~C@q<#xJw%fU{|DCnB zHCXk5LnwXh-bjCB*Jb|j# zR(`Dwf-!>dsD)O>Kyd}EhA&uc5lW!09zz+mNmAgslQ*rkqu!c2KW{OV)AY@22HF5& zhLRMJRoBr6t?64owhOPkWQRWcd4@xBpYP|;X5@NS&;7^})ETRu{&_YPhFY7AdsAj5 zLPYSnfBip_b-m;H^E>_CcQ79+A3}qaSS0B_DG>)D@?LkvcxjrlOM-T$QU)4j2GuC# z$L7Te3V>u*YBo)2fH(4ofBU-gehj;(XvszxY;pXOKYZn!%34UnXCf{lxuP1Iq3kky z`K0ap@KZc16jc2#JNH+AY&*BrSy5w~tpKJJE$iUbZl}d<+0$+-{nxCdwaezgpIrLK zFI)RVPg1g=yzxGc`?C4pE}L#pk*_tVuSL_lMyBli=`;4JU;Y>}lVh8-7Zx*Co84|} zDV{N%FG(WP1=@onp^SWm={88G=I9`bv1iJdWE#XUPQih(&*m3?Y-K9xQ6|g5VQ=VY z!NDN9lp#l^<@m~&@B{uwK9K{*v2YG`5BL~yUV+(h!;=*)w1Mthl)@4?_H;$8BbOY0 zF6jg90`NOZoBPS+Eue!^l*?kGZe|Whp1_m*I3Z?KbVeNKx4y27dU&xtc&OFh{?Rw> z;g5dCiXj#9Yw=I`>3`k1r&YRnB7tc;`Rbdtunx%anWMCG(oP5-D~Ntsn(k+u1{M|X`3xk-b@i-iR)l9PFX}Y8zY}) z4T53qA>Dt*h-+Vq?s-y96R*Ai1g|D-U3u{pJMhsDQ9>vr@+Vs$&=CM537BvNAddJSuOEZ1L*ym$ zAyqyQwm`z`Mjj&~@lbnBFMyhT4;~=B&U=VJkUpKxT5q(8eateOT?)b-1CKQ51+MF`Yj3=59ZgkMNzGdz$(1aClM_RhhXEDA z$p%rhvJ967=SiQ>u^CZ(M8qLl_#WNYX8k8l+Whbk=YF4uI|ga{hd=r=>w5ALZjXpx zD}-`P@%j2b$c7HHG=#B!=L6a!Ked{ymL=hk!b)9`N=^mc}UOOO)hIqKO4AzfLZK00^p zjCDSAjDG_xtZcVaU;Te<*Y*a>6(u!16M1#pJ!(67uG{kQe-b?Z{OUT|nU<{b@sHV_ zhJ3sE(*Mh~yuahVY~DTDOdu2G71{RIk6)x^HJg^gZ4i;IV1Q_mqn15BG{jzmM+7SK z<)s*9r6qVU3fZn;S|}%^5GQ9iWgPhW!U%F@Haj*%*)$uT0ej-2thW$Inf zGB(M7qP_3g0%Sh38+eJrd;~HTpwlT%#}azz*7>t`?E);ObloI5ub+#*6(H!$nXLq_ z2q1AF$}AMRWYQR9wNegr5802u|E68N0=_6m1DN8>0Kh0x7cVHUx30s7Ej54B&Yiiy zxpWn}+N~c_U$b*FbZxBLTQ9x|q0+Og8IBU&19>G)+()jBjm*Pg&}Taj?zX0?O&bTy zxejhfuaDi-89dIIw6hS*Ao0C z0hPxpgT{yHs~?JZ`L{aA(I7%o8CQ&EuzFbc38<4p&qVm9*T53Po@ zW)eD4DZL`H2;J|V0+iQ7Ds`tt8@JoU3=R;R>FB@u9jKOz?8U$S)68eSpTD`rrO`ec z7#g*MPd&k!==!w|nS`w0sQ&3*Jy*{4XMV3Qs6YPbo_wKkgwklVFpinphR}+cpA)@p zUVGcJQJPuhHT(=`OP|A9{X`inx{xQK_i?(EuPbRmIZz1_o<@xoTu(P3q!Pz*0o%g1R~hf6}%0S=2bNRg9PqK=3<^9dhoDsv2RF+3+fm0VC26#OG~ualnT$RaFBf zmagHDTml+cIUoN1l2RrpN_%_Scys zaqZ08wun*ABkLHA&@Hhx$oDxoI9vmIQ^vQveZS2y4@I^9m6={zeYe>v?~O3(JP^{@ zdi3ZW-Qk&$j7f5p%3A0gURESKnGKLSF9*HZm5x~!Kw2};@+gP2po0l%xKYs0bJ9Fl`H2_XNaCjSz zR@B~j^NP)LztX?!ixae<*YHH5%+0xhJOO@mowoHg{aJct<|+IvUGe+8R`s7(7DpUN z__Z&5)wb{7?HK~G5T@`ZL!g&sFtT!~E0de2ZY%gyfA6T(jN#iD*$MMeRFj=bN*@WVh|x(_}yYzx^8< zTwoSC9{NO2p9P74^1&L^cWt*bufB$dO;^GDIJ9xcU;2hU{rEu(H|^vaGft03MbesV z@(jXSx>H(Ie^@`hihn=~Q*}H)*!=4NC6#JbnqTXn^9NEfJO0)GYzN_F@aTcfo&g#2 zOZ6|4kUwfQ_01S~sZ@p+KSQ5o$5G<~y`=Qj1 z|MCBA9i2@u+LeOgXtL#Kge)bHDC2R`|8UV7@q2`pY6%lIjrI||5gljrb$ zj{CBC_hfS#mcjr$Bjf$lf{F5W?CXR;3#u@{fni!!CvRS|oPsipW<5kaXGzJEMWh{B zb$fSKLyX?etH2OU1L);-#heX8gS@iHz#%%Te)BhdAL)$H44Mb5bI8~GgaGb;HzT)0>pO(`?XV$E(tflPA>9bbTSjY3o>|c3cnQ%f2zU(WgM-L-dqB#y0*8@UZ;eD!|OFrQDo*V-7hD@o1;LZSsQK{}bQNPY1 zA;<8!SI_6&NtyXqIRnZL@S02wjB^p?C^`|lUkotRsjq+4TKDea=hQ^u8ox?LAl7r< z+PkQM1EdR7G};+be&sm{i;<#R#GhE2S+SO`PCI+{rtKkmQpsfH`Z?=5aFCe{F+2a# zcmK&sZQ-9NT%)f4);GRuorl0X(30e1sL2jwYJAdc7+-B1_xQC)I&gltKd~L^d;deU zFYlf`Z_qk=dOyH@Yi*YYx~XlxYug`wn0sb%|Lb$Hu6_y}wL2|J&H$Bnd4_D z6P%|-^13DFyP*c}1L!!*TWMS7b@Q_eq~n830jLe*P54}vUg7Q*#nOp!H~ug|dHH^byYwGa5d-*!mzsT3K7N(Q79?8?)=dz1F&`3mw6K9yD-y z(zmWN*tgQ59IgwMi6K~%qrXb|W|4`AtCSCsTk^kW6OT`dlxcvQ7ZC!29C%#KRrdwX@j{?W^ZL_EOe`5DUj*&#or) zP}t6&yM^0FnTGW!gAi|Rc8q|kPgm#HcrX6-fp84u0AwQw*;VZ*glpEpnB9EZ4VC`& zO--#)+gw86QL8*wIR+9~Kx`5KISOf|`1n}}3_?omU5fsR3^ay$VPptkAoXY>XLmSc z><~tM?|1`+1C$}|WCh&O;N3c3kk6Ng;jiUu3VKohY(6KM-ZqLO zJ~Lvi`{6r4soi?#9d}gTt8mYsJ8t9jfR{h~R3=-Xd-3D;X1VPM1#Yhyi-ob~9(~31 zTE0_;fIn-rg5}hT#@pZiwv|FpT-VZ;G4wjWl!u%G4tJ<@UN*j*1{N2` zg!T5{E91k@cs_bb2IY(rDr>ZXSH8mrZ-65L#YDy@Np|4cH@|F0A3ww?AY!TOv<>L3 z&wuqV?ZJol+X~7f#52k(Ewu>z3*E21X>|n=D`B0*E&$a*#k^IskD{J0n2OfLG9(v-#mPeOTHjaaXS1}YK8zMqL4sqbwxBS43 zesXihZeBiTm)N7HPh7Sao_`xEWyw2YL3At;4O6-t8=V2OkWU7K^gGwC>y(iU<%rye z=ymX2vI`S7HML^>Jp=Zkr?w-G z9t_7`bRrou%5C1&MayR)?4hYth--=4_5+>P&`@9pkM6MgrfNI-)FTWdV+=j#)qc*b zT}Br;&{FG!Zqi!lcL|JrkZjK)t(RxsVqMSQw5ykU?B>;8yMB>&)C)KG(`{Gar@46c znw@&}v@O6|*wotOSgR0TSXK_#Be3)ocn+syPFQd62-6e}6G7cTarx(T-E1}nsw)U1Y$B{DzClHQ{S*6-dwgx*!1F}*lwSFd&31J6AJ zLWlGrWJZe0kv#9m_w>G^Ql<70N*(%{jEhH~c%LZ@Y?`)2bs2c607EBZKX~DSRkwG# zu*ln02vFaT=h?6n4#RSQ}HGR>)aYusJgZ@pSn8RVRG3%rX^&apWi`U<=w_kqUe(x{;DD!@zEI-_t z;2PMJnNp9|ne*#2cxIYDmln{7)+g0DIoWLm!|S1%zW(jMv8twK%d4zma89l*&dl4u zKYWo%l}8-_mQ~#hXF{Ld`0m&3=#xhQDbi<+;*PZLwU_?lPwatRjn?(}L$)7smX*;V z+svu7t1x07`JI1D7N^MymwSltw!WVCW%KUIW(*8LOI_F}iH?rW+NV0&*{hoX-;l+u z62|?`+bwuZ8tEoz-+RcWx^Gxs1YmCQE}NN~MOHF$R0uanB)UR5VF|WAx|C8`Ha|X~ z5CCxsTV-P_(KG$*I@q(`8KeCznZ_v<5b#sK_KTT)O@QDt7n1q5I{daz5S4xqh;N+q zeq%c|aM?uO@8o6l%Lk%WWXq0|T>#rcmg~y3>$Y$IHY-{_ z*}^Py5(;ZzI~*dLu+9Y8CELBL#_C#eq*tId2ai!)wbK^Jl!)L+BaPE^DkW2S02C*! zsH~95suebT<+Rl_)LP%*q;)-TfN}+ZPckst`qH(&m4EU**#jJ=5JAo@?yX~28$jfG zx-XPng%^PUh}i;9n~K3K zfG5#(TcxTEcpHWv0UHUw;a*&&Ru2C(la>!Qb#;9o9`g;29{0#k-k*c4e z3w}SBsxirdXr3jPXPBrqZ5?c~6rdOFNEsLL3W$qe-nd8i2!KnQESm(z%L6C{HerDJ zR%&&I*AnH+Y0$<*C@7Ve zkHD*Ka+#Fbtv6q>Hm3STAo&S_h`#dj%P~900;@VYKfj^8FGG?#_4+V zzkHXWFvq}iFmpobMHzp7?&TIaQ#$l)+)+_Gn4&giYd8nbT09iK=5i!dT7W$126G$g zx5FgavW@2$B|=!SzVE2^>vezmfiKJ{rF2?vgUFe zHZln*Ih7@ib{_8iSl)XQL_hs|$$>uCW!~{M&%{+`a z2E3q-%o%$#5H7K)u>orEJ?yEZHEzdYKrB*>HxEQ;NzALXnbASYgiw_umvP!#2df6Fp5b=NoRqrsA*}3;B3XN-Wt`FZs}NCV^)hT zTF@nkr@gOfaPqeZuFbS-XS+ z8;IHp$+i_$w&FBTSWalcii$%%aH+4m7YB!|jhrslR9jkWk@3+0Vru&`DRyyw!PP*= z?mZaiEJ%^E;g-m!jSx31Jajz$RIid`PN> zh9+!{DYxw%bq=u9Iwp9ng0wW869TGg5Zfl}SW#8t_b|h=O5yaSVVlhbkFrxJ_+rGT`W=Q+HDpoxC+aC!KS9Y9bJNd$%0$R(A*QOc0b zn;@m6aM)kV*BEU$Gazp(>gy3~lnH|Czjvc0wZR_*Uda2*_xwZkZ|wqqJ%(*#C1cnS z$`D2k6oK`<^@?>JI|jgpsHL>lE)tnm=7*fCUk*(a1pUPy{J?7J%lth_G6m7I| zHIm`>)IFP9fJ|*}9iAOwJy0wj8tF&+9cv`O*UAC|q(B(^0;%(ZRQ?15kS1>R+J}DQ zH+Uvwdh~iJTye&`1Eu$~cH$_&>G0)MrUyz|z0TKF8inhULl`7Vx&8uFs}CLXQO?Q& z%=Gly+!@yB*^iQDM!D8(xBjyyZS~}j?GRXuO%$4rXvYEj^6&ny)>#;^il%y(kxgbZ zB*=v!*e!P+-tR+{Mtk~fXkd`2b;V9R|1E%Y6(j?~w7|{V^hl2tRyA3} z_I()bd7kHW#x6HnRR@)8vqDh z#(CZ$T6kwBrd+L*@wsZF3`iG6NXNsCA|n>SnN>ai@|Auf{$`hHH(s2@vyt*_B;S0R zbd>W-WJoqK>Qd|)Xe2{dT-9um#DdL_+~lWQJ2n)oq}FVSXu6SFJq%-hKWRp* zx9!|+kAC>5J@8-`*OCPbw;v{*Cm(Z1ZE z)vuH?ZWa!9b!`=luj8~4OV4IH8MH?WmO~`n-qnax-%R!lW>T^R-RDo+6QBESEGzhz*&!>fYhX0+ zHk*Y&Y?bykMX6o_bPa*bvzLW!afg(DW<*p54g`_|nd#jJxt{<)n~T0sDPS6%R8v>! zt+*RFv=R0_=`m=#e?*k8&WKza9hq{+eh18rYY_hk%qt_Nteo^o3Vg!`pvn+VzsP;U zMA33`6Dp+%%Yc5 zK1XSLu17eb`ld3grHrABYn1CKs;sqhue}I21R&p`N!TS1Va&;brkOGu4O$-M(3SNh z0MTCCeh5&boDe-M_r>MXpgY*x2|5~r0U~&us|7kFb|2kIEC5xq^yZzl@L*2*R{Dm6 z)2N&%eWB6V`rHMwJz+{MIp9M^2FKmVH#Svz2|@ZL$+MIGRhC2dxJIzzhja)!OIU&! zdR;m!#w6V0wjBgB=yYa2+^fgdwAau0-A}C~tR8UD`T~=?Xbtk7UZQ`=f&>3>4!qqE zAyMjBV}vyWAfR%CHX)l)SOk&Kh!b4|K5med+D0I+p1)#UA42iSZFd2e;AYARnT`Vq zF6WW*K=|AlL3#NFDB{(@#mHe;n;fRTnQdL4{uf;DBmp!eK^VPyz=A0vfd1pJx#GbE zw$840OOokGlOoG&+ih>WcG8;W;Vkdk#W>bw%LXAlligrTCtqYvL96X-d=x`T%T#s> z<27ovAAQW~DoSm9@D@gLN9H=V@OKjad8H94JhDbOSgcXT%h#LlY;ZXPr1H3Sg+>8y zH&WUaM~wAb!!e=9&(f1uSr6)gM0Y7tx8M4UKeK0l=`$!7DR$OV4@qD38~|dbW6L}X z6p3R9hrvz>z|TmH(dueLV|E6!$)7L{1b;~)0f3P}t@P7qKgV9~r?du_D)7T~3; zAelvk(rCp*h|v&{0ZKL5e867(-+$MR9O=ZNpe>cog=q6my8!S0W`DQsf8>ypx&#&` zEVS)G>woQe+rIlz)`c?BDy5pD+AXZ4*?rl(d$Ku4n_PX>A}Mgdpp?)8a?X{>(*6}T zC`~rdoyh?G>g}`%0-{p{8k-}cpR-<^!=lFhw&S5^Y;vFn3S>s^&M(83Nag|O{PG+B z#n}!^$tEP%mNPPsoT;3~C;V5>TXN2xmxrJi6$Etv06+jqL_t)b0AszmzTnQVz8CRV zA6yEJV1(q*s~tHjmvO^$8uz|JNw5|SLcnhFnkGohq7gcDnCYOi;&CG9NIben9T+mu z**KwU4^&1{8H0F&*LjN+Miu9vsHW3v?u)aqzE*9`F$l1q7U{IoSn47G&l_Tfm4nWH z6M33*xS-2KB9>44Cv{Fz{F}BkPT3`{z#(R1LnHRkN1m{$;Tg{iRyQ<}x`zQ4ZjkdY zyiN%x&sz8Ff=L#AE4_&Bkj}uL;wxMfi2&=6q(gvl>SSOFAZ!y}1MSP2vgdEVPR}$= z7l{KGrB9`E_+6N6!4v_O)+iTeOTf`f=T2G+B?J@&>RMS5>1_0cVNr>m9 ze@6g4<>rL_o~6R$=-n)ck#boVb+6p3hn~hge`K>slqMX3q$CG^^NhhEl8~W6K)i)c zEq6k*%Rp-b;3c|%Ny6l%f=&I6bS88e@>CZ)wW#m%24ZJt${Z6T;z=P$iVgi4#@$^xVyq^KA88R^H|>RP4* zQkw@Xb^7wK1y|>-g_gmg)90)U~d+!AxI|6_hbYLK_fo{?2-2Zk@G3(RoCrrBaHOB~-Md*Re7v z5lCqRIaW}CW3Yg-77Z=W=&Qf~f7+ov+pYeUTemWZSC9@I%RExSLtAzX?#t%glTFY8U_D5gFRnAkfPQsS%%bh}y{ZzFq(#~u zS=oS{Z+dLdazpDjNhYxXC%T1wG6MlvetjMDFnWA|mIHzFs%&9l8J0ix`BB&ek#8N2 zr;%KcNM0`G{zxv6DCy!Wejfp^N}dgwF)gwXmnux~B*pR|n^S@+sFO>`hKd zJ&7)6C@@~SfU?3?4q*w_$T;Q{1BS$5*R8oB=Im+#)P1r^$pGXrAQdJ;Quw7se0Fk* z6nm8VeG~1BE0l24Hi%gq>Jt?t`xJ zUOev2yZR?jDlUPeCN+J1secxu! zzGcnZTNwsL%CNq}hSzg!=*=H_3Or7?mbhX0BhdT);?#5oCACI&e=f z|NY-u3w-grpZ#QpIZ_UrcA%bvyn00xIwz$Oiu$56CthUGpXssGOcNTDy zQn8u#vC<EVqjECGXW*{rx8a3NyZ+Lvq(^a-xYqKza%fsb)4a9g zzHHt-*(@(F#egr7B9764Kqig$G{>kQ7n!||jJUEVnq&}=o|m}%%j;^bcE=Gbfogom z1BYQSy@cU_5Ur`hS}84!4i4LE-~7*D4!Y1Epwy=@eqt&_mNTWaOx8*@X?elo@W+ZH z0Q@1kOsq{JnoR1WuAU7FergI#54xkQ3SuMPBXHc>+$e@-1{FlBWMP4gj7*cA1l-4K zL?NuQgttsP_JwOFf{v}uVKl)ckugwqeRhs+DGb;h1FroOVCa}UjZ#J+uabe>>Y;YM zb!FVZ&!{Y>^;241od$~TmGzSYqjGALKqUvqSnH`V*M-$>?9)Q4X==7foN}f1n|5rY zT+@g#-?S@lA7>|x|XX#q4Kl(Zh8Pz_TN;`q7ucciu zE$#u=1$sZ<=zKC}3TxdN$b5Cc5}Qo#*UW@q0bK()AZsJHs0CJ7%{JAqph0EV1yKxX zHd+A;V-3xO0^;iGFdv)tO+fW`d=F|*{h}W0in`00MY?*`N4G=kb8dYoPDSz&rYtn_e zbH#n~3;s=dP+A0MXL)3ZNd0jOLco$1*pPJM*Z=%a+31`0$S;20jj_(f_ReG)w00Q{ zY3GWXRT5kNdKD_hd6aH{=rr)t=}EO-`jY ziJVo*s2oVX$|09XRW>pVhyHez?m{@{Yby*?nv2`?=l~AE0d&R+ss2q;@-{cZKo03k)sx$IB(?YS?Q&&dyryOFCMzz(PsCprcbbk5MpU3o}z-8*nTXfPvYV!RgTYE3+zqqh99# zb4r;B+Q0ABLr?dfKho3+wIkyQRG2okpgd^=?k5HZLCXAFn^#W3?IrQ=Z*O>%N|qD> zN=5GrV$`zmC>Mu@V9TOi&Gi7AR&Qprt31F-aSkN#d`pDjcmoNeG6-ZAqV2sWsB*LmOvqzqK z)atr++n4|N%a%OxyzM;-%ONzLdQG}vw++7bLu)C3uwze)#n>d83!zP%Lz*y)=;*y1 zt5C73?Z@kSYT;o$wV9=`{Qi|{b)!wDfS-7|hBa9kA!9>lL~8sx>!A!n%KqxNe#@%L z%k8<}_$?GM@00TO1JTqP>J0j-byMVrr|-{*42068$|PudWkA!^P&CQqdB}l`FXn5*5t7|B?k=MU(O#r?&Kxfa~ykbGtricMCJ36YZzN5`Xu3e&EeH6eM)U9M{ zKK8k1?OR{^y5%iQ5%IK>F)Fe!)W`AqE_?AS->?rqz2AQIa~~pu0gW~fSL&0=9(nf~w?0oY zE6qypyh?|0I#wbWrz{*}MW($s83|3atOzueP1XRzwgxycM8J{DFsDVxd1faUY{#~G zFAs>I#|<%iKyoJ9-!w8G!x7N%r7ZAJ!YT|6j9UX8N}EKv%22w2Rkn`%h!PyFZQR*g zKV3M(>`&npa?x>_b>uzlbIG{2XbOG;fhpC(r<>gX=d?zKPArFPQqN*2`;iTGdk%k6 zV7%m;Ro2uIhi%$WPoKA9EkGoCpOmV*okVA%bgYBm+ZfLh3{}B0cR> zCwYFNSzef&M1Ax5=tpr#406sKf{cO!=3L+~WZoxLmrdak{d$ic65kKR5g_%PPt>pU zwg&AWf-dNpo4@lt5|8k+qu9{2CVE|)pGm0k&;xki$_!*sv3ie@n!gN*NSzBzrhLH9 z?-)0oM^1+RpmZFd=f5T`S5OYReT>osUZ=7L-~v`?b5ltnI~(fe>lbW=anM=ov=b6d zD;nOMB_&DPfBf1t07|4y=@(W+qX;#LQ56{R*oPmrcQ1Amkpp%DqmXmpX&XHL2Fen~ zM9|dENQT4UMwrXW%Yqe>wBdU>1lW{=6@VI9wKriUz!39qDW1$`bK}kC)y=DIYju3c z!d0ynq1LJy6A2XV_x|V)?a0TTvBy9A3tkWAN1212?;s?7#Q_lL(EqqY$MaFt#CfGG zeLxBhTPOi*S!~G?P}{Cg4BId>Bx;X5W<}VC6}S_T|28-W}QOAAy+;GOB!Kv-Av*M>+h87B^!=z(mZ` zqeB=OM*bqIbK?WFFpe6-i!nf|r&kjp7w`-*cI-)|nBy4SB_dCDFU+Gyt-QX|p8nJ) ztfUCXSdqMB-akiab}|N%fBr4na%Q*NCL^2Gb|~W=Vy`Sf7rY99uBoNgd*~y1rM9s+ zfcV7Ssgxlb9$=mcHStoI7vmUtbv(G^jXsg{k;MQaO&Ht|7}}|avmB2wJUnR)H6^6K zwV!b!*ihcB!@gNvr-sg6-|C^ylwr&!+o&T`#sCl~C!G7zbuH4`xdNU;I&*rs$F5xL zwaJ-vFdk$tSi&gWE2{v$;}~>Z|0ck_wHX}mwKZ$oyN|ZTMrJJ>0t8C?xPk)dWU`Cu zD_O5*G4+^IA*dznaRLgS?qtj6GHcO{eF7gv0V-UtUxpiaMYAOjj z$l@qKamPTHNx3MlG4uE6@qus*1j?Zwh-e!U8=`pitBQcg)7^@4-7seQXqA%7)Vg@+ zA}L~X$%zPICj%gwV%5^%o-^Zti=)#fnel8;;*yY=EkP1q-`6UstzSZ z83KjlpM_D11GMVc*+%`o!cM()*^(^}*!h3>ij@QwA$zI!YfrHO*D-Q2>ae=c7$BuI zDYN%-w?Agz`@0`nx_*cK&F6o`_HC;I%vfhpXmjI4 zB`OJNcvAp{l%V}_HMVuf;J$3$J=t7FOjJ5cV${W6cSkn0y;G?O&uWym!3n^jy-u_f zq2p(IHfA?2U$-l#&f7Rf=gO&f;q;dd06zrNUku`{mFZqP{yc4jNcHXq4pFY6Gl`6Y z^nz1x^XxTSVMTy8|CxR#rzGqX1!YWyV+zs2I}C?^AuY!_*<{&dr|EWBo1bub7kiSj5}a0xKQaYWnkzan#1UB%t9@knx)P@V==OHYEn{GVvrU@(G(Bf z>SLrdcq!H;KsV45S&-NQjEMw8*Unw`PJ`y{usPB-Bpw3YS4QtD`><$NPcR1t2cn90 z;FcYoFdlBV+U7de9tOiXjgp7R3BBOVhg{bt_t!+rq==;EU|C$AnV@n>RFD2qP$r_L zda@}3GP*|RmRMHq2|NRVMwE8Z74+^Z4q^f2=Iki>036BT;c07YADx|AY1)z2g>GGv()9RjcD9^q7k;gP=#9vcoR$~XavJeFs@ z#;7!%qTsR17XhWp$fNf6FQ2y?|L`}^Bxex?0ltCM>GC)mi1ek9_F2?2bzR;4Q@#;?a?wBK8>K&^ zWdQla#V&>683MhD`_@kL`{3u44&-<(_FSRUqLGN6sds>{W@jeti@)`G`}Dv5AFO)Y zZq|(p<~jsq%&b3}NJ@w^3Wrfr7`Au5{uTa#^1uNQNQr;=Yd2|33v>U9?lgF5d3Mfn ziRg;5+3Yw9isF}hu3{{*EW5Fbs3{4Ua|%FWvn}zwb7`+CAgYNHNo_35qagTHK3fVZ zryON~^Q4~g);&AyBFgRb7yiJWeeNhg(_+dxHFl{N2TSdmJc~_@?M1Ez;BOC;I^F7V zUpDWaY?c%jV~9vTiS$MwJ)CfjVcvxJYw+5;M4=Ow4{K-vBw_TFT0w4_K{<_93y(!% zMI8?4G;+6S2cCEu8A#gX$N*h`tN5gAw)4Oq+Uw{r001XdA^A@6%w>>P*HdsGTwo;f zIseRz9FuD2I%3S$5U5SSJ#q984^3EoV+}@IfI^)ET9LUaFEeN!hkiDT(W|Z~@YJ;v z_3&}R7ASQuuwPa-xF8%H8NCphyCnNUq)zQkmFN%t&7N}IAR%NK;$+g|B0uB$w|Z#K zfv^JtAo_m9iwQ={G00PJFhCZh%qGCZ+hb?uv3vCn zxi1X_(GJYR16Cib8x{#82E~~T5lZbKCoGazE?j_26Pw?67Sbb6UL6W4dWRi1K$`02 zc_tg8Ffx+O>p6UyqJ)l&fcov_cz8P^pC6zW?QKbnD3xO}b@hTpnbsDh$6wPLrBH-9 zSSL*M z)YnW|nI!A8GCBz9(he_;$VnKzb;Z8_C;#4l{r7(lO6Ohv@;jLoUsDv3KM$O)b%3H- zlyj00iewQ9`Ll4N&1Y!$QfCcO9$KCy%I8=Z9kO6$BRmAk+(;R&5zPP|<9Rmi-3?g_ z^-bF+KJiie_BmdM z!y$)Ga#2g#c6b4K;RC$`15L9C5lghJ%CBiFf8CeOyC<84IO$nL-Ew%>*-vR|-KkKy z^5BAlHZ6?EXc0i&yfSLtfaioSsDPMimG<9a2IM^Tna=_YY;;QE+)@m9FyHd% z5-6uTK<#nf1>*vU!?A($8=tdtZ@p=K*DqQfV8KiaGRBllfJXIda;S`xj9;8qyE%9f znp^8I@+8cOZdH31#y~)~Aab>V0bhpNxxAdtBaE^eO2WfEX0AUVCJfjD)%@l8kZQ@_~b*w7aka(k~(#+oa@j79Nj= zu0t4k@+aV=vY`ggE(Qlh7eZlWo#m31Q_5ed_O6GHk{zjFB=Z>e$8(7Qq^5PS9?p;@ zCQF9dV^YJ~Kf(@(a#}#dQ5Y#3wl$Ig;WN>LYEcxUVO)+D*Yz|I zL(#w5665QX8gQa?et{L|XW^Vc^A<2aVN>`5UZ)a-cO}T-VV$yQKb{;KhVKEeB0*D> zQo^azx2&?F&@l#1g2Xwb8#Fpzr3RIU?$zT1;TUWvjK)M zmI5)Av10@J_o{CT+=j6gJ6Do4v3l;^abWWe-neP)`yn1u%8v7A4&E3sSu z1TaCpQW5tiprKXL`FWtCRnJP0zDn_P4NVI3XA$rlyBWMev0XlW-a8a38|t_QHV5rA z;#82rP&UH3;Q2h<4}MPiiw*;&G@p8Shs{or)&{sEMDp~ti-3Rt>kuU;NPnj=!ke`3 zt&tMTuBp3y?LYlXg8L8%asz{{h+O3srT+PJ-=s?4YB18`t(%tDyo1rsi@p{&Uwy&; z@e6-uzx?n15YizTPF}}#`!mqG>t3|{WOdf40Y}Ml1W=l%o`1nwcQV^T&YfPTXXP)) z@xq}BFw7=S6qi6r6+xZ432T`q&*AFZW>vb!ruD9WvH|#rK{s&7=4%#pM zFaHxjsiC8c9`yV`le$#Rt9cbe42VO zfH##t)H)fX^e{UXXPLV*Um zN2N-&9f~_(mE>4X9u)4#phk*kCbnvaLFZmli)vtg0`i@MvDM(B%NK8fn$NN7Y8(S1 zTR9k>rNlW1!gRRKyoNPW;gP(OpT5CwzaolLPz>rn8y)9oUZ$PTMj!SJS|Jmm57yxYRU5 zj4jG+g&;^QrPpaGR4Jr`QlQpMnpzHy9*P_ueXCGknT0UAB1{QDz)RkO{$mZvqR2sD z*?c{t{CfiK0<~C1a1<2SsQjZgaXAMnJ7tqe5ioIiZieg3C&S8o3>^G{zA4+Wy%tUg zy@yNSzbpk{I4Nl+SLWda-K&SJ);)h@5$&f*1s66nQXeB?_PeH3Kuwq}jNr-pl?Y~> z1UGW3X(RMX@dxp=Q^FTu?42nQ0TJj=eaj^^Rhjn_o$vT_5e1X3K|F!0eUuStj!`T(z4fkfr(>&I=8Q-v|U2{v>`Yc+krqzF+iqWqQ7 z+eCTr4!;(q$&qZ|EE4qcrUqLfZKqAOjj3wgz2jUqo;@JOB(>EM09u1r2Q0s_%_awX zo!P6dzJ1FwATUy1+b$cUy-)X&ng5_PI)8)uX=KVfz06 z)t~$+5f=4Wl&bofl>$uykW8}vW+iA3aNa; zYc*X>?@E#t7^ly?jF!>$`B|=m_2#)`p)~r>oU$3RErT174$aKa^E_)Ge(rJG`NR{M z>n18v?N-?uZFpCv(kNsF{8L!l%8qtB^}=zhpg#MtBklH|-nx#_S%z$7&FGY}2ql&4 z7j6RPB;|~g5T~uGwtnl5)_vK$d$PGsRGbJF0_>}SwQq`t!!*rPuTVOxg|LR6^tCz5 zFKi!Sfts@2OsY%C8RMa&1Yqs)N1k&{a%4vXiaF{5~P&T=C`h*>P>~R7Mf&%nqh^*ZP zxSjyKBI~h~U4HW=u6NmvJa*XX+gjcD3dq>?@yO556IJ*`nyc%ASUfKsWd?`ql zFPam?X$V$A-jOo5tj}L@nP|w3vioXER&k}|wg+Y)fFDc6yaYepF_y~$eyxQF|xO~|l zH5Xyirxr#@6sW|&dl5=`_xT{%H|ZwG9QwIxdpd_41k&ONtB(NY1;QJsg-Y!;;y%cS z@;6Q$OklbVgiMicdU4W;NHkV-k+#KL(s1*jsYS4%%^`B1Fa#@!)denB^(`D1T{DKz z9Rxm4j*q5}tuo9nmL~>mX@>8I zZ$L)WP1nKzWtv6HVF*r;RG^gJrFTx*bD#SZdOF|JeM=dP0p2ocp#7UG$pjs0G-NI3?`6eIvr zh3H(6V5tkfjztv?+7wDcZDD%O8#n^n+bS7L+w4S5%b?$icuj6a!xmSQ z!8iA1lc@df$mZhG2JNX#9%U}d>MU~&z>S=G{Y5+Q@KYFVhFp=xR)o2R99A}W@oc+M z@B{YrulyPYA)n}-eTMVDiBqsbs$SoR+2@`64`Z~_?g+@i?74CUfNj)@%V7l!G1iwB z)yldWbjj_AmeQmE&IvwKPDTKdBO%-eZVf|Nlri9vQAMCC=P4uLBbUhpuC8)ERF4$1 z26bgxDlU^fUs%0-on{Y6v6sO=dN-(8%_^HRqdaM(f z({c?+TdmhDz5_PJ8r#_3L5T!nG1Qj=qf0o|^Ye?|EfobDlpr9hs3+J0sHtp%)-=;1 zdHX8?l>bZ~f@cqJn=t7h1!QD*+(7`Z;oW2C13B>p1yHWD&i-EZt};H#EU1N4#8cCQ zeUu$?-6@bGaPACq92m4Db)xmnI9xaeg%z1B51$>z>AF{s+pBu7-d^UuDnaVbQ`^ge zGh85?I7Y&2+c*c#OCU!<2G7%kgcEpGH(5MQLXY6Di=IBj}tNhb2LsEsm!ihu}osx{PH2VP7Ye-90#MWexSrF7KnO zq0_F8&ysl%bt>sKE-#^MgX(Yj1vd89%hp7lyo^lBRu63y8Q=WkQk%Yffqww5M1g8T zqY%GE)c_&kd>5|(7YpG^wbgJxghXkiOJy5{-?g}JdAKI>E95F&NDQM z-f3&>y?TSrg^!?Dl-^a(G#j7wmD8q-fJzwyxBBTyAO);7K=}zUs%MnnvKJ?5(qa(H z6ohfgIOp;2zF^JJFsD%3Nf5|VpmMO{WN(B=*u-FXsmPx&SqVxl^XqU#?5tsAFR5i5 z3$-TRBJ1MO42!0eF8p~$c!iTQz#IzbSLtNf>TzE-@1ATbx?TfdS_rsznhe$A#A%<1 z*|ejB)?Qfif_aqL03V0*p&X_g;q)}Tb;Ur_1huHt9Lll0J?v%Fudofnk1k5lC zBJbk4nByGzkYM$kd7A-clnL0g9Xs3YW54uqN=jzKJ$*iPFG#&QMcG1zO2fEBA*{|C z>7Y7zG-B*`85(5^eAKcBAsBPOt1<9JVK%CCid!YO@FXh%F6NfD!d);)Fo4m;iQoe4 z+@%p~Y%Bo?s6c_sXV1wXs-~V@1RjZ$`ywTeQt%V`OlaNe5sVZ9xaAAOay zr#|sv_QagsxO&qD24`%jZ^$!{Z~f?H)Y`J`dhjrNi0lA5F4Gkf^mfgLc8JB$7s?bU zn^D``hU2wtMU)E{$H#1f+CDo8&V-PCn9Ew=TKmfPqturZhRxfld^HcjPT0qE&^qnWNfFLge2vHY)F67WsUBnh@)H4tAt&f zp`@vqnkcnU&JmvnHH{;If8d5p(;TsCLN(a}sj$^V$o3rC=dF9Hqp9}4j59I=n8~@m zaR`Fc{;~lyCa8hVP0v|H9W9bLJX<~7<7NR0+1wLy4A4)pC9oH4HukxtNgMhh04GtE z)>Y1o|KYm%0V%#rT2}WT;yz`JMTVl%j&~>UOhhsiK{=+Wk$SeoTSQ@elS1T=GBHbZ zZz-1S%?8LDt#ny+7N%tYhoIu*BDtdKQA(%R>u?> zo*aOnK60BiT>}HMu$HoI2jQxRTqTRlP%xho2d}?5L2VQzp{#+TjtJ@IY_bG>r{1wb z_~7$vn=)&#g}?91=G~Lc=7tL7aMMb0uqQ{E3qY#>Gr#%IalEJO;^~ui_GGtRdH1AU zefM2E_2PFJQ`~CB7=Jm{l?@G)uh>htdEOTfUO*+OHTJ6<$1t*7UQrHyq0Dw2*zM&2 zaSxR7?04*Ed^xzG8<(#7$lef+!3ODemG;zvC?M<11SDm=zOn{nJkEypK??{5DIjeOIHJ)nl)AzfaR#> zcWI1wt~Ed@K0}%E>e;I{4d;WLJr4+23wIFss52II>p4j4YjnMy z!2&!fxo}>Dvu|gA_^5mB_&_)Y^4P=aH4IXTH6VloM4|x)8py~f@)Ro<8!Lx4w1Q&n z8Feb=q6ao;f2(Q4V6v+p^ecd*C{gQi}8NpTZ;|0#+C>n2+&fQ01Y7u=9k#Z-~6^U?c0U#KuVGKx}!xzpmk$GIcJ2j(1O+P zplm_QqNXnTghj4}n`KzkjJF+;_OWmL`IjuOyv9zPxxiQY!+Ec2n94e6#zhY7lFG`g zvf<|d9SIn^X%UztcQ~n(^iT;7V9(7yYtNx$g3gvWA!3~9Q?igp8prARXik6ghD(u2#th&dyVJZ@FB zYMBF=hJ2}ARV;o10D%jX`ZP^Y)aUaUr#OH_fka2T0o0OxY>>?HpZ2AQcH-=Nu`NFG z+_Q8z)F2DW>S>xHdtQJz_V>i-G?B1?ZSX08Ph#T}L6a$z0mFHhQ4=^>Bw3PQPL9mW zAc2^t2A@+#wt!g*n>gMIJQe}*ojuoWdv~fuk$okdB!^i60Rahd1X!Iq8}GT~IDqAJ zC0T>5XAES#S5^o#098)Gosz&o5@TU0z{#UeK4SYGd;k`~S{NK#?WyM;1FM8a#Gw|2 zag2EtVv&>+A0tB<2g4KO8LTn2FiDgi=XC?uZU6>UOJXNutZ{7MELfd}=YUdP9BzbQ za>aJ<-|p+H$X@s&@3xTB#B&Pas0py01bnQP|IruN&~!migFOG{ajSu_ME4nhxG4=TAamg9 zqZ|V8&Icei(k9D8Y2!^01!zp!8bwVwl6)?lCb+-EIL zX=rkqatql3(l_3poKsw4OJo!lh%%R;bZy<%Wx4Y(;^AcJh>@i!Ad_?M)iSwn_Z!P-AR@x zoysD6P@YNYlc5vXxS_MlX0DyU?8?C>PoS)pWK2<}_NESH`rJ5ErXwq+{gXp+JPX~B z$;e@O^gnw-X>Db|7`nh72Y-TblW~>tkOMyt)~1+LwG5}f*Bt{g27IO{j#XCh7CU7R zbPfETwj9o_sJ4_8cC9V+z3s+Jj`-W}T(^n>T9Aq8H7QUpR~wyY7;wg;=#)UD#Kvx( z^~_yKLl?n^ypXLOLhvufagJMHD-FDh@tn3|vLhQC=t0^gL+n4{A+jk2<^q&lp3*gA zv{}1MZJ&C+GN$SrqMXNXJt$G+y@B!HzzGV&@G9I#3NooATnj{Kyf>T4j7*bdk1E(w z21Gz*t+Q@YcmripBc%;E@C0w@6SWs^lGSd$f({J`*OlLL;W z=0E8|$8NAJdapOfdl~n-Y**iW%eoHlwYr@h)(r>2I_c}CJ$uLq^f2QbkR8Tvd3xAF zq}f%n$gkgq!3AqTbd$h=Q5~}P++~^+azN=f&{kAQtqpJupB+R2h48eqN{Oc0AF!b> z{Ixx{zte)-_WR~~FVdaQh7Ltq?8ppg303ntEk{d43<5-|y;2*~ zl?5A23}>rA!Xr2?D*(N6)GYyXTZ}A95+x$SmLQmk+=4v&)qnY`o>@rI%BhTtV+goN zkBE2%QsUxfAjELxqfAJEI%gK$8*9TucH-?5u82PW8^2)f2lrU_)gBnp#;kg8+TJ;N z)^@j6fQP7cMY90>ux@vpt#doZ!kSvqJ z5e{KBQbo0P^*Dy3IL!P9^DcMlABL{4WI2%T;UnL`0 z!!%V&Pq%e|?)F|gJ`j$99@;)qVqf{UziFTU{eNdio_)$*`_U`*3vFz4(fU%Wa)CyE z1JP3cjRTOTe$OGnK*C&bbL4gMvmge#P*Q`@cK{K+(UVusT4igy6P%>^`4W8I5++g$ z{<9FJ3mHlu?jmv`IT{GEXp%!EHC91y|3g)kR#aAoz{aeskSM34i#uaSDMJa`1) z6vIW}EMIA8xAwh9{XXBzUozk_)H^==&+NrN`~&;-hd*Syo_@}D5iteAT$ds*?esJo z9!gZaF8;8NQUI(69sbJ@Fp0FPXc)FPrR(yCRzyqEZ+_FPyz*&mJRk1dw z(cmJK`IrY6RLV8ylr*pjASs$YjoyiJj$xY`9=5{=Tf79~W01pzr0c=t5IIXO!_g32 zBVAyhPGD%)tbY43*a$mrOWRhzfEfaNw6>B*skGT%d*z%RIo8GSvNiadt zdb$WV!irVbzy~u4v#Inqj#&{@=6RI+hSAw_R%YO4xN&pB>MFzqQ4Bk*u9PF=8OUX% zqpb$r1!#4qkAPwa&I_|LTuw4Cz1RNMl7AqMLKv;qS{}3W-}#z7^Qn(m@8FoN6MY9f zGl29;s?}Mb9n0aOp$9Jz4aP@cHx~qcFLbRyGzqcf(Kgrn`j2=okpap=ZA|k_=o&ru zjz_;rhlQwt&Gh$TplIiV^h436x)H>op4Yt7)9mYG1Jug$APz!+scjWfHV`NvWDm-TaAUL7 z?bwXj?R)L}fBNsK6_!|53m_^Y-uH8)QRY>h2kdO`lx+-N^T<8Tb*EVqEGvw&pp&V? zr{Oj5pW~pUr9i+{I4(gXA$aj=N+@YkuW1Z3!w0PYg>PGF7)?o}A%{E-V5;x<3m!2@ z=?Mq2N;}ae3Ls26KYYGm7bb9QS4O?#QMLbTwtXM7o4Dcgm_-TkZ74VQ?rN zbjOs@Wl%%MPc^M;@O~h_idus|4x=n)P8XQ}(?w%zo|{`%j2omy3uRgt=v(x9Sdqx@|9v71V$l*A&ZbU%mVzV&(^47O?Ol@yTNp~B*s<| zc3Ep1J=!yT3ZNS5_SxVA(sPq`>U%%3BsI+xhPja1{U{v+V?)EXmzJ9Vn=!@4D``lAypZ>tw4;@A)^I}Ej;3#^3 z^bJ})H>`boBhHr2i4s<5!bc`iI0AJRF@`n8R{@Tsth_4%=Oi&Vg)@->eu_IHkCbH? zg!CqnMG%l=4r#+><~#JAz2q%pYDa8<4?^7_a`-45Sbcdu&f$htw6$519`)D$;?J$R zC~8ele(L=!rN8ICY~DTDY;9?FAqAWe@j~}wenn0 z`7<_r_z^9xEDJS-K)sjlGwHP61Np@B`VQBRlQX@v|6dfPgHZl6;~GcH@ZA7QM7m_0prRK5u`b zN~}(}#B!>{p)98Z6W#02;I9PWtf^ObNX#ysxo&+uqc%P^?SVmG90R{~ z_3T+YbNr;8JH_jIN39Gn=mUq^!I0$9TF7%Dy`U0;+PP1i>9_OeX(1&5`Ty8^8-T3K zbAS8;Jir4yDDUs@F9HH03W_hNl(w+6$;vj}^ekKLzxwU0oo(k-r*^8d+FDzkPPJ;< zNjBYdo3<>ibg4;6iZ3XLyb6ebpn!t%@S^-b*ZuG)Dipq8GVgE6^Y(qYzn|}Y-`90t z*XO#f@DL9Yi`z&}Wr3z0dDxS;AEni;IL2ob=;Mk|&XW=i;zYND6Ro!rks%8`M}|<2 zAYs|rCmL1zayUPSGpQXTp)4Kda=;u``?4F|Jew2!*)GAOaj@hN5|d)^mzD3~@&62= zjHYRxesd+PsM#u`m~tOb17-&nd8b~L#?5JiCi5N=dy3wF2R`&GyZbXk7==nxWd->F zBs`^0>&(A?a;mE&=BVfmgN;GIYvSaPYPY_15_%LN+5-Woe zc0$NuSfWaq%9XL0FU6;4ZXk1-9EAOwwkQHzQtB90sPjaH}Vd~=QkNymAW-oLO2n=l>$-Z*`Cc4V(O%b%fmD1hO zPOc6U|0I(0&@2L8#<;p$(|2wM? zk~oH}T87$j5@#EzcBr(-lu52kdZ6v0i9gadxHf1KKpIwsnkm^h=wg+xZ!+fN$2qU5sF?vF> z5{{C6O+t!<;eUWRzQgDtIL*?*ad#!s#CZbVQ4z3>OvTCnU52myfAi677r;fitlY1B zvt{JL8O9M$nST#9zVs??`>+32gG*UgWX#Cyr6y9#G$xY+Z$!S78H4+BvZAZt;GbVX zAfqsxeFN!EaHYxa7>;cF0HZVKauq_qB9o&uu&_$Q*7X?swb`6VXptaU%joG#NJz-C zr`3SUlZEKS$%;yg4gIoWt&u`DHe7Ycv$JJH!x=sUQ9RTpD;!!`BqLi3iB5DR!YMWp zfqu*!Nz5cHv8lBKEu1jSuxHY!ax54htxVBQel+K@_)gxlFCu2j1bC0T)pE`&{Hy!s z)%Q)A*rgAQph?*$Fb;dUGQ2G_9V=g7fdgD2CQQgs<#Q!bSUbl`T_wk%q|W6S?GZkV zNNXzUlvrxwx4d#rkd7>4Qd#k+95CZuHwChXk29t*0T)k4;YceKU5*lKFWE@Xkh^r2 z7CohiP?()z-xn2DlvJ@&h*Bz<|4dx0oTk;wL{8AmnaL#c9Ndj&S_|BRN5M1xP9AF{E+Y73 zP+s09f-+=ODvEN8sb~dZ+dn?Xs4-FMBxi_~C@p4=!P8W(O-@`O3D1Z_P*4-ag8!>m z!ByO<@`We_Vxkx8fxH)2gK~|MrxDHY#S@$hC1dI-=AMzNhJvZMQ60%IaA6$-Nn32K zdmve1B_xq2QRm@}stU4a$Ws^<A`M`JP^#!~l? zNN7vJe3r_9E&cI!GI+(zPEFRvmMdE^f3poD%+#dBi9}3WXQ>%Wc~KXZA(b#Y8`=)b zs3b(hc%X%;k{cO)5y-soKX~MqSTG?%aU_Jh;52q7wyw-Z#Mo%mmK{Ri{Q2q*ujY>( zg=$+v6>iV^2L5esHj?+{!#gpV*OY$DhnGYH727~t_IhUEEp3Ojj-@m=AN&D zua}t_*=o_mRo%FIGx5mxevI+Vik8882`(dC;FdT6JJ-ESk1mO2B#oK^Bd-QZb*%22 zSKl|SE8Q59SN~pAfPkZ?k&qOP_x}13!bXp$B4BZIiI3jMWJUhrfy(^tLPDAy6>xS; z{-cngB})l8>94XfRx3oY8i)WAvLdtVkwj;7W`APeI!nb|DHnV%LQkxaXIU3O<_t%= z?@llk_$m6QN6_altJ4lf6_`kDJ;?|oDV)|p>zgRC(W6))lq=E`$BuKnbIfzxQ{Jl# zeA00h6W-E|c@x71xQMYC)ttKI0|;Ln3xzQE#;A=D3Q2E)uzTe&8?iTROp~6 z0c^G4OYMm-qJW9=V7Vdw%zLJCLsyCG2!?P{ndi@zW7Uzem>{;qM4}ADQeaQv-hP^M zGv^Zt#TF4SS3k@7Kq41>JYC@HGeWr|B&@TW&ra%-s3cN6w?uykjyB@*pb{j!uhT6| zO+QkUHX}SDsIWF1VOr^GL`_>lWz9piS=#Z>yj{KuIn2?J(3OAv?Q8h-KqYo>%fs~a z2{@2{06ol9Ce{Km-zoF9(jnP@Iax@Iyc7d5_=F<={l6n+<_v}vxzRUmL{(752h*gp+zB)3xCmenS7(V3J2*Q^Q14Wlgfh~!>YQOEm6#K!qRU% zRE9bd7CRYUB+(0JIZ0Rqng}vZNYu6^lt-)yJyb?S!{))LVCiQu!5^urBYAlQQe#Kr z?N^t=#LhoyEPdddz&s*iaJ20#wy$1=NG~H?Z&{)yqpNJ2l)H58iiDh%g+;z7a=qkgZhc7lg`xqRVcJ?d_HQ6#O%zWZF+L^;Z#_K62QmN;2 zIm49E;_fgXKg#F8Nk-DAa`q7gOD0%}OPBA&y-;(AQ5xiGyz|;0nBc^SJ@0Q+RTali zOGCk`l{m>b?xcipcrhH+Esn~bqbELi?M+05`6A|fKj-~j{Y0Vr=GFI2t70Iji(^KQ z!|r^Ve`7*a3GdDCzt8mFOh80oAfa(StZN}rKxbJUkXk62@l16sgIKLTMM}|%AbnYc znOX)*KjwQS$oRtVMUaRdOtT$@3l&pZmLzkcl>1f!oi2)wo{=<>*Py!mFqH&PG&Htz z1=|U8x1-7hU~neE(Ck270y!^UVN6KYqY5*fIPHj5))A0<63c@UejNMqDl2tyLCAZ_ zPvFLU9wS00qb&Cw@@$xMz&{c`;S*JrLp3p7MgNrRM~qIRJFOG3@nN(Y>?9fTIPvqK zqR>gphcmC^q{5`dy&$V|GhL&Co#a$ekP$O!v%;3hiGn4Hk0=JxKIK;6+@NYlaITX) z0y6)}JjY$tGc$8FZ%3X{=UMVEjuG32y!Y z=;8d-ZkELf=T5exQxr3jMWrqLquM8mljNpxq-DmIA!8wQi3G=tp?feGCEMSD(Q6dz zYmBofW<2VjeY@!t19_mnK5j_=&I9Ba@PX6k|3S_^MHCVyJ$tfRWlPR}=`>=tYp!Au z5|Zmad;51toHj|V0>m$#zr6rpy3vrBD5dS6AxB`xpZ)+h7VMC0c%so7NDdSd($U;) zxbuPgct%^MIS#?Gl7lc(i4arP>EjJl7(y|Ep;Y#CHPp}o(Zkh!NV*+*BFEy7&(VS~ zZyLITlbPcn{F?S_NpTj|ltJ}UAj_zb|(>)^!RtMw19R2CL^$Ue9Ej8kQRK;aD*@!>0n-h#o=u!q& z$#>}*6IFoPS96c7FFMSOO zsR@X^Yr!?eQuoa(@0-?DoKg-bP?AQ6GUlCQt>rA{d_4nsIeSpUve@F56O(?YD25#G z9dw5^9D07Up6Cosq%JlzOr^2Lf9|2`fTYh|l(1l}nBi2U;EN9mp;48^>_vW8^e_0IvWR zI5Lf5O@dLD_R2xrtoW!8U-HMgufme!#?v86kr#`Se4=^kk0v!RvM))lQJV@u70V~uU<^>hcTU>@xN;e>loB=(cg zXe9rKi~%YWjD+IUB<+z`nPbJpVjyop)k0usxVU&kVf2WahB_v}Y9_ZRc3Bh50_Hyn)==kwUyS1agdH+WrBAO;P-;f}(<;f@D;4P=H zsrh^>5;HRyMn#R4!m@|SN1B+?aQoVKXf|}AZ#|eo%BbprSJ5pX{Z`0vvbt3SMEWje zOm)x~*+^z?NofuC@7RMTnj7QBCn3Ox1R94kc>9(A!~cG;3qSeVI1XfH1mw!dZPM-d zWb<|;gpGuMN(x5APr2q@*flVUwFt`a{~mt?e}3m9~d)PHWgABlrl+i49=K*vHNd-fZ=o#BGS^R1W|xQgE8b)m}tJY;~=*44k!7KC6+gT#PYH&%y>77A&CJvT0xftm9fSHdyuz<8SV&R z7frch5t2kpr%5Dgp%tfM_g;MX?q=*MK1||P6rxj7;p1Y9Af|rJ-I9a<{`K3K9v6xk z6QUUuL38blyHT`x3-;!Gj)160_)oj*n&YYa=G8%JnXoC8IQ~*5rlX>Ut6KW5T z6#in0@1$E#NSaO(PH98zIQB*G%BsIx{s@3FCx|shgfqWW)&kzVGp&d%EoYFoy$}U^ z4x+N88kJ?WI9z>{g`8^WwxJc^R2NfSS13#*xltXtL7uEwDR|0UX`nl@w(2mBR8%o^ z*$tJ&RjO#-Xx6uoTrY}b$m>g6CAW;YLBvWRuaZ_-(jt%K{rSXZkl1NPDMOJ15;EZ* zHb$Ph+60#?#ngI^8~xSpiU0hM|GLo|IZ*qmN{a{j>4NVgX!^Z)lTMa6aT0#}zpo+6 z#SRgZ(ow+t-SK0{UM9(pYPpKXJyKqY>Rmf2aJags#wb3$q7UAqNtr?-I9TbzolMG; zOSb>$m_TM6W4ti^llCmmQccp!vC=}M-Z@9b(F<|0iv*g_Ui&p-8AZ^=`1zboIq)D^ zY6LsuX%b#!&>88kJGl8DXkhY=V^x)?EiI>(+=x?Lfe2B?kJs(AbtD;x76!7Y%`C38 z^7TL9!`woAe^M+aPbWc!E)bu@@u*|o;P0zVb94ye3tneH=}4TL!3w;tSUQ<6O6%X zZEJ@^L;_2}hEl@)|I9^tQbl$sX)p`$K_SWSSsZ=Q!`Fj&go(l@OWw!Df^l$-@;dYn%fZ_vX%)G}u{InEEbx(WpiX>&Y4_$I3_pooUI1y_oxUk=xW>!q`r8}Cu zNQz~>1Crk)_kk2jvUT>w;gTYh?fD#jfgU93MX}J5JB70cY7f=GlWr#i`*=kmvyqbU z=1TVl?Sr%+wy2e>mzOhr-=|Q|XeNK=6_MC^<}_j~KTX}Nz*8HS*7OX zSQD1Nh--s^Q3G70m;$DvZ0BYw!@KE`i@?axS%^&<&)J4{4pGjzS#h}>EY*SMj-_v& z_wB+6s=V!=V)SUvZzM|EJ26j+*GQ6ePqHAD6q#eB5f?O`%!Jy-qHa>pM8cGX>3^Ce zMG?UEw6e6b_>+N=Ju;t)vfxasVO?DdazEb2kl_x_uOr~f+yc(Tt&OFh&9s(=#f0Nv zK{*pVRg+Lj0q(+-@l^~DZ8npW(MVFEBT9;y z+>~X&j@K2X%0VnIwA$J;Ig~SVLO7FG;5{mhbtY*2-0(*(2BHu%DT}{Z#<>+o>+4|f z3>y_|g>u-u-n5E=JRuK~WnAd*-nw=jMhB7PMw4C>&3h41VT!FTRm5yqIn0&&Ir)ZA zVKCFz%mFV+a{Pn1T3`n!fi8d3CX7iUDUJE`MG!jBdXS&H8#YG|A#TEWWj(NGp`tE( zHx$0R8Y$D$NWLEdHzppE1VhXIZw;zT%Hhw?r`o&7LS|+$`o_Jv`t@{og;!7j$uK5( z1O&pH9oxi&BZtcmAv`t`dq4RM&%L-D1q@AmI4d2=<438skBE#zGpnnudiHrNdGH>b zH3cH@mU{;5n1kuya&Ui&fqXAKicYR{dRY72hDl^9|FIEKGj8RW=L&&J%xNL;6zpO` zr)YRF95CV%p)RNg@DTU$4+%)CzXZS3+FPk z;0R94H1&oiVb`iZpuL9SQ)%OAGIk>&bQD%)zk_{D3q2~xoxBUWdAyw9#GLcgwvak~ z0xRkTA~+%x;VhTyMx0%kX11!LmJ@;rJ{}B19N~%=UU&foIl@0} z8hU~f@an<^h)Wxbgn5ft+LWN%CUKnp{J zrB;IUKL^IMw>8xx_oH_ampBSxu^e}FH;ABPZNuO znF7b*aN#~w?<29j*g?IOWi7FZ@K4UWtS;YhQ;gm2nW`EYS^ zpb~MC*$XYv3-+`K_;@o{1xX;C%t+})BBIIFiHeITIieIuR06{v={jtQhuvKbXEb92J9`)|H^1H2=(A{5@twjK{Lo8xhLb z*sTX@$Q{Vzikq4~SB?JBQ3#A=bw#Eoc3@gw2@^E=hjNfG5e|J|AHMY##!gIP8BQq% z!j4J>;^6*6aBM!zBuA4it^g8*T00F`|BELuCM`)Z*`<1$k%GlFc{&!&9D@V-$XAS-|OtzBLl&?8(Y^V98Y%atO}S7cNA-lC4{C@~l1He)_lg-czq5fO|jr zotYRza-4+Ym_oy0N}Y)he)l`v^KF{!$&YYJoNm44A$gTS0@;mb?ese!)5964BwqEB}+nxqt`>C60hUm1z#Huzxe2YBG$ zUuOP-TFj!NH}~!gWx?@aN?p6CiTLoB&%i%26k~3?1MbNg11bgA3SiwguMA1+1a5h? z2(+*`y3m}$7!G&@w`3%svZxe!pY21pD2+mr<9HShi&(o`n@_1aBWLNNvZF%KdV&=K zrDg^NnUGd(Z0Xt}$?b4q4u1zNPT^Dp$Xk(!A&%Rw_ESuO?92W^ZNT0ehYps~0?@^@ zz0HbW;K&3zw$2>KMb&E6>NJuj^b_=_+l)YEIa4I}jDSmE5_Z!!-qgxfaSeG9%JePD z0pskM^4OIY$&sOxXiY4}fh~We(jk>iV-S{jD}^t45&b9ySAynwEICZs2ATK9rcH-u zU@8t(Hp1K8L4`1$pqo=x-6H%Y`=SVM2^|&2zhp&}giI3k(MgP?+M*qK5t21hlmxl| zDk^OqtxXs^K1R85M3@T?NHP~X8EN_9qKj1zxbEtpOMuy7nJ1=!1Vm|HSR`}NFq5S4 z6(q-qe|VTuxI#w7(JIJ-a4A76*G#4yd(=+r!0VU{uFwj0hRW zRMK0RsHzTeQ|{$rEJ`Uv*9y-oc?Ms_F`}~F)SDwsVb8wuDjxgpLJE@gxZ{=y_;g1h z6AZav$~W$07q^F*WVY7Y!#G4!)JT@^l{y6{k2b2b#<$)%lbwrUI~)!MpKz4#-3NOr z1)&pC+0jpOuu`~n*rJAsdFDR+J&Pag3{7egN!b36ZE&nTh?t4Vcsem2JGbw}M+x-={xt~!%cZun*AP= z6fs|V08OBqKjq}X)dnZmR!%&ewI~Ew20JtufB9Xuiu|}G+y_&pjiG6mVWkurUQ`O4 zZ+Q^wm)xmB#u8cN%I~&sUk@m`8q$69N`V%EVfC+zFmrY>QJ`hw(+?YQqP7w#DG{_R z6>6swk>g&{?d4Zi5HS?mm7&v|f~=^%SEISkW_j(pXgN zD}+1yWk+)r#?5&EdAa#KV;4N#7!usbVq-LOONXV^o5GE0okON5^5VYDYpJ9-;rMA! zBu%=N{&89yxU#?4g`gUCg@3GAS`MdMkSpxHQHTAW<38QD^K>4wM$U+e$f_DSaz@R#Bxmf7epX?n{~UwW;MBUk4W6ctaz_Uo znXfsP(0P%r!ks`DJNKj91h{ONVXBo8BAri_Y&GGmnj?0u!>MFOe9}@@kWy%AZ<8I> z#aBUS1(WOoqYz?xjd_6W$@1~^?ZG#&q05c#fTwNKi##A%SoSWeNC5DodcQi6`9i7B zesjrB*UFb#av-02hhCI&B64P2Q@bY0bSxsHnSy3#oz>Vs!V^xJa67VG8OkIFA;Q`k zh0H8n0Gq1*TlskksgJD^vib0{jiaWGU(E9G07;(c1j@Evfc{RI?HBHI(~ ze67D136bjdE)^dllVkGDliqDua~Xq07ZA>mrbxwE_h9zL>BFxiK!mg%siH3n8cc+1 ze%hDoOi6c`agTBKM+Z~WUsjYmzuLCX#Aw}NedHm(=8YthTR_iNSt>;nQ-{Va z0LNXGNR!9@4P~FfKz1fS$obUz?WxA=-qLmq45<2-w8x{->zaGm{vlIbLF9y-P>;fp zck$3!a#C9>&j3ij#qpi@xzJi&m6r!#}LfF z)&#scB?%A%A0`H0Uj8oEQeNW^#YBkgelcM4ZbhGJ!HYG?>laBTDG@x2uV@1W#ZXEw z>~Y$1+WRjB7=lL;^mqR4a*RKhnN6{#oYO!Cs)eVE-{Q06V?^;rN}4?y`wT}{b*KqP zSvwWUIjjz#TpkMlj5G-!n#~VE5JT;JWjgnu6Jn*}h+GoY)u?wN$l`HE87x5c%f?hQ908rSFnT0X+J<#A?^*DRhc*Sfx@dk zAF4g_bo;|uN4M!xVE+XP`B>byC=3e_(L9StrjqP(2bF$uo$?1%L9eVl!v&a@WZep<(W8MT7`Yo~HBd{P$Uz%D~Zm^NOiN?bn@z4RJ`=96@ z1QSx6!HX~xMjSq;Qx?V~PqN`gxZhnY6Q# z#%t4Zs&#PuVa>I3G?m#6b|Xb=1zVe3J`Dyl?-kq_*Kgyj-Z6OF&)TW37s7vrj4IX} zw2j3wTqH3=h&ZvdL0BG?o3SbSpSpRXMqM`tC%h_freL?FdG&+@p!<(bB=hy^h_PC` zZi!@2F9r^5B{X!?Aq%Y>cg!v}TToytdXBJgCaJUyZ1U|=0KtO@b*U^og<3uuF_JEq^)D5lJArv$c8DoaOPZNqwok1^5u_`jab5FBFg(X{#3Y za99P7{%w0fxX}J2xl&II>i$X#3Qr}sncHYr^NVFB8VDTWw~=K~d9Bi3xp}*$_nMMI zm4Y0|op!C^D8Sp$o+6AF5+@I_8io%3J9YK)F8hr~vMCU+C&p$q!c0e}ZOLdkFi0OV6&J;BIMzrS+%nvE@m*u zLZKZ`xkr^97c13CYO>Q1K)UpCfe@+p8B8827WPJy1Sn&%>@n|kKL+0nNzbkkSXcqi zt>*ud-1@wG?K35!&rd+;zmdxLO~<3Q9mV7zClY0F2}`mahf*EqHL)&QcPuZi7hm^w zCMe-6JW!iSkCe_n>u;CnET^HlE+%J0Kx_Yt!z13#v>(1rqn&9cMB8t2A0`1dY298EY1r&4V`>!y z9=5?{$Qn>KLm_Pfl{;xawIRQr5xQoxF9i7nlMpNep6liRR9Tg-e4jkF3$uP`J?n%`8WdlMaWYX2UB*D zapT{^)U>M=vlF9(88Z#$35n7O(zMmA?V#Xy`owjJssqPJXz` z5wkw0wkR4REFDX(Lr>N_mn|8G-_3U%jnpn$kXzn9KpbW)Tyk#kG+LXIVpE#sEOz)c zWL7d1}+8M^xv82C5EoPL}L*?UNLc{&d zdWTk=F4iC5mgsDS^Z+G+90z9wbqkR#_M{3XOdZNi{}F^M;DoSEM9k5KeVDZuh~wJ* z8{ZjW<-_$G`qq*hVw^<%t+k{Y_Uwt_JA)k}o9K%4Y{rZbYe6~yq` z{Z}iyJ31Pc*ta)QGS4HnmAOR&fol$#D`{D?wNOp*Z``lP1Sv``5HOYs!IuGK&%0d} zV4=V`!=322{o*8J{Y5x$-}S4%K(vSqmuYgs3X-f$O?sEIc)iPY3}S10V*v>zR-nN+ zqXz;w;gJ5wUivGf=PTo9gyigy;)d!r94w(EhP-VSYIVsHDahIJh>J8tE^ixuSYcTk z_bacd0Rczcd&#cGb>D|Yw9T8Gty8?HnXox zbglXz+HlWevIJJQE|oAnG1^AXyat2NxmjR)XCWqxdx(r#bjS=J6gewF6&xlf$ALIg z5q{`4RdwK%c3}pKBB3BINC4T1OPPbE7Eq$N6!`GI%WS&(T}~>|iHR@(Lj)ER*t}BY z2WLER0k7-#J9sR&>#pMl4Ps9-fYFxyjGM4F5ap1Vgb6RyNob(0TXTSXsutO92Y%@N=e(?q7hTOcn)IEw&tjVMw`6L)BqT#_9a(wi| z_a{OI3U~;^z8#!_P&#!jx@;-5`)M||6+#M{NW)ef(Q*oLDw75Xh;+Z&1L(x$-Y6Oj zS(;xW3?8Lu)L^*$yAz6ZLCH{H2j7N&Au%4qUoriWOg0`Q{2qKWI4E+v3Gju|8b%dw zQXVsA)Kw+>w#kgFB{B!NxU~UoN{YH^@M>7gzu{*ufM98%SHnIS>c`gxi4ig4+u(5-fh~891k{X;(H6dqt1{pUedY zfc=d|3F0rNOW=)5K&SOQ)*nyHQ{4u7y**N+$$RvRe*TXuoeyiIi&T#YCBM1)Ux~>J z8CO3)!#m)6j+VA|yNP-o=zb5;{toS;1}i$GeoGyt zT_MO%l+Vnh7^Skymd6`LcvU1k>@=p`k`Xe6E5k*)3knSLUX5(f{o z7J?+~eickMiM~9p>Ut^fb+Tjc*CW}Es7B6YiesMnly7@9BpM9TJ3aUD-@L^PlufS~ z5yfGtNW0m6ziDKjA{1vtU?fSV1Tb}?qbl=ug|!f$kQhr1CXp!_=Pw; zKnEQsL|fHRP!y;D8JZ#0=F*@x^2}iFQY(>hkbFWImMDTFvk{nj6>Zaojom`QRBMfE z-n@$pMf>?!>m#^0wRsZ`-aA0dEA(=4t>wuX@WzGCMXO353w7SbPWJ)y_){$TE^~Fp z{T>u1Kp1b-pa^YDwWiu*Zw?V*$)ymp)*ofTe9lL3Aa2|+spUpiFlG8!Cefb-g1-j31+f!+%?hm(yhhcaJJmBR9tsIo=Y|kt${{ z;2^_h`_lQMLn~rQ_o)z#0WSG^iAeSO_jl4o&kPx&3Add42^|XV5oV2XkkApijlQ%Q z7=^;sl~Z9X-KOFG1Xa|;)0rqNAPSK9B~@v%$c-2t&De#!ru@)=z4MRQ+r!DN zx!rA4F3J+DGMG!g8*ToymH_%yX3)(`Sfo^o=X0;#4R&;R?;&+Sf$9cP2Bq|tWY(MQ zi>UBE+V^Yrja7L7%9AP0^^uzRFIUHl5&mme%U3K$?1F0svBy9Lt#p(stg zIM8ZnWg3v)t+wht&#A_?hshH<5x>k)B);l?Ly5+V+73wn)Qosg5Y8y^?(Pys9&|z_ z1x(m_qWSp|yu1W38@1J6)P}@$WRWZ+q2$M*wirrZIT1K9K7&^RH!#gqh+5+IUzt7D z7aCgt3np2kTa*mpZhHQ85*L@RLQt|BY@kkKA@24ITyuAuk>)Raq{C6lko?;5HIMk-Mn=^zkz6DZsni*5bL zr|D7HmB9JCZ*MSkNu>6+yK^-O{r&~M6*U=(gA%Bq@v`Aw&7gQRTehpO%_H4P8ct%z@e;Cq@Rx+F>T}NPG z0muj1*c}$aRG_A(a^|usd?2F+99G-dzu3*UGX!OvFM*$_ECILSMmF*s{!VktuT8%A zQ{~dCfsjk=JS?ma@6teqr4TmjClL&EU%`rPZsgK!m8?uH49tAWNh*>z=)+`S+l}QH zMy_i|s{1L+FhayX`ta=r8{)ttw1t;K&(Q<>t=1MvAV|`t9goh+6?b7Ms)YK}nXfWA z@MlGs{11YU4YCmoD#_ejVWNPese+M4yh`Ql4HDZ>8N|aQL|Mc+Cp%w*A^kg!%h8Pn zhz%beO{*Y8oZP_Z`K8OliO655WCx{Updp3MSi6E!*|+!V55{glx16>+>Ove#`4Ws+ zMIt3lZ6LelE>_+M5)!Z2up|nKPW&o#7}XK| z1HXKEVHmF?3m%WlDQQm=8sD6d7EX z&(_zcuMBp7dS+&v7(k1NVSzE4NxB8Sj6y(i&|NJ-F2~x#i)J|LH)Ly#kPr*4`^`t9 z70$PNjF)$#htjbT(_58+p?cEiXwN;k$R5^rpvoTmN}Gn*&Q6*oACL(J6p!qIo<)`_ z0pTjHNOf3y_^Ce1-pgK>@d_^#=fI?)ASh{JoJOj}y{VL1-5VDNW&=Qk@rQ0=Js5bf zpKPTqW(kzST1pL>(FW6!cOaqWBKNBQkL=QNhB`Ssbc2E3C4}w`W)>al^p`G+VbuL? zz_n)tO^^c-J|1n?o)BH_P-5vs1uKQWaLmNSgKA8|B8pK*dp#;3gsV|& z`gsglRLZK%jQt0j*S6N?y%*X%_V|ImsDJc=tsR7sKWxzsic2T5bQ$+nFso{XfZ-~^ z1_GY1d)U^>vW4$)^T=Fw@+$~+_pNt)nagamH%@MXZ9k{%H*!0xjlfUeiG^BkfhpZ3 zI$#Q*U5xq@hENf>`92A3N4Wl$rY~#ia$(T@r@?KxROdN3@M#jX6p2ch> z31pC*2uh|~$FhZDC89_kemgyaR7PlPtK95H&(ohnw}j3KY|%XoQo`v}^o`d8+mrZM zx7*$N(=PYd=`vnF5(nJd_{N<9b54pNbMC#EX??=mV@0W^#xqhs=V7 ztE02V*4#L#Fp383^{}@719GQ&hmw3WPb8Ax786R5xG5r(01!=iMm4p%jS70gowUgk z_ott|lk;Hn-7H|ePOeHxSAyz1uc%VE$CvJz8{xm46zETKEEnR?*AmPwb82#lgU}`Y zDCJKIOBCRKhYVQfBhyNh*PFg@qOjOYi-nnzyHh)cE4el1KQ7LuVf-#N6PF1~pe~kc zwZw~F#8deI;S7$8PItqquN-2OVvys`_(Jym>Z;$mp1iY|H@8t4yRhrnt)%kfO0_mw z+UvbwDe)qLKFx3R>22%&LRoLV_62Kv)|0{BT=)QziiXaB*wF(QfoD7b5vBto*xxR_ zn)5VK!mK_ZjO_ptXp(>2W}g}K!Z#VAae$auu*pb^JqD*_U`bSFoHroQG8b{(vqC)S zKhvoY-4GvA_RdzK;XjY5;{LT z(Eh%-Z?unFW@4Py(~t2Yfv{(=VoP|}r6@nDPe!FFvLKhPzOZ~3`J9$%c0lF`U~O$W zr>Ft=GD=i#Jo2xBGk7F+)Jr0=ibkY9H!2AXq!G~odk|kKO4*<)VGrm$?csqc!_>RM zDpYA*j?*lPT|rxXa*D#+6R+rg9AS~5=^Q<(&%Md1C9B4*R3_)3hFO20s1_jtZL6_E zKq5f!^F*t_Mlj2Ve=v|S4t(!nPmmvx7)L)QT722766HPd0Zld%*VEAW%ERoi zl%a$VnkrnaRF=ME@)blnh&0o;sKf--X8^!Nm2)zVCJT^Yf)#NtSmTiktiNC((Tv?4 z8CA7@aLv4(=^P^M6{ZM7blPs%SR^V!!0ER4uPu6`V~BkZzv@3 zgERJtr$(hjVpC5|$tn%XN%bF;f+MN?wfhU^OfFA$x@a#VgMG9t2&4C?CE}-^lvSJU zy*uo4{XnIRM_TO>Pg&y6lj8vo27V^W@CQ`XO7Id9PxZ;8JjgYvYqxKZNio|2-VUX< zJJQX2;Bc}cKib~oNtJ4yK7>hf#Oh|Zsm?~yRNs?{6Za{VH~vA3!F&#I`E|X+ok{x zJPcKv$O228r9lrLSiR4p7Qz4Li2H#P=I?Y%R|jy$Qq`a+77w4ZHO@I8b`TJ07~PT% zn>egKJjQsmmbjCH9joFEr@b-d>Hu+edI2kkxd{&->@Pfm9XjD-3<~(ZU>9(`-t2{+ z4qfh?fFe=23`Xm+jr7VF+n~;0xkCz=v-}Llf70Jvt=@c{&9KaeF8!-BDAiblLhX%* z!uZ6*m&6r4qc*ifMs|3l8B!xXK-~#@w!s=Ft?8h|BPpBG?yve@UZ3UJYXXU2&VsA; zNJ|NyS3@kj9>l<^V&_b@3gh=ZPp4E{0bq0{0|YLqK-^%Eu#?d01xQt2 z9+L)<9k9dV#<)0t#6DK}D6mfUh-K}otl5w~ zhdA=enOk%Y4@#yOx39Q@5Bfl8LmMfz!*BLg;orp>VS9df(sLj~&B>ed3BNCfZwfMW zOdtCqSIKiSDu~C@u7RB}-#NmW$P>*)=T{A;gj#05W$m5t&maTNGyAIwT?IPb8|_$$ z4u5yv3Zp`Q0}HN?xoLlFpcGOTWs=?#Gsml@sN6f|t(++&AvY46x>P1;rnegd%Mc^| zAUL-py$tZJkn|n{c>d&CU%{7EL z6R=u^mOO_VhGlC!1xgRq6rXLMdT1Gg#~zq2Xq;pIE7LsuqWm;R{EzJ zW)}H;JV{h(jt#W~GLTa`sZS=E%0aMmv&8MJi@k+(TQz4C;fygT4Sv01ot~mRDYBZk zXHO5r!!D~U0I(?uY6{~V@d?8m5Y2=F zxfTeiw+sH3#E#-u#Q098fkPCs|M;LHC8+<3^9E=+y4EnssiZkD6Cfr)l&{DRHekOz zJv@$-?SBpVe&-;}fSUm$18UIE;PC&?=x45b%4mR>zl*s?iVftr|*MCO;%z?HX z?D4}me<=DdEC1lI5d3y2@`D=<@WloHKbHZX3B*KPxvw16C_&@$_mxp9&jAv^ffctI?rFXPh&b|2t5=-*)+gbQRhVtP~|}+W!WNUiA}~UJDQVrp-?_{yP|G zfS<_F0p%Xa|Haa2AJ8)|M4;1(x z58!-@#S1@){jaq5*a`Ddg7!a-p1N563k8S&@c{2zCR_S%?smg{RiJ~<6Xq|M{)NKh z|9BwyrJSws@8a~M092wwFOwFpSN;nn;QR3)_^XVk@ZW?6Q~ncHm8?v&=D$!u-+w&( zQu31cPxPw)gr$|8Y18~4=&ye~0F=BX{wMnXm$?6*#Hkk*Wd5%fz(4O)@c)G*+BuSg zYG0b!UcZfHDSLQuwsp0Q`xrl0(pLOD8CoEKf96^sZys`0{e5>OVB6%Q**m_RJ6a0? zz0DWPb)dXlo_V4Rn(UauO$T$g-HcLB>lrp;j7DVfsQ|j}E$MWCPScKq zK%@1qL|r*9+YXviCL0=hGf!!6dLh>(Z^W?SIj8gZwA~<7*H<=S9Z#G2lH()Rqfv=u zie6tYZi;E&0Ur&GY-+cuuP;Vzc`zjJM-6ZD!Az&KeUqkU@8!Z;P^$%On;h3^lT5tE zkka?wIcFm^?QfF$M1Rsp+`I_%mbso&^i<D9Jz4?{^3v4((cwYU5CVMmUe@`d$?`J%s{jd2;`;KM@sf{W%)a_E zc*oTR=i3}#J-MR2ST?1aK8!FtsiiHYPoYU2UV`ik$V9b}hg?#kH%$~hyfDqVjaEa}r)r&O!LwM33MC1E zYYR^mUJ1WO;gl@hE{vD6&+F>$OE^E8hSBAV@@1@P!&b{$g65`fkQ0ICyT2YV6;$o4{ z!%vwU3kQm!B*1bIHPI6s$hYNo#R3ujdXfB2c%41uBv8CQJQ2qSV{fO~hNPyi2ZIe{ z4^;jvgqu5!7OrB8_Rg z01XeIsgzU_?=N5PT(!ymxU#DpCziZU9ApQ+ZtIFoxEUz|BzM;#8XJ_-w-_$%h0s$M z!TDMUKOkzDazzd%P#qx|52|ejzGrpe4f(sqbux&O{{hYCWkB7IF^{V{$*X(*u-F-n znNmh2V6qyv)maN_m8If8ty|WY!HhVH!jki;Eew#3Z>pN66wOGpX23*1=EaJ*lIDl0 zl%*^sEi!%4I}X-DSL}*933jakgGfc537lj{5i3d}>5mObqGZX_i7viFO^z?5k`*r3 z=}qq=;rSM&=d8oR>-<7=VQC>ej|(vmDjN(xPR^^N`~`*E`K`qZZ&f+1nRUK9IbQ3a z$=-HpXt$jYwJZCfLZur}Cqfa?p`x_bsm3<$dpJ!k+DZBBZbZ;=n6-4X=HY%B#4GG} z3)zvO+WVfc?kK#mF*qUt5i9vx6bt`mbBFIXx+F0KEYO@XVF81>cQ>o0`Lf|g*J&t+QUwyV+a{AFa z|Kai-t&BaVwF#5Dax>JiS}ye^=CLOWyLZ4hrvb!`PLc{8rsJz_>-_$`K#EE&HM;9} z&swmg&T6sGW1j|d(T{$ICAQ|>2|JYjW>cY?wRRZC!RfHhfVH{IO94m0avQlyaLNpN zH#*#y=kk>4(*(r;_Xk-K2$Sv%Zug72S_51D_S1vU_627(G+h_X@oI|%?^@{1!!PEg zyumwkzH#er$HASfUE-Hh+A2steQWxfE%)^*0MRX@op5e+OL@{-#^6r(k;d+ z)e89CuLZvsw;708o6`|8jnb&r#wcebkhBXqh8*GrQ5wyts#Wl$Zf`$f3CFXNyEna5 z?uOketcnUS(7*#A>gT99n_1^wX1|xVENXQcR8V$e*TMwI_$qL8I~EUZuWKQev7_LWzq|$Gy{{7~b8e)at-X2`X1wE`*UApSioi`a0U>n+QV6l8o28HP^P}_z!dWrSmqWoh^jbWnHC3 z6mAKBsAK@$H3hNOC|Vd4CE&WP zHp8|l&J!?1Y;DmetjF#i&e{(fuAF)&rr+-is+A1kg5p{$F*(cJOkq6iYg%DUJn(=Y z7Xdx4F_cUwp;UG!VS>yo9R-d8lps&`{sg?>ROB<9;Qac%{>N^dfoi(m6ptxCip`cb z1!-Zge#1g1vqywfF%3009@}oxN&9mudgs1jX z)>corzlvK>%RFK;hH)p{huxJ34<{TjJ4{~pis(*L1%{oW@ zpRnZ7?~-=F@@15gC-0{>TJprG)J8LiqXLi`nDLrm>lVB6K26$+qtuw54lq0+lX&i@ z3NHve`-uhXBE){v>lBs{FFGU`(P6l%KTAC(D^wxLHO8l_CAQv+mY_egs?Fzp?DtgCG)?*tte`laA% zN7-bH+H1sjRv|tjwm&gxZ7Ngy$2q(eEe&CbnW7tVR0$g(Ko&Z_^npkw>f0eAkVA2s zH#y_{$nzLA!4J&4ArLk67mZR=X&8m$t(H)b5TWB2;FcqnONuTVeRKwQ65D}(w?jGn zH%HASIoW1Y6k1ph9PX5WmH^}t?;Ct}2*x?9BBl~s>>d(R$22=2~aJ;WQ_YX}KC);fR|00^cglXQGmOJV)+mrp|A;KNqb**gLW(ZUb-ct5fAdz?vX1FEB`@qr5W z2zY9Sg6SjNH2+ZqC+DC7g!~cOp|)xJJC!QB)7%hx0uq4wQl$|I&#wUW&}gZikJpcl zrRb(Tt?~Nr(S9x;z@pi=BpKqzowi9j5-H{BTSg5wp^~dn>)>^zJ+_iBgP0p+NC6(3 z?nJ2p;W6KxUkpUMAzH5@!v#CZ$VhDw_p=hX6GxEvRx+q0gMl-Uba}N3-aJ2i#}K z-=psz?}pqXQB}Pz0d_piX*7)fwMVU&Ns?&gU9NDspslG$?cW!CrIxND09{a8o-M@Z zOp8s8_ZMU*qMDOx)y6rF5wbW+sdrAe&S|RBF)n=GsS58z)t6lsn)y}Cgf2~Yi`zyn zu~E`8k;R*$)CbT2Zkca!f8r1ex4H81M!B+Ng&=nHLCq$0r$^_L)3m?tMY}R<94nK;uXY{A(jgQroSlG4 z+2VOAnFlE*nx_xta>RMKSu?{1XxSr6=E{@VRyG zwYdu5%51eJYfKk*>F@WOzpH({N$9O=cHHUw~e-Qhnu@;kd>{d z=j&t!lp<#*w2@YGniOjLAvHF6y29W@LsMsF786>9l4sc_cOBO$6c+T3UaeoStDLH;A zoWA)We`vQ1^mX>`7AbzWkTIld>02yyHJY#fb5)diqKT$2zFHR82v4becB1i_pGL5u5)oUV;zk?fA(-kmWcZ~K0Bas(Gz>9Yj|HyRg zkW@5eM9ESSw@5&X1W%V^xyLoU14V1!8zY=yoMgSac7n;)t!&6CUD8V!d#ak^%+Ogo zP~jR=rSen0)wgp7vYU}38 z+(fMz9xLonf7NnbD%#q&pY^m!Hn|REI5DV#rdqZ4dArsGv$7*EMR;IP2#vizyEzz? znT7P{ctB<5TriJxy_jZW-K9$nIPS1sO6oZ4`&E0PeKQhvRTi;SbB>FvCRQcva9ZD* zz-!+kAwhuvy2gL*y^;Pd^L4xIBrU_Zh$I=BH_3&;Gw9t-uBFXUcr7x(=^K-fAr3`1 z+Um_8Zj3ncw$s~|eJ3w!Oo_^#M@?+dY1N^C$AhIN`-gv%JhKX+*#v84lVh%&Wl!h$7?uR{VAY3gZ$@TZaw{ z{ygGI8Sl`yYx7{wYvDeZIkMWm^PL&0G&~3KICYJ?OG- z1sc`~`SaJ*{3r$~_X{#R9;gcjMaG~zn~3p8e9`=;+_YE!Vs0d#hD0HSVb`0{F3uyQ zV?7y5;_Qx-Q1*^`DxZ~NSCv#5CPW9xxPSoH&D``hRa#fC71TXNVEH~ zXnCTJ>#56;`b*eTm&*A(h6l3Gr-EbUCG@}sMKjxZy9){=NfRBrpT38f^{W_k=eojS zXg{F4-EW0I&T36-6i+chC-TA^aw^{mDfghWx1cwH(~CsOiw=$oyXhE zDF|L0ejDaBM3u4*(mHkE$s#VtO6N*2OTO9)O1egkZP*UqEZ^$k_s$->p$gDQJ2GUf zUR~6PUZlKxjc`tm%YWaVurMFkF41bJ;l}bv0vvz+6VrOYgsM-{9sF3;LAl%+&78q% zI4DV(ltU*pRPu!=vgPm02!VQgoP^(8Oa4jWccw0VXMHD`?r0svfJV^8srR-`% zqtEGhS7SXXQ9+F5<0xK!7Bbq&Hu@NOYd(g#pq&xWSYCg-bT>)Y{w6nC-*AM;Z}ytr z5pJ=-+~`BF)Y-1H6d}*;!5G$kJ}Y*3YPUsEL46vm`%`^+cOh6zxHKa*F3sF$BCWj5 zt}WsdH`Jh<;&|w7uFJ73S1hJs*AlK%3mRg+h{kYmW?WutvJ4Uk#TGOqCvP((f#{%F z%7eYtg@`3dq33ePr-k?z@RhQ*D+l26_{|Gk0Sp|8$MtfHweY&jj}=2&N#gY!4*|{x z15<=_#Z_6Kd9*7V{JUVg()Doj+O|`7tkRV=zb@I(*LHJQCTLbmS|*7yNz)@RDu(FV zmtgM8JTw`$M>u|`*5}XxnOSbMYAu>oRWabPIO70Nd*!t3`duJ4rxn6oDgeNjoCTb<&}7{*9(do75EY6^Fp2p z1n(doUrOa|Ba?9dw0&K;o_GIySjX&1f%D=1xUZaPc;^n+f0jD+d1JK#;)z zQ)gT!;@GE2<#UhKo2TxCq{YZlf{)`d21c6vcw$-x;@O~ANoK`Ko-4zUozP`UutoY7 z!qo9wK!Ze#W?$AOuR}>q>dXNOC@ezh4w9w24S<>myK6M5sm(`VMT;^$y`en&_q!gU zO~N~aW}I~VP8JMSOE)^y+znqf)({U<5O4>!i1$n+wk#?5y-c8ew!|s#{xoHpL#A4YX1im)vmK&Q zl36*HXK|=F9WgY8Q5vJ}F{}fV@YHa1FKyN{O#_iFu)F4&%cU}dBe0>iXI}u_w_il> z;3b|}a8&7Irrkj{vD9Z`&2G`n(2qASt3U~gANF+3N!6X{tsEwFpMwzk2qYKV@lnef zXuWk+swpR*{paN*>;&hc5i>6WEL)x;$fDlTAGjkN)fJ_*+KP7D9}bYC&KJd~nE`XC z>Tj!^aE1!^l1?D84aF`dMw5b)iHJ=J+3%;+7PQXpU0AF>2u~e}Q5U*jT3)pBSohvU zSM7j_;leTUFex@%Ym3V2k2If`AFMLC1fE~7YOiyYYBv$2feX%dth~B%HYzX^?3AIbRDUPn0$c4x;TAm>Cy68H0_ch)q8Jk zLk2jL`JmY(+jyx*!gxZnjlZ4M+mSe(%l_kP-4~wyiD>QU?GHBZ0W#Q{Fyek1=d^cw z+*RLky64{RzU58hKAVN+eSx@5jpcazO0#hu!J~eqynzX{J&%Ut`u=W5f3RVN7ZlB}Qk>$P0A%RpPR-N(oWlEl|E{sEJxaf1`0kandlv*wresh7Qr zqNRX02M5TSWH2-Rd0yRR08B*MJFi77Srr17<)c-O>GT^?#k z(%eh@as7t`B@y~z%UE{>mz)3LN&bta^YeqR!8rl@?EIGm`!S98kLlN})-J>U&}E@N z3>s*l$oGE}r~go%8E`*r*@ow|)^_c`;GZT;l%PNY`9A++9w4e`GUNwo(`8z9t@bY; z2lNkr2#`C=`#((K&%GT9{=?+GOh~G7g%u~GJ$M8??V-5s)uN;zQ=hpWm%rT2q!-@~ z%zdrfwH8~`Y(-B)QZYl&Jg?BMe}~`dq4df&p=jPM)gOJ(dOs0a3V5zAevNuxQw)_; z6+8~ir=a$>y~t>mL)LK8PAjOL?BR9$PlqgbSB3j_YI^PpT5feUY+qwFt9N~uSma26 z==MrKIF9uv{^HTr`u${$=OJ z#J&&C)9!74cX!^yh25`xf4qCUc5wDnuptT)(~B4uRe>f9X*HA!)2ht~r@Vv!fCQn( z%k>ktc3yUxo3+($6m{ERg_C0%sE1SwdBE{idUGYy5CFrR}nUO@l# zYrnqdV&piBq(6P!QsV`4%5u-T&%9@^cFc0*Id+_4%=Q}|pGCcL+R>nX*WyTdZ>hq7 z%L2P|pm4|m4>hO>y5xJG)i@+!QvyE{Bv#r$Rm-kJiur+ z|J({E?Kd6J>AFxy7m_W$qIP^eVDv`vVc)7g>hTq8yITK?UHlHWmZK$W(>MoYNC~PF z@3$!JI!DpMyxdOdpHUxUnI#@_61;Z&C(?%RddIS@mZfNRbao3St31i*t5K9c%XWT? z>fneROf&-qccVyk^1At?cD(|*e9!t#U7Pxy@x5O;4fy>IJqnL$&Y9zH)~tHUGJ8nw zlcgDUYRIuYT35qXA5yWZdvfvfq`Vq$iLN|#5oQ2MDqG&T~xsz(Oi$%g%{~n@d@oZ*rUA?jx{o0IOA=taaKK%lB zXyVv&?0J#L4$IcGTO3$4-KDq?@?Sv+?MhJT0N(v_CS^;?d6lWP*AYA(7tq4h+lzu# zx8nEN2Vq9ssawKMiX)ZG0jx3Jx3Zehsy9$*DGFL2kq!klzi`j-GW4?uQ*ZR8Hx?=K zUFcmlEl-7UQSJ71d!WkZtNGICF%lqSQp(sqtBxo052NB|{)oTEmjWBPWE)+~Q*NMt zbSQ^U6%H-EvtC)>?v7t01rk*cKwBVOa?c|u(P#dcQPTLt1-MS7^puWW8d~VB-j&Pj zJsyCQeS>AsAnfDOCYsSW)ARavYvb^bdYHx;-0g%ki8#T^Skwj2?`t2f?uROUcDSNm zO6%%bX&EC&=RfSI#p4d{@90O@4_C9vmB_tcp^<${`VmH7XV~UgKXe@-s=JTPkBiZU z^RM|fpF?tByT9CvXBSJu@+|Y1_4n4J-EeF!zxDr~veFFhd@#oI1M6ogvhMlH6u78` z%X9Vg`&0t%l*kf^Be^E*GPmf9wdUXN7>^ISD*=9IVUI zX3ki-R76uwK|V-H#B0Ghz;i>a7X8*N(I#S)lqDa!IHvq*@M(21Fq+@N5O>Xs)IHlG zyQ~)!=0WPu6S|GhLUeV;^^SosN0)WOU8~F<<6qpm&T^jIaZTTJh0j-Ybeq0MZ^kdT ztSsj9v)w5+U=LZ=EH#QoCe=EV_Kr~(_PjOX^CvOTOcu_q7CR9~P3*H*g{#aAOpV)_ zs+PJ5Q3?Aqw3ufv|VlV!;P7UQ1(9=TW>bZMJk<<6}`51eK5P{ zC46GN+|=73wwHAUjt_|5u3H+e0n85Ukbs*S2Yb#n2IfBbxx#2gjMY);Si`5D^b3-e z^SQ2nB@c1VR!Sw_f4*d{5xvkUso?JG@xq>?u`++3OHP?TD3XVA#Rdg@=i=!$Iy{+^ z4}{Gdhh}2y12vu3r^%VmczXRc_egMu)2=(h{bkeKe41WXhq`iYNI`{^R7`n_>Kt9= z&pWuuOj31ycFN;67wSJ|fowXsujBfA?W!UyaQNk|UPa11!S3S09N8q0KD%6wWU+ON zqm8sHW~IU)Q5CgM40effGQHKod@dNHonih@O##z|X8njM&#(g`ognMj*u~e53HQBg zZcZEM;h=dc#--4?o!%FTQA*;@kM?+$gfc%rrc`}rdhk``agM6GNOQI0iTTXbkjVyjc25A4AeDy-4jF%=}&j%%k~(4ay$ ztIkgA-a=r+T={p8!G6p#Uyn z_f1v`iXDY)+qzs36YkRf+X%Y#=zoKQ5X6d%QO?m+r%#-O!Z)H`E8p)bj`$@)vLOnf@|7a9KX3)Ar)${RgMT$hQ})7>$s!rcC(mb^ zgDU@Yf}tm47U03abH;c8y>qUUh!GY--@pGB`odVi=uN6CK4n1pm}dlI&MJHu82E8t{o9njxuE!- z|Mb?;Rni62q4u4z8BqOw#o>Wqim)CD&0J_+u`p#R7nJUnPyuE{U zJbpBtdOjDblUy8Xvp(Aq{=>!WLrO~4@H7>-M@jO^{%I}4z&WYq?+ehw%q8>If_J?~ z`3=#H4b?B>g3ug3Rpq=DbzCmq7-0uA_^;Pltd+n^+%t3I#2eqEIUwJHg7-GX^OoM8#>A8Wm}9@-wXeulg-$8I27@c+*N>m9qTZ9bwrnI)Zp7(A_-OeRSHKz!t+$;SRkYVU0m(TDHb&YW$y}ALp@UDg8kBK<9|=UePt?;cXT zCXojj7Ea4un}2A?CzG#K{GbBUapCf(JfVpT`J0I7`wmT%!>`64`3JPMcbOHEmnaCo z7S#<(>-oQKm0|J&AJcE~;Po;H?Q&Lrb?XW@al-FS@TNEzXf|H`lN>yobz9kb%J+A3rE3T2tB8 zXa-B5q?3*}y;Q0}0t@%aN4ngy_t9K~~W)tA0~%0%DBOg0|WO z6=PJ!l#GG3ztQR_oFy>6@H9?ZsIWPRg5_XfypSKc|^VkvhdVOW$tC(O*k&tyP zj3Wl@4T&KWOPG9Pg=ObfM05FMKn-}DQ4Ctl%R5iFxVrJBDDp#fWGl^Uf7Avm)#S*D ziFkfxn8-NNuH$~EWQ{K@jLW!m-mJ&`WOUC;tB`G(Cv`lz^|GkI7j%4Zii(fwE6PPw zLAKfR5pi7!+&+>3-wT*rK%TlnAS|@stxoSzDhkV!46XR*ynuVV-8e-`~htEQUNziQuLWaizQ__S#w!4??;#Xb)b&2`IOf# zZGZAq=!CNH*s|UQ^irKo*sfb0TluLz;`~ysoAL`kd|-UswsXNbIELU%s0ydoUpjpj zJvH2Y0=KKvi6NTxfi!F{K_qL7qot)&VaSGXFTi#R{>x))hoD(LYIZ+~16BKuj#Cwf zY|P%ngZvDKW4yBPR3XiJsN8x_4qE?r>9@5w?@D*nSo`z7Ktn1kCEDRB#t7i6@w^C4 zFJqA$2J_3$aS{YRu^bcr~BtKN4Rf$Z3+6-l$0BD*l=Dl-JExPGEldAOAy;4}XY{Z=-3Ft>97BlJ{ zBXP*X2`}rwrj@}cBHB1$aB-EGd;*2$zn!hsfbo}p0_jX$eb$e9SYG(3@kl)_-BXHW zw$SIsDz1Qp3hm|uIn2ZaKk56jdt7!b@eeC;nN51Pl3Pi`6v`t7<}D73-;YsNkQ!8h zNr%(!R81}zm2j07FpQ?X_Sm1~tdLfcau7EPebg4HK_j`>jm#(f)hmHEL(JKXkOEG8 zxna(GLH75N@}?7fRkZv>-cUDYmbcGtxF*_yXid>d9w&B;#Z#?<#y$B~@Oh@x!9zhS zL|7j=KEr`OLD2a!kRkvp&5k;<-@M*@x*m8m7z)%5)# zL}Qrc%N>m$ar*c&6?_Cwgsja&3{vG-b!fnt*%_T3{I|r*XJNf^<4SuElSKx0h?g7o z?yO5qXdB-SMxaDY;Et0|gtc019l0ncbvp9&!(~hjG9)C86r=I8`w&m=NQ@)l_F1)W z>eznk@}4+W>>yXi5XN}8lFG-91Q*lbmmZPA1DCHf2OHB%>%ZgJQ8f1-;!f1fci*=Y zGsr*d@ttiHL#8v`nubQOLuZf~-#HRD9FFtx-VErq*zN|W1mw40bNCbF3Xr<6Z9GU` zdvy8ZP)V5`xb@f3aju@6Zz-Ai(^yQYZ`)qcgglYh;PZN9ruY!)LrFEuzz z(#e)&*WGozmtCmp^SX7vdmJ}r6G?5wYT8yVL6HdT#I_%sW6w`Tn*-S>@VMu38qmxj z7jxrY>AJW+@J^42<7?cTv7tvK=b#jC$d-3Q7G0O=w&gGf9yq6#A1Dl!S^K}+NtyNT zcx|y_&CBq4n9ZN1y!pYptn-J`MMOUV#ieWZ$WL4mvG3`cTUyRLiSzQWU8^5fb6*aV z`+?Akmk*KO@0cAMYjM|D#d(Ob>bbGsm|5Um z8_=BPt5&@FibX4#fZnKaVbrq2x+{=!%WW0MBNV=Z_Y_bh(SRcLl=`5QZ|+PUN{7h#0Qj zPUZXHTudp^Hnw6p)Gh<6hd=BvIMUWnWmnvih!y#_Ih3l7N-}mmI4El5~Q4$pgpsO*?byWg( zG%p_t{;)$C?VSIKQ~e^*BuF~T)p{16=p_$zbzVT|M{^8s(n!;z!5roT%OTf}db2}46x%VvK}k#WecR>_$`S>lz6rEscC0GH{1G4bi4{080b zATCr`Z6LxwF|+NE-|2+I9|Ot-6?fN53W_XOG%>09Ve`KVad}mMrY;6oMiJ{`7o6fU z%vWbe<-Oaluby8~%APIv@|9H5Ma3%!L54HgFdRt~b$k`|@6+N3S)#AC&jG;>Dj|t| zAmNR@cPs@&g2DMnZzr;DqH&#}X#tz)&-0H=XBBYf;D-jGMb~9>Bji32$WCw4{ml7F zZJl=t_6^rmIKRZX9#2dqe>DZVpx*YY^UZQ7+BhWN_h&)E0tOKpF(NVa8lJwz-RWnJ1kGw5)Y zuYxrDP}0xuicVCo6kD1eUsyPo?g@h!Ypo51we2O+Ec%Rnxh$VqB*b8RIiMUgugj3l z2my4=FBjia;9G1jJi6XDXC}K<3llDlUcOITSP>$GYn5y)C`22L?1E{1G=>F9 z86p5cJm75IN~H=q#RcctB+BxR)3d$niV3Bf)(zkCFGfq{4`AG}L+u)vrmCFgRb zn|nnE3dzUra>R}C)^V<5nJbQ_-2$ZLgF5>ZgM}z!RE&Y%XJi-C^2_N~lF)ChiS`ydClE86NeVF ze8-DG*-n|(*M_Bnc1Sano+TuN9h{{!q9Q>~1``s1jt-Uav6^B{X5k~!H_HDQM2rTo zAm9U>Z{Pm6iHK2X05u#P{f-m@!rMQ7ov~D8kzKJ4P*6huEbrbbBWq|4CO{&JK#YOJ ziVz^;br_gG7=JA|PR);>D;qj1MAsbQUo;jTBeESjTU z59ycV#tVTkC_fp!RXb)LwgjHflq@_Zh7HRbhG}Ab6c7 zwKdrXfJ{KzVbMJa)o5$ixK@=6MUl1t(fCKYRny+&^cjs`4wWS09|GT!qXRpEO>X-U zOnW%Kl!Sf-1pWf;{en1PFCH4tC#~@7Q^Xb%rdY#FYMaX2#a9t2u}62} zS8Kq6Y2aw^+GjWl{p*yxvXA<75BkmN$9UNxNvJ&0E|sY|Dxp6|X9ZI$ zG8ui>toIa48BHvGVsArj*7jt6x;l8!#?0y7vXgrEHzFrzRR~4qladNd()T zXZuttZrhX@c3vwz9K-413$#&NgpKxW2@QMxA>8)r{1~Q$R}in$3)faMIFOEiVPHL( z^nj$-pXF8Z$&euuC$(d+i+4{p#sAV!+oK{0(IfmicgL#bD-M#CI+uQTbAEn77@GZu z>m!g++U^AO^6A!c`D-k`x-|%yD%nE)lzu6reM51+YOg%6jG4Wn<&6E~&USCQ&)7uY z?btOQ@TObdy*2J3W0K{l^Q4V(bfHL_6z-!r0CvU|t2vBHYd*xf;A?_L$nbW$4i9Sc zg`L&O>{5hqeL{tb8utB?lqMDroE9`V8nJ4b7KqIqP^Jb~ zNw_5vin?@_QI!M&ue?OaCa9Y4g1wzmNKl9!xrnsV@FaB6;1#__RGm+itOOdh zCtCHWOR9uDoe0b&c&B&>f;nX_*|ii!9_w4Ay=v^mbZlf2q+K0QIR0r!}Oioqu^t;3ruD1%0ll`K_J} z*U|3d%$}ZeX}oQU1(FpVeNHr{ZULX*Yc_=r*egj8Aj}b*bdsbyWp5g#Q_zzicCyRS zE#??^;z;;tah_DR-tIIegF$E);;e8V<hk^3UTAK03iBx#xTp|8S(7h1R-Gd59P-uqywlgc~&AYA=g4&+G`7Cr;M{ohj+Oq=+CJ7;ko z90{EWAl#<@ogm&_!u3dUTnb36%K&Xjpe@Y%#0gm`ms;BmRI!u#_lxJzgm^bFkg7Xu zA!Q-Q8zz`s*mHQn@H0HU+N5ijBqaVeeEYiFWt}+}?frMFWljT098!R3SOmhj&uIhQ1%bOw@d!L^K}7Nw+m-FR{LyN z6B^sqS+X#5Hh4;l&P9fP8bhT|d8{5+p%IR?_-F)zqCZ>T!G%P1#h*DAqSm?|iDvdD=bYfp;6CYc8RWA|z&e{VekjGGA5-y;oak0@$9-^E z6(RFu$U8NZDXKaP(Uv*eLz9h&%n*T}6=w>o&}4_5CS4Z}6$$#&F)-rAICF*6>D{@m zAwb56U{=OKNMkPxlt(&29Caj;LUHcO?QiTflIyo$Pi&p%jBh$V5Gd-?eo@7lPYW1a z^gQ~dbJ6t^5AVI*T~Q^W>W#9G4V`db*$-$u|6nI0^JLXs7tq%YH_KW@RV^W$645nq z;-G*pzW5LvaIvTQ3t_)%eyAi|!IxjA>ydLkXor0%oE!73^Mt8X{G}DV_DU6uA4tYeGG?XsBw9~I_J#fX#QN9A(lxmzdF-~)sW!Q zpdvQ~36Cy~G%&rIz0W#IhK_hMzWLtR*SWg?%yf`w62}?UbSSq+mGa@9P{)93=bBV? z$B}8!(t)wQNGiqq)N|A*_WlJfhjvvVv^R9dg@Zr`Hbw27t>`Ti(LS)g(wWd~iQ2o-^WAcwPA6Wubcab!ql(#N zP}eW-g8s6vi;l4G^dq!YIMgNfYyNVh@G|ckGXl-v(Ou^UcY>rAp#4_We39Y_H~t!S1?UTO?s z@2e0}Gs`%+KNxA%wUVd;%TW!5c}Z)(pJJIFlVM0|x299bnGiLbNt8bItq!5?_heUs zQ=|8$wOD5YMd{gudvoEguru|@s{3q6dxVn$=^?`%YUH12P@H}#$SK#KrH*m)zxDpw zTBH?{QTj1mZ>4oUj6C*xKiT5F*~OnBowVr2lG(37wB61H`#!8R; zceJaSOXP1cGE&}7)cIAc*=jdW2a|wQjB=oUtVlFFX?yTP*oP0H?-^p_~IVVU6W32r8z?VASWXhLgflA#rq!Ni0imKHz;MCHhE8CkEAF8UJPSj05 zNDLMgoc?Y=I8_x&wVPv9SudoID5V;;&zs=&L|=2f(rNK5$GWIGA|x!&ep4b}C2T=vO$gYZo;*J0nblbll}pU8T63DxN%xJKWmbv>)gTf#2w zYq}D_hq1;!nUx~;&WEW-FPShdBHm(MB+R64?oOR^KtAR!EIjj^op>c}dslQX7j#j- zuG75wuOy>g3Krqr<#2En&zb%4`D_>wEseDV{~LBA)utuy5a<^!hPkfx?l*5>W~If1 z)mW^di%2wvO+<2#{rP$i$?qOc)j{5o<9Q2H0pl3$tIR_W^NeMjXv4|?;$V27iII>k zkzx4JG|pR5z4ybiHy@sy-g<#uO}`PMf@>?5+Oatp%sw&i!Z#!cFw73ti6rm#lYO|Q zH$OOFX5$XBKZv(x>fNki^#I5eL^)`WjxJuUt07qW=|Ej5{^??$C1Tu-P1rxK8?vOo zbZvPw%C3)$-IrTb<+7fasKY=?wjk)vf4d}@X2IjmH*jZgi7c=3&|9Gpnr`{Mi0DBb zk=j#cRhtJMroKy!x1w$0IskIer;YbBwM2RIJPmX?KhA?(&rwj!=n(dn@%^^Y8mDH4 zg*z_5sqx(^@a1UNQQyiEpKmJ|zikQGb#*pt69y8^CIS+U?T!m)tp+*&-bN$RMypSU zyV#ehQaBQY8=lSk)hKW#2HsV5L4#v435Re=WK%Px%+@dy6rK@ZG_p|BixO?rM~w_M zYCRVLQ0h=vI6?KhKPzP)&`e8*Q8h@732CJwMI(U9godJe?wi$%Oduw!W1*|JMcv6TOctK8y(I4rap-86xL=_>6hxi1t?P&dz zp{Rd^DXPO86`y}$A*a)PMkpX3_>W8?gK^`6C{;HP==iOFVG%x(MGBLlaKDH8Pn+r< zM93Pq9>M@@NH_d1v=AA@2g+*j`#&v9tnf$OuDvO^`xh1p;)5v_P+!ec|$ld@}A3(V)$o~{j);vlh!BYf037yAS5lc8aj{~?$EP`==QbbtDTjaiXc@{iqPX-Im<+72J; k|5+HwA=v-VsR?{V%g%XDd$C>r{RZ-r7FQ6f5-|$;Ke$3CbpQYW literal 0 HcmV?d00001 From 00f7a029e35bc73e3235a1e4676768ac2c13b6c8 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 14:09:39 +0200 Subject: [PATCH 19/26] Update README.md --- README.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5ad75b0..c9aeb41 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ -# 243 for YunoHost +# 20euros for YunoHost [![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) ![](https://ci-apps.yunohost.org/ci/badges/20euros.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/20euros.maintain.svg) [![Install 20euros with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=20euros) - *[Lire ce readme en français.](./README_fr.md)* > *This package allow you to install 20euros quickly and simply on a YunoHost server. @@ -10,15 +9,11 @@ If you don’t have YunoHost, please see [here](https://yunohost.org/#/install) ## Overview -A clone of 2048 game with euro coins and bills +Clone of 2048 game with euro coins and bills. ## Screenshots -![](Screenshot-243.jpg) - -## Demo - -* [Official demo](https://github.com/jatekos101/20euros) +![](Screenshot-20euros.jpg) #### Supported architectures From edf7aaaa82f8c52a1b3ba6bc4d3107f296c8a918 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 14:12:04 +0200 Subject: [PATCH 20/26] fix --- README.md | 3 ++- README_fr.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c9aeb41..5845d23 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # 20euros for YunoHost -[![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) ![](https://ci-apps.yunohost.org/ci/badges/20euros.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/20euros.maintain.svg) [![Install 20euros with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=20euros) +[![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) ![](https://ci-apps.yunohost.org/ci/badges/20euros.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/20euros.maintain.svg) +[![Install 20euros with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=20euros) *[Lire ce readme en français.](./README_fr.md)* diff --git a/README_fr.md b/README_fr.md index c0c906e..9d8c495 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,6 +1,7 @@ # 20euros pour YunoHost -[![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) ![](https://ci-apps.yunohost.org/ci/badges/20euros.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/20euros.maintain.svg) [![Installer 20euros avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=20euros) +[![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) ![](https://ci-apps.yunohost.org/ci/badges/20euros.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/20euros.maintain.svg) +[![Installer 20euros avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=20euros) *[Read this readme in english.](./README.md)* From ae74dc915354bd89db0277cf537c72d4b7345d2d Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 15:35:02 +0200 Subject: [PATCH 21/26] Delete app.src --- conf/app.src | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 conf/app.src diff --git a/conf/app.src b/conf/app.src deleted file mode 100644 index 27001ea..0000000 --- a/conf/app.src +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://github.com/jatekos101/20euros/archive/v0.1.tar.gz -SOURCE_SUM=a119aaf8130756616e79bad040a1fe3db4b1f9b5a09b37a8eb0f2b4a04e3cca5 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=20euros-0.1.tar.gz \ No newline at end of file From 6b4599e38e41c95dd6f9f90ff057906d76338917 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 10 May 2020 15:35:07 +0200 Subject: [PATCH 22/26] Update install --- scripts/install | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/install b/scripts/install index ad5adaa..c9d3106 100755 --- a/scripts/install +++ b/scripts/install @@ -56,9 +56,6 @@ ynh_script_progression --message="Setting up source files..." --weight=1 ynh_app_setting_set --app=$app --key=final_path --value=$final_path -# Download, check integrity, uncompress and patch the source from app.src -#ynh_setup_source --dest_dir="$final_path" - mkdir -p $final_path cp -a ../sources/* $final_path From 6b545481d39d41327f57c9785dba369d66cfc9b6 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 11 May 2020 09:41:25 +0200 Subject: [PATCH 23/26] Update upgrade --- scripts/upgrade | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index a252a5a..4472cf4 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -74,8 +74,9 @@ if [ "$upgrade_type" == "UPGRADE_APP" ] then ynh_script_progression --message="Upgrading source files..." --weight=4 - # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir="$final_path" + # Download the source from ../sources + mkdir -p $final_path + cp -a ../sources/* $final_path fi #================================================= From c6a57ac9a12562f30ccd7eb5078b5d2c85d363f3 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 11 May 2020 09:44:20 +0200 Subject: [PATCH 24/26] Update check_process --- check_process | 1 + 1 file changed, 1 insertion(+) diff --git a/check_process b/check_process index cb5f2e0..1ba69bf 100644 --- a/check_process +++ b/check_process @@ -16,6 +16,7 @@ multi_instance=1 incorrect_path=1 port_already_use=0 + change_url=1 ;;; Levels Level 1=auto Level 2=auto From e72e3d7eb316f5d039c450c1546b7ee1950b3b3e Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 11 May 2020 10:47:37 +0200 Subject: [PATCH 25/26] Create pull_request_template.md --- pull_request_template.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 pull_request_template.md diff --git a/pull_request_template.md b/pull_request_template.md new file mode 100644 index 0000000..d3801b8 --- /dev/null +++ b/pull_request_template.md @@ -0,0 +1,18 @@ +## Problem +- *Description of why you made this PR* + +## Solution +- *And how do you fix that problem* + +## PR Status +- [ ] Code finished. +- [ ] Tested with Package_check. +- [ ] Fix or enhancement tested. +- [ ] Upgrade from last version tested. +- [ ] Can be reviewed and tested. + +## Package_check results +--- +*If you have access to [App Continuous Integration for packagers](https://yunohost.org/#/packaging_apps_ci) you can provide a link to the package_check results like below, replacing '-NUM-' in this link by the PR number and USERNAME by your username on the ci-apps-dev. Or you provide a screenshot or a pastebin of the results* + +[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/20euros_ynh%20PR-NUM-%20(USERNAME)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/20euros_ynh%20PR-NUM-%20(USERNAME)/) From 492d073a64a6a88ffd1f1d0945e952c43e33efc5 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 11 May 2020 15:25:43 +0200 Subject: [PATCH 26/26] change maintainer --- manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index e0e837d..df27a3e 100644 --- a/manifest.json +++ b/manifest.json @@ -10,8 +10,8 @@ "url": "https://github.com/jatekos101/20euros", "license": "MIT", "maintainer": { - "name": "Moul", - "email": "moul@moul.re" + "name": "eric_G", + "email": "ericgaspar@free.fr" }, "requirements": { "yunohost": ">= 3.7.0"