From fd1f1a1fabed77d7c9b0cf0c3b35e74f32e5cd31 Mon Sep 17 00:00:00 2001 From: Dane David Date: Thu, 3 Jun 2021 13:39:56 +0530 Subject: [PATCH] Replace rwcarlsen/goexif with dsoprea/go-exif Replace underlying EXIF library (rwcarlsen/goexif) with an actively developed one(dsoprea/go-exif). Add tests for disable options (date & location) while decoding EXIF. Fixes #8586 --- README.md | 1 + go.mod | 4 +- go.sum | 36 +++- resources/images/exif/exif.go | 230 ++++++++++++--------- resources/images/exif/exif_test.go | 89 ++++++-- resources/testdata/sunset_without_exif.jpg | Bin 0 -> 72229 bytes 6 files changed, 235 insertions(+), 125 deletions(-) create mode 100644 resources/testdata/sunset_without_exif.jpg diff --git a/README.md b/README.md index 66b1f2c1366..0a1fca65ff2 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ github.com/cpuguy83/go-md2man/v2="v2.0.0" github.com/danwakefield/fnmatch="v0.0.0-20160403171240-cbb64ac3d964" github.com/disintegration/gift="v1.2.1" github.com/dlclark/regexp2="v1.4.0" +github.com/dsoprea/go-exif/v3="v3.0.0-20210512055020-8213cfabc61b" github.com/dustin/go-humanize="v1.0.0" github.com/evanw/esbuild="v0.11.16" github.com/fsnotify/fsnotify="v1.4.9" diff --git a/go.mod b/go.mod index 516b349a7e6..57d32a81b5d 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,9 @@ require ( github.com/bep/tmc v0.5.1 github.com/cli/safeexec v1.0.0 github.com/disintegration/gift v1.2.1 + github.com/dsoprea/go-exif/v3 v3.0.0-20210512055020-8213cfabc61b + github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect + github.com/dsoprea/go-png-image-structure v0.0.0-20210512210324-29b889a6093d github.com/dustin/go-humanize v1.0.0 github.com/evanw/esbuild v0.11.16 github.com/fortytw2/leaktest v1.3.0 @@ -46,7 +49,6 @@ require ( github.com/pkg/errors v0.9.1 github.com/rogpeppe/go-internal v1.8.0 github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 - github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd github.com/sanity-io/litter v1.5.0 github.com/spf13/afero v1.6.0 github.com/spf13/cast v1.3.1 diff --git a/go.sum b/go.sum index b410a774f63..81e653ae336 100644 --- a/go.sum +++ b/go.sum @@ -102,8 +102,6 @@ github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= github.com/alecthomas/chroma v0.7.2-0.20200305040604-4f3623dce67a/go.mod h1:fv5SzZPFJbwp2NXJWpFIX7DZS4HgV1K4ew4Pc2OZD9s= github.com/alecthomas/chroma v0.8.2/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM= -github.com/alecthomas/chroma v0.9.1 h1:cBmvQqRImzR5aWqdMxYZByND4S7BCS/g0svZb28h0Dc= -github.com/alecthomas/chroma v0.9.1/go.mod h1:eMuEnpA18XbG/WhOWtCzJHS7WqEtDAI+HxdwoW0nVSk= github.com/alecthomas/chroma v0.9.2 h1:yU1sE2+TZbLIQPMk30SolL2Hn53SR/Pv750f7qZ/XMs= github.com/alecthomas/chroma v0.9.2/go.mod h1:eMuEnpA18XbG/WhOWtCzJHS7WqEtDAI+HxdwoW0nVSk= github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo= @@ -182,6 +180,23 @@ github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55k github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dsoprea/go-exif/v2 v2.0.0-20200321225314-640175a69fe4/go.mod h1:Lm2lMM2zx8p4a34ZemkaUV95AnMl4ZvLbCUbwOvLC2E= +github.com/dsoprea/go-exif/v2 v2.0.0-20200604193436-ca8584a0e1c4 h1:Mg7pY7kxDQD2Bkvr1N+XW4BESSIQ7tTTR7Vv+Gi2CsM= +github.com/dsoprea/go-exif/v2 v2.0.0-20200604193436-ca8584a0e1c4/go.mod h1:9EXlPeHfblFFnwu5UOqmP2eoZfJyAZ2Ri/Vki33ajO0= +github.com/dsoprea/go-exif/v3 v3.0.0-20200717053412-08f1b6708903/go.mod h1:0nsO1ce0mh5czxGeLo4+OCZ/C6Eo6ZlMWsz7rH/Gxv8= +github.com/dsoprea/go-exif/v3 v3.0.0-20210512043655-120bcdb2a55e/go.mod h1:cg5SNYKHMmzxsr9X6ZeLh/nfBRHHp5PngtEPcujONtk= +github.com/dsoprea/go-exif/v3 v3.0.0-20210512055020-8213cfabc61b h1:Ry/3m2rXSlKtTTfjfzf6JHmCfVQlR2Kp+hg/sLMDv9M= +github.com/dsoprea/go-exif/v3 v3.0.0-20210512055020-8213cfabc61b/go.mod h1:cg5SNYKHMmzxsr9X6ZeLh/nfBRHHp5PngtEPcujONtk= +github.com/dsoprea/go-logging v0.0.0-20190624164917-c4f10aab7696/go.mod h1:Nm/x2ZUNRW6Fe5C3LxdY1PyZY5wmDv/s5dkPJ/VB3iA= +github.com/dsoprea/go-logging v0.0.0-20200517223158-a10564966e9d/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8= +github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd h1:l+vLbuxptsC6VQyQsfD7NnEC8BZuFpz45PgY+pH8YTg= +github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8= +github.com/dsoprea/go-png-image-structure v0.0.0-20210512210324-29b889a6093d h1:8+qI8ant/vZkNSsbwSjIR6XJfWcDVTg/qx/3pRUUZNA= +github.com/dsoprea/go-png-image-structure v0.0.0-20210512210324-29b889a6093d/go.mod h1:yTR3tKgyk20phAFg6IE9ulMA5NjEDD2wyx+okRFLVtw= +github.com/dsoprea/go-utility v0.0.0-20200711062821-fab8125e9bdf h1:/w4QxepU4AHh3AuO6/g8y/YIIHH5+aKP3Bj8sg5cqhU= +github.com/dsoprea/go-utility v0.0.0-20200711062821-fab8125e9bdf/go.mod h1:95+K3z2L0mqsVYd6yveIv1lmtT3tcQQ3dVakPySffW8= +github.com/dsoprea/go-utility/v2 v2.0.0-20200717064901-2fccff4aa15e h1:IxIbA7VbCNrwumIYjDoMOdf4KOSkMC6NJE4s8oRbE7E= +github.com/dsoprea/go-utility/v2 v2.0.0-20200717064901-2fccff4aa15e/go.mod h1:uAzdkPTub5Y9yQwXe8W4m2XuP0tK4a9Q/dantD0+uaU= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -208,6 +223,10 @@ github.com/getkin/kin-openapi v0.61.0 h1:6awGqF5nG5zkVpMsAih1QH4VgzS8phTxECUWIFo github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= +github.com/go-errors/errors v1.1.1 h1:ljK/pL5ltg3qoN+OtN6yCv9HWSfMwxSx90GJCZQxYNg= +github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -231,6 +250,9 @@ github.com/gohugoio/go-i18n/v2 v2.1.3-0.20210430103248-4c28c89f8013 h1:Nj29Qbkt0 github.com/gohugoio/go-i18n/v2 v2.1.3-0.20210430103248-4c28c89f8013/go.mod h1:3Ltoo9Banwq0gOtcOwxuHG6omk+AwsQPADyw2vQYOJQ= github.com/gohugoio/testmodBuilder/mods v0.0.0-20190520184928-c56af20f2e95 h1:sgew0XCnZwnzpWxTt3V8LLiCO7OQi3C6dycaE67wfkU= github.com/gohugoio/testmodBuilder/mods v0.0.0-20190520184928-c56af20f2e95/go.mod h1:bOlVlCa1/RajcHpXkrUXPSHB/Re1UnlXxD1Qp8SKOd8= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/golang/geo v0.0.0-20200319012246-673a6f80352d h1:C/hKUcHT483btRbeGkrRjJz+Zbcj8audldIi9tRJDCc= +github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -467,8 +489,6 @@ github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 h1:tlXG832s github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc= -github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sanity-io/litter v1.5.0 h1:cHM1wTJiOETY9LKRPd3tqUHGquaBaTteD1tZFesEoi8= github.com/sanity-io/litter v1.5.0/go.mod h1:5Z71SvaYy5kcGtyglXOC9rrUi3c1E8CamFWjQsazTh0= @@ -515,12 +535,8 @@ github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tdewolff/minify/v2 v2.9.16 h1:2Pv8pFRX/ZfjTRYX2xzcuNrkEJqU5TfriNJJYOeN3rI= -github.com/tdewolff/minify/v2 v2.9.16/go.mod h1:cjMkr4ZgFjqxXAQ1kR9Fm4l1046mmONd2g6yMzGuN/w= github.com/tdewolff/minify/v2 v2.9.18 h1:j5Is0sOGp4cxm0o3HgvHCWCvTtmKnfB0qv0FCRbmgZY= github.com/tdewolff/minify/v2 v2.9.18/go.mod h1:0y0mXZnisZm8HcgQvAV0btxa1IgecGam90zMuHqEZuc= -github.com/tdewolff/parse/v2 v2.5.14 h1:ftdD54vkOeLZ7VkEZxp+wZrYZyyPi43GGon5GwBTRUI= -github.com/tdewolff/parse/v2 v2.5.14/go.mod h1:WzaJpRSbwq++EIQHYIRTpbYKNA3gn9it1Ik++q4zyho= github.com/tdewolff/parse/v2 v2.5.18 h1:d67Ql/Pe36JcJZ7J2MY8upx6iTxbxGS9lzwyFGtMmd0= github.com/tdewolff/parse/v2 v2.5.18/go.mod h1:WzaJpRSbwq++EIQHYIRTpbYKNA3gn9it1Ik++q4zyho= github.com/tdewolff/test v1.0.6 h1:76mzYJQ83Op284kMT+63iCNCI7NEERsIN8dLM+RiKr4= @@ -627,6 +643,7 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -708,7 +725,6 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -720,7 +736,6 @@ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750 h1:ZBu6861dZq7xBnG1bn5SRU0vA8nx42at4+kP07FMTog= golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -927,6 +942,7 @@ gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bl gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= diff --git a/resources/images/exif/exif.go b/resources/images/exif/exif.go index 5406665cfe3..929c25bd378 100644 --- a/resources/images/exif/exif.go +++ b/resources/images/exif/exif.go @@ -14,23 +14,26 @@ package exif import ( - "bytes" "fmt" "io" + "io/ioutil" "math/big" "regexp" "strings" "time" - "unicode" - "unicode/utf8" "github.com/bep/tmc" - _exif "github.com/rwcarlsen/goexif/exif" - "github.com/rwcarlsen/goexif/tiff" + _exif "github.com/dsoprea/go-exif/v3" + exifcommon "github.com/dsoprea/go-exif/v3/common" + png "github.com/dsoprea/go-png-image-structure" ) -const exifTimeLayout = "2006:01:02 15:04:05" +const ( + exifTimeLayout = "2006:01:02 15:04:05" + // IFD ID used for efficiency. ID obtained from https://exiftool.org/TagNames/EXIF.html + dateTimeTagId = 0x9003 +) type Exif struct { Lat float64 @@ -106,134 +109,167 @@ func NewDecoder(options ...func(*Decoder) error) (*Decoder, error) { return d, nil } -func (d *Decoder) Decode(r io.Reader) (ex *Exif, err error) { - defer func() { - if r := recover(); r != nil { - err = fmt.Errorf("Exif failed: %v", r) - } - }() - - var x *_exif.Exif - x, err = _exif.Decode(r) +func (d *Decoder) Decode(r io.Reader) (*Exif, error) { + rawBytes, err := ioutil.ReadAll(r) if err != nil { - if err.Error() == "EOF" { - // Found no Exif - return nil, nil - } - return + return nil, err } + rawExif, err := _exif.SearchAndExtractExif(rawBytes) - var tm time.Time - var lat, long float64 - - if !d.noDate { - tm, _ = x.DateTime() + if err != nil { + parsed := png.NewPngMediaParser() + if parsed.LooksLikeFormat(rawBytes) { + return nil, fmt.Errorf("type not supported") + } + // No Exif data + return nil, nil } - if !d.noLatLong { - lat, long, _ = x.LatLong() + im, err := exifcommon.NewIfdMappingWithStandard() + if err != nil { + return nil, err } + ti := _exif.NewTagIndex() - walker := &exifWalker{x: x, vals: make(map[string]interface{}), includeMatcher: d.includeFieldsRe, excludeMatcher: d.excludeFieldsrRe} - if err = x.Walk(walker); err != nil { - return + _, index, err := _exif.Collect(im, ti, rawExif) + if err != nil { + return nil, err } - ex = &Exif{Lat: lat, Long: long, Date: tm, Tags: walker.vals} + var tm time.Time + var lat, long float64 - return -} + rootIfd := index.RootIfd -func decodeTag(x *_exif.Exif, f _exif.FieldName, t *tiff.Tag) (interface{}, error) { - switch t.Format() { - case tiff.StringVal, tiff.UndefVal: - s := nullString(t.Val) - if strings.Contains(string(f), "DateTime") { - if d, err := tryParseDate(x, s); err == nil { - return d, nil - } + ifd, err := rootIfd.ChildWithIfdPath(exifcommon.IfdGpsInfoStandardIfdIdentity) + if !d.noLatLong && err == nil { + if gpsInfo, err := ifd.GpsInfo(); err == nil { + lat = gpsInfo.Latitude.Decimal() + long = gpsInfo.Longitude.Decimal() } - return s, nil - case tiff.OtherVal: - return "unknown", nil } - var rv []interface{} + exifIfd, _ := rootIfd.ChildWithIfdPath(exifcommon.IfdExifStandardIfdIdentity) - for i := 0; i < int(t.Count); i++ { - switch t.Format() { - case tiff.RatVal: - n, d, _ := t.Rat2(i) - rat := big.NewRat(n, d) - if n == 1 { - rv = append(rv, rat) - } else { - f, _ := rat.Float64() - rv = append(rv, f) - } + if results, err := exifIfd.FindTagWithId(dateTimeTagId); !d.noDate && err == nil && len(results) == 1 { + dateTimeTagEntry := results[0] + dateTimeRaw, _ := dateTimeTagEntry.Value() + dateTimeString := dateTimeRaw.(string) - case tiff.FloatVal: - v, _ := t.Float(i) - rv = append(rv, v) - case tiff.IntVal: - v, _ := t.Int(i) - rv = append(rv, v) - } + tm, _ = time.Parse(exifTimeLayout, dateTimeString) } - if t.Count == 1 { - if len(rv) == 1 { - return rv[0], nil - } + vals, err := extractTags(&index, d.includeFieldsRe, d.excludeFieldsrRe) + if err != nil { + // No Exif metadata + return nil, nil } - return rv, nil + ex := &Exif{Lat: lat, Long: long, Date: tm, Tags: vals} + + return ex, nil } // Code borrowed from exif.DateTime and adjusted. -func tryParseDate(x *_exif.Exif, s string) (time.Time, error) { +func tryParseDate(s string) (time.Time, error) { dateStr := strings.TrimRight(s, "\x00") // TODO(bep): look for timezone offset, GPS time, etc. timeZone := time.Local - if tz, _ := x.TimeZone(); tz != nil { - timeZone = tz - } return time.ParseInLocation(exifTimeLayout, dateStr, timeZone) } -type exifWalker struct { - x *_exif.Exif - vals map[string]interface{} - includeMatcher *regexp.Regexp - excludeMatcher *regexp.Regexp +func processRational(n int64, d int64) interface{} { + rat := big.NewRat(n, d) + if n != 1 { + f, _ := rat.Float64() + return f + } + return rat } -func (e *exifWalker) Walk(f _exif.FieldName, tag *tiff.Tag) error { - name := string(f) - if e.excludeMatcher != nil && e.excludeMatcher.MatchString(name) { - return nil +func extractTagValue(ite *_exif.IfdTagEntry) (val interface{}, err error) { + tagName := ite.TagName() + tagType := ite.TagType() + unitCount := ite.UnitCount() + valueRaw, err := ite.Value() + if err != nil { + return nil, err } - if e.includeMatcher != nil && !e.includeMatcher.MatchString(name) { - return nil + + switch tagType { + case exifcommon.TypeAscii: + s, _ := valueRaw.(string) + if strings.Contains(tagName, "DateTime") { + if d, err := tryParseDate(s); err == nil { + return d, nil + } + } + return s, nil + + case exifcommon.TypeUndefined: + return valueRaw, nil } - val, err := decodeTag(e.x, f, tag) - if err != nil { - return err + + var rv []interface{} + + for i := 0; i < int(unitCount); i++ { + var val interface{} + switch tagType { + + case exifcommon.TypeRational: + vals, _ := valueRaw.([]exifcommon.Rational) + r := vals[i] + val = processRational(int64(r.Numerator), int64(r.Denominator)) + + case exifcommon.TypeSignedRational: + vals, _ := valueRaw.([]exifcommon.SignedRational) + r := vals[i] + val = processRational(int64(r.Numerator), int64(r.Denominator)) + + case exifcommon.TypeShort: + vals, _ := valueRaw.([]uint16) + i := vals[i] + val = int(i) + + case exifcommon.TypeByte: + vals, _ := valueRaw.([]uint8) + val = vals[i] + } + + if val != nil { + rv = append(rv, val) + } } - e.vals[name] = val - return nil + + if unitCount == 1 && len(rv) == 1 { + return rv[0], nil + } + + return rv, nil } -func nullString(in []byte) string { - var rv bytes.Buffer - for len(in) > 0 { - r, size := utf8.DecodeRune(in) - if unicode.IsGraphic(r) { - rv.WriteRune(r) +func extractTags(ifdIndex *_exif.IfdIndex, includeMatcher *regexp.Regexp, excludeMatcher *regexp.Regexp) (map[string]interface{}, error) { + vals := make(map[string]interface{}) + err := ifdIndex.RootIfd.EnumerateTagsRecursively(func(ifd *_exif.Ifd, ite *_exif.IfdTagEntry) error { + if ite != nil { + name := ite.TagName() + + if excludeMatcher != nil && excludeMatcher.MatchString(name) { + return nil + } + if includeMatcher != nil && !includeMatcher.MatchString(name) { + return nil + } + val, err := extractTagValue(ite) + if err != nil { + return err + } + vals[name] = val } - in = in[size:] - } - return rv.String() + return nil + }) + + return vals, err } var tcodec *tmc.Codec diff --git a/resources/images/exif/exif_test.go b/resources/images/exif/exif_test.go index 0cb9f670449..555d28c3045 100644 --- a/resources/images/exif/exif_test.go +++ b/resources/images/exif/exif_test.go @@ -62,6 +62,78 @@ func TestExif(t *testing.T) { c.Assert(x2, eq, x) } +func TestImageWithoutExifData(t *testing.T) { + c := qt.New(t) + f, err := os.Open(filepath.FromSlash("../../testdata/sunset_without_exif.jpg")) + c.Assert(err, qt.IsNil) + defer f.Close() + + d, err := NewDecoder(IncludeFields("Lens|Date")) + c.Assert(err, qt.IsNil) + x, err := d.Decode(f) + c.Assert(err, qt.IsNil) + c.Assert(x, qt.IsNil) +} + +func TestTagValueTypes(t *testing.T) { + c := qt.New(t) + f, err := os.Open(filepath.FromSlash("../../testdata/sunset.jpg")) + c.Assert(err, qt.IsNil) + defer f.Close() + + d, err := NewDecoder(IncludeFields("FNumber|ExposureTime|ShutterSpeedValue|Flash|GPSVersionID")) + c.Assert(err, qt.IsNil) + x, err := d.Decode(f) + c.Assert(err, qt.IsNil) + + // Rational with numerator > 1 + v, found := x.Tags["FNumber"] + c.Assert(found, qt.Equals, true) + c.Assert(v, hqt.IsSameType, float64(0)) + + // Rational with numerator = 1 + v, found = x.Tags["ExposureTime"] + c.Assert(found, qt.Equals, true) + c.Assert(v, hqt.IsSameType, &big.Rat{}) + + // Signed + v, found = x.Tags["ShutterSpeedValue"] + c.Assert(found, qt.Equals, true) + c.Assert(v, hqt.IsSameType, float64(0)) + + // Short + v, found = x.Tags["Flash"] + c.Assert(found, qt.Equals, true) + c.Assert(v, hqt.IsSameType, int(0)) + + // Byte array + v, found = x.Tags["GPSVersionID"] + c.Assert(found, qt.Equals, true) + inArr, ok := v.([]interface{}) + c.Assert(ok, qt.Equals, true) + c.Assert(inArr[0], hqt.IsSameType, uint8(0)) +} + +func TestDisableOptions(t *testing.T) { + c := qt.New(t) + f, err := os.Open(filepath.FromSlash("../../testdata/sunset.jpg")) + c.Assert(err, qt.IsNil) + defer f.Close() + + d, err := NewDecoder( + WithDateDisabled(true), + WithLatLongDisabled(true), + ) + c.Assert(err, qt.IsNil) + x, err := d.Decode(f) + c.Assert(err, qt.IsNil) + + c.Assert(x.Date.IsZero(), qt.IsTrue) + + c.Assert(x.Lat, qt.Equals, 0.0) + c.Assert(x.Long, qt.Equals, 0.0) +} + func TestExifPNG(t *testing.T) { c := qt.New(t) @@ -89,23 +161,6 @@ func TestIssue8079(t *testing.T) { c.Assert(x.Tags["ImageDescription"], qt.Equals, "Città del Vaticano #nanoblock #vatican #vaticancity") } -func TestNullString(t *testing.T) { - c := qt.New(t) - - for _, test := range []struct { - in string - expect string - }{ - {"foo", "foo"}, - {"\x20", "\x20"}, - {"\xc4\x81", "\xc4\x81"}, // \u0101 - {"\u0160", "\u0160"}, // non-breaking space - } { - res := nullString([]byte(test.in)) - c.Assert(res, qt.Equals, test.expect) - } -} - func BenchmarkDecodeExif(b *testing.B) { c := qt.New(b) f, err := os.Open(filepath.FromSlash("../../testdata/sunset.jpg")) diff --git a/resources/testdata/sunset_without_exif.jpg b/resources/testdata/sunset_without_exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4569a08fe361c7e6c1771c3c869df7341bbdc50 GIT binary patch literal 72229 zcmbSzdmvPK`1f=#TWh=6wi}zS*iuTi3sb3(Y~_+$ii{XD-p_MJ?f%~PpZ9%tw|3^tIp6a=XTG1$^Lakcb7tWAz(1^S zHf}K5z#1}S2H*bV)*c3!$*!7IgOHTchvp~Hrc7&!{l_zF7+zrpl}4a1~IV8+tw*q(X-a3|EXm0?EUN|JKax>QTTT9cT=X$nLBU3n)*`hWja4D zU!lKl{RRU=qm3L(D{GrATWxna?sjtCvzL4D(BUITk9l~WK6Cb*&v{?Jz@RI^S3|Ca zhTV#aj){$n7bM)yxFgKW`YrqS`wt#I`YZo&L1Af`sJx=`c~$kR*Kg_@8k^oWw|waA z`q(Y*`PAD-*ENJSOnzDTTYh2x+jWh{bq%HOU=&@~kfBHMXW01RBW5lhIbn_YD2D?R zRkcozp0qaLX8NCFW-YOJue8(snZmcTm%f_wfi8`?vj4jaJN5r{WnV7r-|MPojU6@w zU*53sEHGnCvM*W%lTuRhxf?Q@J8RQQF=SSM!D=o{#O>;LX` zJkK*=X1j&zuB@k=d;XrR&u0^iUtIH6t=1riWk3_T(I64w&GMP;R)xdohkva15pKHN zBbcC!$$S&7E5K)440&buqB?pxLx0z=j_&l&Yv9b*ZCU4&!?GFt#L9oZL}oSbiq`;3 zefUeiW<{>Mer=L`r==+iccwC*1QqHHu!1of&1b@I2bD^dKX%Z84w$EhL0xBD;q*uL zvuc06EKUqJ@9B@HQ<-RtT5L75!@@(kd+&lAL4m@~&^hc`wb6#W@>Cpa*)gm3gj$Ty zNNmr&b6Fhcq5N@(752llZH?WyN2|QzheiZ+Y^I@XR?$V!y@}=zp0X?W)T$(d$2ptjxO9j?8xG09H`iT` z?VQ{v?W?B@uy%{%yslTLdWBTqpmA?qeK{(GM%ZD@)x#c>yo=ins@TmTt+pyo;;6Qo zw?q9gLy4wv4-WCaEioIRBA>!j9E4pW71+D6Uv7B}hI6Bf@vq8>$7g$Rnj5$ZR3l zF7{1IF`tJ>b!|71sARR;M(h$x_t2}=Q}~}>G8^~en8=h}nmBBd7tSTrdn7x+9JBi1 z6uwjMTjp?kCvmJaq&mpvYwYP=m#nf|oUD0UvA1y#E@7crqn4}~C(;yhz5HvsahW3b zi+886;{+&#ZbjB#x zG4SBG5p`uOJ~qdYPvyso0)Lw#`@B+ZQWjq_p{Q_(zs#(~&-fBZS?cK{|*e#JkVSF~m;m^4%ht_skvv6Ket2r^CIOQ%YN0 zK@?Z&X@C^7nKZtIDo=EsT_sfqIF}|3->c|(RF1qSJpypZPiuV{AgSsTex8~xRsfz2 zd6or=p6>e9C$n}=^2sp-_yfQY7(zHa%RP@d9zh}jXbzsQu zd3Zai6#uXCN~mPc1>BubmlKaIs3H)6wqb~4`OFTRRUnS)6Y9Mn3jv|o${*MxL?_}~ za<{X3=##UO*_p*5#BVm{{&u-1ZcdiaX8t6swavzEZxX`|2KSjB$-z<~>>PaD6GsFT zbwz7ge0+w_fK28N_f4wSlKS|_)o4Et0SHbzP!*21-1&M1G5EV?1G#{K6k2nSk zu5ctDtG3QboQUCWE{LaHJ>@Im2*l9sz;v zRzajf5N0{$L;y~JBNtZ+=!u40$9?c;P>cPTErH^?8w9y{d<-O+jRZ6Wc_0N-8ox4A z962^CQyh!;$uMrGda9Uo|hS$lO>!Ub8rfdrgd z8GUBMc?3|CFVF?jm!=Fer=UznsIN2ibf3G@YlNQJEKmfq$&nzA{mjNk>$d!RBv83# z)kAN4U{=ha!SejI_K%as+`ZhZ+|B5R(1|m0Pu;+^sbU%ozYx3uyKRvhKm}k6UqwQq z<#07cE`~!~Z!S>evM$bS2W&-niH)nj!EnGSKBTb9(kJ2Z>*XGxd5~UMKETgx-GuuL zotTZ_6ANH{lW+)B(F_ASeHIF5e1rg1Z14%6&j6!gz&>Y^@X-RTnc(27;rfW-~fVm;tqoTo483sObJ=DYLma? z=ix%1j7!G(r4lO?S3OMa^QZ^qpfno+6>>vt+PAx}JQbP+ z3Sx*2R%r)B!b6`=YT#5>6qX|tNJ0+)1~CF<1a=`JV7P)V>cr*-6|75O$OioCvGTWK zoQQ}B6Y*f!fMw1QnFJ_KJXLdhs+`cFV3=?xmoz~AptQ)rxfrI196P}JS4mL79})pL zPNgpe-yq9y3wP@F!oM8+tFM1AZJfnY||z~EC+9`=UcD8gpW4n|54>P_d< z2GUUS5LpF=0UqOJ`R#obQ8ku)XN1B-VQEu3Tupe`iRX+f6KVgnWJmSQV?2XC>!=!@ zC409xdL-{b?RBwhw?{igXGZqKV=}fo=quLo5we``=?YR6J)hz$(Sh=G&Jk+AY9|#H zi!TP(=Jrp1D@Fbt$9T``d7{pf;qQB5rPr(P=oPn{(=8Q{)S|(Y6*G92Zi?KIH!k$} zbTN1ORfh@P<<&aw{sA59?K*A!h99d8LHO+vECXga6c9C*tVQIGX2P}{U2;jieEj0g zgR!^V{R9)v-RDWWnb6H>ZS@oW2)~T#ejMJdIxlDF=K8&W-9!q)Wi<5sId=nYL8mkL zRZ=DN1JaS}_9}8A`+?VTX4}$~;d=mZrSE+t!Kw_@tWHiPMUDUvOdK#lQ|knfCVEVJ z$@egW2p|w!0G^2GthI9dYw1f%N^yF#;d%y4$PdIh^sB>chJFe7jK)8^*!0S1dBBgQ zJA`2bF+XWU>oSp^ggf9Omx*&|q#iW=$Uxl|muhpw*rXdZ{JtGBklvAm#oL z^4MYCwS>#!m`>Ydgni&<*tNvZ6l3H{GmoEo6pDa3G@&w}W37JeDTQW+HIkwCDTT09 zDzd_Il*fKsyjs2>Cw{^abu4Q6nUOw_)R?z30*ip=Km#$_{$-&z-U;PhATUG^u8RmJ1`wDlLk3uz5=?;(y`5oeYMv0DX-}frx!{e#dG-W!7~q6{as&`7 zl#o=32&p|WAIp-od$wFB#1HkeBTbnjcKzse{oQMPJ~-=CUFeLirz6-vA0ktICPN{TtA#xx*xR$LW%f@yaNIK+fj~at(4!=TD-y<_u?= z8_ZXpNP(QuFs~h@p@Cwz1v29LFOd92Wpc{o^uJJD@m`DNbi)s{hm87 zXE_DiXc~b5J3>E&?STJdD*a2N6-7m` z*m_0{08Ypl2GK9)n1Ag6()d>L^W4{$r?vkbg+Vao1TCgmL1iljPd=CytSopSq(p(T zfVeN`W_EPfZy#U{g-$S)b`jR0M=X66oKC36AlgTKe9}#Vz-T)AMI@u~=VTSg<0+GK zU^ydi*fuyaYh`E#nc{ADh=d1xC(5cFxDytl)Bk8`H@)u<92_P1Rx16LAve0M1 z73HFUF-82(njGh$A(7b2R+ar5tyzQl>|H;K)?Y*cGHUBUJI;=p>Jv;t&Rd+J9sOU0 z4yf59&@y^lxIqm0Uam+vwRU@gP9|juIJQ1=@AD@-?#1>*qgN!b&n4;Y0yYztFUV`S z28!wbSeY4ZP6D0CV$J7>3t>Qe-vi9=>AoGNi|wQnh;_~H>BbNJrDpB{bLdZxSMn$x zso-tX+xa%po)H#iqe|i_*3Ap)Sj$9B-%E9Cwl$tULP7f;3@`#8q-yf;m*?a#_K#?y zs19s>&w$tn_7|g?$#lCiWU4-ag)&!w@WiaaSW3VTo!M@p!Gv2mn3$oHMiL;w3NWZ< zGjRP69O-a^om^MHr65T`T0Ztkot;bN$+jG;cP1klC%kaEdS)SA7Fs9#XB?~0VwdF34;amI{*BH}C%e;5t!#obN#F$iPDf5| zq3jmCzS`G}X(vzL^Ewi;#r%Ido9h5Aq6c!}C?N;zkq2I{_NVjlZCG8`t9_6WE8gapX;x6u&7xp>u^lrKNtX5bx0$xE zS7000EuiyovSvEJY^qz;sQ#{{Lqg_c^=Bvz#%jh2)N~zS9T&N|w%Z2TS!%)?Om%HH zr|eo6z!wb(doRz<{pDNrt*0K*s#QkBPM(*+d}25;Jxp9z7mu%}l(%2DeFJzz@fxWL zydqT*B()bBV2&ei6jk~N(|B?G5I!SwBxbHDcG_uPLzDC2dDY$Aei<5A9hYT`q z=uAp%NgFRByk36LN>bSoDaMA+Qke;ari)dWl|yKTn8f)Rzl<@<wi)wQAIqzxj{hPV<4_%cc^kpixViFU|-aR}W7TV_9Fya(J2@HPKXOnWex z8=8usf(#W{K_35hsNAndytA1=I7DVUXpm9B1PL+t9CYc);sPrpkm6fSyNcM!9cMs0pQ658 z0Z*vO3qinz1BStK#BSm8ME)tk`1Dfpvng#vv?YiV{>=TO3PO`DyLO{507vsjyqY*FjOP1J1>@PRdc zI~OmU9(WhN9X2CrfYlVULA*WDq3tfP-)?jl18=7g?+jC}wx;^Zi2@!(x@NO2E*Kl~ zLM%oa*I2r_iaZV{0p5yW)M-bxYM-+wSi0@57KURFkOzO^$%jQQ`}ZWn>M&n@P~``t zkLw04Ee4xg9%jDNmZ!sjk`|1v^Uqf0mLpY`gPU|PgX!7wvXl0ge0Gy>2P29R;g&<0 z&(>{SO+gz`1@W3PM;!T|sLMq30>zSmL5vT7eD+I3g{Y34z4mhZXF5O?EcS*kMOj~0 za=)>#s|71hk{(6~NSe+56N3ooJ%waU00;aB!gqi&oPV12U^ZNXLx^T%wq~lo+a2u$ zG5m{A2JVzDTg+zPAT`1WWP}?1lE8&!^;CKZ-PdGsYdv(0KAZKyiUfrC)jZa zT3E@ebr*Jn<13T7->7gKEtaTn1%}`gk_H%s-x}L zy-noZ2P~j)O`Ag6{NHjr7)EusBRMUYP}2moTTntfKj!vMN|5h?dOGIu_3ps0%N5N* z70sRrvV+bQBH#|3*+{&)cdIdmeo-HZfm2EG&8<}+3 zgu*8rV`t^Qi|GEZl~cdrq;~N$VHdJy-4xO6Ph1$LxAl%ML2-su?dsM z_cUky1X7_C!(jn7=PZta=w{AZ`z1MF^`L<~HXJlqi$6F@4c<2u!FPVgH3f|pO^>l8 zN$_>;_AN|cM+VwB!G@tLMqF6T5l+9a5zW?9XAA&)CConPDAN7vXvDlUOkS1DtD+J1 zjQ@N)1)Knf$Gm97A=Ft`5t*E!7kPcVjaDLlcYyUiE$%BnlNsk>&ki-cM%jeBo%i9r z2<^sPlNSmyk_IvbA%J`6$jiVpZ6hoR)t}T$?U>k(bIHj#QCY4~BoQ&Q+o&`Mnvg34 zFf9hoHGKj#0`X{T%ngN)*9e1*6F7Z<^#{4z2~4f1CT&WyE9Jq&0PxiG z8TC1I24r%aLomO4S8Mh%LWM1_??qqTF38(ilOM7=Fg=2h>8@W($<*a|x7tJOwh=K|xTfhXB5cm1Gs95bZiu)NI z{Y!`VlbRx0si5ROeyR;%59{9gK@HF9Xl6%4>HY@|NC6nbF9?SJZgEV}^jNp&d4JDG zsb6Alu*f}P@-0U4;ubRqP6|pVYn#$gh!5Ps_~mX718HZ{{Dh% z##)o}2ufBR9R1N%7W#_GTZkr-S!cf}dy341+8@U>t>eMTJ|zZy9@aMA#) zjktgTww?E(F^R#*7a(VG3{llc8+j^Ckc161MnkEz2C2bHkHZwWp+s51pn`7AK%u&R zb*wSy7fE|w&;ZNJGMs6m5&0tDJ{gR7IH=aIiY6A?81gSgW1TZH;_dvD0REE|?soh- ztGxs{1VeQMWE@}>ok@CvlsaxnODU75KSi(|bO9=Zq+PwABk*kr5**LZAv!D@@*PZ+ zOlc-Ox(Vr!u+PRaVpkmk ze+^Xs_JmGb$})Yi$Ric@!s3Ul?)p3o%bY;G&-(~YhH)!sApP-YYH9ZWZ}3V3Wp z@Q7Fqhc;=#Y|> zeIo1u+64l_Y~-{W4s{*aneN7ZY%VVAt3Gpi8&Ramb1c5!gUe>nL<|UP_3y{}x_5HI;37fu(A;k>DG5j8fZnD-% zN5~0;>^JINDNBQSP7xKWo)fr`U3GIMOXTyU5zxW_Afwp5UF4Syf*p7?Sj1%CP_k#3 zI2?Q9kCdwr0t^|1&fHY?Z>`LFf?|-D;njR+iRE?bnrm5?i7V`BL3khYg3@}X+hx)t z@|t6chU+2z2?|D6k(*rale4UC1fLM=YCY5EZa#wiM;(;d*!d0Zq}M5t0lF6cG}D;T zw`i#W0laM-npag;`H^~Ck z+Cy@{vcMG;bNSSlpTLnHOB!%qkOpN|nPOZic!e`3t4FgxL?vi#h0#0tSwECUHz6@ip+HBP-6=;SfxEX84* z{?v%a)yWV?MyW8$YW1aWz`w$O%%W%?ig^&Y$*ho6cbdz9>hlIl$58X^yHf{sur*7fgW zw@&B{XA*({_HXkkCYpMV8v-9-9n($nP_22*swhO%rHlGdWa`$U6k;g%52Od5i|GzC zUs@HZ!W`IgZYtd9q_yE!4no6MQ$3A0#fO zeorm~qtwUWjy3c??nezYgTe(?B>CM5jy|7IDG1WDBA)@2P!hl~Q0&2IWL(I(O2G;9 z#+8b230?J^K$Sk{F3SRiT~1s_Q%|JtG`+!68?^_Fwor+HsvoTG_1}ryyDbI#$fdj7 z@m~*dPf8%278nwlp7ObE!}UzxI}z*E!m_L9l{U&tfJY8CQ$HTYy9DyF@BACPh$tfg zD|~oXG+Yf~n)*Z%Rh-0vvFth^teL58FxCkAXp2bh2P&6(3mq0@iXtGhufaJ0^C3hZ zhkEH~5QSqnsQCmtn$sPmAoGIyJ!m&qi`grA<pnkWMJP^b^FstRJevXMp7itt0J%#+m*HhhaMFz)DGD zEG0=p!*F`n{=?`dPFQ#L1Bk&JEcd)D7d<$E)e&SgUixW?3=21SLBaqF3}hii3+vGd z*3@PUXC#^-MkFfRV%QmO#0k8%x;d~GMF%I5>;Jj%jsWd{TVk>K547{We6)N4wE+>; zMUUi@e$a#XP+`gn^41(Tw7GFGh*z*qZ|EfSvqDx-sf@#z1Ju$guLTTtv;vGzcxFD* z?FMr)TPh&=zpBA^fQC9Rw9B}1byEv+Z%Q-^3>KAUN7TonO_|4Co}9P_jzs$XcM-bN z|0utZolM@I0h0MA!s$@)J8G&Ei(Ty$iDANYr~g^Fv%oRcJSO5pMMjl>Z&RlTy7b9n zqq`RqLp5E^3S55|GJxJ6^(1=90xAXewr*`(UNVgf{lO_Z0hpKg&*$GY&q2zed0!Y# zqZ?=;4XTn&H@C^f9R}C-cL8f@j6;8JYS?#P+!HfRHzGBVi-6g>3E3x5TOUmJfw@aR zP4(@to_X%PL!#M(R+E*!i5D3)O};-c*#9Zk*m~+^*rI~z5S6JZamg79m&+>pEj z@Kq;ofb|BiYELxKLB7*I%Be_ZeTs4lLixGLSk^e!Y;Fol^l={SKf^##q>F|ptv$aC zLOCDuX0ZM!8hh@?qY+{*a(`;n#rC1xhC`XhcPXjb@n_H_5KUO@|D*gdhM&juNYYkV zBH1SsgO5l2Q@niQC-wV`_+Ngua4kMVgtJ!7lH}b@9ODXc-xp%{IxDMMNINK&o+zZzLZhy#+?$?lRkT{`i;G7G4A=$mt?Sg9t-%~`8y63! z(gMRMOizG`0)K|t(0SC1`fRLPSlTa*MzbrxZEN7koE?P0;y^kYsf!EqQzHH+HJ7tap@#R_RD!?`X5w@ z44hQVwD`gBqYZKZ%XwszZ)E0H^cnpLu2@l5PfZPR@hiGSg zZIK7F0C^a+#r_o^II}hVj#qqbk&5uME|aLJ6o#pmoki1{LUUT)hF9z6t^!E$JPbfz zQW~Ls`bylm@Isn1CaP+8NO`++(djD*m%+1CcqBI1ysWNaPve?Ggz!+x3id7tU^hhc zE8v>sWRqipmQe=;a<^Hvmz<`@{J2lzVWmS4_JC$VHuL6UTYFwZs37nOXo>^TR(t7Z z;v1piRn!GmAOFotE4e1OfpK%Y5`+03K@amBU}jXh{>!D{UO&&ww)}K zT6?Kh%->4`H86@1^hp|JHg5A|wmULO}Z? z)pepmgXdq7<@YP8Zf$BN*MnqAk#+j|9|l;bqKzFN;bEbmwgJ}1zb_rKFbO4_6E_fL z1uAtmz8kac)>Ut`8B-_JQ)4b40>!-Ok;@e#h_b+v-PF$R&k)HaCp`;)dXxo3WUFkD zGX`0Z`->WnlhNryTV&fs&WV&r-yq*zb zzOI!gDPvwNUki`p8?e%Rsro~tFJGH|Ryk|u7KVMt??}*enDg_xo&nZLOEN$wz2%5t zGvrK8>)miaJa`#B59F@j3u5c{wtuqz-E`zZK;Wh_axTa$3EH&W@QrE20BemPP?P^@ z9GrKRg$VV6!nF-E&rJ;--__sZh}MH~S^Xacjrt9aYG3Ey2VHQ(e)R6>fn4c|3LV9$ z5vm?=^uarv+3Xk6`Au!sF^4kq`xU56aOd*HU}%rP%hl;9KQO>en!RJU;bkm=s`$p- z2Msd~IZ9Avv5W-Jul3OwrH1kcQ5oe95ZI&Y1Wjq~!Eb#0-QJ1noT}>lz}@8j}YRlm8`%Fq{K9N#(J z7M&pUGJIIOAzKht7ZG^rr-o_u*=${TfV zkCzjRk7wG;RexNRmXrE8&a)Tn*fMhM%DToLHou5&=5d~Ba zuq2dPLg-mcwSnbBmDFg`OHm&h`bDV@N){xOV0|Qk5DZZu-L6zOWbn%KsLqS2K!0px(!JyUo>`Ox1%qrry=dLS zsu9Y2P?ukJztZpTNtQ0oWlBp23dbUZ5*w!7*o`STYohlVnFvaCd zJN>+ARm}4d?je~JAFeFQP8p#xs}_lpRSEtF8b35blRB#=lZbiMf!@E52e*x7p5B2L zxTCBrs+(0Ca>sBix`gAMnDhnP{rC8x3QaMh9v&p!`GiojB_vhs-o7A5!H$*~K4o`wqM;ftq zmj5TEP3MmeuxzL8`ROv+gTZGjCbc(M7JMy(wAfa(cN-VDUe|L|o^v$*6#M{>CM@Ii zlYs;0l;qjVCg6QlvB|sX(euN*Ro6=M{?UdjL`r4bW7ln| z^?5?W^P?nITKd0}l39Mauvw9tUjMta5BkDlPDW|dYJIF=q!XKv;H^Vkemfd@j~r)~ z0Z{|2>4&oa_?%}>7JNIg@}1xDx1&qhh17`+rKc14&GCpMA$OQ@P>q(SOhhtGn?{%F zG-JvoveTRWR5Xzw$}F>=l6B26J8lnli>e-{aq9c3PRr|f#!C%|f^5|D+#&kmFY<;= zJrP12No(rfQkgHJ8`>W_iJ?E-zMM$+Q&b^7(i6vQ0?X`pYEA5=wf0&Zlvn7)TK_$I z79b_6q++(W(~WUUhg~@!bVId zs&VzU8a#xJx;MAQ zxY6j8z9s4zF-i|6%$?>Jz>As)L*s zdK$=|J3Wbc#NlyIvf`}TsAIfR@oBLWuZFWjWl7jmDujX}+D8=})MmJ+I~om-JCr~2 z)^yHV=E6POo@kEV2_K;*cltSE5lvTHe^)cGhvuH?=g+jSAM#DYp)FmAsc@#eaEd|RGIwu zCG)4Z4keCJa60eM4adV^1?%iYCB_Pcys#es^#H5YV8uk6(fIV6xER_t)8}2|r9)%3 zFd+=Or1|Ls>j^4BP0@`fHLxlnGv0N{y2n5YOzNJLbL%@*UU@txD|p?aH+i+BSq$#1 ziJz@k_g+108kczzaTC=fb#G0z8Gd$2EJ$^Efok2N4o?17Z3R zh@6(R%S~j|OjC!_j%nAwTCcXx{=9t1BS7*DQBFKh>-V+SKhe4`wetv`{WHXjXI!;X zfmfm6tJl<}hCveYI;W*|H!p1C`U zFR{j`M~2&<-GZXM#Epyf>V`83uP;y6XM0U#JkaUu}NOd@>S&O3U(9?mdkPN#A@QK z38$%<pYX~UgYM%_c)i{PE8Wf5+hNneBfV9aLrrg9>v;JJ=qErg< zA&+|!NlY+gVIWj=V)|g^-QBmrYQ#8E7*+iXa0koV;mVS>#>BG@pJxp8#=Vp&jwV<6aq%%UUib*Pt8_s`IarGUAxpKtdVnlPxt#P(`#$BzPr|6s zQi?NZB39rM1`pbcSupISTvWn5HK=ryxr|9XGqH2S@I~d19d3blmet+h?Rff6{XT^J zWc{yYciuYm11p%&YpMAB+=UhdTuLx|A0CO3P!mtj5S6Ee(?%#wPoRZ zjI{!-P1~u31Ac{Z^>go{l&krIUk;m$)!sR6uTFok!-C%x7t;N=VHQ=aq4_7-RI)pY zH(dpcC3xf^&%gf&%FpjD3-($k;R5w)GV32LVC&)JP>D8d<^BQ&DxeH^GC6+($6(EuD>`wEq2I#~!>5c! zSE(3v+o&3)ws(|Sq${QNcWG;(C&m6HzOlLN9E;Xl!DwRrT!f7_h70NVVe~VzeW=9J zjjZb`>t+(0IjKFxrWMBv#baa1k;2-s#fab_ftS-u{pVU#3Ual^6=JLX)-J`L3Iz;n zSO=oD23Cm5)-`QYsQCQU}H7!fX>{H?)P}xL6t)o3(yn z7{{u~CkIbebGpy_q&b0$$W1x@fK<}6!A-T)`V|Bx2Gm0L#0kHOFt{o4o^JE1wTeIC zLG6~ikLn7Ok>w#>is?T8OVyNAMQ+M_{Ahzu&f50~%TIZ;ps%dx>Cg8)NUuC~e^+!g zTh_G7-1_*Ho?HI=&$js&9&=5oUsgVQk@Q9RW7l&fLDH5UFQGrXYW#zJpB`;FS0&yV zd#)Of?R*gZ{?_|3p4lzuYAlG@2v)K^SG>Y+$4kZMFH)|0m+zd$wiS-MVSDO+Tur2S z!4-$wvIbjPvfJR~r(H$mrQwEVl4_3chG}l^6w+s837`j3V5+B&i*Qp9dicF~&K6fJ zv^TP?(&{@`74b-6qS^D6Ihsl9Qg^xkx{UwvNm$xdk3Or%5E4z%eAFIMn-9ra)26@x zI<(4vVX8jhH3Vm~uZ!uvepusqZmj24kjZVCbdSD6ZtS@yor1pnYrKiN3nGdVzp1J? zb3{c3AkFx(Uv1S|jptL|SE2P1MSBz=8bk#SHBVx?{TGQxdZKbuvLf_{Pd#Wx!jwaQ zSm|-xQo5^%>l=d~0) zh{XwWJppKE|4-xg%z+y1-Oa&pK$=P#TBu-I+-|r1rb>jK2&32E@P_IBAO&e97VNHh zg6^p5o3D>QvD~=V74#Lt%^nv~LUZ>nzy7c{OnuxHi{d_Ver({u8ZiZjR=wSliMnWk zq$+D_3^iuKKy;bdX#61eoZItddg#JJYi086OnRE)*2CU_?jyfX5jfwDB`ecLuY`H# zf_91PzG9G0eP^VC?x3>_sxPW_j1RWOAC#q#hxHp42KrenS8bdcS;%+f>yrrS+}hFb zMlhjRL&vXc>7^N0UY$#tgJn}Rz+&}s_qZmG@>_Ok8ndQ!;AjsvuqN%8U**v6$1qek z`p4wruckVx)n@90+n*crh>%>{jazr@5|2&aTtG#n`$28 zw^Ou4!BM)8Z{7Ks%3!-dRB9$a*GsM+d`cG`g|LS#`kw!=pzj-!IPzWr|3Q_dVy9Am z+)rk}xKc>7$k(czd_ZdV`1HS8r{r^9*n0lkNdi1>OEhD3g>k`5cCE_qw!nP=ol&r=kb+aO2&g!WblI~YnyJKudZ+M02X80nM&>O?0(-|Oug($4WqKS&QBRS`w(#AeV|dA_NqODxZ8y>b5ceL-y; zu-5+2_HLzvPkQ2CE~#lz^YTz^aZ5KT)6KmVb*RKGKJgNL{8e0z%JwzgI?rR9JIsD} z&JtPWZxZ+Uoh_>kskCwTj;&mKJ&uS>zV~)II;4`*qM4xgNM~@zloh=4qo$tr+qeJu zO5xzV$ap7H+iWe*@~uHntqi^kRs71)DpZ$ym*!?0A++)CcA2#Eefy#B=kv@r&tFok zgkU)9dBnAEE9yG`PO-ByAD7iryyNV6m)c|JewIwTc<%3HVw6oSh7S6bvJp0_J~B@O ziw|SDzGJO<%gWIwYU%|PB2Udc zSDmEqgz|^%Q=(Z737o#-zTmd0>M=f>*$U|+t`D$AY&%!;?lSk`vVzjMR=r)8n(5Zl zRtS|c>w=!(5O1rU(-6J0%q2sUj%-v;niF{Fk*)E*0hZ8u=9#Pl<5ry(o3uTN<06t_ zNB4}NItCMx;7S4g{x$CrfTZX?g#7iiH}{5#J6A{GSV0GbgkLeKdCOOu9C z{!_^zb2F8u0Cf>&lQf5fmlY@(9Hy0X*6(K!qBk2?hX`}jW_v0eO(5-!>azQGSjmbf?KA0YJLnoQG&|vHgqyjTV8HPBl{;S zL=7@qOaE0FXZ`XRGMbZH((7zPFebh+4c&N34dh1DB!8fr9$RxYfgcM8autUxVZ_K(lvi2^V?CZJy(^ZHMRd*`Vm&@GU902q6z_;vBO#A`?` zv)ZLE@!Y)Sv-^@ClXm=2@#ESAxp7~>ID%VOnI}B(K zs(<9((e^=3?+KMgvJOe2X~n(5EgqC|l3JU9Ya(C4pyFIwt^O*Ijs-Lub4|>X*dY~# zpu@rZ6lNOzN>VV}F57rq{h-I?iY@XVON&Up=-~F$nVGNsEO}2lb)w(fspeqV?=S!P zB|I2j7NFbWo!w}0zwV|Ax~{RHoj(fZ$8?L%rJeagX~yeKD=k_q?xVYuewA@WbX05Y zuD+PZVmyLwPA+G36r%vQcY$5c|GSlbGG@KX_U(VAMf2c`&1Zf>#@ymV?e3(R%2fWL zAD&^{!ud(HD~l?AWUH!Z*7|GK#?qe5k3AMQDm$hBX?N3}PM}RJl!UeOlCE5(T6uSp zVgU2WhUO0I8z4J%hMWA`Csf$iTcPr{KfHS{9dy&Xn_aE>8{fHCX*=yU8P%_OTp~Mh z$hH4&O#>SiRELQD-WmVlp+x+te(y$tNSbiBCrYx;-YjqJ-MAc3nS(^M@KZAW1{ltQu2TzKcA z`Pbr60TfO>-f!vUusC6C;L>%8W^pn4FyGQgc}668T!~-CJb`4*IBAn41FW;QKBz=Q zfA}h1dUE#sBZtT?GtaM0T6-y2b9|#s+O8=5EWb2()eFXLxRG%G2t?ZAgvm1$ytgEd z_Vv4@*R6FV`h)T=@wok)&Yx^?H2tUlYSihREt^GP7VR}b=rPoqm!q%ZnXW?TM-sBG zw=_xB>xF;vn#uNm#hEY+l=wJ6>6;EgkPxR>2ca>>|GD17XXrY>Ba>6v!cEublad_5 z{BjrrgBeD7($ornx97Si>d9kf025_2zGdCWqa^_Jd)Z|J}(b5UCDYTpi~lxarJn1w-Y#<3{FSN$iMr&p-`72HF2wcz#f z;%{dRC6+U!J(=zmBNb2oq&k83AN#*>0#j9hyNF2a(1ss_ZP_Dv3WlUbI=}C!`snc! z>Gv>9HkYd&5%g7t8Y|W-F+T>UzOLQ8I~@WP^tjH{bDviW*FX71YGUtD(7A7ixyZLV zE}w%HxY0kQM!>h~oPBd8 zXIBTVE~+)_MQQ@`sek+CF5QG3+C2*#3@n3ZOdDWTOSyV?_s9I8(Pl`8@+J1k%vKkj zOI=I1Xfdlv*;%Nc-+ML9Ev+T+W|yv@h7Q~7#V?9E<#@&11Y7ufQr`6aGGo0?kvPsm zR+_~z{Abmv==kPZXW`B+ZLi{8A+2dG>blJx#!U-;>S8ZBe8SL6NhPA)s4;^7ce=-Q zw}Vz^{C4$6e~cA*^M%TM{2;+E?`+DWo*yJVwn3tns>5|DuD#i)ne8%e#8a1^cp^r% z5*_Z@#tw67wB$-!`YwB-x>?25H$Co(23UK9qCCN$0R`2OA*pXnkLL3Q@!O>W{$39s z(ZsjwHSPaOG^&mcm2&Uqu9TXv+m&8~oamf|_xDO#H-~XkmzGB#oYWU;Jfz-WN#E4O zC4HhGcCt;V)Wy@|Qoi=4Q32EczQIk*6B^;uxTWPUO&33Z6+Y~-2dFZk)THa+`a}FZ z9>3O^b+VVW$JW_?`*(0j&9=rn3sMf+3;s5^ADwdO+p@WR*`e zd)dV|!;9nXOOx%`O*sDNKfj;f6r<^eEWMu3 z4N$2TM88aM3|(U0o?>%*A+DjbM0=+m{~xOjQ-ZX2uDsIA_b{%xopbRQ-|ATDOO8>H zw$`>=M+D+FUEc#}J(q+(PY_^El^^1~GTt?HSgE&#Y`T!J&F&G}w8Szss;Lk7v8uReXh#7O3C||ks5#T zUoHG_W?7w+>9<^C#r`h4rkY-7X@WFE?f%AdTQ^LWXnd&bW-rO#Im>2-g|)=={Sh{Y z{m+@KMR{j(7aUuxS?iQle(2(cAH`b!wd)T|E0ET1oz*_Ts*re;JqgQOh=-Oduu#9JZ)SQ3H z{$|g%mE0=Jsc)p;8^|pJQ%x*V0#OXU5?wuCIrR zuI${e{_R#4O|`#_kEUiKW>CCPgfcD;Q^ z_rkjxRo~t#;ReiDY$+?lPb}HM;8~oYk$zzIwlZu_2%4*IzuZOV{4UFhKSVX7?v3QOIX0{Z55i6_N9H8YZ5#!wB71i z*`yA3_3dN+S`{;n%p|f;xDPbL7^S?OW~G7TMY2?*Wu-;2qHL-mnQ1?b}ew| z|Apb#y|r9V(MpC$L6S}%HUvEIm}nVnPXxTONSqY@L%G8}-yorp6;;15Vg3O&)O1DG+ z1*g4H<0d<_-I!=MvP&w+b>~%>PJM9sdWkryL>#}WA?k12!YxfNmap=?SJu&6hDVLK zZeihfa23Dg*TuWvGQ|a&$H}XZJ3q9YYg-W|K%_*gP_TcNg+k|%`1*G186-rf1UxnIr zol7Xz+UcKKCwQj7UFUzW!>Tbm-YIm6l~eZSJ6?x#RZ)0((W?24i*MztiUF!8KQaxY4s!&eSPqN+|a3G*sKSA83E?RN5<#m}I#tGgz zEwqBs*39L1$YzC+2`4m0z|oRQpbA zqZQX6!@x1@S6!~7C`hGMSMO(Y0Z!bq5 z=iR%tYngpU`txzdl0Zve!CZbtrE2(0)86JshT$_e=eim!QL|W4k~Octd+7ixYo5^E zH}yefQ5@fmUuIvC(c~0f*kmq^j6k&|<@%p`Gt-`in|@P=?%Uk!U)65oXHQs)V0lrQF&-N?IgxLIZFeg{LF9)C%mnC*AB^+|EXSef(t$G&$yFB{GObM?K+NyoxFOWGEo z9ShoGczEmOg3hGk0oF~MM+a_r{&r#a)NY+Cu08Be^J?B-nAN@U%9~RAFxW%;=JYuw z;ZOFY%Cgi@j(+Mqd#zl}(2Uj`;BA1lnLjl^bAWYPyD&EQ#&ImKkFAZ?$BVBDW?0zM zl6AN5>Cy->ag&9~v{ha9mK7!SUSD9bA_8BXk@$o3&9?h4W6FvI?96ZYe{h$FdKcy! zhBSxqYl5n?Q`_D675?p}eJ*|0$J=5ITP9j;43d~i!y5QPf{|fZzI18QOZ_d+vdibj zbbJ!|3iw%{Y}CW54|l0MR!m3_*0)-d5o=ri-_f}%QL;7eW(KDzA3DFXWHR$ zvwVyX#vAvAw7-%3m3^iHw*@@nHZL;iMb)iamx9`N$vmg(0ZBJg4obWbDpnlrpFKv} zS6qBG-tOQniE|#FjgTH>*SJVO^m2lTJMu0%H5PxX{POFYn$309%5^aZ?Q3>PnmXfR zAy!N@rdTcA!ihHS3(#y0rCVtkQKQ#=Az_-qSM`S?Xm>U-s2y8CXMAc#i#HjyZT@IxBGYbHQsRDeC?l?mwY6fP%bgwBzwm1bQvYF ztLsL2#D(V_T%z8_=XhN@Em=Rn`d>V~cUV(d*FMY?ov|_l0ty0;il87cf`C$zXKXYv zO79U75JHGb4eiW~0smdaPG`HhWB?yZ;PE82Vil!8JrhhTCT5c@$k!3SG) zkArw1c+Z^bH{|#Gjz}9NtXiPKNz4L=-_7te-fqmQ};R6bT zL05aS9cX2?Ev}(v7Gjr=@R7GMdEwWU4XkNZ|C4x`(xEgwDEz6?Nxy$S=Ch841@eys88l=W0AQbOO0> zdd0!t%OcpNDd$1a_|-*b^}gBM{FtRQVp`U>kuflqxE`Eia&nWQ{V((Lx2H$2IpFRHshR}U<0G|!-&dFm)*ZBUKF&;I zmn4=aRslX&dnFuI)uXoCPOtj-c+Xh`M1^xwYeCV;P#5BH!K9)76hDp|BE! zV`Rk|zjY9M*CV}zC25o4!2CkB`!EPSIH?ozJ93Jrstj|)bsw0GtVeEnC4IQ9+~e19 z8^d}!c>!yteEYR??yI+>`A_(GI91QrS}OQ^bqYGw9trKonz3`{53u>rUzRG#>qC?x zSCmlsY;!A89URUDb@-aSJJ>mlnNO~VrxN%@P!WAjW?iepE||xi%(B!eMUy*qIQKza z1FKM;jpOY-=Oa@ao+77`W65GGP${|g{lEyoKLEF}ln7;+6!_C6tw4%M^S?3v{4b<} z3C+VXR_xyX>icCwZ2;|yL`GbicI$;FZ|7#yy<+AazR)*l?Awt$a%lJg_>uo{uSM{- zd$(gyKe*6TGRq~3bx)(8lvV55Z?8ibBkjjxQ0`Z9?0CBhM?mAYuK`$a2)1Tih7|=z z5yWu)c+I_*hOA5LIF8|fn?aKGNph*TxQqg&qCLOzHA4}Ns)1l+r!etz=4knf(Gq@fKmb;^9K01$kioExD1W3;(fkP>k=w9g5fcT6mgBR$O^DO(o0* z#y6CU-~2L2*({HT3Mq4jkDJ~2grrE=*%Jx%UIQ9^|DyQ$w01QS9aVUOL~m(!pdy?) z+O;Mnnw2$;b8R=-VJ@a?@a9f&Re7=}D}T?hvucL@Q0a*MNY5}s^=VzJLMD=4J=A)F zw>M%#p~{+YqCI|Ev>QGh&4~C|A^+u=Y~xCBOEk;DZv{|-XvJiWZ@~}y-Zq;(dJo3b z#R;607Dwm2opIz-rGmnG#{M&IEz0zngxc_VD~*o3Y{FJL0 zcQcq7=>z%-Iv=;OgJn>zJo(imPRR&?GD_sIcI1K~A;N=H@5xuT3hEDduGX{1rPVTj z*`&!yQYoIQJ%Ds%nSh(wsSZ5Whr*2~FRp_wgGe%fv#`tWOI8(#5WF z`(=VvUs?SP1dmW->n`V}h%(MHnebkm2GfX1oSK+k>^A*VI85APw{GTKy+ z@%79u=uCF|iMPUhp23jJD)B#veJvcItB+bfhWRqmZW(`T6doHhg2>zsiu=)y{HEpt zH~BQ;NVjxHZsF6L`@7ZHR|xOK$1E>V2N@+W1!yoZOUMCDN$^k_x4Csv75UzWnp+jM zHY9$cixPt0LOdB(X1bz4@xJ&@F*&gbzL(`Tn$H1|M#LGh+$8+n_6JKCeGpVKGYFhM z_!(;AxCRtv`04Xzg(*18)T6Jk;Clj?g#U60y_}zg$y0Zl#-a6LK-z@Nfh-u1PI%6B z-#PMB*>WUlGLM|_v3;qk>!}U*p0EVKgDR7HMQQ z(5%;BiEH^hP7vCF@Pe@9>-@Gpz24R8JjEm;_I6BTIY;+04+W#Sy(mu=i*TOVnu^~M z4rMMd_{fRTobEO#+EFJRbddwTfkirOR)X#wo;Ii(2==f%mvLx#X%C|Y*IEIcJB{LC zHlFjqs8ob-(r)|i;LVZ)W;Igf(+Xu0TvR&}ta@sU4<3)#6dQk&9UWdXr4V8&p=S$~ z@&_7|=qM<=H8Q*xN7NI_&nu^JU&U+k=c}v;+tK{|+y(SV0}$>vo6*udnFM^e)oN`( zi2Mrw@yowO2rr8P(TOxu9YJ=<-FF)8PHw|ozJu=tmV(Qxwf+q+ixTWNaZUNqq9{Wp z=eEn~xZwuhZ8NQEfu^C*o}Vnt4+sY(tijYXXV?2lSt#(0u}G2R=}U}~#&zpr;oO8W zh!tG?55YSn_75d1LzX6UK37HB8FMyI4;u}sJ^Xu932&Bc=~4mj(=tCgsTTF;qUSVZ z%EM_!{>9{~(Lfz1n6g?7Tuy`?y?T6NG0L=oo&hMZ#$C1y6|5#{R5j1yu(0BP2~<6( zW+y{)@3(fXywsqGx-$i{EH4m?td0v2J957Q>6^25wBUF%w8m6^X!eH{>9X{O z^m%-uOiP*{ezb9ZQ`De^!*stQ8i50vUq1VS(qg#`?aL zJhQFwI!{i(z@_oOpHAkKr;#%jDiph6FGac7j=_fE72Ek=fyL?zmY#){{p%4t#O8)B zOlapNX4S`dU{9*lu0XlZ%LPfgF%`y{My)uR;vVQ?^|hiu0MU~BzyXU;)IqPJsv;c_ zXn@TW7?=MylCwezXh@v<=Kbom?N}8l75=Yv&um@h83kzsz;@*J7y(0n`hNe=0wSG4 zOK^!=X-QUoxmav|$jQpq(gs99;AC7c3P1xAZ5(@)JO`!^%82Q&ZcJurloaV)1FFGi zuziWnWd_g7ZwEW-JZVAaYP!9F*V}-%aRhH;|Nq?v44n6*NKGmfd%#6zr3b}RB21iL z$CgX9mcYL=pfZI!;F$kut*{KB4uZeZ+#IRjZo4>sstCLhhm{a=nFj@oSA2bo48MU9 zujMV=#zb9&uG-ZnugjrLE5kP@ zc@;TbQpr#?IyR;eMBIH0`gTkW`exCh^C|72>o5h7EdclO2^eScMfv}&3+3Kw|k{{{Rd-vfSEqv8`s0&1x0bs=q%{@R0h>R^q!33(eK9REnn+(vkBlxjWo ze6dge>4>_$3^Tq0?i!F6@F9UetkyeVFKuS#UeHEwagir#NUha+78vHL;qRa>tTZgR z9^_O8>^huFV%}kNb*|i!f$eZ6h-~-muzuQG7+)`~)!SvLsN2(kiN70t-wo7;j^!y= zOe)ouf0I4XoBYTsD791#yT(N@oXyVOslS!$%A%~0z+K`e$rSQq2gVv;I@R%OnrUx| zl@BUH!bf^L9P5Hq(8#)4&M0-oC$JQ$3Ucm?TRy4q;D2gXKG|hZfGy_gGX{8`FoqH0+-z^%lPKP~I!R=E$3wmG5t&2|M%~__{qQ zO+0z23E^VVkJr|ce?cC6z1Ri5^*1xZM_^cGx3Cs(``x^oZgks_6YVxn2aF^f%zb#% zEml2gDAg2HpA3Z60rL>3Dq6-#QHHB*p7-p%otexyu02IM!)Rpu_! zHxH-Ceu2+eew6J!|4uxX+TLO#Q&@(7h{18tk!BKID_hX3mT6Dy$VGy6#jm=0X(bL@ zQ`X$q;8tUumgmZdIuc#%bMbbU1<+Q{oVEUA)Mnl(!RG0X+{Q%9uQG+1mQ{xbQzR*e zAJQv1Ee6|a;HbZ`#q{N6?=;r6dB3%2yWQcs%COIl9nkn_7%EF9lK5 z-o}3Vm}6Tnn4z+#77>l$?{?%o)FXeBs7;J$(nInF2LvSc%$FUxJF0JSKTB*!+2Fj# zp<=y1#`7A8U9Rr+E(iB` zHuJ2HisUrvckPk<$Mo)XogF#fLirC;BtMgMv8t~rdPk0DVp$p&Fw+TUPHrD*L)?e# z7p4Gx_vNMHkOtiDc$bYpn?!g4IYl&qRK{QakOUUM8ZLRkxs{feF)`R;U{!iRXQD+3fd!LXd7`p zTfcIn8Hzk(Iwfynb6pq@}2U(6^o2*4{nM3hu>D*%h5fLxoRGT z-&03=CG=rfUn#K6b6t$4xE>Sw6E4v5l_|23wTgu-grY6bX{>a@d+cLs+H}essU14r zw@-c!e8kN%@iT_sFXzWDAnn?3`OKNW2*Bn)s>s3o-q5vuyvs8m&k(N8#V4`duiJ&Fw6vE}b2^`yEsvaU>R!$xt5Nq#tNwwxSx@8PHr1*fsq7 za9tW)WvcCUJkLU2eQGInFUmua1H?90D>4Xa4R~lRQFW@s|F>(FlNpvZ94IxR#as6dr0*|>IZ&|*UVAv6Sj_#|lR5)7udsQ^dy z=XK^yc4ls+%Knj;7oI~^9*`%JO9zI8cN0LLdDuh;*gRmRBCVLkif%s=7BeQr`FR7f z1}AbniPgo~P~<}^GZaYXeX9vvsk+V_Qx(XVJc z*d4`ao#fZ>!fNNC)4LgJl#7V&QDk*haWEY0;_IesEE^^IPC!g!>`-Z@iGL&*x_jC9 zYKt0J^z{Tb9gT=oQe3@834r05*hzSRqX7lq|rx$0BtK?)n1?U)?#dwa7~*O6(T zr#uxLUAy646^_4N<&0gdpiH_TkBr4YootZB)>)I`bzlh7vSAXfitP7(O@4tD)UBaa z{?+UI#>^aK7s%9! zUxS+BC=Ueo)uZCfe?J-@4)Dk%#(5B0#ZEFstQnAVBSj|mgw7emL_&gIJ*j>?;!9+@ zyz<=~Pw(Tc#s;r(M!1Rtj_SK_ixquF$TXiT(4KZBZZYg?LO)~G%msXdS)eh*9+%&G zzQAMXNLt-qkRNWb#R}_`g7!6PHMN4y{VS$WHdpTt8qNX06Sw8E1>}qJ-jVl7;gZZ7 zFwGB{Lg6(h@|mh=`!njoy<8g?rw!*FLzVyfXAmG?Onk;aZOk45*DkI^jR;u*gdjrB6un_lS{Kb@q{Io2{ zu}dGsSJ2nm<#~?`Dp(#8dSqS#z5j8%9-}eg9|py1jV<=MBecU$8MXlhmGei*WRU6q zxb;YwBoAwF?&IyHLU}yjt3?XDhp$_2E8D6UdnipMU%4PTIsdDVBdY$Y*BYlVpD6=p zC$>KSmkC5UjXXGE8I)f`ez+rdVls!JL;~g+V3&e@2Pb8T8R%am$J=!-yCq!x;6f%t zrVAu$^XIMr4IXS%Gc6IQ_A@w89fphDku#3rk$e^f&~+;`kMzcia zg9i_XTmAjNYeB(FIH&UVPKn~Wz_dv2d@LjtsOcEJ3;APsOOAX7cdOllq{$~KHuCVP zU!jLBDz#q)Z2&5R9{^7Z*C%epKZf_o>wkj_hWy84OME*BEHnQ9Kdr~ejtW5$>NxEp zWg`r(KN$v{)_#eTj}N`+v$fAeGdjAUMYijMn3(gmSvpC}P*D%SlV^t9VVYke#6dEs zBhc}oVMh)Jj;(#A4?f39zo`ln+JqjmCKlv}8$kS5=tx`nzbsuj;0z!5C$p`Eg?di1 z3entkThsaOyNxp&;(}%H)eRA-x|fAXw{Yu1oM64RMpF(k`LrU4K{36Gq`I*V^v*k( zb#RV!JQ0{PU&bXO32HSQtOn8WA3OxlG4V#{8hoF!KOx85zfXS&>@f-0*aolE9wa32 zoI1$6QTm&JVoW((HMdLuOq6+K`HTKSvkL}F;nPIO!I;iJh4i5NW)CfIrQZ)(Zge$k zMrhTBeKk9H>2#RU0fnz;;Ps13Gbb3z*GmVY6DNR$gx_$#M}Q=O1SS?a>U4n}4RA}FYcm2l6Fmq7-(vrI)7xR<%(BHN4mEuot zV!+NalWRfM;6+gXyPT6wSGu7{at)ZYTaOT;2%%t#Y)?|r5i_9o3BCa!X6u>>;}{V! z!;(vT3v%M)R=vaE90P}2LY3dP39U;hj|(ol!JCS@a0>eMAnBC~B8aS8P$o~Whuy9r zOlIb(K@Ynd+X_68?oXl3(ULJL>gN?jXkO9zdKCY4ZPYdSdte6LRq?B(lNX_NrJQly zu9`d(cL%Bf#>M{|;rA<+@5p`r6Ut#sKB2~2O&G+Jb$YO^L%DZk{Rue1#CCy9H6~f} znQ%m1Y=#alzW^cAYtY<-C)+$F*T2N%XO}j#Gi9K1il^f6f2)U_ds`FaJtZ<7se~X8 zq%?0rS6WelcnSR5nZas_Uc-fz>#&~?fUeGyV;fkR`+$FKzI3&3U1l-_mA?;TpCIL@ zc^vYoHf)jY;oOj193g-E4^F@f8G~4jlXrw&|&ldLjI}3)v1?ZXkBbP z%a-=L*Pz91-fmhFi$N66ng{NQ8ptW`OW7$(e7>k?OC_yJQwCQcc*TI-fdAP8hm_&w z&&M}{O3uGq1`}!teDg-`V*U8XIpL#cQoKy@@|3_IzFK>WvE8&zn$TuZrg;uMvQNp~gPAL0! z>r1#Cs~@rs&lG9IuS<4cn9e(Hwm}wYqV8@4udRr?YN#C*e&_Jwu33o*woTewQD6dDL^}s*~EuDdU0g6_WPk?x%@nhY1zD7eotf+y!-*uZ~tdsa05 z7zTrFo?cg^p`x(ylNVx0IVQ=2oGw;(jspfP4HAhtcsR{c&t#~J5=IYyyUwgl^~!`j zb0c2ryf!6q%#?wK=wso{d4t0p`rfmx#oH8(rb^+EorpZ5ha>YoVZj0nC6*Z}+QoKQ_N@^geJe(B)$aJQL@WT zF|Rrrl%Ktk-2j=Il+qAi=tvHSHVLhWzc~!<(|pSKhn2+rZ;1t=hL&iC62_XUiM=cK z+K~fEgn1$s;I4G`g%Hf1m^5Lmr(68*w{TDUveY_5`e(*fWDYXx!pFSKljWtl3S^w& zj+|B`hS1}1%uEx~)Mh__9UQ!s#@n?-^_Y`ZAzSonS$qkjl&&l0`mv7Kb$ zhkalLOOw5ux;Ykqu@)|fhq9^ixX(#0dy-TH|l-nu)E}6b$X|7x5nO% z5ziJ$!N!+N#YLCdD^k!58t;auBU^1X4sKdwRdb}wPpMi_B2vl0c@S^kl`p{Wl6V~uxd%34&wxSo$Llz@ zf0{P0&fUCaS!IPO!Skbo-~$$SBj~plO=}|c{~Qj$ULxJ1n^Dw`^@__%WM43{E9nlS zt5cIq5HP3Kk!jsQQ($(=ajeiU*`iMc*dD5TU2pbnyi`7Q>r{M03OkKUrZn#|+}@Ep zV4uF6LScE69Bv0awa4nA^y0#j=D`xCr;qS?!JS&eovPAtl)hMM>@H~6v5q8T*~Uhc zmQOwx%)q$sT?XX_HHIhPqZ>Ej_ZonTyL6wRY5}5)wI; zop(M$&|fwYd_&JHF}W5XMz+j0o<6ydd`>z`p1Roxynmp3UgE+~Y09=i5>(b?>|$$C z`(HO#sRzT~zQs&IK4soV9<7%6UX5B5ddW$sAr`pRI31AbO6{^JzJkgRUqcD5?w%~ip23Vx3x4od?bq2Rh7PZK#qFT9i$*zBFh;}b9ZOAZ( zLfH^X0~Pc=zsc68^jR4|nkM^jGZ6P<>7TDIsO~x15tux^fiQ|6UVYwh3-pw$3}W`w z$dv?p=c}nsK#n4qYUx!&%^07HjbfAF}5NXrvtD-XP&H8xCYM zgj#|uOxUH6{%-#Gx_4*5gT`l{mXFBRx_#v*sxP5Sy_eyT+R)FH2^?b_|M@Kty8f-& zhm|SVR%3$d-+mbqlk$vS0fu>46vM%^TSlq)Gw6OJD}@r(vG~o*ap9Ube}*O-C)s}- z-bxR)BsaI;qKf1^Yfx{Sn%qN8>~|Lyi`)hW41gqT201riYS}gVX}xDKN|nSOYz{w% z*ph95LMixkAkx+lq9Ihc>~%FEA5(I3HOg<|d@?ML%#M70jv6aps1>EDNe;dMQ9&T) zGWS>qq0uMnT1U-hNkiPaCt*Oo6(Wlp#I9giAWBoZV||F5`V!ZcR|SBP(|^z^fN8RB^QyRa8WfVuo3T+0x(XVjlXSajIAUU^C6^a%j%#b`-6le3mFBniPv-w2 zYKLpmDhRU%K8f`E>%9V(;7aGwwueQqit2yCI*!GM>@p&kkZ!msESny+MnrW+nTJ)0 zEFB* zRcxH%1~w9w@c^OqvlKf3(-RL7D{Ju5;-HO>zk?8|D1F04?JkO=_6e2?T`VDk8QAxC zk#EmfEqq#$=t)^CLj7QmnQz-+)cmZ491alSa@en)G|dr%h_5I^0O;28R}cgvHQWm` z(7OjdQ;~n7q2l$T-G>~v2{ODG<2z>@HjzW~N1l)bhc(&=eZbko~L5-GDp zZv%+Iaf@%3-yXS^SQH(C~R-$6AAO*2XYl4}{YC34IAIWWi+W-1WuT+ zHZnhw&*73HM*S4UEx~(Nlaa2-G?SIolBmUjjU(2QUk=Y+f4b<<>RN9forGO$a5Q40 z2G^>jwt}Uq)D0*t!)a`^YE#{>Uo`n!2YnU|?Z~)N;s4>AhZdRq?utuPs{dU<*a?Cs zZ3?-lPx;h?YSGLk{v!F+&Aezo<_Ly`^n(P=5}l&A@Wa8+I@+C<6>abmsKKcN_W9Y+ z!g{v+aYGt?G+N+_-EUFmVR56#737|i@Hg7ZXbroIBU^C$r%DTHZ2>HcYXcg+?*r5l zx17cZn=mlEJgu^Tq?~!-GBi=ZKpr3JQvTd!@=HozRKN^Y5GJY2{qzud;1Nps)p}=F zksB>QV@$d56Q*+>=vG&}obqAYEyHj%6q-h(C8Ted!Uiv}8ZGsBVunge1G?%QRC%U% z|ETd9Kre5|mG-q!-xoNLl#CB;gjyWuw!4n&3vn32CH_8l*H3B@nV`)o!!|pgx+*?I z4J!ARjqJ#&`YLa<`t2o2SBE{jk2p1I8YsM@TKRE~)S&cdOM|h4Sqnikz;qbGbi?a% z(kl@(g~hKvV1zme{9|)RlrI1>>}*3*2H6$grrp^7ynXLAl;8(DD?KPbb_~cH zW`g0WieOJ$v{}Dsx*<;YLG;}V%ozbik>4XsFU}hy>SdVDok*bYt1l=<0ZADBvNxUL zcwq;kuTdD=A;LyYhz;{=fh0HojDD+?&b9bU5IkBtx0G5kL4Od8TdS>%#_Sr@C6x8; zPl{^HH~895qexsd`g3K6oC6FN2|8>%kHwPNAS2TQGK2an%C9t^X;kw%vh8YGA@)oB zJTYvflU{b(OtSHhmW$@<+!gfmX!9+M(X~v?f_2g?d0WM#@V;qr>Pa*-TC*Q-a9DOI zPB$TW*&))Z*Fj25wDdSGE$@9cSc$dl3q^h*i?2~3+!|1f7CMxX4-H!1dK~|5PSiSU zK6}{#!&3(LS zqg5uwmby(4RF-6vl#Bmky=4)7WnHJlQ~#b)Xrx8o26j&5z8u-!x(qSndlykLIa9 zDW#k$>rh($;9)#tsV}}6?>|g5;aR0*n4D~ScO{TW{^!WCuLk3P)E$Dqce^RiUg2%C zn0`&5y$J(5e&=ze%}JvBg8wRgJuA8RIWQ&G8;X_O9MGg-SQ1-C^=+i9#fv*O{bgS~ z4eh$;PElsNK`P+@q~3KO1M+ABRBnK$<6*i7;NFt|+EAG;UizvN>MgPUxA#7!@*9M> zTQZnLN0XePHsBG8WF~s$G36;7_=Wb`st^_5i0Ox*{Id=ec=Xm@ORzn|@`!k>VVk%* zDgTM%qJ-}pw(CEYS?$bf8~PVCuOXRf##gieF41t_1HzvgmZuHPcKcCy^}R*r-*ZQd zKzyVLff6=gaq4j}->@MowTzq>U=&Y-N5W%?WmKC2Ll&2{HQP+!TvMLg;1Kqa(3y^1LBkrUva(qZhRE4fu=Ql z=G?3&%RU$>8>swq(aSC+Oij~p@W_J;1hZCQVR-m{%(V$Fl`Znm)(MoJ^{7XvA`61D zHzKM91tl|gb5C72(7*dT{?tH$73|_z`|X{gvJMZLRbbh`OOq)s)uTF{3VzSvj z-&Bw)o)+}($o+EeeEeC~-R<1+mm|FzjR<~Idw}z}Z) zf&t~}%bvMos0Y#Kg6qyRrpr+aAt#d`&G%3IRcn+!yqxd>BtbshG=%huIaB2KlWw)_ z^)M_Y+4MxQk;2V(c07j=f1L+?+61ti=I-W)yzaS@@sg=3o=YX(78e+= z4C;{np~a}oWss8~CnZNoJlFEl;%-Eh5By@?Ig55195jv@=qSOg5};rI1)qEL{e#P@ zHON}*?izGJjE5bcNRL7u?Qgi92Ojb$v!>CxJi5HEC2k5{XMv|Q4rauAu05G+N2{C` zz-FmFza)coRK<`zV>NeDdNk{c@Fi>0wS57*+Sbtl?E%v)V*z4gW`KaUSVL)?Lp4|H z3@L|nL5_`SDE)a)tilwPAg3zOR~77o1mum=fsvzhE_@+DG!F<*fjPdZSFj%?8st_V zTx;vQ&y4y=kvr0PLkr&X3M2x)7Q=t7ZaDAc!qsSutgzmjo_@F?4t=NS&rUP!GnKJ9 zw64-9X*8doXO#D2!G70 z4))i0JEX=Ae8;uCdC5?0x0DYu27jeVW?@H#oiZO{YOa^iMaI4qJ}-Y{hHa1g%@=5{ zuLBi~j(yx}w&>u6(mN!{j@+R1@@D`+pAtJ_EDo6UU=Cy~Jbgon^S}3a3f{sR`0-2# zg!tWYNPYkmmsJDtJVomivA$)6a>D7-G;icCzh}?tPN6R4aNy71u8f`>bwHmPRTk5s z7GM)a_%zIvPEG<5-4>3otSV^H4^qk|W`0J2YwQDz97O*4%QcK!GK;rs=HBYlo=)qu z>8TR=^^bLSS{6~_M5Tw^eX_j)bFjz0M(>7YXC;=y60@L$rij@%+lDJ?yQiuCO~EIS zcu;KNR35o0ysR_r)5_U$F)cu&U!MR1msPR|f}2xliJo=#SF~z<%L=fR_;VFiWsqoV zcw%$@nv@I;NU-nX%=y@N{W|LHK#ctL+)t>Zuoi#4>z8^4fp)h6K}}~5y+LJ_$rW5i zaDJCu=5{kauAI5oUFA6g`-`m0uD@uO;7UFn$b&Q{5Dg`^Mr&7m@DX3ieGvIeNWS%i z!JYI#y3SB2vgX1a=c73erBdXVwdDJrv~{Wc2#7N}`JSYaVlr9yckzsaNxk70W&`HW z-%#)wdF*6$gs+CQ8hWRNqTqmX5N6G_#LUk;>pdfe2rS@&AALHP(j?`ii9iy@j09#N zWdV0`SkhC|hB%oqDVD0%S3H|z)&uBKYYV*ko&2p0sJ&%4SPHpInw5BXDKYvX zN3$DKHPo^i>r)(>uAkE$+(FQr`YBPVrxX0uU);EreMnHRVX&^Yt00P^wDqRYnuol! zM~(c|g1!`pOUw=?bDc8(Q8B|u`)Suk9?hdJ(94fo!iZ5lhmfu)!1G({ zS#T7FLbo>*Gs%tZnoLFQFJYLNnjX=c(RoI$1R zrbO9fX!61`!X@|xV~s-{E>Q~-*zkj=hSe!aOhc!wOLLQwLl*qVi7LO*cvuw>D1xr@ zBK?hw&o1}h${>4Egh}Gq_@9T_Wi2C?H?}8-NHlfB>$zGe{)%zC{Vh%t>gZf9l1-bUDQTf{q&3aI5G8i z*2*dH!50yR&b9z%ZEX{oy1>`YR@&5Wp_ZnX3Vnp?G^)+V+uGep7 zBkHY}OmOTtv6k;8kmT%`dHbkuZ$m~Ts|VY8c6#8rI{h!D9tk+?e=-vLiw?e(QAR^K zmNy^JExf*+t%?%2ht}KvN3&ygS7I~`0rw}#M%wF1;Bx}Ay(;dYP@;3J)$3=fi~gJk zG!3L&xrCBVZqE^0(*;?SB#Zl{U8fp($nB$4ZbvQ!lQmN`m(GW+R zXo0mWh`N!mY7!fO>*f5Tw#o*1ZYxKhi&J6x{trDG3tm4V#5YUGt6PMA0q^)3J)~(~ zjxluL_?nyabiJ?V)Ql)P7A)eTFAFT<$$5I8y`f2U^$0ME+#dr9%I#4FIv~lE0(Han zOk(mfPm(gZHL_)o-wOkgSHj!|4&>hccQ?E{!zHErE%mOMA|g>US#zdw3K?mSkBIp} zru55!#z~GFa}ZE6Nk3pFR-oQ&N}iM@uu)|;q8&N^#A&=K2~$P8Lq9tuD31cUzaRRl zUu9j?11PfcGaKb*-=*RwHb*p{0Q+i?C7^!Fepvr@V+7)xY_gm%s3ttfr5Adq%&XVn znUuNABmpKbOHDHRXC&&}wL+}mB22%XC<@6pOEulBPrgD2BknI;dKX+F2Ewu@?+sDe zzE-c@S2DsW++Qp%|2eFNuo`P01b`5!pnt<;3JivS z%n?MlH1C3Yr+sMUr6e0}xyr_eM^}fbx_GVNx)TzMvnyLBq5-_*;uu&tvC)NLN*4yP zp7!GM0-+ecfhpE`9Qu!LLIzmw0pxEfRT;hOtszeq3|YqIU)sFA(L+=C>}zY{K6>MT z{Fl&vSWIMrFrJMt`>t%kNO^E9GquIT~?k!n*} z3~9r$K7+-jPiqP>r@ufrj3vy>+lei=)Ieb0422a>^CrDXf(f3do^H-hH8~yTsRrFw zY^^;zD2@Zr(U>Ji2e$BKJjv@>du=%X?#5i4&|lnso2w$N31N~-Fjde%`yjX>%LD7r zmQZYikcdjQgS~x0Kn5g0G;Er=_Lcq0P+}Iknis`6k}1qvQlH#1QSnJ0^|5vcn$u6e zU%6bduUGcgo^)(mlj*9zBR3~+DCHaxx4f8>4uL+9g)ZjBKb_EYH@V^F%O=Ow- zsfl+bQzxB4+5bV>^XID3S4^`&1n*J$(29i%zwO5II9{af3etLvx;dUsvV>)iyvQW2 z1uJ`f%L2g8>i12^`yE2+L(F|%hLV^4>>H>cHTr(MG6VY!Q$JR{t8{(`WfT|hGb9sj{c`-UOe~^k?4}*Urb*n)lvY)g;!CcsF@H$UC<3j z-l-t^XngAE>=R#})bR8ROk*=rU&s!QA2@Ac)lb$PR`m4>cFTwIES|E0U7!hw`w2uc z=VdOczXs?&jV$X$qE8MLkt0KkMfYW+KZDIp-$pp>mN8{tWSUp6IJD$#dw>fRE5HiE zA1av((|MSz&V)A(A=&X1lb*^d5S_*E-H@Uftq_IvHHqzfrk3FVbExJ-i)Mh0y<0}S ztCWyc~2LjSBnqj>SpI|>S6Y1i03m?eKmy9CE5fA z>X24ml^E&w@ILx*ILWHTK5p_Cr1*~H2sZLl%Us*-3v&szRW~lPZca6#_LEahHX1Wz zx-nFSLFq0qS70KFJi?w^_se#^Ni+-kS1wFYHB=87GPh5Gg9}}3Qun%=6J~8iOZlv+ zMn=r)bU_aI$j?=`F{`$p8)=uCEQAmcnhsg)^D`@w#N3TlGn0d*i$E24sAAl&ftV$~ z6uj%RN4KgTQA26<1qnqS+vgzHpj_=YEX?7XjeW8Wmmd)9(;=H(S|s&~g{>C?ktDuZN2Hj%Rp zdXSHW3DBqxQgxvOmjinEz_;;d1J|V>C%tX?bOM^Sg=s8sj*5Q3g) zNJmVJ>jHCm3QOn31aF#v|L=invqXG2-(M#m+%i>I4lqxwRmUZT{{Bj=Hftu?e3wHO zzivvAuO;Rhn|H{>TNFBaK(q*Lnp>a^{O((xE=>c^BHcrVda5I=7E$UIn;5 z(&Jj$^0@eb#;p~D()&ae*7`O^ZtQcYQLi!)q@S2MO#dzX534kLaQ!Z(F6z(#{Sr zcOn@O-H^lNPdiBiR5*3i_#mcdZ_`L5TU{VZylu!cJpRfy(#HkTi~Q-WZ286ye$_Kx zi5yA-ct5hIZ6ybGK?YwNi_+NLnlH!~?AZ(M$wYsjT`4II>Lw~u%}*!}Yy+5YJN4t! z^dDoMqBfsp>^E#&%nA0FPOntG!gPjy?oZ2N!$J8&OjHfvC^mguOJAxji5f5sJC+LN zF{_bgz9f5-7THi!_Jy3Y^++}HkHO`)#_$Y+yf+7la>yF@V!dk=wZIQ+8LaCeN3}|~^pMtF$divWd|DjZ+{Eu>?Ejo=y-Jvc$42et}7ZIK#4&*3h1H5HFL&JqlO@qq?I0q!R*-uz@y zF}kv<8O13}S>(@)rz)6gn82+<9RFn9)W5Sjv|zQd@pJ^vT+@&O%4#A>*3u9J(saWy zCX8q}1Loi3hrsqp_6`o_0WU&b#CY-0r{esAWv5{My#V*IwCpYo`KK&sX1Fq{2JbL@ z4mhauWtBY)w3)$8fHurLN8)hK$Ydg4d+G#Olt+cEvwQ7mBdvfL->R+QtSHA;;5XIe zCY}w!kUpp=-bNr!XO)P_UF5aV+x0en9tv|x1%Ked8WyamY^+2!ewt~@a(7~SkC!*u zfAY&Z@q0TPFP#oCdK>wgO~`1?xcFL-n);#UpB=f* zX&2@q_48{o&nQep{(8>AFFYKvK($^s9AE)aFH3S1(z7pEbUB!h21@Hp+3#wKWeQ`- z9kU8HelAJMhbM*i$mrS?=Sac<>N!Z{U}pQdo`ofmt5Q)GI_?2Tl;2O>#2%J8>kRe< zcYR}##kY0QGH?qh_nCq&9KJdcR*K%Ymi)zhM^1iV!&o(0Q-^IBv>&A^ow###wpUQO zRg??5IQZMvzJ1Zo4#jbhWC!h&Tl)0@FyiZll5OpW5&B%*GG7F!{mWRjp-4@<}8!{Jo`kbN8Ce$3F5owwTj9X%ueME z=*(Kk;B&Lr^VX;D+zmT!Yo9NHV`t2VM`fjkq11)#qf~c{R z;dj>Vt8VTq@g`zF=3JycIa3#uK^qUU6`K(Mp{bc=QP;M0)3A^ZQh4vePa4_?B^Q;4Pc?ID+k~5a$A9 zN_XDCFOT3JK=QJ1q9w&TcJ+nJw|qnX_=KBM9u6~t{K6f_&2XM73XX~VGaJR@AS}BW zw~yKM^gBhxBnuqO``D#mS@0zIeZ@}~c?$bb7Z&E)T>`eM;(lG*LV{SZs1=I#m)eqi`EWYVa5{xy{#C{HL&8Ns0s zG~56IM+iDa<_Rt)M&*Y|gDVGuLO=Ja8gLjg!%yY)t0q3Qmk0kchJ=dveXPKCfq9ms>zJ90G7>9-RGK9-AFQ+I$| za*Ow9aa3%?{p-4e%MH{*(~c#dtzTWQ$Tazt{Mz|DajvP%WV^4vOk~+c5mW#w^s-#o zMCVrWoos;siY~t2eShd+xnBL}WIx?|b>???`%{gr3Oh6CdZ^gi*D+a|571bkdC0qk zf~a#yVZw7O)lFAcqdm~3_(YRW+&}I`Szimct9==1X42A@V=~l7Z0FEC2e4jAqaS-X zIUGZZ6GFp5O4`h#qUPLzK$6(5*>;F$5;?bY*s;^kxQeaU1H8cfQJfOkXo0tV;glFsRZ(3x$Jy{Q~kcn+gG&74xeXj*!wQ6H&Q|8`{P2MC*_YB5&av6De2Rs zxwJ%0178o9O_3kUMnQ1%|2VqxxTNp@-@fhYFqdVn%v@z!p38H2v1MjzWO*wpGtC>R z$OA=LYiicayi-zU-l%y3A}Y-zPrSthfq7vbfP#X^vEOIEe|_*kKA+F~^M1cx&+BzR zDc>I5zTH~Cf33=I-Rr8YT=OnLD)m97fGKZ(Z}$D}&*J+W+UO}l>XNIE7mwQI;r&M1 zRM7)rA&_9>2f~ViZ$Bh_#0|EevWPhHpkPANEta6lhq94dH z6%mJYkOtgM*ged)-5nlXC7Wb#ifm;7xaIkdRF^^@t}S17XydPznbsRq46eniF>w&_ zMPhtTCO_~{9pi{n!r#PowKD~COVY;P^|c)N=9$jQy#$Tu?MkUt9l-1L{I3SScl@;* z%$NJSzzzzT%~>W8rJzA++vcw3k3=ckQiiXoWbch~X52g`cqmHes&fsTx$|iyzqDig z$vhm>BQ~-9XdmfwK^-FJa>;_~O=~@1xy`~Ck6^qZ96@wdIx+cIi?w^aMyH#3GM3gY zufgsA`IbK?W8{&IfV9&Xf1ktlrc5cOD)(|WKi9N7r%E08E>iFASqnt{{91cH)xw?h zDwZDXJ{6b+^lhDa3<&KMjlN?bZ_+G&%)U@d$(y0HpM5tjpQ!xAuri%4h3%)vmoX+f zJj1ibnTu{&vNbyBPfkm0ql*%|6(Xve9Npf8f4qq!oI5nZYfwvWlg=n26a7a(a|_0l z;wN|6d-oaPzmLVv$`@I5*fj+J;a>v|!H}W$d|bih@!_Q-N1*%R`YJ;bP!H*<&yNxs zT+7m9rC5+eYlD!=JmDgD`TFPb?ZbWwE?427vCQjw!r06H%InEiXm(3dnX81*qVIL9 z3E20#W_QY~V1Iv+1vTgzu}0 zVEyv!!|&PM7(g6;EU&U0JC`qhDToqU@7U#teeRrT+LQ%W_{{f1ukZV6K=5W7x$VG^c|z zGo3c9Z6ZaH%GbvDArg%Ishr+FVSN>ic-#V=>v-5O!ch3nOkA+k;0q>IzCjyx21Tm< zSQ`9D00`xLCn%WV+g>KMw}mzb&8_vKittnR04$g(4;iiZ*AYeM9Y%?^Bv7u-$V}f} z0x$BX${z=btG<&-o&tCl5A@F!nfn*!O*PtikDGn$rIiw(FW}4s$gTM%FH*&F?TJ#% zUKcmGrv@B_!gk8n58!M3$Q=)FNedEY!S8OP@@`0H`l#_@6Foq&?w^)Md5LC1`FFpf zdiIRjlcZ!f6$`1^C~$wmys7fs{OE!APR%>?JCW5L9RgTKYXK)3NaOT7`2=`MSY3)4 z%lTg8_tF+ znsIwb1H4xxW^5NwPp!|^o}rVH&e6w)z_yyAB5$Bp`{l2r@puY>daekjnBd$dmkGqt zs`a>yS<#`cFj*e7U|1k9*{So_^PYO5H(ay1$t1!&7&05NJDZ{00CB9aj%MUMfvv1! zyI-rHI(I(vuD!5q0sW8eOb$A*O6PfC(WFhiv59fRg|f+x6SZA)4Tg$QY~NWZz{(u{ zTxVK;!U=7uo-}D8YfZ-c?kXKRpUHc7I6KULVQxh>bC#Zch!SVFPSNf$0FR%2Rr-%S zkt?`F$mgB_w_j7^34Q68ig~XyP8M0!-J^`Kpkvygmu7YQxC=oefX1a~@Cf+OLb7M{ zP+0iYs?dki9S)%s?vHcrL?)fm-Q65x;JJF&#ZmyegeG&M4L(ygr_JN8)I>C+!~HD# zj_NZg^ctn%^}E#2&}i<-a6!+>WJ*l6Q=fn9y>GX8WTb@&s_QMf#kb^KYVbt1ApFE& z=mUHPfk(FlMhAIYZdRzHRn>4smRmXtm2wmPz*j`4sOj3|!2vZQ5-YJ1vy9C8qb%t=#poZ>4V^ApgG z*yP)@=lrXf{!ECRPC5z=N_&tt?k9F(HoKkErkz!txpKX6ZWus4>WX}9LxTACDrE1wZW~`H1|(I(i`AWP4L7=Ude9$$ zDMd}TBU#)dVxO+v(BX^ruG;06)nT3%S!bXNbuOoz#&EjU=oq#2xoYbSr#X6Lxb;Wq z;>*2=zLIA({togAgfu?qr1Puf0Iy=Wfx~A;`%=RTa#1r(xAHF;+>w+@Z?7&|}54C${hE|o?agaI0{f|(- z+k04j)J%+4hPYoG2a`}(RocW*7~pIS$q>p|o|A~($~~N5ZZmIDu{tvCpF4Tu$GsG7 z_TwOl+Fo|edVp3DJj)!#?gsQRrH2QbDbh>7cM#QIq9*kccW}{L^MhS<7kvPFAgMO| z__8R!+>77q*$Y&w?I1+Qp55?t}2NO_JGPNt;5Ffz3nVQ zryxo*(gLY0_ADiT15rKaV#Sy5N?SjN9K(W`(1rKE3%lvsz;?Bl=oKvSsPe2kB0m>t z(`Tq+ui)PVmPFW{e`fwDS`ka015ndFtrJXYvk~UeD5T0%Zrj(uFm}r7r6AufZK>8A zhS&)%kqPYfCWlPg8zsWa%~+Px9WH>U3f-f5w_TR!`@~Q=#Ix7J*2$zJ{9C~M9@jRb ztTK|L!GcQf4a&Sh-4SQJ&cH5Y(ic)Z7BZtKECpAG9*pc*)0$`ZUGk`zF~9MC*U|eI z%ab6qO`p~kMDd!;ba}1?Eskeg2e-s+BXi9jG5v}RenG7u-!1KR>MpUVN2Myl!3+YI zF*>e$#OgBa1hwtuNLJS-npty$9n(i)N(c>1UurqE^olnLxBfo`W2ot6IIJtUn4#I{ zLjy&p%*~wONEvK^!K~F9U;`*ZNGU;BIsf^;3DGBE>ZjHNB3&1ur($(*TWXz$63t~` z9Vr9XY8fLRsTN;E z2ownl3v|FRa9J0Iu%Z}gILF3}cp4Oaym~il$~9o}kmxcc4e!%Iv7B4DDXj-a)09pU zG;$nPsLFjiq|gBYX;X|2 zi}C}*6K~+eK)sf{V)uB}$w0q;CR!LLm7?1zm+M=v1xrd&9i`?oFRoa?6sonJzDmO~ zp~Fgp)T0%9A7~abBTfGV{H&MP8jL}q5%2FKotnb($4J)wOqo@L9`+F9VnzYt0p(?V z*gISP{2-xHm~|pJlv8T;YJkHxt@r%fVpDiRIxNOLo99ccy8u|#zi#{;1kRVU`Da$~ z{)T$_LKS6gmqo>fhssQr)8x9|Pd>-cNSU(-KSWr9LBPyfHj8X3%N#^CE7OIx&pK8` z?=Y*DC7LZnU5xJn9*Wuh`Z@D79^vMMERCOX znlak>lxI%l8;H)BtB4I6Y=^W5OlEw~E2^Ni#+unzyt$vvDy^sIw;=Tlb@djkYH)!jLI{3U=6bPg0$lCSjD zse6I84yM*2@fnFun9=F-?W5yByV)1nYP2Ajo{SelS{UIKKI{QO5{Ed07?YBfJUaGX z;yPG&h@t2oB!y)K9`1BDZ&UTETh~C18SM19cRcw9e#(b!x2-fqU}FYuO)2&fFPfSe z9#bg3VWicd2CDEv`vVDxEUhvdpu99&E4fzRN^Faj1o^~#{0M4qQ!gs6icHpODSQw8 z5PQNHphYq>Jl$G>&3kq6l|viCZ__k!7^ZvL6!77AUIUazs3r&F_YT`v|E{ch(V7Tz zT4ynOGu8D$8<(a^LYa!5T+LC^9xAlqH1MbzcWRM<>6#V`_-7JVzE`~uKsBc-e#L+q zS;25gxaxd^nv{{sY<*1N|H^T2tcc&{GQZF>!ofql9124g7xZZ)^xT!k5U{2?=;5R4xoAB3nJ;#0TyZH?wFqV#g+6Jd z)j*aQ(p@X`KBt{ttF;{4w8CC1b@@hKvS`D4!e%I4?H9-9nkgyLk;{1Lo{c!lo%!e- z`wjZLWiy1)_EMi${yplc%y>pu_-W#joTcI0*x@gA+T(mQ+8i_`5=o!PsNprjjc=r1 z{Cl9->~O6@BaJuuO3p34N_qZ7YUS;+{sG-7bi5QmXaPJ(gW_84Yb8b`afATMFvWIN7C+5~ z_9K+Xl$i?M2H4}gQUMa(De>sy*Lx)%i7c2q1i)9qiRy@+y_+2!=oa@7un?7phn4ws zW7oWt&nx&$)j*{`9GmnPd{x?}NcM(srZwhUz%Q*iLDBHYh8sJNrhnvzo=G+!yf{8~TuUC+tOlRZXOdKR|`0IDpwFQo!LFn8DQ znI|0DXoj@!yWF9>+2~kuAPg3P)!CXh|86d9tG><(v{xoyuf@%?PKKAYEuhm_MPC1# zSss69I(ZArP0}-8bw!?7me{$+(p+k;x7Yv#8JTZC`W(uizfBQS4SudQ?+BFG#(*~6 zl~q@t>l~BHDilV14+iLHc+I0O!8Qlj9r6>+X?>JWipeI4;~68MF2Sw*4}8&qFj+@) zF^V*EsDW;-d70@IrwfwkoR|&y)11BP*C#hQx8T~Tnz`_K{NwPP5FjV11tZr>1Wb3Z z_=HgnAgbxX2qq}Q!cj3RHT%JXFtH1ETIHIb;x!V7wTi!b;u|%-_8CAT$`d12`sB?z zpA5`l(1I15paQ=_%&`~&rF4G&Vm4vtiU5hnT094lIsxOHj<+;9SE?l`gYQ1}NHXJ> z?6Wvw8fEO+(6e_Oet+ zm_jalMOrro%!f&uEGN4ukP}Jo9OGZEY(hmSN>Pp0>qU+ks z0$qAYLp*qt;WZ*q_{~twyJ@pA^3@?gY;Dd9l26=~cd1K(7}}2LaT!||t^7`S zV(Cb4VQ@>%a7yw{xHuTZ^-yy5NW|ob!iBbo){%q%h%L^f(@{`@uXA9 z`~`;VnIbGal}^7QJdWiNr5*v@qs~?Go%9T#hi2g<;grw<;Y_{xBIob8o(o2WavnZ> zUTOIT+Ta8y2FxHEt+?|yIl_(&ILktu%=IE{TYb8C)7&XoI_XRXin!QfZJc;~FqRO_ zh=&{TYN`^`^;CQ+xGfU)6AKowBPkJO&e1-=2$HGfl@w^^o~m0?v`0?jAV(u(W&eup z40KdFg#@xg<2aevQK!-+8} z?7BNfDh~xTI9o3O>!L$rN|gTcJVYK8R}-;0VVd`G4-1(Jv5ya$-w^6WF@)&d+F}YN zylWXnWJSQ~0X~JCoES6iv));RA9~h|H{+=FJO@@p3y;W;$P}u&6lD@EEjx^Lq?E;( zJ3WI%v&t9XP=12PwaU2IoROuyaBa*LvR;u_5o1izzBHmF&Wk^}w`+CHpq$v&I)D1K z*EzZRRzz)8ST>u2LFnXYim~-k44+Rv4f|J@6bTl-sQQ6R;pA3gqwrMBtZY(B42-hmy~B){OG|saj|XmOu$HWP9l~(z})b9P;~sr z>8=n!Zth;9gCy9W0~!zwJSmhb)l8I)i3@Sve%{LOL{ymTluB^)MyJBw1SjC(Rq0djnkg~K=6$ZmC zdu2>O+4Ydz-i~UJfn{chVF4Op3bhb-ZB=LAroS!Ey1&$mOxt9K0Uc}-4l61smQq?_ zn!Pgtf|EgSE-(~a$BGZ>rzCFjPyx;5wTKFoZSuF1Y8JcwcxS+VB+hTw!{mOaST~&$cggRs-^l^db5=s6!|pdkdN3EsdRR@+VXtfN ze%DW+VbHjW)>kOotbRfBV9bS}Oi}FNrehsBS~(HzD2t;FWbv8YBmLrshj8IXEliLm z@yVyP-6g2Gp8#1w-asXm*r8`eOr2Dr2&T9XKfcTqk*Zf-TntFf8?CME2_gQtcTPBf ziDl-zEBQ$wzc-0)b035jvpwJt?>ro3=@zutt@1?m<1%)V1WzTBz4M)!O zV*<7s-p+#PTU7m7UGls3uzZlH@E3I)V6m;d=(~EWB{AGEfVzOh!pFW=MU(N3pyFWm zX8;b9U{IOjeA8%mJoirn%s86WKL6Cho{>4`uHCWyXw8 z?DoA4$TivYz!>nb6yFc(=4atM2~*G>gtxyLle+TEL7TsWTy>w zYV7DkyGvADREYOtY+S$FN9CQmZL{K%&(OO?w;-82wWsd?g+BFIZz2awYP^|bzDU=+ zdYVwD(!MIsKA`F;bn3X_{_laG3&pb8L-&WpBzhl1$(f%1an1Twns16Z^$?Q0d(PdJVVIY;??In@%5E)TOH#=gU>yEG(%jrV^l{R zwWb_boiAR6cTflGp=YRi8$yUPMXY&Vc=K2yK~Fo&@vD>fe)+}z+k!oBcm|ao z7Aez7Ond@NQ);i6%tl61A}v_+)9DLRv!v{?EBi3$c6nZ3O{@kq!KhG2Rf*PVI;C%p zHLVxu*84V2npVHyu;WriV9N^)@!{VZ1 z?ry|6-%(8ttQow838#FUDAl;1TO_l(n=WD;=E7u9tC2j-TT*aw+qtPQFWh9Egm+##`ytx#oEU~Ry-6wfXRnyv)0`# z=?jVn(8YbPE7eSSWyqt+b_|t&7qoBvClpTeTP%$6ZDQQj zu8)AmMpI0o!$lDWN9=_sxZ>Z?Q{OZ8GHc$Kd>^%7Am>OhapD@KC@+#+u(AYnkln*_ zdX?ESAxJy{XxFi^t=fght@(ROh~yupn}O0TO}cY(CgYnzBT-pD>GX^by3-XZ0r+uS z2u{~<#&>YC;c65>} zbbeQY0g(1uY)A(QeaSY|T{`V2p+_KTld=slMmoLpRp2$#kU5{*`+vkv0k%LCYNq4$ z+P*u8lqtrtq||*+jg=*K7tld&N{Z@zHV(n=H&Vr79#iK2vB(~Si3Aic+*rgduAtie zSIUx0lKJ{Ejqlmf+-Uzm5{WM?hQ-phm=>i4f&a$VhsJmlTZye5km@qJTBbpK=vT>H-`99867p>i8lkAba#C#Cq9dfA+YdvK zgoirf;H!?Z^}N>0)dN_I{7r_JwDM(SZeuLzl~Gm~q(O{Mp&Um2t|D@E6>ptZi`Yu7P?{gSbNCNqoXT*!>FJ%UcblwxrZNzNM0LdeLPQhFzap zk&?|bSA6K_iYwU>T8nNc(dIu%YAZ-vqGzG)>cuvvMTSg9mv3MDjqysz@K57a#blj5 z^x=}23z8^UfO;0GB*Rkg4V|pI0n#$cZFipBPeD}|iT!=T=Yzdmw64?xc>$dKU zrO|1f5$(k+{L#DAd=K|w;Dt(rMMiTDiA>C(Dn2X*(mXc#4m%I>?}2*ntty70r&>qiHfOIup5rk|*8pmooE&nI2!Yog7U{3QB0`pP$B(Hp)w zNrfWG1Xmx6jIhCg5Tdj%C}$4fk5#Q+Z(Ny$vpnB%R+#2mP%+g_06#uEn6(TDTxT1* zx9Y}p@?(?O#znDTOfc=#1|GyFRGCg$GrpLgIZB(-VoZXm03zuI^mM#rmo7H4I{F{b zuzR6rAc^sAhWUzDqePL;6eta84V(0fBP%9MVQ_D}5O_&hS6qf4=?U1p7no12yaDYF zLEtAW*zK)`LCwH&p*!Rlf3vQC}8utvtm_z z6Ed6<_n8tCKGs#+Va%`{EYpqnnJ2fudQ2|fZ;z^860@JwtF!4vd;w|_V4E%O{jBhN z1_%SZvIW;}?$jwSO3;TVreN<;eaK{YMPBYA-Sm&$7A*q7nUN2O)gom!2hS8m=C**- zn|vrKmatl{{k-2V^uXYFue~@LdVi|R=eXxvkMY&A^DH4)&YaO0vGp4L_kcxNZ0+6h z%Rr>m2&Kn^Uvg3Vd{Q+#akAA|Luv6#!K7tF{A&{XP$ju)OQ~MIe%_&AIXU->h{?aL z^9onz)p_;4j&i*V!Gf!7R(5l`%{83t|(69MfH|L0RIA^(C>nY;)G=Or&^ zqp&?-sT*Yg3;fHF@>H#KS%8xCMCAHLzujS7^#d4s{#^=zTIi4lz05gbnNjzP^ zVZfXIpooP$JWNBg@6I+`-b_DDFyhUI`#ssMjt-$D5fkeBnmf?CM0(!AptYiFxqt4S zpMmzMSw@*e`1&t)WD-ES6W?vi{LbKE3$;hSgtR@e$_H;KYJZ(q_GeH%z;JI#h=NVX z$P?=uSU%my7S*A{<4dT(Y2|1;Bmhw@UcUmQ#*usBiR`I^k0$gr8uSe|H&Ol2qQ!5W z|2@!78mbRyq;#aqKBIntY4nEUA!F%dAYKs1tRFBT=%AaJ@$cq}yEe1JhC3B3~U)N7C3ih21ZP}*)^TG=s9;+w}8Q(Vny<+k5%(S{)f(`I_LFiatA z*)z{YI#}fQ+R^`*pa9xC4-_i%)lE7v`g{p(nvKA%5N>^k7(9V+ z)R#4Z`iMXI)|#>ol3L)*jY&&trnV2q|E~lhi-Vi%*^(P}6n3bIDq)P$(A=)2-Jay! zY1g@fnDyaPYWx_*Zvt=BASvI#>4yh9>&n8qM0uja@7qx= zof_DHRm${kxoizCUj*PLJmD9}Df-ct+YNPL(k!SLW*rW1%(wh0PX(>Www zzo;I0$&_Iww;Ls-i~5E7B@h&wZ>VSQYM?T8dmFoFkH2AM7{xN-Ww`Y%DBWr?h8$Ac z!|+mM8?;@h(tI~Id?q->*$O@ELf%s@jMVI9DHpBw#2pEJgcli6zm7$W(zKLXr(WJz zM}qmeImky*l6Y9BuH_VIE0q)?HQMw&G0XXTX{!pd7xLiG`S}5i+8!cp}Np9c`)`cyhzcye)((FNT=!Szr`KVGoCNLesXuOj*aDoshC#K z4Dwe;R8W6nV{6vEUQ-`;xiEckViU`#1lU1SO^>vYuvEeNwg}>&80F1ifhlQ2y4~3@ zz`OoG(zwqj2n1FXCR+og#o1Tg-U7A?M}?6jRA!bgZ$No*I_RJ|rx*TCg6Mz+`qTMF z6(O(*rr(XdDFGGN%=k6XasyaA;L)c8D$H9BGu|431<#__B@quq4uBLQ>2)-$;RM@3r{ zD(cX2$x9w?BQC&rr^jwh39H_3w1=U25$({9o(ChZhLS}rJe1$%CtrW`^Gjh&jnm32 z6E)l0j(AWzrO(UugVZ)2FbKr~Nim*Qg9eo8K|CeBrkOoY74tNRN$aR?r(PDg;1kWE zP0klb&@z*O3zup=k^w|y#RC~%Y&G-J#qzXJ?6PgLQyt!FHCLq8UM=+m6l3lT0tPr5 zEIHptEipJKiUkwbob>c3$ug+#B8nm&sAg^7qdCL#3i2w3QkO^Hje%1%Duos%Nt^^D zL)VjYM>9#3^k7^=!*$V-3l2RxBb{Q;L@ELa;2bJuz-Aj`=UAkjb*wg-->xM|lkHTy zc@)apIFdY|zea~D;hU>iz^CSENv(;1ezaY8>D>iL@mH-3AT+Dn=Hm_d>K4E<;;GkZ z3Ct0$nk=!$VwjW+UjZv73)!J>%u(cmVM!Mk42#dYXvGgvXgXc{BX39$@2d_>hvF@X zfh?*&41QTCHl1g;P|q!>ZHcHZ=6|_{#I-R=ptK5;p8elHt%sa0XPo$xIIC(f)c3fy ztcq|$QW7S%N}}hC3X-2loMgC}5-~5cQ;QBtt!8f=id25XCoy>a-U0$u-BCkzRb*Qn zK`gMqhPA;Zp<)7u#6)r^S@&PrP<4iCxjrI<9~B`Q9{!_W{9hsG8sXb(;#b>A8L1)4 z^JIGQ-2;PEV=?1Nb)ZyZ9^(rtSP|jY8o*5i2PqyPU;f0nsCss*%|xRxRu)CElHVKt zs*}FN6ri=kZTZ8*ipZu*8>d6sghrJ)oX=#yncGxWZe#*B#h}SPEw}HtyrQDh9_7G0 z!GST$SnY7lP_gG9o2KufGltqJo}-MFaA*jBkse8z3Q+$kaI!=QFF4Fq2%gH!IE2}h z-3=c=f07?fF`8`8+;gfcr9cUAg#r80?ed?B59F&A=8Q?ubPjIa4SZ^qAaS*rCx(2PuM9H#f3XH3;~LJ|x^dJJR&{`AS~BSVv*wq1~8EZJxAvZK3BC zIEQ}1u!Zssz+FeYQEiJ-b|2VEC8!fWV$`(6aMQ*BaEsNZZ>!igRMyHQD+Oro@Dy1+883H-ZdG$uJeY&2`@zoWL4{QLZLq7?>X zv-S;DT)>-gZzRzNMNixmGZA*^$i&0%AY7=()^~Usuv~;Bv$?c;Fe?*eb!*WTD$H0T z`&J>4Okz-0HD;l(aPpmIXLwwK`lWaZip28WzE(g)cQM zQuQxP7ctx?6~jl+wU~hlBu(rZ*p1Ghlo1!u zCt=|PGZ|ar*7-U{KisS6FeK@f#v|Eh1-I8zuQOBZK5%Tk>Ayhmk#QnDM#-@r69I1i zGA--#jUWJ{z#EurjFmAMK4qx-vv<*(eM;V>?UK&r`nQ%VBd;5V2}4r=z8o2Q)rT>> zeWD2y*brVJYu&P~FrQ_rJ13=}l2{)Jra+DSUFR~rRYzIz zC2}L{HN27|ic;`Ipbsff%)MsUJ6dFvBRG%kSaUicXbyDI;s+*EwSk zDps&>M;Vnw``AFdXf%*3Pg>bu#OI$OiYl%-MohdrNdxq)-C3wtT?0PKqCRTDbP z=ax}088{5x-I@kwns?TL;dqS63?YO5{%;O zx3pYymP!jrsBf(d6UDoUOQN#N>lHj9q29(|{{$kF)I1fP3_d3qb;#tk3i+P0ZJz`} z=Hjhb2{yz7Ug&G^3A%U4>{EO;%*(?*Nz*R1FF2_Q|B+b_yzd7kvsUs<9OEJ+qB6W9 zlgEVgQ?NWyeGvb`QGZX3XlK}d-?AP_)G!}{GpCKqCaBd`ssP@Cz6hbwZ2^EishPvt zuFT=p-o(Tzt}!41E;)zkpg(x-M5-q5!aSQBoL3w1&qIs$8!x1rzeAJD5>AG#mL_u6dz|UM5qDoc>SVR}nR;WOD?hSw5qG=XmI6Rmk*Q=PRGpL;M*}4x+@U*zt>iEnWifpgzEWhb zUHJN+hJmFbEv|2@TK;3hx%}-__(EC;d*InU7UTyEmHcdTJ^n_vc?L%Q{^X02d%4wB z9a`=Er?i4*hXyO74hgK`*u}EkuN?gAPd|GEU*zA;!FyXKb=!$*%yswSehLref;RJB zbbk7Qd)KwS5yY5Vw5^XM=iU$nKc7AAo?&%-!a)k;!ktupbGg(O(Aq@2y>OA=|1(0V z44~H7W;(f)%R=-&06VA&D9-_)KlV3{5_VIO>xRyhwyqz1bGeK!+bau|f-1fkIeAYg zAG&-d?lAC2Dd%a*$tW~bRIN}>IB?wR`?Y@$0EAb_8|kS9=4meDh7UEYrX7J&F!wx!ovVaLD8=9Tl1og44ReKw(bh{ z%G{meKGk>9i|tRQrr9B^t+n2I_L?{%qTXW@n!+;XpeR>ZgkMu)1`uFjM&u_86ZZ9 z_|vd@9Z>GwIRQ@+X3RKU$r>5N1~*U?lImz^;#9{nyHgR7rlil-N_>e{QggXaFz7*} z*6#~Nxc4S^!H-O4f!vGp;YZz7`h^zJ#^ zIDuEgv*+^7*+kBmDg~#Z?|n-=u2te2`WUt$|4(e%hTad!MztcxmN%t#z!%e>Rt0OC zj{a?F!K}@X9m~(qn*a9zv$6+qbfA$czzOjQ?me!leKQMlI$}y{3#{{n<0T-rz8+H% zKYWXf-qEe9@dHe2U70WkWE~h`1s2<(m97g;dnFD?(e-9(kFMEgYgZtmO8ksblwN$G z86>htkp&0p&$%@psRjsnhX|y*B=)zrk}pE?D+$@5?!uoGn&OCF^YPv{w}5Ch4=-*k zuq-oGO}&mgi-V<<9&v;(>7Az*z;;$YS9 zbe#lE_F#p%$zwWi2CT1s#-APGNpEASo&IrtNVD}kZi^Oy&)g%PfVXA%Ur(a#Rx!e} zHhta$-~l0AToc^-!evjKrAkRhjq1+(V2z_%646mFU;dQkAl2+~wTlwp<&(1LEwIX4 zA#*=UAbihv)(GQwe#oR++sYch$hA|Mq%X;sJxHeq=GHCju#o8@4yeBktbB>}G@!zd zcjL>ZbD~hyW%?H10huKF=+@R{Qu|zIaLo}aWi==4KXI@i5M6u;px1q0hK&{eAoUxF zn_>y?c0EW@J|gz8bh8~heoZG+6qXtaASVdnrL%S6mELK0QtWJodFVSczTT`!|7V~8-NFLDjfLEQqmiiQ_YztxYPJb*7esPGi8oqob#*;Nt{=!JSqs0k3q>^Drznz zf~7D8KjH6MtD-CZ-mf4(1#H|$QTT2pe+S8z27$xs7aYQWWedBv>v*mlV-D5`%NrTs z8+7Cd9CHK7*+Vvn(q#w+)iE-o3Rfm@MK8 zCAoG-TPz9=N7p)5Z2pHHWB_2|!N+xB{F`G2>(05r9X^V|SssX$P*w}p?9E?%onVGv zO`W8f(yWb4Ur_{;kk1vG`)8(U<9kkmkRlCbCt&9;fn6}-FxJL!pMlF3)|s~Aldv&S zs1_NnJO20X@2&Z|A!uI5W(CE~t)_T<;@Gnml&u<2if@&#Gp`V)eE9IqTC1;s2X+M9 z2LcX{*#-{Wa?Cm99-4+EM)b8P231P~>*7<@LxQ(tKbB_-sEPOMK>t`>p828O1ln7a zpKcCNDyH|@x{@ZwUy6`ceZ!cIog&4UOR8$Hq%?mG_>DVC_#ke{`9cdSvXTx|8Tr`2 z5I=NFw)ylR0$I&-v<{D&YLNfv{VW-HfVy6UdL^x)hwOPi#2KrsHHnLs^Kd|cwtb-i z0!|iZdv|uWUJ*!M%j-`Qusq4H6N#Zq-=r;1?JydEwD&`zVM#U~6Iscg8yLgQYZ+TG zg)!QId+NYcd(zF~S1%Y~$DGZvhb6A^D79TxC7n9~^drfK{_aEgVVc5gJOvp^F0 z^=c0*1~=bR#Q?-mGnNY!yY|vljjvBe7CYH|GX|B!5a*%WY;nZ3=$^u&vBmPKdmUWE zZpYK+4Va`8stwdYZQoryNLJ+>m!$c2CLx0#zgkd*UmwcmG;z@4kj zcF$8lr6DeY8W6$SqrLxj`XAM@UZW|~vbAoUZ;*a`F)OC*8!7oD z)N?A#D^@?}Bm93J6Hqxwr(wnV&C>81aG{_tMjM#*`zt1JTkVAzbXRwLpxOQc`a?2b z@E+=#lpqJSyaRNcuQZ0?TFn<#$Hc$&1A}u#O@|@om>M9jlx##j8{5*_K#^CTexD43 z|D3Xvqfl`c74TrUrXm#g3BTv1$A0#1+!Enl4}L|!hESDY_WNUv=TIa&rr&Z&nh8`eO$}&Ox))bvr`zSZTpeS4dhWlKaVo!s$^&Jq9F(NhwUYr;RSd>)IG+$ z6%dDHQPhe1oPQ!Z5pH=h#o{*Wx&**@Q0I?;iRgn69ocRCaCjai_0YJYTzLgd=((Pc zja!VAR=i+z7jO|e!_qm?^*s%-to8R**OtN(Vb7`K?F!y4nG9L4U>tNrR>yx$mjn@} zfAG$Bkvs?vW&oj@|9I9DFb$MK^aADNoa8oEcc{esfr7V~`&(&gc!2TrYGl3gji#qw z&r3cYiHiZ~PD6XUB*db-Pdy5%0x>l~O`83w&w87a<+`poHv{LDVeYn&Iz-?PsQER7nDnP= z9e#^bRkogKz<$27GR%$aYeN#GS2Ppy-kVClzY?U;F;bKVoU&sc0t!-=;hmUt;dD^e z#kMxb6SgtaAy>23evk7=&%OrT9AA$un7k$Rb^JAH9n?u$x1wIzgp~uW7eQ9vK3Rr7CSha`I?NH58ys3*4 z>ozv>(H_l^Mk4gLcz?u=){ufWJJ)I`cp;noC(WT%|{a6X2X7Z)f1e?1E= z%p4kiHuV~ONl}ch%#$XOtKMJ=Vr>KOf)O@7dSENkSwrzCechD*?PnTIWSNS;@MZfo zCGD~^`hZ5EtXW|?6=f8ZpC8(mBpCAE@t@xYzwd_t30D~OSp=kh@;0Vx4qjaV66OuDT38%SUN|3m_paKH|ZJnd|uA#GrWgDevj4}$`k;<*dZ4yrUIFNZYD{ubi9EE z)%kb!U#f`B$#ucUqT4DXo@SmNPu;K|WYd6yUl-0>-{m}OSUa9n~E+$>x{5j)nXv+xA3E0XwRuBn~~QHr7PGybZe-`S#+FM3_wt7<3)$?8{BWe zsh78KHNbS}-_z!)V7;f$juQ$8$yw97+l`@dobYr3@Pb@~)wp&qax6&Cd+^Cy!g0+H zC-Q4y3zBRqdYl)8N%nbPcH9s&Hz=vO^eCWDEjW)J3Z`tn`_(OwP!#9>!n(zF#%Fo-v2rXI6uGX|x-y4yLL^rc8@ zi0Y!O&*hwN+O6t)JYKw}&Fx3ToSl)>9p`uTnH6V{G9JeTwCJHfJUc_Q_`{G}A@$4p zgoKHM!dCzmq3e~oLc6$5>0L3NiXUOG<;-!RWGUee`U_9RM~ttHHk*6928b44SUJ7F zSlL-L-fgd@ z>!;uATMxhut%*=csD9K4UdyugBkcA3g$9|ZAXaxM9&l|Yrat9;n^e(Sll^N)+&!w# z6zUkU+2qsuYkEpj3pyN@v3N~NzQ)|Y$Ny>~A2zwi&;RHDJK|ry8J6KRH>*)xY?wVm zOtfWl-jNL~x^u#Pb7_c(Q&HI$kvaN_c7Xgw+fo{WW6$-Nj^xu4W2sF+FZzl+Wi|A_ z6W=C4E&%?(!G7^ON$pJ|rFv>pM{67MYbyKl|CRLZ@l5ys`<=T>QgWz-TZ9NDhjQ9S zC8Q_gx``5VFO}`82|8VXSh>VdQ)mmUDBM!`RFY_wW6E{QlT~`(t~* zUx(-Ox~}JS^)Ew!S#_@#s&AFt>mOWasW;<#sk5tAw4(HwC21@92qPy2n7#3T2cktK z(v!Obmi4qHYoLm^(g=Wx#ZEUY%p3Kg-VaLGy~->ie+1}?NF{q=!LMFIZU0*{#& zoj^iSK0qi7Hf|M;eAmCQ4dUPIEE1369`g*PDP<+GolzNK%u-+*K=;&m?a=1SMzj0Y zi?TQD6C3y#|Ab|8`EnFs{i$;SKzST81QUaGr=Q`(1DIelWIe(AU2V)(<}G`{x*qio zslk(0s})cQC?!lj1c{Y(N$fIZz!hx2k)?DNKqCs62tZ_`$Xg3%0b?#|Pvg4;yJA*m zo*&|}g-d#$LyiSEn0mkBdpHIf8G|kz{Tt+F-nz#6N-LPzE!88*i zu~gZjS=o8POS@ArA6+b&Zw96 zeFgy8b}(@RmYY9o{mTJsgXM?}i|wIm#YCWE994|0cziv*cf&R+xs(=$a*mxx%aWOD zR~tS^rz(ArT--fhi~wUhv$PH@puPG1Iom^X4Lb1)3Fr44Z49#Gq&H-HX`#v4C}hW; zKqDO;dZuI8~Gz#p)z&Ka-7&J{C9V>{Nfn{y4 z=Z6-_l|0isJ0Tkxy;869Q7*PHDiym^UVmBLiE;!4+5*VwmD^PYoroF!O7)%4vPCtE z$N7n9DWRN4n;3w+`~09yTg(0wpnL%YR@zTRCnv-@W#)mUcC{L~tw^AWPwAkVAJ`c1 zh~iHhhG{*y8EjnB$tF`v5D!rmQ^S*AglR;^VSSo0uMOb zsnQA6fxos3mB?4CXK$QEE#|{cV)u_-B~Ml_BL&yYTB8@?c8_R#5`IQ=4YD&~ zCOl?oWS&d?8nXgC_v#itOYqpn5yBgbre~ zd-&bmq_rY$f>GBr0XRgZ{WAxQWxqHI7KtaF^Qwh_#z*gS9Qr4OG24oYvy;O19d1o6?PE@;^Cc8 zQA|{=1u(ZYoI3!=SBv><6<*!OpV0&=A8%aH7NzJe{E{wK2)LcNH405AmjOOH1v9%T zjYsg*Pzp`if9st*e2I z)5aD(vp8u~!J*%3fvCwAr2$$Wfi$pA+Y6iQcGy;^rrT|3!y}diL!=Qciyr`8J760q zSn3u(Ppmy1npL@0y`laz)@^%6{9i2WK6^mVo4@cHrB~zqo8n-N=?Coi>5cEz*r+)_ zpczj+uIh3cK*i4$_48~Zqw7gHpr-ibOTCL~hV%pdhh5xl(%mbIBrw|xLRLW0H2!uD z5KSB?Je!^|k$bG}|Vxdef2 zb3sZ9^wm+Z8Crs+&97ifk)vSQyBO!MP)>NBNrx%-Z#W-jxKn+0^$cY>JVwd^(WKRw zUJm3LoV9U71wc^6;Xh`!VLnipxderr*G2_jtd84F>aU?g)-6yKDJ)AZ?}>ZZL7Xo9 zXMOMa5D4Zk=O3_J9)M2kPdZAMKjNPWIG+exJlJG{eGz4-BG85bXVh2}%Sr%csoWZB zGm>e5!GPLplR(RIq*kge0?WPq67v(VO%EzaR5o$-KX|3>l+t zXFdH4F&`6X_$6qeU27qii|NH#BbOgWdvN@ga^2_jCjc7yb*c^dE7~&4q_!pAy_$F& zZjpbt4C2B8Z6*O|Xl?B(Ha@Zj@qf-om=I~=8>88Se05RuH&lb1z|I0Z?sU1O z6V8EAWks- z71IeQH%-j5SMHm5CPx|5YT;5~Kyc#j;<^Expa&17*xF>cp7sOZ>-?cz z3v9`J4HOtJdHA~pdnr^nenxA^wsV`G#o_{Z<3DCiuo80pCS@;$2L2@&iDJQ58nxSh zyhSy>xg$_)z(K*_s~7i|zg>JU(i4$gS7U>ppCcctUo^o2T6m@deLA}Mksk~9LA?PQGx7V5;D9!g&*9tx60 zS9aFHPaPM}l}#~l%5u`KDE1O4enm2OE*Eb}7lxM2HtY0x)scxq$o>uE0?oH5>Lb*H zm+bGLQ&l8@gTQMqPQG>C7Cw{Y^G2}!TiZL_kQZI;Jmuy*;}+r1bw;dh+}1-O`IG&P zn@Vrt6GcsR4Lat!8|qimtXu%CCRIF)Z0x)dWP<%Yf_t0weW@W7Tox!!DqW$?aIkO> zTz{*Dr!Ba{GTA7i?@khQRvMPP@4oAD& zxjKM>L?fd4X=u_?hM>At8Bv!o^6AYxgU9A;vDU zzqLg@ky3&&M+1?3+@aUfx1RRsQ8zmxsm+e%qzaK@zrdQrg82etjY$6+h>EV(` z<3H(o-4);Mz&uy4mlfyypgR@1-fm0x<~RR7If|DRfv;cOhn|J{sf?$uQ1B(&cJXY2 z*(;;n+*zSqnBB*4RI9UMm%3)*q;cTQ8Uf>Q)M!fDW=~sZKrW67K#&#WNd@>*QF9S? zsApr;m6L1MJ^`7?JOwEFtVbfQyfXb35!#dBI8R)#&t-n z`|fy{{cz05%_@v!I_pFQM17v%`ohs(p1-ks7;aZv*ECd^4m}wzdMA0ixg)K*d#m=p z1Hp|$^$CrCJdFs7+t2VRT~_Znx*8>rZ+4wh7GnCPqyga7t1?o1sS!_E6no1rR5Px<+9Qr`&800Y7H%qoiK-6>kv((g4zHK!c3GZsUU2Ck zkM5_#FrPI%?6@UrUQQN`lq8wV-=FwdGZ5GJ~rR;WKxcDYkCZuP&6or z;=+r$(6S}nN{kQw`jpT&#V0QG^G@+bLX0lBjZ-5U;}RmCLl~5&VL~Px=A(^IzCrqq zTlIiI?#e_&i6f+=tUjytQG$^b<7n_1H!8ICQj6@SVnXRUN5Sr;Yfmycyg{nMvK1v% zFLLHjh47?L)(gniCEbk57u_Okw31ZIM&#$xJ=Hs#(XU)!qK;q%kq;gTOW@A1>EG88 z9hpT@Uq}zw8U4*jtL|uZH)h^{V#x`En8*lOkU}=a{j}Di}n9|Whu)} zl1S^PY_#7Engbn$Nj%gRIccB^ZsK3=ou_Xv0CVv*v;Ak1??{2qb^j{Jlar2D}(=xt~>Y> zlejNju|JwuG248fwH1t#fV3ifnvmqRW*OU=8@zj8sr!iq8u12_kz0;*UCC_ob4*|H zq26*+kU?NYZcCFNrbf{%bM8bALq;7gLWZpu)lkV-gqDflvU) z0n%5;+5p3tm5Xcs!5b%i_x-os%!7*MK^yA+*8=iY3RX|Z=Bj5#lq(#PmYR2?Mio+7 zVJ{`Jg?Xo{W^>3VT`H^G5AIG>S_AE%sOjPqSO}izczr!ZXW6?44c6(KZ+oL1g*x%0 z@8<-ZExhEOV(~I@W_Q4EKPBz=su!RY-c|jq#Ash^AIkxHypT|2{*4{&JC;P+%HtJ6 zj2QZy=KVa+g%=d|SE*yHlO;15U}60aF>-I|7Q+2JIqZZ0!pLbEO%GV#POR}R-m94o z*r5j3*8$n;sYc432E5)-l(0`YT5`akM;|Lp|1uMyPmcQBL@H#mYpwGKg3Z<8V|Jrz zl>t&QOL6+vsVUtJsov6is)NkRA=fiuFA- zi_(zIPJih-a9<;e~hpJ3x0h0|?&&j_-(TW$&xis#Skr>dtui3fxffMLs@x;$!Ku zn%muixhovxS0!-y1O8yGoa=~o)%(eSBI&*|wbz<;b*9q$aAa!urbO1~sGJy!sov2^ zL+nR8NrAI!HMglxRc}rRDCrF`m1!-bsXyKOxvmv;qXt*X++6UJg@}+)DmEZHTI9ng z{;0pwG|vzAC#0!Mu5M7>0F!y&sQ|k?Woq~ePH|Ayb?=+er7cHDWyjEV!-Y9^+-Qjz zL7&AiGjojbtOr~Yo*? zOHG5O^AitbP@=J`vLUxMawWslc2Y*D_n(`^73+No=&moA09!sbL__I#Og*|^XAzRqM2P83)2 z{^u4C@I5KGvOC{`9CL6Nlt1rc-+v-CYT^kN^ zbjhvGeqo-_^8nh^?k z6uaqZL8d&Vu^^09CUx>EIf$mUa%k2>T>8+`NtFl6r)>u0_Cl%=%qln|07Ngr5^$jS z>Lsez7KK0R^{*G-yvp7+a&!fu2aDp!a(nc3neO(u>UtuW6{%PQbkvbbRNgz39>%ib zp1MsT=G%}9IYWyeyH@9apRbTF8+)-f0K>HxH{rCvO@07~vs0)u=UZialx#1__)Jhs;%WVov0&XKhn|PYo*ZcCl9T+loYT&4!j4viZT>1@V?`&iZ*i z*n1i_X@qG|t54ED_um0mgAM+{?`1*n@&CHiSk6d4{f)DD){7P1sX(zjhcn4LBIqiY zR@7%jPW82&nmWb=ec-Y{Lw~U%ZPWl#KJ6N_JQs^OCJ@8>0MA_|o_nWHy3S>9TM8KS zU-bD--kQG?dw=XEH0ZR?m0XQ`aL^3r`?NzhU?uuuX^|1)d+pp~u5ey|vnrnQ zHEN;WZRpyLd8LA&b8yf*mG8Mww+3xD*Y2kJjp+mo@>2vJh}lGr9cttKp=wmyP+KV3 zJ#}4&1*l5nRw;J=DEz^KY-8QP$;_92&gq4d()A15aMvF9rhoZE04k(19RK4B)e+2p z^_icWW8`V;FCfKaCPn`?ylGq??>N9S4nn9JjoL8-iF<^m^^&`|ai@TkewUE|*(E6U z6?Tj>WdBFlvA>xxoQ|k9Y~F9@Spc}q=Cx-;l3|gr<;m|NuhP8*s!9EV@BQ25jhTcx zcs^vRs53_lLujqhETE^k@V^bLS?f&J8_r`On1zm)74@4`&+5|vRFwj6 z?p@fbY89v{7smsIX)C_k(r?W$$o6IR0J!|(N32J5c{J@x8Lxf&RzejL5)sA%hqX7p z&(eP}cIFBYytuZm4|D6I&9dK|#aD=&gwk9)iToSLsV6|@6lGz|wK6=T!%gnXJ6{6p zEDx({>3%H(^-VXIT=W7+#pt&Nch zT{V)k;gDVlpI5pxxW1-+p0Oc6pqLaTv_wuhl78*^%@%Js5ZTb0r?{n6V=g^fP~@aQ zlOvKNsw|Y)DL+h?opf|ArZh)gY0k@;^;L51MTNSoPqPVsYf-!_CEoL`24Z`(U>CKpZ!V5#A=MfShd{0fV2GA<9r1OW(h$Wq0$?b{@IDP_d(v6 zGxHc8;Z2WaC5Wm^GS>7D;oKU=LK5(+2}tv(Pb(7X>*n}9{Kkz1PVLvTW|qRH%EPHz zdY8(At}La^p){h-Eg8d}>mD9rv>ny4JaPpeHPnVO$j$1QUjk~Fo36*-Agu`q>H5kr zG`IqpR`)$v9#~RbzZ!tn5**8S<1;PNRdCy3tx2%H`;<3P z6EyAxrMp&6X1@$hmS6itXX{#Tj1RPz7uGQWxMko#LH38+DHoK6gDXDlPHP@X88>>U z6ZYti2%|~<7#~)(`Px~KF_*Q4ivL6yw1C8{qmMK&!*-w5K5P%#t%$r|@syt#=>4?N z&t9j8UC`JBaioGiAi4`T`*LP`nveP7$wDoknDVN3izlbzehSWN-Y=!)>O-t_gZ!4L z9g!VHS157Vh-g-+Ltm`F{p6%Zwv>aY`Wj#ODQ)j?Th`e1&JaW~eM71e$1+s$07QyW zzhtwDfl8n#TqSgvK{{LJ*rPb>&Z0bV>H-Eh>hu`UzM|of^~kOH)HcC^vBJ3NiGpp? zeU8hnXU9?fs{G;1rQzi`GlYD@*Zbh4I=e=zPJZzHN;9NtNLZi}PXQ#XeYMcFLddcd z|E5B~+AZ7?N#N;+ydZS_rnnaasu1h>AfDudPg{(O{~Q%xx;*KG(y?a z@^CyRNf-=Wi-s==x`**ew{bWcTL(Z;iaI-sl@9tzTm1O72Cd`inxFNuOUoOPy95l- zd%PZzy}GlI3RsG~CR?XOw3q7L4h$*1a%|_9Pe|BAEMlJUQE&nP`2zvb03&KWgch!WxGgh@k{hWKZ zgtyfT{NApn&Ylo!-Nivgd78~%nz&G&0$cJOkbyx7dB*%!7`?H}py@V4>l)%8{Ib75 z5}&23vouYWSbmTTRKj|?s>Ya@^E~+(LIg-A@@yC`Y^dQ{2M|+SpI#ed%=_gZ>PeXo z@z{IyBQ)~upifvH2z>+Kwn?A>;bWlq+W=XJvmxz;Yy;hGc`NvJxtFw|_t!Aw&g3An z{&SI!;C#Hlp7-lDIbS&_UVAw7(KFQC_b{!1dI|1%y-Z@f!OaL63;<1o;_KKs{`JYm z^Zk||$4dIbR-_(H?X*Z0@k0S0~{6Px;yx#q73czI~8(Lm+nbI;z(e|7+*m z52OD>&huo~mbbi`0#8v1G|QqXgQ$@h*HszQMaPzF!@IDTjrWWcH@~Hinmi3H3taXl zcWLU-x~m#t7e_Hy-s-jKR0r0}Ct1`aUI+!=dybI((f*f6zsXdVQnq-7Dkn_RzOIRK zt3&6fL9h13FTef-qt@3!_qgEYaYfQZ;|%>tbn^C=Qh(i!xJ+y%ki|VZ+V3#9;8Ymv z6o7A7ykUW5Tr-blcU4xO;t6fFeh)5mfB7{@ZukOzO48M-@fOKx>TPTsg+#JINF;6@-Ss7I z*&YpqY6nN75Sd)}(sYT=oDKhXh2$PKi*EMbgtUg~2nF$L zJWsv2yM$|NtO&r4vX^yA^e)g=~6eZzd|DB{FY*B(cLF`3TS=hP)-uRJb~CUVyTuW2u3%!be+Hc zXFqx7)0kesC$#m0#H64S8f0NUw@6Oq0{Nm>4scp$n7WHE6-j|##LfBWSW4YOknAj^ z+atXi^|43j4ul{-`_RoPx89Xso&178CYk-^4f#5&atG7yCQ~=@X~t=?wXPdILto^t zO6)3&2=~uuHJJA5^tX29hsRd#rk?Z5@ zo<+}1&-=GcCYH3)(~RhaBd)EHO@xu5*WJ2mdRzdy96WkOK$^B$E?Ye=b=npm-Ms+gQI z_|?f&wWud7a~s-WZV;G+S!v3Y;iYdK0(!>VG}F%k^TwZ3w0c-JNjxL;2HL%WVZ^#)e-pM zHZ(T;*8vM>vnE6F_rtmwj*bB&@`&2!I9+PvUu-6S;Gc^n@2lL?ETCtgCF$3U>@Z7I zz0cG9MH<@&-6e{sb)mE00k=etX_}`{YV&|8-Bqcp>@uxrVeIgp!%y$uQ6j64EVOc{ zT|-OBPJk+dpxyDE=c>GT+CBSX0EPwK$;C)6I%Tr3Ke6=3E8D0@{za+oo(N%zlBG6?&%f@_Z1nd&YjjbAAJkw8`s}!T=Rf>h86*fm%~?81FCJ z?N3d&vtwsbYV(t*$$SFBpbHcceYo}>1~~x_736Lf^gDG>OR_~$fXBb z`?|G*Q)WO_&R!rgrTC45@oRtOxv!0r;69x*rByrQiTuxhhYyewLAj_0w~hV0qsyAl z3HJWKVMYo6LmlUN7YR@E^7ZDzD+bj! z3K85zhpmcIG#szmLhDV7Vd{c154y`pIppy0S_@wqB1rF3H>5u|*_BnL1vr`>LekpE zYG-H)>Oa$?H+Z2H?;rh~s%zw`VfP>UwirqNQNb;dG9bDW#5$BH0KJtp_kT?0_Nibe zV=Ohg3qIU7FD8e9fnW`wavYNT3dnmq*)bcV6$b&$%zVjx#=EsZ!TP1v2krfY-jDq0 zVVZtdJi9g^lv@w&+oqvr{8IZ+WOMzKcXI*RVUOXkCuli)^)V-Jc*Vr+w`-?tXevuy zYeL^@DeAFm%EVA_eqzc$0d1MmVvqj^m?0bhJ_pw&2ogGa4+ou`OoR|nwDJ$^V7W!< z%Gn9g>>-UoYvufgBJ%EnPtes;=+uQH?7CY!5hny8@s+0MKRnZ>(@n(3&V9_9G=1H< z&|t}aq>@)%u~N+?4l{ruqu}0gL9msr_SZ&;?nhh()_EFFZjpF#HcG>i^T#Lu-%FH{ z_O>Bnu0EOD3pP1--R(T^bz>_9^sRyjzA&WSz|4DK` z1==a5TL6FPPTFSyh`t`R$M-SwQ)77x%6zX>xXcA-=o{0(8Q~T{|3MS z(DO%-aHUVEhU$6opVNMk?*j&kKkHSq?^PaW<|k&?Sjq4CK6Ni$ZQN;$eSfpoSf&Gg zy**+*FEc%@Q(7RZ4aI(G7qdxeH>8vnrg^$nnNI)lHMm>b z?5teOIyV(i7W6!HDGWgGl6C(_B5_}!ip<%d<A zap9ok-Du|v)UFZrbE&hr@w@qnmQUi1S7jt>0&AFTz;Gt7rOmE@@U`jMOVTMWd&)4xa&Ah zqH;0&Sg_Htyl6|Sk^4nAr;gOUdXk&8&cPN(IylWK%MEEIneB|*PkRygE8jjJ<_C@@ zs*HBLn2HB`4Uu$%;3YLLK|~G4tiA(d|76=1F#XV8y|ElNzc-FuHWBN-9Xq_Mrr9k3 z>psq#Zs}B_9I1@oixvj4LPxcuE$5`De$F^bo0qzKUT6qNkENKXBHNaj)fp|#XXVWK zs^O^<@OdVAJ3cywdKym&<}7T-EpewUZGa6%xS7B-P54IK>Kb|? zr8eVD3-~DiBC`6fv(B|i%cNaLe6db>Qz))s{J6|`eq!6mT4;<+Q&aN*e4)89-HX%W z>r%72;dHTxzqJ)LA=QP%%7KEGq{(4JMPhc%Kcg_F4~Js9MOa9n6C08fh$n2xM68ic zZg}4O(WMo2>Y;5lg(|I_UmkUasDE@&3upOTC$+-Q*|WKQs1U;Nj&-}wm`S7>F<->&irGXZ_&aU31$Lo;w9;A*H27_5vvv5Y$-t+a-izRJ>7MTY73^D? zh|C_{62n{QgA9