From eca1ef9589aa88c171821272e594ffc435edff3c Mon Sep 17 00:00:00 2001 From: Fahid Attique Date: Wed, 19 Jul 2017 02:55:38 +0500 Subject: [PATCH] First commit --- .DS_Store | Bin 0 -> 6148 bytes .gitignore | 68 + FAPanels.xcodeproj/project.pbxproj | 829 ++++++ .../contents.xcworkspacedata | 7 + FAPanels/AppDelegate.swift | 64 + .../AppIcon.appiconset/Contents.json | 48 + FAPanels/Assets.xcassets/Contents.json | 6 + .../Assets.xcassets/dp.imageset/Contents.json | 21 + .../dp.imageset/IMG_20161231_154413.jpg | Bin 0 -> 488858 bytes .../menu.imageset/Contents.json | 23 + .../Assets.xcassets/menu.imageset/menu.png | Bin 0 -> 987 bytes .../Assets.xcassets/menu.imageset/menu@2x.png | Bin 0 -> 1076 bytes .../Assets.xcassets/menu.imageset/menu@3x.png | Bin 0 -> 319 bytes .../right_menu_1.imageset/Contents.json | 24 + .../right_menu_1.imageset/icons8-Home-55.png | Bin 0 -> 950 bytes .../right_menu_2.imageset/Contents.json | 24 + .../right_menu_2.imageset/icons8-Music-48.png | Bin 0 -> 816 bytes .../right_menu_3.imageset/Contents.json | 24 + .../icons8-Contacts Filled-50.png | Bin 0 -> 883 bytes .../right_menu_4.imageset/Contents.json | 24 + .../icons8-Video Call Filled-50.png | Bin 0 -> 474 bytes .../right_menu_5.imageset/Contents.json | 24 + .../icons8-Apple Filled-50.png | Bin 0 -> 1048 bytes .../right_menu_6.imageset/Contents.json | 24 + .../icons8-Message Filled-50.png | Bin 0 -> 1009 bytes .../right_menu_7.imageset/Contents.json | 24 + .../icons8-Cloud Filled-50.png | Bin 0 -> 719 bytes .../right_menu_8.imageset/Contents.json | 24 + .../icons8-Help Filled-50.png | Bin 0 -> 1079 bytes .../right_menu_9.imageset/Contents.json | 24 + .../icons8-Room Sound Filled-50.png | Bin 0 -> 931 bytes FAPanels/Base.lproj/LaunchScreen.storyboard | 27 + FAPanels/Base.lproj/Main.storyboard | 613 +++++ FAPanels/CenterVC.swift | 230 ++ FAPanels/CenterVC2.swift | 44 + FAPanels/Classes/FAPanel+Animations.swift | 515 ++++ FAPanels/Classes/FAPanel+Gestures.swift | 244 ++ .../Classes/FAPanel+InterfaceRotation.swift | 61 + FAPanels/Classes/FAPanel+KVO.swift | 32 + FAPanels/Classes/FAPanel.swift | 506 ++++ FAPanels/Classes/FAPanelConfigurations.swift | 190 ++ .../Classes/UIViewController+FAPanel.swift | 67 + FAPanels/IQKeyboardManagerSwift/.DS_Store | Bin 0 -> 6148 bytes .../Categories/IQNSArray+Sort.swift | 72 + .../Categories/IQUIScrollView+Additions.swift | 47 + .../IQUITextFieldView+Additions.swift | 56 + .../Categories/IQUIView+Hierarchy.swift | 350 +++ .../IQUIViewController+Additions.swift | 45 + .../Categories/IQUIWindow+Hierarchy.swift | 53 + .../IQKeyboardManagerConstants.swift | 136 + .../IQKeyboardManagerConstantsInternal.swift | 45 + .../IQKeyboardManager.swift | 2316 +++++++++++++++++ .../IQKeyboardManagerSwift.h | 34 + .../IQKeyboardReturnKeyHandler.swift | 690 +++++ .../IQTextView/IQTextView.swift | 142 + .../IQToolbar/IQBarButtonItem.swift | 90 + .../IQToolbar/IQPreviousNextView.swift | 28 + .../IQToolbar/IQTitleBarButtonItem.swift | 144 + .../IQToolbar/IQToolbar.swift | 253 ++ .../IQUIView+IQKeyboardToolbar.swift | 1225 +++++++++ .../Resources/.DS_Store | Bin 0 -> 6148 bytes .../IQButtonBarArrowDown@2x.png | Bin 0 -> 1764 bytes .../IQButtonBarArrowDown@3x.png | Bin 0 -> 2177 bytes .../IQButtonBarArrowLeft@2x.png | Bin 0 -> 1793 bytes .../IQButtonBarArrowLeft@3x.png | Bin 0 -> 1815 bytes .../IQButtonBarArrowRight@2x.png | Bin 0 -> 1786 bytes .../IQButtonBarArrowRight@3x.png | Bin 0 -> 1844 bytes .../IQButtonBarArrowUp@2x.png | Bin 0 -> 1769 bytes .../IQButtonBarArrowUp@3x.png | Bin 0 -> 2164 bytes .../de.lproj/IQKeyboardManager.strings | 13 + .../en.lproj/IQKeyboardManager.strings | 13 + .../es.lproj/IQKeyboardManager.strings | 14 + .../fr.lproj/IQKeyboardManager.strings | 13 + .../zh-Hans/IQKeyboardManager.strings | 13 + .../zh-Hant/IQKeyboardManager.strings | 13 + FAPanels/Info.plist | 40 + FAPanels/LeftMenuCell.swift | 29 + FAPanels/LeftMenuCell.xib | 57 + FAPanels/LeftMenuVC.swift | 96 + FAPanels/RightMenuCell.swift | 27 + FAPanels/RightMenuCell.xib | 45 + FAPanels/RightMenuVC.swift | 81 + FAPanelsTests/FAPanelsTests.swift | 36 + FAPanelsTests/Info.plist | 22 + FAPanelsUITests/FAPanelsUITests.swift | 36 + FAPanelsUITests/Info.plist | 22 + LICENSE | 19 + README.md | 432 +++ 88 files changed, 10558 insertions(+) create mode 100644 .DS_Store create mode 100644 .gitignore create mode 100644 FAPanels.xcodeproj/project.pbxproj create mode 100644 FAPanels.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 FAPanels/AppDelegate.swift create mode 100644 FAPanels/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 FAPanels/Assets.xcassets/Contents.json create mode 100644 FAPanels/Assets.xcassets/dp.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/dp.imageset/IMG_20161231_154413.jpg create mode 100644 FAPanels/Assets.xcassets/menu.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/menu.imageset/menu.png create mode 100644 FAPanels/Assets.xcassets/menu.imageset/menu@2x.png create mode 100644 FAPanels/Assets.xcassets/menu.imageset/menu@3x.png create mode 100644 FAPanels/Assets.xcassets/right_menu_1.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_1.imageset/icons8-Home-55.png create mode 100644 FAPanels/Assets.xcassets/right_menu_2.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_2.imageset/icons8-Music-48.png create mode 100644 FAPanels/Assets.xcassets/right_menu_3.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_3.imageset/icons8-Contacts Filled-50.png create mode 100644 FAPanels/Assets.xcassets/right_menu_4.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_4.imageset/icons8-Video Call Filled-50.png create mode 100644 FAPanels/Assets.xcassets/right_menu_5.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_5.imageset/icons8-Apple Filled-50.png create mode 100644 FAPanels/Assets.xcassets/right_menu_6.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_6.imageset/icons8-Message Filled-50.png create mode 100644 FAPanels/Assets.xcassets/right_menu_7.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_7.imageset/icons8-Cloud Filled-50.png create mode 100644 FAPanels/Assets.xcassets/right_menu_8.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_8.imageset/icons8-Help Filled-50.png create mode 100644 FAPanels/Assets.xcassets/right_menu_9.imageset/Contents.json create mode 100644 FAPanels/Assets.xcassets/right_menu_9.imageset/icons8-Room Sound Filled-50.png create mode 100644 FAPanels/Base.lproj/LaunchScreen.storyboard create mode 100644 FAPanels/Base.lproj/Main.storyboard create mode 100644 FAPanels/CenterVC.swift create mode 100644 FAPanels/CenterVC2.swift create mode 100644 FAPanels/Classes/FAPanel+Animations.swift create mode 100644 FAPanels/Classes/FAPanel+Gestures.swift create mode 100644 FAPanels/Classes/FAPanel+InterfaceRotation.swift create mode 100644 FAPanels/Classes/FAPanel+KVO.swift create mode 100644 FAPanels/Classes/FAPanel.swift create mode 100644 FAPanels/Classes/FAPanelConfigurations.swift create mode 100644 FAPanels/Classes/UIViewController+FAPanel.swift create mode 100644 FAPanels/IQKeyboardManagerSwift/.DS_Store create mode 100755 FAPanels/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/Categories/IQUIWindow+Hierarchy.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/IQKeyboardManager.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/IQKeyboardManagerSwift.h create mode 100755 FAPanels/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/IQTextView/IQTextView.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift create mode 100755 FAPanels/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift create mode 100644 FAPanels/IQKeyboardManagerSwift/Resources/.DS_Store create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/de.lproj/IQKeyboardManager.strings create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/en.lproj/IQKeyboardManager.strings create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/es.lproj/IQKeyboardManager.strings create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/fr.lproj/IQKeyboardManager.strings create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/zh-Hans/IQKeyboardManager.strings create mode 100755 FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/zh-Hant/IQKeyboardManager.strings create mode 100644 FAPanels/Info.plist create mode 100644 FAPanels/LeftMenuCell.swift create mode 100644 FAPanels/LeftMenuCell.xib create mode 100644 FAPanels/LeftMenuVC.swift create mode 100644 FAPanels/RightMenuCell.swift create mode 100644 FAPanels/RightMenuCell.xib create mode 100644 FAPanels/RightMenuVC.swift create mode 100644 FAPanelsTests/FAPanelsTests.swift create mode 100644 FAPanelsTests/Info.plist create mode 100644 FAPanelsUITests/FAPanelsUITests.swift create mode 100644 FAPanelsUITests/Info.plist create mode 100644 LICENSE create mode 100644 README.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2e8b6dc379d2eb2548f546c76b0146a6cfb92c2d GIT binary patch literal 6148 zcmeHKOG?B*5Pdz)V!+KH2)gSN2y=rtMAyPxKuJWA!~}J~Wo{tuJ%o1=kK*1}RXsAn zEV7b8s-Wvty8HF#LAtvDgyp(i0CNB{7QrCFfJyaW(Zot@)H?T(Nc zx_1R!fxZHJ_BogP|BS!PV3Oab_?Ii-3j8w#!ZcsyOKvLNt-rP>cWq?3WD%2oodh(- ly+;5) literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f34f133 --- /dev/null +++ b/.gitignore @@ -0,0 +1,68 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData/ + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata/ + +## Other +*.moved-aside +*.xccheckout +*.xcscmblueprint +*.xcuserstate + +## Obj-C/Swift specific +*.hmap +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output diff --git a/FAPanels.xcodeproj/project.pbxproj b/FAPanels.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ffc8d7a --- /dev/null +++ b/FAPanels.xcodeproj/project.pbxproj @@ -0,0 +1,829 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 293F78561EFEF2AB00D273F1 /* FAPanel+Gestures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293F78551EFEF2AB00D273F1 /* FAPanel+Gestures.swift */; }; + 293F78581EFEF50700D273F1 /* UIViewController+FAPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293F78571EFEF50700D273F1 /* UIViewController+FAPanel.swift */; }; + 293F785A1EFEF53300D273F1 /* FAPanel+KVO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293F78591EFEF53300D273F1 /* FAPanel+KVO.swift */; }; + 293F785C1EFEF55900D273F1 /* FAPanel+InterfaceRotation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293F785B1EFEF55900D273F1 /* FAPanel+InterfaceRotation.swift */; }; + 293F785E1EFEF59A00D273F1 /* FAPanelConfigurations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293F785D1EFEF59A00D273F1 /* FAPanelConfigurations.swift */; }; + 293F78601EFEF5CB00D273F1 /* FAPanel+Animations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293F785F1EFEF5CB00D273F1 /* FAPanel+Animations.swift */; }; + 2950AE361F15637100550200 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE201F15637100550200 /* IQNSArray+Sort.swift */; }; + 2950AE371F15637100550200 /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE211F15637100550200 /* IQUIScrollView+Additions.swift */; }; + 2950AE381F15637100550200 /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE221F15637100550200 /* IQUITextFieldView+Additions.swift */; }; + 2950AE391F15637100550200 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE231F15637100550200 /* IQUIView+Hierarchy.swift */; }; + 2950AE3A1F15637100550200 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE241F15637100550200 /* IQUIViewController+Additions.swift */; }; + 2950AE3B1F15637100550200 /* IQUIWindow+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE251F15637100550200 /* IQUIWindow+Hierarchy.swift */; }; + 2950AE3C1F15637100550200 /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE271F15637100550200 /* IQKeyboardManagerConstants.swift */; }; + 2950AE3D1F15637100550200 /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE281F15637100550200 /* IQKeyboardManagerConstantsInternal.swift */; }; + 2950AE3E1F15637100550200 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE291F15637100550200 /* IQKeyboardManager.swift */; }; + 2950AE3F1F15637100550200 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE2B1F15637100550200 /* IQKeyboardReturnKeyHandler.swift */; }; + 2950AE401F15637100550200 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE2D1F15637100550200 /* IQTextView.swift */; }; + 2950AE411F15637100550200 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE2F1F15637100550200 /* IQBarButtonItem.swift */; }; + 2950AE421F15637100550200 /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE301F15637100550200 /* IQPreviousNextView.swift */; }; + 2950AE431F15637100550200 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE311F15637100550200 /* IQTitleBarButtonItem.swift */; }; + 2950AE441F15637100550200 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE321F15637100550200 /* IQToolbar.swift */; }; + 2950AE451F15637100550200 /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950AE331F15637100550200 /* IQUIView+IQKeyboardToolbar.swift */; }; + 2950AE461F15637100550200 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2950AE351F15637100550200 /* IQKeyboardManager.bundle */; }; + 29641F711EEC1A5500E41BA5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29641F701EEC1A5500E41BA5 /* AppDelegate.swift */; }; + 29641F761EEC1A5500E41BA5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 29641F741EEC1A5500E41BA5 /* Main.storyboard */; }; + 29641F781EEC1A5500E41BA5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29641F771EEC1A5500E41BA5 /* Assets.xcassets */; }; + 29641F7B1EEC1A5500E41BA5 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 29641F791EEC1A5500E41BA5 /* LaunchScreen.storyboard */; }; + 29641F861EEC1A5500E41BA5 /* FAPanelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29641F851EEC1A5500E41BA5 /* FAPanelsTests.swift */; }; + 29641F911EEC1A5500E41BA5 /* FAPanelsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29641F901EEC1A5500E41BA5 /* FAPanelsUITests.swift */; }; + 29641FA91EEC5DA200E41BA5 /* FAPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29641FA81EEC5DA200E41BA5 /* FAPanel.swift */; }; + 296481851EF471D400BD2813 /* CenterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296481831EF471D400BD2813 /* CenterVC.swift */; }; + 296481891EF471ED00BD2813 /* RightMenuVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296481871EF471ED00BD2813 /* RightMenuVC.swift */; }; + 2964818D1EF471FF00BD2813 /* LeftMenuVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2964818B1EF471FF00BD2813 /* LeftMenuVC.swift */; }; + 297829D21F1B9CD3007A570F /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 297829D01F1B9CD3007A570F /* LICENSE */; }; + 297829D31F1B9CD3007A570F /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 297829D11F1B9CD3007A570F /* README.md */; }; + 29925D8E1F13BC0C009C0795 /* RightMenuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29925D8C1F13BC0C009C0795 /* RightMenuCell.swift */; }; + 29925D8F1F13BC0C009C0795 /* RightMenuCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29925D8D1F13BC0C009C0795 /* RightMenuCell.xib */; }; + 29B4D1711F12BF110028CB4E /* LeftMenuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B4D16F1F12BF110028CB4E /* LeftMenuCell.swift */; }; + 29B4D1721F12BF110028CB4E /* LeftMenuCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29B4D1701F12BF110028CB4E /* LeftMenuCell.xib */; }; + 29B4D1741F12C6050028CB4E /* CenterVC2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B4D1731F12C6050028CB4E /* CenterVC2.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 29641F821EEC1A5500E41BA5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29641F651EEC1A5400E41BA5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 29641F6C1EEC1A5500E41BA5; + remoteInfo = FAPanels; + }; + 29641F8D1EEC1A5500E41BA5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29641F651EEC1A5400E41BA5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 29641F6C1EEC1A5500E41BA5; + remoteInfo = FAPanels; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 293F78551EFEF2AB00D273F1 /* FAPanel+Gestures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FAPanel+Gestures.swift"; sourceTree = ""; }; + 293F78571EFEF50700D273F1 /* UIViewController+FAPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+FAPanel.swift"; sourceTree = ""; }; + 293F78591EFEF53300D273F1 /* FAPanel+KVO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FAPanel+KVO.swift"; sourceTree = ""; }; + 293F785B1EFEF55900D273F1 /* FAPanel+InterfaceRotation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FAPanel+InterfaceRotation.swift"; sourceTree = ""; }; + 293F785D1EFEF59A00D273F1 /* FAPanelConfigurations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FAPanelConfigurations.swift; sourceTree = ""; }; + 293F785F1EFEF5CB00D273F1 /* FAPanel+Animations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FAPanel+Animations.swift"; sourceTree = ""; }; + 2950AE201F15637100550200 /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQNSArray+Sort.swift"; sourceTree = ""; }; + 2950AE211F15637100550200 /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQUIScrollView+Additions.swift"; sourceTree = ""; }; + 2950AE221F15637100550200 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQUITextFieldView+Additions.swift"; sourceTree = ""; }; + 2950AE231F15637100550200 /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQUIView+Hierarchy.swift"; sourceTree = ""; }; + 2950AE241F15637100550200 /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQUIViewController+Additions.swift"; sourceTree = ""; }; + 2950AE251F15637100550200 /* IQUIWindow+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQUIWindow+Hierarchy.swift"; sourceTree = ""; }; + 2950AE271F15637100550200 /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQKeyboardManagerConstants.swift; sourceTree = ""; }; + 2950AE281F15637100550200 /* IQKeyboardManagerConstantsInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQKeyboardManagerConstantsInternal.swift; sourceTree = ""; }; + 2950AE291F15637100550200 /* IQKeyboardManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQKeyboardManager.swift; sourceTree = ""; }; + 2950AE2A1F15637100550200 /* IQKeyboardManagerSwift.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardManagerSwift.h; sourceTree = ""; }; + 2950AE2B1F15637100550200 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQKeyboardReturnKeyHandler.swift; sourceTree = ""; }; + 2950AE2D1F15637100550200 /* IQTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQTextView.swift; sourceTree = ""; }; + 2950AE2F1F15637100550200 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQBarButtonItem.swift; sourceTree = ""; }; + 2950AE301F15637100550200 /* IQPreviousNextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQPreviousNextView.swift; sourceTree = ""; }; + 2950AE311F15637100550200 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQTitleBarButtonItem.swift; sourceTree = ""; }; + 2950AE321F15637100550200 /* IQToolbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQToolbar.swift; sourceTree = ""; }; + 2950AE331F15637100550200 /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQUIView+IQKeyboardToolbar.swift"; sourceTree = ""; }; + 2950AE351F15637100550200 /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = IQKeyboardManager.bundle; sourceTree = ""; }; + 29641F6D1EEC1A5500E41BA5 /* FAPanels.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FAPanels.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 29641F701EEC1A5500E41BA5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 29641F751EEC1A5500E41BA5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 29641F771EEC1A5500E41BA5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 29641F7A1EEC1A5500E41BA5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 29641F7C1EEC1A5500E41BA5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 29641F811EEC1A5500E41BA5 /* FAPanelsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FAPanelsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 29641F851EEC1A5500E41BA5 /* FAPanelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAPanelsTests.swift; sourceTree = ""; }; + 29641F871EEC1A5500E41BA5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 29641F8C1EEC1A5500E41BA5 /* FAPanelsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FAPanelsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 29641F901EEC1A5500E41BA5 /* FAPanelsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAPanelsUITests.swift; sourceTree = ""; }; + 29641F921EEC1A5500E41BA5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 29641FA81EEC5DA200E41BA5 /* FAPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FAPanel.swift; sourceTree = ""; }; + 296481831EF471D400BD2813 /* CenterVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CenterVC.swift; sourceTree = ""; }; + 296481871EF471ED00BD2813 /* RightMenuVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RightMenuVC.swift; sourceTree = ""; }; + 2964818B1EF471FF00BD2813 /* LeftMenuVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LeftMenuVC.swift; sourceTree = ""; }; + 297829D01F1B9CD3007A570F /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 297829D11F1B9CD3007A570F /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 29925D8C1F13BC0C009C0795 /* RightMenuCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RightMenuCell.swift; sourceTree = ""; }; + 29925D8D1F13BC0C009C0795 /* RightMenuCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RightMenuCell.xib; sourceTree = ""; }; + 29B4D16F1F12BF110028CB4E /* LeftMenuCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LeftMenuCell.swift; sourceTree = ""; }; + 29B4D1701F12BF110028CB4E /* LeftMenuCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LeftMenuCell.xib; sourceTree = ""; }; + 29B4D1731F12C6050028CB4E /* CenterVC2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CenterVC2.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 29641F6A1EEC1A5500E41BA5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 29641F7E1EEC1A5500E41BA5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 29641F891EEC1A5500E41BA5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2950AE1D1F15636500550200 /* Libraries */ = { + isa = PBXGroup; + children = ( + 2950AE1E1F15637100550200 /* IQKeyboardManagerSwift */, + ); + name = Libraries; + sourceTree = ""; + }; + 2950AE1E1F15637100550200 /* IQKeyboardManagerSwift */ = { + isa = PBXGroup; + children = ( + 2950AE1F1F15637100550200 /* Categories */, + 2950AE261F15637100550200 /* Constants */, + 2950AE291F15637100550200 /* IQKeyboardManager.swift */, + 2950AE2A1F15637100550200 /* IQKeyboardManagerSwift.h */, + 2950AE2B1F15637100550200 /* IQKeyboardReturnKeyHandler.swift */, + 2950AE2C1F15637100550200 /* IQTextView */, + 2950AE2E1F15637100550200 /* IQToolbar */, + 2950AE341F15637100550200 /* Resources */, + ); + path = IQKeyboardManagerSwift; + sourceTree = ""; + }; + 2950AE1F1F15637100550200 /* Categories */ = { + isa = PBXGroup; + children = ( + 2950AE201F15637100550200 /* IQNSArray+Sort.swift */, + 2950AE211F15637100550200 /* IQUIScrollView+Additions.swift */, + 2950AE221F15637100550200 /* IQUITextFieldView+Additions.swift */, + 2950AE231F15637100550200 /* IQUIView+Hierarchy.swift */, + 2950AE241F15637100550200 /* IQUIViewController+Additions.swift */, + 2950AE251F15637100550200 /* IQUIWindow+Hierarchy.swift */, + ); + path = Categories; + sourceTree = ""; + }; + 2950AE261F15637100550200 /* Constants */ = { + isa = PBXGroup; + children = ( + 2950AE271F15637100550200 /* IQKeyboardManagerConstants.swift */, + 2950AE281F15637100550200 /* IQKeyboardManagerConstantsInternal.swift */, + ); + path = Constants; + sourceTree = ""; + }; + 2950AE2C1F15637100550200 /* IQTextView */ = { + isa = PBXGroup; + children = ( + 2950AE2D1F15637100550200 /* IQTextView.swift */, + ); + path = IQTextView; + sourceTree = ""; + }; + 2950AE2E1F15637100550200 /* IQToolbar */ = { + isa = PBXGroup; + children = ( + 2950AE2F1F15637100550200 /* IQBarButtonItem.swift */, + 2950AE301F15637100550200 /* IQPreviousNextView.swift */, + 2950AE311F15637100550200 /* IQTitleBarButtonItem.swift */, + 2950AE321F15637100550200 /* IQToolbar.swift */, + 2950AE331F15637100550200 /* IQUIView+IQKeyboardToolbar.swift */, + ); + path = IQToolbar; + sourceTree = ""; + }; + 2950AE341F15637100550200 /* Resources */ = { + isa = PBXGroup; + children = ( + 2950AE351F15637100550200 /* IQKeyboardManager.bundle */, + ); + path = Resources; + sourceTree = ""; + }; + 29641F641EEC1A5400E41BA5 = { + isa = PBXGroup; + children = ( + 297829D01F1B9CD3007A570F /* LICENSE */, + 297829D11F1B9CD3007A570F /* README.md */, + 29641F6F1EEC1A5500E41BA5 /* FAPanels */, + 29641F841EEC1A5500E41BA5 /* FAPanelsTests */, + 29641F8F1EEC1A5500E41BA5 /* FAPanelsUITests */, + 29641F6E1EEC1A5500E41BA5 /* Products */, + ); + sourceTree = ""; + }; + 29641F6E1EEC1A5500E41BA5 /* Products */ = { + isa = PBXGroup; + children = ( + 29641F6D1EEC1A5500E41BA5 /* FAPanels.app */, + 29641F811EEC1A5500E41BA5 /* FAPanelsTests.xctest */, + 29641F8C1EEC1A5500E41BA5 /* FAPanelsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 29641F6F1EEC1A5500E41BA5 /* FAPanels */ = { + isa = PBXGroup; + children = ( + 2964817A1EF4710300BD2813 /* Example */, + 29641FA71EEC577200E41BA5 /* Classes */, + ); + path = FAPanels; + sourceTree = ""; + }; + 29641F841EEC1A5500E41BA5 /* FAPanelsTests */ = { + isa = PBXGroup; + children = ( + 29641F851EEC1A5500E41BA5 /* FAPanelsTests.swift */, + 29641F871EEC1A5500E41BA5 /* Info.plist */, + ); + path = FAPanelsTests; + sourceTree = ""; + }; + 29641F8F1EEC1A5500E41BA5 /* FAPanelsUITests */ = { + isa = PBXGroup; + children = ( + 29641F901EEC1A5500E41BA5 /* FAPanelsUITests.swift */, + 29641F921EEC1A5500E41BA5 /* Info.plist */, + ); + path = FAPanelsUITests; + sourceTree = ""; + }; + 29641FA71EEC577200E41BA5 /* Classes */ = { + isa = PBXGroup; + children = ( + 29641FA81EEC5DA200E41BA5 /* FAPanel.swift */, + 293F785D1EFEF59A00D273F1 /* FAPanelConfigurations.swift */, + 293F785F1EFEF5CB00D273F1 /* FAPanel+Animations.swift */, + 293F78551EFEF2AB00D273F1 /* FAPanel+Gestures.swift */, + 293F785B1EFEF55900D273F1 /* FAPanel+InterfaceRotation.swift */, + 293F78591EFEF53300D273F1 /* FAPanel+KVO.swift */, + 293F78571EFEF50700D273F1 /* UIViewController+FAPanel.swift */, + ); + path = Classes; + sourceTree = ""; + }; + 2964817A1EF4710300BD2813 /* Example */ = { + isa = PBXGroup; + children = ( + 2964817B1EF4710B00BD2813 /* AppDelegate */, + 2964817E1EF4712800BD2813 /* Controllers */, + 2964817C1EF4711C00BD2813 /* Stories */, + 2950AE1D1F15636500550200 /* Libraries */, + 2964817F1EF4715B00BD2813 /* Resources */, + 2964817D1EF4712200BD2813 /* Assets */, + ); + name = Example; + sourceTree = ""; + }; + 2964817B1EF4710B00BD2813 /* AppDelegate */ = { + isa = PBXGroup; + children = ( + 29641F701EEC1A5500E41BA5 /* AppDelegate.swift */, + ); + name = AppDelegate; + sourceTree = ""; + }; + 2964817C1EF4711C00BD2813 /* Stories */ = { + isa = PBXGroup; + children = ( + 29641F741EEC1A5500E41BA5 /* Main.storyboard */, + 29641F791EEC1A5500E41BA5 /* LaunchScreen.storyboard */, + ); + name = Stories; + sourceTree = ""; + }; + 2964817D1EF4712200BD2813 /* Assets */ = { + isa = PBXGroup; + children = ( + 29641F771EEC1A5500E41BA5 /* Assets.xcassets */, + ); + name = Assets; + sourceTree = ""; + }; + 2964817E1EF4712800BD2813 /* Controllers */ = { + isa = PBXGroup; + children = ( + 296481821EF471AF00BD2813 /* CenterVC */, + 296481811EF471A400BD2813 /* RightMenuVC */, + 296481801EF4719500BD2813 /* LeftMenuVC */, + ); + name = Controllers; + sourceTree = ""; + }; + 2964817F1EF4715B00BD2813 /* Resources */ = { + isa = PBXGroup; + children = ( + 29641F7C1EEC1A5500E41BA5 /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 296481801EF4719500BD2813 /* LeftMenuVC */ = { + isa = PBXGroup; + children = ( + 2964818B1EF471FF00BD2813 /* LeftMenuVC.swift */, + 29B4D16D1F12BE7F0028CB4E /* Cell */, + ); + name = LeftMenuVC; + sourceTree = ""; + }; + 296481811EF471A400BD2813 /* RightMenuVC */ = { + isa = PBXGroup; + children = ( + 296481871EF471ED00BD2813 /* RightMenuVC.swift */, + 29925D8B1F13BBEB009C0795 /* Cell */, + ); + name = RightMenuVC; + sourceTree = ""; + }; + 296481821EF471AF00BD2813 /* CenterVC */ = { + isa = PBXGroup; + children = ( + 296481831EF471D400BD2813 /* CenterVC.swift */, + 29B4D1731F12C6050028CB4E /* CenterVC2.swift */, + ); + name = CenterVC; + sourceTree = ""; + }; + 29925D8B1F13BBEB009C0795 /* Cell */ = { + isa = PBXGroup; + children = ( + 29925D8C1F13BC0C009C0795 /* RightMenuCell.swift */, + 29925D8D1F13BC0C009C0795 /* RightMenuCell.xib */, + ); + name = Cell; + sourceTree = ""; + }; + 29B4D16D1F12BE7F0028CB4E /* Cell */ = { + isa = PBXGroup; + children = ( + 29B4D16F1F12BF110028CB4E /* LeftMenuCell.swift */, + 29B4D1701F12BF110028CB4E /* LeftMenuCell.xib */, + ); + name = Cell; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 29641F6C1EEC1A5500E41BA5 /* FAPanels */ = { + isa = PBXNativeTarget; + buildConfigurationList = 29641F951EEC1A5500E41BA5 /* Build configuration list for PBXNativeTarget "FAPanels" */; + buildPhases = ( + 29641F691EEC1A5500E41BA5 /* Sources */, + 29641F6A1EEC1A5500E41BA5 /* Frameworks */, + 29641F6B1EEC1A5500E41BA5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FAPanels; + productName = FAPanels; + productReference = 29641F6D1EEC1A5500E41BA5 /* FAPanels.app */; + productType = "com.apple.product-type.application"; + }; + 29641F801EEC1A5500E41BA5 /* FAPanelsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 29641F981EEC1A5500E41BA5 /* Build configuration list for PBXNativeTarget "FAPanelsTests" */; + buildPhases = ( + 29641F7D1EEC1A5500E41BA5 /* Sources */, + 29641F7E1EEC1A5500E41BA5 /* Frameworks */, + 29641F7F1EEC1A5500E41BA5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 29641F831EEC1A5500E41BA5 /* PBXTargetDependency */, + ); + name = FAPanelsTests; + productName = FAPanelsTests; + productReference = 29641F811EEC1A5500E41BA5 /* FAPanelsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 29641F8B1EEC1A5500E41BA5 /* FAPanelsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 29641F9B1EEC1A5500E41BA5 /* Build configuration list for PBXNativeTarget "FAPanelsUITests" */; + buildPhases = ( + 29641F881EEC1A5500E41BA5 /* Sources */, + 29641F891EEC1A5500E41BA5 /* Frameworks */, + 29641F8A1EEC1A5500E41BA5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 29641F8E1EEC1A5500E41BA5 /* PBXTargetDependency */, + ); + name = FAPanelsUITests; + productName = FAPanelsUITests; + productReference = 29641F8C1EEC1A5500E41BA5 /* FAPanelsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29641F651EEC1A5400E41BA5 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0830; + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = "Fahid Attique"; + TargetAttributes = { + 29641F6C1EEC1A5500E41BA5 = { + CreatedOnToolsVersion = 8.3.2; + DevelopmentTeam = 664343KK2F; + LastSwiftMigration = 0830; + ProvisioningStyle = Automatic; + }; + 29641F801EEC1A5500E41BA5 = { + CreatedOnToolsVersion = 8.3.2; + DevelopmentTeam = 664343KK2F; + LastSwiftMigration = 0830; + ProvisioningStyle = Automatic; + TestTargetID = 29641F6C1EEC1A5500E41BA5; + }; + 29641F8B1EEC1A5500E41BA5 = { + CreatedOnToolsVersion = 8.3.2; + DevelopmentTeam = 664343KK2F; + LastSwiftMigration = 0830; + ProvisioningStyle = Automatic; + TestTargetID = 29641F6C1EEC1A5500E41BA5; + }; + }; + }; + buildConfigurationList = 29641F681EEC1A5400E41BA5 /* Build configuration list for PBXProject "FAPanels" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 29641F641EEC1A5400E41BA5; + productRefGroup = 29641F6E1EEC1A5500E41BA5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 29641F6C1EEC1A5500E41BA5 /* FAPanels */, + 29641F801EEC1A5500E41BA5 /* FAPanelsTests */, + 29641F8B1EEC1A5500E41BA5 /* FAPanelsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 29641F6B1EEC1A5500E41BA5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 29641F7B1EEC1A5500E41BA5 /* LaunchScreen.storyboard in Resources */, + 29925D8F1F13BC0C009C0795 /* RightMenuCell.xib in Resources */, + 2950AE461F15637100550200 /* IQKeyboardManager.bundle in Resources */, + 297829D21F1B9CD3007A570F /* LICENSE in Resources */, + 29B4D1721F12BF110028CB4E /* LeftMenuCell.xib in Resources */, + 29641F781EEC1A5500E41BA5 /* Assets.xcassets in Resources */, + 29641F761EEC1A5500E41BA5 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 29641F7F1EEC1A5500E41BA5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 29641F8A1EEC1A5500E41BA5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 29641F691EEC1A5500E41BA5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 293F785E1EFEF59A00D273F1 /* FAPanelConfigurations.swift in Sources */, + 2950AE3C1F15637100550200 /* IQKeyboardManagerConstants.swift in Sources */, + 2950AE3F1F15637100550200 /* IQKeyboardReturnKeyHandler.swift in Sources */, + 296481891EF471ED00BD2813 /* RightMenuVC.swift in Sources */, + 297829D31F1B9CD3007A570F /* README.md in Sources */, + 2950AE3D1F15637100550200 /* IQKeyboardManagerConstantsInternal.swift in Sources */, + 2950AE421F15637100550200 /* IQPreviousNextView.swift in Sources */, + 293F78561EFEF2AB00D273F1 /* FAPanel+Gestures.swift in Sources */, + 293F78601EFEF5CB00D273F1 /* FAPanel+Animations.swift in Sources */, + 2950AE391F15637100550200 /* IQUIView+Hierarchy.swift in Sources */, + 2964818D1EF471FF00BD2813 /* LeftMenuVC.swift in Sources */, + 2950AE371F15637100550200 /* IQUIScrollView+Additions.swift in Sources */, + 2950AE401F15637100550200 /* IQTextView.swift in Sources */, + 2950AE381F15637100550200 /* IQUITextFieldView+Additions.swift in Sources */, + 2950AE431F15637100550200 /* IQTitleBarButtonItem.swift in Sources */, + 29B4D1711F12BF110028CB4E /* LeftMenuCell.swift in Sources */, + 293F785C1EFEF55900D273F1 /* FAPanel+InterfaceRotation.swift in Sources */, + 293F78581EFEF50700D273F1 /* UIViewController+FAPanel.swift in Sources */, + 2950AE441F15637100550200 /* IQToolbar.swift in Sources */, + 2950AE451F15637100550200 /* IQUIView+IQKeyboardToolbar.swift in Sources */, + 296481851EF471D400BD2813 /* CenterVC.swift in Sources */, + 2950AE3A1F15637100550200 /* IQUIViewController+Additions.swift in Sources */, + 29641FA91EEC5DA200E41BA5 /* FAPanel.swift in Sources */, + 293F785A1EFEF53300D273F1 /* FAPanel+KVO.swift in Sources */, + 2950AE3E1F15637100550200 /* IQKeyboardManager.swift in Sources */, + 2950AE3B1F15637100550200 /* IQUIWindow+Hierarchy.swift in Sources */, + 2950AE361F15637100550200 /* IQNSArray+Sort.swift in Sources */, + 2950AE411F15637100550200 /* IQBarButtonItem.swift in Sources */, + 29641F711EEC1A5500E41BA5 /* AppDelegate.swift in Sources */, + 29925D8E1F13BC0C009C0795 /* RightMenuCell.swift in Sources */, + 29B4D1741F12C6050028CB4E /* CenterVC2.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 29641F7D1EEC1A5500E41BA5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 29641F861EEC1A5500E41BA5 /* FAPanelsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 29641F881EEC1A5500E41BA5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 29641F911EEC1A5500E41BA5 /* FAPanelsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 29641F831EEC1A5500E41BA5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 29641F6C1EEC1A5500E41BA5 /* FAPanels */; + targetProxy = 29641F821EEC1A5500E41BA5 /* PBXContainerItemProxy */; + }; + 29641F8E1EEC1A5500E41BA5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 29641F6C1EEC1A5500E41BA5 /* FAPanels */; + targetProxy = 29641F8D1EEC1A5500E41BA5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 29641F741EEC1A5500E41BA5 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 29641F751EEC1A5500E41BA5 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 29641F791EEC1A5500E41BA5 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 29641F7A1EEC1A5500E41BA5 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 29641F931EEC1A5500E41BA5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 29641F941EEC1A5500E41BA5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.3; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 29641F961EEC1A5500E41BA5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = 664343KK2F; + INFOPLIST_FILE = FAPanels/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.Fahid.FAPanels; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 29641F971EEC1A5500E41BA5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = 664343KK2F; + INFOPLIST_FILE = FAPanels/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.Fahid.FAPanels; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; + 29641F991EEC1A5500E41BA5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + DEVELOPMENT_TEAM = 664343KK2F; + INFOPLIST_FILE = FAPanelsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.Fahid.FAPanelsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FAPanels.app/FAPanels"; + }; + name = Debug; + }; + 29641F9A1EEC1A5500E41BA5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + DEVELOPMENT_TEAM = 664343KK2F; + INFOPLIST_FILE = FAPanelsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.Fahid.FAPanelsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FAPanels.app/FAPanels"; + }; + name = Release; + }; + 29641F9C1EEC1A5500E41BA5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + DEVELOPMENT_TEAM = 664343KK2F; + INFOPLIST_FILE = FAPanelsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.Fahid.FAPanelsUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = FAPanels; + }; + name = Debug; + }; + 29641F9D1EEC1A5500E41BA5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + DEVELOPMENT_TEAM = 664343KK2F; + INFOPLIST_FILE = FAPanelsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.Fahid.FAPanelsUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = FAPanels; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 29641F681EEC1A5400E41BA5 /* Build configuration list for PBXProject "FAPanels" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 29641F931EEC1A5500E41BA5 /* Debug */, + 29641F941EEC1A5500E41BA5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 29641F951EEC1A5500E41BA5 /* Build configuration list for PBXNativeTarget "FAPanels" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 29641F961EEC1A5500E41BA5 /* Debug */, + 29641F971EEC1A5500E41BA5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 29641F981EEC1A5500E41BA5 /* Build configuration list for PBXNativeTarget "FAPanelsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 29641F991EEC1A5500E41BA5 /* Debug */, + 29641F9A1EEC1A5500E41BA5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 29641F9B1EEC1A5500E41BA5 /* Build configuration list for PBXNativeTarget "FAPanelsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 29641F9C1EEC1A5500E41BA5 /* Debug */, + 29641F9D1EEC1A5500E41BA5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29641F651EEC1A5400E41BA5 /* Project object */; +} diff --git a/FAPanels.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/FAPanels.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..a32b8f4 --- /dev/null +++ b/FAPanels.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/FAPanels/AppDelegate.swift b/FAPanels/AppDelegate.swift new file mode 100644 index 0000000..bd834ab --- /dev/null +++ b/FAPanels/AppDelegate.swift @@ -0,0 +1,64 @@ +// +// AppDelegate.swift +// FAPanels +// +// Created by Fahid Attique on 10/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + + IQKeyboardManager.sharedManager().enable = true + + let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) + let leftMenuVC: LeftMenuVC = mainStoryboard.instantiateViewController(withIdentifier: "LeftMenuVC") as! LeftMenuVC + let rightMenuVC: RightMenuVC = mainStoryboard.instantiateViewController(withIdentifier: "RightMenuVC") as! RightMenuVC + let centerVC: CenterVC = mainStoryboard.instantiateViewController(withIdentifier: "CenterVC1") as! CenterVC + let centerNavVC = UINavigationController(rootViewController: centerVC) + + let rootController: FAPanelController = window?.rootViewController as! FAPanelController + + + rootController.configs.rightPanelWidth = 80 + rootController.configs.bounceOnRightPanelOpen = false + _ = rootController.center(centerNavVC).letf(leftMenuVC).right(rightMenuVC) +// _ = rootController.center(centerNavVC).letf(leftMenuVC) +// _ = rootController.center(centerNavVC).right(rightMenuVC) + + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/FAPanels/Assets.xcassets/AppIcon.appiconset/Contents.json b/FAPanels/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..b8236c6 --- /dev/null +++ b/FAPanels/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,48 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/Contents.json b/FAPanels/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/FAPanels/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/dp.imageset/Contents.json b/FAPanels/Assets.xcassets/dp.imageset/Contents.json new file mode 100644 index 0000000..880746c --- /dev/null +++ b/FAPanels/Assets.xcassets/dp.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "IMG_20161231_154413.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/dp.imageset/IMG_20161231_154413.jpg b/FAPanels/Assets.xcassets/dp.imageset/IMG_20161231_154413.jpg new file mode 100644 index 0000000000000000000000000000000000000000..123dd708e51fa0efece4d03cd206cf7f78d684fe GIT binary patch literal 488858 zcmb@tby!@@w=TG$aSblPf(8%n7J>(N4{4m>?!kix5+Ha8PLQCDyAxa*cM0y$_;kMS zp7T3*{+MTGo?AR!ti5_w)p}R$y?Iwv@ihCi23*K^*;oRAvNFH|000_*f`AWz;1UA- z2S9iRApWBT03G-x(m#3t)E;5;Uov2Vfbd^3GJt^lk3G^`IT^Sq0H|1axx3Qv!TSx) z1d#u24Rj}B{I~o&5%Is}sqcvY)f1>a5dpyXU-pZinEsbX<^b>=^j|i}KyccBx83|Z z8r)x6cm=mY=KuiEANV!T-|MHR`|5x6te!_AX@kJiD)3BERzVhkyZ$fErv*S7Kt%Xk z{?>?p3livWjf{i@LP9}CLHXx{ijIbYijIncf`*BPj`6p^B`iz~tiKn3JNdUMA~Fbs zjDd=R`j5%~r|M}P6Q&?7ZK|fBDy#5T<{uX^;Yfgg0&DN!=At3@nnq9GfChCA9+l?+ z5kL=6n}J=O{@VQC3LM^lm8+S*^9cZx?0;)!nAmc~nRdC?>)Xx25FzZpy8nmr%-q5i z3=h>CxQ+LF_~3B49WE2T*V2%N%Tw?P#xl1z{~P&Lxc-yXKQs%b(#g{d+qnH@IB$SMTy~+x~y#|IyaX0u1jDV-c>$@^H6+kA?9!E)kw? zf7@dI#ZL%!a``KV!es%lwHe$7vl%Y4{p&wm0sv~)zX4Q`k>=+T;^$}QX6K@L|G^Aw zN8<`M`|!8d|I_8~T>aZ8{dWMsh5J@F3U+t#_*aMY_ZKq!UdIIp0WyFJpaWh4>;N|) z0EhsRfDE7rr~+DmK41cX0c*e>Z~;64KOhJQ2cm(`KoXD!WCM9XF;EUv0T7@W=m2_w zAz%!c1{Q!-U<=p>PJk=m4t`goB48sBAdn$YBQPMaB5)%JB8Vf%AiPD;K+s2chhT-^ zfZ&echY*4gjgW|thLD3$j8KWtfY5<3fH00Qhp>jQi*SZ;iwHu*LL@|_L}WzdL=;4n zLR3Q3LNrFSLUcy-K@3HVL;QyL1F;mb4zUAq2yq&56>%T&5(I!SLByaJAa;--NE)OH zG5}eETtES!C{Qx!2dEs>2uEXpc^C=GApt$vI4RmvK6u?ayW7_ashHJau4z}@)q(H{Bb2lVL}l= zkw?)-u|@Gki9yLksX%E*8AsVbxkN=pB|~LJ6+=};HA8hn4M$ByEk$iZoj~0}g~1f-<&G7H zRfyG&HHUSMjg8HSEs1S_?S>tPU5wp@y^IaRA;96lQNS_B3B*aqsl%DTIl@K9Wx$of zHNo}4O~$Rp9mPF(hW?E4ne;QWX93UBpEW##KD)#tz~jPG#k0qY!7ITV!25%biqD8I zgKv%>il2+$g}*@nBA_FXCIAzJ5abc`5Nr{m5Hb-e5ZV$(6P6K<5S|d>6Y&!15P1=$ z6SWYn5`%~ti4}-H5XTc&5zi3cl2DRJkywyKl9ZE7kX(~KCzT|%AdMoeAe|l4p_kkRLoJd@k}F{5>g8f3sLa&7ag_?zKg!zTtgsX&)Mc75`L`p>dh%$*< zh~|lIh|!9fiRFl`iqnX{6aOy0D)BQU0&C| zzLpl2_Lpvd19~I(ChE`&PfIX*dGxpsMEc_sM-d8h)V0$8C~ z;Y3kD(OKD}|H6}G@wI+2G zbv5;L^=%C<4L^-OO#)3*%@WNkt=C%dS_|4QwcWKlb#Qfzbc%JZb>HYF>aOZ>>iO#p z>67c*=+_&d8t51l7+f047$zBR8Sxo~8_gIq8G9KIn2?)%FljNxH8nG>euw-{_g%@m zdoxwDA7+>D72apOKLJaFQ^5P?lICB{cP+#$5-oNt#Vivo|5%AxeX-iLmatB?KCqFt zNwYb%mAB2dy|z=eE3|w1p!=c19?kxpeS-tOgPlXSBbB3<_;8`2m`8Tv7FBTO#r zXE;u{OE@$_BqIA0(kGiwBau9jsgaLS=23&uucDKq?_D|1Iux!JX%uxA3ltZZP?W^~MEvRgbGOu}bgb-6S$#Qsc}@j!Mf5M=m;0~1 z%6FABRZ3Nz)q>UKH4HTwwFI?MbqICdbte#O$ZEZQ{dj|7LuaE%V{H>hQ(^Oq=JXb# zmiShT*3j0cHlMc3cBl4(4y%rhPSehXF1@a)ZuRbw9;KfCUfJHRKB>O8ezE@M0pWp$ zLBT=D5dTo!Z@%BP!+gWFBm5(EqXMJ#V?tw%Ll zb@P5JbQ^m+d53zZ_z(A==3Uv{u|31Rt$nBcyMypUyu*y6mq#_nlE=SK^iH-;T~43Q zV$R9V3om#tIxp2Om#^%v?yjR?WU!(e!JEEY-P@fz&wJGSZx755jgLx?i%<4XPyd6P zaKLE^&3|~w8w*P__YZC~e+i4U;|E7~7aC0`Gq42>JI!Ab^Dlw;KUV*Tr@T)E07w`B zkk0={2Omc5-=Y5HZU4ysgJ1q{ZXo`r9f%mt#NjL)G4DS*#~%P7cnQ~kcD1ph`P))j zLyP8r#DQJI!qURU!T}Cd$Hv0b#=#1X-@)9*&BoDz#>U|ygD{C8DS2uSLPcLtukkGL3h)Jvz=HpOA^UG&|G_m6V1W?elLx{BB!G)RN?0pYZc2Rg z`&@oWk;v6Rlk>%}OT{T>H$HHtXu&bZCV5%RhfSa`tvOVmlq+7`NA{DzD^Q9*8auxu z-mw^IW2Ro{NBYF|6A*Gu<;YrHIk-nYDb_XYO}y>c=sNMe3VPI&JNT;}p|Zzgh8p`` zY`ubIVsCww&}nci!+~zflal2TaxxEoHg{hzUdse8J@QQx9J#Alt1v?xhV#;E5z zEiR4Jy|KEz0WTZsCYw<~20aqVt_T`NYIGWD^dy-;I=ov-l(|SBD9@usb{`dvE635nrqjz!LfSb$A+OpR?9vi3KJ( zE_j7#Msaegwb-DGqBzdfr%aWX9nR|KfV1R9r!m=GHb=%56_u{p=WBIsy60++eCWJt z4_8JkSDj}H>rU5N#nnHrsZv1G;)w>FCJadp(VUd^Cpez~A5%fW_52AtEes9k%6(!g z-uhr3LhPE;A*!s}@r8Sp@eh6yVlDSEmS3#nBv?*7BQvq`ox;KLBN|vt< zG*X&AXN#<8kOpKL9bjQXM>Wuf@*)j{$Hz&7k#t(iOCR<6ht>$QdYzABo;d1dD8 znZ5Y|@ow9ap5{>PHQ#FuLVQDDGi`@=zut1pLuZo7%{ExbHN)h|?!(<@#Q9ja>=DXP$WsjDP4B^C-~!9x>Q zvkEzTr(g5EWQ{yv!5*98b-T;yz#1kt^-1gJ_0&7}cdL8Ts#RzMuC`Z4p5&&X;?&Be z;y-`>Nlnnk-0@8fV9{OUHss<>lu4zY7!#^UQLb5XW6xOoIK}DL z(b+fLjS8TbW_t6U(QQ?0zQznlQt2KfIilw}`EFa)_{lR1nt#CSnFOlJzxJZ(ia{)S zSpLdd>3wNz&;tlp%_qIH_z)AcW!~xX?K@F}f=+p?IS}e8pSf3}Aqn?DzyzYC1iy9C zeBIWPcwq@F+~2et+Yu#bUFKKt^Q6R8Gzjk?j>ir}^*n}>8t-22WHh9i)4SA;+__%< zhuXL-jQvYUocFD6QqQUI#4=rNRecAWH+7jHY@yRu!qg_?Zl7n>+FY<99ZC`*XWpow7XLo;xvI7) z1~1X@^ghhOD+}6_7FzbQI?*PI7>~n6^5VV(Tfh*?;OuGs6K_NsRfqzrN!(<=W{Mfu zskt6&)FtXIuS4U~hnjH(k}&C-dYhx(Int{Wy|`AROxLS(7IBLF?PHa*gNkCt1!G|| z%yDB$k9{f#7KuaH!xOlPNV%ph;$LsH?g11NBmOwMWJ^btoSbQ|HetFWDgH0`sf(~usI zTdP<%UoY_Fiz?&8WE;et>ERv_o&V}-s5X!qi&Z*nLkU*=7xGavAhG}tDFX-@j zIaYT4Cu&B}wUe-ua8RFwrph4Uk^o;tMK)MIzkCOGb%jhkLf~t)x67}2r)h}eY20zw z?dRriJx=3miDco@{&x8%g$EIS0sMT=eG==IQ$&TFtj@Jp+Cw9h?*F?UZumYuGKYCyQ?-Z1;9AmkxKRJBBop{M1c zK9P+`|5?aPjT>&LL2rW4RLvere$iH4aao(N0zy8y;!64J5bbF6=uz6D|qIoh?_}xfst7kWr%uCy} zQ39tHH^NW;ml8wOVxlS%%C1Q|SR(B53BaknZ)c=M_+gf8g5!NTdR{?PJ5|;fd32Ch zo6Jv8haL|U?LGz$>}D!x6*AVDo&@64OjutC9)=fF576FsR`bONpDMkaE_ZMFlt?TY zBiMIQbT3i7J#VEk7wgg%_TEn7nV)vquI9q*?l96R;wJ_q2eInMKw&5-K z_}<8<6a*HSt2a<&EaT|UM!{Asgu?$vabv!wrj67K+)d0ao^3&ppBKWOktCjbZ#UA+ zygFe! zrV~S>weiTc^C+wFhFZ;wg6F_*G ze*B5LTKSdBx_1BPeus6+nt5$C^A^|Emn^wSrg)!W zVmt8aP$pO-NqpGRslvJ87h*Pem(`%cTp2`7@ly*t7OXLrMzhMy72J(+qR*TYy zLgE>C#@V5@B(XF6yX{0f$0dK9VNJT#W0sMJvc)`xHOimIlSNc~A2aRp$N4Ol^T0yX zBdtGEWtHjr)VGwyj(lp<7fVH6fMd+bdtqOk$za}rZu2?%q8SS+KsYFDX7iX}$$k$*p49YOACm{R$34mTvBkwo*y~^)0fA*bUb`b;}6aCD|+ zV=XW;wyn$1JshFRTLBsRSsqkjd%_u)sBgC{Hg%+99&D{UC}+{x0HV9Uh5nXH<14Xo zhaLIiC#|Lu20j~X*Wr-dQw-7GghjM)R{=MVwcAy;2CuBp2312o7Ei8U$ADX4@>0}o}{BtPuL=gU@CHGFvFm3g&2wk%+4 zbO4H1^gAD>Y)h{}b`YN7E4zIm!S7;gmtLDD*7O*hW`I8OCw$$S!IjlYXpaTW9k;r* ze<9=HVA|E~heoIi^Ali>gVfL=Iz8vkv)#xcSKPl^@y-9H(lSy{RW}qc(Zp`26cJ1f5Cfjn^U(ez?2!&7D)mgO=!kMd~&g~lr|3Z33yh_rD!J_avB;&H|fwh~;;6??8Axu8< zyOzFxr3#q1D8pIdaS4Am}g^T^2n7YpTWzi!EDEz^B}Lr0j(E?bI6vw=(lK z#KH4=&}(Vy%RavGL$|6*G+3#ZYA+QXBrOnmcfwSZi^OY#2FNWQ&3E;AE6&_FJrY)8 zAGPlH^%Fbb<_xEHPf=eiYH*{yz{Y-`J<^0c)e!}VK0@T<29hqpDd;L0 zT9c_Zc#DLu$7Osbm28&idKP~^x})xy+__zd;hQEd)OeB{gp_O|P(?yKUc@CY>p>++ z^C(gF&W|@@t-SD6!%1Cw!F(569|uH`e&<*~>^$RcYK7q5e$A1{%cs*{cLG`z zV>2sarumQUtz{UxKh?xbbU2lw17;EmnJ{fDuHC7H<8$^~*9* z3k#b1$5V%xAOLo_u{AI%5$k@70x1~A*>W;+ZsOzi2>A13Gr8dK{+VH~@v1I^i^%z~ zX7t-Qy*H00oexgJTH_`?LTD2pO{3YWIqxednNUak?KqK$0jv7pkZz@c2X!KPM`eZ#a>=GM+E{Ycb~`yRcm(ML&4wX5+YX5<;v{-v=XsI=w!+0OLiDc zWC|6Qa5p+E#f%b|z^qgogPHT5Esl8n5CVCKF^^f}8}~wd{1hi%4X`<}s$ffW__P*r z)W&1WxCWxl5p~CSz8s|k{?cRFePw?j<(DJjfS8+n1t#?#p8lFrM5g;sh#GbI9Y4ZZ;#l! zIEJ$hFbvn=;!Yws;91Sd6EL?G?#&Tec9jmvINz=D!SIO8^W!;*U6gwZF^q1ql5k{e zU=oevfl}4}44=$gc&z1)X>t?28d9un{iwWV%{1H2@9-=~e0pjQ_S`65FYV)ULslY@sXmSQAHND6s5>(bt#oMIge93?&_@Zs}@+S$oecV^NOmMW}G|gnoE6 zI*muYGHR?29?P%)m6=-~R!K%FMkg@5Q3g&Ta{CVEX z_q8Mf8?oprb>Lw0iXP0c)OrSE1^)ugqd8{0ShF&P36+htApY1OMV09x&@^5|!FolL zpuLUcUV<}{J**-GORXN;Ui3ICP@MG#tnZYr-Jl?!F^g^EaUOz65pT~88T9VLTeLd4 zmvN>Noh)T{Q}_Onr;axDtvO=g@^Eybc~W7#S;aj9%El{nMEKdtVu+Z21GVku{y|6Mn@~lsnq=mY+7Hhs#qkB1$LjUV z-vrTIpwfxKE;n`rIYqS@8)tNd{bo*Oy4Wf|ci;L3X7|lJVpx+GMj!pC4dzcU*dKI~ zeHBoUqqzf1pZq;}03q4hGlcrt;M7_;=g-0XX=Ak~1h|RWcxIZz0}=KNrtdn+=6-Zd zaQD%~_uW4MrnSv@cT_e8JuNeBr7FAjAMVWMH%Zw?RmYxyFD8L^O82i|HYewubx>jA zYWlPD96OT&WVqZsSQ^zQCq_Oisxq0gi^XjI`1 z51BTm=`I_BO{|m=;iwV3J9?th`IxgxetYH}$BVj}Yw_s2jb&daZPE;6tf{$rVorSF z$;VlIn8z~Lsr&SGk`-MZfqg7uX7`3@jB^Kd_PT#z=OZ;N(!xB}8N4Z}xcO@5j41iV z%jF4OdKr#+Y^|_*lyc9$5h4e*r~f+ zQz6}cvam464P4wI&voW}32=e{Pq~8nh@9)L`m&d_meQPA-KqQ1;(JNa;td4dMQ{V) zzT4O8#%mfe1MwVh{b^4zGxS)+OtJRZR%Tn$#9;v$`kii|vhW0SWtfz$&0elxca?i- zhxF#Mjl424zj$D!TJBtP7d-f_C_3H6nnBf?9qXG^p0ZYfB}Wx$R`>&5dr;P!^hokH z0hZPc700$-W^8^OueF3U>qSM!!Vp|D-g!Qn#xgT8*r!}R1R4wm$2TWzWwD(wl!rL) zkmYzYXg=nj2jjjLaVxMfK|Q6)FW~=4mCe2IZ6L~&^Tp{cG#LtP6<*hp0;Id5E4!>B#U-z>#KGa{d*u*$eFby3mA&btrY@m_had5WnPJR{T%h_RZPPEJeA2sd-P$9_ zV_St$$;5V|lCnLFN|(4c(0|)d=5x$9ByBV6EW#GZ%+a z5Bs4H+0CYQ8*O0|e!@^*ejB$uuF`Ww{d`cl6cZhiD|El3BnxfK{qXq)uL%&Lqxa$H z>!JZ&!6fl=Hoy1I&4a?a1BYlWpYzOv!M*Y-B=Ip#46+d(Vzc@LJpYq&YBOx>;C3Lw zlhN-Qv-%*BJ@I4u%bis_#0RS~p7C}@ZwsrTpG8g@y1U#AT~CQ_R`)z*w-;5eSX^!i zVe_a|^pf=Pms8!kyn1;bc`pGjj+T#>Bm6KF<8ZmEi>z0#5w`pUoNS+FXe;PbrzmH1FY@uRFnnQ z!`n)Gat!AT^==aONEE2H!C|Np**CXTpw75`VZ#9q^t%$ni5Am!&nUN8)wR0#wIz`* z8=|GK;hO4Yw$PecC&OT`Ct%-mRY&pXPi=Ro={cwTl6aS!A@*xbukqXuhw2}NosCn1 zYp5w~(|&u98)05~6C$2Tyr^D)zw<9o58ZdwL(|;4a~96zZ>TQ+WC2ssNKJQ2=tL2q zU&ZbW2M1BM9J$K+*1p6c5|Q_;Yu0W>$HWY0kR$9BN}tn-X1fipFFMK2S38EE@^!g! zH^e$_p^!a--NwS;i_YYzh=W}0ZF~jP3Z@DeH2mH>$xW5AJi~#|VEBDplQ%;n_4%V} zB=WHKPdm?>te6I{l5#wE+Ma&4`OjqRI9$eDJJvg)m`)yO%yedQ#PV7onXp&)4>*nq;)u86;fC?G*2e7Z*$EfRKdw8q3M|A{lL_D$^>)TsqPXp6rh3 zhQ(hR4Cc>W%_=8jrY1fe5qwaMH&C#*Usvwn3R3%-WAvSOdV*o4m|kc6H98w^Ex$LB zYm8eym;CseVcA=^RFh{r32`i6kS<=LXWaKo7$i>|Cu@!=GRIj@$Nq(vJR*5r^f66r6h(;oDJ1gSlP-r~z|2BYxw5wR?yqFUkzPbt4rb3t*Q|7ytOFPBRHX7Ev~ zgLdE}GN19{JJ+Z%bNMZV$knSH2jv431p|CpRh6mLU0O#=s{3gkC-e8ZpfqV0Bnv5_ zVZpqp?Q12O&&67z7lOyi;S&5(&l|Ky&=FJQ68zfBgQCI3<#DFCQbn(`=T5>t0DYdC zul+lr(Usu|QiaKQ0|{B!oLAu#F9XE(=3#Q$S!;*E7GMX%z!s%)FGYLq8KIdsAHK7x zSBGSMHR=3w5Yr-!<3dfpQOiB5)Yg(p8;;_#1G0V$NCGQWdpigyHW)?iueAoVq69C` zGNLlYF$VA}GKg{GQRR7i_kqh*n0*jnUyNHD^PE#+%U zu_^x_(^_GB5oEU$(H5+3LPZrA%JuyLsXtxzDx1xsi+j|kiFsV!Pyqh6=>$Byv>!Z% zHR466`5TGL{R|21@4jki7K_(XrEJ`|FN6_a)0e6SYrUg@KVv>sxCpyv{gcZ}zs_+C zcm=U9%j_hutgoUWZ)d*;qP1^BV&2ygZQf><$CkDX=h<4#qkzDLV*4@8Gi1h10Waq)0~dP{JtXEjwupctCtltzaDm99?K74QIm4bM440W3 zrT$caxF&puw~uY&UEL(fHGPAaC)H({W8m{OlV<>>oKG}E31;igj!Mu*A@l_fluiHB zVtxZk-V~qJfRb-!p@g?8-*x~s)bwpL$*)(JZgkHtc}E}h6MJ(gNfoihCYQryZs9)q3w-&YuV5jva;Xn=Q$&_AH=jKm4dzZR(mqTo z*txpszC%UYkl0Wtk~OH5Rk1$yQ&=^v`$POlTUD2uG5}^)|N7i@(O+VeZ%bGAD%M5k z6@Xf}G3?RU7VpkZ{Z^Q=yzm9Yy)T6#!VUzbYqLEceYPM4Zc>l+2p6Kk$%E&$GmSJ* zmT2Frn^=V*nH*KqDR!hSw$DWy#YMbB@ioTm@Fda_bo@St7(y~QAsa!u8s#`UT-(hZ zDl*-$Lj)bBGBm2+ojN=SO`|vL9t!qt^~#IyBjKsm&u{c=E~YCpXK02HH_aQpb51FG z?^V-aa&{>dtNTS?Tp2R98#1vYXSQ*Zti~`=);~gz5HFSGRcK<%4GT(p?l#L4Ly$HY zbXa~UbHK%n1iG1CBDR**Pt~OEfk6eDNW69*e7;r;8daURE`9L+%8#S6jBH|xmCpKu z9WTYzja>(PDxUtMS6V)CONhlbY$g8CL}RAzXhBjmVQNODG_6J_pT5j92l9~aX>SXm z0w0^MjiNNF;x5kBhWHnz^!Lg^B_@9Hrr)?LsU0~7O-_`J7Ajv^5>#+lan~jw2pg_QZ>o8cV92RoW*}1Qo zCI2NXEKfx060y{}ak-wMK74&CnY8X}z;A3}jyx#OY@}eJrH#!pnjS;CY2x8~cbY@X zt=p@6mgI(VBjsFUYqdGn^w^w2wg5@=5%HR|_?V5V*wB0rt8F%~9`CkK;vCAz8-eCS z&)=wkzBK6hL@g%?@MguP3V&AY-!J7u9pjxWj4ogi?0D~Q%ZX!mTbJ&mlH|$goOJW4 zk8cOu2Zff=DeeV0etp@al;f4F2Wb_+e!)f5t}4BMY^;`ZFq3I|bCbB>cpqONj^~x> zt`u3ycc?&zP3p*P^9x5f&Q^j5*48;Ae33BMK{$K2Kykn7Jf)iq!|ccshQ&IyokTOG zX_G6^uEZ1}eMyvT2hw&+-Rw!ECmADp@KUA>B=OAXFocd*cJ+!mGS<>V2pYq>qh!ZbdfF(?M~$-MnLZ+FDj(QhPtja`ff75(THk=>3EL^A7m>Lv}P% zeYAm1*1ZLF+R7)=FAfMpICC9H&haCK^QtLpdzMr7 z9z()9wH3ABlZW)O=!I^GMzEEv_;SMLH-9FJ7+Gaqb{Kk{t7pq`rQ^Pc$xr6?LG;?$ zjr#pKH$D1|KHGBR>`-*QCWTLa&ibu}G4AUbj%JeYzaeF=Ez#zEH38a#UUYr0S%+5m z1n=~jM{T!`4{MpnMyf>%odmtn@2k~pocCUtRI|4t^m-lZHR|Ra9ig8M%w9&fJvUnH zA)kwFr~dW@{#HD#IUC)gd-gggi9$ypg6kLk;ed&1zVIz++2x0n*v~~Q9S!2m0j6cn zYL4?ReAoAbUut*_($gFo#Kt9f2%3-*j5$)*Z4T@Q<+#W;U5(tEx1YO;Vm6Vk*L+y7 zpZc*vp8eU1$X3I3{!yj~LQpXdKLld!mWC(PU#3S%3Ipg5%DOBFGS9 z=H&&(*Omoar^fu{hz-^Oz8kh&rD({x13wKl7n30Mn9s~;$nill1LER5iuR(RZC3NG z7I-Z@f6Z>ZAU~u=x!sMS5}uE0-^;Aw;?-q<$8zu$={0NPPjTipvT%Xz zkAp9NynpUOeB`>WnwqOvDS~vAOXLTJ^S1wfJxb)hxhC zeVMyFW$AT1_p4c~HpNRO(+F|&F-~`5fzENl;Neu{@s;pCq9K;Y>3YGIyFEK{CsXGx zFP~ZIt$lRsUyjCqz%eu(yD_@XYnb}x2@cx`hHgvmrlS1<^2D5$CnWXbA9@&cL4>2#-8w{$?0w>4jL^QVr zDmX2a9BVME$&B97e$)yKb8+!|-`qT1E-FEs;Lba9mZVgbic^mo7dV1jE4N`7>(Gfg zv}5UI_VL@qD+PF-1Wmf8gi^s;X5 zP#gyqu}*1e7dF$(N(o7LiOz^)PWAWzUxBzh&@(aOJ8g>XkD*e#;v4k}SzoG4S^LTS z;>5bK#S(GrzOzY6Gy^muG2)|Lru)|41zSRQTvUxcWsqAH5i4bY&Ss|$e(K=zEJ=~s zM1l2Y<-RwUQ?oK&BSPJ|QG2Ng$sETn>huZdi^c6&=A_2G7`8CfOrC0P5;_w@7!8nu zH;t*fzXJcx%kOip2;RjU1Z`u9E?Jusx5G37%0kk{0 zRBG%|L85hW%0O~Enbnq)DG%DEy4Tvj(62AVFL$X?a3e*zN);?laU|#67fN#KP_O+~ zsRAG5_GfgMa81$`p^uF}b|9eQ+-*6qJpTi{(*f&iMF=zt@b4NL%*~9;zUaVwUuozfa>HTe6LsD)6f{v zaBIZl%L;s>P|V9-NpA9yYcC~$d`6VAsDlw_SaC}>AiNu`s7N_WPWuO6*YXH$LRF;&fHyA4mHMSYXdsDR7vD+n0-*CCYm5WCY&E zC+*(0Y^Roxa)7;}6lx=ncuX?cUOR0&8uC2>z;>~8()_#)^z>3hBGN!5wRG7KRx%B? z%Q*as?ji-E6cg5!T8k$yI%#h7gW-37i@b~DGO_brPpWE4WNvc_rp9gdwwJyrCI8<1; zbRa{wi@k&!#DacYzY^y-a-%qx>QIEI{WZHdownzBiT!Ch z6&~s?MUgYm+FQpDI1L#2T3hL;e8=$hJuc7pBk%IuH>YoOUfn1$4fQH}TNaiDy}%<# z^y(hMK(919?Dcd!pB=E?kTI0 zIL|bRMzg!P5hDD*5CPoN3Z5}h)gsY%rkQ0ynT1iy_6m;cXX_sAmwX`=IKFLr56V-< zXOr*{etxkGsDPVt^;Ko zd}5jR{RXUW7bj{_!yZSf*W?gf4R(tbBj!uxLA6fAXGSva-)57RK6|>C7j|kG4LdE{ zCFXdOjf&T1OjOHsl&NfV8f5%1<T|I>Bu!EtVZbq4-rmth9%oY^nn zC({P>1QIqOL@uoQSZ}hNP@EM+UMWeP4%9|!Z5J}SOcw?{AgY4U0nO zk_KU~1QJ{16ie%%c=y3PGvx%0bTYqY4dk!U+PG~_3a;6igecyplPf<@qN7_btn(UI zcH@9V5AhMZ$O-Ow>2wu>Qt z;saVPkSuX}F5XbQUWebajgdD`9v5SgUe@HW)GuB;0rNF{lc`~KBY9+(*hDMjBBEW! zam$;+vFLA`l=VYbBv#s>Hje0yR}4o#XkXhwRN9W$=#YsmtVD!aa(yj>v1Xk$R5tF^x721_E+?fSP z3eR?47r{m5h6NvpR(5UkPcAwUxCH<$->ptX?fTwiP}j)&f4?-iQkEd{lAC$ z0LlhnHRM9#^@^7CY8!_2ul$2~&v`1aBD&I zmu1$`_)e;&0C65T&O%m)@ogN>nfA4ked#cmjx8~XKFpscr)K~5QO>kb;?Oth;028G zPHfg-fH)=R{{r?v3BSjvB=Q%ME1B8H)05NNr|VTZm~C5xm-XsgV(jeC&3zxjH(HCg z`ZFpKfZ5;^UYp^s1ldicN2TgFiZZxjKb=&ESGUvA;_?wzKm%Z7Jn>evj}Sm4Cw6iM z4r}7^6Ky>$e&?eYDC*g$-UE+K)1|V}bqSs}A13TqA#30d8rw`>;^B(9Ae@3h&rE$W zU6ej5F#@56KD6t97HQK?&`cd)9FRsUlANV`t<6}8+(X`amXvzt!`=lBX}S&MR)tBz+?xlL8@3CQX;les=4UI;-)n@>n>(e zq}BOO8&kE@G<7JjC}Ynb;aS?$R`+^Qn$iSG6-iefzV)r+FAwV4Y%6o9g?N0;t0Fe; zef=w*ZAN2m_K|VZ|V0EgR^@TJ|0hTt!_G%#x~@HC*P%O>xz$WHNCO} zpSzJ*x&?%b;wQAWOwBYqfEnNeUDl1@)|EG3yTaA&$Xf5I? zd^bGsSfgA-7EZ?09otD2y?Nny>@Qep>H@Lpo_Vg9 z!a5W>E}JBGk(LhQ%g0}(VJvED>-zq*{$HYv(;{y-^>ad)Mp+4 z0MGUBbdQDe$jA3NA%^|Sk;Qjbo)6JviDx{s5s*eet2&;Cai+)iy*@@Ne*WXwXQg2} zm1|i++3)A%QdWhL&OzXDhQ^O3>QY;v1V4cJhyx zAsrhW6YX4%sipYJdzm7$(;8@1@bbs^RA;}ZALrKBhW;cbm1{Mdv}}{cGR+uo%RMUH zuf<;o_+~dU6L4*v?Kn>7fpZ@YhDw?I)V!No&igA#mw5 zphl<^=Z@$6_v664L-5O2u+%Ofj?f4YpDHyxs2M+%cYhH+Bi%~U4GMoP1Lb!0BDf7t z$G0*Z-Z*bulU{`?e#S4^yQlqkFmmQrdK|^lYC0Uue6u3=0Q1z>SK*yX*Hw#Pl*GVr z4?NaA-Tk(u3&TivK^qLmwRy>pu3yfxy5Hsxh}m2cv$S)sGkQ_K;atT_U>YS)Y(D_ut6H>zfv z{7{?hQd`Og0>peeK z)R|Jz8!g5_?@=Cj)Y1A1Nws#4O2*>)El}xFTKD_Jag5gd8bmEW%(%}TYoxRIcYSSX z_Wf1`TZRPTdC1LE(|j?j-)b!^`h4jOZUQr=H~Wuo^Yt&?qTFPQI$wk3lG;VLn+(G% zyR~OS;H^r^R{qqv-pi7%c*w6q(=^qC%Zfhg1ABj*RC?Edr`5-pWO0M?lx%)==h3X; zHm9%1wF{#k!M+wh=!uwQ>A&<_ADHO3^5D&P>t^WWISiDz;Jw6E4%M-xs-m__^cC{&J)48p# zc)G?5!}co}q5xo^>7POATY3+VVbe6nWU`3)ssS!LdRGtP4~ExQTeX|t5fxUSb3g_- z=Z~d6(&)9Qv4EEd0O031s;53ynn{z)?(B2};x)*ezL{W<5Hq?&2Ogri9ct&vL8w^B z&m^o%`Dzp=ToH=BATomv&AYhiOJm`9q_bNnXJ&Etox9f5tEo2H)$}4)lwH53d7q0e zHA(zJb=!=}&J`pwKVipu+t7X*j}>1HdhTY18B=RUtH-WK;oGP6?Ja&3==RvS@ic#K zjhHu-+yPX)MdLH!Yqhh{JT7F5cLXtDKPu^?I+f&-dfQH)B9i6zTI^ZVd?})MZr94Q zWp*TFvhz*W^xKaV*v+Tg?NHG&uqru$J3SwU#z9 zpPfZx^}3O%?mbuGar-;y)`tb)f7!psJ|DZfy}g3jY~31o$-P2QFHlB(zt2x^Kx@efKIcT!}u0# z9v#y>I_e4o2B3Hf4nR3S=k(4WT9>wxR<~}3u!7#_J$-rO9bJCIr0LB(g>bl!u=lF| z6Y%H7T>|)j!b7LJiC75SP8$R1o-4fgSKwbCcqhUaP)03SXW zXjgiVjUigMm@04l~?_$BdXPl%dBYPX&px|%T}=5lcu z80q-+u9wFiJ@IAlhOc}v;XBW=&vh4ew9_+}#!UGdzHh%h{AV6I zTXrHTn0;QU_@Bj+>oyWt4M?!^@D&`9gUv_QXI06+Ep@l`{d%0RNhi}{hr-LvZ^ati zvB?~Z3}6kexKi2R=luTwjqiz9ml{Wi6G)DECED4I6XwTEf%(&Z6koQRd*n#Kw?nmX z4R83~$}LL%IrLpHEz~SGIDD4plg(GOl;v!ON?yz2>)TG+tzA{{SnH zKpi?9SFTylYSzjlIgiT=8!_hqU{@I*iY2kIf=>`2^NIxlKmd$ja4Ihmd|&YY0EI2q zOMr|O0K|=sPvcG%r!D$yTe4?bv0CZ3X5!AmF1wuwzPC z`{jx^zd)0z#cyF*N1gYTI1q0R+d5l z7T)E+X~sv&Ip?3`Jicxk=gHfj-fioF`2N40og?9oiW^9m#8(eXFi2G}kvzyU62Eliaaysol>2Of!?gtXuy85M1fkO=)m&amO{iYvG>~CZ8s) z4wZ4_Y$i4_5Dq_`XWV#ZJ#$U_W#Y2TNWcfJ3*CIuj*PVlJuGBc>av@&cNpFszGGU6 zt-{PwRU@`@Q+Pwb*Hf(VtVN@@ZO@JfALseiZF9pH340;4g@SH7Lmoiqy-T#CVmTbH z`x4vBYV!b8F=5_~M(gY_v#7$4y^5E@x&)WE$rS3qmH=kA{88Y`C^y*|3o@wA8-v9P z5$1h#7PmRwA5>f5ILASdI@bRHhVE{qnb1Z;q5H?ZX4>h{Y1U{2d1dO}wQV&`@4f}Y z1;Y_pN-8(9DN0%!w}MOCZzQJex!~6?t=TCp@?aioukiZ4&8uMLwqz0BxeprZlIaZg z*B0M`ZOf6g)hnn{H7vuC zUD2rqw0Ak2CkJLk_wOrmP6xeDYj+Ecj7LGuWM5n)S#{~}Ri9h8OLLYxxBv>a^b{f7 z>n*i7q4_bu=xWujqO%gJcs{1M{WDN`&@TLQ+}4a5y`*vrb+`qXX8`u~tfM63b43GU zX;;npNF4VyZo=B){ufI@xW+O@M@r0uT3jJxIW7kRmfrH>(TRpar>G$EDyd0Xk;>!H z)Q;372klCCb_CRL-W6g19D16eF0pq!OB}9F!Hl0ufL;Q@6dZyotkuD*8zOXL&N)1c z)$3-mMGVD8dXj4nd5jjVFH#0bu1{9+z16dr_uvY`ZpqxyNAf)?X|!f-!O&x-MsrrJ zVX?hX`A@ry00nt9kB!>!ZkBDV2O~AVq4?Hd0vGH#HJmEOz@WMv#NHdQX61SHQ&CId zhyv`5Km>YJo)*<@^(gT(WwFI=+zU1NJkS6gNyTca+eXRc(B^;P7Ps4yInPl{9u|b7 z80H;0&sy4R-8lm6w9Gbmp_DEy$ijYA5wPFDqGZ#_F<24eM;`J^H%+5trh^w}J=#8XU zm`B^DD$&w}jLZ*C*{G7KxN?j)Pqw4QcJ^uu#6IaTDI2F z`36-3IPYAKiFFAqV&9yGI3qlAYod(#n<2r)bv+XQ0LH!)@m$g9vtRjAO%InV05-Yq zM?7&%)_w)grfF#>gk@W(nBpw9F_(^AnRy1uzlAd?0#+=J`- z)Ee)^D-Rs%^8J?T-6VNFNMn!^2659rPtLM@MWfz$XHi)7i`B%SJZdsBx%59uo6F&r z<);;PKUVP!DW)AefxjT`$0E562KMhl)tqSnpkhGU-E-QyO=cYnP?95L9E<`B5s-V* zT6j7yJWCD3ZX^)EQ&Mg|q}{pt96!Uqfw1TvHoVpRQ=tbpbD8(WDEaf#IO&h^_b1r& zEgIg^WEx14Ev=s@ws%$GWo-?D$`G@J8X~0#)F##AOD-^2ZaM2$G!KN@E3|Vqr8J&r zGAU2GNzWC(;Qs)IcGKI-CZl>|mOOcA>-V`MgW9`)4}3S)R>>OP&EzOSB#aHY$6A_+ z&MGjK*Y&v6x8^u&KZe?6rl8ZP^=#5uThfvic((m-dn#Y!Qk+7iT zamTGt)~vn@_zl|r>rK-vISIB=ys`A>um1pEy%^vrC^XgD{;ovlbhXpS@~t1l*XKx0 zM)6w`07g`(Df z!kmsrZ|C%`Q^!9Fb?e)xwXFwPTMK)4DKs)mw{o692P2+8{axI0$}*Qa(b$DmC1tVM zSom*C&}7-+e+ydJ%F0q-v#4G9B=U3b`qw4n==^h{=@)C^$Zg}ENQ$(K;IgX>ao3!8 z73I3dq2k|&`m~-Du<JaO8) zUmN^Q(=H~T!M4yr8?43Tm0~L1z@OLg=e2SAbWL}7%0fy#dgHBS6;ho^Uql}iF4xS) zRk+m9!z&Dtf@;6~Ag54}#UKaRp0%|ekt5FYLJAl_E~BVJrc; z`^0yvwq5}K)SaFTMn@oouR1vS$?Cp#DO1wtjaz8C-M!dI^ywJ}GQ*1PJU0c*j4dR9 zfJg+9UY8HUsU@^%gu*u4%d-2`3*QN@hM}Z8h#&$NmOg+EN%p5XePfz7SGJ$<{{Yp^ zJ&RUmEczCfZJ1AJvXD49tP7dEE1=2tuk2qsT!5&oa(@r=*1MSg7yN0~F2tT3@b#)e zgPE?bh7W#&{Qm%7Mqh_IUB8Cyr11xZY@YJo6f;Vy2@XBM=~YWer8mv!!cbjwvE*M4 z<+Aa8`MVw$Hbx0HvdI};-Tsy6ka%lPjT%@YRbX@Sj0(4J#;&hS?83((JLY^Esw2c z-rblk8qx)3WL)e3o-4J{JTZK464zF_iV(~<$Qy72AFW~Ed_?$N;eB-4CZ2Ud*B(sM zM0W9>PCEYpUTZnxX4^_P^e!>G-o_T0e?7&+0T|ucLh>u7(w6!w68A8a-k)^xN99(& z7kCB_8GJ;#)pQ*+HIl~Cy2~#Lpqv7G{vNf}Yd_e!bnT|cBr&v2hE-t15nQsAuGycn zyjkZ*!WUYGxBaCYd&5V7ySj5)S`UFdopuds_f(NS$i>7Nz+>B|Kj-V7vr6!`nROhO zR+^KBA3GAc&-e<<)HVG&!tmNo`NQDj8LD+EE2RGb;fqQUPRK1hQ=>K0t<8j21xX|} zLGPcfV|aRR7>n6;OY3-Gh35UlaY?z6GvCzXpYiH##c!ir$tCTjtgP{=$DjoB{{ZW# zw9Q`5;n@+k6&x$L9<@Arz-=SjQpwd_*ceHb*P(ZV~$l*%L9TdfboCDZC_QjFMG5W13O!T*R?0WO=e-4kb{+s$z-(Uk{H$m6870KOr>q@nh+3D%$`D3g{gNo^bou4Fbzv1nuuH&OA-cRGHd_ZsX z*xE~S+$krI!~FHHQt-!*J|TFk!V&1#J`wvZ#k_u4m1PRDuWtVUr)+%UEOOl#y&QkuNpi1%*mhPesh|s zrK;W9%c zh9LJpU-Qj*_OJ05Uhw_1>KaCi<}$d#1{<-Szpj7JJtUf4*12?LxVSRNM%3QfAXa7X zhy0jc8G&a6@rvn%I#PVH*U7)g9Z2bB&0QnnJ@wtZcUMjshy|6g#TTA7GDy;yfchHq z?-G5tN`>VrRY3f!m9z1FqSt~FIrPSxv8_4j~7jJM#ca|-< zBe>`M{#EkskK%!P;iHgxj%(5W7WkUZEm0x8j2`8WLCs@Qf|_<$eY@^WI?_(}{AM#Zkh7|{t?d|{{YVhSbQI-c=Jx05n^saDPp^G(z-1VO3`%< z8VM)8gvTYYU}93+bJ*v-Ne%snfo-I?wAI!qkYLQ`Xu&Qc>lGVYdm(*YuA=*FR~G11G~hFTr*{ z59C?kbN-ca0R7;8nH{?I&-4S#^^XWy>yTY*R(IAGf&u0{FL0_`C+@1}lh1Fjt$RRj8rBw>&C!RRz$N4?^3#ai7l%_lV2KE_ajO{?A zf-~E(>H61wJUU4~#O0`_uB~IWZA(MauOG?0Q?&K;MCyQ-w?&dD+K*2htCt)t8!QJu^I;<^tF>AE?D zi-^8v>(5%*_yh0<#vdPiOf(+`Y08<|+y4NsSX8GQIP+`xo5E3)G}R;L?}yq)!|VIurlrfABDAQ0 z0tX(y=ku=S^Y(H0HR6lN^>=I8iatUa17Q9K9V^|uBk<4Qt*)~kucCZEN0SNmfi%Rc zFyP}IGyQ8{$9@O!g}IZ&z8>)8dRib=n%N{Qq@Us$`f@)iaV)ETsPc zk7l%WET=f_j1K<*{;ZzLTh_O@TYOIZ{m=E2kT#3{51WeFLZAYj|FS2m#eU<$v#VCr(FI&kK1 z7I%6T--WdUbvCOJX~!cV9DVHn0H4yiq~{unG28whuH6kAhgGT6=$5uO!^qSxz$&-^ z^(U~b4-@FNwo^En*;^eC_*Xxq-uTd8+di#s(6eR!R^fm>N9I4zUfW0Tov)1Kk+qF^ zt%sJ(7AW^IAav%su#UT^@3D<_N;LU;^gQbKP8TdO z8{ntJZBy;`R;i)irLhSlZhW>U9XS}z2h-?Hc^&@%iTp1QSA&+o%0}i>DJy>yY_$ar-5%JP5%IHgbc?l zI6If7di3JCCe!r+aL~21ipp@x%Y$CO`9sJ+E5HYk6+lCxT_eD|?ES zT}tFSN*iiedF7r7BQ4YsTsMjIJL#F79~kL@T}+zgrLiQqyo?i&&&_jwDfNoO%n@qKk;?XH4l$tT{`MpVR0LkILvMj zt#I~QgA3+B*vBN-6sN0f(Q|EM-F!3g3;QhtM=v?#?(17OzY-$7hXQO4Gn3xDJv>7+ zAOv6s9SvWLP`tZ9Vwn7-AC@Jzo61{lItXtS+iJC}&BiPqOXQj3dM{%ELF(7A1~6&f_qi8)A@J^xIBbJa&aaZnc&5hr!C5*E znW?ShMg&Rv(^@-)v@>;GdOa^sX=fN1J?qW2{{R{3+V!JZnWBbAY=wCTI6bjlzm9B; zm9%@|nCpZ5Fg-TQFZa<$url{d+La+-7srLg)6={hZqy#6<(E8uQ~;)o#6bL@kOvs9r#9PHF^s+43@-zuoy9_sNJl4e8rkAW+Jo*LX zi2Ijpb4Rs-$3K8S&+Ag^IIG;!4N6vLuxP#wmJ6o7(s$|u z{xx3OY9cQd>dx{OWP#;kO8{^VbJLOe`}0S@UOVypvfX%cEiUHZ!l7E>0mB2%-%bWU zF`8c&S?HGG25;5uj0PC+S z@x93LRi*Ziq+KtY3z*S_yFq>rUf<`BUT4IFGHW_;kD20c1g9c%F~ zN$^ImZQ+sho`Pim{8={FWL!>4OYCz~3NnNhIbq<@|()2y{v z?PE5vxn*Dj78%W3mitKiIJlb4CM&^Gqk&2_=Amgv?jc%DzGE{+vb0S+NfdYk_?QrC z)s~}aZmj#hXwFC1HFNtzN4SniqqA7mj!-G-*0~LPQq-)h-&7iLjwNnOb{RgLS8Wc_yuYiRDe=~`sJxIoNRG@*UQ%*LzAM-?9~ar^-wfmN4y&soNYRv@DGLTd zy#_r!JA3h8DrvtMt~8xuJxQ1%eGe z=~BWy!rCbDi1&5=SmvTLqt9zw@3Bhu^g0iV9~Hg^{4MaL7v3B2+e3YJL){X7V#hpi zdUZMexC6{QA^SmSo;=o$pQXVxFD`txj2*5$dFfo%t)krcx>mc^H4@3U_h?7GbiNAE zygA{$F=4aQ<5~RB#%y4b>0FhoQl{LX-TwfuyxNL#S9+nJ5PlhH5{sR3!%%0E=0MVJ zn-7e113V9>u6=3W4E#Fg?ld|CiyKMh?_u)y{!Nl}B1Xz14I!YnD0=@bvy3weby>k1vL8)Gir-x7-*5 z&RG3_TIjrEd8Wyx{{Um!SS78Rw)KG&V{z)oj{H`VE`xn&nuVQ^SBfpJ%5#&P=k%%? z*N64b8t4-)g<}HBud!ZP0)=mUf1k>^@iJVxHS_h{zh@g?spoo?t%jV&?JyJ`rn`@Y zS6Vi&a{3ziO>h-hDPNd^dj9~Q>r~+Vmi$4lY2Rn@-;N-$NdRkfw?8zea2ylcui`Py zdOv|a82E3(7im72fv&B=jLv(Ed-MK%>&=Y{HCMXZZ-49jjg(T0Y@b^2J+72Rz5Rr0 z*c-Efnq`)o;0-ffZzt@xH}=TBVmHnqEI%N5{3~C@8Xeb&bm_G5a?0jBM<#yh#{^fI z=zj^kWAOgQfA~jYxz=?l%I|xZ^2CRC-X!!<$?kAFlg~_WT&ccocDMXFns;qAW7o88 z2{kKnEg@2%@Ub8OAEikC5wLUid&u_rhbmZg=Bs#DP}Y1ip~AOcy1Fa-(yjbmIOnBe zc(Yo&hi%mJFaZ3&IqGxo{&QMJl&QknY1o-0uh6}(_;PW zi(AoSxIQiMO{934VuC+32Vz)-&paMFdXd+yOsKi+`je{F9p&@ss}eIy^10o*Gn0zr z{9EDg*?YkL4!LbFNV+~Kyt;e1#H9IiXYYpjxEbdvI-h*kA@K)Z_=n)FNBbt$(p#9s zN^NIQ#T<9}hXaxM{uRh+pAt3ii5@6_4(mP_`y7xUU$j33*!_BDrWA2Bq~|B2?Dzh< zgk+lKS~6DgXOFatfpg)FVq1A6%CvUuaO?fwfAje0czeeFBo`8o5!qhFI+5lx#CEan zMk~<15Bx1-sG0RG7AYiED{S)1k(2yG(!PVx{555u=uaurttPmU7v`GSe(ZzK`S<*y zc$n0WB1!rFTCRakoLaj+eeh++iu^&Q$cOC^LhXcX70C6$s`j4=HO1CbUhxNumP})|#wLCB4AB8l(0%%87U2q`ztguTM05@Ja{69MDb#I5- zE{mtlb9<}X*m-aljy6^Q0KQiQb6YxBx?k7I#L6_}pEZvFwf&xTX`m~sU2mBas<;S! zd)Fu957{JIPCQmTb0*YZ`0|bo#{-fH9>3x5pHs5cdQ{VX%byUw9bJuM zN=a`oo-*PICJaI8hQaxG{{T77dUwOi%`3(?kl$$c&`x4u^IOUr9A~lXfV!xXCq%c!6v1V7Y_f1da{ zhk|n&CG(qV?R_>Ui(<>x}&cwe{h54sq+PtW4sTgLSp2l( zgV#0nBIrIL@a~>2{7mp$z5^;eqc6@fIj9>{j>*2=bfhbC319*Ija>>Dk7oI8Z|g%x zI%mwfZ^3_zvD-Y>+74zzh=WL>SmU|R0=M+vfu9iX0)K1iP{(li^D%G;$?MX+*TjDj zV!F`|o1@r39!Q8*-N9_|N&5G%Khs~vI!tMCsp{pfw~fteeq85_a(|swJSAF zOcFpN=C8H9LE!%Y5MJI5V^W`F*DIaUN%LbJab6|+OMDaXm&3mUw~PE$@!rZ?rjrLu zXg0{X2c9~N;A5{NuQlC9RdkB)(LH|TXEzrY(#Y`rcgJ!;;mCAd8v141W+R-JIAhhg z&rX%*m$ndUY+|32xNZWpG&{XE?rG$b{CP$~Re|a|cmDuCtyH&YFEwHzkO3shszK|{ zD|k|LmtX0e?IykVeGT6a_;S({w%<7*eD&!+4ZJAA{a6)p!)Pqtrn%dX4C;C;F+HA@ zG^Lm+0DAYX)4^%0*gC6e(ry4V5g9np8( z6n?*@RPo-Lb;#$BM$(e*-Q^$X?;yrK4r|PZ#cfMRvXU6?ipZ&j9SE*(!haq04KrE0 zeRld*RJv7N$At$N{(tAcqe}vpy?ty?JGUjQj+^4Ih5TdT?Fu{XE#=bL*I_`vE=lMQ z`TqbOL-u%I7x=ryXHM~Ti`}ig@mON4u_y!AxU7G?ZIaIq((a&{VU9^RuQGDSJircr*#c%9|YhM_AcdN(Y9|qhi*vql!XiCBe7zz$K;0}Yo=kyPSzhQ5M_x}J5wEqAW>i+-~ zL|T-RD7>?Z-{-gEBz^35^zYxA=6nI;{R2qS?sN|cO4BN^7YPy)cb`+;kL#M)h5T`Q zb}l5*Z{W2?49-I?_0MYAWmKK7?yoz3z50Jw%9VM=$;Vy(U+~AH{5k!Yz6$tLP}DqA z;eBFjtN5*hM?Lz25r#hK>5>Qe$*pO1JDDe2mbbTdfUa0Tsv8HX#ZvHRjl4AtthV;L za0Yn5ebbW11HL-cGkBX%vGXl1oB<%?p84agV(^K#7aOH(Uf(+!LaMf(fjoLFn%(r5 z*(f$qm6!C747yKlD40Nc$j0v9B-A4z5$MpBFJ+SzVaiN(s z#J7o-;DD_7`tW^gu+_Xt@efS+6M5nv48t1~zeJIpK?)2-9riKST-Gv_>?#M(#LW*zW)4E}vjJl9j>ONG=fWwx`_eCQRv zM^n^)O7o8xd=vPI@Ymtar}1Aym9^Edg0@SWz98IEw8RLEJ^7%E!_xXy8r&j%d0rwUZ-DPkin7XH4QoNd&nYI0tktbIA) zFA?bf01tdMscQPqht2G9!~3X$mT-T(F_LlV-#(;Pm8Pwr`1;8%HJcpU-Xgb>hiCxu z0mtE3P}=y*!n%1H#)%+?cy^yQB0~?y-mQ3YcpB*uhRiT0Cjz-#V%w7Mx;FS#jh~1= z0z453{?+jAu{susWJufsGyT(#@a^@kQLe8n?cT=gg0W+coL0Y%b#D|~-6QDpJHr_L z>aRj8nST^Xt2wf`v2iN`rOJ`*_*B#OoR)6kD_-_IZ^vIA^iK%*)B6%j`BLa1k}(%0 zKt1{E-yh`bcyspq@bAK@e$C>mKkbIQnN#e;JKb2HmmlQu>r?ze{{Vt$Y2O#Tb#3EM z4g63#CH#=4_-|iw%Go&N^cbya(0nC1|jcMf~t z=j)GBO0&Yra^CuF*X8B&A_}Z-*USD1=i0BvZ;Af^wC9Ur@K%TLw^FpxZB?chcSMxS zxxhn#le7YUpH1G$;D3g;Iu?+P;$1c?m$X$_&C`9(d8g^VJk}mV4x0_6F&)7nf-tHG z=l~tK70S!;L*o~St?s-#;va`=X0yr`+Uhkd-1aA+{#oPDl}`@|C!&f@_P_a!&EK2V z9*yF;be|JI8H6#SC|Ki(1_F*a{Hx3UBlyEc_}H_>;pQZ-t0q<-SUL@tkz6X}m5PPnGCq zsnw|;dvn2TyiF#iUPqfOKJxC#U#&@}_|Esk*KaMB5QYTE(SlArJJ-MX*Y+&YB=D5} zD)?H{J@f&ZeLj90VDHD?1KXbdqP|@5CHIQ7eQI3;Q}70@9Oy{O*)xX0?8A@$09f?| z>rSjOH}-ux1ElHcCv(~~uNmo{FYxc1tZ8=B%u3>In19C=f#L}ug5`g+U`2IbT=qQs zS1s_OZyx^geQUuwg_V@Ed2v0>o2kwY3CQEW`NmVkUlBY#VSf5m&aE0lYctzE$@TD?&GH>i!h|(ta=aqv6}V4nZB|rGPL8c2+SF(+m%x9e|b3zhs7O--+E?b_L@O$G9tEy|7eZ_>*M=F$=5EI4- zIP2Fx=htWU*Z6f8i>Hg@M}=Vz34niTkh${aBN*eSulc&M-}VLHj#=R{sEn$MDON=kyM^W4>`gA03g>MDhv3r zwx8x{MLu6=H@WhJ-ZF~P;5@VMUZV$tQ0w0kZ8ckA4XG)#U=05NT6VkpKm1|Wd|xku zygBgiRuV}&c~e~>+6m_yj(ExHeY)fmsp1dVANG~-+)D-5gYI`SD<3J<_&lD3;-Ylv z!D`Z8Y>3m9uC=!3nrh9iUbvRU%%B6uQcitptWn=U!a1PBkArKA)ub^n`49I`TpH%&zLT}Re?QRMl1c6T zcRpu^IfRj|%k3`MRb$q=T{}>=(__r7&N>5MQAPVJd=~LNygGFH0n_9X64zGkk_q4( z9yrE*{{R~DZ`wEZC-|lCj`lrs!t#w(>v05ibNZdmKK*RlTqr8!l=$pa?5 z4^#M~Yoa#Tt<3p2+ztR9y=$QG7sd@Y#J8`b#7UF@R3JIezid`Cv9*-nI<$YT=Fz83 z!$x|I)7#B1=mTxf8S710LZ{w8QB-tmsnN-v-^|+B*_?k`?DRkQL)^le{+s28##hZb zBR#WULru3$bvUHe?9OUQVMy@r)3G%R-f8H?cAR!K-uRE<7lQTs33Xosc%NWZ9 z%Jk-=)o$(Pk12Fc2Y*^_wc!nO!*jK^s{=zII4dE?^Q@<_lXm^*Z?UUQJ(-)oV%4R_ z0WQZBpWF7WGeCug(SlIq=jl{sxwwf;XmgRpbNYR@t)zIo*voS-+GSRhLnC10j&bNR zDyhXi%=y$((4nsQp7tLW>Q*vp&pC!=5yt!!8-Bg|{y&XTu)n*z)C*5$2*CjNtrpO( zn_g?pP6G0?VcdhyKj-}Qr{bMr)5F_tZsbS;fH!b6$>i5vDL3*$<&L%_zX@ulP`Fi5 zy12g=YPwFdYSQWWa*K?U!x8-}eoqrxYT9EPYl!6zqb#fs9<|QuIuT7c-bCORYy}<1 zt!>RDjMO1(o>k%vQ&FDjEM&Ef5szb&o@!qSYFC5Bw%RbYW)nCC$>4L0VzqUh20^S1 zQI63BSWJ)NC$H)H{%!bSXL)1eH1UPzmvtmsTNxwRgA+Gl&(o;q-`9BFeJ*DG#qPaN zpmb{sODzs0w6;rQX}lJV%9cOG$DT>`^r-YZO+Uo(-^VK2Tw95JsbaXpXDi%iJ^I&? z>pvSjXX7su%VBTu_WuA+hF8kCa!``pGhUbQ>*1!OCg;7?A5M8N@|FdQ6Y4WW;F{)Y z-`1qbYooh4&y1h5$Aq;#15DJs4W(OHYF3g-=9^~2P781d?mu6zO7i6Rk8|+j#Gl!T zqZ#k*Fm54n@}UPiTL(PX(zl-n=TKir@l3ZfKIT~D2dEvo;MdEa5ViBA{6?2V)pSN{ zzqJUY4%=U@4s+>FJhRh(z_?41YIL3f{{V%p`%ieCt!yBVK+&wO1;(Rz2+37B*a7wQ zAD{<4IQRyhA@Q_&uCK0Koj%7VJ9vf+$FXMPk8gj^f8piW&@}Y$w}tQS6{b15SjN-l z5y;1&_pa^(CY`6SyN@hD$bPhwz3pU5lfNnP=9zOgqp7Z~ad#jw@`@OY9z}F9YiOvk zyo6-(TeWbW8@zjHc3i0qxBJ}pP)n%W+NoLW{p=Up*EwU(kL z1p#h32e_ovZeX-b!0g0<*XvxajXYAq;?{Dc@sN7e4R6Idrjwtu$X%3Ulh>16@ufGm zzNPa;T_knZn!M3WzI0^s&{r?rI2<=kp+U|?uO)>Pw($uuEVn=lZV4CiyK~k0Ew=NYq;PpHkP5#mNiE#yzmsuR= zY;DsAulfG~_51I`ZwTvJMw=R3N(2mpBye-zJl8$p&jM&39-Q1oX$WirjF=2QzvsPm z+IF?}2wK(_XY(8Gj&b-_*tylLqLSLn{v6607rb43+69WwWf*x0!j3R`_pW&Ozr~K? z$HVi4yt^J!lG{MeMQ&<(ey`#jEwzs2KsT1oD>CQduZ_~=>RuPI6HOQn=_8c`2eIv4 z6!|HnrT38veCf%p%`F2=*8CB7Z(-xB6gQHvQb8nc78f%)ihp23~wP~EmwTiYj`~Lu+{{UZH;*w1u zhrIRJ>$Oc6!dG)Fy53}#5*{_l#^LzY9}#Lc_Zob9dx>R$%r>f?@M7_g(JZmOB&*pNw0c4uj}$UVNRRbl=Uq$T!l9##-#on6G#ovn8&0 z9@pa!Fg)Z0;)R2*A-#NU9M{`47gCSQ4Hwq9dV0!%^dBgGtPq zXR7Ml`3n&DXKBTPxF=HhaHjI-rWB>kmuxx6Eh^pNrC6t&`K_{F$Cr2VehtuDDKW+| zUz^7s$>*>}fI!FnZv;J6)h{#e`>y*w9-2%b$K!(H(!cl%a?2eI+*{KQHOP;ir6m#f zCdvLdqna@Ig~IZaZYZ*F#>8cA;6EPSe%rAhwPh(1<($)DvXPAPEG7B6r=Cuq=kB*B z${0r+or^_}RXb7C-g6+3tRor^GW$wjq~vpf1&1uZ>n!g>9KOBA52cv`^XqZXwS?y+62)T=Rit+9RgFO9k zF86Q}mxhP&fvqi1qV&c{duadl>c}8|2z;TxV?mX$I&e-Iw6C^{oOv*iz0n;ju&Ni9F7-6iLRj);@`ptpz>vXD;Kg+O%tMMfy8md&iTDBB}EU9U}63m zwadbUY@dWSd!0V7O)fkqmEE7$9g9zQsog#xtdV{#92gFbh<(NHQ-=X`vwTc@bCV_r zExSRIX(X3u_61B_fbnIJj^|sS@~2s9n~WEXqu%7)L|G<<#H<6cKf-lQoK$b-a3E<= zh!%%X>Mc0zSIsB$=bp0p{6?wl{4D-wV>K#zooY|~il3SEx$<29Y2_*u*aL(d{J|1E z+fT3Uo59O$z9d?g^H|yn(+eiWg~XB1p)gJ2ddGRd4Y-F>MBj3jsGCf{afu1Pd+3QT z2S^Hv3dBRE<83CqAMDKCGk(ow0!aHzKQuK zBZmICA;$N3@bcCaMdADlg^!S55?7mV4G%NC*Y74JY1!|4hl4&75AH|hf%c7y^t6Ol zU69~`q?^fy%~+3S2TDz&-zWvA6bujQcpzTP@>pq|mTvEZ?@%S+sn0*R<6 zbUuE~LM>N>m$ifb0m3KI%`UXp>e<;iPhP4MzqG1qTle4hkg<2A&)(2VvS^e^i2up92e1mkt+*3FD|;(`CnuRy zSVl?*D%D?KP17{tqJtlW9mJB>IA*lkii4LHzj}~!Rh}EQr!8N!fypmW9yTZv+{@eW zaW!8=-1$G(;wMFc;N{jYDmS94K6eIS1)qE9z25){;14HKEPbl9>@=P;HA%{%Xkkrk z31U1S{uCGASu+Z<&e|-=k^1bDmr+%tH!skt+lpblU$lgdLa~Qw?>z0S70Qdua)@o? zdacU}GJ%-1Wlzd9v}O!f@V)P=*W!)e`F7?AFY$(uO>ZlbaqE6|E#ZP(1h_g3 z3AC6k^3%W{iygdS@AN!1!aqC|oO@FPL8AZYfB9KDy_Ft1SnHnK@P6iV?8}v}*@KL( z=TO<@oa3%$#;zMrzdM;8I2AmYA@n3Qa$$jxo|7|VDDvHoz%Lcc%@(=F>Is{iv;&xL&)USBik5Jb<`=S}zc%hlXTAY&%*KyS9WP!3`JO#1jdN+T z3=lW*z1~g8DmB;iUO8;rS|reJ_ypgNi{`0aim1D(J6C>~2)fZJ4=$rBGe!5M%@e>hYDcf2-6n&l%4MBlS8pKj~z-poweuT5B?QI}dBBh`5~V!gfJOg_F6 z8f&$(f_~bi+J>&8F?1brn!A&8&f^%)I<-<@9qLD`t?aIO&BUECdaZzb!GvdQ!O2TB z{1X_Aou{(VLX!*8%bcYciwBaf<>D#OduVantn2=0J!-R)fzkKo-V*QK|4wWTPY;y! zI1mn#USG#2wCgQQjrR5XK&b2+L*AIXbsMgE-PCzYeJX!(DKsy-Bty4sQoS>$#aO`Yb-;nS_|w%1P~+CQRf8_~ z^t@L&(F9HS&2+d?a=4}85aCQ`Dy%-eWx2@O!U!EMoPV#P)_KEr#o_hKGT{U&l2$N# z1g|9_h^*~f@jGg+X76gWNY!IkTP)chGu|O4P~q~66e*%``yQv0MR+*sa*|0fqMh@L z8>4D!`Qe?@bFsk!gQ|^!_5;n5R!r08CnJac09iCSz;WhMur0%Mad z_AV~hewOr^wa@t}sn*LcqXf@?NPynr9T95o2mxqgXzWuL`inbw##-PyS1PHuiX1}o zux{8u4I*6*Q$A?c7(XzvT3P|x^vtnh`WCNx&tk7roQDNILJLx64JG$yySsF|87kUN zy|KsP7}cTv{4>`8NXgFerh|cjQ_YTDPzFVa>_@w8?j~L9PAlpQM4Z{+oGe$JWXD)v zxyKXb4|l)e>p|uO3EEU~OczwC_G{IfRrgx;Iqh$~S3F?&LSw<158S+bWz91#&g= z-pEk@i3I$#JcL%UOjm_wv?{DE;I1!925s_EvUt7rk`h^V56O&eD3vNp*bQR?a>2w4k& zU3UalhIhp?L7ZB|2)u0XIX;Na}Eu_cbsw=?{ z86*Ay9Alq$4m+YNu@SbGd(}P7m^|@YPXo6zQQ_*%Cw~{;A*9H6i9mhAz+|TsCjxS& zn|E7qOl~W(hG|O57;w5Ce0pF=_9Q70CVwGsS;I4a1#ttO6u6tE-atCrDczD#D*i z>~FlAPtKF^OT!C#?abPq!!nF1Bx{g$P5W9{}PPIeW${vsDZYGM>KRF{|6X5}!E$T#; zs`XBF{>pMQAh&Z$?4Jm~cd)MqiAa!Vm$m3?4^Io>^;7yU>8pCSf3E?%Q)lj#eSFlr z#Hhh_Rc(vMWPCa4bwK0Si>h&}R&Q))sz5x1%5HU)>wg>6e{jtFu}p3nU!g(u@K@W_x@%qv4~h-Z7dsC#;g8CFZMFIo;^*Lxq_)TN|#!;yr^?HZ*`{fnJ&ktEV%@%|RrcovTnO^Tr zIfEzgeOVt#%6s{K&?T@fbEM$~DW2u82^+9%&Qdud0WGy=h|NDWE@9X`MBcWJRX9l; zG?#WNJLEdTFq6G;@!W6+tJ>Q5PE%n$+1(WOl`~s)^f?T%37^CPBSF`2V@#L$%BfxG%Sg;U38QXHGTt|nSFdd}|k@ZP=jb@lrlS#Wem z5|dD4+sg#2Q4V)Rk(|WO&XUkk-Xxl225tqmbM5i6w343}fn&ecJ*y zl z!0mfi_L1sHpiK*mXue0=EgONV(@ji}W;R#ZeVqpX(t!?-c;kBJR!k9MT}B2u96W#b zDqAwLQeGRx{G2~M_2=gy?BRWXHO4A!5;XnpoxqOEe_%%T9nD5c=UA}kdtqo z*$m%AM)JppFwgdl*~x=LEGyZv-B*8Mi{#JH`SDNfO#00HycST_i#OBL<_Dp%W08S+ zA0ftF8)4hz-SSOvGB?ve zFNK*b;VoZfqIi6JRO4a1GK1!8C15y&SOR7<@5&lA>Js#p z@ZMZGYd0%bPqCi@DYR2YL~F`>FTtE&j691k;jolto=wY6{uF<6m0Yno%H86v+cu*uy=28Yqt!n!CLuPzc~ME$=BSbp6D=_OUFBYkG556?Oq(G~DFE zq~p&h1HDJ>;5H43zawokoK)0L(MHT4iRmot&v)VsB@2z}VaB3QLozu(QB+KrU0*dD$B z7S+s?fss%L$FrKrL(NwL`lE}6mL1${MSgkU2ye$2ZBS=t+LBZ*&4xi$FFFQ29Oe0i zQ!_OXqEFzJ%m`z(Ai~(lVmLwl(r>ULzt`P(mI_z8$J=Uc#mLAYVd8G`@?VLPy&YVI zR_YFeOvP32J02b$j4grXHi564g(bBtPmdJyUQW{ddW&y8U92BlILUiNEs&-+u6ESe z#bD;L%XcdUMuzejDma%V2zma4%CfmgkI?)FxV&AV@Es;CDElntk_w`yc9L*<#4WYM z;GMn2)^X7?()!Qt^aC|NdDbq>3s$A(Mm zQmXv#Z)wXYMY1*V9oM$^HL+j&&7prb1=H&1xu|#JOTmMzl?Xm^;1ZT`HX-m$&Hmh7 zr#-Gd!H|Rx{$3lq@6}{`ENUXNga!sGtvXymUze%3gw+m)9Mr2<7H_vape=D+K0IqS zE-A@!nU%<8MBX9oY@Gyp7)dKN^l8t>m;M8+pRgHJ$g8Z>TN zV)t(I7eNod6=~tz3#j^|EwsBiZT6#;sGH~Rxtzgd!{cM86IpkU)Q5>ic;e@^jVDT_ zyrh^H7XMVTR@V5I@pqyCv>4vx^gn<-tPmg>)9I^n)@ZAzRODA zs)x}}Kjj7P&hHgk+w6@(&=lnk^ZMtD?@nRoRwONXDYh9$s`pxMq?p61`J=aF2l)gj z@t_;Yx-Gd}O|&b!1XcGU@)XJz1U`!)y4mgkJcmq^C>G@C;wg)k za-VmODaOygbVJ;Q>2m^D3NzIvzER@UufNwlKErwvj(41Ji&3UOd9c;***m!yCVnu* z-CmE)w)-5Y+y;CSD6?o?m!TInai$Z-RpaUt`gIpO(GqZu0x1)r-Raj-<1h%d6~|~V zyH9idt4vw+smz(5^@3D@x`7k0TTT_v>=f#@fkAF+p;Gn(Vjh^(!RZ9Lq7r_&GND-BQb_U%f z(h7O;M)j8rJKrGM;@;ei`kj; z4sS9=EP||zo0skJ5A4RkJR^$7)7|g3bM8#e1^E@oN!{FF3cTO!0#emo>%{I?Ui|=m zIf;7RSkoH^@gd5$2*8tG41?tFb=hIv-6dxczMvzTVY=L$ZM!@lyPLbm*VR?H1|nv9 zAFs7o5B&qYr-lCt7tA+XukDshYK;f=35}Sye$ic0v?F+C#*YeIJeOLAac%I+TEY)! z*L|XtIwLwIF9Y7t4SC_JKjvo`Kq6)I-A2FfsJ@(Bn;aI5KL>sr+3i-|rY(>h-!?_s zRZa88HeK~Jl@rsEzt{P@-ZdkB%T#bwPO0>&HazYhU^_FIJTa)XsLi`~QtCd5zJV}Y zwtl7!VH^|Zxl*(daaDtyL?G=T|}l^9cvLRDkQibes@%Qb_=T@NWH z=W+S2!8N19d5sZ4z- zyLbnPInjUySGe4oCR-3RYvQAA(EMVRE84w;4AUB}QiTYmcdPln-kQ+wO-9 zd4oIpx2TcoNITCuULkE%G(mKJnUd@+{N52Pfm%M84lMjO>Xo z)-N^1^&2#%vk5gOdZ?t&RuOXsQ<ORYMe)o>*-}! zo#lGX_|-kVeKgawV-u#Ur7&F!jNCPU9@4Xa8r4ZWJPkcBX_&SaM>@DS+3uBU-Jv3X zH@4F5;1?-xiFroWV!!;Ye%QHH*kJcH`2$wYXbc;DbeTFAtr^X#&bv9Gkczw+q_o8f zisIJ}l>2VLBZ%k(Qp=t|9=klg^ zk64v^Z|$LY$$CU!*ZwrQ6{i>`Jd%AGWgPY7qK(V$jH%a3yl&nr!F}kXgBgc#7zz)nMgs6&MxVnhV-HHZ&`_*2ji}ii9 z8**@5+PW|(s(Z9`3AK1FNN{81y#+YBs;C5ZLHhwF+dB^TC}`tirbEmdUo{UMZ^NQc z(_}66S^0l}t9FFJ0SW$pfVA~idgMFWoNEj1V_;_O0kXT4jvDuyIk{Talx%dr3l^{ z#oNw+?{@1$ZmfVU$J4L^WNy!Sy~9UsAYEs>CdW(>uWpb=}& zFfd*_?FyPt)D~Q}6@AeygTyvJe~SY%LWAyoL4e1$VUkh;R@KFY`|6k6+$S00*Y|9s zhi>!xQ`uzqxybOqi;*L)^TzC5bn{8^HX#LDG$_8B0S#9)EEU00Rlwer@V+9Z54FxqH01Vl z>1*^kaaA5)GXX(0Xj)P~t}~G}lG}QxSlUV&S~OLowHkIuM)(!F;Aq7ouxA;)Jxj<~ zMm0L%25v(KEDaR2c+^fm-xXFJyNYU-owFTV7kf!2Ago25((R&ZA9kB3MD}|iRr<)0 zXU`}v30@ELK6$CW^)O1yak{J@GIn)8u=U(%fur>j{NUm-3ASbHc`p>$QU)iJWO(Lrxf8YTY zltyB&@&j%l)yy=iPU`LA3uz;DI;CM1*6&60F`uIqkh~5d@%zvVVyY+AkezuklX{eS z+f3ST5v)G#XtZ9BWpX()9Vpax|Itst=_oi!)RZ;U`WRpQeEA(7-)-w`t~^uC9b3OL|>yXhOrt+FxQoa*ghH)=nSa)7kT|C zfG4GDOe&8fWreml{}HY1HifQ{B0laoQ@+mmZBca)*YK@m zF~u$z=X;g#aOAu5+e1xdLPcAK)2&}h8=u8xWUTe^@;@H*cNvhn4BzTe7ntNRJkJK{ z6qCEpC(kdbHl{`~Yx#U=w7p16=!2GQl?73L%PIW6-;!H?&r_ozvW{9~*{6P}TAb8O z;o_@i=sfhb(<{5!@`5`-^xtWCYHT<$Z%5S+N4`AruFkP0#V*bNDlgH-oj8j_c3>`Q zvv19OoWTaIIy+N`iucRfzz_Q9L3T$V(}c%FUu&ZL*@iwvRC=~wOwgCMNA!Rtfmiu>yyU zLTzjP)pEWZ)B+WMXSSIhJ9boId`a_i4VLHL)X&?*Xc zM30_gLbM(ak(fV=zh|Hgc+H!H6{dA!y;4x%hKY+Z@)N^X(-vE~mWYtF24FWfw&mKG zZDkcvqC4+$M0xOP;KHxGW^gOl< z%2j=echbwzn$7!ft~0pOat9c)(=vvi;+4*WPcAXdX>Cyhl0vO)Seh04RS!pP&M~KaMs7#TihmNR%`ZTfIe%@GhhU%^-cX?t zZO+g4M8qHZ6DhIqyiO?wS~rEI8co(};iCw*)Tg{KmK2C%HQ*=Hc)5c z$Q=FLamBilo>PmiO|^1RH?WSg$7Cn#Ny&?Pgb39B9CniS(yaxRs$N8ZQ10>HY?RH9 zc?E>~MF^%J?uDU&cL}7zA?txvq0V3?_Kj3Rb00G>FjBB|R z{)mVSbKYBNspSuxxzo!i@PiX8jNwgKj8D6Np44)Kauqy9Wh2|>P0uJGGU{wu<}!B$ zj|7i|3xq+F-^l^Eck#}JRj;15m?tB;bJbi~m|QZm2ZLghF#(Gk2iVSd=z0 z{k{2Kl;o?^grPPSgpUod=GueUSCg+;*40DQT1#k^F&=d~cLDV;KI^HyTq}*8j&jzGT zn1qs+aO(-5PH7!!@@1{ttq;6R;8hyCYw2iQS5I%QtIJaj42+g<#31?Xv?VXx=nsp+-nM;0!c)=2tXU{gw- zYLPY6|M_`n?5|tebMy!Ny6%~#kKOUAdRJe8gm5}^z(2soZ&^z1>eZom)|-OV`;pa+ z647rv*+rM=&=4CW7A`M!%L#R7>|&PD!G}k*(9Ep)6UC?|e=o85N$Xet05iL;*cnCtb2YD|3fVBMCVO=lhITtt_qUYJ(~JcDWhV!tiSMSC|-&)4d4 zP_a-Z((M;N+k_&O*J@}^S#8_IG1`9YZ8}(*#S#X?tXdn5Z5a5(p8LwA=PAG6_NbLA z4*X!b@OOC5@|kRfU0*SV(=mv73S;n+3^9KC-@WrhA!YR=IrjQC^ldmQqag}q!Gl?uq zWW*`gswAVr1M{pq2d-<4+J07=1Lv*()q^G;#5TIJW*(XSB!huMP54xN{A8O zAhr2H0H)B_@x6X(1FAJG={q^PP0O8H?>mXic1L;hilNrevJ6kAD8I87>dv)E zj)eFSkhRRlf>=w65qJ~O>8uj6si{jl4A*Q20pCmTyhyr`5NB4qJQ1#PyUC8a{QT8l zuSVKcDr|AF;oC4t1W%vTw(neO1?4b1{71NvMK$NVd^ivW9fETp}`3?grhfVc?Jz+5`*_ zR7WViJpxZAVBh)@IXlFjG#J-M3k%u-*KNEJpv{S-@V;Cxjang9?V!AL>d?ZK(GvMH zugbc4*tN8nC#Hbio)Zf63)$Bfx?G*{B4tpy*wt1V3l&}E(mJFRjUkMYS@4Nd%h?hY z8HM~SkX;(#Jzo9Fh>QH!bw3NHD0k(>)%=2mo`O9wQNqw}HHc`sQ2Fxd5Ji09CybJ)@g4&EHhNLYO$Y79VAw z_^`Dhj#lXs(@?xO`ohM8x0(fn^9oA-j%4ZXikUX=zBR7pQT(ama^=@vhi{?7 zf5Ol8?}hvh?%kmJl}-fkiFKR!5M$+C1%VG2(B21QNYv3m_%H0tmd2R+LkooHsN7-m zm?SfoLfaoU4z733_|{rTZczGgwNpuC=smOgl?Po8CNa2Fg>#ZZo?)8&aoVH}D_SSy zPuQXiL$8fL>6T?%>n$(G9dBmK&qZoK6jDXRpZV#!>B^4b4`J@s=b_XLT&&Vxj^VsL zmSJ(HgCAH3@&|^Wh-s6sUEYVhJPjQ5ai|c zq9K=eq-?s+I-zo#Q}B`&pQkbVi~@0fN4Lh|3TN#ok&vKNL6lKM3D2K88X>R5Ms_Jy zs-2rht9Xv=y13)}z66xYIoH8Ue|Y#;CJ@?0t7;*@BbTk88dq0Yg#wg>)h=D~G_{el z)yjXqIBvOHyD2J@;a_RmBMtY}DNi|)e-d{8e8oPfy5F3v+TNlz+!N)D&=f(9xFIV) zS@i-|(E2;%(@_v4>pj21w>-km;gi89+Q0Kuga2x(wPIVD3jQK_L2RYwn>H6)qv&pC z>xmapF7j*I1hTre^z?ms@Y4S;g>>j(v99l5LPP6(^u^$$f+vCmY1mRSp%Jq_aYliitvjp zR*nr>4Sk-hscM~o0zuS^_9bqD3oA)Eyo1n_(^XiEGRW**+5McTMSIsUSkSm((TCz3 zjsd2PjmfOVA6S!b{w9?My42QDARaRFt*Vu|ivZ~`(cOUYA16)#rAy6F#T2w|vzzRc zX%e}ko4YwVWZs$v9@3b)EZf=ZiAuv12Jtv8UTe95uC{@j+-$Ko>s))-;r3V8ua}xz zLhjHzM^#(u`{A}!ovgoBzFQ6#Zeir3S$NwqB7GJQeRk82(Z(>cu;@1(S4z)Tr@BkwlNA#`vM27ltY%?in;=#fR1 zCHwm6z zXak)!?=^l4+s#axTL(}JS~Rbn-9`nJ;7EXCh{wDz`ktR`bzXjZ&$t%=ISSIk`xw#Pjn{E2A- zxu|m{d7%n7p&7RL?z(t*0eJLu@`pBU`6V;Oms%wg%9*d&SiZ?GMXt_$x*RaiYETh| ztkTd-XM7r$g$Wuz*p1GG&U6>f+(wH-6@I`A-qD@qe7%b9K+zV0d@PWm?hi78kxJRTE}^`LgEyb$BNQIW}P0T z=^GO>7}@t;^W0W@tD7|VM_d(K&huQjrS@0~vTW+{tvTY43!2Oaw!TWj#Nyr-zLIU3 zjNW67zSvLR`OXOUw>X}>dX*|g8M#l5-P40QJ}vy?cM?apw|{)GUE8y!{z?yvH(qf+ z(|X>h2G-m1{No+}QT@&+NU>m^%-`9=RO2L>a_{DK)g{&ykrqbs75Tkj6-2{))s5!< zlZ5xu{Rg~>Z6EVExsI`j$srVb&FI>@4=SARB6>vss2k+bRAan1Q zmml8<5-0LFaadR#@71h0e}(nh54s`mK>t)V8{$H-(MPe2om3u_4okPp1V^sI^j-HM z&p7FG)<>2vgrB!S)f-$VI%1M7-b?%gSWh46MPS}ERMd=lT{96WDJ?O;aReVr{*qBH zj%Dry+9oPXWgWcC+{H4c<3ZBP*eC@QV|jDUa0+hTWpp5A;q?>t`W_pl|5GcBT&UuI z6>1b!f_~iVLSFpAP&LKUbM~FS@6>72@NS2tZIkf(XN zVua1U-^J8dBMywRzVLM56sue=S}Bzh`RF z14qbVxXqsDT9pb!`ONe_T3IjXqoTr9MnW^zoczn>#xR~al#%B-d|LRLw5y3- z@lA9+hO-n>2`n7VE^b1%UXWn_Iw2Vx1|4h>4(b8&QSWR<;v`H-8O>}n(+cMbgVR2A zi!EB5G!tC;pm&zW54h~zC>7o?SYhePkh2{dEUc!@4p7_oJIYhYyP2dnvUPaKD;JlC zqF573!b9{ zruFONt3EMrHQkj zo5qnDC{k#eDzojxw6AV7I4FO{o|6&{Di3q+x-M8~M@`;cymr*g*tu}Kl?)}CJ`T4S zsaAF8n{Uawo-Al$U0Pi7tu4MM7y>5y8rIi3?g~ffe3U6<9T@N>*@!j_AE|YBFSSvM z1f6GP4^OG`JyE$iEG9n7_2_0#9-J?Q?H_<7J>jL@Y}wH|lP;sXNmmxw&&Cj;dS&0= z!%t~lFq5Kp21mAwQvzsBV#R1YM<~LP`hYN(`am+*OrhVY^+Rb(+TV^*r<0n!^T&kn zIM9n0u9QL5$KIl)`jB{8bc5%PB^XHMaYFL8zJsw-RL7Hl#_JDd&**EA?XQ@zwbSx; zmz8&wN=40ne_8vXzo1yFJ-gdVk)GHPxu5b6P(Yzh&CZ&c%ZPuv^~j)p9@#xc5#6oyMROag`p_VLOv*+Jkgy4cXwMA298I^_2r4+GYF^1QIKA)b@xF4lSNK}3 z*rYtj|InFZAT`lLdCS^2T>Sz$y0hUtB?IH6=pTf3XZ$MV5c**&hSlmIWHcmE%(QE< zVh%+&f;Oocv)TQy+BwzNZrApRPwrnL~KTd|0X@44Z zu*lg1I}kLnu7zu zLpK(WFiq+}WIL#Z2O(8645NzA^FfSWqy%ILeLZ>k_{8(5N1*l<%5!P4EPh)DkB(NP z@}K7i-P;h$g9qp!t2SO&_nFou>#;mqDbtHc#Qm^V(^g&`dQ6n z$s>i~pPKt+LS~*H>9BZ+5Ji0$p{Iah&3MbVQuHll(~OB}$$?RTb}+MECQ8L2Sa^)a z4>yVjQ85QIuXLwxdSCS3nMH4f-Os$0#bN8OSp5%Bnm3FRAy+Pwt7=AP)?I$rxjlJX zCY#WHjJZz>L+NRzb`Tcc+X%#*4AchH@BzPbsnKCe!O3t~q&k>z8jT;xU>B$*O(=fP=WS zLCs5!%RjCptoiJ%+!B&Bw}fntjP;%0QjoctxL5&$m>HXSr(>C4MKZB% zWdMR_dp8mi0Y+))qx4uu78RGzWGNt0ScK}{Tg*=XOje}H5cX=LX4{P*>O zjU$Rj&@gea0}Y^y9muZXr9l*=$f8EVPti4F_Lsx#)oJ7UR zW-I+jOi<;^of&J|dNQSn97?ocWhO&*8t#9Z`IJ~Ea{10xA0-TEwB^C$l1&L%f#v-S z@rqCPoZRY#V{V+7{-jPIFE;6&$y1!037=9lTrQEhsb2h`uOY5We~)2JVg3oY2_ zznPMEY;Y*aDtJcgue_fg`BF^N-zIU-MM*lsKb0U6LHyK?dKX{KFfIG)c*O1D<)&^v z6>pkuo4llR1K-oBqYJqXKWH~ew{Kj&P#oeeXsg5sV5Q02^ypXdh6Jn8p4&w~HQnzf zG09b4=MawC78v%5)=sV%S*=aIBIA<1P=7jRWK{%1Q)DGGVlqrY&O!ZDj?}J+^zM3r znD?y3ywAE_Vx8+ zK80U8${~&IUGPs}c8mjYFz2mAq@~MUP+wC@|I19f56IMifZ_obr`*vg&(zA%`rl;m zl4KsC@pWovLlP~?#8tW<*SFu|9GWnJVhi!@T(v5Pi9Bf&luX^uj{%WQ7+7Vsz+F!V1 z9+Ty>ir-xauT0)8++5(BY|>&S9bO^|TwQ#3;Ik)?8~EJ#3R~>_ER9;;E}d+yHETPK zv};!U<=^v*EMFqpr}HO#EzX&)IRYrDM-$4SO+@4eZ%9Z@D)&D?l$RJ3E}8rereJm) zj8dRX19guM0&92FmeFAiI`cWJizNHxDvuWu+smdfIr`p<>w*WgX{r#)tMlp>d4yxE zyfW&@IX3@!W#gSP{m+f{AbkGD6tDOA5}v28Dl4e=Xz}}#gV^dLwQ#)N&d`i-g#GBD zafbCc>6Z3`NOd!T%gii!dGz0VJj8$<)SKi=oQr&uEsZBoXsruPK6|o3|N1_kvQ;Qk z883$@;Lahhf6@Uum?}ihYd<~OZKYinoP1Ss{^;bXgWfe=>F zoizHbY8^2zbmzFkrOZmB;)9m!*S>Z1L3=4eJMVIV#&3zO`BV7{%IOJ7gJtHB+CclT zi&b{(m*eT@o5RC#aWkBK`=p-*yzA9|$Ov^1{H*h|jQ|OSl{zz9ugpE_5WnO%M>}9| zQ8i16n&CmxW`B`{&ySZpx${{@t-1vnJWQ38`8?Em)n1eULsAkq{Rb-G8EwQQbqjOJ z3zql0`u^km3}^$b$NBA9>E;M2D&+_TZ6W)QG!mi`wf_2HgK7DG+W5vEE)m|-lipOJ z$;AXk3iToY9s||!OR{@I4q$7_Ls&41zC6Bzdas<_YPPZgQj)uL(st+LqaH5Cd~7RF z@%=wQ4K~zE?cISEjcX^NushvDS!mWK?=#^!giQT#lRRdo z3nw_nj#R<*F|@~~x?ayL3{`75K>5dmV4u+CgONDe#vt;>Vf=MylCz)7&Nk+bovMcV z+vCW+ggAV?Ji#CM<)%=X@2)v%Y62wc+!Z}k_(4964#BtI$ zdr&Xma`H;TEgtZLImRJ}0?IguPtyFQjQ?RxOC+ZEZ(cbf++1c8gm21YC&4!d*+v+Zbry4;3o!_y6w(3<9KrAs^`(M;Ep z7qa7Z!Ka z@?WYQwG@q!urpXHliHce7WMY1WXr9;F1+0@28KfP1+8*-t*BhR;Gu%U)?gohz3pj2 zDQie8E8^N)TbB#LLL;5864@4oQBD8j=-dOD{{Jsdk`Rh=zZH_?l4}@}B8e46u2Yn| z<$kwB+V?rd|(eKVI~_W8ZPzyJ5gF7Lfw&&%VSvziW;T+LZ- z(I8vcy_vW2*kSwiIGfv{^sc}@;Ts8uvH3<63T3b1Y>*VknIcL0$B9eiE-`z#!0b7Cs0C%Qlk(Bi&Xds*}t90Gy z&h|BzrP>A$aj))>sAJJ^z3I$rN-4L9FP{~N`Vsc-P-_ZGz|!%e_ypT-MMnIy0N@6} zqHYsTUvVh0I%Td&+^0)>ILW+uhhj{&&`tCS(_m#`7OK89?23An1qDfx~RKj)-S#&#=LM6 zvMD8FHLy_NagZSSE~@2{)iwvpFg(-9eu0@kw`}AZw&}2xVn|szY!R-@8m3TM|IxGM z?s0zk?V8L9zLfVu8q*I!l!b=9r7VRm6rYjsv~E<3=q*R*J1>YY{-)TjYDlPF@h&Or zsM)Udnh??C3jkPkCcwFlk;eE2q)`xL^|ha$m?`jZAu+GM1nax8VYkpF#KDc3t-U0S+(13_?@9{9X@%CrTXrZsYIQhpL;B&bc3;r5l5kCXN?w9`>cN_DGe*Jo*em?1@-VI8h zJ?587&RF2^_52e1TZB6SOU0rU9Vn6ac!BZ z0LUE#HEqhobxrWD=eFxS9Xh`m48)QZC*z09U$%sE%UpN9P{q9JvULPl^RVxA@G)X3hT!JgK8;lP*_lnBt*W_t*3pHcF1Qu_YOSp3)EJD*rn+dc%#uZQIA#Ne?raKI;yK^mWSNS*B=aT*Dycqb;r`wy_zn! zg(WPX$>wB%Jo=}?C9=U+;>(XvY`1*Ll4h$a{x$c<)@48a>@s8D@3|evH%OVyh16K1 z_~oR8+7?uYCorRK~X zKc9~?AN%1jQ`j-JLUg95Y^iXrQ~!q3Z*B$t;tvOT=}>^7{9|rx`Y*h#zQF#^f@_9T zC^`hg|8xP6P*zb-fRYjzDsk^aV%ylpuB+#0w;iRsJYu=W$eG=Xr*L71--n*E(j<`X z9Op{D-y1eHf~)wHb`6iANfm9}K!>!hrX!j>zfF*Pf53Fo-ni)8aB#T4(tP#iTQ728 zU5uO&@-Jm)>r#2p;WJW{YZG7mwhHdV*7w%OcCVZ5ANuxtb#E;>@zG=eLQIS&SX26= z^}-fg^tGD!Di2{N$`BVUWFN{MCQA~F{hKDQ-t@l>Dd+Nm;PN@d38K&b`1IQXcC zcXxi)1bsGIW0rOOwv8xjC2mjlqgQ(W{mFayEMZG+(g~p#0bP3GrrGWEyF;TxDiR}1 z#!^Jbw~pnr-2=U#PA23ECCq$vl2tE!TBmhT!`xH4B#S5un5DX_7f-OHtv z23VRgOAptj85gq4arCWvAjhgAI?s!#@c>9Pz=h-4QCw@5e4^q!y}zdP8oP))j_+7X zP`W@00gNGN2ct-h>JqHcajCyXn4as{=>Dn_QRu?D~bfv8xrn6EzXHsZ98`O42uJ97iqrfzovJ z)kNrMYDgd*VtVD~myp9mPqco}Pt(lfNm^wq$*_k@aBj`S)1|;5d0Tz#DmU@Q!}g7+ z-k?3~@TqgLiRiZ?n}1Eh=-0_ZSK@iC-Wq6DI*#R8iV^SEj!5L#$Z3e{4YeyW0_Gw+ zWZ9mo^By!+xx5vtO!4deQ5nhSuQ!vZv357T`ihV8p3B^spPoI2w2R)vd3t8(;llI| z8eSp7JR5F5@rK9FkSmr|!+Ew8WPZ64#J8jl5RUe)q=7}tL=cz9aeadSLrG6FsRkRD zrCHD2h&5m=o>Jjnkt0#ec#*T?BNGz|IVMxLNhfM(^lIj$_~PT7o~|63Kb(3pn}I7n z+OY`;07$2JtvkgQW{gK=vB{nM`&@Mo^_5838W?NbDCohRR-60GDUQkSk)vkTw`Ej@ zkRU#(4W7%P`Ha%+!-3_pD0bJJqHhNxUWEIRyXj2^{O^MPnRrbGC9gBPOy*sxNu6`6 znf_$1btjHfi^qDsnMq4 zZ{%1^&PqNZKvUT5*Ptkocle48$dRVoM`_gI4=T1HLuuC|q$8K>;d7659`wFw<9cqs z`;%T=tdZ<#AoA+fbS(`T#=vlHRv6LS0OqAVrY7KFLNl&(k+z2S6St7tJwp+VYbliN zpA$bzch!qS11^_DZ1wp8?xV52?%?QYMG`jU8ocv*)5E6eH;&+ajuWx7#} znLgeoPnC5q34(T$@+~@?VAq^&9Yq9;031nd?09dU?-Jj+*5$S))uUp-uY0*?bK@Si zaqmsNLV^nWOaXpWr{uy>(5p0qC;u_{!HFf<+Td-($)k$gl37C}RqrvW`lgC6vw*Pk z3g|Cs=Af6FfTD(&ICkltNB@N)rzEmFC|8V@+h@50YG*>$n*f!LFLu-8R-^+G!6(fq+F;6fJ(gL)`E3-4yqV+og<^4Q>DKZxi&5;C{RVjEAgs2uP4^HQ5nCo_Y|EBz^ z_+pMczgwbCQ8tgJornsRO;XF+kLzg?yufMdSu?0J8J2#Jb4vRK(@@Cj!v1;~E4g`5 zx639p-;xlRuvDA*g3TaRuR((I9^AkP1muD(2ifu;MU#^+Azy*MQUQL(1kUp;fEL zqRFuPKL!TgntH}UNX=WWvlmLXmG>%g31W#LA-rqhaM;yFja!})PcE|;W!*W{23np0 z9_!C9=*tU(s-7ovw?}MCC|u($Kx~KM;oDiv4K~i_4Tng`RMkfN0xu0*@nU17%a6J8 zg(p*{Luh(ytf}v8$VyuT8JfH_u3&$=z_vRrF%pOJ#$IogK9HiK7ZEXV<#A#o$u?%^ zX>~WBWi|6NpNIo4m}x;q?_2j<*G0W6#wzlgY$&SbS(Pm?o#N7<*n_7d`P;RKSh&i# zO6W<7Ts*7#-9IgtY7kixXq5JlN02%}Snynebad^}T&<@PSbq0OdFj%PC9gF&r_w{L znFcC?l(f?YO#N64BNDUJ)8D<24XZrFu%M{8OJv86V_4FP+Hpi0o51DRheLBmL%tBb zElI>Jl)}hN2wdN@M{OLd4W7o_Cymz*{u+Dy;rr`2$5bcv$NMM^k|oAY-HNPMR_sPe z+@?5Y5**5ElJgLhW5i<;dQ*&K+F`wF|9)5Y6EosQ@tJ?T(7G!5zPTBmt$nnX zvAS?s_a%h-TvV}+T>nuz>*=V+*mg~w0rNXazsGe(o4TBf6qCPsTdhcxovO8J;fWX2 zR8!s(omFzc^$zV0KC`CFb#+7n{;xWQgZu7}o5^{rE4rs%;SyA%;6+rtn82%X^e>O? z`xfc8EDd@q_e0Jo21!U$4p*0jux!*Wd`(D1t2?`X@%mc{o9S8Ss}ON@Z7S%*d!#M@ zG$u@_+|{0ce1Bv7m$*x5H={>p0*i%06dDC zL*mb?bEhT0Ri17Fvm2MVJ@JeO-H$>bwkc~yKdBKfJi^vq4k#_VvlzshjjHlBoZK(? zqwA}CL+sJNs1~a}*^S9f$?D`4wRofWd_bATxxdS@RZ>p%ndmhRhlF=!f0@Lve@M$W zWs=cm*r#a>hMNTbgaGWGv>!sAVYzy`?dEBXyyqTd+R%suM@qH4JevYC`z0U9jF0dt zXy`RC@E&e@npZlVGwyyUs8`r{as}Ubb>!9sL9hJFY<3@CP*awmE>>fE z!FB?)_h<56$6kpF$M;DcwF_X2Ct4L2cam#L{AZB5PuoUoWo6V2e%VI7{}H|kkJSdM zr^HcP+N~zs>WFjlHp9ELB{TytBZPTmxXrO2c&Du%tLD!m#4{Os3fAKHuxvpY_V7+6 ziGVi_T-g_~gttNEjo(Ry$-j7vGD4QlDF+-@P`We^qa2cNw0|6US3cD)nS<}?m%ILV zF7`ua?CZr1!`AzQrC#UNKi`%874ui@aTb^%^45h|(ZvaH)ba>tE6lT~!7nKDp`8*V ziw2Xf-ZPpj*|!ror;)F0mNMOQF*0tc_!wfUlA+%Iu|G=bcG7~yP)}tpUzZ$9uQfC7 zgMZ0Eb-^v};78Wi&M}@%4##*yWN5CZUr;o$E4UBxDrD{I-=mV|HYxIk;!)S$X<%13 zcJ?YFiP(z}H~nrNt1izAX3=R(tCFi{Ip=h-K<}22vz3yvv$gd8oVmNu^-Gi$rwpnE zPnSiBv{w_|F%d5UKx5bsASemjD~OK$BbYy}FI9Ez27BN0-wfWv4&F4fy(3|V3G0bJ z`kK?RlqMi~O?p~#(n$6c*4ws;i{Q~CxC@xcBsJdD=X)&d`&;`6#Z8SRK?$Y_{!sTH z|C&q-i+OcDo0TttjFWS3Q~a=Ata}}?`uwXqQm=Pu5%x`)#Re){qL@`&GRPUw*lEhp z#i=}<)1Lwbf%Vd)s)=%+(#xjaXNilywubiw&a&-6rzi*a$U9qHb$PN&_?S~`?_|M;CPB)I)Dfb-*@dx%X^bq6)y7@gw=R(OA|GjO}UdAV@vnV7OwHk%!Z7%JRl5eby<7h zGS%kYTOKPKJW3S3yN{A0;gWXzC9^C%?TTYusU3Jmki4?p+ZxBvDOus|!z!JRRGFfG z#dh^+p9@7_Wq#%yDF$71uclTO1zCZtr}^UKot+vJ%e}h1{l#~+L-y#;SH##OZmuCX zYsQ*l`ekyj4tq$iV8u_I^Cq_Q$?^-BL*)%?I3liK)`0L9y-gPbzU!9o@*`Yl4MjcP z?-Wx2BI}%82fn1>;Gb(vWecv>@vO)|O#N>WwVxOOpth%F@0kQX8wOcR{PkLiAy>fy z6ubR&V|9@MI-2B^hOE`shk`eK%N$n!X<7(Q=!+@9fJK z>XURZD8=;iNTG(ou6t$PC&$`Dc`Eh*7S#-md~FL?DUGzD zdY)*8$^G3aFtHcP{p5HuRs1Erxs}CqPP=uZj>^e zVmB#^tv5-SuQvA`0=S_`M{|>>;jQ$>W1ddS3}gIn?#1-sUJ2&7J_dgclmO|l+moxy z^1#~gJ7|<~j9177&r2hQ>mkogzT53C1SoPm?LV6$kZCnJ(}#KQr9q3PVr; z>%PIET#>B!QL6^uFZfQM5FYsF9W^KRsBAyHkf~I7Zg_D-*^cZl!TjEB^tH9zb-Rp7^e>UYO=zDYJTsc42<-2wa z(^;@2*X93kv$TGOyF1(cZh+-0zy{X_sbh8$tfiy(stG6_h@sHbBjy&)!h|I_gYeQG zgD+N~0(A2*&k+UQAZhyNx=arH^L%wv=lV8lETld9m`(U1*c{Vl5)9-}ioLJ`rMfkh zv(412XJ1#gG&*% zVx|~*%eTM7acd)rdWydmgQ&KUFsoGb|9|sSL5z>V3yg>aA1)-56pQ0-E)xP!*IR_BjwZj=Pp#H z2JrOJLPIU1-0kJ!F4S{qNK$MmbUZwj2ljTwta4Ui-Ak5>Acn4a|B?sL5USA~sY!TW5bQ(LchIIqT#8T#`8W zbpDh>;>vIAixh%Eng7i>Rx{*3>0F|qr-5~l{ukZAS1Y|vz3 zZ+QChc%2TM3M-{KhF?24yhom!|AznK>1gD&+HhT2NN3MBgR=C~!~YKU6*vvnaZlI7 zRn=7m77b@5a~77n#TBKMxV@R}@MH~p`wje+jpeIQWoq%9%J~+3vU|sLqOY6Mnl*?` zR9i8%OpzmUH@P4MBl?-bk{BV}M{Euq$hg4DH!W-^*VyM!{?xM`BhY8rp!>)+)RPBs9`)ucBHE8*sVmx9}fG{xME%FYGjb~eQMNC!|z4}9>>?-bsF0$ zkulFO^R^cp{4ubRHYT!KApuy6J*LJH!vow+lFwy194^28t&v*fi+!9HMPWqbw8c}I zPkb;1uDkYbV%(b^&{uUArOI59KGKPajHzrt8JxBCdNtoPI7fYQX&lW6-5U?bp^@l6 z8^t#Ur*<~bG%;B?4n^Y{cK{aGcnj*N#rW44%Sd}0?KH-}MjnS6>nviQg8~Z41HG{7 zh(<+f!Q~CtEA5dzbIn@k6e53v{4g4zgu^4z^#&!k>27{P-Ge^O4H;o58xu2 zJ_%SmY%V;$a`Ty+Of=Yx32ey1rmKE}3ZT%sjTb{)XDiL z_InTv!|kqgl=B=97Y<+2U{O7C4_9r=C#aCQlINHQzvwzP#EXCReb*w&;^DiN?7o0@ z#?J8dwh5A^U7JFzevjH4s`vRATrpr1-rEfN7an@TgEUncTSIPzZr1Mn^Lf@4s-ZH| z6tJhWHoDKGQwqQV^6x|qf;ZNvxS}Zk3i4-OlYn%q5 z*r*61EHdKif}?KN`CHoq<*8t;%hTmTRPXnu23)ubcX%sHJVM2M^vD_l+)ckn_=@@5 z-Dmq_G4tnt1y!^#2iOO{V9)ES=ifO-43*4oWVNX_HjaMb?*&!LUO2-=sep95Lh;QK zkn|E|!SIfy5#Cg&(9gk6{@Sz}FZd((wow{#)j^NqE3 zgVHAsVnZ!zVlxw?&qt;)^h-8aZQ*zG_F#e47*GUEzb9P#nluB!wQvyF!?`e;9OL;@2@#l-x6I(1-g#nBSW)=ET|U5_ zzYOYs_1Rnf_is%U;%IVi$6s;NmjfGx`d%MaJZc!L$+12_o5uY5foN$?oB##m!~OK! zuVnND`(8ZlXJFJ;VzDPuD%g7f-5Y=^rA(cez;Qh}sQl7-TOoE6QHAW4PrfsfjF=S` zGg)H-qKjROZ+!wTTSLCz^o-Q)D0<)O`JMz^2QiRGJ0#~GyrsfO(%lvaVGxYWSi8~s z6!uqoOtHl6O4~Y$Uoy`dS8V3H-0N5Dw1avOzB5-bv%eW|XSYOUe5klxOa%0t%-5MU zO)nuepKu7S_|?~qNe(n^w`T|twY`s=e4I&b1t{B@9*)!RrD2uXSCWUP+Lv(31ZaHD zLU*{D*ku=F(E$71X2HLAEfN`&7_=EMM^}caLbl^5nzU~0;YofyaWO*9`3 zMg}}7EflyjeKD7Euk}GG5G= zwX7d*ft7n1dH%-$yZ!hhmf@n&IvBd~K74+apdKk@cWlwfF>!G8((10m?G6cYMSra) z?~nYCA9Oq~^@IhTz6V_;rkp|bK%?zd=$HwWnaS<{7%GdKZeui(4n1xG#tQAyjTh8q z)@TYRFKK)vSjQUZHko+>)2)sa{g-WU&9TNYz&kzsjs{VK{~K}PV~Qxkz1X#q_o@1q zO)-gjF<__FPW`@ck9wj@lhD0L7j@-!oj_e~K8%w|*J$6v4yJR71pOl{+lvl) z_Oq^4xkF4W37(n}gB0Wz^tzv*bV7s_?KP>l0GJ&o=r`D@ZT&H{_{^5n-007N18qr1 z;m-Q_MetL7jY%T-zrcF`d0TU*_OyZB@(kt=41&eM>)TP#um57fBNd>JcXXW-^9xcQ z87KUEIX1ZQ>q5Z}*Q1@JVCyHLy6BbTQ;c$aqE|hQz0W<|%l_K8RJDuDpp=k_Yj)1Y zS;lF$4@vpaXkplKXOl4!-3osks*r2_^a=)eURk#)V{nl@b|B zr!YmZtbgH6uox6kj@jP?Y?u6}h4^Qe{vX5RJT848(->Eg0HE>bNH?!XdA$DEM3F5r zc0BzKJKpd6P-0@?6NA*GR9*5Z@Q-kjo(cOqARw%B&=~_Ta`MW#>8YGdp(zGVGko z6TY8rc=!yIY8ofZF`0a_b&GkPNDSy`h@Yx%A|X5YG+!~Box=qz;qroFyDcn7&}oVR zSSg`MD+~Lp;|1rmcp7?}>-aEC8S!SHRcajypG1HqKNC*N-uu`Zb!|PNq1Ra zsk#!0UvEV1>2GCg0HYN!SJ77#p&s#)p*PJ>`j_;4Rg6@qAu~Nt?Aj*<1*)_+2~F^7 zt_ZsA(V`FK=&wAp1m-o;iPd(SZ~X>DeX3;zdIC(O9-|ZCVOC<|{+XIhnl8Rf@JYf-G4)9qB zdNZJg_I%IcFZ61j5i_c~N*5bniq{WzJ0boSkNFLy*ZR)uj!C;`gI;?6$X>3uEinrT zak8v^UvkgP6zqTM<@+pp-^e2bmL$IiVWyhx^vvH%zCXe(g7xLz=EuIAJps~l!=!*Q zC+*qDe+>04>_|{1*Nw;hkyiW%5~}F{2mX|-+(n`4K50p+3HT^6z8{@-B(Do~^o{u;>(4lB!`J_ONIl+u6mk=!NYL1zU`8wtqckb&y zY47h!0QEv3At37;73aa3u-v`S7;W4kjYCk5CRi|t1Rc!@|6DN+D%gVlXH=@8d-q;r zFe8y)7km6R#Eu7lwoQ{X@PcaIeYq>i@29ym2?8Pxc0mjip_?i5!+n(JCb*w6DgqN5BT5SqvNmV% zgVwHmU6fg?Ilili>vvZd0EY*XI`DF;EAn?v<~O;zEG5Oz=a08u`Pcw+YODmhz#UP; z6|3SNtl(J_nu~9_oz>TM1q*u9%J!s)I0(MKKl%-;ZcVFdL&Qx)?63QohwWu%(X$Uy zHplTO4j^|C_SZk(u>B7%B&ngHp)qq2p?E1-(K~X}G+1NhD>aG$VeDebD(s#Jbir4y zhYH2|F@RmfPupmuj$t0I<@3O3m_1o7%?Ib}Qt%|{+{z2dt3%2e@7!YYPxOLd z1m@X8%}-*JrNX6pfiivK0QsX^43VAiQ;3J0+1a9*%U52LefRyTpK-5II|i+5AMR@v zAgV-)ss9G{M!vA?db`=F_V!G(bIIP>2{8BcigC8ATT`&jn@a_}nP~Y~z=)gExxOWN z!)nBT!xbs;V)@{J0C>yjrdZ&=xV^nhss77;M+7RyEKRv8mW z$z`|di=`C&n%0>RPJ}I8I+t2Nj@al{hYIAsm3VS~2WyI6)kU0>7Gq0aHnFlXhS`XG zQmm>g{qu*4CJXhzZ^UaQIlhqdN$X9!qZj>rkwMG5eGl~m_6pd7)TM?gqTABg`|Cx` z^J)6+7#6e`y{&flI=XBv$jZNt@jSE94)*1I9i0V2ttPH^^Xu?L05d`_gn9ZJFUcys z>};^mk5o9r(>_UQTSM4d4Gn`f-zg$W4bOll|t|8VJ2 zLBzo;Z?rUv07h7hgyKSU(%GmbCy)MP=nN$bfm6)q*pIpmM7lEC`TsF!YdR1Cqs$=l z18eGqoDeJQk9D6v>Tisow;KZZg)a!Mfn*l3F~A}QlZA(!ow8n}Rr4PfFxWuEToC(EsFL6;v zMmS?T76PbpgUotL+ z_w?uIj}LbeCNx*O5G+`tr$TqV;4_Q=7@8Y)HMAZsMkWWJddDA?bwRjw#Hn@L`27Td zhykJPde_u~e&xfDTX_Nh%N4Zjf+p<{&x>{HUR1pUMXp}8)|zCJ5slT5rk$E#r=9gl zhf!^UHq;ILP?V$UeqEs_N573pO^qp4TBJWQ?`_DjCG$EQ^|23f7pMU&+TrI9Xc2Au#bFOg>Iq@jb3UhhKw50$Q@+IQ zGQS)xzO$NkJn`b^*jw+awNllB8?8?%6}9*j?jZXKrOuuAOy$8fzBiwOb5g-IYSmS{l9+_PNsev!Xo6Ek?J55zMZ z>R6{OqXL<7?|@&ckL}hG7^`^sg;o!NCUV4TD=A}+4p5rqm4083ieDe1S|f^IE4-BU zln>g8qjBMnKGY84;$Fu0+ZEa5<&~_B7KJyjG;D}PMevWP2Cx1twybMvqR1ENzcV5R zv804~FSLf%r+^so3m@t;s0tR%^-Xqq{6CcMu`S0KJ>CQDYM;8NW#I2$qy}zUt750* z5}1<)@+veiKpDP&g3B;h>eZiH4R5uiamE^s|Fml;z|=zdCuzD9g(URHXSb?)P4c4Y z>kod@p;4OoX$E2C{@?97)O2}~g}-Eo7~@b%Gq&cih+d>B8VN;PgxAi4QPUi+KZ;|erCwmat>t4h&|HnuY!<_fdw8eS<5k?5o0{Vu zw30hp{;;qk04^5uv7)TA?1JE4lgUb)RL#eYYMq2J5QfVVT)>bgXtZF#S$W?A9x;R|NT<6sX9hck{t;S6* z6mk9+T(sa*?acQ1v4l$CMk84wA~nHVFHd;Z12YACM%*GeU!aomJWrax)H5t+BHE_d;V@)-8R$ zUZwNG&c$IlbJPd`c|yN|G1vr2bk+rEJ_|TluMf!(H_VlmUXj-F#WpUDKRtO6c9|@n z{?}DZXip=$%9A(EzQQJuNtlxHPTNP@ee$#L18A_8?7`!u!W(+3mvi^-EW{y5-~pgJ zzud>$O60iK-}fFP^v{=9QjFNKwn06>sJFepXpe*snok@&T0*+fd08SyKX0uep(nIN`-asn$esZ#{Xj&t^r?{Gj{u&?y#8r zY@Z=ni-PgCHz}p}3tIL9@Lm_$`tVO1nPYIcakNDz*UM~vDlOVaqL-~ET1~)kwr|=- z5;qK~NlpUzQ)(F=8#SH$({BLAz1~UK9lA0lI`D9+v(E5pWqOOu@4j9=997>Jx+wR^ z=0Aoj`n;(*p54-hIu5Lga`5MOF@L;q8pLnsTAH?hxEM~-Y|zHj^AWp&dz&Gb;-h>5 zaCE_qKU5|gl5`@Ck&s0?OagKF|CsIm!-1UkaNw)BixE!2Qg&0OVFZcEjkF-BUhRv) zF;*F&`V^8J zq#D@K^r^1?&4Epj)HD6%-o=Yx51hx3F`L;UVu411)9~5km$gP6zgK?F&P=h#3B>mO z4UAA7p=LcA!bojpppyWXjo0(`nanh$E$$1|zQDA&5$NsC=>s$|KI9LOv{MQk>btjWQ;ltY(QKK972>hH7q4JU*KLg_;@Yqgm*_T%_R@TGxMHw?|(4Di3SGoc^c6MnL z@&>U5Li#lDKLa2(xNP{NK&9W`*rxACIM^oBQZNe)Fi z(+0+1&Y&UUqGi{XmA`9GdRMqyHcNk6`&HjOXLx@2-8I{l&t)!c7ph~8#%tELP-z|M z0njfBRe3O7KnO!((WAN+xZonR$0o)VERL0OJ{>YhRi{5n@1_kIc&}k24A7k!nWtG` z>D{eURnZ4mDq6AEPqTCw+bj2uD|+&oq03E?mf%5ecCjz&diZ zIP`xb@E=YVX07|AkmYp~cYoe&wi>IvvzU?RJ?4KU^d5EUM4sx~E?5{(yF0osd$J`J zR#Nc#gWR&S0CSZwnc@wsM72RDhNqSPF}#69FTAAsEzNE)Uzty*lVwsjbpt<8u}EwDq^p z$riY!ypI5wxTtwWYL~w+;nQi!Ssk$k7c-(sW*4)-3}Z~N&IUY4JW=g!n|fF<6?Gzs zRp@LzH)?>ZX?CZq&KI7jr2pcdE&F?yshCA_^=k#&rS37)Xu*uS`8~&#xx-NZu`RFs z8;^W8Mh+t&u74@>)~UW|qe;HZ)+~+Th*A5{*n?HdpjY$?+%8&+T@}2>JRq&bzPh}~gMfIsH|EmWWXghiwM=;I{{o?kLeTwm z!xCuPmqaI~_Ffi|qb-}Hle=Me$lH~IL4i+4%0Cm&X@P4>0;d^nnQjMbXg3zyXTC+U z#jDjDt7I+j(&7s>FQsfxoF3wiXOB)Wz~4!|mx(Z`3ceU*{Ghe!U2vfO)6{C<$Y4(l z*W16dhJ`E+D&zOz%@+jGU9D$EpNJn>S_G{A(R*L)iv6~=0lDiQ*v3sRjzR8uLM$6I z?;syi{5D=+S2Eh>`eP`3>Yy{pvRhPg#LJP*|HhV7puxSVNxpRO z&2tZR)yWoYwU6owpSxGpWm)2oEnC#U`DfqwZuBmY=0f4w&L=nMe{`gW%l(m1LO62T zq{?{US*m2_))T8BU(AGe3M;+cGD2!ho*1+^it;~_8|>T?+qj+oRV?@C`dw`fL$OZuOmlY= zy|Ka_QC%FPBjO_HF(8%4(k%auv z$h$mfoY@CJIliHb=&ef%9X8z~f8V%#VK_wcrx6%Vx53iIz<7z#zLKZHWIV zOxG~wz@KXV!+u${xz&{Tq(147`=yk=d;>#qcq~a`HqGu+!K2Ui!FFgVSnqWBzZKUS zygSTdgNi5+y^JQ&eB{3st{u2TZ@r9mS7a*k?K{_u;Gm*9_zq^Sea>8}>tq$u1?5mN zcyO;aThOgGzIAoVVCmX%NN{1~Ez2ST7!u)&)qW7NodC+QH7=iai>}Huc2i=-hD9(@ zj&YBF8a$gv*(DM+q6ke zmwGk(TQg`eh?#5^Nf)^HFZAJm7L0cX)DO$pHIrUzECQkk$N(2+;j+hlm*ZgBTO-VD zC`1WL?T)Zv{h=R)p8a?0+P8odi3uP%>GJr~S0nyb7I#vPODt1cW8S)Ja!sC?wzw^X)#Yy=bo9}9`^6IoOX@Ftd4I8j-lISYa7 zZ~hm^JEVN-Ug=PIxnNMH>w$+qTT6zJctH0i)7D-mWJ5dzB@-O$k zXJy~z=$(C#sIK71Uyz|^xx3sqYCe73>(6lCh27N4zj_Tq{8?x#Svc8F>ps<1B!Ki& zR1ds!s)u(GALc<56*YLdq941~wl5z;M>W=!=`a*>CMfU;&hIz(bt{44%WPe`rY(LI z)}s$eEYWmvbZo_~Z@UGlRW{sry&@V{b&>XDY!WnrFR1bS85(pY0gbjyW9WtpvFT}_z)#}T1&sOffhnLHP6TiDjsL% z22@%7?h5FlVGRGc39Wo{3znvusKfAFiMDuGr*+~^qn3KokDQiDWQ zNq?-p^HMe_9i-&*C=Hm!fma8OyH#ToiLHO%7V=s3Y&jo^2}E?EtBbpn9vM`U$7yvr zDi`^eK38zQ3S0WjK%3I8^4(iH4PF$RLUqsu|H}JoEB7n~yMB)Uck%Vh(L97Hn&6fa z2{I(f&u`X5+`RkVcBt|OQ950tSGEGM87b~+T5GHYe14F^1SM4JZ%yaDV%D+p*==G( z9MDDH=+$%?V(CURqQdS1y-J4tP?Glg)-xsO^XH4clPAv=xFUM2p&$4CM_K|=Q`2`1 zcjjOI`o0K1J*~FSzw&`LZ(E01GBA%EVgQ}q6iXDnmW=7NZgDxODE#FJm8YjWMlRq0 zSb8n_y1c@iJBck~*L6>alS&~G@#*tx)PqB{4>ZE+vOupP(le0yUoBZb`8w{&d( z0iWbXv>M%$6Y7k4c8k0`ZhAj|eO^l54(dwkohX(fa&R;e&p7j@G)b@6Wjz^JIh(seL#$ zy5i3-iL~Xy5M^Ospj>)g3p%&Mg=K>A}tlP4l-A{Uq%>Ss@&OA8?U@Hbag zMce|GxQUNU=Nv1Wk>PK1r9izPLKyh`xLDW3b;QEr9FQljH#N2LX3o zwW+Umc@AttB=%9K?46sr=4#=4oXOG?{F!Ry542`0d4Z3z+c;ZTv)+5T<3rtJD=O8x zot@&fLT+>5-ymPCNye%QZ_W*Gl>kG6A0*wr&rPQk_}Y0nK8vx$%A&{qyFVI+pQ;Ty zzoPD1v%JWiSB>VeVM_1fA1})<(XG`N1CJ$WdcAZ0c#L3<_$5f+@xb$;6ZNTM!fo66 zI)>gS;TH2pAXAB&qV9j@GhM4_ zgKELgbN|W`adr$kLLtxP-*w%l9=fPd;y(l){AQb&E7rzLD_Y!i^={j1YVDD3bcE+< zo6gX8_rv+&fhh^kIIa+rIdzYT`Pq?18a|(7-3y*q07NA+HySA#BRKx6|NigqYv0rg zks_stU;4J!J-JT%IoRvk-hQ7Mg)1Bhz>B?Md?Xtz|37m&ffb}i{0os6fzO)+5uCgc zV07trPm3(?LRCArOgZPg1_`ca2NfsCH56(Do%5EnQ-_Vhy8Jhgx`&1dK<;uJS+o$& zO?rqGH#965WO9?YwL(cxC@9B*zic$#GL6D9Cezxm+g_RY@BuqFu7CeuQ;=^HMRkTe zPvkS4(=us{(jg+^9WFouU%uC;uhGCrI}ztg%}1gJiG^en=Lx%k^^)MQf)t5qfNq3` z*F$WX>(g8g*Up63dO{sA=NLVLAy&4a@@S4>Gkyu{WI^+|$)<23cl!xA(%4OvH`xLj z(mD72@w&*f`p>~@VM}6(M6IYDaZmk`S*;G_J53y7!(w$CmA)2&fa57n4R=Q?3fc`J zm~bg8k#yBeF?P8eW`Tv=fTJ95Q~xPY(zRy^qZ9;S>5(^|~4^Jy6>??fFxs zi5vm9Ix)F-9wLi8UO>;9loao|G!sr^LDuISzm{35%3o(|ame3fdzik>sM4%}BcRLY zp!cGFoj+-8>56*MQZQNAeJW@O$W!=z+kaO7qx#@VfcGNGwu~DPIo=mD-!_9sub;0` zz}6R8>BO{yy(M133qU$&3eLVJH%uj+rn5F>{7RsbqvW_fvZTJX6+=)2$9J%$>x}Pu zcsyy4ZtqThq>&#=oNqL&QYrsTK*zQ*ekJ`v8+KlR=h*iIK`z0s7Smy2%AuGkTP9#^ z-N{7q4UF?|eUQ28??OKW>NFKNMSP}60I3U>fqmQq?{>x48Uqgtvt+szagP*)j{7&J ztF!NwqMsbiE!vfQ#tADNXaQ1Q@bTY|(-@?_a1uFC4jmJ1o(#;9QVdHPb4^4qJ&2Xffn-%nq-C3wH(2S0CsFuir6MoMda)oqx<=mkQ&iVww zO|oZX-b`0k7wG-e60=VU#T0%DUrJHh^fr*Vt$2$SOWVzTX~aIU^2dYIoJZkq{~_-G z$Zk5K*s2O5rXr~rfB(+Hzg3Te5!LP;ciloH%BbqCnS11Xd?4LmH}sAqGyYWS?1kpD zv+1dnA<_n4Ob2agg|xww)j;w~ex=t6+~f8=^RK4>(lU+@>5ul; zQx}0(pu&AWiKddwxUqH&RfR<$spmiE>yVSa*6@$-$ofFW(3NU^2?rjZcfp*x6pL*z zda7IpITL=adNgK4m}@{41c=IQTOfy{sRB1DT{ro_Q=SbP<83;x$A4)~<}UpG8~|LN zwy@)0(0@s9h*s)tK)9An5Arl?VD)Xhoaob1`+l%-vrle7*=9z03b7n=n-y))f!cdB1Y1tWM! zgG6m8XiRc%zy7%SJ&L9}wP4!{rbMx(D2&c%DH&tTPLHL_3T21v@uz`v9eI#Y_mDvA zr)f7V4sHeGVepN)=Da}wt{?sQxjAC#UQL_Dg&CPeAH2(DjY<2GO8tzD=K+X`(V*mb z%Nz-3Ifiq(C?z9SQf@APZKw`*JiNo^QAB@o={?%z2BE+hk5>kJ6U4iJUx=%aD++q<~ z53Vbxnc!Y`twwA5l+bdwK{dsvDtA^Pm4VYsF=1RrpHw~I7~^q?PS;Mh&D=v$2w=4R zp=~NGZKJ!;q0>bZ2;2fW(UM7)@(Ecgqs#OZ)lzNxPdby3SA=3Y9dTm1?MDN^cJH=rEp&2ta^HCNB9&d?*i z;GR)tmoX;5;7pSZ?r#J? zGB;@qhaByi?S_lH64Yup<@cudn&S>5HA9XOcmEu9GP_Ykt**TBWznL$;?))GliW`} z0+*2xClDemJ@i^3p%wd_9W5ZKQb2HuZB|qc9!d*3&p)}_{;r(=IL3A7#M9xChOoh) z%raS)m~9sY{PIFAj`Y;M`=7&-Lb5-0$mkV6bUP%$`o#BHPqR*0AMV-Dpl*;m=|d?Y zCH>2sWS082hRg5u_&lLVtoBN0P3#DL*)4UZ=7-mDute$6SFm9X5}u%i8nay3mNyJ^ z@a0lzm`Mqc!3do6uv`ZnouA+7H%OGczZenlJ6;_5mU6g&gM~AJ=qXj>G8GUkmgiALU`~kJ)1Lt z{rVi%jL7H%=Gsa%mcf+~tdj|A(4>OwPf*WL@t+fg4e~E@EM@N6EqV1i=R22RRUo#1 z{lzNPWPFS3-Ci(1ilL7BfZ4M37L5m~uO_(O1&SAKnAT$(tt^*XD_0sbM#kNLe!3}r zr0^Tw?!X6|(CIUO_6cGB{InZSF<}0>R`9(Zaz5tq-E8s{43JS#^S$0Am?Sqfh}%-x zMflF(hT?7tqND@jN?{rYSyl8oM>Oh`e5MBF=L2&?II3-(n6_otz9xRh>lT7N#k zoyNIAi+GAL{DV5YlxBuY9)~ z=hl#^at_+X&)uPGIDluRq7OY=wQ)mPO*a1#kXHDtAoh8dH)Rz*+71SaI##HbXVn?U zxmQ-7)!)Z8U}-!m2sq5sM{JX{MZSqTPf%_YIpwvg@M}dqkNmZc+FMoa^UIU?nogs1 z$rzz-D^4_CvFoA5IAWm8;zx`RALK45eOZk5nZczm{6`gs_Q!SdkU}iw z1?So@y|!Y_4WIiw186=v2wctu>9Qm?&j(7EgZ(QRGb7y4AK5z;NKtRytM;FBg~i2o z3zenHu=p6-FV-4TPlyI4>k#NxlM9L%s3}YkUR6KGWj}b^(1vnGIiK$!Upr(Qf?#v? z-B#+$YW99D9Qi;Bqhg+lS~%SxA0y~74cuXRM$O37v^$@1X!U#+8T1?5&iYcwkf|Od zIA6kZXEPYl$M`8XJag5W#E%tRw61tNny%I}ETuKPuX zuAx+F_LHibGc)|b20DtDN{1-FHfLyyL`-;+& z##}v_yYfW*_L|~cu|WW=EO>V(Br$P&=tWfCX-fd5E$Qxl$z^yhU;l+>_!Rt>>iwY3 zmHtF1zsj%C|EM4dW+Eg{i=q2hvIB>dlgnno&p37+FLd0_F+F&?FlF_~nXSN+KbKVl zluMV@QKi~0r zdMw0WeXMV_f=L8!(ALHKc6W*Nxvv6uy*J_nl74y2UB9RrQl$A@v;s^CSpWXmIw-HA z80h1-A_hwKMXG{n`XQ{26ap>S+RoR1bU-q(@ zJ+oToxd_}qe3{vjdr1;|+1}Bt*&O>V`8KU@nl}o3OX)!A0OEq4HTF)%Q0kvVrn@hf z96MxAIyU7FR_>m9(qV1~_Eb#=(0d9Aq^6nUuC-gO((a(KcI-h;b{u&2Emuz^_j-=( zD>ML-jOK)A?IH{k(Yp)`tv-VOc@jrt#oFW_lxaOQ-wKo-P3e&JDo(9#Vi?%I;|^N? zX74iFpQD=Vc`4a6k#*91m>-gi03stAV}RKuBy;{yJ7@O8SVk9>M}QCLG?*n7XLZT%>U^2EJ2o?mCrQt~+t6%OZqrb8{|FxwGw30U zS0R=ECe>A7KY=1l?C+CgvLp-t*>^hd=bl`q$zc{tuWyxJ)l`BXKofcz1469AN?u?M zu~*8Q2oWf;0Vx(1(9&bU=htDjtk{Lr< zM&l48vNQHh9P~mg&WfYt^JBbqDOS;}J}tz`3W2wi9GH9jX({Vy`CQ8vho0l^>kvLX zI+^rmU>jk(rX0riG>+Th$_JjrjZ~6D?g3{9J2YTyjC8(zaK53{+!|^eAyO+Oj2@-_ zfz|Z!(mtkEkev!bQf_h*hi%3^>XjuKgFKd$hhIgy-pb>2Pe^{Y7Ja65g!(7AucS92 zFP}l}KPun7g&}Ub{Bx&rMm^>jj|WBVp66oWcNMj=ww~+-aB+NU5Nl#+Uqc8g^j!O# zkFi^kjOT3_(CyGic66YZ4B7d_5h=N!7P*2=(EiWLD|}PF#kM0Tw~M{;bC|7an3zMAm-q5Y5gTQsRw2bPk&+cn?ir@-L=r`jq8hKJF-d_8#_v3+A`TIiZ zYU**|ZR5YD3J#h_RR^WNz&&qlZ-_#-3Q2qBxzZ}U{3zi3gYl{28iY;~cW@f!->Fwz zH8;23SoU??X0a0?j&=fwz5KVKPim(?8dX8BEw{acjcn$wTP`kkGoYl*gaAuVAS!~p zfqVC+WNZi`@#sQ9)+!BMGFVz}traaGSkBxv(9OfwFA#r#NL*$p;ll((H6^xf3PB-t`ov!O!6n=dc3F--_{U=Gjwrhqm^ zE1cs#7HbUpw%XZn=!qfpjt}mRLi4jtcf%x4{ZyMLI$aS|8vm?+`fl@72@r~|6g}|m3paP`IZ^KvxiIH=){=W?po8;;)v}!wkg_}P*x0+zR%(B|9 zeRLQk{?@NRU2Jz?U=*PL;74VmES9cy$|;R6xOCi~>}^C|by?zGUp?DGZ&3{26=s`! z{91GYZY6|rJTxioaP^-9s=jaMr38ErjC#Dy&L4|rT7D9Ej#Xc)XUQC89E1fK`A$&7 z^3!dWVu;SVB&Y8eSh*U8acjM{d)7`04ohm08~kz{!l8a^m~~k3g$tewfTqrmsQ1dB zDpkRqvc~GG;YzYa?P? zNnr#Vf9=RvK}Y)$LEok<-$9hlAjny^5&n-PS*%Pl1`u2lM!dg4C7Y{7RAl3Wh zWY;(T{y~v9j!K<14{Q|IBn55@&=Vp+_9XBi3F3m}yFse_>9X{1(pq0HBX+i#kF%ypMJ&HKfSXIE-78;`z_NnBLhVKk1s2_zAt z>cZv8?9nJ<#{&|pW&ZaT08u&n`ryV;OX!KlPLb4N=*CKu0qXdE3 zHb2oj)QRWLC9*3HQf}!dW0~U<5czGS($Xy9ERz7iFR* zIvZcf%j1koNQ~Hb9V~>ZV&0=bd0Qj>*B7aooe2WO?yX5bJf;{)y1gRF=*CRyu#x@I z+4w1U&Y0PiIacuRsDXiD=Y~P0r7>bxs490HWBDJI>AhQjyn#hmb$*-@RC)|yA8})o zU^VzK%QZ_qYi%to#HqUNAEMfDH$@=o#gsTr<7=!7`L{p9u=+BGtVm=uXqYAkdk0_n zSoiFm;IPQPH4lKRLL?vAQu;ctd+wG1I};`yYd#cL`iK>wNkaw$zbSe7AN!`11BaI- zzn$>#JARTZcy?Tm>9~;lotw{FqqV}77(@2S{NGcUEEw#awPwC*Qzw2qMbHqDzbdIu zJf=PN$jaCod%GJZepVZQukgV!L{tc2POA@*kc*71bZ_JQSuX|ZuA*_%ap~T|@Naag zqxI+u8Tc0Mj=vV0G`pqLG_-?v2zl-b?+w)|TWY>TY_9A0hY5YkCzPjI)OB@LQEQV* zae0tU%EZlX?)M*oPQ64?#nAF7jH4gn_fNw#oGqD+QR?fpb||mwVqYsT6_dGHW0kkW zPvn^%ptF(@OS~;WE}5=r^LF*E=o8QE$Z$UN(RCjX9B&a9`Rl=)WB;P0n)l)SJS|PP zq+qq|gui`$0ae2ss>o z+Vr+fCf4&c3+nor(AIRiHDN!xp;5Yf_2*+V`lPg5zDv!f?98yT|EM0H71WQd`hh=z z8D!m6`B|S;w4Dwz2Y7M2ycwlEqxg>m;jvZegjp7S!(WyK<2jMEku2N3W2=h&FM;_6 z=kAk;PaVR9SMpg(stq^itrvo;=WTe-#8R5Bt0++-;%s#7;^#DSAYqSD*z03yV=M6f z%7AXof}OK$r`>Z-y!a{TJAd5LU7}`5YtK0}*UvF9_~U1sO10tbI9z4ui|PrQ&)aLG z6Kve`kF?HYHOHMxH$A;Y~pS~G-e>xfQ8O`ao7V20D@pvi<&wFr=Pr%as) z#qGn_svDUz{$_?^t5qf8aUsZP4t>I3+SV=^1kpCtA)6wL*Q<<@Q69E7gyQ}jnfaVfE@NIgc9+Mepjy(p3L z^&0D|zWtp?siK4w(KJta>PqW~HH@ z{_TFz)J2N`MVu4UCvHw|m5ioC{(o98`U%c9E0;iW0y^2FC+lw6{KBY{np5-Z zfEuCv#Pt5N(U7@}w{uB|t$@>=b5702Mi|N!Aa4zjDSzWjH$QpsQe3}+_}Y#u4e1w2 zU(mvp1*qPPwK`QfN<$fi?N6IZu`GUML)-Yv0E(L|hHlfr$|nvWBG&HGI0sx8{dT+e z$JQXq2HJts;4WV{vSV>+Sx^6}6V8wd=3 z>Q%9hu4$TKG43s8m(F@boNkGyx@NKpZk}!waF;6amKkE}98(q)*d5MJl#FUC^{Di) z45l5eqSH90Izrqg1p$UwK7Qnwr+3SoKy59IvlZTZj)AO-hZ+(_CYD@%V)bxdJk;o7 zSKW4Q-MnmDRQQm-4Z;`=^(S(_A_Wrf;k)Fy-Zs{#saq`#Xk`naw9!BJ;e=84N*tIC z`h50>%aT|w_S!qf8Uw~~gJ%d!;(E$AvQ~y|P>gP46HWea{Gk-cA;qn9CE{ZQeH&BS z@T$u7Uyj{jRbJQctnlE@VIk|tBwdrt!p`p@g&Z6=tPg-i*g_LhaCytDjjc`F<9`Zx zb8UtcyV0JQTokDQ5mbn>8~`H1>>H8>d?F>q-=FX@gf4FMpy_nPh9N~DcR|OZkH?^c zFnj@#cIWgPo+AP3pEvnii|(<5CyfIFSWc5|H&+ziygwv?x8nJK2GHONO0-YD$Z}!+ zYV36ZAlw*Dh4JXT;b+M1N{0vv-yXH_5IkhR<4ivk43-BuSA|g;2JFZ;8tZHLi7L68 zhqQZ6&#T5%+twRFx7|xgJOk&!2M6yNqLu-b@?S@8*@(~y|I2W7*S^+w=K%@~CgPQn zPFz_@5~PJ_mEbBmRJcIr#N?7|tqzZ}wtWx^GDChAR|0`ULuM1p8xhA z)jePqvKknPO1&)bE@_x!DAIe<46N>gEsrHx$+Gn%yOPPR z&o zugJ%MAg->C&TrV#tu$Yn3QP2-WB5=A{YtVKiD9)FB>J5cGR|=CZu44e%<22|}oc7|0nz47p3!%=gBH_nLRB76@gBv!^f z>sv1pnx76*bz=LGXXNn6=?DinmpNnt+!MFfIsxhta`nFdTMXVhxTzARnvd*-UjezV z>@$ca>^J1;NYJs#T}dW~qystA6%RG0bInXUe^1}cU_~CU2cNzNJAmhu`_iB>Q#$fJ)Mz;BS38l9uWH(;3{+6&`9V3>ru{NVLD{JTe>n$6m6-GvB ze@$m4M=?$>U#-tWj9IaspFm;XU5!Y2U0m~adhb3JPZXJ$I`X953JC$QsB$FN3v;WW ze)SAeikdsWF|z4ky)NxFnosFkcekhju^;sIH3qsQ-`)~@uRbG=*IZ2Oi03f(Y#wW~ zA59iRSi8+6-&hmS6M83QU|7;z6+((L`mvA5rF1@x=F6)KaRUO8?cxY-SvwdGuLpGS zrRU`-zcK3k$wJ6ao_laVg`r^jJ5qcfS#wDe^Znzb+&PQCnFI0mam}$?@DRKzd-wz< z{05TJO?0pDdG@%a+bJz=N7GwiPZ|{#-X!}9KVHf{T?;fgG`_{dY%A#b0w2TJaGH)} zoGwvK$A!37Har@Cx5a;Z7xeOtcu5>t+4(+_yEsGSI+`ZMw=Wo+2=(`TBa-^F zr_4g%;U}u{c2}#Jrjb|E>tM9!VVdTutIw(q)qhk{A(u+n z4#V7!S&g2Z-}VniWSS^_BrBZQK+*Vd!hCS?3qkwqMlur<6Y!8qoab!l%5v|0+qq-J z#OV9JAbj-08L`idllc*Gw~Y z2Jo=0K**>i$-CT*5G2`CokuNgKK^GY3L`qf;|vQS!mRcNW}<(K zlHOn!xumhpPg2HZ-;`2ZN$Ec%pL?=yFSA6rE;CxV&g~wtPkUkSI5p+G?6#E| zprKB&W=@_uDd}w&>p8Dr8gyS7kpRm{@jP?7#xLYUt4jn{(yl@+yr7G$Pa9kUI0U3@ zN`9^Ycs`|awM<>tUk~)(Ej1ot_SgiS_RF?gVccJ#_hVKXV<{YY#w;i+zr%*H)W;#o zkJ6W)hrz1gAUYRDg zu8{CXeC5U5#r|o*(OkNdS!A1_T*{AFf3efHf)et(+rf% zd_dr$tw28OE^FZZEr!5n>iV8-Y`O5HiBN$}g&zOAD_0c}Q7$8vYxas$43eL|j= z=|Sx0k1@W{3uQ%b8-tGq_g_%PI$8YN%{0tNVXLz%lk6HU#qD42FI;1DRGZVJld&ruTJjs^4iE}9Yo#eI@%EJ;ZjZauc*At zBu`k+SW6qT!g!7cXkm)Qo{7{~jV%7k-5 z)u$fuoy?sKEV(8z$Db%FyxfXf*!a2osv(SZg`Ar*w*zGml38dJYKeY4E0m7L4{jT_ z2O4P+_J3{cAl{WpJl?-K#HNTA0=zB9rC5#CWkZh|!Fs+jCEb=!m zp)bykd#cE}kpetzgzAUVl!Vl|&e`!LRQDHmjk8J4q8iQrdHz@ElF;kBo`6f=z0cJMNlqZJ$6)H(xj4P|6qAT-sE{sR_$%Sw2X zD6u7Xe*=%fB!@T5>f00k=#(Q!zKn}H9f@anjfwSm&xU8QlRV@$dt^nMRiGQ+qVrkQ z+gbvo7}LS!!uqS0B#$!nvC@8D@7?h>A^iZ?4CsOl{o5h(F>O3^6-vMym2vJ~S2Xzk z`co|vaz|VIPKgn#Wn~!Wh!A!to1&16dl_ny^R|iC3`CLb!-tEuz>Q%dpG%)LA9nFj zGJio$F2AX=2AMrg(_8d_=pDmejLpowuf!X;F zf@!KRC#CWEA!gDX6Y*Nqs&ZZegJrkJx1a&7 zWc361%P2t5IRvOEt>0W!W$RLURhfuMUt1bdb4`LxuhRbO82F}XEx$^EKN(b~LrTFe z(iyy+CcpH3(l`qJ#?!7D)-sWoX;tN!)%#0A-qv}7pY;u)GhWz6PAnRkd@vP#_QU+7 zW}$i5>l)xkQc;aCOkNTqS*+-rtsGaVzo?(|N?kM*l=;CeM9;$%Jg~;(^Grb&O)AGG zBXKUfTubL(Z;XmqQRAWU2$AxV$~E>tX3fKg*Mws>jM-Kj%g<}ZG91Do9=?_w(bteT zZGV2|E%D1-VHWHD8;V|r0wLb;Lrf)+F$%;injk5m%Drh8FsJkr60|?VK?QsiXMfeT zkQKk54W02aTRViA>#MP^AEKye8106St7Q6?xg@4%ci))&j-si0yqxK9{bB(>LE#yH ztSc_wS(#jJLoAKaSF)L|dH5Z{EQk|SQO)eOgJcyKXJ43f&!}nM3iO?*^ukaCrW$g% z4g%6gIH^1Y`DVzaQ01a+GkJmS`@i*|%|L^5c8X85Hr`~+A}{KVS&_1>rgwLa;^ywt zcZ~>mu5v1nBhZ~+d$7D>-F#P@38Oi$6GB7%*KM{RE4u!8nJ;3v_(Dg4chn%%mq~kx z-^_wZ6ZiFeTCS#aP<;4z*AVHKfJcGL-;4^xWpFxiSuIHRFEXjp{VGBzKR^G_hW~xr z9sfl~SvZ@Xa9`fjK0${rP~r#cM*(HjwhQ-TlfC<8#WB6WP;hIv#HA%M^`}iU!nS?wR@~N-Jp2)K}~=}FZFN5hg~N; zJZU<=NPc`OZR}>2&N2Hx8XKEl^8D$$OZPD9Gxy|MY7(RF`nN2~-s1d=)&TL-g#4^a zH!J^mA*P;u>bWYWVndB!2Ql3kVShoz<4S!|{SLSu+*+yz8Lgp} zUR&qva-PpWR7-_SN`ZaN{d6pB>Uhh*;Hsy>39eW#=81Jy&$N=DyDY$wSQ+F_OqSBH z;(O$D^_A^~fdbm{?|A=9*ld-J!ouTcrCG<1cF8{y*=duH{TAL$#hWe`eziJ<+100G zF8Yh_K}=02r~~iY2X)B~TH`SjDRt$y876MCcqZ%rY1G*^pIUm*w7>q`ekYKb^utU< z+5T$!hxF-&BTt@fC2c10)w7sKjJmidhK$=Suq1y(+|~KH$7jj=AF_n*^A)WSWV%$N zYegqLghb*A(a8r-@wyx}Hq(znpZ zvfE>nc|Mk=#?EmN9d1Nz@r~bsX!2$^&p=L(91a$8!Cwibl`91)#v#|>nMnS_t(V++ zgXVj&Y$yfr2AR^N^khTARX!rK10TZGJ(awef`IB=*aZcmP8og%p|QKch-^%Dz>A8u`Jx%&v42YR5S#Oxdma@V5*E#Fn1xd=a~$BsMuuX14CPGl@? zpRy<_1d)H4#EiFdYls(aruafi5c^bgBDbDhYX;NI(uFDRBhpgV&4Q}l z^QsT4_v`Hc%{E^YlwRT2MG>`Pg(sY5Y2It^M*fD3Gytpe=N+Z@5)$8g*@PZfX6$qO zRqNimxo=|pJ!gf;&-oj2D2i;p;~l#!F*_m6j!_IC z2-eueSuWr^AUV7tyG~Tp_&(L1e#^wPhPJAIpSL}3MvE2)x9`V~WO#_9v_bdp6*dy{ zi`=dE@QE0;QnNX^8$bKt&!JMJiEl2F3_p-%I;;bcVy0{?p zl%rg|ESp!)HTRH^aQC+mGPhMJZlu5ZSoag(-i?(SFkMh+|6JNfYE72+!4e^1VohTm z_b)$9t=HyqD46)!U*GugY>N^)IeAjklDNC<9FeXusHW#|ynGVzA5~;(N%ubc%;qvD z5K$54db_MGWIYNh#8M4ff9%ul3;((Dp>>m2{p5o54{rEN!!n&lNLF^*JBUspV@(tK zZtKR3b8)yR6hs;hcKE41Sg9AqETp6Q4DDg4dt?~X$u3(7?l}Pxygv@p z6Q`R~<{(&=m>yHY@<;zlk;fj6kdoBmxuM{j;rR|Jc0a;HFSEiQ00!SUtc?h_P589( z9ohSBhiv?9Py51cX1f#y2PrX%aDq8JQB^u(uJ9>=vD^LO(Dw4bgeu#0fQRooFJ4ov z07?!<89eP`Se=45{4QNx8qql(pZ9d%OD=<^7AnEwpvz}`gMcIXM-nc0*w(iEhIF?m ze*w5330Xy7-!|IfxB}x9U*zR!5}$o~ylW>-8E)j0BF*B&JZXc{vCQLp8cpd&@qg5c zf~dVVKyOn@_}VUOib?!kwrqrN)sXbEp?fa5R*4xNDvWlhDi~jFX0fQ_#4yGI{4OoT zoK$!c0YJPuQDfF_=ir`;Ud;EFjQND#H=MHrVV4;{M>V|^&zeNHB|lK^lWKl$vO<Ve2$VX#;F**BfF4cINMqf>=t7K$K5m7~F5?+-l#=kC zLwIa(-OK2#+1CLw@(On|@{?zd1&Q;wZ?+wr_)WLpUc;=OLoXa|%(|VZ&Wr>3X&Z@p3 zK2tM}Hw1|H)XlmH6M1YsQq&^RIsL=6NiC_E zFvI;ttDxv@tQ3du^Zuyq@CHAr&m}^a-|ZwxS2K#HDnd_k96Z0HjP|ZM&ZiCMQ%v0b z#B7WtV<4#Zm=@+6p59L7)4=b}k6HTDc!9A)5oYOy1OjIMuvw;_n@SZ}s09^);UcbHQIs zl9%t)-|+ULE6M0$0iHg3Bd=YtsTGX>_A)-JzYeIX(v2qJFaD+D$uCR(N4+>GnNAk$ z+8QlP55}loK}Zti`w*;*w<g*4KHlJQKDyBc^RCH&P8$TI{SXz?vP2as+oFIi;Vx*G?()!3xSq;0y#Mazqw`F za*`>$7w4CKbxxq}4*V{+NAM|%5oa1MA3k_)nAj%FUJccGG`>|PEVo_sI=M3WKdOyJ z4F}3_CzB^xaFy4gYY9a7)W+rh<12P)Z}C~y?k&}KC!A>7G~am|!f0CMr#8om@ZkwP ziX?d`!8@z`{37-k%n=m&tCh8v?`}ig#j{>Jw+xBH{MXJM+WbZj_tJmPYX7rXE>`%% z$Q-?7q?F>;h3U9S=DPd}eLgoSUas?f%j}U;{JNZ7jv)_^HzpNRiF>4EuGvLAA4ki?UAf zr?p+7fP?Vqh+C{S33`CrH+rKr8j>RJVFUs?;rr+_a^1EZKZ|FB$~AGdWsUY^MYb>F z=A#aLUjY5R4ZX_Pvm66w^cO61Q@xgKv1_jN#$7<1O=k>Q>VTg|c9t)aUp0;$%`ZOR z+G4v3+Hp8Qb@UwI=Gq^=a?wm_r48Rl9A8>*wB?^FfO$v<*lm=~qrK~1-QM>ysWI_~ z%@w#Qi>d}Q-^1v{e}*=AMCK63e(vXmiC)nHm*qeVir}4I`Y&1$3$6j*&uq8 z?0Z{DntMXda}}D(IEDXr;_|oEOvHS(N{&VxT*ds9fxHRhaj4?YIg;hcj^@Nj?5H

m7d504q7u$VZQP{iSk8~fpo6DipyPR(>YiWeqM>nm*0HNvBkyE7N=pv~j!QMRgeQF9vOj50JU5>%;=gM?Q-NI<(L| z=ii6Y{ooB^g(+jM__K2Iv0yfa zep{XEdm?kfhaqj}axZyh{ zpjt()Jr}A0bq!~VX{OzRfbyzzv~BM)5%98OI#7$pwSgnpqCk=?`2PiX{PUKuxgtlM zWJSa0q30Me+^*4lSD=siHd2b}eR|C3PKW~>0OYuChFm6pgVvb4d29dBpnD|wIe5nv z&Y{W{WYxRm-k4r4JTfToF<`WRqXWRHRC-PNmCMeb@7B~CN4jlf8{*oPt=b?n?o6m< zfByWN{xK+qh%OzWbNQ_3S94NdnbVWHE_}_ypOB1klF=NVke{xGv~vO$ubtjR8-*mY zZbD#oGUod4-)`%;eLPN57ul;>>N6l9UVHCLWCmdrGOc~=@G_hO1EGd2UU5~tkeYSP79Di585aw^MU~fnSaHg)_ zZ=Celq4b4*`5s%F)B~a@s`jgHs3rhJ%?<3edO@Y|!f1xWfhz`z8&SE(?Nyu>%_=6# z={r6b563)IL&Cu_N4AEsFfPJ&{oJRmG)}=^u?F(a7}2AO0R*mC$Fzh(2DhnvHKam;s0d@b{XxuX(SmF6cMRTu|8DzncER z8vG$#8It>ZY-yWvCp30Xd@6_BRrR=y$C)=6p-YI_)mgdZ@~mE*wYAXUoEub?+gGW* zrF_LU!_johMt5;}b<-Eg4Jhg75g0N!D@gQ2h*VCbMFoPHJ6+JR93d}SFOOh6gyBrn zp`>pG$(m9+)YL+^dK=LR5%z`*I^2M}ca)FB41a;e7jkiQ@J{en zs_k+S)M`TYZuC^eu2B8l{L_M(R^EON{P!Li$u>GgI6oxVtJ%(-UxohEK}tI%s2_h7{4q&r3@0 zMYxv+nXWB<{rvaY>iHoC_``z7_~)Eg#XA}$I;OtPFV5>40NxdqmAbcpgA>rN$nxEt zwV90#rB9e#0&weRFHe5nIYI;3PD#!t7v>@u{c|wsuFiqx2)UJyai!hN+R7?$dY8s9 zHN&34ho70XPYSB0R9VEK;D2=v@+Q*+{X9AU|CAQ>%Zk;`OIVwk^VgD(9-dXldLRBt z$`INM*nNLx)PNSyccb-Kk$*vp9S&p`>;=@iK7nWe(oh0x!(>Fc9^yA^~O!`pnW zLC~L+hHR%ad^$j4)o7pfL|Xiq%l%DKeww>k07=)PUV+?-t2+^W zM++(tc_Vnw;ZB0h*uU!%$p#$B!MvB?OaC4I+ntX4*DPn|hrf|@j(D}LzPz1!JxO0% z>oHXN$k0H0G+1=O?7^ztteM7y_`a+NDJj(7zwXr3tOV+FP1I}UbpWtolmsoAytgeG zJnP?iCKt+*mH_>M=x%3Wuz%ox26`r*RL>lJAt$eS24pKQ<83@XRFEG|L)DhpiE`f_ zx;=G#+AoNK6{a4MA@AMqLH2J|eOQ6C=J6VgpZ)veDxczQ!}|kTR4M9Plis!y0O_K~ z@-%v!c3)$BkL zr1d|F&cmPT?~mi8s1zZ4W{b$)S1LPXZ?{6?X0OY=D6{Ml%1qhoW?uW+BN@54_PV%n zjeE`O;(mYk_Xpr{A3pbU&U?I`&ucY{vBQIhFovsAsN#?9dc*aC$g`J11C^rrPOhTj zTXdYh*FLw((kJQ88t?SHE%oC#-HRne3GOvc;g!-YoB|hU>4P<}$^1l`v8mCGi2To$Q zLj8J|<#KvdQaaj@KQf=u{d4-taO5POYtdY^pWj*B?ckowfj`-AEF@&}-gKL^*A-5Q zkN2hDpE?2LsY4j{@>XJ&$w*P9w0@x!9j!l}VC5w;_vi>UA=lyS6%SC0Sh2ww)_j)R zzqi!27QeB|#e_mk<-3t22v%j=f%Uyx+VITD`$vV|PN~5UjZ2MUO9ik@K{;O#)lfvW zp;-0Za9XfySEnd$>9SK07g~hWdb8l^>=*6L$v%8=r6HAfl1yo12$2EyF+LCvUG|kB zBQ|;7G$+cz?h(H6{Y%%a@D8^vT<4bRAzO>S?ptoNJc}4br8_i-)Ql;v5V4B`Ri@Jg zs*1hVYC4r_iU4*Qy<1m{$fw>k0-Kkjc*WgRn8Dhx=gj>4zzuH!H(|mPd##l#C z-wLyuK&gXJy0O>$A!dPlI%7Jp@PRUW0#V(XHoW0mdN`g=8Des7)z(x!9xgV`4+8 zwBhYFUGht5e9h5QWHEPZJqNOUcK$9%>tU+iF{zD5`Uj{}9*;>BnmmC~$J;4C2|j_q z=dGF2%03)#d_=Ykz95z)R}s9{22w`XzGjMgpzg{c?Dq$~NSz@lR&>+@T4SE8B!Iz;`TvYP*-nQfDf}1{&1^z{qZqhZkCru!AWUK zg;}1Ss_aZVHy+a4DUV}XaQB^Gw3qw%;Opbx`23cC!B_{4NHvkQaRvgFeRIpFWPZNx z6imqh`Rk(&+H|@43J@ZAt($_=yTcxQa$|TL-GG)AO<@e;?vNd1KRa8(It`+LclY+& z)rb?EU2*GdTX&mJy4f)_wJ<%)-ZzrJ4(erIdK-Mp^-AtkCAhAgEc}yk(=mIsSY)#G zoGKRs=jr^}Dc%d<3tP0EE~ymQ;bED2^d1>BxA%Uw)@A(qDx=ciA@Nj$oiAzf**dr5 zwxXja2m%TidBsyjt&2f4bBCM*Ka*6zG`#?dw*;%Tw$UJy&cq*6l8K0{I~vjtzaz{t zhEI8#Ylde^3f=wpulz4gfiv*O(aMfvK$O$C8i>3_eTUGYP)Q4BT9?S@x{#P`tQ)!3 z5TS6xcR+KP=DGrn=Mpq>a0On_U)-2wgJ0<{!Sf%mXF7{oXm;^FAcvxkwh9{Q`{>!h zXM<-vqSH_z?&v?Yzgk)FADMi;&FN?^I@)}IYS?8NkI8MTsvq(LFIPjzcP9<>KV;md zm7YfW!OWoCPcgloGXRpnbOD44;JuO^kJjIQEOuA%8)GHD)(&XJNirjrvo zlA3qeR#Wsgg2-=36v*Y`&Ep5#R)%a^$m?zojJ^B(Os^@7L^ETQ5`wx_Z_ID0t z?MVYavcEW*nmWiOz)eT!9%_o+zH~^YN-rQ2+7F66u9^g=Uxp6@SQLxmSGjcL;~L( zD(2r#@4s!DcruGz^frdAdJ?FYFZvwi8|$ZQid#PE9&+#d3_2xOyMuekOOS?b5R{em z*7fhNKY05Lo|8Y&CRl%$@N{v-fKT=YT6t8j44h+&AMG)&avb81-Hf68aOb4btXiyv z&m`)#bH=cL&X)Ms!|wrr2BFizZ2ab(g}}(%)esB2%(yWD4ka$9>Q_r3=>>_@^AFcl zT$iKwgu*<(Z)DeLC3=}L>2{6e`t#&05cMr5(6Y7(w>^>(v82g$Oq?E7HEaB3nK$kGlP|kB$Gq`bog!!bFgI4i zY|4i3Z9?XwBz2X)%-rvz5485}X97Z>S$Cv?ii!4rSbsB&j!Y(k%8n)vOMwU^P zX;mXE?`xI0w9cF9I?ev;Y)kr!&{uV>IXLu#)1+f95W7#|r)n(tgTuMw&`5)x}LO^y?>IFMb{BX0O2B zw*?Pj=j-IF9U-56(_E?8#*0>5A@;OQO}B(u0LjX(1B zvzWC9LTj)7My3;{6SQ34TijIh^)nn+sQw`=ZW_%0?z`nOCk?FFB6I(FhN*0R$h6)G zyF%T!TRh(?{)SdqQOol&Qed!pcHgqK1RE74 z*_lXI*)M`OxZSjhzNUu@`03;^&$B2QDLXk7M7jL=!9Vv&@$-sZm{OlqC5ga<;pw1oX{ z{+)?&#{RqO*1tMV=l<_)Oz`*A4vy*^x(f}Y>Mcyn^bgd}Mm%b&3Jo`><0kb`FU_qYFoBbe_z=)B(W7frH3JZtdQ z9E3eJ40}b;A2-3}O}T-<&uecS*3g?plJz#1pnnC?K+Y4dYgkK?0&b>QzOE>xzpU4j zeTstmbY71y*Ay;#Vd9;f@eXqPZh6^8!e)4;ZS|8u>NGacf_rjiH7+q zs@=4o6b`>=__%_wB%KC=S2y5x(_|u|?~&!Y-4rDYO~Q3ax|`i(`{IF_wp#595bLBo zJhBW7Uh7mRu&yU3s#GWC6z&wb)W&H$JYDUv-g`ZOoG9=zg1kasDw79KexwnNn^5!C z{l?G=a0zi9{YUpi_}Zg6ktErKTwi0Zp!Zkm)u51`(0JVmsML+If;$yL_Y5|hX(9+D zfv(G|%HakFtxE^Im&4zW&5ilLLsRD*?|vw~Ugvt?H+2Cy`nxNldN|xKR9#)u;dlj2 z2%ZWHpNTEmR*4giWyvd<*K~cC#>z628f7@xaxKdoFOjX@X0Lhlg?%7oT9j$mGJ>6# z?87*!(qP{)t*YG)VG>&0uduOFwFt>Ac&SnBrT;K{Gj8IyZHG}-FE3|~)ijz+oLRfz zoHZp|pj146=hKCfH)Br7Q$c0Ycqi>dr?3q;xvSMbAje8@v z%HKSmR{2nkp;jL~J%wP`y+^o%^{gIxYTLzk0NIJg3s7yVn~+1@4XV7KxvTi(@*Rcb z?0tYbR40=a*9G3o4B%gXXO*%Xxt%2ISdQl99bD(8hJ;#KBnn2%*8N0i59;ITX~6=v zc$ci4VqSH4!9$mndy7PrkV<``@XlP@@}Aw_+2uu~CFCnfsR^GqI$ib5Heb%-&*XVj z+Xe(DJ_(?}lI~BbJ?x~I@;@(vB)$*_R(#|A;H$xv)S-t_v!eHbpxfvfG@@Y*iiksI z3mYfp*L!5B9Oj^ax^a)U>v24}K@pqU5Hpbz>pyS$V&hf8`YG|k+_KWPguT+wJ-Z%W zda}r$9@IJSfie%|Nbbp#)zN9gNyQe&2(U3i2QjZy3dmyi#9-K`OY!xBy{E*aJYNwT zAEuuh9vH4jT?#+*fEZ014_Fp7svbJ5PiJoN3?^C z6yx?8!&OAE51U4?5e>~ss{L2}=0EDiO7Jj5alerMPaiMhzCVKI1o24)-gAoU@63r; z4lM3V=3AcSg}7md{-aQ0ZY!bx6h<@Y()bHUG`M}uQsEUZ6{6aYBOtTI%Qu}6X4k}^ zTl3ehpq)kuFv}cvaN3Qmf^|)kc%PW^X6lJF_d16IrgtWzZL@Ok0|Vecrz^kd|Futc znHsyEhSaZrUZFL4fRZcjGz=BBPBVDiO#{ln*BeVM)vcB5-p&Ybwq zr&o14=jQ2SGU%}1OH>&X~($XILJ6E~RQj|*aBq)bfJc^!nNI8X1BXF6vFlb&H7EswX`aC zh+Jcl3B}?Cw(nRyb#2fNzo|oYs-NMhfVh(K;*mo4yPo?58?!(o^_w*!Po^#dLQ8t9 zbd&G1K78TDzuKvq>`DI9(S|;28g~~Ovh(_T)pz%WzPO6#Lh@C@RZOe38IBI`Tea_w z9dr{hANX+5u-JChwFO<$;30DoPi&fTSTJ+FBtj^o^_wi);O#gi<}NVnK(=RkIjtE7 ze5`m(hpMF#AlW>nrg{I2<;+)*a^USJoVqfXC18b?tuwrT@o&$9Y$-1z6!2#_xV-kz zNbu!Ozp*{T>}uR*BaCA^=1>nR9WL?q#ahaq65y+Rk4B`wE^R#L_i6#wOslV#W4^)4 zSdzTA1}M2!jL#zYGmyCzKKo}nvr5U5KMEnY_ zz0sIv1Oo=_ZM2y-Tl>-;AqBqIw7t0c0T2R|$X9ll+q_6nn~kT+k|JLdA$oPmchc{wQtf%^kWl=!rx2^O z%V%zK%{5YTmDgK_Z#+ofq{;ubXIqUMU+?@}y-h5sESt+y&_laD`djDtc+;+QB8X&v z3~W#%cmFSW%eHORW3unNPXssNM|?6h6mD^0C{D-@IdN8_JTXb_r2}}@qJ16`V;Op7 zOoi8pK~L?`Rr)bEzZH?zUQH#0Skd^r@emOAa9^+{|3Xy7;=9ayp!6KeB~N2~{#+Ta z9_|>Pklv?I+p~8(>Tgnc+dTKaXTgvNk89uwsZlNVrAnoZTwqEYA~UeWCwmv+>^1Au zMOK7*1H>=&rUJxMi|R&L(!Hb^3`EB!W=V`jMj@+|(~0j#$>z*i_vL`8ey6wd%s9&H zC&N{HUM6H2M1T)(H;~oQZL{!@4E!%TV5bpr+fL2i9T76(S{`j~g70mT7Xuat?`KJ2 z&I+Dh>ed4or)OsN1mLniKK=aceczu7*Z&60x)yK{*Y0)=1d#S`ko`O)c&&{tu)t){ z=;{K4t~MJ4HY7&^B<#r1P^qMo4$I}~7k<_b_MKhebDSO@PI`Nxe7qUTfA#Zydq5R0 zBjN44d1ku0IXy6~7@J5q9|l1YFtpxL22s&d6vED7m;W4H5`32};q~oz zViT8|Pb;zyKB1l_?>X}1ZDwkG<$F`nTXT!O>um2l?ua+KfbH@Ip3d#qf!ao3I)&^H zYSV4g<@WYV3%+dm=Z@+FNqvF`Wg359YEWn@M81r$xm~r^LUsIqv{-piQ>$GYaHdQQ z1l!&rOMmgS-5N~(8Glby%OnmIDE@XTD0gq<;>p344X7SX4D^=V>98B^P~A08<}qgJ zAqpP7lRd{EjZbP1a5ZddR_M_eZmpoPlAvcTwJYz&O(_Qv=w}V7PIljf-s>fJzK+a~WLF=jxZ^o?TQacdINawUliP}2csB`A9hTaNf~w<1 zPGNA4(WUmvLg9;>`x~nTCh1dm?woY*s+{pMcRrkbH{ijlBfY%ySfAy|nR1+l?x6}- z!0|CGR!yuFzNfi%6^?$tER)ki980~K{v5d$o^4vRvB8l1B{#jmQwFq*cuOCFpoKc& zu)3&#N46M~seN>?+EaMeE(~*xS|KvQsYEsxqn5pGR`jFMtx`Cxv$bQt;TZc}38L-@ zC$$wcah%03i{G;9o7oe4Nb&YdL@8Vyn~y8)1N(=12+s?_kFJf9J7u|UnaK|W+u(V9mL@qiA5Sa_%xe7C4wBY>f z4oNid_n%pQl!ioOKCR(SnptX>v;>8^Ib~WXbyp9`)r0aW;s(?*;z)C+d zOewGnlRncPH@KG>ly1EfnCv|9`)`BkNahPhYCjZwrUTZ;@rexU6)t>e^b1We9?s?R zyVSsR1Z#Y1JfH&)S~~gMcXYy^e!aN_&(9@K_E9h9)3gLz zE4a=Iao4|+rI1kUR|ZnF6^T~Uagv|OUh}M;e=&S(;EAU%LhL%^UWi49&VZv@TV1-> zCqe0s0uoN>{4mJLTn~AN~ zi1vrE2$u%H#Ravzd)d{JkFasaVh<}q42YyoS9$GR&s2<~=+vV%Mh8RhqU3gZ5uV0z zu+!;BoJ4lfGB>hayKY%~Ma@+7T$j7$>?*Y1E~kePs@vL%+sY7VTpoCuTJY7Wh72** z*mc1JyXNncB>r9k#-dioexBw0g51fy3dPR!p!DtQ-LIOImsn;hw;%_Rm!Yto$CcH8 zc2f!um)S=4C|H!J$`5Q6ft(~^@IGz$^_*|7t@mhXyFn~eyToqPcnaZg+SsYk*LYsp%(;NiWG z*aC9qS!O~`6*J`l5Lw#csP0($QIegN9>E8tpcHgY#vqqFoYvso#?)YyRY!Yct|rvX zZj2UPh{M?Y?S(!^6`ls!Aa>~3hhkALT=!l zr$x7d!N)rfm7NyTq*0SCQaqihtK2kNxXid;S~RJx%k#3|tW#siw?ZAWna;`^A4~OB z1}4LC;TqWSkvyBJq_e3Lueq?1p3!h0;qssTmB7W^Hd=hU&Gh;6V} zwb@YiWcQ&p!aU4ddg^R@xziXQw3mZExDSrNm?zeFd~`IN?oL-4Q;6{Xeg~%>R#fg% zYayg4F5I+&3|qRvf%LX-gN+kOZK1a=TnNurgJO=8e_e{;od_j*4sdtjt_5udUzv(O z229vN=HNTZ|Vwik6ENq&Wsc}Fdb6NJ;hAg#q zgMIGlDNGtKTn{PVF|2YJX+?X=w9^&g#4GOSDZwDbi>y?cFHPa7!g0dSo@_*{vmI?q z5cPoWD{p%JzI4MD2@Z+;KYBHB7<)y1#%(>NF2Uo9>r}+%9=)yI^bQ^=;ZJGV{P(&XD?a3kcY(WgF0BE-#Yku$?Wh z(4#I6|N8TqoZ1Z$vXn+8bBwh7*Y3~DYx%Ovb#^B4MwV{ln&a{xYrwgSExIn0R?BJW zhKQX$)%Wkn0`q%S)z>L~joE5U?M9!OwjDj+ydQv3X1>u&TOKyqwGo0$d-Z8ye0Wbs z@j2;j{Bt*(?RDiltI)`D_3fFR%1! zeHB?aXd8AClfEk$XC7rWV8>iss*$o&R-wBS&hcjwowj?PlgwOQvLNvuip*5v&+FI{ z?J%?}pW6#kt}-E|dYioxZ}#7_3gCVs_~KI@>m}&n^aqMGO_7Lj4#AEEX&C<{s;&s= zN_I`Z%B}|gdHI|zCG14ZIpT42=bPZO5|z)TH+P?mmjcQ4{1J8|K7Mi|wW_v;l`_Oh z-f_z^g&~Di2|H7@{N6fDTkvD|c*k3#>iROdj9pdHe>!qWoFj33-~mHhR_*yEtIg|4 z>J<%=)OyM4sz}$j*%lTrj?T^g)?&-w%xkK!V3Y@R$O9nd;?}#3-{_v~9hhp}_oi&l z`HdT z%=#EMRw#H-ojB2G%O9WsmEw|F{-G$jH$Y==Rr+s6Vf#mgq~g6$KS!T6w!L(lB+>h| z<|3u~$9XE$7B~NNeYj<2^uyPd?)J_pZ>WE(VB1LeGXHF|lp z+|OP7^ZiR2MnK5bLvh&MaR}P3fYz=4JZk7k=AG39G!=O|enK1#e^QU5``XEsclnL~ zsq4#|svS4UQ|91`$oRyv1A)zrpReVLS?)YEFbs0|{HKZ4kk{ztk@YgPn&pcsPcKh#sg1TJ zkw!;zY%T7Dm%{O#H^Jr7*cJ2`o={{}^EcCBG_6HoimDr%Bny<#LL0N%ONY8|8RT`? znx(_PQ~kRU$a9yFx9;$89$e)+Vc*wsOUzVPnP({$W1`|)9uR)05Ov}qwS)O*wR?e& zIqF{Kb?{pwHKZ%#1>ZmYJHL3h@Z%jb*pTk^NMwF&?$yewaU#Pd`0v_`^JIjv&+UeP zPLzFl-Bg8_gQaXRa{rI=(!XJHW?ifyrWTQ@C01_t+oH&Lzj=&~PFD#nQUluKouwt+ zHU;oNwY?~z<{j-V$VP?4hEXH6x0BC#rIdE)oqDN~I62|Pv0u)=!)pj81F8%Ow-3oCm~aMgj4|tyb%mDr z*4-}8Tja$Mb@%(Fddmi+TVK8x<>e(VJsVIk-QJmyh}J*a)E-UU`)HrseZUP;>2W8H zC;FHC72wECar?U*wy*c##a#@bh*9+(cxdBdB_`}K_<>w=!v(j1VPp2ZU^4ZMKVM1w z#(reZ$n*<5Z!DA*4|FH9cWmGOC?f4SYq6Tk^(w>zKFSNi}Py!zBNfH<`RI$&>&Gjp+P-= zsZnsjWb~K+*Cz$jWv0|*$Ht%Nf?EW$bztN`x_lK!DA6t>=}=xdqm6o;g2+3bB%a@B z>)|I9fGAy5>R#|eS5vKZCO+EiFR85-9v+q$^-3L9V<2vy5^HHgkQB8PtPnE1EA4lYjqooo_5Aa&>D5&(> zIR^f%58#|&@iKi8^D%k6v;<20B4S!RbrA6H-3F`%)9Gdfr1N*sp58zHHJ?VsC9_MP z7D}-bsv7t2gf~*GX25ga|MQ&U!&WZ%cR&^mqu0KGP_{Kgeqf!Ha!)T65|; z>ZnBUaFXBcWX5|%k7!dkw}~ev(O-ugk^AXbMkp5&D*FTMYJxL|#|Qg3m2obBXa`+P z+3rA>KYScSK#z`-a&T?E0O{uRmxO$HnxUZUJ=@_1?O8NJMCnS$52&$p`EaWJ(fZyq z)0SH4*t|3mH(JF^dUo=&hhQ4DO?Wq%%RfI??T^TWqka$6He|_=QsGkl2XVHc=$#Or zr0gegH*BgO*@1mNl%|E80j|_9foQ3?6Fbn%6z}si<3_#IYoSw)7^=%7p!TIK?yPr( z*$tioa#T&4S)Z+le=0MMjWA|IA2An{f$6(Ktdb;7s;zWcoBonp`qyV4q!I*^FrDF9 z0mckMCIcqhB|F5R(6EcJH>E6j1+c=y3c^ZnCex$ED2eYMD1cuJo~WWK$=+2|bfecj zw;6!c)coL!=5X>{PAfy_`-#Y8M}Z;1s&(qvjtF8$rm!V@; z1LUnrc%PvF>0W#_2g+db^~cL{ft2Sa$*QrwOUjsugn;9pwmJIpZzf5dN9>x0zr|qK zmYhoH1Dr@4RLA4>S~8~t&`!U2Jpj&dgMCo&!jHT>ZSjhLI)&nrBjstPPVO4n#LnqO zC!*+wDVrj9q{mB9>MS2|Os11^ZtY?vgn_LabqkEk+6$ZW%B%T^WI#)`GU=Av<9~aC zBtQqEWo){s#c+ahmf9kGZQ8?!MDe#~?8jBT*|lm|ho zK$pkB3?a$~TS~1SOJSw)^wEIF(-KU*6FZXzZ_D9n}X-|^)z_#y> z$z`}`-7Mgo&pUJ+9&${3!L6eg-NzACh5n#BAFjXoqa7uW6wWFC-Ieyl>iz!95HwP_ zc^Sd9Ff=2kY*QI-XJ20J&Jn!@b6dYl5g|^@i1pS{CI-7e2D912W1u3SwJQhy!&kZ`Ug+(}siX55-u_TV2R6?gkgz!Rgva@B^9Xw&-Z_NQv0QZwq1nDV->Pl3T1~~gV)$4UcsqALzd|O%u0So3rro)(@2(ff*S}i>MGV7&3+Fo-&9mV?rD%2Ca@*{ zl~^+OkCcmRDyjecnCp{%gskZj*s2%dd|3TzA!x=3EJC!hQY{ox8q}FTy9~TYSW+~R zTVA3QScCOSeLhq01IG=_xaQ`z>u=nW-Xot~Gu7Zu)Ou6lI_+HzyHE=gfveHZ{6F`D zgnoqtVv?55$({LFj=-$d18RfdDxgNTfvo-?-7$@*aO17u8b{uFDobSJ%I+1tPN<$@ z#^E0tWtww8B7Ol-&HU*L*Q@kP*8EbzLfWMtG11=%FuR395KFr4m)OVh^IsNQ)FOVp2tIi&>!Td4#xKJ27eY6Klm&2nNhfPO{DzR8vmTpj47m0DLT_Gnxub18 z4xD8feUeALXRhZPIqdz!qHCN?mOEE2Fd#qxEhUeNm$OCO%;*GElaW-|$!4dApz0O7 zeU{B|DeR$|#vq4PA7uQlEurqHOC^0(8mj*T8|1MS6CcGNZ;u)V4^`!jmEDMs8xKQAyEah`BFCb)$!gry{4njy74v8 zGH*k=?&PJohseTx-7J7F;(AEL6CT8s`%bZC90>vZZy1IT5b|0-*!pQk4sK~hU4P}cZigl8Lnp^Kv2e+-Dk=HDUsZ@Z`2*?8Ri`H&unhZU0e zFBSeC2O}or4lBkJ9tNKE`?SJh_(0kbs;}EWQ1aJUh$xgU{95A(nlO$=+U@AEfy!U$ zJP~~UhLZazax|3YLLK_%FNqtfXUMIq?dY-XYq=0VtJoUc3AY}WXWSS&^xHbf!uC`Hl(XI+Qw$65 z5eg4rpOWzDkW7uL9Asa*yuwai@?IDc+O(0pn$5q+mG^YgGai|ra59|MV!$17vt1TV zyM@~Li#D`*r1rH@i002+T40*W#|0z+BiGKlwiIN*_$rj)t@G->vI*p-yEGPO2PhC(5Nb)#dZ@?4 zBaDuqe{oHN$}y0i!L6Yx$aG7m&Ni7AoW$;*e9zj>Ueh<)`i0UfNa$UtIe?OYSp^Ox z-va}%Mqk{lST#H+q-tE3?-;GfY1R*!defT>z0bGXNwgd>L7oUBB`-H_7sD$yK2QSM zkIA?$awB|jNo0T|n%ol!Ci}R0&(0dz zi7%`qwT#=N*w>P|)@}SR2)a?Z;!;2-#~gC{V4k(tkp=gYAR}rCDTRkiYUP0Z2XwIm zn&irS>dH33O~a-BBGE||Br$>BDL+-_c*nEu2m+IF~a^xQAIJi z-Gw~YB!pD7lyr^6CVANuIw)li1x`xBW`rWo1d9w{7I!?P764i6os&IlOC4 zj(VTCXsZ;>&;6Q4gj@GzrDH&8BaK#4{hvFJnAoLT6|Mj?O%^$N-SG|O<*aXgDHeQc)~OCykw(dEem5ih&<%Ttk|3xkulLo*}d zNt9SmBCv0PmSFhv`XRG*N-xEQ)1?Z-xYVi(&M2z_9NRO)5msHkV_W3tObn=(ON~s; z>>itVGEBvl|4lHD{_{#bZ{M~*t%E0dd|_fMwj};%GY3TVfkH%te6QG!+~3^s-$?7o zM;X8zJkL&AdQBe|d6ne5CW8e|^9Uc;==AE-tUL*qo9gYrt5b z@TK1sj3h;f?I$j$u8y-A^89#|*dCJ0P|otx?Zy|bqwQ@Jc9}FAraT3pe;33{f80i^ z>HxA2P=LvV5&5F_Q?1S&I{dnD!0~j=LDG}v(F3n`y^{lyR%oKw z)T#ZL0)l)axzl0Hp{ETk2ND-1dK#unafVU9+&QL*i3`eU>s$M#8`DVSX!#~s`9}hQ)bfdYqf=8B~F&#ecF1pCDWxrf1hw!)>x%l8~ zy%cX$a*vi<5RDD#bsjy69jssS(s?Buw=`x;T}?z6=XR8;Lsff`yenhBE0ir3WkQh8 z17{c?2htgbL^n1Uu-;Fs_2Z7Nq~cW?(@@zAIJkce!ZI%KI;`cEj4O7wVEuKs2Aa=v0+2(<^(?soz?mA> z#yN%MK92n#O-))Bov!~Vt3)-wvQRKCI-gZ?RGB&s=WQH)jDxb^XBWbbuR*vh9HKmY z2Qsl9QeRkeU8{kR0*Oq96Q0I&4^fdZ&(VInOg;KP@m*Xq9*sWzg8LH-mGIU@wpD+s zqaUm>wAz_wL(0rA^d}ABZWO-WZh~a$^2g4X!KKUrWmAmLalg-`wlW6Q-PfCArhcPy zeMZfqe`w8DrzV(fW+Xt^a^DtjGfusi-jMiE&vfLM{l22^!OL&m_YE3TC`5?j%`q#lp69k`NmS^lKlUfP!2;DCbg%}*g0D^ zEN+!#K4G>}tqjsj(WLlIC#^5$IAo-tqq&N;VYO$ZkcMCXh$Pn}1z~4DmLxmoSX11X%q0ZMx!52KH|do95A2KZ~HA~Z~L2*Mj|FB6}Se|)Ppsy+&?R; z|MfOCRR^ubkk3iSjf2W1i(xxa0o=njFW--Ip;Vpx zSPqsSk9T;vv7SaH%MUiX99T~sTyj=!zXT3~%I0q|jG_1+>yC#Ui$R%IE2|K(`z`_C zqd%I~T+We^<01Gx>chKR@9b_AlwX2caf5McS@TCu0#r2BuSGiGQXcFe6M}cv;nzL( z1qv5CIM&LaGtX|VJ%#?>0G7!xD$VnDBzaUqe>85jO8XxLHFjRI{;Cp;bANN4H0oJ~ z&inm@+t_IVK_l?@0d8+4v6G@NUlI5An~zh`4)wx?+rpJlyx6<-^xRiBRE=b`wRIh( z^B=7(W$$Ep5yDeD)YMht7U$cDk}If7&Je_|)`bNj^`y-!dj5!WiFL1V*E0_;-?Dn| z*1qPYw(QugiyTKBegB+4!~yaYms?#r!k^sqysPlpkUF`*4P!nB;TCLgS-lsUuJ@93 z-+mcrN!pyA7hU-`Qwqp| zqzD7&qpO{n8lf@h6uRQFHFtSHIs`%Badgr6R6x_IxLDInW`sxUKo1lNu!q3 zdz~w2!*7BZ6m-3{u>PCiZS_zqdXMeFmd3LEKRD4egz!$=OOGk&}$nNjPz zo!jXsS9zN@oI` z|2A@KKM)^MpzcBE(r?kA9Zm4`XsK?jaU48wJ}~v_3!XboJL@*}=|<|91`KdnledY@ zqOEvG{5{Cg+}|f#u5^ZJE*35}Jz*m2H%Z|i^`+hM5T0H<@2L;&q_a>E#jznh>PPdf zp~k`*vjXGAWUpV+<1}<|Vc)$Z)wEG*pCd(epTfx3339XJ%C!PVsssfTD^Ee~ynOkS z(}lVuyXdG@Ct;t}Waapm2ZD6WV*G(^$7kiIk_=~@L5HL&{V!g#_;IpQj*-N^&3e|P zQWw*PwAS57&k5{)2tG(gVjWy}R|4}zaT`49@4jV%{odXbi2(Z${KzO?2Skj9%lI5* zknG+LlSX<>>$HaCKu}LuaTK;U?m4yEsodu3(^U)@IxL=0^RuF@4Nt zw}?pU2?o&OUaSOryWr^Mm8$0lmAV{54A>rAJ^;{V^=C#x_-}xh9xp7E$U3sufP4ut z+oc_!#5E*}wu&d)L#wbMcgM2UXFVlv`fS$zBkcR-Ym9f8-TN#n{`?6!NCj5Td!AFw z4MlDEzck3iD3-gm@_Y*;=2}wx?g~y5?S3UY)A+tq`BIpn|MmJf%lw=}h1D1Lw%tY+eI)Bf}f=f5A@@`XgqjV&G_VTcY0Z(s8L-l~5x z?!s^3Zuf2scXP*xZ_;14-mW7oJVU-0jQh>n8D%I@cY}g@co-ddFsKm?(HP|A{by^h zkZKRk9COaxu$$B5?ve=erh3Ig4ax5i|M$-HKZ>^{8~Z3AwxwG{${lI9Kz_yFd3C9U zAhfJ?FzpeI;-MZ&)}BmCzF;m4d0DpKzktRI`g+ZnPLnr5XFkASvhMem*W*6jE{e23 z{A^gM;JH^naK3&3z=hY&!-Xvv2JiAAKEgcHDKvS1+bMg3_x6ryzT?OD%y9L+wH;@% zk4Af}Gg2paR<8{zFC6CUV3U#V=C(hICZY4>Q1SIK)AnqXF_w6u{;ZGu%(e3qb6dH$ z+SC*$j2=8(#VzNBhUdA11JPZlD(|z1h|gd3|1byrdU@+I`2REI^NS+VRG1W=wf~~p zMh=WLoRSYpWw~cB7`z`o?pR9buo}?dk_#m->fe$`2XC=1uC(o?rlYvAR(I6d1`a~^ zJTze69?JN-$?j?pbn|=lNz=IfhC1!EaHHS!jI7pg+s&C#d`;|^kMb;$5~#E7{mKnJBT6T7`8v#EALTLG{jZ#*Kllv zh<)Ge*iCLa>GL?(*f53dPWBn?&uH2Uh+D~ZkFFcuDo5L?=gHO3s|z}Nf~@_oEE8nF zP;tk%qd=6=jlOhm>&GHV2pDwZ3bM`{g}4(Y1~v`Ai^R;(#(StWaKu3CTg=h<1y}D+ zt3{&BrPxbQ5D@wC5S_+sm#>l@P9MWqm$|)qmWAQ%O`y^^ZD5KQO+ErxI2P9MpuTBR zQfq0ER?I@fJ1MLn!)N(At{)N4i0Q7yqF5%1k!-HDKFtacUf2;v{c3Pcq$`x^1<3kj z)D|@IsrCXp_-NdhRn7lW_M|+MPG<5V__lnSm*M4=vGSCf+v?nMAIYm#r<`|uM|=XRTq2(oeWT`-Pn$BOpj}5F zH%hg-oVqp|xH9lRiq12f&9@EXR9jU=t5sXntWE8eRMj3aiq=-th&^KlEo!f#cGap{ zRbuZ=krJf#2vQV@8T0=>@3(wRj@-xdT=#jM=kILD=bx(1zb(Z5CHcEXO1?Ly;BdJ5 zbTwo@<~V4}x8|X<|NX7*k4W^3r1ZcWgTPh)BUv*zgY8oQQ~Tr|viXfcUt&Diw~35l|8hs}@D0)Xb_&jE*M>6QIuj%+dt6=g64OSeKv6m-RAKKIU`W$J zgEdlc#k;Q-^d-?a%bA;M`!(uNNF6GLd5L$SR^9T*P{C%R9#7{SGuqBxQ((^ZAWmxdX;!!Ty#rb<)E_{ zx9&;@vpBgxg%CvIi>B)T_`H^2aJ5st`WN?PfZRh7=DmuG^$EF^zCN)U@F?V}iR;>k zaAei+xW=DA(MDDNHxWJhi$&VGzcxRb#CIK$>#+5IO8p{bm&lqGH8FKrul;(MUcgmC zTb$>a$rO!eemj*d!*pbcB_Hok6Q>V(jF&=-Zh^a}aS8%!aez!Qn;bCeRcUyOM)MF9 zFXvmyRB*oW=>sV@c`d8BrOHau++m+VFV%SC$_CO_T=0j&z0ufqjcy!xsm&q&f;`NZ z3WCi@Qe2ffscm56YT@88VQpkXpxiX#dX3jZ$KD8?pMg8kbYS()fbD?1rF0keAo-ks zx__Q-pOJwV`3IvEH2hasy@WK;#_xQ(?B)+3Gxd_72=DHi#T_OI3{@N7!DBrvCwnf) z1rVlK2-jj0!j;dH^sh#@i=Q602d%KRnWWs&q%&Ra7)a>Ru*fUuuZe*YEHbcG$htQM zi?${SBr;@VJC-`sF;%k*V}f$I{uHfZMZ!`drQRsS;qds>u@3Y_tq50=JUdy0hBK}T z%t_2cK5op^X4Ch0@ZLHs1Xiw}Byi$)-Rg&~r9xKxO#nTBTW+7_3a3_nSZ@Ix_S?lV z_&}Go?hl~(x(%A=U>*3fxQy{*#0<=d(xp)y{s37iwwJ-c z#W)|IL7A58knL76bK%r@eC1CsXxe@XM%3Y}k!u2RF-U=jEY|jRy3sY@>0xICrR0^o zeo&PZQHK4p?QkJPV21o-y$)0>*^&O=+hl7JHFC&!@r2EUQ2nf3N2@&?JM!b~bN=E^ z1D%6T`#gt!X^w(4;^U(>rtxeP7u=Ycf(&H3-sW`gnZ=M`<)}#fH&%$D<+5vt?V1Q} zLuC1ml;4tz+m7T>H+|x)B8uVsT5<$l({0Jt(((qE!lmM}r@TMc*j_TmJ^xl#w#cyx z$~D6hPt z904K7T7K=9ExC=QG|BeagKC#4`sbssr4{TP6mT`#Y=#3J0`J!x65q}!K&$7ryj~h{ z0N%($sgohVFEqGdRP*5S4j~G;QUx7YrU`vYWo7tLqLK1jY0pT}6R)DAbal4RDBjpZ zPS%iOi|P)mknBC*0gVc?^QqZs1&XyXf#*L6C_ul1ey1AEPDnp`FHfzyv5)?ya2040 z4{+dNPQq2NHRdW(H+R88Cm}bXF6#H2iv^bAL>GYB!+O8t{%M`mE-G@c!Ei@ zt4J&s+dab-l+O_m;lZ%tN}v?9hhFpBBSu$~ac%D*`a$O#+q&HuQode{nlS#A-MSJeBwFB6eaoOPA<*t?&c+G1d$M7R)r@B{l*s`n zoSh{wDE_dgyrQEKX6uvsfr4|Fe>4nti^ejLZ5E6yuLypDeM+{O=o!OpHXkG;C z?9P5vJgaur%e8-31=69isPtd1>+H9>IkFu)QZz2|YI=Fvxmi7=74=D|1 z)U)Hk<|a$CI80&7Dqr{Nt@cK zbk8yTk-CQKIp9iZ94TphKfJq;jRGWF9jiVzRtsZ9B;;MhAH?8}s$A_#E(=Y~l!+va zQ0gkmDm8vay(W_q@e@moF8hzfveFTR%w1w=>6q}{ahR^eK{-y)p@vS~z22D4H5wM$ zB7PxhKG^nuB%{@q*=$B@SBfs_mAWw}iCzj-mE>h42M82q9Lz;jK6y_J@P)0>+=SnK zoul7ipLi045PM>LEol9I;Q0~w667)=k#qyz+jnXj{eHiiJ;VRriGh9WxvfHw=V0jN zd4AznSO!o9;rH{oI=fM#d@A+Czp}Ge3WgTj8U6e^9U~Gq^LMvWj@nd(&9%U6KNN+%MYb%oe4yl#9s4Dq>>Y z6|8LU#c=oO_jFaY&JB=S;m=L7h=zlmOqZ-R<~vpokFwrQsBHI_ExplcYJ-!H+5qwD z5XeIbmhG``Tx%`COLL)=Q{`YC0OORh1dv&&PP>Jaf=xnfTUIw{&Bx8CglTkX$QZkJ zQNcJQ0kQkO98T7A2rp3n&5 zmpaf?<^DuEUrpnFm=xXVS~Cw)!XxwkBk2~QUS2eZQIrk&Qo734(UtDeae1d~g4#@o z&(H6kU$WTnG-Lf5uiKJ%itR&~0<;l!`6T|1RmF9IFTXD_r z1fjCLRZ2FcP;W1XM(ft-(LN6`%c_9G#`&_Zq9wW#(=B-??N|}Azb0I8kZO~eW7k3I z?x{L_PgNF3M$J^ySP`?zVJ7!#O_@E!4>AVGR~$1a*qeCF5=IrFhObQz22$(i!@y&& zUr3u*a;479@T0zu%y*#0mY#E^hFm#6ZBr(dzt{TNShw82i7q*0eVf1Z(+>vA)q?cn zq7}bebe$=aOFN<=DJ5Aw$!&*owWS!NRW>Dv=#XSMqDII2TgYcoF|r7n!0e!J#%v@j z9^U$Vk^(P1BWLnr3@uxu-nsTAo=H}%j=ftpFqoXr4WBx#w$g6M)N8Wq?y^aRRZI#B zxpE4Y56Jrz4z~wADk?kPG;e9CtN*y5Z4&+)1Jo$prz~&#<{>j?PH?MAo#4#-;(dk@ z^i*iRnVaA7>8v^?Qj*n0R`}h!zG$voJELFnW^pl^suY7r;ewL>({)+S86-z)FVtd! z?jC(-)!X%B3H_hHYi=j;eXbZA^w8yBFs$kv`lySJpMJBiGknMxh9w3~DtiUDi4M@P zOgGwlew%;MKUyW8VUzO5f#G|mx5B}hep;>%d5Zqnw@=0i&smOde7sMK_HIgSE|1SU zx*0wH!u3xEugsovLy>6H?I$A2C`JB(P4#SzB$<^^$-JN3{?_762jcrsz{>cvVxif- z-P}v+lxw;*^ZtCD?05)&`vDXZOSIKuQD_Un3t4?77&J^DbrZB?b>9)$jWVYP>)idldw(kYH;Q0-;qyRooPt(fQl&YaLm%elK&2F zY?-_(AbE=8O>`=;GgZ@HjjQ1hHIJ{e1zZgU12xVqMU@}EhN*YUo?|3S7wYxcd2dR~ zlpoJ`ik$wSnhzTq(@Jw`>gO7&{_;lBzA1B)y0ZRrg|@4atbBr|T=la=6iaFzxtgVw15i=3GW?TmkRpr*N4`)aq!;q75= z)ObLJA3ys0hAb~xL6zwRU#e>T1Dl4ml8gCt*g~1RjmOG}RjyGhgRo7=_Lqw^)B9WW zekpd}Ku?FiO{p-|dx^U58@sEYairZ5M72r>6HiY-JY+aucZ(}(-H z^wmDk$JSDvFnr>az5R8pzuo}$={SiBR>(!G>_xUeL=J2Waxs2OJT0BI(H90=qc@(L z3*2Xo@=RH#Tan}aSRApQ#w#-*P*P7A_<6F19$mce68TP&B?Yz~)ofyjF&O`Qds@Om z=bo1~3#W|WcWRFi1ghO1K?RmlTiLZaQi*xn($vr7!s5Z+8WL zA1kJ16zfK@yuwh9lOX9ZNgxa08rT8dL3B$21i#+yB{70S)Fh+emnoNBq}iLk_alBP zuQ%fPE2&zDz&NVAz>jKYzdNy-*-y6)o4<(=J3893V8C@ciIy zz2~5!#>&yPRnknLL*H^V;-L>L&)Z=7-%(KO>z^6^;z>)9jGSqh%cIQ>=c^xJMY!5( zensgYqJhnKgtPEjy2mdP#YeXwVpq4-zC9`uv@=UsYCoC0a6CQp;|GtsN|qI%rk&ry zoln=mo!=<`NDgJ{`m*QjgF4FF&L%;JDJp zq2`!KB0Y8~?W^OV1=sI>U!Ui%=0|EgQJTX9`q(`MeQ}Ge?9AD9kxy_lQr#fZ>wxmt z3ootDuIU=F8^laOMKDZ_upOcS>enIDoZ&!My072+5tSJ*jt07vET9Ph!QQ0LipF8` zZL@~(#s>lW<{@`zNpL1LvWoRS!a*D5SAM7-a1*1yk_57J7A=V?FYA3Yy22PR4E%jT zL6|s&o)X9UMoUEOfpj91*l8xPD89Mv?(35?j`q1IJ>&q%J-O(}eH94$h)e*zNZr@} zaq+5Ew1K#B1x}xaYxeYWrEZhm9g|Se0{AmD3KyY9>&uUWgZx)z6WY_#xKf`LQIM?o z+FT>fFF$ea)=CAIV$x4LN~;U@rcbAiYA7!i2$((!j!r8IiN|SR)H4kuIXvVL7f*os^^@ zhso*mS@KWu+}S2iW03j8_9Zzm$Ye@ct0Ms+NPf2 zzJmf@HSm00dN~mKL4m$}7MT>?wxhnM_p*)~yD9!BJR5L*capV*tf1xw4Rh91i+DP} zGHci&Vc&k%{`gxMKFq4VCp%6f^w;LBkWp<;p6kd-;7q^?(TDRkHZgIn={gXZYh2~Z z2N4^;6U%xhmr*tnV%mqAx)|_l!yh*SMS*+Oa|O`t_gbxlyrYJe&{W)r_a;TATM&yw zjsCgGR$@^Z(O@fEqfPQ=nC;uqHx1Vglg*0m-BvV6GKK%6R%SWRwCU0WB9yuru8nX8 zMxsXs)3at}y4R(N<_Cet09(-(-*b-b*ZWJ`O;>Cm#X5dlzQ8$i4G}5a23j-uF(p!X zfHme&`9#O5s490146v9j9m*5f)a9Esv!Gvov2$H4!(#E7TqL*x*-=iOIH9kkAt z%*|+Sd|pS9L_?ESE6zPRpMo?=f%^JClK1IgI3I+l=vpq?zSN!+p#WKRm78}ReemTW z>)!IxX?0DPDFoo_(ZM@)@#KB1er5s!zdpT~8E!t4IaBjHVnqQQu~32Qk?Uu8)e5PC zqCS)>*M?9;SHCU8%3~73{(e$b=j`%IR9+Er1T_E3M3FRPKVXgYx{Qy;gNijXw4`=7uKCt$dw|r0)Ql`6b^5XU9e#5GtXp76v ziU)9SS?*5P#Gus$1m)32+hfZ|@1YH_FDHLr39R4CS2NI9KUKiIYU!_PANAMM)Qenb z&3#Iy;GI1^31)E$3{7?c_)CnhWvpL2kh83{{W?hm9^}y-j~&y@m-~JMaE0Q<=FyRZ z<<}i+00BivSU^A?SU;b!F12DSm@g=Vj-_K>{1E&e;MPVkZ~TZC)kVh~ir93U3tWZ(kr8 zm!M}pA zm%f0`M~FjSkzO~F$LGnU^_OzRz$1Wnh3L7!pL{s=+&YmKqqvzmP_)ULzp{?VZ>sv% zFIS~e5qSQ2e2=m@pzWd1lz?Buc%QHd#gw;^1Wi0W6S&N?#OyVFQ=PeJ(@hra&QT@J zz3bV>9n?P)fnM<2g~cFQ_E@VrF`cpBsp8!VA#lc(0@cJ{U6#DOeO_DlvqY?)2~C1> z?orbeR&U3a$XuTY_3t_qj?s@fsm$j460FvE!!J!%1a@})d!&|JE4e>)6%TKckNPyVgCUwq}?nJhzBSxd}A>zFvxeTC05o?-{KsSO#kr6nJoEJ_jEiNdo zpLv6dK}RPwGQ_Hj`ms!hc@#zqY~nJC)%pB%_>-5 z2c{aQ?=PHHbb%1RDP^8^93Bm=x zaVh;kiB^SakVpB6r7SOGrsEkAwL+z~deUig)&BN6h<7h`uz+7>n;HELw-6YA)JYR6 zM6Br@bP2>}aXzQ_cMrXT1K}{Qy#(cqxKEcBJCqD)4Rs-yTn}4wAMWox-}c^Sl8UL`hESCLwuTqQ zuHre9ZzSrm&G8|2z-A))F0yIcIZwZXrF&VsKb|H6i_G&`esE#Ou8 zxJM^&at|W;aBqwUQge2>GY!0St>%~q>NGd$+~98_!pA;DX(vSkEjv3u zXPe}w)hS~Hq~kxh6L;P9Wrhw?Vx|hA=9250>PH=N66r(Re}lH8*>)JG2n7{b^7gZl z5O^b9(@ZcTYp+r{j5t1va>@*MpA)PMwga)-O!f_#@LFYB z$*-5s>#{N0glDrVJ|(lB>4v#j&PE2Hp{?nuEvSAY4c$@Gd3>JzM$2kv3fPRwy=1C? z3o}mCNdH;6SfPCVAV3np_^Y`(dHvQp)s7qn4qK#O#|@(F3N)%ihgXU~O!t;1G?kG4`7%1uzBCV)47uJ^_lT?$2LR z`6O9AdFPb4Xm2B!cEKPbnHqkt*0n-e!b|7TSM_1NAdHy%>N3kOjwNF3wwe9?%ij$o zRKpO(o8BnqWw}F0p&o${7uDSOuCqZZpc7PPbQ;8(9xHqNKNVECmcV2PHoXXQ0I9Xg; z7ny(XH`RrO3iln{ADq$SZ&P?^AF~I&r;{5{Cwmt8!168=GgwR!J-aT<@R^{ z9{WgP9ncubj>zwnzkGmCj4ab3?-oQ*O&X!68nh;}gN1tg(O zzS0T~>GS&u1lK;JdttJhu3-Q{xN9Zw@b~nzX09o+>I?q7A*dnCvt;Y>vVs8!tvrc!hw66v$7rta;cf{ViMJzFOI)4XZa^10zM

{yEr?K{i{BV)j}M59;7eOKk?b|RSr{6EsK)v7j|9o*mlZk%velF!-Vt+j zk*!?8jkiSsge~T{<_Yl>PpR{}21^hsjpLpU_wB1qHRZuEhn*jv4pxVNl%|o)akk&g z-&AtTP=Zv++TH$k$l~2U*6*}a>P_2f_|==-*A-P`0W2cd?3nB=uX3+E{qhjh`%n?$ z!zJ;;-{L=a{$TkEGp{+Jv8FGMogN^Zay^?o0^vkrt%R z;;-G?7n8s8{w>PYgr-lz-(%hKybH~BO2!+RhUem|<35KoEKx(pcDAPM)|%n@fP1mD<}eq0MTJ|DqY z&iVCqaTU95Kfh>8LFuYhnGtTyG}ky{yq3qFG^spUPm(o9{J-`D?tUok9U~J6LlL)mzMrwGBBQVjmuHb{Z-|pErBmm^Q`T< zijPm)9h`l3p63za>EC#Ko|Vts(b0rIFyBsPd>8fuD(b-N&j`}&ovDY789V()g7p0p z`ipBM7-=40+oAR%@Y?#-+;ZYk0te4E+V+s_*%`@WYw=W)-R^3dK`S~1Uf!_kHWjBT z4vY42aL=|szjeN<80PGBx0?BZk*3?6Mpd8?g1U3&>{Yy#*`Kqr>$|)cwnXL=A75e! zere3@Qu(`T#yP;dnYB&h4f<{yAKWP=D!%=^Cc(E!!O5lsT(uT}i#jyc7wT=$DBxZG zHUy;MTL1^Q@q^13S2aHS_b)Z_DctwIW^A}gN(#rOWC$?bVl-kWA;I#dP34QPE%)Ww zuF?1Bps%u6JYU9U5R{TXej#~8hECE|B&lidnfh?X*Uj_EZSgduUBV&VI4<6N`Rj5i za1U4yD2p5IaAd!sO!j^tp!)r4Lru}(t?8%|dz=m@88hz26O`N4_vrW|`7zo4vEvV6 zb@s1sJRefr$*3oAI+^HxWAx{{-5&5%S7B!P{320?r=+lq;A~u0EWWVy{fI*WW?;IAd+R=_7lSo5!1Jr#{=UT3TNd7BO>V!eqAL zMk4N!$U+r!+JNo~4w-N-RjBh=Q=RbWo(AJuok1GEz>Dm68b7~8KxL}(c>1G0t$78%4aa2DwBCz4h5{)jjtY3U( z*0TSKecE=GUojSnCyq(%eLz2{7sN#Bg1;EnXax*zl4Wb%Qb|q?V5J7v=V*=ge|!ra z;Vbv$82dThGQ9CU9%N{|I_p3-9N{bg7h_w+xN8&im&`RbKL3>YN{!NYi+jvwzmT{O zy6Jg7MV}EHS)8WmY0@UATplxZgH)C$@B3HEU|jAA#B^?peMWG+QH4A>ME+1GTf5=6 z_xl|krx)dVqVl0IE?jIX}o#ri6 zt_n7a?t6)kiRyqB7Kuhm9I6zC;m6;1{ilt*XgrD2{Z$%?Idul-Yp_FHjfJwUg(;soL1FoV@<+lvOQcZlhBTS-uqkg2v=3&@(5rG}NgiCb;P;l;jZIZbqZQU&);RbOLntB#8={g@dotxj-{wxl9P z6HNLEaQQAa*3|QpSE*`j*6OP<^xkcWgU(OMxD!bj$6m$lF2mq9bE6+BTwEfQ*jG-g z)3h-)01m)x|1Lc6+6=nuXe6m2WcTz?l{&b=X4w3|q)>)ehM_B=5M4|GyL0vD%w$WG z+I8gG3Vj6uj}I&B48Lve2-mKA{wuN4xbcX}Nn3yqmpDBY48~{V5jeFETm^rRCZ|qB zZPexx7LuHGtXAA=zx=u?E0V~fI-J+~9gZPv7R|qS=CjdU!ta%85GxV}1FG zr^bub?wzp^*$ZK%m0wAZomzMYb#A*V_fDGMH>PNyC7w~svD}v#T8y`2d3eYhv6-Vg zMP0!0@6%Ivp(e>ANOu)Nl|UXv#x?5DI8L-1xMMg4G6&36gE5<>*%9tqPA$t;DdBgyoYIA*K_`%EZb>-bZ8;rZrwLO@fj+L{pcg~2qlam4VtPRYxS;n`G=+aUop-;Mxh z04+gFjk+CfDf__ezNlgVBV@8M*zAG=Zr0zy*xU*XnzJrhJy*F4Jz&*AMH+W2G}2G6 z-?&D_TVsCwMDyBGjn(&7}o zmK@OU2cd+xfbQ&kYe|Zc5WD>!NykJ41KS{@ETFq`G`%l_EBDLIEP5*?0$tA%i}e16 zv44FEqAV#U8nv9hJb&ep*o6gYuCMnVcx&e99Gm*r*1O;O#ptvdLb-~HO@UR`5reaY z?2*s<#-`$Fbf@N_)NtE1!2^wIqB&}#p?6c(VlXW%1af}-D_E%EO}$m^-yx+~MzG^K z|1Qe8ucM8aDOLVB{N|2Arb!qhC5C5faER1&7+m8fqmLzymZ-BtxUw2(hG_fbLC zZ|6*)r(3res~aO^qjvViczgkbDDjzdAJ7pnNCf>04S%K8+!6%*GzcoF-wLmT`shJ4 zdPks1sQTL0@c~S0uu0ODmh!vc5C!zLLr$p&SQLAcy2 z9=ds&k@a;<&GBizg;heMEA$1Pw@=)YF_r4z#)Vh$?ob&Ky*B@vc=9wn-8OsS8`$~| z&4}z9pNKDAQbcL=pZH2G4Zo2}`t<>nP6ZLlq3mRD8KPbD%c@O`^S(zdr2bx<)!A0y$; z1b8t2EU~nhRW&c^hi_pLmlJ|_;By^yt9>120e0#RuWX}w0QXd5l@{I`OWll*)1Pwj zg-|PrFQ{%&_0h6U+~|th2D_um&oPSp^%dn_Zs{HG>WYl11JieE2tPI`s3PCZ4)o5jeyW zscmoc0%wa3-A}@=a)a&h@7Eq@md~CohOBr4HG(ffhgy1w%01E< znSn`v-0V8%Qsf`G&=>?#d*??ho=Mz}y!+S|&WCjuckr;0UJ#8{_nw{IRY`q+P z_-WS;Q?pq9XBNHSAWMD5txF` z^#>*RVY(+1=!}Il0^Co<8H_UJ;{F^%Y2g*!V4>foc+|)G3;EBl+*9S_eC>~9j~NCx z%$E|@EaVMieet{7W3Dc1A`2Za2wek#o|YyT&qK#LAAvc8Wn0^RE4Ws^*>2PuTz8Us zkeo37T0ClqtqH|qeLw{YU#|1tmBdG&v;(SKX(xnEHQgm|aAhS~%%Xx%dGpK2x%p*O zl&%R@jarwxr@NbcEt$G=p;C%}mNBayNVeIog6>?Z z;ai>Z1@ODb(Z65RXc8?GANg1Bsund72Io6oSK_<3lj zu~SB)X+t(<&U4`z3H#~M+K+lD>t7M9Y#UjSm*J}fC9&#I{am~Jg6mFCbKRuAqSMgU zJc@yBwUG{LA}fLVj2C^)3)eNXE`AzeQ4E$#R#IU3k0ie=p3wL&iz^Td^T+526$ikD z=rVZb0uuc$`wiFPy1)=64~?q+ z5QD#-FYmnzbhhh#fB)qb`4-{X8t2_N_p_%*ZQ+x8OA6w$sc^chE(%yd@FlmE|h#1#> zkZFQmWVM>X4gVRJ`FEtBfH(zz6BoIvmYl{$@vnA zPuN`uzd`>>M%#1v+@u-aioHq#99l7fkK`O8_jE>?{8QxA=!e1@&wHRG07|Ipk4Y&} zcj>Sf-+r9Fkc>CdlwE(9`vYmCAs55b;6D`=nJ(w&rlm1|CWB0NGY+I?=vvPY-azPkwe zs$hF3?$*ElGl$YyS#~Yn&8k79%So6{1P{ULgQWW-;=$mXHa+!shd0>uNO!}4g7aR= zUvj!`GczX#(y6I#Vmb&58VoD>HO2I5LZBZS%t375_&9pEn&Iu>0aI_r)?FbQH zgZ|^A>7}{tXY>aG;hpc*Iac{-o6$Bg}BY3^HkVWwZa3u;i_5~C*WL; zGM-U1pS^Qyqtt)sLt2z9js%;Vn;(cF!|(UC=#qtg<|7B`I&tZJfafsFEqMtD(CO{Dg0-5yLh6a zlbmO+@I`ii{Zd)86EJ35tx?{l2#_rJ+~%23>~mTPtGPq;f8A-Jv>LTzyXt1FSG^s? z7QpIxTtgEQN~od9^yJ`Z8le_Ht{&`OrcH5wJCQxKF*veHTsi8u#=9|fckb*-MQXK* zV{GvL(Oh{iv$dg)ZOm`L);N^BMZ}JJ?u^&U+tT7?`6JS>rDjxBaQB7r^{)=vNkknIMPuPSDNvcxhPml_^Mqk{fE0Y)ByZpJ zd96k_(A(d#Jyc0%B-=Yl2P)7>L{(Nz_hGW<7b?sj*Kva#lm8>3;H*}JV_DCtwfZ|5 zxHAyk)p_g5wr`tO0*}9o|7GGy@a2i*sXWkBau=Haf~vAxgbVa)cuoG8n;n1CToYKr zFR?mOL=0KR7-mdnZ#v{%BCgRBmukiEapreU+&>rHeRJuUKaDlrc`ki%47Ev2<_o!wW^rud*bbJADkPxoHae!rx>Xw$tmamz`&_?U;pq_x+Z9-daP#L?VLVl8G&xVZ@<6^|GiC$6$Llu- ze~Y-g;x19=DWDlEm9c&*x%az}Nn*;q`s1Nuv4gN()yAK7VPRj&EUuVRVwc}z7Jk1&s2LR)Zbcv*X{59ghR4R;i2Kn ze^oKL50XqnF8xj(m&$u)?1cz$02~AJp%77u>Y)0ZCakM|x##zR@Qmfg+Z8GvyG>D? zDN{3V^0JjvN%zDJ-Civ2x!Tx%NH&8IB!c8ceUT5ovCH zXe3FQrKU=jc*G}PFJYWD!7va@G5}#p60B&7@b2e7^V*n-e>m=}_oT}}&C=O$I)Q_< zXKxUv8^KZi+7l)DZ1DaTJMWLNXDZe-82~Q^RP|Wv3mW}Wkh}06=Pi|=_Rel0t=9QyHPJ^r|KexREH_ie4ptk?!0 zbdM%*xZTAx7CFRG$FJdwy^(4(x5*jSUZM7HzUZ9{i)X<=`BGSzMm>uycuJ^}!r53% z;NI?jzbbLTKsP<~>7-+$u*^1pB_UVz;4pl-o!;InJufNi6G=jSGW}BjCz^rW+L+rt zKl}YR=wgW`etfeYp`mUd_VU@VLFFJjfV54Z>eC=5VIOjnf-$=@%Lz*RJZ;b==R=u zCTrdIHtX4*u^Tbtk_0*3=e`*dL%1at^?Hex#S-*1xH*OUuZ@tvK(V$+M zmwcu%rwX6-$0^FcEo$Tv;KKmk_p?)7 zTk~APm}N_{aN5U~mN0L9u53Rh?KD;3vDLPpdettV?x?M-b5G@P$9y-w@qxut!!WTV z&HW=9;muLi<^?s=$1#7+UEQC#-`ozYiFBJenN(A|`2d-ygmV9XgTlF0&ow80Kj}!O zWLk>*pV_M>h6OPUSqBV9`C4<_Hk|@sDqF399$5UPuZ(*#pX{+PW3+nr2Vykt>jGQ! zcX;E4at)}EAJM_hn53iHJ~zDxDLO(cCq!qbU`w)l%QEyjI~YnPJ$jD z@77zz&SbXmp16IDc$?Dl)8Vf4Jv*bbON}qVdc;orhHvYRmP+)C#)*8hSrTO~!3(n5 z?hSQDE^K(RoQG12$nuQbbxm2>THph{g8EPC`AM6dD;9O$SXv^ir{gBuGXiPbPh`{Q zL3b}}Ax6eIQV+Qd?6#PtGM;?U6xWNIlYY^TuWm(9<&9T8aLBS*E_anA7W@S|FbCoj*ulmTlU&6xO{Ef6-~V?X4f3O_$p{K$dC5z9Pb<*XdoXCrR~ z!=pSZrT{DVeHBGJnQ{ZHPw(>|6+ULmfActu8Pnd44f+BPl*U>1mqB!L)r4i zJMz24g_X{_${Kg(S2`&_v`MPEE(I(pd=r$lT;+9hNdhze(n!|gcTUU*8_WMzD=$5! z6>M#;BOa+aoP@X0z9OMdJwxeZ8a&j?@I@-^&G<*zgE4y_=nEXdrgQ^_G9bh2fc=qG zW0qk_ZhDyM`I*)E#Xxa-{&3k9!UAP_mF0US&{N=wmXvwf_|Pd;c=b;ATQMMu`WKc% zaE}f~tN?M!S>gy<=g{SCXQN|cZ%QT^C)rdYqJ~_pJD&$X7WEV>CP_#um{xtSdmTI`Q&c;@t!N`lGm+UtoS&hiF)pg;_fH4;B z^hI8Q4=H4HGX>@Wfhb5MUYr=UG(K;VOqKCh`iAV4j@+p+x|&Pg?a>YR8Nt$`iiquP zp{}ArUIg6sY=5J7<|uyo(r4#NQ9Oabi?w<$!F&Jj(v!wkcW%VA)~PozI@EYk=e^A3 zZ0>auC=G=4Z5>^4D#huy8~_nTWAX*E^#*d@8lDc{tI7_Z%NKZPuYD{2(#yOawefl0 z^SK5m9xJ2Rjv_B1s;mhtC&+!8TO6Cza4ps~;5Y!xOAy2k%CZ-{4lIw$ut6}9he~){ zwTn0!u02-;xA$JYRU zD_{jDYlvQ0H?sPJI`JdIR?N(x@u2$(S|?X-6qII8wVXFUfI`Faan;nM8x>m?0w*7S z2lER%WNJmeEVe&Qyba$mKkV**8_Hhm(2IcesDt)27 zsJIj&PWi*mj95qm{C>{o#AkkoDX9?te&Q@4Nu4OZ%BNsa-WLAI=H{Elv_S@(LQ-gN zc6o(mrbXnPa!Kw+vwYWzWed1j-|3tSUW>2JtL+DKEdY86K;ttS5ri8m=u3H5mdr@+ zlXrPW?T09a8ajNKI(#f;BJi)0_n2A?Me~+^18n%?Kz;ul(uLgMO#Zqd_9crDmLQj!I^?%MO1pOv#45y-OFG<4J;>bRp2PEwgh({3<#+U2&cxJ_P-KrX_^A zf5O};bza$q|QgiWqUXN@82J$QRdsuQ zE4yi9muDUg3Az?-5?E{NasX4M-N09J-Rzb4;XxY`~LodUDvZG?)SORIj=0siTpSG zKSBYR-?{CAA5(c$qfH9Mr0t{iwN z_y4dce8f?0$m`2Rt@3o&8mpGk4~g=eM7=mWvOfxv*Ut3^K1FE-@-$79uoVcEv)ux#J?N6-{nUcYLiIH%e`;Va$ zj%#ihZOG=(*hZgnRf!`GIH^YLja6_LYJGOeGc2aTY3L$#p=`-+3iGBTcMl8$t8Im{ z2a}_$&$JBk2SC8dSMAdbg1^S>-IlGtzJ>qT#}vrg`BbU}4()R`x1e2a;-8gebo__) z)t!a<;RnXk)koll18)3xpUeD91%|`?kQAttwpoaMf*|rvllbt3XuiPek9>_tX>$=ug^wcC0u6nU#ZR z)Z^yXC`0ZF4CL0$a5h*6lK91uI~iMlEOjOL&Wi(W3hY6dJ?H?G^qK2`qD!rRvxzgw zn?2Lj{cD}ab6XtVZ$V#$0p`-!WW_Oqyox^bO}J=`h#zyybY4C}`&#<3yfIh`HHFMu zSh>+gu2cz>2E=nrBtbpm3wA3uBP3+n5oIXl>mSIZ?)2->m&nTuTc{rg)|PcW)+K~w z0{!Hk2JMM@`2bmS>83^SZpIzkb$1C4pYzl0a^PIpT=tF(b35-sNgwA{SfOVxPrv#6 zQ_VA@+&pSA5H$X+$d0YF4gcsd#d)AaaLqMwH>3JaFe}MStjdf9j3l+cFZIWKJ?dii zwPJz|exmZ01-z$iqjk?~a^T~Lq{l_@lWqxrj5k_q=8;;FiNQR(eN#_`pDbTElm6q6 zg0;lEtNjSZzoF!zh;E8(t@!?Tvy}HFNxxc!?U@p>L!d(Dhse$Aj{5fLg+)zNP@Q50 zwGdI^JG^94WnA%KigCde4*_!T~jAmU<=-3Yt-+y2)LR7jOyF!t>;t=$QSy?d@2-g2d z+3puduZPau{_gV`6baIr+6%#kub)PDGWxopV?&5JtONy&DAg@JvPrBRX%++`9^G&Oz}%X5Dos&$LcGV)*3@G5(P!5hUTn(c-r@@F%eAL93*y? z+$Tiyap9t$m7*-kCGA`D^%jMooFC^Rb)>YD|JKhGsE zJ8!4NtTKr4Nv|)UW}PKC8e6=R>gb~hWS;cGWx9gwsdqr)n0IlBe}7-MY*)g1OaEr& z;{1y8v-AMo&)ogIJ%M4oTfWN(wYmIzEfQ=DG|Hql@GUBWQCj5wgSHAY(`*=shm$Nb!$e)&XdvV;I@xn6ZXn6E2K2EzY7F9s0Kw;ul_Y@I+-FRdC@z7KQyKJHI7Um&%j`?R)gDp`2J4%_bm^rz~_kNMaLytMd3^7FTt}wf}aCJ*P&o z&Ra-|<@^>JLIr~5nh=+1|iImuVOajBK!;lKk(JLaO$h)2Y8;8T*5whAZ`(bk^NT1qSZmQ zjw{Rj&^1QA%BO&%W9tjXO*2s1IwY<=C8iF|#Oz{bW%hn?t(AVQ;2M5-2`AZr#!MaF z)XV<>3I?Rt%~-=^@H9ed&j4$7(do6@u$ZSye)P`KARRwX&y}SRXBaR5nb0d`kg_r3 z4W~3wb|kLS)*h`Sl!r;|vTpg^(N|V_@#pzSKC`MkUsb;b1{pkn#Hv?`58`S}ezZ?M z|63pMRov5E3RDP%v9bgkOnWbLn&+!E=LT=T{NVgGjN!iFIt{h|8F{Kb9m=LyzGyKR zYW(`RCGA=A$MBobJvzW8-3C+wt&NF{qVhrlZ)uOI>K)%eG&QlVAw|Qo4cx9ivswDL zmlrKp)8`@toMLoGklVe_2ec8Ae;JbvawV&zl7E#^rlw0-Q#;*0$5W-VfpToL-T%nQ zvRfnT_!soA+uk*Xgr}u$OZ?-YW((>glqjx7ugHYe> z-o170iSDtKz@cZR4E3Y%KQV(8k4lifzgt_RRmh+527f!rA$HB#w=4@<{rg zY|Hv0Rhb>R8&^MSA6Tl|ZTr2j-wT`!$w~Rn`geAGVmlUlDaAu0L6f5Xg52`*pM}&6 z1^$~$;TH<@y{2c=+Kg;oIln#f7D8C22L>f>D&&5bsDxwL+?17i3_Udj35pBBnFv!C zciwnHHGbBRyljrdR8;F#&Oakb3qOaji%!?H172m@eL5RH{3R|s-JF%b`*5C&p*2t! zUt1;Gz6VU>XcdNeJwgCXV6}>AXKjg=BF#shPgnvH8x1yb^tmy*Q&+V_2>`{owbP`Y3Oaqox!)PF6kp;Qm%c|n!#F(|rx#KS|*=%d>T zMwA*wEBd>`%GJX8UcQVZl|IvbSr9LX$^9lyIW~%7XoT}ML7oJ6;305@#(e|ydw=z!iah(^@T=2$tOnNHl69%Y zo12%)%k^GrGzgF1bwsaE%?x71o)f4PVi$bXDmUI}M9oP!EJd#Fn=E*jvM+I1PXR>D zNGDZU5=z@Y494nnb{TcrOqEcjyDzai?Rb-DZ{BW?>7Jw+-+{^ycT}+Lq}xAvFzY~P zB_7nInJDXX7$>ex9s(l_bF}_ab+bxxb#c=%Og?v)gzuYwK~R}u=r{^If%nr$(^VrL zH7n_NNG~H;nl!tEtdV%z0&D>KBvitIm9|sHgHe6`el~q}!I55jpoBnDH!T%^ zc*_^lSjz95j_Fcq8iZrI^>F;vKg1{_?9CJ}N2SxBhsP~hv$+d>N;*~V=Zo=z`e8ErXUUTYrFP_p!>2u6=`SfnpKq_U^}GvU4#3#{L!1Sy>BMv> zIBAU=7Jg_Ch`&S^NLP3J1w_$i6xwZDKAu&uN|JH_{H5^V`0XfnB}oeu0$huXXE_ zC7c4*LDw#f zqHmxM{!>^q=KekZVX@Z+i1aI!S}ZADcQ4;Nh9t4_iQX1=Lf4za_}-j^Ji+9}E%&;~ zSm=-;$=LyAi}LIXj_tgZ5;@kWB{aNX3mojVq7}|Uc?S9F{akM7wdk^vbQ^|s;lJXS zNx{lZ`B(E@A`NGHP+IFb7!T@_5|L&$vLP4csa&(n9g))m15Yl~lC0Nf$O2p#%BXKiv7w1=9yzU@ZyGT;T%BjWF&I+Wh z&>xo8csdUOTjyYW0DVGd)*G-SD%DB8P2~AIxSOq8K*JF{@gg$%KmrCt3Yo2jhuONt zNIm^VR`*bLHXmxq%9<@B@<_cahjrD(*dN#psoQVv8x&KQXMbmU_M9zM%j+>j^;!TA zwW|fvz0Uoca}*;1ae6kDp}m*>*tGih{8cG4>7x7txErva_pz%TdAvL&wIQ1BQdMxz z;`}d^BlIr_L(zq<3nEMN-`A-~_elQ_F^%>*r0M35Hv{r@22rFk*La~W3>t|N9$fp5 zty_|J@Uw3wegW*E)R8|n7NHwrToUJC>EL%Lg)_#1RYI}o$t$~-PkFd$wXwcA*ebeX zZ`r&b{VPM69{;Xl1*@)i$nXqhNhL+~G+~?ky6<(pW!8ckUvphDbC0Q4w_5s8)nT;0 z`IK@9YpG}U@bzBVq|10@&d`aFu>wfQL!&k@F!aSvdWTsG))}l{fGU`+UBm>8dJwi@t#Gfg;yd z$;=c2st%+IvZnqBMro}K_ddSsOxOtPCBr%Nqcm|gep-0s(Kf%+#;pb1T)jh>0Zq!< zY#D3$XOkYIgX0Ffp|gV;v;(uLs8@@o6ECBRTca2xEL+LWDG-voho<7N)x^~~Ibx3K zMdgYg4>5eZs~FGKGayNBis%{62z>)J(zME}D| z4x{3&G`hvevS5S$DAHr$;gbV3498F&9p7k zcK0BUdlwwm*wPP=Sz#D&GWlmzIxFCLy%4C_`Ju{Shr?UD)&4-J;H&Sok&~tl51p?{ z2lG3!9DUY7i|{OSPL!V)CX&fLsuK@z=K6FNInAnBsJubq38Q^#7NoMkcXJz@R>P&{ zoaq{bK-&WX4VYSqTd6P25YU~=bivL-L^CF z-m{UEmx=5jTQG-?vB;fmpC;3;3nW~2R2V2VY6<8ShWQCHe`4AKpY28vT(>=P4puwn z#l+O`=lpXMiuUM8^#E@vdTe@#{#??Xw@{u~S)JWmC5b6W&(QB^8CytL7r^ru=rbA~!>XCtg)E*jPa(t}hj&DfpJ^ie7 z{A|{W+(K0$D&w*&XqoBvfuPd$ro26Skr8Qo&>VoeUzwhJF773l*wo$Bg%l07QeoZ< z#+8A_`ST@|+@DqxB%O~bn&_VYR+E*B|CcoMbp6rGytvH41C^mBF3TF8{`#va)s2Ra z2a2cP1Cm+pnAUvNSK-wwmSJDy^hn&1H@3zVwe?aBw7QGFyF+oc;N{=6TU7R%gZb~n z^ns^?kA!Eq!cSY<{1<>ALkI-p&H&z)byPY%vb3j9YB6b$&SNdz1Z-X6fG4{Uo6@k2 z*R_{qC^aRp`!)Aq2A)P+FB>Z+uO2GP0}1`>bm zs#WxFV&G$@xZ-_n2h^-FFqG)Cl#be2$NtSNOGz2cDtltaS8kO}+gP=@9=1ox8Z+?$ z53?nb7tW4+Czc;MlNDvOwt7)Gv6+t7{wEf*8 z1sc@(#@r{i8f)$WcNp8(O|fc2f=*+{A}8bh6S%^$xzI|2aL{tR&v^TU@n?0zJqaA8|xrE#++$N{xQ$E%vIDe0d0s$;TK)zR}w)bBaWXx`zvXHFC`ly z;i_e}c#!=o=H&3t2*l_1I;?z)l(N8$q}8tx(%Dn z9qUkM%16|cWmblTfAHX&iqUq;O8% zLw{)j!NFL)gG%fp-~Gn$OqX&rYWo`}ZeiQma^m!dvz@#jIN!B9Ih*NNU~H$%spZF9 z7otbd(uY9MMOEmy@lN%+_~hCQ$NQyWnirp_Plp1I4QYJYlt~8X!d^yiqQHR{pU;T; z7WBdPM3p0j7Vw;PTFlYk848`nd?DNq;wnyztP}_rD+mpkypJ#I0y8~?w;df;_a8!E z2}kT*D=V+N#ka3Ub$$Xwi+Q;@QrXcl0yytsm@e|!#;_x|ME&!T4GkrUE1tASu0-3E zcOK(DOxF-lFv*&Rwa(d>yO|lt$>i#2j4)NNBq#llKW3Ihz`N0`$kKji_m!7@LsmNY zem(4wDU%pLeN?$lyw2}*b@Q&HfSI!Ig-u#E_Kr}bCM$mb#_$!K2JP5BQ}Z)NCC_{k z@Zk#wYpybo0#1M0F^4g-hFRsyFtb_AAF5?J5;op2=6iv>GC-<_X3va6v$E2bltWo` zz*1q}v(eFg>KP={-(ZREO)~}*u?1faWMnPU^2&-iIa+`Km__~W(N(e2ECNd0XuVEl z^=QL7kBnd*JIcs7!K`T!Vw^GEtp3;dEEB;lfxQs%kj_Nk=SBvy|)tH^GO-IuNPpXxzcux`rxg}os-&0KOuXJkZBQ4@PsW;NrmqSg5tp9cX2{l5<`G;vQ z-cIixJD#uV&HJLm)`z3SX^tB(a#HAzU`LeVnieH}r%Mq=TLovjweJv2x#hn256hi& zWu@eD%RpcqGQYciGYF2+2x6`Sm%`jP7LL95aMNAcwsRTx!S9^4hQg>jpT7LA-(oyF z`%%Y%p9$MUq6fCdL)*Jb-YLFz4}*?F6g!_sO3_LH@BH?!APMEV^L6IVG6*+?Rrj5) ziFG+9=vt-)i!7@@L~Ztw;;^!EZx+Gp#&%AmGC{*+88V6Iadns$a}G^dZO9&|HVe~9 z-c=-bq`58~@Qc-dpB7lRvUL_Ab?+nhGZpRM(zYU+LZw;R5P0gAn}ccG9pm{2b#!Aw z*>9x8Smr%^)-YZHL?|bzTufi`N_oH^E`z*x2R`|j9dMMQN71zprVHPhbQ67LNm0-1 zP@|Yrzygh|2omkPK-E{pa85EYO7({DH>mR*e|NuECh4~G)(@li zGv}kbY^j>=Axd6|48)Af<~UmSX;#L@;ZJW=tud24CC!J(#iFg70||IJeVG%j99a|U zvcn4Zg;{D2Y$efW6Mcn7-xSVj0yJD^XFX=rE40zS zVvEp{ZV#0q)tX>=G1GWo$#6bLove_FdxvO<=zEvf;HPB)zN$}BOE!>^UWdd3<#@*( z6Do5!*w?ANa|~^IQ7a zNeos=w8m>tMA%Re}TDpq|AJMD@tW8Xw72^5?1Hjt2M}V;+8(k=d+&9h4|x> zfprlM4|{}mg*;h5jmu7T&|gTX&qPNVn7XbMN@I3VGSz=8qbilg_zouue^tVRioZ2J z6h0F8CvWkW7Hi;#WeaMmt=&^;qu)M+%h?7=hczwwQ?3e`hz)p|Zl|Aopo$Q5*VK~n zRN>4pug4%x9NWb@WjTL+Q>I?1{-dnu^-myH%-`n}YqYqZQS1Ty4{P{#9I3L4-iX)Z z^xoujX$pF_xb1i)M+{wSy}n^3d*nbl_xM6dpN}7JP3D~*Eri7P5*Bd)*d^^ati!{n zl5s-691dDdzx1)_^qiC3fhu7Vrd=4zte9MaMTQ zQ!D~Q{$#bk$V9XeZ7J!=W(%u&yyf`KslU ztwh2yKBc8r^kH6gXN}{tm>xfpT38v0OpymIAIQJV@EwlekjIz?yJ>c|RmN8tXNg+o z_~ebg6-`e@Kq5nCvEnFQ+?dRR#aZ9IsEKm60(1= z^~H9#^`91x!|a>x(kVCIsmLBZ96Gd;R1`F&yR|FyJX5SJiT{UHF8IcH+crmcxzWzhvv27QM*C4)dX19 zxMYDY@W@2YF~exN*xCAOz7NdwZq|RlG;%S#q3oNx9Hh-NdH0PQCwU;mc|t2%a)}CO zvcU~aiEuT63$1N&F*_=C*l?3{(ZF!5ZS3%7^)!x1X)2eDG?-Ql(nbz=CTfCNNpei; zDQ({PQRvwqKi%l&w-!HD9Uip3$}vO7-_@$GEHEiHC-bxZalprsQ}cdgN##+*l}qv~ z?)Af4Qc2Bp4{hRuMDbhxS?Z4#SnQIR)o&LwRCgG|L-aG=Jts*H;i_D}PcRBqWMWmj zyhNtIBaRB(1nM~k%Mkw-9>P=Ek8hpr%xhht{l1pZ<$z7FK&CXhUGl* zY8;TgEljEf^r@+a6Wvk+6 z-1+A2n&305^12K2lurfYJZWOa3W3#;klYaCVr4$Dtdm1)v+$%~l(6_!0HH z6U2jfg<)t(Mfc<@o$N*$XG4jOj`$*#9q6yo@Z_c#1Xmx^-xbL(WqD2QAWBiy0VU<6 z_RGOHe8St`{|>(cX-1SF(i-&f9_|&Jy;~K;NnGmCiw4`bG=$?NSxt(s23TTo2beMQ4%2ydDk}N?zMK7bt zsi}HEcwRF9Ex4(+Y}KTI$CBk6!-&4&);0mPm9+m3BceTMCJJkE<2 zz6i0()FFB;x_|Bqd`s62F6kOQq*u$1wB#0!O86d~{F+*`^?A;=Z8OR%?UJkH`{4PD zggt{8SC6Y&^;kY1X5tao9~-|9(qsRE`7|zWJsDi?^vtkn&1CMy_-GlU4X^ay7|n3@I&D) zH^4?Z{M`F^iKh}UCj0m^>9FW-iQhDLjomnte2`w00=sKye8cxPdLyC2>JoSDa z1f#)pzec{26$qBjSIk>_>m$H0m-|XJ_j`I7Z#tRuS0;3gP=wI`ipX(f$qk8IEY`}8 zsmf5%EDD;})i_ez?35L!tz`L3$@5n@+r?7TmX%Ge*$s|eEN2rA&3^WkqnbbST#pau z_Yp4H!x`&kZR;smjs`5xkjh_+czDl5TL`jz*|*=8+>Go=%4lHD{Naz}DA>>j4=eee zpYIzl4C@wiUfLqfVV0B|1#>)rJLO9pW!d5{K0({t>wk5{xs@dT#Kqn9O!p|@y4*)0 zYW&Nu>on9JS23bCNxA>edv#6zQ#Zd`@^k`j+EWortU%)3Ux2{SmE+cOmsJZ3xxYJ3 zc?PrasSuZztIEnvcqC*!N1zT(^7Gf^vDx$H%{x7G?yzl2tLEUzF(qR}(YtEMO|%Dw)SKYYIP5CGhh3j*5EOn>e`u~+ z>s0^NKtFw+J*t$5oU_}XIS^4CEOW-3*!*!Yq*D1w>XSG!>Px!7sxB5==p|gZM5a)g zy1tFCEW3IbSz6!1>%PlGb!dvI2ihOxTpRjySkwx zStAXmw8$~0P5s6Eq*hP5+}?_+p}rs0^8QRe4{RTMq(FDRg~LHykm9xH3`aY|{FNiFu{vv#*%pG!ZFEFK;nJ}L%c2Xmq5 z{XD%FU4%DI0z_gTC*^m$0d8lN$Dvdx^}ZLcfzMr=56GjVO863Y+c?0FT>)*GEMI_i z-IrO2+qu2|R;hSxpv4ei;LRNifpIJGwLl2pT z1&tk|C;-07_2~my5d@qRW*wX8QdYZg3K<=~+|<B zrr~fA^rhN0c4c1r>FtUAGlvF}IhNlFmysmSr)$5x|a*(cl zAX!(UW=uE=Y>5tKGa7ye_f3F5O?d`-jlz^UkKf)E9B9WU^|p>Ok)qGv4*F{rZa989 zRsmf&)06Jlt=UW?7QWENk(O2;@_5zv4>I|2y47=IQe;&vHs)({kRsM|&eg>u>A+ezLt zHv{IbYR|=iR5PQP1y2J|&}^nh+Lq2f`^zXN)8eKiM%5V`=MmntE$z{pe;()iENmJ& zK^09wv9$v>e63$zDMPl+s+>M9&gEKZgM?+yokdLABg}+KxPSZ_Qv_10CG)H6wV=iR z9`y3CldZW{hHbJ^Tg)%f6*B~m>=b2lq&}g)T#HNzeh5-+8U++S-6^mWl(iZSnS!&g zLT(R7{W0BiKG|kd)`m%ca<(&`_$B(uW%8B%YQZyloc#7)X|n@IF3FK$Vql|m-YEEr zvTT1sJEOxs&_`0BvCTFbF8ty&#esgaDIn!|=4^+A=vpOz{a@j~-v_eKy|rDqk29XY zy7Bj67ZTK%!~}lRF_m`LxvLuuI|FN11d}y**FrXQIm?`3R+ej@A<*$LaPW(*lFy%_ zHFr6=a@o$^#EQy4Lh5coC(v7l^$bvT*gh+F@EasNQI@szG`T5%x^23&Nob+d-Rn!f zy9uXcC{)~aDG`y_w3{S={*oogn&#TuVYd2)V3Z0D3%m@iJcJyZLw9B&61Z zbSJyR&Y)3ZnA%DQ#NBDk(Sn)EFAC}4jvP?Qy;bLz?#45^6i4)|Nx-Ao*pVLH`mtgc z#3uv_xwySks$Q$548t3IQ)+qKMFA^hUG6=GOAa~(i_Bi;it!|@(xM)j1vI9tiBnBg zDqiByZ-GNsN5$4K<@v5&nCN<0@qobTq{@v@k2(!%-MO>A$f&4IZRXsmu_sVB*UC%&BO;eTgDqK zSEOidnSNsEk{TsBB3TDBJv;u>X)J?Tff|J~xQx9$#kjnWw97I0YogOYkh-y~%YAKK z;7aD%i?N_st7KhGEj-z0H=?EVi{s)66Z8W#tBgM9~Q*EFUDYz#=6Rdd~Q4?c|_H zz9}}+at;IGPW{q9{3h%|HJ>|lZPM1L4*-%7ZdCCG9LLdEAQmXFF|FJ- zcSU!(j=4jHn3`IxEQ5hcLFU7k0%RGs~YMGr(u z1^L3n@+*q;|1JIt{J9U$5;vPzMGgHq{D4XzZ7cSVInENN`LV*yE*ke-63aRnpnW>c z6xoFb37o3A{^+FhwQbW~55|#J;7yO-Lx~_a_?&wdBIP&EZ^j$5dDlBv0NfqneMxO= zq_>hIV#W4;6)#JC0Ur&&#Wi4m{1FX2>Akvw{OfMcM?qeeJxF;!W^bM<6*iiE&=A2` ze-B-p=meU~WKA5)775a|_&-p(%SbSV%7H&`{D(z;KqJ*C=uA^(b>5#XkPdw(g;DQe zxyZ-xH5u1i%Z`TRa}!DT;nUV4mbQ^GxkBH(oBo_mjh~H(7M(%zx6j@SdVsLd)x|_n z1Dn*-_m>Z0>Vdes3?5C1^!z}QVA#-F3n?QKzND|&f$91<>|I;t-!SZ+ey7R{Agu-kA_;D;&=24qV?Zw?x?KlT z?gS?CKDJsO=h!)mOIJuF%da@S8sW^lyeL6Somi+xYIUYjM0S+h2(-AFR9NPMp2aory<^$1%jz z=&OXa>O~0~E4Zy&rTF)N{m4u7W4Vk{=DlbrY=wVvXB;Sxw3~drMbx}**uajh>gE~r z5OUZ;mJK6_^)bl;sbi2{?hhqS)dGiSvQ!Tk3Z@+^o$^}_`Xpl8`g`UF zrfNYZ3?K8?Ca_+1rlfyE$ora%DG~SEEAmTBwRi1ld>Hb>e^@DU_@S$3wAYNNhU-Nm z1|zv&Km|#m5*wOx#P*T9bb%+{`bBX5dQR9{87pCDKm}@X)1aT|@GJ;dVf1%vuu*rY z!!?A-nw^PaYNqQ>u+Xrr?`PpL!lL62gY@*>nF$3TSQuwnl{<}mGI#~Cf%Cz?eJc*a zxGz?d!L)3sq9B$cjErY>W7ZgPGn{wDq(q(S^SrJ1Kt`E8;t4VgE7<0tMV9Yz^2~Sz zEt;%FYW^aDm2CMB($$vTtHWKgXJkJ@C}r~wco5dO8ZEHh*n}cs0pm_ldGgkM4|q$% zj`9q6%-xUYo-E{AR9|dY$Gk<>lDQ-fpmn>9>&_`Ge-a5%606bQoIfy zy{@y5){7ts$HnX>v@CkRyjZ51kkYId=!=V&*>OdkZY`*k_vw8bTj3ZAi@&W`?=`3F zw|j$ei~`-Ly#Ck20@H+2_1r>q$gs_ZGgSzN2_+)xz8E`2%qF0+C-=LPHxCzCMko6Pq~b?;+8-$} zyGkp7c6Psj*BzveI`3LOOR|k(| zX$C(S31c4*b$MK4{X?k_VfS2_MfTGG!gBh}q`&^AUsu7#T??j(gBPSF$yb*rrW4;b zXL*pSa_zAEplOHgrq>iHd1;$`msd4G11h^0;*>HxKN0c{xh~UZW6sz%al^uiXCO!A z^}r>~5r@RZT#8+3D|oF@&aJVX%JCRCb6V{z3Q^I+(j;@xa_zgcIr}@$#X+Zqr!CUg z1q8gvScSjE3<;$;_#;T}Eo2Tp@!-+k?&+ILeB_74Gs zNg30-r3QSnKRb-sC5v?1jJ(FUCD7YxY4U8||BQn|YV=4A)4;BcwfHevGMI`j+`?Sd zw8ij_UAo>=173D(c6EAYcgcztc|eX8e42l>P0MDozK+_&TYrQ}-szvj z6iLRZE2m;H#W$1=QuoE2W2&`fc$$$bF}Tg6-wyDEOhvM4PK(I`u7!BLm696VD0G*e zR?`M*EdK@Dr5Wb;F zd6$Fy57SgUL97!YvwnXw7nLOI+Ypb853N&{vA6)H>r-9-$~}t6hPI)yC~Q1ydVAQ% zWo{E0s=vEOu(D@qW+hV3?69q4vt)$1`y5i7`%OOAFM0p;)X^x`qZ>S|#~ji71VqO? zT-~KNvKD(&-Cn7i!CXCMoZAxmx06qlHY1!h$p{pleV7yq>9NNC?d#Z}GMQiuvKNT1 zrSB|l=_i#d{FvS6=h>&jXtn#0X5K;@el+noSs~tn0|asFA^R5UGqtr?F$&5bf$vTc zzCa^cRwvl168K?0&8R{V# z#qTnr7g^Muk=F_oEpLLpp6HjStcy(==VswPiTU#cVlDeDf_=N>Ex1+{Grnegk!#y* zQkJ=F``NFv+qRLlN@9*n1dIW>|Ih`mpMv?fVz)^Gk5{A8@vuKhtl1DxpZn|o;V~Om z2AkHBL&S^sv}UY>N*}^{fzhlnNPhDTL9I~kx?<$yz|uq2Gy3_j%B6w5$nJe2{J7!$ z_*@_X>G(hI;PGIxo;vi?RcWD>!5m&#!X0Z~9oY-ez4Gy!WgECIKlrd1RL7 zV&nG|>Jf{o41TU2YcAfj0+18Do6)YChPWNpk0Fx|;H(L~ug++K94TLXW7TnPLc(L% z?ioXVTEg6jPK{%F(j6VUEG1Y9oz=CFx5UIAnH*RlgYOS5>_h$($@dwAVX~s&2_S(R zySg6_<@;}CT3yc0Qexn1xzy$=(=d9bG&36TdPjnikV%iN{?^(h`d|uWTOOD0JrsKE zp>f_(9>zZT?M0(;o|5PM7JM7h;w3 zA|peV+w{i6Tbq-4!JXQ>IJ3Df%~PK3lq!2c`p2a;S&9Re7qAyqPR79zG9%=}br`Iu z4-i3!!+=Utnn>Lk%=}6L5y7|6&_CjR6uZ+9^y4eljE5Fwf>*L;ZzfkkT|(*KwyKo%TW+uJn?m5W z2(;Il0PcS3qQAqzM5OE`Ud zhnWLCL)z;6))9R&%Gb+{7*v9yqxBoGPpQ^*LUpdo+qC12Cpla|K|1z1re*_3``!vU zDx`eRS1Qn<+qC)327z6?^?eVXNF-Qm_E$C0`jXgA^4+R(!$rrQHJz7wo=li#*7PM0 zv$gg(P|~qVU8GT0@O+HmsaMLrnO{_=f_2rxLya0Cwydq>V1R!8nQVW*EOGQ`|8->; zbH%_%>6j-$k%|ASS{$ng7Dr7K`)4lpPs}O)guiG^a`nR>8IjzT76g0JLs;+)Rfc}Ed>+?G7UuzV%SG5pgr*_uZ8iozVIW^_R z@SO$0){!r@`H6M9ayh1# z(JUxH(dgoyKV;P_gX$SV3`(YZ7(!$)&buJdL`I=Nvwj|DcM!0dVL}VgN|$R=1nMY* zSj2Hznl7M;ozBSq0TyCewh6S^vx$;neFE3_y3DO?;c02$zo8PtNKP0{6wbn-8|S}o z$wp6rj~onl5TD*ZI*!GI9!?sDcgng2M*HVlc;o(T^@ARFD=h()J;04ti*=>76pRoX z1C#7@c0l?^jjQ}VCaid}nCM%kRXb-=HfpD58Zt5HPggLbtqC`27%z{~+AtVzar43} z4EEu16p~|=IKbLBV@casG$Bg!kcBX)Z)fYE(_lr9p;tTYh*(Xq2UTw_y1URz2rd1E9+wJW1j#i8$c203$7T*C+M&R;Qn zV%NJx<$z+~0b`t>_bw)03zq|bulBMII6f)6yoZ`Vd-n7b#bysNLpvmQIGF2f2}Bdk z%xUy(sppSE%@ny6A6gx5dVP9__`Ghxe8}LlJRlt4X`)K>%}&zN12c73G=fp`K&5QK zLs?P_krZy7MYUg&xYmhbN!l~6qCs3X&i0>l3oC4J*B*F&`_HS60h@RBrx3$=-jd(l zCeVoNzd-Fxlc=fDMJ*;z-U5h>G(sR`{j{m zn%Oz8{!F9sW7GG@r*ZQa?p~(IQi-YE_=%1}(Ssm5G3SFoL`)}VX|R6$;z0XKNwY5v zz;B^Em5YfrQz_I=Hu7v!Y_5N!knF?wZu5APVxD09w`iP#3v>DP6!O;-&&SO_Z$qFZIS4V&NVCvG| z4TDDMp18;}tia%YnFqO%+7J`in+46hbb7UtkNg{2!Jc7K8+=E{uUcsjzPj~t%3vmB zecFYl`?olBxf0ABvnXTzY6qy?1;OZ&%Mb?gdNhM9PkMy_ezu3~GyKlMNfD#yHee3e z#i$p+ySk_|s&{Qhp;Og^%%kDg&hDO*UhwfJ=s|zp70T>B_mOKwpOyQ+&H`Tha8|Wd zBw17)UPa#3ze|v1^U^r*hcy5g2u9xJ9YNysxVe@qYH4@8-X(?O}`t14AN*lg97U< z?nT}~-)y0U&&}yWXgQxTd1A>d%xp8?jT+_GyXrQ{$I-4J{#SmB%uV0}N`;RD?|f)HAm4vM0v#2Y*}%0{ zOt)}%dHZM)w=)z`{h~3HIek+(eOf9?H*5FQXDx82+u=6~yn)$TF|O>5)NmUq2i5-| zO7B$#WITpJYJ=aRz}5b0e~dm)obp2_wuqQJzs$LmVEgWL>!F^P`j^?|4`g>UwKa(g z)3cjIzZ|wwwQk*oRz8+b_F9=!k?D9%DLUWyp}nW$CiSX&A)JtP5;rmE(fhWcmGfyC$G;-^+G%F$bxomgdVs~oGXaAloSZub@ zyM0FX^#R4I`md~(W}Q|HKWKk(rE_!B08O~3{)f@{rC0ojGAqIFvUZDj; zrutb#O*(Au-xs&Yo8f|~TrN!(&B(?qZ+gBz?YWg7@>tEV&`==J=a!cC{@t>c1&fOv zluByzL2JP+FupX!n20NNLpM?Ne8VCFjx;p_{oPYn7)BsIkd0cipa~X1rMbDSn*nq? zvO@SJe)@iMO_mjEO!run3A&gzm|11^mftXw^7o-D&K~>iUC2!R9r^aocYoi411JvH)X$Hw;jIuO)iBb&biMWLGf&EO# zm9cK~$s}B85t&8lH{OQoX0V_j^*&1bxP+tJPFZvzD6bFXy%EnpOmRZrr}rH_8Jvq- z=EX$Nob!&c&wOu4rza(7ms}>EG7qReFfCcqE1`Y7UkS&mqgt|SozboVx^*2b1@_Sk z!ud?8D6Gq+B?rt??B7hl>CQ8Jp^TI;P!DRpWSx~3>~V887|tHa)i{zh(flMi>MP#* zIqPmsC~^~$z(V&o)FQauE^kXjs0FH@4s<(`$Cq!v7au3Ky7IXDyH$N%8^Dm&_A=g| zYv*gFGJ1eLo+1~Ih;V%i-77vG{?9bEzbMJ-;dxJ-jQmO!IC4_IV%5x4TV1+u`3>Sb zmbjPuWp@}R>KD?IbJnxj^Xb73qgT1EhvTcFSMu@ew|*mtoN)X-$yE`IUEro58JmR0 z@m?}F31AW^f3u5wB=mJR5Ly~~7KQi($u=CRN0YQO}8MtWsOo!Lq+GraY#?O!xT z!R2wq5a(ngyLlBWr~i|WMHr*yIzM@DP8=A18z}jg;=bE^tq6c|!r4oZW8%e0v+Ek` zW4NQm{sBlN6%b7n;bB1v7uN>PMkTs!%0{Oy72QQtvp3FTQvaL=A_xUyHvtg#=?rqo z6)RDjZz)BV6&KjBU#wKMWu*(4;IW!ggG}OuFUKUJ`*0ZgvhOSzIMPi&Q)rf`#c+8* z9q<9f=;-AYvhG-oRX~?b>?YInD?Xlh@`yrQU`luth$_VG6H;M{YG1=_HIDNv3VQx* zKo}2l_AEK0)ZdxaFb<$h+vw7MOahosLFtJat+U4rpvpx6>6S33Z3pjoaiHUG>(g&V z9l5>DEj`d#Wih^b;mK3s)$ZZQtqOpo-XT}n0 zga|C!+%xsuAN?{>hV$`Oe_uvwK0b^Y1ChMTFNZgIK1<|RxN)|NF`*2x6J+$w7!K;A zA3+>|e)}Qfl76jDnB8C%sVda>5+kUZA|8PIH(`VKOcE09-Ek+Ld~7`G&+DxRQh=Ur zDT4@_D-F0OfA|_0<`8o<)XL^vG}En%ju??Qv$|{Sbnq{CX_>!qD6iql=+v?BS@2E`^@2OYnVsN513e$LDuRl>p^C=`l3tN zn0`)%q(w>%Pz|rFeqHDHAmbjmyxF=^@o?~Ee`Q@->pc{-8o#b(OOaw4JM`G!CHpA* z0r15e9wD&wuo`pY+JTwWBu#FZ#45b!+Pt(y-gn~?>QIB}4-@9^Y;$*Sc$QH~I)<~_ zx}Al0OB9innZLJO@}^YQHjk&oo!POhD&Q6=l(o9cRSfApOVh0!^`ulFF{(-BsTT{raCV2TC zF#q^qOC_6dPMGpYTOE&Svxl&_Eo0XuPj-wqWkCGaWNT#TYme8J z7*(qu40C=Z55fM^^9lCD+ls=(x~6g^1(Gv*D-E!OqA<9t9k(@x;>MU6fb#1wCW*0n%Uo(o!Wb@2oK& zPRnBa8vlcibtt!KoN3YbxsEoN2wm0*n}Z6mmWfOgy4qbF?E^|>Jy~M7W+rwTJ`aMXKQ@0U-M7p7d#cWx&O{LH&?|x?H2*i-x#_Jl-H$XiHE)@%_&R! z?C@!e3Td(X`FxP_;TP+x2?vb68Yo0-e6@Xrgi!TNSLqNmHK-XFCLvGqRO7X1@r;7C|SJ-!k_p*N)+0n3snbYT$A)#jmq@o(OzWM$`#6G_f+wd@=5l`17LOZB* zDde??n~Q6VVe9|3fkdsVX;j>at_Al*L84lQ&-A(pL2qv++3pYrv7N znR)39<+I&MOBBBI=+J&6O2Ay$H)SGBEs-lE6*_YqUO8e-rd z=IjrEmb`R}8h09*K?V!M0x=wItgTbZuCq6<3kcL6Go3$x3iyp>=6qI@u2}eIF4j5p zB|>9*to5M!&t0a!6W7l@sKk79Kf#b;td>#z>PH&6FQB&8X;byQ*CSo}iRv*@zrX#5 z$CK*Z7L>~)q_MYNj{1|^L+pyL116|(;Euld>DgJ)sQdI@;NoDOAymiXjS$d_$3?6v z=mUo;Kwi2sv%0!HbAzTy?pCA8O!_?M}YxEJ+8D1z(EKQ4sx`5X^7sl|slP z^``pbY)<=k4|o&wSGW7~GP~fXxaE~Z|J3iaKzDg>^UJOcd2~~^6+Gc`yohM&jbwv& zl5N|B{(w@t@sOrav?|$rUaQJR!g1N zG9cflaf7#F2_r6$`*m}f`?oFiXWu%x>oOXoT{y_g?A)m3(CTBpd?tkCG6@}3|Kzk1 zohK1DGyAKot+Vd->A)2}4blgglO;H+Ht!-p?uxelQMUNz$fe+`I{tB|au5VH72{tC zndYm}9lb8aQTfD&wcJB&INlO=Mnz9JFM!9*VB9J1zAC3?y={%cd}t2wxmc!Zp1u$q zpr8_r_Tweh{Px0R({|r0TZ2R*Og3D6AKKGQk<2&{@sB|;j^*jw>*|Iq6N8w?4rEb> z!RP0YWWQAUzDoQj(8Gk0FHukG#{&{o_yyOh>J;8JKoN(Xsms zk!%ZiAHPeGkB2`D#`RF_DlTB)Ta;o_)A$kXa3RaBTcBZe-DtX77S7wHq4Ff<0L)ex z`>5fb8OsL0e~#Q8>?WQss0(X@w2v6D?g6|al3vTr~ z6=lWRR7BpSK#EzYXy6|M)*Z~hKY1aASM^#7kuL9>bY2VFEUfYm+(3?o$|9O``zJ3H z#yq#jxC_%Omp8ndwVx@C5mgWoJw?KMIIFQYvd;EDd1ZQLBDQxVwK0+YrCJ07!3v%< z(u57vY?7f#=-#QbYQ-nW_Oj0YE3*Qw4oV?4rBQk*YRyZ#jG@4_XJX^84z-sG)O*vl z@AV6IovqEH31;uYd)|OYE}zaFH{af}#-5J3SH9)VKC7T$>I1Gm{5Y((4WHGo{9Ia| zdA?)ReG(XQOMxWokebf3)72!Tnyj(`~_VCRmZe;|(8BOgq zI4`<4PyA6*8Ki9)l(|jS*a9=O26v(}&3Z1pajrsc8TUmy-ivDk6Ox-wQJb&}d6{Eo zeXZ=Vwiur`ndEO%Fw$EgH(nCqL>R&M4YQWR@|GXkV)m69^FHgs*ow|@igHxdX5hzA z_f2DV^ttE8op-rC&j&uyQR3HU_HIP*@AAFUwV)B1m@?Gv=3CbRb!g!@FGpwk7vhz| zUuty6p49kz z-c{rGCuFUK;_+V3ag#I$q&cX&0_O!edz7w8{DXp>lF)}{L@w|bZMQTuLyJ~Vq)@0= zl6#GM^FxWDzch#!N9|S%PL@(?W%*PcYF@bcFw3lwVukhf9$GT zIt*0!p+t+vJLXR8z9XC1x2ik#7pBoNsy~lSr?KDbrIev(2$W z45>4 zheBtsWSVTYlV?*XEMu{|HL6r(uiN8CJWsFh9p=0v-(Lx0Oc&o9k?ZL*lmiD>O%MCc2B9yercETl*ny``K8=UzQ@=bO|vZjz_%4ivL*N zF9My}1rfj5m6aNy-?y+Fl9C=NFG4B4&~O!)vJ#m}^uMM&2GuBecjgOwp4|g?|14t~ zctPN1u5WYT+`+b!57S+Jd8Kz&30)waXZJ+%a=I_ z`Gkzo8zVoV|M1#^4-c_vNl2?@O(W=a=+t*PZikSFA4^D@l$z%eqQdfOI907edpJA# zF?#) z?g0!doC5L-yUROs52$%G1U(8 zN@mU>&sm>=0(Ihy-@1L^tC@K_i`c&pJHliew!ga_4S~CYMX!f!#R4;5QAXs@-ZUQoV!* zE4)L#{mlxv{wZ$lxb8w?<{k%`$&|s<_wgAC>;5=8zrn{c|xD8yG-~ z(4LJ{x3Nj@8B{{zVv0kva+7PYjarU+61~c_toOh6#S_~+n;*3YiD+)+-@-ywako)C zVf2yTix`=Ff9gVV$gNXTFcP{ z`z2@CqF}CLHvDb<6*p&LkX%T(^eRd){(ME&EKzlysn0v0E#>7_zMVX|)F}3D$nk!< zn+%Q>EU^IJ4!~QYCfbZ^^;}3=5ht&X!-yh!qi$ZZbQ!;rhcxb8SfNIKZ?a`xUNe)W z4%$??f|zHM>^?j`V2mp4bb?^!-aj}1~lACojCIX?!c5W&`@Zz+cA zc>VJ!vp%{gM*A4rr2vC%!+OqfmiNsoC=aCchY^WseMFF#GL`(zo*{O4__-{X}+LYBf@gr zW&G4+@-bP#CRTc%1bwf9{s z3{F^1yu_Vo{dP1I;PRcn>rcQNMu&J);k8Ib9Lve#9gj|h*ou7U$+fv|Ui$R%b;Nqk z9VA>1yrw$auQ5(j%Hp{IzW`OW>W3F@5uFKRYCBv_s<{M0@JsG+jSvX=|Eq!nmL;G zNDZ==v3D=mJ?qq_Y#S2NCRd(G-bV1NXf#qL1qi(#QEY+_@*;nBlYmEXYv2XOqnUTP z^Z?33DdASROT#G+P737+)$SL#AL1#zLTdfg+Sse{;Ph_U6cK4dr0!nd!lSSjI7zoN z7`o9C8;DShEaYgJyI=%h``p7`(i_QBw%t(i_B zqJ~2U<5J}k?_U9;IRVL0DObk^5_oyYULnpQxhX7PxsFXnG)KnG3iC3H+K+=quvA8u zm8{g^1S&PA7>$0$E?%9}W)(2?V2YOv`G*jy{G{_fg*imgqfo`UV+ZuhC`WgXipK|P*NA8{DCNJy?wt~;)PRV8O zPW&-O=(lgsDxcK4aKTy)!z)Tm&r;gxaT;BaLrgJA;Y?QI_yu>ayQx|Jd`J1}{@K{h zBZnzM^0_abWn`1(rec;H0qbGBv*HCjlXuvk#vWM=OYcef43i{kfx_Ed+T^ks<>MNg)B)`<#h3l)|S?D-l6DXELvJ zg6#$-5f(4CZr&`)f>#=pNKD>o`Ej^52Dv^J7wUZrz~pVh`#q_Ui>hUt{HB0fJ^@C1 zor0q=1Oa1Xr~jm?Phc3)t#tSZZYL!t8X%{I04@$Aj79D4x%4aYNY+tG9K2~M7`pv2 z?nVEIkE!$tdcYssf;)PH<(WXMIl$Yl!g_5f2hl^BpFiXv%qdWK6g zs1`37A+IFIa4|1XU4Csk&--Jk<>yp(kN0k0i{zE5|70gx^Dd8k+^VtCfIPU4sBITg z$vokDkZ{9$owg{lOZZw_{jx?exsW=Hu`e(%oYBSc)OxKgTrWI!|LC5&H&ohPO=k{n zI2WoJ;?2~uzop`%V4!=kb-4>;x!z4KZ7Tv|d@cg{uzqv?Qf1Baaa3V7Q5MHX88X~BRuQDmH?o9d~Z@p znks~VLa%R7wB4+zqJas%1-0@;mzJ#GOWW4Zw2jk`M=CkDiu6xRVIIQMuJK=+6*O># zp(DcWDP%$RFkL{V-3>_LP#I!V3#_?0NVfo--Lc;tghQ zQ*qa(f0W zZNi}0g;J#3>5o*U_);3-WKBj!-;iF+rpTYC>${4kONEByA8r@~vpzQ@)lolrO}V}E zw!>3Szq(XVl;>2IX~wc7$hsG|K3MYk7*a;X{%e>wb9Ltd}IbAOw$aXzl00cR~g?9&pr z*w&h`j-hhUr`Zm2wctvBuhaLGPl-=}r#s({k~_}ymiDI?U$?corAx6EI8_-sa5?zQ zWjZ$KJK_J^!eb9reCpVz_%eub{j1YAJ`%zp!O3Wpy5 z>>n|(9cS33m)^?IJt%Ek#5r9V7!5=^Af(r4vuU{*zfQG^*WB$uDl0g&{`q%)S7{8~ zQ0}98=lJZ)!fs)+sdV|Os%-EFnEAEg#DojIiAnBH*`OzC>`2#h?sA#gQ`J`D9{MfY z`WLfhnm+>Vo#v}Ys^rq$SE5iy>^Jc_b z7vOdDavA;U%usJ$LQO^L*sLK>usKz_CQO)E+R}I5xW%2$x(mG1K8Hi79u| zjG0)LQ9|#BwpZJT>EA@%CTOn%-sNtW?Lz*f`WGjrPo^~Uz^3cO_|Qb+Seajs>*{15k2}wkLEkb7Z?R#NIkC7 z%BUvypVokcrqn*7qz|dS!j_K_xJgbQ&2Az4GQJENYh&?`&Cvex&!2w$zy4KOF($wh z%+!09W?RNL#Vf|?vU-`O&d=HB^S)KOyn0b6dSn_L)-G~JPn0spRsZ?7T_J1ee0M5Y zDfA)n7H*h4z)Ffo>P8eB@={vyJ{#j;-9^<*@M?fzqIfD6O)z)!kAKfO9yQstL=&gh z3MU|{bY-h9BtPqC4a?6bGtY*+w@dlPYP!{_`=e9O!ER5w7orAI*JV!nj36Wqei{D(*T>nnM+E{5>_;O(r~*iGtJ_UC(_&=|faOy&Tam zWe<}}75{)!E~%!DQJACa9aMoc>cjHmw?6R^kC7QR3Q~QoUgEk@k(Rq&$j3ho8`@YZc(W}y zd!TX2Wg_so;^|+Hr748&+f9?B-o}u0k$*(;NV~Uas{P~+<4=MwmPOLfIo7D*hdZT{ zQdQ7dM1ONxKaH|+fcTyQJ|;F|1ye zja+S!BU_I@F1GG7<_wAuO`4q;F7>!jZOY8-TI4}f&M-KPP z7Llz0?1WTvjSoFr?*5vji0+BJsdde)s)Pc8$eUxg3UXjb*yVve=1LP&S#DJkb68zA zd-5leF|Z{mT7~nhW2p$XBp;KACK$0Kn9=W*%$BSS^Qq67dAHqC_&F7)C%Hk^qhgOT zeuhu1K56SlO%%`JoSx4?hPe;3{5erNN3!ap0|D!&|2XXW!Wl8~=r2QvsposIE1H*h zOiczq1|>vcmSEERpKuT+Q0t*l#?{}11d!SB9Y6GqbKU+SsRFk?u)Pw<1P=rU%2I_3lvQ;PahXX#emdJNfCS18&e;TV*;u0>=iUPOd zz^AhEzQro294qd`MG-cCJM}k=#iX_v=GuIy7lpZ%!)_vOkc-h=k1O;f+hKoCkrR^; z@hNb`VxVO`)Y#K+k1M|2Bg17KJz7h(IWxOwqDdJYi(Sfnzq|6$} zK{KziuV?|yALYE$eXSHn_)iumunjqrcgLqa6H_*3GQhaq*@{-BlAxzQbsSc`?n`n{ zkv0e(ja;|AVngpD(cnFQ2Gz!malrjp*@LvZ;?5QWX%2bfDQ%hC`H7-9ztY+N@EU3b zmc^3ZIs5n~Alwhds*a44Ul-CvZt(*CUTxVnm!h~Pk_QSr~YB&CSu)X=1p7( z5nIk%!rm14=6Ou7-P}Tai($<_u@9@n7wWm#ec3x$2*}^yaHtEFZc$9sATVf?+0!g! zE68MckocqTN4z_Que;%L^H_b>gr25a0gI+<_ur*2;s>0vIQC@jSuJUBkv;<7{mU9= z1pX?g#_OiiO>y8DgEu>LK+luk%kyi~^{Nnof}9J<$Z!dldtppO&<~}Jet~qwl?l!y zfYMb1@h);{E#b_H2y~;6x;ejkf@`E+32Bp@M&MS~3{Vsc3X^hb)u8%7#d%+dBs^?D znpMft6S4M8ZNtKJ=Vr*%#nAFFTo)I|axeG%r!rk`Q~K&ugucsUX(e}9p8Wlk@f?KD z-bPf8$2aNfqI!J%+v1yy{S)>cvTcZG@M-EpY*6>CoXiBd!BVM1eLidON-82X6+-ye z1@5&FhrnmRMX)XVn(6mVeI4Rr42?aa0%?B1?DnNrxEkdSNBjCjZdD4$vUy3Z>)#XY z2j}O;p$!|$#z~b;DTMnNp%f7#)DiD6X%U-w;#vVm0*+9rp!Z6F;a0o3`&fcaW`d!> zz+9soF`#wvid+Mge8)QaK4e``uz^ zVw(rmcD(w-57wwh>evW*!Dz*2hoSuLoctbwcBe@m^rIa4Te#>F)8APnk$q>=8Qt0U zIl!kIrZ9{_4gBU@UUZWv)d~=Gc=O@?sgRz6K9umxJQ1tW*wCDFY-b{1-(Mw{-25nr zjbQBN{0^jiHljd?p34{6o1ZbGA{Wrzrf6=PI)^aNpYVxKSX#)cw|id(wRC*tA>KW! zsl%wN=IOUcuxr)j7;%ikvg(ni;b`Ct;M<))1Q=+TD(7_wU%jmA|JjokTAyVG_ zhx)T=V^U1FDb4%g^q5o|1g%VTO~$+GLeOiSVzqLj2i=Y+94u2%PE2!Qs$wBc+pLALwZMv=vaUUjf96wL7xrz7QHj!t$nk`vE>9e1zDy9FDok%;Aa zmf;2v9Jp9fF}4{J5ZBf9$KGS{g9b5H)z@GPE|%9-w`@wb^-%~YhjVI0ewqz^QR{3d z(an)!l)|hb?9CK~$>2WQGN_@o$X(GlFqzj&PAzIHw%+Tf?U585x9a?Dz-8)jqd0JL z5XM`25KfQU{dD9v4(Mxdbx7Zy5eaQfdN}rf!W5*}j9D9Os^l5KiDR+Lg!^yff;yU8 zYAUK_>I_<))~oaV&ufQH$aBZpe+M)~r3WXRR%m+{lwJhRUEcT9-T_pG6k^N3%KCvj z6a2$-(LRSG^wN9sAjhl0`9fvmk$}Or+q~AP>wEvLMb@O1V~G=X{Ht#)S|AsNSFjUt zKW7IM{Jq}YR68|!$2sV!$Yr1r(4)fU*8!09`qhQ++u5DwO!_?OdxJliJcC%E|E%DO zt%{{O_ousHBVfsr3C`s-Re#!XjZyWx`k+5Yt*GU(W@M(TYU7;zlqkLKX}kCI;!aOO zZ8yWvI`5IENg<;w^6~q5I8#<&AO3SZpTT_mH7Uq9vH$RrS;R5Lq^^YuDAg)EQjIl- zR6YIMSwo%%|KZ0h6=*u{gAS`$z5PpFtxBoPY!!wAFPS)S0?%-GG-t6X{{~xo{ z!`Kme^+CXsVQ zzNUjN=vu7|3-qW{mz3o18|6*zWlF+XY#@(lwPdAb1qCtOe3_0pS2Pu9BmgI7md(QG zu7_M7x|1v|uBtED=FMf+-?lNaV5I1VgO3O{3Y%+}k@2b7 z@FFX=yZq*mE`fe4V%$_Z#?>S&n89fOnkn?(lqD}5`xgDe4?_BCog_`=CBako{=_UKloC@>Jey-pi+UHxvj0Li0Bh>#y>e+JejVC z1SIS~um1E#5usY*c7>`-cT%+(dpi--6RRM&xS+7$;7!?Th*P=-!$B3`-GTPR4wHlF z?&;~)Av>{|*RIu58hOKoY)v_O2L`QP-yh|OXiFjIp>o2AWIfWK$F?)pPpXN9X^2uT zG6d2j9RZ1F&oBrBP@JUkmjI4%Y&pYs5n)w z)x0Q=(0~1bX#U4=ITUSzIBPUR*JSA`)2y6YD2f*#JC@_%y_}_}7kt4D5x+_uvchm* z9j>4W5M8^2W?hu>5(gpKc}EiUgkMDKx#iW&x30z}MV2}lFKh17I(<=rgV4p3ffLps zfY<|Og~bqR;U7|cj@}ms!CrV%tMha}alE?x0w`Q7^k@kM-@$#A*IQt<=pJ{RIa7%) zx~rh4-!r!6yU77Vlvx|dO61*V>2c{%JZnnw$CJW^1Yy&tDoqR;t*PAXnZ)|spG;## z-wT>69{*SeK){stMQX}g8gF+r!oeysfK0j`O?_*5p!~0`?Tfn!CjsZDlS!goIQKrz zgJ}O)%(w}O-(2!UG@r%gHn`a!Hz{-m4l#mkO}N~q83xLDMyFx)cI^!>AJ84a?Re1X z#N$qI@zte18xJJa`;<~_hqjhi1ZgL~Z^{0dN|2DKri3<7Y8Uss<Ap0qD(mC%wKBQbJ{n@d1ySMI6Yo#}MatTzxE;um2N z3Np9wT+Hr}DGp2oX|XBsWj}Z_7{D@8330+iZ|uowZdmB+&2l+3!>V_3xKbIvwlGl> zLA1Z3vZFi{or|6!eO=pQlWW}hH*CccKe^hs*{`ZQTEAf;m$^9b&O-JMO)^ayLL&<2 z+o%GZ;4HkDD(b7guD42UFd8!iiP^u}a7VjgX`&_g9;oDRsNF^hYV~oa)&|D54OT<* z+QH0vqK8$$dvyP=6D~9?8_Nh2cLxqih=Sm%H~VzIGl0DUvWT^cziF#of_j~3)p&pI zIJfhEWh)Znab-ylz4On9rA9VVCmkMRdEvh5T>`RzESDx+K@l&jkJNeMql)*W;)^OT zsR=6ZlboGr;6@SsKPCRJ=lsvdy`TEi6Z%l-9)iW^{)N7s4poN~TYv*5=bdYE7SdW$ zcBNRe5tbac&S2!=8gYbE7zh`)qjutU;_jZg<(I3ILx?WQi}b~%i1c;JOV9qQtYOO4 z+&QNL46S_#!qs*~$1o4zGjQU@%K|hn3!PciV`H~@>4z-;x-ZWYv#9>1T{l*?h1fm zjPJD{QymW@XQYpI&@M!O|N7)VJR+*lmot7im85B?hA_w46v)%Xum7n^dr*=NvFI%B zG6}+&wph&sn%}=$E<6}lse)O^F8MN~X-HU547t1Fd+kUESJKf}*Api4zD^~8i+6=N z@dZb5ykPTUtaYu~RBKMNq_ZzojiYLzl`Hgkr0n>y0czm;6InsQj_Ku=fp8? zREqpT+4e2acN@B*AIam?b0#UPs5DBgv_PMTA31B$FcXqx)0*!1@A=cm!yyR=p^6@j zcuC*weSFPZiahKyy+`Id1j!dh_d0;|J8cKh1~nD&-_x_s)BUyV(7s;!oi3t*ESD#| z^lvmNDr&rCI0ITLjz5mH)t(JJG9297POI<#_-GD-k3Mfx&5g6~7XiGkqpOXml)CzCw?;eBhY z)Dhv~O?=g2PaZ4(Yfk;up8KQK7>=r6Cq$pt#Bph-72VD0r$QEX+i~Z=vRn3+P~`H8 zGR0)a#U3$qFTIj_yn)YEUA-TdZXfv3G=2_91~39^tWr+JtS5cEli;%Ur@hh3c7f*k zbKiE-GS~vwGfcWc$L3+Po_D{V-4o7^iMi%&Wu$y`tfRrcQ_EF4(ofcS&7sSXF>+B| za5y7lePh1d(%CPW{ST$3`Q()D-f$8qH*Zd>qO=U=NNBSi7RQeXWSZAYh;Q&d0J->% zb>);vA03&_XTyS`_4LQ66K%wlzMXa8^a7??K76TDjBj@8)17A|WSB)FM6dW3IImn6 z>XTo5zRrh>SE!#VeDIRpX<_eDZFU};6nX@D{WgoCQT@X454&`*eM%|5I)6zzz48;L zs{#pdJK}Sb5u=x=Lt0>t&`o z(ImXt%wL@}z}RR$;{s8hH7v_}O;_v;z4>sNYqXGZr6%8M zr+cvI(1h%Emc)k@#t`r${$_FMc1Sj(ab@`Q+h;1Q!c5kNWNR@O$)?AWAAh|34{x=R-22F)VK1Kj_*<3t zVp%Mi%{vHB1apRhKq)vPx^3IemcB}7R5NLkB)3T0X zv@0Eu$au10Fz|RgQYjg`zTJfc^=Fx;WR?eIY82Di5plp+YuwCDyK6iqND2EMQa2XO zwDDSjzHHqV5}>Iz%4=-I>X(&g>W6h+jY0|(L@<=bG%of~H@mMR*SOjNS)(;2+y2dC zv9BvNJpZLw>WUshe)nC0YCyiJimZcdES`3}cWeIKTOkv>!f>gV2EZLSRjiRF};Y!X_ZQ=dVHC`fsYwJ+Qo>3{rn z#8NT7BW9XZwDun!-YLioFP_#)K&%WB{{f$$w9h{$f2+(@4AG% zC~m3@+K_jhr1Nm!iZr}-%6dv6eOQ5wC~$STCrMbNTwcCT%le((RV5P&cZUpAR@Y2t zIiQ2Xl5KDkt19nk_DQT~ry@ay!66eS{arh1B$6z@G%JO!)SiQgaO*$3LJ&v=wl34e zTYjL+!I{_;uPo$-o~re>ton{K-CHBOAa1sb%NAZp6p{O@?jjU?q!XmDP@CZMRp!@+ z`R>~LEaCj;>zmspxChMgF1yExB0ijFrVKq2&v#5o8la3a*DkYre~OR?6#QqDB$Md$aoX5qb5I5e>X*#mUT-C zDK6HGkxGaoh9ul}BqL?{i8TpuVd+u>Gk5D8YMMP_#hmC8%=Z{>csWTe*LjXlLBxdD zbNh;`%T)@bG}#VN>=}oj?*&bksphkHW?$TeJ7)LEKZ0$l6s#o*%-DB#XZUyhYI7Qw zB<;Im=~A2Tpv6R>&D0__%{*gGo3sd?J7&EkDW#O=-nUZ1kY0MDS^K`(qa_D!&0J_? zOKlis;)R5#T7)Q=?~v`Dj0agV-raNloPe^i*60;gZQpaGE)OPgg%ewQe*LVgHryX; z5VZ-7ya=k5GqdA!dG+Wi$41yA9L)GWVG@-ZBOV3E zo`%yK@2@H{ybHX{evxI>^w3)5%_#HDlfX%ZB3aj~A`&*(!=ji_6Kk;4C&w`z#nC(7 zTyXB{*os+k&8uc+`ps_kc(L286ujq;MyZnp6L*@RLK70bKs;~D>hR|W5l_V*roKs# zjd5!T@_jYh$6d)>6@`Z5I(5pm51Np}9HTKkiIPWTW6V{_lNkYd@IMP@O0xb!5gXE- z#(x4t)JZpd3RFz~`g=Z?sCoEVXZf4Sl~~P-^Oh-JTjh zOEMHod%K@$R+)o{h8g?IdnT5zy1GgH+;@Rg^H<$b{*@;J=g36HJsLocgxN8xPp9Gs z)L|}5v-nolAy*)NA3Z(mF81oiaio`u%wx%Tp6E;csiD)-WJuIGL=l51273UhmXk?# zr0oJ!*N6!p$p`!081YMU=`YVk^hs7#b%Yp~+{%N~uME+2Gq$r^u0CvV`#~1mMup^f=GvWk^+WII8C_TW-HyD-!rU- zB5ldaDwF|b@F!R>_I$6Ix03zk>3gO(BOF8owL(5J_6$QA0|8!*2Zrjp+_H7Pqeqr$ z#o>Q$)COWCySY1ZZ9<#{iv8Z>1le1cQ;14THX%brNZ}!|%)aYcD>@u8 z-1b_(bV(=gA}kPg(^hd}?%>c|-PsjEW3yNI2;JRSX5NQ_^|eP|3<~^EYibChrf=K& zlp1k1)p|b_LDW1&;Tkv}!Q@9;Lv4yLfySp`f5li=tyX-XrdXhlQA8V!1O&@qxO;I_ z@|ODFRo*=B2;Sop?brrg;L@9=s8>S$&{-wkF1-7Jm13~{M~l+s852t#F*X_SpHpt| zM?7UFs|D%6S}3f$AcS$Fgxtfay`>7YW)>Xr{!}nok?NlGAb9&0W4ff9X8XcE<(O-V zfS`i82NHZ%pggHagJD1pvrxkdu&q!=hdAD&EvD3|(^^{NjG?ST_ReWmV9w5&Q2MVd z!?E?EGh9z_5-MATnd+xuAJJ<}cqZNg2TirXN;zj1*y>u%uxHEC zb|6`%TD}*baMrc>XC)T+@Q*!ybBC|xXMRIDr0R`m)?~hWm?C8GsFS>X2U2CMnlKYo zLD^4aAji6UA9D8=efbW(Q-fOCfJTbHb}O6il&3DNBws(`tktxpx+3C;%D{w{^y7F5 zU1kIAY9s0wf>atkb`1?8_ctQrZN|?|BPH!qa#(feyGVO`o&u91To5(j6v?+?RmIJP zggT!z5%{VP@VbbA$nDLNqk5rCJFM7Nw@Yc~x!ZBH5s;KCjN1WI5%Klw9Z(yCt{y-| zZPZ3>ka+@uN34ffRu)_ec5 zki$VnAQP&;?@K@_Jobu_8+|gYSQfg!$*&-UY92XWp%Y@Wj)GI~ZciK3LDR3cUoIV0 zL3jLYT{Ljm4d>j~9)r6e7T5-}kv5FKq`kf4#iYcmlZ10-!6Bp7mrEXJ0)%p&9$q-e z*0uu^br}LC%(i|!OGt=dx&y)Q9~@knZYNJxL=dLQJ|k<*v;+6b#>&gUsy>INR~nhQ z+=UJ?Ow8(NxppbyvfB@G`LdIrHUIl=|3K%0dKSa`wne6^ee_S9BYuvm`q6xZl2ehYf(do^!NJ~JG4l$z4Ys1UHb@nnFiinuH z+4GzHQKp$?+MzhmqYNMB58wq=iXj1j1d18w@ z^oPeaGe$huq~0zWyN~rLeKg{wc70zl-9$mK=;A`Q*?+>J7W;5gv`G8wl}R|oL6d%u z7yx+qTM1@aog>% zw4GatxrKdCn+yhS8`!1W#2^*V5Xp}W2~)HDh6V~7oG|8mtD zynY5R-mU1_y?L>5@|nNJxVoKw`4CTy$s@cs*eDM?u)!VapKPc_I>f@-27<% zpFT|@7#lf*h+?w8uVQ7W_OpVUZ1~4WMmJhMdf|=T$-o~*Y_2^$aHJO$myQ3!>1JXj zFJs{ApU{2`s^%p(dmNLONv~?6B%+m)~#@&*?Y#laFWzscyM4MWcU3S z_tM*m4x+*$rBocb)Y|!~J}1lF?2TSJ)9WnJ>qs&OtRLp{8Yz~jYNB{=tkTu+^5yB` z47Z#+;o&+ZV82)DoI3$k1^3Y?xPVzu=n2m?CF6*`U%(pboem{SIh%ntPe#}zDA;h@ z-8*Cw+UkfJ$2)(AR>_K{Zh|wcz@i=%xNRps4R_>pa!pD~2ahtVQ=hUXMXZ;sHBk%+ z5-XJ=yO}ysli9LQv(nj&k|;kg9bH48NQOT?5YjF>+;u`wP=rsfEy;ve*g;Gz-o(Kp zKxw6)*INu8_l@)@3d@5%81{!fL<6%m6;=dWieTcOO*OSBIe23Qv!c0Qk>1swy@Bn;K>3naR*J}lB(Oh6q(;ow2~HOC;f)3S z7O*8FO=7b5y}@Z(pJFsW)T3%rek5}Jaf|)q{2yLi6!ySnMvFfXOZxuohsb^_Wzh7gC)?Jh(&2~&XPZQW1_o6fr#_#|FfxsBYrFqwiG;a-F==RrI zZIX#y-*$LqJ-?spT~sF)wT+Q8hOMSs_<3_@r|FiOs$E8pYWql0^8=jZ*1wDXD0n+d z(-UUwz7r)8ns2<9-U&SX6R9R79Ve-*wDe0Tk_J{fq6 z;f9yv^zi3`Zq_(F-zZ5n_dmTLXNB#P_q(pq^JxfD=WcScPk&d^+rG%8ruI0k3;qiU z@b2Hoz9x&|N5fms5L(#JHkWO#BoZ~O&N@ttSCtw44miU%oqp5*0JX1-{{U(4*^5&6 zU*o?MC548oJ+TK#n_;*nKm>lcEL0As_)bAN_WuBeAG5sw0JD~n7r_q>_!mNs!}}DZ zSH423yit-}^5-R+=3-8H>&OPYd&58QPM?MTF7ch;#7~IYjn(#%bF4h}o*IVbmfkId z6>Rs*4b9l}?!~S+`c&sBsB&4Ro|2QZ)3u)cZTK2{Do)Y8@4uJ%_Bp?X{{XTF#P5V( z50l21U$l0&r)rnhqFAkT`@gi!xG&1GZpdC2^FF1GeD(Wc{5SonJbUn0Q(uT4FVyv; zH1U~)qbNjdN^S=`aJV?nZZpk(iFlVt@W+I08p_7iV}=Pfz?<`q-B00OWAQIVxA8xN zbxj9Mu(gryVP=d)srXxW zq_ht_GAI&7AwoWeu^wcP5F-pZ9<|76Y|=^w;kT`H8eFAh-5<@2 zat&iAd)(44%s->bos!WWtuA>teU9HxNTGnp?4YmfS5oB4fUEcISQa-kT$0U_4;bxQ5z8H@-z=PQ zipO@D(o_Oszi&7@%UD1Dk&pn zrmT)(zA_5+J%1Xd_7Vq~wBUEGCy69okzq;5B!8dtnvLzuXk#u&G~(>JZpRmHg%_C* z${QdK)aa!uF|d$D5?e*TE6=S++hDfa8|420`s)4X8zfe%Vh51PC=8?wj11O_LlhuJ zgcFXUvm!$*yO@qERs$a#jt6Sa)@^wdr1@@7Z7B)0lj&M|bdnX^%lg(#1s+aYqjsyy zb|O*`5;|5+39jb!@SzJQIyY)O^8qu=3jJM7>JrAvN@!cqpGQT+FR?eL|kR)a` z4kb(Ze|J$FPwH2k7sIuNDI%UYFb)c?I@$JF<8#le!3OY%-FTmS;i$^*v@IvW<@b6 z2R&*FD;X6(eZdET-nDcc1}#TX3epuXftEaDpYxjM=2pGSO66-04@q|eD?iFd@b%BN zYUy4dSQpAKAW*o@0XfBO=-wPiBojb|qs}qEJpMf^u+wx+BE*QRjUFXcm5R<3o#W7h)4y+A z_N`{Po5?SdV)=582i1yrg2K7mZu+Sr=_=Uf9B>5@bvxW1RYa zmACO5!*8c}hWEp!21($#A@>e&c@<;B`Zk}XXzcfB!cgF$&l`EqA6!@3Mx-26<*ItG zpJU@xB?+~)os6wAHqmu~9G1jF?ek>!`d7DjA-o}bqQ;kz5h?~y0VKa2@_5Jj_VWFI zNP<>|;qm}vZ>@T7fON07!mVzY%Z1=)n&_p=Q7GR1{Y)h{2cmlSIjwu)$Axe1=872Q zEg{>sGT(Ur04}v8e*ks8PUZ_ex`oG>;c+eF1WQ5fNIXS- zphuR?*%Os@mjz5I^^Y~YNI-bS}#$9c{ z-|{)!9O^XJ`5GUx_v}TXcouy##~0c@i!P~cW{(8MUooO%!u-rg4UC?-8OD0o(zc!- zhf?tbdWDUJrL@u8EOI5b2JL|IarFE%#szsd?65We01{}LmX~vQWoT|A^03?m$4q~p z>s{uz;XQ83?cHa7&pxc@t7muNopSF>xsp4Rl-fZJ(;tm_ zKkXUf9W%+hyV2~U6GoUoUxILbJ7@X()9!ptsc0K?siv0VX^zNahc5D-m;iOI#!uLH z;-|zd8Xpk&uUXQxog(5@j^U)gQ*gV6a1>_;>OFekg6c++YI2h8+sMj1)@sM+SB!oK z_>aaOEN>h5t5vzWo9zXXHGD*?kGdDr>*{?;HZ*?%X;$|Sbrzo(nUo_w(UXF3KU4YF z>_@@x_$GJ!6QBMN`)>~T$HW@mtE$ThNwpbn+TJ+aOE4{o(Pj~nQ> zR?$H)L`lFI&Iilw&;J0gIXpj%Zyw$k(=>>hIne>Y85PT{xt#S@{RW`qq|?;uVANro zP*`78l4K3EVonD=d9A5uk4Kd*V?~le{{XpZM-7A4ysyJcsoN-){!`a;6VP*Bp+AT9 zO<%xvzA)1yTZ>daT+JSTcG>Ugko(HjLu~9R+gwXNI2B&hp`Xk~wl%lgalr-RfFKm8HozLlUIY`GjWxlhpn-7uz(u zYeF&|e~2K>N`mEainY26mR{B0Uq8Iy6HRe<_d_o|eRExJgJLjhQEIxAGR12CVNi3N zdetl4Z%($k32kGN&w|Xqc8h&p`%u7Kvm zn(2Hab!eXnv~LE@aI!;h17;Tf0#6ywwPfp>Y;fuG$qM2{U8+NUYsIYyr6?%R}=jlJg?Q1~RJS{JWJY8tFHwh-_-d5T|jO1g#`TCAq!ZB#S3w|}Gucl1bT6~Nh z>@EftMl3#D1N9jk^V__-F~lj;oA;K^+uQoE(ppV?J2dUL>UoZ}r0d=f@onYqsOXJx zaz4bdvB>8fn&W;b-+V{XFQnBxQqr?IUm)BzcPBxDdv^B4eF6Jvcm_Z1*!5U+>zyh~ zferPHErr5JppnM}0!SDGr$NZCD)G;U{4L`>BS-Mhi~L5mR~M*O&S~cgj6-bzobWTo zPaUhf1vNO+l2>m>rm0xQahr0!&sDCUKhW|UuM*u(R!PU!onfm-b#xLtL)Wl8*8c#G zJ{4-d8NQptldMw93;9T5lO@=3f$LqT!2bZ*FXHEnZvOzbEj$l2Hs570B-gTedlVdG zD}C&o@;yI4VbY;0N^;RJJ1;|ro^iAi)aN`oq3RkxhBZ$dK@^O^qqmMV$j(ncTXE|n?qY|%c;EhY^+oxV4(X5G@uc_xYGOAd-K^ zym#TZgP`z{lG4u4WKv8SLHc$6b?)B^Mct)?T-w8u^NpcTW8eDLShS_gp(|^r_5Emc z;SHTCr^7FXy55`NR*zqk&%GB6QcwWh9yrJyI-mZ(T6c=H87(x&xSn@cjfWj_ zE7HCSofh`Zr`Dx8jz2GI@=N;j&;jdSTl-dgVDO*9y>cH9>Q2iw`v$XvVBIow$o3uo z0R35c_9`gZ=l;xUcNnr}@EuLWrO)ztFdT*%6qE~6O2gVWx+zY6LXcY1{O zS9Z*c8|{hDM;PioIj<=AZ}Hzvxz){#mh6y{0=$Q>Jd9`j{#EOq7x6BMeX0mxQZvZu z$6S9Z`*xIJ@ag?_K54>!)!E+15%G&rG3wC5N)&}K+j{Qj{{XL8wl?c?rlrM{XLF3; zjzv4i7O#JFWVxO(o1)GPz#Inp@!S0M*08zKV}>c>m2zWHMnUPv^sF`H>A9qvi?jZ^ z6!hDR$)y7MO5o$>uBO&IS*>=5$;Uq}X07&-b93cfMyt~gn%lN*JuQKZ@XPX$dvYtO zB$lQ!N$Jq$bt?;tJD0djlr7r1jYGwLGO^SgY3$}8-@DrWoac}8{e25iLSSgq=2os- zQq?WIB?IbL5#_RcxXH#(srCk@a%)h8Qio%w_+9ar;>ug5onx-tBrfYD=@TE_uRXR4~*=^{%~@h0^_@53KZZPa3Dq9WBKuD(4^fWeuhOnhYYw4c z@z_}Gjx(Q^r`EJmZZ}I~opZ)EXD{JvQEM5nwgGkw{x#Y79`8`I)PtGu#DFoyb3PN+ zd>;4aSnuK|?Osf)=734gILWS?#aga`p)?m(w*gXB$_G53n2+=ItYKB*>T=I_{e9+~ zuBlnsw5%#{)?s?nxEdeqdFDa5@l1GB{t|dfe~A7e_@f_*roMRId|9Ar zHdfXakl-b-0hnixbJwp^OQ_!Xhs9bXT2;mM!&?*uAW04~eTQ24`QA;ZYiOGE{d%5^ zEVNpg-w}Qjcqik(fP6LZSH(7ZOjc+Oz_?ps%-K8^AeAH@+#K`A73RMlJ_2|v_I&uI z@aIAJZQ&oXeY(n9ZCUMDK6ad}%;%QpJ$|E;&!Kqg^Tj>|@a(ZBmF4O>b47J-l4V;N z$s32=$UgYbL(tLq^YJfE@xOs|UyQnDh)w2~Z;7H2fE>5eIOLw0_9vxbMjW+b*Tbr{ z`n2r*HT(@P?y)1#wZ9I?G;Lnvf0KATxuRlKf#^q|BOHEpudR5yTGH*lz%JQDBZ1f- zTz(Z>;kLb{{8;e+0Nd=Y%G@olpE@Fa$rSz5*c@Q@6<5aE)T!a=FSS@>%F3%Gp?;(F z^!|0*7ta0Vul1>$(K{VahxKh+QqozjwCJ2qANs=(!(*>C@tj zzZSE!as?YV5WeS}Q{0#d$`QM}s0+ zEp8M+41g+>-asd?{{TPZzv6q{65~*|yS2V%B0gkNROI#Of1Ok!+PfNdMei5*mOU2u z>EC1-e4HrYpTqqB0A5<>;$4-mhu_4I-IyYR;7?`XZDc3)Gxjk-st`xm|4%NOd}FTfQ08fDeLq+dmfe3P8VrO zb=;k=V^nzWQTVN<>Kb72NdCZMvMFu&mhrK}DeQyaspp{QL&H%);XM{T6GwN3-W1y! zZzu65xjo72USsfz^Tmy%tQv;1_Pc9GNSTGVlmm0mxj*6f`V8J9($`Lw>Sqjv*Uh?)*UgU%%Mov%0l3Zy#&{n1#WTfP z&YR)g79A%?g~gq+ZAW+B#{-gEx#RV(D%O4}_~Tmmk3WNC(=H*=Y^3v+_F%ZWZh=?2 zsQk$upL?O!J}p{mT0EW-(fl^EUq_EIheE&O{uNazr8wCpmEMDjl$V*A;?ERY>h^7L z(K8}A!k#}Gli_5(6ut3vqiga33b8C1K~upPJc{#Ai+aAT;rn=W-9icNq@9uWN`-Q{ z>(5c|Sr*R_qf7Si|qK6@XZU+`8Rht~cQ z{kOI4S_mxDPSj-I16v^&Zb2D8hfaj{&p$4Bz6fw6fNu0P^$+|NYsc3fGx(X|$fb@% zxodguC*zDXqyjhrcwU_U0805|QM*xOW000AI47-r9vZZzf}*o)}@X9#~@=F;|8&#n8r*)o;uW))Bg9If_nSZ^=*`utaTb?`@Ec~Jv-NB;iXlK zGagv-Gh7Cdazky;Cydu|;fUpAS)`Mo6@^JYS0l2FTZ;8N?GeKPAz^`zYpT&@Nf;J9 z4nYREtt#RuVfmkf+PcpPI?oA|pOj-B_2cv%=6I7|?LI zG)T>}F|W;^T2J3*v3gmWc6W^O6a?^UQs5K0zt8#q06w`E_swjK5k~(2=TfevAVSR^ zPqC_6E&Ppj=vis)+DB0R4;ek`37wK6OM{H8NYSmX-Rl?gX;J13Wx zE*O1lLdtMl1!Ioj8mSx*up&14)Yi)It_K{{waoM_IX+0>xg(4R!Mf;kywMkM2C4aIM1nsF>y6M`zNR#7MKpa+E<6I{c3FvYgijbw4TL;Tb4x`&U%WY4vlyLLk4;ISoN;1$4@fCS~yA1 z0=2a51s)J2TpaREak;hbs}z$-+~V|)4qchN>y%|2aa{$rgv!O$z(wS-^sb`cL$oQn zU|6sKk?1Q|MbWLTURQ%_E1&=}gN}1toc{B72W?JH&f3D|KX)q1Ix{cVr6_AV2V#eA z-@JV}uH8Hfrgc(KU@QS47D+zvCGpI*Idaw}`7 z<`B9NSTS62ijGCEQe`LH#fMC{)9z){?pta$Nm(*M&-niUTI>7?t$$`p&lIC$N3noC zL9S0zdt09oMW<@oqS;3rY|>2e7AI&VC=1k+z|W}30ef$ba|~~1fF;gVequ4nI2F+8w&r#y(ToAd73bd!HT(TJuC7w;lt_Xj9`34h zlk~_R=QZda7}f1BZdw$V_liJZMh$3^YjcWm&IbKa`cya>BB|MF|>0451%+|(6gO1swmNu~oA2<9-_;+rXGH$bt(S}YFgZbBt z{7(Iz{4=j;*ZPI6mz96zX4WA%Sly2V9l+z){{YutWq7;7k!mnBh`4Sr0O~ofH1S`6 z);l>-;tmR&3}(2oG~8p&4H?ryys1gqpNIbdwx@!B;a&V>)ci55=q-P zc;3njeHQm9sHNG*Tz1BPTKePmBmI|j4-@!BVDVO;EZUT?N&S@s8H|}!@Z_G}r@te< z;pTq>{ut;!5BMzF<;3?_+O^=chSoU(g;K-^W6u}|uUlq(YtE@05g^mj469bt!%#U_$Rmg5b%e@4+8jR z>qPOkmL-H;6|;NRSq=gP0aqlT0|Pi62cT-@zAgM8@gI+T6RPOiM}wo0;VUvu(6D{) zk-1x;_Z;=<(zLuU@pd1HGsUHNW5ko6?6c)+^2Ym_<=}ub%B~1F!6&Y8aDJQkD|mxR zd1lm%skvj8)!RN|k)P;4O3s4CVkYWJHh0@qv;A*#In}2{F1G%@dVR;{CxHAT@vq@F zsP;O>iE(c$NWNf%f>i$i2q8(y>EEgPXVUxyd#w29$9jK+b;}$0{@%=Fmto;o8;K{U z2fwHt#(zt+%{##h;z%viz`9#%SxI8KYjNgaHwSU+$^CunjQG`I;TxYBJhxvB?3YoB zV{aYhg|^0s0Dkt~gBj%X&Iew8%L$oD`>vn8-v0oP^v|BeMjVdL-;v-tXM=nJ;r&uA zOTu0Tw}$H3O2K(MG?EV6x#K4tamQ-ijWwC$YdLM4L>qQkaKzVlr}$&T5l*sQSdbH) ziu^a$y(>cSN5jt^_-;uwh*r|_3<3)?2|wB7@M`MTjWu_7{{RR2{7e*in@I4TCi_>m zzguDeKzftSdgsBYY{=fCb*1j4?X{fcdG7m8h2yPC2 zD#nHI?@{}An1QmfkVZH@^_^Ojs?)T!R@sChD9_zTdGSx+55O8G2x#cUs(80;Z^O`w2}`hPq9kCjz&ui^dph) z#zqT%jcNAYIQV;d+RujkP7v(>08ry_9=Ps5&%SW){x100?&N~!Ub)_fBXsOXewj7N zLW_i&rqhpSeGTVV-1oQq{{XMl{M7i1`xpFb_+O>lOXDvDYB9-q2b&5@X3--icJ9k| z&tFalah_+v_MaRyJqJ+m1l|u@eJSHJCM5@UNeV&k*&RPVfY9AiG?kEdLU`HRP&@K2wKH(n%Z^m}nNo=U?dwZah0PXyS- zojJ7~eqYiqT+fxoY51R#o;=bui+LVD5yH_)1Cb)JJQ4o@*2m{rz818&xSbLyL&v+R zIj^d};Gw^>cf_B9m;V6Sdhf%j&>Ma8Payn8)K z9MqbIr8u%{m>f3r$~feGY7Y!u>Nk=l#-SkGiGtp>jVcq2Tb_+R# zj-7fI+>f(dDZxAiBdGTFtp5OuKM?hQ150PGK^dCSSG%Lb|pO71o|mIb7kx0x|hlRjPO^M7frI7gmRKGXkunXCLESSgLV^-!yNc)41Z> zgH79~>-~8i4xTW)e-);;VRmDRM?P$LBrrX_vFrX$&yIEP3s2(PO>4ook1fQ)7Q2YK zA{jsf01|PYJ-PfTJ|%c2$H14ZXQsx}Tki^ww;Mqp$QtE57vMxbJA+yN)(HbRlHfC) zu17#|lm33R;Tm+>nz~7L-^=>yQj3%2-v0pSx#}Oa$Hcu~$Cnm5RI^0)mKJuxr zj53Ze2nQYi0K>m8;mvbK*R}hN8(xY2f`QMbW$`4~O&#P+Qv~q-rF~DB3!nr|Vva;Eh6C zzXgc38{PB4aAVqgCu-Ujsd*=Kn|Aeg*r=&Rd)>d!{EODto(|UFmrT_(hbo}1cW_VB zy=Z723bBUKe#rZyjPViVAAi!R4GY6pFr&qK70UkrqzMR6TPNS9E35Fuq5B9HvLuL@ z8As3ct)!rolHA5Uu3`LbnCe~*vhb9C7qGdG@;3WR%@zu6;V?n^jCAgM3i;be{h9Uu z00`Pi;tRbxMUL)bW9ZvPe(pzK$MxqwQ26~L)AU902C*8gv`(@4kI*sT563vJHpk+o zo2fFvZ*TjU(1R+TF`k&sc`BQP8l@F?@p;+5_#HN}s*~ni&gm@=BDL@(_)`bi-N{@p zYWJUn{{Ra$iw_T2rQV8Eyg}aw?(zEc{{Z#UXnq;9@rJPuucX_lgU#H^>x_Zx>;8Wq ze(-q{Ymwb~ag^2nQT#E{KWHC}dQHrq5TMa+Y^|e>V}c8*We*RFo~ z)x0U;`>B#;(yiKNMQK-Pz&_aN#yIz{o4;*e+4Dxwycr+HUk)={Trlz9U0cT%<`V5CeQR^!MycXGUMXT|7{P0DB4;FyFb{vNeI5(zQNpOsS9)Ew%ctIX zRbflozEth9*8c$HL-C*Dm4=7$7gHA+o!HX@@7uQ|0y+#Hxb4UI@?H-8t|!p-NNuk? zFEd(Q&LV(Maq}Q20lM|+#(VM4UhCoy!#y*_SB*BJf=!K>!yXNBTDQW_4Zs4$r=vQs zAdomCp{+3Z&ue7k>St0Mt)zOssqv2XJrU-EMFK@C!cR2kZaph6!{4@NhOOkjLpFV+Ozy^6kZjU2rvO+0a4%l;-;*Webl!zhrGF&opIqSdC5?IQhhnz?`duSNKi@Xpgq@aB(kHQLPb z*$4TLAm_I~=lOiyr(byU#C`#iC<{ETKoB*v@11-i8PDf z59pThTSV5b!XYQhSaL@`wa8fbm{|CA^f&PHeWXe}yOAd-20Yw zZzr$tig5y&;@76V$*wI_^fUT6=LWI5yNI@Vw9LEs+-{?tDTt+ZbqK|Q{)qg|s} zYUtlQYFh;R5ud%!1mqA-N@@yMp5K$!&(pf>JHA~vK6?F6-$@U3ZUA7GJNAVCboM#^R z&3=07p8|e8ct7I5i7q}2cxFqxeK%BjZ9GX7d#3WXZpq`7QwFpi00lGn z%kT@wx<-lOj|au6%-ceJkqm3QByxHT^ZI)O=t7djE^2LE+jhUN#K~0YBz?K!Ux^E* z_@_$neBK|HODmLbI%uN8+OX&|jx+giImsF847S(WRC+d{5;~ujCL^FZ>Fr)y;9rSa zf5v?yQ1Sa++rf7Gcj)rEmxDZ#q;N>i2&2H)~j{rJ=)X{t(qHWRWG2S~BNhUfAvafBk-Wr~F+$5WChaJ|p;4+FBxF z$5(d!*Es+-?g8NQ{{ZVgui|5`_>Nia^q9WX@SNNWHuD5rWbO-{ymQTb+3~yK&&U4& z+egFA@OR-K!`(b-c9(Dcw?4Oa(6!nF$WFLiah{musZE>G}JL<@HaBH@fA-Q+T^hiptX3R**&J z<)z8O4Ey>Ha&gdeM?v@{p?=B!4ZiRfh&%~4jeJpVbogu=&9<3$VTgQXiR;Jl5(qiX zah?|Nhm8I(d`i0bi{h)Bn++F8M2|$%=Zq(w$A*_3$6=m$-~p1|FoYHPbX_(4x_`rH zE6Y}U@4>$i$Kq`ZTDAKO)^@9QrZ}g74>3xPS3SD=boAusc;`#fJU=mQ9`WRkURoDC zsjaOJ=gZTh7BLW3B}NgBTO4HKyyy0T_?6+0g?hz?iLPok((78XzxG~_yqRZloDHf8 z;N$Tibt0WOxoo%SJLq|@j685|z92f;y2i1@Bb89_r=}0T`2KmiuZ$${q}O`Yg~3*6 zz?srcqOj-Cd`D<5Z@g8cO{QK>?{O;J!edjG!P-dY2LtgQqdZrP{1Neo#ae_qPlhyM zHM55^#?pm$9AgN1l9S{iAjN0EvGRr-pr2;M?24 zf-=reE5PUJ+o$!Rq4?JO%ebC<)??)yH%`a={{WoTZxsH|n!cUlx%CU{d)+qW6BiJ% z+=S=v4F138F%JhprfG8A+Ula<6)7PN>+CDT%wtZYi`wZPh6kE7|{QFn9e%N{#gT)bDTgZ%}+Twho-)(3wAuIzu(BFQb{G-<*?i7OFU2IHd}9O=B`Z`Nr6HzPa>=8 z5Hztep}_8OTEaZiA#Cs5#Gh@b60?^%2d~zhB=F4%Vn9BX732U9Dcbv=sy}sZOm$Xv6I^-lG;#YA={5icrvq;RLb@w(pI?^xgDY(EsGCs zl_HuH|hlT~n0RxD3)(N5s>C*?n#G7GkO3oz(?YOTfDo9Efr*R?-OjpUT8 z9OoTs8+w$II*$zxK5(UY&T?zfG}$A7BtxkKfNP8JRg1KRnlO3{3iLf6!>UwCCAL`b zJ*$p#zeB$bMol~EV@FAb=IZb&u2go-dWVH{ffaz?f$Ejdcpt*h!s=QANyc+s&7HV| zF`@uK=qruQ%c<+pr^~A!3>$b0gOSB+*brh07wM12v#jmrW@eo6{VMgg40{)#tlQQ0 zxzh-%79vCswC{ z0Q1ESxm2#)XRSH_(4i6$yX#4xGbPVTw;eP_$=rqa2Ev}yfXkDXIP67E@iVqL98y~@ zGM(!6cU{MQTODRZk`QDk6*xkGAj@R+&%GoNx)v!HQ_clmwMbBeVa|BXXM3X4d-NY< zl7uQd9<{TjD@NO97#+FmS^i**ghd!5*0r>|DJLs~*Bs`vly3%aO*bUg#-*?iAW(8R z&MRKgVu%n2HCIp50>}X${d&JNA{fXEliIkX(so@=x=}PVi6wW~2|U+Jqua1`E}i?= zHKB(S0?C8NHP%?4kTx5t@zz7;axZr>Va=Kl# z@|0-uMr*6mH$ghH=Wrvfamha2Kdy$0MPsPZbYh5M*cf%`(yv_Ulf`OHw%mirBCPmc z^~6HjNK}UC*yg$z;Ijy}?Sk?g432YNe6HtVb6DrC7C9_`d2Y(eImzoz(Jmq^PW-NG zb5ha;qB2OhJ3$x~kp-Cm5O50Q@%5}+>CY#jCagt|cq}XYfa;v-us_n|C zz#P??v`rE3L5kH?3jjfHezk+7c%CbGLLz+G$SuuY9wAGo5z2rTBP>6{t;RP-E;6yl zd_nNsP|ECN~V-p~22O*At}$$qYa^`^K#e zXlcwdH_Pm3=YrhMP`%G{@b8Oaw?JM@As~jXq7R6AY>|DR1n(pFjNA(O-VcaYu*4QQ zv-0CRz3SzM#ANd_E>1Y({F(c5 zhoalt%YUQ7Z!Dm3w*(SPZUcdiy-qX3bU%z2z8CQfo++^KhxQpu#hxgpP2+0FPhG_F zJLmb=?j%1HbWLbpcy9jg+@{7f zdzhbnx6%uNVqJui{_<&;Xdoy#$j<}0^aG!;ydV1r_^-vf)v);2@l@MGrfJOu zyiv0G<}tLW&U2L+z&$gLgP6Z$?}Zv4fqoX*U0behuNX-*>iH#ckO@6ba(^23yBqy9 zC!2c@n5x5bHzK~7(4iS!G`>r7=H4o^Zy>YHX{l>sOB;oaBb8lR zB7RlRL->E6UuO7od#J*{YO!UOGy}~~ysWv$ApK~(A$J$@F>bWejK1>(!*Y^G;tMAx zTWQq_748p1`B$HKo5pS8OYK8g5vQFk%z{I=ZWu8K1Jb>B;$Ee9;Ex1q{vp$?jwb;T zQZURjo}W)@`2)dU5j;T4ccl1(LomoMU&)=0M2N(nQ{4SVJMd3d4Z^G?KC0i2=RH`? zIxp*Uw1-ii=(8i1!RH;TyZAHW`&~Czk_*&R8OHGMv_EWrpZ>ja9t&HkW1Rm0XMiS7 z4&3Ap{?$@zO-fy5Ev#(bR5Fd>7ohe306+e|+OC~dDsAX&_Ki zTe=g1aJt-*=f)Z|J|430?t^g(2%Q1XJ~W;!nq;fwh9Um|(-eH&h6(S@Zk8R# z;?vAuzP+veYIi<6yYP3!JvFo+iv9-Ed_e%fRKJ801`6XiJx3o(^G_Xq!~X!V=fuy4 zxBeQo_;GEcUEjpZ6xO#JUe&n+Xk&sg*C6L7gIyno?!UG#CbHB7@V&EnY{n9PZ%(}Z zYZJ#F8o7JnZ{5gZ@X{n?=Mn1+V(z6@dx}6PsRG4s~3lU z5Bz7+u5FnNZT+FWSRP3u8?laqB>U$dH^~10w14cadVRLt-g+673 z`;%#0f-}!gUVVFK_M_omnSbFeKIg@TZ!L7Fe$gzlxdA{289Da<06lB+tM=HJT>Ys( zXipIM!&TPp?jqIZQ3^#VP!&K`%jX>wa5w|kt7%ISR<%h&Q%)%>zFltKpQ$slq~z6` zYTvKuc;D=;7_>u`!XxLF5|qj|Kb$ zhr$xZs#+HqRsHEXIl$*X=lT17o!}{M>}{ozHjpH18}B*G0asp!HBV@-rh`&(rzqRZ z@$VS;GEWiM%WZTU_o!5|@<8XMaWH&2KMXuMX{F74E^aQaOzzMh*wouIj%DZayC9v&rGPq>g!)63E2l zgVc5D$LGy;##5ypRq}CoV<=Tm zoZt@i9nP}WmhB=Fj@TU5N>Zh!{{Zj}5>ne^-~3vB9sFJWnzergX?E@XyrwIdqj`df zHZa|ebJID;Zp3u)uK{=!^ousJ)$}*CDG(l8usr9UbI*Qj&EWW>;s^MFYoq9wEgQny z*zO>LPCFhxzvTTR;Xe)P`mcghSn)xP=em@Wv-_Tho=;zH-K&jZ)fDA@Co9_e_WcV} zl9G<{3oS2NlV9ZpfJhqzQl! zfC2WcofAfq-uLY`>xmPUAmXBy4nESPrKS4)=1!#fRk|Lbb){>XUx}l=hDT`GOmjsV z@?CIWh|ldF+0NgWkL<_x6j_yfdw*hUSho zl_AR+0o(vTTJ_I?{{XZ$oi?DaE%Y%=STD@DmN zYY}-@w#|#MxY}DCuuu8Lew=)F&}}?pXEwPZjZQ|@Tq#%Qr>EiTU!DH|@KF5+#orBd zweg;vZw=%Za^^t{pEOu1G497Bf$NUE9$spdp%^V4_4EF`jT9oAeGehmE$?oic{IV6 z#{#)YZEi)=rP?rcJcC#M8~j+)HCQ8_Xoz<>bn`M)=k%_(#5!h?bzuG@K&h3;K-nkX zn(2o$RizfY6Uv%6Z4Ul8Zq^6eo!o{!Ytyuc#f(TJ01z>git@QEmR&&H>rz_yhR)vI??i+5YBwBJ&jx&6@W!(=)-mb;lu%?Hh%NuQpTU z$E2jv(fsXi#Oi~Gv1|IZ`k$h9J{`637lo5r(skHcV;eNKZz72hgVPx~DCkJ#z|zjHz9J37t4kn z2sy50c>e&y5U%w%^owm@N(+5HoZ&_od8^jE_x6n8U-3J-z?~Z$^ZN44o zR_9Cbo}XtpiZGWG%DbLN>P}mpdi&=lh)z8EtN#F9N^9Nhct*SNbHcv|G%Y(%x3k}< zc#6tFt7-F;V#xUU)kpVoH(>GCIUrZhJ~sF*@MhY_Tlk;xJL0a1q}@kmC$Q2{4EJ}9 zgMzDdc`EM?xF6*FIAx=hc26_&=kJQAe`ybvW{L;3%`RKcK=t_L= zk^cZ+*YwMO5B?SZ0KrBze+!=!{37@{p=wr>`IA}A{{RUXjQK-5Sf@Z)>gJ3qfy>8c?{oEH5LjX!5Eh99?&?3b_K_;bWQBeXUei!;C}P{QURh=j?UxWA@ZtA$&{WbD`^+RnT~K zjVa82bZ3T+RpcCu;km|oV31u3P*V4#)O)U@dmFt z!Ke8yaSD@zBbCk+5;?)iAOJ}K`q%8+{{RHa@jt^ode`C??G3NXu4{L14DEZUBFQDQ zC?KSG8Hs*o7|(ukOBVWn;AiZ+@LTp~@b!~;H^6oab}gb+yk;^smRweiUg;!FJ}>5dj1K00*s9@U6Z6nKjh9hNUE; zLJVl*9#QFm?Zs`|-)d7S@?-x1Jl6u|)pIrTfA9_L_dZ$uvA^J)IwrC3!(GQjl&* zN$DOaN(u-{$50f6Np~wC9RdQ96Dg6HZ$ z?(2SEhcR#~h3ErSO-NZjPLO;!P|WjMbW=c@J=!|6TlHQ6Fmoqd61#{R;OqNZH+|N)@lXf0l6;K-D#ww)&&O-t+IXcF8?a zX|AqUP9kiCvq zB}eT#rD(J_WjBM~4%H`@H7HKUh);Evmc8|0#E^puLXA?Ym9n!~hqfTcM#4Pb&h0gGm@<4y&LktwSv-_?P4vB;<&*hDDohWhbvU=T?;mu#I1EaK(cF=%L+$cR-FQV+5M5V-U5!1-o)tIOY>rIN z>+ztSZJ{Mst38cHQn?aDy242B4glD5-R+8=4o7~TqG*!UY3TvWrk@ta;1M-{3NWo zQcWJK(@pw^Y_`$$t%|?s4O+dio-0?c^)YcpK3+#R(nIqMzI>{W_Oy>*RiPY6eEtRH zOw@d~Q-5d^yp@wwowj4cRn92*dpYxkE_qFv#WoFLze>d#EI!Q8x;thQFLmSK-sx$T zxP&cSu020H_c~7f+nvW#ISubnU}gC?xv@$Fk!gkB{4st@K7u7FcJ*+tRGp#%Z~ctp z2WYw9e+crcJw=>5GqC8rQu{Q`=Bx~*Lo-*o#oI|mPj7xv8nc^{s7zDqH}?d%BX#-m z>E?eY^q7~*xg${m@0>|Ve5zD9d0lnp7b*+m#QW0z{9^G;H{C>vKd_B9WkD;I*E$#3 z`BYU$&*t8^zhFVOl#>>0?Q5jq^@aR7Qk^^2G)~|DX8P=ptUmVpMZ?mx4yTo6cdV8T z&{jlkbNksNiOoH7#^w@mKh?Ut=ST9O<0O^7_~h`wyfa3)`?~PLBTW*WgCHd5`>Pht zSGy2LgcWw6#6^3!*8`Jo{o9Tw^n$vT1;#rO;?nX~%P~V{Y75jc(^?#&LI0YtcO*^G zA9x%xK4>b$`T^ktJW&R%V#x|5+N`^_YGttknb&gc8gzWO@BByd=+gWP9z5`3 ztFBl#<*FPm0G}rbxneM(T6I3M;p*Drt6^GoURn9#wOdw56Zj;uFpxPlU2UOh^lq zq$JV7I9A0>EY5ic(`CXT8eu6<$CfiR4;7rWvg70;xMMn2-Y5T z+en?n-mx5(l4!6+K}uHTwSbK0NqGh_M|`uP)7einS8{-9%0>&N^FXb>7H@jIdhO&B z#JSZP{4Xn;2L1s(#Nzn|~c{I0W zrr?GR79Uh`ax?Ph(<5}Kn9_~C(9ea0_fvv($AviY$}*A<&X3iCXLeypjhEi+aTaS1 zym!dtF7zb_s=&R-$(4UOCqEAYQvw%L3_CFwr(v|$zruudcpJj$+OXv#m52eEKV(RP zy1MlhslK^n7fvYuWxSgU=HIjbNcL5JhW@bF+iDhPcePZG{P!3zS{YNqhZ1KJ`PN! zS5S^KA+v0QY{3R_kX!C&sCo+$U49}I873N_@(ick&mI4HYz$ph`SVk4)i`;n_kSdX zK{=N%QBHlGG#1*SKgNQ#&iXZS6!@zT?wDu;hG*l|YRHB-*B}aD2{kyiMojjoRK(4O z%Sphc-URTSaBm=ML!@!<27Vy9_?oVS(xzesOns@h>@${b-$9oIin0$0wdx0-PaU0j)?CCv`E6Wf3nPK zn~xDNmw=say%X`=Y&dwC+t0;6S;;>e!do%uAWik0eopBrAGh$fMUYT0l+opQ=%+K3 z=}nXVtgd5Y-W_&lGG0TEK(dQtQ&po-@@SN;V-M>)05$QB#?UYCdSWskNO*_#szC;? zK%xO|kcU+Q%Vklm6r4SKECQhlzK7EuG)6TsRc4+o)`1ex1jQ1=NASY!4)O$JtZz@h z2=_w^(LZT!;yUEICs#cEK!JYz}(Yfwv|BSk7cD0Z%MU6FPT`0jzxmkP7O! z49cklXN9oCnhd>=og+JKD4v~2k-xTBB`)5kgcDr3G}U;rs^PGtaXJK~AdM4w!bXTP zc=Pp1oom4;l+(?ic4~tPv`oJ5Qz6Sygb8y3pQl^jzrufJ1+* zV1JvwimN7D=kC4ZOASxo{zKFxH__&a%tQVg&n@~FH2eM1t-R2AN)^igciFm>)$lRT z88HJL-T>djLDu+{SMp09-^#-$-7v`8SmRO~mpR<+R%=k;&#C)&MI;0E5o@sfv+YhL z%k?>5S)SS4{Palbgj=s_eayUfVI^K~Fp45#R0%O#69ziOCbx3^K0itbcz4g}!#Cap zI-O)$B_gyEl*x{JPBSNqbsN55cpxSOU%N&u4>SwDga3)HYgHBN` z;I1)-{!Y63a5l(_l6UB>o;x2LZa!#!qp^%+L33buoYJ8`WA@fo1g6riY$xfrW-(N` zVD^ufUblR@U#1&?$M#nt2d@Kuxn71TC^dr~Y%|{zXzvrlrAJE*C5wRR2zq$m@7D9| z`e@lSX)<>y?qD@VC7w%QB~%0xAO0?1(x7I!%*u9QlvZfW5g?99_JotRaTh-7?5t&G zprB0m%;IeiBtoaB&hGyb5(-Bm|CE4UP40M~HC~Pl)Oo_TL7bse<5X^WRG~&Z=16WT zx5_R2YiEHu2etNMW91m`UD~jYY?w&nl(+;cexcv=3C8P}PxUeC{3AiX!d9CxX}Z9| zc7TqAoU05_<<%}Q+6%pAX+}r4Cta%yV+>|XYiI6gm@gYC0>?XMb^wM8?p~p6v5#+^r;WX)84 zka$BxPNCtB&JO%cQfrZUl7?u-4g01miFe~OIgN=u3n~&VUmLjZ&4)b4ZKoSeuq|xp zki2{(4*!W!dldc$W{7t#LKNZChM#b6G@E{_e3!g*6a+-tAkt=-QQ;{P>3!-HAyPjr zZTjzqmOlL9F){p#KG8Zt`QDzFqTFhTa_4N@Bh{;1wW+{h9X@eHiR%-$7iK9ysNvy% zBvkK&7tB^i&)vCPWL%i+=eXsiK1$7GA$N&k9S%4+sv{RCbQXe>kMsTUO!e%EQf2aA z8x=Yl8RVx$WFbrs`wS5~p8u|D=Tg>j0p-s!7ro~DXGeXUmNDqu@VKzOW$I*a;W_!j z>%|PwyyPVxm_!HXPp@sC87SgdxlqLrv#v0R_*@{0XUCBWG(;N1^)FO6wLji8UM+~) zAQq*kwpL>?34*N?Kc-+{Z&mwDmumz3)fFG%!F6#M)ef6{O37oUpT8qXQYrt`k_2iE zb*Ww^2a>0Pzy3$Upn3}pj_6SDz#1jDsrkN^YpZNDQ2o&1hW?JT}%; z@@vVg-o3?f$*&Q4x7&@5@l^3ol`XB= z+nZe}k#wFeD37%`tBCY8ly0g%*BMowfVV;da~}%5FjU%qi8q{jn$>rMz5SW%mINc| z;8^cxS(s%gR{ez`jtUE4@ z77vS8YKd7Zuk1I2MXRA3{!`ntm#%r9wsX+|T>%L+-g7`HZuPHCRJB92y+P`q=R&08 zD&%N6m!7sS9~~W9>Wtvbq2dz>TK}$>(q>j^>JwDTG0A^2K6HD>-OY2WdBDY;e&PKBbL^W;3*>0#D~ma-ju23**dF1-jUpyimYLLZx5z#k zRT<;J5qvnlxn*hL_xChJ$obS!md1lURp!R({>Uwx-?eA@)zETpozJ|r+52B!FM02X zG?oa>-!+_gD|6GtTs1xZ--r5KYf92L*7?m!r=9%+8Fc6E#^#b(3EVrw9jq<@NT_!>2IA>)edl5Ynsk^o8Z%U zL2`?A`@)}aef)Z|O&1IAauwb2w0>_KxuqDM&Zin-RD&jnBHBc+UI9wQW(9kqQKZfqC}egdW@5hc~47XBIy8QsVKe z{;X%pN7>F66r^xjCm>-dH{$RE7oC1PY5hv7?EOo9x2dnoYzK3XJS@(*F;gla#c5wk z_ZYac_{MYI=D2lC-hs)Zup$D^)&(EaliBi8Q()tsjgNy2iM00;aQ)jTXuWy-X%e^} z7eL$1l)7W*llwMp7$fymYU$i9&kv(`_z$&l;x)NC^Cvg)4I(+*!BuMz6_Z48#!mUJ zTT@=uHzr@oL~JI|m&EW8LD#zKP9Y!w9q@1EPJP2P^+I!;lmWGmXJ3cfO{-J^pzu3K40M-(frEv$VkjwRMtdyL^SftW7tsmLhG5*U)e*vuv-HT@nVw9 zVs)>*xe-7B=a$JLbji|@S zd9v<;ML{uDnD5TBD^*U5;tuW^w#_f5-XbBhOIR3Fh+fRg4#5NKfEy&KJ)eyojJsZt zzqXkzJ!AVS`Cv3rhec$b1Nj+(v?_(K>&G7Cw>5a(7mG;+!c~JVnIptcDHC3lq83>O z3?W;E32EoSeuR{%vdrN`iGq|L(joq9Rq7_uItD))4|Y#sX<=$1itUqxXDw3(U(3bV zH&m&JrsvURC~AWbV^fQDBr;z_N7{nd##C(St!*FVaS!I~lq9->9JY?d8uQIdGeIoS zZspWlglII(s?4?Uc}b*JnAu<>WakPRd8X`D`|PeBd);ZZOken&2X)ETu^&t|y|g>! z+C_GL`27p;m7ecm-U*n^FI?_2d;jBb?i%7o-lT(AAXQv@cv6APd^u+$%Y2uve2r%P z*YX$}jQ_14!fMyp$kj+tSI!dv4r{0X?%!+-RNA$Yzs%^*A+OK%+ORK_8(ki0d|>RQ z+pqltqHy`PlzLs`Fex#ZErtU8)LhIh<#8jf^}f_{Dvv$su~J!RBxs zn_sCec|2ynY!TYAWNRrgMR-rE^otI>Y^kCxLf3V@TEcbIq8Xi2*E-S0>-1()GN$cG zm%ODzb4W^Q&}@ziQQ)s$)qdgIdgrT{>DQ#;rF(d@jL!Jf7q_x_3cg=MlHovval?j1gSax! zF3V#v2WLgKYnOl%otxBxpMG5o3ek18ga6Rqa50nq&QHo8{^)GmI>$VL>D}-$Su*GhQs7g?4nkCSfE`UI$^Qd+UFA=d1Pz) zY%O!2Ib2#vdK1*(5#`#^*QR@L3GPpT7>v8YsT>adE53wy*2LRC_#$<({J*Jlz7z7@ zXSQV_bt%N{qIz8L;xOGthsxcC=oC@&R_V)=%-G9#$s~PW(qot(iA;Sbqb89V1dZfv zUQ+Pz2Frp0D9_jX@w)dFY|9#*GcUK`s@8nT8q6OlhCrw3y@U1v7uJ^qqte&-5$fJI z3w!pby{4_|ahYgAUGFrNYsltRI0HU@$cxA4?n={`6�*MdjUQVDw$H$2y0aNhP>4 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�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 z z?-Z3BM%m%`vH3RpBj={6L}fx3YSG+q0}NfENA4)(&(}%Y+$Qy7=oBoV#2HoV;ga+U94UV3 z;dT`Vd`{X8o3n@3l_ej2wH^Ft8%mZJ&^w)Rzq)x-|6qPPm{GU7mlOzo#3m?e)-zGM z3kTr0=1Xv zNP9x_Ou<`gqJdcYslA@_s@U<|YUW)*WSUR7tle~vE$s3oVQ874uh4mE-QZhBcagTO zujDFt%`OH)gOw}EF`>r&SZV&0s+zJVf>tp-7Oe*E0(u??WdWz1P4Fs|!4~gd&O!q;I$1HEFtqpHgq^g4H50l7T z2+BQN80stg;F{XFS{s4L&5H0NFQ7z?`-T)PhueCS z`G&^$6qmEEhMjM+tcLwX3nT`&^In1XS?5 zn+HQ4dSb*S4NU%zcTX8l6?&OaFsLmppZe#VJz2c8N2aE5Eh*&m`U5XeGaFbsnfJcL zUV#4S8VT|_q|PpS2cPQn4EDX7U~Od=IV#i9Z2N@qQxe^Se2Oc55wDkTbw3?R71`Z# zx5mj)clBre3VFfOG#tFhf;WqM7RcW<6DU^Rh-?;wu9m2T8{4rZc)=@~2{g#$i!lSn zyfKw*q&oM~;j(vCKRdf z&-S?0*@IkS^t8Hw=6Wfx}{2gkDKxCiD~OdlHglrg!nbmn#FoXd!pu$#vHR& zCD0l20{3@};^g;|Y@u2y+$cwjT0U$R7hcV0H}8G6y$?R1buw{q}^ z@kJt-fW@aGn}h128Yp}|rI8l^A^46zzs!{+5&T(_T(@ezlv~53Ue>w!@JDwGCVQYz zI%>uQw`{FkVA~u3fh%m*lhQ_=qU+edvmF{=3hoS(V9a7UQo;@W@U6~j9JVHdga$A{{Yu&T{Pe-ZGL_7v0u0 zZH>U)%$;X#Xubt`=wgP@>wNrk?1!h*&k?-7J5Z)OD@`}k1eRFcdJ{yU;PmYNi=AY8 zqT{^)^i>j18&+!7Vg74(x2|hk)gMdoThL?lr{B17>zCmN#U0KMk!eA`KLnBv_qhH* z*x5AzCTX=abLpknP&>41FjqL(#G_Y*^5i1PZxsFx$Z>eENL^ZPs2ys^SQ<3;G2zO0+&mHb? z9VD=l8o;afSQqtPa_2F)*HwC?2zn&l>iFM9#alu+d?d9@R>B`Or(~=VxQlOlqniVe zguWvDksuo9PRp$uGV=fMtN<&FLY`7Cc$IuSQ{ctQFO5fRObHczATgIM@O@uBq)OxE zw{U-ilv%wc9r-Co#I`l_=GVTzZ(Da4RNrqyA!@H$769qhM@IXFJ&h zsI4L_2$Z}0Ap88%tMRmx$a|#EwA7lLyD+-k`Oa@-tHb5-Wr%hICV_#a2Or`BaZCke zx*B^=CEO0C=LTjRPC$<@>05%HocKl!7}m8&7F2b?7l*lQCS5fMTbOwmZZ;?8YbFAU zJL{^yQu61jjvu%~%=q|~TXov%{LDDx1x6VEAeg*%XXl*218eMW5I+qdq;>ds#^3&s zUBF?j*8ym5QoVx%;Zx}w?%AN?L4!V>WH z{S}d$Lr5%;Ak#u*kxH)t$Pcb6C)}C2cnJtK~3i zPquXnx_GPlyD31xdaFZ5l)@oc{v~1MUP%&}>|CkBxXngsY2yqmcYT7qsjJ9x*t00I zn;APF?eV&9^HELIv?&K~V%P{Fq4@bl4GK_{aMT9AqB0_$K)Jqwfj|o+{gnq2|DV80 zaJk4-0T)86^+qWgrX!TR>6iruVAl+KIh@djKAGxQ*fyYAl{lz<_T_9ogO8f}>(lj~ zTL}##1E-xZr`K_{Mn*pqZihMX#OAB)ib$kEHk${rVMT(J1nYT);vlq0OZm79(I-Ft zqpy@h`W!(IrQXlq@_R{@6^mum7G>F!hs%aTxiZ>5xOg^71ZnrxtqgIN&R6mR>7~~j z_fWEDBP)S2zZ-8F@X`=)&#Z)|mmt$=zO%oDIuLrUl)>N6n{_-T9Nh|id-nvbeh0tmgZg^&NI_XlY4u|B z9C^}rLK+!=v%*1P&{c^cF-X;^&&<@`yB4AN^=n*i}vyZqJ5;>T>R z3-aIlQdO`ngxywqu1N;0i<^zwQSi%%iX{418>HhlOhD#{okg2e(==ByFFYi6umWJ# zJgnyJ*z7Q2(R8I5M=uIN_D9XPd-rzpF>cE}^EGx1wsFB+iwY%nSwivSUwY%{S_HA_ z@D}OQ>Q(W{^aS2qDwROfL^`he9uF(&m@VJ_G)_8}?R3NTyYgsIt;^QDS1pYQDVrbS zn9lRD&>jdOf?lWV6hMI%ulWx^F+ytgZtM^6TZrXS#N;Ofa7uAl6sm{C!RVJ7B(Now z=g2GnR4#wRNBj=NG{>!-Hd|KR5>ljP@)_j^+s6?d$=<_4lVdh#Y4uKcOGAZS3G$uT z2?;^jthjar1{NpHZog&oTV#YY*7EaCfPJW;tGmE@Vc~k^$vT@08nOpO_ z=s)0pz>Apl*%}k3d|<*yWljW;TNSKBEILrNJ@Ev8TnX46|H+BpDrx3J4tHC4yyuZC zlfq3`IOYTdwMI8bPj>(_m$7&a-IZp^O^!~|wif`aG$#ut0dJNBK**@}8aV13aq6Qh z_qe%PRzlMAkBxlePzo6n9%b)$pW8@}h`rgiy6>=e2_Jg?qU^WVDBo+UOsRXld*U)d zcD`|`cT3Yi!%%U#nd%=ADgZRxFXO0eQ zo+|99x#|qA9D4Pk3m-|~2YYQ6VU9;{$#bKV0__97T{-#ZElrx9yrT5easKXqNO;-t zPoq)b=}VpLCV%Iq^%>)@qbkF@ERmS#^A03`;~~F1vYQ3Y*#)hLm@pjq98neozB&b( z^UbN$55u}!>fb1mjXr(ATf8R$GQvbQU_zpu6v`u{RYlaJ(cVo0j_e8U8bKipyMZJq zNKTyHQhr^X?IL6Jq@XWBIhAUp`I>fOXU+N5fmQzQP0KCGgzZ*KM4;63z3Xjl=aUp3 zwakaH8@5Ogl&cHH%wSy66noT}>i$DH>HwR*j;U%#^!5;5t_CBpvOCixf^5fcGF#r< z(|GgkcJLJ5QwI6<UwEPv7y-fB6H?UWnobVvplQpGrv$*43~7UUT1t z6n4%r1R~5^+uZmN@qzN3YpGB^XrrU6we;LN`2rcao%gj~v3tW;gR2jNuTld31u1yQ zas%B(2;wzEvFHr2QyP*|-lNlLA0cr8sM1eo4?9gs)9)&oi@R$3J5Z(8#LU|TFGGq< z2bKaRMpxACo?bnQwR>v(-qIy6!C4y6psHxKYLU*KhK`NQN(XC}B!83#63~Q8?WT{+ zeWTxX$9`8~5bXZ^ZFG6&dUnaIz}B)v%|77AAhWrTXqi5bKy&1k+Ki4YC)^8_xHwF5Qr{f;JU$e)cS8=F!tKi}K`GqVnUy<*d z+)P%i=}Xn+7hXcs+Xd?#PZ6XJWiNDwJTl=nHQ`*wm-HF8z5e>?f7@4Ai|?1avij=V zZYDof@SuOmKQUu3zSEFlI73hv71e^dMh-Str-wuHk9cyoSkE21n>xjeqGL^=Cn>cR zlmFMd&Jbla^^S*O)`YHS6Ytm9J>@x+1xbS)$^GY5gpVBal(NiyZO9%^erjoWEjN5S z+s-%FnVs~v$4^6lt)1Bp{L`cp@n#KPVOErBZFp&VzSG2!$Q}8`!zsYld$6I`bTtccZr~&goeQIs6IAXE z2f|vX@bdZALratiL*NIbHU<`@Cw;by3xbsKul~*`IPk`|PqAj_>1dOI6k@+=HN~w?ahafzITBn7>|Lf&7Oys4wDx;wBk{_ z?q-?^9<71jyl`JObc3-XW1iFBb_#O~_kY+2vuF41S3B4+N?DJMdil7r$NHb~9T44; zmHN^Svo1?*fWjTWurRl^BG0&EvFF+`4{RU%Bo+63r-N&nKfjf`tHlWgezNz3#RR`< zcanZ^9waN#{Qi6FYDzg1MmB=!q=@8l5zC@G6`7Rhe?FdkW#zW7`RdJ@Gfr;?N4DYr zba%)cy#EJhI~PI@a$=2H6a8It%UwQHvS_fnS(5mSgx!LrG+8dq_xzN4+aEDhHQG4p z*raYHEIt@F9ZDqaNzhG=HBW5PtW@z5t#oId7;DLg^DO+o62^okgi54>{dG&dGGkFe z?2uLQ0gjO`Af!)n&g-FdX%8Q`0WnAxS+^ML!f*bIH1L<$coLkeK6`81W?d({f2M|V z*!;PI#6~4OkZD{AIr~4fo*u%`Tt(eU*;#0rc$E?gLR?*(|A$BXu9@Z>BXGqb#}p^? z2o5T+SIhM<8Kz5k=a$y915<5(%(j4<<9=$g+*)VH7HxD=rM(B$a^UaV z-z^o;S7xfmuv__};yPa^uE?wxqXXN);k!(Y-yiArN01@@aBC5tIzijybt~ z@4Mk=!y&Iu`4_W?1Py>VmzBvc(X7pQY%v`;6+Sbo z%X81$`Ae|z8_WLxV_PR2R!!dt(klwBcgf+`Lf0%4Y?<_$gf-yI;>})#bh9jT@83F| z;UoPvlPLw87a8eyC;X@rE}jH?x0$3S`6G2V?~E)1wzKIpM+w^YPTa*;j!Lyg)hw4! zNsOdldK0n%t<(o1d3G6ahWm_lFlNj-j7Oca}{>XO*X07N27;PjDflH7{4~eE4W8x@5nL zq?+@$ZBywv(WA$+BxKJr02$35-y&JHr+n=leMSUaGmi1XQ#e|rS>*F9&4fn>M}nnD zfC^H}kKu(4V@lw_bY0w#2mSIe*r=mqS>e8@6c(&zvL>oAvghO_W`{Tid{=XQK~2*2 zD_d<+0XaW1(*DEaFEzb!oXH;qza_9&byKe@ApcV1wWP4x7Hv;b^wHtkgcs7ydv;bM zuiW`nA|~Ima>9jUP+^>o^|c%suOAEE7fs>`NT+>N|Tbjx`pfMiK>w)Dt1)TT;xxP+x8Io z@wiPxv|zm3-b*uwp&*AN@r9Ic^+H;o8n_@*0}-6_7u1n{0%Fn>t$6+ihsZ_u-_4Zxrcn(utjA28MX)h&T3?%d_ex=r{oqXzoz zJw%uLXNgi~+Ox{)X;)ih2&o9=WTZ7dHT{r3^Wng7?JDi$EWYJJ(a9w;F_5#%lj2XZ zWhiCT@Q~zc*QOme*YX$5&1_DYu)z zLh1@R@jilo{2i$6_kE9cpGRIwk;?h;Mk-MBAceE7yrY!djp|>cJm?c>CG{ofmcCrx zd_oue%ptcl@#pguvyPfMcyI`!r$<&pD0@-Jkx=B7d;F1yEL|1~d?IV>v|;7UX1Qx> zmRQl=G8#@MK4I~FRf#qWd0{mZ2{Q>4X( zbG9Fmo;Svv$(pmMmJ@5`A42KTsY%p|l4%-v)j=Y?T5)S%sYiTohMHY*Q#~Y|gg-B} zE)45UKf#(}8uL<_<||UuYI=)u+~2Z!%cwjvMvlGgv=J39J-Om(7=nvD)(T24vAN6Z zl;2c{^aNt;qs|TNOYCo?+OA^J5~HI`^WK@8D!gYcVsY>55|gatBahAIHj5a2!Na+} zE(H78)xQVXvc|BYYUCP&L2p9H9eQFrANcr`jR%x1*R>`@ryAUCBe+@7)Tg>{rX!q= zy1_W2e^dFK;Z0bMYnFH~Ckx9=Tkz|*mLre-Q8N2knA2tk4Jcb{PufdzU-2~7k^DD%e(*e|9?b4&*h9n(9p7-MuDB;Rju9#2dTRA zJ}ZH+6RVPBX4mTEw{s-D7k^`8aF0f(HVc3FQcXs?>2PV4(dvhHhw+d@P^sqtnI_!( zjv^x8TS9L(Q1bA_jCI(J-9z#j6)cS z<#5#%`~EY8#=Sx~pWlFyZRh*D$3^mhy$C3!S@HEZCF+-Aw-{&tlY&YjLm%gsD=t;a z+?!P~z)a{XO)X^2p>5M>R;fU`GJ>Q*;y;%Z%0q2uX_k#=&FNWfrNmbOW(qp@_hr{+ z)#jF==W>Ax%?qYVh-a@O3kd3mj%)Jue8MzJrTT6A)j#mnPypQrV%|I-m+J$+vpT^Y zd)Bx1J;b*H{86-n{$A~(^HN*++p02(QeM>^cdUKwozN2dHRiVFjyFeoO{P;c7YL8T z87z$MGUP_dcLH0yig>=nQECxZboBj<5HR=4NSr4>^hJG`g?278EBxrzUHMJD-0H&? zG0KuDg7LC9yM~Q;Vg>SWP2wOLyER_S&`Os65^*IJDU+fvLPKC57v#H47Gw6NHnkJv z@qJ~b|GABEOY=h|@#Vs{;Shck+dU}R@W(xxG((51T2tN_-GmY<1k}T*r9Xtifx$6X zHrvU0T1`A{Uh65zR|&#Gz~q%`=I=JA0@*LG{GD?$R33i{i63fs!r@-jSxWl!f^dDQ zEafl5S{HZp>rSn4^kw?dvqENo!ac%a>DC~cQw!Zk64=2?d{ znxOTV{8E0)IiuYrrc-ii3C!}L4$R64X3YK@au;Z^D(UYBSS3DW9UZ7Z0=}=C4B2lf zKdXyrBXuIrO1-!DfThIyFVT=&F6>J%YYzAHK_k}flN z=1s4hBMt6Q$HrPqOj$SZcK1(V3%5-{=fd`g2KzCS{%e0n-Q1f zO443KA2BX5USLYoHDAji(RPu7xw100aGlv=5@}<(6H?{gt0<3|!s6UBK7L?(?)~~A ze~JC(Gh*h_rcrj5Z%9NBb&m~MG%ItU(Nbph(r`g#&g8=Bx3OwCTR71XnK?R*G{dS? zR%LC%?$Eni-+YF1cnS&5nKuu7H{D5%dMPbd;j8p<_L=KmeV_9L3X|C{Xqv4wf$2qV27Nx#{kL3tX2X6nYa|#r*sTdq%=Q|3&`c zho4W#Mm)}_!CF|QaD4!bXPbt@tpuJ&Q)Hpbz_Y-5nLr^N7${PuBx{WhC=d*|B1(Qcc5?r)JIE3e zhW)Ada^LlvfBLA%FW=>U*TDC&p35EaG5K!9^Zzn<@=yNy0d9)i;5(ET>wf7ksMktY zm2Wz@i;BqcaL1F5V({&f+d6B(N6guAV&lF`W1u8f_}c02SFj1KcXjn&#v}>224I)` zbZNQi6EDqOo+x`W7+W#MMPMBM-Jk+TH42O);^@k$gBkg+CUPaOi0J&%@D#x?^OFe^ zhX9E-#R>ZvjV^jV?lvs!_9>a_-A|DMErb#_IYy+wc}pSzAv4MbXR^g3^<_G}y$)Ry zC|SP*HiHH{7VWQ_db=9lHAqPiClP?TEBjc(VDrXZwgb6mab*p~MyrRze>@o*_HzfZ zWc~b$`|w=X#(5m&F2?O>TJ;CD|=cUsS+n<+Ed2nqEODWahYgtEFp3IMpGvhCEA=KcCf)b4EB}JZwZqI{AsbR;)VH!NVoPyNGs`au)ohpcxg^+Z z*?TtkC;VFmlS4xqKm)8Kj73iZB|7XCWrN!~;Uvh3$Mjnl8*wFsa=e zv&#U(M&%>@M?c;fc!V-aC;h02dX=!c%gt;Cb^Z^JS&HJtlF2ku%^2O|@dp(5A09!c zB_?lZe@hDBGPYcZW;bi9**atmYu|HyQ{9V_0kaH5Mfla2kC*q4nQ<>X$!BtA!Y1Qd9QJ`mC1Otmp~-Gmt$L-yFFo<2Kkjvd z#c2zpyn|Q-p7$s!+@oYC^9bo;o@N@dIsCmW543-cgB{==V+(LyB};q$hqW``yA!*I z*Bmmxz8pRxbAN>R5H6*CtBsK~kI@r+bZfq?!p7rxqx=FK+$#S6(E{BkJie-dP&MV& z%%^T@;c-e)B$Tt5>WDwt=Ct?nyxa(W*+VjX)n5!AP#P9d_Ydum82B$h%?oEVnk?tk;ZTsnA) zXQK;Xt$(R1g+JYO?V}r0B&*=qAO)HGv&U7Gp|p%-yr~kb0jIQ?E%OGL^j004^_``m zMp(}qWaA0(a}M(v*|@orxyDXD?qqPT1cg=q`VF_camQq?ge-Db;QVe;7%;qQ00l9B zxahDhMD~hR(2F7s{Mg-Xy>fR?98tbU1ET8G6kLKx+T^)Br4SG*W*3w!q`>$Wx;k9h zMmM6ZN*eW>W4m{Oc02ls6ItB==#4)e3mGP>p~U1#m+eRM*O)Cqjumgu-9o@NCj*(e z6|e`slzb4Y-t_byH)rYVdydp_`rY}?2K{!dSu{QjW-#Q4eMvL(eS{~8iF6&;-nKy& zlL}#25ruAv1jJgHVqEYlG@e+t;QPQ;NSWa0Rdl*Z5|mDNb+M{PI%s^qbX1APdtprnXEbF12PFW zdmWX&6~ff}tf@0&WsGS>qx*AZf`#)b{qCJm#6E}w#~=6<2+4X7M&AaY@=T@lwA&7L z2;O%mCyccIm183h`iUj4lq9cWaked9U0V$ie$hlU#`6!?BHP_k$WEi_jV^*J1n=XC zJ5tTpdzvb48T9vvGf@UNL39g@hDwnFIw}c-0mKEu^7^O+RhyMPpBI2#9}uLCpx)azV=-KCAI0#<%(b zrYa+#a=lGa00uT{@Ni<0Pq&4A5DDmV+GU=RXu!#1%5~Anp9W5!9 zVLka_L-rDJM8ssWN>H0L$G`F3f*iB+QpLm-&{5-d_0T+-Ce z?lBI(*NHE;w;PUyQ~?nHpTl?_`-*n`YZa+d+l+70}#t_ zk3@*ee|XEsiU1K8LK_{-vP&*sYB%Mmu4_%8_G=sO5sqSiox546^QB5(O#yJGuwP4& zvi{kS_wKS%ci%+v0x@Z>&aJ+?XMML8Mnc4B`nj9<0u1$aj=> zsKQDRdkiv%3wzsMl3LJG7tNQvMLlcBn>7{j2*ni2!#a#(Y|B2?4obX|g{Bm4HjlhLfxSQ-*WV!1kVA;?PU0&aN6iv*%`2lTob@Mu^nKVYN_@yKdGLz?*;iUW zk`cmvvrKo<4rRu~ww=zNEl0sxTP;8QBuF_4P0cU2dQJ6w>bZsX*2Thmee{*uTyD=P z1%`PVdQ{jrmX+A!vHO%ccMPPGazW0K>1+@1Ov}E_WTRKmXx{dTVEB_gGf__Ofmo|8-?0 z17bKef9#uB{_L|fo+M6WTYLO*cHrH1O;O*{G(d#^C8vu!bDc}vHIllJ!kjTV@Zbm= z7JXwTXft%El1L1~cTp~a`W6HN5hkEWk;WSfN?8p>b?<#IYahI|f!f;!Gpo(2z4xpbD{J?7XdJs*nxWHhK>dyd5lX81fE?bm#U|Ex6KeK93@uqY`#Wk zw(BkjoD_^Fc2yPD=QpGzrsn<*_&U8lPDz}!fs`(#S(36Bg9y0~=!8ps3kcgcE?Ryy zWlbO>0RxFCQlD&bc1HmeHV~GAfmi+8(h_|GNX|21y@^mu4OwOrB;?@(rdkH^R9t=4fU&c*H3Z@0^qr1em zbUWQr`TlFp~BuR{OBBeg!rxBWin z8#0pg_ACCygg?69p3i7Qx-vh+bE{Kdd3M8|Xnoe*!}J(PLp+6-eW;`Fe;p!;sxqT- zmPs^~5N`~EU}iqH{3GWLrS8K=!hA#Yg_d|N!jcHq&Q1siidcA!MNQakYsfUsCN^E@ zptCC5-QvtQ*ZPPp9s< zHFcuZQ50-99RS=o%r7u6Do!r!*i4a21Cq%uK6V6u%}dg4IsC}+z$Fr+h4mtyxM zmEcxAvoZ656rb!}quo0{qQ%i{fS}$}WW3qKaA`hB`^4+}?x)uYhM=y#iz`T45Wn2) z5j1Q5(c)&y$H^l8uW$RLPY!jDKGkE+s~Z;k&i(p*T)L%_Pi9V~YlImuEM0c<6g~F* zOIMm{&($1fI^D+>7TgkUPKG>?Mvr$LFYNEPe;cR%=q@y?yYN~#FV9#lZ-IdiL#(nc zeY-N(L%d>W!rLB*)ErBAB+!8JJ(sD;bl`**xYO>|c2p8w%lCwshLLxs(v zTY6yT+7C6yev9wRt&VZ4V+IC7D5Qg6rlz}+@*%dy0{kAK^t82b*y&vm)nGP@z$FN3 z-~GzBJeO|9HL>X42wOPWW-|O_1E|J9Ecx_OTo!^z9I|M0B^@Z^!Tj1`-)vHA-;PRY zC^P$lvVy42OD-$Rdj@Wjqp9pGohsiGHMVBfkK?A#PwCLG=?({-N(OA%X7SD0?>+_b zHk02NpTqQx5b8j=w&wbo_uxjE1L6g%ZQBQ7E2qqTD0bQXO_#)OMlAE#qP?hdiXho* zdybU>Ks}vg4Xdge!oCI&FH0Q5N7xTVODd2|Yb}ClC5=w+?UND2e9z;+mypc}b|c6k z!|3asxX6~GZQs~W_E)(xovq#eaBx!*)YM*bw*1C@8KJ-ynNjeCwBS`hrRR;)vy!^{ zB#zXu_;L4lIGeT?n|?3;sXI(?8t0sNi%L6fgb)SFKe5Q7P@S*#Hd!969cddOy+;q+ zAW0QIvfu%v#;`z9;kMg1shuHvHgSS)O42-%+PI+}YpmErc(h2e_#iziXRMZMkh(u8 zGBBukpYq+qS*?f!dGRse&r!{t<$hQ6NVZm-%!6{!TKNKw+ z4Jeq>XG^q$hlKqMp+Hk^rAdW$1TlX;s>R%>|L(g8AoG$fcOj!Q1~{~Cr;PJs@ti}0 zq|Wbn2GN({F3z17`DqhbynfI(m%jR?0rvZqBG%$6t9wB{-vWa#jooO|`Bs{pl{I z*aujaAGHp+Q)=Wb=&j~ocO2PF_1Uuh``pk-v-{X=d`kb&m)FTrXU10HXf-4qud2c? zC)#z15w>KPlYPsNGbPRKrrJvNhGQOGc)x%nfHDmXMLKS1Tga$8VPQzKikvP zoq(TJq59w#D}$QfkA=t?KFflyRnpaiEN@X55k&bQ8EriH;Ow{45qmOzKDmy^?ln@q zcrnnV!&C{3HH$1ACn@Q$=&1WzBmwHGMH9m4QLM2$fo|U~hdixXF_|YuCY-;0-g!rx zxR(PB5!`_7M6Q3deDQA0PVYd6i60_1d7~x2LMDd`?vBKCY(13) zO*0rg&*k|NBV5-irJ6dx<8!Ug&K)X(h+$#KMGVp$L!OU4&r%b6IGdu(c8$#s5kMAS z`fQj}--maVJ#Z6@j&C&~bCM2ekR(ljO*j}^vs5Jn9!Vi!qZuTU9&}B~|R((%ucW66gn*U6Zc0BERCvJx9@%B#vZmnEd)u z3y$5lXjqaghU@0djqKtB1uy3-Ln7IT@~d0lLs~csTi&p}8`P+OI&T|q{2y_e>;>`~ z=hvTTzYYmWX@drri8h6xNQ@2CSr1;!CwXUz6Yy*2Zr@s#+p#_p0hWe3*ZWR(_ni2^ z!`@Nuk~;dd5=`oZBPAaB5!d>SzG6d5>Zi}wnAN%L zX1Rt?pOXZV<;)~7EgQJD;ywFkZTv2;XP;S(zEdU)4+0@z#r7Tew^SDB?wjm5k*)A2)G== zf_di-zXMdqKiZ-~GhR8KYS=;KI4nbcnO@l90(r zYXRzXOatM4?fj9jgTq^JfXld7W9sw3)8bj5cV2YwNI`L{;mIL?E%L6IF__wlZa`>BGOlBW5IkWrXM( zP|RpsaggG661{DbuE@0Nf+?FKT}9nSo=(+}8J~#(tsGUE$vMhDjl{Q@DG}Cg#fyW(@W9 zv_6l;)cKZb4DyMs67)SGcN$C+i`|p!A!oCF@TGNNgTm+Rs>rr!5T$W{>2m@h!FN+{ zzeDS$)G$t0l8;!z7~y52r8yT%eG64ZMvkyulfk9A69Lb#v7#+zo?YkTx~FZN2l*|FOxye5sKOT$XGu6p&Ipso8o`>} z-?^g$^-GsmgR%m$@Xz|uaf|6j^&Ol}CL6A5HS1`cU-c^Ypc!NPEJ@r_4eqBdAs0}` zh?9|Ue*NAlrkJlzj(34Dl#t^_*Zs$4-OT0ZE0>x=kybj*LNFjA!$v*pv*cfJi^Bvk z@YtqDY|(lF_RudF!Z#~;9LX|CMD(oab!Re)_{#!l%|~kWe=6)wx@HI9PsiZJfC+}a zMT5PXvN_?0#@PkL?xRga7K&g?6A(OknQ;StP`W9rcoNd*TVYJT;?Gq)?DAQ^hF$KoTHB3QdP#1IuKuEPv7F^)Ajp$2A%|pk zO{touv7@AmhMRdmXDu%ON-x!!Ej8p2pc$2o0{BI7in=AGPYTEe;$Li8GA0pi>~wYX zhI2LO+7LcCfze~Qa~L8yTqRMtr(iM%DkHHp&YP99nia`Lr@wynY3{QNSm@x#A@)}f zW5e_=PGMpZgYNc%$9vmGJ0xg?eUL27* zs5gX+O5E5Q%b{HPVv#{d8ZOp1@cFWj=y>@!)eo3uNIZhf!QPK(L7rsc*z5!Y8&2J0 zaOHokGAt*8Dtv>v&7vi7W2CqAmeP>a?!1S30)3)otX9H9CHu5;_Y6i$p{NPbh^`D9 zbVsZ$7HL-R`Vr`MH}wVTk`K7F%Yw0=n>#sSWyPhjmg#P&6bRXt4xdQ8T0=oO6Oa_7 zNvNKz2J>jSE&K}z-#Hu;U^Hg`KO(KhUNR5t&VC>+qW4cUZcE96uu1Rt;{ngf1+CQ% zz;1(u{+S4xe59iyR3=7zyj>i222~SGHFhN2q1&l-`VnKw(dQ0!cUV0etfaTrYBh`K za#t5?L#nD}O^XFyWINhQu-`(!13(qS=Z;6~uRPhst3!xQ;hgpA(iSOrLnd?9v1bp% z*T|o?j<95oi^DUA3djozkn+u#qt5;6c8i#I;jAY$19Dg(yGJ)|@-v?W@@0Cn(fHvr zf`fab7a|a)*~0^uTu#%rPlf)uTa^#FmSjwXS8UQ3&iSPDqSU-4IBUfbMtWU5gB*eI zGDu=QmUQk35$GetR;f$=X4IMkEnZ`s^8|lGvwu|zij~-Kixn>bdlM!EYD$QxUdGB`GCn?T{0jsPQFK@ztX_$ z3kOy5aMk+W%bk=imF)f$iGh%%wI3X?qzE24-{$(^5x%8%mOh6$Or zDp$>US{Y+dbtRiLt3A;1go71L_aIdre6FBjhlf3_t?70i;jZou)k1_{D+AG?BzB9- z3QSx|;Bpa%yg#$f_4@A`-31-xu5|aMl;i$nSm_Eu7nj1nYWcf|T%TTg<$=$j+|Ca@ zr;8`^TrBCgBuMfMe4cUJq1uK%&N05Sd?zlAYcfNbH6;2F4Xd0DS?;mCY<`%=-jVM- z;r;3FBrySyzjWs1N0WxU#crm$i}97lVTWD(>&Jo>*KCo z6Q9)~$eEW-wvIK^6c5mcQF1wHD#+JkPe;H9_9y(8czVoq!1-{npKHtr5swmyz z_ph8Os-h7XX;nNZi?jIVLPJgt4G?5pdH#%WsdAgF=*3`)OQ@yyQ_(Upv3qJ>H60(Y zaccZIOzSV$@fogIH_>t4?O(jj+$CT-)4|W}mrPUhG-uP;BpVan!d^oO>CN*h4?YRe zX^?bv6e;bRaVx3!n_x|8qPKDes`FY$j?F>7=35t$UX1*bB*BZAcem+DWL@4Y%$H4@ z@~+KF=3!`d*>~c+Z};4;^r@9qRmuvIRmGQxq()iw0tK*NVtIM!t_;Hq{ee-sXtL|3 zzgsAY(QYIq=f2ZpGKn)-L?_A3JEL9Pi{{$@QFPW1O}>8@M^TXw6hx#^1}NP*!1&N5 z-5@0~x_fjt0!mG!6_|95juFD>!RU<+VdQ|p_u2CgY(MPYeO>SKKIe7n5~ven1Nf!X zi7x|Fw07~gAN#r*O|-x)zir(AJm#X%`%k!pMTx7q+P#g|tbibN;k*$27zYF2NI8N6 z8g;!{Hh=n{@AHPcR_T`|T-&I2QkzCZIfd3su@l5VDyo)PKB3`O6K%Y*6VFGC@y!2x zK1c$%wn_aM`!f`2;3rLi>VX`rlZwzY*R>!%Yn5w_wCr2eQb%8bYv4>~jCFo;eGHW| z4Xf;dXL8qbw^qbo07?Lc% zOoyT>_C~}vi(kd}@U0f&=$BT1gg!cEO*~JG57w%7$gGC7I{aM=!vSc{#zL!eHs^!8 z9{;FrTs%dB4$IGN)ffONE7Zh=9(Y2HD>w$nU~LOh2XhGZ227gP1i5# z9nq3L#fT~xtBYg z>@A5#vp^-WJX7hhyF_PtQ|8o)i@OlYuCT^i;(ScY37xT@n-j0T%QQa!7p3)~F|0B8ur&} za4HU&BD}^Vn^J2Vgg?=CwI8Pa_w9WRg@$i5+RdK8R-&sMSwc&>C!IVq-luF&xFnY& zvzKW8et0`FcP>l1E-^``t5P`M&)UDdn+~Wk<4P}uqB?(zhgyoP321Tx1I-+?<*4!jDF=9bMbn#KVE6wVXk-C z!jy9nU|L7U@&meVQfd%6M}Pz?iGImb>dk>r90XhaOcofpV}fN5waKZ!vWtT%>CU8w z!$Y&CcUGSOxu9az@TA7%5631M5sbUUJQagWkdA5ODYOXa_5u<>t-|u1I*immGdwf@ z4rrJ`pti+mxVrf1P=CB1GO8s)o`i+y5@I~R5-W8=a-bWZm#hn#`Tc`bCtyPCqa~;! zYr#5IKj9>sq?wGp%0}fm3=2L6*4Y#mIvUbH)6U2iNm&Hvt>=C)+C>693g58^#nnoc$(u{OK#-(dYs5^vDklJ>MB= zkIw%&eQ1-efS7KTKZvG_lY5Hu)viuYZ2dM&7V#lMlIi9YPS3?Wd`;X}D41#HqkJFm zd+;Mh4xf7hA>YfEcq*RT6qH|c?)ZL~IAJzYYlfPnqt0F_?uB+s7-(>y0u53vnaz`N zkkABH79a+wi05&m?-e>5$$e;u08uqBZPOmJB35bFLnUxj=%5(WW!9eZPa%s&(qSL2 zPYHFumhmi14IM%_gsJ!mCH<#u)^M?92f5eBzExvh>qm3|oa7sSt7{~LS5}p8*<66j z=BL>6?Cmk>*j^~DT!J(H^ ztu_2Wy25x}JmvTr6iO#%BFqs=&e}M>1yAt z1xBZxdRN4Bj65SlST2AhJ+-&3RrHVr^_E(e<8`4*RGo6ctv^&H^+Nq_yfH)TJ{n(I~rK*X@>+RkPk9G2&hwfnCFq)+E0p0t1dz+ZnuLY3Tn>e_Q zxm@ONoB%Ly{2yrj!;geCkM*zv-YsC_DD; zabrw@(09P%mfAB?E;d`5#Z|nbPv}S5>-NJ<6H_)oFx%8B~{>C!^+2=YIjsi z)MXG@7gRTFPSo;`(uP*4=W`NXzsRF;4>N+nAm)saOL#5v)AToWJ7;<~N{P5e>Jlp0 zfRnlLz`w?x(HV3~H_pLC>qQW5K|E50%(rzaxXUxD02od}~v z^e3-0FN8bjr^gh2cQ-_!tRwI$|9?c(pe*Qqk!8Q!hEY{ev_9;=&PyoncATCpl1Nr(zF-7wPy&)Uu_b7M@;;g_GoB5@Dt)$ zI!1-I)50rF>Lq+9WWOfgdOhg3$?7ph{z0xnhn&PT?Lh)@hi6Yr&~N}ds-PON}xOS{a9VKSRIlNa=YiSrm^UGxL5y~aowRSu7QU)5xl%5jG5K8_>Pl*YzVqh>T3Tk8oGMCNn%?jt=8Vt2XfyiL`!9 zU<84EdVyfd&_b2#YUtQJO)g=dpauaHN*56#<^i>%+=smEBuO{Zr6#{z`8CH(MiuU? zb2a(5$2z%iK3JXU0TKUceOR*S_YD~~Fzh{32tnsg^P;SNk%vxvUuLvZTc%8L%+B&| z(9`Ph*o+@L7SPw!!uLXy#tPb%;~ti0JOg zjHz>W{Poqhre#eB!u+?!LP~OQTj7XQ1erEBpRx;=qX046ybT0V-(d4Oly--sLHh=t;F~hHkaQVU0OyEIS!?p5gygnzv z%&yQIeP0>PWZx`HWqAVnc?^yZCWr2Jp(=f(>U|$4Mf=$=*{9m9!0ZPg4`3o#Fg$I? zgesQbs-414NX6%-62N3j{b(}fvDEg2dmuEHmE0|qT+2C>V?oKj%*l0&^mRM$J@v3E zq4dlomZ%Kr^J}9KT@6e9TZaG!lZ(5WK#OL6$j@hPcHVVLueam^;F4lvY8B=R?qlTm zj_zN9`E9<90sKYl%(_0m%06kiGy3nI%*s;UnZM_ZnL`C7#>E>%yj;jD*AAb?EBNSE z{%tV)XZw>-87~VO^g}%;`-i$YIPqwlJqA;quC!Aeb!2R*C=1quA0JIa zukcQbcL)Lrq?6B|6faBHBlD()pVK(ycTmXdzb$Lrl!RYRR%P73#tj{tvU(egB+@P~2T>p_Mt zaz={yw!&zjd_Ar)WX#-j(2aZaA~8E_dA^~>(ag9iXa6wf#wjw=RPtC#>)Jg2V@jN<_u|ywrBj z?BBIeo66e)eBBbJLnGkHcJ6>fx?r55Lc3tF;d)tv3iNZ*F^qtl*{)j|6)(|_p`(}Dw-^rjjdC(beYnRRA?SMveT%h- z@~$>Q*s3Xr1Q*Nu5jwf@eV9!po0(H`x{-Eq2CkTlKxAm$!=}?B-LwuRjD^kms2R*t zhABn)Ny6E(z-W#pMdFZ|nD>OoSB5i5ZVTZVw^1LvKGtvEVq^Zr8b&s}-*(4buHtR{ zZcc)mfT!nGkmu^b<$}!JCqm}b8M99_Yr9puKDXOj1Po#J&Eb6zS{2vP=XEDa>PTj= z^TA2Lc$d14gW>cdqEU-y=-QAcXwggA0TDV~Q{3{Ndo0XdnU=Ho!qKGw5VF9^=fUzA z%arq?P`8$n@B#0pflkT~Hi(g;yZW1xbxQ_gOxtm1Vy$&SQdT;YsuJpkS^Eq=W6?b^ z{;G9_pd|rkh<4rWAi=uKaC#J1$W##N^z_v-D<#qXorkuxYU%WQ`kP8`Q8`N7?c}2@ zA0djU`=oLmpgL^zRpH;OH;Ato+O?);zd)AC7e#Kb$e3JNipBO<7_hXRU8TgWD$lkv zEtKk`8Q?`^by*~IMFV^3KiyzNOred97#SagLTk}hD-8mpL+$i!sV3WJrm+!7kDl)ReG~3e^M2+$0=hyp z^Rf#n@{@|dD^b@Oa7{BAj?gkYqYVX1&s|8Qd$oL~2C=GkrL5>TDFAATnypMwMM=-Lw6ev=%F&rg-p#}%yX8`X;!mg1Q%xB|o`);dl}n70hvsQsT?BNM zIcv;8a@ptJcoAh}_vi0VaIc|?2_fc-k&7GjkoN9z-vN=n(Otrk3ga>Iu3$?h z83&{?ff59j2HvSo$@A)>#}YqER(Wc_$Rs)-dAtAYt5xD6R;C6@X?|sy9dcEBN|(nM zMKvU{!7UmGaZvOF9R&c7)LFMIPu)w?n(YEphRWjVoWVz+Y+;pX5~(r$SvhtkCkl_{ zq@>_(Wcq6GyY??uZY@dS8OtDUx2KjXf9)J8=hnlV{uQe}pREd@tnFReDct!|fRQLQe%<9;Si zyCRc@aO&O&mHfy-cc++o%zvHtV1w-W5Y5KX(x%3Wy$@3>B%j^=?91i1@#l@da6!5e z2fKruT%*Hm+9M^o2V|v=N*@ccim;rFI1C^f;|nT?zFd+K{jP}tGOWztIRc#XY~uTT zP+rD#fe#PdHcQ)M2=l)^9)rJh;d2Rj{MD(_WSQ)eAwe{XWOq==;Ov!9$7y254;%X5 z4B$Tb=gVo6j#RHQ|3$+sW_Rx%+-AygSvqdr=rtIr-D?t5d@tAdGWE;P*=uGaGZyY* z7<93KcIQ9!)>`E3vI~RqNIU#)yv_xKRF9#YT+Rm(GnlD8T-fW63Kgy_|u8F(i>T|c8SMRc> zez)H9Wf(zn4)wwruN7!+`C*F-5KMBqn}Hh}tfzNk=UTlG+$+C0yh7X?I>?k zf1{UXVHVB*G_Cu-bOZ_gtuTmc5L~Zc-a|gQb}M3Jd_7OYaQ&_l z9RzAOGkMRH@gC4_VYDIR#|9sZFl3k7mIPwd22Hy9b{h)V`$EZ%&;QaWe0fyr=OHNP z+_FvNtv%rf%$%nz?}ktYKNINbP}9aLB{@6)B}9kQl-`OA{fG!REN1R@2g{MN*z{L) zc)Q$QU*J;^2g8#t4F%cF;8f^dusN0n&LY;-(K7K`A%!tOk-iL&_2dqWFk^kq8zI(48cUc8Bg zwKjKUOu#z(bqKpV^{e)oS_fjvZ62;ti}Se= zF!gtu8e@>*^E~+I(vX@C@nh8qJeNYqg1Y4$wd(Oow>7VCA;AjFXI%R2$v&J7>2`vq zR%-n3$*LQ}*w%=Vg;am=j<~L}U^bj7UDz2<+}VvOqoS_3-pJp;`YuBPsRrCl^@d=) z{4bbzrc(;m2F{a0glojLAKYQMgo)Qa{H=^r)v zy>ffmbyXc=Xx{B_9lW=CyuC|zQ1mlc{5CK2>F(;|PFkEMvy57OruTic zme7@K0FWj>bEcN7ax8?_5gV~$Do|(nbNq80QPCrsBwy&ghRFt(rt8=RiMsAYfG(xP zy~u7!IPJW@{a_n&>4X~eq48JV7w-T*h^|MS7flTLv&)Nj?e(YM401#ZE@cUos=Dn{ zx#(5@5Q%k}wPV(28N+~3M( zlhWZq5SB^e&kd%4uANV2`0Pw0olhU}M57+RL=d*{Nmn)6UhbRH?8hrxT5$7^YLmgn zAPm*xfNb=M5J!K&y^kB)2htK?%(H@$jRS)$+Bv)dH2-fy>nd~s^^VA6^i{EVR+Y}VlO zc0={dq;a#e_%-{WU&TSc4-=-^-E)8C?QxrW#*$2WK?gUr{J$|w{<^{|^6|bq^+btAX z()Yo7U&qC4t2ZZCuLzCQ66R~w=Z@vxDQ{H`91D}z-RO%m?dg*_tRGDkL&`u(7IQub zGIIhqtti0eX2e}tR@xUT*3??)m$I$(ic4{DLh3pJH8WW6_oTBJ4XPAx+mZrs_z`*R zj|(M8z1~Ejx12bW}Q))G!r6LVM?j9t#XVHw-DfR|NiqFq7%()x+_=W3EL zhq`KRdxJVr`3#-g2vV#^P2w&J5i3S+I<)!hCF;@Vjiy<4q!cTp1saN@xsk%1T8I~$ zAP=kT+mjG()+doIG-)p{dHGq&LAT?ZTNRa_H#x z-Z@nS$ zDjW(aaSLlkFdmF!TKwAE^1Y&uqFNK4U`p7to(p^~;Uy4$H`qlTN{s)nZN}EI#{1tV z^}1LRUibd1~s%FEZcHA($Z>nHjVi7DpIkh?tLe7{ zo3#+Tkw!2+qsE6kUe34D!WA8-B{fi(aW!-Ds{# zQY29eD(~iF*pjYST94J%6qZvL@G`{?CdrL|$q0rThlc^r3GI)#JD)4~jU28EE*Pvd z1(Po~UEa$M%(@VmE#dgA(Z}l^Xj5?qW3Br#mmG0r;u03l?o5*CHx{|dSzjHV{8&LJ zFZq00|7z8}G=AID(-f?R{P+XA-JMLXdF*m%|eYa5YXsRl`&*6g(xJN+h4`Es;X?(pW8k zk|<@jh$t-p!IXN6yN1O0q!NL@jM`UeaI601UXr0d7$?5xZE`D{{-JjntId3r59ayCdCiQ`i1-QIS zBhIqH+W-xvYVfj?hhH=ddktwEFXPs;(pz}t%OrPKr`iQ*6s$^tI&hCRsp2Qkb_YH1 z1GZzd=jS5}#y`Ka$YNdHf20KE>g{Qz^VGG{F4l>`c+es4j&G^rzKUYVj65Iz3#eXX z4$_zgoNSZRr;{u>M_wcOj{6Lz&TsW$^61gDIy#i9N^8&#EKE)OyPwpR zDcNGm9Lwr9A!}8j>ZI!tC^7Gmx!EQ&GxuU;-M;=a9q_4FI>gDh+NTVZ#M`*|_+Rzq z#vuMFl^M%y|IR3{!KT3%q3|Bvd@mF1s1Lxg$-Ltc=Dfx)HYNJ)KTj6H+k$CrSZ4nn zL*k{~0`(L8uaf|TC1E9C34DuF!Ki`0ufe8GIAUcL0|T!aE@ch-eLGpKtbR2lCB0L5 zO;3L*mzDEtb$+k%Vwp!Lfc9lT0zBWBJ$FPDf~U^UE)U-i^eL$8O!xABogen`5o$H| z>UvfZ$oO-Q;pe`W25%;#2aV!kR`=bj!q`$@c?Q_4;(h6v9J&`jQT`E2^Jd~7q*%M( z?LsW_F-2m-j!2V4_={o+4W_s}W|Cz&SSTx$FqlpMei;P425;jScq9|6{iPWne-2>@ z;48_NW5N(^B&E7ROI6Btq|ZCPezbt4Z0WxgF5ZyfB3W$Io}p|8yT5qwatYXLggtvc z`adF;6@P~L6*_3?8VJzbMKcZd}l6dPIj*TfLz$Xz- zBO){6@WMW^Et9UOqhK)}W*+UFza+frCnJPfp~(hEW*y&!nwvQsbbG^x8nelE~032w7rTlS0FTat5QA@X#eBASSlgt`1wYCRjgej%BC<>CqRDY zE<_Zg-+Ux?85%dD(tinlx-0i8=zC)aiLp4R!$^M=KDxe#M1K1UZe>$tv75}fP4o*pA3npzpY|4)SlWnAML&TPJPtG~@APe^2 zP4J(vQP-Y(|08-d4p&VhOp`x~kVFVI zb7kA%xTf zA@BNJBh@oh$F$-a%9MJOF-_`lmowNJB01DZ~OEje4(nv)2?=hJE8n}u@(xj%S~E1@j!jy5|5rGM<6=vw=h z`dOibjnp+3Q3RF31z^e1WsxowyP+J%%*k5?9uk?)k1gtkxwXU4DTYwi1okGsNpB(Vm5`;#dt}i!zg{L~7Pj2`7A+sO z+DLa8k2Sq$!LAfz)zJClfYy+m%MS(DUW}BO3Zn)Dd4;N@GthD*G6jW zoq3eJ6dZ^y%4+6@wGN$Cpul2A6-*vu-fzk^m({N}Hf=RTYq_IskYz#BTmdWse44VS z8p(jnZ8nbqDWkzb@lRd@JRPcuzOPVQ)W5WtmBlDlxyDZIo5kFvl7tUf)n}-M-oge+ z*tT1$rrJU#%ToV~L)#7Rhfk9{st;BZtKP7FMV;?0UtkRTJg)o_4mSDQ5gSUc8I&;i zNyP${HFDmnq}ACrUE2RA>ytkllHkNPG;P0EkDKwUp;pmj<@P@*uM}%6Ht+Zu={6D} zNH^75ELJxWtBQ3gP*`Ghh)=>o){==l6s<~*+P?JyNuvEt-6{#G+Reaj&3%~9zb9Ff3YIyIKB3Q$X@f;y z9+Dm!%P1;vmQ)2QWjNd4-3h-JNyMO^5)b_)Thm+YmW@3F}> zytdQHExekWo>GI-VD6I+&2jYHda0VPQgS%a`Ouh`VM6AmOXaT|emFRY3_%6qB(()@ zwHzvrt@{!A$g1p*Ipa(%BJ~=@b^iWW(L$!7hjekZfn26FO^CFd?SZls<}1}I#)Ji}(3{yw_N9ROMoI?DHxbolQ$FnEE@aBG0afFQYu8um2uA1!Wvxl+t~hXZL`wo4yFIDdz*OKR??h;3_?XWL*6|l$h}@ zO#3SyqcX{QAIlEcl;5~1Hdt*Ph_EDv!%a3s`(s7~#3gt=kaJ}T!$)qYT~5aD9%D8K z8JV@Sh%Ys6%eW?<0KGSu3BAbvLbs#W+DU$5QFk;mB|IWaMfAJ5?JvRs?rB`Wl-cC} zN)90Bl?`@04$iwQ?81>`e*lGYPWyyoT7l^mAn(r}=&wzZL*4z_%mpD&+{ij0e}iJ% zNwx*aC&`)`%*Xr~g~WTUL(DuZnC`Ynkx{3ArnTcd4l`e&w`L=H2e-3crhT21348M5 zhB}XTG<;VWaV|g2Ofs5li!mHj%raZBQ-bxa?S24XHZd+4WCW5v9kQmOu*uA=_*DLX8Xdf$TN#an~*uTz<`Rp(2L6F5v#AI~|^xh2ho%Yn_-D$C{Yv0lubMub+ zs{~U?_9FV~Q7uZ4-;I5O5Wq=<$G*{$^RT9xPU5z4hk#Izo7%-(<@4>KlFxt#ZmzxGwa~5iE2b8IRGJyU` zFN^eJG_n}RXB6os1Ht)*HtUGgwu`T$L@6)cb+xY)rvxFhIR7v#EnPYPZkDu4C>%f2 zEc$7F*h2;@1kq2lgDm&9&87WwpSpY)ow!VJ(Ak378wT{sYUaFB#Y zqrG5CQDcE~wLj`FCKShdYqo5{+=(_I9!PdMyI|?u4eeF8^g}BleJ3s_Kb3%mfV@?D zc}H*pAzU+7aG5BOv0N%FsTOnZTk~?aq*M@5{uO_nez>$G5w^o*E9Ls_rA8 zNvL+_3KiPlWN%4|w|jE|B!C-tQWrIpCQs19hW-EH7eZEq=eW%CTK z>8N`&1Wm<1H|wkLcKIX(498zyYh73!UlgoU5iR*gEg2~Qrbk`nriHfzg<2!*&*fs7 zP9!x1`c8JQqkdNa6i^=vBE$9M1pG(9QJv2rs`ahUhB9z*%h*?d%d)th2JRU=#FL30bAaak!;JQ^{IpI~W^`J0}DGaP5 zZ+#R?ddzs?evIs0*4%aD_g*ww)bo4>IJHyo8=`0XcMiY~bLHZ92+E3uKd~v6D(UEd zM4U_}YmaAV9=^F$nuUFIE;}_lWovEI&v4iPMg;Wq z5O}}PsgryrLI0Q2%@D*Lqb1Jfl=t*`t$!YYqj`O`bjee8yw?vPIH7)jj`qrgXz~cz zM|1Gd{6i>?xts8Jh4_a4%@APSrGq@*BRd2}r_E<)IKmD(S|?AU*+t zbz`qo`@{FcP~KzC(rTO@E|B@PF^4BbkgnwZIN<O^xt2oNKHW1{qO*YUcml z@m)!lj!P23YH|)G#=+sWSK`yXoC(UbYb}~u6X*Mj=QZC2xUf%>2MelDiknOEYlVV- z;WMnK10HYn`eYnt|G8F+3=*{H?e)Wp_yDTt&{vK*es7=p)FrH&C=w;ln_WC$9c&L_ z*Mao2P@Y16KE|qk;9ojo`9bi4?pp|9WiDPFcg2K?JFYUxJ>7Zc*v#tS*VYpAnsh~T z^D`y6r?T5cs=Uafvt@B}HRUN~*pd$L&`vk$mixD2VngL{`{lCO1luyoX%2`%uSQM} zSSg9To%#ysv$kobTxU|&?#+@E3!3oq-yrrER z#>K?YE{huNB0Ut9Dyy=zokS2ZE#NhgrN#qZ#%Gq`H5+Zsrg7N_ZyuIT)+isr)srjg(a6toeW}Xwvcp*ZFu^F&{TaI?}Oj|GBs~FUWwxh_%T29(Ni#__9~_0R$W$Af2y3m44<8M z)CA{HR!!8&n8Yt!zdF{%{3`;j-N-&V(v^6+C}(ZoEIE2%Tjm z65#tWb-1WKeMk*TOw+gPCCGv0ow7o?S0n^{IE}XkPoK8*Zgc%|)jQ$dQa#DT3GCT< z70+r4gaPP}ynd1Ddi^48k3IeJpQ9dYo2L{><$3oZGNSChK95)5vg5ytTluvD@4e6? zb8DoA@mi=LPRwOJ`Q2WdyJmKvpi;Et}*f{Y?$Z2Yg zP+=(M`2T^MF`=Tle2hJi=MDS&vCXFj^Gn=A?{4Pl57Vy_rb;dU%m>~`A(R{C2qfyW}AfHIb?bmRQ@cY;aHTN*9HFg=D;Jg%#-l)*p>1ezl1D^H-nwBTOaS|63-Jys zI*C$w{zxWh)1^vK?$ZJ=B~lK@RT`>E5N@h0$>k*ElkldV>}pq8{I*KG2F(8>k{Dg3 zKimt^4Bf(+W4+cblh0lP)sAoAzR0KVi97()+(InH`ROSkaIr;05(TT`Q9tiK7UCs}pz}Scnvd(v@Vsx;R_S)r0zas!_;Eb8)9dJXkheQs>`r+Lf*N!X={G!<;Sb}Ug|Nsslt~WeWvl~1&s(ePHERkq1<-!c zmIIxP`r+R>lij0O6g;F^;{Eu(<}we|!@XSCUVBUO%F4>$hMe#$4~Dh<`Yw9aZ7cOY z>Au%Ksx@<+PpPjEkYf<@&*2MS{NeZaO8bcBE3qEZx4Q13ze5Rp=82=ALc5AR*7><< zB{1m4ajd{=ij=g9FtVY72F`Fq?>z^dCaH(;WZ06 z(ziTXs{lz42LpKSfcD$2`~Z-N&e}ryi6f0Ry+|{cDQbgdiq}+w6T6ScL#5Ij4_%LU5J`e zaU}U>V{4&iQ}nu3i^@L`+3i~g(yCJUwWuMbmPaUPuRVM9H3hcKcFvkUn(?)!X z*SWdMR=tKZ$Uo@r+42Yc{^bh^&=b_5kXm|5aSFVdJ#ulTZ{0LRBxJL&*p)q-{Vs)C zM-m~$JZ2wkaa$40Rke$f?+cOX^OJU&a?eqtWdAZm>=l?vz)+gG5|((+Tzr&rQGJJ8 z^xR!Ou{A1~lt$f>^EStTP6CYeTkFPVm(A3X=;BKv0`8QKm&h@Z#yIdI^F?J@M~U-5VDZZb;frPLy^RHLlMfMZSU zmUldZhrWfi?)l3G-1$s6u`tegx0V*F6l4aB)Q(gA5FMkj6hFz%Q*~y?H2;+iJgcf0 z*Y0AU9_~67srWiu+H8}7?dl7$Fn-aeGHHSyF(!k3PX5&yE30&Mz3b23-FE(UZiQt! zScC)iINC&Voz4FAdaHvLXz%7nlC>H4)crR@coKnutyXTi$DoI(sA(6Hk@u}xqPRBr ziWN9?ag*Pzm!SQ-p%b_*wRVoV@@s#Q(%%0}nU%`b3@$V@?G+SC6W(uP2KN2z<*HBzS+MU$Lw<7NbM2yXZ z62yRyobPLeHtf_qs3QjXQ0J$p*~ovdaS9sEOZIhWWPZ{}oP4ZAEp#O`ymoqiRw=r_ z%z2zM+fZx6DM22 zf1;#@pQV&0QWW$Tdd+_h+}>r4h1B1u@S2o1ZdRiPN04ODll~4(%!D7I!MZ9nYK3l2 zj^Vr98(eSD;|5c~u^^8?{p>f#odecgpdy#A_VQb+r%AMX4s&-lRsNA_>GW*R^AiCNuNm5edfn*+=+0{hL_pEQ57;76Oqh*@4t2b{~CTUa=9{g*^7ZGy1TdJDxx<7qdRXPkZax`}O zvNuQY43Q8=LaODa{+X%^f)kv5!)2Wg4VD?-ch9ssp->0gk#Kf#-bD8ou zzCW)O;dNey&hV4LftSP(sL9GSr=ra0*=1F(;}R;bDe1rkrrfU3 zbW9ZrveZBxx>%p8jAn-2yGA~vNZC+L^D2B|L?d`rkm7OaWi*oewb9<0dqi#GsDXep zT-_7AdheSSs-s-}TjNvz3)4Z}BtJB4Yvd4})LWNNyB29;LZ)u5*HWlRetXIJC+khC zF(EQS=|KvqaUr22Z zL+l%PzHfH^);vI9U$-W|D*);>3l#YE82#UqG}-;KrkO+xg(|^X19{@)`?v5D0Gny9 zE`@GRC;l?q#p9vwJTa(x7|voycP63qu+@k5BNEY{Tlhc7-yxzI1P9Os-YlZI+P@t!VCcBPM&XjuJdm?M%rCK$UcZcB|E#&ak7Q z_b+2M(^fklUH^3D?NU`W{4XI9Hl|^cGItQ7X*p8VW+=hi^#wu!qE0lgZ6bQIr4&6b zMPP)gchymaRr$DZy`SAcp^68m)NBQ5Nza`r7vP#6dO!gTPpVMv7k5F%sWuSer3PE` z42@LSXDREztrmL|rx2}*BBwMR`yjU)GCUU{f)eDm-XWmV-k7QZ`YLhx9zU<|_kz*i z`Ki~SJLS6#!?~_n`$0mSq&_9G6vRS*90Or&Y}&^%M!TVzGFs`E^S#D3J^gVyaCGON z>qrHr19H>2Ru+7+oFPMde*a7Vp8HBK41}&; z&TqS^YF3u}EBM~Evw+Z5y6?H?vFpo!O7WSZbw|c90Q#%j&=`JoW#GF6`!D+Us3UgF$nltgFiwn${8HhomRzFJrzCQIisR6uw(>_sYE` zW*aHuhRxFTH2wBH3_;y>DvfSmLHI~Nbc@Rbko z%BsmgT(8-1go^f{rqt!eskv)A$O|LW{wZ@Qs_~oJO{*XP{%)nXt4lMVDfN-ji1#W^ zF}j_;+CS}3zMc8&1tQp&HQH%05kh4Kpjol{7F;g5Z0U8duF=Sx4exH1DL_W>y{dm? z{6pu87!U$lykpvLdw7@NJ*N9#gR|P-mcF$ld%0y$A6_O9YK!E2k4!3Tobm^m!6LNe z<}eS9yo~jtrQ8bK3exI6Bq8d zA%wJ9(1K@GFrpG7RC3Ff%e$Tk4%eCX(V9|H@Q4}cDpxPZw(FK;54dQu1?`7L8OvTI zyFf)(JwJ^5|4n|qLIc$)WR^hZP-*!wLmbdUgRAbWGZg0Npx=^4myN!Op9#Sjr@ryW z8+W<#8-)n}h*19ch!hO#0Mv=!`KyJQ+E)Bmyu zN`a}x#q?c2S@kPB|+F#%oL<{xD2SV z44h37 z)SmQ!$mW}~`wjNr%AE)=206=91PEsC)M-+qeldh^Sms%`|)3EP!M< z2p||MU}dMsR>4pj)HHJjncxwy?1_Y;Jhw z!FFQCZ)Wm~;RB$I<-Eh#U7m#?s%hghlBUIu6*5a`5NvKG@3LK-yrsM#%+)nd2bXiUv61f)z)38}!aZMLPbgNKi3viwts|FmE)`hct!|_{+4Q^fhwK+i?vn87Hf}I zBA4sdbzeLRkf85E9Z&6T;7HN6eSMc&ikl_515soirinaV?Li@|UB+mBYlWGY$-C>| zl#yR0HUKv;l%UqN2S)os$N>U@^7%Nm7ZC06F_UmN`r1ka z`uBD*Ck!w7xlF~zb$J|VMDWc2i0<7=SVL>U z0m?~M>7vPSBMaYLw#(3=E5KJTD8xH4ob~mTSO6iiYxKfE`pZb(`A{67Ns`@RmQr7N2$!z2+d4z?H7)ROhwfuz{!WP|hxW7RFve?u88gh32X1q~o z`#9~tbZ$sC)cgw74Ydve^?ukL$IZ+PPS3g~1-QGO+2m0I1M@m@l_Jb8jA^Q$rZgpj zI}5dn^$|LVt_;O9(8d1UuRw>2al!K=#(#a}PQt@}PRKl|?GX8V^vREP5~J>0_-IaK8$O>A_H&OCX9&LbI8#`h|Zu#yCUe~ zjgx^Oxs$;>67*eB{WG0mTx1h-FYE*cCx^D>4a8PS-pb91I@oqK zG^Rzs-YPJLJ@k-kL74&B)SrLRo6U5-e!8#sx5X8836TO1^=4G7Q|3FqjsX{rdv-6_ z!}g{K8U}yh;myqlTy~GYGd^Q0dVHUUg6Z@4LC$XPb`K?aK*il zCH;TP_z}){)?F51Wl1cSc6{W9XC+W^{&;EKI99FE#!o_pa$)Y?heTcMZP2xCoGBF2 z2*u36&ZXvFGKqEI&p;Z4)8jkj2?%9dY@cL7DE&W=e++bw*xn!rRbbki7Pz;S?a!@; z7|9lgm`L0j3xv9+o9tM?_#nI)Ch~B93qrJhRgKbK={Jf%7jSnfQFUDnxTn}NR!F#l zJSr5~vWe2uI-&_U?o}=*AzyW)dUW(7K7Ca>9s>spkfBqO+c_7r1f}VE;kzRkGeF>U$IZtI$BwO=Sg1$KlI8e{hPJlHC_fD zy}gC%U0+?S+ls@RPi_KN=}T(%`=J&im!x^s8*0 zDgx*#xj~lqle%7Pe<$nDzZnh*448BdfI9-}xSla^dCeW6tC^@)+we1EY$YjhHAwZ^ zV1{w1`{W@m0(E3O2q8)19D1ubn&(Hm2YF5ae+LjEyS_#Gx_Z~B_c4ky7zR8)Ix)93 z*0W`jxLOS6R!m*)NPIE}_)>urmujeFgiG1jCv3iy9NJuK-|J;#Xjp%)!9Q8KIqWsd zTxcy*$j-{d-S{qqt^eAm?GI>)Y^>PP2XFMo`WNj3vj8k1T@@+H@6^c%+#D-6(^Xw9 zdGI!78h`wW<2dCCAB^1_)l2343w7yG9=%G17D(Q}60Zm2^q0+MH$kttonfgHVL*l< z=+)(N1H67!xi1-X9o%6vxlPmPaIf}an?Mvb%rcLDK6oj|iSAFoa91H}%+gXE_@@GM zAwZ(y34tGMKeC3xI@$NTp0>*(b6e$#{gc#->a2O1i3-D{pASm!9Z(7tMYfp)OQ2jW z-lrDMpM-Es4MlsKta>n!W&7ygydRF*0R!f`UIZE-D@AmxEhvmEl<%jMG(Ucbw*CiX zk?X=2_$s42I&(543ITB~@8W9MgJu1L>-XRd0T42c5;MPF6@oV<>){CmW)tk}ztL<* zRr@ZBgI$lfikX0{Yd-%XczOnAMbrejdWMxO&wB*-COZovOb?$f+>UoIuDy6t3~5!6 zhqA~sZbTGgULBCJC@VaZ{qc(?S-$?elBObM%a9Z+ex(@)wV0`2*q;0Du=ZJmZo?BM zI!E)|Sp3}F_yk9@Qkf5*C^=Y?D;Hi`8giQ6xsOJV%bfE5*EJI;1*j zLguNghE^8t!HNloEX=r+FWE1#qx0gO>?f(h_?3x;<)6$_W4B<1*JP5Q5~ni@)1D?@CV=ObH>ydzW;D`O@eBXo z=2^~fhOt%PJp$trFP&8Q=@D7V`-Ud4Pwhs+Z+*2?ley+L^X}I825f$ep;}iJNcieA zABWDvM|;a+qBlp;U_XWmRBXP`I=2@1b#=OTSZVgi*c9K8g7kae_yP8H6qoUsUB2QhlGKGJucZ2I0f zU#XtKG~`&irEw1wc&sV&j%{zI*2(p6jYq=X0fna;gfFwuCOys!2uz>xeAOtmN8`}+ zK*f?r5^x5u=V(sAGpmNV!%NkzoDJ*0B2h+O)$k$3zm69-;-d>3ERH7SQ8v!V-{)fE zMSb^FVa(X_^vmp_3=Zl?*osw&Z_b*&%7ojfe$iD*(x8a(6fXUZ!C3b&OL_Wi`l4q8 z5lpP6xaa;v<7d0ZPqsQd5}to^PVybFs@|&OFEwXR;Ei5p(t&~*Ew#!Pm3oaD;xHyH zYN3>vg;}vE>dzmEIGU^c8bIgL4goPoxju<}=_9pVd*A!l3_#j_)dNRzSJpk- zuHY1-?#((+NVkc?%1-$mMK}?#qmhfNM~KpYicja*#EUYAbSeS{9yRy<=SGu@S=0!PiRQ(*#Cat{0WpMy_+Bf& z%y_K5%|^`RG-p!+K<%b^13qrzV*N^rh@;3uwaF`KT@&6?>gq}J>{y4Cd6r^2kB`t9 z>GuEX*Q!!QX%C*VUs)H}{Vle!E%@AAMm26~Cw4zcM2e7JTmMgyk6&Ckh=*cSKo!_t zpZ@~%>d#!gt&u>SqrUEdbnofB@BwlcD@Kd$+;-4AXCbaKKKs%Zx*b<=?=fosiw0c# zGT@SbPRkKxJ^iPn7TlPj)_}KdDc#4{XE3pF*E7uTTX6H$f>;X zmEz`5B%!rqW7#jSV0+|fHLyy*y1Y1CmVafM;|2r-5V&b**NYI0K(~Bw#vJS zWK9CqT=xoRc>DR^8nxraa_Ro`gq==g8(D|M%uo#heAR^KZ;uIZ76*UL(x}NFk>oBX z;2(zmQAOaN(Y30>eB}L$RClNmU_r3*KEaiZ8NoV#%I>}Nop_M45|Nbt)W|=6)c>5I{0M4Y%H zgLJ4UEx^WWn|ay-V}2=NHy#D|&l02!l*k?&?G3Lr0cR)v`88mk<*Vl&g1aIC{7CsY zi)R9rPUnSf5fsC!oXXAHKd-5VNYJo-#9=6A7XMUmF`%#WVHTeM8Gy|JV4PE{!tq>{ z^S_n#bt@04k&_&&_Mr>ryS#dNQv8U&T$^|##YIE;N_L0R)qkp@&gl!yL&HLOGT0GW z*)Anq5+Q)32l7x%{yQOzg(w1eBy~IAF&plpT63wg$3InitI*AH-Y%L;KbmU&$8kS! zw&5d5XTi(bK>SxPm#4dNj_HL{EJundY zrB5(zcWVZ7w&v=fN-odqW2yPgkaw1M!9d9VVF ziy*+mTqUMmGo;&f;%JkovsUki^bI5fG_~CiQ-|a}%*JG^yGH3J;h;VK7kPyI=NEAC z9lPqDEvtgu??_pEWW=@lhpu`=yP!2v;~qw!zEW*QCSLB8l#02ek3E8vwo=Wrh}FUA z!d@#m>A;*0^U+7-VG4KHLna0o?cw_UK*jv^C3UtKMzJ{4SBe}YagA<|4<%7}256E+ z|0Ntae%QPp9_C|I9_sxRxN>i>^uR-$ml zd@nboN2h^})B?OU_7M$?I(7=w*wk=aTU=WhrGJYatsp*G?~;oTKeLFI6U9$6UR2;; zH{mjUT>+?Qj@tJ%$t!e&(nx}8Yi{q~`jYNuS13RgQ-&I3rJUnx%FwQlJ@WrFUNj=3 zd_q%AKmsMSkcMdnCJvd?&En}-;^hZwiYm`0>6mPo`iGT1#wgF(u>MGB+1=mbF{W8^ zF2NcXBQz2CCjOq0rVyO9JP;R)G1wgXDR8S`iAgk{J2|fG|LNjlEPnRzed6}N-wD!K z7-!BM$IY`_+e9R+&#zqr^L*e5{&nL^fn}{WADbunKD!nQVMPBZ{n&)A>IRKDFEZ$s zh8F*Vi+;QwKJ8H$;tUG7nKMpk^U2cF&!a{kt>$d8WVqBp)*Ce`AHEY>&RTm>`Qk|W znm4eX@D{RC;3I8<5~Wz5(i@XNO0;tPAG9nYrYIo0lu;O?q^6{RWr5MNP%2At$R6iz z{noPBf6;rq1kB>uaw;#~X1qnrJ7Y89Am19BtdFi@YCFGjF3Z>M-4)@*anE}~(3MBG zpWdna3A=Dv%|6R}Xd;C?1LR!J=u!XNIKI8U8{{#+l-IhY-3su-y4HZoK1#f+ri%Ne z0zjgnqVsr3ht3DMO3)_Tb5x&Z!o}s`1!Js~;rQZ}Uf$wS-mN#_wyh|5b^RG9dL`>Y z;!l3KZ-f2Azq9Gd@A{a&TPdBCAlGBgp7e(c_i2hTr7wr{@YEN$?z0ui*ZcM-QmzHQjp*CD{INA}-Ko3%8NN9T z8yzQgQ`l>i)qD^*QFQwSmyM3te2rF$Xw8dsTz1;ZIxI{o+2(kjyTCSpVDV5g846~_ zPg^kDTK-wWz1Rwg6{sqh=KDb>)VVhr=K<7lD@aL+qk{fMy|_jN%GO7YN1T3RwM<@< zttwlk?dm|CAA^!59W38U%IXHlELH}XXyxQi`N+f7}$oS8lDffCAZ7-7~pPs~rzgu}ku6H(zJsAwx z3{wmLDS3*ji9<=JNfn+HV{2FLgfKU^A~WqYF1OAbAX(d)!^i7dq3Wu1kJwX2NR}a* z?iTccdN_t6TvNZVG@|=|M9~z#Gj|4(Owz^ihE7q5PRzuR;GD()3WJNfdAtyrdSW!A zj>GlmnJZ_mq82tgkN0mC05?AD)^TUz`RIh9K0Gr-8yyl)SzdGnlW}rwHree>DBxiB zy_DjH^(jC9nR~V5eAK$`LI8<;zDxV$ZRgS^e}-?5x|QD)jPuo|;N4Fh3{-Q^#4Q_$1-K6;h5yUdDNlcDbMf zOJLWqRvZ@v8}<}X1>3mjCO&|;N=J1W2X zkXT5=VenfFW#uMshaC3&Zt$6>+Yoots4Nk(ST6VRfj4B~;m~J{ZE;Mcch})^uJrcj zmm}Nve0h*va~s!Zd11>J!Duo3?@Ng~lZlpLIeP{z)!PGt5rm#u<9bcS!PH6fF7JD-3_72Y+NP=rA(G-I| zB%BsTVKRe0=~I!0tIeDNtnwDH117;pJoyx150%>qB@eNAOxva4fP)85Bit~%k73(1x4WWJ)CFd3@|o^?K*?S;8!p=EhS@M`0eU)%2f`+sx)M^xx` zO<8oKd@Gg;HooRpty+?6dZeb-vfRceEKB8nG8hEh>==q3sAyc{pC-8bYFRE0`k%pm zV+kS%lPRHVR7 z2;J=yKlZ1!e5hhN&t_|`NZmnYiz$O<90(bb=mjGAHd8sr!4R`6RFA|Kf5PmUbe&lz zY$)Nhrc1h6aI_G>~VXYB>=LMWb{ncYDeWIw<)G?z7!$-avxacjf=`rY!5yW%Oqb$wZFD39)nhhH+8 z!xOdfY}@!S9H}Nc3m0*sfXnzgWoo2RyY-sO(03RMyE+7g&&KcoYtA%ChCS&a^o2UnooOr+0V9k)0^cQ{W|4CM+?ZL z@Jl9(Q2MbF)m%slq%g#qaAbo?HYGwe{)U%?hxm`5nyierEC?k_O-kR%j=XNYtCarb z&2m*)j4CeHO-a`-9nQ-QfuhDQ*~sm)a!;eaL|e6onm3_SKF!k&9C?EiuwUsud-S#w zzG3rxvY>K}_-Dg-W@}m$`>=Kz(g(@cC+R&sx%-~Otr9j}tT+_F2it!60D16AXBnxUs zM$%ZXljjqE91UJH@$y01DCpqfcVPx`{%kkOgNn`Me*080 zdacN5;imTCxg&<(9y0XE{tFGr9?2p3}P&v zD7B7y*`IBu*@7CyQ?-^zsr+~J4_Mx>`qw*2&a*sK!kU#({r2;l^9$-V&x@Xecy)P_ z#&vRtfWR}t@ld{D5z9*2KEF3DU-z&G{FSrqd%m)Ze+oY6EzfiuwWEZ7*R6aKby|u+ z6A))bAhD2vHcrT$BlTOG(@koJQ^Y^2CWK?;i#@Z7kb+c=P0mg==BkY=>EJKmZ!lvx z#CWb4{!QE;;MPB5`@)Zdl!Q4YAuXSxv@zcMp>up(Yx!l7&Rbzk6GB{zg}czaM?nSMdUpHN><_CL;et~4GBx?bk!!&EIzvgAlv?gXU27K=XF{`UUnfLVGtvtX+t!ypF^-#%>slR zg!reibT41kF9m(DCoJWm?8Q>CaUEJvzzq zsuVMWV1|i?nx-*($@=A^e!~-2xsyMA>;F$ul9s=$-rgq82RZYnG2F9yGT3Dc z8ujwD@%VhWl16u>=uZoIWT1Qp3#pir1I^e^?a+~}`fp4MrwBI|f~fdo#0MbhQjRrQ zljYwdFYS3jvXQ8bmG=i4T7HWP1dT3(nArHv_R0%f4WdZ#6;Y?; zm-G2&YCb_G0e8{WSScA5xR8Ea)R6V+)mKfwd)3}t|07a0L^2FQcR1h_Z@^djV4dN16!6nnk-}=wQ)Tk zYrmCCly*gugi_OYW>AwhojJAcY9e1&<@gIC)t{-JV5}nAH|CL8;MU)MDaml8zt zVYEqc-*l2+c47Mu`y7KpnQ;z4Li2lsZ9zS#8(QuW?dw3nCja>heg_xUhrY%_& z(kwNQRl!)@3ybMBLw82k4{nbRcoQ*HKeHCt1YV8ZZO(K&nNK$KX%C0^7nJRLs#N^T zE_mx90WEM%nT(-l6-v->bnxF!str@Ph665i2IzLAER1b)`x}p1KXso>@Niy!QgY!ta&Fg5 zD%EeafL0o^^88R@HaS~>`fnR(C3r0}u*Iv=uF-_G`}9H@0zO6|BuKkZ+>7uL(OU^GyDK#p&9TdvnYMf^D8mTvDXVpYvZi; zx3Y7{hLH0#_gCIF@{vhs-X}-+vfA)+CC0kO1n;^ABGb_2`|yb9GO1>2rijG^KjbaO+`f~&wIgMi4=mR(ZLjXX zt-4puu*U~_Jf)+tvR@QEgVOU)tHjo?D2ER*6unSEsM{w|yZIYP6s+-QU)7G}_`Yt1 zlB?4dN#vAt)Pgc++)`Y17xJUx4O@)p_?=d_US@PC3;ashEF}D|9=6&$S*c{|kzwh_kD4b)+qF3N%-fDYOpXrhl%|UcQ>v}_6 z5a%?+0g+inRyVS3E+WsDgM>j>gN%Dz_q z9@Wj=JmI&9#-_mw`Jsn8Uy{PU_sP_T!1l~ybktU<1Zg#SmSl1)`hekb!nmZeWt?xX z981>0?mlzA_V<_=qZ~}{_s86`*qgeGr*~<$&o*J?0$*+;u4wQ5qwL<+<^8OpA2lPz z<{x{^#euEec!=V@xqxlFyG}8VaP+6lVq^j3q>MVcc{d03r}(a-OW$6?`kcH89W}*` zUcuY=2q|t)R&XY|YF)8OQCzc)c?HAd7-}K{d>d?SZlbB*FdPFbJuOJv6}MCh(*H*^ zxc*Gw_xx52t@x>m&*(vON?dX~!Kx8D`?}+U#nZL*MW!nOs}|j-Nqb@MyLpb?Ks%}S z6D^t(mt7XQtu9`ZmF9MSA_-HswAPz@DTf>GL$c)wxXmppdN8QxMHVFNcT=9BQQ(4I z4*OS4Qj4?ooUfO`oCIoIq}RWDC2J?Q3K!w$Pm*t9sVIS{@7t9X<$;YM#Gth}MYK*(M6ofQ9B!@mH`9*cb9wrwlctOyt z{d6x0G_iO=_=MF(Og^iv_Tm<;qrW}zi5>4 zwDHe3$z|X?OYA#Yaa{R^`}+44hogVn@d=$Cv19jg5{9~5ihJ{j8Zjq{6-Bs$Z``xU z)cRjAe-4MwUmxg85t`-GL2xAt)5amf2cGphw6ylpCHtmAgS?y4mkqDfa+*?oEC^Fv#Q3Ek zS)gQgUzT`z5sufWx^C9{DV+>WorL*^UnI0XR=!V#feez8!xJ8zB6VoxZi|O2tB!SJ ze!lGbd7ol0D`A)Z8~#*%uS;)bvyt0No{p^d(S;{2dt*kNd;^4_cLZB8N23c^@xl=o zii9w#A|Y{0InLH(!F#}8!o#Qcl-V)${+>D5?!D!FQqWwmE2s-KcXlwiLTN@$ z3@3gptKO#_FK;l*876;3Pi)Clf{#2E+rD0pkOu)53pPI$_pbjaFLb1%lc>BP z4tkM_B4L&Kw;)Ay6XyF2w!%hK;`ok(A?nQaaqNge0>O9wK#OAbH z2MQZI!WroF&&I8Y*1=)s*T*(3seVale#DUh2Ks3Zp^1yUk!~+Z@7ZpjJsBqN+Zm*) z62UFIhjG^fjPeIa(sAZBy+R%CRVYU|?HunMQt}W!mdV<3y%{Rr> zw+x+0xY-*)a34~xQX42Yfww7fJqC90$!}Ac+SK%7%+q{{JIVxe|5_8~eR19v|@3bf`MoYNY!FwrTFY1^g+p-vkwa zfUUhk(p84ov@PJo_4+nU?ol5Tmqnm*S3w$;Je{rj!g*W%6<1>UMz& z_U|!4a_`Za*j-QodH_AdZ$7aNkMEO%?A-=ew&QF!QI>lI$6$fbLfm(fV=AQ4r8HaQ z%lWUfPR>V5Mo*tHq%bg`lKsi2nVmaHp({K(uDgLd`S^*}Po2e$WEYDZEK_D5HIKnP zq%l~2-3vpUr|ssldU-&3SA#lZ`$5zFK`QU=LEe8zOj=B%JC+XGXV1STPxsky`Oyc7}>6vpP zIQ&9L>7Lu}JK$~zOsx4@BQcd}*kDP%mGrb~2>(pxO^&i3cRE8geHW?NOLS0r){z5s z;dfTbL&9{^!cdn0U`CU-yejbWQ;u(!-P8!49YX+k?;rfW*Ut>mOxw$V5DVObpho*$ zPXOFbSz+UVj5Z&`NcsMSE9KIoYc?zV!(E(C4dcbHUfV4i_bch z=!6`L^yu~Jyj9-rDpzJkd|})X{l5qPG;j5^x_EcGf*4}sMGy0eEW*30p%H|X0jYKw z%zFQ0clYW#lYQ#6sM=o&q*AEmJjuP}AQ6Ii_7Q*-U96edYyJYQmArNjP}rUX`7Si+ zf6k2E&ihLs4q4XRQ-7>LSgZ!o#iAv`5;@EQ zC&OGH1ipj+Nz`Ja@LDFrJdIIDsrX1SAlbdI*>q8+hylT${_A0)3jpmR4OdTVkvG&I z-)ZIC7R%z~GoZAKIN*S^c#)$smULyCh?y8BR*L*F`wACOI#jZpY57H)Rl49g;uOY$ z8Y(sRTDQnu-}N4RT64w`=r$|XK^NdGq2*)GEuH|0}P^qnY;Q*yPO~6e1CIg-F81Ahseyp_-L{Q5iz- z$8JhDGN>4~S##yOj1T)pW3yu%{INn1VS=H*s<_I~99K(|1aJ>>FVbjw%N3m}W5?tX zgtF^1=br<}I@}e%E*70ue)FJkPZkUf4;BS4BbB2Cx9aEdTnGHN_w%fv%S>)$%PCXm zas}Zh5X+nQfxzi=+nQ>O?Zj%K6WJ%gK=j2VXbL}G{x)!=(x0pLCc(g*XYFWt8;^n% z8FY#g?lAqJK-oWJ15uIky{MCaA%pF+{jItVR;pfYEYoE!r$?tgH$fqTomRNVH=5wO zf#c$vZ`afLEh?_;J55!`1$qDVTwh;eO%mzB>&o*2VnA}-pn5K#QErUSkcgTJa0>n( zk)+ga-aSLVldjb(MqTI;N5S(Uwr2p_O)u}+c0r2yieVjHua;%V86FJH^M+Ar5H?#; z;^wq53{3|H?_spR`9{CTPyG8$f>>_>+(2U+x}Jm6c~^ZNjZc4K-B0_o5#-*zzi--f zxQDUWGzgV@?dXe_&g4JlYFsW}Z5b_KCjU;wf)2VnGjFueo^dV#xny^tJSX}Ct}T?C zGO$Z~?F6B^LP4O^ERuk+tm}RBAZhL)Hz4HzXpGHfVR-Oo9rpApn{E5aX`6h!Gz&Hh zW(yqvs5~iH?pKw)DnCJXy%_oZX)A=xQSmUL8<4qUk;8irjD*0Z=JazN<0p+RT8gB- zHVgG5Yr*<`y}p;<)(!^RyMG+5B8V{Bj%-wcV$gEAv}a-HMq1ym@<_ZtBGiO%-)Lhk z%wStS!0RpA=#lVZX;*NbTkwX`CGp}C*SJ36h>;<458iaczz=P4UDR{?9cymC?yM#=bJ3 zt{>NIN00eh?-C=9oV`m@ygWZ~r`Oq)Jq-eKOr3{%nKwNKAoD?}U%_fXAhTNDEX8VJ67`lAtVh6_0YUR@Eo*koD7n(a#xw~qnlQzM4b0)axV4|5S z$2X3>Cdr}Q;Iwq_JGxzi`16sMlKqiJzAa$O)o+PaY)jdjDdnxo zsmky2T`Tx2&>Ym&P?vxoUS5A&b3n=4J)j%UbLMpm{1EG@%ur&_s2K}QWc`;xtq5?= zh<{A{U5X&y!a}oxCCqLWIx$6;F@X{Rl8p|Z6CLA|_W((WeYer*-8UCG+b7pQX$i}GChEV6dkk)6_iBD<3PMwBO+}rcMXWQNV+ut zt2pBA_j#WAvQennGVC{&VcXqQRD@omv0!W`NbH#Q-HiK=$NDv)R=!ElJXqzo0%L>T z@(#!GCHJs%+0aYT?rF(KcpW*d?|0Hl+Z4(By&P15DZ*S)=F?lKN`ZrgpoD=}Z;E}> zHBIDNUN_6QKEnALsus0Zr;12X)=F)A{g3EXuBk1(_y%MQ&pe`?J)I69sWd_vhb(!u z%LG-OS$>pmGk9)~bOpR(NtOHcB%!ql4@BAGb8 zJgCXLy*z>F>flcL)|fFAhk{ND5e#(i%U|AaJ~2f--QgFs!$sCP$gmm(l-f)C6Ko69IHk7)G6;dZ=U&gD6>!}8VwN6Ok%0*!L1;(DZN zpZ^noB6%wh>(H+W;{AlaLSy^+9uvR2`WoDI=l@ds%e2hxkCs2@`toF&yJL?|1IW({ z8>Pmbo}8hu<Q!%4pJ3H&d;8y(mD!(&kU15o0CwWn1r_CxamSeUg>gESnzpIAUN*IS*ZaONwvi z>>O34S(tB@I8!9)cizW>i(?OTlV<8gqX%bzo)a=fWz1jF7X3}a8L7+Le!r>}(@^3Q zzJC?@xQO8FRoeZe z{w}`)O<$qO7fqzIxi2+!HTVH|jK=H_S3#WTwmkv+Fqa)yQJnut^44(%Z2V^S;j4Z( zUsljL{C`CF#~e40?4v3AYj6m?R>KEL+CBgZBF)?KdeME+k5NU{ozDy^==|o zk0{_>h_CWUpWrGix`1RiI6L^)T914i^w)RZi5YU=ZXy1T%xf?!Xl_Ueao;yB1%WJgbsc?j;yWhX(xvML%S?Bwr4bqr8}45aOA^LkIkp``RfEp+ zb*7p3N!jyw+4QEiEvcJ@)geI{oSXKVL<#FAs$314sI54Z<;_y$Myl1Y!LnKDE z0{-!BIKz3_uR4YJqXfV5#$;Zh?L8I|Q~W7>5aSzdaX7dVSP)|Zg09i92u(WfPE3s2 zu+}fu|9)2Z^PQu$n7c>E#{_imqr~6xNZmev%5N*+t=b$@1s=uW0V#nfPfAJ(8E&tb zR+DTvV{Cg{61`{6UL|PxK=2jwXb3^fpy5fE!S`@Zw!?A0ayj}D+4|Z~jblOk24$n7 z1J$oXdih^O&W>intZ0{S2}VY9JA$76nX>iG)~)ik3v68Kb{`Vk zO()>IcFyvw&zeZCzAQuO8|q^?KPZVLJCsO@FRIgRX9f(sn2fI`@_kagarbuV%p}63 zxqy=yN&Cgy2TqU|27E}ko3P)1@y@|N%vAL;J0@xAPvC^d`nZ~!PMfT2--|}^al7U* z%Xbft`~Dw&w;nEb<(ySs?@Ie+2?q=NG|j z#;vn|PYZM#Kfa81`HzDI)H|Tt=DEMOGlfNCO-jK>>$k8r04*j!3jLvOgCwq9VqEO%l2=rnxQyukM^y14Sj&)^)$?3xA~14Oo+YH0e-p=# zm2n_y`#~Etp80igrO*d?KL}J@bC)l+?99?GBG<;TU#D5C>c}apJa-Ax++$5UYk2;5 zg(d_#cchjE^uJz%5ddGlO*Od0En8@msN_~#b5m2+{a>TCrr!;>L*s6IF2#_YZ!s6e zPH^Z7H4XZGawcQ{Eyu9^uJ+gsp-}!z8S8m?wYs*WZRlwQ$ zZ64Dg8*QMvcm z$Rmxabrj_JL{&qe-Hp)A8=GcfULqfKz;|i?5P9Rf%v&Lc*SQqoOC0y3ltof<|EbUe zZV;jS!Sop0D-(<7i^Eyrb?K_hd+fsUujCokSh)diQbmcHiHQciTUEQPwtB66718(odrry`tVzf3a!inn zkCnA?eijId7I-#QQTS-_teZU{mv{1iM7A=Oj6ji^MW+zi?Rx{cLf;tF$Y^h6`TJ+B*P!>0hp$wutQ^jz9 z-S5hf2wHB^k zuKGy020`;Z2-d=Z?xgIB92bDmN2($Yu~C1iKi-z*{a}qpB;mylmiFSjP8dxGN*wjk zPsJnOyi;MD?DWI%(FNa|o%zkj!l6U8Ya{m=QYTZzgBqW9oNzU4K8ntK0Est-(b0v9h7Pv%tx{yF7fZ z9B0n8ePGrfK_QbKyn}=brDpl|&-fFMAp53BN@9@_W-nTx{S!-LihJ2xMXqX@HLZue zD#I|{6FiV>i&vi9h=7o@EkLEnsNNHOE$s8^RcMRffqS0hodb~RTZYKYojmEC7meHU z=sKD*rEj`|_zu*SeYrDU9Mw>e`8XLxlS7IpL{Wm70@xH(d~Y>Jy7z*O*a{m(XrY zmM|p-dl>A;?2E2HK4?sT_0r2F6qq)3mUAw3Vm1^7AiGfAo~f+oaoS1vP)R-(7Q&{s z-N4WQd9tAH8c<;N-Xv*{GIBNy^hb;t2}*jitV=2TxV{4}k)?-G;uORuvAeg;d4vd_ z+GS>~!BsDjWH~8@@mnVG=2mTsnk%(*+Xg~N3!2q`tZePs6G{0ouRU5glcoJr&Uf41 z^lH>!O6`lNmF}fQO=@O9cZYJFwqeo8~MogNKqxSv1zkguYu3hh*_kPZO&ga}pn}1S3e6+BV#yj5Go4!Sa zjPfJOO6v#du_x?JXz#VFcWJhIutoi^9~IGYQMg1a!>P67^OG?*8M(N25Wa?&Q!;Gsj2ZWNrz&pkfP#WhEo(g~_O}OX##3*le)-Hs zY7juY8?rgZ!wlG+dIq~fSPWt7WF$6nR2VR%Wj0sUXYjIbvJ~I(T(%YtaH?RLCUwx& zmOIiiN5|QAvSeQ`lB4f9R%1^k(^E5W2t?#kh$*Itj_%(pcxTD^gOe4BWB*)~1KEh> zlvKZz?WkSQ(7}}+GJvjw_#aMUaORAE9^ZCiSPxiS?fFw}0w@v5QtKp=Tm_;w<*xph zVk&s&2rN$SGPJCad&u_#^2+UnO8;y09YMDV({W6=%Q}L=mu~8OOm3$yZkI+_g=vcF zfgLd@bZ3T}npag^G#(4z9gHH*y3I1@^`$0B1=WeBo0R#36iw31p z!Md6?OtyU{Z#agfr~)o$M0-< z5_GFs_4q%XqGZy941XDb4(_29dYJBv-`BSSfyfN3H-h+TjuEy zuo(1#?Hrjnpvdm+0p?4=%Jmt3RQgc%y%}aDiShqOEy`wa+`iHQp(@4Qg))XCqwlvs zvx!XASKAah z7n=fPB`^`pSXMGhO!d!jGPyF1FMkM|WcR)j7U>I|j<+;2AakT^dYHi@qOQQk^X<0j ze%$lPLm4&U9mV(I-xoO53U207Je{@Mz9F++vRq0~hnG9oSy#uf4dPW|Ic6r1O3R;_ zg>~)m_@>iOCy$u`5t_wtrVcw)WvYn$6Y8K{cFS-*NYUjdm7C zaaZimFk181bj(rovH1f9yM{MA8D>El2{BpuGkSll{rTJHZY6J`pP=T55=ldLUopBd zBF9*&Lwh=Z$Vtrd8K0{HU;)FE6YfECVhOxzbSVq>MwWL5kWJ2m2z8U>v9-LT4Wp3_ zRF_3GKpkBmZ&@;f!e&uh`pevM#{ES8WdWrs?wmy;u>a#C?I8D^(wwzLyJ z2g9}oj8PUzYlwRqRae~f(Y+&+t#z`;HaNnx#l8-j6xsG|>QABflpK|Ja6a2*Sok{f zhv@)?XP$?)*C+f|EP)oFv1F-vxt4Q;CwTYoCToxXF4_TGT{C;Fuae3xK^U#^pGu{* zdH};Sf6psvCC!dDq;WvLr;F+zV+Z9)$xb6yma9@kxXh1X5;|FF`b%zU9HQB5AIbrj_@OT?tua{}UK3T_$^r>q4VDJB0fDw4CM z_v0H)%zrwJ|gd6-80D<|>D1O)U)Yy5t^DV^BdU4`gb5o?*rv;Ld( zvH+(uWI~FJeP^htHlG<1YR8$*ss4(LR&@2B-h%b<>`JMJYndIJfOZ2BF*89ajItRU zg6SK2&?(&b#wIqRv4;?c|UPfPW6CkrDtk}#ksu~WZPT9!X~3!OB}V@_j~S~ zGk%I7;`yZur=Q>dQ@kgpl%8d{xfP#QsCe?Q+A7ah`}ZRa3_*l?UPS{EPZ~6`$~YTY zG^INy4OLBLcKklp{)X-Xopy^RH!u^D0(n58)1BwdXRm(bYODauHB+FCJm%Q6AK-;S zr_p`Kst}5$utFL{HCUF^kBkMKhTg}C`HG~&HFsJ*Ru42FbFHkizZ32XI|Bl{OhhwA zP-Xgjv9WfhjvF28ETt@GTt)W4>^37C9*ix%;n_*Be&yNNU1cX||LW3a>(3~uu;hTy zVhKo-_XDLPrs6k)%I(x?K&(dFwn~e=*0L=QI2_MpRR>nsB1SY~jgPl$?VKP$0>D`b z@8Yt=_j!4Mo%#vfF_caE&04I@al2qw0QrA-)z5maw_7TUUCnI!nl!xz0)}vYNzogt zM80CRk=+Y^OMuB|C{1`Oaa=-Dh76JAqi60Imn-?CQ)Uvf_M5WK2m{-nl$k z*}xn=6S8)S)zho=q}~IP56u{s;Ckf@MQR?)pGVezgvIYon6-Om6&_z`0Lg39iF)bQ zy&Vh#!@mmwd0BwDGJSsbYN9CDgBLtfet3|J;QDOL5avJep%)hL-WhtQCunu6n)&Ho0vloOREiL{~{ZnARyB-nRdp z&lF?ZM+nrAy@=;Fd^~)((JWfXPV}rsf`C7`WV2T5u?C;BpO4;08=i8z9K}ezW<_4@ zczGV#(nW)N7ECsp58f!2d9f2u8;ZI89m08)6>~24ChnOTGP{6?CobF?%#9tG@uN;T$v@QQ@**P z-He#J%S0dd#~u)@k16#hGn-^`=2Z_KuDizr{ik%}vaffg=2T8))nhHQ+viy{0XRi% zYzW)z^H7~hO-~W*$4kfe?pOJ;guC}-ed1Ot{RD5`U>8v_NiyQl*_Aztr& zc$q!_GW@1C))x;5XdKmp$N2Lw1YMm>va6waI`N8E;=eRKHCV;JNp89k#E`g&ch>8L zpZU0l>R|nfMm1ijs@CKr?B3g%4m^VubWLp*9&!j~k5tB{SAw%la7jSj0xWyU_LlBA zyWftW_c|KUCrD>(s^n>Q!tZd{HpKRIChClq@dn3!<#9_%gUU)hF22ym2!@_t(HZ)zsXXqB4c{zvy@#`LLm&Jzdrr zvuHVlfU5i0H~CkpKjJeoFk^1GV4;+o32OI@%6LOdRj%lDr~g^n@(gQ|7v() zDd~^=pmNt&j}3l%yB7CX5GLCb;^T{ESRyk=B2+|Nc_G9}(ppDmKh#{V$Ky})sXj`f zF_k(qpZOkt+`O6QuZliN|FkK5wq4rcoX@PEp|F*psE)1aT8nV|Wyxi|>7BOY1|#z- zjMx~Z8oQzqqrjaz%5Pd$mp+8%D~r#xLvQ|goDlBlvA#Xj`QD8mJ6`seT#gDTJ22su ze<|?v*oXdk}l7U*!Xtk>p8c>K+)3Wr-O%TZr5@NywRhf3H@MZ za_E@_Ys^a~3pyLEo>N;dR8qsYC}E$eZqH#fK`g*=FTEA%cwQ8&NMN}!*Q}=Wv1QsJ zy0Fg&jFmq!7Ae<)6?jO#{8X;c$ZlFQx3U}_gc?L0QR4Q<7Z_yaT23$ioR>hnh(@jaCN6Jo2xv zG;?LE6MlV+ccecgpj+WO<)=Qi(Kl7sqrU|b?`$`oIyz@47L>^!MtpRGfkHpGG&kQf zCC7}pmcuxrYf7A^6Vf`=!Q~8!HhOmd+(*hDuZc^LG~)Sa)1)0Oe4A%8W5a*cRET-s zBV6$|M7Gtf0Jp+%kqQcpt^APhK3iq8+s_=k?q@fs?J+JPgH#o$wQa~#NTDW)^3hB9 zx5Dlt9U%5@=uFf;fTm`=!z{y$jqCsFsL_9TdQRINvBg(uaH>9!2^ti&NSBpd%V~_y%7@vY!>xqZ;262R7Mp8!K1qRRR-1;@jbc22+7UU zYh)&vTdUl&9CDpGF}hl_wR$ECMG-_+>S<5g3!+!;qzT+K(!G!14!N*5*n{IN#F|5Y zHa_<99X1uh72;<41gHm82Fhgrj{H)n3wa&#i}{|`5AXfw->=g3Fc#yv4i+TUZ2QL| zRPRM~8I{w=5$wn^~M% z(`p{4vgHO?_?l{ZN}GDiXs>Qvn?Y`x7-5zNg`yWAJG1N6`;UMc2)eTuJW!n3H?KX* zd&O2*FtcMfBf!8-#Yr)Dwib{#PKlR3bj5fa)eqi!skE&Tb8F>P4ERkfN`y`gz)$A! z0kafv=x>|<$Ipm$59o@Yuj!@U#GDSDvBmz4p)U1peX*-5&9ocV6WV8r1)Xuhex*SBS zS@l=qXfb!^e95n-x2MG_SWwU{(f}>)@rT`(e03O)!s8+PX$H=!nH{r=&(S&?0EIoX zp`U&uSmhciojM`$a_twvl0+9CvDMbj0Q4`=n5+@zPm|pDX|bPbEF|wDbg0X??U$oe z7U=FR1Y-r!UhYMhKv&A6yscc5O_!6=AFy&wvBbPOa87zI2@ zul5F<7Gpo4LwjNL2CMxjgOBk<_t|4ms8jc)prEMp0i_c3s_aF6@hJcP7rtgSw4=oE z#U1qb9ABGFOVE&CevQGEeEeF|g0oZCcmQJi9l0*gLD|_Z($95Ti?GUJ?;4ldyT>d5 zWK7kJDP+YM_EgZq#*YhoL)pvkGentX`_2jycIRNhC?;HC5hPy!Uk$`5od5Z^qxM*% zC|>fQxEXY#e-FGzvG>!BTUDe3AMBZz{I9HL#0)ySQtQXU_CBJ}Mvg_9*gC3KIhA0W z&ANNsvrH#G{lkTyAbPJOvvaMdD51TxJYzNLywXe=)1Q@E20@`!jX@MkigIq2zE!XP z^6dQZI*74{K7$CoFxBrlndipio3!Fxb|hoFnnlpPZ!{4KQFGs2G7!kfIgns2TjRC5 zJzXdSBBB@7>*>bty4OFN7!0s4GyK8dCTM_8$M9V&z)1>d)J?>zKh*B0IEtBYVP-NObHpRkNsaN#?UNk#9Kyfvd!de+; zU2hvFtJ;5kiP&x=6~}vnZUPhnn2KP;M*XikO{c8fR=v&-^)iMs^V6jYb$)93zVcIU z;D?D8JWknZucKIsua3ZJ;^F*(7aBw{gM1Z3%`Aj$f9#n1$jpVo!HWF4xJ(ZC)?Zay9u<5?3;4tL9-1PcH93?}C>* zxAG_on`NEmnm0y17}Z1{{PnKSJ(a7@0q>vEFXs)fC6KP7O_(rwC+H8y17&;%{*xk~ zEna91!6t!~jz9H`h}oA8hFYE|ieV2HxFn1pv$_vI4jov~>Cb9hd&ix;nK0aB@vXSz zk{KSO=1uEs!67ZZxM{i5YK=$+nP=0m(D-sTijx~Dh$e(ZxriyQ>RfCFWNG{<8=`8; z;u;`*{HR_A|CnZ7se5Si_%h_+oc4Lz$KS0f5+5_3%7)0b`^2k}1Q<<`4cKY*7#e5T zX8!IyaFj#l|h~Ykn!iXOL0T9?piD!$a1_9Sxvw$@bes^nTsGowjeIK}jA~q$ok$S8PE5vH)<{)d5qglI8ge zy8-bR7_OgZt52WTr}Z9iKmDH2@aFo-NdPsLbMZraBL6{K;JBE8kV$y~c2|WzwaQBO zCBcehl?Hr;EmAk2)-EjmC;loU60BKp6;M^gyr(DUhz(j(K8NnOE-t#I2;n=i`0N-l zx8LwCEcBVvf4tZlVngsXUv78&oVjK2DYr{na8)t;(vAF~d?A9M(1$K8x5$^RsPMi? zr}6QdkgMPMTJ4rgnRBqJ*O)sZQIJ&(m*cxjs<$?>@fNFfM345q&3SbP{f^Q2eon-p zh^(X2*{~HlQK6;V%vwcbZorxoQRJfK@J3nX^C~56>{pMn=XEo%gRNT2k**SXr|Ac2 zJ25ZIN?@fU5)+pF|9>Lp-()F$=`dRKE<>|E_6q<&^nkn~folJmM(IF3 zQH$07_N40n-?ag(*bB9e)G}~4$ILLBf}~|!7oPX2DZTGgZ2B4~klH)0y}nHz zF^TZ)+W8Rr_D)^VD)K)(2pPpkdr_}jfc=8Pi(622Ueu_@%W%EiInp!yo7zYN1^ed} zU9ov|#$7su;`pqknA(z7kCXLj-jXGv?TN{XBuZ|zFkD?yEsMJzX)^*Je0QEu6J)h{ zN9k=BfA^Pxj#XUIZ?%-EJ(q(H_X#1G)C2AUvfHpe{YbqQM!ht*A!QWm{acXXR%x;i zPqQS+H`t@JNfzxD0LyGZo%YMXGxD48kFVC@c$fXc8{J}AoWb_KLMR5S(-#zp8D73V z6pm1|v;$4Af4X@SL+AthBjbSHqi1{G@5h{=-UFNrA8M)BE;ezZ$+Jc;uFMZbbwqJW zR(=jnImY$%)AzNHhvy%-42pj1?Z>1Tu1GfGpJdyNXI6=({H##DrjJ-v5-X@HCU{Xd z313-CIm*qsKh&Jq=#oLd+d*M7Cu}3`UJItN&igW`A7$=VMQkLO>9I{E%qkOwbU7YJ zE4Keyg{Y$xKYoakB#`9|rA7TYNmzgb_2azf{40wPdXMlo&4H<4Hft8~QHfjVxW5Rt zcWl~DM*3U%7Wg$`jPU5F=k+~!yD>I=!`R&SU3Oo~N)Bsn_1$uXBiD+=dMq&O-uX(y zv#It)tdhWy$RrfXY*Q&lAIQ28RQh}M&4=V_5xD&s!yR-H)(Fu+!=4qGm_rP^* z*bfYY!P`xc$T3ba0$;P~#_@1|B);m@PYS03+>eH2W6hrC zUnC{r>TV;&v)E_q5o9Cm*T$pbMT&pB%(-Pqg#giAX4;o(BOrqLVWShh{Z^tcfw z_MU;A;WHbLs#)ot1G;}2GXYt+Si7Q~lO2dpF*wC{f_C69tz1e4zpC0SHNKq(ZN`Y z6RMwm+h4f6L=!<_!oig|{`$7Oe9_P-US+x64tBn2=H=?}4vir8M8H>T>*77LdvP3X z%@L@Bj%f!cY7fO_Er+)RW>J@W$XXynggo9r(fmB*XgXd1a91BjMqeM0XTMGD0@iUm zk)~92%fd`d=b5G&%pZkU5H3a-3jBxXc3TI{eX7I8HGFm(J1#P*xHj6GuuyLD@BYeq6?tJV>7)H8(;Y3} z8xIS$E&ovlX&+g2*8U=VDrI)`t>ZFYsLc+RVB&j$X6e=!;(2t$~21O0DP z;rlBEmX)SU^ScznKS}jqOe9}y3?u)g7y5|3%x4vxD|>C{6>g}iP#Bfz(KDyPMs8oW zobm+Taa=#@6rSIEUxG;Y97L<)Y@&S6#D60K?m)lG8?TIJJj>&8-Dan|H@J4sxURfMNXT`wZffhEbqyStY5v~X z=;wfK4@{O_&P!qT{B|*HBiV)d!H3NEuz=SElLrR}{Hnk1N$hE9 z_zJsl;pdE*sZwX&W;q zw&vRJcVq*Ug!(zLeQ+eD1e^}ODa)HZ;mcEqwUM-{Z5-?GrDck z^E_0dlc8_-k;rr;phL^{yD$sQz^XCOH1tX#giYd0zF}<7FjZ-5K5Ydj!tQ4H^vLjS59`x=6$+1i+_%E zbk`p8*TU5OY?c=)%C{1xi(b~kNyVzW4;DpWo_o#HkDEnH(@PfW_%DKu?)&(Qie;Dd zGqMi$vYw0PG(bFTG0aMH&5MhY{DYfnQw7b`9VSh zOXs2v+Ee64LsaHcD#Vq{qt}@8iWx7hmjX9T)X9F^T`M*TJN**75Q|qr0xFUf-1Qzm z1o>$gon17Ex?f&JtiBSJnX}(wcW-#zUD}TxOmR6f@ZSE>D9m)cAxrB~aYqDhs^gp5 zy7;C2WOr>=K8__t$28qVr#=Zy!jw4>>DXqH9Unm=3Y5*s@vqykAVBc={K zWZOs#snR2oiYiPPLv|ip2O53Z)baBG^x9CjG3m?emogFZF~&=!=T*~6)A>nq&yJjV zb899vm48re#LRBW=yJw1-o$<@dJ;980hZIlpnHscdOtP_8NlM$gZ+;O0Z-pt)4W+z zUGm7+2~-Di&Y$M*-Y=@=I>;m8`!VM|HmlXR(lQ0n!|?T?wy`ckPP=MibiAXJNhROu z%L;8UxKwRXkh{+dlm} z<8u=jEbvMi|2<7KUnrkE6N&kV=uyhig(aRNVNo4YY+vlYBtu~3H<*uHH+`rAbIq|- z=r1bbM=!^7%S-Gw2sQ^~q0vn<0^0$p&MsZWswKw4-}^S*imey5B-Qs6?KMz@b6dtt zeed0l-9`RRShxxwTezbxQ1Cz4821 z)-qyFH(9bqr4)^E@JzNCKsiD7G860{#Q;9qcq4nZnS*U!6- z2`lG>K-({$8L9k?yYs8P9UAilDsSLDTyO7^s@z7#jNcjU<*gs|WUusT3N^B4!X>$y zE`h3c?9h5ApvCSonRPFy%@#N=vk!>2UU`^h#QLktwb$_WX6#hF&pDzp?|iron;SR> zr)xEC%~ZFm9Sh9wacRx|WCVkzqNE0DPCBjv%{SWzZe$h2}2xKjPtFH5M6VBl%g zW-Q=4N1_}x6D~Yz8uxtkKc`nW-euV5$y25q;|bL`%EN62|4axpsJXb&4JqmH^@ig~ z%X1Y$^QYofDl6;lUK|+mu&GddNqwk1$aXwHVmMRj7VQq-caMsW`A$rHeJm-e@z9WD z1(fYho?#x#h|OF>Jndx)DW(dvg1*18B}fQLfU{G`N(0TU@BjSkAoOGH-|A)e%LrmqVSmo+(wv`kk+XK=Y9hG$V9KCDU~EH7NT&x6&#|6FE+c?{HGNZ9%nbAQh5 zyJ{rNQVhjC_mGa9EO|Q0qw4ZKroO`4I?n9VT8Sp@i6kJ|#CQsJ;i$20YtgUOrv&Ud zJ?e#3+nt(fpJjQm1C^&P#{Ma_l^N>lL{+HfOIT&^FhxN=jceT%@Ic0G>O_~x#`JNFN`pnAOLHlSJ>%6C9UQUsolwb7UMM-jev%g0GyGp}_&9eb2BCW+{UIBS)+ z7JI}tf|qqr)+VXENKNLEr{}roBxhlBnmW1!`wrz|xXW7xL2SL5!ksL-Z@tubOJ;a> zb!z|-2%;{}&-Dtjv<}2GlkFr%4qtN?iv~~iie%W+!JLmti>bEbr{;$_?`7C z>gwaQ)?bb<*dXT!jkz|#e)_)4#_5mjFZ(ixZ_@N7xIl_jg(DpXsNvB?Jh z|AmW8_Z;b$6P=V%bi-CYxNw4p+acp0c{&{(T=^hS8c%n1?FSR6S)<~;`W^jWVNO(>3a3Cus<@}=#!Qj4C;A4xcfTgLBYLxSIN)lHw1Cm1F8 zgEZ4knyl97{Z`!HjQeC}h>w?We~9Ae#I*KS5SG&!3sy%SdLhH8ncNqkcoByqp^9`} zppiWjX_UqfIgV+!>^cbb8wGLp@Arcivja|#E<1vcO?ynprUcH@X>DQDI?PsS>jgSm zt#La*#5xY6*9Ur#YsaN=ES4@~TOO}%k>YKZLB9|p7tJH8E;FEGJ?q^nfCS0OI2|Jg zEU%T_taSvmx0mNWIpF|04RdOx{!%Zbl1=(qUCoa-=c4E0Q5CMyE(78TDg{dPs!3to ztOI@^5ZVN?p+PiXQA8C<+VP{^P(PWwoS)B0J80W^ySaPb^U?73mX+AXOXmvSmWgxe zRniwdQ%s>-k`;a;yYy~-?jBE{wY;GU+n_tII?_BIk1Meb_eDOfeMJ|hEY8C`UwO5- zymOUWKjuSe)}D=^xi+#rdGs(}cL1|vf?O+4r}LGx#jr;@iG0nH6#9L!b`B#u9=P#y zH7IQT{TcV?4E6??07@arafbR=7PTQ9K~%TV+EW>n{sG6EK1%?b$znpVu$sl9Ns%F} z>qWz@!I$cthRdYjkv6Yn*%;4$ugj3wzSw7Z%e{FfCS7QoVYcT1PtHvVZQkh|?*i(f zH_^O_;Q%?af`l{SS^{zp@OHt($>}s__o`Z%C{1OW?Y&M_onHRZ+d&wfnFeAwLPDKj zHm|m}90bTS+!*~laRJemyUa|}g-X*0`wyHGPHLVVftg8;W7@3>WZR=EWpuku6c8Uh z;Khu{^c3BoE^X_*-gkGoT%{=-)C)-qz{S)_Yvb6lWoto-!pt%ll-DmL;nU|oA}x=TJ^5XM%oVUM+Tz1Gff-&%;&cy(*rj7aL$ z`LEea7~f>ZAT4IK!>{}wq)moBXTzsmu%jdUhm65+!D52nkzMCH+*2Io-w4B+X{7h1 z+3F_$V7rL)ahKKxYM}i6FuTy|DPI-Fs*+>-$f&@%w%)bn-&xYfW83BCC&LXjby^>= z>rL>DARv}*w$7yR6$~RZ+MePXBC0Ws27_X z?PIN&Qo@CQoUBV?=4WS=W0rFaccSO5^GILYvi_T(qtE)D=(lr+#m9)qUOKA8_uUON zYm6lbbtlA0zpXS@M?|SUb2DZ+<&l@E1pc1>jl>RT{q*5ENArAD)Tsuor{>}S{nx1~ z#T#dTi=nj(V5Hm&n%Qi{LY&x?1vskpd;AY6Zj{u2w5!7XsgZ>>H%i}ct<3mTU(|Fv zZ{GiTdg-%f20|2St4U2Qyx?^EmDqa-7g4XItOE9qZdW_G5gzfAz^*_;3$v&^1J-eG zvan87e=^wgqK^L1fJ5lR;jY9cF406f^~G=_r9J+Th)aj)yPwk4e|U0j9l7f_AqhiJ_fL`}8O*#3 zf^>ve-`y4@?w2;CuScsbNZ)wYHZp^W=@&ApR?-vmRbCJAxq3uUTblZ&Db{IlzBPYv z&^_iIjSjk%^s>Bg|3j-Eo!g6J+6$cZf9CscV!1!R*Nf;+Z*n)jOm-oJih%l1we?gY zz39YJ=%)lhyYP%gTS^{3g7(OGEVfrVR3}}B&2uZ!TlX+|9YF%&Cb;l^O+Fjy?Teh4 zq67o>Cn2ndLCX`}adky!A6&itbhmd-q`1v9NjT7r(asJ3#y<>ap2*+Ao3on{8YOyu z&~Id8U|L;MNcb;CbEHSt{jkCxLgjxYax*6RVkjEX?uH}4dX)m{|IWX29vvT*bC!mK z_`YY60iNx4koMhg8Lss)NkikeN1ro#h-*TIlZFnyd+Vt^`QY3sKBATVEIj`$<_3|z zRqI^HCh^5t62Nj+T8<_wtMI9C#oAmRJ@BQ$KCHY|oo-{o(4d%*AtE>PJxhD!V214H zuLsG02*a`RtX6n&X^oi33$tUIAp7FReP@VUFKPE93cgrC*VPBb5p*s^L5v-^SZp*|k+tAj-f}XD={b zV@qFG46*c-DgE8hj1P>Ex>$5;$re zsl8i|C0&+>pqHPIFrN7BrB$4L2GhM2Ol=sU7l>kwHjk4>7|us25Ho8&-zaCc4t7`A z44lwn_lt{*QHFo`S;^oo<}?w4CL^~_kDHizR(>U~#Kl&r)<)s{cX5@nlqKbHzhcA| zXMe-*uG}qkiL!;tI=#H7|Y!(^Fjg(5| z8%!RbiyG^yz8FO`lR0}o$=^iSy&fWp`yq6Myv2zIXk?7xfxi=4phX>h8zWyiwTUnZ z!$o|$*_pR%xoV%)?&DE0LDhHX^FnQnU`9Gn9nI*r3pnM}XEl3%R7I4E?drC!eAd!= z+2FKcwQejC7)kwP_XC>Mt>S8JSj0KThg_v_c$(4lOZdopL+YI!!!)MNyfyA`Z}6SQ zTt@hkG&XC^S%AC>2whc_7(l7k7E>JmlEJ#fA$Q4odSLv6Qe0fdT;Zs0E#6N&hM0#g zEeZ>7)05;8dt){ny~^L?V&A0&i;aA)`C5kcr)l7^_8RP_$`(j0ft@xXBDbb)%ZoztDZH((VG}nXC9EA)O`vr7 z5W@lQGy6>zo8<(BRWr_vsm!QH|4!j_{l4fm4I*FpHm06}wu?qW+dt`qr@?RTCvfqCjwNdgpVQ2@4cb#HsHZ;OqqcssX z3by-|D8-i6Cgn$LgyYBoX)C7MB`1AQwSQqwKo3A)jG|WxIvbqs_dts4A{X3|!B3P6 z!H|KeE(Zq1371u3|7n2%ofu{Za-#EPIap=gUJbOcrStc|OE)XeLdwLttB!KxmQ~l- z0S;hG{}ngO{Jefv;4C{xZ$TiTP$bLlu<5z@_t2Ln%~#Fv`<-GS z>m#BeyYk&FN~04Zzw@95`2F>05rA7i5nd zfh0s%@ilUXzq!(BMJ3EtZ#L=&d3|@IIs{S6Jbxf8JL9-%C4&=1Wj&A3=k$z{m$&a} zDO7lCQe>}IWHnTwWF=uu>*#N$G28a>@?Qu^`Ja2udJpdWpcFVx0V9?^ZO5i3lRypl`3@uiXl?QpA9I?{Lp-axB-ZN=mnvqAy5x>9o(MCOY+axntyrsu(eNy)G zDJRN9oPRQ8&c%YZWp6ILur8(8Mw4j~X@fUu;Ccfcn&^VHc#Stw!0z_lHQfy_pihwP z-=S_a@b$4ZKI{{sG?3gzzig;uS6vqPG`4l@ElQ+_ZQ=)qx7`4Rlk89mt#zQ+*V=r%g(EFR;!PzHY+F^Rk|b zU{?H8RioMTdhy?@rE=2E2DO0XThLzVHFsxSanSiHJz&WpI?;=WFb9e=W8g(!s0WtQ98k9novcu(3-qulYY0*$QpF@7je*!7tS zMMIQVO=jNbB#8lyk){9e;(d^*zI@el4*n9@AIJei+v?q*Pw~Ut_VOR^D;wc=9SkB& zUS~8We((CMA1dzCZL)Zj7vSG`CcWEq!ogCHby&rKv^&i~VGBora(Gy?ZY`|8d!sV5 zPkG_@4unvLRh@CEqS4D>3J1xFFenf=&OYNb(`<)UX6+~c`!5c^L z*atYo$}_COdUnXQU|i9>VZX0=|LyC1zB~)i6;H3y8-MUPOjPlID>lT+_kdzH`{d`jjKMbB^+dB{;}yV4x=`v zAb~0-sopUBolVpa`Kz*%ftkisKES*H>koai)lR*ionD4&g-kk`>^6>WChFo|B!`OB zfv*bf1ePmJI5oHi8MNa9V?Wfd-`IhaT28(Me@-s?*Z=xGlCSdc*dU+J>t2&cOGjZ* zdUidHCJ&?Zd$2D&VP8+*w=3`6yXcB>%UGuLZUKm^s=E@qzzL=p0DQL z4Rv?J)TitBnBIyQ@Eee+jVh8DrOW@BH9&P#2X7?4iU}evuHGBxk-wqy8Of1~E-u~B zfGuL}=jm70m{R#4RNpT~#t!ElUq<^s_3Y4{mN5pZBvm>zeFFm%hCrdGWdSs24DBq& zO@G2w-aF^ZLW8GV_fi~W4w~$)2v*vazjDt6rA>B}Y$QSkbdAX@v)3K=w@T&3L)#eE zT@@_xG`=l9Y4HB;Uw{K8C;3kXR1371Svx@k2+yDUhz2QIG$=0eeQz8u)W7W_D?KE5 zz`WOOo#u)evh6pQfGE>S*BZA#OPw558Ar0)R0t#wj1sMZo%HlJ@Us-_NS%1>Okhn1 z7C>;a&;_U2Ta9A}gNB;$S*qNy5zfhhx22NsoW1ea1Ga{@TJ>t*Ku&C^bJx z-f8pGj>|4Nr@I+q-uv{Eu840p<&j2uRF-7L5%ui@tO`cDCvM)ewrg&3MTynP$FjpH z!dZQ7Bxtp`n2C_8z~*ade=&99wKOhZTP-826M4St>yw9VwYyAol636d;s~Ug-lM1a zA>&juU)90s0&%QWVrtu>T4IdG?#i~F?POe&0p{3m0Yp1Afo*J+bc~Yv{k_6T%TeZ8 zy~xF^t2L3%2YWc?&gLoK&t4V|A{2>uYQ1JxES~{ALiF9!d@H(x6RHn3pKFxf70!!} zmWw9X*=<@L`?N3(6<^W$dCJ$<`9 zZC-QNu4aHvgNZk8dcRG4z1GQdA#=ahXi26DDIB8BA6Tz+T+-ErD@Z6V@SN-6QEN^# z=Lk_Mbg;9ds?N+jmx}Csvbg6C`r7!Dz4x$LqJprE1r%MESlR6`2vFw;Vo;kc%$7oGb^m~sjIw15xt0~8qZb?cTSjs zSU1=fT07_GrnPJ5?CaG0$?a?3eo#hl0RlvYe`omW7P$V#nJ{e>HYWEs%CXG6&6fHWLZ>Ig49w;fntHLL zoUel+LmQBG2 zDbEI!#%QYilupb2S&z9wZ`I5=R)UMcCNC6gmFnzS&5mLb=P;S$kMt&q`5N@wqGgu-8y&i<@=3b+3K?c6ARDr%qwt<6x#^L5&yU#+~hgt zVMF``WU_JSnbM2uU8w-U)4h|`Fc~$@+zmT3wb;IR@G>Nf{YLEMCn*^|G6QGQcGtVX z1nTw9D&;IJn9l=`-~5OPt(G`QyXw72!;0qoT@`>8vD=AEY)cmy$@Qpzx?a1ytOR<( zxpnNJZbg~CqnMW_fU0Xe9OnHX(FC0bGEkCGeOh9mQBq`pM zwF93Z%lj`UC&O>c4!BV#$&5QJcUZtQ_D*Ce_?h{26e=s*-nqOy^uT{`la)9M^{1WV zck?0^pMMp9zuesF7=*q89-SVCd4~ZIIp3jZ62`3|-GO@cvui4ZF=~zY7*Npe+$OLI z7ZTXSbz{Cgdb0&6U+s%Ju|xbnvifAjSLbu0JUvD=X?nQE=cgkUx$89$(`Qw6+{j)- zsr=FM4rn;lQvt6p8k&+D3oY5f3nt;~`m=(39g7~F{7z0hwn88wJeE@|(iqsnVk1>+ zqD5Cpcd5f6v^qB*A8Pyf2TV1Ah<97;8#lbpINJ2hL*$zz7Xy)9D%t-iIuCy~-!_VCwN&k@y=zsi+AF9Iql(tvw6@gVGq&2BR*9-TQ+w~d zOOVbLD-lr2{Q#*dFC|)& zD)hVFmCX{$tP9Dr^%xF1k;kzz_f?5~l&0TeAW_+ua$f`889gGYRJ3U~k+iaF?z6+C z(K;rIB?eU>Llk0gny$X=Buqe& zm;8AjXt3ZY%o5PYeit0}-!)N(TpRX$h5W4HAw7hm=8uB&#VCC>{A=05U!b{|(< zvK3KZvzNmJm<{sY)l{E5n${v-3PYbr1xSYgNkPd|u53ZJF@2Dxns%5_<3Ip;Nk_fu zYF}7yLi2>ahx8pRyVj59PVf?as0b!r(@<-n=C!nY@oGyPE%g|S3qkJrHZ}a(5DFNO zH=Cmsp9C3qqi!z}?U>c(O5;fXBar>(!pZZEkPSP1FG+l~chcD}!nhU%iTS71NvPpc zSKM~bI)$FVnivGhhfIh^)-wDZ*5|Hjn*W?%-FTJnQp~5~+^_)C=KYU={67N1xen3I z;-odxN<)%gM2X4-K%j!MBbvq%05NyL*BURP-}$Fb?h0^zwvFjht&wFn_=7FgQY4NU zkOTb~yx#GO@~`*wzh|_X~Z}B(^8Uc6ZlQD#sb|uzZ5xf z!ts50k$m&`k*p0fD)`XAKP0pAzvpt4x+ex0QYBVuXYWlO!#H(CZ>UbYYS}F@@@fwo zha3n<%D*rcu}O%1rABBYN?a;=v@i(IZQYvPUGL8Ok6 z-?2wlO^yDgd2sG$Nud;_KZd)VdKZHHQOiARkMT2TNbD5M)8Fk$^UROr3^MmDLZC#$ zG95>@)9u^ErY(h(!(*wKKH+@48GHyufYiMmiY@McPPm_f zQtcG^QizU;7F=XIdlzdP=`ZO0*pLJ2H*#J>aoBH3+jt|D*7MrlfO|z~7XQyaVw#2W z>@Z}AmdBpE3j#ZzDEyMgR}^w~c8&Z;A6jmfJ}O(`;b+Tx&t!B;Ob;rD5G@7k9_d(m zBGUj-(W0>$r15NM?Q>+n!&}`yr|s1VT++ejBi{0?P7Cgj4ag3Zujac>BnjVC{zWmj z>gPNUacL#oUu)n(i*v3SNh^?>Hly`?-xwI_zu;2DYue~6g;LU%8y zl+{VWUKzY&E%amDnqdPE*~5ABI3=^NhSLaJE`Hm(H9 z9hKsZA#MiJak?%H!w{tVHNeus#oMm(Y2D44L!!iTAt>e!x64t zDHEID!<7}lbjR~HLaYZdZEXb>G?6G- zPu;w`L?LbzU-VsCNTL3&whF6kwLY|b#cO+YNj^UmSY^M$PvukDqJ?WW-YnphYD}u3 z4ODifukY23g$8ft+5~vW-tB^-hzC!?^B-eK8AF);+C~TAQDEbp58Te}j`u{jfm<>a zL?i*(n#BElG_ksuxcH+vR{DiTce4XrA#XI@KW()s7upC{>98sWA7XLc)k%T|l*{8e z@-U@r-4ja2AS!?(Dda8KqKy8n)w`tBsA5Fa|0raC*wPXbu-O6GQVPej{I;FLC`B4?__);l*$%&y*^)BWyBa zzJvM35f8_+shHa%Y3Fy}K8EmcSsBW!*)k#l6?Z}0Tyg3BZiXN(w+M!n#O7KqPAVFl z-y{(ZD1x+!oU)msfaAnf@Lw)v{ffDY9@Qd}uhSp;4Jn}gMUf}>Z=0?vm?p#V3j-ft z!HGo_+H+`48jAq&ZD|jXTbf2M^R6xHbUS{E4<*p&Be+ixOuRR>Pj{^t%l_xz=YrTf zH??IfXF0po2K$x4)A&1!uZSP&Xo+Ym;O!D&k>{<%*_>pQI!@7*KmIHhB(hNd*~5Jp`Mo<-%t^9!hRI{6Hov35mXPny z9N|Rj5DKCc0Cy(TNedcuPF=0nG4-?a{xo?<=)83DanpSjLx;&5k?~(;LxE?SM)|(0 z9E5R*VBxLD11W4BYz_H~kNU@l2GWN#RY4}g62;>`#Xm-?^*7B-bENCnlsx-$dMcV+ z?X3Bccjey@Wk9L>r(TL3V!}>a2QN8J_0vNdvE6%VzhghKoYPLf*)uiw{}|fuY5sV} zh3okd#~uSwU8A$me1D%d-){Nrf}MCtF?05(Nb@r07%eAb3E+62tMG6)&hnggq$X=o zNCNB3l%%Z(lylt78fa&1XOgI!D?Gfoq^GJGA3PkkJlogK8r>G)sft@XcqXJjyYwh| zTvB!O=%u5_!;QNHTTRKWJ`+5D8hKhow>3ssszokduKdYzlVxGbahBSQUwa*i>jXf? z0=Tz&*VN34m4~WQBIP%}a(azdkIvpD-PzFqY?Jd6ae@4#5Q@N@ecO5sY;&7C6!Q|P zo}>!a2z?8U43QLzuXT62PT6l;L3L@^h`h`B(}b2)r_GH>su(^rt0{Ms`sU^w-poo_ zt>H5M%r(P9bfI-gvUB?FthbSH;aTdC8m9V)_f(d1lwFi10g=7WlzZV){y3lG9~cHm z7_l6F*@13aN_o-->Sirvd5sbN&&*_2h*Y#Yy`YcUJ3dDVt8>66Ps|L`%a_g1Gsw{C z7Kx}`dH+&|2W~2}fe0ZNW94R%Gr6aODu%WDmZbkMkycTmhCwS}&<6x$$WpDf4n)88{_NnE_1jC0>+XYKpNHo^)(rt;n&&y; z1}w^OE1`=W9hCOw$^Gd2_8&vz2#6K1FeyL^ZNSd_M__+z+PD4)Bv7FY27)b;YVCb} zK#lSR>veC2@3{?Zdx-WZdCg(@Z&dyQ%xxFx-;3+aUYenzs!zxhhB=!gbym^zwJz6N zAd1d`)%PMcTc^QKXghjOJ&U2*Xh&`NG+F`Qo!#-#{()YyWDY(ZCv2S* zryc$eKWY2fLFc!45AA6v@Zr1-xiuy2qJ0Q~&yt?-PJ z#vzB_%5=QrMFp3-*mF-rZvI*CHI!9rSTjdIZPom%^Ub=~9t`kj*bm@YWg;MpR@803!L>^*dHqTVsV}wnmw`h~GFOGp%{!L zCsRgxGsb$Pl%LPBTKmDgV8@RaZ`c}>tc|vX(h&>oPd>~o;zzhpGKZ#f)Y+mqY_$+Bmt>gQiwVe#{-Qn7$w8F{F(L^B< z;hXJCa=#cz8Z63Eko4RO}@FpNXs1w5}N zaV$<_vvU22d=l(nxb30%`J4+d-zxt674i)CJdPF8vnJZw;0As2`~K29Wm4hA2R!cm z1j_6dGTVl#{+nPwkb3D#`AS8^$Ke+Nz(4*fu7=kAeQwib=Cz|=_sAtHzfQ3Z9efqS zXMdfqiXWplyw;9usO%Ke7E1H>e3DDuunknR1!rF*-F|7f4ZNsF#22}+UU)YsciY|%eYQ1Zkv=l#J{%7PqqKdj!ME}v)c6Nc92Q7_myu35)gkOp~u!J zNNhvp{h=z5Qpw%T+Y(Z#M72ZWLh}>2cIu3U*__SKs`DFQjK-_h ztOd!`XTJwa)rMQvAB7Hb+2mFJPJvY0A9mL*e5+DtT?pIUg`dpVr5S5Pq{DYcPw;M< z-fZGk?GomroxehaZFTCIdmRk2<)xul3G0S%wUxxvl7kkGJuRgtyMzNPTet|@Ei@k5W|uQUm_0?}|B__lp>#Kqb2evDwz z_VtIt19~?L|GKF^3fd-RGx15~4jSc)`7f~A157@xHaXx>#?Y%_yUNkZLp-x1M_ZE+ z!@Xhd(2cDQ?biz(`u63;h!}4PuTPX2!zmDo;KK&A<)FFeyWdA!IgZAqU&0?uiK+4J z_trf7>d$ZN^sUHAK>k~Z9J)9r7W3^GCTPyHAy3;^yKMu3V)~uvQ+s{tl#?^-L=VWN zZj9z6151`B78MBg-_a$ya+qR`wcO9hK6O6R%iy$z>U#Lftv|%Z$?pWFJe;7Mcrc_5 z94yuGLLO=-WXHqBo=i-yh!#T0OJNF5^O^q)>0KYVJ-8gSmr?zeO(M@04@Po-EwJhg z=fSIMA07aMh9{9ls;T zCGdAL*kkQL;3E7O$+>>%FEi-R4m|nnW@xq~Jm+uB-DI%X)U*rGr*xp|e!d;@sq@UN z;TNKM?&w}vo0M4y?Z}}?SHuthHt8>)`CJ>`d|3gKwqWNq&-Be$7x2;7GK=~A>#HmK zQld4#tDDoFWrRr2=@q^Ge!A(IYsK_WQOx1mF28!!blHXKc%5+=l@CO7WasIsH_UUv zv#x1#tiM|4ypKW!BtY|IFJTsmPCo4c3~y%5JcbYFja-~IO59hX0hG@85a57fjLVy)U~Eux#Us4 zThO|61(;t*qLt38FvU#;za`v0tRdABG? z3H&Dgnvb-%l9~LR*81T6axB^CcVo>S0-+paE6sdx+&OV{%n8pZ>te$Z!|J&hhy*RK zmv7cy{|oviXXFu!EMd)^Y1q}Jcu788^;R^RFP5A9nSj5Y=;$E=eFC8D)2zT>q%(Wo z0z0<5BP{$7sE$t0S=OfNeY#d(Y2_Jr-kEDHwQ#Yrlkxp`cjdB?1=s5`0^)FD$+7N;jN(ZoN_6&`Hccm#Z;ORt?c;#%przuC!UQA>9L7tAJ37V(|TDXqY2J$2dp)zT!u ztr?LT0R^*fbX5u^Zo@kgShsbmC`6Ae3aa{=FZ&K&XsF#0?$2Ut%vdRuf)%oSMh3Eh zT{i{B!8>{LCN$J!-;?>2_HdYy^ghzfb?R4Tf7?vO*UTa_3WI0zJ5&NFf&IKov#-6q z|82Hy5ok|IqFoyZ&n8zHn|oWgNK8PWh5v!6ahxi$1`c+_h?A&eVNTAO(TvNnb=%yN zEQVO4J~fJkDcRlDd^&9MJ2cNXc#ygctoA{)x0y3Hz~%K-t~)XvXG{IKOn8xVRHQ;2 zP8l$aW@{{V$`NyzF^up)q{-mAMXa-HQJaC}ZLM3ptP&?nLJgc}W|KNBfp?IKAK1 zZ-@7mj|2yPvDT+rsz)Vo!&iks=b(zZ4BMI*V24SdD2=7rvW$A-%=1M3C-v3Qz4pwn zWdwT)TH?w3lL6-0iOd?1#(_z;{)m>1Tk;Uskm;q6>ViWb#5Dy>f=bn`Ucya1(z&Z; z4~H!A{Acmxwg~@h-7jgm-??&`Cv$a7XvXNlM<9J~7*L=JDq0?BE{U1c+&s)Qq)a^8 z4xWcpVttX6;f1q7+QrKfh5`{@hWRg4t%n(o$^9W;x~--u-jt0agYT{iZ!(fL`usx5 z%7D&K5cxqHSnDmGL?uFy+5AS@c^#dry+-6faq<;7L zti8ux*_6^KPCJ5R%gx2JzuVjLSiUn4^wwe~0KlXC>igO<^ZNHu*~-iWEuX2c42Huy zERpPYG#twu1rzz8Wv^kE*`PffcmZdL$~Q*f9J)WjUpF0ZzdLwAiU&rmd=nqYL%}`p zk+d%SA+!6gshW7N+s!KaJ@y~C`7enulQztfr$@g{6pY*RmjlOsZSvCLXng%ZoPWwEBp z3NWS6oTuhl#){Ob=jq1z<@AI)??U@2K0lvQ-Gxd@a8eA@-*egUz)!`Y=c_PI%HHe2^5;J`~?^^@;^ zxyh0dO>m9lpHD}9TIvy;~V-63iyPtde>lZb3 zwzK|!Tw(LG9x!kW{JHjx?hQFJ5o1lsiB88C-h#)oJZ;JAzg)8wy07Pvkb1-ZV2E+j zp(W}hR^of7*!X*?3L#;7@mzb4Q)SB#xm(X8#b+qBZY;!mQ|Xb(qxw6%RvDGylw)Gu zT6t#?$EqY6l&0z5bJnHOPmkLf4X{$I0*+96jRJnr13jjX_TIgQ^AOA`65X{JNHb{tG|6t0ox}N(@mfz{^ZP!VrrgD*u>JQ0)Sc05 zgi_IgZ=2bnYnfPVs%N9A0;P#h;g)MmfsvlD@e8pJ9JaC;q*!gPky^%5YljXmn1g^1*9uBTT{%Jl0 z4rqR)SFq(iKMYoy+ROhS=X_YXj3>&Y92Ri)Fv`sgQ4n~E7|^N#z%1TOHn)xy)%^1^xQ3gxKkwnVo|~+wd;8c1S?wuq?kpSCw7nN$ zP*sC}KbxjS%#BdUN@y?t`wj6I&)xhevIRsq+gLo`;Qa13YilmW@17ww*qy{mI{N{Zw0HqunyPI}B4lf%3u^j(P|BSN^KseF8EQi{Hhke_C8YSF z=NsTt>`U$c8GW+U+OEWG=7{*&w~HK0uO*HlxTwk2L}Q^MJVP6lvfGj`lb_9X*~%XL zn?M%7jp5s6IB-g6$_egQzrRzFOF_a)?vwf-f%STyt?GMI779`0W;{#t&1f{`{!)dw zj@G|5s=9SN$-p{RaINX^Np)(9l3d>$NV;slS&+NQP1QmaYv}D+YGJB@|1$XUEFDuO zEa|^GSyJFsXA{a8t)f`D5tKE=Wp*huU932~nV-<1A(Bazv?k?ZVytM5K*4n2LCl-CLMF7cNbay$O3P|v zzn}08PnSa3a&JjiK?Ui1+pAL={oQw+tGL*g+H&eeKpPQ9<{{rV^619s!UcY{usrHK zswanF zNA#1H2a=Qedp=ozkCeOu^w*E}OQKTqW%nc0&pH=Bl)sg0@X5D9ojYg7ng=tbX};>0 zLi;;9eGi*b-bPR?&98`3@ok@1pbqFMw(LUGuDV+S^+}fAO2@Mh_qCtE7 z376W7gQu<1ij^ZuB~o6#7hN0@&6ylst(P$lGS{+Aompf-QPTQqcUTpWFlhalJ;;h> zom!3A1G(!D7S%Ql#Dw!N-Q>=*3wo{O>zc}M^M{+>rWzak^IB}88fI;?YpD8p!?U)K z%vqZTVe)|$H~ead%e@!`KVEKrHQ^%K-del4`gZN|@@;#UMRet18w-g5&{nc1?`{;r zHdj3Bnqb48J$Js_7OZn1fAgxs6#1}_!(c|cfL_}(zpg_H!S=fN7x6p0>Vvy8TW9$@ zT*v8p4f}6y5zyHD@5FK0W?7UXBMj@gQNzXDH9GAUDs(k<9slrl?(ipNi|WsVi|e7o zjTZ9{(~Q)wZ=E7v#4_oU3Q}$3iKwb&1hIzpjgf^&>g?`^Z7v7@c#uUrKxtn_*w@T0bYx~y<_HnXr@p{ z`}OtX?Ia8$ND+?go_{U=V@MSeuvP7#>k?4pty5lUs4(6OX*8(Zbe56_S1WRSa=$^& zQNBG7OkTPf0KPU!%YZdpaxUBwBdb*gjz;@pcb|)(RA_arkD>&$9Hi>Ds4Y{?r&ey=wAYlVA`n0y`?(#B}+0z-yWjJsV(L=hJMklEZ?0vjM%-; zFgh}dM8kwTWnNaLnL00D-`<8+}+P;v%^|Fmv< z`BnD@ecyVlZ$1ky_%^C$wKD^OT4~D3Cfn4vCdcu)&?~esPW$kZQylMY!Um7*Mt7vX zv)ZOsj~aaH_fcclfv``j>1Y+T=D4orv@MUrb@uxt%f?9CHFi9Y@+q)W{Xass^>%%{=7j3QoA;{R$4;rp`%DIjqAh#ExW7$ybE-`#HeUPQyl_Mgqg2V~YnJ^s zLvg+3UjJ$D@xAs=*>NHI0pdAwp;V#=5OSE>MpHM^pyfx59dQfOd8hcW{Vr^6JOV=NRyog zYg?XO8FGJ={2*RO!LN>K#=vpOZjBvGrGSDQ(^h<8{`qIl#B(z;^3v-|K+`=pofKDH z;DrkdevVV)d|FYIHV_cvy%WMRi;+(bS0taU((7nuirk3V_;p1OI%gyX+*X##K`OOq zrGH18$q)Q)hM^>w4Dg&f*aQkRl(>fxd$DvVgd8oLhfW_1FwADz@~5@?^7+q?`$PU9Xtx;~iDEZ;d26C+ zO_E>=Eimy&vdMyrDPCBhAb$a>ne!?%`C9Pi!_{>tiq_2mfazLH@0@#6+#hq%?kg^oIhg@&~5LKi^G zg?r*Gla=R>8Z@evi^F%738T}Gj|uaq5m(TVP5ksCcUH0(w6}LN3}zxTmYSGu2D`RT z*NL>2`sWXc4^p}I{*h?I2`6|8%0IgWQ|t|kVROcB=uOyc?h?h)qEslf&nmm=aY_m$ zje_Ctq8K*Nc*ry&;>Kf1b}hgcW)f5H1;2s@8_X@KIKXL?g&bg~fH1Kv$t@Sh$&uQN zsp_UbXol)q{2Ac3^85u%7$>v!Af>H55d&S;0p2x>5Mv5T;@=lFg95|fa?4F$6{QU z33J0`6b3&&GcjjUQEdy7Lwi^ZNF2R{;3G$o&>{ZOhgBnPU;tX2Yi9rzK&d*_NO-w(7 zP^#w7VrvWl>4!0dX1p9L=BvrbvK$H;QM{p?P7%KfIEPKIFGciUCr5Pz7f*tu!^~%; zv!;kVQjZDt_H!?Xf`=gQLG)YZq(kpx(;RU1Q7MdyhPunwK!rskd(`a1@+azX z&_epqPHKuYq8rw%h;xVOUOJ9)fMJx9O?Z0l~5FV`cQ0maa z;PRMTF4aT!mkR#u`LoTi4`rT4L!`jVMW;AZdQcyAWeZ|qGhFJB9}Zam^6Am?XrM^e zG*3mT;3kB%gVP0a}kkKrGTH72xf=MFVsu?l`!i3U)& z?m{E!<7}#mv=AMVLw&Dqx`R41fAQoDnEw8IY#n0A@U%#dwt)=h)&*{y-L#(OCh!LV zq6CJuaHIW*ca5(#LCxli*hs#2t1MoBU6nSb3P#s>CTo)8ii^-do8$AnrfD)|dOj`` z0{7SmAx4blqkea$af#oxuiuG39ofE=Re~X&EqTRlCfKjX&CGoJ=^KMJ_P?wdS>&Av z__Kr>{8RT5)F(zHTXXpmh}Y`Qm>n~JOhzorP(ws2(?|T~Np<4Kf9a#Ky=)j~-bNn9 z;kwfJb4}~lruVd;Y)em|ttk{JWeZhNy)B6yu@(7b5Hvg9sVpN+jki+EJ_ zmc-?yqpiPhZ5VTi3v{a${NCyN&Vim?UX2~j6ZqX=d74eB+8s_%CE`<8|5PS}stjlF;%RHEU+$+>a*_&Ji%GRSZOc*nX3{458cPg=WC zs$clB-Y*R`K07^)2)~=_Zm}xe zo1CEd;G0)`qOVcJ+ccVO#}j_4E-jKFH&uq~WQz_cY!gO><+2Fhg^>C8nF&@Er9a?i z{lf~G4zgbe-zz&fd$Vqn|0WnWC9AsX=Bw!fuzIk9zm`M|N?$6A7xxvp(4^~vK6e?o zQb#|os(wG8)20T{E{^nw&yU+O3#cke?M|xPk`j(yTwsMrwj5oqV5I$sm~~% zZ888sjvx$MU7#zCfJ_Z7CQr>v)N(5>w?H8RjEK zEHze3OuD{FW9G~<(wg<0W>mP@D#j+dR!V(cY6^R*5yo*(rS;?7-hMAEA7^^=aosZL z{j4IDQvkS6xOr3(=W+Z;w?@@0HHm`QLUlY}T5NDGi3zwALi4JcaZ^Cx?~}4WiiqL+)VT;j{& z&MK`tG;CA(R?yX2v8ds0_cofEC5>UjilSTD92V_09d&&fCL+W&`!4$>t*Kv$$9Qv> zRxmNda-4ljslT)vwH?A3F&Ve`g1X|Z!OMz8GN3V0!M|#nV!v%DqR_%r)#XerwOsGf zqiq+06gf!#G}HT?(rF@GBcd6yf3KJgEb)nSohXRi1}=F1)oWZ-UM=h58%bxZ;EH`( z02DYL8i5siJe~<{mrgtN&E;`lMU90b<=z4ywj11L2U(*XY4qybZ@8PN8Y*VTXes=A zM^C0L(KW8U0jhB!Y|N`9Cw$yy;p`m4;YyLoLFi?SLSxw)f2*)F``R^tNK9-eln=iK zmdEDcH_2OMr@bYPf1^EH9u+<$klllq!-Uav$>o2g>y{Qx6;`NaG#9$fT(*7NYl4>dDn(k+*wu;R`7l$Q=j`{v$9CWOyb~v{F&o=sL)f>7NF$Dwgh7_nK+!?~&~lRJxChMXlJ_7uzq= zM5p;q1(3}xhlW~T z>uGRQs>{Z*P3EDg5hMDxFtRGKg-822@Jx%TNfwa*ZAysbNiZveKNfGN7K#F^4vrWcf^@pz?e^{XXC-@9DX-RH}i<^eufUZ@|(~ zZO%%SyVPNHC8w4F4+&VT(7M( zFSuRGc$(Uw@r6N~nRef?Sy+nG&T1Dl_3OW0#$!zqb>1SU>a`umBjF(F7Ww0)VN{#CNSI-2YQQNe@#_l)~ zK50FQ9N&V~d@mdc8*H)CzPD8u9RYfj-R#d$AH0HkhRK*DZ|@B#W|lF#s7TxW?D%xF z>5C+UvhS0)iK3+tj~%I`3$S>)Q&Vk8KEXz|Wg%7cza-C9p?qlnTY%b_(rTNk4K3hgDI9^g`PyPEh&Y*I_h?iZxOm4Q)-qdc3 zdx`6bQc~P$1LwoEUW-FCG$Kxwf(|1(;=hq`QwE4ycLPHP-q`r3*&raSV_`yQ-0If9 zjBb3~nuF!ep$>N-p?HewLOS@%zMAaKz|EYYAt#Yx!GTl7luZhfAb?PN zDf_ceZO>u4@sxRFNw}Rq*X`0C*BKx$1dKMOAl;^0D(zOosbm>s$~ha(=$|UK0?kep-={S! z{3O5L#hg;U1FjU<>E3f7Q@ZT`6skXaJWY_ZH0O0x-1{XV=~?y#;6*SIb2shww4Q9w zS?QZ^aClc`ZK0rtDf{3}3f8q}oUms-ba57TSgET~ChUG&%HnXH67}6j4p!`xIg{O% zmvH!|ea2{nlf30Z(%=BUWE$-g>GGksCdSO6K&8)$(rH)t^D7cz^BdgHoGxVdv)W8w zw`4A2hS7Z!Cg%hlQ}M6ukVN|{0l_K;_qH|#xq;zQdQqq$hu-395-(ZgpfC+1D}iL^ z=HV!Xm_Gx)F}7^r^>U=2C2*RU|8}|G@y#<+W(b^9MDuO|K#TI$GM|{`uf00Ek9^Vw zA=SRk6k8J|h(5$3M1QE&mmdEP@t!mKqhd92dMEYJ?5tTt=v>a~i0fA;`mxDs+klJq z*muAzh>8kdPFGZy?U`Qq1yXW$WeGiDAY?%pe{{EZewdlQs}SWmpTG}qyp-PaE?QQg z?2(If-<7;F4IvU(!qIz7+GK}YDZYPr*B!GB1i&CB@l10T#=S`%Va)O|HQ+@>c5I_o zHs~X1!)ID)7D^p(-@xY5Zr(bMyc@=~+-s=bWe?w(yX;&nK96UGBB=cQ(D&_y}e&NW-w1OxwHk@epGHn|` zXjM8ryNruxc%rx-QBgPFWuVwQT!!cD;Klsn$OVwZQH{>(A574^<~1uLR4|6=?n9&B z#rG|QFJ0J$Xy7Q-kVo$mub|nAU$E3jcJ}o{6QS&=#&L&gD+*WVU0;gP)r`A$xLCEV z5ee)e-Dsd6qogL*nd=Q}eX^JVaUk`d+C88|R{<52BeYOmvcBR(@3Vli0IEe3mM@5= zo)@|7Uk09o9#PI-yv7z9ChN@Blt3C%nSNZok4O+T!|b2KG)Rt@v%%8Mrchp6Vy0=s zbyL%w+Yoz0saml0W2VTgSlQSfqeW=}mc7({%cuC+w$E*_M9E+kq~`PZZ@8`0{wB#4 zxu^SBip+DBB1s6zLHEZregEp3S9bi$OUhH8M-~b<`hKN@P;P|qUI#yjUfF^^@g>rs zhm4q2K6%8-us!Q-mDA0-qwf`zh<7$3;AD9YYrmD0>csQ)C#uSG+M@C7a)1@|ZKcA^ zkHv6qomN5(S?_30;=?Y(u4}1;y?GZk|5fEZg{Q@KS|C@P5VzmZ57-^ShdU1x+}An- z2h|;GaLhA}Pjggql)4g#<_QZ}_Mm}2C$k;H7VtuF^9wN+@4*1yh@v_)WzS9g6I<~2 zr?rpWR2b?Br_@2dd&K)I{+QBn?yZZ{u3c2T3qqku{;Gop#kaYaXsDUvV4bC(r3M#Z zrej!*7;?ABL_?6O@el`*#XicIYECBYd8ZEso4(* z{}u1$As`Wn`?JTEf9pDMOR&Z^Tbh!-lb*ZX>~uyM!Nz47ZAs~!M+f$^&ALFTxqQ;{ zx$6U)5F?^+lfTA1`rA$2Xu6OFHoiFi?CcIzlH1BN-g1|G_OA)^`?0>zqP< zEf!e8umRiAv_1MH($yQ21D05s8L-fPQJ8~jXqcDOG}+UP(2AYAtD`NQo&X4h7#u!x zW)FO0*{I>V>&$FtcA=15>}NQnL<(@c>Qd3cL%$M#&Rt`h<19lJf^rAylZETm;j^jEn(k>vBT+kdpRP$K^o4 zZ9~_SoW1^wK6%v_qYalQ>&qD2v83)Yq~|SVdHYuUxDdS-kuuwg6~RiQf6;YATQM$? zPAYwfsrry!E~{-g(2B4xLa#wnDp+j)Csc4FH(0T`mPD8;mffH zqwUDIPt^~q2at1TyM-}%PmsHnbb*XmGhY zPs&wHE|S9Du2=U%jqSv(cPFNaQPfg$iA|tEmABd>CO1ZkQ2UYKfv_uxtU0+ zrz_R!Fo=Jn*P=6-uNCZmg>bh=>*{vpc`1mEIc)ibImX#)gEp=a$*~2}!cKu#d2@UY zOR8_~QDfg)gFov$-FCjxy0d+Dg_yK#)=mU{*c2#6zn`T$QI8RAn9(BS#Pp2zP9xzk z@^ff1YGK@L*7W@xPTlXU5|=d@UgWs~$zP~bto?VUD@4f{Uu&R~1^ zOBTt#jbPH-`5@bH)V24{o`)!{4&SMr(nT9Gd(D#LsZnCu4=P!aZM;$8Ryj)1QW3xM zG%;9b=YUX|_I_lIGhQi=JG`-5v1;X@qGVuI35hh=i&L@}A?c2-k#xoCU(k8fRm4{k zIpozQxl#OIi$_2q`nL(*i5h*`*U6C}bDoJxANX+Tp~qcAuFyn;!;q4N|9IZR=UVQE z>v+Qd2sm%l#+W)GK#S0J&?P#5Kq{Xk1hi`8lrx-OdQerrZwTga2wRf5$KuV09+Bb8 zZw5#<`N8j-!KHCRceUVZFrIDUx2Vu<AS9CQN_TMb^NKV$o;gXQMj4SJcZs@Iqiq>(4!+1^dElwz zMSpEe=^e^Q-*p7fE}LIiB0L;7H;*I&eDMwE|AP6@zDVN59bq)M?VdzJS}^@8~VW zhmO{^)-Oiuj>xCKX)^b7Db!>^Y?S2_*zZMuLzrhztWhd}HOZ>`^ONK|rIh`giHV+>{Nu)ee+$pXiEsbh(1lN?cZ&EPbbxhT-A~?3dhOns^Re+aUP_wEa|1%$eK(-9QKZ@%cCRbXvtY!w zDPjEn>Xe~C&oY8FSpo9)K%)BPx)xlR@I@+NLmgp{F-Kq~rocQb3cOW^?T8z41}v0@~O@r&MrG+M*Gsr$88^ZpzA5 zW6sWb@JkK#sT2ODCd%Sq3T7HD=Y~reKFvzYf|-7>Ox;rJs-BAwUjz3l;m8!ZF9`dTfk*S7w3G?{6rjMZIVEjc+wI>+1MbXezEKq^jh905y6^SQ`3bgq}ABp z0QN&Yo_S>Rd*gWp6~|g^_>#xuu1$nS9?y?fsI`dhvw93@<1Vk#N5A6PtIXLsndrIA0Jnh6JI^7J8Y1xZD5Pc^1>&2jkH7rDF z8riSIuYOvMKXZ^mmj7MjnmajPr&ceOq74Tsx6^^8Nw<<~xus)3rP|F`iEsBj7n&s@ zU+^U8e^N_T*B|QV=#-!@kQBivFf}G#zCH0mZFz3H4%#@W36U`Wr(16iDZwWAmA<@@ zDoYkgE0Ou#JQgt*;8jC79P;S<+w>cYVGYv;JAJGF2%ehdAW+;nF>%WVvkgj8OQ$o0 zM42)Q6q^UKHI?tBRr@px56E|=W;%O@xyrZNp29Qvd7I!G=WBZk2BqFuU>eub-n{;E zh_GDz0P=B()7mfUYmyHKSEFdV`$i?vAJJk%R`~CL5Op8#5%BI#RpuA_O*_lcCuqyM=Ap)PT<#bH|cNDzWu9G zQnL-1I8wjn;LHN;%ubT)IeIq!`cJ%#-=06%;T{F$1IT$VUZy=urfSRMKsRkdeR>a5 z)4X|6TJZ`tS>fb!nyARIWbC^~o_q{kCh^@wVu>JOHhmtUMnrX&y#ZTgInU#y7-Z>? zK)WTy|08Ws3kLbdb1bhXng2Q5;qe9R7p>QZ15olThYwTIoXk~o|4l>gE1i|M^g(GLT%Wkpx%t_IccnnWbR>F+Jtfy^HTW$3SvmPWd27~egFRh z2Z{%G>+PK?62-0t!ebP~|J>Z%g5h1fL6Yd>>Z+BMLlK6go!8DJ1fw(&;o5wBhqn~& zrPyHqP3$0`v>gH2PNsZRW^dfHSYM2>d8n~9Zohi8?2(bVv$&5cw%uQ3g-&{u4f_Vz7GLfCA3@ly z_%f#ZO9)3CK2StbaYXOI5~Hk=nOktB@WQrJ67%F8X`6xrHQ7mJ_DEM;n8)Ew)5Ex* z@0Zm!$RdogppVhKsaxZfS3ldS9zkDq438_VEp@h0A`a|I75vIAXIGs|4_>=&zr#rUtHyT#O5BXLi@ersJpX0U@{lhU{fjU)8Q%>H*zMxLDbEBE zZjJLd#+o2*UXpaQ#*-(F_3v;%wL$DSs*P{-IW` zlTPWht8XzvA2Jsd+sq8UX3BAaZFLhk)nb8ByMIO#>`r$j%-C!DmyrK&@NhR=Av$r( z;obvI9$WIBH%|x|SZ|AI_AYRDFVITs~~<-e^_lM!51_Wp{}!IT@@m*CTNB zVAj>1kGzF<`_JyL6^2q4@P$pg_{l1A#H-A^axX|OB&|v4PyHFTA|UVudDUdGiWtHh zWosn!>5bQwIqpgeQirh>Dkx=Z!)Vcm{Yy$;yvzqeAg@&opSa_2z#RorPbM|J%huR76^& zQ$bKEr5lkSAR-{$ObO|(Q5zxMARsN$3^s{v^ym~uPr5rtj@tLx^A~Kdd-pzZu5;dp zJz#~*@BYm?6&k6r%DM^l=PK!uUvf6eztYNWj;vBNTp>elIhJRADA#P2g2 zUXtW~Nm;BqNaE>jcr71*QIp8+bss~_6qQ-H-nVuuhmc8sdBWyGiB>f2k5r~8QMTjG zy>ncEw~zF?i<(%DyD%~jAY9aBUFPSBV<&5yL)1cundl=(`hoZ9$p^%KuiB)&E^_mI zT7AGOQ-Q9N8GEAX)GThed2paQ$;@2I@~zGI(ZGG{>8iG}r$vMI9ca)LTZ)~9Ol|mt zE~V;}@WJBY;8)5)AuD%MOJKPejA=JJLs0xmV(1ZBy|>h|Rq@TcSXHLI_V%i3Kh3ah z!L!Hz8*Mv({b5Ab1Mgp4BxI&gnpl~)MehKz`&>K!{nTZHkL~z8j( zH~u@Ypk`?OB@g|sJpc1i^GEdh^xP!kttC4Xi*x%7N&LNG8# z{?8DJbg#)KJND<#*ipHCc->Q=->mx|5s;RbN^Q-+)mi9lue82F)?I|e#z)-b?99`) zF}ORICcrQ?RdWwKIeUue`EWiL#~LD;8K=0|-y^em%^x8e?+!9W@@AFfe3K}o*Y|ux zlKrw;OG08r}cL#Yy>5ytl5 zUrMivtI51txk(8A=kvO))bwk{#|q@~h>Nzx(Iau8hulFx z^vz5k)bRzpkEz-5GsDR;Q9+(D0{ID{G{Ce>7$GZ8m;I}gV1Bg5%%-0)-ML^f#uPp= zTbo_$yX&VHuP@GOM-+4MOImU9$U-RT`9N`to?4{dztpH;lK|Dm$3le{ zb2{|}KfrnxE+ju=HVy_qH9fe+epkMiWm!282yhs$ja;M) zlQDW$F{e`eyJdLlkDm_nTxq0>ifmncW1_~5Q3mjWD#zGRJ6dd|)bx2(NG5yIbn~!v zC#=%+4)O{9_*Y~QhZK~g8zbxi6-rL7@z@RYtJZ_Zj;Ul_b0lLJWs9ScT*v&7<{BCY zTOBHo(J2(A@s6o&p;N!t$=35;Azd%nZJ?$im)u1tZa%13pvl=hE}$ap>oRO^hfo^m#Q z$xPm8(7{FsAAY<_dyn~1{sGNHJY+NqsLMw>u?_Gfi~SZM`yWWXA12Ap`rbt-svJy=Z?HJ@ zW28jh_aK<(05HcPH%4VBXmpVq`+kQO!ff!FK`{O$NyQ%C{Wa&TtnPS=hV_bG&G-px zPSTsYW25yBwmYT&h@Lk%OvF2lCoUegK?TlUek{`SOkDzNpU84XfW)V&;MH8)O)9M$ zU5kBepDoQF{q~$E+7F<(gjGS$sTqyUhpe4SyBt75AAsqDRebTG`?5yemc)${+^OU8 zM#c?w-xpLVhwDNHGTONn2zQYr^tv7giMZKZFPd9W8+x9H;KwEPfiYbM*gu!Htk?NXpn5Kg9>MU}6$g@}# z@M{Ew-AXJxnuceY|)>xC^+9c`Ot_cU15#8Y`SS%OCO@D zHHa<)bf3IdUT~b9(+s#&cz|mzSsL<`E2mB$A+>VaI*Rcvuv0VnvhG8FZr6Q8<#;Wg zBUIdxXPl6=?&-9JiVaYmv;%sY2Y9bzCdYMtn5q3J5YP=Qkj9nLi!?^lbDceG(w;$e z*UbVWk2*62Qu_kF`+HJR5m@hAt#&}vhlW@qN{)wG!F%bWhb5yy2DUI|cdUH%AVQ~q zO<`)lFrIzFNcF7JbI355`{o7iNdGPm?3knOBd;SUz;MRs@T1@*BeN`(=u&(*`m?s8 zGJbrKWwh-nXgmM}S*BF&(j9Gauxg66_$Qn}Qb*G@)J{^Mob*MB{zUOW(u4B6Hx5gp z{U`QSS$(u*GLtJ8OB|Jl@5)S)1rQ++jy z%Nt3{Ut=KEjweJVST^Lut4tOMNwXUAXK4AoUH+p;-&#DntTW}4p~;t6{y9H)s%2t6 z_Nbb(qtT$qY-^x!Z`yX^i<6>EXBG70xB2{=e>@XRy-?i+D@)cedQNK-vlaQemCKl~ z6F$ws64D<;IE;_^_o@Fat*!#WtDB+UzA315Z<2-4`0)pjES<=m?}MI>x#}P+-p}}O zyYf#cumJP7RI!ms&C9(;psJm~`M1~CVFBym2zDv;kF);Q;+I(iWz779|K~br zXj?|}qF}XbYNIV(uw?n27aSu^dV5)|NQZOXGMJ!{gk8i1S6Ld!v&2;efB!!Bd zZL6uUPgSF@ML+8u@{=`)mM7a+M2q+D<|`nM|4K~Dz<<;*&eoaNfp#>!w`%y}Irq?| zz|`r%-~%3|WVR&Jp|p3$Z8a;BbO(M8k^k65sv5SWZ~2R|$#|wSx2^lFs$Z{&(zXX`3(H2WMn{zy= zi=E=0vkhEb|O_Ftd@BFFEt%5&VOH^ zu{PcS%iGX-12i>fESRnkQG?ZvP92{XvI9P!{cuQ%y4vYD@>Zm@ZxREkRMA#`q5Ruu zr2rqV2i;up5#ojDZ0w~LpnZ`UYZMK&X_z{Ts6{L)47;!%S}D%Sw-u~kHraKe?ysbE z*VeB8T?c^6csGgCxo@vAc}CQF zh$t1Alqp_kN6QDt;Q0CzI%h57*$z*$J@cd(5bTb_gpK6KQ1TQx1{ip~hqUO^&TEV#SNi3RAb^Ud#XNe%4W zLc(za$9-LdXzCM}TczWG0}cnP1ejov^>cxSF6vP>YV&g*qiHZ3h!{w^HuXbyH-q1; z+~k`vGgVJklnM_Al_VZ(`MG}l+IP(IhN&x@8?TQUk0$;YWqWjJ~p_hbz?*|ZCz8e zncs*0q++Vr>(dJ047g*k7lLbWW$M*QljNRepMsh3e*qLece;wSxPo?_)^GeO3Rn))OyJj=cXL5gFlp3VT{mkJ*nq*83kW46ir^ zk{e#RAw|-%GkY85eRHieBHj4fzpeDbT{LeoW*I#*cj1gB?Gh9<#2KvKX|e7#KUy^F zQ(m8UW#$_iAo57o0<~a!0F;qo7YVHd#+qUCPM~lH>hHLLon+fboNE#wDdq9?!2tmBtBJHLQVJS_Ab*!r2 z+I&U+X$0iCgbDQBd`}x)KHEAUafSOAIb>&EoafyViS;u`TfDRCBVpc4>#@_a909GP z7|WpH>GQsZqob23d#M)b73o{e;$4l6cUeEu7wWe{-ffBJ6oIA;3uyMIukS_c5M@2T zPZ5fN>E)|k$@vkIB9C^O;D{0!&_FY}>9aVc6y17;^c7}eKHzlN|FWx-@1K$8tDlLh-A{4bPoU*d^#KJRijfHNzX$bR)eztBkFkm zIf3A6yK{hLojG6=f0FcUy?x*>#a?%0ZdnF#K$NRBt1EX8wc0R>^j$b29!AxM$?*h%x zu?o!8K2*&f39;P*LejljQU^Uj7RxR^hi4yr9MXyUyUs=X;a~8lU|AIbY2?Gu}W&aA3%09N#&6izvM0AOP1U<7aYs`nd zL6}9Ib-lm+VI%Xog_?q=sK{DcQ@Q1>28%vrOY*zERv*ieUO8xK)CA{4aoGg5?rWdi z|GmjL5qA%)klUIoyV^Sw?y>uGY!m_$7ALn$6xkztTt>vOzP2;lCU6&t=flDDa90kc z{wu!;Pn}FK{DCxEm^LZrD0XQVHpc;=2WGAa*6uLg%rB7$)|xwidpsZ1bx0^t%g;S2 zTW`prlQE9scoBptLD`N=)glnqE+NXqu%H=D;SPPsqI5pug$v;i zJ1%Hn;;^`N{(}p*T_beib`chVPl&oKgn~9D=GXec<%qv*t8j-Q!yFASw0+?V z3L0~61SMfhjPo&W*C|2uY9m;EDkN0HrjKSoVBTlv?9NGM@etGFwTN@msg1yQ)uVC? z7TIe?9*J*z0*~;txXr{xpuV|U?Yqx(&o2Qb{`(3qj`wA%J5cw=N?veh{rL9D`~Kxo zQni0WOt0X8>NLEn+4VmnXvxHug(MiWac2&(KHge6M9N=AiBl74+E-Pk?9#d?HV{zd ze?gS2Y{^H_L)%OSYlgaLaAuv+uRk5~= z>B~TVS&QmGkgB-#(8FpR$H0w%}=$3hT-n3NuX z255;mzJD2m+$tX9Q6&{kZZ$uC3_Mq7?p;>6AaoyARs1BDngmdnJ z^2=CPwQ=umt?k$s>&i?AYL$52EFs^fVMr&>ZUd*O;QlVZ9r=BhQIxU^q5|$c-1vjY zVC}E?fN|mP_?JB}w1>xw%xF19-(NetuOzS3Q%(>vi9Z!`eKuMdm-D8pS1G+d!?CEa z!up9S-rig*KCgJnx$wY5YLByl-OSn|)q_*lgJAd+IDg?&>H3_y$-yaR$T|o2Y84zk z+m~o}jP6+}-kJ8)s<0XxQR`Pz_;yGtuh2H*1Ynym!C6q11uvs$lprc%DRG)4FwiHLkEEQEj44i=?uZ%tQE}=^>m)qzwaIEEP z{7{@$D*VLJFhHW1Ul*^FOzaf|4u_wC9ogRi$B3Nk?)@R)jZEHb;ebeL(t<-$&cxH+M! z2xShk{B)~N=uJA- zFCR9}Sy*m)`PT+}I(7nMRV+H?LfqfMTD8!6;x16vIVV4fg9v8JMsY|P@CSIP_tDq! zM)Kf*u}nHuKf8jDD7W(2L5V1xls@r~zdt3KZ6^*2>UQq?$8nLedBy%|ifB^U=wkB~ z?<#IcDAv`!DcjREb@bC2-Z*sml~@Khs;>x~|0pOr>MYLvjEf*^4;wpSY)_{A?twq9 z3A8Ak`m1OW@0kVoLeq!<%p~RFRWDd2@4$d#O^JXU#H9v@e#%^lIb)zpms+aFs3Ds+ zD?}t!dVRBcb}{+q*U*1k)%w3@Cl~25wfC;?G@C6hJs2z>JueP?VT|CQ^5-%1$^Y&0 zFS)_8EFbPEJKdV*DMZWx&*V?+t#Pq<3YR4x<`q8B;Pe8^rcxYIx`-rj|8N8z50SUep#EI_T`IA9hw{2lP zDKXh3lJ~Qb1uidU@5%%!HE77Bd)&f$3_f4D>^j7BNWmOx375-zeI%7YkxQ+*KwHGm zgPVSu(>*Oj!>HEJY@ffL^(zXt-tsbDi>)%4o&ng&;0sw~&AKWskG@g48#V5&kl*PmZg zD?MMcb9b2fLQPrC1XKNgF1tLeH;&P}tZpnmJ}>jGnz+^Got9JdC@GH6XA0pVL3^1@ z`|bp=ueuVE#9po(ht2Mi{mOsdlS%Xd{c#P}M(Wrkmu6A_qHtvGJD0V%cg>`uCS(^y zHw+7@U|JBo@s^So?h@Utg0M+${tPS z7d#((u1$v{`B*#tv?M-7lgH{4Z3H>`ohrc^Zd%*D#;rA!-khdQtZ3&0nXulx34XrX z=P0!tycVx((UWQ&8hX_fZef??y$*jaYeym&)n{$KnN`};P#pR*Etkb3wSu)eOQ+62~Dk)l=t-5N0Mtyq$(yPb@y=7cgGC_Zv}@Z|5ERL=`As0TE<8 zZ~VSjnxnN57|gp0R97Y6NweU{Pcxe-rjn%j^_BykJF9>4GJ-yY2`vRpQ=Q<+A4~b- zGH_&~|DzEucQqBivp~R{Q~6)^I2j<}88<_e4OH?@tSg$`evE)`Tn}D_Cc!=)fVj3# z%pDHXR0av#{!!OZJsj)!Px@JWGnmM!O+>GBc4uhrXURD z*q!^t=qnM&J3X%wi0p(#>H+&yM9drwu`UKzwj*YI@PNZ8LWA=>t{KbM zbui>XG_=^S^IZ16A>~d5r}T;TelF2lN;TR+Zk2$HFfS^;{!#~FlE7G4+NBl=bd&~bK*=l?T z>5(^TF0{&Q?J64C-?8quOEx?{tKkqdx%_zF=QkoiJ`tqGTCrn2NZ{=B^>93D4OX}i zeoG5%uuK~0xP|a*)gkQ%&8-Ez##=Yl&(L(ev#!;yb^MgS8VR{gBjPn!xG5&GdTp{r z-i8D1FQ?uRu~}xq@7$G{4)FFjiawxF!Eo`)(49lIR?KY*kEUBWO~-l;3;2dk*I--b zY|}=*6HS`L%g67^`mdZ{Orln5)>Tcgxk-aa6x_gNkXI%EBV9Tl!Xix*Kx>q-X!M>Y znTYM%ANNdA$@tX7;@SoHcu=%|Ke`Z-%?8p-=*~dHrfW@i&6rF+<{loI;^}x#EC@LV z4l1dtD;8gIT}|`dvz&^;bYBG3TTFEzY5Rd~y#^$~baUm8U<`52#(fg>o~1H|52z31Xrx=WU-qgJ2-iN_g3rFVveg=M!ad5-iS+Z!+vlS?};k4Jt*0Jm(5U|Te zYj@de)@M<2n*?#do|6gZrrUJfmgQ8`_2A&Us2I|TpZOaV@IGD0Ls^Q`f!+t6D2l`S z@9-F&dUZO-hd6-J%C;DPg6zFtQG5?j^N=FN#`9NV(JdB``yWwFMmk3`7TiVfuXkDm7XO$MM9-dG zrPxJh-GlJr$tcvAna}sZIzfg@E?AmcVS(Q1`;lf94I=4Gf|KX+{zo_?&lanUgqb}8 zWPIpc3ZmWw^;{~#Bk;{^xNJ$31N7J3%=cFx+KFgnCMT-%HnORonLZc!b;;3-5D*Jw zBJLMrEO+(NfbixxKamP+ZlbF(A|_-T!M!CCX`|~}vvnKViJT8io$|B+i5u$?Zf5(H z8=%idQe56g;Y+8mbcJU?X>leS;EEwpN@D;U%bhevj?=-ZObMb+Su$yw(4T1LK!wFP z%qxDkMr{lS?cJ#2hkQXS`G;=zOw@sO3m{-aKZQF5aR++3g;00@qBql<>48+1A2(-<=mcRVagD#iM(t0n=A=tz z=CibhZd~0{?+p9@xFbQf9R}BPwkMc%(J2(YfT+6Uc$ITQ186{~EmYa-kD8u!siGSv z&vB#E7yw0(Ae(Ooz}4??1X}`(I)N24Rmql*e*bXcNy^i9b@%6J zyMwHO6W%N+wii6aWjR|AYJuze!t0n6C8*^CE-!Zg?)X7T7Ie4UOmkNgs&hhS&yqIY z{H{>XBhkAnJbgn|3N5wQ4~s|B8&8x--kw-$sKQQsZx5z|qbTnzf5Wt98zBDmM`hRS`aRy4B1{}vd|^^sY;58Cvw&{E(^~+}i=%Z_W4jmwJ?{-WoK{nM-EW}f-V(7z z$x-HVkUopIK&oX6&H67lVFunXx=#R&KmzkP zK;MOtq+ZYCtH*VWKjUlMe_2cOq+R1l&%C;_cL8(AWS++%6e&v+3h8h@nPk7Eiayi% z!#PpCRn@BN{0Q+M<@X*~%?Gbc(634u{+aFnhCpT5lZR60T&59G7H{zp{^9G_M+wj) z;WKVFQ(s?|dYRz0fz6h-L$taXBYd(9xT#y@=nl>gR+QN-O)s!ctb&i0d5O_oCC>|l zyjkf}jIbkf78{cO61!0R@SXLGq#=x)0mL9myTKsYKjoh43{!3r%+#z|Q$aFeV^Yvs zJ?Zgj$UC&VQ{}5yrWbG0Ha~S?&TsOb_iK$4vqj;ILGV5TX$}=0WU*?N^k7Hf*&j`< z#kE0(1gX=xC^+T>K}} zVB%Sv?_(I>@f+wZ;bb+Yi5pq0inAWXCX$_3F$Xayz3qjh?^auAe?OnwapgfYy;B|ij0~`_Jk^$T zo>w(K>m%JUIn@j-(g`SN(V=eX?gXisI=h*3nLY}S$0Xst zjd}ZixKB|d>v|Qyb_s>{l+~w9_XaOhgzhc2T-RrcI^=!M&yauIiKWK6(o4Wrz*NB6 zjw*O_aOD4HGha;;OlOz})~j>PvJtUvO##a{7>5-Yt=XXUZiggxkTOQ`LY`GRSl2zF6LursYQWr=Uk4ni==vC1_!JoqCy^`@lx->zuD!qcx%+k0Y-e{ zJr!KoVW{L%G_zs0u@3uim0e$cuY;VP-bc>~!LTJqD< zk^E82kI*0Y*O;Wa%RtnWOF=qQFOHFsuHq7PlB{~`(QFKS2&YsW;5Sfs)i3fW$OyXY z7Z8Ln!oQ!Zyxltq8|>zE_Zm(5?4{pmm7D9WVX?G+Xm#z6kIKZ4OByxZSm5~aPpsWM zUo4T#X|!sPjMDg{3C&GbEjike*F(xAtCA6A{>}>wU3w{r?e0oEY`1-KY+I?a7&s1M zHmbNHBf$bnp|~*ADr-MRyS0w|o}BD$ z=ZD)ULdZz?F6&nGtH1bkN(CZ|1Iw4g#^ZWE5*+Nbqs@#TnWciPWC`BV{zhbavDtKA zVD5*X53KD0WHgomF$`@yneQ>TDn1o;^LT&)gT-NtTUQW?fgAz3v6ab zwql~0I^tL#MDr(gmZ<5+u_ezFb7|McZzQ{qc7bafj4eLPZfwB+h}Nbniu(%16VsgT zlev^H{Xig|SrLW&eYfUtwzCs|%pr0-NvO|(w(ti`GiDf$l?N^;YzRF|$w`USo8U~E zK;@}XqP6IMto_XtO-NnvQHLC1V2chcSg#-cX7CJ{UCBWaa?6VI3E@$Qu_z&@;H*vq z92OPq8O3RN?IgLcQT&veHJI4CUv;uMCNL^^d7U0(|6B z`MuPzR0S)7CaOsy-B@H6$=c?94pjbYrzN_+;7ZL^VOsM6f1X2|2Iq~RH^jFP6yF zGMK-3w}-=?dq7*yGUAh_jQT5e0Q3?Nb?%j+f3(t`|M;Cp2u$^CPn%w87wThOR z#qCnYcg2a-yAsbQ{sH|o$6R@0$p@(Op7~PulM>``4xBV$umt-K4bm&a)ea4X?B`3l zs{PEhla-dbgj8gWMo3HYAdbL$H42?N4#i7ne*rUFMvXX4!WzXU+Bs}XA^;?%=%(#I zy92{Um&g=^7jSKZU~*vg?jl&mTK>=1QLuaXEk5g9L0owMKOzVxl|yEec9Pgs*rk2? zw}u&+uNS%eU)YXSfn1k67N~Fql06V5ZmO8PfF`b4CB9^MxFxViZJv1D^P%Y8#IYh- z_UduNb!vgg=FWdauFZItd<4A)ncAYZ4{kdNIO!@To6`@^Vd6H?oq5*vKYOR*F1NJM+ z*d5uc7lCu@NxFJrV{U{F6gsCxZZpJ`kD$WC9O5ix7eE&~!2^#vzQC+(^>I>L;yhQL zYZ{JbQFsjZvE>p_WNS;g;X1dzV?L_K;!BBVtj(HQf`V3}IlQ`dYHThf%v`=~7tA~Q zEu=T{Kwpb{!ZDVNt-*?Vtq7A(9wSc)>=LduLVbd!L4dLUgzn}>#wW)IP+>k)i( z7rbTkd)JpnYgFV(Wg&es=T8bMRK!;xroHnLP|)M&N7Uh2S);T;0VORL-%{@4q?eOj z-D~hZVzo4z8F-VXGm$OdKkogdQIR(woy{(POTO>>tsmjFHghB2rQU4KQj*hsYk)2V z3naZ4?I>O`di;AwcEP0Ca%juRY4h7=$={49`LY>DUzveaN@*xJC4xStk;fbTi*UPn z3aocxp`H~-Q+7D`OY3bYcj(1ikER{;2Iw!!OoGUFOgE}#lcF~!_&f(3oU>jZ>5n_Jcp-|JT;ci?taqlh50=-n|V8KLZoNMLM;x@AM_ksol#H$r0dPdj)=d&_SP&^sOxkP zTYvG$Zx6tyhp+b5PL^uqR12{e>Ux2yqhfgweBeb+$vnlUGFOeYU^aGAzc(L>oOczFEb82 z5Fhm9wF2_bqh5T_zi3jOb-6x3o-a;W+Mkr2z9n=+_kEi1@oq+h9ZG;GL_+^?kT?X2X`N7N!e{DU_jCB`6h@WNRl+;Cj*!whHhB$GVynb!+|~(LXxgir>sn z^s`NVI7?ZqymL<0CR#f_-}8aRAQ+5f!0my0j2F;mM~t4?q2Ur!uksW3LQm0cZTSd4 z{pvV~_RK)(!ofPSZ3iMaBCS&>t$ucOITxIDJ1(Hb^hd9+TG|@Twtnqbtu8h|kNCmO z4lEV=xe@f&nq39d2@4*PWk%V~ckzcNo?*%J>61totKr#g%CCl>w+A6!QmFx|ss37= z^Y;Y@yB4c@5?TZtC(NwV#H_h|9{#2w7$PS-yPwXO}TUySo?~n63RS;rV3ZA-m@;ljq?hSBQ~d&_}kH z6hLkq_xjPeIj62e+5F;bYU?qvBN}cykbI)!U4BCiV#=M` z@$`d_ug<25Cw2LP;R;s&r*!+ekJwQ#KsVDGBPRP3y2SXXIBmL_)rC)GN-Rsjt-7l? zCPdk)MNJu7la!wFj)cf=yt&{34*%+(GS5)QPIL8F0}J+l0{?qCP~lqxSw4zp$?VFr z!_<tsIh9e?M$A{B%t2D~}q{uAEtPB(p(Q^HhzOOD_Vi1B^JKILceIWq&z?U$gZX z-#4t$E#;rSyP&_Kt@~j{ccF5EFwpb_GAu~+caIS4L0zbmpGda|@kUnSQ!0FTelCXU zd4kN35~0?kz4?Q7Yd&SV{rT2DWXfOTy|(9~(G1Sd3w}1PV>F6(1G)xND!J8?%^U99 zVM}p*9UNS7eaJQvTtqQB>yU-PK}kZAt*2;`mf~Fy-KAvb5suHOGjNHBFA0u{k&vL*QvbrVy`f!g!#P+CNi_kwC@F!$bqnHscqmvEjm>Yo}-fb z#_e*o^hr~{1Kh(Lr+acuMZIsC)@jpX_iOWGvn}rW^ZnQO2Kt=8#QQPheMXd> zn}Wv@$_x|wc{o8+^i4Y;4(#iBO{$}MHdSq{*4Nzhg5tIKl(FyePi=+t7n-*H7h2qd zjnwD3pLDA2q{)#utr$ zQ$#L&ki{n4rVaE4OP{T_Otc#rAz0$^jMEzlFz&%C0FQ*-#WxTd1hao7id(ffO=ehlte zx~IUavf>ua!J0if@Wj%TS?zlJ=iRdQ#x9l8W-I6FQZFkYW;(#_LO9B~ihJU0yXtE! zhsF4tcOr^L*7@3_R7CV6LGSCPpiqS=h{gQEyjkCR-;4Q@c~u!9?XQXQ{NIlcs}(W{ zREpy5k?7*OWT1S2k#{auKXnGSv!pj%rpm;ujtaQ3N0nInPOLDLtggBW3BL1@{S&_T zXY))@7J)6iFUKb^! z7P8QK`f`K-N{Zj&2455(V>;Z39DNtr@AAc6xVw!kpN*3DKl?HNACYZc&4}t)OiiLR zd9$1(`BRUdaf9SwHMg__C&2CHX$_OT=70()6AbIW#bG&8C=nG3Q6!P63&)35vK&(; zn=CHnG1eXX@=h4SCTqvZiVNu7GRE?KcQuPj{*aN>c%o%SiriX)>Gcu@Mb!Tzj{H?+ zDnbz$NevGePv07v)6P*aY*{0d7pxdi=7EVEu@d?MgZCQ8tP!!@SB_-zJ)Ukw0ClNI z)^}8D@=fQ^qmFByTHZb_kG|>5rt!EP)GgiPpjxdxuUxEAB&S|&&OnquZ7v>u`j-L8 zph!DD;xqHy9BNMW5ZtE-+q(F9oKP}9WVfC!QhuLyX}S$`2UU2u2cS5r4)RmT^J1?` zEB4gBmsj5Nr}3H~>^8`8{1yCP4xs`e-M&*N&L~)sZU;8AyDBzzunyO~_j^4xAof~q zC92o&_#4vABPemK@AXwo1Cf%{5uv3A_EXV1&M5~SDOhe<<15)?Wi=P08LPB60pr9s z?FH$0RI?jAx3!Jp$}sHXB77PO4d!TNG^5?0yE;0RcNAY>vD}^VQ;5BTSfuyGv-3w?6@J5(AGuNd_1~9wmN=f7xw2rT*aGmzyopL>ynI;xc6E z55Do3z-3b82qG_A99TIpe6-dOw#sFypxDy*Syhqq+kJ^f1HY(h0e06}KpQ~;*tAXR zdR?FHgPOe)-a&2#xmX=My?xc0|6#}U68}6B{UM#tz{kG--~4%1j#;P&S@xrUucTR{ zOnb4G#ZRQUeR~)4&yP$N(Ov^h8)N%l(N5N@k{RSuhSKCT2EkzTX_ev=9D}A1;Pv5T zM!Peyg?3lYBO&qWR<_D8V>(@6)5+mdx3KWc=xn;w{q-%y6(japvlM#Z0{7sYa!uk& z9p@s~9n|iJ7WE&7W!&(d1jbU0+6sz2yz#HLQ-#2X1Q59>78|UH~U=^NuH8o()6Hw%0~zC zQz^YcFmY+?_WD$;#9t7lS1J)}R|0&pb|Wz(>}K_Rmch^~@ez9yCKnCqsK!Az@e4*z z7Gw{T%JeMw;#$=Ff8#_xB${XsmRAqE=hM6$c$QB4Blm!5vy7_bm9$x~g6idWt5gMo zP80SX$Jdwt=C1I-N0Cyc)VUU!p{WFy{`_qw;OAP}v-u}7p1(5CZ1~JQ8kGw@I#`y7 zdC>T;k@JzaXRvt1%jh^P~y+98>mTELzj(vvA49M zFVIgT5pWi)rCClm!UMEtA#KKw2|s* zO4?a7HB*ffNacYIpJux;uQvYJPxD=Acuj%~Om8%@pwu&Mww79IoaTm88L0{bsF5MM zgo5cDaH-|&V*O{tsPz!h|Ced8h+}m945iRdfUZm362#)cGK;HHkxzIv8wS=B8la@B zfPLxXz>6%LKLlr{GxqflM!4Hr+s-0|j*0tzZu0O|AdS=9^HEHH=!SsF>Vr`BtLmq< zb<`{tZ{yXN?f-#+Hc8W!xn&y5>D86Uw0-3gGT!X5f@lKNlCWT+=x$$*-74Qm1pRNU zBygDbMBV#0v_s)opxtic3lRlXpq+b1HTWOh#TmA5zoiM*o(E8x(48>$_Gw1xwx9f} zJnfKTKh|!zkI%r*1O6;59q=FD$ps%D)U9bgXSm_P7b8nUJdTLObJbF z#Yo9{OQTzFRa1w$u1nDIc#bqd=)bKDZ!6J)=KqLxuQA==+NguzUqSD2Ak>4lXFIQK zAto=Ayo;fS66++Fp=XuBhXJRr)zLrAOm46TJ4}VI*m2;-*B< zp_(!v=iAfQW7$3ixfc1&z1NBo!4nCOC#Ql$#|^I(agul_@aVwkSh>e^Fe!Bk()yYa{uto(Y;Pl+GN@i>e z=_-WWLU$TJKj+UV^tkDbq3S%y*;?UFhQo=FSDxiu5d%C>v=_&^MTiZoj>4zZ57Lb` zWYGfe6IDGWebDA?TjN7}I=#9XEa0ckYy7twaKdA-%-8f``6ymd&2#W#=JE=4Di2xC zfKFS!LAEql{i&X6f+RMGP`2NbS=+-a*3p{cTu(c*E$}fm*xri|o&kt=(o(y@dsyYp z%O(M`uf#tr+_E@;*wCcI-1Duo^Bq9te?)c219q4b>Y=wp^YPtAZ=QVx-N^G(UmBEm zvO1@*_NGVn(&N?=AyX$iFktUo`t4ht%j%-Ny8sYhNsr5`thIOsrFPz;W}M3kfML!* zprqLF#`eDXFWK~_MA7j|Tp9s+B&JF0b}PR^X^1znI*E)UadTALe9IMDJ(g~aiu?_At~E9run6@ii)&ux{5F!2MoB`M z_#}LCtJ*z#p&+5C8GWHqX_ppz)Je!D9oD1hGK%6x(^lN}VauFRO>_=zq}Y5|rO4oT z&6JRzC<9Nv6ldA4x@@K?f%#jJO8=U;&(Z-;)`%L1cK>BI!C2=9VzYN`CxniEG!dT! zuOv=ZPL)?mO8hKjYM5cNWWm-TCN_`-(x=3R*EU9qYe%#im2#O##s@Qres2e!BYc*q za`+h=Vn8mq*YfgC=oam#gCD+e(e@8Jkf}6x=SaXs6_Fscs7#yMbOCAnsv^%x2-!|P zf59a3d2&1vy4u=O<&Ea<4D-=qlTcO$vSvS@a!LSBi%$|znp}64LT{PL^yX(L)Mv&# zei(n)xpqds-u8Hs?{!Vav(P@%Ljf3+JNl1jaGl=EyA72E<5o9_Ry3E@hlA|!?(5Q` zvd)YX(>At*RNA@e)M@)eyT_~!XxSus$%M_+Q|)@Brq&Z~-Dc(WbH#L9AxoP`gq_my zrC#k67q?D?aUa8y0CI7!AL3ieAJ-c>nzy`6fwgoiRWIMp{C8ul)`yjNU~h`M(XVN| z@qzzIA8XsC(iV^SAgz8FrMci!z5nK5v)9Ml@57VJ_&AmSH;UQkQp@gpbHd8vc#p)U~iE$KnO-tC~b%#ZbATP(8YD@$(iV8RFJjQ{(zug` zxxMID@Cv-)$8~l2J^_M1rHu1PWjaO*sCj}PUsrbNPVhwJ^G7@jw99VC_<(CaEou&Q z1s_yT*Oyq9b&mb0D5>;S_&fo&_~fQzvGF8X;fO>8PrTKt@FYQIa~EUa!VG1$OFYn;9EbjOEl%S zWv!^YSwAlOx=kidAfIw7e!C0ow3Ky=k$E%obb5~`i7sPy@6wofqVW1I;7)X9$b#xZ zQDz*^)yQh(8?XrjrVIg-aqZZONr)up_*t}IU%YQ9KZ%sZ`cAq>w#pHS%bdYAx;ykL& z9c8L}VZguSe;I?K3c4}OSn!4CxSV8(gV8Jl#7?}oq$Dn@bVA6Jh7GSK-`Gp#-(Mws ze+gIDIcwXN0Qp21f)SVGydL>gpo}g%g(<#8aFYq!3VK`mYF>=(4<8TcL0t5fsu8ye zYr7Cx;V8Q8v|R-P2VyEH`U5giHY^;tlUmGXeS66v=+6+Xx!Jr@<73}Q;S9~C7G?`- z$@khhXWxSoMwdYZ_$;Mj6m_JVvye_L=Jlf02l+Pv9%#!(w2rZ*;&I+Wbx3M2kG(19 z3W(JYhJv*QTlotTKDNEfD=ng|Npx~bwW8($ zt_RI*!M5TP^CRUeH8Q+5(h#kJ(4><8hzP;6?`%gd)2)7oZEB)e%e@t7)Gr51j%n{T z|3JsxadkO6hV4Eg>{L@h-%?`ViekjlO7;3hlWPm|jbo_gqCw+g94o@J_>6+-@auIga<-c!2|{ zk)CEze%2WFa+z3|xTtAX%2ns)$-;oK<3}Zp*1(pQCEFNpIOfp7o)BJLiZDZoAH+EgU7R~wYTBRjfbwD^aJX`FBR_aK5bv&&)wZ$GV9_rn;-Np zGM>8^m|vUzg^x-Z$^%Z0DW~})X~$vV;Idg}1w5+1V_-k4{UgxDGTWCX&3qDLV#iqe z`Wn-&g!8IW(=m?YT8@j~ox?;wq#Dt)*l8Tf2C1BqDXdDDr}+{7K8DZoxCg5DeEb1s z(%ICbLZb+T)LqFAD?u7+9O?(`R! z3OWsc+M5%jQhgc))AWR^1v_}tmu`&y>gGb5)YdaoPDU1({F+!>1%*oR!{G zRgNx;70vnix{OL-@)B92o+hALl%3`~-#PR|j(^m7)h9!Pz2qXQ4w-nMw{2L0XpCZ)q^=I%YMqTkb8 z?tMTnadIydzMS#}4uz9hoJ1CE)1@SJO&C+x!zbQj+~?-cGlxV8h4r^~vQ8!+H=moi zD*Gpix&VtPqhK_N7x&zuWY*+an9t!o<2Lt&W~bhuM{|y7OL<IaKJukgm3wokjBM3 zy>C&_oy+|FiQEPEdP(ya(KozND#NW#6?<;xnEY`Gzi&Oz?d~Th>r#5`?CXss%@6yz zuH3%DUP@ag$Uo0{yVJMF^UatDe@5cMcb+`?&Fo{A7c^^;lwv^^g0td{D%^+q? zU*RdXHNYWB<=@}N>LCIZ&L<6P4zEyn9ha$;zkNdE#>iJ@Xbkx=@Fm7TU|~m=i=*dC zzc;Q%lmjb}S-eY}N}3(ekNlc>%zEu4=}K4>NyMqhF)jN5!oGAXKagHlwuBfr!;N8@ zm^kb#XB-@zC^bN^`Xb$xCHB0VKM?zS*`UPWMx zm;IVi&E#k3F_c+q6Y?{=Q>9Qz-;#F1)wST0K&wyxRR?9Kp;rcMLb0+=XAAS^G}_;l zw-jY+VMT!jJ9Hi2@ryT$-`oM)}UUEDbnO-?DWVR zCEy)bCN@j=`c&|iHe&0nu2n0V+^sPPv861$TTCc8LzIXL!| z_x9AzP*&FB&yNy?8MJJFr{`&{<)j#`Uh_s=Fm^)178!|L7cPrH$xdvU!&C!bwAZpM zBJV?wt^LxviGhB&@JPs0+SvIW0a@l^`+?Jz3l|{2L6En(q38U{2aT6kR%uHQK4EQ| zVvBe8d4`;s`p>+6he8;1)LZ7)yDN@|V52&mwR^GNBVqYr250GFgCEqg9^0%5Q&_Ls zWP8Rvr5Xp{TY@f~_+S2tiaHWOh?_l|yiwaM5NSxqDL1RF9~vIsH-eMw4*smz8kcf# zfrZ3#l7{M2cLkC;gx7S&JhQ_?%@fLWS=M6olhDIUk_o$`ogLM3a7o`0S0ZH~F49}_ znj@HoIOgqM0AVQ07r)qCC7tzMH|M9L3rEfWM}4pS*op~J>jy6TfC0rB-(S{Ggz!$T zXA7c9w!r$r<6~F4L3O>l;Oivzkp*!05-A5tWV`@bK@YpKc`FGLWw$d5iHYwc>0cJ` z>h5pMkvBLns~BDeQA^&u_^OhMgH2zQRockszf-qMV&(m;oX+w>TguT*CMvVE90h41 z&I`(7iigYe)5%J)LezewdQ!v^oEi7U=rgJ;H#U8v6BF>!&~dwUAG637f|O#S=)D8y$lRH z#aHd_ti{@oT&Tc+@eK6Vj$nk5>=BD-{_-oQui=Y}__~+%E7FqG5umFyNyi!UMxAI9 z?eemGESytB-s>BfWOXJ7_DMYjWe1#-g||(>T=wzT9&u4GtnfA2r_%V1T&*=d6pk;Z zzg)avcdTP{h?3>yX zqgXHE=*tHgEyh7_YM_DtU~@L+U#hYQ0u7u9((%m=ZV*8z?-IerG2VN6*zV&II8G{8vUnU>%}!5zL6F zbfNB$LlN|ds{|lZnwJVcLEC+n%D;{u7&g9ID^J(O62g^GU#%O<7)&`EZQ5Ql)mXPs zYdiOAuDJ7ajFTWuIXXWzU~x#|lJhLvYmv3Sb^_e#$@llE*ugjBt0S!QP?dHFvzlVb ze^2E33;a)kn$kRI%5LfI)KmJycG~b-VtL>0EW$pRp`g45Qag91%fKtdoy+qSF_0D` zHmVD;gv&mlhr4c*ui#p^@l>DpkA)|-GwI|!iX|$qe1mWYLmc;89+R%%<9ivy*cR#h z1hetcxm;}BSST&@?-=*#eZ^0;SeZy3?U&I35-~u zjS_)z6*;r|Ou#iQIg})}QBnG=Yy2c}$|6u_4eLh8g)WURv?8}#&G3c&Z0d=mJllzb zKryP`hM3;6IyU?@O|y78_P17nOEwSnbon zHw~Hd8^W)Ma2FjTpVv+a{-cQSx44^N$)W0#e9hew^0q|nR@>F6r*{LO$g`KYH z;9XWxk1~Y3Ui`eLV(q6YNoL1*=MOfK9;BO4P{NQIzO_9k`dnr=zy?!)tZwAavgw|t z{(|c(E5)}*!~OqGj!x1MUge}aktN(UiSJw5o~9w z8$F&Q{_7`0Z|5^VUb@x}9?3=64WoQf)s2}{J?z!W;0x^v^_kqdMe}S$1FJ|*)}GcC zB_4jSMqcmv6bxHnul-e!H-CIEjQ8uwHv&BwiKQ1)4P)(&{o2rra=|M6e@j`isX`Q_ z+Nq}Mj*nmDi|R^O&2aya*3uMtIb&nbk|Q3X5ZGlCmbbnNlp+)xtmVU%A75&TN*M0! z#gFb!S7L0@9mtRtUOYHAZ&9su_=|V3>gh9c5sNu9c`kJMVcH5sM%6P>(lv$er$(*% zEMY0ySA=rM-#>ID%xXOT`*b>r-7$MlsK&bB6)q{dHs4`vae@AsywTs6XI4D-UkD`$ zj8?6GDyVDtn38(OnL_f6Tm@jjzf^PZu<%=7agYA4DG+Bf&E|kREEW`+&-nF|EMw19 zQ+SWX0jS5$yoVR1Naf5%C-Sc`JPZ`mdy_J7EJdI@y_#F1dxbLeE*DS7RpuBMP|hp& zM99-aux@pC_mSMg=Y{5d8Qj+V-yr;`O)H_`b}f~+!F2P`50F_kOlkzb*`*>g%%nhd zwRzrydFY<#y0K}@6NISBz|5W9Ai!ju2e7Uqmk|bImDiF=;6*-__sm^0u6gwE- z@+@VAfBn2HQ1e2WN;n=B9g$pX5Kzerry5c5&l-Uh0{H2=5#kN^z^0Jc_b#kH4{!yHG6YGIo(X5I( zC9cy_B+I6OJpAqN-Ix}toKcoNMI1$Vg2{Rv4STdXL3`Wy@#NN-RY0)C2t=UQ0B)+| zyE<#;5O}Lu2@D7)mjr^eCf>JqKfFP*N0X7!%5-ZaxI*rY&EZ>%B431?d!#~-f_$G) z-BMgOTQf0tIaVY|CxnMtHuC1Xe($!vmCcDmRJ9gf30qUz%Hic2MlhY5w{M6UUz`@} zd+k^j>G4F_GX@hM2ynNF8J)mn%qSsC`Q1z|dpx6PMqddbMRU}@k3#sZ8g)LOeVfOA zGNtr!p=`S)YcG)AQIyq|Z9NB3v!92;gRStc;jlpGm9MB`HcjFZ6j=~zqWeOS*Lr)=iFII1xC%K3qZ6INNXr-3TQtFIt>=5Y(R#@c=P z9VxLz6->@~=}E1BOB8+ojRz8YbWthSwG}Udv*DAS*erd_%3whYE`Usx^(8unC*jn2 zuQl(d-_gk#->;@u?%CC$!M<>t-LN%nKlc#o_4;Nmz3le~?_sz&Ej@xj?d_co4(V`| z?2b->gDEabL2Soi5xV$~Li6z5*s;dgja9L4)O@jan*hrPse2>`mq`+F@zp>r{#iam zXi{EFdNcUbvLC$h^R2~LVZ(I$;NRmM2B$wxhvFkM;W+lTOR)x&%%&vm;>(Zy$?Yp4 zVqGLLx!UD2rN8%eKuh0QP*aWjj4=AmL`T^Vb_J)L@>jR3s_~1iw;H6cE6}!x?Ax0*}A%%*rSN?p;D9#m8J*Sid z9(ZsyIl-oVe^ZC10xl-Q-86t3uAQadNX|baupNo8k zM`XM^*{c1B(C8i7G*V32xZj@r7SS~O_JMw!)Fbl`x!9iO@Lf62TC4A?agi;biDme> zrLNoGte`r1&sSk%X%w9d&DwtC)=$ve1(-{<&W8CE(^cw>AMB%q-r&Q16J4bCFO)~R zo1wH9gk!*4QrM#2@7}lT*RqXj0aud3(IsQ2n{mEkay~Y|A;}ApNdS(>CS-Rjo$RKr zSk|NPr_yx&Trmj9;R#X)e~m3&B9t*|Z;*+Gu@$YdVkY0-o2J~S1-Ge3nJye9t&6%f zyZ0fayUX&MKMnnT@+D7atuKPXvj^}f1fEgS=?6~r`V)|Bvs?ae z({A<++yEUoMKkIC9uJH)OAK@7Ey4fZTftIw(7zf#xmhbG#b1)geFWGnRdP&mGH1hC zMKVUGTX%gf_JVN5@}<3nZ?aI znSMWa`JH-#m|AO^zBf@Rl@EEC#-(|_`)NK~TAuLNgAN(wZVBX6=3bU{pM3pJx7Qkc zv6$TBxOkIAeN_GTt)q{Iw@OsqDwocu1+|B!51Qp9X;dp1ZxUTKQU>%N4e<=6CwICZ z55bZNmCLoAND5-AK0zhocra}_g}7fGf9-`j-(9}vnRvfrft(hq&Vw(4b#XV|eRuYP zd5CoeNe6Yc$P&C#$DqvO3U*DD>i6mce`eaP1Avc9Mg<3yr^Bm(CE+dGofR(mPULaz zb1c2(?D@F;@e(yLS>j%ukV2{5*B@_=@8IUiLDk7v+QC>A)p)%WOvUv4s@gj5jW$pK z;g}q3Y9CzjxHC|#L-Q9g%D8@<^ps)Lgx^Yhec`aU9}}b;=xI*X1^9orI+uIOY#)DZ zdR8k}JGAan6(Kh&->*A=vVZBJ54C&Qu6=McSrD+h=JCBiH3*9e7HmyjSJ5>S7jB!i zEVlbVzp$8{*!1X*)uSJ7`V49RR~|QVt~T9W-qq}UWaV^H=!fJHie6j}{gNs#|B;Zb zRv4@p-!{ehvTQP4@uBy7 z#0B1O1RmUr%@vIDh#YS|YYFhG-14u;{H?2fy6@V%`VKn$j{+Oq2@K`2SUwt)zH|_q z-~(o+l!%meU9?dONE>m# z!L(9gnzbN2=o4U^;eS2_x(nZ; z5ZP8#s}T-gJtmjF-O8pV@T7j3dr?;d5fwPw8+*zXdQrE%e}-GEjUZho(93S#n=nCE z4fTA;TBfmn6135F7N_!bq_t?y5x-z6dz2c|*gvf5PG+_0Zh6qm$psB~(V}h=XZfzp z4?enjxu_U$X!)+^Wq;2jqdC%2AYjn`@cXtlE&&E1$Sm?qewZxvzTtHNea{SJY#-=A zV1U4IB-g?jG@kBKP-N`r!`a0qmm0!yZ45SSQl2n(u>DP~c|mg7n3#ifRP_BSAwFjG zwBBIBho5ez?%9>$J@?)%MKmC)@Duhs0zZuRSAP*lR=xj%&3eac9^1*vFHe=*<5AD^ z6lV|>DaxSi47b>8d_22fF!*(~kz55%OrPu6#L_mK4j4PLAkrn0^2zaI*+az~h2F*0r% z-Bw53tCv#E%yj8l+s)2_^ppm_FU+-(tx70=#;_jG6&ZjQTfT9uMM*Z>*q^$ef891V zgN6u-_q3qjkE;G*%6QXwOWj#Q&-3TU%o9FKMl`;3o>h>&M+0_@`uhepYi6~5{{Gx0 z2|l-xXlh}m)bp_7HQRbSaHTL%atPv>o(A;Tv+%yp-^!(!|3cUw1Q>lIkIurof$?iA z{_W4XEy;qV-!HHKW&ZT2ykE-ZBCk;UDToQ>OG~iAGRA{=FiHk^pIrO&g>PIa-Hdx1 z_b-54*3kAaV^N*}MN0;fl{ZPs*lh_QQP+ z5{6z~NsT(1qo>jdFdGzEOC;ZS=@dgqqkR0msYb02oQ6r>b|p~0<<*{Et;R$yRu!ef zO~GrJ`+L2kbU9@}%K7-IU$JD2*M*ZZSW{ul+svf!pzyxN^#squKYLUk`Y@a)ZuJI? zAGSO#N@mWEwEU%05TZe-WN{U~O+E-oo}kj{%IG-fo%XiD9&x3r=KHsi&`fS#%7BZ| zCE0FbZ6{b^iVOni07FwQ2X4SJ-r`H0aPnMXS+|A9DkH=V^zO^a0@}V$bw}iN;5z(xUC07k(_Jz4*fWTF7 z`&ja;q&X4iB%>XO`>dl zx$6I;$h*H%evaOe_S85On_kw=Oma)bxHF1YoV}Lv|B%~)x>74u`f8fAUEF|AF6)Za z^mxKsSZogUAgYQOpBhTf^tmMJ zze!JX_9oaUtk)&P3I=r{WsQgqiF2g;6ETbw?h_D?RI9B5cDAl{~X`432J(ftGtI%ryG)|QK5G$yxH#lu`FDy z@@JUZOR6BMTtF^#((}CD@#wE^iI^{yY!>Gg-Y3H%&Mu&eeH7KbU;c7C-m0d2YQ&5c z;b@Qs-ja`AyT!RW=5AR>(V3aUhW}yj+RmeXm;^E0{rW=FXvf;Q+%M-UnRBR=qz_uXx(%Vr}W1Cz=Kf$7Xo$!vPyt28Qt-QBpd+0P_Bv=;hV{yR@<4jsP-Th>H@rXF08>QJWfglfYSCn_zex5bs z0pnNZ16YpHJC*+^XfDV%*nrxh8w3Hqs_yPm|KP}~i}34vKRET99^?&p^$lx72K)@! zl|0ky-WI*ZV2%^xQcUMw!hxbTA?aQNuQDEGZ!-tiZPKu&>gAWCIljo*kOyPHXgD!j3cYxn+90GbAw#)&XTrt!wglUbq6>Ld~TxQNZS%|A7p`|9%g z;vw3eVNWRVd23XE*Mj)S1K>M`yyy$z5a`>@fdI??k-vz&y@lQ1@lMVG zg1&3MTm8DxQ<`KNw87L8o(>Y3Lq!%QSxhB$)lSJdJDfyH%g(QOWl#6>E4LyP&i9u` z02A<{W??4Ltk0oL=e9#l0`pCd_yO>T;U~iI0y82HKB^6T<7GV_9h0^HGeX)SJwm5+ z>#wTXz+ZMm@S8xV>5rfwuM+vAuRs2yjvK3YPt>M_pwG~sbQ?6&Fj zF_+0>6o8^hGwKY!+QLSBCT3>EKr|7D6^-#E_aDB>K2si1(KAzAOD@cy8?Oq`w4-5o z7@+^n=^ur2t#bm!6X82(g%uu`_fjUYu3hGq`NbA|Y$usZ!Sk@Oi zlR3^+GV!gvMyJ_g7o4OIoVA@pY9}9vU&XevCGZn}Ue}^_zpQ_u&}yrflpJ`P{2rYBeiVC3>nNuy$tu*Y*OJ4s3KSfb2v9sA{jHI@7aO zYfsrMg-3&i33GWB`2nfm2!=}{0^nouCflxv0Iu%N@#4RPGp0K9} zp%4Gdn9#m`gyY{Hb`-5}9~aZ|b{ccFk=IWet8@Y`4ms>Z-!6yZ&9z_Z5}HakZ`fpK zFI*m;9|nQPuCFJ8o`d$r|IYbfPWE$pnt3mJt(dQqOdrQJN!td%n?E1ym)&`TwR|pi zHBtU76bA~Ap*u7^PMCQ6-&p4ycg20TC&GLq=LS9bn-h}`Yrg}2)ZnxV_h6d{qPN7c zaG1q>P6G}!g^u7{YF`sS72*kLYv<0+F`Xl{Mj%R&?e7R?G6TJC==GqNFixf|>T|~d&gVBjTyG@Hv@!>AS~~n0#8Us) zazJ|@M|IALC3E(d01@2=c*yY=;dsL_mzE)bvCN@y&sG@W50DeSJ-x<~nd278hOY8- zG2cz5`cXEDZOJahslvwngRRomb*oSnVDH9s@_?a=o%P%w`IWMdMAt5<>vCwx@VGPt zt~-Zeh0aF(%COrs;@L&J)RWjhw?1C3?P_)FFQltF$bAMq6>sORhRAsh$v}QAlit|I-G@F&b2y(=? zTH=DbJoRVwfTD!6i0^>V0c6?|SJx8r-dp$E7abUB@{)*z_}-*Ar$OdJ9keXp?pGy^ zb>Y=G`H9TTbH>BVz-kbqFmR!r>C_?Q#2iy&CJ>AARdeol=AZNBxKV}1NpJTs3byI#OwcCqrychbEK3O}WwLoZJeCvz*|Y za~r|bvXC$7r8P`jY!PO?*L=3`-eAA(F0#rkr_RnD*Hlh|6NL+br1IfF2`8eP<^X3c zup-Qx#(`XL4dqnM32C)cp&~wGWU{aQg?{ygyimY@KeL~+M&n~S&|oFal*t_6WawPL z`xTOi`u|^4wAQ&6IN{Y6j`fWcGuIi20hM9-q!Z*??} z8PrfJuaNM5mpEUIY|kOE^UknYZ3U0_txEGV^lL6R9;Nij@tLDJy*2vW28Htt4bf~>$R znVFLTbxbxNA1buV@4n$T-g+1qy}QcAB^DkhrG%T%`FRl=$?BscBL6%oe8M2ZBzHo# zP|;sCWvoayI+Vi$QgQ9jYW_UwJ}m5}`nwPz}j{{6^SdbLjg0qo*L ziZJo&(4kQ8Cy%Acb5l{NJ`TA*938v!%aPP0b}Hp5Y^nZUkIbjbHJHLhl%E0$7BIEQ zUS|CzKf>?t#x5(fysBwL&2MH4WDMCa+6&pz3O#MV6LVcA;bP5# zQ~yTk>i_=z$IKq>Jw>)u>*u{eto63T-$P@4LtUm;x)*Q%U~){d^QWY7TV3T{@Q_z| zh;11q8X#s#uZe=oXCR1d-cYfFhNn`uROOtK1eRR{^q<>PVUz+DA0tUJYT37)Z;rM* zm>T>@gD(Ac%g!w9*BkuMt${@PNN`gkwS2q0ynxX^D&~tcx zj)lQLimMx1KI0dir>Hi54NtEZ&W_Z&^%rft;jBl&JJLU!qq>x?-V4k|nRs$nFl+em zQ^bEfIUdm_OX3&lm3oZi7Vl2@_QMzQe!xG+JiHdC?1!`@Y7}b$aahHxX1@e8*%Bfa zMEaF_`EbZXOuPPhkJL>=qkj}at&iTV4Bjv+%t0TQpQwHXOzK!pN2INDfgji4bGXa+<#CA-cFGd>>1Gm`id*}po~KBA<}G?UwVdOihwWjk}JtDEW=Ghw4)Dp|f( zGbeIWK_4^s*ay-(o619NRctf=oMNJb<}yA&1mnOL%ihO>b+v?Bp&HA)Ox+*0a%ezL z#eZE!pO1g|Y+e3ML^;rD41+@CeR7#HJZotkE*|>T?<*$SrwYNRYce&U_V`5pZ+?J$ zl}S0+<7M>za-fps?PF(BixMiYPxz}V#NnCk*AADQ^$KWxl*jOUK5F0KSlr=W7UHdS zZu|m|(wLIg*0*0fo{ac?^9f1XPRF>IAVUWV<=~OCZ8)4H(!iBy@u;BfY(PR)rB5Z< z_-i*kOOB|jl_j*~91>S8=650dv- zqRkz)++rum_JiBS(9@0}K0>srX$-;aF{kW8;m_`$ z{7#+;o5n%+Yn!3@as88wt&Riqg_&MX=M&AGzM$HtQO5X_igVk+zO5)>H+~h4#M?cz~n$N!W6jG`3mE zkWiMdn76Bb*Wvw5j63lN$##hd5+l8d>iX7;XM92)O9Yl=DNlkxY*0arGpV#UH#1S0lBX_<|2FgL11~8DMXT!9O>G z?$+IOWHU9*aN3u)|6tJ5(|=Ck+4Dq!D*js&M}gC9R5;p@7$x)7%XtzpcGE`wtmd$7 zq@LuDE`jk8qcF(X$8Cl!SMX}l0;p5je?oKp{)jxa3%RQjr zSMzzA&Z)tfF~5lcXcy;q*Ls(%>-g? zzD?`~mAUT;py36n7!XwhKH$5N5ikwJUiLT>TN)_M4#3)b1bCOWe&M5amgQkEEFW8` zd-%fA{sh(@+@$QF*K-;D)vndeD;+lWfi0p1Ow>kebNV#C!@Ucsc;N;i0vH7#alX9Q z$YSA;Eug=@HZMWVr$Y?#KHMwF>vm|s4(t6nxT1XB0$+9-x%<;5p!oT%n6~Q);8S3G zfh$w|A<7`3^U=LnY$k8xt4MC05bpJauJ%(#F1MG4lT9jx+vSRu9Z1P{orehNw%K#z z&x^xroRrJ2Khh-Zo*R9XRTuiYYeCWDzE}s>ObptVh18EY8b)bWKI{v*&d%*=UX^;{ z+nql9rk#O{s@b<;JulZW*Xt;`t5o4#Q?TMXB8bCsGsQ^p(;vfVtQMwcrqc!mp7|wG zw6MYHrI7J8fkA!Mf6TdPvmu|cz%d%Qtb%OgujIM(Ztm*KmT=7}86|w-V!U&TaC$)~ zO!F+Q$xgj9$hGUOIw->9q2$d9%iR1W2RiHmi{Z(k*o>v?Tc-4#mb2=^64}gs7|-Ol zOY0kc>_>Mpcb(eFlteVX=EC%=v6SX5u@m*Dog&w80JA)2E&a%qZR;e6jc~oCq-=9v zFl!?J@~0|wY-MO83f!#RqY4|rYJXXli~>uhVvW(_WnSX1`u>i#Ki*sYxFQ(9eZr%0 zyxsfxa3RkL;`K=)AXY&BShpw_t*Ybk*~TKXJJPZrp$ zoi#_P-8z4LaQoq$9MynlFM^7_ojZ(cdWTFsO;WD8aQ*D9;NqGUPHm&0uFrsLWSOhQ zS!zqU{jSf)?gt`=T7S*RIBUI9eA#H?g_`<#wO44{(6(IY0Ggq3UkHcmQN>TwGoo5#m6H~Q0Ba?6G<<$@iZXEEr zJ;CrfZdTFu<&WPXkD_$BA}o^bI}fz^av;S8IqF}EEiMKX4h5vtuY#|PgYQd5@9)Ai zmVf9DQ>auTck>0|G53W%veiIA*%2pvEHYOJkJ}T7k``kI2u|U2rRlsm0guoKi3y{Mz4SC7Z@Jx zWwmGq6M-v6`l+iAta91v(=0knwm*BXcclKut#sM~3I_Ene>@oLKtXW+F1FM3uI+*i z|7&;+xW(?_$Id{E=fp`n$#b!#h9DUR5?@g^hNivN1ci$UXijkYv4rDpY%EUX7nzS#3eL~CAX6?UnuRe!*lUKQc z7yWRW zC5DpwFhPslPJn-r@yo}1S-vLB-6)%V?Prt8jRW~-yJsJ>3qDYm+k|s99!F1_O_~Kv ziwYW$4@MvpM~t(O-dUq=XI5FRGTy}z$k+`iv0;br0oIY7E2TywRYqRn6m$ z1r|fVPZxC2*-*V!u5;3u@t)2ZJMv&~Ltg%9GbtqSuuD;>))SNAd`}BBuc@?tI>7DT z-dnWY?H81AAq5TYP|Pm%o@)%fUC{+`7Efopxyl+-e$lA_il1P1rRQe(p7+^hP(S%} zyDa14XmkLnEP7Db2@x1}fTwP=#GcK+W+c>{BHXK`dzWjgox8vX&X-CLUD%V=1hL9v_yv2kZ zoAF`U-kr-nZwj{M@%s%=Rr%h*xJ>t>GPmPw z%2wIO!dh^b_qAv^@~CUIWX#=l(QxkEKga@-o`=uOxz=PV<78oP;c#&+*1x1extD`G z+r#tBGmd#c@cNJy{t5T+OFskz=s!B%XL{VZK)JX+5_D_c!nC^T;|xd)eC1j^{2BDl z_+R_w@`(j)JLtAoSy=;+pJAmr{B`!ed2aLcOx$8*km&uet@5!bbRFSv>e1JmO?8K+ zm^U<-_J`oO%UxSOsaJLP5VOSSJ?jjnz-$(+=Ky~CuopzNt>f1r`JbVpL#f6ApKq8cc*)!#fKH#Lo@R!2Q+sT6T{ ziJRVnu*R2=q)^rJ>FXm*t>qCAy-{2x!+8CfF~RD&{lkqGF{`^gJSR!z@&2oT zajkGXK!bB&DeKI8!a1#?_ zPn%Ni8$is*n?ywTRlJU1)+P)DKGM9xYZDGuYMLi%$?W#(tZ*MZ0=9HbJHFI_ne{kPa z;-17lZy|(Tw;kM*u3&zR!doK286`K;&&D4tf0Lv1?DnZyypQsVRW;dN_QXAuj2!kq zv~+#@d5?W1EWmKLpo>w2F7wY??7N+P8(WcsgCpgnc1uD0<>kPOHjyNb%_09Z{K%*E zae?NsCWwHqdq)|ad-t~;$em35qwL`G<3p>cfY&!?-8yeD zAH0rI(htbl*5f;|?=Ne8{_;!7mvP-zi4u$WKdr7-v(gyG4&?0fW%RBHo&lO;Q5U)L zX5w8%s5@7F+NW2)?=QO_6y4RpgmtS826F=ja<$8Rkn3+)5OHSt^4a>fQI@Uo^*r^@ zzaO@Wu3oJQ9Bbo|?gxLlU<>Ny6(XLN(3`DzH6&*{o6q%gzfGaOxH@uh9$XbPOq9J) zgsI@^n@n#dyi~4kvNRX>(yRl~pDCMNc8^VrE=x{G!{WFA@a)FVnAog2lxB0}v>Slzov)jy25@V+O9m&jIY6`(+rt`(D?Evytsbedu{Zc^&InY#|4SNQdysigJ2oUT?il&z--8fSS}Nd~?!mheWB&t(qj zM%moL+{RSvjDM!D=n49yv>lspW47%dg)E30kRqcoRTidJw8Ze&c$IFyBA# zSRDs*Qx{0?2ffdhKlPq?#{}e?wZRgIQIIkt(~Sh@p-4@JW1^6M(pOt=~L0K)dVH? z5)&8pagq;dek?y4MIpSFqJgRf?OLo;f<*PQ11r_^*Rw=ZXFh3F&lJr2IE~(`3JYb+ zyTNTaELCFS0qtm=LDn6bt!p6_Nh6>GMsu|E_n-BaBfn?=QT$BK?&WQGt=syLQYVHm zVfga6*rWiECJCc)^uDHxnO+)&F@?`EDP10!SMN4y^Qw6tGEfzG=GU7#_Kjz>;G}=s zv;7C%w|=4e4DNyCAB{mX65>yU$6M`#nT=s)_};ied{kVO+^4ECPc2%G`X@p5ANagc zJklruF9D;H0l8VJ`vQrSjD>!(CCj~k>T3D@Q_SgHdeqKt6&ZBB4J4NMZ^K9OWDFB4 z!9g{bwLwy_hr~4D_8g)}zGq7+Ym!jfin2ItL#UkHz-}Rt`U4H?mth|}CECE_i|bIx zi8L_@qX3jT&8--~Kj%$aCu-_l$5th9ALQTE=+O^FQDr8j69#jlR2V_Nw%~-7cv^sl z>FXxLb~`m?d0c(k#zD9m${4MJNneyEzFaYjk6pq;g1I&E7u~Pt)@n2>#bf981V}k; zTmpFckC_kc43CQjSXu>|Gt*}W6I$!5i9aSXz8h7co&7f_Pwh~aQbaohl&g0e@DVc^ z@4fZfWce|-7v|ULi30Yu^Mq_=qKSLncI6A`n^f4(#Yz-RYDGXy=8uh+|SL5BLx%c4vqNXM>{6d5{ z)oUEKK1!RRE=(`vp3vjhcZbk^jj3Cau%7%|%+uSn`&`pGz~!}WWukBS!Tx6wSK&6N z#6_cV?Y&PAqj0T%J*S%DyDb@_v>Or^#=v^tq!?L`;=AH$t)N#;BAp@66Bosb>6^j5iAi{LDq z!#DrXHW1M1X-NF6U#4|f{m!Ab!LDlwZxlbhWR6#fFKuRLWvm?>~0lq`P=0q+^G~+8aYNZ?q^QnL8K7|*5&RJHT;8nnFw}V@*-YVDE z7bNs*o*IswN&(!=MV;-{mi?TwAG66#j~}tdQ4FXtD0w6Jx=+MhT?M}NXz*NFk=m)We&-E|$uNW%z8uKnPyWzXm&G@$KEM-sh%Z%#Fg zRyFIpk#1f}X^ZVi&RAhwca+LD`S3X;KcYEI`%kgT^k%7Sm4vF?9(8-p13#Tf4=Jfv zB!v}5iY+p2Ip_H7tGGk4@Ov0Ju74C|mWLOjK)geLYUh2G**m+impAy5>uz&r1D(5< zPN0#wvCirn@{KMT+Hf55XrQ|EcDtsDuH#4x zQb`D0kR5p!!l4`ryqBi=Nrs`SSw$O64yqh9Jm8zp%o2J=84Kxy0>}fFceMEb&tBDX z{k`SGXVao_w|-3XK|&wg5b@SPO#XnLj1Nc1E=XVmO}m zf&kDhZhOf4mF{C*pr9Qu3j`1uP^vhTHL$ZvV)nTAb6 zHEsp(y*5UCi=MlCL2oZ$elmGKBuks>y?(cow=Q`(eQv1k@@Y3ObfxG@j5n|0IpFJp61wSS!Ed6vI zVO6*`0JWP-Rc33^UPS{8%uOofPnJ>IpjUjsik5l?--mc-n00i^{ihD2ylCf(!CWM? zv_K5wEsrxFlmj>Svo}r@uA1J|RC7&ao>b*@eq8h`+D_JtufW`Gmghb~Zbw?F&-Y)P z%1adgG5Rw8EUu+8Z3lS4&%&s2{1c&_6M3^iZcR$TU0v=WC*xub%1#z@?o2~`>XCLT z_j?fNU=JGDkWF3zc~iP+qlwA|gt`tO{Hs?Jhy8(cmdn3hu}3rywj$WpaH~ah^XpX?|~4g;+z`c4l+VqG98Y8nDm~5d1mB#=KO2 z*HEOb@Ij^2E&VWVYPhnWM=sbHOZr1TFj~>c!D_9rgp?fweqPaf06Nf__@Vjb&5bnU zADoGbQX$DV%&E3*iA=UDJu%!-E3LE6qJqUW1f(YcgL3JyJ0SSyfM^GMWx;xCN>84pM!pth!Iyp77|&%B5B8f z)b}IefLdo21X-=iF>i|(_Kk)CxjiP)1#ju%EJAh^=W54DiiWsO%*q%v4^m0Yq>uZL z%u4xIpk!Frl;)bodVS{MZKp0r%Hy~HPWcor$ka3srhp`VLS{=^nwYGqYGBl(Fx*30 zQpZjDHT$kP6~PZ1_L}rMxz{7PFbigvSE^)`yEivqAtZb?#g7}c&1J2C`;K`Hz32go zM#dbJtC~`eRg+(~snWMp<0dY)6fcaBLhOFA4h78(wKZ8TI(Wk?-7lVIPYo9bjF#ZC zaH7OT<;sD+W_o9)=@__D<9Mf{@`mm}Dwo4S>cLOM$Hs>FZ&w@J!hP2~O`R(_j3$R> z1?ifhMhiXTMkJCTT|<$>lxw?ShJ3_4wez~=$Yrc8k3)`{a7G-%p&RS)9ZOj{sys*=2@4ExycLj8D`5Ijs}sy(%~Kd50T-MsWLf zxI~&iZj_?9v45yTw|>3DSN?+g>U=LVHaQTkS6=S*!8hz<#gA#z{zXHKcXVY@)G4*5 z*vS-cPgYj$k48c@y1L#=QC@&XfAg`LyP})v_%2#zZcW6Ol~3`FN_ETj&OBI~0t#x0 z(Xq}r?kBv60N?zNOh0$M8a|IR^12f|ZnE};-pvI44KBb(YoRF%Sm_0Lx&Efa_>EQTZ_tB)|6l#uY4;Dq$+(|KS2!Am{tW}A;%tiAboC-k?0HZa%W5ChY*EiUlT)>Qt# zhDX8^UOZkuPKkS^7~Su!)py@0ET?=eY!J{&0*J<;nn=zr#wn2+ttdVBhc-7KHPiSM zOeg?WnqpiR1xG(k+;=~~v4+aW-W0BE8a)(<3LR!;I;ZqEq)n}s9o6C*D1KJoONH=v zGezZ0qO}}9K1$$0DF`p;P$St91;6bV4F;a*KK1VXaBvh$GE+=eLv^D2eel%-Z7W#5Y_r<{RBwK}QSe|dOb+`PkmUS3WWfmFRe_qyz{S*Po8 zaO(C-_L^4elF`}4e`HAm(i{t7;b~KcWj67f-X8q6p1zjZ=voryDT=P35Ezp|m9>75 zq?J_9{S3S*s)h8gjlNbQ!#_(-$IF>T!w}Z@n6#M7&ulYrrEhX)_%9V{{ z>tlhcFm*R@QI}<|5E})zq$2WsAKay+2$0G(w%L&5;kqF4l@&4B}gLAu*ikZ6%=QaTOz&7aCYxcr)PwVK_N1)HMAD79^^kSa|44H4rW}Brb z-hW5Pv0tSwZDW2yrDRM}N$Bqo#=T-efBMJz>%TxEYrz|=L`%1oI8O&9AVX8CyB}%M zqGo+&7ewe7s~C%h##{y4KUCmNHR5z<-O{YW%MAV`ltg! zPEfJN>|ZGT#-mw8@gTdTb>kl)p=A7YFR4NR z3zlX?Qn%>AlLu!2hDV>s?(@?@b##k`Ch}7>v69SF%@&TyB37zAv+~LQ4A7~D7DKd3 z!{m}qLu-G}BBz$N-Y{O{Ez*(8|>xlySq13fo%AjxE zN&|XmGE{rh?+@(fw@?5Qf|A~_xYZ0P-;w7kj4UQ(I;os8P_x1KdkHrx?kH-UDmF+T z`Ue7s3R8Sm7mVIBUj%eSIoCNpxWkcbF9^4sBnE$9d(*_>7)rtY<3AL73m> zZYggmhnplAqE8Q;JY5KymJvhgw|FiW8b)@mb;P3s<-edTOoHq=3{Ws?yhb1824H#X zE7hi?L{gG&=I>;WZN-)by!dVDEX z`JFzZphj{>ufP6XV=wga$OluKBrMhC+iBn%@;j*=eKfxOwhdd@GU_FU?MCg2x+&=r zT%-?wqDpN`&wK@(NO>cbch-fsrzlTSv&+=lf)U5mHR;w64ed zj;)_yfnwPC0GZw9hyhiBTg7gaOW;AllJFZI-kt@+ni~38L&Hp(qoN&^?Kd`U1NGUD zx4r_D-wGJkNc#!Hjv?sNhGbZPptYS6o0)e&nVA#xfbwN={h9-r<{D1|5RRE9SoD}b zL7>EV5ug3+fU~<}ZAQW)6Y=t-VporjR<^(!D@WvWzH42ENv|xQM{%N>=YqW-8n_~3 zlPLlGxl%@_E;oH2O}AsEUWI~Uc5*iU)r2lHQ^!&wtpPm&xLxpQ!T0R)zp_kKdvK>K z>79vgebej#^QMc|(IV$k=@ummQn85G;_Tx67(L?*BNvX0rpmossE%*}2@&ym?72`~ zE6PyquH^uL+`ji_!$@@S!%3&-MG9IaJ@{RbiNQYWx65hLoJW++R1cz3_VmhBfMRHVav}r3pSAF+)(65f39#-+rwr zhaM;aG|uDslvE!2{OgVS2SSRv6p+&qgA#QZA)2-P3qpOU($5S=Ta61}OV;Jd37lEh zodqxVG{AwrQmeE$i(QvMOU?3!A0KzdQ+0h`@KjqN;L(`!k330OF{sTV$FJKn62$NN$S{e>lRF1m^^4LkF>{Lwk^?JvtJLh zD9KNjFJ6AodRfBh&bUnz=5c@&q9Ot68sK&L+h{ndofthU@|Sk+l%k#V&k*np9>pm$bRh|H~>!dn_Q(gC3* zsN+=#XrXV)b|}jtds+Tx4HEQ=-LrP*z2uEsbG*yw%8rcLQzXRwhI}x47RFj6d);Wx&bkuJtNhGWuWH;_FG9J{N-0h+&QspSAi+&2YPPBPoY>Hq@Oi5GK#9dSOE32Y zSgx!usUtyhLq7#+D8~~QI;7G=pAvv z?HSLehk1b?55+c`#)R`LEebEdgPDnM#;tLp2gxtLZ5Y1y7~$C>{-_^q)(5-fSaziI zNFayqxfB;@G01Dy9>!UJE3h!~y^b6N4yU`>x(Jeuu$61QpM>uV2;NkqC!azTVtG18 zXu;n<*H;~zG>H6)m-o3a$_UiC%5WC^?x6Hw(%_q_q$+RE+5w5=VjeIh%?uFk-VDZpKdmXgg1;&K8A2EiF`ohk0tu;*b&OHuFcd)tMxL z*1aEo&z{_pI^rOnPPtroTuJ77D3}NA6~wgJ1Zpyda_h)QJr;?idBsaQOxpnDp>nWD zf7OLK62^-4gTeCQDQT|0kHdqwROXW(I2~n13r15uspChN5j6r;{Xjs(xZ0o;{1GaTTQlVqG-SP3|}D>JLTO3 z6G^Nd7+#iR3bqb`2GEfapG?;@e$7WblPj;+cAv&&JI*Q`=~pMukp^+(g9CXikW(Yy z`x&4t4x%Lq_(A4Jf|zY?Mr#Sl^=*Y@4*#|rr|r&^=rvT?oj+JMX!0u;Sg$zStST$F zOq0Cyr{Q*3%u#qEL5G|$l6pJK^&xA9<3hjhLFtf$g2#~a4odBthGdtgsA;mff*%9z zjKcENVmKJ$y<$Vj?-)3GmL;UdObno2; z+D%MY2&#dUM8P;uIHooEla}&i`#L&e`)3xnec^hj0$lPAlJ{n;IuG>xI;bw*v6=7k zRiI2W!5ZtLnqWMBqz~?XVjB9f+>bMsJ2!P*iFxXPjG?;2?CORZ91Q=Uh#}O59CQ-ASchXVB{gis5*_<7sa98(c3w zo$%(KnWgAe)w0NhKX}#|VH!bI1lXkwgkq2IdRXR=wJ1`@@X<7`E1jE}5J?N`a{=?l zkK?tws_MxcS%;_C9uI0zFzf$Fm9KF2*FF$SKnDeqIz!g<#x`muNsUnY2j8Dx#+e_R zJpu~>zEpKS^*%~6S6+pN`gb2ieV#(lXj8`hH6AwZfjP2JH;KeksrX0mcr|QmC`9gi zkW91BFvBTW{=lbK)y@10_g6KlA1jRodH9d32Dx9}JAd;tx&6D|FX+#U2R0Wh?S@m0 z@ioQ1k)7$v&ZxNc2>n-4`txZ(lb3I(2!&LHsx# z%^L{#2Y9LiNkbZgb;+?TqE_ovQ`E@y-W-;&XtY~bLA-T>0 z(uILR_LiQB)GC&IA{sj*WlkX47hTxuruUBxy^P!?;@y(Wt@43clhyE6edFDngw$(s zJMiyW4&#+i_efBsYsP>Jbh!OHT%cMN>QLl$?SX5^Pwoaqw`&M@33WIc;n)&4~b;!_ebjfBP(w;Q)1lVzDqd8JVL&bcVzMLw=UAmYYJ!8$ouG|aIC15 zgVYhmhg_wciZclT*3@nAmj5a-NSZS$pa>ldJ%kJJg}5prqZ%h9d; z;F`~5i6BTFBYa6qNBx1hL_%EZ2>|f3X5?KnUUUn(mzVOYB)YJaXt4!CRa5z;U^*O5P25W47WvNd|=B zTsFkibCcMc*Ao0JNy4Gs0OY%s2=9uMTM45|BB+sXrw>=S^g(8NlNsNjHb0hWj{mH| zEzPA@j^dQ~u6{{FZuzQO)J=F%LuuyzBkNYG)k>&3P?j;#;C15X+}b$z|HNZjRWm6X zLk`noZB+jV`o>wp%%$53adFtm2bRwMNY*tI-8|I|039mKf6S4u+VDR!t04_;K);

p6axfDqxGPkl<+1A-yep5&Il3b`P_a%1G(5y5b!DT9eI~|)Vau! zHv5q7KeDPDX$IuUFGpaCt#=)E2I@`;KdPs$sAtRnc@#a2r%pFsRBhi5u&HjAEqED^ zu*Q#t)EBLA3szvP&eIzl6nJ|BK0N?SLZDG-T;Iv3CjkvMvTQA zM;>KUg)L*mxBA1m#@vs)+|-~=Y}e0p=z@YIP*ZqktHvlj&$#T*?;^=lrYb;YQ}F{9 z_e`79$qufzs1(D^$4)sO9eO?S8G2wc$I9hzo6=TPo0(jCDod0{&wlB%I@6XN9^_H* z8sT2r+8fg<5kRD{gP!3`xjmMo+kn2w9QA*|vR^3QC%cW}y20C-i84uDrV^@4Q&7=W zMGjlDl^i{g@Qz?hmO%QgAmQJn3*tpnwGk84Ls>6SpSJb>@->cZFu(4-@b8*t+~+qM z@BKckDb8g^q>O?qb1vT#v`8T<##XC@@4=i{uErsXVD^TFaFee$HAbsa64m5(;=x$m z<#eP4Ndbr6b%9uk$IlAK*fa(t&{=2}RY|7~KdXAu$9eElvzIT_Uplxy7#*xUe$5%& zt$fex%22e#XJsHuT5LJ^_|5H>AZkxGY2qdbEGzF_Mpp)V*XQLVbSS9zl3Y;{NxIFi zrr99>CJY_M6NLBok1hh^0Fz=SM}JbAVAiND0#q+hi7<(U;%_u#soIsJb16~Hn!g-& z6III>OMGJ?$W$0Hx8EuzrkGka1TJ zy#ACOhEv}^y?jN`U4ulB;EHSb=roJ{tPI3pW9v+s;Xk^5u5=GFoyCy&+sn{K@C<^M z_;eg%1&;x`bV67IU-8V;c~CD=?j}nlbNuXdyRVgfQyt+G7&okmt9<@=Dtk8WFYs8) z*6B|*%Bj&u@tvSh=Dj}~UR84$=DQ<}K|Jb(nHKmGk~zxrKQg93Zp`&RC+E+ZQ-i>H zCU+l6w`@kYi_??xue&m5-XV)0!k5?2hWym`P1Y2tKN3_uet~|ZUQgKYAK$AA`|2^j z*>e9q$|jjI7IkQrSnCZKRvtM&n?#?oCPdP%T63qSkZNF>-%;x|A81;+Ir$wf<@H==+6tswITGq~PUP=hOA0Ehq-AFnTI1J@I3X zFT2QW{eLL8(;%BU1I(Nqy0ja4Q743|EWJwS|B*iE;GhW`En)cA@MSb9Y~pV6n)W!n z)O^ZtcJSG&ZSeOnlZg{EpM9UH!z4x-4SI@zOVXnb?(=8I$bUVlthu-b<=^_VUbt_> z!l6NcxqSa^>R77KH;@*pbG8cs3L1~g{_@WjCFaa)m-dCu7qDlR@ckr6^)-sO*+hz_ z-^7G&e>u@VAbQL2TtM}*Tt_15WBJ0F;11^>lC}3R7g96aOrEIfRR*G!r{+*8d}Bo6 zby6lh;Z*e{eS;S-o%ENwB*G@3>Udh0KjtAv55M`~lUYMJZQM@U4Cx`|HdT^_b*qOLpG3sK zkv@EPIP4aXicb|i)Z>S#CLB|4Z*8{i27yB{vT=H+jMNc#m*X|N{YC4(m;Fapad>iB z614o<4fd|n06t0;u-{zqC0f>RH&! zM`T#J{HlM-N<_4P$79?gh2{3Mv($v5Pp)3P$+S%@W~hU=xcEBI@^uBX#g&o^tKA&j zg+A$9Z8%WXX+YFTn)X+*@Ja|>7>-1E1{?^f`Bk@kIE|tD81zP9O4b zY*-dGpvpzc4%pkX7(OwL$c;$1ti{Q8E-_zI?~)|BW-u(Px3Ef(#4vrJN9Go`v-`~B z-8eC8L0-B(mg+d-rNU+zaIPgb_)Ba!Uya}C#-VqzkJ^BCt&%(@AzC+tCioWiO}igy zX!PQoJ07ND11P#Bz{|j|)_yvAQCUZE3-%}bhx87KA9P|=lDFA9DyykVG!41ncwGP z^~>=BRxi%XL#6u;DLdEPiN7rVMPb>fVwcx0(DD58$!gzJr3kh*(JU^nIH$RU7d*SYnB>>mOYxY`< zjMMO3?+((m2P#h3;JO&@2(i-qdM`3r*zlc{l0DB2m)8-#xXw^V zG7z~ivN4v}$Y_$M{i&Jzx;AZTx>dZtd(BhJ+@`l^q9RsT4{|%lEOKV_ z`?sX8Z*zk!KA0k70|BJ7w(+0{?O4~6lXrQu^&t~MC@IvJD0MVqxz{G4&fh7QNOoHU|%`~rtA@Rf+!jM)qvf$5O?PtK0zb7toTH;A;PZfo+FSlXkw z(-z4);?9RsWH{>E6>iy{6d}XP%|V*-TB{Z`zFFoI3J*OLTe^Tj$Rx$)c$u!lUkND+ z)^Bsw-x+#C*M#?e{+_I!JCd38;@j7sOLYtzB}Fue(6WFMi}2q^y4c`KQs%r&|9va9 z7jFu!;MnouQ&+b%&SXH_o_Q&bwQ+Aw__##a^IzRY5F96g_xO_)gS#&GQDUqh_`rZe zc@8D^HvzY7Jcm0JY291zA=vH4EkJ}db@VKxN~&P;j{?%QY_t||(DUro&cr6Hi-!uF zK6SMWzVXaGIjZ?YV@mjS1D`0s3YXBqNv)c+=9dHIPf^DM4I1pTvqwh6u@4!yZ z{s^0j49tzJKnCk-2O?>sV1v*Bvs%d1mV#Y>cIhOEZ2;fhdbkF;K?GsY5iSa^R^ZeE z{nX#;hnhhqPU^Snc$()^LXcd&TM1*$cdTWy5s$HjaXt{(;%nPF!+PPGc<=Q@cUg}R zbW-Mp+J9tgl~~H8QiA1c%+*4S$$VM%k%CFwnpLkv?l+oiil94dBorK9M=mu1P(Wb( zk4%Tfh<@j<z;gY zSLfWyy;A1sI)%&f9CqkwxhQ4s)fT+>@CR620J%z)@3gK6)lCE{mXNys>cX6aG_FUF zm!pu6y>o|R>5ts$Br-7xaYjng1dCNI`uo1RYfSrfKIqV?*?vvAXlbsOfLJ$m*=MHX)mHK|@Sy(~5lQu!2Q->t>xyxQv|lq^prEyu7qpICy6`fews zyq^-Xx2dCnQ7X}agzQfG0KI*4Vr7~}F*%v`_AN(VWq2Rp*}k^#Kzb^8&V0_P41xPg zP{-DFK^T-69oT7d4gXBdelzq*HWhzLpl#6rY<>NRSH#fz8Ek!5P+zu)y1zH(E6Am) z8!@&VqUW=8AJEy@^XKNvqrP^z_Vo+deWbnpN)EHHXK`76^qHP!%^i=LI!ignD=8>C zdS((q>!3FvR>01Wsa!;u%n$xK<-}b>*t&JXXvYdy! zf0wuNkP25QY}wNOKkVDR)pyr280wwTxBS#H(Be<|mJz(`%WDcDOG*tV+bV3~9Fv)` z`M;0RK0Z^IbA?+9TbwUEJ|LQWme3cr=wJX=D4xhyum?;FU*2nyfF)Y`ssXp;=KC}F zv$HLWc@yb_)w@{k`?hK+vnWaXMqKJAyh6o*wtdo?a#hqX3TI!*u~AWEyDEaq2pr;F z9xGJot5Z1;u+Od58K>x8o4X&sa!GBIk)ta4GLZxl>sra+d(}8xJiqm4P0#dgtM67U zyx1PVu>3XEV_hgi?>J(9V61F5NbJbt&ZLfLv6IUl>f-d=!W5(1(Hak|L_0Ur^W$3D zE;(Jhm^D%{?Yfv)e@`~0=BpbkJk&%sw9?%eGatNTnlb~(R6*OLP6$2dksFYQp|Bm;!Vz zSZCQ~@Wl8G1=W=}bL(UUbjg}W&&wBJr=Tb>bc6VeBT;EjX?p32r}g$Gp*B$D^!guP2z8mlU2EOd}GbX%SrLRW)aRGR#ncd~y| z$_er9nAxObA!dygAmNh8wAl|S6rEwiepK7S|LCK-J{K%_p|5%Lp$y^eUw;2ciA@+1 zr|~WF)qSsQSCh>4J8-$SXP*9CIbrLJbbee~___e=YB5G}D*+|EnldS7evsy;H!FfQ zDAxE|;i@Le50q^!W-eEc=Mlvi{8azuiUfX0_V%`xvnY~cO9+*Ml-^?IseD7C)REq3 zp^QWYLgZDRE$bk&5tKjr_GQBeX&geIju<|z@nF}4>-uL4SxDLi))K|CSuepV_)<6MYiy03X-?BdB{;3e$x^~vusT>8Z{EzGa zxg5l^!qQF8OnX;2z&_$%@qAgs;-aSU*M&68WHO3%Y)T!4`+KB8`}3&<2tOQta)vT^ z%21}gpkxgpa2;LQ1>f0~_Y5X^BZq!|Z#yFa*`c^$hhEW6hOx#^=qcs8)_uM;_>6wH zl5>_VH+%)uCm4--AG)qkdG0iz@iqCcM<@56q=~>K2@5-Xj|{_Or}|;xUAr%zP0ZQh z;(JF5n&ZtNhpFu^X0HU6JwNoCOPQ9Jz&QN+dv*NEn}&`xV^xz$iLhc@ripjmu9`;# zv}(!^9q?PJ%HA&RrXRzvqzhoPWe4Me`!u0JyJ>lr{8DKK=N_m6;Ft@Atoa9WxplNm z;lzo5Zul>PQV0H_2Nwb#=W~yKsywwOUSrv}>k}tC5(ABO_PjG?=c@jWVIp8+Hisx* z*4G&SDMRSaj&bd25Xtdcn{AHt`aL(>re~X^VS3NUs4kERD{%ZaO8V~)!&}C(v=$;J zdo13=Mf@rK7Uq#m2TPRALC(1v^{K8ehqXN>Q`{zs++q1j-5A9Svu2eif%V_~k^%B5 zNuhLpN5~fct#D~djSRLt1769>SV{`dcFwiAg240T96v9xXZ?8Qqwjxp&dAAen=Q5- z=&BZ2W?g02+~&4$N48%|Bl==`QB=V0-{grn<1Wx_(1*G1QD;Y) z$CTvgX}RG$Y4C~|?d(hySOt8aJo|l|RSRQvzBb>%Je*8t(q`MN{$Ex%{GmTJ!B0?I3v+93>LbCD1SoN&)ug{s;W8)(MrQZ;fv5~GhF#$@Nx z5E@`Zv`as^JAqY?*vhQUncCZXBob8aQ1PzTE8o6GDcATA87;a7mR(|l+0&8GyI%I` zx;0p)zlwtwraDF$Z5tt9xEth*P*|^R)TFqnyC9{%L1*b6@FWXphBA)|$nBdlCHL z;U$&t;)+!=Y5Uuuy=(%L!Mo>Ih(3SeQCZLbRU*5B;$KO?7AYX&A3WU3g}6t0S){8e zGq!8JC*tyPi4eRxnfB4^F3(-17B%(3Ka8cfGoI)d3jYb)sZjI(kca{^>liz9sEnlr>jf>cimXOqy1H|DgY_!|6q zG<$hD49Z{Ff_6sy)bbbJNsL}|j}C$}z?V@pqq%T5;FaVdXz z#&e?8ceCk14c3lGNTsi&fBbMRN@`dHM8ZK#q6;q6&lu)=*U z7cZx$za!`vqL;bK64l(g0~Bhp!{J;AorcqLPwiG>;E!MI!_TygSiE7PL!;! z5{Tk!MVP1ZG({MTt4y` z>-pqX-OO2{`Vueh{q~}C^_XLRG`hdHB3`r&H)Eii zl|#Z*N8?0&I(-_=`uX17F}iDfs(>$h$nLC!n>r&>7fzT*{loXo#QeGS{9KgQ! zUw?^1lEu@}!wDxtfdZ>gI>OfSQCFOP+oHfnKJA7%u0e`$Pa$`V9~D*J&e6n`7m0rJ zVS-3qO6xA%z&3xo_SXE(lwPDi@~RneHz8(L6xJQYJ(}~jM_F){!{8}St-g~p2%|{P zNAMVLbe}h>DBl4sHt8tl_|YG1t@vsSdfmE( zXZard7`ZlbckT+N84cnn1C0C5*QGyYdiZ^-xP7x#TIs$$%ZFV`e0!DqO@=v=5#{XS zayhcANI|(^b|+ZSUX1sa&l|q=M=7{Z+)~K%J(Eq(196ACpjKtQioVInN4AOA1IpCa zgaVoiiw;t6Dq5!sk@@1(X{1v1ekV<7^d^pZcEm=J|PXp7zia?(TJ3=7Xf-mM1bB z_ey_HwU83S$OR_ahJbb}OB|dCRUF>9_^y+qXz_g>4rch&C@F$I1Mi8uJ z-WEmJoX{SvaEB4MSd;esE^g`i#5rP*wM#S0=2HM0r{|IRXAF@@jXnre6hL;`3pA@N zIW<>&;BS>{b1n7$n$I7Nf@H>Q*L=PrWZ( z?(xpsmm(O}q=!Ct3KB|las?_j3%*Jfv2G`KS%V%wok}U5x0hitr>KfHDHF@EPUY2` zGxbz(r=#a;hi$kZZWIf856_{ZkkXYz3kL2sE8T}BpoZENfavL+DvT|umLe}WbIZZ({Cf8_c-QQLYtI+B$-U-?%l9-riZvlkll93EOy4wf3v zDqq}|^fhmG{z*oLL?3wC9$RX$YUsasiV3i7dE0CWJFS0H0+k@eXuPkV`ueOu_xbVz z6`}g%AF%O7HWA`A;j}cI^-n3?lABZFyJS?Lo%UAViG8`O8!9rs@X=O+TmU{g1!+-T zo{r(`1ezw2w!LG_Gr0kA9iWV7UCjq*l5hsui<(-yTvShcmc!cw}Iq zQZg7@}Z7zCQndEjtP^*VKYxfXX;;(d)8$fPwFqj8jMJAQR?R={F~GTeoN_A1`=E1i7| zCK(~xpOZu#pB3Hiri2;Xs_G7@tUl9@n*+;LM&gY}>b3oW;ckho_u4Wx&q&qrlJk{~HRR(V4$dpJA*iOy)7i=Bxf&s99$JebZ z3HnuIhvf%pt3AeoYVS4yH+rwVqOf$ULBbvS9QBlX>sBEtp|`KUWMP`R8@)rycP{w; zR_o^^RXP@pygfpQ_!{X3QG%O3iagUZo{<~Yebn&xGF2~q33nUJJVp{I0|N@?qdd>2 z82e|`DK>QT%C3A2jGfXn)^Gf@I0LG6S~&W(2?2a zmkalMuGzyrqRRe6ypH8d_IW}KFf!2Sxj(l3ntwemhe1JNHHUL&_F%uVcPKo)ymLAl zSx?Yhv!ErUTzb64HjkU!X8Rm1)9biK6P%m-ADQWT0ixJiq;@&*+Zvzr&JuOaCH+17 zkrh(SlWpyH%6{BlX8+$*{@H1_zzZqrw#I~nH>Hg%vDWwB+=o^T(l6;x$0LbXUS4LB zll&&4*{=Dnz0$=++ZbSJfxAaiCUTT&#yNL((Hcy_#5W__l1H8HmXBptYr->u87*S^sI7oH zPf7CJ=97}WKYwJ(+{yY+r46TNRqh;r7ee@>HGhftG+NG){i(m~!XIhZJ!ls`e2+PA zZ4Ft{Zg{*aXRSzI4>!Pw!M&tIjUDuzy|v?qMw2DXEmllOKGE-16-}lENHw=n(i-kn zV>QBeeAr+fo?WDXhQLLpswh~i zHT_*fq+_6T^Lfw8ycbClQEKYoURq4U>tY@m065HHUVj5sn?^Ibt9k5Rp1*KQr1ZCG z0`tU>K&FCr-oP*O0$cGHBMtR*mPA?3N9dL2{WdVC5l zveaQ;f8W&qS@8Yl&1;AS4xL4aSzaHNrmvbcElukE^(PuYY%(evDHAN50~PMy8gXbR zq%Sv>>EWlRRc0=4B%8*@D?$4knML3FpP~m;#cd`$74|g8q)kc<4kmy84IBiys7|$P z;cc;Xk__BeYfhu@oz7Yra{ZJRo7NyOdo!c>@@5ik<(onkLA zk!~`iK1Z70PXkbvn@? zr2U1iPL6|7_%*MC_n8vo#7cIz`(Lz-d*q#@Y))6YXTg!u({`B(K<0cO7w;sF?_~+O zd_m1VeCVCoM*ci%oc9b7-_;ctz5hEGqBUenxSDO!C=ehHVL8M+Tk~d1Y0y~_p9P_1dsMPt9 zQJm&N%Crxs7qMv)8U?9TN?!%tA*y3gJx1O>c>JJXb^UEv-ixnDz62fllispaww}zC zqTg$^(5#~?XX^toyvx=(_Z^Hf2rC1p@K=x9U@pA(DZw*jrsHZ#Xb-8J3y?W=d0-D- zjX9#WnCYoAbfjBaeX33a896CuX&+f7AOvQ%8O^2CcpT3@6wx-zF76?Zx8U&KB%q!y zgoSXSbs+vaEui?fut0b7Co%?g+VlHR_}g{7wxRvpNBlNw$^7CF8K8DSJ9=1JfRIVi zUhj4d=j3Uep}6URrfe3+{|xKSRQ@ia69r?-?U4bS;Jy#*ctCX_oqN02cc-KWj+l0X zZ(}V&Y(uFb5BF<$zp?qyH%I1w+Tw$wLfsJ3+i@_n1$%k#ydq77G3%9=FRl6PpK<_@ zdQ=;^E!BMN(uy12O*;hQ!SQ^1z*r#s;{3-oHISg*jhFX{JsqLzE&xmMX&0;0&id)4 zQc%9T8hr^c56gB#g=4vYBoYcYcWMIm9c1I4R{K!=H2TV<=Dn7HlrCMogSpCPrwhy9 zV{ewt$Iul-*j2YgtgJ= zNz+er@i`%7lOY&T+C&i10BM1Zilsc`$oE?`S)REFlq`q zXw}uNzgSuxIq)eAbgRu$sSkRgJ0)I?4#g`!=e5kq`>No~Z%ejp3qVTaklheE-_A~1 zmVbm7+Bm`LiQ9;8L!r+!9Npc9B^7a}ZG@W3+u+f_H&v6>F7ZbAv?SBn-eMRiQWE$t z!k&sR=TE#YYmeNgFIbk2A)gh@o}PSbFdU)B3$swEVdy ze-^ceJN291WAui?8TYRn!|FpP>Rn55!6FR=^Rqfq8-t6-oyZYTw&raLu7+Jo^R3>itv3_T zLnMDaG*^A}M1LYQ?;rHT4iKFeUber73N@Q73ovVio^I+^XIt&mZU0ARv1d8xX%QXu zS4BY*W$)utVG(7Be=Yiaia`GP1;WuIlq%Sx+g~@X)w=bb@6mE?2{x?VoELLin(5T_ zVGdce#INl-{OhaK=%)+Y@*C~&dxS|$1hSL5fcOgIv@w-aWW0O(3nI$3IAWQ*i`)O? zY~9Eb3&O`>j=CU}FJ~uf3bOqbILZ%8Ri7?uJaAUhj1=-`=4YN5RdgtAZTBIXgc})oQ+Y1 zu*<{#wmy4Ush7U*nEBpP~(T1;uTHEO#eI!pTD3$%|>sDziC8FMuKAsSD!~yKI zoIjIY&Wt~>X>%P|fA7oW^JX4?swq8t3k}AOg#wVM?~B*KFJ<-l{yksfX04S=HNpK2 zu6z2^pL6?>@)I7ra<7RZqX#vJlbPlNT;=-P-)5AZ4L7wl9b`E50U-xxn?2H(c8foS z8_Wzppn4^in({(C+*VvW_dQ0i8yb%!D#fC%Er1Hg?+Hl*=_PhlJ1I@nwi(-v=c!iyh zhjzs?3t#!Ad#APzD}*)4MPPQ(OoNP<|DI?q8w~=E^Ncl}crtg>>}lx&5c}jNroB|T z4pFv9DV&`?&v2M)UQWRZ?#jDg?WaAxk;D)@1pNPil_%Uycsm#0g%6E@f-#im3%Q;$ zK^J%yU0s%69rSMWqf|s}+zxMCRYrfJ7)e|m_g;a#x4DEMz&tElCtCxEcgoACLY9e7 z=|fZRyT)8l4|GH>g_M?FvwHpE2ykH^p5(|Uh}!d+G~?XF=QvNkm;4KG|DGPhJGeFU z7Hvb!kESi*Nx;s6>i4#b7UraT*kMX!WrxXAa9zf7cjf&=`*%0~O$YAIkq+rZtob$- z#U?V=9Xj~!1YpkVgo(wN#Dxm@ygzGNLYaqI5{ymmVdKR=t46gA0|@}QvfPg=14h-+ zsD-v}WlYo%el{OaWeaDr2DZj!=2Q!59`rIPP@MHfEOhw4s0hqAK1(lKyR3hKFsfX# zghn9Hw9cR@a1RgfP=b+XZCUtEFglPdOpFbN@JTTDB{e^x8BAR z;`o}%=7$beU)r{dmCrpU+r%oXYbHKs?>`Vode_0MJ^Q#Ga59rfe2nA>Kf>4&_Xg+U z*)N4VA8$^{cOay^g~g148nV%B!;<^W7UxWap8ZX|L3^Jy8ZFvO2aEy0e$r^EtpyWY zYGU^;=Fx1gT7y@P@h1xRc@bFIL&mpWk-{XM#GJ=}D+i`}iXDN0CJu3&rv1exQ|4f1 zm-&>z2Aks!1%<5>Y?jgW_}Vu!*872Cp$N#o`cmCl66k{e=CJ&)IO4Z-4pCGNBYv_~ zSd%C!!P4Tj{Nhu%K5ZZg!A|(wf4$%7O4{2M&4JJmp;_j29giHWVWEGG1=IFF(YFcH z#p-XpO_Ejn4-p{d%W{V@x--qn>bwRM%k&~ug^R6UeW|r+zlTb-qy`<{RFU}~ErtNs zLO3mmIRxOGxh46@Lp!ESrAVEB;5%W%X@`0p}mh z6Hkq&Ufa_eF=8uY-O@ae_V(sf&5p7VeN?qm{VR^qoBcv}#2-Co^ny*~+%u30&V>g0 zLiJB8UpZ-SFF9%Su#0v|6{RH8f3^~YJaabm-L`>gLg3E@oqi+Y|3 z(DooDUXiY8w#LG(qvKI)^Gfr0^G}=Z>VQ3o8n|pc2xo7(Lx?}BAbuzoZU;$%(@-C$A_SZQO%=k%??OYKz+`s1~F{`8!78XOIASzHmO%+ zmo@Wo_$t=ValXYW2yFCf_Eqo=ANRuPGtQ_i%949BKCP+@rxY~LvqMO;R}Sf+QcA{z zKENo0qd+%+m?~gEqzamD-n86w68mbqarOGsn_aM+upCC5_HIpx_@FtF#UFAsGptq7 zhL#a}!rCa1>fa;#p$<5v86zn)so5uA{NL6{aH4!l{2`~@ePT4yV8aLZnO-EEMI6fh zbSapll`6jHXX9m|-h8I$3}S4P_KyQaQw6y!_orQ(FwFnac)8QeUl1rc^*UYqMb;tO zJ*%6nfini%Wdml#5BK{&3VrHl{Tl{V3qW!JzYr-JEcMNlVZ&dG0V%0eCXrqf2+2lPnz#Mottp0k4UU4}G@ zS9$B=*^Br0*sr%B-df~Tg}eC4enxn@1a(fD!M@jKnbR&`u=4XEJg+^s&%VWSVh7z= zzMwAUMOtcQ*TKI15|X5)Y1fV~{bkc2^XFHa{4mb}RPqGn@e+F{A~qhsr7NdvVQ%_?>$YLQtGYE$J!#Zi%od7cP2wn* zY)lkWu@!UfEVViK*HfYft~XF;rpygA-tZjAzbP+om&CEuR!+oqy3q%V6D1a2 z`u>mEwUhvB(FB%)7|YoONiYwe|J)Hg?ogkbqD)9fhsy-H?J!lVoniZYz2$8>J}n>e z0Kl0Ow*|W1QqWB*dV~TYu07<`qHi@b6$T!yv&>Q(kj-!XdpID|JIfJaOxD*r#a^^Qxr%YYsmvOncDR= z?-A1z!LY}IQ+L{0skQa?1@Diq9hF;cysf^jZfj#A$4J9T>haNj_1XL@)EuV03M>Ab z`7*5s#v7;f`78SJpE#qGeurRK=)L{`Gk5 z*bZN)`~`vNC#+%Xs^|@~HW9+^XHkI(?-K`hLmp89n)|#5@WA3)22qw{5_nL9;80z> z!9M-9j-CCcdDWnR%fM46o>OnCkF$mwleGoPrL>Mu>V`XhFJ+c%bo@|-t1s1bBNJ;f z&Y^K%>rX0;*Fn&w2vS+AoBB9dIKU;KL~W(gy%M6BgXf=+6>dJPlq+&6^C`=ANG>to zGOD|?Nj;NEP$F^ztsrQ#-G$2QD8!qAUFHX7W5-Y*Q@{SFld)Z)tsRYZCkX z+oJ!*IPuknF_+8GcI9TdL^=zrdSuw;m<68=(=m<3Jr1X8O95Tb)Gp=ceUI8cKzdbH z0+OyZ)T3@Eq+~g^XX0rBBJB(XU^19t>8Nf806$ELen56MV2Y+2}@o;Mc>AjtKpu z5$9?XRH}nyK^)oVmxiSWU+IwNW%NMnMHf873-6*dgwoF}{}m5N;@r9^*5`Fpg?Z>G zs1_6txj!%{V~pK9a*mMq5`3~4=#Bret`rCtPL99``WBae%+z-hGfnvRb;$_afSw1# zLl1_ms>8Hh3>0Ly-h5?mYU5ZBXGv>za~~6Y;Q!9M^BiCRxQ3tUKl+LuY_IqbqEKF^ zd-DvHlDz>|@`-)pOR6wc(B=xYvM(B#@>)Q3E1|=YtcTXI8OPP#)AolBo>k0ee@+xo z^1WV^Bu%$@ki;#DZlFc zmyxt|t6hE#ux7xmvDW0f$EYF0rO@q!VEQHcRoFonOT2wR=9e57?uI!OKEY?xFX#22 z&3x!^@*4HUP@`pG2zCJp>MEF@LHYkR6Xr8d8`jW1O1{VkW55!OdRd~T5 zo@{cQNaUB`VlA|t74}Rf_)Wv8%uKF;MY zj?fxZBzMx$^4T(p=TPj3y;t{^9+5BdKbmU}$tu$s8yDv^_-Vs6HkGg)@Y)VmDxa3a1eR8Np>ZReb(V?u!oGfR5MG(V8>_;0=%O#sQ3@&EBpd$eEusUE*69kpdg<`FB3$JtXAcVg z^Ux(TA^3q%j=|PTCmzJ<7s$so#0lwlid>eL)NpCSpMNF^aR(BS86uuo#Uvyx(m8YO zg-$2ai_l14DVdUwf5ZtFPB@73jkkG(TJai!yMc_2i~giN`e{p)OXK3)ffxFObs2fn zTYoz~rtlrV9x|mLe~54)s5fNtfx>&$ngI7^j;wpobb9CeQJWjQVz2h|P zS}0T6f4%GRDGH_b4;afzuUIqo5v4VHm7UYu2-p~76VtMOmHeqcT*;TY#ph4@6honywmdQB15&QYDhCY zuPVZJl=8}}r1O}ordL6Tp0#i=i^&HdFO+&)+a!s3W;q^^{2WO(TitAjZGQP*@Yl~gaQBtw~FX7m}ecr zwb@1&(BiT%q=1_0j z-Y8g!&j26uz@%o66W>4riuVgiTezXUgK>pLJslmKftF#Od#gdohy_@Xraf;ve^h%BpMZ`|i`Ui)yI$9Z`CN-K@sigveKD347rb z>C(n(WYp`1>*(8G*#9OTn~Np+FY{?CbR4zXqE(xLkm7X_6w5BE$-m=w&l7{rn%FP7XIQfQ@I5xT14>9&RK2o zabtZ=)jpV*i<|#dxFkT>Nrs~2DEI7^2G=w7VPjh5vK$ll9xdE9>|?y9)b^HqcwF&b z9vdyQQ;`dV*d+{2<$Eomp~>@x7zsD9a8WD#^Wir!8wHz6N$YQG!b$lstqQ26SGSc& zU9*djwaBZacd;XLb}MLcsk!PA>aW&IU6V~k(Grd$6x|=+i@yYCGVpOKEF=W_(G_oP z2E-nkzZY(5t_r^#5bMNw`^raNlOM@K}D6q~F$7$byu3II|Dl(wkIq0n+&M zk2BQ?=tSY9&i(|%`@Qr=LBi|Gc9emF0_x-L4p`+(Em)7}b7*GVgJab%*j(cOJZ(`j zt7!iSK&8KJVS^W9gR zD+(_cCq1jXBC-|jD=B>;=fWoix&sQaJke8|r}T|;kF!rpV!Pqamy`Fv`bQ)!=jeKjVHyIyt9JMX}svv1VtrDx!^(6ogXslMR zg8cCGLGhrwE>cEKcXl~%Q$DHuz39lFf`LgX;#nu(?>1RgfDQBd2y@@+UYs?4TuUzS zFf13GPHSFCMP|1FMDJoJ2W%$bRb1M;MaEjS9n?4hb}Y*Liw|XG(&3UD=Ku!HN-V^> z8%AG0A$~9ZOieqb$~DHgS5I?qQ+_){q>*qX?`X(u@0px~O1)lc{4Yr^*p+KLvuj0& z4+BJay7=|@U^ zJ-XyxRHEGy{FA=VVyUTKd9k{!6W>!?HSBKK#_Y1+T76bqG+>h0NFiHWKWn);b8<9r zyAGcq{eaZD@CjNwyNP3QZDR`7$kK?|^HFm8+VA9agZ6HT{48hS4qBjr#|AG#WNi}+ z)*~<^)dHs^wrswl!YtQqqup5zf%}5Hv|%Y7bcnhq3S%ry&B@IoGB};0qF=Q&mXv;v zubB`1oa?R0Uc)~oxx2FkjTC)Sr~A1ozm_GKRP)JiKf3H;hVF{r$agMR)Bji^Ixyhd zr?9qRmAGKdxvs)S5%B=B^j&$+iT0nBe17I9hA+Ne*1gIj-{1d4^FnjPaAr7I3My{a zNGL45{i(adY}Y$7{!-t`Kd+rVbM^8Uvg-MbqB|9Jtvd+wL+NyRZOSRt3?xc<+&!v?Z6D;`*K^S*K;{RyMX0>ri#@gMl8AHReu?{#afH?KA0Yhx zbc;J#zMW$uN%6n}n+%ntjsfj0fM`eW+y!GmVrxS5P45PY`2X$JWWCCL;p8>`56|J6 zf@4ezgHXIXyFPaQ^-Inyi$`?A2^0U(L?ZdXc7*yRpaTkq9K*o$}D6|H4rBS+1=u4~IFt9HutaFJZL z`C+t?tV*hwJXmtgDhcKpk=0cnJ1NW_Fu{EME?B?cZ?doF&zIY)?yPiFb^fD;nOHZE zMS&P8g46c@5?x6257J+9%7x{&?`xrLkW zk!2J|-#tqW`C%pq>=*D2T`Y6gkqg#_dfoB{^NdF)?*f97-fxB_Fm{*R7|LeXhO#2wILJcUi zFtIdC&|l~m@{a#a@IR7HRq)cJUL{oFYqVg1qQ)u3>GZ99`v`T!eCcr1=*{* z?$G9>ZRx#k%&YWX-5Chdh=vG&Z)&huXkPL9v{reF%_ocC6L&KuGI`HRXjo5xX6yY{ zShE*x1B)b$r&NgZuhEtd#jw|va<4ye`ze&!tIdT>P3Yyh_QL~%InIGW9Q2ASdw%fp zKr!fjxJ!9Qp8#EbYe*>J>}UxC*!%8EM1YvrBE7k1QsnY{2?14T>L43bmEQx`xL~~e z_%rpc)`tO`Mu7>PQ24&{B$PMUF?BS2W>a|OZL8lJPv~hW8pb}Y2SiMb&n?!A9`tg7 z^e9#YXl&so?M6ILh99%cr@M*yEbjggl)x!=0Dk-9uD2VD&TY2HJH6}qRuTUn(L&t_ zMcrp^H_f&i8%*UpG%B2zBtF&rN5lQzFVO2G7MudFYSFKaI9jd#RVp~1g?XC)TWE=7 z&S$!S0L{Ix-}62F+)_n}9Dbx68HoN27261$s47?-$az=lgGl%J27bO65*W&a>j8UC z4X}8~Kb%_jWWtarrz*7mzjlSs6dL(?TxceDGs*|+_3{Vu@jU;S5Qy__x7d7sK$bg7a?*AF9HP2PiuXp(}JZ~uR6le!Ro=}32 zbpC&@Bwc%V^35aTaL*hnIJy(8Q_zfJ+xn#SR4J}SNXR5$-y1-SF}^jwM#_<>ErQx3 z@gpZ17KFKR(X%D_SL1#a(&nS{;2&1X&a>cGKWZ{F*%B{YzBXH?z}o2yWuNBw?UitG z;!yI#>%Athmh*3L+_AP~X{Ku0*iVcE1pOdfy_d<((m1w8zglS}0HuxJU0{~{R`-@Ge({A@6BOBWsz%y?F3){fX?_DO-LONa)2y$>Bikn}RtFE|9pa z7u>9;@S6y)E z);x#S!9_Zhf{Znb@aNipLP@90wdwy7TsD~$(AXmF6U^fI#BRputZo4RKKiPlk_M!= zRlnmjIoc;^!^hHC=kcw9NP}esb@gqvz@Q+i?2t8+@RjVtP%OT(Rxvev6z=Blh&PI^ z@OP1!>iO*K#AgX^ z6j;cTf7v{J<-+jQ;UJ(4w|2w&0$|eU-Vr;F$xj<{sbrFIc`APi_Guv$rXOp}^w4iv z`!uvev1CYLr;^m#_Gi#(*}UXf(KjsiA)ScjM>8cdrt28WhOK$mHnw+nU%Y(x4r5Z8 zf&mjo{-{EubDlR-ui>%Rz`KL-0Oy1N8@@bPz?D{kt{q8C_ROHmz)U)Nu%BmCR4pL{ zy=6U)cECXV$SHuYcMS_+2-X-=ank>Xc-3IuU?op-ySgbYH9ecYY0G(z^FVnu!?VmA z&%dcGl$+U69R84X&$K9V@Wr(_l{&8bc39he13#^cc(0ochp6IBPWm9Vn(3-6qZ6P?ewTCKaxDpT;dQE@p68cBX9>T=*Y9i|HV_$ z8^x}}dcWnVpP840SOo$YFNa@7Kb)yQ3C&y%(O@9~t{*XJjKC8^ag* zIKNhmypF(JB6MuTVKEejMP#CtKqdL{(h%dolCwzTySgl@sqJ)r&f||ZN9dtAO2KH0 z;h9%xhalz6uX|M%6jieKkx^Zqc`BV#S-!(1sr$nGVc0a3FR0~A=g9cH4MHCrNKRvq zkTE$x>zWt@$S61x^PS#og%%q|9 zME%c{IsX0+Z1mr*|1fZ88ju%B)vwckk&~3mRlhR2x#z+cAG)=7PbQ;@>fl?MZ#p|A zqMk3wv&(y6QSmc>yVm_JEl*tBUJp>oV_c+G82qY=J=>?PaB`!}1eNns;BqyF$A<)& z+Vqad_s?>DhuO^t@;*r)Me!fX_L!nGhTP6w4N~X$gqO_!9f~Z>w6qS@i8=z%W6DPC zQrf+;lv<1{eLI~nBz-*iC7~xr(Mx-@(&t`;?!#%k-s#2d+ zQP(ftzA!8giq=#3{kh<}MXZRQoAYkw-1&zgh50(OZRlgNaW`OO0&Y#G$rg|g;p`=b z+Own{Yui}kNx0d?O^_E5C=4X#gyVimQnZL{r3)d#T20uuuw@kY++4oEU_e|Fv)5Pa zBd?T^!}fiN1Z#GR*di18J~Eb+97DYfQ)chp;w7~f?)(`}D!0*Kjx=dV$ELLJ-SNJfL+5UDI-jL*b zeDXkvkl<2XAhghaZl$3n=*{<4qdxgP6QD(860x0!sdfJ8bNdE#*i?ga3rEVwc%PN4 zy=;({q!IGFz8-w(M#e!%^2?-anK>tw1Pxb`l9Dfd5jRflo2AtB*p6_LtoRk_S+BAB zLzA*phwNvfyWec}X?@F;tvj8HtVE3^x1DZ+ZQw0M4Wu&Xnx-hzyY(?B)++I1-%Wkh zUFYWmUlj6d88kG<9V3@8+jd>4zBleG2b9gR44Q{~oEKl+|9bbQ!d^e%P@uL&tEYxC ztMdMS%WF*AixOzHZY8w-yQ%G}b2&v#+*7kax2W;q(TFvp$-ns*FGl6mJbEw4?lV!? zqq|@dCu@kc)fQ zov|@gsgb)AVtFqU-6WpgFR`&!QR(jhujOb0qC*)HI%9q0hJ557YVa*LsB5(Q-8IRNC!ZwlcN0_> zhp(R0Um??V9uqg&VnaU6itW8fN1igfi(+kKJ;TnPyi zh#Q{|ZYQ|%cp3cr>FnTW#rgdC&wiH88F>zQRJnV9Exo|IiK$k6E97}iHS*czuPz_` zc(DIM399G>_xHG)Kzm%XLDrHEnf8eKF1|MRD#tPrb+WEMV09-_KYFJ-L3(w8=|lXH z8F?e<>@gG*Xx&XO>rkUpJa#&DXI3aN>8kSC(HaKEcsQNG_d2iH8oTr?Cv7!^X>LpB zMCvK*Jkbwy9eVfu{OyTsoH-`L#Pv(wz_v!_x`s+oXt}!)*IHQcn}u_36q1Sbz*SUM z=Qf` zi}A^5bJE^(_hfQSM_-pn2ZjwqmO(N6r+F{D3Ytd1Sby(@a(RTx;`T0mx^gA37(iOD zDQiT@mMR?HKWt9E(c|R(P3RqmATYfgj5U`s1fncPcXouDV#D{76a& zLhDmWn!F6g;7#?h2}FwAX9#arkou(CVf~HvonVp6%9ni}&Ckxxi2iAQWJDKXk(4Xw z*Pw>J+mr~guAJGS;k$52_Peo6eC>81djzSuVY_YQ$9_aak2jUeo5(w(7Tiw5LBXk6 z={phcy2y6wc>XEjx53k8@3yex%ORV1pYF=26nE1rif6_QW>Q);NijppjM7WV5dh(< z$hpKl4_tM)XJNrcjKMc)EqQ<6-Er4nvBD9}yNDm=uYWgW>kLv?a&VuzloZt#R6P-_ zyx=5W+p24ztnwn+^Zb`>mrCbtKS6>DUpf;jmxit zt^B;T_(|adcK)uk8I_WqU3ZZKx876uPVJc#b;J+J8!S!OGbBnx``j1G-4k14x_ig+ zZ|MO``@UqjDrkQAKN?>mGCtUN2@U#yWRrEOnC{#kdLAFeaDl#8I!9s=wW(i5p(W=n zF&K9onTZa59K13nK>tOnSG9i)3_8e0Nu2gPOe?=%Qq($^4%g50{9P=+-ve}v=AgFG zXU_f-NBKHI?@!PC3MQqdzVx{U^=(G~yoAre6hb<2Fl&F@_h17! z*9UbgUMceNoD82x_;lVWX`I>a`2mBPQGN#f?51$Vlw zOZi;|ABGKFj>qP6fA*b_GjZw!uGTMRX9vPOZ}y(bRdfGN#OrZ6&B1<~i?C}P+{s9q zOUU#kXYCJM0B*@?9m$5+mrdj_GuR^A{W<3hQMzN-d1M&EIabG)y`AIkVN6` zxi@xzN*bXZrCUAJEZU>N4=}$zl8rm|$U>RDOi@_FE%;4-XUxU>=%bv}lNb=c4T0up zSYc~;ua-);KF>{v`jnZ?mo!lSC`xip+)P*ij=~|$_DhFdUFwHc>nPN{zO4d|;u*KC zi5yknr$6pddEZ#$ZRBoXNU>8{qmahQ>G(N~ZljxIw=OKmF?v|dd+Ka~?{lbLM9D@3 z5C9~~MK9u_*`|Mecslc@@tdl{F3roo?#K#-W0XQq@bN-OC?1gPCuAjJrez+@pnhN7 z@!{tEdoP*xlb*b?{}!oT_?mWsnbp_>Q>W6cpy2KIsS&lu3dotXqtArs?Zrh7*~o99 z@B2e|E@~tP-WSeUSb?@y&*p#x2<$t6;#@f7Rk&5|C5O2BIz(>I<`Vyx876_BTO0FD zd(&9>&aEL`d7HI}=GB~;jk>b{iOusDMWQ<8yCV0>_uSx1 z0irK6|l_O4InLs8U4~m2GY>kptUc*APJD23t?_FyENR6}j1F+xLy00~Rbfgb` zP$~DD?#CYa;fsHgQyII~_0$zTHSnEeL-Pi*Iq{M%Im=^F-nA^MOd!tLygNO-NR-!8 z(@LEi(y;7RglCE!^FQk`D@x$6t-@>zHc4@_F5kTssQ`9tL?KvLMd_-cn9PvviTZ7X z+m>AbR*#`5NDMe`S|1#JPmWQv?hcAi)KPDuqMfczIi;bWsD}`#&)=DlCAy6H?!@g= z)x(}H8S&&C_w89d4i9nzQ2UusM35bx>54hI zv@_E6Zi;Hk&opSKx(4LiGDv%WYciL?H@-=qoawkQ+ zF3>1(^^2L^3YgV3fJCCci7hwl@}p^J8p($r_kA*=U+28G`9~{sA~|Rv_2pigS8&P#x#uj zv{m3ed%x4epmZJqb}twa6b=zzhlvAtz@4{>-d?vPzJ>b#;7KgqYhT08=1T5W6Y%*{G2-MiS}(<>zfE#j;g z?4mv#cMaxmdq}j3Jppy&6-`m5xjjtlYb9wWJZQouEDPgH>xb>%)Z{8WSw{&@!c2zdUhl2Ymm$JVZWS5rlWHg(H>_DeO+okm$>X?Ui z0ha72g+_`lzT8?@>kttc@v<>Y74!M}w*3<+4seL#!dj7@|By)he>69or*Cip4*Tog zNMY^a5CQv9z&$rbA%+H)bFW?Js`U5TwM#i-zmH+am2(wg zFCAxO%^?BB9-%9Y3SD-f0)LfmYu5ETKeM7P zeRh8<^BvI3`gbmR<7tA7vm!rs>3mfDd3boZPRp5Pzu$6y^bU4c{Ke=E7EgwNipH~B z{)iqd@dF=-ocu$B#e7Jn?%40wW1HV5_YM4fm6eU>oBpI*V|mS{)#oe`%}A2h!`=M# z`(4JN8=wd8ffkAiu=4vRu{aA$GkLokf1}gagaO;~q+=`;)Nl7ee5WkFQbi>1Mnd4J z@fhwVMWTc{tWw<e2oh=jMuWsv_|g54MImEGzm!yAx-@SzUwo1@oJHHX2t?C)N_Y8`8G3-=#j| zywL#u!aY_SY)|B4c;XMWzD7|>9atTVKbvT_b#%>oh*}}x57tG-+F1O#yRAWBdjxR2 zo2W=RI^%t?S3a~`!dv;y!XD~*CE&Pyd4XYK)d+MoSZ7IDsYi}_uUS!y8eh`E5PzQM z*`FgVJ^|)!MK7!NZ^Em;&ZJfw`69L6f7hah{!G_S^FA7-f|7HG;m^rgi%8~mmW{v~ zj5$t2oc31lQ_asl3?m0Kl(=b?=wL={xm~uor>Eij<**do%C^1fx=P$wJ;0e z_|SzMm>eN7lG^+OhYoct(64eX6%2i#xHGICu!f7UGOySy(PqtUwVFFzKRj$J`lrVI zIjyE-Gh+rMNd{^kP-pV~sUm3$rHO_baN8RG+1R&z;8aPN7p%3dcG;Q*xsVA{9NRhe z4_y+67i;$+*i7?y_4}qctYH7q47c?*p2MNi?-fmme7VKbbE-0hcRpr6Or;RX>*}qSWNGP%@H-9Jg$9tZM=!~X zKrJ_9Gn7Wx=kl-2jMYIYh9AC{gdwY)cKKV zJ=i-@T+8!zAh^VDEW6|uX-x~gWB!XA-%+V?$AEA1-{L=CN+V@!+!P_`VxV{u3Me>+ zNv0v!~pLp@2TURtfZv1 zZlGDh%TwU3#)>a>3!gbE8$!Yf>^(*&u8`@DdPYVKPGHfohNvT}EXmfj-tdThUE|MP z?=4GIPhaxIyw>6r!|(?h|E5TiKe;@m{ZhC}dobDHZ1{3@#TrXG_uJ_jGBx)OvfiO5 zEa}Hj>QtC%Mi?jDMJfGxGgr^d zNm+)XSFi398bIglwuV##bx`lb-7|Ki#qR-l#q0i`E$(Ouy=fm<*mqt9lr^kDO=HL{ zE6nuR>9n=@>O|kbpFM2K-rmV6uv9kM-l{U<$MYQidYM{?u~d;pFul^gJ`F9(^9N!j zne5Y`qungqD)5t&FykA8@NsO)7MI_QT*K2(3F!iKtwG73!A~+z1M0KkM2ofV zJ(>>Jjf#z<;n6`hQ-S46u!*U#-eMI;!{q>lLIyAJb5Im@AL2=Diw(Pjdew2U1!s&g z5F5J7j1KJuD4#u6yy_a)xZfouhztaq|IoZ=x8lwabgjY~z)K$$AB2p}=xM)u+l)0{ z)O{{@ar;q-Gn3WW%5}?^NdZegMkUt5;?gjfT74t^l1*vL#u|FZhOi0Mt)Y+peil^& z=Chh_zH=D%xI=h}f+G;eWyf8(_Lkg+)m_ao5!#!42anhvyy;5Zfjm9W?>DrSA zU-V_yp%+u9EpPW>pKPlLjn222Va%xguUtx8ryB0KODExgz2F2DH0R_wU65Nw#M6F4 zfs!Yy^t5+XIUft9DdKj-Y**iJf4qC}EYxsdR6GHou>iG%fRZfQ?|$!Ek~ zIUSv_2w-Fl4+MHhS-Ph!d|;l6pA+H#jvh|%qU4!7~{U? z@wte=%LXTnp_>mC?nKj4y-j8<`w+@Wu%f|}EVTvF&d_apc8P#A1-abhR|Gi(_&}`n zu&QnwzjjAmxmEw7`${KQDb#H9fm}`F#I!ZI4b(uOmfO1p*el-7o?LlcLVM~9b`No0LB`_< zFH{)(Gf`YcJ)u*Mz3f&OvEuDbP1QAD0@zbE`f2UL@g=J+s?N>n(3m4>vpFi^;g{|&MdvwbIXBX3;fLIdpkAhE>)NBA;su2G-j^TZU2cE; znXC5Ep7wYrh5ShQs_crDIN51ICDu#^NR{O+%GWkKM0UH+Ev9QcrBP0DUU35=NF7R$ z$H9!`Fi@zryW@ zdcN~?iGK0{(8=;>Ui3KVJFwpgC5z#@^&@pW&g7u;NJjl=Qtk)C8(am;&-q)v*}Mg% z%iGc+1X8ux&XN~G=40{5DE4_UA+{D-*^)e%fN~eSdOZs7qyP?AZagkhXb4J6Z1&NA zmJ2s%vJ$7hCn$hD0w7s#i@2EiTR|fAk&C|H(zw3_mVgFH%KC#y<~9+^oAVSXKYB?? zObY*+98hNU0PEY$z3obId*b=@Rt~=6+F2LFabfMk5PfeOUs@-O|4#rqw`ut4zxVkY zU-b1NWDn}&D4fOX$H!C_;&a4N1^j`(_??y~s>v!I(e-wRr!d8@_^Y+fsNef-Tc>A( zMKbk)RFKc0oB>&Q$u*WK4$8VYYV~i{tmlE`a8-aPUP(uSmU#qt1inXiLIwV0?Bb{_ zIt3a=Mp_(?Vw+j%iZHXFz=K?YP7r74JL`D5rM2y}UtPsce!sh35ukZ@z1v>67 zCw~jf#navd+Eo6d0gRWO@M--eZ)+xqu#+!FEqrllJ2PNyZrU72PCT$RxSkz4RlStl#gqUbd%Gkzn%Z)U zyJIpl9*_1FN~!Bf_w@$w-}J&Ee26+gizF3Pn~%+)zgNDkCCY-j`=`rm#Je{Hskj&V zrrgQUsa(cjYr@r$v!-?B_da-9CC<~|t@AW43lF<{At4=|(Uu!XTEmPdz`+FLoiLXL z1&Zq9Xi?Wam0Itk&nI*bu*G{bBz#&LF8Ddw&ff8(IJ4>7=8u($Q|iR69e6vIdjWUt zy%pPJY$IXzqH&`n>OPcH@6o^0(?gXC>HMGE$fhGCX?#A{XvZE{6If{sTi2;Xw@C)u zj2$8p6dj|)#eM--`)Sh7&QXcsfJmLvZaW$?0(yR)yhehQLo-9Ksh(ayn1*_t-n z0)RlUqEEA_lURlLneV>Y^mXaXZ{!xw>d6zO<;I4sqkd(Q{chYzPZpqW@~4Hq^W~mL z-}}mbjW++e0?6Mk4SjI@+v={CO!;kpFMUnSkj=nv`Tla5Ce2}~(M@B*c3{CO+^fvV zqu1aj?Mz>L|AGyvT#S#pL_O3gnN@Qg{%P9zmTtuY71eSFL56HZRTgV5t?xP8w*Pi4 zg0xK(m7C0}RY=tqV4Uv#Vvw!idUFHndhJr!JX}I%TIcj!J-eUl`*(x|?!$?@Av&`c;fNP;53{@CDI(hC>wD}-yx z?jA-yyie~}JTs7-?{8Lqes9pXCE9ni&;OEP(+Ek;uEf$cTPM>x>(lhL#n21M2mOa4 z=7aH0No1Xb9m-Y|(FYY3{GenC<#7)&jqtix9kozzpfV3sG0qEFT0e_AUA@iDaea}A z;}XqSQ&U}!NNvd^89Hk@z4P{9E#ZxrhHi$!a+2mLXo)qnBU3~mX7&Q|r*NwYRv>G) z8U8&xm#21J`F|8$hdlSs5Xeagvodm+W~q zCCg3~iqQTKvvKq0{w?AOBG~>~lr*Yu0-wQW)J^#A5Z5j)qHY>4W-wc$cGf_D|xp zdKjYodX$bNKd3k4L)>U9fLlW&>mZ)YQFv?(O{AjNib-hrI%6uj%P zqEQJ?V!HT*=39b)VOLic2e4A%i(R*LG+8N}K z!4;Vm+Qq^p7oVIy1}SuJOSuJo1Je*(7~#t5Ta*@QnH!GBi45>kiB6f3KwrR;Me#gzD6bUj7M$O7xHvFQu^gZN5 zqg4~U5?HTn&>}0U45R{~&>l~Jrn%@=m;amHtB2ci118_gOH!wnmq~D(=k^c1HrSQL z;v)#!_5@;?!gNhJP3AM}pAO>S7cbj%=01PT6auALWhs1nS4{g(OPOIy4ah`5%iTQM zGWQ#ohY`^nFb*5pzk0x_81LE>O0hvbC8<%aNg&+KTGr$7*O%oRt>P-ab+uaG7<7o6 zmo2IK=|Y{_Bbp9x1J0a~P^a$?ie}Is?C(?#fAg#VZWg*#eIY#$^)&jpe+7Xoy#O0dt>X)O zz<*U|yR6phUwKCge7+Ue|NC*KfAzyFi6bi1lbKPzA;E<^n=7BCyWO&7(2}Ef5?|;V zQ>l4JhjK3y<`#y~tCs0C=ryshyGe`I+NkY5-`doTib@U_7WN z`8GDQYg30^Qr^8ebhzQ@a1-b%#Jn)6{Rt5SOZT?h>5fqrZU@S+12T#9nwn1JEui<4 zzl?$v;GO{KdP}MXrGk_ZQe{QSy08RUR-@ph8_XW?-lUC{sW7)yJ#2ZRXiGw~eTKl* zP^R$j$m9+gAj^hMgA1wwn%YPaP8wTol>1?N$Y;-&`5|~0UH)xcHdVlOnt8#d?JPu2 z#Q=_X5j|HXeO>J5vCh>^P&l{IpbYCbLvp(BF7VR8=k<2fo2wx!<-6WcC!7p^aoH^G zqBi8FaLyCnAzEb`frqrI0BqSryMcbIiT^;>N42($6N5$E)`c(NzLm-FCXIY}C?)bC zS(qf@wlr&sYQA=oq34`oKO@rOqOf?+xbj7_(h%zYV(PI?;`v_%QgUG6FnX7Mw#5m~m?j@^6)Mha-@>hNuo^n+Y?6peRGXm8I{K z*4x?J2A-?_FEaJvQ>E;!b?2&2|3p9ZNS!k8RaE48#wb#c+B*}%ai3wtmc04-t>#5i z1ABi|9zg5I8)3ypdD_9ghqwQNm4$Ngm19|I$7)6Qy~_Wf>N%4yERUtpC>I`u1Pl7Vx)EvKuLNAayXa8BKSJ5BIN zQM%308L5dp)j$ypdIf9e3uFC5FGN=)1+hW9H_aPz9!jSRr5|jRzZ?LqhAagd`EU6d zr`BZtbW=x^?n3XMsNCksvXk39iL^e;ow>vjnQuVCe+;rZraw*0p=wmGTnN*3!&}WlFkwO~g{f!GpDQe$y@%3ft!w+V zmhWFW^#i5>4O9IZ2Q~(3UOTXaa289cD}6k6SL+tB3mABqoQwz7byE$~!xE6<#w}yt zys$;gDdd3764Ul#x%ImAHBy#`q}Sf{7X6!fRslE_nj^k&B|mJ_Fr>ewH>6~N^JD+C zaYl~Z`#xF+;!x?swOIPD!=6A+yg}$+U#F z8>E$kiT(`(IImNdzeRb&VRBcokVD*(U;i@tme1t5dQJk_VR`@hrfOD0oBzfXqV)5t zBpIF?ysno*>;-zreuqZsS2o@e&(#AL4N^CSK13XZEz_%m>%-Xz%*z9SBJDjz9LPl1 zWFnyra*Rf+R#T6!2U<+h%hW01W8@~6q8DSB?|R03bl}#PP+K_usjpAm!?rK1^i0Kg z_Mea=jv6Q}{4ubf+TCOd#FT`^o1tGsZ zaSYoNzBW?w;W9i~|LlypJOYf1k6Y{ySttVuBFl3moow%lGR%f3s=5#dHEnzPG;4vm z3t3ttB`z^1P(6;_(y-=>APu#<9L|%M4%O`vxVy zgKy5amb^gcOD_555xm!x>o)7KhQ3>i=vrckcTsZXlQIBD4qRvnL#yLaF&g3|`0+$f zgcLyq0;cHV7q>sG3w#A<)#yR=&u zW2yOWBog|7O$0gXm91h+7dJg%-066Ep}_YIbUd4v#q4Kh3IZy!f!P1K-;Cx-GX9x$ zv|WDcWjfk+UA-eM*oC*Lp}F3)A>C&FBU8K&=;+LEu)1+MC|X{c&lMesi{#;jwqM06 z)382r%rJRK_2k#-8>&t;HhuBhq%e%dG?aj~?orvCqqw)n<30I?WnhcBJP@sEbv?Xc_7bcDQz+CSAAC=7u zk^#U@0EA$ooweKUAB3kudv8gU4l|O=Zj-e9q$ihnf81(uqda4i^!ZTYPyvulVu%&3 z0l09^M+AC&58#kX0QEJyJ-w^>Uc8gff8%f$&TK?LMR`y}=EL;HkY6V6#)4hVg7>Fy zja8^%tLAX|4*6_bew&eXQGQxtON?A(%^{ z*KL6jKWQ#AfP<(!d-1zD&GoX$F?vFveuDDHj=C*;Y1T8ehex+_R_*^X{J@f-m4b*d zt%**}?K{HBGFNIcV=g(we1Stc16$I1!krCiSAvpC30Jd(_og?3IHC%^-^@h+=FG%! ziGp&_+Kg5a-NinO0j(&{jzBW&M+pOF#9dRE=0~4G{6UxX$nbm4+8B=%* zF+X=mcqS%xtwJc{(xn6y8lQjA>$v^?|EOkawFndhzVXG_>ig&8)zj1ZZT<1+z*`a? zeuJx2J{fdG?roH-Ano>vfLQ%xT_LsQHWr9KrFj(8>>8tE>H9{_VRJF&;Z@9T&^c!q zGvLwk09jVRj0|~q&P?0Dp`Ia5O^aDrB?0DJ_Iw9={q(dU%2=*=qf&kK+_B1ewaS@A z1j74e>i7KMFIfw4gEfrZ;9>qCerpD zT)FKh;c6oAOd$L080f9h>=W7{K9b-@E*k$Gy8Wax%<|2X=P(UV=}vRbWAmOTs^L`x z#Z!w*Q9ZW~Kd3`{fUq^YG{%4m5(KCDHunVR`{zUAr3Ozur)X zO3a+yN#%`G?hi)5uYFuSY9s=KKXmWczlcwQv*4bHdqAxoOxj?yZdc0FMNSxh=XAHV zmJM^bQ7*)l`GVAgm#{oHLsXNv1DJ0tK(0qNSVw+;cn8Zx<@3QWHOdi3%SApJi;$SZ zws?IWv<-|WRu?`d&E9Li>nPrHVJYXxvOnw_>GC^&JTAArwLRk4PSt-WT%^)XfSSP2 zJ^QjQPPX_GVv?yGbcT_`p<+19&2|=88D1a6vfsK)OGGLH&{yA3YGDSr0E#@a?{&ru75^` zCQ}aa=8e7olD96Cf71z#VgjnR1o$R*lPd$O4&FGh4{x1$<<}I}%2zoXv%`W@zcXUv zy?np8N*e#}r`nJ>q`Wde`gXU2jc~Fl(W(F!64x7{Msute~ zP)JFAN0sRVlKY+*g(re`J-f05YRfk1GzKy+HY}fq{LmLFJfH8g86)PUXsjw{b(v9l zisqgluAFouX~K-hP(OhsgjXliYa-;syPT+p!Y2aq?vP37;;%nv2|(2Vd|(^ zD6STamEyPizud60)uO8KFmD06C;Lix zz4(Kac{5KwA=ASY!qw|%#ryw_eVa?A19H-BFB96yEO#V!>>m#C#mHHh6#c2ns#n7| zCFtrzjr5#KIYAex9x~8EHhFbM6%&UllDD`%r*0arnuXV z#=g{kn?Sn4gzYr~FaoUa`8)HD<;C%C&L*k*lp6xBR<>n$D#YV+dwohvYH56B zXb_qYAJ{YUl<8x~e^hP%vgEf^Kg=St&kD+W_SwFeCNEI&A0`u#hT{VK`ZPfd0*XuU zCS(?c2ljiN*geS2qoSDQ5W|exu-#qq=Aiao1C@VSZxS^sxs%_*Yux*?g4u=FU1_B- zR{ny?uR`Z@jZgF~@0Q+^qitIuT*0Ng8Tzk`;!{JC&Z5hH5bnQM%<;RCF2ZZ$(~rVVnQet6tm zG|Zzc!{EZL&^tt5(=NkK<&^3H&8 z(|~hDhIPlmSo*#Gb9mu0^ZT*IIml*6U$=G;FO92RZ1R6p;>3CBUW7yOANjn;f z47Y!T>pX$+uSb8~_Pblkcdt?Jl0Ih)a}6b{bs5D6Lw5d%bb%#UTU)iA>U$2%1ENN| z1DLpRoptf|`*L1Zz(_3A4ZB02@v-5OuKQO|WKZ#bOTok2s40Fn>Whih`^3{Lwcipy zNRIWsk;_k&7;IxCD0N%q|ImC#oZr2ZrYgH^rKoOlxEX63?H1taR{3d+iPH&j!F@~d>X z&w$``Ta_WV)XVen`yWe?L4Fmr6J-T|IHlMg_$txMbg45d1Li+W5s7-aH(N*XCC#`s zQo|72^z1ygtBVXAVl9uYrefy}E4An@MJ3`sJje>y+ua0oQClb`kb?`u8#i>FqGsUB z>rr4J`7(B~TmS-G^}$tTWz~LgVf?$kxYi&iKhOKGB0sj3?Cqwb>n-rrwLax@x*}_X z&rz-1nX!YrqT47@-izb5}7j5HNjq(g|Z)9oE=Qnx~-WRrALW(<6u^KrC zyRr*+-VX+y2*z*Qc)i2b@FXC-xOORgZ^TUE+rNtGE3D0(N%vqESL%OQU9&}{th`F3E=SzZ z-vbH(jS^rhj7ZCiF+{kSED_}^V&!OCnx*8jx=vO(e;?T!zLH<0g=&|l}s!hq$S*Ka8@32V4DyJe;L?JJ8!Ofzgq>CY#RRY&HW3~tNz_?5-D z9ncd3D`l_ujvKbU&Chc1t*ol-L1${Q3fa%r^xT}%XGe|lKrx`b2~Rm{FppiO+Fq1d zNd~=yjN-1^Q3COEN2$Ln1hP-LtOMXI!dX>iX z-+g$U2B4oKod5Z5F{GAqPbFpZZxImudelgMZO5lvz7X!0 z=vyCPh+SQrZkJ$M%jzO~2i=zJ!i>#5&KvYueYMfQ*Yx>_v_-Ta|4LT347=XO4^Qg< z1XI5m6vz*k7%H`zQYpGyiYW$Ouh%F`!A#(C7M`Em>`J6uc5FT$5b|Q)`B+xKUHWbl4%YrZ_Zp)`qzNB zf${LNYJ~&*;ZnvMEhjb8QeCi%D6{#Wc1}}LYJruRkxvdSwwiU@rnaGVmoNHLX zE(>1QIU(H9^$9HUQ+DcSJ_kiP9ku@mlk_lO+E0r!a#R6gEsWB;76I&iI~C!=!)ZM;Xw|Z`c`bEUk8W7X#g?o&uUO zjiL%O1jKH~f?V>mlc}B(PKfbrkx#2Qln|0uWp^}oAl9r3XJsTo9IFhLLx>CwLCa?= z<{)8OlSg@63fFnfBqziyg=l_QU+jcN=1*O?nCL=Yxk+R13pl_r>q;>A1*ykzE2~kq3T+Y9?Xnn?uo6<~Si24+t1=*elJI^GR zmQul5mS@Em@EvqOk=uE;QWEd`&^Tuhem-)<$C76;8T8acvMyX_Z++i^YczmmBQyH1 z54p1a$rG$Na5RG_hZVvti&qM{FS51xYO?PJ82%o(#WCRU{}4n-``xbPhJbvu7yHEi z5(_;1%sdH}XWEWm%hxgf7u;2#D^n2HLMposc`gvhOaK)kh z4f+j@{1+uw#*ma|9jU&&vy=Ec)1DpymD@76qiv+-QBj${28d_Vg>MC*uG8%Kd^ecJ ztRvDYp$%AQTh5ilE}7tb2E6-1;>ysFl)Yt@lUA3nh35r0WMpry;(abgJ=Op-j2PGE z6;O353R2sxLy2ZDJ*v2CKl?4dK6CD)``f)aky(=I1^7*S?|abpiCO6AuqA+h^~DO!L?M z(4z@bQd1hF5C_p&&D&<2t3^mT$tt^Ny0OxR7akrXMIt zuHK|(>GIY692K-M9DZ8#HrMH5`A~6#X8QMGrG)M8p}jGR66n_ykotL6OJ;24>PznY zL^0N?PU1*fA9GA0jMvMc1po~8PvFS4Uw%*^mUGH+Fo4}}F3 zD4~%wN~T?l=j-|5ihnCuRG5zCC=&5N$-Y+pmf6n4ez^w)L!K_kTmj z-yexS-A>MY@4h~k;lBQ^el8B}+3OC*y6Z=8fpTk%`+j*`EoVy*{KzV5Y4>!YugmCoTbATHf|E9>o2^$P(8^9;u`6 z2Myf_-Z&bDldH|>8{63SEv%cIK|%bu=Hl0*1ZOdciV0U zGx=$bHs)$(u#iHBhVF=wGK~Y~bOVEIagC5`9^W-;FKsJq7I0qMsIT5##9VJ71=5c6T6D;LPG@ajG5e2+xx6|=fX@*p z7TU5fZ`!i`&;Qlx*LsBrjXvq5w(ww_r>cBtFy?{vY2*XtUxM0{aPn-Yt?>I^>R+u> ztT^baR2`GlhqnaUC8{stL7}B#ZX{!WX{^LRWzY)bvCOvxdnT0;T6HF)2eJ{w zzzH%PKBs%0*0^=FO+Ka6`dfzK6N}ck6BQLoGtl=vQ0Xp{kzb#Z(SUU;4kb6L7AdH> z)Um_+Y&D{)W6!XCcZH}Rngtpi6Ax;PWIRidbElgqm&ME5W6zASCnHHO zg}qtn_4`9s3DJviP1Rn!QdCL&z?;7$bs;yAeBEGA-sCy4TQ`OPFQ|ZOL~xDYigdD- zMvb5QB2(MnKZ`AG;o3u~k45)mn5d|HRfK4fF9lOTw<}?^{i?M6i!`yC{JR;Keb;NT~v#2w!m&5%M}Bw3SKG!tfzH$8bTji?4m zulzf5X?Uv@WIrxj+CP4Enr7+X%f>e}pQAu<2c7%qcJ@iG@B{Z7HkOI?SAr>fqd`LV z)GyJj3gi=4@(9#sgt9z@_2z=esKfa)tMtT$Zg1t<2Uqk5v@*{w#QZ(I0T=KQ^nF%6 zi@VBo1|z*o%y(7P!4u^jDi+sZNhX;o^^l;`YAnzW?q>Y_<9uEuUj8)1V|Z9_xv_`v z6}yE!{#-uec5=!lHR_*Er)KdAEi`)MvC31AOG_-gM7~|N3BQK7OO$Vt5EEAUL_Iunn4PFV=UL5I*;q5` zoM@;1ttwf6@uR~?4$~fp`MPDCSs}_E3fXT!nwOKQ>Esb2l@0$maqN3} z&~Gr^$L$>`R4z%vdhXdxF-etQ-c7W~=k%-j@PSSg%hjTlAwxA2i~UE}w!17J z;lXI??F*Gy!!Zp`w*{sK0AUWy#+-cW3#D)2Qm*k1R z9}1=o6Q5u(j^41-b*DH6F8%l&_i~62PV2Yz#x+dlqO#*=m=?(u3u<|Rk-|;hIyd%Q z1U-!~zZBBM{c9r~4Kj1iTlS6<5FXu=A|?nop_-!T7#a-kiqNX*8~e;TZXkkT*&AJ) zatko#Wd+pRdb)BZ?7I@CWJfda&$aohc#Y9E)swjQJ5y{=;ZPE8AFzzEm>4qCJZ!wljM?6!YK@#@}wU{FhYYzk1Xz3 zRCUHaZ)~FCaN%Y!@WH4YtMrSP$3)0%!^Os3rrQjC+|%SgHD?Sr#CtIQc}eoa5LOzp z7nkCD)cp)dJqTzH#)=^~CcI@~Yrdp$h~=QQ*pV77RITe53sX>K56^F$t^AkSqGdL6 z-@q=%Agc|EAF>`j!udJ*c>3|EnB^|KG5r)0M0Gsu9>y%l-1dqfXpp+y*;w`7Nm%JY zpOCY87Z4%l$O6~AENAx;R@^06Yn~LQemu`+_;b7}fQ!RW<3zuOnV}UU^hT7*wAQi@w**jcojUQ zJ?uZKGVz~v9@#*xR%Q4?Nv>dzx^(B+!q3LDtU1n?*4&`4o$mr~o6<85JeL_^qJ5e9 zx!f8{zC48tP{bEtvw#hGPUDn4nr_xXxJFZn%0)%AV&e~p{@ga~DM^|D?h~Y^D3Bi* zoTGLTmEXi9@0cn(aq->I-JV-2EcQk#zAO$;471w&aHb(!Ty7^6Aj|Je#NTWtzNWJw~_Or~!lcU23KvIfV?J-9VBR%fWc$iXo+_+@R9+pt84yx#6+% z^M~HcPNFLN)@i+-*Kw#shpY~2Sn8rtQwsNf?&{^Lr~{K2I_1Ir?Z2_BwoJe$tUenb zw~N%NMRK$mCaFEaoy17AMt$ZoOhzvxWX~F<@90^?*%1G5d`0N@Q3kE$rq+}NI}-7 ztd=a|P={YXyrMc~M|0zpyFk8L3b=>|6J-7}=!zzLS7=~k;J_f%aLlSn{6SZq@~Q)k zPmC(uZ5u8`N~|WmGb$7)D!1~^Q2RQ)^&vQ35~YOS+nAjTI#^8ZkbJK@X5Q1GifV3# zAdlV$hW1k;r13vo%t(S z4Pc+!Q8Afa<8B;{<{VM&CB`;FSE&4*HDLsRW16%Mi)=15j0=Z=8yD5Y``CN6lA=eQ zjF>ce$O{++1N1eZDSjrfL$=+(CGWv$E%`TZL9=K+T!py5xDAd51dLrXg*}DL9e2pm zp8C_By7!Ak#?*vWc++lOzQpy5cp5EXW%{c$IF`#<{!Cb&oJCON37>UL=d5wY(--_`E|rME&j zMx*KDNqJp=N1r%am2Y3#;UkyPVjfI-Tu5(%V9z<^@87wtOzpz5< zzTCm!j9Q%AwE1{&pLR-dg@Wuymqpy^kKpIv~1_9eqX?uQks18 z7fmcDZTS%3C$tH}6>n!eRIFRY)e43zPJ}^xlm^GCl%w$vnlf0H3+f8%xfv|Sq9yI<8wL;cP!5aX_3x%bLu0rJNm$(h>U0i=%xeS!QPsuPakyBZreTnbp_cQdBujr zY}@Kz+nQ$2Aj_V(jh;9{ehRZ(%0tI2vN+2*GBZXVf^i{5j1&zI(IV_8&HRZL*} zshaYq9kxm*NUP&k5bsQF^%!C$t1)grcgw%ItkyJLR)0X-IzE0wufIFEbKizP<)HYo z{;ws+X-MCfK+oE-FwUy}L%F%R2IZyWbI$cW(yAtBm3CANk@s1#1_PJxqokGY)1X6~wqGgF%4AAG{?Y+822ZB!NTlKnw~r z^j(?^D}{ZtWGFU~S$@A>R`UKn*+0wT_Wf6{?)R9Gow-u*M1hgVsnF2!a^9!lD_|jH zqnE_Eywsy{Lv=>PF+Wa(-8_r>=m?n_CMCVgdH$eoOutmW0%o=DB>w08x6CC2s?Zy1 zK?22vkw7&2lQ1d34sM|e&3xkjEM|q_*5j_FPgY6@c5wIn4~#ZukIwlr*f zZh_Gl8GkIqknAV?Oh-#FN|`t?-6Z~U&G=(bxO$|}<2+9($v`;GMY%$XoOa%Gf=k>T zz3H9zksm8$T&R=>aUHr2ixoQvP#AW;DyLzI>O1d=mmIoAVNJ%ZLy#0-0)g0+V@>Wk zifbHCd@y1HlYA@}q*@8g??BF&pAfxlsq&(fOc8B{)f=jg4zze&OSw^2eld!8nvsui zi?GA|3l&ITHUM)ks^?q9K;}Lrrx&ZnEEL)rLTAW#S|&W(dJvyalCRug@41BDw&e$W z#wnD5wZcUCgHkF+z6{afe&y})_B7y@t{chHcpGck2x&!uD92cPMCw}_GD_pfNa5=d zBvHS0J~f+nUU8;xPV%wj&75Z}{o#fV?i#n@(7>445Fm{z@i-GLq#1v@zuABI2&e)2 zrF2y(9Tk>F7v7T})=B7x0r7$zLU{hY{2$gc7QaV(Ex2!HG@pF^c*(#Aw-UhnY3w~ftM?=?5+b@lJg zpCTXQ(~@=&d+aOu`IpO~gwx2v>8}V4OIx)Zj@^BMci%gwA8WCWKHmEfUA?B@!k}VnIO723f2I%8^^2yPFeu(=Xi=*KFa8MFmYLfc785ab}R6 zu%UD9h(A2&op-ol-Q$vrw522|r5BlziDaff!&k6Mi~hEMf`6x$uL~*$1qxDiNd1fC zAWLy3fo{tUv-P5&PXIFd>tIMfIbU!f_juTOk6-sm?tHZ5P<>XExcM9pX@4ax1{8XJ zn+$Cy?c(EKW_vSQ|IQ%AcTp@{^}=YIQ%qK)GsbmPl;=>2+J2^KjVCz-#g2{>15Jf7 zGP0(fovT_O6;z%>W*$7#Fv(u#Sks@4u3N7UlR^#wIEvhXIw5zBELGLF;!T5v4fUKQ zD>dX~`}|^@s&(e(N-iiLN6H~OEx+EjxRf6V;BC_^-_|&Ox%D-Kq~?5|nZuU;@#6?1 z|4PkjFXxvwPE0NG619F+6p^gH{X0wvF=sh=E912`Q!@~Wh%YO4z5k+G*t5i+{cow5 zZniOYak@WnEA0~sik=Zy*R_iU1X*8<3<|W{B7eA5@H> zhc()ga!R)ZxCk1xZm)2R8Z?x@<6i=wr&eZ|gE*EH7iIo{(M!9Wy$h_ekCf&s z*Ys)Z?N5*&0PmxG>$xGiH}WlZw=q8KRk@`+6x8gxH>gZU0+MP?TPjqzX<{l%mCwm1Nmq9$J@51OWvFoWQSHyUF*7Y(WJVV5AMg~c*_Ca(Lmb}LF?F9 z+uFN1D<~RwUssA~U1L=HN4dwx6P1-$d!+Bdl>2oZK0yB+VDTn%0vWcEIsU%RTmfQ! z<)Mi4SBN&bBi zonQEncG*fp6f>>HYcc(VrP4D!SXrR(cfv42>RZQtiZEl$}G=)C8~C+&@Hfv~E}N#H{)K(1i0#39rPq+UR}wRAU*5&$i~=|7YKt>R_SRX@XE{ zeNN}O9r>76qMfl_^SO=YuUbeE-}o2D6i9{|#&fwnF!bB(Zf)(ATQV-kCuinzp3D0+ zbGj9J4(VeLN^V$Q+TFDgfxj=Ca}AY}3N-MEl^)Ro-mZ=9ERBZHRC2qQ8DV#h_X!|& zZM?CY>9879t+X5;TRKj5^7am@694De1<~TSp8&|ZbV@&V z&&JybZm77m!sU0u+F0#w` zC^W@^LSL{_aDVT>3Br4>lJRV#gJW;PQ4NH7L4LuZ~tv~Y`@mXaYZagrrXxt7Jo zX-d38wACwMEp!tfyh?7(I6w2mbg*~m#AvoXZNiR`ba&!e-4Fbv((UC5$?=5;-yeN@ zF-n~rp}h&&{-W(B{rMUYR?cC|k$&H+J{0Dt=jB!Kg+b;WTFVS^RMEC5{$%N>>fcbh zd?9i2aLq{ZB*?Bv8{B#^)9ADzbhR#@3!!~q)olXuYX{zD>pTNgaRRL=E|N|?|7 zq-^nZaZrVJ_eqXnAihwe3k|^SQ6dN|=2_y+Kp%_FWwl+u#8{b8{qEm{ZaK7ZTTv zDZsk6q-2o~Adj|Q<`Lcfxi@|2>SvPAd(}G{LizM2QWzzXNV|_Kgv_zC|qs*5!0<3Mzxq@Vbo%fur zUF;`>O~pU2<5Zh0_~P*OuydQV0ou@1NI{rq_!=LW0J-Juhvb@ah<@ye1QwvXBZKDJkBe92|)!5 zBv;k^7@71Op(n!xakh|iOUh)3UDvLL)JyQ_`qbUfPph!>+O?j-!gpIfi;YDfK^05@ zwExD`rq`LjQnI;Z!BI^Pp%@pRKo-Mmcye~K@w*>)J2g$qpB6@R(=Fv^@Y1TQ-iYvu zm+sbVOnY0;9i~}CYUn#EYmW8Ev9gpL`!(?Uc?0c>)Hg;zxy~t~@ zkOc`e%ck?p!pgEK-_XU<41*ReZ3extpPd3}N19Nq4m{C=OH2aM0ejO5_V_fdl%p^K&h!mvSp4x?%*ew zIJ}HI=FI3Z{_G>t=1~1$F3kass}@JaL~ze-30{+mc;Ln|3oe#~iei_Wbc{=)xa{H0 zlnCNsT+I?%aI3{M=Utn2*a^ykkp=true77jyD+y>+ev#${3_6wUkg-h%{$H%Le;|8Z{${raPo>y0h%(* z#u0PRuw73G`MIR(A6AaeJ7Te{#e6Hx-m|m=6kd`|(XUFF1UTn;OJjqyyw8ok*)d&* zT{4;-VBA^>cM~hpSY1`AxsGN_0$9`%`h86_H1>3KMKO!&_X`O>N7mO5yxGF;F#3e` zJ5?rSUZ8Zpc{%-)`Beh`v@xVeuiT=)Nv>MEdBN)habU!4f^gDzFJ z%bC@vt(< z6uu-e;409mX^FP?M~O{E-qbVhikx!0$-@T;(VbKW%7f~fg?3sK^^pmYbRYx3q#V*R zJ5brhx9KSS=hX=PbFC$~@{W#A{sxc9=7p2dar>i!(zwvg#E4;~DQ_e?qQ_lE-w=78UQ?w;6i-sak_n{u*-&^cUauDQuY~u$GlE zXQy1KaLymF@Vk*9jsb3UnRNIYtzV>VLS8>y4e$JU8Jqy80}==x1jViBTiONRinBff zC}a>TlP){rT$(a(CAACCv2h*3VUoF6Xu-X|T9O%;cnuD|Ziq&|LpLk)e>yW27mZ%e zl4zPyFAcSw?Pxu*vApTzp)2VGJ(-vWDuZKjk=Hf_*(p2=u=B2xUy#gk z^P1pE|MOax6^TG612Irn9jn0)8gjcPODZ#M3kgY(UM}q3e}@%KT*sgFl`eFTyDRD6 zfa~8>ynb(^yxb4{{7SI?@=EcQ2z^u_b~`-cxM9ni9{hQ}av(e;`~rnQvk^El33t)m zPM%h{=RZ@axt)F2AB5|oDzs4$=)*p35&GMg4gM;eqj`S?2Ig&RD_T+qU>~%}h|?Ms|D6`> zP0?K`Po#+cJ5gnsz)j?i-ED;*?DR=W{w{aFx16ZFKd>Bgj%04^vBQS;m=)e^GjRD% z0$aDoiPc%}9C8sI9b&ZpnG30K-CC7j`i7qE(yw+CUB6JAFgl<06aD4fSP##^pplVT z>+}JJ0j*aZiu@R8(vZc~Ne| z_kZU=4TNtq^J}6{HSNOmNv3$srL20uI1+KQ*MEr7Y;(0WZHPP0n2O4wEEK3nIPb+| z*pbq-YVe-Gmu&6XPZp8$!=h5H1bQr6AFZzmGvH2-aXp)EG#7c zM@3b1E==;BH5pfkWF+MnwdOpZxa!}0o7>X!m^|=mWJf@*i|b_gH7RG=`iAQv)Qks? zEOUQTEBu0s{icpS6P?3JYm8i4e>vW+zjE$n9kzy32@-G#WWgDw|D@< z5yj)vK2f`SVT}jROmqeT@!W8THyx}8g34ulg`~kI&RiCP>cmqg#~nCH%ty+d{ybCDKe#ScA+(;P;#6FB=3zA$49fa|784dvW`*r16E|&raFGl!wVo5shL+T#O1t^F zmf(BwGWUF+B1{bTNU? zZL8}(;>cq4V(fMC8WrnJKvO`)HldcdrtlxtTh+C9bCmlSX{3F7@cTNw5}G$EUABu) zHz~CLqv*T?q5l6kt|%l#kxf~ZkiAK=<3jc-o3r;mdpj$Xb(KwA_9hue;$%D9$yvvp zdDeY@pWlD?*Zpz#`Mk&L`FuW}fdZ$)1WUoqSZ6f5{^ktWLvajYJlXry89L@|&s|XT zg#^TvH5tg?&-uVL)J$h3F?@#av&pu>lS7l^XE(NJf@!UmbYT{iEVE_n*akB>|AnK= zKj*yq0>(t6tLLEyKDds4z=EEl)Z*qg(krf7%TJ-ne)TI%!DsjUni8jCM$p4GZ#N}Z z`_2kY2sdcxtK4|{MX&)*BsW^Q=3MlMq1&K{Yt4y6iq`{DyuN69msqckt7S@X}3Zu zJ*JMQ1A5oUp)VW>8TgRC6?%Ew`+@Oml%`8IEU|<&OMHJ~+BJC{c^%35KTLlO=$9EA z{bJzezHiLXt;XDyLnIgW=iY6SgP*%*X6n%H$2%guLdk1VU`w^Yl{eG>WKvb=DWB^~ z_hJ^KWw{aJIb~S5#i1h(FaMQv$6tlmFicX8Csu6Z1 zGx}$KjMX97Oi2#-54;w}gV(!(=c4;QLCOsOS}Kn}u9mNP60Nakf9aL``{frmZ_po~ zF@Ut&Ghxl7$l_eYHTzsb2Ryj3;&dd_)-qxHYpHgTq@VNCP0gQ}FB^8o(cv>i_X&M# ztp8dG>cuWPA0(4<$Cu2^m_I|A7~YeT4)Jrh%G1P*Jm2k|%!Y?7pKcSi%Ps%Zy)8!y zxlNc`kLX}~GS5%W zQWTluZOFu!_Cx8-k1r=x;m)9&0wViOw?WHeaNtS)}>jKNY!snH45pi3M zQr@SiP<}Y{5$|TTSBc~o`;UX7M^XZ)&$!$*U~%nRNxO@xxn$K244re&d2chM5FwwH zl?HOZ68(DXAyZS}QY~yYrwn=Tyc7^vVas8K)x?3kf$PRx;V%bH1!6yo0aVfI>Y+Nv z$v?;gCEEiAC#et~Tp0G7*4M8*H(vzPs{=Rgor~jehU+Hc6DMlPEb@dB$;@xn`-KHR zhU9bkTgh>7eVhmO{L79N)fADF(D2Lus0)*mTG8uCv{64SdQfLoeF3wz((gC+6I#El zDZF-b6GRbHE?WOhZws_pW3C~Vpv2A~oLIjs8PN#7c3wnJLH}Y1`GEk`mCPR^8A6|Y z6ltA!KFw5+`ST+0+UL4Z-se&_kgy}LKDpM|!s1&|4d=3VW^yCt!66jXx2J+IsXgyK zfaLi7Kc_ItlT_KK|7?EK14*uKO?MJD3|`@ANrh;A#2UD00(|dva7NV z9QHJq^ty`Xon6tFYXM0RFKtfU57K4=0v+`exgIC{z)mN5ZL$bf5z0)wujyESZCT8mz1@rbwWHH^ko zH{9Y~&jP=$0gsl+M(}2HlQ6A_H_XN(J3%5%INq_vF?YnH(DMdROq8#vccfY}N-brT z=U~7S^B(tLrYkqWG4b?se%37eEpPhX3RE+r;(sI|3Se8!&iQ*{_cRo!SYSae7Vb+k z2)}QE$w4DyOun0N%_@x)ho*v?#az(?p3c=rsC zlRpM?6n`be@;4ji>0eWBmQRVt7EwxsiSF_~6ujXMDiesBIEi#-oK0u64&D;CW>i{O zZxInw>)S-U37OJ*`gqp#xhRuFG>OZ;VwUeP)wXMwX*Zb{VLpM%+*H3;= z$lQCdjuNp;g88y*uXJ^dr-5z!Yg!4x@$F=;>v%@=xK9e_OzQy(vf5m;jwC_Unwe{| zW2=~-r?`+8yt|$NDGzV>AiUDUa{BZp8h=jec1(F|GS@~A1TU2*he~neG$(H$;@&=R zEN}9-v)v@wzh(3lz&?N!?Z?odrP3H`8 zr6Eg2X}DSasnY50KgBPknM04i|3`u%?OQ>0-|uRJ%Gb_5QV+d58F~v~!cskNb}Ltv zPrCt?%944daUQP_cu>^cITJ7dV|mkkYs$}3xS(Y{2%tFpsb z-q`HC&TL?8B(^5#vMlWf&W^vfE?Dq60dVz)SU$(pvj^lEnqki@EEI;{_s(TR?*vc1 z$VqG&6dOlNoNO=4!HSla3f(h;e~j_i^P}3q9u14?nBk~LlD{UR z^%`^RB6+zC)vhv`avn5b9FKz(e+AR+4r^+c7Nb~)AL#<*Wc%`TRvzC_Jo<5wGJ*i& z0HgZx)lNoMx~O`MqyAIXvODI*Gvc88F0z@z3np0Wb}2`OEg~r_C@IM9j|r>y^hP)3 zw0P^<;|sb;DBu_0A_~>ZdStlTGWS~6Sh+d11oD2Zkshrso;yY|1bX)8g!4_Vb~OCn zTy~1~Amt`ikey8meRmDJ;;tZ+Sumb{m{LVqTs6Rh*h(?#b=&_sW-F@RQIsa+z8c z^KtngU?kG};oHls1#@_Q7`HA-FBeJIunaj)N#!rlS%>If7APVxzmG#nr50x^B^=VM z4T{WOVH_rOo>8^=DSS}vlVns{@n5|&A-0iun&{FjrvI<2WnpL>M>{BJv&_7f>1VR` z@o`-GRX+_N_XRVi;tiXwAIpJz9abbm`^ow7NQtBC*sinqvT5Ttc@N_CKK-HlI)*?# zFRws`uZ(@e!4pp4Bm_Au@yRrcL-OZlHH}4GMZL@*ekNq;yUI~8L(jTXRW%A^y*qM+ zEV)&i``x0k_+1kF2I(;OvAki0nK{MTAi_P|Xb;>E91{|a&t|@@PcoKHd)8#7^(lY= z&tef1A;ZV(;hcoPW|4dpz3Gd4_)M`$?zG=!z7AjV7mycIpMD>9rP<>^sbwNzk?S9a zSyKM2lDW(Ig@3LJIyU-e!n&+^;!x< zCI2m#E27!Mt_3m)v8%gM4f&c=-?>_&c7TAv@}|P@W4fUa+t!lK;Y@_`OV+>{!~l_E zN;p(`Roj_m*I-;AJ&i%%!9h%IW!s)FEEX-NYqo?aXl7;Z_j)RBH0@??} zc1|0!Mzdh?4=pj$cgHlVi5z&_>*`@+vZsTq;3R?p-h2&$1)U-v5XYpBmYtjNxos`& z&oa$rBilvAGQBl9s#JU>ioYkrZd;h_Ol+O?eCX)Bl&@E3Gn;m z=e+Mcn_ji-yen9ZlKMnp$XYjyAjunUj~kTxAwg9b?L3^0&KNfa;qtY+x;vtOS=~#W zcgWHFMgd8PLi8|W%Gn`wHukTa2X<1qnY<4V4+wLI@pRi4U1eF7%8x`V=S4_ww0nmD z{Fxdv5la=fz#mI)sErECxuvwh+N~B;X!p~OX$DPc<=$%B7Z+E1w|wSFW;= z3bsB^8mG@>bkso;ZYKtUh47E1&0qPSKRB*7CbBd&w1EXIUymH!T~sfuRe1Th(QowD zfnR0BjbeHtHr-Rb#-agNz08;+x7NiyIOu9naI*4cN`IksCI0ccd2_ul&#%}-S1flP zcA&6uO2gqL!#mQJq+y(Oe3OpQ1o&``#iGB;Q-htbBeqLqpvF(@R^Cdjm+p^7%KTg? z3YltbJANpMZ7^aN9TsNT=%G_@b>lBX|Ew8(fdB`7_=HO#@sw85>Yv(!%SSzbOr6Ur zB`IsvRPbh;>?nxzdC9TDu8H@6rDEhCvo5IlEPXbo)b1;1gL_=*ByF6&el?Ht#EUop zWS?6yD?|~yv^AHC_<@1RYy895 ztEa%>c?iE3Je}GarnbI}dMZSL5$e2)qdh{Z41}|zhTTdD4w}UY;vvj>Q@}k$>l(rnYZvC(m`j$<&x9lM~Tk5>D+0{3^R7M%WpIS)t zZp`gxG>T2rF`I!h0$2JFzsw%Mw1Ko$Wh?^@Iz_7qG};&`&aKXNeZ{fQOZ)fEl>I%3FTRuul3y$ z<)TZ2BnH+W;SRlfVUX)E+G7tKs5eK6R*@voacvNGFZH?aT6Bp-L%X6 zz%fntoNeB{p(?aB&6yC;aTj}B^>Ku@12$OKBuoP; z*)GFq0}|9){bzEnGr0PU_|Qae?Pi3=4c0L+Xw%SgVEXo1O{sZbo1IFF_r?wEfyqv1%uBDQ#`%NCB_N)YwpEsoc93VzuU1}WB9oog9HOR-}fbW%TTM&{snt^{K`3O1!%tyV^h3JA8%_YVI!-MuUKfJj!7f(ZdMZ zJ6JtdYo06~tMSdcIW{u&LHFf`-wuTW1rqtLU}x%|*0pu!!F7NFQ){o~e8O!@>AR3vb2m9E4`z!&TCnXGv!AC{^ zPwuZ06+>^Q^@qzB9rVKPolsSL{-{k&%v)eEefjHNzaJBN4i_kGO{K`=)D9dRI5lxI zE$q_+o#;Ptk6+r4i5(M7nRl%g!^H?kI^$)y&Bzkx(~QQ?Aqmlx`6(pYcJJ8=LN4!| z%NX{*9ngAr67Fvn+}hLU)2%gy4dGBKzM{dyV%#=xsm(nVmW#X_9qt5ZH>|C;-UE~6-{ldS8^kVh3u8@N{KJ6;M4_>fCowQ> zG$ZQjk7scJJLsr7T#yh{-RCS>zFs3ZBeQONlx%Njfm?_tb4-IXY#CJQJGW;*d!)i7 z|3dn%#-yIAJ41}6pLCk90ZW8a#*URR?A`)N=Hd(fln80IA|SekUL7mMMO)!hh=LRH zniT++8GH&xyT1DN3Q$u|yY3%eQUij??XJ0&~T($M2O0B=ay}spNd<-q=I7+a6cCHtJTyI``*; z593R~+8IcSEkcupqL#V4C&l467P=z99Wu3O%}1><9VIbX{rn&dR|tO55R6O_t_n<8 zQePbjF%ir?vsukF*=IYN!e7jk4f@U5t*lvr;6l|EO4%yC+vZdPXU$#WJeP2g}{4mLMdbyE^yimFlT8vEMnJaTFx!(%U`iTBhfN4@e6V&y*oGN)I`mAH<> zubDB;{Vy$Yb|P@W$d$+<1*FS?IJB@469}Zn!Dk{mj1*}q~4GCpD+qv=9RvjJgbt6=t@vS!ha+_ z^gyBT3z=agH{ zYyzhWL2iAQCyHuNgDVFpqAWPMt;W0;7KHS%kZie>x-v^WNxPj!O0{j}Own1_E*kez zmx(S@Bn7=Y+avKtk&0zO-$i$3UK{Vf(0n#EA^NTq&=6qDzysTkm?p{)9ul>i@LjCZ3vx6|IvPRtU_w@_>H$i7{(-%X9hCjT3(H_GvYJOMt-*HZ}=!{AB1TFAL*%$C>b_p=uKn9-nlx9FL0k)D?bImb zf{6DcXQ7{u;rxWQ;=nYs)&}CwNbbV*cg>y9cYhotf9IU7dV@QzYs1+Ci}nRLlP;{v za+;f)qxfR#pPffs6*H0Za71%YvTXwM7=|m6>6&8?sw@53Mk@1bUEVx786my>8jKDwxbk5@b`!mCtGd1p zw{t$r`p1=mi6;0m!PW7YKBfE0xIW-jZ!FDDIn9%-WOAw*r_?>Xfzry<91HgAMZ6La z>~XNB-QjpV1!?G16-;k4Wl?IdifSDIqS+D>)TdYQd0BHsNHS5tSEq3H-?rr=j;S4|;649b4i5th|CU-uv_i*;H zKUHmp3O{`fJDN_Du?f!VC1)2gh1`?3bgS6)CTOdT!{0>qO5J;HXsV3lzxt2lIVw$` zMY6O+8|~)6YN`0pIFMzkv0hE~ZsqoD^e`HxuS?gYXl}W^yd-XoQ_#r#*j7+Tw4OEi zvrpvE_E=xi8nOP&8?TdLH1-rN@CZqLA9L`8>|S5R719TnyY3brFP@wh_l>CV65;z= z@(zt4bGPjZYs9t43cQN=cLqY$`2jaGiMV(!=@In7^Sfh|u;9PQV6Q6^&NPLAK&4&~ z`&Rc8{9eY^GDA~i2vxj)^Pw1bf%`Io@CgcGJKm{lve%FMu`sC}aB>|EdKNw-009m7 z%dXJv$g0_QOt}5Yt10;xt)}(}U8K}CxkcL*bdVAnf=}xkrp83Vn{R)jd>?e@W`5)& z4QUJ5YysQ*6XJ71R@hpXk$EYO9X{t?=CEA-qk(bw3TbTx7F(~aEDv1ym0>|(-WP9U z88sR0g8VH(>UBVixn*v5YSC$V`J0Ruc0bFFB2)p3gQcFEr|R z4RKS1yOyb!TbwX4?<>;I6V^TME$_5r20KDDp1*(Pw(k*|)+o95vlqiOMh-6nmlHnY zN7iN&d@s}PfWx`k@H8cY8=n3R>h2q^DxH}6YZ64WLeKYihHdr-;uqGc9!lm!b)Mp< zW%H`i}srq&}t0^0ZOp7`mkis95~-}VQfQNA^t z-fk=3_GYWP)7--3@W1G0P*&HnSD%N>=5`<5&HNe)ms1C7E*d-e{U6bsj_)1arW_PY zy103;3X2g>eYSk0OXc0rK)W&=Jxk(O>#r1Xh%$pXo6WySEVW;({;A+~F`I2n-{cd1 z7-9{|Zc(4pzPFIM}_Y+JtKSea%*A823P~} zT}|^~ft=($ezl(9|G<_-nCE@URJ&uuzWY!bsO84z!9RXWyM_$1ew+=N#w}}}ADuN7 z?JwAjq20Gq@B1wZH7EOLs-nHK0b=6jFk*1$ZjCaX6N2vcM|geB>Rjc+gBTwE~rnVsMc9?4^D0Sw_x?2=V`T% zsQeqlk5Xh8hWSn!&+A1Ve^>o#JvV6Ow@5j5!h~GYtCy&15YndmS(de|Of7^k+Y#yW ze&i>RHKyb4Z1p%KHwmAO4@l;iY8`)FAaWA+H`r{QYoQA!&XGcaJPtoT z+McHQ(5wgxoj%45e)nLt|DE2C1<*ljmZ#8g!$TWG`?oJ{dCI1UAbi`Qg-=riqO_m@ zpanM8etid@!;@Y1FF{5kX7fwU8T-d=EuHT2bmF3{)D?F-Um=`TRkdiBhW11BwU3qh z8nu(wrz6u`C$z+|5;he_^tgY;G*$S!wUKTy9r3YODK#{EjXlif*$gs!l|g3J*o`^F zg}NJvBFE<@X~jJfP)JjO=`(tq=A>qWt{UanE3V9@%GwEn&#a!_+mVYp;0*Fq3(u}B z-MO$Gpv)96z-hIjC6e*82Kh#~zS6N9^D%}N&r)nj{F!Q=zOpt=0bG2m3|22v?_?g% zor^x%xEIS7Sy(QEmJsY@9!kISY2mqk9hzA_oUfqzvQrezE@BPhJ5~S1Q;_Id+gYjg z3@6RdQo8f9zmFMH^WNl%+n72;YyNMF>EUTQIUDc`9p&i=nmo1K3$UVZJHL(I9`J8B zJQm zFm8ccakbSYYQF@v+*(1oq&+T&2Q;QUCA!9iP0QQE^rz z1E&DTGJ>_~Bu~MBdql*`@Q|6@1m7;Xe#SrTHGiQZ5vJj%0;xE=ndZ#TZ>jZtAenX)8LtWAI=By{ic?o+cYb*$zeL1}+=sN=Dq)sFb-)jFx`GRIu z=HTK)Vm9z$zmLN3nUkcILg=Hyfb|2{@hB4rTV zf-8Z>{lTfFecHa=rb(`9Du*w(!kYkoH6gnqEN>sRZ1cDy&Hj)6lgG*cyMNIrqxwlW zwpUA_>*5pw{pMUA*mb!B8^Qq%jZGdg-H+#mV63(I5UGnxX8SvOpd}tQpT*M+zab#e zs}MUIFMq$p#lRWI1UGm=C)(yIa`c`)5bKhpFe=hJ2WQgh%mxqY2y$x>8ZX3)Svi+WhdeCHiEuqry*HnBF3O zVl_wYt%-o@5WCOpM2qIaSw@51ve3ikfyobCU3CTlUR(*y$7%}z5gO^GzkOj;8i3ay z>9d~C8gZS$$~QFjJmLO^-RZ|n?n2Ma_!A^X4jv$E%li53-Xpwv$$S~Q)~LPLAqTfJ!!{UpfoT$u{-2Sl1SQx52s zp_;2O3iWl`hb~oQv`53w7Z?I0$I0c3Ua}*5!k_A&ru+Zh-q=6*n@!nm2ipkSrRiF8 z)8cIC4WPk&!L<&khkc+f)Pyd2b}xucTdALI*HdcbCr5wKek!2VI&?Gd&uf&dZ-xo| zeYW>LSah~($EUA`vPskCH@*W*uRuQ0i5|$Qv@=n$z3iGB1Ane4YcuM|8<;yBfzNwb zHZ)EV1&E`|{H-`d;sUL>vs_Kh-UdeK%PJ#c8Sz_FKI&)BFYA_;#8B$h1SJO~%KRr< z8E;iuq3l!aGU7er=GhzRS#MX(hEtZ&e|cVCa|e*toi^CgEqEnE zum%VK4_591)dEHn=X!aTQhMg^-357jS^qZlBAB+6drwQv80;^nt9Dw9EJLaf&U4Cn zJ{r|wYhfFHR0^%|cr%5e@2l}^EXKF+9uW^V-FR_zD38oE8@liHSb zj|l8BJA=H6z4N0)KDyCiR0^Vk0a5c!-0k`M9HeylGw?gW-yE?$6`fs(RKyFm^b5!J zFw``8Fm@Vuvln?n8r`6dEw|$SW!yM#8zzTJ?N?@fe#-HRS_nTvbo}2@HE9B#4AA@{sKqNthikuhQJM z{pnWnA4%;$Hzn|Rw-4l)|ii7e2TC=#~Vt> zaaVR&mUgI9oa_A@Rhao^RA;M`v`GXB1r@8x%=M$Wca3c(4t&d#lpl8+kWrG_aatG| z6^gTjeP;{^5ES4EbOzl@YX!n&E(6_7_tpI0{EUu7{xcKL-s7!Wtn;?Jt=jy~h&w_7 zTtI+dDhG0&Y7nf0@NhKy$=A%W$G)S2Wk{4Acif|Jw=d|(qx(NG4C78e6yX)}&$TG( zHtCf(kyqeNTEcV8o;7~tH2u2Z7?z+!F7z7xE3<7{JfT$4E**1iQ*pUL;w`&c;MHc9 z&9we(Fa@Q#e=4Z>dZ{+t@=Bl3<8!HY1)f!u4~$w2D>nI@|A!8HCm%ZfZtNaOFpbQ? zup$^uZ6(u0U*|5sbgp56$(!r0@4-RSQL5L~D!z;LGFu8gNX$ynikM2INNCNSMb84OM5-EBwIe;Yr(4xrB zL5VB#BEx79%MM?d{&she;F=Y^AYy;j4r`_8dZ;OJaAc-hDmHw#B!2K1$rex}B3&_E zxmVdS$Px-TKYkuc7qg`6Oc8tFL&H-vHBA}WcZKAxcLqDAcqTV475-QYa6Oy;yNG1? zNyX*}3x5VJE`MohwodZX7pXNSG;E=zbI&O+2G{f1MPWLB+6+fE$=IRC>`k08y9&;ctgkdl)_`MPgP3LUg%_vl}_1}O3TEF zoYb8AjoXr|cky}0m|Q&oL^5*obKqLSnED&Yvr@F1*qVJ>sv}SxBK*-3)L73uxN(Ps zq=KJRniEzj0oJ~*gg5|3X4FS3F1%7=7%{uDE_N6~}&(0b&+w8o16CG`b3Yk*_dgSPL&~>z_(InU@%FajsUwsq5vqe@j4vZdX=M@_yX(V{H1v0&U!sDu zP6o*pZlJ4^tK)x#$huEIb2*r-Z>}87ZV4LMCE_~Cl=-r;GX zs-35!u*axZV!^gP`fqFN>ln~*|g$AU~uU-g1B!j&qD%#k#u1-%rXnC%4n$MgPLx-ZGYbp9?1 z0oU!pz)`?>Fh<-`%jC+aMMQ-sedybhT4fS84qI~g8;(VEB?G=^uLqq9>EqyuGWVe7 zU4KctA38xXrf5O>e*qfObS1MU2WJdbXvg#Aeg(NznBClDjclP%^S?y5Avwe?9EZWglv^+J$b3Z>z-QwDS$^@0ZL-{*x;g z#Lt5i7+t798Q8i3Gbnshz1lf_$PMc!J-cavc3++Eqgg#U7`i)YLTJ#(Vf$q>9EG4I zRrH=d1#E2V4e(IwYGm~eYP6{>M}Zi=b<~#6R!eRGg_-^PxKq*YV=yr1d>(X}YTv+#|CBZ16UmeAzSf-b1xxh2eY+diqei=f;0MRrD=s3qj zboz*fk3gE!eyQ+0y+6D*YGKx~p!N356NnndDd04JXD!6Q^?k99`z!gXAp+PCDTfdG z&ql4odf+N^?pHxLVts- zPvnVp0-gAQJ%m+V;n&dk7)IpYOI`@g^7#dp2I3sRH#uvmL<38NwLMv=I^PR`(Gyvn zt?Bl^3;##bfPH@8hE?sZbanOrzDif{ewEEJN}7K%+AfrVpzig--uY{wF1z9x$n)SE($z8%bfoCquygz0;nX5|-G--2r zjOm{hVK#grCz&fE8_>5YBmJJDVY|RBE=&nhbQJmdC*J`Ce$~Ey(m<1#Vk$Uiycc6OtcI zx`rzIJVzNN`_~P6ma2&8rQ8I)B~iGb`PqvzMg%B68u#O*UkDrgD2fO6XySF+GUfaxxjA0{e80NyT2x#>-*z?{mb`|%5vbCuNcZ>H%|mCR$^0*v zEmz7YcTfKVRPpUR>0G9|4A1fAzLEnx{-Qk9mH?{+vFO;#Wa<8B%FeRM8rus)FKi=p z=8t92PcEP8Zl5%|mA@|BhaLY}tx|i~aAXZxvdz2B>7=?eM(tjt#dc~Jn-gHY9K22a zEx{#gc2J!;rKi}G0?Zc$id!Ajq(sV-OO-2GLbXS2DBtxrtYG6O_YI(&9Ew(Qa3s0c zhWW?!V|#YDW1>?Ky#&@3*~&Er@qUeo@rrC9|AIJ2ZyVQ~blBFi+f2Uo{do7LwUb@} z2EJ?g@hg)~V{sMM_X=AN;pT8&KnE+quIK?PGBr_3p=-Gq&;7CvFY&v1B!B7}{Yg#D zt9Lb=i$>OG^CIn680#;TE9#HrS;m6IR?ddjK-7!gpX99S?BwKdeV^U46*i$zW`75_ zU`nZ4F|r*5dr&XY4?vMPY7iP$a~6uXQK^*y@%oXIJR4!NB>&Xph)u)R)H zF%2}dEWx()`Op%U8cu)Z+CC%PNx6=db+#?USjyi@%zle?r4K?FK#L1(9~>|SD$8?z zn`;{V)E@RqB2PwsHM9iz_QuBXU?A{ZJ0S`D$i3Y)9S)^r$eoiy$KEr27q9CI^{0Vs zlB5FeJRdr6qCqmek&%9uhYe`)$%f-it1Ce^HrU=~2&zD-Dp;aCt(A9wF6ZZIn;BOv4^T(A*RVqUWcuRU@}? zV{ebr7^>%`tbNVq za%4Kcpc8P_vKWA+z2x12k%hAn%s~Vt{C%t0Q0A%~dQdnjrJCo$_1f_6XBsIQN*Njw zBv@$s&D!JxF9`QGgZZ|#z1+S{Z{WV zPn4S1EI$wKmOsQvtzJv-48FB|F>+{xJrb>?soCmL90>=`HM;yjE$}zRN8uAXj%e%n z@CS-_Tk0n=N3198G9H<3>PyOgXx&cjJYJ;GOFF;QAuKrLxH;n8&-BOLuuV=_zG=6} ztnf`%i~GG~rwYI>s2V&wphIdnwYTS&M(tr9`?&-nvH*_0UOPSjf;;d>gzW&_*#O7g z8AVP)yNR1{ZHln?xb(Z&>`1QKKqMJW(VV>hc;AO&RyD~5$EsQLl`xJxr^c-}ct2i# zH^~WQMmqKUc?;V}AHsa1~y+`qD5ED3dB;;gFd;Va2NVOjh(<=I;kM<>5sI#q=#VlY(V9z`sGBz{MQHr-UAXHX6=jnc3J1-6s z)@jaBc%`ZA(;@SwsE?y7EU*`I>;@TBqVHw}`&;oWh=yf7a!Yv0ZNveDkL1Gn8nL!` ziP^rOVo*GCiU4$%V5ERkw7_Z32mtSV# zJb`ePV0uKKU#1GwVE$QX9(+g$J|5z7tBQN3SEDNeSPpl8H_sq-f$_Cu{RYNc%j&@L z@ zYNwxxpcIGOev`3xM<69kL8K~NIYG@bpejSH-Bs2HQ|$_XE$glY5EH2Wg#cqqwn5s z>RyCxyfWCVZ&y)#LF^w7mBw>?<@k)Qk==ZdB*yTyRq$~R309$A3<*I<9AWx}V}i@$ z_Jy8zs+R0Ic?R%5>uvYB7TBszOPCAsIy0#2|9Xm zxf5-LyIv~Wq&$L7pYo@MK3dEFa~;Rm?05M)NPlIrCWt>xk~tdx{>lfHa;KIg^VjV z8@@~m2_Buso~yrlcD@hO=@I$sol}`-#nA?PX8*X|1U|=ipNZpS*i`H#C0P_}r1?y; z;0D*Np+T?L#eUxu-bnanr9nEkuebx;AOPqL{U?a^r$Y7jDc|g9tJFswhpvqGpPd)q zsvCElJ-;+A*j^8j+nVN`Gi?W6n4IY*k65W$qlWDE#u%nIw$Igq4z}|)YnV0X#b!z= zU!`8aheq(B*mX;mBMm#~x?H|`BKo7frKh?KJo&>owo~rAl`|vu&%@{Cif!`7lf?V@ zjl0&^^v{`0+9KgGw|KJ7jeoarJZhQ^_4;mM;_hTOwS-PDBYz&q0TjR#E%M5|5_-B# z0Padf5*9l0I;wmppaZ#{+wR{kRElf+qZaGCrZd zBO#`H`7XUW^2ni4LVZdwUH$8;21f3HLcVeGnFd!O)n6jEsfC}`i?hsAGg9oto`VFX9&__#S#s%-1_Df5-)y*!lUtuNe(>R&OXPG5CJF_|5F z`k`GNpMHdoTGMvF5I4Kd`BB6dg8g~2+*aI zROwz`pt%;?nqU_hnbo@Lt<=Z=*R9F6Sd-ga?NLIvtqFm2i~O9}X4c$Bz0fwLFKH?_ zI+X=8+uf`bn5_DkyPi{~8~$5yoAVbfinF)9=4zR%VaB08%WL65r)JL=5)8ifve)W` z`AA2qEz;(UHzK{+yTqo`X8=Oh$-KU#u%a9iLRFbd%R{5r0tl9N|B)12uwWW5t<#il zQgpSq!VKyn5X}xBnIF)d#VcJy`h6O{k_V|<o7gEz?ATk?Oo9+Z`sVlk2RU*)_w(G>b$zb$JSdOSlR8p+nuuf_Jjk%u2<5*j zX}_~R{MfMtVIklw%sYB%Yd;nNI?|Nh%fo}|_1~7dRs~R1I=0>@u~<>wE;vTZ_gX#Z zC@~6O2#_dhtH4j40ED`$1Bz#NZ`FLUT7KDX{X|R|sWpk;nW@=n9jJD$T-5gc`HWHm zd+iKkX~)*-Zu?l8O5)lpdaGSIr4!M9X}1fvMX~BQgH0D4Or??Ql}T88gZ6l3o-Hln zru)Tr*GxO{V?98?V<#;h)etO=(w~NQoppBA8mdBw~3engSwaXH<;i%&qYaxZ?1c6nK^3H7X zNiat!qXF2?MQcs}^E-QSCuQ+0q!mVPNBiq@czblv>XYgXT}G7o>Al{5zG9oA$sNkvKp5m90M={RB<0$E5!;eO z5?CCym;4~oX~D4D1lKjpJc@KHY#m^2Lr^WZ2cp+9gC}<`9)Cgwx$SD{J%k3yFbPC* zOD}YZk(U)K_p`UAo!YH;ZhnmDN7*~bntK4=kKuvvo97fqx7H$+Hq9n#Tzv)0I3urrT7v{Tsq{v8?b2`RiO zpzGHC^WKu1qHx7fu0qvs&v-shm2EY&?K*gl`_%KQ_@q#Kp$|b{Be!I>J`z4$?fPH0 zQU=`{PZQZGtgkXp3L_ba~7AM{zhM~Kg5pH#7ezZWniB=6?T_Z!iYH*Tb(E$@d{|;n#o`QB7O!^Kc=!mP@(YkO2qG_v>%3SLL_Shmal_`57J;gUl83X=rw7QCi^wRn-gWmo zm9_$Ky=a{?i;MzcHma#pw3$^#l(^Pm|L^B$K{Y%QF*#FLX66on8yz;`TMSNSHn~`) z_`dvBY^s!aO*ypF#^D5p;HR}%TkPeQZX{Hw2BXS=LaFiyMzW43Gq2bB9H)s9_Y=Nx z+QdWGJ9bgz8HVmwA!Xwv$Uzj_uZp?tpaf&DDq26&!znD z#_(t^_WK+k8$4DtmxY?-v(&T6K^!qD3dor&5cyUe2e|D}0*ek3oQ(;R1Iy0&C?(5CEshbv*h<0pOlHy;IA>>~ne$4*JGfYn&{KFq(d2dr&S8aPN9C*3X zX%!nEN7Pw6(CUULOgukL{l0MiFt&7w?7(Htroc44fi~EtZwh<4)vKk2U~Np-hQzAZi9`;P7WT_Vv6cr4mhDiE^H}@ zVN#BO5u?hVAN6Ye`i~-r3>y=j0FdOHlDnIepXdwZiZStvNiR_4og>!vC&BI%rgxoh zDw99p2cW<*2mk!HTseG?lT!X_oOJ}Z0Cd}WjN7~}c0)MypNYKqAr2)Wu*T>QMfdjE zUxjgnD61`ftkLo5IYYae z&Di+VeezcSpykNIHM4xvCaJcFiLhet(u-r`=QXYxFVpF2sD4F+j*YTwX8b5iEP1~O zKe&>9s{iFLXdr%_joc}(Nv&f(*G-b!{HR$Nz_+deU*nFqnn?~RW6Jw0rf}WjNQ*JG zSChO9T?9H$<4&7t<*HI!rkyFZ)iMeY@imRa)5yPDSf4?xFBu1bncaa+O|}GCh;>kT z@I?qIoZ2xp2FBbm4Z!R*ec4_6dGrDk)L4Yo4S)RiA*`2^>#~n5kt7;}eS+>Cdz$D; zbBMfoOF^5qq;fnsDA-9m?H>Z3SKWxjagH|m`FUjVB?M)$Q?1KWPG%tujjB*{nvE6x z%+ae^J9%Dl10{l`wucm zG8!J;;Be{;dS0(`mZCgin$y)@;*KQ5_Q)H2D*w+l=uhq!4y4_q)CU+8bDL@i6a8!l5(7ekHl&9xBjCTpl5J319`=5fcO6dSY#*NG%cX!zpk@n*Ss_N z6BdxheQgg+2k!tQxzyb?#s7Qt{6nX6-*4q}8V|?FQ6ttvsZPf5U)*#7oOH+QLD8XL zKdv&L3hmQ8ZJ2)|Khz?V!c0@cNF9^{zR&dl_l7;&DzhPL%iN@~X|Kr^Th@z z&~{?DV1IGW%Dhsy-G_KUK5@_2U~ycm?lrGp`1lG$ISg__W#dr%t6T*zWf~^U-j%tc zemlUQ^y=Nro%y(mcUI~eeyx&H*FN$4JEoWW?Bx|-%7u^HlVg13X{?4A95Dms&3!X$ zH|usgtxF{PK4t1~Mhe-p)ZWxee1$_tl6XnKR9wimH3X8;dT-#0XQ~0a$2ro_Kk!8B zukJ5jMY%*w@rx3pFa5&1hw~E`fPf03I$E`w<#9EfoZ>24nw;D|s_04}XO+_D z{fr1&>s9L$;!ymDnLX21C16ss>KhlBhcsmdIey8qJ3Uk3Mq->cLz~O)9PJb{gg?+6 zj-W?#Z#Qj|J0X;=B=vDr-|zyfr+h$*ISYe^v!1bU=?#yF;Em!zj!kp}k(021;~oIh zixaP{U(xTsQ$$RG*auH@b0SM>lT@x48Pgu5Y&*C3# z;cL9MD@*dzP8Ho@?8qr&&3*e=^@TjFZ)tB!vEgg|Mah&A7>i%j>$-r5mNZ<7$L=8F|7-dXCwhCrY7fkMq-zx?8j2S z2J+eoIGJsY9E!Y0uwD!5?cjbrAqEFnv2(tiIMz?)9zIGK^nSY2EvBwaws#(c`fXt5 zFsEr)16Wk&1A?M{lOkij?F(1FG=)oj?xm_vMY$MXdYkB-bi)`C=TVzO-)N9}%^tcb zqtIgDyWuTcaY%N1@ImX4UaUmOavw}wK!CG*+8ED)mHVf z7Y(28WF@p+YJUi4BRF3^YkeY=GW@;~u}79%7H}!sgAcdj?F+&wY{*Ht)c@I| z($1GUyt9CDvV96V{anR&8$O?FS~3~l2|7J=UFrU7dAAamWY|?;?k&)XNA#4Lcvwj0#o?J;N+W&Tt>%!k`;#1&K;IcC+iiDjY61eF# zBV`h3mnkRwcy6jr7Aw1z-DSQ8Tz^b!cI=P(ZdcWh zwx71IwK*{WIZ5!{*L~V~pOiE8Y&GqmyGyDUXUdP*^o~U_?$$8keMG|>2oDyM#?q7b zzA#X1GX21UU$mvp2WeacCcinjBfy;UMz?@}fiJWqKd(i9(WABtzN?w>k3wjP-3ZGv zz)k-*cUj|SbM3UmyE&2WN6u-c#!bOAlohR~obEJzML(gbtB42So_zz8|Kjvz`3A+H z<5A`mkGC`5+zmM$c7Z7UP!n!4UeF1{PhaiqHAX&uV^9gL_)65mq2lD}TlFGMQRlyS(Q*~8+-^#^+DJkmo%<1X1=K3 z!k%;=Ei6%x>NcQv|BYfk*JNSy1}E;oPCodJ&sM#gS({NnXP(#J6MKa=o~ahwY%*(VCvs#W1D0!CmCw5H%jf~%aw|KjxGDBPAoi|9rkUV*vMv%+F?&l;{ z(iq7oQSFASJAZlC!l1*-XN#AsbDK1LRgWnckA}j{+WW77N9T`>nBbhtYRGbX%_ZzN^9c zlio-AU3au6TX)7FEz#f?CE;fpm;C$lcX)GiH-)yDJ#TDp z=$EY^RfZ(Qothb#-<4_IyCp=mtqxp8kB}osBw^BcCoeXvtfHU%FtzpL!U~WIWwbGw zb^V3E^kFo2&f+K_e)YoO?7{DQATDUt47_`!s(^I zEx9G3_n7w3MxDdkVZ4kL!^6yZD`jM9X4gTxG&XrPts3NiWq7eGD3Fr%>_=C%Uk{nU z!z#3AWlt+fq8}{Z)wqvc8imRHHK!J>l2_$^ELK7D&Z&^dwe%Bo&q%a-FOR$^R3qCD zVU0tXHy{Gdy&BR_%LE@SR`@O>OVfySKgrhWb%be2;&O+b^i5U>=uJENl?^yy_^^w6Y7iN!C9s0jv* zHG$>-5=5{@27sJ#%uc zd~WemvUyXJZe!n2V1)AEFIFKc@+15h_K<+Sd>yKTr7j->zV4H`ll-N>V|v{>st#8e z-#IbM14{3K5;Z5O%Y1xR4MfIv6n4wLy7C0PPXtOvY1)T}ZI5-{uZX*W>{p$mt}6Zj zD)3&`tFo36t5>~2!Hv2zd{0LGYWGdm>%JGX;vS7lO=ZgqC!H9_Sou?rT)by=DD4Kh zl-DJ^7C`oKa!Ja*Y84F^f1jyd#YzR3_toQk%G!-oKWn!pgSlcZz}-G;sOV#fB5#Ro z$5sdaj5xaRpv{8qMLanqs(Ly&rNIuYupEPt%~(4FS*|6sJktPDU)=nW$=8OA1D=$V zO_vDZWyxr$`xb&^e=^m)rXr37RbQLemGg@^@{_bpLGWE-$QI|rkUS- zy3~dz-w*9v^ePA|8(ygnjky~E35_l7wf*C8iJ=w>2MDCy>EeBBjcC`-_t2X^v6{Ud z&f9tDzEt13#U}~Gv|yBDTNXOXFUy9$k3O;Ukv*L?@B+C`*V!mlT!$EAFcz=rYa3u| zt;<4leRZs&(O-*4-Ym=EA8#mO=BMLNvm@U>qHO|%XIu^QnsW75T)-21zXc2oj`eLd zwbP~ag>rZRvmAj!c{M>|JAbqR=VT zWEA;gLS3^~Xm%%2p6B}Snk`i++UQIrK2CB97KI{7EE3RGU*KUny=Fg001vyY=C3{c zWu9gl@=-L})r(%y>^F7rYpWLzYVU^*+FjL@gq(wIQ8GRS{FCQJRS;SNdGdFfg4NC~ z-SyGBs(vqMcIi|M`RlSJ(s#u#UlBG94$m05to8rh?cMqT2#jkwWs3FkmCCt{23i-*6oDVtuqEkS)b2 zBE(eq(9`Kz-L&XQzi0wD;`{V}hO^lsvz`8Z9 zs43&irw(1BE*0{#AGicRuawQ(%J4~@2ay#Nu8IMFgI*P|$Yddkk)i)#4NKP2nF;9z z8I$`}catgqBT7jZWRSq*nUg4id3j>|u324hY}q@#&@=h7ivA^;;l9A+%6XBT9Hi5c zBJLi0R0z6vo;meKT8)oq0^?wI_dklx)F6l5<$}q-Im;-T=~x`p3}%|x-O$;5S8(_FFt+&bK!&CgAUlgEcY8#R0l4}V#IV%5~pRxzb; z^jHn-C&L(mm`C+C-+#5p5Rkq|k}&*!COG!!sU#JHQB6=M*N2T1-t-s8d#?o=N*o60 z@zCBLw8tA}n~d%eKa_jjd9J8V3E|z^n&E@HkWTW-8ug4*OSEj7mLn9%v^g(6tQU=V zPeXAA)57xade_!%KIXsur~g@gG~lnPviSJl*5^|hOK&v*%Z1hDwX)wo)^Qp6+5E}n zcfGEb5j7IwGv6AGO?yH3IqulA^8muf^;l^6cYqk8igW-g?>-1^~$zbkP5FRYT_ zZ@J+0MK6$TK)T;IWj+*ClF*zHeiV(eKPG|BtknLHX7n%j`rbUDMtW;LT5b^sznm@`H>@NKhALD@E&n6jmt>Gfp9>S|w2~r9hs$+ZF$-{7-z`awc!q z7zbU8STn*y-6o$N=K@A86!~2$nWhLqMp%4|fP^dql3nUlO@tP4r=QH6_N7+%bb zRmm@xRWv~oJ9LWwz=`7P|IGj(w9jUAw2st#AyRbi508ywgRBo77JPN>Xv(yT4KF~_ z$Dealn?PuPrzwFIEuny8l_mGnFalu1RwihyVP(JL#b4-Uvo)LJ3e^VBF`)nt^*lnJ zCS4U`94G%IUj`X9HJazVDt`I9!_qG+8pQ!o%|O|%89f;Ba<3oqQT)uR$G`ZlL$nvn z=&@oNb!;=XFVB>6!>J`6s9u{wl23iH!thBMp_%pf@zRTb6xf%DXid0LFD&sQ8xiY} z50rXgrl%MlXRBk7su(?W6z#1l;NtD#7%Vg8GmX2x@iJ# zDc*jW?;dks;SPY+1}~n0q)bD~pKSkcZ9}C8rJFdOZFt`iFh>c~I!7nk(;JshxcP(x zsW5&r&*n+He+# z9JEK)%b^MCt!pPt<3O1OqjC99IfvKeiY>JGOR+b*HJ03mvNsFhlir)NBGNC2xEXr5z`r6r0K;E+7sCVhz zcSSOwnwYX6KkK!bGP(a;k4G}OMV=j-cd8RL$4J6N#wq`{E1?5lkrf56nX36pB`RTTQTO&$QN&%3RuXtljX~ zs2Wtp?-cbBG^((E1Bg5AdXnVcchuP{Mv+8$accJH2Mo}lIMz{q$w4GX)-LU+2;5d+ zh_ofHath8Tx(S`1m7&Ij_JlfwlB`{ccUhP%BmkDAGpQ#pTToqsi&*=ZS9kZnywo~^i6%X)Z%;PFEVU&{s6Lqe^HeCr8QrP!f5Pj zM1>`0TF)`tWNIT-;$`YUh%14-TO>PwSX_%PX_`9u#q>2`iLz=@%5S*^!$f!rnT7x_ z=n4~{qNkpOVXtyKda6AI0}k{0%BJR)Pch~~tZZuBWM;Rf&$NHB$S~*ZGviaH*F{zr z9-QGo{xh{7c3f}XPwss`(Fnl>%#D{E@w^MZmi`rE(P%u1Yd;pezi=jrh~rG(wi{pf zipc@xV%Gk=ED#M_1U=k@YsP;&eK3xxAr>=6RkQI?aYSd>8o(KIFvan!^ta~i-StIX z#}kWgJFf=q0q$bMJj(Ivyhu9g`>${q)XFNY-jcG`*{ zvz&$iZL>aR;=sVan_99?kb;@mgT}#!&(2X+-N&7Sm9&*Xo(I+dS=+h#PJKsZeCdh! zgHl8q%I{Z+mz~*95`U;DAsB~P!>>fQ+j~Cwm?$nW{wu^)M`VZ$xv0j?2PaIQPILD9GH0kA6V&~iKIMH}+_{$`!ASGl$NlCcLFM36}4s0jOZnL8S&L{YGMSJX>Dr~s^&~Q}edB{2ivxY9ds8@c z6(_E32OP=WSc(gkMz_0fx;<>4$w9nlUen9w??SSQUoC=C9M#>o{eJhd+*X?^+z>BX z0x0OzMD>WI`suCcODq}6u5~9O~FF}vhB2;kb^uDu32Af^b8_@8OV@pSjKF?Czjh1d?nQQ2S zG58&TH{m_TN^sJo%`E?bA)<0~gNGXiBNQc7rNV3t=gAFRbQqX6^DsnXMB5b~0&&IZ zkQ=V@s)fR8;%hAxF;Yn;M>k$6`p&6Klfn*(&%qBv#SK(@H8`*ytqsBt+pLqbv+3~c zg$mo`2D~FW>8vQR^G0WwstI-`BfNi_YwjV-u(qML&KMc-Ekkg@xu1R@XnMJ9h+ARo zrs1~M;^6T7{{kZ*=KQO~=Dl6Lcek7)p@qHx@KM1u@3?3HOnw~Bm{$LNC%j}navOxP{ z?pMl>|D-*tZoJvNPG3a><0V>Sa}RD+?OEAXl&hm|hQNnTOeM z|Ix~_da&B*h(|gLY=HZwTeyPC)FjwtPeZHUqo~79S@r2b5tN>dX-+#$Fvi6C`TS*@ z!jDEcnQ0lEZD?tqeNNoRY%c}w1}$@7Sz-WU*2c9sxhR}DE$!Ovdf2=6)r}KWha16$ zXfvty+PRt#cr@nvs(Qip37}WD1Q+piqe?SJ#qSs&pWJ`emtS<#!c8S+-WmR-r8e&> zv}0c(PNXf(5Qr*QdEeo;s!)Sd?B{y)6Dt(&bZI~;3)z~tVxypPsnY1Jf_`TW)&5x! z3|n${Ir{&WYeYR^RRg)9=e!TW5rPw;fTd|8jfu7Dr^yaZidr<$0D3y3dQ9 zV86!M_pq#^bY>>SXhGs_y6?i^ZrB~L#`%DMdk6qWvsRJF*b9-ZYi$BZ= zko589Dss6wzK!{+FEfktQ$!W^Ij}mN+MtIc(d3e?J}8~U_7}}{n_%@3m^Aenp6~kJ zuhD;CvO#*AGYk~<^gGC(#DWXYlI#Vu5GZ?_-mm)s*xgd78Yk%J%_w~Kx@mT7<%;97 zh3G7O@gSkI<&l6#EemyB&AkT+EZ1vQ?H-*4a+zayD>ausyyMxenx+g)GiUKX5bunj@c2YUg_ zAa6hFnV}3z5d4bDyl|ttxB@s!bEbJJ5g*uD6z?M>={(}K2X9hcNoYNb$HQ*9wuYy# zy@7|^=N<6kU*L=CisSL$;8P;=M7HMfL@WEG8Yte2uD{AsHNC-lGpdF238&8@C|swS zu(n#LxF%6nHt%KzDm%+|exO&S!+3LpkKIgrkRK8OQR4Y%NZTEP)g<4*ZpA0~lfNb5 zJQMO1t+B0j=MZZLhwI8B!CgE@^gOuj9>$Jy7$O`I)&ag=y7t&g^n$#^Mwv8GG3no5 zWPt@o?z4#GEOyTPYdZ19Z{T+`^{vG>z8COvOR8dH!Ycb@O zz9s`>7j3sX=x`SZ)$d-pdqV4n6zV4PCbNQW&A?&@mbB=_q-mb=n9>eB?edH$C^#+x z;q3R@aEhzuJ^6){-9-#=O$MN-aoAbT!x)Hf6jChK&^sg@&g`Vd|VaBN8GGL4Qydioc|~6K)#RX&n4a$ zwUUDmjCd9o^d$@z(~OS0XRwkzs8p4T0d{N4PA)`JC~GEs-d$=%ynW`;YhJ~KOnXR7 zfK7B1HAzQABEN#oYOuzmq3v*g#j~?5$y9x>&Guxavs3RJQZJZ~pN$x6XQMRI}Dj-ESUKQ~Nq z_qnbD#;@HC(#wVIt?q#K1l==eq%nYNJR?q|D)h*h@P69P&54&`WQ#m zl#>^T&Uh)az)#Po+dMFKjckuMPhRCpc3llKT4zpvhw>?-ysGhH=Ip(j!TXQm-bUr= zuTev_SZCaHQ7V8W8Y+QP%;hR_zk%=Q8`ox55G$ed*-8Tr0NIdMC&K7hYh=;VE_8xe z2=n@a+TUUmtpTrf+9us2%@r|8s+lTeuhCOmrPE!NJ+Qa6rIMDQJE$(m8gnV`R$6tL z>0}9gLm0<7>P!J7L(K%S`+-~QW^JlkI#Z#@&b6++h!7_N^;b1x+}V0XlDOK_)x@{8 z@FvRx@sn!FN1lJO1UAjMh1t)YS&>heybUq?%l|0YvQ}48G#*$HSj@)ps`^v5yy{P9 z+3u*MOH=D2hg3N(?mhLuecBOGD9qspQkRt0IYTS+|*{ zNw;Cg@&QNL!H>f&HlDT}!;h7A)oVWndnIBn4aB$pQe({TyN{I*>j%v%TDLo7v8g{e+v(-ta8(&fu}<;{ z+G<^~wX3Q=X*;e9se7?ImIG_@(hnuG!P1NTR~Si?WQ5?WkCp^GahZ`rHpzfQ-up%> z)ebsQe)XDCob1ZV6lN>?D`lyaZ^A_Diq%4aN;Om$;zXbyI z+5U^xw5{fBYk#^5kzYfg!XLLGH`Su3?{tOeO=Z5B3d0z7*q>Y1@m8m}mO?u7tjFcg zPsgsFV5tG{L`B#G9YiE%=M}eoGR_{vLDlyE5{rvWWy>1~{Vd?92eXaSyvBI{$OED3Ff{H%u%$$!~woKSqj0ME`?=9;(-H!ah`<1ZnX^#oSo6nI4(EeHbfXc z%<2S<#!R=!O}fqn1j_s- zgjOX4Y=Z5{X$1QRXXUbfT(1{cTb$+LGRPa^O~Qk{InmxTCLTk6Z6Wu?qhSO2!uI1)qVodg{b z(*ZrZ1tV|mo83~bE9@ktP+US_^qI-)KotC<(!u{0J8phxMzlYoSkmK9paMboROH zN6))j&Y#TT#is5<-0N>QE_b(k5VbNuQkr77?3|ML_?#&fdj3dkc9uzRmBD9MX%jtB zbn_pD10Giq&)tt;(U9G};5frI&H67XesB+kzS2|@(;FmG>j=UNMY13Imkr@N|53zS z2jQhXlVT6Tjv-apW8-m>@}4G@n8rOj%N=Iv(iy9z-?cx2$h_w;9p(2_#{-~D znj26;bq{m+{X~C4r~rQ>ZitcBPw1t0f4-0g!U}I2(naFMN+bl(db)g`dzq7SY|~8l z_v>Mnt1`F!P&?nc&H(-0zu{8ZQ2E#13@;^u?uALIlDoirQH3B3=i@mz=Rug&d48+g zn+d}u&C!dql?z1358&RaUHs}s8Bnz+@bqHY#H_A0+233|0pbLVw5d zaVB(MiB5Jt3?FF~8lb0J+Rf8UYj|8B8q+i_X{O9H9psOqNZTgr<~96%)tXbN8Xh=% z@!?Hoo<=}R)}?kg05-+_+*czT3B+`(WS1rHxfYZ2dU~1efv?kh)rvejvv(lUgkYaC zn?)-ty8)C(;IHp`+i2K}ZGaPGf~9u)g+5~==L`H5@W&&SB;(i%74KOOhJEWrP zlz)KZmsO+QHu zUf>{BP~|m!+r=&kWr?`3?z-FegFKABW>r}Jd7dsrTR`SC%P~!rH($zO4>E!SUS}%T z6nL>WHJg||sHsWU$DYT?^rT&H>Gc~km&YaRw~v)d?Yzts)>M`Bz(b>ZA3iv^vn#V0 zYZ0N!K2x~vt`G1t$W*4@d9uOui2+cKDv9z=O)m(28W412_xpeopeq#_5%TaP%K+z`Ixf85C|Rae&`V{+?f0v4d>>awvheBw?sC6 zaluWRL;!!^249-r@dRbhQ~|yNnHelTeLl359T=kno*~ZbVJc=9Gf48eCBo ztO2i|%GBUjLI5dRh}X=*@*{vWLP>-W`}Zw4T4Kt%QG)^nCTpf?2=mw|gB&UPoiY>f zxYCw9&4umZe@{yaWzUtq%u##TjouccvSC~yl9-x6ij0sam+dFekT*^&)QW#qlP(_H zdK`w1fZzgwLo?p(lM*ybYL{lkuacX+>16Zb^?zo(l@$_5hq*Pp4ajml+4Zwp9{P3c znJ;pFhgaHc8!fMWvGnMRtkU$68Jf5k|d@^$hf)u&|1o!sMuj}kB$fsZ)&zk*3nT+!%4#ht`I+0%@7#@kr z$?!&4>L~Ax1P8_8<-RaQbCsx_Kry|oG4!`Tf|JwpD}RV;`q`%Pw3x-0&I8ND_lc_; zO00Lu<7D}ca>BDE6C%Nr44s9^8*pflPrXu_Svu1$^>vVD5t{FdYWlc7pF8uh^+ zpVf@RzVDb=>@3U(^HG}$k@MesmLScjZ}1{%O{&e@(5%srnFpUZ7ZzQ0@(o4+=H^rL zn>De+P~D!mu03lj+Qwq}QOU-HS$eUi@D}-ufDhtpGW{O5UC80(tV?@yb}G8Hs0iiD zjt}K6FaRsr`2L>E&3i0I&Nc5>?w1BBtBwPosE3WbmrQUn4a`Pq_JERnJ&%azxANYz zdM{~1gIGQ!4wp;A{vI1@;J=g2b zkABU?H$-gtQ$8IkQ1=pjhjH6C?TH$`YtO=O`IdN)u#&nm898sXbjDWjoxic= z>7ki>w6rpnBW=G$Q=1<3M5%-K^LM*VwEhPo+OvGD#z@ZH)Y>-qsKn-tg<_A5`L?P7 zfYO=vy~?uUS=YSZ)nZA$D;-)J#u1U=Wg74M&e$#{bc?RX< z&6z*(H6@(TJNG)Ctk-38xw@T@5R5=OQM-yJS1w+Lx}=KtPDCUv?0 zg1x9w_!NM*1EcYX=gMAO@y~I5r}_kOT(7>pXzyt_C;GaYi|u55E+1dx#z#8VII@LC zN6VtssHbQl{q$*bw*RanA!F@8g)b0OVI$p^AgK5_T{%$X+OO`e?Tq7~Jes7FZjYR! zAHLb?AH@1HFf(o3F+~sY2Y348!1TJ06h^;KGG=b`Y|#8fo?}pA&+T1mG@R#14>9MM zrtl=6Y<1rKwy-VkI51qO7c+l*??8h~dqT2g(bM00;7x1nM@rt-ZG!JDzNnjg(RSnC z7Oa=&tKzhHoVcafXyn&d;4J%LYv6gB=SIm0N|S{i`}-%CjYURnwY+yiDjckIw~V_j z>A*{aT|61a#2Z(Y?Zy>LmPF~RGCAuaIs#Mew6>W4++cwsSNdjVVB$$)#_Un;nirg$$L z?6x`CAI>wzwO}~)J;N>Q8?v`)_UzU4O1q1JJ-Y*f^IDbjGD?(061d2~BBZl0rnJ-y zC)C4zn`n|4doXpO(el|bxzCDBFsE`YVB)K?!9k>Sd7|HRG84Rz-1WKX0I&97=Sspt zkKaN=(71&GDX)6=rdxtG{p`I8>V`PMy7+om z`74hz`wWJ;1riPZ$_9r>D0_zMLM zl_wOtSAD=8bh@mt0&Oo|AeL#=W;)6cF&eT28O+*QLf(viG7rY>h{+s9l>(6_X=>Rk zEo#8A`ADpGmFR-@+7HK!{NW7QV?nYz=nCR*Hw-1rr_WF4nD^Z(UUbbKh9LND>%48UD!V` zs`~p%v`3&5`C5r@iJoUtDnFkdKYp7BD2IOjw!g3O2W616I_4ljqJaJ^AkjsJmUI7&kGG?e8mB8}Hz3 zsxsJF@$&C}3$znH#8GSP6kFbww9XbgZZ0pob1uUn6F0Dyw?%rm!${CSO?&A3gh&5# z8IY5sNIGy^ncJ99gzC&Y6>R~BG^|O{sgR!lZ21?>^qO|_AkiNg)^fT-+mzmv0)Ekx zFgv4{1zW~FBf|!4OEJ|ZYGX;QF5p#8m1X=^l>3L}&HjWuv#zr%(R7@BkGRqvVqPM& zo?Z4+q&7z+1T1;HQl2U};Uvkp8R(gv1r7ag;$$jkW|zvf@TQJqCN&)p)#0=5qiJ5c zYp)N=efYv~#0}VRf#^k~LPT@eC2uk09CtIW7hF#u?>%5n{Xj^45S{Dc(**HDdRBa{imJM+DHj+xfd++# zd4AZ_E?xPr%?jBbsxcE97ItHLD|>#p0=eaJwJNa-YI%z$UKx_(*r7sI#8=p3g_`fm z7H_ScufOB}kAF1<;&T-y`Uyu?<;Y^ApN_Q)uc_J^ICoCHOWJdbQmC$cG~oMy8r8Cw z`9veD0+=SQ9n_h_&ubx-ltgimMkXGAhC4qV7%mC7BKMeJIR`KFZBdVAI`0wH2wGn5 zZlSMFt7~jM?@lZW9|1l->T%ZAukGTD3s#1G#%so%%|8f&2#kmG>iOnDJNWAs5}sa) z6n^D}eEy{leqC^t2>o#3l1wyWf>ggl8;|bXH4A?~JC!wD1l9K2LB7skX;|rk#dFjC z&o!djQ*YT@6I>(Kc)(^1|7j$qQy~Nk2bqsK!(Au-WLq|Fxi5)Ys_v8*O766^sa@0> zXy39FU8>lFu55;0tzn`&>85H<5-|q8c=;OGXb@snAN{hfsYu}>dpg3Efv06Yg+@I6 z6W2AAnnRIG9=xN%`YRrWRefOnL9YA%WX)s$IVr=wUnqv3qe3B*kH*d`&&d~sQzgf zW&i!1tWsKe_`$F9&^`{juwZVxb{F--EX}^FkhSl0B|*?VU11DC;IGo4EE~*9e(6*ScKcn)l*zaryo} zzklG~`}jQW=RIEMoaedb%OG=L@%l%4XTKV6=cRZoTAR+e=Vhe3VTWe4&792;`ftCf z3QmG|ak01wu7>47)Ij4TLfC>V$|h8`C306b~Rw7{q1=jBYjFnl74vN=dG33)4!P`W;-PUEt;cloj1%560o6_=SiQx};Q0 ztHM!ksV+;<%0Vbp9hLd7!J5AEY)jx1l`n#( zM+BCS@&TU^Du$F3sNMX_+NN72)u_#V@$u7$pWDTZTKufcI2*Y$m5`|r8S*C_U^|jZ z3;``US|VbCwAF9_8e`L8dB{}A;L({7li2H}Gvh9aw6f;%fsFS#|C%^E!3?_p#YjqJ z0Ov?rC^$dV2}Y-!W0e|6Po8gHasOI7Sf81Mc3y*j5jqIO*Q7kmK*Bh(U$qhdRn;FQ=D}3KV zeSYYR4NB~O=^2fE7P3w1q9W1mF-G`TsvUWg@kJC4G`a`)z)%NXP;ayL#0f)*zAfjQ zjQRFA0xHMrB`86M4v8w#Hhr|&cE!6)OYfx$G%oO~(d?ToC2qCdtcGB}$$gTBpD}T1 zn@D8sBIPg}=r`_Jh!z~{+Qs1;{4{jYsf$hSOcYmQQa9q0jWC*`u;LFgnDmYq`C+(G zgNpp%y$-7xT7`8EP}3mtLwNMg)Pf$%IOYC7AUFrnm5{^Vq49dSO6hz}oeN7wt5nIH z=Y?Xwg4w6Qcbr1&I=VQKG!eT4IicN?PS;->ntP9z@JkJK0C$OWD%P_!@gMZAsuTav zdb1?UAj?o|PIuOAgp_LzV7TffCSjCT%)7aP>I=CGu3F%a;j=?Z*eR>})bkqhY~s>t zPysfFa>MWuPh_@vY>>)1GDvU5oyUS=OH75rb2;L=G@|R)1V7^bd0XM)FJ0^zp0%~C zD24+uUbZ87AQ|(f>M~hpuG{Q%q}vMLoR-i?|1Kd??kde{E$^%f4bFof{V`+|K`>m3 zU8;5O8N1=M#Hwy8+2XRtqw4x^q$;DW)B1N=W9lEozdyCUuir!!8dj(#Ea>eog_zsh z9YK(`nMl1R9hrqa*ShuwO3C_H$g^nH`MJLz$hk)#278bk zMtj1;mPJ5e>%ZY3%p8tK2+liglNWzcI=|9_YUuL>b=R&Jqn#EKmPXQD*15mpG907;76Df9HJ-+gn+=|HtyaAHcRKv3>`IpStL5L zDXprzs&;&r#0?cn-uzUVMG8BMDK%69G`t8+N2T}e^=MZ$=XKk9GB9aMT26{} z{f8EpKP!U-m)9qW$+mph=w;a_$c<@!F!~9&#q!@Tu_+jR0?Q*)maT6sLf%~ycs-ja zvk^C|i=SzCsZT|L??75Q=(pRXtv+9w@0PtT%f^ZIj0fn(OK5LR5Zn@top0b1uZh&@ z$X&yXuF&0E7E(U(GL+S$E*X52$OKOlF^{&_;0jQ4n#SM*D-khv&a~IM`p*Nl0z-SC z7aYV9hGkUG7^VTY-m4NK44-*L8mQp=kE*AC%_FES+eNG4--ByiymF&n7RP3qwIBX+wD>gMc|q}9Uyg$709{LvO7X3J?{pj13nz1a|Tq-_qm#z?}ryY$E+_6PG%k@k&Dsy7(`bjo7BkSYl zjOsQ5wy&a}*M0Nj7fzTn)au$~b{}n1m0#p+7%FrYZf-t1J{t}2auwU|SWX&&>@mQN z*R>GF4bu~9QQm#+`rj_mN~+lw^Q|;xnuQqNeN>j`zGQ)KlaKeKHxBh&1YYB?yB_83FyJb z#QSK787N|a#3Gb8F)3&tt9SFM^{OeBWtOBkE*nMX8s>?Aa&~4O z-JXyceL$0wkFX)rBwOtz)j=7_x+{BOU>ORap!*fu8cvq8^_*(dr3RNS3kvo8V5u%G zL5+NVLbduiz@E^HU_Ml+pYoY?GriVio)aT<>dK!>2{_uai6Kzqpg@$e06!DT0=`Q2 z5k^=*5}2)~UE(KX`1`tG(Sqqz@jm?P3S&==zh_Nj&YUPIYaL7Pwhwo2yD3 ztMa!y*hYg`2y^BHM8AQp9@!jL?$my3rm`T%a+8|7|M$E{$nkGjV$*trp+|_o$Vx{P zg5~z|aj(Ypeoo}8g!asPzuq0#2{l(+-P58LCV#YP9IK|h1Qwzwcw*1WSMnpzl{vDl zvtIFJ0rF4pbDhpynsAvGWt7L|b&#ZMkXS1b+B$+OpOWS*!Uu_cSe#Ts$HJ zc>m7>q)hdm7Dz6%EF5iA)VJV|znKk-ynQB%?R^ud(>|uI3<6Ul?92i zmebdRNnZ7nHdaRQtaos(qTdi1F6i$Nfd7BQj*k&5-m>tbLB`<7(z?+*DxJQix+iy? zhcSGR-&}-Pbre8MisCy4OgyaehZF4F%dWP(efyEVN%6{@Sho`o57?xJk!~L43K@nq z3OkL7ucD|pl-O9^O@m9SA4OY44l;TeGUN6Jc8Zl1Pe`dd_WK>Ut-nL`(n)6D)&tCU zB+4k>Xa$uj;3+COK+LW5DQ-uht`8TeWdw-(M7WzT_ zb~v7O&QmV*giAZ8wG|l2-T;mX<#u5|xNO_HPG8Vq$jlcNo|5JL%f5UF3S}RMmLGoEEF-Hp1{i%GVWmk*ETTDi5_jOwY zU_7i;>r`i%yA=wC>U;UKKKQp*cB|9JfJ$dOqRv9ROLB`MmJ+0IEonYIhDHJ1xkzrc zILOF-jL@**2h%T~V{-jzeDF|Kawv+APPWD|JJJH zP;9lSXrr3VX=U(3WAv-B+5p21Lqp}xttqy6zp7ky6RfLlSLWQ~R9%sTNHHC-v6@e@ zp>bhl{g(If)JEaQV#q>z`rM;`ZM5bybq3Gp4C!42)Q>4!7%(R}B9vv$+VR(1_bMta z-DC*YI9Lj01K)523x6d?_LRCx<(oM)B<A0WZtQO9xKp2H2!R0`LwS-At4Zva=t4|X5~&1Mbs{;?)}_uk5!CC{EcfM=|v zZ8?XCOr;gWQ~0~srElp>b68!cq6(IoyjAD_FTbYH(CS`Il3eHvN~i+f445e_a+i#v zbXkPC;k*I#4a<-wASsGtYt&R;PJo5*jT}zMxBxMh>6xjC{(WVBrlwU>Mp{^(^_R+A z%#F>LrC$){wu7P0b9i-LqM}#}P26zvvvxE#6tOkeW)uTf3?x&%qI#<%9gs9y3S3tn zP&BIWU=hNW6MJHfHHJ=S8+#BBI0=(cPglUVoX0UEM_yPeEt=f434Grl6NtqUlj?XS zeroa*Fq+}VuFmUu`I2NGZffnN-E9}|xXoqO_H%Yv#W$8T-ZUy55Q;#ToY`XA>MSF5 z)d3_Cuu7o^Lb+OHXrtSu$QjQV>Jp4~_!<3#HP_Jx8-q@LIv#<$jtG%bmM;P4KsMyt z?|G|K1{s%d3mwI#=AneSu@FF&qxed$KCTlj8MGlm^gl6t`=-hWst6>SO`UKdxyf98glzK&_SjsF1d#z0KR`hZSvRz>m6Yxz_ywYq$U0=pC3WVOOEC&~OO5F- z#E(K>FZFwg(k;xFN!86tLfM)!OlsxJMT9 z?aepN6L&MG>ni%ftUNANao$vW2Zv#h(HOsjI&+hilk; zanbK(4VR+rrNZm>Sn>8!3M~KRWBH_E$=SKg6V0y_7?|!WX1uv{zdA``%2s(Z0L{~6 z+3}(%%kDI}KJnpC>9(fQ&kGiFGWIbk@UE^AlU(Nn9i?avw}&e4`cy|T0LjVX-za>< zS=XAQ$;}mRII3ZZA4Gaazcu2qC04Y7|3LEZ_Lc^+k!Q>j)Y&H)0-q4p(>u2;)7SJ* z=+cguwfeO6_9;S-EI7epQ$O_ezBkVz+s!bv&(KOggJac%_E~cNW)nMk%gTvY5HTz7 zWV`tueqGN-3;Z;6)xY*#BS7hy!%TB^sf1+34ctwnj>O`hKANY@Zeo&ZS8}mUgI)b{ z@n$pm@c5u!Eqs_5*PaQ)zlMW9_d^T5WVZHxzs!c72C_P9$exDLBLwN&PqOVy2;gBA z;}Ve+ZnR2mYCf2#JIs2LFdkSEdoVc(2;vA|oYEd3N3FzTbCMnqq7pp0Kljjo{|u>8 zn1Ammh`sUGw9g+Ay*E?Bl>N;*t0pqAT@bQhkAWnJ2(=@8eEdlUO&BSPnSX&&n z-Q8atLJf;>@}J|fBTr^JK2RQGf`_dk%X*zc0RZ$_yw!-I_pKb&(w<+53nkF)m&O;D z$2EG$k1Ds;O2OkpS%2~ID@T;1;?_Gv-c;Qu?|dEf9x+M}tRRDcEaIh$$x|8|5IOog zCcM~6IN4uNaG2X|lvua#xhpHnd}~?rdXVH%HXzZX3aT3Z0t6h-2X-{gk^? zv2qLejdB^zc%FJSmg#_qt@KmP<&Iv^rJ#os@;R{XMahZv+v)#NbwutwXnw-1!-?aM z{g+`P^6hQI^Rm0C2bVSI4$u8>tz;_gxUN)vu#s*d%bmS|U-8z^+KtL| z>u|pV5kaek9E%oyqIT@(PTVvCUN73i5w#WG_B{LLg?Eb=B6XjH;^&@%H2K{p)i1y? zTqbJ&S!qA)9cJ9$Kb#!y&vRgbZ=%z ze#^*&zoK@aW{HeygU-J)nh5K9==Oz(oW2Stv_O0f2+x1(`pCwa_w1L_!}IwI2ZL6 z{78ZDT?t(gadWlVXA%|DZ=^@bQ&o3S`3!1!<^tg<(S?S7=6XDr4FD}>QHA+FxRbiJ zVd%dB{ywv}!@JDu@Oa$3FF+#9#Q<~^^(?9*9m4%tYM=584i2silA39iSbiU(WWA(O z6|=|=`NaOW9wLTp@ZAJ@Luf#uw4x*T0r{|PVvZ6oBbsfJVirp9`+JlC>OG!m4%lMb ze9f39YUMDWiKlR{aElE;Fk9`w@TlsiJYpUzE`+DIm0={moyQc|3@TJiXM6eYMGLA% z=uiW2(J7xk9~(a6mBnz|*D28|u~Om!t7*bjSKE{g6%8-U)QiOii;gs06*#p|AdZAm zFV77oZ=(RT?`BOiHavyHr%I*)Eh(&LU+;kV>GxFiK5&W7=mCp-7+t7$l8}F{oT%&Q zcLViZMZ?){a{gx8Zh*qrw>O;U1Q$la?9WP{ujWh)UN0T)H8r)G9-aBTrhg~>Kp637 z+9aqJ6Qg7UVW%SIs*T@fABt;MW8k&C`s~Sd=VHR|IB~GUw*gHF|B){{vIQ^nvsn%< zp)+?5zpYHx9m)<};^)Gl40IXpCH}tLeuoRn67=?hp3vjGUy>rv^jT#!RL(|#@E;Yf zBj!TEscc23ak6~pOFpEV z)9V31ShFt(cLa+11F>9$e}D|S>=un2vUFWkFq=fXe_hwaK}F1O?RXfbv{$0_(Uh}O zzCsISTkpA5cXH@aG_g1VEVQYrkehRBF^=zNjir&h`$tM`c#9`b{6RmhyDy15DL#}< zaB4e9t`PqR<5-WWQ#^i-@_50;Z!RZ7!#a}mmB)+uwcL6LFL{y>xO{7^I3Ewa?k1@& zvB!23GvrND7yiyxQhm3I?Bf|(r3r$1#2h*u=F)H z22a7=9fY>2^s0k#yj1V_)cImP+A!mybu@HEw}*^0N@&0L>sLnLa9Jx$#91}n2Dqs* zzyAUh`XS_swM@BtE;oM^|+v!S;#6V~1_B`5IjF^Wsp;YE1 z9HotoOwHwLmQzM2^06)manI?FYqprr!vjhS5IVa%$1NdxLDA!_`u>W^#g0JD>8rQl z*R(`D7F4(s11{MBpa_?iuPZs2wx)`W$PC0! z5H;?oxQ?hI4x}cN({uG^h54apcW_^8{F7s%O$}^WuWho54p#%IX0KLW9;Rd96divTq$tFY;Dj+Fxw+>JxEhTcZEBCvv z3%<(tqEo+08~Hh3SwK_&is)2Etjczlf<24 zV+GFo1#2$dU`d_Kt|S^U9n{S?cG+SSO zs#v#CP=6uszm%-Exjy;x(OK=-OPji+5&zyvrx{h}C2|cH_f-6O z{_hjLF{@Anv5b$A9J;LK&KxgsCqiuIvzoXcBn|!3GcxH#C-RB^ptVv|x!b4P~T-BEaWd?it)v9>=Wp>3rYhG^Wq3HfuCuc2J@mixw zoib$pZnocU{8;Y$>&N-F9ZqGGmbNrCH8-;FR5M`@IihJg;WHe^edTM0wCwVSfOYlP zGq-!>>nAne&s%NUIb!Pm`Opb9USsvR%AcxTp!TZdDSql<=%xD;!{Ko$V@l(x32KBj;pl)=<)rkIvf zIr=`9_(7P*`xxtG$XvR~MXFPsPd`%4{C!Etk}ZwG^oH_^98HLOMacGra@Gy(-U)xE z=oEGNml8K|Tlsh)k%W6;D)Ll*IZ!E>z0J27zvew8>X!;FrpVwtgB%H(QE%LD1_@64 z=!qW=966b1Xd7h+b5q}#_Xq$%gUlzOwdOlZSa&uu*PbCcqe{;n2F?*=2Y~pR@a-0} zyL9}k$qm^N9)U6h=2>S$f^b-?K_$MqxGP8TxI1(9O#A#-;}`3Xt3z+v_dgi>Nx^cp zR_Dmk#gv=Vf>R0*Ce|_iKZxfCh$rEn;4zDDZ}O~O8hf@rkN#s;exCAUJ}bkTd-_Dp z=6KTC0$1=w%6@Afn66$hQ>>a&b*sttCGe+5W4!^2H9qIx?)~Ufy!J%mSn1Y0$6G_s zY%fmOCQt(3=W4r*=rNG${cLTyX{H+83w1Df{+9dIoYOU8u0_ig?tpW+S}3D?JKKEF z?a5Y$(0Xpp0>%ckoO^J>elM5F-}qp?O=oUgdoclq0@ETV0Y=pGKl!tsZ|jexL=JE& ziCU2<`d4t|+9ap$wtwar1Nl@x8$UmE{$|Q}+wt4Al*oTJIf0alwlK z4YD(?J;9#0y{tw`!u#4&0WlCMQrX2-m_IeCCHLyvsSuW=aD4zwK;MEJXdHjjlrB6j zlw8D+Mdv7)ac@^XIQDl7_gQW}^DAsX$xI@1mrJ32M2BCrAKJ?4lj z=l6>`O9~Tfl+?hhTh+x>;Zts1Tl)<^oHQHSTUL0vO(t4j5ZG77`czfmRTaxKf1-Wk zRiE74e=tg)8$jYvz?oa3Vvvw0bsB+I9Vv5T`#Tj2e*K9{k~&5-1i7WyJ#VSYWTAwy zk3O&6>?8FK1fN*j=Dy&1^Rm{io(fDpTurjMwV-O2;&eQ-4=uF}B8BLRJM75=?vLfO z`Te%Q75CmG%!C;^4!09B*PZHUY4Ygahfz+_J?%?|hqkFeeWpq$&Cj)rzCD0o0@|J> zEOj;eeOw*?@oU0vGkMDTV>ntIWdWOT-p!a>AM6`wn{Vy_kSz zh9y>=YLx1InK^$%t0PER^wQv)DL%RV-P4|4Xf5JXs4FNb0M*sOv}n1Zm@@3+{@$*! z>&AmHH*L*fD(c+J=$1j_5280$DtPV3UkRdv{Q{S4>FyiKxs7G)ZCAKu9fREoNc?n= zf|Ej%ZP>%oq45E*A?y!9_ooVNvBDv=JCqX-z3DJ1UuM9L+5C^{8GuPC#5}hCD~);P zR2*5CoCF*3vh3In1THT}sx9N{Qp7R9TN`WF{8-G-rRJ-H{pUy|tcAAdYQPP{C-?dh z*#D?LUfe`isyh-y56&XOk;vs z0WE53TU8+o-g z)ZS5*S7`<2Xn)fFAZz@%81JYx+7W&aNao@q*b3XHnH)&?y92HXERODO$(;~9WJnXbBxmM%{VS(Qh52@apb2T@Ck^>vHXCb6mmfG zzEIq2KUK`c z|E@!-hd8NEs`&@B4S+#|#N(rPge>?{_lRwvW96ddCfZE-fnE0?$2*RT8y<%6fk9sX zB}U5oUx1OfI7kXz7t?(97Fmz@X~X_b$I2Gww$A@rW~^ycY!k$z*<*D3Vz5jiA^ww} zYvp;KR9>o=tp5YHumAv@VH4TgDsd+7*im=2kRHz6d+LHo&$`iAR~H!dNS1B5zZZ-3 z;T)jVko)u^3cV*E4=v1X>By8%LOQnusyVjI#f02gQr`7UFfJX(C9<6)b=Ey>{)#);W*NLX~zrGRWI>yFXiCQSud++ z>hNn;s_u9RznA1mEU$?rAt%aX&dF?}zTuaA{1(g&ly+ih#4t%VQV)|GhKoID&9Z4h zue9sxtqoXz=Rj}>=bo&SjwRXyoMaoCcU$K+kLQZVR=*=%TYzEf1dxim)SGq}~xvs<9^ zy4S0BcC5=mw5_j*ay?wdajpPi;`+Dh_U%Z~)K23-fc7?k9%*MLdc2>Z&Hm-Utxp^Y zwm%aKdIO}0cmJcRX*I>3AYJKqFY*2>gQ{-N>#R{JX{dlQ6xN1rl@w*PA`Ej}4mX~q zrYE>I9FAQA#01?Q%bv@2)~)Fnk4wiJp<}qdpyy<$EiUUPY2ij;#UaaXuPD`9wP3MB z5U!zfiJJT$m3A|+p{t5|)Ah%u%-5ag%|mbPxxZo^1THmg=)h^X$j5ybZ0I0R>A*D+ zI^2~f@;?tI%NKZsYqpBA=ND~T4vt~b&uM3&%F9Ahna?dWC7s;@ES{P}@DtsR zhI~6pPZedl)+@YKcVmhmuNYd?BCKssn$E>?Ya#GSJKMA_&LSJ93B9jH$!R)j;|!?9 zbd-(ktvh=Cx%HH1TZsA*#f=+^hTOtPVR%F z-pDkHmJpcQQAl{Zuzz_VxnRynKz+t9=7JX<+5^nO38`D*l1Slr4%;!A$T2W5G$U1r zS?lcoM`f~T{(j&@Zld~#m}BI3deK4sw|lvXKl?(TGA07}B4QntP8)g>nER6ZIV_gc zU4nk68LRpL`FK23BM9^-6p1W65cbvO5C6N?-hN(rsJWv#TlGT1g;QcZ@p+fw%MAK} z0D$v~K2zW5HqeoOa2b2+t@BjR=!@Z{g>yH1n^=pfigTynR|J#pNj)KCW_a(X^s#55 zq_WkHxw{tT%0K<|^1_y1l#$vYv#xFpK($qB{#+Nqfew?_7Jo6~ zz@n91O)4rdXSGpb=p>aCebZ;oSmWp%34UyAUtip9==!-&fH~b{K;vx6@0#5^yTPLp zD>}O5$-E5%odezkF8(pYI*HxikXo+#p97D=qf3t!>o@iDR?2UQT%#@FR93hauMZl^ z7FkDBJY8e@_83xbyf2e`Ql@y+`535d()FTy{$zj&Q_;Qlm|K~*4d3$D@*AYR@8<_o z_1r*npXGT2m)Z#RPFfSIcO_JM=?>e@KL|N<*ZQA`_QduV7Ji>jQQNz`*^vKAPw1n( zQxC@;sR~j%eWmYL*~n*FdahR6o|KA~PXcfKH^kZq=eUI*v^if+sbdcuv>`sW+F zbAs!H_1qx)Ll;f~A4|lGUva%!SvU&hGOUHjDABacTr%lMKUsW|_Ev!IfYte1?Gy&G z@M}mhv3I7gzQ&D1+vS9FHPa1zQ1imlv4M0RYS~~yz(`g}BCqGEWjts%X&C6xdRZ(} z{eJfbTOzVyZ5GlcG(9qo-~YZ=lA_i@Se@CTjz<{de|EN?dvV53XTHtY)2E`Ve^e+i#{vY11Qc>pmvguif51iRB5-~HT$L| zJgN!z(|}E(hcp>T{*d03C!M8=f2iCaK_6+a7|4jf%^VUbc=wT2Fu3W>oB$HuRCsUw zU52|!(HAU!u4E^dZOZ0!>6{*Z;fuizX{I|*2FbiN(_BnW?&3#}+0YVMF^_l`x?ShL zr!oCOR0N=6)ctu>o#uP^gL{Jtn?N?s>sBiF<|d(2 z-Gr1LbN4^ETrT}!%#gIa$Z?(nRBD7R-4GyuI=e+NXknl+j_bJYd|V|Cd&qX}=e8b= zE$8~#f}h*ri8|D$e2ho2w={$M2us9M$|@(tE6eM8+v|M|ux|D)urW}fD_4S1nvmN9 z-L%apDv=^|j_g>bCrWexCePaC9aJQ##O+POUUZXU@2|?`CX1gZbMFUv;$cmCr^o%b z0XfY1Jja<(yP}x2a=HF~pZ8hx=hXP*uGR2}U|BGLYfAdiDnWcWgnLSk&hIIi8>UUW zYZw-ZN7$sTf`CT495DL?Ntm2^ra-Ylw=%8V@_t`1vBy~vM{M!-Qv74McwJdV9U#j} z+!pt74)f@B#WY|(n8>lp3 zi8))Pe0=U)?`s{`XtJcaKk9x3yS9?XYASCp*H;CWLF>PLcZO~pAMA+)E#nxKF?52L zP`tHcGb=m1iZ%hEJ-d(o9?f(RGWwWjw+x9+>Uy3`1-_Qk$^n*F-iR%$T_Dm#HOl8PaI{W0#*<(p*zdM?W;BU|( zt<6GVu0#cpXlNw<-B-M7(BgjcA=qlF{T@6Q3UWGyeykgY=quYj9tUcK=)O~P@&hcS zb7dZqhEH)kiLGdEtnjy){`&_yONlXwFe4&!XPFU330u^J1I4hL=$4SV*60+p<8P-t zUag_ByK>3UbM(57xx#9uX0IB<4(l~}M_XytombR$Brxgl(3b0ymqr7Ga(t4jBb)Zr z6e0S{F&H&*DjX|WmvfaNE5U%SqlVQAq%195Da%}qYnZ7OAdXMHxfmL+GJQ5tp6|GP zl&i^1tP-A}xVjg?wdI$+x?H3T>RbyO4c(ZC}IEoUZJ?v@EPvIaE@0&2ocS*=Ynjg5swOJgN<&uQAoiGGQ#DEAdT z7b2p^Ui z@K#4D`k1(gM#k@vxou7qcKx#V=FgusX(t;2?Efausp)6pdA7CG3iSBeQLr>T*NDfd znxgTCM3b^Fp|B?@aapdp|B2c~*!5t!S2nlFFREUVAEHo}x!Db>22)q>HGa~&jPvAX z{w|QbHKuN!58vyyVF%H)>fv~=Zca@0vZL7voIi3h{oe>UCS+)O``|bRu?Me0u8{M; z&rz;ThA?e%{ciRxF7A`)b>yve$%VGwDxfXlao}N<%e{8e{F28bd+J{yNzc31y)C_L zy=l|DWXDsY>==qB<*f&prRDehT*PB4=Amz!8s0BQY|hcJO<{Sk0qAUaPxtBbU(=~Q z4Su&@I3BOuPEmVX9bw`@Z)6-uJ$l9GHs5U|`BRlqIi%0;dOhKO%JEL(8jaQJkJK>F zY+p_lT7@S6^CH)bE=9}eu8E2tY=iCswm}Kel0E7*D8bdk!?J8%`qqhKVCZCrZ1MFA zR`qEgqDU6lUj0#bXdNK6HM(#R!m`<}OopAQStdxX>1#aXHLbK`pLlCjJ5=24WvGSk z*A22ek@^TE-7@+YIgn)FB+7#{yRo_BSgPykME6b4{Q0#*no4fqajTG)s4W3!Gpe`E zxtER}pf4@LJ^uccEfY`vEo)kv&F6Iq#fhV_8zg{@ILTQ@z(OgVsRnV1?4!SUx%o&x zC13C$O?hmES)FarrmjR~rkJlLSYl5xXE&#UJin1od#^Cm=A3fc(b=@@9tq|-qfv!^ zkZ+Q}rTm_+8`ZJ9@o)Pj^$VMLa=lo7)>d6rjBme!=RG zJ!SdJ_3uI)4(qeILNNW1|I-Hetwa1b7UvAoQuk~{wgy*2!KbIp-Fu1cH^_cW=O2(x z1RK1g{FC_KlaK$SlD+!c!^jBQ8++2n`4$gr@DsKpEhtr-ZL}sCs#n+gopn^nRg&$o zMjvcc>w=m4mN?$jOpCi*OrB@Z%-zdX5b&hRHF^|wU2g1Zo4`Y|2!R%5<~Nv+lKzS( zwv0J@BG(eEfO0b9U`=WpQvw9L7>+~4a``r`Fw^!a7G=JVmJ<3Z0AYuIgJt`=kbrt1 z4TmuK3N|b{2?wl9D!cd{38gJOV_kaee( z`q-atfZ+}-)b=Q?l%=m_Op(=~4MJZ6X4&h8gyJ1JhZX%K(AbKB*MTA2#_Q=Lr@PjD zH^q2-c?0|gRgO#7N?(KwJ(bmKlNu>%Dbt;9Xzq6ZZ8wZTyXZmr&XZ8geDN8_eHG zP(;uu)i;+mZ#4g#7ab^ze(j;}qyAYLi`{ox6lPNX`I5Zb5R94LsyxHbrxz5VNyRua zPiVYrh#ckVHykM! zr24@<%V}LOda!d4^&s#R9os5Z+E?Iziik;H+;jTmI-~J3f$RZ1NtH@T+_G*=-TQoi zu_@pDE>G}pi}PFBth!w)+&lsWF4mCto>DPyo}3sCZ5cY_91d|E|JT7w;dWoyqj#)^ z)9N-&<~{jw+YDbaz&Lw0cEE;?&<&la_U@R??cTS=NnG+#{$5>2`+Qo`jiZ1zqEqr| ztsQUEIw$x?+i-6{861P*)qGz6F*w=-ZMH%E%d?A$f=U$oK-BGZ|G3CZs4T-K(HXgA zzH4xi=xdvz`igrq98UtKs9|!G{9KsayS3eoMSH<>yJuT-ls&YVL5mVFsIbA7M=VbP8|^4-1p>l~~q*a%rQbRvNAviL)J;q12ztYp?(0LsBG_Vn)0Uw3Pn z$ny&xM!e?-V}JNqenBJ5t1;wTl|lLib2R!oL^b&o`PWj6roZMHsnI+H=Ky)pZfHyC z+`{RC+LFUGn?)ed9KdmshD}Sa&V%@;g9f%KFRlmM|jVDZNHAG=`QE}2;-FC&m zsBdB;6@*N&#)&QxgysFL>`Y^5HjlbTRdO`Gj3j~CK z^)oBHO5~F(Sga{=-k51tyWj%abu4Lp%PJpLA+C1v$CWSy8VFKpB&znazRucFouSe%wHO%Ud(g-QQ9#}i<+$Lmon|nbh286^^ch^Aq zWQ*|@F5ll{<}a6{wXbbTedViK$%-s8!N@ufb+Iy-j&hd}0|q-Kt~Zvi>~J{C(=R-&zc_zjPkm zFaonH2-!UUnPukntEFvsx_y1=%}YJ~Ofl<@DuI4Y$EuIHQUrw$g*Y)OvYx?&jX1_9 zLJAP$$PDq+iR*{k!R9^fV1hP!dpwVPrp1bJ3{kGDy_khi_sPUzaY!-QuaZ_=3xSE;Oq$sJP8Mx-nVx_zNB0-c$t=(>~Px!~-t z87_XM5H&l7F3knE?`PhJH8*ijzqrymSGdnPmq}Serq)dbS4s5%8~_X7O9(Q>YA7wY zHiX`4XR}y*Z^l*kMjmPi(l{B)S)HaTC?b7#e=pXw4d^7FEU^{olkv$Pb5wv74Sz*X|dx{=AKb=eE;20Dv zT~CzmB)wzg!v8t#H7O^3Nv)k$Xj`OI=@vsD3Ygs}Z-O|DsCoMa9z(280rT&ZPf=|xJY;p~#(Y%x*Vo3vMF{#UK=pTCknWUV(o2Y((5huT z{Z&Y|n@t!9Kj!&|4C@2){2^r-(4zcqw+j(myx1JBAP3VeAl!aTy}LY@0})liRjk#c zQEgv*66*df&b?ZIOrqb6mko<8>7oz!&kpa0j00xWku#OeOxlm$9ZdKOf$_CQqlN{D z)k$)htyjd2bsFNyL2~48;J{EwM8%Qzwi_=v28(rl!_)~nk6*+GPXK|8;z@85an6bm zG-Gpf=5R#UEUvq`KY4Y~V<0bOne(N1q`H&}ZN4{_;0}R@E~DZPHPrMo`DJ`( z3B?GbE}vQisVv8RlyCWXH^G?u#Ar7I=2dZg!s)`u)S9}P%R$caTn=Togdg;H7+lTc zaUl+>2YzEXUv3P&ZKG8VqKA7yKm12^NnVQH*$-@g{L#H=igeA*RmPL&=|dE^3^uV~ z=On-jmAOr!E5YwE%-N8AN8u3{+x1>299=3nLKPGvWM=HNwS02#Y|r=Ke$5!?(9A{0 z(1OVU4S4|vWq~6MiDR*>{bYE^!b&x=%~bSziV+X1VL+lThr0O{&_{){4i1U+7?RX4 z476H;{qb8BIf}5dDaEr>ooC(rr7ELpT{F|-mpHM3r^?2j7lZdIn6JVEFzM! zNcnx&?fOus-6}!#^dM0*^@ZzRsFe9h{b@)MEN7*o$TX&Vk$px%Y#7S!_)EVs-BG@* zfBKp8&HP#)D;`@gS;I?R--;Yv0@p=-#)DKe7Xx$QW`Q(rCauE0cLqVp4MIwsJLWyh>L>^mdj z0qVh34Oqe5LWN*+1imRpuY07W7-%4tt2kVW$i3f$=#?d-o=i)6Hx^{+zIVgD71EUa z$2lORcf2z{PC%_lj3S8ZU5cvpk(CW|(|ktT1GBdG!y>j?pn_9_`6w?V`#Wy5 zDjkXO8t$*n8iNO{C_2w@HXAk! zYqdsgt-VXDw%Q{oT8g4*ZBo0$-g}SQt7y%(YLC>69eWc5X>DT9#0(*MB%*{<5-6wqW#xy+`MUsD4kS%UAva-J`RKO^K&G#VEH&>B@l3`Smmt#Vz zM`JuDY4j=tvgAui>}n){1pJym4oZCCb{~_dk9LcfF#a`l-dX9_`=UoqbuQSB;IU5|sgFfQfE zo}-t0k|C1u)DP|71BH&x*cAr7qKJFXE!ej$Z2E3Oy62MWmP~tCm0#-%Ydu-;=gmi^ zbd`2KzKpnQQsgstT%kvY_31`-5g=TAgq}*w&VwXPkQrjs$M{~jU*_y3zw-O0UZ4~1 z0ctg_vFe20$)&`}^gzAxpTgJw2>5?Hk3F9*_&X`bE=R2arY%`vTM<55xPnR@t%B7M zW|l_<9*Hh}c`n%y#Ka!-wG}3(9}z|emgJxtax2|qe*qVMhmdMMeq!F!LiLj1YP0Mk zZ&K2X(`jPfZ4vFh+yk1w(WysbDqW_ej9zIn=4(YTf{#@3imcO$#Gm28I`H5lpeBOL zz$MI%EAQkFXA(OVA?L+Tr)MEKW(}aXkygl-uxRw>E$yNS-0kbNE6H_wx9qMA=cc!&+@3eAZ^pm+z{c}Mq|Aq~ zjQc0uDK6jbuq=0Gf8s|AB*zx5^uY=jW_fY5hr~a3@YC&jb_IKtRT=CFh)caS_La(? z9pb|4I|a~|(gMrnYZRj2VK&%h%|+x^sh`T-A^QcJKHtBFLizgvoRo4m2^XTqZC{P% zcG?zUI4U<0?T|6AX1Jm?swloJ!MdJx%^R$b%1M0+Ur*utc5D+voR5f}DD#i%UAQ}m z0ceASYJWPu)Oh+`3POyBh9!Hiu+7^iiSp`}77}lPlqfGJlal!B5n~L*-1*|75dM zqCkeM$)h_fVGYosJ2$POcc4^ei@pau;gNXlSuDw49q|ane5cz+YIg-rI9OVVrlv#o z*(~8FZMA=2`H1I~H_v)56#|WRzE7(Z~Z z#C&bn-<*5Q@8mVxHP7ICxR3)gO%x&$tGjljcVWWAQ02-Db6t*!xXx;T>3sW--~cfX zMClbpcM;A?{_U_pRcU>1th$qUdmv+Lz#noHzKJY@084^_Wd|a^EgGfJ1eLP-VpL6@ zZ+KA)2ggVM0?ri#>r37oYoFkiM&E~4cK;)=_Dkx6I1YwXWzS3O7HY7o3t$j-8?wi> z>$lE=1cK`3M#LL6+Vdh$d6u@&r*}bf@Mw{-iJ$w{4tmOi@)s65uDHu};pBo8wzFZF z%teJWo=8^vaJHOzOYOs-5jrqyU}%wRL(LEIKP>q;NxCLHiLG}lQ$bx5VyH8{>lWPu z|8c!?f|A5?LfXo+uk-$5lx2u3o8H;bX%p$r8 zf)Elmf%#<>esj6NMvAQ(JTtOjql!eh%fmS)jnbW!Jw%-iPix~2W}4fW$$hdKNx*r7 zm|3OsF>1NX>-YenzgDYfcQoH52nvhq430nz?jPT5GmfM`>LNKw0nPNnK_u|G)ngft zS_$;az@?kax9E_I?LzCOuMv-21;obU*;(U$>*fE*&;0U4i{Y9>U#1G@A?B)+Hq{q z+7hzQ!7UnL9eBrU{=xl8cSYx$JEx<50ryS*`pa&G{p4{9@{%Br5iDpmDWesA<)lrs zTrXj)ugnuB7x`q7>!HrN&grwPVX`#2G^fv}iBU`=3cFg(o3-O_Vv@q70*)O|O$S_v zZ1AYKTv>*({vTf9N~S4}972yN35JIPWgR?4D)Iuz7)Ku-%w`%GOMs|T-LD-XFJ=b4 zh5)mMpjK0b-ySQKh$%2v+d0U?+GaV)j~IJnfE6!qs;|7Sl4|O5(R^S}5|~i)o4=1^ zT!Xu=ddd2@nrD9aynuF{C)qARZ&FO)59+vb+QRHd(kJLd)Rfmmz-lx&s+*gi(54hr zH+z_}CmnH|)c);*Q<;H|Iz!x{%nrih~!}b=h0TcJY^AE z;ZNUv*T#2j}cMjbz=B)*Gu&Jotp3A_vIZS*#5 z0S$>M4ZnmanNFafu@`2T@f;&XLs`D<2n&2(Mzzc=U2uQENLE-w@^L}~5HViq+2N{M zwVzDUG19_T%qEB6^4kco{q`?s_}F6xasg@h+QIHh9#sg+n5|B3kT*Tz^tIp2UHEDf zq}6hK`E;%j)QZd{xpJ{Ap0612s0eBLk-gj;v+tyJq_QvIoiekOqx=0bN?(1)`PMd} z`^hH9V5hN(a(kHRH|hG;tjag;KPH%%2m#EIeTEtHPiO8krneKzR9%%$3w5B%^2u3m z=VSzn+sTbSFUhg<)mSgmnwK^gRWFRN@0LBd8Z+F9lT>D16L(osXK6#wG342jiwf($ zbGYBc8C3e=1;LAZLPa$WFJ#{gNC6eT?`3Z@WVvenM?h~x{>BCNEFPXP*y1VsDG-sn zn>$|fZG02CDp?_tyx!#fCxG&r=*cJi+P|zRpuR2Za4gZVK~9NmpTSUWT-A|#l7KqM z3x9-HJotep81JQzv#zU;WzKX3qDuB*RqBAVa6&>vO4IQTas2r(KyF@-M_<$ZW2ZnW zi;kS`)}1eZQpxy?y2~$2itqOa{?61S%TsvL>aHU5Jo|Y~LA&^{k-QN_YCkgy6k`9` z?)gJPk$lRFMSq5Y&<`s%<}NO4Ngj>o;HRC>cS>P6QaCY-Ymi}{UzH;qcl1x}$FUeY z6%t+&=+LM8Wj=R2>eZa2@q4!(d}0t;)#a~qQXP`K`?fYY zOkw(S7RG8=Xr@8L^(W|8GS_m8yJG2=4;9*He5QDbV|jI^w%eVLVgQB|U3>|?OR7O= zV@}qXaGd^L?`U7;{uYhtcqzQPrlM7-TfwjJ%DxU2by<#KLPwdkpgDR^sP7UqTssD* zniT$+o8~CFS4ruR9;7HgaF7KDH?|gzUW2W^V(~&w&Yk%VgN>a-ZB!=GwG=-e{8BB( z1;oSXNfkT^cx=euIFcGvE)}(%FS@lu%a&Wb&NI5&FAh!>E-y{+ zaU-$`{>x#(ws#fW{A=~u-JGezv(WqSo>0#D-zfFO#%@>3Hz3&zl^Xt?ha|gdx;qzi zr>or}3j&u}cgd1evdT>P-|}u->#bn3ZpT9v<5QiG!AFIDhLb+-r&pOGy9TSB})SbJ_ga`Q#Bk{Zo1LDySG8JIPTe3$!O zeVBuV>ZSAD&r(!q{Ns^gbIw*1VG`W{ehz$W=P} zE^K>hF;9J8I!JRldlF~nHfL6DRCa_qlCCz)*#jTc zogF7S2328VB;xY!4IYJ`j#5b;cQH-dzz-FBew%i93{e9`eBFK5iYjW2)=y#@D=uC# zV7VI>oTMOX3&!C0f|YCQapY>^Q#+rbJM~sdx(ZPGI@#y5t1a!Hs%^ z)PhSQ3a$g{q`#b|wYJKCXk?JZM#{b{;0n{7{V_Z7yZP9FQ@}x%qv#svhI*5~U|%Lr zYAKbWP?i~~bm!A_ms}40V)!=rPa>)CC~BM-~m- z$C@>X&e^A3&DlgWjpUW;Jo)Y+omJU$O#*$zBfm|zIEZOQ-h;pxEeYrO_&{t2!LaxU zGPknv>)xn{eOvIv)5AFkpio=vwio3T%8qU>;sK)4EC$g|B7E;(yY%kJSQdyU?bHTj z_J`e56!PyIlxBv7UoZldMHfdvVSttxlV5s&d<4yi8TX=wSg(rMg0{v9M)7B-D%M znda|S!?xpEa53D)IRm0v!z<~#Sf}1sL>c^Yy@>8FRuHw?zZgW}XOL_?>r)W^jmJ-K z5Sb+GE@Wv%Q}n- zQ;IviGM_$nnJ1k$OHBN@aIAMF!Yj+fG^D!9dA1uy8~O|{!@6+})^l6m%(O&dU;fpS ze@mu*x~BBXtMPoF&?C*m(q4q&NFt*>BSh}}S{QNYrWv*67KXUFZD;p#`Q;>3N>Xz* zTqk!FZ`Wf}*l}JZml{)sn$H&DmIgiC98JhmJb1Zwyc=}3(j08EmP+l2dv3we8~U`- zJ9|XKF*3)wlbvj_(k0`MpoQD%xD|t&T6Xt1CJ(OnmlJ4!a$h=K|lg+g$*mUWl#{ z#<6r4NF_jITM{MG_7$Z$_+2V6nDSyxiK9yz16D@oGZeBLwsf?8PabGn zMD?dPII@Z9z6%Uh?Ay>b9CQd#Qg+B)z7PH;=IL=@UbE9T7UI`0>O`q8Yn^V&#nruh z0r35gK;ii7Pg98G$8jhf{1}MRsNgdw^RIcgOr;)4^}xbEYA9DQ@=l`9JKH^NG9#9l znDv~PGeqHFJd_^m+<-ng;-ke74oH~>z`aRJi&Q{{>aV{OoH46ei>J3BTg^ZDTtONA zJF|WK}}(^G1g*jS8%;! zwm3<*>fbxkR%hxKyDMJyos_1ilF&&d>cfs#_*_M!3k_#m;W4j$(fiZ>wa2G_mNSd; z&{!`?Jnjn?n`?qmSo3RanDI{RyA=3&e?-1tjX?OH?4*vmtgBZ_2;sV4JV3Sv6TA3s zzC%@VU~7s%@GRziAbGY7E3z=l>EjF7!kZJjpymagJ-4!u)gO|@IB3~b`fex(dJ2zD_?^Pw?L3&Xt?p+{dU|tpIs6Itz zgpf!m-EJF??@e_0cy8mLs*$a#7vAr6b@Ng>PL+r0JO(uxqf6(jN|(WYL3^$>CvH4z z%QJg-VZco*kRlx_UoJKof6t1<5-Y8{@HJ7^XE}C;b5Rhtp+d8qmjEts4bMu zU+GP%<(#B|0MhG`ppg{q{mPMW8D9REDSy{eTInLtBI~iK8_V{6>&Zm}0wcw!-yOCXDi?cV@Rjor-bJn5>YE(Szt`@&tS{2SjkGlPK(Fd^0s zO*|lExzopdIA7vk@0nDN*KAWloGN>(Kg&ptE@-`R?P_Zed?YE6 z(3KNbR+Lk;W`eOnxpCwx%`cLB||ul;`)8z z;$sw3{}E){Z1cE^MBE*w=jR*6;TA1tP0B1HDGz&|XdmX47 zFZFlXd_}_48C8}|ZxyTmcJkh#E?bK7RuMxe3+C~LdhGci+HY|aO%?0fKQ#p6OMZ?d z9)EXsrEVGI&8w)2QaL(b7I-xstQCqUKQ|2i!WpWYH1p=}JkNw68!ycV@g}m@S|V2Im1wyCBj(pGh1;@VKx$d<2iG zcR?fQ2j<{iSL}4~t%j-p>vY?PgN#A8tQ=q{05O1U>6^7pKF+UQJIV?{Q~$=&Y% zTR$qbr|6{8F_VQoC?t`ARpYr(&4ogBAgwA!A+VumM#nL|=-)M0SJAMV0Nz0`>0kf< z2nL!5_kMv|xIYUaAw4oMZZ|dVB=+L7$yPhZpf{S;-VN7owoNBDSN!-YY}f(nDXqWy zhwP72+^P1y)fHUwarQf9{|`~&|B+G$SE(fBO*+_lH0FKMO*rfcWQVVY@$Zr|9||uM zj3`}W5ovSnh}_)|^S63mQ#&4|KqoughE^MS2f`A%#OBXe$;|TfN*3;Z@4eS*drNJ@ z*wcNW;QQ0Bjh@Q zZcz+H5rzlavJzBm!Lijs@^FINH{cqhHxS_(gz!0S*Ndj(OpC zdH9BNf2RY|vJ;&kWIk5y*vzSG7f?|Dbod*i&=5rrL3&1@ZBd&9kj~gCJ15XD(TBvP z#x_a!S<}3zSyUtCPQC{|=$`sj)Mxgw+lSSxHa|$tikr@(dRH;+!BrG+6TjH+6%Mmu zQ{SL02v~=a_%9&(uKecP8SnwMt;fqsU)IpOfjd7hMec1Uy(BBHGlSeR+U4$-a;o8R53UH~Ag|xYk)N(NuBX3Q~A)mDp3W!DqTk-kT{( za^UsXZ5VL%fu&#zDq7Jy@w+~Q!L}+^Sq&M@l1f+#vdcx(uzwW(Fn?*(cH+CTQj{m2 z{7~!7orqb0-<>W4swe_)TQsr6S6vTR9H&Vg3g?7pNv1OTH(ANUNiVJrjDjgpXWedg z4~u$gKA8Pm+D{vBhwq1eii!C6f@tGCwRrb}hEP;ykuFN9n~FU61)8#I!;N51>c%-Y zxiwF(xg~Sr_SHvD0;>0NM~pi{2+0j-ed?FspbZWN|BOB()N8qShLND##lMTg0j>lu zyC3_y7l}Fxdli-u6qau&bZWG@qP69{gI4xWEF{jbPqqFD+jj0i&Kq&*bD=XgqnP@A zB{~eB_qD|Gy|8-Q45m%-#`OGqXKCGRWzAHK-Hg?+Xq+IrX0nPX286;LgiQG~GNjPi zk%-yqQ<3#BDaQRpJVX}#BQ(amS*xqY3S)i-ZLlontv2ub`sK9$mB=`D7MJFv^&bqv z_U9kr7u-s;ZU8>2r1J^;-Nc8l-$R0IW5REtd;qGmDa3E23RU{(fn62;#L}9fgV4Y= z?;+3%WcsMP)i39;qgFTC$$c@;OwskWwVPB_ZTpb)>LYL9eMjp374dMVICZgJdbYX@ zGhzfZ)FVwEF|xuirN|YmT{j2sKiQDit=Hu7bg*Li$(bYyxKFHuy&&eTM@`0*`&Z6M zh?B`SG@hp0dycZ%6U*1NjrmU{yCFZH3Kw(~zU) zVq5e8iw@)4JtrGAhH7SP)W&<1OcB;x0qFeJ8UwECUc6^^{LlQFPAb zgiYDr35#MGt0ummoM{CJ{`(OYDyAz#x3%DNT!k!eawA%DvWKa6)qA$Kf3)K#WpyC` zw|OredoYfBX$%5B>5|#^0{V~jw<#8RRE)7g=!biseOSngq`fyuDMv{uhg}&%i(Hz_ zDn7tcO@(srLK)8QeC4Yck0UM2uEoCP6R^Yr9Jmo>Ev)C|FAVhaYxtg(f`RQ?i`Yh~ zdhH?KM(D05lpMfPyxT?If(fAdA}OS^@xpX_G=Phi`T+NbR+jL=sW?2%D|Zzg7QKbe z=`JE&#X$N3J#uuL+aYi!wZ#hSvv^MiSx(oRe7rG82>T4}8dd5KdJo5{uL}&g?rxJx%y6C1Mx;I|prT{w%cL(7p z^}bXxjKTX`#T+ZX+1lUBl{)40Qg%4O%=Fc$i-|z#2t`3l%=o?{HCiNk1O6P+z#!*Z z@fj)Yk$LupADyOn`e$znoiKo2jl1}WnwVX%J>Xd2i6{Sw5(Rcq;n$T0(Ip&`2$

e* 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 literal 0 HcmV?d00001 diff --git a/FAPanels/Assets.xcassets/menu.imageset/Contents.json b/FAPanels/Assets.xcassets/menu.imageset/Contents.json new file mode 100644 index 0000000..acf46f4 --- /dev/null +++ b/FAPanels/Assets.xcassets/menu.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "menu.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "menu@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "menu@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/menu.imageset/menu.png b/FAPanels/Assets.xcassets/menu.imageset/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd144f578bab5b7802d91c98bbe381ed5e6827e GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0d!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z%2~Ij105p zNH8!kMrMXYltlRYSS9D@>LsS+C#C9DVstT4fPE4;bsH1+JHo@{EISEfi{E8 zw==W>t3(ll+GC>+vK+}V5TAlYfnK%aveAbJn;n3{et&ix-4!y1s@#$xn)x?fAm?dnPGw zym)-a8v-|K4zkYft)_2dm~Z$zE@cwDV1W{(Z%5 z_5iIPYIXiBFIz1a_`MIB^F6WU{bbW?5(ik-_AJixkJ!NNBD|rqeEIeR4drRemH!l6 zPvTVP>{Hrd)@XJ`rX_3Y!m!P`g+G}8uUagqnq9YWJua{g|rBufrvR^$tDQHHZ%UQ8UdsTuy zG}anz*Ev;e>t^F6K5d(e=Vb4CL+-=NzimCTgIBp`{+c(lCN-T=Z+<>~wu+MUm-|Lt zJ2Qo>4)ITxKAF2?#sQ6{*Y3*mSwI@%U1Dx5AEePL>n}yStkO!i0SnyB7R4 zc~#CM8)da#-own?H&?{g?||=tHQA5fa);?X@eTeJ`}w37znWIao`suk-c?z(Pw3@o z(MwwU8yM_&{m$H<9=Pu1oSAbx9gO5=wA%k+=QR6p|MTh}VD1RsdxoPgg&e IbxsLQ0MpBOxBvhE literal 0 HcmV?d00001 diff --git a/FAPanels/Assets.xcassets/menu.imageset/menu@2x.png b/FAPanels/Assets.xcassets/menu.imageset/menu@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0ce30ec4dbf93ea4c066132af19f85acd13a1a GIT binary patch literal 1076 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>ZmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5l;AAzh%9Dc;1&j9Muu5) zBp4VNBQrxHN+NuHtdjF{^%7I^lT!66atnZ}85nFTtboki)RIJnirk#MVyg;UC9n!B zAR8pCucQE0Qj%?}6yY17;GAESs$i;TqGzCF$EBd4U{jQmW)z9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqGLkxkLMfuL^+7WFhI$72aI=A0Z9t+{{zaLoK$}74 z+Zoz`RicPN?Xl4ZS&rlwh)=)QzHU}-~v zds7V`3T`<4L43|aZ(mQ}=IS5pTO_&6m-xDJ@4dTZ`4ZphC;zf)l)zjj35S*owq_G*o;l3kzB=o#TgG<} zhCLkd9UpE_{CNJ&(I^w61%Gx_{@wfY;Ge%uEWrv|+dlhml3HzehV9zFi^tCYI~f^Y zlV-Sk^7@^uv)`BUI#h?Xf3!2c-!Y#(fO(_qlo=i;OjsT_F4)z|v$=bNhmPl(a-ZC= za}-1NZ4l9*uHp|>f}T|;q0w%(w0Q#Ht`=W$>x(t{yZb6uRXC@Qhl0F zo2Ad29dqZI7&M-Ze{ExBlAvZV*>>8mvR7qipFY3(eAewpO0_k)DgA=MwnsCLpEUTr z?8NOyQPq_t{-@*C#3f%_Kk568VBalEfc`$MC17Q9$yz67|C=?bUneh*k96KUyYP_Q z#MQQ0Y8~gR)^O~(YKSpI_(8vi|5BE5+Ik zPlA6>J1>26Cu727NmFIl>0ZAwU^kSK?& z+*BUk7LMsFvNfG6H;VO2J<@Z1`;@IRwnJL=$llna0_NErx7Vr1YgFBHieA#czPD}1 p-&0|qZ1&7KphEWs#u?Z(&gXofjk*ey6`)HBDwHT$Wv zT^QX24uKgW7dm+uN|l&r$R4*n`Ad1OhNxr%tDh0m3?O5!M`N-Js+~Yre8^|Ans`w9 zVkb{Rnap>U*Zn1nLQ)vSEKYJH02w7ptbKx5oy$=Z_<;9Tgz!4`aR0-=Kw$86^>bP0 Hl+XkK#SC7% literal 0 HcmV?d00001 diff --git a/FAPanels/Assets.xcassets/right_menu_1.imageset/Contents.json b/FAPanels/Assets.xcassets/right_menu_1.imageset/Contents.json new file mode 100644 index 0000000..30057c8 --- /dev/null +++ b/FAPanels/Assets.xcassets/right_menu_1.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icons8-Home-55.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/right_menu_1.imageset/icons8-Home-55.png b/FAPanels/Assets.xcassets/right_menu_1.imageset/icons8-Home-55.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6ee52598deb10f6efbe37cc78a891b8c7f38e2 GIT binary patch literal 950 zcmV;n14;aeP)Px&a7jc#RA>e5n!9TiK@^8`MezkH*l1_r11u6BQIk%=A}JKD>}<5OGiYOJ5&Q?V z5d9Mbt5^vZf)WH98yh>{1{IBHFn+(d6K3bm?w#4k-3{!4AG0%i&YAP=%--zYn~{;u zx+~CKfni>O-moTHUS8h9TnEvsUa$8vbY9{%;(Gy|LmSWnx=)VBw9Oj@PNL69rgk#4 zDtvD$$YUo%bJXTXQ4{E^Q=IxifcVWjv8FpasOWWr9Lk)hiV5Q9&^9NJ`g5EQ0nDl~ zYkYO8fex#lkp~ohLI7xcMraIRMvDC5THq3}M;@@>PC2y#Rt^W)aR7W^&l%s3)Y?`n zpgmEkV}YRs9b$^|p|@CydSw^_JQF#LAJ z0yYZA9+F(F@hY!c3MZgli70^(? z4<^WI>-j)olA|bg#hluL0o^#$uO5!fRe+fSL$|2$x7%vr$b1Bur+a&%ynD>{^Borj ztPYN<>HssaMF6XTqk_Yz>J>9!ri}$G4>u&RB7o)KnDG$$WM;P7GWVF3#(NmLf**+< zH4g+)ErCsd8QS^)8wRTnkj!If*jv#6xoveTn1E?7yH@8t=Fa8z%L9^e6txY^fEEXA zIaqN(B6p&9CWF;BxfQK4Qiq`{_@1a;de^#`3jg0}BbX^O6!41R^vq~mo54(-A%N2> zKZFo*hQIKa&{K4q9~r*uFFxaXp?rWgsUK;7@PC8;=EUi%#XU$raKzd#0?t#bzW7zG z`gZLqnnw4~9ppEGAzh&&_Jp9_{>Q*l3GPTgDu9b`ZpR!p0piAk4`xX?L?{q5vbl=%n|Goqa^wquIS)TCslHeg)%1Na8&!WpYKB1>ncgp&<14Zd2^EKL<@@#kK2j%VKt^BQBX5Y3< z9A<2%HE=xRg5}oC3SLJ`sLiJOu4RGrZA;scz%lx|AI6c6H>0L)kpf<#d32W*)3Mk7 Y0oQ&7CsBFh4*&oF07*qoM6N<$g5(g(R{#J2 literal 0 HcmV?d00001 diff --git a/FAPanels/Assets.xcassets/right_menu_2.imageset/Contents.json b/FAPanels/Assets.xcassets/right_menu_2.imageset/Contents.json new file mode 100644 index 0000000..c1eb1ee --- /dev/null +++ b/FAPanels/Assets.xcassets/right_menu_2.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icons8-Music-48.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/right_menu_2.imageset/icons8-Music-48.png b/FAPanels/Assets.xcassets/right_menu_2.imageset/icons8-Music-48.png new file mode 100644 index 0000000000000000000000000000000000000000..adff73f437c88cb8eb5ed2a0facf171a77d172ec GIT binary patch literal 816 zcmV-01JC@4P)Px%>PbXFRA>e5nZIikK@`WcCTc)L1;IuG+SynLB1W-^N(wQJSZEy&h63@?gdwaW&-TARId$)ld_}LCY8s8g{{ZI>zphH7Z*GqPHUS6gUG8fCvO1K^K7N z4JbSTl;~q%EvWZE^az*)_rMPja=ejbL3aak)vrIvBA)hV@^6B15J|3J3xN2lB=@iv z$(;emLFTrToFNzRU6MQ6%fvqhXTioIVfZpb#+B|2idB+X+AoM}fte_Z7EC#^4mlak zLA#Jf%v*f-L5uoxnz;VCGUu9aeBtd|;1I~{nu|(F?UJjFmBg|Ao9hEG1=eW^ES)iL za)_ZE5*tojq^*Y5%AedeprPJ$1EF|cBt=o;AhZrFQu&6n{o9R!bn ze4yJa!c69swll0A#H4NpEy-78mliA&WdZ58vEfiprJqSIoh^9>{UN@Fp#4%*Uu?Nc zu0_e;2mVSPgZ)$1vF<_;hwcuS5aarba8@qBXd}Fm?f~zCVYl<#7mR|t0c2O&9pHDp zeO{5XzN=4rCD6M&Xba$^#yqeczX;r8;!OMm->_xw#wE#?6Y?&1a}C#T_>Wl9{@$vl}P?_%VQdcC;$MYTabb1osIGBjBjq5w`1WXh2 zfvekqv`lxn=vJk|Xcpkw9p=cf>kbv_PN)$x4{V29cSx#KI6=8fcTo3ky#@=g=?-^@ u+ffJQx!*+)H;TBT?r@jx@V*Y>m4<&VZYLgG)Q&v>0000Px&ElET{RA>e5nLB7yK@^5}^Ux4AM#11l zox5}I778tCWgwRf6!Y*}DwVqMyAG@e8%+C?_JzS{u~_^;KTd%_2N(h~AWdF!QAoxo z1l9va(xR`r_KERDFc1wJf{{u*0b03+;k>33B8WjPgM{6w7>KysQi<6A>waL=sU_2< zHLTdNcsu=Vm9a;=0^99cdv78vycR6b22f?Uv1*)o7=p;^%&Rq4T-;d2t`UMrkKMIu zc2;GDQ3xX1wQY8vZIfB%LJ*nGvQS2yw;AnLwE57?1+9n);HyI*!9JVjL1c{s z5&1qGMDifA&mppd4!U!r%DyNc_-J=z+#|E-ZIK zquYn#H}DYbN?9tOODwt@jDnGhk<;-%tvru1pC1= zU=z7rj>+n@o!~gQ3*?7y65IwyL5I;fNxz=F;=&0qKPVdZTl%MJF@o&giURiv6-Dnb~_t#sXW#T@k?;JbWV zIuXK1?$Ov}$VQ^>2Rfpcr^;*4XESW#oO~bdHwV;zVbtA_XdD8uk&wXUhxdqdl9EQ` zKvFTXe$6o`jmW0Rf=`B1^OtrSk)=t?$ofkni>DP%D+AGI;4gd$?)ZBPc3c1e002ov JPDHLkV1li@k}LoK literal 0 HcmV?d00001 diff --git a/FAPanels/Assets.xcassets/right_menu_4.imageset/Contents.json b/FAPanels/Assets.xcassets/right_menu_4.imageset/Contents.json new file mode 100644 index 0000000..58dfa88 --- /dev/null +++ b/FAPanels/Assets.xcassets/right_menu_4.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icons8-Video Call Filled-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/right_menu_4.imageset/icons8-Video Call Filled-50.png b/FAPanels/Assets.xcassets/right_menu_4.imageset/icons8-Video Call Filled-50.png new file mode 100644 index 0000000000000000000000000000000000000000..92d96fd339d5024258cfd53ede6f32084ac73da1 GIT binary patch literal 474 zcmV<00VV#4P)Px$lu1NERA>e5nY~H_K@^2|R78CTD?!joun{ZmloSyw!Ny+ul!733c>`Ntz{b+j z!otqV)<-Zlx_)@$%clAcGWfyEo9 z7N=-z(xC?-gr%lV_?99Zp$oJkAZ1gh)aL;Sb#r2QkMmb(BVIQbH*#15u!T*P4 z3%w$Vf>uxC6;Vf(=t8eZqM+5&ctzAvCA!dhMc%bJSO-}JPx&(n&-?RA>e5nM+6&Q5eU&W%hs`)S~A?BIyBHX!a0-YGEKz)T%Z;Rz;gO1qB7! zx^=q*7ZKPlC@3uqLJfP7M9~W?!-A;HLR0hh`(y?WbI+MMbFXvfEd1c_IdjhUedqt5 z^O(8glqr*z{~gF?vl&nUPJ4ONFg;AX`$dLZX3p3Q>oox z7OXb9RtO?QfCx#`n|KG8@-Kf}FlMi3{`{A-rLIQL`zx?ih?Zwc+V%zlwH!j-VMMeuLXezVtzm&h z>?>!iN8H>)VPk5AcmeWb#uZx#kw(PGR~PM1i!dSA3GQ=6iN|9rH3-q3sKyx)!UTP$xGZ%CtjQ!oxP{J$ zI4~;1WFincBN9aLcZxHn1Vw5;7be1*1G6Ik7nlEsr(vxO8hyiU z)sRd!zML3~Y-1+C?<+YrG8;WnxgwSN2}mXze?QQEvh@8XupE@}Y((TWCNr}e41pv~ z@>_kF^F>6STE3%NGKhRGl2;g6ZaVu(V<&j%;TdHakSFsN4@)U^)=T3-X5zlC)6|xi z5J`rZ`4q>%4zL->5q$?VgLa4vQyPu<3OaXrsH7C(E#L~Va#Bv(Px&t4TybRA>e5m`g}hVHk!Rtuzxt5Tl6D&=3M~VTJ?|EhHil6c;UOkzfnMNZhpw zB7&%(TC|835zz&#m75j`6@(GdJz7){bfXJ~S$5H$cldsrPIEbD(wRAMUU)t4`7hu1 zz5mSl&p*zY6CqlGXa%Abh*lsED-fFkdB{8CDT`)2Vx9uZ$V8rU&t%#O8EJ(dXEJJz zW2yGmn3D3C)N>hvHM$QGo>S|lSSm}@P33UdwRtThug=*OuFNM}TI-oR!HREfT>#vDPpDlK<2TD7D^CL@~o1-4tj zQuGBi&N7sv)N;0?RYO|%F`@uJVV?!oOZ1=`X9nu(3*4~YW{M1P`=%~qp!z5{SlwaLgB z++v;D8uviAw<8M%^27KEL^Ve%5UoJ8 f0?`T-#0vZdIVT&2uN)%L00000NkvXXu0mjf01(F| literal 0 HcmV?d00001 diff --git a/FAPanels/Assets.xcassets/right_menu_7.imageset/Contents.json b/FAPanels/Assets.xcassets/right_menu_7.imageset/Contents.json new file mode 100644 index 0000000..842d72b --- /dev/null +++ b/FAPanels/Assets.xcassets/right_menu_7.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icons8-Cloud Filled-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/right_menu_7.imageset/icons8-Cloud Filled-50.png b/FAPanels/Assets.xcassets/right_menu_7.imageset/icons8-Cloud Filled-50.png new file mode 100644 index 0000000000000000000000000000000000000000..38bdaca51966c845d02f2d71a5f19fad2748c6c8 GIT binary patch literal 719 zcmV;=0xPx%iAh93RA>e5mrqC)K^({5KJAYgh5b2*X+AoKN+xvakcaf35@85I2M^-8d-pEg zI)n&;L=Y4df``asb}72lK@S>)2em*nQB>SM--k~1RM!ezi^z-7Q?z-6HP40z>tExxDk`^UMu71|*KJ}kix`007x9>?Sc2Cl&~*np_m zqTvPHNSqTywZROO8n5YaIT3~s(hI*zb&zwtR_|`CW)Ls}yE&rDEgsPEK`dsNxF7b* zRenUj9qM|DHB-{A#lQ^=tX=0EEU??GY9i{JIedpEomVgx8LNYN{#0a4gto&J>_KjP z2@Af!4#23 zFi}Ux=WxromdzxXnrc)T9Hu* zJ@jg@DDJTsJu=d3k?1I?V;*j{Xgw8mg(dY%GU8hz)+BRZw^n6-T1?YazpYM2^!~6t z)@0Px&@kvBMRA>d&n$1g8Q5eQ&)TrE)NmN=&N@CY7 zhNMm47FYtdOkCn@3SAIMs=-z88-!)zR*vdW1VP*jK7nGHa`jph16d`wS*+@P@+fy@ zAVCmRfhRuX#SW>4s{e_J=i11?wQL&)dvoU908>wLS?F! z5vMkNU*7244@%Yg{S;*FT2$Xo#|cp3H=qP!OVn_HU2M{XXFYxDlpxcmY0xonRN(27;PuRITT-h?tE=@CyVrEj6xzjaf+u5I+oN zKu}YyjafMeCW10E{x9gwBKHL7vl>i*pq9v>hOGhESO8vjiQy{)d%z&L4vvEKMGapo z=Wig0spbYZr>1*22%9tZEA4uh6o1Hv^PQ*96`wx&hK5r)8C4Dz@*VBd|E?ioJKGn1 z`Y1GL^y|sdC!ertFV~e_*Nx3Cd4RSC!fv3u!#=Po2iI;R{>AVMbya)2PQP7+GI+-6 z2f62o`F(w31UDIe5VuP+(iViFfU$RsF&%~<#BGz1<{%7tjveD_{7hrm1+}_9k>~ha z-J2z(HrH0m@j3WT8Jq+7wsx)BIKNENAP>vcLa&qAc&r4Z+(+{ec$Y}pT##u-ieVQF z5xUmg2G&GKKrv=Szr613{wN`{F-CJlzD)~Th<2$KM7&hdh&V}eL%wa35G}XY*d})P z?jxdGK6%#ByanlH48AS)r||Q% z=IPS59@~pk)vB6P7Iz)B%=<-}vt}%y|C;fs5>g~KB#+Ar0Z xV&t>CmCS2SIZwadqL=%QsCxQzf)#o3>>qd}lVzWPeck{7002ovPDHLkV1ha^0d4>Q literal 0 HcmV?d00001 diff --git a/FAPanels/Assets.xcassets/right_menu_9.imageset/Contents.json b/FAPanels/Assets.xcassets/right_menu_9.imageset/Contents.json new file mode 100644 index 0000000..d924038 --- /dev/null +++ b/FAPanels/Assets.xcassets/right_menu_9.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icons8-Room Sound Filled-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/FAPanels/Assets.xcassets/right_menu_9.imageset/icons8-Room Sound Filled-50.png b/FAPanels/Assets.xcassets/right_menu_9.imageset/icons8-Room Sound Filled-50.png new file mode 100644 index 0000000000000000000000000000000000000000..302feecf33ed1edbb5ecfe480090db0c9e21627e GIT binary patch literal 931 zcmV;U16=%xP)Px&T}ebiRA>e5nmuS#K@i7tNiHHW#E625RV3I5mLk|huoCP=5Yd2@Vxg5-r4Y2T zvk*cQE3r_NScnh>gIb7%h*lD?Ng;j|qKS#WIc6TiySI1yE|R-FGw^42XJ-F9^LF3I zy>~r5>++u+ft8h&5ikkn!8904?huglFnA5T%qCR`nGb;%z5;D8CsPOs4}#f(B5I~2 z3L(>t;7OkTaIIrUN8kpNz8;0?gU@J0yrEqrllCjE8qqwEin^9x*a@L@+I`ym~o|J zAil1Xlvc5mK`aOBGWesDT#6kV6$j~6C2mPYP2z%>rKey0dQ3knjKO( z=O#ckAA{{Q5cvuANC1x4Bv};Q$ zI(cdLIbsL!oHjn%YG~i??h6*EdRX-jv-ex09hxm7H@j=#43MpT5qLSMoj2Y{dsO@L zW^eb3ERu-aL*!l81gr7D5>tIbb^h6EzuMpC;@fxCVpaah4KXVS!iHjj4TB<`#ud`g ztm+Y^YaSZA<}toIeprR}Yu?WOwci7gXGDEip40k7uKuU4k;P~xO#kJB6-qJbzYdaO zD5N`H&}lKUr>8(Eu~luPAzYhRrj`T~_JOotV!L9}|E%DON&iESD<=Il_zQg9O4`z}2aW&$002ovPDHLk FV1nU0s%-!O literal 0 HcmV?d00001 diff --git a/FAPanels/Base.lproj/LaunchScreen.storyboard b/FAPanels/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..fdf3f97 --- /dev/null +++ b/FAPanels/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FAPanels/Base.lproj/Main.storyboard b/FAPanels/Base.lproj/Main.storyboard new file mode 100644 index 0000000..d13e23e --- /dev/null +++ b/FAPanels/Base.lproj/Main.storyboard @@ -0,0 +1,613 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FAPanels/CenterVC.swift b/FAPanels/CenterVC.swift new file mode 100644 index 0000000..7bb5b71 --- /dev/null +++ b/FAPanels/CenterVC.swift @@ -0,0 +1,230 @@ +// +// CenterVC.swift +// FAPanels +// +// Created by Fahid Attique on 17/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import UIKit + +class CenterVC: UIViewController { + + + + // MARK:- IBOutlets + + + @IBOutlet var centerPanelOnlyAnimOpts: UITextField! + @IBOutlet var centerPanelOnlyAnimDuration: UILabel! + @IBOutlet var pickerView: UIPickerView! + + @IBOutlet var leftAllowableEdge: UILabel! + @IBOutlet var rightAllowableEdge: UILabel! + + @IBOutlet var sidePanelsOpenAnimDuration: UILabel! + + + + + // MARK:- Class Properties + + fileprivate let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) + + var pickerDataSource: [String] = ["flipFromLeft", "flipFromRight", "flipFromTop", "flipFromBottom", "curlUp", "curlDown", "crossDissolve"] + + + + + + // MARK:- Life Cycle + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + + viewConfigurations() + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + + + + + + // MARK: - Functions + + func viewConfigurations() { + + pickerView.delegate = self + pickerView.dataSource = self + centerPanelOnlyAnimOpts.delegate = self + centerPanelOnlyAnimOpts.inputView = pickerView + + + + // Resetting the Panel Configs... + + panel!.configs = FAPanelConfigurations() + panel!.configs.rightPanelWidth = 80 + panel!.configs.bounceOnRightPanelOpen = false + } + + + func setCenterPanelAnimType( _ selectedRow: Int) { + + var animOptions: FAPanelTransitionType = .crossDissolve + + switch selectedRow { + + case 0: + animOptions = .flipFromLeft + case 1: + animOptions = .flipFromRight + case 2: + animOptions = .flipFromTop + case 3: + animOptions = .flipFromBottom + case 4: + animOptions = .curlUp + case 5: + animOptions = .curlDown + case 6: + animOptions = .crossDissolve + default: + animOptions = .crossDissolve + } + + panel!.configs.centerPanelTransitionType = animOptions + } + + + + + + + // MARK: - IBActions + + @IBAction func showRightVC(_ sender: Any) { + panel?.openRight(animated: true) + } + + @IBAction func showLeftVC(_ sender: Any) { + panel?.openLeft(animated: true) + } + + @IBAction func changeCenterVC(_ sender: UIButton) { + + var identifier = "" + + if sender.isSelected { + identifier = "CenterVC1" + } + else{ + identifier = "CenterVC2" + } + + let centerVC: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: identifier) + let centerNavVC = UINavigationController(rootViewController: centerVC) + + _ = panel!.center(centerNavVC) + + sender.isSelected = !sender.isSelected + } + + @IBAction func updateAnimDuration(_ sender: UIStepper) { + + let valueAsText = String(format: "%.2f", sender.value/100) + centerPanelOnlyAnimDuration.text = valueAsText + panel!.configs.centerPanelTransitionDuration = TimeInterval(Double(valueAsText)!) + } + + @IBAction func updatePanFromEdge(_ sender: UISwitch) { + panel!.configs.panFromEdge = sender.isOn + } + + + @IBAction func updateLeftEdgeValue(_ sender: UIStepper) { + + let sliderValueAsText = String(format: "%.0f", sender.value) + leftAllowableEdge.text = sliderValueAsText + panel!.configs.minEdgeForLeftPanel = CGFloat(Double(sliderValueAsText)!) + } + + @IBAction func updateRightEdgeValue(_ sender: UIStepper) { + + let sliderValueAsText = String(format: "%.0f", sender.value) + rightAllowableEdge.text = sliderValueAsText + panel!.configs.minEdgeForRightPanel = CGFloat(Double(sliderValueAsText)!) + } + + @IBAction func updateSidePanelsOpenAnimDuration(_ sender: UIStepper) { + + let sliderValueAsText = String(format: "%.2f", sender.value/100) + sidePanelsOpenAnimDuration.text = sliderValueAsText + panel!.configs.maxAnimDuration = CGFloat(Double(sliderValueAsText)!) + } + + +} + + + + + + + + +extension CenterVC: UITextFieldDelegate { + + func textFieldDidBeginEditing(_ textField: UITextField) { + + if textField === centerPanelOnlyAnimOpts { + + } + } + + func textFieldDidEndEditing(_ textField: UITextField) { + + if textField === centerPanelOnlyAnimOpts { + + let selectedRow = pickerView.selectedRow(inComponent: 0) + textField.text = pickerDataSource[selectedRow] + setCenterPanelAnimType(selectedRow) + } + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + + textField.resignFirstResponder() + return true + } +} + + + + + + + + +extension CenterVC: UIPickerViewDelegate, UIPickerViewDataSource { + + func numberOfComponents(in pickerView: UIPickerView) -> Int { + return 1 + } + + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { + + return pickerDataSource.count + } + + func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { + return pickerDataSource[row] + } +} diff --git a/FAPanels/CenterVC2.swift b/FAPanels/CenterVC2.swift new file mode 100644 index 0000000..6b5b5b9 --- /dev/null +++ b/FAPanels/CenterVC2.swift @@ -0,0 +1,44 @@ +// +// CenterVC2.swift +// FAPanels +// +// Created by Fahid Attique on 10/07/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import UIKit + +class CenterVC2: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + + + @IBAction func showRightVC(_ sender: Any) { + panel?.openRight(animated: true) + } + + @IBAction func showLeftVC(_ sender: Any) { + panel?.openLeft(animated: true) + } + +} diff --git a/FAPanels/Classes/FAPanel+Animations.swift b/FAPanels/Classes/FAPanel+Animations.swift new file mode 100644 index 0000000..d6a5996 --- /dev/null +++ b/FAPanels/Classes/FAPanel+Animations.swift @@ -0,0 +1,515 @@ +// +// FAPanel+Animations.swift +// FAPanels +// +// Created by Fahid Attique on 25/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import Foundation +import UIKit + + +extension FAPanelController { + + + + + // Swap Center Panel + + internal func swapCenter(animated:Bool, FromVC fromVC: UIViewController?, ofState previousState: FAPanelVisibleState, withVC nextVC: UIViewController?){ + + if fromVC != nextVC { + + if nextVC != nil { + + fromVC?.willMove(toParentViewController: nil) + fromVC?.view.removeFromSuperview() + fromVC?.removeFromParentViewController() + + loadCenterPanel(FromState: previousState) + addChildViewController(nextVC!) + centerPanelContainer.addSubview(nextVC!.view) + nextVC!.didMove(toParentViewController: self) + + if animated { + + let transitionOption = configs.centerPanelTransitionType.transitionOption() as! UIViewAnimationOptions + UIView.transition(with: view, duration: configs.centerPanelTransitionDuration, options: transitionOption, animations: nil, completion: nil) + } + } + } + } + + +// open fileprivate(set) var bubble = UIView() +// +// open var startingPoint = CGPoint.zero { +// didSet { +// bubble.center = startingPoint +// } +// } + + + func frameForBubble(_ originalCenter: CGPoint, size originalSize: CGSize, start: CGPoint) -> CGRect { + let lengthX = fmax(start.x, originalSize.width - start.x) + let lengthY = fmax(start.y, originalSize.height - start.y) + let offset = sqrt(lengthX * lengthX + lengthY * lengthY) * 2 + let size = CGSize(width: offset, height: offset) + + return CGRect(origin: CGPoint.zero, size: size) + } + + + + + + // Loading of panels + + internal func loadCenterPanel(FromState: FAPanelVisibleState) { + + centerPanelVC!.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] + centerPanelVC!.view.frame = centerPanelContainer.bounds + applyStyle(onView: centerPanelVC!.view) + } + + + + internal func loadLeftPanel() { + + rightPanelContainer.isHidden = true + + if leftPanelContainer.isHidden && leftPanelVC != nil { + + if leftPanelVC!.view.superview == nil { + + layoutSidePanelVCs() + leftPanelVC!.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] + applyStyle(onView: leftPanelVC!.view) + leftPanelContainer.addSubview(leftPanelVC!.view) + } + leftPanelContainer.isHidden = false + } + } + + + internal func loadRightPanel() { + + leftPanelContainer.isHidden = true + + if rightPanelContainer.isHidden && rightPanelVC != nil { + + if rightPanelVC!.view.superview == nil { + + layoutSidePanelVCs() + rightPanelVC!.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] + applyStyle(onView: rightPanelVC!.view) + rightPanelContainer.addSubview(rightPanelVC!.view) + } + rightPanelContainer.isHidden = false + } + } + + + + + + + + + + + + // Showing panels + + + internal func openLeft(animated: Bool, shouldBounce bounce:Bool) { + + if leftPanelVC != nil { + centerPanelVC?.view.endEditing(true) + state = .left + loadLeftPanel() + slideCenterPanel(animated: animated, bounce: bounce) + handleScrollsToTopForContainers(centerEnabled: false, leftEnabled: true, rightEnabled: false) + } + } + + + internal func openRight(animated: Bool, shouldBounce bounce:Bool) { + + if rightPanelVC != nil { + centerPanelVC?.view.endEditing(true) + state = .right + loadRightPanel() + slideCenterPanel(animated: animated, bounce: bounce) + handleScrollsToTopForContainers(centerEnabled: false, leftEnabled: false, rightEnabled: true) + } + } + + + internal func openCenter(animated: Bool, shouldBounce bounce: Bool) { + + state = .center + _ = updateCenterPanelSlidingFrame() + + if animated { + animateCenterPanel(shouldBounce: bounce, completion: { (finished) in + self.leftPanelContainer.isHidden = true + self.rightPanelContainer.isHidden = true + self.unloadPanels() + }) + } + else { + updateCenterPanelContainer() + leftPanelContainer.isHidden = true + rightPanelContainer.isHidden = true + unloadPanels() + } + + tapView = nil + handleScrollsToTopForContainers(centerEnabled: true, leftEnabled: false, rightEnabled: false) + } + + + private func slideCenterPanel(animated: Bool, bounce:Bool) { + + _ = updateCenterPanelSlidingFrame() + if animated { + animateCenterPanel(shouldBounce: bounce, completion: { (finished) in + }) + } + else { + updateCenterPanelContainer() + } + tapView = UIView() + } + + + private func updateCenterPanelContainer() { + + centerPanelContainer.frame = centeralPanelSlidingFrame + applyStyle(onContainer: centerPanelContainer, withDuration: 0.0, animated: false) + if configs.pusheSidePanels { + layoutSideContainers(withDuration: 0.0, animated: false) + } + } + + + + + + + + + // Hiding panels + + internal func hideCenterPanel() { + centerPanelContainer.isHidden = true + if centerPanelVC!.isViewLoaded { + centerPanelVC!.view.removeFromSuperview() + } + } + + internal func unhideCenterPanel() { + + centerPanelContainer.isHidden = false + if centerPanelVC!.view.superview == nil { + + centerPanelVC!.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] + centerPanelVC!.view.frame = centerPanelContainer.bounds + applyStyle(onView: centerPanelVC!.view) + centerPanelContainer.addSubview(centerPanelVC!.view) + } + } + + + + + + + + + + + + // Unloading Panels + + internal func unloadPanels() { + + if configs.unloadLeftPanel { + if leftPanelVC != nil { + if leftPanelVC!.isViewLoaded { + leftPanelVC!.view.removeFromSuperview() + } + } + } + + if configs.unloadRightPanel { + if rightPanelVC != nil { + if rightPanelVC!.isViewLoaded { + rightPanelVC!.view.removeFromSuperview() + } + } + } + } + + + + + + + + + + + + // Layout Containers & Panels + + + internal func layoutSideContainers( withDuration: TimeInterval, animated: Bool) { + + var leftFrame: CGRect = view.bounds + var rightFrame: CGRect = view.bounds + + if (configs.pusheSidePanels && !centerPanelHidden) { + leftFrame.origin.x = centerPanelContainer.frame.origin.x - widthForLeftPanelVC + rightFrame.origin.x = centerPanelContainer.frame.origin.x + centerPanelContainer.frame.size.width + } + + leftPanelContainer.frame = leftFrame + rightPanelContainer.frame = rightFrame + applyStyle(onContainer: leftPanelContainer, withDuration: withDuration, animated: animated) + applyStyle(onContainer: rightPanelContainer, withDuration: withDuration, animated: animated) + } + + + internal func layoutSidePanelVCs() { + + if let rightPanelVC = self.rightPanelVC { + + if rightPanelVC.isViewLoaded { + + var frame: CGRect = rightPanelContainer.bounds + + if configs.resizeRightPanel { + + if !configs.pusheSidePanels { + frame.origin.x = rightPanelContainer.bounds.size.width - widthForRightPanelVC + } + frame.size.width = widthForRightPanelVC + } + rightPanelVC.view.frame = frame + } + } + + if let leftPanelVC = self.leftPanelVC { + + if leftPanelVC.isViewLoaded { + + var frame: CGRect = leftPanelContainer.bounds + if configs.resizeLeftPanel { + frame.size.width = widthForLeftPanelVC + } + leftPanelVC.view.frame = frame + } + } + } + + + internal func updateCenterPanelSlidingFrame() -> CGRect{ + + var frame: CGRect = view.bounds + + switch state { + + case .center: + frame.origin.x = 0.0 + break + + case .left: + frame.origin.x = widthForLeftPanelVC + break + + case .right: + frame.origin.x = -widthForRightPanelVC + break + } + + centeralPanelSlidingFrame = frame + return centeralPanelSlidingFrame + } + + + + + + + + + + + + // Handle Scrolling + + + internal func handleScrollsToTopForContainers(centerEnabled: Bool, leftEnabled:Bool, rightEnabled:Bool) { + + if (UI_USER_INTERFACE_IDIOM() == .phone) { + + _ = handleScrollsToTop(enabled: centerEnabled, forView: centerPanelContainer) + _ = handleScrollsToTop(enabled: leftEnabled, forView: leftPanelContainer) + _ = handleScrollsToTop(enabled: rightEnabled, forView: rightPanelContainer) + } + } + + + internal func handleScrollsToTop(enabled: Bool, forView view: UIView) -> Bool { + + if view is UIScrollView { + let scrollView: UIScrollView = view as! UIScrollView + scrollView.scrollsToTop = enabled + return true + } + else{ + for subView: UIView in view.subviews { + if handleScrollsToTop(enabled: enabled, forView: subView) { + return true + } + } + } + return false + } + + + + + + + + + + + + // Panel Animations + + + internal func animateCenterPanel(shouldBounce: Bool, completion: @escaping (_ finished: Bool) -> Void) { + + var bounceAllowed = shouldBounce + let bounceDistance: CGFloat = (centeralPanelSlidingFrame.origin.x - centerPanelContainer.frame.origin.x) * configs.bouncePercentage + if centeralPanelSlidingFrame.size.width > centerPanelContainer.frame.size.width { + bounceAllowed = false + } + + let duration: TimeInterval = TimeInterval(configs.maxAnimDuration) + + UIView.animate(withDuration: duration, delay: 0.0, options: [.curveLinear, .layoutSubviews], animations: { + self.centerPanelContainer.frame = self.centeralPanelSlidingFrame + self.applyStyle(onContainer: self.centerPanelContainer, withDuration: duration, animated: true) + if self.configs.pusheSidePanels { + self.layoutSideContainers(withDuration: 0.0, animated: false) + } + }, completion:{ (finished) in + + if (bounceAllowed) { + + if self.state == .center { + if bounceDistance > 0.0 { + self.loadLeftPanel() + } else { + self.loadRightPanel() + } + } + + UIView.animate(withDuration: TimeInterval(self.configs.bounceDuration), delay: 0.0, options: .curveEaseInOut, animations: { + var bounceFrame: CGRect = self.centeralPanelSlidingFrame + bounceFrame.origin.x += bounceDistance + self.centerPanelContainer.frame = bounceFrame + }, completion: { (finished) in + + UIView.animate(withDuration: TimeInterval(self.configs.bounceDuration), delay: 0.0, options: .curveEaseIn, animations: { + self.centerPanelContainer.frame = self.centeralPanelSlidingFrame + }, completion: completion) + }) + } + else { + completion(finished) + } + }) + } + + + + internal func xPositionFor( _ translationInX: CGFloat) -> CGFloat { + + let position: CGFloat = centeralPanelSlidingFrame.origin.x + translationInX + + if state == .center { + + if (position > 0.0 && self.leftPanelVC == nil) || (position < 0.0 && self.rightPanelVC == nil) { + return 0.0 + } + else if position > widthForLeftPanelVC { + return widthForLeftPanelVC + } + else if position < -widthForRightPanelVC { + return -widthForRightPanelVC + } + } + else if state == .right { + + if position < -widthForRightPanelVC { + return 0.0 + } + else if configs.pusheSidePanels && position > 0.0 { + return -centeralPanelSlidingFrame.origin.x + } + else if position > rightPanelContainer.frame.origin.x { + return rightPanelContainer.frame.origin.x - centeralPanelSlidingFrame.origin.x + } + } + else if state == .left { + + if position > widthForLeftPanelVC { + return 0.0 + } + else if configs.pusheSidePanels && position < 0.0 { + return -centeralPanelSlidingFrame.origin.x + } + else if position < leftPanelContainer.frame.origin.x { + return leftPanelContainer.frame.origin.x - centeralPanelSlidingFrame.origin.x + } + } + return translationInX + } + + + + + + + + + + + + // Handle Panning Decisions + + + internal func shouldCompletePanFor(movement: CGFloat) -> Bool { + + let minimum: CGFloat = CGFloat(floorf(Float(view.bounds.size.width * configs.minMovePercentage))) + + switch state { + case .left: + return movement <= -minimum + + case .center: + return fabsf(Float(movement)) >= Float(minimum) + + case .right: + return movement >= minimum + } + } +} + diff --git a/FAPanels/Classes/FAPanel+Gestures.swift b/FAPanels/Classes/FAPanel+Gestures.swift new file mode 100644 index 0000000..37deb00 --- /dev/null +++ b/FAPanels/Classes/FAPanel+Gestures.swift @@ -0,0 +1,244 @@ +// +// FAPanel+Gestures.swift +// FAPanels +// +// Created by Fahid Attique on 25/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import Foundation +import UIKit + + + +extension FAPanelController: UIGestureRecognizerDelegate { + + + + // GestureRecognizer Delegate + + + public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { + + if gestureRecognizer.view == tapView { + return true + } + else if configs.restrictPanningToTopVC && !isTopVC(centerPanelVC!) { + return false + } + else if gestureRecognizer is UIPanGestureRecognizer { + + let pan: UIPanGestureRecognizer = gestureRecognizer as! UIPanGestureRecognizer + + let translate: CGPoint = pan.translation(in: centerPanelContainer) + + // determine if right swipe is allowed + if (translate.x < 0 && !configs.canRightSwipe) { + return false + } + // determine if left swipe is allowed + if (translate.x > 0 && !configs.canLeftSwipe) { + return false + } + + let possible: Bool = translate.x != 0 && ((fabsf(Float(translate.y)) / fabsf(Float(translate.x))) < 1.0) + if (possible && ((translate.x > 0 && (leftPanelVC != nil)) || (translate.x < 0 && (rightPanelVC != nil)))) { + + if configs.panFromEdge { + + let touchPoint: CGPoint = pan.location(in: pan.view!) + let touchPointX = touchPoint.x + + if translate.x > 0 { + if touchPointX > configs.minEdgeForLeftPanel { + return false + } + } + else{ + if touchPointX < view.frame.size.width - configs.minEdgeForRightPanel { + return false + } + } + } + return true + } + } + return false + } + + + + + + + + + + + + // Adding Pan Gesture + + + internal func addPanGesture(toView: UIView) { + + let panGesture: UIPanGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan)) + + panGesture.delegate = self + panGesture.maximumNumberOfTouches = 1 + panGesture.minimumNumberOfTouches = 1 + toView.addGestureRecognizer(panGesture) + } + + + + + + + + + + + // Handle Pan Gesture + + + @objc internal func handlePan(_ gesture: UIGestureRecognizer) { + + if !configs.canRecognizePanGesture { + return + } + + if gesture is UIPanGestureRecognizer { + + let pan: UIPanGestureRecognizer = gesture as! UIPanGestureRecognizer + + if pan.state == .began { + originBeforePan = centerPanelContainer.frame.origin + } + else if pan.state == .changed { + + let translate: CGPoint = pan.translation(in: centerPanelContainer) + var frame: CGRect = centeralPanelSlidingFrame + frame.origin.x += CGFloat(roundf(Float(xPositionFor(translate.x)))) + + centerPanelContainer.frame = frame + + if state == .center { + + if frame.origin.x > 0.0 { + loadLeftPanel() + } + else if frame.origin.x < 0.0 { + loadRightPanel() + } + } + + // adjust side panel locations, if needed + if configs.pusheSidePanels { + layoutSideContainers(withDuration: 0.0, animated: false) + } + } + if gesture.state == .ended { + + let movementInX: CGFloat = centerPanelContainer.frame.origin.x - originBeforePan.x + + if shouldCompletePanFor(movement: movementInX) { + completePanFor(movementInX) + } else { + undoPan() + } + } + else if gesture.state == .cancelled { + undoPan() + } + } + } + + + + + + + + + + + // Pan Gesture Decisions According To Movement + + internal func completePanFor( _ movementInX: CGFloat) { + + switch state { + + case .center: + + if movementInX > 0.0 { + openLeft(animated: true, shouldBounce: configs.bounceOnLeftPanelOpen) + } + else { + openRight(animated: true, shouldBounce: configs.bounceOnRightPanelOpen) + } + break + + case .left: + + openCenter(animated: true, shouldBounce: configs.bounceOnLeftPanelClose) + break + + case .right: + + openCenter(animated: true, shouldBounce: configs.bounceOnRightPanelClose) + break + } + } + + + + + + + + + + + // Cancel Pan Gesture + + internal func undoPan() { + + switch state { + + case .center: + openCenter(animated: true, shouldBounce: false) + break + + case .left: + openLeft(animated: true, shouldBounce: false) + break + + case .right: + openRight(animated: true, shouldBounce: false) + break + } + } + + + + + + + + + + + // Tap Gesture Functions + + + internal func addTapGestureToView(view: UIView) { + + let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self._centerPanelTapped)) + view.addGestureRecognizer(tapGesture) + } + + + @objc internal func _centerPanelTapped(gesture: UIGestureRecognizer){ + openCenter(animated: true, shouldBounce: false) + } +} diff --git a/FAPanels/Classes/FAPanel+InterfaceRotation.swift b/FAPanels/Classes/FAPanel+InterfaceRotation.swift new file mode 100644 index 0000000..d01b1d3 --- /dev/null +++ b/FAPanels/Classes/FAPanel+InterfaceRotation.swift @@ -0,0 +1,61 @@ +// +// FAPanel+InterfaceRotation.swift +// FAPanels +// +// Created by Fahid Attique on 25/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import Foundation +import UIKit + + + +extension FAPanelController { + + + + // Handling Interface Rotations + + override public var shouldAutorotate: Bool { + get { + guard let visiblePanel = visiblePanelVC else { return true } + + if configs.handleAutoRotation && visiblePanel.responds(to: #selector(getter: self.shouldAutorotate)) { + return visiblePanel.shouldAutorotate + } + else { + return true + } + } + } + + + override public func willAnimateRotation(to toInterfaceOrientation: UIInterfaceOrientation, duration: TimeInterval) { + + centerPanelContainer.frame = updateCenterPanelSlidingFrame() + layoutSideContainers(withDuration: duration, animated: true) + layoutSidePanelVCs() + applyStyle(onContainer: centerPanelContainer, withDuration: duration, animated: true) + + if centerPanelHidden { + var frame: CGRect = centerPanelContainer.frame + frame.origin.x = state == .left ? centerPanelContainer.frame.size.width : -centerPanelContainer.frame.size.width + centerPanelContainer.frame = frame + } + } + + + public override var preferredStatusBarStyle: UIStatusBarStyle { + + switch state { + case .center: + return centerPanelVC!.preferredStatusBarStyle + case .left: + return leftPanelVC!.preferredStatusBarStyle + case .right: + return rightPanelVC!.preferredStatusBarStyle + } + } +} + diff --git a/FAPanels/Classes/FAPanel+KVO.swift b/FAPanels/Classes/FAPanel+KVO.swift new file mode 100644 index 0000000..b5dba4c --- /dev/null +++ b/FAPanels/Classes/FAPanel+KVO.swift @@ -0,0 +1,32 @@ +// +// FAPanel+KVO.swift +// FAPanels +// +// Created by Fahid Attique on 25/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import Foundation +import UIKit + + +extension FAPanelController { + + + + // Handling Key Value Observer + + override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { + + if context == &FAPanelController.kvoContext { + if keyPath == keyPathOfView { + if centerPanelVC!.isViewLoaded && configs.canRecognizePanGesture { + addPanGesture(toView: centerPanelVC!.view) + } + } + } + else { + super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context) + } + } +} diff --git a/FAPanels/Classes/FAPanel.swift b/FAPanels/Classes/FAPanel.swift new file mode 100644 index 0000000..e4b8b41 --- /dev/null +++ b/FAPanels/Classes/FAPanel.swift @@ -0,0 +1,506 @@ +// +// FAPanel.swift +// FAPanels +// +// Created by Fahid Attique on 10/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import UIKit + + + +public class FAPanelController: UIViewController { + + + + + // MARK:- Public + + + public var configs = FAPanelConfigurations() + + + public func center( _ controller: UIViewController) -> FAPanelController { + + centerPanelVC = controller + return self + } + + + public func letf( _ controller: UIViewController) -> FAPanelController { + + leftPanelVC = controller + return self + } + + + public func right( _ controller: UIViewController) -> FAPanelController { + + rightPanelVC = controller + return self + } + + + public func openLeft(animated:Bool) { + + openLeft(animated: animated, shouldBounce: configs.bounceOnLeftPanelOpen) + } + + + public func openRight(animated:Bool) { + + openRight(animated: animated, shouldBounce: configs.bounceOnRightPanelOpen) + } + + + public func openCenter(animated:Bool) { // Can be used for the same menu option selected + + if centerPanelHidden { + centerPanelHidden = false + unhideCenterPanel() + } + openCenter(animated: animated, shouldBounce: configs.bounceOnCenterPanelOpen) + } + + + + + + + + + + + + + // MARK:- Life Cycle + + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + + override public func viewDidLoad() { + + super.viewDidLoad() + viewConfigurations() + } + + + override public func viewWillAppear(_ animated: Bool) { + + super.viewWillAppear(animated) + layoutSideContainers(withDuration: 0.0, animated: false) + layoutSidePanelVCs() + centerPanelContainer.frame = updateCenterPanelSlidingFrame() + applyStyle(onContainer: centerPanelContainer, withDuration: 0.0, animated: false) + } + + + override public func viewDidAppear(_ animated: Bool) { + + super.viewDidAppear(animated) + _ = updateCenterPanelSlidingFrame() + } + + + + deinit { + if centerPanelVC != nil { + centerPanelVC!.removeObserver(self, forKeyPath: keyPathOfView) + } + } + + + + private func viewConfigurations() { + + view.autoresizingMask = [.flexibleHeight, .flexibleWidth] + centerPanelContainer = UIView(frame: view.bounds) + centeralPanelSlidingFrame = self.centerPanelContainer.frame + centerPanelHidden = false + leftPanelContainer = UIView(frame: view.bounds) + leftPanelContainer.isHidden = true + rightPanelContainer = UIView(frame: view.bounds) + rightPanelContainer.isHidden = true + containersConfigurations() + view.addSubview(centerPanelContainer) + view.addSubview(leftPanelContainer) + view.addSubview(rightPanelContainer) + state = .center + swapCenter(animated: false, FromVC: nil, ofState: .center, withVC: centerPanelVC) + view.bringSubview(toFront: centerPanelContainer) + } + + + private func containersConfigurations() { + + leftPanelContainer.autoresizingMask = [.flexibleHeight, .flexibleRightMargin] + rightPanelContainer.autoresizingMask = [.flexibleHeight, .flexibleLeftMargin] + centerPanelContainer.autoresizingMask = [.flexibleHeight, .flexibleWidth] + centerPanelContainer.frame = view.bounds + } + + + + + + + + + + + + + + + + // MARK:- internal Properties + + + internal var leftPanelContainer : UIView! + internal var rightPanelContainer : UIView! + internal var centerPanelContainer: UIView! + + internal var visiblePanelVC: UIViewController! { + didSet { + + if let bgColor = visiblePanelVC.view?.backgroundColor { + centerPanelContainer.backgroundColor = bgColor + } + } + } + + internal var centeralPanelSlidingFrame: CGRect = CGRect.zero + internal var originBeforePan: CGPoint = CGPoint.zero + + internal let keyPathOfView = "view" + internal static var kvoContext: Character! + + + internal var _leftPanelVC: UIViewController? = nil + internal var leftPanelVC : UIViewController? { + + get{ + return _leftPanelVC + } + set{ + + if newValue != _leftPanelVC { + + _leftPanelVC?.willMove(toParentViewController: nil) + _leftPanelVC?.view.removeFromSuperview() + _leftPanelVC?.removeFromParentViewController() + + _leftPanelVC = newValue + if _leftPanelVC != nil { + addChildViewController(_leftPanelVC!) + _leftPanelVC!.didMove(toParentViewController: self) + } + if state == .left { + visiblePanelVC = _leftPanelVC + } + } + } + } + + + internal var _rightPanelVC: UIViewController? = nil + internal var rightPanelVC : UIViewController? { + + get{ + return _rightPanelVC + } + set{ + + if newValue != _rightPanelVC { + + _rightPanelVC?.willMove(toParentViewController: nil) + _rightPanelVC?.view.removeFromSuperview() + _rightPanelVC?.removeFromParentViewController() + + _rightPanelVC = newValue + if _rightPanelVC != nil { + addChildViewController(_rightPanelVC!) + _rightPanelVC?.didMove(toParentViewController: self) + } + if state == .right { + visiblePanelVC = _rightPanelVC + } + } + } + } + + + internal var _centerPanelVC: UIViewController? = nil + internal var centerPanelVC : UIViewController? { + + get{ + return _centerPanelVC + } + set{ + + let previousVC: UIViewController? = _centerPanelVC + + if _centerPanelVC != newValue { + + _centerPanelVC?.removeObserver(self, forKeyPath: keyPathOfView) + _centerPanelVC = newValue + _centerPanelVC!.addObserver(self, forKeyPath: keyPathOfView, options: NSKeyValueObservingOptions.initial, context: &FAPanelController.kvoContext) + + if state == .center { + visiblePanelVC = _centerPanelVC + } + } + + if isViewLoaded && state == .center { + swapCenter(animated: configs.changeCenterPanelAnimated, FromVC: previousVC, ofState: .center, withVC: _centerPanelVC!) + } + else if (self.isViewLoaded) { + + let previousState: FAPanelVisibleState = state + state = .center + + UIView.animate(withDuration: 0.2, animations: { + + if self.configs.bounceOnCenterPanelChange { + let x: CGFloat = (previousState == .left) ? self.view.bounds.size.width : -self.view.bounds.size.width + self.centeralPanelSlidingFrame.origin.x = x + } + self.centerPanelContainer.frame = self.centeralPanelSlidingFrame + + }, completion: { (finised) in + + self.swapCenter(animated: false,FromVC: previousVC, ofState: previousState, withVC: self._centerPanelVC) + self.openCenter(animated: true, shouldBounce: false) + }) + } + } + } + + + + + + + + + + + + + + // tap view on centeral panel, to dismiss side panels if visible + + + internal var _tapView: UIView? = nil + internal var tapView: UIView? { + + get{ + return _tapView + } + set{ + if newValue != _tapView { + _tapView?.removeFromSuperview() + _tapView = newValue + if _tapView != nil { + + _tapView?.frame = centerPanelContainer.bounds + _tapView?.autoresizingMask = [.flexibleWidth, .flexibleHeight] + addTapGestureToView(view: _tapView!) + if configs.canRecognizePanGesture { + addPanGesture(toView: _tapView!) + } + centerPanelContainer.addSubview(_tapView!) + } + } + } + } + + + + + + + + + + // visible widths for side panels + + + internal var widthForLeftPanelVC: CGFloat { + get{ + if centerPanelHidden && configs.resizeLeftPanel { + return view.bounds.size.width + } + else { + return configs.leftPanelWidth == 0.0 ? CGFloat(floorf(Float(view.bounds.size.width * configs.leftPanelGapPercentage))) : configs.leftPanelWidth + } + } + } + + + internal var widthForRightPanelVC: CGFloat { + get{ + if centerPanelHidden && configs.resizeRightPanel { + return view.bounds.size.width + } + else { + return configs.rightPanelWidth == 0 ? CGFloat(floorf(Float(view.bounds.size.width * configs.rightPanelGapPercentage))) : configs.rightPanelWidth + } + } + } + + + + + + + + + + + // style for panels + + internal func applyStyle(onContainer: UIView, withDuration duration: TimeInterval, animated: Bool) { + + let shadowPath: UIBezierPath = UIBezierPath(roundedRect: onContainer.bounds, cornerRadius: 0.0) + + if animated { + + let animation = CABasicAnimation(keyPath: "shadowPath") + animation.fromValue = onContainer.layer.shadowPath + animation.toValue = shadowPath.cgPath + animation.duration = duration + onContainer.layer.add(animation, forKey: "shadowPath") + } + onContainer.layer.shadowPath = shadowPath.cgPath + onContainer.layer.shadowColor = UIColor.black.cgColor + onContainer.layer.shadowRadius = 8.0 + onContainer.layer.shadowOpacity = 0.70 + onContainer.clipsToBounds = false + } + + + internal func applyStyle(onView: UIView) { + + onView.layer.cornerRadius = configs.cornerRadius + onView.clipsToBounds = true + } + + + + + + + + + + // Panel States + + internal var _state: FAPanelVisibleState = .center + internal var state: FAPanelVisibleState { + get{ + return _state + } + set{ + if _state != newValue { + _state = newValue + switch _state { + + case .center: + visiblePanelVC = centerPanelVC + leftPanelContainer.isUserInteractionEnabled = false + rightPanelContainer.isUserInteractionEnabled = false + break + + case .left: + visiblePanelVC = leftPanelVC + leftPanelContainer.isUserInteractionEnabled = true + break + + case .right: + visiblePanelVC = rightPanelVC + rightPanelContainer.isUserInteractionEnabled = true + break + } + + setNeedsStatusBarAppearanceUpdate() + } + } + } + + + + + + + + + // Center Panel Hiding Functions + + + internal var _centerPanelHidden: Bool = false + internal var centerPanelHidden: Bool { + get{ + return _centerPanelHidden + } + set{ + setCenterPanelHidden(newValue, animated: false, duration: 0.0) + } + } + + + internal func setCenterPanelHidden(_ hidden: Bool, animated: Bool, duration: TimeInterval) { + + if hidden != _centerPanelHidden && state != .center { + _centerPanelHidden = hidden + let animationDuration = animated ? duration : 0.0 + if hidden { + + + UIView.animate(withDuration: animationDuration, animations: { + + var frame: CGRect = self.centerPanelContainer.frame + frame.origin.x = self.state == .left ? self.centerPanelContainer.frame.size.width : -self.centerPanelContainer.frame.size.width + self.centerPanelContainer.frame = frame + self.layoutSideContainers(withDuration: 0.0, animated: false) + + if self.configs.resizeLeftPanel || self.configs.resizeRightPanel { + self.layoutSidePanelVCs() + } + }, completion: { (finished) in + + if self._centerPanelHidden { + self.hideCenterPanel() + } + }) + + + } + else { + unhideCenterPanel() + + UIView.animate(withDuration: animationDuration, animations: { + + if self.state == .left { + self.openLeft(animated: false) + } + else { + self.openRight(animated: false) + } + if self.configs.resizeLeftPanel || self.configs.resizeRightPanel { + self.layoutSidePanelVCs() + } + }) + } + } + } +} + + + + + diff --git a/FAPanels/Classes/FAPanelConfigurations.swift b/FAPanels/Classes/FAPanelConfigurations.swift new file mode 100644 index 0000000..16d7334 --- /dev/null +++ b/FAPanels/Classes/FAPanelConfigurations.swift @@ -0,0 +1,190 @@ +// +// FAPaenl+Configurations.swift +// FAPanels +// +// Created by Fahid Attique on 25/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import Foundation +import UIKit + + + + + +// Enum to get visible state of panels + +public enum FAPanelVisibleState:Int { + case center = 0, left, right +} + + + + + + + + +// Configurations for Panels + +public struct FAPanelConfigurations { + + + // overrides leftPanelGapPercentage + + var leftPanelWidth : CGFloat = 280 + var rightPanelWidth: CGFloat = 280 + + var leftPanelGapPercentage : CGFloat = 0.8 + var rightPanelGapPercentage: CGFloat = 0.8 + + + + + // resizes all subviews as well + + var resizeLeftPanel : Bool = false + var resizeRightPanel: Bool = false + + + + // Adds push animation on side panels + + var pusheSidePanels: Bool = false + + + + + // Bounce effects on panel animations + + var bounceOnLeftPanelOpen : Bool = true + var bounceOnRightPanelOpen : Bool = true + var bounceOnCenterPanelOpen: Bool = true + + + var bounceOnLeftPanelClose : Bool = false + var bounceOnRightPanelClose : Bool = false + var bounceOnCenterPanelChange: Bool = true + + var bouncePercentage : CGFloat = 0.075 + var bounceDuration : CGFloat = 0.1 + + + + + // Panning Gesture + + var canRecognizePanGesture: Bool = true + + var panFromEdge : Bool = false + var minEdgeForLeftPanel : CGFloat = 70.0 + var minEdgeForRightPanel : CGFloat = 70.0 + + var canLeftSwipe : Bool = true + var canRightSwipe: Bool = true + + + + + // restricts panning gesture to work for top VC of Navigation/TabBar Controller + + var restrictPanningToTopVC: Bool = true + + + + + // Handles the interface auto rotation of visible panel + + var handleAutoRotation: Bool = true + + + + + // Applies corner radius to panels + + var cornerRadius: CGFloat = 0.0 + + + + + // Remove panels from super view when possible + + var unloadRightPanel: Bool = false + var unloadLeftPanel : Bool = false + + + + + // Max animation duration for animations of side panels + + var maxAnimDuration : CGFloat = 0.15 + + + + + // percentage of screen's width to the centerPanel.view must move for panGesture to succeed + + var minMovePercentage: CGFloat = 0.15 + + + + + // Only Center Panel Change animation + + var changeCenterPanelAnimated : Bool = true + var centerPanelTransitionType : FAPanelTransitionType = .crossDissolve + var centerPanelTransitionDuration: TimeInterval = 0.60 + +} + + + + + + + +// Enum for center panel transition type + +public enum FAPanelTransitionType: UInt { + + case + + flipFromLeft = 0, + flipFromRight, + flipFromTop, + flipFromBottom, + + curlUp, + curlDown, + + crossDissolve + + + func transitionOption() -> UIViewAnimationOptions { + + switch self { + + case .flipFromLeft: + return .transitionFlipFromLeft + + case .flipFromRight: + return .transitionFlipFromRight + + case .flipFromTop: + return .transitionFlipFromTop + + case .flipFromBottom: + return .transitionFlipFromBottom + + case .curlUp: + return .transitionCurlUp + + case .curlDown: + return .transitionCurlDown + + case .crossDissolve: + return .transitionCrossDissolve + } + } +} diff --git a/FAPanels/Classes/UIViewController+FAPanel.swift b/FAPanels/Classes/UIViewController+FAPanel.swift new file mode 100644 index 0000000..55604ea --- /dev/null +++ b/FAPanels/Classes/UIViewController+FAPanel.swift @@ -0,0 +1,67 @@ +// +// UIViewController+FAPanel.swift +// FAPanels +// +// Created by Fahid Attique on 25/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import Foundation +import UIKit + + + +public extension UIViewController { + + + + // Get Current Active Panel + + var panel: FAPanelController? { + + get{ + var iter:UIViewController? = self.parent + + while (iter != nil) { + + if iter is FAPanelController { + return iter as? FAPanelController + } + else if (iter?.parent != nil && iter?.parent != iter) { + iter = iter?.parent + } + else { + iter = nil + } + } + return nil + } + } + + + + + + + + + // Check Current Visible Controller is On Top + + + func isTopVC(_ root: UIViewController?) -> Bool { + + if root is UINavigationController { + let nav: UINavigationController = root as! UINavigationController + return nav.viewControllers.count == 1 + } + else if root is UITabBarController { + let tab: UITabBarController = root as! UITabBarController + return isTopVC(tab.selectedViewController!) + } + return root != nil + } + +} + + + diff --git a/FAPanels/IQKeyboardManagerSwift/.DS_Store b/FAPanels/IQKeyboardManagerSwift/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d8e1e17d496b17eaaab38ddfb825e511529937a5 GIT binary patch literal 6148 zcmeHK%Sr<=6g{yO+Pdk|Wq!dw7;0U(^nq(_D4`=)E2;TCszWc&wBPrCnO*J0`og;{E>m}A#B-z#GU2eP*o zy=y*2+G0(?Krj#t1OtDV0p8gnlMBP>gMnZm82DyD&WFqz`Vk8Uae0IOeu{E@CBriUafBCC;N&0o>&+3j;8Acxr1Ot5r zMmC(w{eQz>X0XWbhr}ot2nPNc18KZ`ST49JzgvH7Pwv{x_RJb*w*2Xc;F es?qFOboy0}t)XO*c?~DVLqG|ME*SU)20j61pfGU& literal 0 HcmV?d00001 diff --git a/FAPanels/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift b/FAPanels/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift new file mode 100755 index 0000000..fb9e812 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift @@ -0,0 +1,72 @@ +// +// IQNSArray+Sort.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import UIKit + +/** +UIView.subviews sorting category. +*/ +internal extension Array { + + ///-------------- + /// MARK: Sorting + ///-------------- + + /** + Returns the array by sorting the UIView's by their tag property. + */ + internal func sortedArrayByTag() -> [Element] { + + return sorted(by: { (obj1 : Element, obj2 : Element) -> Bool in + + let view1 = obj1 as! UIView + let view2 = obj2 as! UIView + + return (view1.tag < view2.tag) + }) + } + + /** + Returns the array by sorting the UIView's by their tag property. + */ + internal func sortedArrayByPosition() -> [Element] { + + return sorted(by: { (obj1 : Element, obj2 : Element) -> Bool in + + let view1 = obj1 as! UIView + let view2 = obj2 as! UIView + + let x1 = view1.frame.minX + let y1 = view1.frame.minY + let x2 = view2.frame.minX + let y2 = view2.frame.minY + + if y1 != y2 { + return y1 < y2 + } else { + return x1 < x2 + } + }) + } +} + diff --git a/FAPanels/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift b/FAPanels/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift new file mode 100755 index 0000000..53f2bcf --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift @@ -0,0 +1,47 @@ +// +// IQUIScrollView+Additions.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation +import UIKit + +private var kIQShouldRestoreScrollViewContentOffset = "kIQShouldRestoreScrollViewContentOffset" + +public extension UIScrollView { + + /** + To set customized distance from keyboard for textField/textView. Can't be less than zero + */ + public var shouldRestoreScrollViewContentOffset: Bool { + get { + + if let aValue = objc_getAssociatedObject(self, &kIQShouldRestoreScrollViewContentOffset) as? Bool { + return aValue + } else { + return false + } + } + set(newValue) { + objc_setAssociatedObject(self, &kIQShouldRestoreScrollViewContentOffset, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } +} diff --git a/FAPanels/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift b/FAPanels/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift new file mode 100755 index 0000000..f9be678 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift @@ -0,0 +1,56 @@ +// +// IQUITextFieldView+Additions.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation +import UIKit + +/** +Uses default keyboard distance for textField. +*/ +public let kIQUseDefaultKeyboardDistance = CGFloat.greatestFiniteMagnitude + +private var kIQKeyboardDistanceFromTextField = "kIQKeyboardDistanceFromTextField" + +/** +UIView category for managing UITextField/UITextView +*/ +public extension UIView { + + /** + To set customized distance from keyboard for textField/textView. Can't be less than zero + */ + public var keyboardDistanceFromTextField: CGFloat { + get { + + if let aValue = objc_getAssociatedObject(self, &kIQKeyboardDistanceFromTextField) as? CGFloat { + return aValue + } else { + return kIQUseDefaultKeyboardDistance + } + } + set(newValue) { + objc_setAssociatedObject(self, &kIQKeyboardDistanceFromTextField, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } +} + diff --git a/FAPanels/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift b/FAPanels/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift new file mode 100755 index 0000000..3bf7e1d --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift @@ -0,0 +1,350 @@ +// +// IQUIView+Hierarchy.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import UIKit + +/** +UIView hierarchy category. +*/ +public extension UIView { + + ///---------------------- + /// MARK: viewControllers + ///---------------------- + + /** + Returns the UIViewController object that manages the receiver. + */ + public func viewController()->UIViewController? { + + var nextResponder: UIResponder? = self + + repeat { + nextResponder = nextResponder?.next + + if let viewController = nextResponder as? UIViewController { + return viewController + } + + } while nextResponder != nil + + return nil + } + + /** + Returns the topMost UIViewController object in hierarchy. + */ + public func topMostController()->UIViewController? { + + var controllersHierarchy = [UIViewController]() + + if var topController = window?.rootViewController { + controllersHierarchy.append(topController) + + while topController.presentedViewController != nil { + + topController = topController.presentedViewController! + + controllersHierarchy.append(topController) + } + + var matchController :UIResponder? = viewController() + + while matchController != nil && controllersHierarchy.contains(matchController as! UIViewController) == false { + + repeat { + matchController = matchController?.next + + } while matchController != nil && matchController is UIViewController == false + } + + return matchController as? UIViewController + + } else { + return viewController() + } + } + + + ///----------------------------------- + /// MARK: Superviews/Subviews/Siglings + ///----------------------------------- + + /** + Returns the superView of provided class type. + */ + public func superviewOfClassType(_ classType:UIView.Type)->UIView? { + + var superView = superview + + while let unwrappedSuperView = superView { + + if unwrappedSuperView.isKind(of: classType) { + + //If it's UIScrollView, then validating for special cases + if unwrappedSuperView.isKind(of: UIScrollView.self) { + + let classNameString = NSStringFromClass(type(of:unwrappedSuperView.self)) + + // If it's not UITableViewWrapperView class, this is internal class which is actually manage in UITableview. The speciality of this class is that it's superview is UITableView. + // If it's not UITableViewCellScrollView class, this is internal class which is actually manage in UITableviewCell. The speciality of this class is that it's superview is UITableViewCell. + //If it's not _UIQueuingScrollView class, actually we validate for _ prefix which usually used by Apple internal classes + if unwrappedSuperView.superview?.isKind(of: UITableView.self) == false && + unwrappedSuperView.superview?.isKind(of: UITableViewCell.self) == false && + classNameString.hasPrefix("_") == false { + return superView; + } + } + else { + return superView; + } + } + + superView = unwrappedSuperView.superview + } + + return nil + } + + /** + Returns all siblings of the receiver which canBecomeFirstResponder. + */ + public func responderSiblings()->[UIView] { + + //Array of (UITextField/UITextView's). + var tempTextFields = [UIView]() + + // Getting all siblings + if let siblings = superview?.subviews { + + for textField in siblings { + + if textField._IQcanBecomeFirstResponder() == true { + tempTextFields.append(textField) + } + } + } + + return tempTextFields + } + + /** + Returns all deep subViews of the receiver which canBecomeFirstResponder. + */ + public func deepResponderViews()->[UIView] { + + //Array of (UITextField/UITextView's). + var textfields = [UIView]() + + for textField in subviews { + + if textField._IQcanBecomeFirstResponder() == true { + textfields.append(textField) + } + + //Sometimes there are hidden or disabled views and textField inside them still recorded, so we added some more validations here (Bug ID: #458) + //Uncommented else (Bug ID: #625) + if textField.subviews.count != 0 && isUserInteractionEnabled == true && isHidden == false && alpha != 0.0 { + for deepView in textField.deepResponderViews() { + textfields.append(deepView) + } + } + } + + //subviews are returning in opposite order. Sorting according the frames 'y'. + return textfields.sorted(by: { (view1 : UIView, view2 : UIView) -> Bool in + + let frame1 = view1.convert(view1.bounds, to: self) + let frame2 = view2.convert(view2.bounds, to: self) + + let x1 = frame1.minX + let y1 = frame1.minY + let x2 = frame2.minX + let y2 = frame2.minY + + if y1 != y2 { + return y1 < y2 + } else { + return x1 < x2 + } + }) + } + + fileprivate func _IQcanBecomeFirstResponder() -> Bool { + + var _IQcanBecomeFirstResponder = false + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + _IQcanBecomeFirstResponder = textField.isEnabled + } else if let textView = self as? UITextView { + _IQcanBecomeFirstResponder = textView.isEditable + } + + if _IQcanBecomeFirstResponder == true { + _IQcanBecomeFirstResponder = (isUserInteractionEnabled == true && isHidden == false && alpha != 0.0 && isAlertViewTextField() == false && isSearchBarTextField() == false) as Bool + } + + return _IQcanBecomeFirstResponder + } + + ///------------------------- + /// MARK: Special TextFields + ///------------------------- + + /** + Returns YES if the receiver object is UISearchBarTextField, otherwise return NO. + */ + public func isSearchBarTextField()-> Bool { + + var searchBar : UIResponder? = self.next + + var isSearchBarTextField = false + + while searchBar != nil && isSearchBarTextField == false { + + if searchBar!.isKind(of: UISearchBar.self) { + isSearchBarTextField = true + break + } else if searchBar is UIViewController { + break + } + + searchBar = searchBar?.next + } + + return isSearchBarTextField + } + + /** + Returns YES if the receiver object is UIAlertSheetTextField, otherwise return NO. + */ + public func isAlertViewTextField()->Bool { + + var alertViewController : UIResponder? = self.viewController() + + var isAlertViewTextField = false + + while alertViewController != nil && isAlertViewTextField == false { + + if alertViewController!.isKind(of: UIAlertController.self) { + isAlertViewTextField = true + break + } + + alertViewController = alertViewController?.next + } + + return isAlertViewTextField + } + + + ///---------------- + /// MARK: Transform + ///---------------- + + /** + Returns current view transform with respect to the 'toView'. + */ + public func convertTransformToView(_ toView:UIView?)->CGAffineTransform { + + var newView = toView + + if newView == nil { + newView = window + } + + //My Transform + var myTransform = CGAffineTransform.identity + + if let superView = superview { + myTransform = transform.concatenating(superView.convertTransformToView(nil)) + } else { + myTransform = transform + } + + var viewTransform = CGAffineTransform.identity + + //view Transform + if let unwrappedToView = newView { + + if let unwrappedSuperView = unwrappedToView.superview { + viewTransform = unwrappedToView.transform.concatenating(unwrappedSuperView.convertTransformToView(nil)) + } + else { + viewTransform = unwrappedToView.transform + } + } + + //Concating MyTransform and ViewTransform + return myTransform.concatenating(viewTransform.inverted()) + } + + ///----------------- + /// TODO: Hierarchy + ///----------------- + +// /** +// Returns a string that represent the information about it's subview's hierarchy. You can use this method to debug the subview's positions. +// */ +// func subHierarchy()->NSString { +// +// } +// +// /** +// Returns an string that represent the information about it's upper hierarchy. You can use this method to debug the superview's positions. +// */ +// func superHierarchy()->NSString { +// +// } +// +// /** +// Returns an string that represent the information about it's frame positions. You can use this method to debug self positions. +// */ +// func debugHierarchy()->NSString { +// +// } + + fileprivate func depth()->Int { + var depth : Int = 0 + + if let superView = superview { + depth = superView.depth()+1 + } + + return depth + } + +} + + +extension NSObject { + + public func _IQDescription() -> String { + return "<\(self) \(Unmanaged.passUnretained(self).toOpaque())>" + } +} + + + diff --git a/FAPanels/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift b/FAPanels/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift new file mode 100755 index 0000000..93476d8 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift @@ -0,0 +1,45 @@ +// +// IQUIViewController+Additions.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import UIKit + + +private var kIQLayoutGuideConstraint = "kIQLayoutGuideConstraint" + + +public extension UIViewController { + + /** + To set customized distance from keyboard for textField/textView. Can't be less than zero + */ + @IBOutlet public var IQLayoutGuideConstraint: NSLayoutConstraint? { + get { + + return objc_getAssociatedObject(self, &kIQLayoutGuideConstraint) as? NSLayoutConstraint + } + + set(newValue) { + objc_setAssociatedObject(self, &kIQLayoutGuideConstraint, newValue,objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } +} \ No newline at end of file diff --git a/FAPanels/IQKeyboardManagerSwift/Categories/IQUIWindow+Hierarchy.swift b/FAPanels/IQKeyboardManagerSwift/Categories/IQUIWindow+Hierarchy.swift new file mode 100755 index 0000000..1e4d3ba --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/Categories/IQUIWindow+Hierarchy.swift @@ -0,0 +1,53 @@ +// +// IQUIWindow+Hierarchy.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import UIKit + +/** @abstract UIWindow hierarchy category. */ +public extension UIWindow { + + /** @return Returns the current Top Most ViewController in hierarchy. */ + override public func topMostController()->UIViewController? { + + var topController = rootViewController + + while let presentedController = topController?.presentedViewController { + topController = presentedController + } + + return topController + } + + /** @return Returns the topViewController in stack of topMostController. */ + public func currentViewController()->UIViewController? { + + var currentViewController = topMostController() + + while currentViewController != nil && currentViewController is UINavigationController && (currentViewController as! UINavigationController).topViewController != nil { + currentViewController = (currentViewController as! UINavigationController).topViewController + } + + return currentViewController + } +} diff --git a/FAPanels/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift b/FAPanels/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift new file mode 100755 index 0000000..d7e60e6 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift @@ -0,0 +1,136 @@ +// +// IQKeyboardManagerConstants.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import Foundation + +///----------------------------------- +/// MARK: IQAutoToolbarManageBehaviour +///----------------------------------- + +/** +`IQAutoToolbarBySubviews` +Creates Toolbar according to subview's hirarchy of Textfield's in view. + +`IQAutoToolbarByTag` +Creates Toolbar according to tag property of TextField's. + +`IQAutoToolbarByPosition` +Creates Toolbar according to the y,x position of textField in it's superview coordinate. +*/ +public enum IQAutoToolbarManageBehaviour : Int { + case bySubviews + case byTag + case byPosition +} + +/** + `IQPreviousNextDisplayModeDefault` + Show NextPrevious when there are more than 1 textField otherwise hide. + + `IQPreviousNextDisplayModeAlwaysHide` + Do not show NextPrevious buttons in any case. + + `IQPreviousNextDisplayModeAlwaysShow` + Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. + */ +public enum IQPreviousNextDisplayMode : Int { + case Default + case alwaysHide + case alwaysShow +} + +/* + + /---------------------------------------------------------------------------------------------------\ + \---------------------------------------------------------------------------------------------------/ + | iOS NSNotification Mechanism | + /---------------------------------------------------------------------------------------------------\ + \---------------------------------------------------------------------------------------------------/ + + + ------------------------------------------------------------ + When UITextField become first responder + ------------------------------------------------------------ + - UITextFieldTextDidBeginEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When UITextView become first responder + ------------------------------------------------------------ + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification (UITextView) + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextField to another UITextField + ------------------------------------------------------------ + - UITextFieldTextDidEndEditingNotification (UITextField1) + - UITextFieldTextDidBeginEditingNotification (UITextField2) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextView to another UITextView + ------------------------------------------------------------ + - UITextViewTextDidEndEditingNotification : (UITextView1) + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification : (UITextView2) + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextField to UITextView + ------------------------------------------------------------ + - UITextFieldTextDidEndEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification (UITextView) + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextView to UITextField + ------------------------------------------------------------ + - UITextViewTextDidEndEditingNotification (UITextView) + - UITextFieldTextDidBeginEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When opening/closing UIKeyboard Predictive bar + ------------------------------------------------------------ + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + On orientation change + ------------------------------------------------------------ + - UIApplicationWillChangeStatusBarOrientationNotification + - UIKeyboardWillHideNotification + - UIKeyboardDidHideNotification + - UIApplicationDidChangeStatusBarOrientationNotification + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + */ diff --git a/FAPanels/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift b/FAPanels/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift new file mode 100755 index 0000000..d1b92c6 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift @@ -0,0 +1,45 @@ +// +// IQKeyboardManagerConstantsInternal.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import Foundation + +///----------------------------------- +/// MARK: IQLayoutGuidePosition +///----------------------------------- + +/** +`IQLayoutGuidePositionNone` +If there are no IQLayoutGuideConstraint associated with viewController + +`IQLayoutGuidePositionTop` +If provided IQLayoutGuideConstraint is associated with with viewController topLayoutGuide + +`IQLayoutGuidePositionBottom` +If provided IQLayoutGuideConstraint is associated with with viewController bottomLayoutGuide +*/ +enum IQLayoutGuidePosition : Int { + case none + case top + case bottom +} diff --git a/FAPanels/IQKeyboardManagerSwift/IQKeyboardManager.swift b/FAPanels/IQKeyboardManagerSwift/IQKeyboardManager.swift new file mode 100755 index 0000000..8545c59 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQKeyboardManager.swift @@ -0,0 +1,2316 @@ +// +// IQKeyboardManager.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import CoreGraphics +import UIKit +import QuartzCore + +///--------------------- +/// MARK: IQToolbar tags +///--------------------- + +/** +Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html +*/ + +open class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { + + /** + Default tag for toolbar with Done button -1002. + */ + fileprivate static let kIQDoneButtonToolbarTag = -1002 + + /** + Default tag for toolbar with Previous/Next buttons -1005. + */ + fileprivate static let kIQPreviousNextButtonToolbarTag = -1005 + + ///--------------------------- + /// MARK: UIKeyboard handling + ///--------------------------- + + /** + Registered classes list with library. + */ + fileprivate var registeredClasses = [UIView.Type]() + + /** + Enable/disable managing distance between keyboard and textField. Default is YES(Enabled when class loads in `+(void)load` method). + */ + open var enable = false { + + didSet { + //If not enable, enable it. + if enable == true && + oldValue == false { + //If keyboard is currently showing. Sending a fake notification for keyboardWillShow to adjust view according to keyboard. + if _kbShowNotification != nil { + keyboardWillShow(_kbShowNotification) + } + showLog("enabled") + } else if enable == false && + oldValue == true { //If not disable, desable it. + keyboardWillHide(nil) + showLog("disabled") + } + } + } + + fileprivate func privateIsEnabled()-> Bool { + + var isEnabled = enable + + if let textFieldViewController = _textFieldView?.viewController() { + + if isEnabled == false { + + //If viewController is kind of enable viewController class, then assuming it's enabled. + for enabledClass in enabledDistanceHandlingClasses { + + if textFieldViewController.isKind(of: enabledClass) { + isEnabled = true + break + } + } + } + + if isEnabled == true { + + //If viewController is kind of disabled viewController class, then assuming it's disabled. + for disabledClass in disabledDistanceHandlingClasses { + + if textFieldViewController.isKind(of: disabledClass) { + isEnabled = false + break + } + } + + //Special Controllers + if isEnabled == true { + + let classNameString = NSStringFromClass(type(of:textFieldViewController.self)) + + //_UIAlertControllerTextFieldViewController + if (classNameString.contains("UIAlertController") && classNameString.hasSuffix("TextFieldViewController")) { + isEnabled = false + } + } + } + } + + return isEnabled + } + + /** + To set keyboard distance from textField. can't be less than zero. Default is 10.0. + */ + open var keyboardDistanceFromTextField: CGFloat { + + set { + _privateKeyboardDistanceFromTextField = max(0, newValue) + showLog("keyboardDistanceFromTextField: \(_privateKeyboardDistanceFromTextField)") + } + get { + return _privateKeyboardDistanceFromTextField + } + } + + /** + Boolean to know if keyboard is showing. + */ + open var keyboardShowing: Bool { + + get { + return _privateIsKeyboardShowing + } + } + + /** + moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value. + */ + open var movedDistance: CGFloat { + + get { + return _privateMovedDistance + } + } + + /** + Prevent keyboard manager to slide up the rootView to more than keyboard height. Default is YES. + */ + open var preventShowingBottomBlankSpace = true + + /** + Returns the default singleton instance. + */ + open class func sharedManager() -> IQKeyboardManager { + + struct Static { + //Singleton instance. Initializing keyboard manger. + static let kbManager = IQKeyboardManager() + } + + /** @return Returns the default singleton instance. */ + return Static.kbManager + } + + ///------------------------- + /// MARK: IQToolbar handling + ///------------------------- + + /** + Automatic add the IQToolbar functionality. Default is YES. + */ + open var enableAutoToolbar = true { + + didSet { + + privateIsEnableAutoToolbar() ?addToolbarIfRequired():removeToolbarIfRequired() + + let enableToolbar = enableAutoToolbar ? "Yes" : "NO" + + showLog("enableAutoToolbar: \(enableToolbar)") + } + } + + fileprivate func privateIsEnableAutoToolbar() -> Bool { + + var enableToolbar = enableAutoToolbar + + if let textFieldViewController = _textFieldView?.viewController() { + + if enableToolbar == false { + + //If found any toolbar enabled classes then return. + for enabledClass in enabledToolbarClasses { + + if textFieldViewController.isKind(of: enabledClass) { + enableToolbar = true + break + } + } + } + + if enableToolbar == true { + + //If found any toolbar disabled classes then return. + for disabledClass in disabledToolbarClasses { + + if textFieldViewController.isKind(of: disabledClass) { + enableToolbar = false + break + } + } + + //Special Controllers + if enableToolbar == true { + + let classNameString = NSStringFromClass(type(of:textFieldViewController.self)) + + //_UIAlertControllerTextFieldViewController + if (classNameString.contains("UIAlertController") && classNameString.hasSuffix("TextFieldViewController")) { + enableToolbar = false + } + } + } + } + + return enableToolbar + } + + /** + /** + IQAutoToolbarBySubviews: Creates Toolbar according to subview's hirarchy of Textfield's in view. + IQAutoToolbarByTag: Creates Toolbar according to tag property of TextField's. + IQAutoToolbarByPosition: Creates Toolbar according to the y,x position of textField in it's superview coordinate. + + Default is IQAutoToolbarBySubviews. + */ + AutoToolbar managing behaviour. Default is IQAutoToolbarBySubviews. + */ + open var toolbarManageBehaviour = IQAutoToolbarManageBehaviour.bySubviews + + /** + If YES, then uses textField's tintColor property for IQToolbar, otherwise tint color is black. Default is NO. + */ + open var shouldToolbarUsesTextFieldTintColor = false + + /** + This is used for toolbar.tintColor when textfield.keyboardAppearance is UIKeyboardAppearanceDefault. If shouldToolbarUsesTextFieldTintColor is YES then this property is ignored. Default is nil and uses black color. + */ + open var toolbarTintColor : UIColor? + + /** + IQPreviousNextDisplayModeDefault: Show NextPrevious when there are more than 1 textField otherwise hide. + IQPreviousNextDisplayModeAlwaysHide: Do not show NextPrevious buttons in any case. + IQPreviousNextDisplayModeAlwaysShow: Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. + */ + open var previousNextDisplayMode = IQPreviousNextDisplayMode.Default + + /** + Toolbar done button icon, If nothing is provided then check toolbarDoneBarButtonItemText to draw done button. + */ + open var toolbarDoneBarButtonItemImage : UIImage? + + /** + Toolbar done button text, If nothing is provided then system default 'UIBarButtonSystemItemDone' will be used. + */ + open var toolbarDoneBarButtonItemText : String? + + /** + If YES, then it add the textField's placeholder text on IQToolbar. Default is YES. + */ + open var shouldShowTextFieldPlaceholder = true + + /** + Placeholder Font. Default is nil. + */ + open var placeholderFont: UIFont? + + + ///-------------------------- + /// MARK: UITextView handling + ///-------------------------- + + /** used to adjust contentInset of UITextView. */ + fileprivate var startingTextViewContentInsets = UIEdgeInsets.zero + + /** used to adjust scrollIndicatorInsets of UITextView. */ + fileprivate var startingTextViewScrollIndicatorInsets = UIEdgeInsets.zero + + /** used with textView to detect a textFieldView contentInset is changed or not. (Bug ID: #92)*/ + fileprivate var isTextViewContentInsetChanged = false + + + ///--------------------------------------- + /// MARK: UIKeyboard appearance overriding + ///--------------------------------------- + + /** + Override the keyboardAppearance for all textField/textView. Default is NO. + */ + open var overrideKeyboardAppearance = false + + /** + If overrideKeyboardAppearance is YES, then all the textField keyboardAppearance is set using this property. + */ + open var keyboardAppearance = UIKeyboardAppearance.default + + + ///----------------------------------------------------------- + /// MARK: UITextField/UITextView Next/Previous/Resign handling + ///----------------------------------------------------------- + + + /** + Resigns Keyboard on touching outside of UITextField/View. Default is NO. + */ + open var shouldResignOnTouchOutside = false { + + didSet { + _tapGesture.isEnabled = privateShouldResignOnTouchOutside() + + let shouldResign = shouldResignOnTouchOutside ? "Yes" : "NO" + + showLog("shouldResignOnTouchOutside: \(shouldResign)") + } + } + + fileprivate func privateShouldResignOnTouchOutside() -> Bool { + + var shouldResign = shouldResignOnTouchOutside + + if let textFieldViewController = _textFieldView?.viewController() { + + if shouldResign == false { + + //If viewController is kind of enable viewController class, then assuming shouldResignOnTouchOutside is enabled. + for enabledClass in enabledTouchResignedClasses { + + if textFieldViewController.isKind(of: enabledClass) { + shouldResign = true + break + } + } + } + + if shouldResign == true { + + //If viewController is kind of disable viewController class, then assuming shouldResignOnTouchOutside is disable. + for disabledClass in disabledTouchResignedClasses { + + if textFieldViewController.isKind(of: disabledClass) { + shouldResign = false + break + } + } + + //Special Controllers + if shouldResign == true { + + let classNameString = NSStringFromClass(type(of:textFieldViewController.self)) + + //_UIAlertControllerTextFieldViewController + if (classNameString.contains("UIAlertController") && classNameString.hasSuffix("TextFieldViewController")) { + shouldResign = false + } + } + } + } + + return shouldResign + } + + /** + Resigns currently first responder field. + */ + @discardableResult open func resignFirstResponder()-> Bool { + + if let textFieldRetain = _textFieldView { + + //Resigning first responder + let isResignFirstResponder = textFieldRetain.resignFirstResponder() + + // If it refuses then becoming it as first responder again. (Bug ID: #96) + if isResignFirstResponder == false { + //If it refuses to resign then becoming it first responder again for getting notifications callback. + textFieldRetain.becomeFirstResponder() + + showLog("Refuses to resign first responder: \(String(describing: _textFieldView?._IQDescription()))") + } + + return isResignFirstResponder + } + + return false + } + + /** + Returns YES if can navigate to previous responder textField/textView, otherwise NO. + */ + open var canGoPrevious: Bool { + //Getting all responder view's. + if let textFields = responderViews() { + if let textFieldRetain = _textFieldView { + + //Getting index of current textField. + if let index = textFields.index(of: textFieldRetain) { + + //If it is not first textField. then it's previous object canBecomeFirstResponder. + if index > 0 { + return true + } + } + } + } + return false + } + + /** + Returns YES if can navigate to next responder textField/textView, otherwise NO. + */ + open var canGoNext: Bool { + //Getting all responder view's. + if let textFields = responderViews() { + if let textFieldRetain = _textFieldView { + //Getting index of current textField. + if let index = textFields.index(of: textFieldRetain) { + + //If it is not first textField. then it's previous object canBecomeFirstResponder. + if index < textFields.count-1 { + return true + } + } + } + } + return false + } + + /** + Navigate to previous responder textField/textView. + */ + @discardableResult open func goPrevious()-> Bool { + + //Getting all responder view's. + if let textFieldRetain = _textFieldView { + if let textFields = responderViews() { + //Getting index of current textField. + if let index = textFields.index(of: textFieldRetain) { + + //If it is not first textField. then it's previous object becomeFirstResponder. + if index > 0 { + + let nextTextField = textFields[index-1] + + let isAcceptAsFirstResponder = nextTextField.becomeFirstResponder() + + // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) + if isAcceptAsFirstResponder == false { + //If next field refuses to become first responder then restoring old textField as first responder. + textFieldRetain.becomeFirstResponder() + + showLog("Refuses to become first responder: \(nextTextField._IQDescription())") + } + + return isAcceptAsFirstResponder + } + } + } + } + + return false + } + + /** + Navigate to next responder textField/textView. + */ + @discardableResult open func goNext()-> Bool { + + //Getting all responder view's. + if let textFieldRetain = _textFieldView { + if let textFields = responderViews() { + //Getting index of current textField. + if let index = textFields.index(of: textFieldRetain) { + //If it is not last textField. then it's next object becomeFirstResponder. + if index < textFields.count-1 { + + let nextTextField = textFields[index+1] + + let isAcceptAsFirstResponder = nextTextField.becomeFirstResponder() + + // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) + if isAcceptAsFirstResponder == false { + //If next field refuses to become first responder then restoring old textField as first responder. + textFieldRetain.becomeFirstResponder() + + showLog("Refuses to become first responder: \(nextTextField._IQDescription())") + } + + return isAcceptAsFirstResponder + } + } + } + } + + return false + } + + /** previousAction. */ + internal func previousAction (_ barButton : UIBarButtonItem?) { + + //If user wants to play input Click sound. + if shouldPlayInputClicks == true { + //Play Input Click Sound. + UIDevice.current.playInputClick() + } + + if canGoPrevious == true { + + if let textFieldRetain = _textFieldView { + let isAcceptAsFirstResponder = goPrevious() + + if isAcceptAsFirstResponder && + textFieldRetain.previousInvocation.target != nil && + textFieldRetain.previousInvocation.action != nil { + + UIApplication.shared.sendAction(textFieldRetain.previousInvocation.action!, to: textFieldRetain.previousInvocation.target, from: textFieldRetain, for: UIEvent()) + } + } + } + } + + /** nextAction. */ + internal func nextAction (_ barButton : UIBarButtonItem?) { + + //If user wants to play input Click sound. + if shouldPlayInputClicks == true { + //Play Input Click Sound. + UIDevice.current.playInputClick() + } + + if canGoNext == true { + + if let textFieldRetain = _textFieldView { + let isAcceptAsFirstResponder = goNext() + + if isAcceptAsFirstResponder && + textFieldRetain.nextInvocation.target != nil && + textFieldRetain.nextInvocation.action != nil { + + UIApplication.shared.sendAction(textFieldRetain.nextInvocation.action!, to: textFieldRetain.nextInvocation.target, from: textFieldRetain, for: UIEvent()) + } + } + } + } + + /** doneAction. Resigning current textField. */ + internal func doneAction (_ barButton : IQBarButtonItem?) { + + //If user wants to play input Click sound. + if shouldPlayInputClicks == true { + //Play Input Click Sound. + UIDevice.current.playInputClick() + } + + if let textFieldRetain = _textFieldView { + //Resign textFieldView. + let isResignedFirstResponder = resignFirstResponder() + + if isResignedFirstResponder && + textFieldRetain.doneInvocation.target != nil && + textFieldRetain.doneInvocation.action != nil{ + + UIApplication.shared.sendAction(textFieldRetain.doneInvocation.action!, to: textFieldRetain.doneInvocation.target, from: textFieldRetain, for: UIEvent()) + } + } + } + + /** Resigning on tap gesture. (Enhancement ID: #14)*/ + internal func tapRecognized(_ gesture: UITapGestureRecognizer) { + + if gesture.state == UIGestureRecognizerState.ended { + + //Resigning currently responder textField. + _ = resignFirstResponder() + } + } + + /** Note: returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES. */ + open func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { + return false + } + + /** To not detect touch events in a subclass of UIControl, these may have added their own selector for specific work */ + open func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { + // Should not recognize gesture if the clicked view is either UIControl or UINavigationBar( UIWindow? { + + if let keyWindow = _textFieldView?.window { + return keyWindow + } else { + + struct Static { + /** @abstract Save keyWindow object for reuse. + @discussion Sometimes [[UIApplication sharedApplication] keyWindow] is returning nil between the app. */ + static var keyWindow : UIWindow? + } + + /* (Bug ID: #23, #25, #73) */ + let originalKeyWindow = UIApplication.shared.keyWindow + + //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow. + if originalKeyWindow != nil && + (Static.keyWindow == nil || Static.keyWindow != originalKeyWindow) { + Static.keyWindow = originalKeyWindow + } + + //Return KeyWindow + return Static.keyWindow + } + } + + ///----------------------- + /// MARK: Helper Functions + ///----------------------- + + /* Helper function to manipulate RootViewController's frame with animation. */ + fileprivate func setRootViewFrame(_ frame: CGRect) { + + // Getting topMost ViewController. + var controller = _textFieldView?.topMostController() + + if controller == nil { + controller = keyWindow()?.topMostController() + } + + if let unwrappedController = controller { + + var newFrame = frame + //frame size needs to be adjusted on iOS8 due to orientation structure changes. + newFrame.size = unwrappedController.view.frame.size + + //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + // Setting it's new frame + unwrappedController.view.frame = newFrame + self.showLog("Set \(String(describing: controller?._IQDescription())) frame to : \(newFrame)") + + //Animating content if needed (Bug ID: #204) + if self.layoutIfNeededOnUpdate == true { + //Animating content (Bug ID: #160) + unwrappedController.view.setNeedsLayout() + unwrappedController.view.layoutIfNeeded() + } + + + }) { (animated:Bool) -> Void in} + } else { // If can't get rootViewController then printing warning to user. + showLog("You must set UIWindow.rootViewController in your AppDelegate to work with IQKeyboardManager") + } + } + + /* Adjusting RootViewController's frame according to interface orientation. */ + fileprivate func adjustFrame() { + + // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) + if _textFieldView == nil { + return + } + + let textFieldView = _textFieldView! + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + // Getting KeyWindow object. + let optionalWindow = keyWindow() + + // Getting RootViewController. (Bug ID: #1, #4) + var optionalRootController = _textFieldView?.topMostController() + if optionalRootController == nil { + optionalRootController = keyWindow()?.topMostController() + } + + // Converting Rectangle according to window bounds. + let optionalTextFieldViewRect = textFieldView.superview?.convert(textFieldView.frame, to: optionalWindow) + + if optionalRootController == nil || + optionalWindow == nil || + optionalTextFieldViewRect == nil { + return + } + + let rootController = optionalRootController! + let window = optionalWindow! + let textFieldViewRect = optionalTextFieldViewRect! + + // Getting RootViewRect. + var rootViewRect = rootController.view.frame + //Getting statusBarFrame + + //Maintain keyboardDistanceFromTextField + var specialKeyboardDistanceFromTextField = textFieldView.keyboardDistanceFromTextField + + if textFieldView.isSearchBarTextField() { + + if let searchBar = textFieldView.superviewOfClassType(UISearchBar.self) { + specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField + } + } + + let newKeyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance) ? keyboardDistanceFromTextField : specialKeyboardDistanceFromTextField + var kbSize = _kbSize + kbSize.height += newKeyboardDistanceFromTextField + + let statusBarFrame = UIApplication.shared.statusBarFrame + + // (Bug ID: #250) + var layoutGuidePosition = IQLayoutGuidePosition.none + + if let viewController = textFieldView.viewController() { + + if let constraint = _layoutGuideConstraint { + + var layoutGuide : UILayoutSupport? + if let itemLayoutGuide = constraint.firstItem as? UILayoutSupport { + layoutGuide = itemLayoutGuide + } else if let itemLayoutGuide = constraint.secondItem as? UILayoutSupport { + layoutGuide = itemLayoutGuide + } + + if let itemLayoutGuide : UILayoutSupport = layoutGuide { + + if (itemLayoutGuide === viewController.topLayoutGuide) //If topLayoutGuide constraint + { + layoutGuidePosition = .top + } + else if (itemLayoutGuide === viewController.bottomLayoutGuide) //If bottomLayoutGuice constraint + { + layoutGuidePosition = .bottom + } + } + } + } + + let topLayoutGuide : CGFloat = statusBarFrame.height + + var move : CGFloat = 0.0 + // Move positive = textField is hidden. + // Move negative = textField is showing. + + // Checking if there is bottomLayoutGuide attached (Bug ID: #250) + if layoutGuidePosition == .bottom { + // Calculating move position. + move = textFieldViewRect.maxY-(window.frame.height-kbSize.height) + } else { + // Calculating move position. Common for both normal and special cases. + move = min(textFieldViewRect.minY-(topLayoutGuide+5), textFieldViewRect.maxY-(window.frame.height-kbSize.height)) + } + + showLog("Need to move: \(move)") + + var superScrollView : UIScrollView? = nil + var superView = textFieldView.superviewOfClassType(UIScrollView.self) as? UIScrollView + + //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) + while let view = superView { + + if (view.isScrollEnabled) { + superScrollView = view + break + } + else { + // Getting it's superScrollView. // (Enhancement ID: #21, #24) + superView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView + } + } + + //If there was a lastScrollView. // (Bug ID: #34) + if let lastScrollView = _lastScrollView { + //If we can't find current superScrollView, then setting lastScrollView to it's original form. + if superScrollView == nil { + + showLog("Restoring \(lastScrollView._IQDescription()) contentInset to : \(_startingContentInsets) and contentOffset to : \(_startingContentOffset)") + + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + lastScrollView.contentInset = self._startingContentInsets + lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets + }) { (animated:Bool) -> Void in } + + if lastScrollView.shouldRestoreScrollViewContentOffset == true { + lastScrollView.setContentOffset(_startingContentOffset, animated: true) + } + + _startingContentInsets = UIEdgeInsets.zero + _startingScrollIndicatorInsets = UIEdgeInsets.zero + _startingContentOffset = CGPoint.zero + _lastScrollView = nil + } else if superScrollView != lastScrollView { //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView. + + showLog("Restoring \(lastScrollView._IQDescription()) contentInset to : \(_startingContentInsets) and contentOffset to : \(_startingContentOffset)") + + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + lastScrollView.contentInset = self._startingContentInsets + lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets + }) { (animated:Bool) -> Void in } + + if lastScrollView.shouldRestoreScrollViewContentOffset == true { + lastScrollView.setContentOffset(_startingContentOffset, animated: true) + } + + _lastScrollView = superScrollView + _startingContentInsets = superScrollView!.contentInset + _startingScrollIndicatorInsets = superScrollView!.scrollIndicatorInsets + _startingContentOffset = superScrollView!.contentOffset + + showLog("Saving New \(lastScrollView._IQDescription()) contentInset : \(_startingContentInsets) and contentOffset : \(_startingContentOffset)") + } + //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing, going ahead + } else if let unwrappedSuperScrollView = superScrollView { //If there was no lastScrollView and we found a current scrollView. then setting it as lastScrollView. + _lastScrollView = unwrappedSuperScrollView + _startingContentInsets = unwrappedSuperScrollView.contentInset + _startingScrollIndicatorInsets = unwrappedSuperScrollView.scrollIndicatorInsets + _startingContentOffset = unwrappedSuperScrollView.contentOffset + + showLog("Saving \(unwrappedSuperScrollView._IQDescription()) contentInset : \(_startingContentInsets) and contentOffset : \(_startingContentOffset)") + } + + // Special case for ScrollView. + // If we found lastScrollView then setting it's contentOffset to show textField. + if let lastScrollView = _lastScrollView { + //Saving + var lastView = textFieldView + var superScrollView = _lastScrollView + + while let scrollView = superScrollView { + + //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object. + if move > 0 ? (move > (-scrollView.contentOffset.y - scrollView.contentInset.top)) : scrollView.contentOffset.y>0 { + + var tempScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView + var nextScrollView : UIScrollView? = nil + while let view = tempScrollView { + + if (view.isScrollEnabled) { + nextScrollView = view + break + } else { + tempScrollView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView + } + } + + //Getting lastViewRect. + if let lastViewRect = lastView.superview?.convert(lastView.frame, to: scrollView) { + + //Calculating the expected Y offset from move and scrollView's contentOffset. + var shouldOffsetY = scrollView.contentOffset.y - min(scrollView.contentOffset.y,-move) + + //Rearranging the expected Y offset according to the view. + shouldOffsetY = min(shouldOffsetY, lastViewRect.origin.y /*-5*/) //-5 is for good UI.//Commenting -5 (Bug ID: #69) + + //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type + //nextScrollView == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierrchy.) + //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type + //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) + if textFieldView is UITextView == true && + nextScrollView == nil && + shouldOffsetY >= 0 { + var maintainTopLayout : CGFloat = 0 + + if let navigationBarFrame = textFieldView.viewController()?.navigationController?.navigationBar.frame { + maintainTopLayout = navigationBarFrame.maxY + } + + maintainTopLayout += 10.0 //For good UI + + // Converting Rectangle according to window bounds. + if let currentTextFieldViewRect = textFieldView.superview?.convert(textFieldView.frame, to: window) { + + //Calculating expected fix distance which needs to be managed from navigation bar + let expectedFixDistance = currentTextFieldViewRect.minY - maintainTopLayout + + //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) + shouldOffsetY = min(shouldOffsetY, scrollView.contentOffset.y + expectedFixDistance) + + //Setting move to 0 because now we don't want to move any view anymore (All will be managed by our contentInset logic. + move = 0 + } + else { + //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. + move -= (shouldOffsetY-scrollView.contentOffset.y) + } + } + else + { + //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. + move -= (shouldOffsetY-scrollView.contentOffset.y) + } + + //Getting problem while using `setContentOffset:animated:`, So I used animation API. + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + self.showLog("Adjusting \(scrollView.contentOffset.y-shouldOffsetY) to \(scrollView._IQDescription()) ContentOffset") + + self.showLog("Remaining Move: \(move)") + + scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: shouldOffsetY) + }) { (animated:Bool) -> Void in } + } + + // Getting next lastView & superScrollView. + lastView = scrollView + superScrollView = nextScrollView + } else { + break + } + } + + //Updating contentInset + if let lastScrollViewRect = lastScrollView.superview?.convert(lastScrollView.frame, to: window) { + + let bottom : CGFloat = kbSize.height-newKeyboardDistanceFromTextField-(window.frame.height-lastScrollViewRect.maxY) + + // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view. + var movedInsets = lastScrollView.contentInset + + movedInsets.bottom = max(_startingContentInsets.bottom, bottom) + + showLog("\(lastScrollView._IQDescription()) old ContentInset : \(lastScrollView.contentInset)") + + //Getting problem while using `setContentOffset:animated:`, So I used animation API. + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + lastScrollView.contentInset = movedInsets + + var newInset = lastScrollView.scrollIndicatorInsets + newInset.bottom = movedInsets.bottom + lastScrollView.scrollIndicatorInsets = newInset + + }) { (animated:Bool) -> Void in } + + showLog("\(lastScrollView._IQDescription()) new ContentInset : \(lastScrollView.contentInset)") + } + } + //Going ahead. No else if. + + if layoutGuidePosition == .top { + + if let constraint = _layoutGuideConstraint { + + let constant = min(_layoutGuideConstraintInitialConstant, constraint.constant-move) + + UIView.animate(withDuration: _animationDuration, delay: 0, options: (_animationCurve.union(UIViewAnimationOptions.beginFromCurrentState)), animations: { () -> Void in + + constraint.constant = constant + self._rootViewController?.view.setNeedsLayout() + self._rootViewController?.view.layoutIfNeeded() + + }, completion: { (finished) -> Void in }) + } + + } else if layoutGuidePosition == .bottom { + + if let constraint = _layoutGuideConstraint { + + let constant = max(_layoutGuideConstraintInitialConstant, constraint.constant+move) + + UIView.animate(withDuration: _animationDuration, delay: 0, options: (_animationCurve.union(UIViewAnimationOptions.beginFromCurrentState)), animations: { () -> Void in + + constraint.constant = constant + self._rootViewController?.view.setNeedsLayout() + self._rootViewController?.view.layoutIfNeeded() + + }, completion: { (finished) -> Void in }) + } + + } else { + + //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen) + //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView. + //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type + if let textView = textFieldView as? UITextView { + let textViewHeight = min(textView.frame.height, (window.frame.height-kbSize.height-(topLayoutGuide))) + + if (textView.frame.size.height-textView.contentInset.bottom>textViewHeight) + { + UIView.animate(withDuration: _animationDuration, delay: 0, options: (_animationCurve.union(UIViewAnimationOptions.beginFromCurrentState)), animations: { () -> Void in + + self.showLog("\(textFieldView._IQDescription()) Old UITextView.contentInset : \(textView.contentInset)") + + //_isTextViewContentInsetChanged, If frame is not change by library in past, then saving user textView properties (Bug ID: #92) + if (self.isTextViewContentInsetChanged == false) + { + self.startingTextViewContentInsets = textView.contentInset + self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets + } + + var newContentInset = textView.contentInset + newContentInset.bottom = textView.frame.size.height-textViewHeight + textView.contentInset = newContentInset + textView.scrollIndicatorInsets = newContentInset + self.isTextViewContentInsetChanged = true + + self.showLog("\(textFieldView._IQDescription()) Old UITextView.contentInset : \(textView.contentInset)") + + + }, completion: { (finished) -> Void in }) + } + } + + // Special case for iPad modalPresentationStyle. + if rootController.modalPresentationStyle == UIModalPresentationStyle.formSheet || + rootController.modalPresentationStyle == UIModalPresentationStyle.pageSheet { + + showLog("Found Special case for Model Presentation Style: \(rootController.modalPresentationStyle)") + + // +Positive or zero. + if move >= 0 { + // We should only manipulate y. + rootViewRect.origin.y -= move + + // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) + if preventShowingBottomBlankSpace == true { + let minimumY: CGFloat = (window.frame.height-rootViewRect.size.height-topLayoutGuide)/2-(kbSize.height-newKeyboardDistanceFromTextField) + + rootViewRect.origin.y = max(rootViewRect.minY, minimumY) + } + + showLog("Moving Upward") + // Setting adjusted rootViewRect + setRootViewFrame(rootViewRect) + _privateMovedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y) + } else { // -Negative + // Calculating disturbed distance. Pull Request #3 + let disturbDistance = rootViewRect.minY-_topViewBeginRect.minY + + // disturbDistance Negative = frame disturbed. + // disturbDistance positive = frame not disturbed. + if disturbDistance < 0 { + // We should only manipulate y. + rootViewRect.origin.y -= max(move, disturbDistance) + + showLog("Moving Downward") + // Setting adjusted rootViewRect + setRootViewFrame(rootViewRect) + _privateMovedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y) + } + } + } else { //If presentation style is neither UIModalPresentationFormSheet nor UIModalPresentationPageSheet then going ahead.(General case) + // +Positive or zero. + if move >= 0 { + + rootViewRect.origin.y -= move + + // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) + if preventShowingBottomBlankSpace == true { + + rootViewRect.origin.y = max(rootViewRect.origin.y, min(0, -kbSize.height+newKeyboardDistanceFromTextField)) + } + + showLog("Moving Upward") + // Setting adjusted rootViewRect + setRootViewFrame(rootViewRect) + _privateMovedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y) + } else { // -Negative + let disturbDistance : CGFloat = rootViewRect.minY-_topViewBeginRect.minY + + // disturbDistance Negative = frame disturbed. + // disturbDistance positive = frame not disturbed. + if disturbDistance < 0 { + + rootViewRect.origin.y -= max(move, disturbDistance) + + showLog("Moving Downward") + // Setting adjusted rootViewRect + // Setting adjusted rootViewRect + setRootViewFrame(rootViewRect) + _privateMovedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y) + } + } + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + ///--------------------- + /// MARK: Public Methods + ///--------------------- + + /* Refreshes textField/textView position if any external changes is explicitly made by user. */ + open func reloadLayoutIfNeeded() -> Void { + + if privateIsEnabled() == true { + if _textFieldView != nil && + _privateIsKeyboardShowing == true && + _topViewBeginRect.equalTo(CGRect.zero) == false && + _textFieldView?.isAlertViewTextField() == false { + adjustFrame() + } + } + } + + ///------------------------------- + /// MARK: UIKeyboard Notifications + ///------------------------------- + + /* UIKeyboardWillShowNotification. */ + internal func keyboardWillShow(_ notification : Notification?) -> Void { + + _kbShowNotification = notification + + // Boolean to know keyboard is showing/hiding + _privateIsKeyboardShowing = true + + let oldKBSize = _kbSize + + if let info = (notification as NSNotification?)?.userInfo { + + // Getting keyboard animation. + if let curve = (info[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber)?.uintValue { + _animationCurve = UIViewAnimationOptions(rawValue: curve) + } else { + _animationCurve = UIViewAnimationOptions.curveEaseOut + } + + // Getting keyboard animation duration + if let duration = (info[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue { + + //Saving animation duration + if duration != 0.0 { + _animationDuration = duration + } + } else { + _animationDuration = 0.25 + } + + // Getting UIKeyboardSize. + if let kbFrame = (info[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { + + let screenSize = UIScreen.main.bounds + + //Calculating actual keyboard displayed size, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381) + let intersectRect = kbFrame.intersection(screenSize) + + if intersectRect.isNull { + _kbSize = CGSize(width: screenSize.size.width, height: 0) + } else { + _kbSize = intersectRect.size + } + + showLog("UIKeyboard Size : \(_kbSize)") + } + } + + if privateIsEnabled() == false { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + // (Bug ID: #5) + if _textFieldView != nil && _topViewBeginRect.equalTo(CGRect.zero) == true { + + // keyboard is not showing(At the beginning only). We should save rootViewRect. + if let constraint = _textFieldView?.viewController()?.IQLayoutGuideConstraint { + _layoutGuideConstraint = constraint + _layoutGuideConstraintInitialConstant = constraint.constant + } + + // keyboard is not showing(At the beginning only). We should save rootViewRect. + _rootViewController = _textFieldView?.topMostController() + if _rootViewController == nil { + _rootViewController = keyWindow()?.topMostController() + } + + if let unwrappedRootController = _rootViewController { + _topViewBeginRect = unwrappedRootController.view.frame + + if shouldFixInteractivePopGestureRecognizer == true && + unwrappedRootController is UINavigationController && + unwrappedRootController.modalPresentationStyle != UIModalPresentationStyle.formSheet && + unwrappedRootController.modalPresentationStyle != UIModalPresentationStyle.pageSheet { + + if let window = keyWindow() { + _topViewBeginRect.origin = CGPoint(x: 0,y: window.frame.size.height-unwrappedRootController.view.frame.size.height) + } else { + _topViewBeginRect.origin = CGPoint.zero + } + } + + showLog("Saving \(unwrappedRootController._IQDescription()) beginning Frame: \(_topViewBeginRect)") + } else { + _topViewBeginRect = CGRect.zero + } + } + + // Getting topMost ViewController. + var topMostController = _textFieldView?.topMostController() + + if topMostController == nil { + topMostController = keyWindow()?.topMostController() + } + + //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not. + if _kbSize.equalTo(oldKBSize) == false { + + //If _textFieldView is inside UITableViewController then let UITableViewController to handle it (Bug ID: #37) (Bug ID: #76) See note:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + + if _privateIsKeyboardShowing == true && + _textFieldView != nil && + _textFieldView?.isAlertViewTextField() == false { + + // keyboard is already showing. adjust frame. + adjustFrame() + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + /* UIKeyboardDidShowNotification. */ + internal func keyboardDidShow(_ notification : Notification?) -> Void { + + if privateIsEnabled() == false { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + // Getting topMost ViewController. + var topMostController = _textFieldView?.topMostController() + + if topMostController == nil { + topMostController = keyWindow()?.topMostController() + } + + if _textFieldView != nil && + (topMostController?.modalPresentationStyle == UIModalPresentationStyle.formSheet || topMostController?.modalPresentationStyle == UIModalPresentationStyle.pageSheet) && + _textFieldView?.isAlertViewTextField() == false { + + //In case of form sheet or page sheet, we'll add adjustFrame call in main queue to perform it when UI thread will do all framing updation so adjustFrame will be executed after all internal operations. + OperationQueue.main.addOperation { + self.adjustFrame() + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + /* UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */ + internal func keyboardWillHide(_ notification : Notification?) -> Void { + + //If it's not a fake notification generated by [self setEnable:NO]. + if notification != nil { + _kbShowNotification = nil + } + + // Boolean to know keyboard is showing/hiding + _privateIsKeyboardShowing = false + + let info : [AnyHashable: Any]? = (notification as NSNotification?)?.userInfo + + // Getting keyboard animation duration + if let duration = (info?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue { + if duration != 0 { + // Setitng keyboard animation duration + _animationDuration = duration + } + } + + //If not enabled then do nothing. + if privateIsEnabled() == false { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + //Commented due to #56. Added all the conditions below to handle UIWebView's textFields. (Bug ID: #56) + // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) + // if (_textFieldView == nil) return + + //Restoring the contentOffset of the lastScrollView + if let lastScrollView = _lastScrollView { + + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + lastScrollView.contentInset = self._startingContentInsets + lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets + + if lastScrollView.shouldRestoreScrollViewContentOffset == true { + lastScrollView.contentOffset = self._startingContentOffset + } + + self.showLog("Restoring \(lastScrollView._IQDescription()) contentInset to : \(self._startingContentInsets) and contentOffset to : \(self._startingContentOffset)") + + // TODO: restore scrollView state + // This is temporary solution. Have to implement the save and restore scrollView state + var superScrollView : UIScrollView? = lastScrollView + + while let scrollView = superScrollView { + + let contentSize = CGSize(width: max(scrollView.contentSize.width, scrollView.frame.width), height: max(scrollView.contentSize.height, scrollView.frame.height)) + + let minimumY = contentSize.height - scrollView.frame.height + + if minimumY < scrollView.contentOffset.y { + scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: minimumY) + + self.showLog("Restoring \(scrollView._IQDescription()) contentOffset to : \(self._startingContentOffset)") + } + + superScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView + } + }) { (finished) -> Void in } + } + + // Setting rootViewController frame to it's original position. // (Bug ID: #18) + if _topViewBeginRect.equalTo(CGRect.zero) == false { + + if let rootViewController = _rootViewController { + + //frame size needs to be adjusted on iOS8 due to orientation API changes. + _topViewBeginRect.size = rootViewController.view.frame.size + + //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + if let constraint = self._layoutGuideConstraint { + + constraint.constant = self._layoutGuideConstraintInitialConstant + rootViewController.view.setNeedsLayout() + rootViewController.view.layoutIfNeeded() + } + else { + self.showLog("Restoring \(rootViewController._IQDescription()) frame to : \(self._topViewBeginRect)") + + // Setting it's new frame + rootViewController.view.frame = self._topViewBeginRect + self._privateMovedDistance = 0 + + //Animating content if needed (Bug ID: #204) + if self.layoutIfNeededOnUpdate == true { + //Animating content (Bug ID: #160) + rootViewController.view.setNeedsLayout() + rootViewController.view.layoutIfNeeded() + } + } + }) { (finished) -> Void in } + + _rootViewController = nil + } + } else if let constraint = self._layoutGuideConstraint { + + if let rootViewController = _rootViewController { + + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + constraint.constant = self._layoutGuideConstraintInitialConstant + rootViewController.view.setNeedsLayout() + rootViewController.view.layoutIfNeeded() + }) { (finished) -> Void in } + } + } + + //Reset all values + _lastScrollView = nil + _kbSize = CGSize.zero + _layoutGuideConstraint = nil + _layoutGuideConstraintInitialConstant = 0 + _startingContentInsets = UIEdgeInsets.zero + _startingScrollIndicatorInsets = UIEdgeInsets.zero + _startingContentOffset = CGPoint.zero + // topViewBeginRect = CGRectZero //Commented due to #82 + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + internal func keyboardDidHide(_ notification:Notification) { + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + _topViewBeginRect = CGRect.zero + _kbSize = CGSize.zero + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + ///------------------------------------------- + /// MARK: UITextField/UITextView Notifications + ///------------------------------------------- + + /** UITextFieldTextDidBeginEditingNotification, UITextViewTextDidBeginEditingNotification. Fetching UITextFieldView object. */ + internal func textFieldViewDidBeginEditing(_ notification:Notification) { + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + // Getting object + _textFieldView = notification.object as? UIView + + if overrideKeyboardAppearance == true { + + if let textFieldView = _textFieldView as? UITextField { + //If keyboard appearance is not like the provided appearance + if textFieldView.keyboardAppearance != keyboardAppearance { + //Setting textField keyboard appearance and reloading inputViews. + textFieldView.keyboardAppearance = keyboardAppearance + textFieldView.reloadInputViews() + } + } else if let textFieldView = _textFieldView as? UITextView { + //If keyboard appearance is not like the provided appearance + if textFieldView.keyboardAppearance != keyboardAppearance { + //Setting textField keyboard appearance and reloading inputViews. + textFieldView.keyboardAppearance = keyboardAppearance + textFieldView.reloadInputViews() + } + } + } + + //If autoToolbar enable, then add toolbar on all the UITextField/UITextView's if required. + if privateIsEnableAutoToolbar() == true { + + //UITextView special case. Keyboard Notification is firing before textView notification so we need to resign it first and then again set it as first responder to add toolbar on it. + if _textFieldView is UITextView == true && + _textFieldView?.inputAccessoryView == nil { + + UIView.animate(withDuration: 0.00001, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + self.addToolbarIfRequired() + + }, completion: { (finished) -> Void in + + //On textView toolbar didn't appear on first time, so forcing textView to reload it's inputViews. + self._textFieldView?.reloadInputViews() + }) + } else { + //Adding toolbar + addToolbarIfRequired() + } + } else { + removeToolbarIfRequired() + } + + _tapGesture.isEnabled = privateShouldResignOnTouchOutside() + _textFieldView?.window?.addGestureRecognizer(_tapGesture) // (Enhancement ID: #14) + + if privateIsEnabled() == true { + if _topViewBeginRect.equalTo(CGRect.zero) == true { // (Bug ID: #5) + + // keyboard is not showing(At the beginning only). We should save rootViewRect. + if let constraint = _textFieldView?.viewController()?.IQLayoutGuideConstraint { + _layoutGuideConstraint = constraint + _layoutGuideConstraintInitialConstant = constraint.constant + } + + _rootViewController = _textFieldView?.topMostController() + if _rootViewController == nil { + _rootViewController = keyWindow()?.topMostController() + } + + if let rootViewController = _rootViewController { + + _topViewBeginRect = rootViewController.view.frame + + if shouldFixInteractivePopGestureRecognizer == true && + rootViewController is UINavigationController && + rootViewController.modalPresentationStyle != UIModalPresentationStyle.formSheet && + rootViewController.modalPresentationStyle != UIModalPresentationStyle.pageSheet { + if let window = keyWindow() { + _topViewBeginRect.origin = CGPoint(x: 0,y: window.frame.size.height-rootViewController.view.frame.size.height) + } else { + _topViewBeginRect.origin = CGPoint.zero + } + } + + showLog("Saving \(rootViewController._IQDescription()) beginning frame : \(_topViewBeginRect)") + } + } + + //If _textFieldView is inside ignored responder then do nothing. (Bug ID: #37, #74, #76) + //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + if _privateIsKeyboardShowing == true && + _textFieldView != nil && + _textFieldView?.isAlertViewTextField() == false { + + // keyboard is already showing. adjust frame. + adjustFrame() + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + /** UITextFieldTextDidEndEditingNotification, UITextViewTextDidEndEditingNotification. Removing fetched object. */ + internal func textFieldViewDidEndEditing(_ notification:Notification) { + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + //Removing gesture recognizer (Enhancement ID: #14) + _textFieldView?.window?.removeGestureRecognizer(_tapGesture) + + // We check if there's a change in original frame or not. + + if let textView = _textFieldView as? UITextView { + + if isTextViewContentInsetChanged == true { + + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + self.isTextViewContentInsetChanged = false + + self.showLog("Restoring \(textView._IQDescription()) textView.contentInset to : \(self.startingTextViewContentInsets)") + + //Setting textField to it's initial contentInset + textView.contentInset = self.startingTextViewContentInsets + textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets + + }, completion: { (finished) -> Void in }) + } + } + + //Setting object to nil + _textFieldView = nil + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + ///------------------------------------------ + /// MARK: UIStatusBar Notification methods + ///------------------------------------------ + + /** UIApplicationWillChangeStatusBarOrientationNotification. Need to set the textView to it's original position. If any frame changes made. (Bug ID: #92)*/ + internal func willChangeStatusBarOrientation(_ notification:Notification) { + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + //If textViewContentInsetChanged is saved then restore it. + if let textView = _textFieldView as? UITextView { + + if isTextViewContentInsetChanged == true { + + UIView.animate(withDuration: _animationDuration, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState.union(_animationCurve), animations: { () -> Void in + + self.isTextViewContentInsetChanged = false + + self.showLog("Restoring \(textView._IQDescription()) textView.contentInset to : \(self.startingTextViewContentInsets)") + + //Setting textField to it's initial contentInset + textView.contentInset = self.startingTextViewContentInsets + textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets + + }, completion: { (finished) -> Void in }) + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + /** UIApplicationDidChangeStatusBarFrameNotification. Need to refresh view position and update _topViewBeginRect. (Bug ID: #446)*/ + internal func didChangeStatusBarFrame(_ notification : Notification?) -> Void { + + let oldStatusBarFrame = _statusBarFrame; + + // Getting keyboard animation duration + if let newFrame = ((notification as NSNotification?)?.userInfo?[UIApplicationStatusBarFrameUserInfoKey] as? NSNumber)?.cgRectValue { + + _statusBarFrame = newFrame + } + + if privateIsEnabled() == false { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + if _rootViewController != nil && + !_topViewBeginRect.equalTo(_rootViewController!.view.frame) == true { + + if let unwrappedRootController = _rootViewController { + _topViewBeginRect = unwrappedRootController.view.frame + + if shouldFixInteractivePopGestureRecognizer == true && + unwrappedRootController is UINavigationController && + unwrappedRootController.modalPresentationStyle != UIModalPresentationStyle.formSheet && + unwrappedRootController.modalPresentationStyle != UIModalPresentationStyle.pageSheet { + + if let window = keyWindow() { + _topViewBeginRect.origin = CGPoint(x: 0,y: window.frame.size.height-unwrappedRootController.view.frame.size.height) + } else { + _topViewBeginRect.origin = CGPoint.zero + } + } + + showLog("Saving \(unwrappedRootController._IQDescription()) beginning Frame: \(_topViewBeginRect)") + } else { + _topViewBeginRect = CGRect.zero + } + } + + //If _textFieldView is inside UITableViewController then let UITableViewController to handle it (Bug ID: #37) (Bug ID: #76) See note:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + + if _privateIsKeyboardShowing == true && + _textFieldView != nil && + _statusBarFrame.size.equalTo(oldStatusBarFrame.size) == false && + _textFieldView?.isAlertViewTextField() == false { + + // keyboard is already showing. adjust frame. + adjustFrame() + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + ///------------------ + /// MARK: AutoToolbar + ///------------------ + + /** Get all UITextField/UITextView siblings of textFieldView. */ + fileprivate func responderViews()-> [UIView]? { + + var superConsideredView : UIView? + + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. + for disabledClass in toolbarPreviousNextAllowedClasses { + + superConsideredView = _textFieldView?.superviewOfClassType(disabledClass) + + if superConsideredView != nil { + break + } + } + + //If there is a superConsideredView in view's hierarchy, then fetching all it's subview that responds. No sorting for superConsideredView, it's by subView position. (Enhancement ID: #22) + if superConsideredView != nil { + return superConsideredView?.deepResponderViews() + } else { //Otherwise fetching all the siblings + + if let textFields = _textFieldView?.responderSiblings() { + + //Sorting textFields according to behaviour + switch toolbarManageBehaviour { + //If autoToolbar behaviour is bySubviews, then returning it. + case IQAutoToolbarManageBehaviour.bySubviews: return textFields + + //If autoToolbar behaviour is by tag, then sorting it according to tag property. + case IQAutoToolbarManageBehaviour.byTag: return textFields.sortedArrayByTag() + + //If autoToolbar behaviour is by tag, then sorting it according to tag property. + case IQAutoToolbarManageBehaviour.byPosition: return textFields.sortedArrayByPosition() + } + } else { + return nil + } + } + } + + /** Add toolbar if it is required to add on textFields and it's siblings. */ + fileprivate func addToolbarIfRequired() { + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + // Getting all the sibling textFields. + if let siblings = responderViews() { + + showLog("Found \(siblings.count) responder sibling(s)") + + // If only one object is found, then adding only Done button. + if (siblings.count == 1 && previousNextDisplayMode == .Default) || previousNextDisplayMode == .alwaysHide { + + if let textField = _textFieldView { + + var needReload = false; + + //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar). + //setInputAccessoryView: check (Bug ID: #307) + if textField.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + + if textField.inputAccessoryView == nil || + textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag { + //Supporting Custom Done button image (Enhancement ID: #366) + + if textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag { + needReload = true + } + + if let doneBarButtonItemImage = toolbarDoneBarButtonItemImage { + textField.addRightButtonOnKeyboardWithImage(doneBarButtonItemImage, target: self, action: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if let doneBarButtonItemText = toolbarDoneBarButtonItemText { + textField.addRightButtonOnKeyboardWithText(doneBarButtonItemText, target: self, action: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + } else { + //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) + textField.addDoneOnKeyboardWithTarget(self, action: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + } + textField.inputAccessoryView?.tag = IQKeyboardManager.kIQDoneButtonToolbarTag // (Bug ID: #78) + } + else if let toolbar = textField.inputAccessoryView as? IQToolbar { + + if toolbar.tag == IQKeyboardManager.kIQDoneButtonToolbarTag { + if textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag { + + if let doneBarButtonItemImage = toolbarDoneBarButtonItemImage { + if toolbar.doneImage?.isEqual(doneBarButtonItemImage) == false { + textField.addRightButtonOnKeyboardWithImage(doneBarButtonItemImage, target: self, action: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + needReload = true + } + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if let doneBarButtonItemText = toolbarDoneBarButtonItemText { + if toolbar.doneTitle != doneBarButtonItemText { + textField.addRightButtonOnKeyboardWithText(doneBarButtonItemText, target: self, action: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + needReload = true + } + } else if (toolbarDoneBarButtonItemText == nil && toolbar.doneTitle != nil) || + (toolbarDoneBarButtonItemImage == nil && toolbar.doneImage != nil) { + //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) + textField.addDoneOnKeyboardWithTarget(self, action: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + needReload = true + } + textField.inputAccessoryView?.tag = IQKeyboardManager.kIQDoneButtonToolbarTag // (Bug ID: #78) + } + } + } + } + + if textField.inputAccessoryView is IQToolbar && + textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag { + + let toolbar = textField.inputAccessoryView as! IQToolbar + + // Setting toolbar to keyboard. + if let _textField = textField as? UITextField { + + //Bar style according to keyboard appearance + switch _textField.keyboardAppearance { + + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + toolbar.tintColor = UIColor.white + default: + toolbar.barStyle = UIBarStyle.default + + //Setting toolbar tintColor // (Enhancement ID: #30) + if shouldToolbarUsesTextFieldTintColor { + toolbar.tintColor = _textField.tintColor + } else if let tintColor = toolbarTintColor { + toolbar.tintColor = tintColor + } else { + toolbar.tintColor = UIColor.black + } + } + } else if let _textView = textField as? UITextView { + + //Bar style according to keyboard appearance + switch _textView.keyboardAppearance { + + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + toolbar.tintColor = UIColor.white + default: + toolbar.barStyle = UIBarStyle.default + + if shouldToolbarUsesTextFieldTintColor { + toolbar.tintColor = _textView.tintColor + } else if let tintColor = toolbarTintColor { + toolbar.tintColor = tintColor + } else { + toolbar.tintColor = UIColor.black + } + } + } + + //Setting toolbar title font. // (Enhancement ID: #30) + if shouldShowTextFieldPlaceholder == true && + textField.shouldHidePlaceholderText == false { + + //Updating placeholder font to toolbar. //(Bug ID: #148, #272) + if toolbar.title == nil || + toolbar.title != textField.drawingPlaceholderText { + toolbar.title = textField.drawingPlaceholderText + } + + //Setting toolbar title font. // (Enhancement ID: #30) + if placeholderFont != nil { + toolbar.titleFont = placeholderFont + } + } else { + + toolbar.title = nil + } + } + + if needReload { + textField.reloadInputViews() + } + } + } else if (siblings.count > 1 && previousNextDisplayMode == .Default) || previousNextDisplayMode == .alwaysShow { + + // If more than 1 textField is found. then adding previous/next/done buttons on it. + for textField in siblings { + + var needReload = false; + + //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Done toolbar). + //setInputAccessoryView: check (Bug ID: #307) + if textField.responds(to: #selector(setter: UITextField.inputAccessoryView)) && + (textField.inputAccessoryView == nil || textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag) { + + if textField.inputAccessoryView == nil || + textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag { + + if textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag { + needReload = true + } + + //Supporting Custom Done button image (Enhancement ID: #366) + if let doneBarButtonItemImage = toolbarDoneBarButtonItemImage { + textField.addPreviousNextRightOnKeyboardWithTarget(self, rightButtonImage: doneBarButtonItemImage, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), rightButtonAction: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if let doneBarButtonItemText = toolbarDoneBarButtonItemText { + textField.addPreviousNextRightOnKeyboardWithTarget(self, rightButtonTitle: doneBarButtonItemText, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), rightButtonAction: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + } else { + //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) + textField.addPreviousNextDoneOnKeyboardWithTarget(self, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), doneAction: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + } + } + else if let toolbar = textField.inputAccessoryView as? IQToolbar { + + if textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag { + if let doneBarButtonItemImage = toolbarDoneBarButtonItemImage { + if toolbar.doneImage?.isEqual(doneBarButtonItemImage) == false { + textField.addPreviousNextRightOnKeyboardWithTarget(self, rightButtonImage: toolbarDoneBarButtonItemImage!, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), rightButtonAction: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + needReload = true + } + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if let doneBarButtonItemText = toolbarDoneBarButtonItemText { + if toolbar.doneTitle != doneBarButtonItemText { + textField.addPreviousNextRightOnKeyboardWithTarget(self, rightButtonTitle: toolbarDoneBarButtonItemText!, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), rightButtonAction: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + needReload = true + } + } else if (toolbarDoneBarButtonItemText == nil && toolbar.doneTitle != nil) || + (toolbarDoneBarButtonItemImage == nil && toolbar.doneImage != nil) { + //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) + textField.addPreviousNextDoneOnKeyboardWithTarget(self, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), doneAction: #selector(self.doneAction(_:)), shouldShowPlaceholder: shouldShowTextFieldPlaceholder) + needReload = true + } + } + } + + textField.inputAccessoryView?.tag = IQKeyboardManager.kIQPreviousNextButtonToolbarTag // (Bug ID: #78) + } + + if textField.inputAccessoryView is IQToolbar && + textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag { + + let toolbar = textField.inputAccessoryView as! IQToolbar + + // Setting toolbar to keyboard. + if let _textField = textField as? UITextField { + + //Bar style according to keyboard appearance + switch _textField.keyboardAppearance { + + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + toolbar.tintColor = UIColor.white + default: + toolbar.barStyle = UIBarStyle.default + + if shouldToolbarUsesTextFieldTintColor { + toolbar.tintColor = _textField.tintColor + } else if let tintColor = toolbarTintColor { + toolbar.tintColor = tintColor + } else { + toolbar.tintColor = UIColor.black + } + } + } else if let _textView = textField as? UITextView { + + //Bar style according to keyboard appearance + switch _textView.keyboardAppearance { + + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + toolbar.tintColor = UIColor.white + default: + toolbar.barStyle = UIBarStyle.default + + if shouldToolbarUsesTextFieldTintColor { + toolbar.tintColor = _textView.tintColor + } else if let tintColor = toolbarTintColor { + toolbar.tintColor = tintColor + } else { + toolbar.tintColor = UIColor.black + } + } + } + + //Setting toolbar title font. // (Enhancement ID: #30) + if shouldShowTextFieldPlaceholder == true && + textField.shouldHidePlaceholderText == false { + + //Updating placeholder font to toolbar. //(Bug ID: #148, #272) + if toolbar.title == nil || + toolbar.title != textField.drawingPlaceholderText { + toolbar.title = textField.drawingPlaceholderText + } + + //Setting toolbar title font. // (Enhancement ID: #30) + if placeholderFont != nil { + toolbar.titleFont = placeholderFont + } + } + else { + + toolbar.title = nil + } + + //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime. (Bug ID: #56) + // If firstTextField, then previous should not be enabled. + if siblings[0] == textField { + if (siblings.count == 1) { + textField.setEnablePrevious(false, isNextEnabled: false) + } else { + textField.setEnablePrevious(false, isNextEnabled: true) + } + } else if siblings.last == textField { // If lastTextField then next should not be enaled. + textField.setEnablePrevious(true, isNextEnabled: false) + } else { + textField.setEnablePrevious(true, isNextEnabled: true) + } + } + + if needReload { + textField.reloadInputViews() + } + } + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + /** Remove any toolbar if it is IQToolbar. */ + fileprivate func removeToolbarIfRequired() { // (Bug ID: #18) + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******") + + // Getting all the sibling textFields. + if let siblings = responderViews() { + + showLog("Found \(siblings.count) responder sibling(s)") + + for view in siblings { + + if let toolbar = view.inputAccessoryView as? IQToolbar { + + //setInputAccessoryView: check (Bug ID: #307) + if view.responds(to: #selector(setter: UITextField.inputAccessoryView)) && + (toolbar.tag == IQKeyboardManager.kIQDoneButtonToolbarTag || toolbar.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag) { + + if let textField = view as? UITextField { + textField.inputAccessoryView = nil + } else if let textView = view as? UITextView { + textView.inputAccessoryView = nil + } + } + } + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******") + } + + /** reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */ + open func reloadInputViews() { + + //If enabled then adding toolbar. + if privateIsEnableAutoToolbar() == true { + self.addToolbarIfRequired() + } else { + self.removeToolbarIfRequired() + } + } + + ///------------------ + /// MARK: Debugging & Developer options + ///------------------ + + open var enableDebugging = false + + /** + @warning Use below methods to completely enable/disable notifications registered by library internally. Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completedly disable all library functions. You should use below methods at your own risk. + */ + open func registerAllNotifications() { + + // Registering for keyboard notification. + NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidHide(_:)), name: NSNotification.Name.UIKeyboardDidHide, object: nil) + + // Registering for UITextField notification. + registerTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: NSNotification.Name.UITextFieldTextDidBeginEditing.rawValue, didEndEditingNotificationName: NSNotification.Name.UITextFieldTextDidEndEditing.rawValue) + + // Registering for UITextView notification. + registerTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: NSNotification.Name.UITextViewTextDidBeginEditing.rawValue, didEndEditingNotificationName: NSNotification.Name.UITextViewTextDidEndEditing.rawValue) + + // Registering for orientation changes notification + NotificationCenter.default.addObserver(self, selector: #selector(self.willChangeStatusBarOrientation(_:)), name: NSNotification.Name.UIApplicationWillChangeStatusBarOrientation, object: UIApplication.shared) + + // Registering for status bar frame change notification + NotificationCenter.default.addObserver(self, selector: #selector(self.didChangeStatusBarFrame(_:)), name: NSNotification.Name.UIApplicationDidChangeStatusBarFrame, object: UIApplication.shared) + } + + open func unregisterAllNotifications() { + + // Unregistering for keyboard notification. + NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil) + NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardDidShow, object: nil) + NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil) + NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardDidHide, object: nil) + + // Unregistering for UITextField notification. + unregisterTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: NSNotification.Name.UITextFieldTextDidBeginEditing.rawValue, didEndEditingNotificationName: NSNotification.Name.UITextFieldTextDidEndEditing.rawValue) + + // Unregistering for UITextView notification. + unregisterTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: NSNotification.Name.UITextViewTextDidBeginEditing.rawValue, didEndEditingNotificationName: NSNotification.Name.UITextViewTextDidEndEditing.rawValue) + + // Unregistering for orientation changes notification + NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIApplicationWillChangeStatusBarOrientation, object: UIApplication.shared) + + // Unregistering for status bar frame change notification + NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIApplicationDidChangeStatusBarFrame, object: UIApplication.shared) + } + + fileprivate func showLog(_ logString: String) { + + if enableDebugging { + print("IQKeyboardManager: " + logString) + } + } +} + diff --git a/FAPanels/IQKeyboardManagerSwift/IQKeyboardManagerSwift.h b/FAPanels/IQKeyboardManagerSwift/IQKeyboardManagerSwift.h new file mode 100755 index 0000000..229d4b9 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQKeyboardManagerSwift.h @@ -0,0 +1,34 @@ +// +// IQKeyboardManagerSwift.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +//! Project version number for IQKeyboardManagerSwift. +FOUNDATION_EXPORT double IQKeyboardManagerSwiftVersionNumber; + +//! Project version string for IQKeyboardManagerSwift. +FOUNDATION_EXPORT const unsigned char IQKeyboardManagerSwiftVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/FAPanels/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift b/FAPanels/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift new file mode 100755 index 0000000..9e234f4 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift @@ -0,0 +1,690 @@ +// +// IQKeyboardReturnKeyHandler.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import UIKit + +/** +Manages the return key to work like next/done in a view hierarchy. +*/ +open class IQKeyboardReturnKeyHandler: NSObject , UITextFieldDelegate, UITextViewDelegate { + + + ///--------------- + /// MARK: Settings + ///--------------- + + /** + Delegate of textField/textView. + */ + open weak var delegate: (UITextFieldDelegate & UITextViewDelegate)? + + /** + Set the last textfield return key type. Default is UIReturnKeyDefault. + */ + open var lastTextFieldReturnKeyType : UIReturnKeyType = UIReturnKeyType.default { + + didSet { + + for infoDict in textFieldInfoCache { + + if let view = (infoDict as AnyObject).object(forKey: kIQTextField) as? UIView { + updateReturnKeyTypeOnTextField(view) + } + } + } + } + + ///-------------------------------------- + /// MARK: Initialization/Deinitialization + ///-------------------------------------- + + public override init() { + super.init() + } + + /** + Add all the textFields available in UIViewController's view. + */ + public init(controller : UIViewController) { + super.init() + + addResponderFromView(controller.view) + } + + deinit { + + for infoDict in textFieldInfoCache { + + let view = (infoDict as AnyObject).object(forKey: kIQTextField) as? UIView + + if let textField = view as? UITextField { + + let returnKeyTypeValue = (infoDict as AnyObject).object(forKey: kIQTextFieldReturnKeyType) as! NSNumber + textField.returnKeyType = UIReturnKeyType(rawValue: returnKeyTypeValue.intValue)! + + textField.delegate = (infoDict as AnyObject).object(forKey: kIQTextFieldDelegate) as? UITextFieldDelegate + } else if let textView = view as? UITextView { + + textView.returnKeyType = UIReturnKeyType(rawValue: ((infoDict as AnyObject).object(forKey: kIQTextFieldReturnKeyType) as! NSNumber).intValue)! + + let returnKeyTypeValue = (infoDict as AnyObject).object(forKey: kIQTextFieldReturnKeyType) as! NSNumber + textView.returnKeyType = UIReturnKeyType(rawValue: returnKeyTypeValue.intValue)! + + textView.delegate = (infoDict as AnyObject).object(forKey: kIQTextFieldDelegate) as? UITextViewDelegate + } + } + + textFieldInfoCache.removeAllObjects() + } + + + ///------------------------ + /// MARK: Private variables + ///------------------------ + fileprivate var textFieldInfoCache = NSMutableSet() + fileprivate let kIQTextField = "kIQTextField" + fileprivate let kIQTextFieldDelegate = "kIQTextFieldDelegate" + fileprivate let kIQTextFieldReturnKeyType = "kIQTextFieldReturnKeyType" + + + ///------------------------ + /// MARK: Private Functions + ///------------------------ + fileprivate func textFieldViewCachedInfo(_ textField : UIView) -> [String : AnyObject]? { + + for infoDict in textFieldInfoCache { + + if (infoDict as AnyObject).object(forKey: kIQTextField) as! NSObject == textField { + return infoDict as? [String : AnyObject] + } + } + + return nil + } + + fileprivate func updateReturnKeyTypeOnTextField(_ view : UIView) + { + var superConsideredView : UIView? + + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) + for disabledClass in IQKeyboardManager.sharedManager().toolbarPreviousNextAllowedClasses { + + superConsideredView = view.superviewOfClassType(disabledClass) + + if superConsideredView != nil { + break + } + } + + var textFields : [UIView]? + + //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. + if let unwrappedTableView = superConsideredView { // (Enhancement ID: #22) + textFields = unwrappedTableView.deepResponderViews() + } else { //Otherwise fetching all the siblings + + textFields = view.responderSiblings() + + //Sorting textFields according to behaviour + switch IQKeyboardManager.sharedManager().toolbarManageBehaviour { + //If needs to sort it by tag + case .byTag: textFields = textFields?.sortedArrayByTag() + //If needs to sort it by Position + case .byPosition: textFields = textFields?.sortedArrayByPosition() + default: break + } + } + + if let lastView = textFields?.last { + + if let textField = view as? UITextField { + + //If it's the last textField in responder view, else next + textField.returnKeyType = (view == lastView) ? lastTextFieldReturnKeyType : UIReturnKeyType.next + } else if let textView = view as? UITextView { + + //If it's the last textField in responder view, else next + textView.returnKeyType = (view == lastView) ? lastTextFieldReturnKeyType : UIReturnKeyType.next + } + } + } + + + ///---------------------------------------------- + /// MARK: Registering/Unregistering textFieldView + ///---------------------------------------------- + + /** + Should pass UITextField/UITextView intance. Assign textFieldView delegate to self, change it's returnKeyType. + + @param textFieldView UITextField/UITextView object to register. + */ + open func addTextFieldView(_ view : UIView) { + + var dictInfo : [String : AnyObject] = [String : AnyObject]() + + dictInfo[kIQTextField] = view + + if let textField = view as? UITextField { + + dictInfo[kIQTextFieldReturnKeyType] = textField.returnKeyType.rawValue as AnyObject? + + if let textFieldDelegate = textField.delegate { + dictInfo[kIQTextFieldDelegate] = textFieldDelegate + } + textField.delegate = self + + } else if let textView = view as? UITextView { + + dictInfo[kIQTextFieldReturnKeyType] = textView.returnKeyType.rawValue as AnyObject? + + if let textViewDelegate = textView.delegate { + dictInfo[kIQTextFieldDelegate] = textViewDelegate + } + + textView.delegate = self + } + + textFieldInfoCache.add(dictInfo) + } + + /** + Should pass UITextField/UITextView intance. Restore it's textFieldView delegate and it's returnKeyType. + + @param textFieldView UITextField/UITextView object to unregister. + */ + open func removeTextFieldView(_ view : UIView) { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(view) { + + if let textField = view as? UITextField { + + let returnKeyTypeValue = dict[kIQTextFieldReturnKeyType] as! NSNumber + textField.returnKeyType = UIReturnKeyType(rawValue: returnKeyTypeValue.intValue)! + + textField.delegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } else if let textView = view as? UITextView { + + let returnKeyTypeValue = dict[kIQTextFieldReturnKeyType] as! NSNumber + textView.returnKeyType = UIReturnKeyType(rawValue: returnKeyTypeValue.intValue)! + + textView.delegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + + textFieldInfoCache.remove(dict) + } + } + + /** + Add all the UITextField/UITextView responderView's. + + @param UIView object to register all it's responder subviews. + */ + open func addResponderFromView(_ view : UIView) { + + let textFields = view.deepResponderViews() + + for textField in textFields { + + addTextFieldView(textField) + } + } + + /** + Remove all the UITextField/UITextView responderView's. + + @param UIView object to unregister all it's responder subviews. + */ + open func removeResponderFromView(_ view : UIView) { + + let textFields = view.deepResponderViews() + + for textField in textFields { + + removeTextFieldView(textField) + } + } + + @discardableResult fileprivate func goToNextResponderOrResign(_ view : UIView) -> Bool { + + var superConsideredView : UIView? + + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) + for disabledClass in IQKeyboardManager.sharedManager().toolbarPreviousNextAllowedClasses { + + superConsideredView = view.superviewOfClassType(disabledClass) + + if superConsideredView != nil { + break + } + } + + var textFields : [UIView]? + + //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. + if let unwrappedTableView = superConsideredView { // (Enhancement ID: #22) + textFields = unwrappedTableView.deepResponderViews() + } else { //Otherwise fetching all the siblings + + textFields = view.responderSiblings() + + //Sorting textFields according to behaviour + switch IQKeyboardManager.sharedManager().toolbarManageBehaviour { + //If needs to sort it by tag + case .byTag: textFields = textFields?.sortedArrayByTag() + //If needs to sort it by Position + case .byPosition: textFields = textFields?.sortedArrayByPosition() + default: + break + } + } + + if let unwrappedTextFields = textFields { + + //Getting index of current textField. + if let index = unwrappedTextFields.index(of: view) { + //If it is not last textField. then it's next object becomeFirstResponder. + if index < (unwrappedTextFields.count - 1) { + + let nextTextField = unwrappedTextFields[index+1] + nextTextField.becomeFirstResponder() + return false; + } else { + + view.resignFirstResponder() + return true; + } + } else { + return true; + } + } else { + return true; + } + } + + + ///---------------------------------------------- + /// MARK: UITextField/UITextView delegates + ///---------------------------------------------- + + open func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { + + var aDelegate : UITextFieldDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textField) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldBeginEditing(_:))) { + return unwrapDelegate.textFieldShouldBeginEditing?(textField) == true + } + } + + return true + } + + open func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { + + var aDelegate : UITextFieldDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textField) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldEndEditing(_:))) { + return unwrapDelegate.textFieldShouldEndEditing?(textField) == true + } + } + + return true + } + + open func textFieldDidBeginEditing(_ textField: UITextField) { + updateReturnKeyTypeOnTextField(textField) + + var aDelegate : UITextFieldDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textField) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } + } + + aDelegate?.textFieldDidBeginEditing?(textField) + } + + open func textFieldDidEndEditing(_ textField: UITextField) { + + var aDelegate : UITextFieldDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textField) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } + } + + aDelegate?.textFieldDidEndEditing?(textField) + } + + @available(iOS 10.0, *) + open func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) { + + var aDelegate : UITextFieldDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textField) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } + } + + aDelegate?.textFieldDidEndEditing?(textField, reason: reason) + } + + open func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + + var aDelegate : UITextFieldDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textField) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textField(_:shouldChangeCharactersIn:replacementString:))) { + return unwrapDelegate.textField?(textField, shouldChangeCharactersIn: range, replacementString: string) == true + } + } + + return true + } + + open func textFieldShouldClear(_ textField: UITextField) -> Bool { + + var aDelegate : UITextFieldDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textField) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldClear(_:))) { + return unwrapDelegate.textFieldShouldClear?(textField) == true + } + } + + return true + } + + + open func textFieldShouldReturn(_ textField: UITextField) -> Bool { + + var aDelegate : UITextFieldDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textField) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextFieldDelegate + } + } + + var shouldReturn = true; + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldReturn(_:))) { + shouldReturn = unwrapDelegate.textFieldShouldReturn?(textField) == true + } + } + + if shouldReturn == true { + goToNextResponderOrResign(textField) + return true; + } else { + return goToNextResponderOrResign(textField) + } + } + + + open func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textViewShouldBeginEditing(_:))) { + return unwrapDelegate.textViewShouldBeginEditing?(textView) == true + } + } + + return true + } + + open func textViewShouldEndEditing(_ textView: UITextView) -> Bool { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textViewShouldEndEditing(_:))) { + return unwrapDelegate.textViewShouldEndEditing?(textView) == true + } + } + + return true + } + + open func textViewDidBeginEditing(_ textView: UITextView) { + updateReturnKeyTypeOnTextField(textView) + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + aDelegate?.textViewDidBeginEditing?(textView) + } + + open func textViewDidEndEditing(_ textView: UITextView) { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + aDelegate?.textViewDidEndEditing?(textView) + } + + open func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + var shouldReturn = true + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textView(_:shouldChangeTextIn:replacementText:))) { + shouldReturn = (unwrapDelegate.textView?(textView, shouldChangeTextIn: range, replacementText: text)) == true + } + } + + if shouldReturn == true && text == "\n" { + shouldReturn = goToNextResponderOrResign(textView) + } + + return shouldReturn + } + + open func textViewDidChange(_ textView: UITextView) { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + aDelegate?.textViewDidChange?(textView) + } + + open func textViewDidChangeSelection(_ textView: UITextView) { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(textView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + aDelegate?.textViewDidChangeSelection?(textView) + } + + @available(iOS 10.0, *) + open func textView(_ aTextView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(aTextView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(textView as (UITextView, URL, NSRange, UITextItemInteraction) -> Bool)) { + return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange, interaction: interaction) == true + } + } + + return true + } + + @available(iOS 10.0, *) + open func textView(_ aTextView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(aTextView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSTextAttachment, NSRange, UITextItemInteraction) -> Bool)) { + return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange, interaction: interaction) == true + } + } + + return true + } + + @available(iOS, deprecated: 10.0) + open func textView(_ aTextView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(aTextView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(textView as (UITextView, URL, NSRange) -> Bool)) { + return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange) == true + } + } + + return true + } + + @available(iOS, deprecated: 10.0) + open func textView(_ aTextView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange) -> Bool { + + var aDelegate : UITextViewDelegate? = delegate; + + if aDelegate == nil { + + if let dict : [String : AnyObject] = textFieldViewCachedInfo(aTextView) { + aDelegate = dict[kIQTextFieldDelegate] as? UITextViewDelegate + } + } + + if let unwrapDelegate = aDelegate { + if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSTextAttachment, NSRange) -> Bool)) { + return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange) == true + } + } + + return true + } +} diff --git a/FAPanels/IQKeyboardManagerSwift/IQTextView/IQTextView.swift b/FAPanels/IQKeyboardManagerSwift/IQTextView/IQTextView.swift new file mode 100755 index 0000000..3ebe21f --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQTextView/IQTextView.swift @@ -0,0 +1,142 @@ +// +// IQTextView.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import UIKit + +/** @abstract UITextView with placeholder support */ +open class IQTextView : UITextView { + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: NSNotification.Name.UITextViewTextDidChange, object: self) + } + + override init(frame: CGRect, textContainer: NSTextContainer?) { + super.init(frame: frame, textContainer: textContainer) + NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: NSNotification.Name.UITextViewTextDidChange, object: self) + } + + override open func awakeFromNib() { + super.awakeFromNib() + NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: NSNotification.Name.UITextViewTextDidChange, object: self) + } + + deinit { + NotificationCenter.default.removeObserver(self) + } + + fileprivate var placeholderLabel: UILabel? + + /** @abstract To set textView's placeholder text. Default is ni. */ + @IBInspectable open var placeholder : String? { + + get { + return placeholderLabel?.text + } + + set { + + if placeholderLabel == nil { + + placeholderLabel = UILabel() + + if let unwrappedPlaceholderLabel = placeholderLabel { + + unwrappedPlaceholderLabel.autoresizingMask = [.flexibleWidth, .flexibleHeight] + unwrappedPlaceholderLabel.lineBreakMode = .byWordWrapping + unwrappedPlaceholderLabel.numberOfLines = 0 + unwrappedPlaceholderLabel.font = self.font + unwrappedPlaceholderLabel.textAlignment = self.textAlignment + unwrappedPlaceholderLabel.backgroundColor = UIColor.clear + unwrappedPlaceholderLabel.textColor = UIColor(white: 0.7, alpha: 1.0) + unwrappedPlaceholderLabel.alpha = 0 + addSubview(unwrappedPlaceholderLabel) + } + } + + placeholderLabel?.text = newValue + refreshPlaceholder() + } + } + + open override func layoutSubviews() { + super.layoutSubviews() + + if let unwrappedPlaceholderLabel = placeholderLabel { + unwrappedPlaceholderLabel.sizeToFit() + unwrappedPlaceholderLabel.frame = CGRect(x: 4, y: 8, width: self.frame.width-16, height: unwrappedPlaceholderLabel.frame.height) + } + } + + open func refreshPlaceholder() { + + if text.characters.count != 0 { + placeholderLabel?.alpha = 0 + } else { + placeholderLabel?.alpha = 1 + } + } + + override open var text: String! { + + didSet { + + refreshPlaceholder() + + } + } + + override open var font : UIFont? { + + didSet { + + if let unwrappedFont = font { + placeholderLabel?.font = unwrappedFont + } else { + placeholderLabel?.font = UIFont.systemFont(ofSize: 12) + } + } + } + + override open var textAlignment: NSTextAlignment + { + didSet { + placeholderLabel?.textAlignment = textAlignment + } + } + + override open var delegate : UITextViewDelegate? { + + get { + refreshPlaceholder() + return super.delegate + } + + set { + super.delegate = newValue + } + } +} + + diff --git a/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift new file mode 100755 index 0000000..2fe7a7f --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift @@ -0,0 +1,90 @@ +// +// IQBarButtonItem.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import UIKit + +open class IQBarButtonItem: UIBarButtonItem { + + private static var _classInitialize: Void = classInitialize() + + public override init() { + _ = IQBarButtonItem._classInitialize + super.init() + } + + public required init?(coder aDecoder: NSCoder) { + _ = IQBarButtonItem._classInitialize + super.init(coder: aDecoder) + } + + + private class func classInitialize() { + + //Tint color + self.appearance().tintColor = nil + + //Title + self.appearance().setTitlePositionAdjustment(UIOffset.zero, for: UIBarMetrics.default) + self.appearance().setTitleTextAttributes(nil, for: UIControlState()) + self.appearance().setTitleTextAttributes(nil, for: UIControlState.highlighted) + self.appearance().setTitleTextAttributes(nil, for: UIControlState.disabled) + self.appearance().setTitleTextAttributes(nil, for: UIControlState.selected) + self.appearance().setTitleTextAttributes(nil, for: UIControlState.application) + self.appearance().setTitleTextAttributes(nil, for: UIControlState.reserved) + + //Background Image + self.appearance().setBackgroundImage(nil, for: UIControlState(), barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.highlighted, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.disabled, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.selected, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.application, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.reserved, barMetrics: UIBarMetrics.default) + + self.appearance().setBackgroundImage(nil, for: UIControlState(), style: UIBarButtonItemStyle.done, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.highlighted, style: UIBarButtonItemStyle.done, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.disabled, style: UIBarButtonItemStyle.done, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.selected, style: UIBarButtonItemStyle.done, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.application, style: UIBarButtonItemStyle.done, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.reserved, style: UIBarButtonItemStyle.done, barMetrics: UIBarMetrics.default) + + self.appearance().setBackgroundImage(nil, for: UIControlState(), style: UIBarButtonItemStyle.plain, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.highlighted, style: UIBarButtonItemStyle.plain, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.disabled, style: UIBarButtonItemStyle.plain, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.selected, style: UIBarButtonItemStyle.plain, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.application, style: UIBarButtonItemStyle.plain, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, for: UIControlState.reserved, style: UIBarButtonItemStyle.plain, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundVerticalPositionAdjustment(0, for: UIBarMetrics.default) + + //Back Button + self.appearance().setBackButtonBackgroundImage(nil, for: UIControlState(), barMetrics: UIBarMetrics.default) + self.appearance().setBackButtonBackgroundImage(nil, for: UIControlState.highlighted, barMetrics: UIBarMetrics.default) + self.appearance().setBackButtonBackgroundImage(nil, for: UIControlState.disabled, barMetrics: UIBarMetrics.default) + self.appearance().setBackButtonBackgroundImage(nil, for: UIControlState.selected, barMetrics: UIBarMetrics.default) + self.appearance().setBackButtonBackgroundImage(nil, for: UIControlState.application, barMetrics: UIBarMetrics.default) + self.appearance().setBackButtonBackgroundImage(nil, for: UIControlState.reserved, barMetrics: UIBarMetrics.default) + + self.appearance().setBackButtonTitlePositionAdjustment(UIOffset.zero, for: UIBarMetrics.default) + self.appearance().setBackButtonBackgroundVerticalPositionAdjustment(0, for: UIBarMetrics.default) + } +} diff --git a/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift new file mode 100755 index 0000000..c6f2dbd --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift @@ -0,0 +1,28 @@ +// +// IQPreviousNextView.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import UIKit + +open class IQPreviousNextView: UIView { + +} diff --git a/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift new file mode 100755 index 0000000..474ca63 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift @@ -0,0 +1,144 @@ +// +// IQTitleBarButtonItem.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import UIKit + +private var kIQBarTitleInvocationTarget = "kIQBarTitleInvocationTarget" +private var kIQBarTitleInvocationSelector = "kIQBarTitleInvocationSelector" + +open class IQTitleBarButtonItem: IQBarButtonItem { + + open var font : UIFont? { + + didSet { + if let unwrappedFont = font { + _titleButton?.titleLabel?.font = unwrappedFont + } else { + _titleButton?.titleLabel?.font = UIFont.systemFont(ofSize: 13) + } + } + } + + override open var title: String? { + didSet { + _titleButton?.setTitle(title, for: UIControlState()) + } + } + + /** + selectableTextColor to be used for displaying button text when button is enabled. + */ + open var selectableTextColor : UIColor? { + + didSet { + if let color = selectableTextColor { + _titleButton?.setTitleColor(color, for:UIControlState()) + } else { + _titleButton?.setTitleColor(UIColor.init(colorLiteralRed: 0.0, green: 0.5, blue: 1.0, alpha: 1), for:UIControlState()) + } + } + } + + /** + Optional target & action to behave toolbar title button as clickable button + + @param target Target object. + @param action Target Selector. + */ + open func setTitleTarget(_ target: AnyObject?, action: Selector?) { + titleInvocation = (target, action) + } + + /** + Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. + */ + open var titleInvocation : (target: AnyObject?, action: Selector?) { + get { + let target: AnyObject? = objc_getAssociatedObject(self, &kIQBarTitleInvocationTarget) as AnyObject? + var action : Selector? + + if let selectorString = objc_getAssociatedObject(self, &kIQBarTitleInvocationSelector) as? String { + action = NSSelectorFromString(selectorString) + } + + return (target: target, action: action) + } + set(newValue) { + objc_setAssociatedObject(self, &kIQBarTitleInvocationTarget, newValue.target, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + if let unwrappedSelector = newValue.action { + objc_setAssociatedObject(self, &kIQBarTitleInvocationSelector, NSStringFromSelector(unwrappedSelector), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } else { + objc_setAssociatedObject(self, &kIQBarTitleInvocationSelector, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + + if (newValue.target == nil || newValue.action == nil) + { + self.isEnabled = false + _titleButton?.isEnabled = false + _titleButton?.removeTarget(nil, action: nil, for: .touchUpInside) + } + else + { + self.isEnabled = true + _titleButton?.isEnabled = true + _titleButton?.addTarget(newValue.target, action: newValue.action!, for: .touchUpInside) + } + } + } + + fileprivate var _titleButton : UIButton? + fileprivate var _titleView : UIView? + + override init() { + super.init() + } + + init(title : String?) { + + self.init(title: nil, style: UIBarButtonItemStyle.plain, target: nil, action: nil) + + _titleView = UIView() + _titleView?.backgroundColor = UIColor.clear + _titleView?.autoresizingMask = [.flexibleWidth,.flexibleHeight] + + _titleButton = UIButton(type: .system) + _titleButton?.isEnabled = false + _titleButton?.titleLabel?.numberOfLines = 3 + _titleButton?.setTitleColor(UIColor.lightGray, for:.disabled) + _titleButton?.setTitleColor(UIColor.init(colorLiteralRed: 0.0, green: 0.5, blue: 1.0, alpha: 1), for:UIControlState()) + _titleButton?.backgroundColor = UIColor.clear + _titleButton?.titleLabel?.textAlignment = .center + _titleButton?.setTitle(title, for: UIControlState()) + _titleButton?.autoresizingMask = [.flexibleWidth,.flexibleHeight] + font = UIFont.systemFont(ofSize: 13.0) + _titleButton?.titleLabel?.font = self.font + _titleView?.addSubview(_titleButton!) + customView = _titleView + } + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } +} diff --git a/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift new file mode 100755 index 0000000..93f90bd --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift @@ -0,0 +1,253 @@ +// +// IQToolbar.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import UIKit + +private var kIQToolbarTitleInvocationTarget = "kIQToolbarTitleInvocationTarget" +private var kIQToolbarTitleInvocationSelector = "kIQToolbarTitleInvocationSelector" + +/** @abstract IQToolbar for IQKeyboardManager. */ +open class IQToolbar: UIToolbar , UIInputViewAudioFeedback { + + private static var _classInitialize: Void = classInitialize() + + private class func classInitialize() { + + self.appearance().barTintColor = nil + + //Background image + self.appearance().setBackgroundImage(nil, forToolbarPosition: UIBarPosition.any, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, forToolbarPosition: UIBarPosition.bottom, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, forToolbarPosition: UIBarPosition.top, barMetrics: UIBarMetrics.default) + self.appearance().setBackgroundImage(nil, forToolbarPosition: UIBarPosition.topAttached, barMetrics: UIBarMetrics.default) + + self.appearance().setShadowImage(nil, forToolbarPosition: UIBarPosition.any) + self.appearance().setShadowImage(nil, forToolbarPosition: UIBarPosition.bottom) + self.appearance().setShadowImage(nil, forToolbarPosition: UIBarPosition.top) + self.appearance().setShadowImage(nil, forToolbarPosition: UIBarPosition.topAttached) + + //Background color + self.appearance().backgroundColor = nil + } + + open var titleFont : UIFont? { + + didSet { + + if let newItems = items { + for item in newItems { + + if let newItem = item as? IQTitleBarButtonItem { + newItem.font = titleFont + break + } + } + } + } + } + + open var title : String? { + + didSet { + + if let newItems = items { + for item in newItems { + + if let newItem = item as? IQTitleBarButtonItem { + newItem.title = title + break + } + } + } + } + } + + open var doneTitle : String? + open var doneImage : UIImage? + + /** + Optional target & action to behave toolbar title button as clickable button + + @param target Target object. + @param action Target Selector. + */ + open func setCustomToolbarTitleTarget(_ target: AnyObject?, action: Selector?) { + toolbarTitleInvocation = (target, action) + } + + /** + Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. + */ + open var toolbarTitleInvocation : (target: AnyObject?, action: Selector?) { + get { + let target: AnyObject? = objc_getAssociatedObject(self, &kIQToolbarTitleInvocationTarget) as AnyObject? + var action : Selector? + + if let selectorString = objc_getAssociatedObject(self, &kIQToolbarTitleInvocationSelector) as? String { + action = NSSelectorFromString(selectorString) + } + + return (target: target, action: action) + } + set(newValue) { + objc_setAssociatedObject(self, &kIQToolbarTitleInvocationTarget, newValue.target, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + if let unwrappedSelector = newValue.action { + objc_setAssociatedObject(self, &kIQToolbarTitleInvocationSelector, NSStringFromSelector(unwrappedSelector), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } else { + objc_setAssociatedObject(self, &kIQToolbarTitleInvocationSelector, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + + if let unwrappedItems = items { + for item in unwrappedItems { + + if let newItem = item as? IQTitleBarButtonItem { + newItem.titleInvocation = newValue + break + } + } + } + } + } + + override init(frame: CGRect) { + _ = IQToolbar._classInitialize + super.init(frame: frame) + + sizeToFit() + autoresizingMask = UIViewAutoresizing.flexibleWidth + tintColor = UIColor.black + self.isTranslucent = true + } + + required public init?(coder aDecoder: NSCoder) { + _ = IQToolbar._classInitialize + super.init(coder: aDecoder) + + sizeToFit() + autoresizingMask = UIViewAutoresizing.flexibleWidth + tintColor = UIColor.black + self.isTranslucent = true + } + + override open func sizeThatFits(_ size: CGSize) -> CGSize { + var sizeThatFit = super.sizeThatFits(size) + sizeThatFit.height = 44 + return sizeThatFit + } + + override open var tintColor: UIColor! { + + didSet { + if let unwrappedItems = items { + for item in unwrappedItems { + item.tintColor = tintColor + } + } + } + } + + override open var barStyle: UIBarStyle { + didSet { + + if let unwrappedItems = items { + for item in unwrappedItems { + + if let newItem = item as? IQTitleBarButtonItem { + + if barStyle == .default { + newItem.selectableTextColor = UIColor.init(colorLiteralRed: 0.0, green: 0.5, blue: 1.0, alpha: 1) + } else { + newItem.selectableTextColor = UIColor.yellow + } + + break + } + } + } + } + } + + override open func layoutSubviews() { + + super.layoutSubviews() + + var leftRect = CGRect.null + var rightRect = CGRect.null + var isTitleBarButtonFound = false + + let sortedSubviews = self.subviews.sorted(by: { (view1 : UIView, view2 : UIView) -> Bool in + + let x1 = view1.frame.minX + let y1 = view1.frame.minY + let x2 = view2.frame.minX + let y2 = view2.frame.minY + + if x1 != x2 { + return x1 < x2 + } else { + return y1 < y2 + } + }) + + for barButtonItemView in sortedSubviews { + + if isTitleBarButtonFound == true { + rightRect = barButtonItemView.frame + break + } else if type(of: barButtonItemView) === UIView.self { + isTitleBarButtonFound = true + //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem) + } else if barButtonItemView.isKind(of: UIControl.self) == true { + leftRect = barButtonItemView.frame + } + } + + var x : CGFloat = 16 + + if (leftRect.isNull == false) + { + x = leftRect.maxX + 16 + } + + let width : CGFloat = self.frame.width - 32 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX) + + + if let unwrappedItems = items { + for item in unwrappedItems { + + if let newItem = item as? IQTitleBarButtonItem { + + let titleRect = CGRect(x: x, y: 0, width: width, height: self.frame.size.height) + newItem.customView?.frame = titleRect + break + } + } + } + } + + open var enableInputClicksWhenVisible: Bool { + return true + } +} diff --git a/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift new file mode 100755 index 0000000..31cf0d0 --- /dev/null +++ b/FAPanels/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift @@ -0,0 +1,1225 @@ +// +// IQUIView+IQKeyboardToolbar.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +import UIKit +fileprivate func < (lhs: T?, rhs: T?) -> Bool { + switch (lhs, rhs) { + case let (l?, r?): + return l < r + case (nil, _?): + return true + default: + return false + } +} + +fileprivate func > (lhs: T?, rhs: T?) -> Bool { + switch (lhs, rhs) { + case let (l?, r?): + return l > r + default: + return rhs < lhs + } +} + + +private var kIQShouldHidePlaceholderText = "kIQShouldHidePlaceholderText" +private var kIQPlaceholderText = "kIQPlaceholderText" + + +private var kIQTitleInvocationTarget = "kIQTitleInvocationTarget" +private var kIQTitleInvocationSelector = "kIQTitleInvocationSelector" + +private var kIQPreviousInvocationTarget = "kIQPreviousInvocationTarget" +private var kIQPreviousInvocationSelector = "kIQPreviousInvocationSelector" +private var kIQNextInvocationTarget = "kIQNextInvocationTarget" +private var kIQNextInvocationSelector = "kIQNextInvocationSelector" +private var kIQDoneInvocationTarget = "kIQDoneInvocationTarget" +private var kIQDoneInvocationSelector = "kIQDoneInvocationSelector" + +/** +UIView category methods to add IQToolbar on UIKeyboard. +*/ +public extension UIView { + + ///------------------------- + /// MARK: Title and Distance + ///------------------------- + + /** + If `shouldHidePlaceholderText` is YES, then title will not be added to the toolbar. Default to NO. + */ + public var shouldHidePlaceholderText: Bool { + get { + let aValue: AnyObject? = objc_getAssociatedObject(self, &kIQShouldHidePlaceholderText) as AnyObject? + + if let unwrapedValue = aValue as? Bool { + return unwrapedValue + } else { + return false + } + } + set(newValue) { + objc_setAssociatedObject(self, &kIQShouldHidePlaceholderText, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + if let toolbar = self.inputAccessoryView as? IQToolbar { + if self.responds(to: #selector(getter: UITextField.placeholder)) { + toolbar.title = self.drawingPlaceholderText + } + } + } + } + + /** + `placeholderText` to override default `placeholder` text when drawing text on toolbar. + */ + public var placeholderText: String? { + get { + let aValue = objc_getAssociatedObject(self, &kIQPlaceholderText) as? String + + return aValue + } + set(newValue) { + objc_setAssociatedObject(self, &kIQPlaceholderText, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + if let toolbar = self.inputAccessoryView as? IQToolbar { + if self.responds(to: #selector(getter: UITextField.placeholder)) { + toolbar.title = self.drawingPlaceholderText + } + } + } + } + + /** + `drawingPlaceholderText` will be actual text used to draw on toolbar. This would either `placeholder` or `placeholderText`. + */ + public var drawingPlaceholderText: String? { + + if (self.shouldHidePlaceholderText) + { + return nil + } + else if (self.placeholderText?.isEmpty == false) { + return self.placeholderText + } + else if self.responds(to: #selector(getter: UITextField.placeholder)) { + + if let textField = self as? UITextField { + return textField.placeholder + } else if let textView = self as? IQTextView { + return textView.placeholder + } else { + return nil + } + } + else { + return nil + } + } + + /** + Optional target & action to behave toolbar title button as clickable button + + @param target Target object. + @param action Target Selector. + */ + public func setTitleTarget(_ target: AnyObject?, action: Selector?) { + titleInvocation = (target, action) + } + + /** + Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. + */ + public var titleInvocation : (target: AnyObject?, action: Selector?) { + get { + let target: AnyObject? = objc_getAssociatedObject(self, &kIQTitleInvocationTarget) as AnyObject? + var action : Selector? + + if let selectorString = objc_getAssociatedObject(self, &kIQTitleInvocationSelector) as? String { + action = NSSelectorFromString(selectorString) + } + + return (target: target, action: action) + } + set(newValue) { + objc_setAssociatedObject(self, &kIQTitleInvocationTarget, newValue.target, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + if let unwrappedSelector = newValue.action { + objc_setAssociatedObject(self, &kIQTitleInvocationSelector, NSStringFromSelector(unwrappedSelector), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } else { + objc_setAssociatedObject(self, &kIQTitleInvocationSelector, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + } + + ///----------------------------------------- + /// TODO: Customised Invocation Registration + ///----------------------------------------- + + /** + Additional target & action to do get callback action. Note that setting custom `previous` selector doesn't affect native `previous` functionality, this is just used to notifiy user to do additional work according to need. + + @param target Target object. + @param action Target Selector. + */ + public func setCustomPreviousTarget(_ target: AnyObject?, action: Selector?) { + previousInvocation = (target, action) + } + + /** + Additional target & action to do get callback action. Note that setting custom `next` selector doesn't affect native `next` functionality, this is just used to notifiy user to do additional work according to need. + + @param target Target object. + @param action Target Selector. + */ + public func setCustomNextTarget(_ target: AnyObject?, action: Selector?) { + nextInvocation = (target, action) + } + + /** + Additional target & action to do get callback action. Note that setting custom `done` selector doesn't affect native `done` functionality, this is just used to notifiy user to do additional work according to need. + + @param target Target object. + @param action Target Selector. + */ + public func setCustomDoneTarget(_ target: AnyObject?, action: Selector?) { + doneInvocation = (target, action) + } + + /** + Customized Invocation to be called on previous arrow action. previousInvocation is internally created using setCustomPreviousTarget:action: method. + */ + public var previousInvocation : (target: AnyObject?, action: Selector?) { + get { + let target: AnyObject? = objc_getAssociatedObject(self, &kIQPreviousInvocationTarget) as AnyObject? + var action : Selector? + + if let selectorString = objc_getAssociatedObject(self, &kIQPreviousInvocationSelector) as? String { + action = NSSelectorFromString(selectorString) + } + + return (target: target, action: action) + } + set(newValue) { + objc_setAssociatedObject(self, &kIQPreviousInvocationTarget, newValue.target, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + if let unwrappedSelector = newValue.action { + objc_setAssociatedObject(self, &kIQPreviousInvocationSelector, NSStringFromSelector(unwrappedSelector), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } else { + objc_setAssociatedObject(self, &kIQPreviousInvocationSelector, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + } + + /** + Customized Invocation to be called on next arrow action. nextInvocation is internally created using setCustomNextTarget:action: method. + */ + public var nextInvocation : (target: AnyObject?, action: Selector?) { + get { + let target: AnyObject? = objc_getAssociatedObject(self, &kIQNextInvocationTarget) as AnyObject? + var action : Selector? + + if let selectorString = objc_getAssociatedObject(self, &kIQNextInvocationSelector) as? String { + action = NSSelectorFromString(selectorString) + } + + return (target: target, action: action) + } + set(newValue) { + objc_setAssociatedObject(self, &kIQNextInvocationTarget, newValue.target, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + if let unwrappedSelector = newValue.action { + objc_setAssociatedObject(self, &kIQNextInvocationSelector, NSStringFromSelector(unwrappedSelector), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } else { + objc_setAssociatedObject(self, &kIQNextInvocationSelector, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + } + + /** + Customized Invocation to be called on done action. doneInvocation is internally created using setCustomDoneTarget:action: method. + */ + public var doneInvocation : (target: AnyObject?, action: Selector?) { + get { + let target: AnyObject? = objc_getAssociatedObject(self, &kIQDoneInvocationTarget) as AnyObject? + var action : Selector? + + if let selectorString = objc_getAssociatedObject(self, &kIQDoneInvocationSelector) as? String { + action = NSSelectorFromString(selectorString) + } + + return (target: target, action: action) + } + set(newValue) { + objc_setAssociatedObject(self, &kIQDoneInvocationTarget, newValue.target, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + if let unwrappedSelector = newValue.action { + objc_setAssociatedObject(self, &kIQDoneInvocationSelector, NSStringFromSelector(unwrappedSelector), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } else { + objc_setAssociatedObject(self, &kIQDoneInvocationSelector, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + } + + ///--------------------- + /// MARK: Private helper + ///--------------------- + + fileprivate static func flexibleBarButtonItem () -> IQBarButtonItem { + + struct Static { + static let nilButton = IQBarButtonItem(barButtonSystemItem:UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) + } + + return Static.nilButton + } + + ///------------ + /// MARK: Done + ///------------ + + /** + Helper function to add Done button on keyboard. + + @param target Target object for selector. + @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + */ + public func addDoneOnKeyboardWithTarget(_ target : AnyObject?, action : Selector) { + + addDoneOnKeyboardWithTarget(target, action: action, titleText: nil) + } + + /** + Helper function to add Done button on keyboard. + + @param target Target object for selector. + @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ + public func addDoneOnKeyboardWithTarget (_ target : AnyObject?, action : Selector, titleText: String?) { + + //If can't set InputAccessoryView. Then return + if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + + // Creating a toolBar for phoneNumber keyboard + let toolbar = IQToolbar() + + var items : [UIBarButtonItem] = [] + + //Title button + let title = IQTitleBarButtonItem(title: shouldHidePlaceholderText == true ? nil : titleText) + items.append(title) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Done button + let doneButton = IQBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: target, action: action) + items.append(doneButton) + + // Adding button to toolBar. + toolbar.items = items + toolbar.toolbarTitleInvocation = self.titleInvocation + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + textField.inputAccessoryView = toolbar + + switch textField.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } else if let textView = self as? UITextView { + textView.inputAccessoryView = toolbar + + switch textView.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } + } + } + + /** + Helper function to add Done button on keyboard. + + @param target Target object for selector. + @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + */ + public func addDoneOnKeyboardWithTarget (_ target : AnyObject?, action : Selector, shouldShowPlaceholder: Bool) { + + var title : String? + + if shouldShowPlaceholder == true { + title = self.drawingPlaceholderText + } + + addDoneOnKeyboardWithTarget(target, action: action, titleText: title) + } + + + ///------------ + /// MARK: Right + ///------------ + + /** + Helper function to add Right button on keyboard. + + @param image Image icon to use as right button. + @param target Target object for selector. + @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ + public func addRightButtonOnKeyboardWithImage (_ image : UIImage, target : AnyObject?, action : Selector, titleText: String?) { + + //If can't set InputAccessoryView. Then return + if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + + // Creating a toolBar for phoneNumber keyboard + let toolbar = IQToolbar() + toolbar.doneImage = image + + var items : [UIBarButtonItem] = [] + + //Title button + let title = IQTitleBarButtonItem(title: shouldHidePlaceholderText == true ? nil : titleText) + items.append(title) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Right button + let doneButton = IQBarButtonItem(image: image, style: UIBarButtonItemStyle.done, target: target, action: action) + doneButton.accessibilityLabel = "Toolbar Done Button" + items.append(doneButton) + + // Adding button to toolBar. + toolbar.items = items + toolbar.toolbarTitleInvocation = self.titleInvocation + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + textField.inputAccessoryView = toolbar + + switch textField.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } else if let textView = self as? UITextView { + textView.inputAccessoryView = toolbar + + switch textView.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } + } + } + + /** + Helper function to add Right button on keyboard. + + @param image Image icon to use as right button. + @param target Target object for selector. + @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + */ + public func addRightButtonOnKeyboardWithImage (_ image : UIImage, target : AnyObject?, action : Selector, shouldShowPlaceholder: Bool) { + + var title : String? + + if shouldShowPlaceholder == true { + title = self.drawingPlaceholderText + } + + addRightButtonOnKeyboardWithImage(image, target: target, action: action, titleText: title) + } + + /** + Helper function to add Right button on keyboard. + + @param text Title for rightBarButtonItem, usually 'Done'. + @param target Target object for selector. + @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + */ + public func addRightButtonOnKeyboardWithText (_ text : String, target : AnyObject?, action : Selector) { + + addRightButtonOnKeyboardWithText(text, target: target, action: action, titleText: nil) + } + + /** + Helper function to add Right button on keyboard. + + @param text Title for rightBarButtonItem, usually 'Done'. + @param target Target object for selector. + @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ + public func addRightButtonOnKeyboardWithText (_ text : String, target : AnyObject?, action : Selector, titleText: String?) { + + //If can't set InputAccessoryView. Then return + if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + + // Creating a toolBar for phoneNumber keyboard + let toolbar = IQToolbar() + toolbar.doneTitle = text + + var items : [UIBarButtonItem] = [] + + //Title button + let title = IQTitleBarButtonItem(title: shouldHidePlaceholderText == true ? nil : titleText) + items.append(title) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Right button + let doneButton = IQBarButtonItem(title: text, style: UIBarButtonItemStyle.done, target: target, action: action) + items.append(doneButton) + + // Adding button to toolBar. + toolbar.items = items + toolbar.toolbarTitleInvocation = self.titleInvocation + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + textField.inputAccessoryView = toolbar + + switch textField.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } else if let textView = self as? UITextView { + textView.inputAccessoryView = toolbar + + switch textView.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } + } + } + + /** + Helper function to add Right button on keyboard. + + @param text Title for rightBarButtonItem, usually 'Done'. + @param target Target object for selector. + @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + */ + public func addRightButtonOnKeyboardWithText (_ text : String, target : AnyObject?, action : Selector, shouldShowPlaceholder: Bool) { + + var title : String? + + if shouldShowPlaceholder == true { + title = self.drawingPlaceholderText + } + + addRightButtonOnKeyboardWithText(text, target: target, action: action, titleText: title) + } + + + ///------------------ + /// MARK: Cancel/Done + ///------------------ + + /** + Helper function to add Cancel and Done button on keyboard. + + @param target Target object for selector. + @param cancelAction Cancel button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. + @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + */ + public func addCancelDoneOnKeyboardWithTarget (_ target : AnyObject?, cancelAction : Selector, doneAction : Selector) { + + addCancelDoneOnKeyboardWithTarget(target, cancelAction: cancelAction, doneAction: doneAction, titleText: nil) + } + + /** + Helper function to add Cancel and Done button on keyboard. + + @param target Target object for selector. + @param cancelAction Cancel button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. + @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ + public func addCancelDoneOnKeyboardWithTarget (_ target : AnyObject?, cancelAction : Selector, doneAction : Selector, titleText: String?) { + + //If can't set InputAccessoryView. Then return + if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + // Creating a toolBar for phoneNumber keyboard + let toolbar = IQToolbar() + + var items : [UIBarButtonItem] = [] + + //Cancel button + let cancelButton = IQBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: target, action: cancelAction) + items.append(cancelButton) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Title + let title = IQTitleBarButtonItem(title: shouldHidePlaceholderText == true ? nil : titleText) + items.append(title) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Done button + let doneButton = IQBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: target, action: doneAction) + items.append(doneButton) + + // Adding button to toolBar. + toolbar.items = items + toolbar.toolbarTitleInvocation = self.titleInvocation + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + textField.inputAccessoryView = toolbar + + switch textField.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } else if let textView = self as? UITextView { + textView.inputAccessoryView = toolbar + + switch textView.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } + } + } + + /** + Helper function to add Cancel and Done button on keyboard. + + @param target Target object for selector. + @param cancelAction Cancel button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. + @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + */ + public func addCancelDoneOnKeyboardWithTarget (_ target : AnyObject?, cancelAction : Selector, doneAction : Selector, shouldShowPlaceholder: Bool) { + + var title : String? + + if shouldShowPlaceholder == true { + title = self.drawingPlaceholderText + } + + addCancelDoneOnKeyboardWithTarget(target, cancelAction: cancelAction, doneAction: doneAction, titleText: title) + } + + + ///----------------- + /// MARK: Right/Left + ///----------------- + + /** + Helper function to add Left and Right button on keyboard. + + @param target Target object for selector. + @param leftButtonTitle Title for leftBarButtonItem, usually 'Cancel'. + @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. + @param leftButtonAction Left button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. + @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + */ + public func addRightLeftOnKeyboardWithTarget( _ target : AnyObject?, leftButtonTitle : String, rightButtonTitle : String, rightButtonAction : Selector, leftButtonAction : Selector) { + + addRightLeftOnKeyboardWithTarget(target, leftButtonTitle: leftButtonTitle, rightButtonTitle: rightButtonTitle, rightButtonAction: rightButtonAction, leftButtonAction: leftButtonAction, titleText: nil) + } + + /** + Helper function to add Left and Right button on keyboard. + + @param target Target object for selector. + @param leftButtonTitle Title for leftBarButtonItem, usually 'Cancel'. + @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. + @param leftButtonAction Left button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. + @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ + public func addRightLeftOnKeyboardWithTarget( _ target : AnyObject?, leftButtonTitle : String, rightButtonTitle : String, rightButtonAction : Selector, leftButtonAction : Selector, titleText: String?) { + + //If can't set InputAccessoryView. Then return + if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + // Creating a toolBar for phoneNumber keyboard + let toolbar = IQToolbar() + toolbar.doneTitle = rightButtonTitle + + var items : [UIBarButtonItem] = [] + + //Left button + let cancelButton = IQBarButtonItem(title: leftButtonTitle, style: UIBarButtonItemStyle.plain, target: target, action: leftButtonAction) + items.append(cancelButton) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Title button + let title = IQTitleBarButtonItem(title: shouldHidePlaceholderText == true ? nil : titleText) + items.append(title) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Right button + let doneButton = IQBarButtonItem(title: rightButtonTitle, style: UIBarButtonItemStyle.done, target: target, action: rightButtonAction) + items.append(doneButton) + + // Adding button to toolBar. + toolbar.items = items + toolbar.toolbarTitleInvocation = self.titleInvocation + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + textField.inputAccessoryView = toolbar + + switch textField.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } else if let textView = self as? UITextView { + textView.inputAccessoryView = toolbar + + switch textView.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } + } + } + + /** + Helper function to add Left and Right button on keyboard. + + @param target Target object for selector. + @param leftButtonTitle Title for leftBarButtonItem, usually 'Cancel'. + @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. + @param leftButtonAction Left button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. + @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + */ + public func addRightLeftOnKeyboardWithTarget( _ target : AnyObject?, leftButtonTitle : String, rightButtonTitle : String, rightButtonAction : Selector, leftButtonAction : Selector, shouldShowPlaceholder: Bool) { + + var title : String? + + if shouldShowPlaceholder == true { + title = self.drawingPlaceholderText + } + + addRightLeftOnKeyboardWithTarget(target, leftButtonTitle: leftButtonTitle, rightButtonTitle: rightButtonTitle, rightButtonAction: rightButtonAction, leftButtonAction: leftButtonAction, titleText: title) + } + + + ///------------------------- + /// MARK: Previous/Next/Done + ///------------------------- + + /** + Helper function to add ArrowNextPrevious and Done button on keyboard. + + @param target Target object for selector. + @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + @param nextAction Next button action name. Usually 'nextAction:(id)item'. + @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + */ + public func addPreviousNextDoneOnKeyboardWithTarget ( _ target : AnyObject?, previousAction : Selector, nextAction : Selector, doneAction : Selector) { + + addPreviousNextDoneOnKeyboardWithTarget(target, previousAction: previousAction, nextAction: nextAction, doneAction: doneAction, titleText: nil) + } + + /** + Helper function to add ArrowNextPrevious and Done button on keyboard. + + @param target Target object for selector. + @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + @param nextAction Next button action name. Usually 'nextAction:(id)item'. + @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ + public func addPreviousNextDoneOnKeyboardWithTarget ( _ target : AnyObject?, previousAction : Selector, nextAction : Selector, doneAction : Selector, titleText: String?) { + + //If can't set InputAccessoryView. Then return + if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + // Creating a toolBar for phoneNumber keyboard + let toolbar = IQToolbar() + + var items : [UIBarButtonItem] = [] + + let prev : IQBarButtonItem + let next : IQBarButtonItem + + // Get the top level "bundle" which may actually be the framework + var bundle = Bundle(for: IQKeyboardManager.self) + + if let resourcePath = bundle.path(forResource: "IQKeyboardManager", ofType: "bundle") { + if let resourcesBundle = Bundle(path: resourcePath) { + bundle = resourcesBundle + } + } + + var imageLeftArrow : UIImage! + var imageRightArrow : UIImage! + + if #available(iOS 10.0, *) { + imageLeftArrow = UIImage(named: "IQButtonBarArrowUp", in: bundle, compatibleWith: nil) + imageRightArrow = UIImage(named: "IQButtonBarArrowDown", in: bundle, compatibleWith: nil) + } else { + imageLeftArrow = UIImage(named: "IQButtonBarArrowLeft", in: bundle, compatibleWith: nil) + imageRightArrow = UIImage(named: "IQButtonBarArrowRight", in: bundle, compatibleWith: nil) + } + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) + if #available(iOS 9.0, *) { + imageLeftArrow = imageLeftArrow?.imageFlippedForRightToLeftLayoutDirection() + imageRightArrow = imageRightArrow?.imageFlippedForRightToLeftLayoutDirection() + } + + prev = IQBarButtonItem(image: imageLeftArrow, style: UIBarButtonItemStyle.plain, target: target, action: previousAction) + prev.accessibilityLabel = "Toolbar Previous Button" + + next = IQBarButtonItem(image: imageRightArrow, style: UIBarButtonItemStyle.plain, target: target, action: nextAction) + next.accessibilityLabel = "Toolbar Next Button" + + //Previous button + items.append(prev) + + //Fixed space + let fixed = IQBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, target: nil, action: nil) + if #available(iOS 10.0, *) { + fixed.width = 6 + } else { + fixed.width = 20 + } + items.append(fixed) + + //Next button + items.append(next) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Title button + let title = IQTitleBarButtonItem(title: shouldHidePlaceholderText == true ? nil : titleText) + items.append(title) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Done button + let doneButton = IQBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: target, action: doneAction) + items.append(doneButton) + + // Adding button to toolBar. + toolbar.items = items + toolbar.toolbarTitleInvocation = self.titleInvocation + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + textField.inputAccessoryView = toolbar + + switch textField.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } else if let textView = self as? UITextView { + textView.inputAccessoryView = toolbar + + switch textView.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } + } + } + + /** + Helper function to add ArrowNextPrevious and Done button on keyboard. + + @param target Target object for selector. + @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + @param nextAction Next button action name. Usually 'nextAction:(id)item'. + @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + */ + public func addPreviousNextDoneOnKeyboardWithTarget ( _ target : AnyObject?, previousAction : Selector, nextAction : Selector, doneAction : Selector, shouldShowPlaceholder: Bool) { + + var title : String? + + if shouldShowPlaceholder == true { + title = self.drawingPlaceholderText + } + + addPreviousNextDoneOnKeyboardWithTarget(target, previousAction: previousAction, nextAction: nextAction, doneAction: doneAction, titleText: title) + } + + ///-------------------------- + /// MARK: Previous/Next/Right + ///-------------------------- + + /** + Helper function to add ArrowNextPrevious and Right button on keyboard. + + @param target Target object for selector. + @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. + @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + @param nextAction Next button action name. Usually 'nextAction:(id)item'. + @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ + public func addPreviousNextRightOnKeyboardWithTarget( _ target : AnyObject?, rightButtonImage : UIImage, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector, titleText : String?) { + + //If can't set InputAccessoryView. Then return + if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + // Creating a toolBar for phoneNumber keyboard + let toolbar = IQToolbar() + toolbar.doneImage = rightButtonImage + + var items : [UIBarButtonItem] = [] + + let prev : IQBarButtonItem + let next : IQBarButtonItem + + // Get the top level "bundle" which may actually be the framework + var bundle = Bundle(for: IQKeyboardManager.self) + + if let resourcePath = bundle.path(forResource: "IQKeyboardManager", ofType: "bundle") { + if let resourcesBundle = Bundle(path: resourcePath) { + bundle = resourcesBundle + } + } + + var imageLeftArrow : UIImage! + var imageRightArrow : UIImage! + + if #available(iOS 10.0, *) { + imageLeftArrow = UIImage(named: "IQButtonBarArrowUp", in: bundle, compatibleWith: nil) + imageRightArrow = UIImage(named: "IQButtonBarArrowDown", in: bundle, compatibleWith: nil) + } else { + imageLeftArrow = UIImage(named: "IQButtonBarArrowLeft", in: bundle, compatibleWith: nil) + imageRightArrow = UIImage(named: "IQButtonBarArrowRight", in: bundle, compatibleWith: nil) + } + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) + if #available(iOS 9.0, *) { + imageLeftArrow = imageLeftArrow?.imageFlippedForRightToLeftLayoutDirection() + imageRightArrow = imageRightArrow?.imageFlippedForRightToLeftLayoutDirection() + } + + prev = IQBarButtonItem(image: imageLeftArrow, style: UIBarButtonItemStyle.plain, target: target, action: previousAction) + prev.accessibilityLabel = "Toolbar Previous Button" + + next = IQBarButtonItem(image: imageRightArrow, style: UIBarButtonItemStyle.plain, target: target, action: nextAction) + next.accessibilityLabel = "Toolbar Next Button" + + //Previous button + items.append(prev) + + //Fixed space + let fixed = IQBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, target: nil, action: nil) + if #available(iOS 10.0, *) { + fixed.width = 6 + } else { + fixed.width = 20 + } + items.append(fixed) + + //Next button + items.append(next) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Title button + let title = IQTitleBarButtonItem(title: shouldHidePlaceholderText == true ? nil : titleText) + items.append(title) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Right button + let doneButton = IQBarButtonItem(image: rightButtonImage, style: UIBarButtonItemStyle.done, target: target, action: rightButtonAction) + doneButton.accessibilityLabel = "Toolbar Done Button" + items.append(doneButton) + + // Adding button to toolBar. + toolbar.items = items + toolbar.toolbarTitleInvocation = self.titleInvocation + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + textField.inputAccessoryView = toolbar + + switch textField.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } else if let textView = self as? UITextView { + textView.inputAccessoryView = toolbar + + switch textView.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } + } + } + + // /** + // Helper function to add ArrowNextPrevious and Right button on keyboard. + // + // @param target Target object for selector. + // @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. + // @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + // @param nextAction Next button action name. Usually 'nextAction:(id)item'. + // @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. + // @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + // */ + public func addPreviousNextRightOnKeyboardWithTarget( _ target : AnyObject?, rightButtonImage : UIImage, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector, shouldShowPlaceholder : Bool) { + + var title : String? + + if shouldShowPlaceholder == true { + title = self.drawingPlaceholderText + } + + addPreviousNextRightOnKeyboardWithTarget(target, rightButtonImage: rightButtonImage, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: title) + } + + + /** + Helper function to add ArrowNextPrevious and Right button on keyboard. + + @param target Target object for selector. + @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. + @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + @param nextAction Next button action name. Usually 'nextAction:(id)item'. + @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. + */ + public func addPreviousNextRightOnKeyboardWithTarget( _ target : AnyObject?, rightButtonTitle : String, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector) { + + addPreviousNextRightOnKeyboardWithTarget(target, rightButtonTitle: rightButtonTitle, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: nil) + } + + /** + Helper function to add ArrowNextPrevious and Right button on keyboard. + + @param target Target object for selector. + @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. + @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + @param nextAction Next button action name. Usually 'nextAction:(id)item'. + @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ + public func addPreviousNextRightOnKeyboardWithTarget( _ target : AnyObject?, rightButtonTitle : String, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector, titleText : String?) { + + //If can't set InputAccessoryView. Then return + if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { + // Creating a toolBar for phoneNumber keyboard + let toolbar = IQToolbar() + toolbar.doneTitle = rightButtonTitle + + var items : [UIBarButtonItem] = [] + + let prev : IQBarButtonItem + let next : IQBarButtonItem + + // Get the top level "bundle" which may actually be the framework + var bundle = Bundle(for: IQKeyboardManager.self) + + if let resourcePath = bundle.path(forResource: "IQKeyboardManager", ofType: "bundle") { + if let resourcesBundle = Bundle(path: resourcePath) { + bundle = resourcesBundle + } + } + + var imageLeftArrow : UIImage! + var imageRightArrow : UIImage! + + if #available(iOS 10.0, *) { + imageLeftArrow = UIImage(named: "IQButtonBarArrowUp", in: bundle, compatibleWith: nil) + imageRightArrow = UIImage(named: "IQButtonBarArrowDown", in: bundle, compatibleWith: nil) + } else { + imageLeftArrow = UIImage(named: "IQButtonBarArrowLeft", in: bundle, compatibleWith: nil) + imageRightArrow = UIImage(named: "IQButtonBarArrowRight", in: bundle, compatibleWith: nil) + } + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) + if #available(iOS 9.0, *) { + imageLeftArrow = imageLeftArrow?.imageFlippedForRightToLeftLayoutDirection() + imageRightArrow = imageRightArrow?.imageFlippedForRightToLeftLayoutDirection() + } + + prev = IQBarButtonItem(image: imageLeftArrow, style: UIBarButtonItemStyle.plain, target: target, action: previousAction) + prev.accessibilityLabel = "Toolbar Previous Button" + + next = IQBarButtonItem(image: imageRightArrow, style: UIBarButtonItemStyle.plain, target: target, action: nextAction) + next.accessibilityLabel = "Toolbar Next Button" + + //Previous button + items.append(prev) + + //Fixed space + let fixed = IQBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, target: nil, action: nil) + if #available(iOS 10.0, *) { + fixed.width = 6 + } else { + fixed.width = 20 + } + items.append(fixed) + + //Next button + items.append(next) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Title button + let title = IQTitleBarButtonItem(title: shouldHidePlaceholderText == true ? nil : titleText) + items.append(title) + + //Flexible space + items.append(UIView.flexibleBarButtonItem()) + + //Right button + let doneButton = IQBarButtonItem(title: rightButtonTitle, style: UIBarButtonItemStyle.done, target: target, action: rightButtonAction) + items.append(doneButton) + + // Adding button to toolBar. + toolbar.items = items + toolbar.toolbarTitleInvocation = self.titleInvocation + + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + textField.inputAccessoryView = toolbar + + switch textField.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } else if let textView = self as? UITextView { + textView.inputAccessoryView = toolbar + + switch textView.keyboardAppearance { + case UIKeyboardAppearance.dark: + toolbar.barStyle = UIBarStyle.black + default: + toolbar.barStyle = UIBarStyle.default + } + } + } + } + +// /** +// Helper function to add ArrowNextPrevious and Right button on keyboard. +// +// @param target Target object for selector. +// @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. +// @param previousAction Previous button action name. Usually 'previousAction:(id)item'. +// @param nextAction Next button action name. Usually 'nextAction:(id)item'. +// @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. +// @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. +// */ + public func addPreviousNextRightOnKeyboardWithTarget( _ target : AnyObject?, rightButtonTitle : String, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector, shouldShowPlaceholder : Bool) { + + var title : String? + + if shouldShowPlaceholder == true { + title = self.drawingPlaceholderText + } + + addPreviousNextRightOnKeyboardWithTarget(target, rightButtonTitle: rightButtonTitle, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: title) + } + + + ///----------------------------------- + /// MARK: Enable/Disable Previous/Next + ///----------------------------------- + + /** + Helper function to enable and disable previous next buttons. + + @param isPreviousEnabled BOOL to enable/disable previous button on keyboard. + @param isNextEnabled BOOL to enable/disable next button on keyboard.. + */ + public func setEnablePrevious ( _ isPreviousEnabled : Bool, isNextEnabled : Bool) { + + // Getting inputAccessoryView. + if let inputAccessoryView = self.inputAccessoryView as? IQToolbar { + // If it is IQToolbar and it's items are greater than zero. + if inputAccessoryView.items?.count > 3 { + if let items = inputAccessoryView.items { + if let prevButton = items[0] as? IQBarButtonItem { + if let nextButton = items[2] as? IQBarButtonItem { + + if prevButton.isEnabled != isPreviousEnabled { + prevButton.isEnabled = isPreviousEnabled + } + + if nextButton.isEnabled != isNextEnabled { + nextButton.isEnabled = isNextEnabled + } + } + } + } + } + } + } +} + diff --git a/FAPanels/IQKeyboardManagerSwift/Resources/.DS_Store b/FAPanels/IQKeyboardManagerSwift/Resources/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6eaad7fc036a01b48ad944216c6ad0ea557b9694 GIT binary patch literal 6148 zcmeHK!Ab)`41H63sCenI$GHna|6nQGf`|v{52)Qzk*-^cd+;{jvsGG8^+UEuEmd;=E zO5gsDx~YD>#^zyvFYme~x6Xhw;0zo$1FYF1gEK|9&VV!E4D1+?`yo;V3&W(CuMV2r z0ubdlG7HDjOGr*MEDVz(pHPCP5;ZkgixD)P{%CQ9VN%p|1ZzHmy*XHi67t)*e$3$r zg`!($z!^AX;6$fGssGcj`~SlvpE(20z)>*}`sKWwa7$KOJDZbQ8>zQc5s6ERyA%#` gDQ2vc;t@3q{ZR(Q!Z0b)L-8MhOoJO|;7=L&05uOpK>z>% literal 0 HcmV?d00001 diff --git a/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png b/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..81db2ed2407db352e0d31a45fe4521ea21b6efdd GIT binary patch literal 1764 zcmY*aX;_oT8vQC_LLfx}NyJb;BKsB~s1TAMCX|Fq#7JZb3Slt>Nx~8Y%BEC%*%K*+ zltsXcWr?6(d7x~)qEs#GRYU<%%Nl8svZ+8o`bDkx-g%yxcjnBQbKZC6$7Fai+>i)8 z1ONa?I*rPNqB+#j@NLkT9VOg=!d9+}hYJAQ5Ua0qRG~E(Ok;Wgz}LnAaP~X^tU=J( zmjDoJ0|37V0suh@0I0~4mZL;yLoJf#8v_99+RFYJP*j2jfX{q+UOplpkHdsuA>W!4 zA`A+(j^{^0Yycp}6QC(SRKx+}`4NH`LOcokoNCG#6*<=;(;EvBTNfSwRe| zm;`}{6K^Gm+517{ZyjoAOmH+WQp6JqK&37xNEj<3VX;c1PwhjVBHpS0ItgMvmIW1v zQ|{nwt!;3hw4tL!B}zCF%?pK`mHK2`;(O-*VIO^nIHmdjB=e!t_b5~<89~H-x;8T6 z@NE-c=+R!&sV-hLE#b$`^^wcWrcGO96 zLsNiNK{wuRM;58>{Q7p1)&}Lf;n~8-Ag<<&$IF9n)Oe=yEV4!ZQRoF%oG+B-In12ENTna7O=0}U|*WazQ- z^=scF!Pe5wV)tJQlW9h~7TI-^)=y%y?stci-#GN?R?bJ&Jks|px|z_o)cNKx86S}p z86Z>#D<(NLlPTCmP%!Mk{c#^xZ*0Xbsj>ZbkRagAm=y!IOSe!bj z@)po4UX@kPQPO2Q0(f;tx{D929mC@bw+nym8Z-}|o!_jte)pO6?R|dyV7!7 z{d1#RZRg})O&q?i-MwskNjOpBI^LSO+?Ww@hNw0)HWl-@(`0fo%i&ntHwzjWIn=VH z{LzAQ6?_(L`3WmOc}RzGoa=Pk;N8?!OEUQI@gZ`AFf$3i-@C2EzcvC;Gb*FBw`E1K zXqT5-E`Mv+oV~iZkbARski9n2fhc=qi-8Sn4}t5`_6@7?9gqwVS#OBqsL)JTEx{M^ zgX-=KN#oi8>f!Wn$546q_HXHWcXd{H#=$OUaL+9#bcl(7{q#`9wf_8W@5IDJc2!kX zb4!hh-V61gG?SbesJekeiDJg|vzRbh>*%~%&-!9{MW2dd>58w}B!(iL!nkoXegiH} zqu)7t*NRtmUDuc~ciFfeWnUE-WrEt>wBXy6R)=&KkH>mQF#mwn53buw ztqK{#XIAv`6SuMnxvK9{)teOVS|>Wk-exrXvB-_Le_K2Ufn5_ zZJ{OU&e(wo&8dD;c>wDG>_lIY>XbBP4S3_`q@z_3N}~Gt@5nndk)5cu;bGQ{5#jkA pV?R25;VelvZp3Y6YZ|P3rm7^@nEhw6mCjTCC3IH?wf<0G+Fvc__+kJ6 literal 0 HcmV?d00001 diff --git a/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png b/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..dd3412290d4e1ad8f7d5c0be8a598792922f1964 GIT binary patch literal 2177 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 U0v_c9{YL=cL-nUf$x-}&16+6esQ>@~ literal 0 HcmV?d00001 diff --git a/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png b/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..849b991336c0c2e85017ce29be00eb8a8e50f3dc GIT binary patch literal 1815 zcmV+y2k7{TP)Px*(Md!>RA>donO$fcRTRhXo!umxkNqU+M>e~&o9zdcN}y6duoRn8X-i96`>DlZ z5evokp$`>Q^r@f^MHK8qQ7p7jq10+MwMk==244h05b?o>Y<6ao&}cBbTWXTc&RqX@ zn+-E}caz=hY&tJ<&pE?6zd85ZkGVt06TF(6o1Kwh@EssXISgB_vE27|uh;ExI(rC} zPWs%Q@MJRaJs8*%0SX3#Ua8K}ODTOen+QreydL-3$z<~OvIDiXwfSl#sShyE7<+{h z`n1>WnWRQ#wcD+&t<8>_+Mf`#LyW};yA@TGV|LL{EjhAsyEhycmq!h^oqQ z=rhX#6lw{rA`aG%ZrLEhAT!qia{_ve+o}!}2n1Rsi3|`z*NHHMk*k0?3B8`P&5!?_ z!pb{pCQwVIL3C3d3^Mc8kQy_=@Yq$$PYyx{0)M z=cY?%7XfqLq$?m;1|+YRH{kX9F`8D1aTwD-j>gq@MSUUJ5}-&Ru#riWPkJlFAiB;j z49C?EM13*2;u;G3{T*1bc>(9aU=V#c99K$);gA(&2%~8eWuzBF+b6y;hW2|H+8>Gf z#pERewFd&5F^lwI)%J=(bi&RLtI9=DUy8gWppZZGJSL28bdy^Qg3O!)%%`HhRJm** zY&l=Vu)d1`PGbs680mgE{6VVCqbP7|UQka~v=?OnM81qBC_U z5ZX_v^bKN|VF;N;%^X8FSq{VBr(lLqGlwKfcvsZ$hYVL*)3qb9c>K0OXK6DJC=v)A z!y0rAQAFDey6GTb_^_|qWg7NjS$-3du3$8oV6e}e)^%+^x`|JSRlVkG2ry?PLcauz z2@<1eiZFdIGSgF4k~!zuOtc3==P;5!5d#9|k*1No%BVUZ+Nvc}Wae#T=5sLsU>IPw zE2GM?!EgqNW-`5mu~88ST}N$pateA=J&Dg*EoYYwd|gIrX?AlS5Cb4lH?h%r4fO+Te%t??n=My9%usY7Va zh&C%_6A*XI4+m-_8%`?7dNB|t#=E*gUx|^}v}m(R&I96(`SFRZp7mj2eM$_3EoyIC z&+Ho+8JQAoR><=cqtRLHpV$L3GrbML|1j!#8{N61RBWTQc}Ss@n$;*N*L$N!$r zq&u-}{4NHU1b(pshy75$s&9GTkctZ(S%XU(Fm z61iXvi4H@akVkTndw|$1+A#ipVX4&4=;UNF-&Ve+Bp~kA=kvL|PG>i&=mjwhYVB7& zMP802VhPb!u3Rz@cg(xT)zJ7OYG_MdAav`DuI<3+`!~;4hGM}Q68%g}OgwxvGrbe~ zLD7ccx2e`<@8@UHdA2eXWdU)&~WA$b2E)9S)o;@-u0(rF5xmAnqEY z@4vLJ?LqC_6GNdpHxh^Ae)eoyG?pNjRYL{*)wRnqzS-z*(T4f!uUTE|jK||+qHQ60 zNf|OYoWcKz1IW}523@v^H(k%qsQH2|+7^;41>(NbQ8jiD3-7mifhb+$u-OOsnRTA6 zh@#RiGrF}$f}!g;syS>_@;16p(Foh7D9W&C6J;whl=GRvuYy;RsjqX2+#PQ%^RsKd zGtKFW-K_-TF*MZF>sb4)h zcAjzWks^94)HD*5FJlIOOLT^s8qY9&yQ->xiZ;_%s%WfK#!uZY{M=oEdCIg)KutB- zC_U_PHuWS@sc~bRssiyqfV$&xdwkfsJZB7yb|Yr>Bd$hIZ}MUCLC#inARZ`@Omrht zE@aBQb)mF@O5}*w+?`_n>RNUn9vo1E9+!I-P}}EV zW{AcP;Gf!^Cj!JF5~<|RKDTQMbJ7-^z3+>TsM!Ot{{dv1C-l#MaIOFV002ovPDHLk FV1gYbUD*Ht literal 0 HcmV?d00001 diff --git a/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png b/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..c8b9a874cf27641b060ff537de958ca197896774 GIT binary patch literal 1786 zcmY*adt8!P8vgJWg4as%-Y20Zt{`fK1S(2~ZCEi{ikCzMMN3o4b{`E4ZT%SnxGR;rjY@l^(=gasjJz8u~a$@05Ti_;8YF(ENP%q zN&qiShP4R+E{HYikT6bgs34TKhY-t6#xUc! zF)U14a;k<60K_zcCQW7um|$A+;S@e0jfDKjAZYS67>fiyQUpmPWGHPP=+EV`z^xch zj2qG$27(}w7sn>hDFL6aYjz}Lf_RteZR5-Q88gaOJ0` z2$*TEDg4c!ME;{gVew;moKyjan*y%sGGn+$1tcVL&FIVcRHuN${;yLC|8rZK2C-`= zSRBR;`$b!GmAHly_VPF^jq{qmH;(v``G44FA0l?m{C|r1)agf5)2cU&i2d?x-mpDA zPGJC`3lF4_gQ%ud`nq6ifr6Ru+H?rY(UPmzc_urs75QuCCxBn_W&}x`* zu(qPxVEyg7*HuX5Z9R3Zbe_!Fh4D8EG9>n0Ks!REb;bGeI4e}T6 zIZiD{O8f^LD8t3nJj?7hhp(B$8#n4Fv=S8xX$NR8F?DBEu@T5LB=sN?$vPJ9xinr( zzmv3%=OlqBGLr*n+U)~cH7Ls+W!KBDSay%4%VQc#1AJ{|uIcBSDlb3m*&AXnz;b3h zVXJ1aLx**Lu#y;M_Z-5}<~mSb3jf;Y`=#ku<0>J-j|Z#-d{>jQ`! zojc1$*1btsiD?avNYLZxT{#VwHy#-IORQ;$BD?QMqsi-1+u|U^UoTH4k)LRf`0tkQ zd0u3u`_O(9l6B2o(DKx?-kdab|1sDE_(8XY+ZSAVf0Oks9HoS=2Au!(pHU@$GM;Qd zwUTB3tp6Tq&J3mo1f28-^+jBX*o zmr=<-^T!jOyPx!{;GYOud~4(?zUHAnQR$}4GzdKfZIWrdo<&bdtZ^hf-h!F+td>ok zw3g!S7{ijLIOVdxF(ErHSF{J-s=x;kkV+4ckMf#8yd@-^kEuR6STC%xD{wk@=Y(jl zFW*>pqpYFku`0rQb=%}I9cZsdzAR;Ae$H2nK)fSo61MwH6~62|Y;96dFRYuoohLNP zyk7OFN5N1%<>xL67i~6edu$F`kBMLCn5jIb#l2yoiU(Xz(K3Rem!qH#M(v!nv6Ab{ z9+oX_9G-=ouGE|BT}0W8&awMSuGTIOFK?;2?@P25xm;GYM|i)tYd*u+dc-_JXdBm9 z+~PipHxBftJ(0CX?PuJy5uG6%RTw}Uj!Q4h9H8GpoimQz?%z2;8C|>;`h7inZqfM2 z#on-mlM0KZ-|D0b%~EMU)hd4f19jGd&-4mvY2~ZCT(sO^wD5gBeR&3WW%j!8b}y@K z(B+0-k|GImd`95Dh?m{+9a4Wkv1BeUi4wbvIWlI%y}w#LYrF7`tobU6WOToAHLXpW zFRrFkcRI+S)4d)IBhX{vn1qVKx?D_I-NZFB7y_3y^|J?SKKqC0?{d{4^Tcm$a;NbO zmtVH~*4n*{v5~XqR3x?K+}aNl MxHE{->=&K=Z!8)8l>h($ literal 0 HcmV?d00001 diff --git a/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png b/FAPanels/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..95c43973b283158e67081158220a7f6d6edb8c8b GIT binary patch literal 1844 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 + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIViewControllerBasedStatusBarAppearance + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/FAPanels/LeftMenuCell.swift b/FAPanels/LeftMenuCell.swift new file mode 100644 index 0000000..ccdc357 --- /dev/null +++ b/FAPanels/LeftMenuCell.swift @@ -0,0 +1,29 @@ +// +// LeftMenuCell.swift +// FAPanels +// +// Created by Fahid Attique on 10/07/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import UIKit + +class LeftMenuCell: UITableViewCell { + + + @IBOutlet var menuOption: UILabel! + @IBOutlet var menuImage: UIImageView! + + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/FAPanels/LeftMenuCell.xib b/FAPanels/LeftMenuCell.xib new file mode 100644 index 0000000..96a45a2 --- /dev/null +++ b/FAPanels/LeftMenuCell.xib @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FAPanels/LeftMenuVC.swift b/FAPanels/LeftMenuVC.swift new file mode 100644 index 0000000..d46e219 --- /dev/null +++ b/FAPanels/LeftMenuVC.swift @@ -0,0 +1,96 @@ +// +// LeftMenuVC.swift +// FAPanels +// +// Created by Fahid Attique on 17/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import UIKit + +class LeftMenuVC: UIViewController { + + + @IBOutlet var tableView: UITableView! + + fileprivate let menuOptions = ["Home", "Music", "Contacts", "Videos", "Apple", "Messages", "Cloud", "Support"] + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + + viewConfigurations() + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + + + private func viewConfigurations() { + + tableView.register(UINib.init(nibName: "LeftMenuCell", bundle: nil), forCellReuseIdentifier: "LeftMenuCell") + } + +} + + + + + + +extension LeftMenuVC: UITableViewDataSource, UITableViewDelegate { + + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return menuOptions.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + + let cell = tableView.dequeueReusableCell(withIdentifier: "LeftMenuCell") as! LeftMenuCell + cell.menuOption.text = menuOptions[indexPath.row] + cell.menuImage.image = UIImage(named: "right_menu_" + String(indexPath.row + 1)) + + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + + tableView.deselectRow(at: indexPath, animated: false) + + let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) + var identifier = "" + + if indexPath.row % 2 == 0 { + identifier = "CenterVC1" + } + else{ + identifier = "CenterVC2" + } + + let centerVC: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: identifier) + let centerNavVC = UINavigationController(rootViewController: centerVC) + + panel!.configs.bounceOnCenterPanelChange = true + _ = panel!.center(centerNavVC) + + } + +} diff --git a/FAPanels/RightMenuCell.swift b/FAPanels/RightMenuCell.swift new file mode 100644 index 0000000..32487d5 --- /dev/null +++ b/FAPanels/RightMenuCell.swift @@ -0,0 +1,27 @@ +// +// RigheMenuCell.swift +// FAPanels +// +// Created by Fahid Attique on 10/07/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import UIKit + +class RightMenuCell: UITableViewCell { + + + @IBOutlet var menuOption: UIImageView! + + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } +} diff --git a/FAPanels/RightMenuCell.xib b/FAPanels/RightMenuCell.xib new file mode 100644 index 0000000..12cdeb5 --- /dev/null +++ b/FAPanels/RightMenuCell.xib @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FAPanels/RightMenuVC.swift b/FAPanels/RightMenuVC.swift new file mode 100644 index 0000000..23ce403 --- /dev/null +++ b/FAPanels/RightMenuVC.swift @@ -0,0 +1,81 @@ +// +// RightMenuVC.swift +// FAPanels +// +// Created by Fahid Attique on 17/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import UIKit + +class RightMenuVC: UIViewController { + + + @IBOutlet var tableView: UITableView! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + + viewConfigurations() + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + + private func viewConfigurations() { + + tableView.register(UINib.init(nibName: "RightMenuCell", bundle: nil), forCellReuseIdentifier: "RightMenuCell") + } + +} + +extension RightMenuVC: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 8 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + + let cell = tableView.dequeueReusableCell(withIdentifier: "RightMenuCell") as! RightMenuCell + cell.menuOption.image = UIImage(named: "right_menu_" + String(indexPath.row + 1)) + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + + tableView.deselectRow(at: indexPath, animated: false) + + let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) + var identifier = "" + + if indexPath.row % 2 == 0 { + identifier = "CenterVC1" + } + else{ + identifier = "CenterVC2" + } + + let centerVC: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: identifier) + let centerNavVC = UINavigationController(rootViewController: centerVC) + + panel!.configs.bounceOnCenterPanelChange = false + _ = panel!.center(centerNavVC) + } +} diff --git a/FAPanelsTests/FAPanelsTests.swift b/FAPanelsTests/FAPanelsTests.swift new file mode 100644 index 0000000..f69e3ea --- /dev/null +++ b/FAPanelsTests/FAPanelsTests.swift @@ -0,0 +1,36 @@ +// +// FAPanelsTests.swift +// FAPanelsTests +// +// Created by Fahid Attique on 10/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import XCTest +@testable import FAPanels + +class FAPanelsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/FAPanelsTests/Info.plist b/FAPanelsTests/Info.plist new file mode 100644 index 0000000..6c6c23c --- /dev/null +++ b/FAPanelsTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/FAPanelsUITests/FAPanelsUITests.swift b/FAPanelsUITests/FAPanelsUITests.swift new file mode 100644 index 0000000..c482c59 --- /dev/null +++ b/FAPanelsUITests/FAPanelsUITests.swift @@ -0,0 +1,36 @@ +// +// FAPanelsUITests.swift +// FAPanelsUITests +// +// Created by Fahid Attique on 10/06/2017. +// Copyright © 2017 Fahid Attique. All rights reserved. +// + +import XCTest + +class FAPanelsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git a/FAPanelsUITests/Info.plist b/FAPanelsUITests/Info.plist new file mode 100644 index 0000000..6c6c23c --- /dev/null +++ b/FAPanelsUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fb63673 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2017 Fahid Attique + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..574077d --- /dev/null +++ b/README.md @@ -0,0 +1,432 @@ +# FAPanel + + +![Alt text](http://i.imgur.com/hsSkSb4.png "FAPanel-Image") + + + + + + +[![Swift version](https://img.shields.io/badge/swift-3.0-orange.svg?style=flat.svg)](https://img.shields.io/badge/swift-3.0-orange.svg?style=flat.svg) +[![Support Dependecy Manager](https://img.shields.io/badge/support-CocoaPods-red.svg?style=flat.svg)](https://img.shields.io/badge/support-CocoaPods-red.svg?style=flat.svg) +[![Version](https://img.shields.io/cocoapods/v/FAPanel.svg?style=flat)](http://cocoapods.org/pods/FAPanel) +[![License](https://img.shields.io/badge/License-MIT-brightgreen.svg?style=flat.svg)](https://img.shields.io/badge/License-MIT-brightgreen.svg?style=flat.svg) +[![Platform](https://img.shields.io/cocoapods/p/FAPanel.svg?style=flat)](http://cocoapods.org/pods/FAPanel) + + + + +## Features +--- + +- [x] Implementation with code & storyboard +- [x] Left, right and center panel supported +- [x] Change left, right or center panel +- [x] Open left, right or center panel +- [x] Supports Animations +- [x] Multiple Panel configurations +- [x] Supports status bar preffered style for all panels + + + +### Transitions supported +--- + +- [x] Flip From Left +- [x] Flip From Right +- [x] Flip From Top +- [x] Flip From Bottom +- [x] Curl Up +- [x] Curl Down +- [x] Cross Dissolve + + + +### Panel configurations + +```swift + + +// Panels width + +var leftPanelWidth : CGFloat = 280 // It will override the gap percentage value +var rightPanelWidth: CGFloat = 280 + +var leftPanelGapPercentage : CGFloat = 0.8 +var rightPanelGapPercentage: CGFloat = 0.8 + + +// resizes all subviews as well + +var resizeLeftPanel : Bool = false +var resizeRightPanel: Bool = false + + +// Adds push animation on side panels + +var pusheSidePanels: Bool = false + + +// Bounce effects on panel animations + +var bounceOnLeftPanelOpen : Bool = true +var bounceOnRightPanelOpen : Bool = true +var bounceOnCenterPanelOpen: Bool = true + + +var bounceOnLeftPanelClose : Bool = false +var bounceOnRightPanelClose : Bool = false +var bounceOnCenterPanelChange: Bool = true + + +var bouncePercentage : CGFloat = 0.075 +var bounceDuration : CGFloat = 0.1 + + +// Panning Gesture + +var canRecognizePanGesture: Bool = true + +var panFromEdge : Bool = false +var minEdgeForLeftPanel : CGFloat = 70.0 +var minEdgeForRightPanel : CGFloat = 70.0 + +var canLeftSwipe : Bool = true +var canRightSwipe: Bool = true + + +// restricts panning gesture to work for top VC of Navigation/TabBar Controller + +var restrictPanningToTopVC: Bool = true + + +// Handles the interface auto rotation of visible panel + +var handleAutoRotation: Bool = true + + +// Applies corner radius to panels + +var cornerRadius: CGFloat = 0.0 + + +// Remove panels from super view when possible + +var unloadRightPanel: Bool = false +var unloadLeftPanel : Bool = false + + +// Max animation duration for animations of side panels + +var maxAnimDuration : CGFloat = 0.20 + + +// percentage of screen's width to the centerPanel.view must move for panGesture to succeed + +var minMovePercentage: CGFloat = 0.15 + + +// Only Center Panel Change animation + +var changeCenterPanelAnimated : Bool = true +var centerPanelTransitionType : FAPanelTransitionType = .crossDissolve +var centerPanelTransitionDuration: TimeInterval = 0.60 + +``` + + + + + + + + + +## Installation + +### Cocoapods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: + +```bash +$ gem install cocoapods +``` + + +To integrate FAPanel into your Xcode project using CocoaPods, specify it in your `Podfile`: + +```ruby +source 'https://github.com/CocoaPods/Specs.git' +platform :ios, '9.0' +use_frameworks! + +target '' do +pod 'FAPanel' +end +``` + +Then, run the following command: + +```bash +$ pod install +``` + + + + +## Usage + + +### Step 1 + +- Set the root window as FAPanel controller as shown in below image, + +![Alt text](http://i.imgur.com/OkPdbBi.png "FAPanel-Image-Usage") + + +### Step 2 + +- Add the following code in ``` AppDelegate.swift ``` file, + + +```swift + +// Load the Controllers + +let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) + +let leftMenuVC: LeftMenuVC = mainStoryboard.instantiateViewController(withIdentifier: "LeftMenuVC") as! LeftMenuVC + +let rightMenuVC: RightMenuVC = mainStoryboard.instantiateViewController(withIdentifier: "RightMenuVC") as! RightMenuVC + +let centerVC: CenterVC = mainStoryboard.instantiateViewController(withIdentifier: "CenterVC1") as! CenterVC +let centerNavVC = UINavigationController(rootViewController: centerVC) + + + + +// Set the Panel controllers with just two lines of code + +let rootController: FAPanelController = window?.rootViewController as! FAPanelController +rootController.center(centerNavVC).letf(leftMenuVC).right(rightMenuVC) + +``` + +- All done! Run the code and see the magic. + + + +### Step 2 (Continue - Panel Controllers) + +- Don't want to set RightMenuVC then just remove the right panel code i.e, + +```swift + +// This is the code to set all panels + +rootController.center(centerNavVC).letf(leftMenuVC).right(rightMenuVC) + + +// Updated code which have only left and center panels + +rootController.center(centerNavVC).letf(leftMenuVC) + + +// Similarly, if left panel is not needed the remove the left panel code. + +rootController.center(centerNavVC).right(rightMenuVC) + + +// In case you only want the center panel, then update code to + +rootController.center(centerNavVC) + +``` + + +### Step 2 (Continue - Panel Configurations) + +- Configre the Panels before setting the panels + +```swift + + +rootController.configs.rightPanelWidth = 80 +rootController.configs.bounceOnRightPanelOpen = false + + + +// Should Pan from edge? Add these lines of code, + +rootController.configs.panFromEdge = false +rootController.configs.minEdgeForLeftPanel = 70 +rootController.configs.minEdgeForRightPanel = 70 + + +rootController.center(centerNavVC).letf(leftMenuVC).right(rightMenuVC) + + +// For more configurations and their details, Please have a look into ``` FAPanelConfigurations.swift ``` file + +``` + + + + +### Access Panel + +- Panel can be accessed from any view controller, + +```swift + +panel?.configs = FAPanelConfigurations() + + +``` + + + +### Open/Close Panels + +- Open Left or Right panels with/without animations + +```swift + +panel?.openLeft(animated: true) +panel?.openRight(animated: true) + + +``` + +- Open/Close Panels Preview + +

+ + + +

+ + + + + +### Change/Remove Panels + +- Change Left, Right or Center Panel from any view controller + + +```swift + +// Change Center panel + +let centerVC: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "CenterVC2") +let centerNavVC = UINavigationController(rootViewController: centerVC) + +panel!.center(centerNavVC) + + + +// Change Left panel + +let leftVC: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "LeftVC") +panel!.left(leftVC) + + +// Remove Left panel + +panel!.left(nil) + + +``` + +- Preview, when changing center panel from left/right panels + +

+ + + +

+ + + + +### Change Center Panel (With custom transitions and durations) + +- Change Left, Right or Center Panel from any view controller + + +```swift + +// Specify the transition type + +panel!.configs.centerPanelTransitionType = .transitionOption // Transitions supported are mentioned in FAPanelTransitionType + + +// Specify the transition duration + +panel!.configs.centerPanelTransitionDuration = 0.60 + + +// Update the center panel + +panel!.center(centerNavVC) + + +``` + + +- Transitions Preview + +| flipFromLeft | flipFromRight | +| --- | --- | +| ![](http://i.imgur.com/QNaDoVE.gif) | ![](http://i.imgur.com/QxPeUxF.gif) | + + + +| flipFromTop | flipFromBottom +| --- | --- | +| ![](http://i.imgur.com/SOoAYHQ.gif) | ![](http://i.imgur.com/dqqFPLE.gif) | + + + +| curlUp | curlDown | +| --- | --- | +| ![](http://i.imgur.com/9Hjhthp.gif) | ![](http://i.imgur.com/BALhgmX.gif) + + +| crossDissolve +| --- | +| ![](http://i.imgur.com/siaRAy3.gif) | + + + + + +### Supports interface rotation + +

+ + + +

+ + + + + +## License + +FAPanel is licensed under the Apache License 2.0. + +For more details visit http://www.apache.org/licenses/LICENSE-2.0 + + +## Author + +**Fahid Attique** - (https://github.com/fahidattique55) +

+ + + +