From b582e28d8063617d737fc644b68fdbc3ce1bb9fb Mon Sep 17 00:00:00 2001
From: SS-snap <2kganzaoji@gmail.com>
Date: Mon, 30 Sep 2024 16:06:42 +0800
Subject: [PATCH] Add a description of what you changed
---
.idea/.gitignore | 3 +
.idea/Comfyui_Snap-Processing.iml | 8 +
.idea/inspectionProfiles/Project_Default.xml | 26 ++
.../inspectionProfiles/profiles_settings.xml | 6 +
.idea/modules.xml | 8 +
.idea/vcs.xml | 6 +
Snap_canvas.py | 159 +++++++++
Snapload.py | 80 +++++
__init__.py | 6 +
__pycache__/Snap_canvas.cpython-311.pyc | Bin 0 -> 9337 bytes
__pycache__/Snapload.cpython-311.pyc | Bin 0 -> 4279 bytes
__pycache__/__init__.cpython-311.pyc | Bin 0 -> 611 bytes
__pycache__/area_calculator.cpython-311.pyc | Bin 0 -> 1737 bytes
assets/SnapCanvas.jpg | Bin 0 -> 69953 bytes
example/SnapCanvas.json | 303 ++++++++++++++++++
requirements.txt | 2 +-
save/output.png | Bin 0 -> 115670 bytes
save/output_image.png | Bin 0 -> 59143 bytes
...t_image_seed102188696742965_1727592804.png | Bin 0 -> 42948 bytes
...t_image_seed165231885671399_1727680395.png | Bin 0 -> 204434 bytes
...t_image_seed341874800874179_1727592868.png | Bin 0 -> 84164 bytes
...t_image_seed364149889408431_1727679313.png | Bin 0 -> 36472 bytes
...t_image_seed473256537738175_1727592751.png | Bin 0 -> 83991 bytes
...t_image_seed518072437279080_1727592788.png | Bin 0 -> 50413 bytes
...t_image_seed554760322076771_1727679945.png | Bin 0 -> 53896 bytes
...t_image_seed575326176570079_1727593596.png | Bin 0 -> 72475 bytes
...t_image_seed612536980664326_1727592812.png | Bin 0 -> 42136 bytes
...t_image_seed688705875868338_1727681556.png | Bin 0 -> 116329 bytes
...t_image_seed703932794060439_1727593988.png | Bin 0 -> 56034 bytes
...t_image_seed727213827209089_1727593767.png | Bin 0 -> 84987 bytes
...ut_image_seed75858144998317_1727592796.png | Bin 0 -> 26852 bytes
...t_image_seed808646150378520_1727594070.png | Bin 0 -> 49705 bytes
...t_image_seed857148206117389_1727679325.png | Bin 0 -> 35684 bytes
...ut_image_seed92050565502526_1727593606.png | Bin 0 -> 42863 bytes
ui/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 199 bytes
ui/__pycache__/canvas_window.cpython-311.pyc | Bin 0 -> 17878 bytes
.../resizable_pixmap_item.cpython-311.pyc | Bin 0 -> 7205 bytes
ui/canvas_window.py | 226 +++++++++++++
38 files changed, 832 insertions(+), 1 deletion(-)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/Comfyui_Snap-Processing.iml
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
create mode 100644 .idea/inspectionProfiles/profiles_settings.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/vcs.xml
create mode 100644 Snap_canvas.py
create mode 100644 Snapload.py
create mode 100644 __pycache__/Snap_canvas.cpython-311.pyc
create mode 100644 __pycache__/Snapload.cpython-311.pyc
create mode 100644 __pycache__/__init__.cpython-311.pyc
create mode 100644 __pycache__/area_calculator.cpython-311.pyc
create mode 100644 assets/SnapCanvas.jpg
create mode 100644 example/SnapCanvas.json
create mode 100644 save/output.png
create mode 100644 save/output_image.png
create mode 100644 save/output_image_seed102188696742965_1727592804.png
create mode 100644 save/output_image_seed165231885671399_1727680395.png
create mode 100644 save/output_image_seed341874800874179_1727592868.png
create mode 100644 save/output_image_seed364149889408431_1727679313.png
create mode 100644 save/output_image_seed473256537738175_1727592751.png
create mode 100644 save/output_image_seed518072437279080_1727592788.png
create mode 100644 save/output_image_seed554760322076771_1727679945.png
create mode 100644 save/output_image_seed575326176570079_1727593596.png
create mode 100644 save/output_image_seed612536980664326_1727592812.png
create mode 100644 save/output_image_seed688705875868338_1727681556.png
create mode 100644 save/output_image_seed703932794060439_1727593988.png
create mode 100644 save/output_image_seed727213827209089_1727593767.png
create mode 100644 save/output_image_seed75858144998317_1727592796.png
create mode 100644 save/output_image_seed808646150378520_1727594070.png
create mode 100644 save/output_image_seed857148206117389_1727679325.png
create mode 100644 save/output_image_seed92050565502526_1727593606.png
create mode 100644 ui/__pycache__/__init__.cpython-311.pyc
create mode 100644 ui/__pycache__/canvas_window.cpython-311.pyc
create mode 100644 ui/__pycache__/resizable_pixmap_item.cpython-311.pyc
create mode 100644 ui/canvas_window.py
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..359bb53
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
diff --git a/.idea/Comfyui_Snap-Processing.iml b/.idea/Comfyui_Snap-Processing.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/.idea/Comfyui_Snap-Processing.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..24903c8
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..dd801c7
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Snap_canvas.py b/Snap_canvas.py
new file mode 100644
index 0000000..ca9af1b
--- /dev/null
+++ b/Snap_canvas.py
@@ -0,0 +1,159 @@
+from PyQt5.QtCore import QEventLoop
+from PyQt5.QtWidgets import QApplication
+from PyQt5.QtGui import QImage
+import time
+import os
+import random
+import torch
+from PIL import Image
+import numpy as np
+from io import BytesIO
+from .ui.canvas_window import CanvasWindow
+
+class PyQtCanvasNode:
+ @staticmethod
+ def INPUT_TYPES():
+ return {
+ "required": {
+ "image": ("IMAGE",), # Required image input
+ "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
+ }
+ }
+
+ RETURN_TYPES = ("IMAGE", "INT", "STRING") # Added "STRING" to the return types
+ FUNCTION = "activate_pyqt"
+ CATEGORY = "Snap Processing"
+
+ def activate_pyqt(self, image, seed):
+ try:
+ # Use the user-provided seed value
+ print(f"Received seed: {seed}")
+
+ # Convert tensor to QImage
+ qimage = self.tensor_to_qimage(image)
+ print("Converted tensor to QImage")
+
+ # Run PyQt GUI and block the main thread until the user finishes
+ modified_image = self.run_pyqt_gui(qimage)
+ print("PyQt GUI closed")
+
+ # Convert the modified QImage to a NumPy array
+ numpy_array = self.qimage_to_numpy(modified_image)
+ print("Converted QImage to NumPy array")
+
+ # Define the save directory
+ save_directory = os.path.join(os.getcwd(), "ComfyUI", "custom_nodes", "Comfyui_Snap-Processing", "save")
+ if not os.path.exists(save_directory):
+ os.makedirs(save_directory)
+
+ # Create a unique file name using the seed and current timestamp
+ timestamp = int(time.time())
+ png_image_filename = f"output_image_seed{seed}_{timestamp}.png"
+ png_image_path = os.path.join(save_directory, png_image_filename)
+ self.numpy_to_png(numpy_array, png_image_path)
+ print(f"Saved image to {png_image_path}")
+
+ # Get the absolute path for consistency
+ absolute_png_image_path = os.path.abspath(png_image_path)
+
+ # Return the modified image, seed, and the file path
+ return (self.qimage_to_tensor(modified_image), seed, absolute_png_image_path)
+ except Exception as e:
+ print(f"Error in activate_pyqt: {e}")
+ raise e
+
+ def run_pyqt_gui(self, input_image):
+ try:
+ app = QApplication.instance()
+ if app is None:
+ app = QApplication([]) # Create the global application
+
+ # Always create a new CanvasWindow instance
+ dialog = CanvasWindow(input_image)
+ dialog.save_signal.connect(self.on_save)
+ dialog.close_signal.connect(self.on_close)
+
+ print("PyQt CanvasWindow shown")
+ dialog.exec_() # Block until the dialog is closed
+
+ print("Dialog closed")
+ modified_image = dialog.get_modified_image()
+ dialog.deleteLater() # Ensure the window is properly destroyed
+ print("CanvasWindow deleted")
+ return modified_image
+ except Exception as e:
+ print(f"Error in run_pyqt_gui: {e}")
+ raise e
+
+ def on_save(self):
+ print("Image saved successfully")
+
+ def on_close(self):
+ print("Window closed")
+
+ def tensor_to_qimage(self, tensor):
+ if tensor.ndim == 4:
+ tensor = tensor.squeeze(0)
+ if tensor.ndim != 3:
+ raise ValueError(f"Expected tensor with 3 dimensions, but got {tensor.ndim} dimensions.")
+
+ if tensor.shape[0] in [1, 3, 4]:
+ pass
+ elif tensor.shape[2] in [1, 3, 4]:
+ tensor = tensor.permute(2, 0, 1)
+ else:
+ raise ValueError("Tensor has unsupported shape.")
+
+ num_channels = tensor.shape[0]
+ if num_channels == 1:
+ tensor = tensor.repeat(3, 1, 1)
+ elif num_channels == 2:
+ tensor = torch.cat([tensor, tensor[0:1, :, :]], dim=0)
+ elif num_channels == 4:
+ tensor = tensor[:3, :, :]
+ elif num_channels != 3:
+ raise ValueError(f"Unsupported number of channels: {num_channels}")
+
+ image_data = tensor.mul(255).byte().cpu().numpy()
+ image_data = image_data.transpose(1, 2, 0)
+
+ pil_image = Image.fromarray(image_data, 'RGB')
+ qimage = self.pil_image_to_qimage(pil_image)
+ return qimage
+
+ def qimage_to_tensor(self, qimage):
+ qimage = qimage.convertToFormat(QImage.Format_RGB888)
+ width = qimage.width()
+ height = qimage.height()
+
+ ptr = qimage.bits()
+ ptr.setsize(qimage.byteCount())
+ image_np = np.array(ptr).reshape((height, width, 3))
+
+ tensor = torch.from_numpy(image_np).permute(2, 0, 1).float() / 255.0
+ return tensor
+
+ def qimage_to_numpy(self, qimage):
+ qimage = qimage.convertToFormat(QImage.Format_RGB888)
+ width = qimage.width()
+ height = qimage.height()
+
+ ptr = qimage.bits()
+ ptr.setsize(qimage.byteCount())
+ image_np = np.array(ptr).reshape((height, width, 3))
+
+ return image_np
+
+ def numpy_to_png(self, numpy_array, save_path):
+ if numpy_array.dtype != np.uint8:
+ numpy_array = (numpy_array * 255).astype(np.uint8)
+
+ image = Image.fromarray(numpy_array)
+ image.save(save_path, format='PNG')
+
+ def pil_image_to_qimage(self, pil_image):
+ buffer = BytesIO()
+ pil_image.save(buffer, format="PNG")
+ image_bytes = buffer.getvalue()
+ qimage = QImage.fromData(image_bytes, "PNG")
+ return qimage
diff --git a/Snapload.py b/Snapload.py
new file mode 100644
index 0000000..4e49a33
--- /dev/null
+++ b/Snapload.py
@@ -0,0 +1,80 @@
+import torch
+import hashlib
+from pathlib import Path
+from typing import Iterable
+from PIL import Image, ImageOps
+import numpy as np
+import folder_paths
+import os # 引入 os 库用于创建目录
+
+class Snapload:
+ @classmethod
+ def INPUT_TYPES(s):
+ return {"required":
+ {"image": ("STRING", {"default": r"123"})},
+ }
+
+ CATEGORY = "Snap Processing"
+
+ RETURN_TYPES = ("IMAGE", "MASK")
+ FUNCTION = "load_image"
+
+ def load_image(self, image):
+ # 调用 _resolve_path 来获取图像路径
+ image_path = Snapload._resolve_path(image)
+
+ # 打开并处理图像
+ i = Image.open(image_path)
+ i = ImageOps.exif_transpose(i)
+ image = i.convert("RGB")
+ image = np.array(image).astype(np.float32) / 255.0
+ image = torch.from_numpy(image)[None,]
+
+ # 如果有 Alpha 通道,则生成掩码
+ if 'A' in i.getbands():
+ mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0
+ mask = 1. - torch.from_numpy(mask)
+ else:
+ # 否则生成一个全为零的掩码
+ mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu")
+
+ return (image, mask)
+
+ # 将图像路径解析为相对路径,默认为指定的路径
+ def _resolve_path(image) -> Path:
+ # 如果未提供图像路径,则使用默认路径
+ if not image:
+ default_path = Path("ComfyUI/custom_nodes/Comfyui_Snap-Processing/save/output.png").resolve()
+ else:
+ default_path = Path(folder_paths.get_annotated_filepath(image)).resolve()
+
+ # 创建默认保存目录,如果不存在
+ save_directory = default_path.parent
+ if not save_directory.exists():
+ os.makedirs(save_directory)
+
+ # 返回默认路径或解析后的路径
+ return default_path
+
+ @classmethod
+ def IS_CHANGED(s, image):
+ # 获取图像路径并计算其哈希值,判断是否改变
+ image_path = Snapload._resolve_path(image)
+ m = hashlib.sha256()
+ with open(image_path, 'rb') as f:
+ m.update(f.read())
+ return m.digest().hex()
+
+ @classmethod
+ def VALIDATE_INPUTS(s, image):
+ # 如果图像为空,则返回 True
+ if image is None:
+ return True
+
+ # 验证图像路径是否存在
+ image_path = Snapload._resolve_path(image)
+ if not image_path.exists():
+ return "Invalid image path: {}".format(image_path)
+
+ return True
+
diff --git a/__init__.py b/__init__.py
index f25d75c..1bdef11 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,13 +1,19 @@
from .area_calculator import AreaCalculator
+from .Snap_canvas import PyQtCanvasNode
+from .Snapload import Snapload
VERSION = "1.0"
NODE_CLASS_MAPPINGS = {
"AreaCalculator": AreaCalculator,
+ "PyQtCanvasNode": PyQtCanvasNode,
+ "Snapload": Snapload,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"AreaCalculator": "Snap Area",
+ "PyQtCanvasNode": "Snap Canvas",
+ "Snapload": "Snap load",
}
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']
\ No newline at end of file
diff --git a/__pycache__/Snap_canvas.cpython-311.pyc b/__pycache__/Snap_canvas.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b2e2d5dde5c74438e5b32c030eef2cf3ebacaa30
GIT binary patch
literal 9337
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
ju3uHEQ#M{z>ac9Qwk?;9ep23
literal 0
HcmV?d00001
diff --git a/__pycache__/Snapload.cpython-311.pyc b/__pycache__/Snapload.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d13256d2a895ba6004848cd01be0a48a57476acb
GIT binary patch
literal 4279
zcmb^!U2hZF_0ESsGmf21%mNOH2{d3ng4Pt&vMjqU$p(|GNpV6K7j-mv#)-53VrCqI
zo2*=k2QNY*ph$@-war79Qn8hIXr(??yZ^uwjTGxjks?+5uy00eCA6xlo;!{|2`}5;
z8K1fLoOACz_uTX4Ke=2^1a14@uM<7c`zIOH8@t%!csnHrXlx0m#aS6p`2g(?LHfG!W{b>bGiWQcmvBxP7u2b
z+oKsVm&%G#oN8=?kOle-{9f$?0Lr8!T4E$tvLvYlourcF$kqt9EApLuQjsNWNt!3L
zMyIcbBjea6$q6x^(lGOG@a&%vsDn~fvVs5mUyNS36$;y
zejFMf!|cbQ=md5Wy$R;YEv5tHmps~W>4zenbO=%>b$+)@04((W#2jvLRxpTKX1A!
z8Mn(K(FM4NWlDReg_o=MJNJ>819cM2kyto~tAS|gwEM{dQiQjhgV|`2vAKZ6woBPQ
z`kzk=p7WOTcI;aKtu3>e!)@G+8EXaz6=}Zn=L`4zrVXLT`
zE87y_I@;MFwrE);K8KwNh4^|t4SsB&m9^VqMpCg8dht0ilaW){QjnFb8n9qil~W0Y
zxH5K{u4hVvsU&98qWY;y#PXA-^gvG``YP~^XwdXnLQww$poqTl9@_Gr-1MG&Hl}-n
zhBsJp{>zG7y$`Rh6m)LL;D$=nHrHoxM>aw_H*9djC92}-S#vybtp7;&_zjQ0WZCxg
zuG-hVkKL>8Ezj_#XZQ={j|JTmG(5o!{l!#pYeMCX`}zN&W{-U$QFNYlRx*j+kc(c`H;bf
zz8cf{aA~x{dw*v!_8))Nr|%yz_KyH_X|yy7hv+-7`ri8DU-Dlre>GF)Cv<+o;3rC>
zJ09X6omPzZ8DhmW+-V9DLq?w89{=4|U4
zZ;5gp5#xvKvqa6;3j(xEFVP!~*jSg0eA}f{`?QwWGH+*eGLa`^YK$aQ-1>h5~jPaiWtWYYTGwh_Ww%v35HMD^387gW_4fE@Fh!=rO9u6
zgI{ol|1y}R|El4?s{1Ak-^7+Ly6KDRz8S+eQ;WKR9e0I92MdxDRc)k8Zk;>h58~
zJzPbUF@6c}EW(5irYWpq}%5)t;?;@4GOD{4v(Orr{HxUI7
z?A+A1r=ecvyJ!*@Mq?
z_n_e(EZYZFl70ShJQQTU4zi*1wy%Fm0c^8iV!fsXuR;d`EL8;SivFN-5dvIm0SfEY
zTKf&FUWwiyJHF96LtGTXJJ)QXnIUA3-f4Ue4-h
zJRQCkF>4Mpwwo@bkb@}W1du|`+`U$t5T`V?NJ?e(_W+8Gr(*F`X~qJ7M*zHJkhSOj
zFKY-V@*FN++2M~CCo67W@k*8DEr+V80ZzFr{Tpl*!KV`pz%o_ZYVlVQfX1o>;W0^0
z3q*MU4N@IpVr!xksRP~0FcJPD0Bj>R0U@H6&a6=2!Cy0lB_w7lJZTn+wGz={R(Q$~
znHnVEJOQQ}+Ew$t{bKDtE-6u9A*F@-0s#0fMO6@2G@lCUE}BmT?Ju{#733?ozZEoC
m-s`QP-g5n|Aii9GE67napDH^>QJ|K+;Y$<$-CL-p#{LV*WS3n4
literal 0
HcmV?d00001
diff --git a/__pycache__/__init__.cpython-311.pyc b/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a1117037a682e5002fe8478c8c6de90264e5b566
GIT binary patch
literal 611
zcmY+A&uiN-6vw5=iIX&G3WcV05Vr0YVXU;*QCdtAhM{%6nQhDjgciBQAlpH9R+3Zq
zSM1XJ*ni`r@nwUZb~E%c$_{&Se~d_v$5)@n)B8%_+U+KS_3ZDT(;pb2U+QqTv|Djy
zf%u9z;#i;nyBI575tV?rq|`)cf#zzUHMiY~L;DQ~)OxoXVUt&`!14vq}Rp~r@8o7QV5-zwqIbnGMJBejg<(S6P8H}VdH
z8|mcUTRAo_CjeFc{(H#v_oKItd1A?$vZX`HbxN5KlzvB7a75Q1hOfqkIUYp8>HM8Z
z&;5``=P{i|GGU*DcUKrsW^ob)G=#^;H*n@t^{$t;j3!-v5W
z@tN=rWC!M`kBz@TDhS3nLod?h$k6k2IWp8sm*Z!%bD%}VSZf6^hv$Y4ndy4mfZxt=ndX#P-q|L(%U2WM07ykfuCagCA
literal 0
HcmV?d00001
diff --git a/__pycache__/area_calculator.cpython-311.pyc b/__pycache__/area_calculator.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..bb9f53a910896da7e6bda5530a85f345ba223580
GIT binary patch
literal 1737
zcmZWp-%BG$9H0F$N!+OMnp@=}cTK&jgd;+)lxst22`2SYGzJq3=7eQ$XVui*thc*C
z3<>1HhrAT-K+uO4LLWSfh3lV^h;U(^q{SBBa@fAyQ)hNfG~Vp)cji0a-!q@@z8)G9
z02$oepKD$ofWIiy9fWtr<(FjI2M8cW19`xLIe^$*fVe{zfMfExBhMgCWeQB5MI7SE
z%poQVBJhHW)5?{WGj(k)V}#uYDj>EXJ^?7aWqkO!Y;n
zV5%s>V3=Bn&m}Q@uF1+KhT9tjTaB<77Ib-C#e<5W8K$Ic7zIWB4G?|CvS`Hc`yUdq
z)p%-k*3j2>mQ&Jpp@@uaOWHC_TYj#oUBRkSvTQ?_iUv}x)ofATie^khQ7x-bTwj$*
zEt1kJW@c*#`%~%6a!$&vWRlr(sK3~m8!}p}6(OVsIvy}I*1q?!JrOy2(){G}X84N^
z*2_%gIL}TUBTe^hBTn`#n@)g=;u5uXWs2KSHY>d+1uD
z0xO=f9{>c)#P*g)Z@*^0wBlW39YmV6C;~1H6?D@_*6XhOvu`gDm3T3vP~X73uF6Hs
zStT9w1gJWOrco*)42vaQ)i75m+N4EzOV!p)+U6$73t(a0ly@W-(Y!8On^iq#;b2F}IMUcLd3K5L56mKZ%1
zqjllTKX&ls#6QvWPn-qsH@K7F!+N5gAPBzupb{H$ED*7$t?DLx165Mr54GbW;UKn&MhvjI7ep=5=$qp
zdz`d!%x?EsON6WSo;DomupUS{mymZH@Z8yb=5CCDyA!qfc5s@Iz{jeY#dB4CX&+Zd_0?#7UG#qDm|CQA!jp@%4X){D-tcM
zC%aX}d*9dYp?zaUiBH;&)-ysn9K$eeFj#Y*4nM_^{5~Y_=-$8Af+Yq(@nx~Yv14o#
S1Umv{HwpWIup#$#YWg2tLZzet
literal 0
HcmV?d00001
diff --git a/assets/SnapCanvas.jpg b/assets/SnapCanvas.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..45cd711355cdc90171912b38fe854ca234595820
GIT binary patch
literal 69953
zcmd431zc8LvnakFx{>aZlvIyGtZRK244yK}xziBp+I7DZLwgzxVyV
zd+s^se%JT>{{O}E+k4imnwd3gX7*Zp^JDhM8k&}@q@m=?Yf5ga1nB(*W2L
z08FsRC{t4Yh5x^TuuPp?+yDTg4A$l{Gj}xw;UEyU^K^5%!+!-~Toc2Ew@Z=Ekl70Ec#mcQZG&0%3L#MssK+@64
z%f;H#%8io2^Z_M@fB-+GjJcP7
zfW}||Ae{dTNAm^%FoOV~VdS6q!N1cND>pYMK{hr|Pfu2Bb5qtkf&Q8P+X{cy{Lg`Z
z8jtmEygy|}`N-VD*xk;J@=mCxj&_djE|jiL#-`?!EdRR_|35eUC$j#D4rWzz3v(B9
z2XH72P|K_xEWzn^Ftc{Ec66Y$cKFX``2VrlKhbap{?cm@z{&d#;2N?5_eO95*n>d;
z4hI#0)yo1)Ab-xAJhBFGxAHV8puhAUgu(Kk*MGUdM1xrvS8GekJG7+gQ%X~J7mqs_
zToZQ}cmM^!1aJW&fE=I(7yuT46W{}c0CC_k@B~l-o&wr{0bmMP0rr3k;0gEuFMtpr
z9EbrDfixf+$ODRj3ZMpP1X_R&pa&QLMu90{0r(7T0(-z$;2gMyKp=<^bO;WF2tom&
zg)l)lA^Z?g$YY2+L=~b9F@jh^93buxAIM8cI3x~|2FZaGL#iQ7kPgTv$QWb}vI^OO
z97C>PU}4Z;aAC+`=wR4j_+cbq^|%z90D8;
z93>nJoDiH0oI0E-oHLvsTm)PiToGIYTo>E~+$!8xxbN`j@TBle@PhEN@LKSe@SgA?
z@Ja9m@b&QB@Kf-c@aG5!2>1x}2z&@K2-*lX2;K-02$=|#2p1;qD(WQ~HX0+EB$^(YJ6aT4A=(GDIkXdWbaXm&adaJYH}ojVD_nPj_
z+&ja3PkoiRzYef9f+_bcx&QKL}vQ(I6cPzW9AScC;$^aC%48a2hG!OFc3^(XJi~&A~6_-6QV`IY%2`1=Il1s)3c
z3$zGa3i1lN3DyXH5n>Ut6)F+h7N!?A7tRx27r8HDERrMgS(H-LNc4^9XE7=BZ;HWFnLhY#5wx;(6Zcp)h$=_~o+5$q%BM`4eKA7ejOf1LJsS?a!&
zrBtcZS7{z;Z|M&*@G^2Tu`)BVWU{8R#j;48
zLcGGFBCVo>VxtnEB&!s!w4_Y0?5y0Zf}oI~}c>YW;x8hRSV8W)<6G~+ZsYq4qhY7J-;Yg=o-(?QhH&?(S4(|xR)sJp4hqZgt#
ztxvE2O#hPsv4NdIt0AVLv0<$dypg6+iP4R*lJQ&PGZR^p43n>>lBUU~duHNh31&Oy
zBIa@CPzw=@IE!sd5zBbX9V;=bB&&UEN$WK0BO4i;Y?}*PCEG&VA9k8{mG(&XM)pk(
z*bcT1U5@0A&m6~`n4ChKK06CKCpv$1k#i|4d-p@-RVQ+^TKDbP(D&{LLE+H+6E`=#|
zFWo8AD;q6;RQ|4lr6Q*izcRcEsB*8`tv0Hju92(htmUt*sH3gRsK==fYk)L(HGFNf
zYW)08``uX6lcvu1LhtLFS(^)6s9Mrn@mizXP}+jpezZStKl|YHVZXz&W4+U`bK#@b
z$H^|0uHkOE?!F$Wo{zl}z3qJ>eJ!5^KQ;C9_cspk4m1q%4Au|v4Al?w4mXVOjl3Hb
z7=1q`Jk~ZYHr_GuXrgCQc5+}!acXQ@eR_6AZ|3u?+3fb5-Q3Z<$Ncp|z#{x&*wVeF
zq-E0Ow<`};DnIjnZe4w}I=H5`wyh5mt
zIqhBVha6xXWE?Ua)_oEGGWb>N>*kTm(U0SZ6QYyCQ|{BwGv%}8bNln_i?DA*--<5z
zFMF>vub|hSH;6YWw-0XLf0z5d_{09kj~|Bsm4un2i8){v0LB6kSl}Kk3@ic&{+WI(
z06_p65)wKxIvyGt9x?7cTw+QRVqy}?`viCCJ{H=~^vCU2=6}CJKu3dxfklFaMS_cg
zfq{E>!NC311nd8%gCCs$77`pkVgM}UJ^+ISfyILS=z_q55f2P37+(BI?OhfQ9sv;v
zME*>Fl|W!%!IFC*lQ1xd@JL`_0J;0!^#BKtg?*2bgA)e)ee?|Vs90Xe&L|VcM-Fy#{Vfc^b|1|~+dMdDu
z3)U$aD{hPk0APte408g;M5a7ohMEBz%)lC&!fV13btG{DFr1;KO~?U%bP3{Om}+W1
zFx52K;osr5U9Yex-~3Vfe|?kA9)-TS3ypz$T@6h5O!y`+US-<)cyx=WW{%X1AUXrt
zk_fm*SMdRX>m?=7i8YLDA;1Z;YULOKK4d}y08V(1r#kQ+nk<1Iz;4Je{2$WX@$_#c
zq?0SsQxvcX7S`Zqk12My$=%7E=z2VP<+Ak_d5nl1gW?^
zPG)G9_bd@OGSFnW0-+q(kK*n|2E_;v!IZiwKyfOx^%Dn-sz4;7WcFz2PmTF^2!j#+
z{z?QU008i|RJWSo!U0Ic=RTgZE38PO1NojOAiYTl&M}}EB3``YhrCYW3Nuc1B{l05
zVD56Eji3nzcu-4cq?TH)(HA+yAsOp&&JCxx#{9E*b9xP^cZ9eJ+#<#Nl>fg&7WK%s
z>nH;}pBMG;^+=Zc=EcqTSBxWK2Y#-nNNbme6jPd=p11dV)3g`VD*5dU}hy{j87mNO#$hU3`Z
zf0cUrnZGMkb32VR>ix4Xmg}M+?JVbQs7qPW#nlxaH|?#L)@P;s_+*u|dp^Wo4%uUV
zHqDDGxn8b|N6jsJ{L79xQ1kOeL;KA*gXT}()LZ%nm{Z9^uD+G=PegiOT_7f%kPVq{
z+05Y-o{m8FX?HD}5$GsW0!>;*unf!-EAT&T+MZFn<_C74?&J3h=$R+5msz=4@yJWL
zhJWgxWp+)8!pgcLXv~+do+&N06w4Xh2><|$S7JHXck2FcB{;8J
zjOXx>{$zRXMk8lFJGq`cd25$eTtzlHTWk7HyAnQ|ekJ&(;oI!ar>*RTi3`Ln(UOIv
zLRYz_iLLcIUW=rPgKun(M92!o-n^dK)nrTEIkycR5YQT{p$zWAd4!|x5@Sk*{CO&B
z5{3J{s(_Gk%_nK<`ybc`jgdD>W))nKJG;yhnAZ=S*PgehoqM3Ti5x1WpSNNP>I>cQ
zO~ec3gX{>B{=Zv7#OT#qcAx&rLYsk;!m(n}=U3!vP?syTWT@*Ez7i}&q4;H;Xts{e
z+-Yhyw=ahwmoKx=cyzIK@37(HxSOq&H~ZPVzDy5J
zV#iUCiL%>JJ~e;To3;PkA*c;!<(rbH5y2X=8#ApuG^62eZ`lCah{P#(sfM1m4qL`9OQf#7s^FAQpM0@GNT5tab(&?(7*9@U+aieckZ{QUrR
zdzaa}-Ok@K6#z`hLDhKFt#i3Um#is&E_MWG(G$+sityE1HH4u8j}*}IQZ&Sa&W1{C
zx|)TE@ySGVOTy_%%SsyPm}h1mH1Lq1JnpxUCmcY~A~Lc_w`Ln#9H&m{9Eib@(jW{C
z?a^*3nXl*4k4bWgD6=Gr2!s4BuEz9U_+w3T50w3~8qSC(oa%g_OC(`R+t3PnE02|6
z2Eg&K&FE)FvJ}m4*^fJFmp2m6*zRMqzrPmjn(yYi0n(
zeosr#kQ9sM`0wlD%3)zk(o883CTQXWMN}t9qofIN2yTFSZPOhbbr`iH2-VYX&21%a
z9P`Rx(0(#x)-If?`B3m8RV(ZuNG@%T7uT#wrb)u}ah-PB!BFA|M^JUVL2L27Bqs|b
z=F(wJfhaZ35ZU`Q5fjKJ)o7Zmoy~SV4NDf5VEFV~;Se~LvtV%5r-(fm8K=n*T(484
zh#Wd&0)-Dj&?3xq<^0gc!`QBGSzlVEtzji7SUS1)LEy!w3eKKEfXs=e@dO@Q@5c;~5
zg!ug90~(pww)Ds_DDJRxJa$lzb1W(@^ptz;4FJ<;U>EjVEK~=ZmDeUh55{}Rwocu1
z2lg-4)l=8WY|5e?JbRVAlNH?wODCYq@4rh&Pc?}QE0vDa))$NV@{)SSkIfclPah1Y
zj)`d|xda87nyk&b++=0d`?O{_5H@FjIXY)?2J_#`7r#hj#Or8Jp9!;mVNH-W4YxS&
z84)YsZJOSDJfp!1{bDt}d6gUkmCGOT@!CDS;&(SUWb57CTaVkEsC=C0?UP!;vU$IM
zodJK}MlX57oz6TW_3bWtXs1hl#B4>k>rr#*JtIs0l%=ks-|{0SIhB5~W1lZ>pxsx?
zjlvI}^SfON>10)k{s3SbdoRDwT}6q^r}?rvN(o;m4PCPppEN!FIN>8!os*-aw6Z?c
zo;WpaDahM&NZJ+>9X&NWnU%cs?UrbYGxNKWbh47j^2SG~_toXs^IN6Nh4%QJGal~J
zGcnY?ql1l$TR(fUC`|8mayA`73Z|Xs{ttG28Vg6}nx%DjZ+3+;DjNH*_*Xr>dew&A
z1hO@u&mAaS!;ilQdGj85oo-!W_^#M)>|9|eiXzUR#;gyltSvy@zGZ!(Tikv>fTm6O
zgdu^>QIeD6HL@ZHGghc6H!hs@Y=t&WEm6gX-;vo^#9GPd${5de)y&Doa!-2j
z%cbKhhE2DoR_DEz!iUQ@Zh~3fqh2DSrmYyBg(I02A%)~ED-xBZ1C{j6MBX<#>6(|A
zVvcIftET(MXN{N3FUNXZ<~lm}w%r821UKflANwVz&Yd>ivSFrw`EuE&|6p->^7y%%
zQ0(T(&hTly?&)_QUY_;dazQ?|eo|
zX^n~>K<72-5Nnxx<_P-U`sodU8$&Mf^2WZ^vs(>)lv`0B``vx-miP`cYK8)qk`qgu
z7o>eA0;xo>{C&7E;oHf&CYeDQ_T60i0lyPe;%Q_ZRyRhmF(n%sT;7sioI0{}&h3p%
zpSJL*o;CU`i3r?ci;2}H8+vD>D7J_04^)UmeR+}1a;@KIL5b>}aKS46HOv*CTSX107;bVa`V
z**oy-YQEZL{w81Av~bnEAb2Ju;Z--rch}YO6n)v+*U)CPA}Zo>}8Ls`R_8
zkGrlQ5G!4Yx}BY+T+l98ZeAJ!&g!80!I<+_2L&Gc0S6@1{wizcn
zs!NeZD1~43%VLYn8I!=7``ZzGeeHpqc8d-YPTg7*2ZyBc0fu6QGJr6N6V8-B7GI;Y
z-$7o}+}4(;I^uK1eEDxhgJmWUu^Qp!q*_y}%8e>o!vzUV?XHd}{l!!u{
zsZt+dabY-0P$?ehB+d~%$`2hfk;obO;%ry3n>d?I;>TeqiO^cVt3BQ;X32ZCq2a{!
zTG>$H-L$*DBhQEk(l$rroE1i3RNIwR=MM4F%Ie@DR5}-LrF3-X{kpWFz<5-{l&Rpt
z{L~YwmB{g~+G6SKscHA}>20S2bz%_;X?&;Q!gO~px5PR(sAOWVDw~H3>
z0tHgMZii`2@PnSF8M|H~@>`s=Au>HrVe^&*SQpxmp=Dp
zr6r@q_j>gK&!j`ih4tnk%i5W2wsG6@o2*Lo-J9q)7vH>me*jE7wdHo}oZIKmmePeU
zY{Tc0{A@?PPAY3ZEnlukhM%%!Uip_E-}H`(dLIg$9%nTU*?+-xdnPhx;Mv+S+=|HL
z>bdd!vUzM+;F3bFv1`4zT78**Vt0S{s=_jTASc>(H9|jHi9T!Z7K>lYB{_g`TtA#^uyk+hE*J2!HhpDxst;Oz}34foH#fD%QFmD=jrw$HsZrVb6T=Vc!Nf$J}T2(7*$%WhK-UQ
z)ZR4dxn)#ip_uW&`by*#+GPrT!BI2EaI2q>Xix1v^}30-y%JNMry#jEs*+mb($M_)
zf-ePP>W;fG8~JjhBlP6t;$rIC!bJ1*u}ZT4tA!*_sNJEpbXjR{kLl#MgM&!haovr2
zv-7EMBG0bSS48IcZXF|QT0Jwyip~X&yah&TR&CsPDm+~^!o9N`u%>Otm!jNvE!WO2
zvOU?dlzs7k0O@vmx0o+-W_!-x3+m>5fXx}%eiRr0K6(B-2}15Kne{>(jR;<2$_l2`
zhJIv6!wTwVZFN?!5ngCr$yz^te10yl6MRa7*QuW7&}Dsc&7DE&cBE41>cOAxJs(6S
zJMbY}&S?GpI6r|$-F{HRL2~r)=@nwc%o*vm0EzB3UasTAbv4r*A6L5_Z8p(^{ft(O
ztwwcwvlL1z;m{f!)}3epKh|ZU6)fex$>ecSYB7R4
zuATF)Mx7N`H?0yUw%Fjzg2UHYv0G@X^<;*p5h_dex}T|zi$pHh_w;S#+moiksA+
zZQCg!celqWK_-#L0yBb9I7~xx)V{ors)gqaSUPk%(E1+YbQoA-t5&QD#8G8LNU3NI
zVAta5BfIKP&6#mgbN)_{HOhcwiVto+Xaqefsj2DTuh7yor)kW6V3$Q>oDtg{^TfEi
zRJoRe8sCQFy;R=0i)~-z&55AOqsp>CJ`^)vVsH3JyYj2?DFrWyf}S=fQ~&G+dn?0y
z!eK7$*1$RC$dGrfipaX^JaqO9%Pnqw76P45Cp;zN}moZm*ZDyji*>TZj6UQBAuYHPqrJ~cK
z3#GSAcT_J^u1vxEv&*6@4L>W<6fm#0mAmr}yl03Sh~{S}VHVCEcbsnD4EjEaPQ%Pw
z-&)^cOUKOXg~IOe-L&|MoIuX#2c##nStwL{2VPCm9*>oaqSo_%9|JPtk
zwX#j&JS3(n;QrPB;exN3`B&Ya5af)_biFk);I}qz2Za5rj*bKV?0Uzwu|AzTV=hCH
zb2{KX&x#pW+-AblDCGW9xY|hBeq2*sfvLy1`U-Gw{%rCSpin&*6`Gy>Ej#Q}+k1^k
z0iICZCA80$kPLumX>6qy*+PpgwyX`_dtQaDR+IOk3W1!S-Hd_4kW55XEi=l4_o)xT
zgBS!Su7CkZ27=SC_TcMoiQT`*y!&CPlT^Z(l_x03?FTAEtb5)kO`i-d#$GR(c(i
z-ezPIjLh|RuUJw1ai{+Y`@Zop7^%UGZ0oCCcl>!5<-Ml-wy^*5KW5bpDShL$zIham
z`lwqs8W)$$6PK4#KW>FpspHWV(AStow^S8qnV#^PvPah#{XbtYJh-Ct{qpyHJgcjI
z>#Xe3GWwicR2g{w1EAWAE`4$kFVV(Lvi@&gMD^EvlOt-a6=+gYiHr$GYx=YeG&Xq$
zD&|5Tt#YERS5l(pW_~0g{@PG_zh!}CE9GFNIg{aZM3j5-$;1UdOa
zy%$|+w`Ujd51shq?o--x%|>J~96Z3-#zinA;qI>Zsh?M_tgVJXnuFioME{{L2f|if
zgJw|UXsdOnsx-LK1
z)i7Vj-ZL^$fvcf9E4Qg7HkLWL7EQ5jeSw>;+wa-g{@l~sC#@NEATNdgv%J82xRy=6
z8WG7>^a~u}>x<6C@D&FDQT4Uk!tiNVemQL=&LpjpcWvsjRE>ppOV2aWWv%sNt5fiX
z32b@PCN?cqAITEo4_^&uPk)y_^VuC?+g%+o5X#^7`6z22eqw8)$2ltd@35(jy`U9j07N`v&w6JX+#5jZ|45`mBSdAFmBwqnN(SC7
zt;+^Yw-1UNp{GG_0L1-{x>9)m@0nK=}kRkwJuH;|buFlk`(x{SSCsQiA
zsoc@Kn5{LqIefa5F7RGAW`+29nvX%7Xjbyj_xRQGZ=%wgiHG2_j&R&H=S
z%p}mmujd1Z7006QuFi)W`u@QQfGD)qZhcAM&xUAgYdd#RFQ_k?E!wK2zj-Sizl|vR
z;ZKI7zW!{(6|rs%x>GXDoSTN5m8ydq4egZ$eld=c5%1a)+vxm>ld?VX_3{$}5&L6$
zOeHcp=aK(mJ;U(t^=m#Bla9*_v%k2p&x)qt-#PVHSo3Whxi%gt0wBkg1P8(fwXrQf
z89-a-p9Re(0$0dU645kx%mp4R0**h8)Bmsmb@?uP7M=85*xg>G`ry(F+-2WCH@N7$
zuFO1_Onw6Zmzv?{StwBJvdKAH^rWi)aH0JZQ#16h#b%WVe1A(w1A4-v@c`HvFA6)7!VlS`ljCVBNfuH9BhA8+N&!(a173RoK`
z;2rjVSb6C?y|XEHzD}@|`Wm2%uu10dO`Uz$o&4ta#&!SB3qV&SE|31ny#6HZ?+kd)
zmZfJX4Cbci{$hILQb~PFMD)SFwxuKY>DBz~ftW1x7BPL6aQk0KLQ4U?PY8He1jb)r
zYa&8UFzfU`O`O-4$K9vjDuTY$6w7on5Ptot*J!3|z;`}fGepVC!X2H-Et%@t)D!KY-x#z=gJwI-?3C(`n5r^#g
zB$tb}gQtRE_rDUPXZ%#KRlrNc@p1X~k>>c=Nz1jjUt{K}p05OG4=ETgFGl@*?iLK%
z9gPS8f^!C#AwuAa2;j*0TVniw_#?--v%;D4fA&YeNEB5+`SRxGhLgST*Q;YOrj%%A
z95FvLzi^Nk@O&>KgzM$sxGd40f1%w|s@y->=OZ?CF8B|ZXM8%^{{i{4B3L5np8pa`
zA$r9&{6A_r%J1A>@I+EA&7)ZCN3vM|xJgAzO4IFSa(VrU0n2+3>UBF`+e@`z4z{)IK
zfAC4Dv@F5CLp^+GuyZgs^tB~FSBg2MX1HuPPxfDUKTlVd*9bMB
zB`nyj*0-AE$Rz3K2)4MOh(D$BAHx65*mgZPI5_6(K`dQ>0|`!tI_RYiW9*Z(PW}w${#8FpqsOYaZwJAtw0Klpa<24<_a3h18K>gr8hwj
z2slz88E|Grc^nzY)Pc_eGVW8O7O2(Jm}EvWhD1whlr*GkTFl#7C_Ksa&2La_X40i*
z*6LA-mFef85(fwU9mNHkGci9j*U+?rNiRv7XVcC%loEJP*i6fnB{NlTkYM6rF_E5@
zXvxWF;8oU>1uxe+`Jv2$Bb
z#bI%=xoe}X!GSfqNso!3a?oZikyej5Qa=Y>%kJp!(_OHto}*r`0~G9Kh`-LELS@
z$17!|KY)x|lJ!?}o^FEoEa`|k5~Q3nDmXhbaqTkqQ0jS4hjgjz8+OmUYNUy}BP<@D
zG~j4w(Df;UtW>5Sn<;~_>hBzcfT93T)IdhuhGf~9Yg!DrF&w??DiR%ZQ#eUo$g
zw;!jNb&7Y%nqU?0N*$LM%b10EUEjFfc1bL6eI4?L%nwgS1jKI$T{-%{|uMxo5&}0|!I%u8sm1K7C
zt}F9ml()Z}YKtZI+U|OB<{|RA~XAGW{K^xnMhC
zU+S^Oj1kP8JWM!C`82S@3iYCb7t{BHbxE*KG&PISbQo*z>&{=q54sYk0
z=&c7XPTk+1;2*T0;zj02yxZ9gLHkHE$Q4&k)+$))FYQsQUKMW4kAwf~8wwcC2pLfI
zf7`wzfM-xJ;noaswh#M1@OoT&qD*kq8dSGFhILjPi|BtB<;ulb@|BW_FiD0PZ>z(=
z?hy`FR~ODb8ROUtX;}V}`m=*>sVfITo%A#ghEGOF3J`IiM;ScT|8G_$MWXa>;ik$}
z@#Ry$5O>D0w
zg{#k8!HAZeZeO$$x1V$pbvKi5BJ&0XrO{yfb
zDpO4NX$AL*+U@!x;q0ora^paj(5ulrpZmmty-&9@H)C~kYy(Um(m+Tps?T?v%^eqd
z$bfhJ0wYG=R-`6L^*z>UqdhY%eP34)Rdc+JQZ!Tx@SEOm`ujl@xK(m_u-|;iT0di2
zWwl2gOe7$3>BS>mjoHdCe&>r~!=E3}lDWw6yZP%ls^<1NKH3ia4Ue};{wC*8g(C8V9}yoUp`X#q|TziTxL$wqLo*aPgkI$DeV9!S)qCH<~o&zqpyVq
zIktxVTPoE@+&=1vHl&RQU!|$MiNE&nyj1zxONBdH*G9NO`G6|w(H75;De;HhXIUHH
z7AQez>(%QuGvgr)tggPXg5ciH&Q~7Qqj%l*hIN}%k40tgdx$L)V>TN{G1N86j0FM-
zx`7{+xf7uE;nBqFJtxN=eZPZ{MdXCqBzH|*_|B8g
z^N>M^Rb(^KKnw4M_LEO9`fG9PwP5$-A
z4O3HZZqq;YQbVJxTwA9a1QSb{er0}@{LEhW@q!Ia!yG0WpT^;vRMQIGtHnzx>$YIX
zP@eljNLW_N*dOqPpDoeTiXJ|Nb@RAlF~Ni=#v8~9m|vrf5q7g
zaX611kFsVB6qenbhSr?vf%cPr4b@l8
zG5fC0;zo4KlZfys%pDe}?An2Y_(rv0=3&>}?=KXl=Y#8MhOC{&*3&|M?9CKB){C|n
zduImni-U`Cxb?s=gFo
z2br(ECB{V-gzk-s{bb%^GQdOXuS^
zszxpE5ch^MCoN`}56m!!=XydaKT+-FSrbbOKkHVw8HHpB$!jp-)f*S#f1HcF>tK%j
z`vTsb$Z8^7`Dz{i_yUV25#@{WSS%_UC9T
z-aSmGk+0Hq4tJFg*!2gRJiX~%4#(ZlH4eZkna(A?bv99(AypS>yBDk*cNOjhiq5l7
z1dQ{%dS|I;%|LwsQ18PoauqK&CxZ=@r7dfNJj%F@sLL9&8;-~22tAf({9@d>lB
zd`MN`)+saS;473$92R?A7dU}yq4^9Mw=V7xcdsnXi%CwN5=PCz8Sd(_9y7PeFF}tL
zcY;(>^_dkz#~$tIGh5J0ljMW=SC8D{WL6-INnALus-m5S)9#~5CFRJG#+G1gJ$)gp
zc3Y~W2kn0_Wank}_G*eHVE}M?`G^HG?!6{A)CCs%5}t`Ew_`F}`f{7Jr)N;yMq?i_WjLNG#IlW)1o;f;tsM1fo+prNBB0LgT!aTmJ
z22U_uR1zmZQyeE=r6NSV`-Tfqb#Ux4xffl@YvH8H4%xH9m|oSS=zC00JWN
z{%1S8)UG9_t9^ZpKw(sVWd-HHTqHOH@z%)y%u
zyeYzAoM{>DqZvAZlNVObmAFS9jw8r16(%@{H@Sc6L)SW$_R>YMI{
zT_#?fllSK$orBXhiL-fCBeRol;;m0&?Dy<6+G)i4)<&bp5Em~NX@T0po~A6gE?aoz
z`-Y*X!UbNox=MdvFhXC}Yzd{4ySm|2YKTR`a^E1
z?nE3woIUfEVx0JHRb#ID=iSZ1rOF}EcTj@1P4f3)`DYH{Q#cJ0w(xW;Ln24LOW(|e|?dw
z^5?2A8{izga~lJ{j6fM^9m2Y?#RoT22e^_fnTNGAYDG-`DI;Lv@@Ls3NR+*h6Dm-J
z+-En1e%Ox>(0$fWt_eh{kX_S(f&33E;9=!
z3F0X6&!E$wUUnxb#Xk(~;ZQY)5#S>DS!aMNT%ScU>?LP_(U7zU%T(m0lv6F79+Ih6
z_i^E`8Y(S^C#c6MiY$|!CQBMIzZ_79#ZNYCCbQ0EVAuw)91Dx2{_tBhi3w%-pc4aq
z{ZDrfy0Tv=!Iz6%`}LM^#Az#O$vf9Z7iiZkMqNB9Who2@Xy+Y=MCUrK5mp^Thp&xR
z>_7>dmwv%=Cyvupq*S~FQE!WE5errN)?|Fg1YkDj3{D~ny3{M-T9^G(qO+D``|
zc$s9LYN7qdC9L~T5Ja}-{Zgr{KD+bwy$15tUx3Wq95{j*ueae@p56YP5g-w%yc*}V
zCI;1I4n0k&&R<7rh*}R^(Nxvwh!W?Hdopu*w%|ON@lw6n7M=V@&DU0fn6;VICWrcc
zWX_;}KzRA)T72}+Qnu}F(V<&w67EQ_aKAl|_Xi*?ah_8vGXt`_3F^hA$_>F!j|ct_
z33%WFMPZ5XdW`(b2U$MfMc111vBMj7Hc=_mR26t@&5AZ-dY!aFtW`H
zsX7Gr5;OONrajBPXfM~cT0S2>W8R$CI_~U!71gQVbGR$2QO#-5{&at`8z-l?885mv
z;a_@~Z(R+i&Pp3ya?ODI*yC`9h1>H<=i-RocmecUpM@M~Z28Z{arKAk9IO(e`;El*C-_O;J>SnEoF^IiMyA
zbN$2|!KJs81@oj^8Y`A3C$}ozJ-sz{F0bO08&?MPfk)tZa2M+9B{-NDEc+Cy)0OzC
zPiH8dM<;nRq4bB_?XKzy3g(URp9>PpY}JfR$@3THdz-&vD=ZHyq~k{Q6Ar%A+XcVV
zLediAJFNAr5dv)$v6eH^1ww>c1~F&y+pX$nNpyp~Whr#coYc4z<-&8JV}T(iofr>_
z9Lb=?d{V=<%_JhV1sV+#3+5{mtjp6PD*T$)^`V#Y^4UA%P7yR0rRZP%6*=-Ka}{k~4!F5qOC@s3p`tf@{hp3&BZJQz(9)gDw(z_JZza%j@{9>;&3oejlmYb-lTV#&)k13Zlt0
zRf}g<{t}5`0dkEC>ijiL^OgA@;$3ohv-pksH0c4OeXCg0R~rIuFGHo9o|-&WiN~;q
zXOnL1%DuTM4pJ+R2RwR~Y*#~wrJQ9IV-E<1z3os6N_3i-^**XUEM~Gb3QJqZ(;2!C
z)n=kAY*bsek9+F+_&l+*tzp%uD*l^aMjQdR>idfDWSjkS>F;~ChVSR6MpEr&7#&pV
z#rxl|>&q;^y%9qMziOKK0gRLkL(=AKImT=7rQb?C@R}k&5YB|qnb^jY+c*r~s8|ihGwLRtc9BFNY?^iYd+N$io3&@%j9#%d=6=JVb*WJ)
zS;o&LJiWz~ys=lF(P92J$80UIA}&AC=|np5^an856eeunQuKMDkY|>WO}^PBQNI8q
zONcpRhseG#mIiB4n_Q6e^OzsB=(D=I%e1WZmX|$R1=QyKH|9ob7M`c|98=vx?29Cr
z^e2*~GlJ^R!t>SXgEqqv4$7kSBo
z)Jq|#@Cxif%B^cP;3O82RZ5Hhp7G8+*@cmSX{%5+v
z?oVsyn5>$1m$-cv20gALF%@+qE^H|JR8^i1S(LxbVsWXx5PC?qdo-kp%*x}*&%%Df
z;--ErETRd^^+>}(4)
z;a&sMZpqu+@U*716+_3Jwkv;TR|t=W_Ye&aA926OyqDkG!+8w3Hc1L*-O}>O;nzK;
zF*1|xQoZ~0C0*LL~?mpR-BKuqQ-Qc{2Y@y6EGy>^`*AP&=F5VlDfl!LLR~_m
zK78@~@W4YthAsjm)_Z#Q-myHyFQ_gbb%O-PaZUtwJRQd;bV@J|_y~7+tB3z!2tyBP
zf^b^+o|{y9J7>IEb8>p7H1U*4L4(z9-F|6FMc@|0KDW=nv%EZLdSrimvcN-cc=x2-
z&_PcFlcWM~g$f~cG4r2p*BjXk>t*|sqmIY)8e=$^gM_MbgK+77?TEa8E1b-l0lMh`m(rGNsHiJdY7M~ZmqP+J26
zaIL0|*`%UfGLZ;VNm<@-KyC
z@ylWi>8*XSU*p`>C70Toy5i%lyaQ#nKHuLEb$oV$
z523U+g=uM_ik(~49S4)d!4^#SYJy*A!xT9%(@1?@va~_J#iIMt?57ZS$Y*ROPq|hw
zU%|)dtw-SCS<)_Ny`eeSB$1ObG%tPUDVMy4(Ioh{s7e_gzoW}|Xj;?cKbteV49%3+
zV7Pcw-3>Pr!S!p41TXB_8i5c4EJM)Rg$%Vl|7tI{i7{IDP6aBvQfhUW7fF;+ZEyzj
zuQ+2E-zofsc9nKucPW0EPK14ItRnd`rJnM;ay^R*E|t{MsHtAmhoV&R3z|H~k2N_pXD=N>x=EY8R5=B*>wZRE@6Uwt$s)Qim1ISqTT_fRlp+7u#L$6u_y$*e4f60&)($ptxOwlmSVGJRz)
zK!^)s_--Gp!zi72hiFfI@I(bn({BkQbdqBuCU6H<%D`HZ`N?yr0NE+Ut+`kcF7?`Q
z>XgV8EtaRrutC8Timdn%^q6n{)GQ)snuS~W26H$+X-5&aa-F#TOJ-fq6z{i69uY7{
zJQ6)pYUS7#eARU{#w{xPTfkjVc;@`tW-5}yVD~k)tGhv`mS{3>IK`W$5Epbjoc;EN
zbM!63%(7h+HZ2jxuXw|~_T1*`l60y=z!FnVJEH+RgH(iUH26h2oubTI*tYWL&howF
z?=7a5&{?rupiu8=I`~iF@gbNGOShkWhRq+29c+jwkgs%3Owr!Mr1Evs`m>V)hfI
zzM3(t;v6flNp7T{oya^*rBLfX-3aN%2qb<&O)}nt5lZwr_Eim1vT@ZEU&w@=-VDER
z%nO>m<-P9Not<)0y;sgApKkVWg#@IcqL!5p26*dTGKnK21gux8bl86Cyt|ESO1dAZ
z^U>$Axy|16hjSO2ck?eC&^@6yF}k5FVc)!dd6MI5F!1+IomNpDCOU?DFgh_da>eps
zC$_c1blY|Hd$Jvo4pTT
zH3u>V-TP-;q!5fKCZJV?Xy7@$ig1FMZ>hm!jVL#ZAXr$mc|ut71E(a5?hCVet|sAv
zw3o*jfAu6N2uLCN8-YvCWMhgb@f@bG`%X@r?(9LH*C?PXUcKCPfhQ$07T~yDq`s0f
zXjT*<=g1X)1j3trB0vjwx(6rGd@ijy{EqEbY$g%B1qPFv-$((bC~r-3
zIcfd1;4bvF992wR8N1mq9v^ZU;Bd?5tiSXRI0@nicBRsgA>j%g+KTq9u}V1Gb)a3wMNxf&-dXfZdziUM@?0)U@+NZ#8iabqh}
z-@0$VoZwjNc|TJ{+L
z_MB7NGnWmTtP^mVCtm(N>}PieTYnrDzmv}XVJyon*XQ`Vr*p-r1Ed;fpt`bgbs@{K
zxl|?~B8cDesSijZh-T!K(T%lp|K!qYIu}g42D5!5!oZUMkkpcyK*sGBGQmNwI@p(P
zc$@I?u1GUSWHE2&fgBstxQ}XQZD$~kOC_LrqR30Ci3W$>k`*s?Wg;e1*EZC0C47Xo
z#|9g&xJyOHG{~8kLedKEJbAhM0>^72y1IKp)N&=!Lwx;Y0t*Xj7Fq0J^<}yf<;$-<
z`l?>IVnk9UV{m_uX?zU!X1(*$M{D-YdN}0b=ZCq=6H9`ygNIym3@Y6>)_og9us-WB
z@(CH=2r>@$xUzTa(~R`Eq_RA_f%q4`o^pO?qsJ3~V+)Ur7a|(zhHcyZg6f=&zL*~w
zp$3VuiYisF60Oa_M#Sp;GdyQ{MoPyJ@4-I<-C
ze)7mi3Vav18(g!j+}^+N(&?aRWd^3;e1CT(>b)#|I4CpLVR6ZsCP=vUQxQ3}7Aq!*
zS<0Ja&j})BHqGEkA;~A2kKjyOw3c#=dI7a-a!=182OTd~gn18oVO!+M-K+s9*Di6&M?XJrU|~&4KM=
z1}z|I0L$sqXIqKnG0q5w@dh>3)V=UJa<~|oaY}n90G!NAF3#+p-WbdT0%Sm~apLEg
z2F!05>Si-T(IleZ*FJk!*9A_}Q#B
znCtwAy(LcCXonULbEdG%;-(xDx=A^lP}NNf#1}}qHMaT4k6qb1C|S@kC;ZN~TAw4C
zch(3;pQB%=g^Us-!)SbB%xSwdte#5aB;6s
zW_VWobIyg~
z?8Al*OA`o~Pf+_B@Ypt5UEMss`+X&L1C=K12&A~eR0wjMCAcJ^>wL46Zb$JBFIJb5
zcWu+=V-e{%Sd7#_-4+5Zc*|2g#$t1{bR>9@_&U%VGeOVcjLaWVxuCExTI8#QY?`V$
z{X*Y#M(#e+52nT>Nj$*Y;mz8D}p-C_FMOWRMyXgcLFs~{4)yclQnyVJwqOAvZW+pW>?3L^{
zqrPR0MRcTM<$JUKMgig<;1q)NNzUE6JTI__^e)9BkYUU!;tC+6&H^?0o_Tb!Ak4F)
zP?6L@mN!mod+1b)?!{KuL6e_Wnn5=;bZ7wb%FS<>@q&J>YqMt8G$hN4%12dw4D2hh8eV8VQf;
zq-R>~q|H6HPSN>XX0K+pEX#A{Kj6l-81c4keeH^m72Swq&Awj=EV8D2sYh#T7JhkW
zuR5yreG!^zXk3^CwV^|(PL!@>{2(R6iR|dsprT7DUQ-{^a0DrlS0M+C@l!`fYD<0{
z*J8GCo7g>yyHQfM;iMR?1>b(X0_vRbx6wbH-R}(%N3ts}YL{MWv13<3$U6aS*)s9y
zGZ|?du8+9&_of{^}?tiqf+>+jDyhvg#4Dk`6u@
zjmdN-5()$t85=1;H1G_7#vC6iB5j&^F-IrWC(ZRZF>dp`*EcHD#+*a>10HDLeV^TL
z)c}%g2|_*cjM}@AP7CEdZCtjBw5!+$gHEuVfV_X{*lkX)(z}AEw)NirOzP-lXob8l
zvRM?|QTHkg8GgJO3P~^Roz>PK6a2Z%>T9;gQ@m`K$F;rFKM!-~=lhj_*#a4oIfOJ5
z%4-B#zhv3FaL*gzp$yCXl1n-U$9!XLFMn)B&sP-_-HwufG)r_eov
z%*Ia3wg%h#5bFH&=g`R@GUtg?)iS~)P|uOKHFKNB!>!BE(2`~ayj24p(8?VN49-Zi
zCv;u6URL4coO9ldouu#_S>6xMxY4|4X#(Z|?Fk0tzPcmmjVLWVk3)=b>1r~Kjnvu#
zc>Dq9xF~SAAmHz~SWYYSfvb(oOVLEM4UlvBdr#1U?vqurNCyJEYgO(vC^D*;$(L|y
zsIb~o8R1YX57Z-CVBQvg-6Wys&2USp`TR@WQ3oV_RK}?o(yE4S2(jH??gI^OMgZGE
zf#)*j>4`1NlJwjXfiX=?v#l%{krs+c>VqyHTNV$k`PG??QdDg~!!a&^|~8#yW$Eg3rmoouj+@0*NGu(K|Xk|k1%iX#i`5t8UW
z?=BH=8LEQKn9od0912T&sAZv4eFB+11`4TOiW)aHTVFs6c>%>AZ3()4k~
zK3M>4slSeV%fXz4{N~75!NyC;K^WqlOB!lsZEcNq
zg46~7(cy6=)A{*~GVQ%<7lEmbP75El2%5x^jVSYDcHJ))H4RuQj3Q)z!F-ik`K0an
z#E2v_pg2keo+kr-^V550Z6q>3ZFp4N_b)IdKHgz^>#MxF706!4*TA<525wbB!
z3)dLf*+W6g?N?HYbZ0pm0#stQaWJWEm7Ms|ZfbCyt#5KmCx4q3p9!``@DtV
zUZDkLrkFLMMiycSd%~@(Y%LWrMO@;;b;rtlUkE{v0R$hZ78a1m$Rfn1GSOP&z>$r&
z(69E3+F98}+CGlF`+BvSv)n)+_bMROwHY^(a@vL^=kUvKVn8p%SW9qFEseA}Rdm;f
z`lg9BATOvjpa~Q{V7e=;v=MUh!e?R0WnxV
zH5-Mdgucl_#VLC8Dm5+HU6L8_rhWLiz^tr!b^mX}a&y;^g-9FBb9D
z>Z-|Qr9TmGAvol5<>$uI8RJd%JWcAs4Pd4skwMsiND|nSO1QSj7z@Qpol+^R9CBm6
z@9ryuowMFh#w`A5wT#wSUGhJkg{=I!T2pCe&4Bbh${&94utm`fnIv5ZCN6zc)-Mg
zBBy!xr}`0j%%T`N77<80|F}=LMZdW&NY)pusEuW=o=r}d*-x%#63L>g*Q>&Ec2P8=
z2w>ht`!s|DN+jhC8jGf%mTltYz#Lv&sD%i%6UpMExelGxGPX9gHm7A$JnK934Nfgf
zVEe`r_V9k8EP>{s=3F%%rA(9ijz9mGin0Ua$yX>8c^v7~dvhZkHDHIzc7tDepl?La
z_`nEXLKl_YT!}p<2%)n9s<)4#!p>Lq9EaYX`zhtC^zUc|@mtJ@pIpakne`TRSrwIG
zMsR7|(cK`s8Sc1odVUdmH$vrf(!=c0G+T=vMuu7L5gsx$jOc+Pt)AKYOcQngqgZao
zWr)`?7c#NJ_zR5$pjtbP7!J2mFKx(b}c
z;Mde=oAt=Hemjv@V>u;Zv)4JSu_7C*E$f^YDJY{kuHkk*1q#M*y_`>4GpVo2_8|S(
zstTlQfme1A63=PPAJb|k-alczyh-LY1tWJ7%D;PE{`**g_^pzxpxPqoFuv&%3po2}
zlXDv7gYY}DcRIJUs}k)`_Kgc8>e2szbAM1Im`&EUkztr;HDaApn_Z*DYl+OZ;_c;s
zfr8ZE)qs6?az61A4gGghm{oHUXOF
zN7S0nfj8&suD>&+a0;GssJX~e%_kJ=M_S8B_8ajrQ*+%H4I|4>pbnQXqAhH2%}LV+
zvR_p+7#X(=E1_<#G{3Iyx7!uA@IOqlyBgv1Htgi@1Rs`PYE8|Eb?Z76**Zi{$ZXhu
zITLWlbRL!?D2ZRE`cst^)d49WFP`IeS?=Xm>WwCjG>z37%EpX!>5d(b@82ySPYw>P
z%H(2HjO|v-oW6v;Y~axV0sQ%%(uA#3qg^+jCu)#eMW1O`7z$m>@Mc@-CLq(k&x$YmXYBZE>hlmvIJ
zUn-WVU&H_v^9$aZuS2w0Dl|(9qmp4^U(+9Z#%&)8)(beNi4W0l%^&1HQ99vv22TH}P=)0hjDBso>G<)Cd`pec1S_siFSX8oMUm2pyw
zo-Q$iqVxJGu$m^{o2}889DE|1{C;IEAdrMzSp|>Y-RFY~qfh%UTXt2d_BuPWcEQhp
zrQn)H)B8ua);ZPA#5E&_nzv``R%>m4z%}ySg;Z@yOyszj3h4>EES8JGphOD`xB&xG
z4M>W;Bk|UjUYj!ty8k{%nD)e*EM1`6uW^OqyNIJWJG-)-W}c;#g7xA^hsDH)p7Y7)
zP9qvIWrbzcpVU8H+P|(qZO8n`9?+aU{oo
z+~35q<&nc__4DbMTX)~~M_t!o$H>@p;KWDIq4D3!$A#7-+t;lOr{z?WyxUvDth)G&
zO_K9+F7zEDZ>9jOOGBB#&h-LX)$d-_%jx6K^3$L-*UTP;E>+^|tq8B`-_;JxipfwH
zL$XITCftgKX-hckQ-rtcra_fcJDs@`{_Z0=CgcA8>fBYX8LmtAM*g#$I{QII%{j&-SB=3biBEDCuTN0{0Irepl7{HXikxjIJhL9D&<>`swjq5uc~a{
zxf|Yr!RcvrKj!c2J9ecg9TG+sIT{pZ?JIZhdBRfdGrK9C2Q;?)0q5nuRJG!uU99h1
zr%StAVSk24BJ5NA$eS|9YCr!OXhC?{5{GNjJOk*)6p)v>L^_p^{JQiNebb`}s4wT!
zV8Be1-s|AGcbw96_{Cmenre5&)|SnaQO3D`$+Qq@Ai(dxfQ`_k2xQ>E$4^~jM2q^V
zi`?XXHPBom{b^N3Ja??vtpWt+8Q}(dF~b-*oR52f%9)^xdmx8(oLl+*rrb01ibSS#
z3cyEIz&`wBc%8tj@21+pOw)t_sS6owz{apj9@Fw@AK$lds55(^az2Y5*Ud#TP)*{y
z1=$aQ7&!y$-8}V}}xZ`S$eLNosM);Nt
z_oqD-q*mF{&nS;ScFRa=xD`(&SidTON&^2&tTdD2Gp$AdIkZl&KpMAD~
zXsfVoR+~$|wX_y455$p3^=%oK!-lv1CEWz~R7PMoHtq-+>GHJB5jzBw}C?%1qdfx2%(p3x`e=J%Sm(ZHnNh@=Gui9mZkcc{kVv$Nyq4mffAD{F}Eq5CS
zxvDifnc&1%G=kTI$O_~P#x8jYd2ly-u{&>4z5g{Q?Tt@XEdN#V)DHNP`Hnb>tezrRlCFJV-$ut3ZXpI~?s+ZZ%M>>ci
zRPu2X7u`X)OBzbmk6O*mB{r%}Ai45PBbldNc3v`SA!CdobTzS+X7iTh
zKH9q4ToNueApMh;Bza&rQCV?g3&TTg;|}KOW(CQXb5HimM4BW>Bh#O>Z_?KcXs=B;
zJn4xax!do$)$Bs?(FK#!)h#tLrlhc`CiFwN&K9n3RAH$~p!eYRa@h6&0;Bqi`qcW^
zv1x7`(I*PEB8kb5qN2h0(_lieXQaaYqe${&W$}IJ`)9P>#;`*UsL&9Zyn|>YK~&EZ8)qHiVw}w%
zSV)w)_<>BAfQ-Oy#6Y|1>7SO}d%qVh
z3^@x}e7TrZ8<2XeX3b)2ugEVPUAH-$5cj@Y_UltBp(EkkkqVIV8ea(asW%9OQpJzG
ztw0?IXcR5A*iy=k9oiTMC~mqiVnnfQw|fN=N5FIM^FE_2z9T0iWCLm?Sr{w%0&6*w
ziRvJY9C2IQ@x^saOBfc`Lu6bdL~1#-8ePb2IE%jpYj=Znj+D2WKe-WNc+q#qg_C4*
zSJG@QI41nY?AXHv{Xn#^-jRc66eh($k%TtB0x{B8Mag8kvXS^WZo=jX!68_HT<#${
zbRBXg`-=5-eZqX;`Cb-)e;^wmX6!=s(HpRR0*CD7u
zWS?yDp|PArT_Rb>%7I#teqp#-3vA!KnDVU3N%$wY>RX0fea>;oxuUeO)RCkV`_|ah
zo_S~nUx+Kycm?n*M=vY0{1zYG1?)RT{(zI@?)^<8j@IvbVtciZlFNMx?F^xMQ%7&B
z+OFm2WuRJH?edKf_csgk{j>LGWT(Z;sN$*(xSRloN{v;;`kr--@
z_Tbi1fxLFzdSjn@o8Gxn`D?@35|Mn{X#+pW-^}?M~vAKq$2}_
zYnC-w6U9EcPG&_%1`RTR>o@CYlzR0hM{|Xur9@%K?&^!U;yQK7N99nJIdZcZpA;us
zai#jrmjLz};dZ%(5SW`jC*a_XxN4qZk!mHtVb>?kQ349yXjg84r6PXFH#E!4Mj6`1
z7A-^E43ruMo@$=##6p(L@L)r{dMwdf$(jA4zw4yQ?hUJA9tNHN7Jt+Zj|c_dq+GMC
zT!_TO`r3kYWPxza@m>^4w9n*|=wQ~aT3-n`iJHAPg*~NRy*_`ARS$OeL8IKJU9CRg
zv3Qw6T)nI|edI0d(1!ln
zzPbAp?&S=B*cQ>>_4$9h$VuSBRwv0u8@wT0C7gBuYZu|Si_T}iZZ?QvNlv&nc%u(L
zf3>$q9=u_<=esITVZKqs)9b9Wzm1RD)h|`-$fYFC`0YFp
ztXzOWYg+hJi;>%e1FX>iTQZt$0!nH%S(6tG@ltB?bK(YUF(odb&ZtADTs2icE|IX
z^~%xrFa$Xf7MOzazjeR@TfJRjeKjRjQnkmPnc{+F-%*w98Jz;gR!i
zbC$oCKEG_CH1DtE{ocoJ3}eR7*f9MP;p%fLF{G`loqrGMu#$`O-(;@*hs>hPfp)Py
z{=`St%+tklRZ3FG%u*|QpOz#*UUs&ea|D4&eaH{3$h30&Q
zSBc1S#`8aY(VX#cBL3qGR*mx?b&+62{@bHCvcY$T1;4a`b4MT2?c6FSn2L>*rCQp{
z+zE|ig*e32rEz|wxQ@hdECEiLE@g;d3df<&J9j1>74knQxid8Wk
zFSK$FAma^R4Pf8~0Zv9n!LL&NmuPo%Ei=yFqQ6h{2VCKU5#U`HrUG=wc#GSGBnp)j
zeFUHfEWwmIVMmrAGB%qKqoIjHCQ~hx8tY0>PS>$WKFOAj_;SP|je$gfo#Z7f?>0wp
zfl;XXm+@4Ujy3AR-blN`ivSGJXcKcB)87oDrg7
zQ%#J#{A}w6EGhxiGcR@P7Vy@6Zu>7YtbQpDo8kV>Lx1Ag^{P(;#Kr6hvWo{+&c*L%
zzZR7h7f7T!D)DP3&JQi*bM0a<{Tlicdv9FHqF8~lT;tzXWO=x(?$2Y3e=t=}NB;Vv
zNZ864N)YBPN@x~@z&?cu$&3nPZ@v!k>L1#Y4DI|Y*u1lUL#@4)LevoQBQ$(Fd=Tct
z_4DBgIMX+%?ogwoi1ZSpR1b>QJvgc!0P|>)8(pyjY-599j%8~HCtZVcv|wCO)EN)J
zQowZm_kc58QbrINls{Ncx_K*`cCP9*{5d*{tU0{jG);~!&NOvUc0cZ#UV<)6kGUYk
z>nNm;AKg0FOk#(Xuk_a+v~ai5?$vI0Ob@#Hu90hCV0OgSoRT>eLnD&JyU+?#2@U@0
z_O@kKnwO~N%3HJCNzk`3J+MzqHf8SA*%ET?~LLEEtBxi+fl$K1|=gVHzu
zzDM@i9)JPilF<6PB9;UX8A|pgaQSKq;9c+QkZ-8js)eZ#VnELUiV}v%Sb5CQB@spWj@NhP~aYKHb+yE7)l~e#jEzR$w}qESX6TB{fWKfDxu`+{C-4y(9*QVj(*pK;&)Mz8eyXK5+&t@DmkK>k%
z8!|FIdR_n*QS)4t}2X&k*EF(l~WkI{*%g`xX*oB-t4?4
zni7AmT;Zm{u;|y=06UXTp1q#fwY|}^D|Sq}-mZqxCu<9dg|VLwmxSs9FU@u*zJ$<4
z5>tgnmby#P?v=*wD=8VM?p@aVK@ym=(ntLr)^gI71*u|V|HiCRV9cs^g8dITg{7|_
z$=j9%|vkvOEeaOl7O8xrz*~1dZ
z(8SjKwHjci-Y++^__M|D=TpSS^lWS4v}z;WrC;Bb27)^vrXvw%p1XG1Kd;ibHtmo*
zpRK~=OCj3)zsVzodp@h|mr?%HH?7;fHg_!CUl3K39r8+52aZA7KqJ%kAH`#;}`%e_-@q1g|o6f?#E3g)=F3
zGhP+pt(Mo?WJ-}4YU|GjRBz}1c8a~}{@+03Qn)82Q#a%^3H+R#**>vFXO~1~2$5A3
zRy!c;OYHTa&vv`ZTGLmcXNBlz%Kzv8n6b4m`MY=kV;<^%VV&RH4UF+Uw)4GR#5cQR
zSx(@PCN)@qv8tEm?nYurZVCaQHfw%F_{BFiiX#Ydn{F6iZ
z8u8*V-DR`gqFZy>QOShiJMsMich{_&X6ySCT<359fiYIUFy>Naah-P3K#2rF$XTh-
zZrKwukOR}Ymi}z#>DKqZZyl^kv=zi)%)7lZt?JBEYg?a?0Dw=PE~BESy)}h+Z)W
z?KJ-9a2o%tlKx`)%WYD5f2SZ0w`MJouAZ2T8H}So@4xyN9OUbR_JmA+M0S$
zTZ&Oky6KB?{8c3-CCL#RuVnELFe&PvGo;?4`%A<+@teUfg0!d*vLyl+qnsSfiYt|p
zqy%yGQ#S$su|YK@N(EbcK0=4YIJQd0xZGI%Fa|R4%fyOVr(K1&Z-suYal~&OeS&o94uq{Xf2Cfv#u!qzOsO
z0lNVVPX9M5{?$mN+@XR`^Oej$5twDr4_YaPo8%jdeCmt!l~mJ_5W{z!+h`i
zgoX3p=gfODk(Kj08@x(f*eG@AFy*7~X80>1>7(nWa_BxDHT@-3-ECx--1ty)+T%Mc
zI|Vq?Vg|B}f}}7T3CcUh)wk2PG>H~`*2*z<>hw>y78G2iAK@H|&*o42
z7C!?U;J4_zSzk@>v~xEj*FpptD-|4VesDF{`PjG^rUO$TDFh-WAkbUBW=;i;kdAa<
zqK_HK)k)FOQ3jGi^_HjE;zOaf9GQrUyJ5nrc0r@&A^V(<94uj=U67(7qTr4(ZC7%Y
zebmm_QYm*@I_>-K68Y0n#aM?1Q^P+vTDX0jTqKH!@!AEOAa2t;7d}?5*jEh)?d&a_
z3XW0J%X$Bm2zP7Q)BXt`_sQo96<*mX!1Mpg`>PiPk|%LIGvuvxE3V$b(>;=YdyOe@zWlPripXbE7^y^*B58
z2R07lI0@nKVGMJXcl6VysXdorq~`%-dgwzP#XEyvd0~EjDG#wX#mkF>zg)(bWcvbL^@b?p=f($w>FAXelu*W5*GLv2
zZl^^b!tV@LJUY!{X|fI3eCSn^^&Sjz6QXmQBSDD4@kG{kqi9&k{HNjH;&y{MltCm*
zOjUNuWEonoqGWaAYLm09q@~jO&0XG5@ilh`4DIJ4(_4{bUy7M@=Oa{iYuJkf884*O
z`%gYPuFsMC3jLChN@P)Se94CT;-zI(n-s{?^{o0bTt?Xe7~2H!GWf<%#Yb)XO60tp
zq+d~7MugwCFJ|R2Rn3YY$#%K)@O@HCYC;yu#Tc<*vFzbi0;L9Z&x8hY>%M_$b&HXi
zqH&+(lIyvhO|U2hZ|$5UP|Pm!nmCR(}nT-+DK#DxpZO6B~sfGY)pm=gP8|4e9n+
z-4Mp=363y3hNs~ZT{#@Cm#ZtUR7ix?$NL;K#IzzP2tZq_ID;jJfuJ)b8<#FF>9Nyk
zY*aBy+Gdm_Y}RKBSSa=r-MkVFGM7_TTdTCj3;9c(d!7@I3C_BIML?K+D{!1dlFd~T
z`4Q*9V*nO9?m&niKYWRt#$`;yiMxeapD8^_HV0$-)7s_7kxyBwL`a*b*xUn#K@yUy
z4HuxJnE}feu(;#hUsVeYC68A*08F$ZgU1{150ZkS0HDXzEjJNU~M$)WqLd|0?(?bY06
zrrWethMWU?wG)_^+2u7~Yr}7ssdkwea+t4u>DW8@z{rymw4vRB*@W-1$M-+C_vpy8yit%yS>i3nK((*JX^_G{g$lwh12!L
zW4A>EWNC=IiZRuJ+}PBCud|xKj5zvoE1TDKFyAUkeXZvLlskS){{`Bj!x-6DG}emN
z6vVj0lT4z`#SW6DRYKL}%;$Cdi0@YlT91U7L?d01o2Q?VInf
zm6=8^GSqL13+>-a)%)As|6geKQqdN0kdQ=R>8pRb&{BRt1
zn1b)PMxH0$-E?aLY0}>qFGOv
zUyxx}=t8^@W1TpBP!pCbS70>SF`KFAvpolmQqZ#Q9q#v(45jGB@3eN_R@jm8RoCtJ9DLZ__{EjEr0e
zCT&}X)#Rk^`*(Hsi=lb&U+`+#obN6F#>
zXyvbr!|#k53bt-x9YWrAO357qKbHgGBWJis^?j=YH+sWHdyaOoI8dZM&!tUJyZ7
z&f49C4LmoEmrH#!Nu`nhjIkK9YD*@UC%t#~NOKtHb_!?Ew~aoMfL=KvnjcT&tHb2K
zCn9mhAlrBxhav1+a<1mByIPO3kbgH_&S#qQ_%k@m%{6(tonS^IF&nVj)iwPc*%(lI
z{#Z)-Y-7wcA#3x1f)eyjms=yB^tmvL_!9Sf#l;VksFQT#Tk@1?AB2*9?jJMX29Q)h
zFe!(#osx}~VQLm&+snI_kS~rAwq1$^eudScF(lUSMizO(O?Xm{3x)7p@Gx0$)@F!S
zJstjZ@^u05X$%QU^6&ut*Oq=5B(IrT8TuDnnB9X#-mt@o>}}-nY++
zex2KN#b^TVDCOjjf@XIY+W*4uJE|2{&mLISiCY@w5qfKS+$GO
zq_mFLfH@t#UYHfl#+DO`)kRWNfy4((rjBWZg^md9ntD1Hd*G@)L>D+>x|!GKFxgcD
zF5Z@Svp1C30d4oq@>^M+X*Z}UrD?nxDejc1W%2OU
z1+hnF7cK1@cL@Y{a}$@scyu{BwV6SpDiSsfFm-XJo0z3ddpOhjBARwps%97
z`@~=9lFXCZ&o_}MCB2teljEt7)P=&&2N9o2WerNI3X3qorRcU`7gNRcQ`X_ig=2=r
z86r=GoFqEPOwz0N&%jJxCmflg`S_RMyHU(ORu__ajS!qaA)CKJY&J!p%R>6b9)!f)
zHH(Q6N^J~T0to(n^wu{hq0$Ri8jd!iRI4+pkK~5av*R(#d1Q?}Gy^4aHbF^oL~OYx
zP?cxYv15VaUyCT@K1>Re7C8CFljKeFq2L7dV55rv3SK#Z<18NGjDfd9hQNp?8eBxI
zd^~}O2PC5|;*D%-l7u+S5F7s&K7b@bKf>9H{-E=%C8`zWXJ#SCD^3g@GN+$()RsU?
z+7He0-^J8Pfd~(Ud0P^X{Eq#G!SqvlRjtCnsYOaN
zt}8ej=FGdwcg9}L{&X*rBS|hUmVs5H
zk(@!wMJSI-Y(1ME(jKH_TRdQ0fQfLdkD%!KN$;rO?s6;n>fIJ-5JS_@bwRfrJ%g*j
zQNf=h-kWu=(|beBVv#tmqvP_`%Vq!MI>BgGZ>M2+d9%I21LR_}aWO-C5Lo3~XANE^
zfm0Y%*cqh#A^Aeu%tMQds*~qOe?TSIMX!@tJGWVNqt5N-RhhQ!&U*B)^sP-@jR%+q
zBzDNAFZ>Jcl&!XRyx6?ZX++6Q3Up*59
z#ald0U}Ghn{bm)#F*d&5KX}pQ)9apVXvsF(+Lrd1D#OO{7Ko45ut?!
z`}PWGuC>GxNifn9D#CI^GNxnRj!#HZeCf?^p(W0RQ>td84TK8Fw}ck-MOI4oOS4Y#
zSYWP-aJ$5%7Wey5Yb`-8!nw;>mNnMYkokj?^)e=ql8DI8+;fZ>90)Fo1x6^dmAeIF
zSUEXaAhl#)-Q>BKnXnfDHgTf#T1!0L#VmkL
zi9SSUU@3M9Xdf7Q%Kte*ZxqQhxk=Y}ulAeW>ibDSm$C(aKjh~8vpOqG9$H_k?|=^j
zi-WN^?4Tj-T4G1?VJ|R}cGnInZn0WbKvh@zCs~A1KeBmv#zvWw<<{ha?SVK{_{cr}e-bUgw8+SAi
zWm*2ja=B7{W5({9+fnB5C7PB8GkHQgsE^=_Iwvn!Op?PgyitLFdznyUMysG<{gd`x1Dea&Xr|2s&iM*1Yx(&xj
zw41@lMdr{qg0EEbasH{I;f}?a=p_p3QJn>Ag0|moFvTQ>%fllbytmgS_qhL9w2rCk
z=3F|8k7uC{_^UiCfY~ZJ-EyQp;4qRHR*pAVJehyB1YlLy%BpiK%VECpLu3l&REq
zeBR=;E}xg{CLO1s*pbD(ZuY$aA!IF05B+N7lQu+k1kK_xApjtK&i1yPB(PgWtF@LQ
z1AE-l!qq2=qEHTc2vhh;4?754u;)!LE!PfJbbL0vxg(zP_MX27Rm7z4t07M^T4szM
zJd3fcTcWr5;PX89+PbVLTO$T>s2jF{`qTi<0-X&Lr^7(=B?ivh$CmR72dSfmn)gIbtyz|3)_U2XezGnsV$Bp
z1BU;A0fThN+Z>vFH(%9iW+_tZVHd=u5T*Gi#MT(9L5smq@^)xA)pJ|Zg7ak9r<
zr66RDwc~>!wbu>mhY$Bvxh+=`CA+WlM<2bFVFcg|1pd;Gzw%yciIGjed?gJ7^uk&k
zH!^H+apXBsyW@+2WPs@>noKDkz7(Foa~$9GA5?o7;#=PzbsiG?1j?KpsZ89X#*KCj
z1^GKOP0T!E#+`Oe#N9uM(aQNxqB?Sln|$YmChtahUkn)h0k`vbfao%3Hi^|FoWqCC
zR%ik;zsp799rR>hOjvP(UkUnTqFMMPpK|Sep?;0=JHy+f;N*pl>9Lq*-?s;viG72f
zOfCdP=r_7F-ye13F3p~D`>&FbC#+TaaMHhZh6fRnSPH=c7ku-6XDyTZm94}a(P7ok
zm_wP;K0~;+w*Bc;mSSF}6>hRw616gaM9R7&Vz
zRcPKEiyUG;NXxB7?Zc<3%%B-7tzl228LOUef>+_1glWx)FP~E&0(nsg`vln_*z;eM
zSdMon&mc=D`~kPg`G{9y$NdFHn{rcw8Z;IZ-!HO2@}-5@{W%APX10>F2*0_Jaosk)
z@E*t^Dx34l@IdydeQ}kya1!hq-`upC3;Du{S9dliCb1TR!s%z=`nVv)<+i0$qOpbj
z^>MLx(_y2+xt=?>z#(|1NE1i^2@to(V4wL$X{gko?b1@tp32g|6ioN1yo$kvM7u@
z1a}hL2X{$uA6y4_cTFI{32wpN9fAz*?lQO&ToRlRAi(#AO_z@yxUrtEg7?vHlbo(K
z-R*mnlQhg8XIIsHg-$zT9=n$_qSHkZ9y3O}p=~@o&0OZaI8xK`O>eGp
z%IgW%yo(!CMrW)V_&Wvd#NzIdk_;SvO?EHs_>*sE+4w@IXZ;!~UYL!~a93AX55va&
zVmH%9ZMk9)z3)pJN2C`Yw=&c{y
z{>P9e(*}%}M=#w*iMoqKXiTxqyEYx
z+FSj4?LO=693#STS)aE(*TYNApl>b&GQvi~=Cybq5i^@(#{Z)I1dB3o%1o*q=V)`g
z_}{@iBHRy&@MUEwE~B2s{LeS~{LW;lRwT$K8u34tr|5_>I1$Cd`ji)rkxglAF;eSz
z%C^ORaNOB;Se@>={phFsf#yb$5;>_rpGwZp^c6P`hHrt5MXs6}961ZU(RAhGb$>9d
z%?h{ZEQl}9b0|5*uY%RC)I|%U$l4HOC*uaCtvHsX60>k^UX#Yja!s=r8q$^`^AorH
zyJVJ4E(?kKDLNrLnmTc2;0=hkJ!wFt=}S=+Gz~l58r3#+>(`6L7UE0-iZ#pgr3^Nt
zF`_)lQ)TzI5(1v=59ujTX+qMg?5Bh_!6#c>@uEuAgp4q7+@zF;611kF|EXD8PKX<{
zAY^pZ%#;q+)FgbM1#k1%(?U>$nkPJN58GhoG9gU}BZ0-Yu6pKa-~
z;)&4I%eCV1?`+Dsv@2;t1H|xHAg;#plx4cs9zA>8sJAiEEtWl#SxDg=m~peB9|YBd
zU9k^e>&OE<-QKg`j@f&L)#V4^nBW*wT(gnj>dyfku}Uy(&mAwaV$$8jda-x>E5Ni@
zhNqevrm=+SfN6YFd&jaNlV`k-kyyE04(*!ZO+6wiGV>&C9*0UiNOgl{2U%l%gqxXfp1(+~c63j^o6TfmF`0ZV
z8c7J(ZHuoxz($@C1@s)RT;32grEXe(G=Kd0D}77%9~e>4lEKbl+nnOY?CY4xRLCL7
zpUT!5F>NksraWzN4@Ym#z*iwrS-&wM!83L=(5i#HQZ#{hkP)RHFs_TJFmA8LZ=%(-
zC>+VW$TI7k7poq-LxM&kA;=~~fErC_x9GwXyY_`E^WVI~|6@MQy(Ck4hhH|8`@zop
z0Pbx>59}8I;l?GP;XdLabIJi?+u?P8^$$#`yY9}X`Hvdy_4A`=75a*;)Uy_?A*ssg
zSwDC(H4H+k4Fh9{KMQxa^Eq^KEW<}k-8dYU$Y&}tx!?Bt{h}NN+7mOwh+Bb^48&m6
zQZvhv0ZMok#4DQFUPdY_+Ox-^YSe?`}aPEoagtx`*jD5h!
z`K9QJ1ACP=_bQIgp8IFBepG;Muztpp!UKInSmPZU~x|Z|EJty~1!ZXKmG?V|rg2@LU-X{Um8{?0}-=
zEOj7V^E2*(&2EL>-}cq@yV2wFM#zm9%S7Gm;Su|j^;PO~!@XRL(z}9!$rk;)4MMZT
z(Y;lNrXYwE3OZ+=fn&JtwgZO?5-c9wU@1J7@
z0;aR=XR?6Y``4`*-(?1T&$E)!Q!YD27P)fp0#yHjp*Lm%C2%$%2T8WJQ@%*quxE=4
zvyl~RoHmiJI&O9DKpP8+bZ&w6n)@13JWp#7?iQg?rFbcSO8Q$vfUjiO$)Z4R;~UMh
zAB|NKoJSk$>Zs@8TlPsMa_+FEw5zl_0~Q0G5oakN6l_}$+ud>K*2ab@{U1*(gb(n>
zq_Viyk$w}D&N>kZ^q@f-`mqb|O_=G7bLE5a@xy?%imUIWMWqlpoiE0jYVd6LUC9B%
z$#tzoo3ygC-xQgK^%!5;CAQAJaq6VIB9bpMYPZ}pX4IpoDuX^v4ZjOT`CHpYc^%(RgZw
zf+KBebFptatbNfxFeA`22$Xhj>_tG%e(U63EWkiyN6iW?uLZ+K9Y;<61<8+pfCOBT
z4O%>ls(@CxOn*~_wlxa559VR$M}*^)ZeP&~n)!9e(d^S98FQodt9B5)?E%?rS%*UEbz@#?&nl
zaG%A*(4!;2pPqgGdupgt@YU*eZ-afmp~aboXk^NhLF;TTwxd}5<$yycJ;RB!;B2)1
zfOk4~PGc;?sqBJqJ3vU|#%Ojfp>M4AgkHhLT^U(yHI+O3hC*~mV_Q+t;KUDE!C}C{
zZq9K6JcrKa2*1b~`F>#WmqE$N0ueYs