Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
210 lines (181 sloc) 56.9 KB
{-
Jesse Warden
jesterxl@jessewarden.com
jesse.warden@gmail.com
Twitter: twitter.com/jesterxl
YouTube: youtube.com/jessewarden
https://adventofcode.com/2018/day/4
-}
module Main exposing (main)
import Array exposing (Array)
import Browser
import Char exposing (fromCode, toCode)
import Debug exposing (log)
import Dict exposing (Dict, update)
import Html exposing (Html, a, br, button, div, form, h2, i, input, label, text, textarea, ul, li, span, p, table, tr, td, thead, tbody, th)
import Html.Attributes exposing (action, class, for, placeholder, required, rows, style, type_)
import Html.Events exposing (onClick, onInput)
import List exposing (filter, foldl, head, length, map, partition, reverse)
import Maybe exposing (withDefault)
import Set exposing (Set, empty, insert)
import String exposing (split, toList)
import Tuple exposing (first, pair)
import Parser exposing (Parser, (|.), (|=), succeed, symbol, float, int, spaces, oneOf, keyword)
type alias Model =
{ unitsText : String
, remainingUnits : String
, smallestUnit : String
}
initialModel : Model
initialModel =
{ unitsText = ""
, remainingUnits = ""
, smallestUnit = "0"
}
type Msg
= InputUnitsText String -- when you type or paste in the text area
| ParseUnitsText -- RUN THE MAGIC
| LoadFromCache -- loads strings vs. you copy pasta
-- [Challenge 1 Functions] ------------------------------------------------------------
getSameTypeOppositePolarityUnitsBase : List String
getSameTypeOppositePolarityUnitsBase =
["aA" , "bB" , "cC" , "dD" , "eE" , "fF" , "gG" , "hH" , "iI" , "jJ" , "kK" , "lL" , "mM" , "nN" , "oO" , "pP" , "qQ" , "rR" , "sS" , "tT" , "uU" , "vV" , "wW" , "xX" , "yY" , "zZ"]
-- you get all the letters above, and reverse them, and then add 'em so you have both aA and Aa.
getSameTypeOppositePolarityUnits : List String
getSameTypeOppositePolarityUnits =
getSameTypeOppositePolarityUnitsBase
|> List.map String.reverse
|> List.append getSameTypeOppositePolarityUnitsBase
|> List.sort
-- re-ordering for easier currying
sourceContainsUnit : String -> String -> Bool
sourceContainsUnit source unit =
String.contains unit source
-- date recursion, doh
replaceIfContainsAny : String -> String
replaceIfContainsAny source =
if List.any (sourceContainsUnit source) getSameTypeOppositePolarityUnits then
List.foldl (\unit acc -> String.replace unit "" acc) source getSameTypeOppositePolarityUnits
|> replaceIfContainsAny
else
source
-- [Challenge 2 Functions] ---------------------------------------------------------------
getAnyTypePolarityUnits : List String
getAnyTypePolarityUnits =
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
-- easier to just replace "a" and "A" in the same function vs. an Array of both
replaceUpperAndLower : String -> String -> String
replaceUpperAndLower lowercaseString source =
String.replace lowercaseString "" source
|> String.replace (String.toUpper lowercaseString) ""
containsUpperOrLower : String -> String -> Bool
containsUpperOrLower a b =
String.contains a b || String.contains (String.toUpper a) b
-- recursive like the above, but allows you to skip one, like "remove all these letters, but skip 'a' and 'A'"
replaceIfContainsAnyOptOut : String -> String -> String
replaceIfContainsAnyOptOut optout source =
if List.any (sourceContainsUnit source) getSameTypeOppositePolarityUnits then
List.foldl (\unit acc ->
if containsUpperOrLower optout unit == False then
String.replace unit "" acc
else
acc) source getSameTypeOppositePolarityUnits
|> replaceIfContainsAnyOptOut optout
else
source
update : Msg -> Model -> Model
update msg model =
case msg of
-- do the magic
ParseUnitsText ->
let
-- ** Challenge 1 **
-- Attempt #1: 34220 is too high; figured since I only folded once, heh, worth a shot.
-- Attempt #2: 11042 is correct. Recursion FTW.
remainingUnits =
replaceIfContainsAny model.unitsText
-- ** Challenge 2 **
-- Attempt #1: 49336 is too high... huh...?
-- Attempt #2: 47924 is too high... um..... OHHHH, I have to react after, got it. #rtfm
-- Attempt #3: 6872
smallestUnit =
List.map (\unit -> replaceUpperAndLower unit model.unitsText |> replaceIfContainsAnyOptOut unit) getAnyTypePolarityUnits
|> List.map String.length
|> List.sort
|> List.head
|> Maybe.withDefault 0
in
{ model | remainingUnits = remainingUnits, smallestUnit = String.fromInt smallestUnit }
-- when you type or copy pasta into the text area
InputUnitsText text ->
{ model | unitsText = text }
-- put the sleep strings function text into the text area
LoadFromCache ->
{ model | unitsText = unitsCache }
view : Model -> Html Msg
view model =
div []
[ div [ class "demo-card-wide mdl-card mdl-shadow--2dp" ]
[ div [ class "mdl-card__title" ]
[ h2 [ class "mdl-card__title-text" ] [ text "Day 5 - Polymer Parser" ]
]
, div [ class "mdl-card__supporting-text" ] [
text "1. click 'Load Cached'"
, br [] []
, text "2. click 'Parse Units'"
, form [ action "#" ]
[ div [ class "mdl-textfield mdl-js-textfield", style "padding" "16px" ]
[ textarea
[ class "mdl-textfield__input"
, rows 2
, placeholder "Paste claims text here"
, required True
, onInput InputUnitsText
]
[ text model.unitsText ]
]
, div [ class "mdl-card__supporting-text" ][
div [ class "textarea_label" ] [ text "Starting Units Count:"]
, text (String.fromInt (String.length model.unitsText))
]
, div [ class "mdl-card__supporting-text" ]
[ div [ class "textarea_label" ] [ text "Remaining Units:"]
, textarea
[ class "mdl-textfield__input"
, rows 2
, required False
]
[ text model.remainingUnits ]
]
, div [ class "mdl-card__supporting-text" ][
div [ class "textarea_label" ] [ text "Remaining Units Count:"]
, text (String.fromInt (String.length model.remainingUnits))
, div [ class "textarea_label" ] [ text "Best Individual Reduce Count:"]
, text model.smallestUnit
]
]
]
, div [ class "mdl-card__actions mdl-card--border" ]
[ a
[ class "mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"
, onClick LoadFromCache
]
[ text "1. Load Cached" ]
, a
[ class "mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"
, onClick ParseUnitsText
]
[ text "2. Parse Units" ]
]
]
]
main : Program () Model Msg
main =
Browser.sandbox
{ init = initialModel
, view = view
, update = update
}
unitsCache : String
unitsCache =
"""kLltgGTKFjdDpPkKcCJjJhHfmMAjJasSFfHEesYMmTtrRBjJmcCMbDdmMyOoUuGLrRlJeEMmxtTXjKzRroOmpjJqVvQPMZAXoOxeEZtTzLYyqQnNlMmafFLlRrkEeNkKtTngGlOoLXxtTLDdBblRCcqQrFfLQAaqeEZMgGbBOoFfyTtIizZuUsSYmbzTiItQqOouUGgZBCcsSHhxXIrOoRizlUuZjJefFCcEgGMmMmRrXlLyYcCxvVCcyYcCZhHzyYWwcXxlLCeECcOCcozHnYyNftTJjFSsrRTtqQSFfFfYxXysSsrMKkmeeEEdDRHhNCcgGnQqiIqQLlkKbPpBQOlDdLoqhjJtzZfFiIVvTMJjSgGsmyGPpgUhHuoIzZiOYkKPpUuqBbQcHhCTiZrRLJEkKuUejlTNiInNntdDxXzAauUOLkKloIdDzuUjJvpPViIbBiOGgoIJnNFfYyjbBZWwSsdDsSUuBUCnXxNgGcKJjkCcuUWwiIcCCcDdsSDUumMdSSuUPpyaUuqmMQAYkFfnNKMmsCgGVvyYJjcnNlLVeEvEesQqvVEMmeWMmwBbyvVYUuavJjVTtAJCczcCZgGcYyCjJEejuupPUStTsPphHgGafFAvVGgzWwAafiIygGUupsSPYfFFLlzrRZFaeEAWjJTXWwxFftcCjJfFkYyKwuUJKkfFBbMnNmIPlLZyYzzZpijnlLwWNLlfGUuTtglHFvVfHhhYywbBvVVLlsSvKeEoOkZzYyZzWGxXgzZBUgGaAvVuCwWNncjJbDdQqGgAatTFAaftLsLNnuJjUlfFSPpmMfFFflmlLMThFfXxHUuEcCrRXxezZrnNRsSWwWwZUuzFfTtiIaAvaOoAVGPpRdDrgWdDtSsGgaAfFopPhHVvOksBbSKOntTLlNjJKkhHGEeGgjtTaMyYmPpAJuUHhZGgzvVDdmMNnFCcfgzZgxXRHhrGzZOovVcLlCUuoCDdchHOuUsSvVNAanoTcCwUuchVIivHFcCuUHzZFfCcTCcthykKYXxUuzZOHhoIsSiVvDFXxIMmifmdDMdIbBNReEgGrrFRrcCfkKRnNnNgGnoOxyYRrXAjSsJoOgSsGgGAawWazyvrRtTVYvVLfFtEeSsiIHhiIqQTlzCcdDhHuUuUuUZRrZVDdWwQJAajqvHGoONnQqWyYLeENWcCwpPybByvxXVnNgGYYOoQBbqifFiIlLgGImsSIiMGgnjJVvGNEenIigeEnNvGgXgGhHKkXIiEhHvVeFfDdxxxXzGgZpCPpcXxCcGgRrliILZzBbCqQGgbBZOoYyiIhHUYyuLuUlGZzgzcPpPeRrEOoRryYbwWBYyrRlLbioOIeEBiZzaAaANsCcjJVvSEkAaEMaAAalCDdcuNnnpPWwNkaADdKCfJjFcpjJIiPWAGgawWAaVZzzlLXxZHhvxRrdcCRrYsSyjJmBbMufFdDWwLfFYyvVlInNpQgGZzqPyYifGggGFSvVTorROtEeDdajJJjNnAjBbiINncCuhHUxXJsHZzrROodCcDnNgQqGtBbThRhHrGBMmbrxKtTkswWSJntTNgGOHhouwWUzZjzugGdDzKkrKkRZtTgGhHUeEZerRmMFfZvVvVzJjdDWwjoOvVJEhHQqLljnNtXyYLlENnbBeyYTQqtmIiHKkhMMmpuQKaAkqbyYckMsSmuUMmxpPXOkKwWoQqYdrRvVDgGNnJOoVvkCcWwKXSuUdDsgGnNzZwWoOPpFzhEetFfvsSVdDMdBbtTDJjmiICTtcTITtpPVvcCiZwWFfnNlPpLFfCulLUcfFQwWwDdXxWKqlLaCcZMmzGgAUukzZRGgzZcCJjsSyWIioOwYCmMcrjFRrSsdDjPzZpJpPfJqQZzKRUZziIurcCsSaAeTttrRTEjJlOoLYmMuUPpZzyzWwZGGsSgvVxUuTyDdYtpPoOXeEMOomSsZLKsSklnNbAlLCcJiIjaBmMoOOodDHbRrocCOoOaiIABhLoBbOXxVvlgbLlBGtNnTExXWfFnNwbBecCELlhHkqjJVvqQQKezZxXzZUuaAzHhcCWwtvVhkKHQoOaAYbByXxMmdQqDdbBJjDXxjwWJlLxXhHiIALAKOokJjoOalZzcCvVIiawWKcCgGWUYHhyvVaNbIiBnAoOrRuVsSvbBJjdfFuYyFfUoOzWwjaAlLYyhHJZqQJoOjnNkKeRFfriTtIHhEVtTKZzhHEenNrRRrczZbBiIIieyYEecCEGgjJJjQSSssqCbBnNTtqQEEFFffkKPOHNnhDdofpPrRNnFfbBYgGxXytKaAkTVjPpqsShNnrRiIHJjQJMeQsSqEGqQwWgSsdDLlWwaAnNTtbzZBOoruVvRCcqQOGgoMyYmrjDdvVfvVFJoKkOwWeEFfeEzZCgGcuUtIiIiFfsSgGyYTDjgGzZPHhnNLlGgePpVvEHhpJdhUuBbJjHqQUqVpPvETsStSsZSszQSMmWwOmMnNhaAHDWwNneESsiYyIToOtddbieFfEIAJjhHcQvVqCjJRraBDLlIiJieEIjUuaiIAIiuUQqDdTtWwuUeTKktDddDKktTjJdDELXxlckKCBbwbaRrABSsWJthxXHTsSGgSXxsUzZBDaApPdbaAyYUsVvbdDBzZTtTtjyYJsSNmMVvTtnmMQSFfsqRrOouvILlitTaAKKkkYyeENnxwWXVJjoOuUEemMgGSTtsnNzPpNYynbBZGaZpPRrgGzZTtTtKkzqUuPpyYQbBTtZsSzGgAftTpPxwWAaXaFfAPptTqQjRrJCcFEekKyYDLldkzZKfFNjOoJpPEeFfpPnqQWpPMmUUnNuufCXxcZzjibBgGIJdDFvLmMAXxeEaFfmMHXXxxepPRrwsSWTtAaRTtrVvtSsQqTPoOIihPpHKkpYQVvqYsSVvQJjqFfqwWQyGgfFUzpPZyNndDwWtTiIDdYOoyYzZJtRryYxrRmMHhXlDdyYzSsZxgGXLiQqbuUBwWCccrRzZkwWfFWBDdboljJcChHVvLGgMmaAcCwWJMmaMMmmjzkKcYyJmMjWwmMbgGgGOxQqXnNMmoHhBXHhxCVvCmMNIiRidDIrXVvxeEtTtTyYnEeKkuUmJjmMOoGgiIMlgLlQqEMmexXGLclLyYfFQEeHhXgvlFfLdDwWnNMmvzZWCcgGwMmWODYydiIowvVbPpBEeIAFfnNMVvmadBbDiLlCyYaqvVQIiyYAqQtTiIcaAlLQRuUrhHYVvTUucCtyPpbBcmCcFfZzMpNFzCcUuaARrUqvVQuSsZwWcCsScrRCfrRVGgveYyESXxsMmWWwWlLIiwCtNnSsBbjJXxSsDSslLdmVxsSchHCXjlwWOQuUqXhHSssVAgGalLvSMAPpKkCcLlRramdnQqNCiIVvcgzZNnFDdkKMmzZfBbBbGuUmXukKUxIiaAGgAaWwcivrRVjJrjJQCCcLlEAWwaecaFfAtTWwqjNnLlJzZMsSmzltIiALlhHUuoGgOaZziJKkYyqQjfFgGCcIoIidDTtuhHiIZzlYyuMLlmUSsuvVbaIsrKmWwMkXCcOoxoOXCcoONngGVvTtSWRrkKmclLCNnxjJXMHiIfFkhHKerRMOomYTtyEhIiwosLgGEdDZzEeqQTtAaUUuurRcCMVvmepPzjtTvVJiIBjJyYbgdDSsGrRpPtgMmGTkJjhtTraARBbHhTzYyOlxOgGoXfFxXMmfFdVuUiIxPpKjJkKkWQqwtTkKZZznchHMqQmzZAFeEGgagGAfdDTbaDdGbBgJjcCHhABxXULegZzGEliILKkZzmMbBlOoJjIiubBamNnMWwVvxXhZpPuJjUCcPpzaPWwuAaUxXucjJCIgbrRBvVGgVnaASXxsNAaHhNnIiiIHBblLCtTuURKkCcGgAsSIxXVvimMueEbQqNvVnBifFILRjJUukKrZlLzfhHFWwVrRlLvxXuUMUuuUKiIkmZmEeMaAcClLETtdSlLxAaXsNxGzZDSIvRrVpPYyxrFfPpGXiItTzZxgKkKkoOJjmaAqBbNKJjkZnNoOjJnNzdDJjKHuUTVvLlthkMmMlrRLmmMQepYyIiZzvPpwAadDZzQqwWGwWgFjJfvVbpgaAGNVvndmMerQqIiREDzZFXxfOfFoJxXLljeESUuswWUuPNsSHhGgsSfeEFTiIKkOoRkKrGkpPnlwknNKxXkKAajEeJpeEESserDdEehHAPcCprmQquqQUMvVIxXiHhRXxEeaAajusSXxzZXxbRrnPpHCcNZUmMXxJjLlpPVoOLlhHbBIiGgvuGgcCcCRRrsBbLlMmWwWwvkHhKVSIhHuuICcpPiEeYjJcCZzDFfdynVvcCNLlEesSntTNHhpMxXiIwTtARraeEWLLllJWwhHQEgtTGebBPdWkHhKnNyYuUwDpsSnNwWHhmAaMHYGgVvSsyJjoOhgvVubAjgFTtFINVvAMmatTGgSsnwWpPGyiAZzeEditLlWwyfsSFSIisvVgGAyoOYyYkXxjciLldDIbBSsfFgGumMUxXZHhEetcCcCTzJiIYaveEtTVAIvqQfqbBFffFeEQEeFgtQKkhHfFAalFyYroOoORuUfAaXzZGgxfFlTtfFLuUurRUeExXaATxXzZIIVvYyCckpQqRrFfFfJKkINnIiWwijRrJJxjJWwXCGguAajJUlLcLlkKhzgGXxlRrxXXCcYAaqQtTyxZzLRrhDdHXxJjiHhINnaAgIioOypPYnNuULlkxXkKrUuhHRIiBbxLjJlLlXKvVLlSsFfsSpPCcfBbnzZSsAaUjJJjYyuNnNBcCbaArwWRLlUuzYyoTtEeoDdOoOKWulMmLUkKIiOPQqxXUjvKkVkrcCRKFlLruzZDdUPOopxgGWwvXxVvqQxXxpPXVsBbSXWxyYXJbmPpMBjsAaLYaQqtacCATAhYNnNMmdsSwWsWwseDdEIiJsSfFRrjzZdDKkbEedDJjcCSsGxewWEXqTpPtQIifFTeEtzZgAuKkUaSDWwdsYYyjhHzZJdDyTxXNtTeEIilLklLdDKnYyWaAdYhHaApyYPiIyrytTcCYQqpPPXxMmllLLpBbpPCKkcyHhFDdlLHhnbxXxXBNlKWwkKPKkzEexTtXZJsGgLOoJjyYIiTQqqQOotveExhHXPpGgVTzZrbBsSgauNnjdDIYyPpuUiLtAaCcTWwnNlrRwMmWZzYPpyJrRTtZzqIiQNOoDdmFUsqpMmPHhQSuSsvqZjaaAAeEJdDuUunRDdDHhseEdDMUrRuiImlfeEFSCcsWwYCPpcNnyQMmOoEehEiVpPnNlhHWwLRrwoOWpPGaAgVvXphHPlLhHkaAKxsSNnrgGzZYyRkKUuXfpPFoEtTeOcrRCMqXwWhHLaAAaFfsSdPpDHhKkLlSsOvVXGsSgxouUogUuPpQqbBDdXxcizZICGdqBbQqQJRrgGmMjbsSkKQqBeVvTsSgGtEqQCTtFfjJcqQMmAaRrbBkKbzZBqgFfMBuUWwYyMaAmrxXWjVoOvKwWkBlLbAatXxYdDRxXryOoeYyEOoDtTVvyYvTepPEtVjlLJXxQqvVHheEFZzfdDWzMmgsSGZwSlgGLwWzxrRXsSAaAabOooOQhHqdDXxPaApIBbdDimMrRdafFPpAEeOozZAaVVvvijQqsSJIDFfqqQYOoyQBTnRjJxTtXjJRrCIicKkBbZBbzrNaAIisViIsSczZCdDEevSJjeAaEtBPzZLlYyGfFJjAaVvQBzZzJPpPpaQquUwWiISdDdDsBbBbpLlPwZzWNZSZEvVezseGgyzxZzXFyYTtgEdDegGUCuUdfgGkKFDuUwTtqQWceEdDvVoOaGgseESRUusSUuJjhHLJjfFlGoHhoOCTtJjqIvVbkrDdEeCxXkQqKGgmbBQqCIKlKkLkiZzASOokKsShHYydWwFfhHDjJcCkKfjJFHhOWwmMvVoyYrRumMUJjkKOhAaqQHhQqHKkiIeEbBmFfYnNyMxrRnNzZBbeEcpPQqCAgPpftnNnIiNTZzuJHtTuUbBiEOoSyYzEeAaKkZpPGgzOoKkLlUsSuOoxxXyGgmwzoOHhqJSsmfyYFeVIsbBSgWPpWPpSsEQTCctbBdwWGgDMGscCSuUpSsJjaAPceEowZzWqhHbpPqiIPpQEeXUuxRiIjrkKRJDXxxXdjJbBdDmMFNnJjNeEXxnsSfiIJxXmMWwtTJeEsSGgNDdpPCctsSsSZzYFfHhuTQIiiIqhHbPpPGlEeLLllgGUuLgNnRPpEdNVvbuUBbBBbRQfFQqqrpLSsiIlQqPxGgeEXzZaAPpBbVvIiFfeEeOQlLqcCEeWiIwonJHhjAaNvXawWAvSshHdDBbdDKkOkYyKHhGwWKlYWiIwdmwVvWcjmMcJRKpzZxXdDPxLlncCNPKkpJnNjPpDdJjGgXSKkhHsNiuUInOwWeYyEgGommAaMqQMNnxXyYdDDyjrTtiuIkKiYsSyGgMmlUuLMfFSsjeEzZJmaAkKVcCvZzwWLlTYvVOXxpyYfFDGgjaAJgGWwstTrPpcCikBbgGKQgGSsNnkKcnNPfFWwxmtTjQOHtTNQqiIfUOomMnDdhHNkxoOSsDdPpSsXYyWiLlIwKbBkGLXxtLhHlAcdDCxlLXfFayAaZVVKsSVvkKkNnmMgGgGZjJfFzTtviPpIJjwWGgAoOaLHLLWwlCcZbBiIzeyYpPaAxXOYVvynNbiIGqwWsKkvVVeEkNndxivsSeEVvfFBYyFfjwWJBbSsHhjlLLwWrRuUlKkKBbpEeWwPYiIvVykdDJGVRrVvvUuQeEOoEeiIyJkKaARrfFaAzZMmOoIiAaSyYsUsSQgGgGKvjJSSsIijJZMmzZzQJjqAaKkYyNnpVvPAjJaEPLltTGgpWuUTbBnNtSssdRrDSwPpWWwXAaxwisSrSsRIeEaAoOPggGpPVeoLGglCcUuOEGrRgvgGbZzBLlaVvAzZvKkVeDdDddDEowWLlOxfFjJftTAafBbFffFFbpjWjZzuRFiIfrQwqQRvVruYykKtRauUlAUuaFfLAPzZpPWwpoUSiIsuGgfgGvVFXxnNtTLlnDdTnUuAaNCcgFTwpPiIWMzZzofFOZPpnNfFkUuKFNOTtvAvVaVpPojJvfFVnrSsRWxXsSKdDjJkHUgAaGcQqsSnirdQEeHrRhqueEJjUDTtwHhWjJaGxXgAvDdVSwWxXszZKnNSqlLlLQtVvTnpPNJjbBbBpqQPYgGrRyRrGgSshaDdJbBnAsKkhHDZkKzmMCcdOouUdyYzZWxXqPpQOowDSJGgjdYyDCTtnNiICtSZPpJjwWWwzmXhHxgGBbMqQoONjUuDdYhiINAanZLSslzKcCfFyYkfvVFeiIAHwozZOqQhlLPDdcCFfpFfpPAaehHXxGgDQqGgwWhHNIiCKIikkLlKKRrhJyYYUhHujJUKzRNeQLlqEnVvgGacCArFfWRxpNfFIZzUnNzZuiYpPMeYyDddDSuUlLsdXxlLcCLVvnyvVGgYdWaAaAwDOfFSRrbBsQqkKBblOovVSsZzKfXxeEAcKYoOykCtTabOjRrJoJjzeEAawWZwWBpQqticCITPLGSMQVXxvqIjJKkpjeEJrQveEeEVwMDMmUuNcOaAAaoCEepMmhoOHQjJmFfGkTLltWwNXxftqQlkoOpPpmDdpPMNAanIizNnNuUnNyYLlClLqgGdDgnPpNZzgnJjRRrWmMDCcdfFwZzriwWFfzZFeFfEfWwmjUuJMbMmjaAJvWwVnNkKzpPKGqGLlgwkhxXzZbBZtTzlqQNRTtALLTtllLTpnPpNoOMsSxXmRrDdFfDefLlTtHhfiIcKkWwkKCcxXsSmMOogGqFfQiIiIGgwWwWxNnhHcvPpOoVPpysSQqWHSjXWwxXxEekKRrJeEsgEUuehHBcLCYbBQqyYxcpPsSFfsRrzZzXxZyJjTtYdDXOoxwWbZzGgcCpgvKkJjDdWCAahcjMmJwWbBhHgBgGIoOEeiIibjYyaALlinNyYmMIiAnHhNVvaIzZpPYBbTJjxGguIFUuOwWofFYqkKQydDgJjGYKxXkzBbjJLluUiIqIiQeEUuZysXxSjNqQEefFoOjtTAalLnNIilzZGgCYmMxDdXsvVSeEgGQaAuUqQzZtEepaAPdDDHhyYyYZOMmtToIHhiTXxtvVzdEsJjvVWHhjzZPkKpWwWYTwWtxXyYoOcXxCKkvOjjJGguUItEemoNnOMIyYfFXdXxsSvVDxnGgEpPefFNiTtTOodHheEDHhfAZzMfFSMmvJjhrRHVdtLluYWIiVfFcCtThHAaKQcCqjpnNILNUwWuMmZFNnRruUdDfJaYyzZjJbBACcLlbBkGpPJGgukgGKNBbfFnTtiIiImMKAancCHqmMzZvVcCKGgkWwQuUqHhAadDQaoOAnNSTmKkWXxEIRQquUhqQsrGuOoULeEpPlZzgGbBBbtwWwKmMCqQdDcaAqQrjJxXWUuwDdMmdDocIcuUFfUuMmqQCSyOoYfyYwWfjkKsSYkKaAZYCqQUBbwIitPpprRbBkVVvNnUuIiOoLlAmEomXxmhHtTiIdUuTthHrRAaAvLlViIGgaODingGNIMmlLMDMmUukZzKxXrRWiRTtoOQquRrBboIzfFeqQWwUMVvmLlfFiIiINnoOlLAaixXXxHhIgKkZzVxxXXvGOoFpsTtzMjsSCckJjJXxdDtTGCZzMmAzaAZawOoWeZoOZzWMsSAYyamGgwfNnuUxXFoOWsSwsSzFfQoOAamDdMWwGsmEQqrRFfzZAxKkXeETvVxyHhYgnxBbhtyYTOUkKuOJjoJiIjJVvEHUBboOBVCcKjJqQdDkwWnMmrnNmUuMBbRLFwWftTTtgGiIElCgUPmMpMqoOQmuoOaAFUuflLnuosSyrRYKkpUuPtQqQeEPpoGgmMyYuUCzMmmTtOoxXMFBbiIfFhHfTtqceESXVZzdxXDdSIXxBNnESxXOoyADaOoNnGgKukSstTXGgUuuUNnxMtTfwiIDzkVWwvKbCcWEeEeEeSjJspPYywAaJrRjBNnQqnNpBXKuUkFrGuUydbBDbYcDeElLHzPpZveEaAVmMgpPGuUvVJnzZXPprRxJjtRquUQhvBbEdmMDeVFfYrmMYfFcBZzvVzoYyOjNuUnYyJQqZsSjClLCccSslcAPpaCCfFpPIigiILlvZzVyMmqQKkvslMKkmtcCiInNqQsQqIiqQSzNNfVvoAaOKVMpTtncCNCcBbPvVSdnlLXoOvwPIRtTtMmeRVvAariIGgeEzZSsOoEUuOoSsTLdDlrRPcVvnWyYwjgYVxXRDJjSkjJEeIaNaGguHhUnYsSyvVwWNoOiIyYqOobzZBZzXbNnBbOoPaAyYKkTSEKXreEeTtJjxcCwreEyYOpPbByYzJjZCcoyJjYAaRtTiNnIYyrbBNneEDdRraAyRGFCfFOtTOoofFcHoMxjMNnlVtTAaOkiaWwOGQqgVQqAawWgupPZzUuUPzWwDdZIScCsHhisSpoOSdUuvVexwWXKkgznQfsbmCcraUuCcAFRDuNnUdDdcCgzbRDMyYmdIiaAzZrVvotrwWhHUuFzZJbDjJhHdAlLtTuUfFagCMmcGjSViIvFfSYvVQqyITHXmMbqQaSsABbGgqRrQsSBSsNnjMmIkKVvDdZzTmzZgGmwWMyfFYpacCApProOvkMXoOxmKVtTlLSsCGgoOcSKoxXpXxFiIaAHhyWxxXXADdaZdTHQPCKkdDJBgGbgXxzHGgXWtoOTwVvpAabBHhxAvkhHeEISKQiCQqTtcoocCSssrRSgTihHIsZIzmtGgTRgWxXqVvQwHbBtFLBblfTjDdPlfcCFLWwNfFqIimesOoRSsURrQleEJjWyFfMmQJjBbVvBboBboaVvAMmOVzZnSHhVvsYyPFfeqydDaAOOostahIPpiozZOKkHQqegCcipPIGSFSLlhHpvVGaVvuUALlQqWwgRrsSqQcsQzZqIOolLsSZQqhpvqQCcFkKWwfLlLlHmfFUBKkzZJvVBbjPzZOFnNTRreMmEtSsHhqXkKxuWJjqtTFfmMrRqQQQqwdDUvLlDdmNqQnGcCrLllLUSfCcwdDWuhHmMmMAILaBbAriIrJZzjQqQnEeGEegnNqyYCcIiPpcCaAckAzZxjJXtcSsrRCTCcEmzZZzMxXlXQYyqwIiyJjKkgyYzZHhGXaAxYGjXxxvVCcSsSnNsKkVQbBqdFfDabBAzsSZcCVvUuYymYyAaqQMdovVLlOpVvWwPaASbBsDvDdfUuFXJBQWVvwMmuiIWwzZuUMOhbBHOLrzZRlNncQqeOhHbaAVNnMmvaGwWilLTtIhqoOooOZJiQqgNiIwqQLLljoiDpAaqQYyaAWQtTqwPrRYyNlLPbKkpPxXpttLcCloOiQqsSuUfNpPTtnSxDobzZpKkPzEeMNoLaAlOMmatTzOoGxMGglHGghmhHSUusIYyiyYwWJWNKkRrNDdnkKniIVyFffFYONnXxzZqQlxXwEevoOEeVWFNdDFfkkoxaAXWvVwMUumXxMDdmFfOnNTyYvVeEKRqQEYyeyiItTQlLCnNcWxOoXyYIpPuUFJjzZkKdDQqgGsSUeEuIiPxUWOowuUumcwJlLjCpPcJsnsStTNSjGIiiVmMnNUSXxsoOvVlLESLcCSstTGsSeUuErsSeERGgJjaXxAlLZzTtNngkKlhYyHhHnnNNjplLkKtFbBKLlXiIxwkKoOWUisKaAkieEIXxSaAaAjcCJAaeEqjJQxheEFNnDjXxIGguTCFfgEejxXZoOzQnLlAaZzXxNZzLlqbBSSSnVvyYMmNrIizZFfRWiIxhQSpPqQmKkCuUcghzYyZXxgGqQCcokKOJGgKklLkKpPuhHhXOoUuMmCcbBdDhtVYJGgjbByvGIruUIirRiJLgGTtWwlZPpiZFJpTbBtSsFfUuPQsJSsjAabPpYdPcChHCGgPwWEeBWwbIPNOZzaMmHhdDAoCccfFSsuqQUBbbEevOeEJjBbgiISsSsJjiCcavBgdDTaRlLFShcCHYpJjPQmmMyvVYrXxXLPwzZfFlkApPaKkZaAaAzhHQqCcmDdbBqVvnNPpQMKDVNnfFvYvtKkKYykaiIUcCZLhHlyKkdOCQqceYyrRELDdlvdDtTWxXwCcgfFDzJjuUDdlzvVWwaAZrRXhHqHhQqQojNpPnJlLgCcpPGyYjJpPanVDafFnNxXvVsSPaAaAIJjUtEeKbBmMNVvlpHhUgGuyYyYcIizZEIieSsNfyJjdeVBXxbvLdDyvVUuYPplLiOrTZaRqQrAzTteLacCdIYCcyvVWwtTEeIKkcCfFdmJpPZzTtzZBbjJwTtHhWAzZosJNnsAaSbMghFBbBsSHqQhdDbsSbAaIiBkdDtssShgmyYMoOGDdeyFfnbQqfaAaACcnUtTgpQqwWzeLLlEzZKgGkeJzZZzrREeEXEuUlzvVZzoOuUZKRxXfxXFDvAoMmHRxQzZeEpBVvhmEjmMMmRwvVWrJJbtTBJfHhFtTwWjWwlLHiIhZzRLlrjAlLruaJjzZtTWwhqDdlPpLtbJjBusRNnrjWwbVvXbkOoOHhoKQYRBbBbDdDdqLlSSCMQQqbsoOwQSbkPhSszZHPpVvNnPyPpDcCdEeYwUuWpDdwvVstTMmXYySVvsxMmnWpupPPpbBKkKNdDUcCRSmwUuEevTocPIQqdEgKBEeCDskKmsSRdDNhPpHnsFfehyYeKkENEeQPlIiJZsSKkNDgjJyYFbBwDdqMmncBbVvCsSNvmqndDNvhFfHfPeEZqHOolLhzZSskQqTtKYylvVnNfFTtbbBDOonNfehmMgPdDpGHtFTtSgGNpknaAhHNVQqSsaASsHhvAaEekAsSJvfwWFrpHGWBlLLvIiZzzkdSsDKxXUuWwCcLehDFfwWvVRrWbsFqZzQfqrLofNncCFObhMmUnziItTwQLhPpmMHlqxrRXlLVvzZcyhUfFuHhHWwgGOoBfFbkKYNnxlrdfFLWwVvDEhSiIMmbBUuTcCdDtrRkKCcnoUvwWVueeICcikKaATvVtQPmMzenPPbBJjTKkPSlFfBbLRtZzVvogGxXOOopPxrKkNnUYyLluyYIiBlCcxXYynBbeGgEBWZOoeEfFMkMXOofkHwWxXGghKSlWxbZjkKpPJbuUBSszZznNZOobBjJzCcBBfNntrwANcdDCndUcnAUEeuUubBwWkjJKuYcMmRkKrRrgGcNnCgTsStcmMCmkXgSZzsGxgqRKkVoAaHLuxyyYXxjRHhruUflOotTfIfFiFcCLQcCqFJcjJFEeZJjaAfIjpPWlrRHhHhbBdZzdjPxnNXmcwWSsykKYNCbBomMbBCcUugOonNQEelZXxznmMyYNfFHOPpBbyYoGgakKvmFXtbbBBkiFjwyYxqQKrWIAaiwRegGEgqQBpPbeGgEyYWzSMmbBbdDSsiIaAfFzZMmJjfFMmXoOxvtAgmMGezUjENnecCeBbEJnMCcwrRAwWPsIiiIaUuuDUjiIcCFfvBbQqVTZzIixXQpVvPNWwGnNgfFhHTCctxXvWipknNKPchHCIpPvUuVerxGgEePCcqQpYmMXxZQqzyqeEzZQXtqQSsTLlisSlLemMiIdSsUuYyDwWQqQqtTsLlpPaASuUkJvVbHhBiLlvVjJXxBUNnuGgbjSnNMPJjpKcCkuHhSyflLIMNnSsAlLrRGNphLUuloOsuUSgGtgVUgGupPdkbBEecCTWwoOapPbfyPAaibBKkvqtAXrRpPdDxbBeCcgGJRSPpGgxcoORoOOoHhXTzdDZiIbBRWKaAkKzHvMVTyqQGgYcCRnpPsIUilAaMFFbBffJyYMrRgGmooOAkSvVPpsKNcrRCRrnpALqBbQfSsQqzbBMmhqQHUuNnKzocOKkoCvVqGVAaNnZmMSsIqQUivVSQqUaZzgXOoPpOoAaCqxXxEepPxSnPSYnzZNWwiwlCaAvVEzrrRlAaHhPpLNnjJRZXUuxkKoOZhHwlZBbpbBPxXOopMmPEetTszaAeWwlLtLlkKOERzQqTtcCKkRfzwWtNKsSPmcCAaIiMnxvLtTaAPpgGncCNdRrseECcvgGjDdJtTfaArpPVvRjJOoGnMmJjjcCpPSsJZcVQqXgGXxMmxvHhCSJWwXxKzAEefFaTfjJeHhQqHFfLvVvVBFLloONndkicyFxHhEeUuwvvOofSsOioOFBbzHhWymcaGAaRVgGavVtqPpsSQHFOokKEAaFfnNYyWwiBbpPaAkKIixXHhIrRblvVZzLlYyepPpPZznNXBEqulLhEgGMLmlLDdKkxXeEbfFZzBHXxhmTfFnNdPpMmfoOfNhzNnxXyizzotEcCerMmqQLsIFyYfoOFQTtqOoXxfJIiNhkKsSOdDofTtoiIOYwlwWgGjWZlLCbBBHhjqQYqKkuUwWOUEgGeELleUufFjJaJjEeHhKZgfRoOryyYYXxFKkkanNAHPmMphKIKDdyaLfkmAfqQhIjJjqAQUuqqFbVbBZzvCqJjkKxXQtRrWwcCONuUnSKkOoevTBbtHWwOBbTHjJhOzZnNRrCcXxBbJXxGnkKtyYuUoOTGxXoOrRllLEeLrPWIiwzZIiDdXUuxZzkKKrRkoOpyCcYBbZiKbBRTnNHcdUuMmUuDdYyfthHTFzXevVExAiIaqurZSuUEuUUuefWaAwBgGxqxXQnfFMmVvNQqxIUbhbBhvVWyVvjNnpqVvesDdSGoOlLoDsSdvsmvVMQqfFSLpPlDdVuTVVNcCniFoOLlzlLZfyYHQjelLEzZECZzGDdtJDdTtPSdDsFfvgGVIiqRkDbxyuUYRrtyYGvVrRSsjJvBbTtVoOAPWwpHhXxEuSsLluUZzJjJjBSsKMkKmOLdiEHhewWIoOqXxMmVvuSsUjGfFyYaNnAwWkxnNXfrRMNkKJjMaFWwWFltMsdLlsSISdDCceEBbcIiCaLlrRNKrJnFfRnKkBbUJjiIShHoOsuvcHhCcCguGgUQqzXPpxPiDuSsUsWUuwIsmMjJiIpvzoOpSsyzzZZSskKzOoqGXSYGgysxWYzZbpPdrRDgGhHLZxXkKSEesaUuCIZlJjqwkewEhgGpbBWwPuUHFfoYGgVvoOUuyOLaAlEetpDdwWVvhHLltTkKMdDmVvjsqRNwdJjDWZxXyYyYkBaAxXkUuKwWsSwWTdutKDQqdDdDqnNPRrgGXCDkGgFBEeiPpIfzZcfFYFfaQqJjZEksSKepfFPzHwnqQNPWwpFfaAEeKkGgtjJTzfoHhNVaAFfmEQqeMnuUDWuvVUcCFgGpSdDsQqPPxLRrkKmMQbBnNqlXbnNsaAWwEVvebtFJjmzZjJMrdtUXxrTMqYRrlxcCqQvVGgUrbAaLlAyBYzcXeNsSnTtENcVvnOoNWwCFhHVvsSOEtTtxdDXiIIzbBZYynjJXkCcKxNEHheeuJjHqQhMuJsXxUsSJkVBMKksSmbxXvcFTuUCJjPEevVpYjJMhHTtMjJmvVKkupwdnZzuRKAeEkbBQrAeEfFaRQqYyNmALlXxpYyeEYiIrKCcvVDPXxjJgGuUiIRZLlzriITtgGVkKIUulLMaAiIGJeEtRrTzZUbWuUkKDdwBqQFfLlUvVurRuEeSsUEjVPpUbBunNtgGlhgGHvsBankKEriIwZztTaAcCKkvWwdGgmOotPJjJbTtJjPCwWiXxIIbGgijuyYptTEHhMlbBZcCakQvgGVEeAamRFfhHPpdzZiguUDEsSwgGWsCPnrReEDdmMXQjJvvVdkXBImmQhnSsarUusSUjwoOWoOTtkoOYyXxPpgrRzZswWPpGgSJnNncCNsSAhwWIilLWmidogGxXFVvWwfsOQuUsSsGgVnNEQSFfnXfFydDdlCJjMzAatTNnCEhHeGMFUagSsGVCWwWwcTtGgdTtjJDRNnZzrYpLyAUuAzZYCpPiKooOCNnDdYVvyOjJoFfcdDzpNnPVvnNwJjWjpPNbBnwWJjJFfdbUiODuHHhpZxvLCjJXpPQTycfBLlbNOonloyYCECcPpJjqtLFflTGgQpZkKEeDDdfXxFyLjUoGgREqJjDdnNIDcJvVNKdDpnNnLlfAaCctsLcZzClPpCcMmdklTmMtYypGUhtTOoXxOouDLldxXTWwVFBbSVvssYMmmMyhqQniYWEeGxjUuJXlyYXxLtNnvVKkhHUuBJjmMEeTtNnGaiVNUCzQqZFiSbBnNiIKHTwdGglclLjlLUqeEQPlQqLgIqhXGgPpMPpmjrRuIaAHhorhCchsQqvVTtSLJjljZzJBxyYXdDPpeGnMmgGgGxXVDRVvOSQqFIpPUIiuoOlLiGGwWHLJQCsEzZKtHWsSXJFfWJjQitTRlUytVSsOoRoOrNktTzgGxXZdDqgYKkMKkeHHhhuUaAXxskKiUuqQWwUJjoiIOHZJRrjzDdZqQLECmMcpPZzCcexpPsiISasSrIlZzgGzZLfFCysHoUuoOKXxEqQekDzZdBbPpJjOhfFxXKUnYlLyyJMCcmjYXxqSszAaDyYBLmAaaIuUkOoKWwCcnNapPAcfFjjtyYjmpwCcMmnsqtTqGtBpvlBzZqSmZJZzfFjdtaADFfyNAaXfFMeaLUuytTaSXtxbuVwWvnvADdaCEvyrRYYyIkKySsvVgGYIibDazXyYwWgGNnxXsSwTtejJElzoSDdbBsNWeElErLPFCckKfBbdihHAaWGRkKrMPjGCcgJkOoFtqQIiDPpvVdtTbMmSsilGLlrJjRrRCGXCcKDdYaAtpeEWXcCxlaALwEBmMLlpMxXyYmzYTtyZyrnNRTtQQxlLXPnyQqYVmPHhvVqfFmCmtTjJgVvQmBVvSsDmMCcdVuUmYyMPPpppPSPpDDdErRVfghumGglLMUMeEdGgllCFXxeEHhcAaCdLOGIaAiHhaLljXNWbBKkHhcaAurRbrfFsAalnAaOQYySfFoOWJjyYuSsvgmkaUocCOTtgGciNKIFfkKnNivakoOKwuUyDMaADddDmpPdOpHDCcjJzSssSPpuoOEeUHhZzqQZaYyMmHzIVvhHvVDdiuuUUZtTAaKVhHvsSkUuhAdCcKcYovrRVOWeEOevfJyaAIjJbBXxHJjhMZgsyYQbBqSvVHzPzZoOYFZzmTFfKhwWPpkKHlLmGrJjRgpfFPYyPpMMVPpEjVvJvggiTtIZrRzGuUUfwWmMpuUFZWbBDhhHHsSsSCHGgGfVbBLdYAdDWfFBbYyGLjWwJxxCcLliSjJZzKQkUdDvVutUuVlDxXirRxsSiIXIKYFfyMczZtoxAnNKAbeQLlqzfFOfJjdDzZvlLwJFfjxsSKRuUhxPpXJuDoOpNWJSxCcXmMeXnmMOoEGHhdDJPpjgJjeUcvyYczZClHLYCcOYyrRvVoykqQjJcCEyWwYSDnNEwdJizZIeEOoBVbjYMmgFffFoOOoFfdnXxGgNPpzOoVRrDdIcCbBBbrRlExXOoAaiutXxIiTJjsHAaCGgcyYjZzVNnvxXsXxmTRrtvMiIXxmVMAapLiXYqQdDAhHzGVQUqQzkKiIgGuUdDkSfFgpPDdmCwXxWOqZzEIzjPpPHhBkKrGgRrFDdGgNntTcTusSwWeEYyhHCcalpPGcCmXVGEesSacwcCVCvVuURPpZzTZztxfHuarRPptbjgvVGaNnAqQJBDHhpPdzZTScXxCWlLagGBbAHhtTwuyKkYJDsSxXJYrRyLugPPGgKJfzSsqVtTIivnrwpqZzmMLlHhlLPixEeAZzeEyYiIdDavQZzqMmsFfSXxVXoOGARragglLYTJpHhZThziItlgGjXaBkKQqMmbgFfACcaaQRuUrDdPqQpyGmusFLcClwWvVDdLuUFMpOjJPpnNhHoDWDfFHhdwAadDEeSsdaVvqGqQgWKkwHhWwJSsjaAKxXdxXDPeEjJIiRnNxrRXPpTgGgGJjWifmMwGgWRrxLgVvBbIihGFdeUuSQurZWPpwfFXxYyRrqbBadJjDCcpujYFeEDdswWSfVekKRrMmsEeSpLkRzZtockwunNUkPIffiIdrRGgDVxynNnvmMQqcOoXxCMzwLyeZEezuJRUuFfRaAaKJwWfFzQqiIVvPsSPphjsSNnnfEfFNjJJvVjhyFTtrRAdeETtvVhHzZXxHCgGcQoYPbBLlvfsSibBNnlLvVoOGdVjJfFDKoOIiLTtMmxNQWNmUhHuMdfFVyYmMeEMmhHtTEyhHRtVjUdcCZbZKkUufFzZYweeEKSsIiiqqXPGgpxrKkRmMcLloOsSvVNWGgsSffFWgGwRCtTwWRrbBmvxdDZZzHFfXBbxZsmMSzjaAoOPpTjORrYySskKQAEcCeGgBbSsPvVpfFiQcCzZDESsBWwpOowWORfsnxAyPbBKkqGgQqWwOfFoQpIlOwWUuYyfYJaTtAJbrREeKkAaiIwWffUuXxiaWOoIiLVaqyuFynNYLlvkKRTthHLlNnNpbMtPRJHhjzlLdDHhJiZHhyYcmMCfFtlLeEOhTtkGPiIpgKnBRrtTQqatmaAmVvbLRiwWsSIOQqeEUXrwwnNFUZzjYyUAaZNaEjiCcuYOoMjejJRrSmJjcjcdDFfDJjJfFEepXxBHBbhZaAfPiIxWwyYXbohHmEpoOgOfFTtXxosSnKkZjJmMETRBvVbaAfUeZcsLlFYNnyVuzUuXgjCrRJKtxuUBbXHmMmkrRSNngGssWGjrMmZzzXxZxvLtTNNmukYIidGKkgwPpRfFrXPnNxAeQqxXFccAHiLwMUMTvVtXxabBToIRpPrJNMmrRhHEsSXhHlGgadMUZKeUxXoqQnPpgNnLlpgCaAqYyvVXxsCjoOIppPFtBRrLMYtLCclwXxsSEeWPpgfmvoYyWDdweRrjdDJFbBBDdMmxdDwWdDCKXzpPxnNIIMmJjKkcSiIQqxXSCcIkKmpPJljJLvVKkIrrJkEeOnaAtJjFWglLSHRWZNGgfFHwWvRrSEDbgFZeofFcRQhOoHUVvXxuJjTtKltTlOoAzCGgNnXSLMmlmTUtHhTutMiLlpTYyGnNoOTnyvjJVPbSERmMbvhvVTtHXJjxoOmMtZcHhwDVCtTLyrCRjJrcXCcaAnNXeaAxXkCcVmMmSzSgGrBbRsyYNOFYSsyEefoHhJmifydDJjRJCcNnSsvVXbgGfYFfpTtelRawdTQIlczZCZelRaArTtepyhHxXWErasdoycqQWwArhtTcCVAaIfvVFDbBaYJRzZXCHRroODOeEoXxcIBVmMDrRLldqQvMcHvCcCcOoWHrniMHhGEfGGAWqGlLgQLlPlLAGgxXdDJQPwkKoOWpBYsSbBePpyoTTttOHFJYyQqjFBRrakgAazEezxXrRSsrRZToZnsSxXBbypPOozBbuUozUijIbiIurmbfFEeLlBMlZRrHaVGgmMnNgXPxXGnedDxRtTrmMCUjJAauWPppGHoFXxUaiuPZTmQUXxhEzZXxxXeJKeEjuNsSzuIddDVHhvDeeAaEjkTtuhHFqQrnofUKkDhGdWwlLOXWwWwAqMmvAeEHYNtTYynJvVhhJUuLlIuUzJBbiwWKkgXxdfAsCECdDmMnNcvLSsTtzWxoOQTtTtQzZUOaAzUuZQqoNobwEgGoxRruLwuXkKQqxMiILlmgeENkElnNLbQyYJjqCVvPiICgBbHQLlcYyCcCvVPpbdSsDqQWiIOMxXCjJXLKgrleEVwWWwEcfIfkIiRryYkKJjCcLLldQGXxRrurRHhZOeEolYTnWWwNnwZzNWhcVsskKSpPllzvVNkSJXxiKAusaASoeEmKkLlMDdMmyOoljKRbyIVviYBdPpDJKhOoLeBbsDdRrgoOpsLdJANpUAavWwhHpvYyiIXaAAmRXeExfTtFrMalvGGNnIiVDVvifFIiZzgaAZJSyYkvVBbRvVfeENLKkWcCrjJZfnNFEWWUutoOThfFGFzjJxXZhqQqWyYQqQMwWmPQpiQSCvTxLjJFfOHfBbvVGgGqPwWpQgqQhVvAGgeEaFfHnNyBbgIimzxXQLlhBduGReTKsSNOLhHgAhDhrvVhHRWwlZQQgGQqGIIZzvVuSsUvZzVKvRrVVvvwfsSgGUNAzZbBBJjbfmSknNFnmMNayYsSzZsTtWwSmssxwWZPalLRrVoOrqRroYPNtHUuKkhSMmbpPPrNnwWRrAaOozmZJfeyYHymlfYBcsrQrNnUaAupliMwpNrmRooDdORyXqQwWyffxnZujJkKFJjlhmZoOzEeIJjNbFfEHuUJrHhoCEugSsYoiInsSDzaCcYVGRXxaAHhriSiEgQeHhEqMWlLAakDrXuNvVnPxCnNPtsLTFLZJCfjJEeRrevtTVkuUKEFVZzFEtTDtRrlPfFfLiKklneQmfwWNKARApGItTijoOuZhSQKkbBqZzsyzZYfFSNrfjJhunqQfqPpPjXWwXKkkFjJCcPpInNwwWQXxkQqghHHQZxXzZaAirbBSsPCtYGcvzSsIiyRwWgGYmjEeZzJPhtpKkYflkKLFwfFWycCXAaZdaynrRNMLbBeILlzBDVKBbZzkvdsDdnoONrRNbMWFvVziIZZJjOozSQqhFHhfMmIZxLapoOFfzZfFiGgIDtmrRIiKoMtMrRwWnNwWrbmMBuOgQLMgGsSRrKBbkKkvsEeStTSsaApPpPbRrKKnNEetEHhuOjcCcCJZzJBbjVpNedePpEKAazvVZSvVGOkKNxXKkcnNzoMmOjQEgGnReEZNncCRrpFIwxFgVDdanuFfFILhAhHaoOJYJibOoqQWwGgkJmWsHhSgGIigdJTtjHESsGpPJQMeEPatTBQjMCcRYpPmMSsSfjJrRjEGDNSjjJJjJAqDdQmdPBkHVnbIiSPpwRfFGgsuOozrsSeHQUuqhERIkmMZJIVuUnyoOWRrwWdDaWwngsmZzswWKdDUNPbznNFfIiEnVvLlhHuULjJeTCqQqCdDcxXQshHhHTtSDdiIEbBolqLXxlHVJjHNKSGgRAaAuAOVveEcEzZeHaAhIiXxxXlKkzZMAeEdWNnJrriginNCLxXlcRMNYFvKkVUIiuvVlLDVmMKsrRuUQqXfFRrNqppPIpPigBbwoOWgSWzkmMSMmzYfUPdOosyYSNtvVgkDdgOoGoGkKjnpkKKnEeAjiKkNnOEenGujJGKkTtTBbBjmkMHaWiLlAXUVvugGRvVwEepPWKUuBbGdDgRrMXxmgCQqcoyYfYCVjJGgvNcCUxZAlVeBaPnTtTiIWSswtidKAaiiTzZTmyYTtvVXxRniIXVdReyhGgFJyfNDGwAaokKLlONnHMszJjzpPSzKkzDdjJbwjfymIilLZzKrZSyzZSsEdPpLloQgrRqfFIikYCFsEeXxnxXZNWnUNzPovLbBlDhHdMmzwWsRbiItwMmWTeEtTCILRruUaALzOSYzRfdDVmWVvltMmRrTtTsShHcCmyeDYydEYODuNUnKSVvozYyZyYPGNwFYpPDhuvVfFSsUzfFSJwWjkqoAaOQEeKHhAUunNNYTepkKPMmEtBbyIiYyhcClXxArCcOQmsSfFkpPKriKyTcAHhhxXHyQqzMeUvXPpLlaDdAxVRhczqgkKyYGUfhofJuUSCYCXqTtOXCcHhRrkhTdrRrRaMbBrRzZmgWSCCcLlnvDTtfLlrezZlGzBvuUVyYUuQqxBPpbtYmxvhHarsYWeEOWbBBbhHOYdpxSInlLiINfFEMmeygjTJjGdBbjcTboOqVvMkKwWfGWpVitfxXVgsSRfoDknYyVmMvJwbBxpvUfkRrzqSsAaOWbBSgiIGbwFfygGYEenNLlLlKDXxFtJewIEePpisxXSSrWwCEXeEiMmprAHkKfxtMlWUVxYKkbBXlcOVKkvccCCkqwaAVvWQxhQxXrRnrnNNvVHhnfFlydDLrRcmGnNafFAgMClnNTUOodDVvsGpLJvfFvVutHhTfYKkOdDNOFfdDrRPREacCAFyHidDTNSWOoVvOoEewgEoOqvUumMvYymkcYxUBbbBaAlLDaGgAEfkvdVkKrRmMfFOozYapPxXbGgYvYQqaARJjExHhRoHPFvzeCLlcbBzvwvKfeSIutTkEnrAaRlIPYlLyrRIgGHhfFTjvbThXzeELlZrNBbrOoAwoCcOWPXCzZNnXxIiRrbBvfrRFXfWHOolLSKkspPRyrUFzeTJgwWDUYyxtfVZBTtgGuqjJEhdIxCYrRwPOgKkqHxPyYpqrIpbEAjJalxhjqQbZzMMzVhHuUWweUgRKkpPrKkfFsFgGCcYyDPmMgGyYgsfFiZBapjnNswjGqxtBCgGVrqQnNwYyWxkKpEbJjYNqQPSETtekZHhSFfszgjefhJjJCGjkPpwhHNqzZlWdDfHhxXcgPpznxXVQqQlOQgPpevVDdOoOfQQqqFBaPqQZVAaUgGuuHAazgGUuzAaHexJjUtBiUuItFfTtTwWaXOwcCmJaAbmiBUPeMmZGMfTtXlKZzHFswSyKDCcdLrRgGqdDssSGUugfbNhYyhzZHLleaHBSxOoIiXqeEkzKkZCvRaCsaAYykKScrWGcCzZNnFcCVvnNnNKhHkwpxeyMzrXoakpHpgmYyMGGBLJhHWkuUYuVonqQYlIWwSsQNDdvkKkBIvnNVlLibUuHhvlLVqhOoLAaEeHhnEetWsJMHKNYYkKDZzdYyGMmCcgXiiIfgGPsOrTQqqBVvZzDnhHgehBbQFfGgzZmlaAyYIypxkOJjokKlLLnQfFMYkkKjbBJKnBsSpHSEibRiVvkvHpCJhlLHxXmnNAKfrRkvHdGkKnMmCCcpPKYiGgcFvXSMOrZzRrRQuUqZEeRmIQKiHPpplLnasjvHEdDCkzcCIAeEZBGlPpLkXzZSLlOochHLlfpMeETttfGVcCZQbVgyYFfGVgGvsjJgpSFnNFffWAallLLdPpjxXRgRlLFwPsFkzCnwTDoMRZYtsSvVnSroOfgGREehHsnNyYyQqYSSoOsgGkejNynwjJWJKkxeEPZzpshHdsSzXxAPpaDNniIWrolLSsNdmwWWbbjJdQqDlbkiIVyBbYsvHxFUaAkKsSqYSswWLHoXwOONuUJSqrPlLpvGglZzLOeeEXEefFxERxlAEwVvBJdDiCOocpPSwWDIipcCiwcCcNnsSOoCFMfFEkLeUXVcCvxMlCnwJAajoUufqUVvuQUuFzWwZOOBbDgGKkeOoEwWyYNIinxkKMLDpaAXJjxaAflRBbHhrmMsSMmlLlbixSTtsCcdaiYjXxAoOOFehPbSyVvllgzNmMnUlZzAVvJjymMYmMRRLlrJjCeEmMFhHhHovVORdsrVlVvgRrZNYyBbnOFAHOoAwkMmKFLVKkxPnikKSswzaAxXZOosXZxvHyoOxTtGfZJlXxLZHMSmgGDOohXxVyYviILbtOqQXoOWwxipPDoOUBAaqUuCvquBKYyubBLlDWNnnbpsSPpPudCBXXxnOdDhNMmkPBtiLlohHCctTRELlfFKtTrzZZtTdMmyYqnfvUusfFtTkrRdOLYdjJSsDtJfVTtvaAiIEeiYDdyqQUBbCQcCDxyaDzZdDMMgGmmfOsVxsSeEnNSJHEelLpKukGEQqxXIosSkVNnfFvcfZzZWhfsSPDApmcLugQqqDUuumKIkJoXxOZzcNzPGgwWpkKvXxGAaigbqlLNUZUsSuMmPwxLTRrzRuUuzLlgICILEdGIbxPRrQEeqOWWoOJjsKkVvKytwWdkpHqQoBbyYZzYyqQJjqUEXGwcyYwWTtCIwLBbkKOkKfFkKnzSpPcpmQTcCMLlKkbTXxriEetFNaoOTQvedQOoXFQFfgGWwXxDvZzVAadvNuUnWwVUCmdSsTiASNEgGQqLZLrRXtWEKMmtJMFursSesSBpBsSucczLnvVNsSlvHhOXrFfSTqPxXsSEZzeBZzhceEYTTtRparRAJMsKkqFwgqQxdDvSYKqQmHWXVEtjJzZcLdMgGmbBDeMchHCvaCcAuakzpuqWzkyTIiaUDxUaARrJjSePpmLfmMIwsvAIiaRpHhuUMmbambpQFUgGdQbJjzFfZKQKYTDESHBJgKmxXhWjJwfOofLlWwbhHBRwXdpPjRrJEDJjbBgYuJHUkMLdDXxqQlmgmdDuUKWSsHhfhBIuUfvVPlFYytTfsSNgGnBSsblmqpJjPMmMmUuQOkBbfEfFiCWLvwgAtfOoWGLYVUIiWGMDAapVvVgMmGGxmijymJHhCKVZVtTHBeEbrfVQgpJYypjuUwWNjKwWoONIFpPPXjJMRzZZEWwewWaAJjcClLQcPtwWNNnTtLTtdDedVNnEevCfFsaBAaIiOPTvwTlwIfjbArvPTtpVvuKkfqrRrjgYyHNNDIspPdDuUSOogMJrRzRdxwWyYhoqktVvLrJZnKuUIbBgGLJtNrmnUqCcwWVQtpHljEHhmMnwoOyLZRXHubMwzZWwqVhPgTHLlRrRrFCmRwWmkOBbrrPTJbBshHIiSjhHxzhCEWWwwpPBTtOLloFOocUuZdrRbJCckrRKSeEsFtSstTfkWBbwwWcCzkKQeDdooOPlSfLVTrfRCCcOChzspLlPuYHvVhzsdxePpEGebBHHPxXSsWSCQOtJSdDsaQcCyYjJIDdiqGEJjkkECmGHhyGajJTvgPbyMzZmNVhScCVegWwMmmMlnNXQuHGgOTxXAeasBlvWqdsxCKHwVvpMmTXHqiXhLNCcqYSsDdyIUdvVDZgIvWScqQUzKUwWuUigwWjykKAdXKVvDdyYnYOomMnqkWwCiCcFnNIifIIAauBbuUxhHXAbRJlTFgzaAwPpwWWrwWCUurLkKSaoOArYMbTtBbBOohHcwRkTfspPrUGgXnpPNuwtTRSsgWwdOPVEenBPfVvEePqQpCJzFUuVunbjaAVpwsiASZzisCrdwwWWyYwTIJIiBNnbjSsQWvTDoOpPWdoxSeBAByMmwWVWqQwmOqQgGvVoMnNuGYyFqISrOPNOWwEeeoFrIciIlwXVvLlunukzZMmCJTpPtWwRueAlXLTnNSshJAlLcNgejJWwEwWLBoOkQYkOdDOoFfkKfFsZaesShFTIYLhnNdZzjlXyYSEMTvCatvVwSZcgOVvsNBMDuYFXxbSsYcCyawWzlCcLwTMGaACWcpEewQsYlbpApPagBnuURrTabBBiwpSdPwMofJurVMsCzplsmHLNIJmOKkoxpcCPUuwZvVzWACqQUuLlcavVaPYchgowGyzZKbgHumjQFfqbBYoJzchHwWCeWkYyoOoeFqqYyuHGIPpiRyxhFSsfcQqejJGDPpCcdBbbiBbQqISmEvIxnAaNEecTehHlEeCiIjCwWJjcHIsSVWwzQMokkLWPGMiImAaOogptOVNnkhPMwwWhwWTKkAIOPUrsFSorWuvjkWRrjFfVvJLlBxXbDsSdtTImshBTtEfQBFfcjJDBHhHVjgqeugGmqWqjcLlmEGfcezxXZDTtdzqQEPYBWeEAiIafuSshgTMzxmMLXwWMmBbWxXWwLlgGsMSspPLiNEpngGzZXXkbrWwRHhaABxfhABbTtaLoOxTCqEeDzUuNniBeEPxjJotLhHJjlwbBWTpCcPtmXpPECTaAtcJhHIFfhUuyGItfHrBbELAalUSsDikegfFsIipDEeXvlSmONnpPHqwIwOopxXPpuyirgzKVvJXXUXtTsybBYKQqRAaVRjDqwWTwGKkIiMPhgGrRvGdkvdAafFwWRFIiuyYUsRjvktTKZzCxXxWIbQdDUzzfUNntyhIfcgGhShHTNIopPAoHNnhYhCoOcsrRFoOkKVMmbXEpHvpPUCYOnCTyLfLvVMeXhzqQUUlnFfNLGaAaxLdvKpGfFCcgvbBExanNWZRFuGnZzWsKgGwpPvJnRrtTSsNaAjTylBySsfFhHYPLxXRrlpcWwYyTWsSAfSshHhoJXLGHMMmmyCciBCcrAaRbIYlLhOoglxjOHtaATFbBawUutCfFbLYtVpPWkSwJjNgUfrzwKkAXeVPwWBbkVMmDlXSsAvVglJjLuuZHxVvEmlFlYtcoONoVvycuDdVHAahhPexqQBvpPzZEoOeyzZYTyYtWwfFfSbBHyOTtaOintsHJjCYyFiHYTxXuFZZuqBiwXcVJrSfPprDUKkuxXNnVKDgVHpTtmgWtQdJrvrkSxuxxjkZGRIYZzUlhHfFLBxXbPSsWiWQNnqQhoMsTtLVxdPxXStTGEKIduaAerjJRcCRFfhFTigYHsSDFfdijexjJBbMTIiOxnNXXzZpHhbIZdNnWwQctXlHFXoOKxxfFfZzFNPeuUqVvQkRrKnIlmSwSsBbxoOlxXXZJjmtGHUFcCAaFbBfwbWwypeNnZECFgeMtTCphHPJQwMzZmIiQMURrEQXxGJvwWhqQbdCbqFeoOsSbEeBbHSMiYyBMPpmbLlDdwKGtTgaAMmXxEeAaJVUwROVvsfCPpcSRupoiatwxOoXEeKkWHWmpHKvoTPiIrzZRpwlKKXxOpPmMmqZbBbBvRrihJclLEeLEtIiCrRoOXiVeMqnNQsBBbgEkKCyYWwHXYrghUoOVvQQwWfEOKwEcCpPbBZjOpPyARraJMUhqQGBkYgWOaAGHCypANnZzXOoMjinlhMSLPZcSuUmvRUjFOoOHhmWpneENAaDsPwDdWWInNNnbAtumMlLUlLNbGeEFYyfBbnNPBLyIiSqWPCwcgmSstCcSsWZABbBfyUdmXxbjJnSoGCzpPsWtTKIiksSTAcVtmesxdDLJDWwHlyitfHKkEAeEzHhSjUVvuJJjyfFYoBKyqKoOblrRXxGzZvVnCajHtlxLaEUrjcCcqQzZKUNDdUsSxWLqQqQCiQmMqcCZzSsiIMmRfOEoXHhxnpoRsiQfgULlWTtwvYbahVvHbIidIiDvVEsXCcODwdYytIiVnrRNLlnnNNwaAqitWMmDhHRcSrRAaIiIsaIiVBbvLGglISQqWPvJtTBNgGUvOofHhZjcFpbNbBvpnNoDyYGrWbBkbBKUxOouRwWSFtKrWCOobBmyRyYslRuUcRZGftLjrBEebBqQaMmUiNSsncKQNmMyNkxUuDaKsSHhkYYyJjJGCcIwpQqPWqAeEaQOouksaASZumMCsGgwkKViGzYyuiQCcnljJHxIQhxtkKPWhkcXSDQwyYVLbSAGgEaHhtDdUDdCcvVuohUqxLvVGEveExzZaAXtTsGgHvnyYVwWxXvvVYBMKPpkmpGVAaVvtAgYpCcPrRgMceKKegAzZEAaejToqcswphhEgXPkKpNnNnDMmHhSZFfyYpZkKZoOzzPpMboOBmPyAaUSZHcocrFRKktvlFsLUupOEqZKoOoOFGgTfjBDIKkizNnCfbwWKkgGecAaHZRrXtRuUrpRRoKMunNUrgGCcMcfhRryYtGgGpHGgQJjqvQWNnmGsSgBtTUueEhHUhxiIGgryYzlwWGgdDYaAWNePpYyJLkuUKhPTqvQuNMREePpnqJjQkKTjcClikNzjRlTbxXBKQOHQqXDrZNnzUuZjVvmGimMdnntThGJRQGgFUVRfaApPFaBJFiWLtyYWVtpoQqrRbsSAScDElnTpOoCqjJzrmxpfivVnkKkJnJGAagPjPUuGqvFRmMhvzUuvkcjMYJIKkLlMXgvPdyYmwsSWgwuvylgwFTaAaTtBbGlLuUWVNnlwWwcayYAsSIewWwWFKofbBFyGgYgGGeEoOZzgMLNnLpFcCiwWbHFwkdfFDMGVvWwDdKutjJThjUysYySGdeDxWQwWqXxrRrYyeEoOFFDrRxXyYdmMHMkGjNvVnbhsedtykqkBqDTtufqQqPBMATtBgGPcCrVyYSWBsSbiFlMEsRraAuXdDduAtYKZwQUPZKAEeUYyuUrDdsSRVmmMERraAlCTgGzZxdDXIiGgevxwhMUudDkysVXGWfQHotTOhSmjPWwrtyCHlLbbtTBsSpQtHhqQCcCcsjoOJBPprgGRbRxowWwXBblLxWSsHhVZCCYyUUuCcbHhjJPbsSFfEUuRUgkKGfmjNMmZTtUuzdDMmIinTIiYykgGewTxlzPplenOosaItDMYgGycuqfxqXwWxDEYyVqtAnzZfyYTIiIpPRtBdkKDlLQqmtqMNLlnPCsZNKSskFfoBbcCKkFfNnlWIiiGgeoOEWgxfFeKkuQOoxtTuUXTtBbOhPJFKkfjQqpLlOoPKDTYEemMklDARradLSIcCiwwPzZpoZzRrCLlgGITtiaAcpXBjJiEegDYyelicxXiGZSslDMmdtTLURrrZtlXWpMmzuxXYynQBGIgVZpPnCCcjvVKikMUdQGUlCMUMqJjQmVvuPaAadpFTtHkKwJjzFCdDKOiegKUlLkRrPhjsXvSoFdsSAmMYXdqcuInNiIkKPpFjTyloDByYbBbKSVFNQZzHhFfHhDEePpzTqQhHWwKTtktRZztTkeryoOooOOYOITbxXQqVvxXPpnNpKnoOHHhqIiQoNxBbbCccjJDUBNyvVYwDdCcdUIwWikbUgGQVcQkKbuHhdCcoOIoTBILlilHdMsLlmJjiIhzjJjzFgXfFYhVXzxSWITtBoObNpXvlfWaRrhakKIifFfKaAkoNYynCcfFcCzWwGLFKkfvRSDrFfxfFXfcaAvVWwriIaLAauZGLLOUuoXxcChHYsBpHEfoWwaJyIADXIBLOoyYKkLFPdlmXMnSspPNmdjdDJoWyYNcLmuElBbKemfWIPKkdTaAtuPpUsIjbQqWEebBdDeaLXroQbBqhHhHGgVMmRQmMsRXxrAajnWwpPooWxOhRrjJlyQDduEgOoGefDdXhVSxXvXxKBLBVCclLvbBBwUuMyYDnQqORwTtsSOodgLlGIiZDWwSXjeEXxuUbfFBNYnJEKsCcqQSrFRsNFfTyYsSYyyzZNnzrrUIiuRmEAaeUbBuOdtDdWKkXxNcZsEeScyYuUCKfSpWfrMmGrJDvTtVwstTNZzYyncCPGvVrRSvBqaAtTzvgTtFTmPFCsxKgbSszaiZKceMmSshVJSANPhIDdkqiMrzuUojmMaAJmsxvVxXVLOolfZzCFfIPpykkWwKcAaCcNgLlDZzhVKcCuUFvVkarRTtMeyYuUEjGgHhchPpHPhVKIrBIeshPbkKNZzymqNlAaBbKXkKOGgMmoPgGYjZUuznNJcCiwWLUuMDuUHhdmMqkKHEMmGNdbQCctRhHohHSYypFIxFfZzyynkhmjOoSwTNhJjHuUlFfqNnQHQAaKxXLlVnqiIiRrLyeEpPNbBOvKcCkUyFRrLlfKwZzgPpgGNnGiIjlbgyYPhPjJQqKuUAMmOxRZVvPpbBAaZzmYEXPWAafiIgwRoOArJjFnNfVcAaKGgQsbwWSsuUIihfFiIZzAEAaVvHnBFuUjJSQTtHhlDdWwkYsWSfhfFkLxFmgzGgEpubIMBRrMmjMxXWoxAmMgiOoSshwIiWeEHIGQqbTuRrtTXEfFhZZCchUvzpAbopPwWEGqoLqvNfFZGCFMmoRpPzZrOMmwLQnBbVvWKJqLlQHhgcGggGjRmMMmrJoOjHdDFdDEJGKspnVvyBePXFfRvWwcbTXPpQgJgGWKkSJPPiIpATiItRrbzISAeEaGmZYyzMpdJjfSbBpPfFGgjJGuSssKkSETtnNsSfFhHvZmmBUuJHAaXLeBPpnNPiCcRDdQuUXhQNIivVnGopmMWyeEcyYXZziMmDHEeeQeERrsSUbzaFfPpAvFTXusSdGjtsScCEZfuRYrhgGHhkKTtzZwFsSxVTtVvNnngGNcxDdhiIHvyYVpaRnRxHtBVHhJticCpieELaAUuQLlqNebfFBxXKUisECcFfFkVxXWVZEZVTtfTtaAVKkVvvphOrWwBbXeryVyBrRtTGgAyZfFvDsSVKhHiIFerRduMmHhcWwtTAaaRrACXyCKMAaFfnNVsSVQeGsvVntOfFoIOohYfXxJUujergaAGpooOcCnoXxyFKkwWUVgGlLjlPgSutagGBbAYLzZZzRNqHpPXKVvoCLxyKkXoOvzZuyYwLmWwTXFuURrhaRIiPIxXJjQqxecRFUufsSsWEjTVvfsSdkyqQYWEaAefFBswoUuGgQNGgnvVZKeEFubBVPxXXCcWjNzZRrKdeEOFAaRrrGvPpFTIwWvPIiwgSyYsFmQBtCJcCsSBbQEerRqAaDgtXqQxJlLGYuUItTiOoisAaXwWPDykKoiIQqbBwowySRAVCcXMyGFfxXgTEeXbOwWoVvzZzIiZfFeEZgLfFERFdVNcswGXxbBmMkKADtGUugHKxoQxUMmucycsjoOFOHFZzutRrVvTQZLsSwWHhqQlqQCHSsNnrujJvVEKkmZRrDdYdDuUamMCtYktKkTIRMqaAoRAaaLmMHnMmAaasZwWHbBGgdyfZzWntTsSEmMeXxKkwjJWgPppOskNunUdoMyYqQLwMvFrZyOGgosotTZllwWeEickKBrSYCIicyZVOLMmlpZnuNIwjJWiwbBnflLFzfHhFNSfcyLldDKQgGExXeGCcqOTtuULlDeBdiIsSZzDbSsYszaAvVRkMYFBbJWBQqqQZZwxXWTSstsZJJjZzHIihjZSmzxXZJjSshQqWgdnFYEejmMfHYwWZztTgGEcCIiQquUrDeEvFfxNrSswWMttIInNkDIfFNsSpAbErRvpPLarRzXtTubqtTQXxPpiIBeEncRrCcyFOGQCnNcqDdAaGgkpPrUuxQUuEjJeqaQqIiIwgGAmMhmKCcMJHhiIblLtgUgYyNojJIJaNfqQFkPWwjJNJgtTOOcCoKGTfuUFnnNOAarRjAiIaJoDLwWCclpHhuFxaOoAhHXiInNuWwUyZsKZwsGGXxxXuhHyYoOUPQnGgOoSCcsxSkIivzZdGgUufynmrcCIGYUuyIqQRRjOojJwDJjamzNnZDNndLHhtTvVCoabwWBUarpPsknhvhLFDHhdflQxXLRrEeOecSstElNeoOZBcpPmMCpnuZzkSMYylLSGNAzZwYNBbvijzKiZUSaAOorWmMsBTtNvhQqxXKbpDMaVhyYHvsnbBfFdgyYeJFiIxXsYyMmWwyYGgyaArmBbVvJqUuQoOzZqRrbApmqjpCcPgehmMDGsSwMjBbKBzZIjahHAyfFjQqHlcCiolLOfUNAvVaAvGfXWvVifPeEzrNIieeEqJTtoOZCnImNlLnMiogDfFdXJjxsSjJoOymMYTtoOskDEeEncCPvoUkKevVTkkBVbPpBpPsSmlqGoURmuUTmyYOkMTuUdPwXxWAlXzZziEegsSGOjsSJoWwHsfwmBnWwJjiISbZifFtTElmoOXxjJYADzxPTGgHpMyDdrYSRrsZYywjoOJWVCgyTcpRBbMUumIzBbqqbBQhGcCrRKqWifKxKkxzZJEuUcCepbBVvQFoONUHvVFRFfnsHzUJIiGggzZmMPaWwrakPpnpMmSsPFMqEJjNFFfpsSLTdAaeNnfvcfFjqQzlccCCftlSTtFfseEzmQqMuDHhdUuUjJZSqQlLTcCpQqTtyYcAaXpUJBbjxSscCTtzZRdDbAaBdKcCwFfmmMGpPgGeIsIxXgpPsBbSvyAJjKkZdNOyWwGUfFecORrhHRjheBniMHLfZzUzNXsSFFYxbBHhXxYBbroOoOOoHhOriCcIMRnPWwgGWmpPILPUuyYlLJjRBbqRYvVqQySCbxXyFLpKkPMYhgxnNXGEtSsTTWwrEeRtFCcjzMmMZFfRpfFBGgsTnpstTSJjyOQHhRoOvlLAsSpzvVXSSMJjyYAHhfKhHQqsMFoOanuGgFJjWLlLlVdCcDkiigqqzWxXYynNwLnNHdHaGVYyvlNnpPoYEeynktEriIgUDbHXxqTtoOZMIiGQNnrReErCfPpFwWRrcRquUYhAeiIApPaEnNrRaHEHhevGjSsTtJgVFholXTZzxXttrKdDkRzZjJsbBSVcHUuhsqOoIWwPqpFfqyYwQHwQqWfSsAagHwrxXRwerLlDdRzlLIIQqiiRwAaxXlhHnFrFfKJjsjuUzGIiIddDvlNnLgIigVLUuAaxlLVPVuPnQqqQajDgGllLmFfMSPGSElHkWwNnjrklLSsJLYQWwHhqQqGguSTtsUOhHkKUakIxRrFfXjszZKnZLsSLwWQqSvCjuUJHwtyLcClLmMGgEezUgqDlCcoOzZrRSmbBMsfFfeEwcCCcvVWFKoOFiFOoChDdKHhrRnNkHvVejJvLZzaARLlgGGkKkloOPbBpxKWwkKkcmowOoBPpOoqhgGGcMmpxXcAaRrIiBeaAKnGSZzsUWlUXOexQqsSXWzbaABZwWBOmMnuuUqqtTXwOoZCkKclVemMcSaFUuYdOoDyfFTtSsDcCGIjNnuUZMHkKIihmijHHjqQwWJjcCNnBbTtyNmMnOohaVQaHSshxoDgHfFducCFONRflmfFMLESVvJjsepPULlsSgGKJEZziUZzGgZnUJOokjHhMaAcCmmMHuAaqMtzpUIAufOHhhgPwXxcTtNnXxXENNngpfFMLnNuUeElmpPxnNGLlvAjJhzLRUBxXttTTiJIuZOYyuUZyYyYAaYcCPpNztToOHhOtTYzZAayUutZyYXAXqQNBbnxaxGKAaARXxOorbmMffhYEybYyqjapaTtsSAwaggGfPpbBFgFegBbeEtTQFfqWwmIZzNRVvVvIiyYhwyYVhCmVfFvbwWiQqinNICxXQqfFWwyYcCsSvcCVdbBhcxIirIijyLlDVvBbdaAVvAdivZzfFwWHRaCYODScCLltTARnNRrcCeEewYPEnpPNLEzlLLiqtDWArLEhHPtTBbyFBxPpwWGgfNIiyajJAYYnNynFUDduSsjriILlQqbBYFIRrMjDdncCZsMvvRBbrVfFKExkKxRYlQquUcaAvUudWCOozTVWwBresBCcpKkqvVQsSFfYNtjFfJbBICcwWiEeMmkKTtgTttPXxlLISmMsmVVKkvvVvMsxcZaCffhHFFYycLLLlkrRqcCrtTfFFMmfCuJjUBbdDoOCcEeOEdDzDdfBuUaAbGBdGNngesVCchnCczwrhssSGwfoOQrpPRRraAqTlLAaAaNoKjwyYWRRBbtTOoisSXxlLjMissCiiXZcCxGgoOkcXOoLlAabfjJEOFfGgVUCcuMFGTMvVmJIijyzZTtvOoVZzvVbBmSsleEOobTXxfPiYyJeEiIEecSMmQcGvVPzZGNHhCcOjJuEkgGzuCcmDZzvVOLloALxdDDdenjiOtJjAGgmunNmWLllVjJvRrIkKhSsayYCLltTCBbVvfqQEaHhXsSpNfFjMmJyYnxYmFfxnNXMGgTtsSyNnhHWDiIyoOYyKIiUMnWwnlXUuxBbVOUuoMluULeEmXRjGgJJguUGgxXJjwSOoVvJjpPKMJjhUuTkjcJGGgxZWwUvfiISCzEuFrtcCezNfFRrGosSOPeMOBpFQYyqzbSsSsMTdDtcCmPEeMzZmjCcduXxUFfTtOIiotTcCCJCMsJjLvVlCcEJmyUIJPpeAmMnRrzzZuJuRQqrRaArfWSsWOokKRxMbBmuaAOokKolBbLrlDdSsFfBMoWSOoxXsaAmMpPwOCcMTAbjrRJNHPpoTzWwVrRvIjZrpTWeEwmBPQQqqnCctZzTrYHhyVPpWwIiwWsSiIfUYQkOoKAvlgGwAILlBDdbFLlrRFUuBjjhtIiJjTHyFHhlLDdoLikKPpxkKXYWwaXNSFvnXxNVrYcCyayYAhHGgovVPbedqIJhHwXxWDLlbBzZBfFuUrQqaARbtTqgGQlLRrdDdXNnCcxjEeFfoOaqfkpeEPKFTtSsoJtJLGglNnmMhzXVcCMcrFwnNnGgSsImUuyYUuGgMfFPMmpMAGgdDawtTWmiYyeJjEHhnNCQqQQekfFKEIkxXEWyRrzVRrvhHLVvlUIgGiuBzDuuUFrRfJvAaTdDrlLYevDcCnwqnXlzZnNnuUcCNkdlLKkvrRDVvgIRrnNFlLVCcnxXEeNpyOqhyYrRDarcCuUoORNnsSfhHeEYJjHyYnkKeFNGgJHaAIiprRZjpPkArLlrjUGzZgEYlvVSsWOoZmVNhHkYyTtKqQEeueEUYtTMmXnEeNPpvwWdgSvVsGkKbqQqQBDFFWwtTipKWKCLlOTtTwSsWrKlzZrRPpbBPCYCcyZpPzchHEaAvSsyMmJUPAQzRUqsEDfgRroOHGhqQKCxXclLkHBbljJXjJFIwtnTtNpAazZPrxXpxXDdkNnsSQAaAPmxXfWxTtXlLwlfSsTtSUMgYvVTgGtWwhHgGqeEAGIOoiAKkxJLTyYiIZHtjKkJzqpPrRQPjtyGNcCnhHdDrRIpZzSNnxnrRlLoONXsTtsSQPWfFRuUNQZFjklLppGUjJlUujdjUiIyYsAZzaCcuUAahHEeAaQqAUhexXEFXXWwxnNnNOoruUcLbCoOlAajrRJDdYyLcBlvWCOoEeAgvVvTtxMgawWSsAuULACzZcnNEeUtCSgLlzsSZGsfWwRpeEgGPwWIieeEiIECcbEeJtTjpNnJZieQoyCcUuBbTtYlZzgGLcMzDdhkxXKHZGpPaADfFdaAsqQKuUZuUuCcqvgZhHaqQydDxIIiVvlQqPFfSJqQhfFSTUqQucjJCtBbUPpIJjeLMmIcCiiqQvZDGTtyJBvbjHhDrRWedstTdDGWwgnNeKDdlobfFBOhwWiGgIiIyGgYLzZVCupPBbNxSlLsEsjwnuUPmMyYVvdUfFCcjHuUiIrkXFYyfLyPpYlWVFokblLBBSsbKZEBPpakajJXqQGSzsSZiIsgCcOBbTCvVmOWwKkpPokPpQqdLvfFTKPpqksIXXlFfaAGgMmgwgGkKacuURrCypPDlvFghcdnNwFfzfPZqQzFughHGGVeVvyYvmAaunNUkvVtZzMfypVvZlLhuWwUGzmBiIbiYqQxXjFVuUbBEokKwdDyCxXkhhHPoYUuyYWmMAzZVWwkQqnICOowWuBfFbwWXxGgAKMGVUwsqQtTqoNLSTlLtRtTBUDeEOojJtEOoeTdrRCGgRrwnsZzSxbBJAKkNneEgWRrwRrolDPShHspfuUgGcLLDmOoHGiIFvKkedsxvVXvXvVKkRrxOoBbbMqIiBbbBGFMmVmMvnNfRrMchHMgGQpZzMyCcYnNGgvNpPpqZzqUuYWwlLPvVzlLZxFfXbeUBbaAuPpPnNLOolyYlLTyuUHhkTtUuxgcZzoOMmgHpPhLITKGgktUupvVvVPBXxTfTtRLlcCrjJKpwWmzZgwMmkKvVxXIvVDplROoeqlLdFfDQLaAwhHnZzOHhPpZLEeVtTvWxZzZQqcCnNAZzddDBXxmMigGVecJjVNUBXTxYQWGgwvVOoqysvVAYWwUujAaJlAEAataAVvTBQXxqRrbmxnYdUuFfjJTXxDOoBqQbzMsQgGbLyYVPbpPTgQTlLeUuEtRrQSoOVvNWUuPMXxJGqQgTTtLiIlJJpPCiAMPplDdbdxXeuUKeEkYyEYyjJZoOQiIHhYyWCcwGgNujJoOwWKkkyYfFSmMmMSsFuUNGgnIifYcXxfAaFiRABbjJXlObBeEozFfhuIisSoeEOUuMmiITtISBPpbEtTFMmfmdDXxinNIUuBbyWwjWwJKkGQyIiVvYKnbBvTYVvuLnNrIqwyYcCjxwhTuWwUuYBbywWUkeScuUqjlhxXgdDgfAaqRrQsovVrGgdvNgqQjUuJAaEOYypPoNnbtTtTHHROOoiIiVvUJaAxDdHQiVvGUEeuEeYyjJsSZzpuTtJldDLCVVvvLDWthRrksIfckKuoOnwAaWNnrRvItLlTtTAgzHhZbTZzrRZzgHhwyINHSfvyYtAaUHpPuatTAgQqOoPLKcCDSTeEFfiIsSFNPDdknjCRrdRriXgGwWxQeeErbKbBkBAacnKkNCOhhHHcCuJlYdzPEaAeuFsXVvxSRrfUDdwWeKkvVrRcOLFWPpEewCYtmMqnaAMmNhgGAwWaIiHxclacCUuvVAgGVXzPhUOoMwWmdoIjJuBDXxWdDqQePpEwFfeEZOnNkIXxcyFAafaaYlPyBbvXxAukKfmgIizZcZKkWwmPpaAcaSsALDTtfFXxYxFfNFfsbnNJjBqevTtLlDdLldDwWSkKYyqoIiSSsODUuIMqQwHkKajJFfjCcLlOdDGIiSsGggFvVfoGKnNKkyYJuRANHSsqDdMrRGgnNEeMibxKDXxVhHqxNAaaAnqQWwKOLlokNdDpcSYyvVedGkKIjJDrhHMaAFoOfFfwWCPpbPphHBPTtpcwWqHhKEeXxJjQqAzLmePUeEJIcCHhiDxXdgGIQqBFfsSidDcpBjgGpTMDVzZnNWRDddDVvsSeNAbSVVvLTenNEKkCcvJOoepPiIiIjJrRuSsBgGbjMhHmjJgmivOopIincCNdnNcLTtlCklCcxXovVOLRygGeSskKECQqcjJPEyYeaFfubBUMnyYrUuPpmMSsRNPpnqzZduUDOXxoeEKayYEtDWoOwdTeXxdDkZzLlrULZzIigPpVvGGgwWlNrRJhHjDZzWPiIUuUmyyYHhctfCVOovKVvfbuUjJBFjueEQEeqSdDjUmGbBgGTteLlEJjgUmMHTthEiqQnNTeVvoQqdiIDDdfBbrRnMmxLPplCbBcCZybYaBRukKXLRkFfKryQmiItDdZzsSsSiIFfRulaALTDPpRfTBOohHSXxgGfFZzBpfzZXxwPpdNwPnNpbBWvBbdXxfFDnSrRsRsSrZKkzXEexPpfFOaAQqFZWwLTtlWhGgAyCiIFDdZzbCcPcCpfKzZdcrRByYbxAaznNZpYyQdkvVTUDtdJbBDQqNnValLlLVvAtBbIgGoOiTvdjhHDbEeUuCcKznrHhQSJtTMYyNnmPTrRBbPpqQeWEKPpWNnQLOoPpzicAXxzlBywgDdOoQZKkYqDdQvVvVvVPRrpPZVPgmMfsSFGSjJcCiSEeCcdIpZGVNhqnNQuUHkKrmCcgAahMmHGZRrzmMMeENsSZzjfFRkKknAsiDSmTMTtmLnNfdDIicCwvVfAnaAfFNmpPHhnmFKWUYyuRroOFfwCcTtrBbRgPptTJQDlokbUearRJjjAkMmKlIiwiIWKkLaJgdDjJTLlXiIBdKrQsZzbmMzpPZBSUuYyCcpjOoTsQqSogGOgceeEnNwrvVRYyTtWJqhOojJIYyvvtJjdDUOgxXrREhRrMVvmHGsSEesgGSgQiIPJhHYwHbsSBHBhHuLlgGijLlEeJXTtcClLZzXbaAHrRhFEesTtpPzRUMmQZqQDQqgGYVvyCGgadDBbAXxNnhtrkSmMsIzPPpBbDdoNBbnBbNvMmVnfUHhuFOoOpQqRgNgnEGgeNKkjEkKlrKkqbBQcCRzZqoOQLeotohVTmMtEsuUHhomMTZzcBrCcRfRYeEyDBbdrQgGaIuUqQpPhHXxivVQhHeEJiHFavVMKVvFeEuUlASsYkiGzLlkEKkeOoAuoDdQyJbSuUscziIwfFJgGLWQdDNnVvqrRyYymKkZzWwMFHiInYyTvVXxtTtfkKFUukeEKyYIijiSbBlwWGgRTcCpIqmMQvViPOyhsSsSHqeEQYyYARrXxauUHhrRKkGmMgZwWBbZCcIYZIiLlHVmMvnFFDpPtMoODVvdMUVvuQqlmfhHFepPGvVNnRrEegFnNcChHnNfNnOhehHETtHoHUQebIixeEEvVLBYyTtefhmMFCcfrRlLuUTTtAzZvTtrxXdVCQqcHhvPpDeWwCcHhEgACGgjJFwWecCBbEfMYWwwJjLFflZbBjJwWWfFTtNhHnwtTwWfIoFVVWXJzZuGYlLZzLlyeEpPgQqUDdjfYCGgTtIZzKyYDNnvVkKfblaAhEFtiwVvWIUuZtEemMVvYytEeTTkpPlLRAarjszZYyzNgJjGpPgFVSDLloOIinNRrloOTtJjbnNkKBVdDXwWNSsphuDdUHkPpBbnTZFrVdDfCcFvCcbZreoTEemMwWJeEjEZVvsSAaSFNnfyYzLpPWzqHoOhuUQecgGfKkFLWaARrIOoxXyswWxXqQpNIisBswWAaRrchHCSbXErRwXxWeiIXrRQcxGAusSspyYhHMmPBbIkvVKGgZzlLvVuizkKvgQcJHhhHjRrymMYEdDeCOZQvVdKkDqkBbswmMWSNnZjJuUFlIuCcFWwvVfUpPiaPaOZBWwbGgzQiIqjmLlLIbBYVvyAauiIdDjpPJDdiSatTANrtkKvmEeuUiIQqVhZqQkgGjmMJwrAuUaFfZIizYytxrtTRrCXcCjJBbsrhKJjkHTuURrtjZzEPZhHzpalLcCTuUQVvVIpYWAawfFefiuUIFZPpzsSEFZgGwiIWzBAtWEewpFHhfPKDvGCcvVOXxoTJjezZPpEHVvfFPuUnZzgVvTtamqQiFYsUmHhsYRryJWwIjsSjJKXxOueEUokKENOQqoaAnZzIRsSlrRWpPAawqQPpLEWwNnbBcCwVOaAoOozZvVnqoOIitJudiIUALlSpaAaWYysSmNXyYxiIjJuZGgaAEaTVNnuUAaNnBsvVZGgyYqQwpPiwWAaIDBbCcdQqcCDxXdqQGkKsSmMkXOoWUumMxXeEJfIKTmMuUxfIiMVvMmyYCcoBVvPppPbOVAhEcCeLqGOceEOonCMpjJkKTbBtJDDLwJEewWiFlLDdXxzfCJjYlLXUlgGOoDdkgGKhAaZiIzOvUuRrQqrQGCTtcKIQqihtTiIgHhGBbHCcMKkGSeEFfjJsSsSsCyChWwHcUaNCISsiuDaWRTFbXhHIiwLlFYyDYHhydfLsqQrRFxUumKrRmzwDdbfJjUQquKkFXxdDLlRrWwNLbRYyXlLTMpPpPQqmpPCcrsWwrRSggGwskKmMbBgMmwWwWGHhSiIrRWwmZzMXxWGsFfptppNEZeuUEPpfFpqLlEEONUuFqLTtAalQfsHedlmMDRCcLmMIiXgGuXxUCoOWkKIiZNuZxXzDdSsYKfFMmQqkzZRZrRzryHBlSsRQhxXHGgKQqkMmSBHQqdDOasSMmAohVRrvtTTtIwWwWiwdDSsdEeHZAatFfWgGwTzElZJjVlbNnwdgmKkMydkKDYuUyYGvgGkKVEekKrnNRCjJcAamsSMDgKkhPRXxVjaKKoOPHhXxnsEeQqfTKkELlFgGdBLQSAaszpFdDVQxXqvVQMQqeEVUuOoQWfciICEeFfNnGbbBBduOofFFsSBbqQrRfNBbnUnCZzczjJjLplLdDquNnURrsSdAxuUXtTaDtrRTKntqQUuTNknHEkKFZzfSrXxMSrRsSdcPpbmMkKTtBbgGkHEehzZGscCBiIbjJwlLIiWPpSNnIwWieDipCOtjJJjVTtUuLWwlrRLBblWMsruHLlFfhniIkSsmMUPdDZzwBbNFfSWEefFtVvfFzZBbTdDpKBsSmMsqPpWTCctqKkQSBbBqNnfDdFmYymMcsTtyYbBskKuUQrNKknyqOfFouUBxBJcCkKSUYTtyTQHTHhtXxATtUTtFfoORXxuiIUaeMhHHbzZPqXfCcvVgGFrhjJOaVdkKXxrkdOoDpPLfBbnNFeQqoOxeTdbBDtjlEIWSswiZQZzqPKkXyYGiIgtTQLlqxIifWeEwTtiIsSoOFGDdSQqsVvuNTtFXjJxgGBNAaYeEExXlLPpYyHPphHpOoPSTKBbxXzZfHGEFfemFfBjSOaAQqajJsSjZqQBblLLlzdDhHIiMDiDAlEyYtsSRoIpfFrnNjJRPlEDYWgGwFTtpPgcKkFfCGjJnCPasSALtTVvfFnkTubcCBipgCfuUFcGSslLVvFAhHfFazZfFfFfAdNnvTtNoQqzZDdOjCcJAdBbqQnNdDDYyODNdoODndxzQqZBvPxXYyGgEepVbLXxDdZdGVCQwWtTqcoDYzukAEeaKATHhVsSoOydKLlkYyOoLGgSUuqkKQsJjWpgGXfFxJjlxYyRMjJqWwmMyshalGgLAarRAkKHfWwrAtGXxbaVvAMmaTtgdDGWhBbHwoOAFjPpJfEehHGgVAIGoVBevVZzENncCLlpUsSsSuiIPMmHhTtCuUnpPpzQqZipoOcczZCLlYbBypDyiIqQRLlrOocCBSqQqWwYmMEeyylLYjfpyYPztcCyOoYgGTyaAYbBIzjIXnNxRVvrRIiiiwWIPpgTHrRxUrRuHZzKkfcCFhHhpPyYNnnNjvvVSsVSsOoRSsrJHDdLrRlfFiINnUjcpPCHqQbBGAaGgMdDAFcCvVhHfGpPgaxXTtsACsSsScjJjJsSaXxPpqHXCcwkKsmMSsIiWnNwMmssJcCdDJIiAatTjGTtcRrtuUUiRgiIlLGWLlsSoOQqoOwrJJjdfHXIzZuGMPpmgkfTrRPIiSsiYyIUurRHhJvcCeEVseuiIvIMcCnNmgCxXcDdVvgXxGWDtcCTOodFfCMXpfiwqYjJOornNkthHhBbHmOoMKKBbnfLEeaAovFfGghHNnlLweEjvVmMHhwWgGcbBCMmwWMUpPuljmMJBbJjLLjvVhtTHMmJmGgXMpPmgZAFSsHhfoOdFfDnmkKjhHJZPpBwWyYEeOrAaRdXUudDqQIistiIYyTSRcCrsFIpPpPTTPBZzZzpEefKkxsSXFRrWwnpPEeTFftlqQOosdDSZzLImMiSsdokKOIOJluUWnGIxXjzWwcPpBbFfCOQPMmpiIHzZgABIioECwmMEeWjJoAJjaoxXmUUuqbTLWwKjJkltbuUGgBbBgVvhHWxLGCcOoggsSLlGeaKCQJjNqRRGgQqlqQiagGUBbFsiEeIuRQqgaTtAPpMEeVQPpfokKpXxfFcCbuMhLVzZvWwlVKbBkNnPHQqzseESiSCGgPsfFsWwSYyJhlIiLiIrRHjuwWUfsgGEUuvVAsPkKaGAaqQQqgAWwpiISTtLlkaAKTDdHhNnSoBbYlLGLlkKgQvVEpUEeyYUqQuoOrRsJjHhiISuUpPyEeYQFfquNVqQvvjwWJOqydDYpPDdYDdwLqurSkKEMyYQnpKfFHhzZkibxXBIyYJCcjJhEeGrMZizStGSsdDOOIQqqkvVsiKBpPbVakKgGIXxijJTtXFfUuPvVxhZnNHcbBsSChGbBlLNRrnDdjUuoOmMcpqhtDzwYsSfJjPOEeksOoofMmFOAKNnkjJaRegGEPocCOMtxXeEEeiJxXCXxcxhnNtissSdDsJmMBjfpPVvVvRTzHhZbBQqzZOoFfOAaRrBbeiIEfFBRrkJjKZgOosSGGShHsDdoRrOSsRrrfaARpxxXXJjPpPMBSqQNFfnFqsSyYNZGEkKLlDmMEeqQJjgGdDpPBhHbKksBbGQqvTtgMmGozZkKzZAPkKlLpRrFhhHHfLlIKSsoMgGgGtTnNmvkKLIpPBbinNmJXmXxOfFhfFCcfLtuUTrmMwWRlgrswWlLlLSYyKMmIiRrsSSskYgYJjyHhgGGeEprRPpErRePSsoOjJAaSeEHhsDdfAaFRWXEBbyDMmjQqJdLlYmMRhHxbBkcCZzkhHKLlcCBbestSsAKkgGMmDnNSsqQlLdaxPyYpFfXpWwBVvxypPYQyEeJjQqwWNnYEeJjAnAiKseErRdrWwvRrhHyGJNEeyYCZxXzHhpKkIiqQEerxXihHxiIXpuUYcCoOyaAWVPpxWwQjJHhqSsNYyDgGYysrRmwWwWvkDdFHdDhGgQqbBnnZWOQqowTLSVYGcLJOoLlbCXxyRyHrXxTNjCcHhJjtTgGhoOdKkrieEIDdRClLAGgTlLuUtaLOolrRJjoOyPpBuKtzZqQTUpPpPukUYSnYyraARIiKkNzZsgFfMfFmRrRfxyWwYAXxabUuPQqfFZdWlLFmwaAaApKkPWKZzURrkAaeiIETMmMuUTtmtxXHhAdaMmfOoFYseTXxtUubqQtTFWOowfgoOGUupPLliKkYDdysQqoNnOrRcCbpPXaAxVvBDHhoOZhHcCzSsqdDQvxsCQVvnRrNZcOBbqTONnXRrPpOoxiIaAJjUBbsSUuNLLllFfoXxOGcChHcMmLtTeRrLlGEeglZzpPNisSITNntvVtUuTvbuFfhdqQkYykKKXxDejJjjJoQqHXNUuGXtNnaJjeMSdDeEgquUEcgcCjhHQqKoOJmjJCcZysSYlOcCoHhLSeEaAOfxXFoxXWwzZPfMmwWQqfFaAIioOEeufFGgFfcXGgxCEZkKVLFfyYlUuvtTIiGgiOkKUrnkKNlLIuUYmMywTtHhKnULluNkdmfFdqIidYyDQwWeEoDMMOOaAWwsSoeMWwDddDDdxXIizZrRJjavVENnehHvHhbBKPIiUuTIiWCcwWHhuqQMmyYIzZysSYiRrmFcCfFfRrMcKhHkyziDdIyJjJFBXxblLBbDdFsvVimMgcCGCOWwBbRFfeVvEYymeEQqMQqiIUuHhkWcCTtuUsSrRmUuMVvxVvfFXTgPpxXvVsUuSRrRShHHPmyYMpEeLlrlLiTteEeXxwMtXxsEexXqDdUuUuMmGgZzQhhHNkUpPcXNnxdDCsSwoOWjIiShHsgKjoOwWmMUXGgxuZzJjvVzkKnISUuMxAaXmsiliPwGtTgWmMwWJKkkpPxmMXqQEKXxXxfenNEFkMmelLvIiwgGyYJjWHhwyhTtHoOUTDsxXmFfaFfCcPpsBbSFaSVvsAPpKkxXyYtTiPOopJQqoCqQcSsVJjWwjJYyWQqwPppGgPNfFZznPjJpywDdcCTtOokKLlJwmMbBcrRCzRtTpPAarZSyYYyeTMmqbBZzhHQqHhdKkDychIiHLyYJnGdNQqnccCCDgJiIfiUXTttWwKkgGtTStTsXrRxmlLMyLPhHplJrBbtTZzRGjJlIFfioOcqQCLlSsLaNnAcCmxXMJjCHZzNncwVYyoOGPbBnNBhCcHtTzWwYyZzZHTthlLqQCXyYylLbxXBgGzZclCxXohHOnNbGhoOwYsSCBbYyXCBLlwWpdDPFfbcCAhHaFcpyYPiHhICFeEEzZcCdqQPmWwBblLMAaeEgGtlazZeEwWrrRcjJCnMmMmQqAaTUuEesSteEiuUsSxXPpIOhDdHoLHKYyWaDFfdAcCNnnNQgtuUTyHhYkZBNrRxXAaRrjJBbtTCcOokKnUuQqZzINyYuzZhkKHNnWwuUrcCRUxXGLlEeoOGFPpfwWQrlLRnRrNlNnxXsSLcqMNnmQnZxrRQqIHhiIiTtXPZzWqQwKfFLTdziLlDdLUulIWXxwweEbBWMmZDdmMDFnfFKhkKHWwIigMjJqhHPnJjxkKXdMmyYmWfFCWwceECcqTtRUuRrmMPjsSJXximdDsYwWyglZkKLUulzKkFkbBLYyxdvVuUKkDIidDSliILsnWcCwNuUXohHjNnJqQNlaANVvnDEnNvVJjQqPpmVoOvyaAAlYyLacCNnnPXFCcTbBIitfrcCexXElLvVweEZkuyTtjHMmkmMrRMmcnXtxXTBbsSxwWZzdIiEiIAaHaAhHJlLUujWvVbBhaOvVLlBbIiSspPopTtPcCcCBbVmMJjvEHyuUxXIiJzzZkKAauUtTZnBEedDbMWQqwmsQlLqTtgPpdDKkGTIiccamVvMNjAtToONxXBbCcnaAtTHlsSLmMCcjuUJHhpPRsSrTtBbAcxXQqdDCEepPayngGNYeEskbBRrRBbILlNsPpSXJjvVxCuhDdzZuUwfrRBUuYybAIAaivVcCGgaGTtgxTtXfvnNVpSsGPpHhgPfFmMFkKmtxXkKfxXMgkKHjJhGzZaAmGtNOVvCcrkQTRrtqKdDLltTeETIDAOoadDnnNNPpdiUWqayTtYAkKTtmMkKfFUJyYwAaJPBFXlLGTnNlLuUtYypELleewWaAjJYzZysVkpcCPlLqaAsoOkBbrJjRKMscCjJSiGgImSoOuVvmMCcjYqgjimyYMILlJMmEebRrXVvxiPpuUIJjYyPYypIiYnNPIipdQqDyoOVKJjsSkvGgOobWwBVEeFfmMIBbXFfDrRKvDdkyYKZzdDSiIOoWEBbewQgoOBKkaAoskKSFfEaBbAoOluUtTTkKthrgGRwzZWAbBalyYVMZJjztdDXXxxTmfFSsSsaaAoOrRtTVvHHhgGRriIhAKFfXxqQkdDOolLEeTtWRfKkFrwvuUvzocCODcCceECdXxsSYbBZzXxmMGgkKTqdDQlgAOoJjaKuhSsEeDdHKkFnCcQqhNnsSoqJovVNnVvOzZdDjJMKkqQkKIizZXpCqIiQyYtTjKkJjJqjJIIimaAMSsqCcQEeRmMWwmMSjoOCsScsFfSBbAaoIiOIljJLiJGgAadcCAaPoOoytXyYjJxUUugGuUNnnDdNIRJNdDyYnrLJjlfCcFLlAaMmRHhBbYxXyYdkwWWwCuUcLlJjEegGrjgGRrCBbJCRrMDWwyVfAaFRrvLXJjxmMkgoVxVMmEnDTterHhVvpyYBxXtdDagGJFfjAHhTtwWUwdDWnNyOovHhVTmMbzjJZBnjJiIPRrCctTaAUuICcipDdjWwgGjZzrTOotIiOZzoWwEeXnNxMmBQgGjJOxXWwRodDYyOrCKkuUgAamqBbewwSsTtGiuWwUvEgGFAapPQqiIfMjgAaGbBWwsSFfQZXxsSOoZzWDdMYKkNnpPXdDlLUVvuhBbRruUDDLlzZddsSxXwWjAaJEeBgGbfFGgzZHMmYykKZlLGgXxsevVaAvVwWUuWwaAPhHWwjJhHJxXiiIIjpxupPUPAapRrZhHSsGgvVzaAXItThAaKktTxXjjXxJUFvVuUEewWiIuUGakKjJdDXShHCcjfGgIYSsTtyiQqFJGNngsGeEMdvVDmgoIYyJjUuiPrRpCchgTtqQGHUusacjdDJCcsSuUpPyYjJVvMcKklLQqQaAnNsJjSoZzOLlzZxXqQqvVRYtbAaBbBTyuUmMgGKGglLciznNZICdDuUkKNngGKjJdDHhkBUuiQwWfFmMcIbBXxiOcCgxXsSqQrzZLfFlPpPpmMAEeubBzZGfnNaMmAZSsYEdBbDSIiBnUumMNMmbsyVVvpTtPwWvYzqQnAuRryYHhUzZOojWdDNtTnPpuUwAaIiZOoZzLlQqbbBrRNntaAqQTvbBqbBKkQGgOoVqgpkhHKbgcCGdDZvVWwWwsKkdzZMxXUuzZvqmMQVUumDdJjOqQiIoQEelLhfFHeErRCPpcqaAaAfUuUuFTVdDHqQhAauUvKkpIiPcjJCLlJcCJjwyYGgrRRbmxGgvVXcCoOyYxXGQFfDOZzRrlKrRkFfEnNeNIirGgRnxGgqQvQqVkKQmxvvVcEemMCAauUxXSNnnNLzZlfFgHPphrRPpGgvQqVGMmjJXvVxeEaqQAsrRTODdoIieQqbBSsEoOtsTtSIeQqHqLkVvKcCnTtCcfOoFNzZSkKpPgGdVvTVvDUcCudrRtbBGxXgpPDnNdTtrEeNCcoOlEeeELUGgWwnNiUuIzlyYLLlYyCBblLNqQnOcWHhwaACrRoOopPVvdnNDbNnBzEeqQCuUDdeEVvcZNncTttzZTMDdmiIQXMUumxzZtTgGVXxDdvVeEWwfMUucCbBnUOgGoiIuwWUAGRtBbTSsKZzQqCcWwKkkGZzgteElrRiAaIZzRMmrQqMJjJjumMUmHhjJwWmMSjdDpYypPfFyYzZkMKkKMmkmkKXCcRrxLuHhvVUPpPpAafYHlLhpPdAaDPoOlGgLlLgCpJjPcrRGOopRQqeEmMjJEKXxkebBDDfFyYdZjJJIijdDzGgMmKkKkrRvICcIiiVGgwZDdztxXxXNnBOoSZzmMpyYPbBSDnEeyKkOUXxtRruUTzZupPoYycCQqHhHgGnNMmLlNnMyYAaGgnNmAQqWwjJaJkKikKIcSEeoVvOLlsLlQPpqfFuUYyxyYiJjIqQXCjyYHoOvVvVkKhUuyPpeEIiRrUtTOovVuMQQqqQqmWwcClSuUwbBRCLleoOEcfYnNyqQBBbCcbfFaAyqdiItTDQYDdnXxNiLlOoIIiJuUuRroxXEeOrRowWVvOqQTeEtpgGoZQSsqXxzeEaAKLYylqQVxXvhsSsSpWFfwiUuIbyYBPdDSsTtnNGgHkKkKWwiIkFfgGPUupvqQsSAjJaYyVrsSDdRwixXIkwWOMmRrsSSsWwuUwGkKgCcWGgZQtjUuJTqFTtlyYLcgGCPUFfupGZHjSOoLlrRhHsjgGwWWwtTrRjKzZkJEehSiIIiSxXsJjZzkKEelYyLVvNLlhauUAHeEiInsHkKHNWDdwnhfFPDdIiDdpQNkKnbbBBqPoOKiiGqQCcLlgzZDdrRGCcgtWwqRrQjJLwMtwWJjcpPCcCTgGhCcJjHniIlLNJZzjmWDSsqQNndqQMmmMqNlLnEeNnTyYuUbeEBMWwmdeEDNnYFfRrRryHhzZPpvVGgGDEYSsyedsShHSsVWwAaJjmeEMiFftTyZzjCJwWdjKkJDKvtsSTVhDdKxFEefXkqQHpFfRrMfFlLmOnNoPJtTjNvVnaYcCrRNnLlFmeEMfTlLIvByLlYuUgGGJxdDXjbLlBwWgbzCJjcZVrRXxOoeEBiIbcBbCDrRaIYgiffNaAnGZzeMmEJaqUuQBxXUGwWwwWqQWyYJeEjqjmPUmMsSSsUEeiviIjJVBbDFfdrzoOwqQpLlPIDdiWwKkWWGgwxXXuUxqQnCctThIHhiZzNjJeyYEJjBbBUUOoqQsoOSuUuvwWYyOocCpPVjJLlcxXCEehHJKKkuULlhHBOobkQqRhHDdGyYwWGguUgxXbZzBPCckKFMmftTgGWLmRrmMQqBbLpPCcOouzZUzZlMNYAamMyJjKgZzYyYyHhvVdALllLaDtnUurKkRdDNqQkKvVnDdtXxTBfaAzUuZzZKkFwWWVPENnqQqwWneEQWwMbBfFvVEywWoOYvViIeRrlLVvFfRwlLWXiUuHeEhlLEerxDVuUvdXlhHtTRrLRIbBqQisdrhHRKkNngXrRsbBSRrmMkKbBWwnaAhHDtTXxezRrlBMmAazUrRurRhjJHZdDbUarEPpebBBdDbcEeFfnNhtTexXEXxSsXxaAqDdQstUuTPpSfFqQjMmhHjJGgWwYyYyJvSsOAaorRGiEeeDlLKsSJjMmkyYdPpxXEUmMGgpKkZzgkKgWwGNdrRDLlJjnqQGOtTopPyaAqQgGaAYAYGgyYyZJjdDpPzUXxzVvlLZAbBajTtJmMEeuLaAJjLIuUillTBbtTaAtSsjfFJHFfPpEaAeAlLOOzZLlhHooOotapPKjJkUwWuMmtTCVvIisSQqSaAsNzXvOomMxXxGgalLAlLbKkBXDyYLqMmQHDSsdSsvyYVOJjohoZqQIitxXaAxXEcCuRrUcCbBeDdLlBSsbPpBbKkYNYeqQEqQynJjyhxXHHYytTWiIwYyWwZiIrRSszKFfZaAAcCapKkPlSFfXxOlLuUsHhiHhkKvVCcVCaDdzZhHrRkKfFINxXnWwiIXxivVvVAdDceEvIxEeSsFOofXxfNnFqQkKDKMKkmgGkdRSUuPpiAGBbgwgGDdSstTKhHsSknoOeENtnNTKkDsnNSdWmpPMBUqQLbKkBNnOotTtrRMmLllLTHhUHfFhbBIiEeCcOTLZRpPIJaaAjJeEAjuIWwiICAaciUCBLQJjKKkQqkhHqpPlbYWwyWKkyYEewMABbVvaEemMbBGbBJxXjgRrAQMXxmpPQqDVvEeHhvVdqyYFYyfaGgJQqjvJjVVvgBuUKkbfFPpdDhHmMGDAYyAaaXxxETyYtexXxoOxXWwRrHhTngGNLlYylLuUtnNRrNnXolLieoUuOLlzZEAamMmBbeENbByYnFfYyYXxyMfFxXIcCLfFpPJveEMsSYZzyRrGgIiTWwGOoMmgOocCNoRrOHhnCccgNKkcRrJjEeCnGNMmqQsSNnnJjwpYyPNnndDdAaDPCLgGlqQWhHwtTqxWDdhHwXjjJRrJFfyYUuNnqQCFfnNcQqQVvqOoqCcYyQCeyYAaQaAqEedUdsSDaAfFupPrRqQHhDEHhvaAajsSJAKkVJjxXGgcVvkKVVUuPpGPpxhRrHkKvVKMmMmLlfFkqTpcAaAaCHhPcCGglLVvtvrRVvHhrRVLlcgGXZTtzxyYIiCFfARriIaZzTtHhuUZuUuuUUTYytjQYyqJJAjCclLZzZzxXLlvwWhhHMmHNnpfFDdPVJjHhtTIaxXSsAOoiPpsSwyYxkKXvVWrSEesRkKOwKCjJBbzZIhHTbByLlYsSjTtTtfKkFwWuYyPpwWmMeEXxeEvVTtDdKkygNnGvVvVsSaZBbzAiIHhQCcqEhIJjilLlkEeWJjwXxoOOobBvVvVJjKVKkYyVvwqwWQgGdDvNnVHiIhPpgWLlGgTJjtwpgGPFQqfUSuWwuOotTpPhHUukwWAaMSsxXcCyYmQCcNnqOpPowWsRrSvVFIifaAbBrncCVvSsNgGfOoFnNRiIKKfFkJjsSHhCcHhOopPcEeuUCYFfYyNnPpdDyvVjPqQpxrRXhFfHhXxIiHQqhHPmNnaAzvVdDZMoOnNpomMZzTUutuDrRdIHhiZzUTfFPprRtpPdDZkKmMzNnaLlsSWwAuYyVvrRNnUVUuviIsrRzXxEeZqgGOjJCcoLlNneEpPCcpPRrWwpPqqQXxIiQLlelsSeELwWXxlbdDOyKkYmMsMmiISoBLfpYlLyVvPFoOjiIJQagGARmWwiTtqOoQIvSsjJcMmCFAawBbWnNiIKkOvVPklLKbKkBpoZxdDXqQlLzVsSvBZzBbtTUuYmMydWwXxDnYpPyxXNTPDdpzZzZiIbBVvIiAatqQOoVveErbCVvFfcBRbRZzOoreEiFfaNnTtAUuhmFfMFfNnrRZzYyHIJJjjpneENxXjlLwWJeEWHhKkwbhjJbBoCcZwWzZzOlLyYHmMBVJjkIiKbBveSseAWwaiIQIiqGgJjWwSskzZolLHhOaAkKEeoOhvVxXHVgGvOVvovDwfWKkwFuUkKkkKjJtTQqwVMmUulLvPpvnRrNTtNnIGtTgesSEGgCgGDdrRhWwHciIibByYaAQqHSshDdJCcjVOoWCaAIbBircCRnCXxxXcNcjYyfFUuDlLXxdwWJqjMmJYStTsCcTtDEedbBIiAapPEekKQqNnxjJXJjrRyhrRHTbBmMpRPCcZzpeEfFrTTNnttfFPfFEefFxXNAaTtdnNDaAnCcjJKkPgGpWwdjJDDLldtTGgJjrRGgGgFfWKkkKwZzgSRrgGcCsldmMDLxXmMqQmMeETWwUzZeEuBbGvVbBuUgQqOxxXXdDPXxFfmdDMpWCcwGgCcoKwWLldCcDnNkKxXkUutpPnNeEpoOJjPLlcCQWwBbkpQqmTtMPEeMmzZveEVFfMmXmMxqQeEArRQqaqSvVszSYyyYsEeErRVxoOXvMbzZBecCEYyGgDdvVmuxXUPxXYypeZzFDaGgIiAmBbMcCdFfXxPpdJjDfoOrRKnNkchHFLlfCSIiDdPpAaHxXZUuMmBbffEekDdKPpFIiKkYyHelLEhqrRQxmMjCczfFZXxqJjTCctQnNQIilLqmTuUtfQiIqgGFMHMFWwfWwBbkKmXKmMkNnxXxhmdDdDPpMJjEfFTtedDQqheEjJvtjJBbTVPcCphHmlxXLNDvVdttTTnMNnqQHtTtTXDdxiFfXxIEeQqclYyLvVPCcpChHobBOxBIibXdDyDdjDdJveEVKYyCylLYKkUuCPbBpoOcJmMjYybLPQaAqplBTtYyUuoOBEeIiUBbsSZzNnEerRxOIioXXxKdDRrxXkrRKkHbQqBhkGuUgjJNUunKPcCyoOYXqWNnwQxVvZzxMmYyGjJglwWSHhtTsLJjvVTeEbjJfFbBBuPpUGgmMJjtggGmAZzaMClLcqQwCcWuULlBbTGxXOoglLpPtzoOzZZGQqaxXAQqmyYMkKTqXxkKQyBbYQqsSJbQqBqQUIiuuUXMbBwWjJmvVRRrgQOoYyyYqUDZZzlLzvbBaAWwVTtsSNnXBGgmCchzZHBbMbWwBbwEeLlQyPpEeYqfFOoHhocCpPdDzOoIkHhMmKxXYyiZODdvVkKojJOjCcGgJLlULNnxXOHhomqkKQzzZZlFfLQWwqWwqQCNnBblLbBaRrAcOcCyYoDZzPpeElLdZzjJQHhqhHwWeFfUedDEjcCJzZujPpvrRVdcCDryYRZzlLoOJKfFYyHhvVeujJGgUHhnrGwbNnBWgxXRIhHVsSFtffFAaNnGRrnNRLsjJSlCcrRrgbBtTFgGhHTlmMSsLrRsHhAaSaAflOowgFqQfCchzZlqQLvVApPgGXxgUJjuGgGDdaibBiIlLvTmMmpPMzZoDdOmMtrRsoOSpRZzvVryYPdDSfFsDdpPqdOoDwWQikKIvKTtuUkVhkeoOEKdDHPpVvSwWszZYECcTtgGyYeyYytQqTUurTiIPkKeEhmMHpdDtRJFfBEebiIjlJjZzdAaDMmcChRWSswrHLIiJAajAaSNcDNndCnsIBbiKkmMrLlRrRDdVqQRrcCMmoOlLfSWwsHqQSsbBAaZzbBPpGgIiRreuUqXxQNnXxEhBMSsmaOoxXiIWwYybBvVARrVZzvHYyXxhTtqXxgGQRrkfFJjaAJjKuURgGMmrKktTmMcCFfsCcSMmLhCcqQHXxlbRrTtNnYuUjJTtCcyUQqQqCiIcuCiIsSEbBwWeuUtHhTLZcVvCHZzVvrRVJjvhadDNnbPBxXbHhRrYyVvpwWazZAbBHhhHskaAKSDtTdBXxAQkKcCqbBxXxbBkKXrRdDSiYyIDdswWbbBxrRXiItIijVvUupPcCeEmMhHJkKAauUDkKoOdghgGHyoOoOYsSHOohmMRrbBHLeElbTtIiBhvUuVGFftTgSQqWwQtTZzqKBbLlkMjJfrRFmkAaTtKzZpQGoOOogqdDPjJpPfsSZzFHhrRPpPpyYsSh"""