From 2a4cb12a2179624356fd9413a2806dc9d2ccea1b Mon Sep 17 00:00:00 2001
From: sarthak1905 <61883822+sarthak1905@users.noreply.github.com>
Date: Mon, 5 Oct 2020 09:11:40 +0530
Subject: [PATCH 001/164] Added Project
---
Automation/unfollowers-insta/README.md | 19 +++
Automation/unfollowers-insta/insta_bot_bb8.py | 147 ++++++++++++++++++
Automation/unfollowers-insta/requirements.txt | 2 +
3 files changed, 168 insertions(+)
create mode 100644 Automation/unfollowers-insta/README.md
create mode 100644 Automation/unfollowers-insta/insta_bot_bb8.py
create mode 100644 Automation/unfollowers-insta/requirements.txt
diff --git a/Automation/unfollowers-insta/README.md b/Automation/unfollowers-insta/README.md
new file mode 100644
index 0000000..936e1ed
--- /dev/null
+++ b/Automation/unfollowers-insta/README.md
@@ -0,0 +1,19 @@
+# bb8 - Your Personal bot
+### Made by [Sarthak Saxena](https://github.com/sarthak1905)
+ bb8 is a cute name for a great bot to check for the people that you follow who don't follow you back on Instagram.
+
+ ## How to run
+ * Install the latest chrome driver and place it in 'C:\Program Files (x86)\chromedriver.exe'. You can download it
+ from [here] (https://chromedriver.chromium.org/)
+ * Run the script, enter your username and password for the instagram account.
+ * That's it. The terminal will soon return you a list of all the accounts that you follow, which don't follow you back.
+
+ ### Side Note
+ Do remember to download the dependencies in the requirements.txt file!
+
+ ## Modules used
+ * selenium
+
+ ## Development status
+ This bot is currently working, as of 3rd October, 2020. However, changes on the Instagram frontend may require
+ this script to be edited.
diff --git a/Automation/unfollowers-insta/insta_bot_bb8.py b/Automation/unfollowers-insta/insta_bot_bb8.py
new file mode 100644
index 0000000..4209302
--- /dev/null
+++ b/Automation/unfollowers-insta/insta_bot_bb8.py
@@ -0,0 +1,147 @@
+from selenium import webdriver
+from getpass import getpass
+import time
+
+# Class for the bot
+
+
+class InstaBot:
+
+ # Initializes bot
+ def __init__(self):
+ self.username = input('Enter your username:')
+ self.pw = getpass('Enter your password(will NOT appear as you type):')
+ self.PATH = r"C:\Program Files (x86)\chromedriver.exe"
+ self.driver = webdriver.Chrome(self.PATH)
+
+ # Starts Instagram
+ def start(self):
+ self.driver.get('https://www.instagram.com/')
+ time.sleep(2)
+ return
+
+ # Logs into your account, also closes various dialogue boxes that open on
+ # the way
+ def login(self):
+
+ user_field = self.driver.find_element_by_xpath(
+ '//*[@id="loginForm"]/div/div[1]/div/label/input')
+ pw_field = self.driver.find_element_by_xpath(
+ '//*[@id="loginForm"]/div/div[2]/div/label/input')
+ login_button = self.driver.find_element_by_xpath(
+ '//*[@id="loginForm"]/div/div[3]/button/div')
+ user_field.send_keys(self.username)
+ pw_field.send_keys(self.pw)
+ login_button.click()
+ time.sleep(2.5)
+ not_now1 = self.driver.find_element_by_xpath(
+ '//*[@id="react-root"]/section/main/div/div/div/div/button')
+ not_now1.click()
+ time.sleep(2)
+ not_now2 = self.driver.find_element_by_xpath(
+ '/html/body/div[4]/div/div/div/div[3]/button[2]')
+ not_now2.click()
+ time.sleep(1)
+ return
+
+ # Opens your profile
+ def open_profile(self):
+ profile_link = self.driver.find_element_by_xpath(
+ '//*[@id="react-root"]/section/main/section/div[3]'
+ '/div[1]/div/div[2]/div[1]/a')
+ profile_link.click()
+ time.sleep(2)
+ return
+
+ # Opens the list of the people you follow
+ def open_following(self):
+ following_link = self.driver.find_element_by_xpath(
+ '/html/body/div[1]/section/main/div/header/section/ul/li[3]/a')
+ following_link.click()
+ return
+
+ # Gets the list of the people you follow
+ def get_following(self):
+ xpath = '/html/body/div[4]/div/div/div[2]'
+ self.following = self.scroll_list(xpath)
+ return
+
+ # Opens the link to 'Followers'
+ def open_followers(self):
+ followers_link = self.driver.find_element_by_xpath(
+ '//*[@id="react-root"]/section/main/div/header/section/ul/li[2]/a')
+ followers_link.click()
+ return
+
+ # Gets the list of followers
+ def get_followers(self):
+ xpath = '/html/body/div[4]/div/div/div[2]'
+ self.followers = self.scroll_list(xpath)
+ return
+
+ # Scrolls a scroll box and retrieves their names
+ def scroll_list(self, xpath):
+
+ time.sleep(2)
+ scroll_box = self.driver.find_element_by_xpath(xpath)
+ last_ht, ht = 0, 1
+
+ # Keep scrolling till you can't go down any further
+ while last_ht != ht:
+ last_ht = ht
+ time.sleep(1)
+ ht = self.driver.execute_script("""
+ arguments[0].scrollTo(0, arguments[0].scrollHeight);
+ return arguments[0].scrollHeight;
+ """, scroll_box)
+
+ # Gets the list of accounts
+ links = scroll_box.find_elements_by_tag_name('a')
+ names = [name.text for name in links if name.text != '']
+
+ # Closes the box
+ close_btn = self.driver.find_element_by_xpath(
+ '/html/body/div[4]/div/div/div[1]/div/div[2]/button/div')
+ close_btn.click()
+
+ return names
+
+ # Prints the list of people you follow who don't follow you back in
+ # terminal
+ def get_unfollowers(self):
+
+ self.unfollowers = [
+ x for x in self.following if x not in self.followers]
+ for name in self.unfollowers:
+ print(name)
+ return
+
+ # Closes the driver
+ def close(self):
+ self.driver.quit()
+ return
+
+
+def main():
+
+ # Bot method calls
+ bb8 = InstaBot()
+
+ bb8.start()
+
+ bb8.login()
+
+ bb8.open_profile()
+ bb8.open_following()
+
+ bb8.get_following()
+ bb8.open_followers()
+
+ bb8.get_followers()
+ bb8.get_unfollowers()
+
+ bb8.close()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/Automation/unfollowers-insta/requirements.txt b/Automation/unfollowers-insta/requirements.txt
new file mode 100644
index 0000000..3959f29
--- /dev/null
+++ b/Automation/unfollowers-insta/requirements.txt
@@ -0,0 +1,2 @@
+selenium==3.141.0
+urllib3==1.25.10
From c2cf2b1f6cb15a9a82ec7fd779732404220ef669 Mon Sep 17 00:00:00 2001
From: sarthak1905 <61883822+sarthak1905@users.noreply.github.com>
Date: Mon, 5 Oct 2020 14:28:13 +0530
Subject: [PATCH 002/164] Updated README.md
---
README.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/README.md b/README.md
index 202b1a9..77b94d5 100644
--- a/README.md
+++ b/README.md
@@ -83,5 +83,15 @@ All *Contributions* of the *Contributors* can be found in the [__Contributions__
+
Date: Mon, 5 Oct 2020 16:08:18 +0530
Subject: [PATCH 003/164] Update README.md
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 77b94d5..3a1eb99 100644
--- a/README.md
+++ b/README.md
@@ -83,6 +83,8 @@ All *Contributions* of the *Contributors* can be found in the [__Contributions__
+
+

From a6cac9783660810bb0a4ca257ac5553479ba810a Mon Sep 17 00:00:00 2001
From: Raghav Arora <66276244+Raghavarora27@users.noreply.github.com>
Date: Tue, 6 Oct 2020 00:50:43 +0530
Subject: [PATCH 004/164] Dice_simulator.py
---
GUI/Dice_simulator.py | 47 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 GUI/Dice_simulator.py
diff --git a/GUI/Dice_simulator.py b/GUI/Dice_simulator.py
new file mode 100644
index 0000000..e4f1e15
--- /dev/null
+++ b/GUI/Dice_simulator.py
@@ -0,0 +1,47 @@
+import random
+
+print("This is my Dice simulator")
+a = "y"
+while a == "y" or a == "Y":
+ r = random.randint(1, 6)
+ if r == 1:
+ print("----------------")
+ print("| |")
+ print("| O |")
+ print("| |")
+ print("----------------")
+ elif r == 2:
+ print("----------------")
+ print("| |")
+ print("| O O |")
+ print("| |")
+ print("----------------")
+
+ elif r == 3:
+ print("----------------")
+ print("| O |")
+ print("| O |")
+ print("| O |")
+ print("----------------")
+ elif r == 4:
+ print("----------------")
+ print("| O O |")
+ print("| |")
+ print("| O O |")
+ print("----------------")
+
+ elif r == 5:
+ print("----------------")
+ print("| O O |")
+ print("| O |")
+ print("| O O |")
+ print("----------------")
+ elif r == 6:
+ print("----------------")
+ print("| O O |")
+ print("| O O |")
+ print("| O O |")
+ print("----------------")
+ a = input("If you want to roll Dice again then Press 'y' otherwise press any other key to exit")
+print("Thanks!! , See You Later")
+
From 5b5f592df8af3335b99626289d53f224d8d52f36 Mon Sep 17 00:00:00 2001
From: Deepraj Rakshit
Date: Tue, 6 Oct 2020 02:32:09 +0530
Subject: [PATCH 005/164] Rectified Arrangments
---
Locator.py => GUI/Locator.py | 112 +++++++++++++++++------------------
SnakeWaterGunGame | 71 ----------------------
2 files changed, 56 insertions(+), 127 deletions(-)
rename Locator.py => GUI/Locator.py (95%)
delete mode 100644 SnakeWaterGunGame
diff --git a/Locator.py b/GUI/Locator.py
similarity index 95%
rename from Locator.py
rename to GUI/Locator.py
index c3fd0da..2886f60 100644
--- a/Locator.py
+++ b/GUI/Locator.py
@@ -1,57 +1,57 @@
-from tkinter import *
-from geopy.geocoders import ArcGIS
-import clipboard
-
-def f():
- s=e1.get()
- nom=ArcGIS()
- n=nom.geocode(s)
- x=n.latitude
- y=n.longitude
- t.delete(first=0,last=len(t1.get()))
- u.delete(first=0,last=len(u1.get()))
- t.insert(END,str(x))
- u.insert(END,str(y))
-
-def g():
- x=t1.get()
- y=u1.get()
- s=""
- s=s+"Latitude=> "+x
- s=s+" "
- s=s+"Longitude=> "+y
- #print(s)
- clipboard.copy(s)
-
-window=Tk()
-window.title("Geocordinate Detector")
-window.resizable(0,0)
-
-l1=Label(window,text="Enter your Address")
-l1.grid(row=0,column=0)
-
-e1=StringVar()
-e=Entry(window,textvariable=e1,width=50)
-e.grid(row=0,column=1)
-
-b1=Button(window,text="Locate Me!",width=40,command=f)
-b1.grid(row=1,column=0,columnspan=2)
-
-l2=Label(window,text="Latitude")
-l2.grid(row=2,column=0)
-
-l3=Label(window,text="Longitude")
-l3.grid(row=3,column=0)
-
-t1=StringVar()
-t=Entry(window,textvariable=t1,width=50)
-t.grid(row=2,column=1)
-
-u1=StringVar()
-u=Entry(window,textvariable=u1,width=50)
-u.grid(row=3,column=1)
-
-b2=Button(window,text="Copy",width=40,command=g)
-b2.grid(row=4,column=0,columnspan=2)
-
+from tkinter import *
+from geopy.geocoders import ArcGIS
+import clipboard
+
+def f():
+ s=e1.get()
+ nom=ArcGIS()
+ n=nom.geocode(s)
+ x=n.latitude
+ y=n.longitude
+ t.delete(first=0,last=len(t1.get()))
+ u.delete(first=0,last=len(u1.get()))
+ t.insert(END,str(x))
+ u.insert(END,str(y))
+
+def g():
+ x=t1.get()
+ y=u1.get()
+ s=""
+ s=s+"Latitude=> "+x
+ s=s+" "
+ s=s+"Longitude=> "+y
+ #print(s)
+ clipboard.copy(s)
+
+window=Tk()
+window.title("Geocordinate Detector")
+window.resizable(0,0)
+
+l1=Label(window,text="Enter your Address")
+l1.grid(row=0,column=0)
+
+e1=StringVar()
+e=Entry(window,textvariable=e1,width=50)
+e.grid(row=0,column=1)
+
+b1=Button(window,text="Locate Me!",width=40,command=f)
+b1.grid(row=1,column=0,columnspan=2)
+
+l2=Label(window,text="Latitude")
+l2.grid(row=2,column=0)
+
+l3=Label(window,text="Longitude")
+l3.grid(row=3,column=0)
+
+t1=StringVar()
+t=Entry(window,textvariable=t1,width=50)
+t.grid(row=2,column=1)
+
+u1=StringVar()
+u=Entry(window,textvariable=u1,width=50)
+u.grid(row=3,column=1)
+
+b2=Button(window,text="Copy",width=40,command=g)
+b2.grid(row=4,column=0,columnspan=2)
+
window.mainloop()
\ No newline at end of file
diff --git a/SnakeWaterGunGame b/SnakeWaterGunGame
deleted file mode 100644
index a1db96f..0000000
--- a/SnakeWaterGunGame
+++ /dev/null
@@ -1,71 +0,0 @@
-# Snake Water Gun Game Devlopement
-import random
-NoOfRound = 10
-user = 0
-comp = 0
-
-while NoOfRound > 0:
- print("---------------------------------")
- print("Choices:\nS-Snake\nW-Water\nG-Gun")
- c = input("Enter Your Choice:-")
- choice = c.capitalize()
-
- if choice in ('S', 'W', 'G'):
-
- n = random.randint(1, 3)
-
- if (choice == 'S' and n == 1) or (choice == 'W' and n == 2) or (choice == 'G' and n == 3):
- print("Draw")
-
- elif choice == "S":
- if n == 2:
- print("Congratulations. You Won!")
- user += 1
- else:
- print("Better Luck Next Time!")
- comp += 1
-
- elif choice == "W":
- if n == 3:
- print("Congratulations. You Won!")
- user += 1
- else:
- print("Better Luck Next Time!")
- comp += 1
-
- else:
- if n == 1:
- print("Congratulations. You Won!")
- user += 1
- else:
- print("Better Luck Next Time!")
- comp += 1
-
- else:
- print("Invalid Choice")
- continue
- NoOfRound -= 1
-
-print("---------------------------------")
-
-if user == comp:
- print("Draw!")
-elif user > comp:
- print("Hurray. You won!")
-else:
- print("You Lost!")
-
-print("---------------------------------")
-
-print("Scoreboard")
-print("Your Score:-", user, "\nComputer's Score:-", comp )
-
-print("---------------------------------")
-
-
-
-
-
-
-
-
From fdf8b40595bc16ce8a89b665bee3eb422c9e691b Mon Sep 17 00:00:00 2001
From: Raghav Arora <66276244+Raghavarora27@users.noreply.github.com>
Date: Tue, 6 Oct 2020 03:30:19 +0530
Subject: [PATCH 006/164] README.md
---
README.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/README.md b/README.md
index 3a1eb99..fc7ad46 100644
--- a/README.md
+++ b/README.md
@@ -95,5 +95,15 @@ All *Contributions* of the *Contributors* can be found in the [__Contributions__
|
+
+
+ 
+
+
+ Raghav Arora
+
+
+
+ |
From c05b502bbb877ca1e587f0776bdc8cd29617aa36 Mon Sep 17 00:00:00 2001
From: TheFenrisLycaon
Date: Sun, 11 Oct 2020 10:11:51 +0530
Subject: [PATCH 007/164] Added Games written in Python !
---
Games/Brickout.py | 224 +
Games/Drawing/Paintbrush.png | Bin 0 -> 657 bytes
Games/Drawing/get_pip.py | 21492 ++++++++++++++++++++++++
Games/Drawing/gridModule.py | 228 +
Games/Drawing/install_requirements.py | 74 +
Games/Drawing/main.py | 420 +
Games/Flood Fill.py | 89 +
Games/HangMan/hangman.py | 186 +
Games/HangMan/hangman0.png | Bin 0 -> 28759 bytes
Games/HangMan/hangman1.png | Bin 0 -> 30053 bytes
Games/HangMan/hangman2.png | Bin 0 -> 30112 bytes
Games/HangMan/hangman3.png | Bin 0 -> 31129 bytes
Games/HangMan/hangman4.png | Bin 0 -> 31098 bytes
Games/HangMan/hangman5.png | Bin 0 -> 31513 bytes
Games/HangMan/hangman6.png | Bin 0 -> 31836 bytes
Games/HangMan/words.txt | 11 +
Games/Ludo/cli/cli.exe | Bin 0 -> 1715790 bytes
Games/Ludo/cli/cli.py | 6 +
Games/Ludo/cli/ludo/__init__.py | 0
Games/Ludo/cli/ludo/cli.py | 310 +
Games/Ludo/cli/ludo/game.py | 308 +
Games/Ludo/cli/ludo/painter.py | 102 +
Games/Ludo/cli/ludo/recorder.py | 69 +
Games/Ludo/gui/Browng.gif | Bin 0 -> 3179 bytes
Games/Ludo/gui/Instructions.docx | Bin 0 -> 13173 bytes
Games/Ludo/gui/Ludo Board.gif | Bin 0 -> 169303 bytes
Games/Ludo/gui/Ludo Board.jpg | Bin 0 -> 107599 bytes
Games/Ludo/gui/Ludo-game.py | 847 +
Games/Ludo/gui/Ludo.py | 147 +
Games/Ludo/gui/blue side.gif | Bin 0 -> 33013 bytes
Games/Ludo/gui/blue.gif | Bin 0 -> 1007 bytes
Games/Ludo/gui/bluebox.gif | Bin 0 -> 1613 bytes
Games/Ludo/gui/bluestop.gif | Bin 0 -> 1756 bytes
Games/Ludo/gui/bod.gif | Bin 0 -> 69416 bytes
Games/Ludo/gui/center.gif | Bin 0 -> 11033 bytes
Games/Ludo/gui/green side.gif | Bin 0 -> 25692 bytes
Games/Ludo/gui/green.gif | Bin 0 -> 1067 bytes
Games/Ludo/gui/greenbox.gif | Bin 0 -> 1478 bytes
Games/Ludo/gui/greenstop.gif | Bin 0 -> 1563 bytes
Games/Ludo/gui/head.gif | Bin 0 -> 1124 bytes
Games/Ludo/gui/head1.gif | Bin 0 -> 1125 bytes
Games/Ludo/gui/head2.gif | Bin 0 -> 1135 bytes
Games/Ludo/gui/head3.gif | Bin 0 -> 1122 bytes
Games/Ludo/gui/ludo_full_big.jpg | Bin 0 -> 43537 bytes
Games/Ludo/gui/red side.gif | Bin 0 -> 27385 bytes
Games/Ludo/gui/red.gif | Bin 0 -> 1109 bytes
Games/Ludo/gui/redbox.gif | Bin 0 -> 1560 bytes
Games/Ludo/gui/redstop.gif | Bin 0 -> 1692 bytes
Games/Ludo/gui/tail.gif | Bin 0 -> 1157 bytes
Games/Ludo/gui/tail1.gif | Bin 0 -> 1154 bytes
Games/Ludo/gui/tail2.gif | Bin 0 -> 1151 bytes
Games/Ludo/gui/tail3.gif | Bin 0 -> 1154 bytes
Games/Ludo/gui/test.gif | Bin 0 -> 211320 bytes
Games/Ludo/gui/whitebox.gif | Bin 0 -> 974 bytes
Games/Ludo/gui/yellow side.gif | Bin 0 -> 21145 bytes
Games/Ludo/gui/yellow.gif | Bin 0 -> 962 bytes
Games/Ludo/gui/yellowbox.gif | Bin 0 -> 1400 bytes
Games/Ludo/gui/yellowstop.gif | Bin 0 -> 1513 bytes
Games/Race/main.py | 105 +
Games/Race/scores.txt | 9 +
Games/Sudoku/GUI.py | 316 +
Games/Sudoku/setup.py | 8 +
Games/Sudoku/solver (text).py | 61 +
Games/Sudoku/solver.py | 61 +
Games/Tetris/main.py | 401 +
Games/blackjack_rr.py | 233 +
Games/chicks_n_rabs.py | 15 +
Games/classicIndianCardMatch.py | 104 +
Games/dice.py | 30 +
Games/diceV2_dynamic.py | 91 +
Games/path_finding.py | 236 +
Games/tic_tak_toe.py | 113 +
Games/tower_of_hanoi.py | 22 +
README.md | 10 +
74 files changed, 26328 insertions(+)
create mode 100644 Games/Brickout.py
create mode 100644 Games/Drawing/Paintbrush.png
create mode 100644 Games/Drawing/get_pip.py
create mode 100644 Games/Drawing/gridModule.py
create mode 100644 Games/Drawing/install_requirements.py
create mode 100644 Games/Drawing/main.py
create mode 100644 Games/Flood Fill.py
create mode 100644 Games/HangMan/hangman.py
create mode 100644 Games/HangMan/hangman0.png
create mode 100644 Games/HangMan/hangman1.png
create mode 100644 Games/HangMan/hangman2.png
create mode 100644 Games/HangMan/hangman3.png
create mode 100644 Games/HangMan/hangman4.png
create mode 100644 Games/HangMan/hangman5.png
create mode 100644 Games/HangMan/hangman6.png
create mode 100644 Games/HangMan/words.txt
create mode 100644 Games/Ludo/cli/cli.exe
create mode 100644 Games/Ludo/cli/cli.py
create mode 100644 Games/Ludo/cli/ludo/__init__.py
create mode 100644 Games/Ludo/cli/ludo/cli.py
create mode 100644 Games/Ludo/cli/ludo/game.py
create mode 100644 Games/Ludo/cli/ludo/painter.py
create mode 100644 Games/Ludo/cli/ludo/recorder.py
create mode 100644 Games/Ludo/gui/Browng.gif
create mode 100644 Games/Ludo/gui/Instructions.docx
create mode 100644 Games/Ludo/gui/Ludo Board.gif
create mode 100644 Games/Ludo/gui/Ludo Board.jpg
create mode 100644 Games/Ludo/gui/Ludo-game.py
create mode 100644 Games/Ludo/gui/Ludo.py
create mode 100644 Games/Ludo/gui/blue side.gif
create mode 100644 Games/Ludo/gui/blue.gif
create mode 100644 Games/Ludo/gui/bluebox.gif
create mode 100644 Games/Ludo/gui/bluestop.gif
create mode 100644 Games/Ludo/gui/bod.gif
create mode 100644 Games/Ludo/gui/center.gif
create mode 100644 Games/Ludo/gui/green side.gif
create mode 100644 Games/Ludo/gui/green.gif
create mode 100644 Games/Ludo/gui/greenbox.gif
create mode 100644 Games/Ludo/gui/greenstop.gif
create mode 100644 Games/Ludo/gui/head.gif
create mode 100644 Games/Ludo/gui/head1.gif
create mode 100644 Games/Ludo/gui/head2.gif
create mode 100644 Games/Ludo/gui/head3.gif
create mode 100644 Games/Ludo/gui/ludo_full_big.jpg
create mode 100644 Games/Ludo/gui/red side.gif
create mode 100644 Games/Ludo/gui/red.gif
create mode 100644 Games/Ludo/gui/redbox.gif
create mode 100644 Games/Ludo/gui/redstop.gif
create mode 100644 Games/Ludo/gui/tail.gif
create mode 100644 Games/Ludo/gui/tail1.gif
create mode 100644 Games/Ludo/gui/tail2.gif
create mode 100644 Games/Ludo/gui/tail3.gif
create mode 100644 Games/Ludo/gui/test.gif
create mode 100644 Games/Ludo/gui/whitebox.gif
create mode 100644 Games/Ludo/gui/yellow side.gif
create mode 100644 Games/Ludo/gui/yellow.gif
create mode 100644 Games/Ludo/gui/yellowbox.gif
create mode 100644 Games/Ludo/gui/yellowstop.gif
create mode 100644 Games/Race/main.py
create mode 100644 Games/Race/scores.txt
create mode 100644 Games/Sudoku/GUI.py
create mode 100644 Games/Sudoku/setup.py
create mode 100644 Games/Sudoku/solver (text).py
create mode 100644 Games/Sudoku/solver.py
create mode 100644 Games/Tetris/main.py
create mode 100644 Games/blackjack_rr.py
create mode 100644 Games/chicks_n_rabs.py
create mode 100644 Games/classicIndianCardMatch.py
create mode 100644 Games/dice.py
create mode 100644 Games/diceV2_dynamic.py
create mode 100644 Games/path_finding.py
create mode 100644 Games/tic_tak_toe.py
create mode 100644 Games/tower_of_hanoi.py
diff --git a/Games/Brickout.py b/Games/Brickout.py
new file mode 100644
index 0000000..3d6de43
--- /dev/null
+++ b/Games/Brickout.py
@@ -0,0 +1,224 @@
+import random
+import pygame
+
+BLACK = (0,0,0)
+WHITE = (255, 255, 255)
+GREEN = (0, 255, 0)
+RED = (255, 0, 0)
+pygame.init()
+size = (700, 500)
+screen = pygame.display.set_mode(size)
+
+
+class Ball(object):
+ def __init__(self, screen, radius, x, y):
+ self.__screen = screen
+ self._radius = radius
+ self._xLoc = x
+ self._yLoc = y
+ self.__xVel = 7
+ self.__yVel = 2
+ w, h = pygame.display.get_surface().get_size()
+ self.__width = w
+ self.__height = h
+
+ def getXVel(self):
+ return self.__xVel
+
+ def getYVel(self):
+ return self.__yVel
+
+ def draw(self):
+ pygame.draw.circle(screen, (255, 0, 0),
+ (self._xLoc, self._yLoc), self._radius)
+
+ def update(self, paddle, brickwall):
+ self._xLoc += self.__xVel
+ self._yLoc += self.__yVel
+ if self._xLoc <= self._radius:
+ self.__xVel *= -1
+ elif self._xLoc >= self.__width - self._radius:
+ self.__xVel *= -1
+ if self._yLoc <= self._radius:
+ self.__yVel *= -1
+ elif self._yLoc >= self.__width - self._radius:
+ return True
+ if brickwall.collide(self):
+ self.__yVel *= -1
+ paddleY = paddle._yLoc
+ paddleW = paddle._width
+ paddleH = paddle._height
+ paddleX = paddle._xLoc
+ ballX = self._xLoc
+ ballY = self._yLoc
+ if ((ballX + self._radius) >= paddleX and ballX <= (paddleX + paddleW)) \
+ and ((ballY + self._radius) >= paddleY and ballY <= (paddleY + paddleH)):
+ self.__yVel *= -1
+ return False
+
+
+
+class Paddle(object):
+ def __init__(self, screen, width, height, x, y):
+ self.__screen = screen
+ self._width = width
+ self._height = height
+ self._xLoc = x
+ self._yLoc = y
+ w, h = pygame.display.get_surface().get_size()
+ self.__W = w
+ self.__H = h
+
+ def draw(self):
+ pygame.draw.rect(screen, (255, 255, 255), (self._xLoc,
+ self._yLoc, self._width, self._height), 0)
+
+ def update(self):
+ x, y = pygame.mouse.get_pos()
+ if x >= 0 and x <= (self.__W - self._width):
+ self._xLoc = x
+
+
+class Brick(pygame.sprite.Sprite):
+ def __init__(self, screen, width, height, x, y):
+ self.__screen = screen
+ self._width = width
+ self._height = height
+ self._xLoc = x
+ self._yLoc = y
+ w, h = pygame.display.get_surface().get_size()
+ self.__W = w
+ self.__H = h
+ self.__isInGroup = False
+
+ def draw(self):
+ pygame.draw.rect(screen, (255 ,177, 237), (self._xLoc,
+ self._yLoc, self._width, self._height), 0)
+
+ def add(self, group):
+ group.add(self)
+ self.__isInGroup = True
+
+ def remove(self, group):
+ group.remove(self)
+ self.__isInGroup = False
+
+ def alive(self):
+ return self.__isInGroup
+
+ def collide(self, ball):
+ brickX = self._xLoc
+ brickY = self._yLoc
+ brickW = self._width
+ brickH = self._height
+ ballX = ball._xLoc
+ ballY = ball._yLoc
+ ballXVel = ball.getXVel()
+ ballYVel = ball.getYVel()
+ if ((ballX + ball._radius) >= brickX and (ballX + ball._radius) <= (brickX + brickW)) \
+ and ((ballY - ball._radius) >= brickY and (ballY - ball._radius)
+ <= (brickY + brickH)):
+ return True
+ else:
+ return False
+
+
+
+
+class BrickWall(pygame.sprite.Group):
+ def __init__(self, screen, x, y, width, height):
+ self.__screen = screen
+ self._x = x
+ self._y = y
+ self._width = width
+ self._height = height
+ self._bricks = []
+ X = x
+ Y = y
+ for i in range(3):
+ for j in range(4):
+ self._bricks.append(Brick(screen, width, height, X, Y))
+ X += width + (width / 7.0)
+ Y += height + (height / 7.0)
+ X = x
+
+ def add(self, brick):
+ self._bricks.append(brick)
+
+ def remove(self, brick):
+ self._bricks.remove(brick)
+
+ def draw(self):
+ for brick in self._bricks:
+ if brick != None:
+ brick.draw()
+
+ def update(self, ball):
+ for i in range(len(self._bricks)):
+ if ((self._bricks[i] != None) and self._bricks[i].collide(ball)):
+ self._bricks[i] = None
+ for brick in self._bricks:
+ if brick == None:
+ self._bricks.remove(brick)
+
+ def hasWin(self):
+ return len(self._bricks) == 0
+
+ def collide(self, ball):
+ for brick in self._bricks:
+ if brick.collide(ball):
+ return True
+ return False
+
+
+ball = Ball(screen, 25, random.randint(1, 700), 250)
+paddle = Paddle(screen, 100, 20, 250, 450)
+brickWall = BrickWall(screen, 25, 25, 150, 50)
+isGameOver = False
+gameStatus = True
+score = 0
+pygame.display.set_caption("Brickout-game")
+done = False
+clock = pygame.time.Clock()
+pygame.font.init()
+mgGameOver = pygame.font.SysFont('courier', 32)
+mgWin = pygame.font.SysFont('courier', 32)
+mgScore = pygame.font.SysFont('courier', 32)
+textsurfaceGameOver = mgGameOver.render('Game Over!', False, WHITE)
+textsurfaceWin = mgWin.render("You win!", False, WHITE)
+textsurfaceScore = mgScore.render("score: " + str(score), False, WHITE)
+while not done:
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ done = True
+ screen.fill(BLACK)
+ if gameStatus:
+ brickWall.draw()
+ if brickWall.collide(ball):
+ score += 10
+ textsurfaceScore = mgScore.render(
+ "score: " + str(score), False, WHITE)
+ screen.blit(textsurfaceScore, (300, 0))
+ brickWall.update(ball)
+ paddle.draw()
+ paddle.update()
+ if ball.update(paddle, brickWall):
+ isGameOver = True
+ gameStatus = False
+ if brickWall.hasWin():
+ gameStatus = False
+ ball.draw()
+ else:
+ if isGameOver:
+ screen.blit(textsurfaceGameOver, (0, 0))
+ textsurfaceScore = mgScore.render(
+ "score: " + str(score), False, WHITE)
+ screen.blit(textsurfaceScore, (300, 0))
+ elif brickWall.hasWin():
+ screen.blit(textsurfaceWin, (0, 0))
+ textsurfaceScore = mgScore.render(
+ "score: " + str(score), False, WHITE)
+ screen.blit(textsurfaceScore, (300, 0))
+ pygame.display.flip()
+ clock.tick(60)
+pygame.quit()
diff --git a/Games/Drawing/Paintbrush.png b/Games/Drawing/Paintbrush.png
new file mode 100644
index 0000000000000000000000000000000000000000..3aa145212a79fbd9806d2b2e6e8c4a8465a69bda
GIT binary patch
literal 657
zcmV;C0&e|@P)|daI3(aGma5d;~4py@IP*1I0IfA!<~koYy$7Ni6a@X7dU`DspmsQ
z!w<#8(-_4$>_ku07iX9|Rup_Nk#t{!IomS~RB^Oj_`y`dag;OWU2kBZDr{Y@sFnR2
z1~AsZL>Im^F;GRNRrvn6@T*W>5jx($#67&l8KEIxW|$bvV_?kBM|aZ1nC$IrnzSB^O-ips
z?LC&qXZ?7rfU>VvZ??NwkkU5`Z#a!jDXm-B`?k9MN`zms3%
literal 0
HcmV?d00001
diff --git a/Games/Drawing/get_pip.py b/Games/Drawing/get_pip.py
new file mode 100644
index 0000000..70e6ac6
--- /dev/null
+++ b/Games/Drawing/get_pip.py
@@ -0,0 +1,21492 @@
+#!/usr/bin/env python
+#
+# Hi There!
+# You may be wondering what this giant blob of binary data here is, you might
+# even be worried that we're up to something nefarious (good for you for being
+# paranoid!). This is a base85 encoding of a zip file, this zip file contains
+# an entire copy of pip (version 19.1).
+#
+# Pip is a thing that installs packages, pip itself is a package that someone
+# might want to install, especially if they're looking to run this get-pip.py
+# script. Pip has a lot of code to deal with the security of installing
+# packages, various edge cases on various platforms, and other such sort of
+# "tribal knowledge" that has been encoded in its code base. Because of this
+# we basically include an entire copy of pip inside this blob. We do this
+# because the alternatives are attempt to implement a "minipip" that probably
+# doesn't do things correctly and has weird edge cases, or compress pip itself
+# down into a single file.
+#
+# If you're wondering how this is created, it is using an invoke task located
+# in tasks/generate.py called "installer". It can be invoked by using
+# ``invoke generate.installer``.
+
+import os.path
+import pkgutil
+import shutil
+import sys
+import struct
+import tempfile
+
+# Useful for very coarse version differentiation.
+PY2 = sys.version_info[0] == 2
+PY3 = sys.version_info[0] == 3
+
+if PY3:
+ iterbytes = iter
+else:
+ def iterbytes(buf):
+ return (ord(byte) for byte in buf)
+
+try:
+ from base64 import b85decode
+except ImportError:
+ _b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~")
+
+ def b85decode(b):
+ _b85dec = [None] * 256
+ for i, c in enumerate(iterbytes(_b85alphabet)):
+ _b85dec[c] = i
+
+ padding = (-len(b)) % 5
+ b = b + b'~' * padding
+ out = []
+ packI = struct.Struct('!I').pack
+ for i in range(0, len(b), 5):
+ chunk = b[i:i + 5]
+ acc = 0
+ try:
+ for c in iterbytes(chunk):
+ acc = acc * 85 + _b85dec[c]
+ except TypeError:
+ for j, c in enumerate(iterbytes(chunk)):
+ if _b85dec[c] is None:
+ raise ValueError(
+ 'bad base85 character at position %d' % (i + j)
+ )
+ raise
+ try:
+ out.append(packI(acc))
+ except struct.error:
+ raise ValueError('base85 overflow in hunk starting at byte %d'
+ % i)
+
+ result = b''.join(out)
+ if padding:
+ result = result[:-padding]
+ return result
+
+
+def bootstrap(tmpdir=None):
+ # Import pip so we can use it to install pip and maybe setuptools too
+ import pip._internal
+ from pip._internal.commands.install import InstallCommand
+ from pip._internal.req.constructors import install_req_from_line
+
+ # Wrapper to provide default certificate with the lowest priority
+ class CertInstallCommand(InstallCommand):
+ def parse_args(self, args):
+ # If cert isn't specified in config or environment, we provide our
+ # own certificate through defaults.
+ # This allows user to specify custom cert anywhere one likes:
+ # config, environment variable or argv.
+ if not self.parser.get_default_values().cert:
+ self.parser.defaults["cert"] = cert_path # calculated below
+ return super(CertInstallCommand, self).parse_args(args)
+
+ pip._internal.commands_dict["install"] = CertInstallCommand
+
+ implicit_pip = True
+ implicit_setuptools = True
+ implicit_wheel = True
+
+ # Check if the user has requested us not to install setuptools
+ if "--no-setuptools" in sys.argv or os.environ.get("PIP_NO_SETUPTOOLS"):
+ args = [x for x in sys.argv[1:] if x != "--no-setuptools"]
+ implicit_setuptools = False
+ else:
+ args = sys.argv[1:]
+
+ # Check if the user has requested us not to install wheel
+ if "--no-wheel" in args or os.environ.get("PIP_NO_WHEEL"):
+ args = [x for x in args if x != "--no-wheel"]
+ implicit_wheel = False
+
+ # We only want to implicitly install setuptools and wheel if they don't
+ # already exist on the target platform.
+ if implicit_setuptools:
+ try:
+ import setuptools # noqa
+ implicit_setuptools = False
+ except ImportError:
+ pass
+ if implicit_wheel:
+ try:
+ import wheel # noqa
+ implicit_wheel = False
+ except ImportError:
+ pass
+
+ # We want to support people passing things like 'pip<8' to get-pip.py which
+ # will let them install a specific version. However because of the dreaded
+ # DoubleRequirement error if any of the args look like they might be a
+ # specific for one of our packages, then we'll turn off the implicit
+ # install of them.
+ for arg in args:
+ try:
+ req = install_req_from_line(arg)
+ except Exception:
+ continue
+
+ if implicit_pip and req.name == "pip":
+ implicit_pip = False
+ elif implicit_setuptools and req.name == "setuptools":
+ implicit_setuptools = False
+ elif implicit_wheel and req.name == "wheel":
+ implicit_wheel = False
+
+ # Add any implicit installations to the end of our args
+ if implicit_pip:
+ args += ["pip"]
+ if implicit_setuptools:
+ args += ["setuptools"]
+ if implicit_wheel:
+ args += ["wheel"]
+
+ # Add our default arguments
+ args = ["install", "--upgrade", "--force-reinstall"] + args
+
+ delete_tmpdir = False
+ try:
+ # Create a temporary directory to act as a working directory if we were
+ # not given one.
+ if tmpdir is None:
+ tmpdir = tempfile.mkdtemp()
+ delete_tmpdir = True
+
+ # We need to extract the SSL certificates from requests so that they
+ # can be passed to --cert
+ cert_path = os.path.join(tmpdir, "cacert.pem")
+ with open(cert_path, "wb") as cert:
+ cert.write(pkgutil.get_data("pip._vendor.certifi", "cacert.pem"))
+
+ # Execute the included pip and use it to install the latest pip and
+ # setuptools from PyPI
+ sys.exit(pip._internal.main(args))
+ finally:
+ # Remove our temporary directory
+ if delete_tmpdir and tmpdir:
+ shutil.rmtree(tmpdir, ignore_errors=True)
+
+
+def main():
+ tmpdir = None
+ try:
+ # Create a temporary working directory
+ tmpdir = tempfile.mkdtemp()
+
+ # Unpack the zipfile into the temporary directory
+ pip_zip = os.path.join(tmpdir, "pip.zip")
+ with open(pip_zip, "wb") as fp:
+ fp.write(b85decode(DATA.replace(b"\n", b"")))
+
+ # Add the zipfile to sys.path so that we can import it
+ sys.path.insert(0, pip_zip)
+
+ # Run the bootstrap
+ bootstrap(tmpdir=tmpdir)
+ finally:
+ # Clean up our temporary working directory
+ if tmpdir:
+ shutil.rmtree(tmpdir, ignore_errors=True)
+
+
+DATA = b"""
+P)h>@6aWAK2mmD%m`<4gN^}MtBUtcb8d5e!POD!tS%+HIDSFlx3GPKk
+)RN?{vP)h>@6aWAK2mmD%m`-N@Pvb`c003_S000jF003}la4%n9ZDDC{Utcb8d0kO4Zo@DP-1Q0q8SE
+6P(>Xwfj$MoHf@(`KQCU(&8g71HO0ki&o<#cYNZz>|C(zo>JZGyl;FMx!FrO6t%vRrOrPh9=?L}8oY6
+ou)77Hd@$a4r7F5rryfn~JTAHWO)@Mv!(a4fto86JiEF(QHSJ}y)-GntEpbmcJyNSL0Vx@Gi7c>xAuL
+EgIxovfWq|0NvR`+SC`IVq5DSMEVyuc5y>N3AD=LF+DESFFQK3yL&bIL-tGT-b6~%(tWCE
+QA8qFLP)h
+>@6aWAK2mmD%m`<{zTe%hm001@%000>P003}la4%nJZggdGZeeUMUtei%X>?y-E^v93R&8(FHW2=X;*U%xw2l%3W6Py<0o>h8I>=Z-x4>3Qeu^QF|!Q
+E#E$`?b;8%9;(7<*M_Y#j*ssX^r(Dmd>coV;T2Z)}Jd=35ADU(@5Q2r#EE2I)jML=NjONY)o=yYXtEu$-H-Gm-+BOZ^V00~A@_@kKt#R;YX;F~+>#O^V-@pfx`4TJ9IRvvJI8Va8$ENdb=f@y)O)kTy&U
+t8+keW`k*)triwXqw@TIWQ=kz7M~CAHT>NbjTlEYY)AN#)U|Z9b9>#fqZ|RKjCp?0)`@@)+QZGV(<*pWow<6RAI8<%7GiZm__
+Ldg`4O+Qpu7fWi`gXwe$yB+-oXAT^C-o>eO(u)G`>R`0FaN!ISX|%Tmbd@B{p;!heuwGfY&xCN-zpmA-{5oleV1B&e-FWh`ubGg0izE%
+KZO)wlw#YA$T!=C?FodnQsl@e#K*pC0%ZPUoT5Xu16`yZo4?Mm2gR8?r;Ukv%TPaPRYIpgHc4htJxYu
+31A&PNe&h4w2e)^%_UDMfHx;k#%rzESxFX0
+R}T+&50~)Fjo=x}j=wK!TtU+k9kx$}@KO4FHcr{QMdYUqkGc4oVwSXF^3yn{;cse6L;km*aWLjY?u`B
+1>(cZ-(H2Eg3N2sONIU#CQ@u5ZKCbfq;O15N=grLo&d;ADssDON)B))X1`r}2Jv~}VIMtf&o5~8eW>)
+o|`KIcquJn2mN`9rQZ=1QY-O00;mj6qrs-OWq+R2><}#8~^|s0001RX>c!JX
+>N37a&BR4FJg6RY-C?$Zgwtkd7T+uZ`(NX-M@mHK1jk!!gU{w^8(#8-4@qNf;PQHVHkoU(GEAVs3R#m
+z9RqqW=K&YB{}V`Uu;qH#rdA`#l^*MEvrg$RUeq(^`6#>w33!&%LQSQSGi)mCS@yFy(6+@QjvSafXBt
+f#l>R5_6-+`RD8F?v+j{g`%9kspNc-IqsW`ZR`5M3cvaB?$xG4!+=!A2TE1n4GBC)mRjiUJkSTb*Wjh
+PIqbh4o>Vel;#qJIGJW#G4{cL^jb5Gf{qaP
+bJ2{7ltA&thiTmQ^&%NG|a>t9YSx=P+iqqN2{L)Ld!LWMQ$3ys9$U-Zz4SH1a%>qWdN*nXrg=@cb4eE
+)*B17tl@(8n8q9_t)F6+2#AI%YS8`zFc2_xc>b-X3H!VZ)lxKpi@%;cHhpBSuO~CG%cUwUE5SNCZM^P
+d;t3SJwDzvsG+=y$wx5sfa}Y_>XJTLLbrMGnD6L2JOnAw?WiCt>whU&{G&b#v#iedV326BSQJ$*CCP3
+D-Lj|ULUStV7L3Mfrm`%QwA#i5T_rMiz|SkZ1YMF)DiM+7S8~m3+P_7V6fuB1e)%sXRc!-r-sP1X;oP
+%YTW~eFXV^pFC#Y3GK)+n3cm=XrnIj6MNYHS}p0Y+?C5S!5LoVd%TX3IC8Z5O?F~CC%J15UQMzjuOAy
+}hiuyO8u%@y1k>4ReX01TYqQXC~G>VZ0F5QHKZC(T0=$;s{M_5>*e;#{D6Rwp9c25m^ow8v{&K>^e1q
+L1egr3PoC1>3S>rL`CnbLo{f(?9|se}KfDXwOjqRrhkNEWM?tS#3BtMZ-y8weAoG#i4P23@5fMHoa%+
+B<$qikl+6aI_rE9^6aIcxq>v6*CpBKHADdZ?lLr_YwF~0Fb}Jxf{bEPHF$a>Euk~MKj-ylTt4el(8|v
+~A>_t#b)k7CAkam01~D!4ZNg|V0x;I0s4S-xgno2{7!$D#<`9Aet(pGGSsjk}mi0tgmf4mhCOyv@QPfvQt>_eA0?703f|_rP6D1N!Ocn9Kw`v-2!0BW5R)9t=
+|MJlMex_Wz>O{XXrL2(aS-b`elYMQJ3GmYgjKpOBRsqLIjJnN;Ne!vxk76@28w7{%c5>WJWlH
+x}Qgmfr52$^nE7|5IXR3R?St9NT0w1Z$$f5
+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
+6Z}Y6!0q|XU}&Gy-s0QEmK(GP>?P-@-
+}FGCAq(8BmK)ENY%C>{@kup=535S7)WhZuWwBh=>9d(yc-jKdNiNgvm4>y+ETPyHP1B`uE!<7niVo^W
+U`Ct4YeVdkf{o@?ah_7C}SWH7MC##ScJ2L7a9WpkNjV9b^Y_z^_#iqpWgiN;`Q%i(y>LOQ&~7QB>1siU)Xw)&
+SA5B?S;v{Y7dN+H1qkMm=8^iV2h!C)NMx!qL0)sc2&vioyyrq9X7RUf2CRss-ic;5$@7X1`}kcK82*9
+y$d0AbKjizq^@o0a1fvp=A`_uTFOD;==3l&vb;Y%Z#JwwHujGsH@(B%aB|{o4y7L{hr2ugEg(4#n4T7G4-3+x`A?N`r4sYW6%Bb`^1;659gMKsrE8tRv)CWQ1q|14)$28C`)1kBhXH6Sca6>ujIgg=u&;l-TP1
+#QSgPwbOR~qx4Mw4b3NIaWuf%Y)y`nKIVkspc|2M`fvLF};57QC1r{D5ASFs@jYN???8fR~<^ZgwjiA
++pBnG)(9Sp4=g9wF=nsFxg6M@7p15sJCIc`fsBWag}TmkvwWaFI*RL^PAGV_;eXgBK@Qo?Ed7lRa0Oq
+mz~-~^G)(ik|gvJCPG`fQuF0D#?l9lXX#lRb_m1OGLM2E*22!mpG(ZLbuLRSrzelcSF
+zls^7D2!n9@9fb3P4e?(bc!=K@80lO0aY~&=+HOE(v^%|Vdc+GV;)avEO;n0ayM8fn9xseTzaKDiJhf
+q!_S~>k|07&q{%;L!7+h&M4kjD#Md;FQb$aBPe%k${DqM}zsfT_(@Js)#FB-(eqnqvgbLunUF-t0#LN
+{vkq8<2HKmt^y&wVP7;$!j$;(N|yhMRtY!pwZY=Bpn`n{6MdI{PxQgMYe(HX5mr^5@4CWma)E74;=RW{-kU^pzFuXY%3m
+@Y%ll`DXgLKFW^hKW{I`U$!H_eZHJ2GWj6~;UQ}{i_b7fylvqE>^t?uYoBh^6P^SGQ&Ug1=|4USO_gs
+M48cA>7`?T!I!Xpc`J=RZAvhk)jax
+JZZM0lj_`L7FC#_9G?Z`u~WBo#Mu`aBu|F$XaYs_!mH}G(N8%Nn=NcVBzXzo34+k_80zvnYWgDLITog
+qi)6&Q4O_ZW%yntxp-0&jeg5?{YPLmf1~ek_@IV>W
+aCyyIdvDt~693NQke{e28$?n5
+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
+B9b00*q}zV2_ch9Oj`m5#o{oP;M%zXO
+I@sXZb?@d=*Mr-eD>Y>^sXmj`-~jIELc*b5!}Xi9i;F3HW83IW4*@7_Yn{-;Qp;^ll-wH@gILYhw!w!
+QaE_yg>T57C$0)&_!jn#QdZI529V)XAA14@VXfK+~ooUY5WUmX`pXgmH;kt0V;reO`?H2Myb6@zt$(c
+*j-i^t?IKqKj#$$K2QdFmS$+2S~*eY)Wp>_?5$~d;YAkw?EK(>Z&eYbW6iX%E%rt`BK4IPafV8IuxzI
+UXrP`h{GQHQ3h1bG;{(I=9**tvrasz_fhnm^!Xwx`CW%mGpN>`q_t1QYD}U;#$t!@+yDpX%-n
+s={#FFJvucRY3!PmbK4af=Xpa|r
+`Wy@UvY6sk*dNdKevjoVF7O>Z;`rvFM;x9B+zCUm(7ZYWsxZfX;ylq;<)ua$UhmnCnKQ**iL_6OVy~cQ2EEPSl7#CKKZ)SJf5c0g`Ac}QHi{
+MN`letwJfLCGk9&9zJl+kbzSxhU}g}fjDiLKU8hybS&OURh5P6nXm<-ntDA&9&>;Ii8JU_sJzK<
+33+f-~EDBwoL{I6V}9`Qg>Ow3-B!MFQQza5L)M
+Lq>0DS*a*w~LLqg_W8YWi3UskklKyHH+M!(#06~4JdZw=J|28tgC44MOkg-C9?pPeUf|N7?b>Fe|JS5_E6C$D#2023DJGL|2wvTAZ*2-Evzsun-wYLzz
+A#aO_iH|Y{~IW%cAzXbw2B@JNQ);WkH;6w@kt
+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
+|zkgyNeN0Gg&jb=mQB3fh%i_foujaUy~d7BqsK
+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
+isudK#Wi!U5tZYqcB
+{@MB@kT%3O;47LskuvO;}WooBnjl2Nr~S}Au7HD
+|Mi_E4O=#&Ny@{fhF}Ikq61ZFGeDy+>b^fWyM{jYq!I6u?44*jo*wCGW@2qi5S|5%>!N$VF17~x`p8i
+ipm>60cY4X32^}VNo6~v+kar!+ey_08`;9uNli|3f5n{4%GHg_f1Dm-
+*fCWLJscKfp3nVN``BSB1qbx5h|-(C&wjW5ko#V<|7esfr?N!IyRdr!CHZpv{=K8QE5EmD46bB*Dh~E
+&QnmGy>RouylOuIq6aKvcFcmorxTmcpVm*SZjJdEdbq_|odH{f%T=sb6e&~(xCjC9LNf@j%X&o
+2qC(XkmY{FDCFtg8xuHYrPAq1GCtT8f4d~%u(CBKLxNw}EQQt*apI9<@J|2`?AZ@%kpR4-(M+g4h|;$jMC;HP^om}1v#cx_7l|uAa4Qs-tS#L&2+mfjsE2#Uf=&oAXpdVN@h
+WN`>;5`Z&cTdck67>1cinyZaDDmyQoK9A`0@Pp<$Lk!t+;*rLA*KtaB(g0PEdT}_p7_NZ}|D{^4}kC?
+k?Y4-hO!B->IvcpDrU2YA0`KmD8DT((z8cpEH4Gfxy8J>I>UbgGjt3Ox$AOGdM$L)FiYe5`*MOiosx3
+6^iS>`qF9u%H%GD8dv)|oFFZW9x1YjS-YiX9l7ToFSB7N9abbdW=bT}HSn_BWE?FBWa5j=RxQ&e=Lhk
+;j@cXa1wz&eLk?7P_gozz{d#4*;ZbWk6X%PljS4KuxAU%YIdK7Vyu=5q5lVggYp8O*^t;DveiwD;-9G
+m~&-^rG`kA!!MQk%TO*?D4Epq?mutRRXH?8u1ID4IaDClxQeF02TthaEa)hAyfZV~VE`AOgM%X*^Q$Z
+x*?0USS0)N}tl>IPuJKfn3*yYHX-=b*6Hh>q|fg{$ZOIo!UJ-`VYmHM6kAgdb>6r+wCS1@lo|eZip6O
+jPV^7e_N^@eil*2C&Q_&!?VS#XJbbz9&smugkekhoopa`S{QQLg>b;q$@JlB@iJb`QCW)Yh&kc_0{oY
+?0r10V~Rcp&iU*1lxNSHIN|fp=7M?B&ZeF#(4egJ7YIG#xZ~&b-bDH|K?X__Qp;e_#LJ$-tm*W4EbWi
+`YvT_o4fhD+&eT@;(D4;CA6L^rM$6j~FwjHbq-SB{mU^%M73li@A=-mIVZmy*=Ihbyh^hA(ohKO>jj+j
+xffh8i5Jcm+zcHD{xktP$bn+BbZonOM=@oDp*l*HQeveN$GUx=x;4n?JprMvd}toz{s6ZwfZrf9bwtO
+Yn~W@4oVE=*%1VtK`k@&C6L*l*
+{~6-i$`02bXoVPUiE=ZM&`W`8+Aso2qV;?4qew+cuxe-wz(>^TkzRz7}m>w^g-j%!5^RbybvC=FfGp&
+fDE4x4&2R+oo!YPn)d0HV^9Dd~0@%%xO`rR{5eWs-mu&)9Ov%O;$H~k~Q*WuD|vHm}RH=r$xRA@b}HTcW+MWx~gZ%+q|uJ`u+6u6@Tl)BE+
+TZ>SNxd+j>RF>di$S&-w5Bch@O;0Q8B!twl-nRc5PnS>2YaDqGrBJU^Ykdv!`w+{~%_ECC_S+e-eRfA
+F1&D*~*Kl*xmHKL16de=jI~zN+(VxqDeQZAK)xoF!iosno^A7X4mV?bp?|q^B>-kF=4?AFlI!^>wkzv
+7a*r_P%Vk8vxJc*V%(42IU>Bt#|dtrXu1K_f%*I7GXRApOND+A?ge)>Wl?&;0E
+z;pt8*wc1ZlsBg7EBYR5y2&^HA%erV
+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
+{;5@Y|ZhdUCLi4_4xlx{jD1o
+^vuCxy@P#9IN4DQdWW%RNltnj;fb--asfMq8K8P15W3L?bYs#Jr5$2QpjSrXU%zVb;bi1jW{zAeNrw(CS4e8wne7WJ^+iGwrYDNZcgC-oG
+(diaPnk&&hn$Jx3GS7(C6ypF_&{+Bg^@IPqyiT5;Vu30P+KC;Dv#s#k=R5aoV^R5QrvZlTgk_h2yreX)njZV)i?W_8U
+>^P>*j~QaGj;0_%wEg>3f>DE}#k@yYyMuu#bdaVr6)waU4U
+Hw6b%cMtLxtYhxA!3q-#PrT!-$6^W;?sO^xvLn-OJ{}TLK*d4UF9Do$zjh56{+nv_DI93A_BU5>@~OQr7)0!#G)~EnfaBDcRM`7%w!^Y$s
+(k&)NMSD!84+sn;9hb0~L%5pZ$~$1xPQ#M9bpqZgul*XU0juBDF!#7EO3M+Xm1L=JLNFw{4xZp)du
+Oj_170$(p?5+wxkn5I2Q2rZc`4042g7IGhIwUJq`mv=0V{UZ`Ibehx8U2#qaI}qoN|Jf7dX-vpeLQpa
+5NwG5{3Xq1F-^B}vr*qRbH?o%nq?=A$dC{3;E|V^|?9J5*od32dd#svOWCy#Ag~=@exs*_hZ!Z<-0LDtO
+i?MDTqBLRoCrnL@KfN>uFS7tOmjrVd)bOA&y|CJ%ghob<>Ce5s;#)!GW6DQ-YbVL8Wb!(Sq)sLQDT&=
+Nc>{b{-w@-CP|=WEZsg;<_wI#}waLRo#F}Oz4aOIfHhEbS!h<&@kijnggfAs_Mcx*ifAyA=mHV}o6
+T{0q-Vt$vNcegQtrVH|92QRw0DqPQP$4y=MH!zcBAeeQO#qt(52U&KVSi&sFcf5=vR#(LWuEFbrGa7eV|C7PIv7K#w@4t{-HkVWKhxPV(_x@`^`uB7jGmV8r-r96}8r)p^VPbtjgK
+NW-O`rJJ3J<_l6T5%0nFQg0q~%3@pj|6t_s*#3W-MCdTJUI#$sUvTSQt(M}|XSe4p>D-v%!~XpWfmm5
+m=C|e?;_;v#YcP-ppS{663@nt*_l)Q1JD^9A5FdP|4?Nb#_W_=WlKa!BVbby>jCJw=n}8xg^29)h0LRAw*H)olAzXP%3LBZ$I&z2~r(h8<_s4@^
+8*`Y@a41yFFa({<{`tx*lk|PsLXveH@37=R%IoU(C>%|GwENNIt$z&$*BP$;&N_4KWZNHiWI7mFAk!x
+dcP8M2gY{Ll=ByeUu*@Om`I_%0>yo7b$bh9bhf(nvN7Tz{I48;JoSWoSlkjRjk~Rw6QnEaQA29-c0-;
+R;J(R;~g9o_zAi8w`?#LGP*UBqYi-0xcgjHm)+5@8`|0!HnRFS6DMW1(wBvF;u^ShXg2orwN#i6vfsR
+UhsEC3P?i-1PPv5lJw;Uxt)8w@wS|MP7+7{cBqQ4m`Zim6~%tj=sb8=<;l6mat;{2AIa{TDuj$UP3_Z
+a1#VBEzmAaMnhGV!}z=#U1;hFQK{}{N+!;L$^4&B;|q+^}AQ6NnXPCS?Znt56|De27wayB^)erbsMT>
+=)ofTC~{7uAs~()>s^u-6FKS~3B!ABm78>NotZmO-w^Duw+Mse@Wtg|aOWTkmVT*=_tcc~0TwKwUCKG
+)x7PTKIQgTIz_Y7ut^S?FT&pWTQaxhe)|vqk-VRSsUxn!#2w+=R%k7HOqSZ^Q*T8#VS(ix~Z`4N+J{Q
+F5Z$cN3aAUA6yP*9ZACkKEmlc;wf@ltPwNNy%>$LOiH`EEmQ&P$F!Nap~pBT0getk{smAW)Qa#Ee?DE
+aBe?)c_%3`^|5T#e&C%jZ5w6tGjFO3obCLo8
+BW%dX&$M*j5aI;|UofsX!E(Y7X1s&ZVfpuvkX5Vt5Qyc?wry<6j7ccs8+cLGp#r)nsL<8sNi`sx@y$9
+VN0|2`ypR1tP12~V&DxS-=@m)nhGTy<-kPk#MXUSu;mH|?zuSbpai1k(xrRP%_`Laqk)r|9f*MKzE{4KUQ1;A$>945UAuc&|!UUoBa~x4&CsS^#ze
+Jrvn41ux4zH~{oAD;z&;~5YfR&@W!Cu%x66R~{VTDpwO?$_5%*Ro-8IpOBq;3G@G(IXR9+&&~$9(n@s
+{=Q*7x>&){Npov0}PITdh+uaqPe&tqcC5_90WlxNo&qLW8JcJ#$x}P&wTm|V%#{w0E+f)MTfb32A$qp
+EqYJqaQvtVF`}8=S_UZ-rnpCqDY?#phoD)QgFK8BLo7yU_gC{U`3`PLB*j4aWcc0v32
+5Y{f9e0gm*iMO0ap2R3YYAo9_$FjC)dKv#NQz0maxB5&G@?hdX>txiLS^$!GT5vf-2^G&w!Kk**%0}v8=D6H18kaS7hhc!rO*=iedzGo~H3W+ELCE05n
+V7Rt0cai2|ojQ21uCsc%sBnQ0FC;dToJR!MHJleu$J-=xSEYAv^3XTf_-do*T+v1@K)R;VeUC&Uz9kwsJf0KnqT*`_@nh;H
+C9JT>Bi$^Nz=*&SKdPy_gHUDRD9Vg&Ma8Cnh(PrY=dtKJ^Kr=0LR@`rLzmi#4fN99x@Yio`JP8RL}NCfmUX76Oenz_hVQ@2O8OA)q0JZV!LX~8m6?=
+S~)WpnamAvhut6pYte($N=&by4D*)zEWVuHajY+Fv+==!F7<#HNETDtsVvpi*zfma-~Q2Jmw009kvJ!
+B#}keVnF<;ZmunrUY02hJ|5n0GfczalyecR+6R9N
+wfu^h#|<3r+nG2DiLpA2U2(g*_eO}+~lYz+R2?An>k_BXb03qPI9=Y>QG4P%^vOHzM3O$oAK}Cp!f(r
+da~%p-f8;~p`Sf>ENAXu@>K`!t=$drFFBHT1Sto{6}Dj~fh*ceqV>F4xMfR*nw;LwHJBIHVVggv!E6+
+{@CAqyn;FN3?!Y8g95ZD>osxRO;O82jH}?S7sKuD!?Hah{zb+QndhLPHL^9^ffC*R%;YB#+b*v%MgKR
+U{oemiG?sD-_+jTC4<>ePTP@SaB#a2-d<)hP^QDF-G?Q>BKl+AIc1)}fUxM*woe9p&xZXr85AZW6wLCzFg@!cPJD4WmmbV{lTP~
+}^c*FpNCB_-)zL(>^O!RL0XC3|p=rJa>37CFxp)KL%SGmjjF;#<_kcI}OYo9irlT_XP=)wx+jR3YDEx
+x6_s}$DC+}md+(GVbS8EO8hjfPDKDx!PEBXg<`PfP*|fwY)&E@bg{6GA8n`jE96zwOY8mhyi}A*LoZN
+T|uZV%Jf0_ohC6Wut^ub%+!V~Zu+KMo11qhNZwNe5a7Bm>FwIvlkC#6G%;7jn~el)(qr8%SrVPgV9E
+f<0XtY(K*Rgf=k)Ay~*_FhBLp=fbqsyqaryM(SGj2OwF6p>>hIiobgGXUZu(Txy$kO)?(Ljnz!fYQ*S
+250?v~2PLlQc9f^^UxVA7tH1yy7e4GqS#;a;#%>Qr}=}CU
+(g?D)=X^8yx_V699H!B{LHXc8_yjdF3QO60_@
+or=u&d~A3lh?h-45m6i$;
+OM@~HHt}@gG0MVB&2Tg7BK3eHtj2$bR1l)clOf*T&}5eLi`{VHq1brA8x<#AST?;lbRwxL=cFhWI){k
+v$bS_Db-u~j9U6?LdHA@^kYs6-6@*JqzV__EQrC+sFD7*g*t4Vg|K>GD3_Gl95c8COZZQE@I-mpXmlq
+N+@trO(G!hbz&rkcR4KVV5?kfwZ^%EeyV-(?16`?z2?)eFE@7N<1W!a2@4xvZ6xoSHL68O;CBMOgKc3
+L=#&69^sY{;;&uZl1%!Pbu-;Mh5%X?E48M|%>;$jg-7f0gECtuXG>v|{$y
+pzb{^;!Y?o>&L}A)2Pyayg0kGVx)@)p76j6x!G?V(;=FdoE&evBk8TU|zv5J8TN~)VG;!c7_T`wUm;d
+xY?R+cKKt$2-_k#QcyjQ+&i*w0w{frLv-rJ~ygHe71H|NR%zEZr&)CYvf6z#hO?e}MT~fD
+_gPE_aPY~DCv&25|=mM|eLD^D7iRY_gU6dI!(&d&9nqP*^p96tvFv=WX*vUEb9i5*=Z+hP_oGoqwhvI
+bRNNOl6ku%O|qI2_ly?E#mmJ+6V_gW0b>?Y3bi7XNkoVATUDf*v#C
++a8Ety-}Roi!Oo89zp0QnfiQcXWv2XFMo)V`Lc?={BDQ}&nYl?j>+`PkbH`Q6(E5_xlGw3=Y=9bEhNo
+M@3+o@4BFsy*`UWbp5E>)TgWFoZ|VAN2|-c$bggy$9Vp6W$`Dc=lJS*dAP|P}480JT`cXu5LD;#e~k4
+E>icLXZ(WKMVR;f_$|YRpIY1Ill!TE$_>Ps--QG6>F-I8GO^$ELyT21t#=7c5I>e!Gk!r%pY`}Ea%VW
+qNlEPV{hK%6y?uA`RrD3bcT6M7*mQ1NS7O{=tBJ05q&6?j;x0A+j&+PA!G7e<3r7N)n@WDwE6{(O{P4
+}m$t$mqb^vTGGKF%xi7dcLUEH;re(fveZ;35^{^U
+3HwxQ%8#;1gEA=QYLa-Q%Od;IWeW1Nn4&mt6=PQ_Wr>MG&wL35tmR6}nV)=Y>c#F_VIA_gNE;w#7$Ra
+$8p@9H>`Ie5*gffq+5PC&RlJ7+WE~$86x@B8|K%rTdbUf59@{3ujHd;3_w7mq3~jC%D{W|9TCa*pOW_
+cE2aj*tzYBb8k1MmYX8Cx-l>9;1IHz*7G&5OMLeGCr^T^93$~O-^I9obI0MjFD4zsvL5fxyr`0d%hL>_92ndclV%0*Qp!secGr6(xND<*Kl39StOSk9Qa6*
+bRAd~_aq@3Ro;;axYYAhEa3dvt44iVnW3>rBHPM11I#XLF#dCyfzh_8v8(f#@%TFe~XqjUJx)Fdm|=^
++?lwE8{d-w>sUlE`P;LJbiUULvvw6&^_dk2PdDxyTxmIBR#6ezfD
+Ta-cyT=Vl(~$r=H17vdJby5hGXn@W|P@D%|$v&jnQ;SwCEdrUxzE1P$Zx!Yi3&Wl_xQ=MA16vf5{u9i
+88v4)gyt(GZok}|KEqLX#ia?&*(nMKh|7zi@Ai9B%$kRhh#NUNND`Q?|sDLB5Ys`>mPs}G*0PsX-IFM
+ty54yc)H^0_|md5gF
+1uO2)t3~L5I;!+7p0mw7rte)fqVPl}|XX#VFTL*pe+VcKEHH8sWw17}7rZ4hURdR*F@C7n~__qg#-`{
+Zj*=H(wtS|oBlSJH=9Zr|BR1-|&$iAaGs*HBQnfD+XdqSvSX(}(w!LB*EW?3z^5~OACc5DrLSEvE_r#x3Zn`O`nPdA)mR-1O%uzx33mSs5t
+O`P@{^&)1uF$HXIZdnxPZ)O0C_&h@&vnw)~*Kz%ON&&j8$?xtR5-SIB_hh#xWO$w<61krbkL$ED5Z&p
+I(F{q-~7VvExDrgHhf(&J0sx9m(?yI%lIWm-Qu4JuTMAcK3P*N-TfmjBJz@*TMejsV7TABehy=r*rS9
+y!PG0qh8ps4#xYyayE0Q(gwVV~eT!yBzU2$(IJdoVcaMtJ$6A|=4{sTqJjaP4#`w2E8v+H?<$sgpxZc
+?E(VOu%{BTWkv$uDxtE8$eqB{B97CgcIDg*+U&w
+j93a&A&YC`J?HHyC5)9g&}i!H}yCG_zgdF`XH6AZ?sZb*gCL0l&qJfbi8u?@Yjc-3d2t?$)x9ePby)>
+cKA9MW{MZe5$gsGq)~)AwYmM$~WGYpGKY#d2^UId0o5XvUx;bul+PQ&>6}c8oXR9T;cU!Di^f!tcH<^
+JbB4=*XLgQ*q{+CR}wXdM_pMNiJQ{Abpl}{AtGyHgS_vlbngoU&@QK$MO&fX~yT}`E>Nwf>wf;1Z5it
+aeiTZ)`*@gCaCz#9y~a5R)qm38ZjqETli`@rha>Oe-@gZ*31<5lGj7$ChhI@isY$!udvp!l2iBoRfHl
+jPNmL?TZ=1QY-O00;mj6qrsQRMS^(3IG5U8vpc!JX>N
+37a&BR4FKlmPVRUJ4ZgVbhdA(R|ZyUK0{;pra${$urrB&0SS3reZ7>RQ=F0q3+K`wBO#cG$5cwQ~HB-
+gSUGppsZ+YNV!xF}ioFzt);D6UjmUJlRvSALsM_xpwsyI=llcr3Ic%Va
+CRkcsUaIvDB
+f2lkzYVpGutlOuSZ^n~Ar;W+pBw@`tn-jYdb}q^b(#Jp_}C%$zn#+R>-W(+|n36YP|{KKme!8_Q#|A<
+5EgD-*m=#;{~Og{ar3Z%;p-Chtx@{D773PA@M{zCXpfD2o0$`nXkAtW_Ze{=*$InG5#D)q$W8PQwLr(
+nAWjmBQ-UWbjoSbXB`iZ)!XmU6dKkB1vg>lWth3t+Py8yRM7k(6}=;;b}oyrgMl?@Pw5d<+6|t6DD<8
+V4XPVS{S+0w?Q;1JB>%se)RtAeKNG}&Dq=2^OJXM9(0;}VRKqI&jW~u*xk7Zz~pi*_69DW_-V;5H8;S
+Jc9^uYr~Vilf1Frnregj#ajr|rUnn5y|7Q}#AQ5n0r0^mG!X?mT8#+}65@;5MC$tZN8vmqK+37M9Pn$
+et5qpK@x{~Fj5jGRiKAKWwHs)2{BKoyMF#|Dq)K{hfD^r&xyf~@L9BXcsadleA@^*3`BF1N>buqB+gG
+9C}#Ya;E3Lq~d_)d^Xj-lWLsp!Pc#GACRQfNSG_R30lSYIAwY*U*$XC}xrFw@AiNGc=O>MojgHkxi<9
++L%DVnytyir*cJjdY!y@hY`4$QjRiGoO$->J6~Q0j|!Hq}0i#(5tlgbx^62fPo-^R3%DHIyt%HblrrS
+9lFwyceI@{MjOjsS?G<*NLHs9kzvrhwpoSe*>KGGfG9%#wnh5Q--gRuPn#;aQ|oB#>xj@oAZ8lTffShEI8EzBU=
+xHiI@gcy3LNno3kI^oi4?Vlobh~6U_EGpIfQ-Vxkr4xH?Zpf9|q(xDR#4byKMs9&4Fd;qWomRj=-YGX}N7$P`L
+a?`l>p+T(A@5{Xv$Il~5QHB}GM{%MB*3XbDas9=EclR8aX~knysMOY!?&5cG3F0J1Vjp$7HJNHD5f
+=y@bO%vSFtA`810>PCtMp|@~)Q61b?my4Au7jcZ)=h`8>YfCdJFL7GW5zbTsb`_yx1uFZ+<&RL9X4%8
+8Q00vsJ$gWG2(=&CCiV@HYiY{}=bvRT+_7tLx*&m6Yqjt`E(T#U8gY0vuh^|+Y~%O5F+1piV+u4_j+TM}nBNti5Iy>~_pTM7b7*n3S;-v$qeLHdwOOGO1$2F3;ZfIyZ^M=_pFbQ6N9SYYohuU|`2m6(B|J>SPKizI
+08tO;ndAi@L3uwW2)InO8u(xnlJ!Y;r6I(EdV`?5}!f5UM@7!ddiFc1R8EOAMr@3un3x>Vv@Ct{Xn(K_$c;-TaI_jgeq#O5Qn>CJa+*Hsmv3$C
+i^kzmJ#VYCNBV^AmjYY`qy@e|vUF9%ja
+&O;|%5rSh2V~Nl;7{y~ZnTguX1u%IqKY%g0Z$}2si=E0*?jIe(070Fd%#;v>3+W)t26
+m7H#7b|5vxl_TolkO9)B{xcJeUin+O$R8Ln9p*LRvM$l9pC(aokO)x#R_o+3wMRW>cv2pCd1`TFaFB*
+jx0fZ2epWi>@LVJi`xF)2DDWkd%H>?H*Wh(TC3&mRo%)Fg#~{roMUZ}KLnw&^4a3c9UNZtmLc<*_B_p{6ac&I^eI~{n`Cq>^q5JjQIQF!ZCpRG-de
+=CV%mx%c&;$@YcV4gJwnu30L%Nahz#{x}n8D~Bdl306J%w+Sjqr{C@i%%3-<|-F0KbuRt=GT2?e&_B;
+}xc$zO=V23MD!mQxc&S!{-n@N6qmOjTW|&nOZA~kCGgw1|wLbQQGRd$lF}?Lf%Sq;GXP7D}*oF=x%bN
+Vi^;ucIk~|rk%-LQZ(pWavP136FM9^xgdZFCq|~R;6`o+1p11>sb8eUK0VkMq?bt7PBsqt5UIb?&Au+
+tP3}`PXHbo{Hgw&^Dsm$rMSIjo>};Ueh02uUCiGtje@YCnW6R2KG`aN(lwNpKLsc66W;q60MLnA%Is=
+~&ykQB|lP)1lmk+M&hfdIBOaX*gDO>u(d3g?CSiA9UVMlXXz
+^ArJTuFmK*kgFA9G&8tu&Ubj5;TUX@iYf`G|YmgXhnvm%YFQUvOHXGh84*hi{GSDw5l$|OZ*F~9o%zWMK?4Wu?4v)2
+-d|>(w-E)H=;VaNP;0n^>F5r2%3{X6$pfwVejD?#!uK#o#xW7crH{5UlY9|tN5~5OOaLaQS{)`pFyU4
+9LVJ;9dW|MDgZmx+kTvFznlUfG305eP)+wcc4(_(QKimYT8m*;t&=8P8%c7g3KilP#1ce?-ls77iG%f
+}z?=(n#UAFY#@t{8jlU6qt_C4N$i#$8h0rirk)i0XkQM!ZDk9xKI;vmJpLPO3TsMh&xHk1`uq
+hqh8`4q}#A(?czB8=Ts){if1l4n$1+LF?T#3+hQ;a1_WWj3`s=!HH0FM`M!VCkq)ZO#xaTI7r{z|VW3
+J@6@tlxMIy{eh!}p#rC=+Wq)O5~f%dGuFOFUGx(vjzEX%Ao+1p!ysZ}!!8hc>8d=J9so0nCcW0;6QcgTQT*&xbXDboOsfZ
+@QW<`Qkwrpud%-3sM_~dQ@wOgpyEW1th<$zyZKPBR{U@j!d9
+Geou14|xU23S%q%9Eki)Qo9E0_1G*;;~SmNuJOVH^DJ-F17aV47!E#y_40aSwi4wsjYt5IfYc1CLVJF
+H`SQC9hJ+Sqy(p(dhzO#tt}@8XdCov)RZ@r&UA{^nE=r=THvL;3_rpk?cK|gm03?_gtk^Io37oX-OXX
+cZ60>UIj?M@j(jaj|<~%8!ni`K?ZGf+YAs1j3Y{fTh)U($5Gn%1GhiRUJ5=I`Y3AEI0MCP`F5b<|ftF
+M*YscKWf4%!IFI
+5kKh=0pMj?@;DdsFohb$84p8~+A=*MBW2z
+be`-K7=o(!ImSGZWW9|Yfh+IG+84
+B0&(a{2D+}xSyI|J!dVW65DFLP5vOC6>HSp<2NV8jm&4`x8qV6dvwhn1eeQVRKRGLwVp(etAhhsQ_Ht
+>|a!-p7`tX_eQFE|v1kS%3AuO^
+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
+T5fsC7rCvN^#4lHv5&G;5hh
+H1Y30uN?6Az6v*k=yq7^i?N;2fFV@Ci=RS2%KRC-jLt4!q6fad3}bRx~LvIvhY$XzC?^VO|rToLUcu*;PD{Ps!;0IJ`qz
+He@APmJutlj5Vy$v(}#OzV9jSh^>%KPwH+OQGmYyWEseF+VeQza75c{I1h11sZ0{v6a^3S6aF}MvStt
+_h`{L95vO4SFikXsdes8M`xbFf1X%=($_}6i$I0|CnZhSkO~^pv8e0f`K`Y0~T!iM4AabGmgwTMj?#9
+!5CrjtU^M=AhXk-IE1G|h4VU;nP!@OzEf*OIG);+pnFnk~`48SE5hgsGi$+8nVM~x3wm~QbJYHH7WC1r?BJ#!5e7zY4cHdRcEg$7Cy2ZOF8^rz6_33xt)361l$zRUZVA_xE1B*;Hx+uQz
+sq_)ytXPxqfN1w?F&)Z{-0--%1WDIuVg!U}z&Lu3&da9ObnGGlF%tJb
+)lqE#k@Cz#%y)fd58eLRqd{+C+o!ijezSG{j70ZP6X%whbkHhNbi>^W-7HJF+6?>K?rMp2jh@zRT&s^
+!Ou!tdt)-hW3$vJeL}5f!i44TEsiIQ{>HWAuwZy_#R>hEG^zwK)VUGrwY;0;(az>$b0gGvs6%NaY3cX
+&O7$DaiAi~VGV=gTwU!#dw!XG|G%7{=M88>iz6Pk0G_^lotio-!RC`J)_+nyo!aliXvXR{`;BcO#C4t
+j-0vM!xbe}6V$HRf5LI2|UYGoew7cll(`7k+?(xSdpZUfSHQ`D~Kc+BzxN(P+FOQhY5D$?0+^OaU5E-
+knK&(`pcvvT(D8Q)j3B$>OqZ@K3!!dOry%k5u##I3t-y!Q{S`A6;Dddpp^IwK+F(O;IY}lm(?}7ct9g
+RtJpFWwX{#5X^Z_%d;!XD^XLBeu*)1S4$4%U<)zo`e>R(&_%A!RHHXKy5&;(c5l%{U=!qM?fu0q>_G+
+H>X!K~o{UW}RvwbULWTwH|U6bYLJ1Q^L^A0XQ$2JroTSQ->YCgD_l{nyDe&4o`6qhQq$!6d>K#_VXhX
+7)m_b2l@}jx=XEq15qH}R8aN$Ft-)PwIa7lLf%FcSXMOVLYnmbiO`n$t&PZCzyBDQP^DJ;MqDYbdC?I
+^W40l0h~-;FPB`q?Hu%iRu&fxj1DJzD1GBr7(*12!Uno%#GkaW{^a*<*(_(Zop;0aa*N~bMSK=TYnMiZamRzsE6U{V5c9{aXf%>}?56elkRA?#-
+7lwNHjBQ!*udFPjP=#cBLp~hF#X33JK^%Eoq66(aIz@^wzE`)t7J34XZd}pGM>qn(h4Dmi;?jEW{Do-&yE3m>I@d3N+re()MqBmF5j@;ndd1aHJpl_F-rfhR}9GC!+dgv?pWL#7)FX)!oU9Nx}I$=n=Wee=*5q@qP^62QLv@zDJs2UqGk(gy@;8#K%dLM9eR<
+4^bo22~#OhBa|fXo$is>n~2Gr7ARg0N4UC!CsDLSvDy0Cpld-lt(lzGE`#mDrJVeFy)6T!TxOin2LU*
+j@un0c5EzKp3@D$l`-@fxrODhW@s;n&UuXTnZb&68+e%R;cqCEWZhPohHPmbFh%??wXk3P1zG0zL%vm
+9jfUaDY1`H36LZ9i2#Nc^(z6J!tR9zR@}f!cziB-qY&wCYAGJ#jXE$CXTaiHLD!(zV3F4nf!FIx5OAW
+Kd@awiQdy&
+c=++pAV|7RoCl*)On-&HDrpLjE`fb=xJnEa@*K+@J+Hp@lgZBGG3F*^C??<7s+O
+S{$oA&$os6gT?WeJXN5#ReqEJ2Jv(0c_Ww;3_tum`@OF#ONj|Iuf76JSr%UUKQ}-~u2IHvqGs4ZYnyq
+REe)-M#PeyZN!qZRqOvopRfFo+9$fcldjEON(u98Sh{|vIpIz`y2H4wB{2zlWqDiVwLpk(=I~)7h_W6
+K`&DmTZJj)4&&k8mHLV!y>q+7Iw${@6aWAK2mmD%m`*6173nh(000;}000;O003}la4%nJZggdGZeeUMa%F
+RGY<6WXaCx0uZI9!&5&rI9!TONeMs1}5S`=7dTU_sQ&7sNWkX)JsmxDq}w5_Zx>O^VxjH3U&Gec5*5w
+*J)Be<+3ayXpVXNL50xqK;F(UhVoF6=v@WIgniY!-{RC&5bhsvBRis$p%_vP!X5bO+g;Maj5g2U*whU
+R^B~@Qn4c-PPhw)G+hIP<7%gnjT&<`0$L$roO;Gf~i&%jN?q80`yqh$=^iLZ(-h%cV#VppD~yUT-=GSt4d&H*zbZJJH9j8Q!t<
+s%5G+Ps5;ey0EVXAviqu0OSZlTwgj#K441GkSbX0JUiK$O!#9iNa=BPk=T>$-tL5=nHOIxFlV{j#U4s
+aKWyQ?tR5*(iW3y_Lr%?TWM5o}*^BP&Zylzwvx)
+897mzCT`HHKjmDhViYdy72fBALY8~6Wdb(SiM*`3c?vBrZn?i~aT3LCPQ;Au
+sJtan%oFJ^tw-UTpWpnPzxe9Q7yr(``{Cy1_07M)Kn{t=+K-58Na0&jG_OH{+G1W-=u2M%Q(N}E=-s@
+Kn^N94wdAFx^QLOQ2hYPuFf#)ch`KQfvlER8ednBKjsR-u?PX^>pY_Td}zkM@tq0O>=z=2K?yAs{2yMA!
+hy&I#ya#Ar*6@x>_8g^F%a|SV%N?rYYX}#H(?yzmG|NZ5fb+N-=%<|-Ezy881#45VTT-x5})*Pr(kV$
+xa{!d@_(8VL_3y)V5>gQoraXC58LsZQ6xkn_6(gsT+M1sPbO>jMn@)2N+t92$4tx;KliBHoYd`&wXXN
+hss8;q1wspjmt4n}anc?__&BIKHWH(bmtr0nTDgGz;J7Fr&5Z^dDR8hMJ4+M{5fnVT=+GWJUJ7dm7jG
+Oq3S`oX_OD<3?fM3xz*Le*Rm;%00e4y)C?0N+KA1
+>B<}Pk-W&gm}Y_)t&H&8KpHC0kos@J-InRC#Eo8fm4^-suhFXHVQY>^z|hRdG-t+`1Zc}yc5^(A4Ta#
+14oY^B4q3_KLLoKDDj{HgmWhvyPha9QbTCfsE_bTINVw{jI)161Ey|@W2aA((_CD>o_KL`Lgc${S`0E
+mDfs~hMdW{<4%L2W#_2DS*b&$ih?T)5qOJcjj>L}#Ro68b*T(79!zAxOR~nbRcQN1C%9{bu15c`s`BL%XOot0-bc
+G>vXmBo;Ofb>JjS?-=W^dvzBR7hY9k*2sGR*cD_Uo^RK&I&C*IzTYpKqH&us4@CuNin71Yj6i_>~=Oi
+