From 8827c11445053024887c04f297e9804387805b9d Mon Sep 17 00:00:00 2001 From: Smith Date: Mon, 9 Nov 2020 08:58:09 -0800 Subject: [PATCH] NLDI delineate --- .gitignore | 3 + .vscode/settings.json | 4 +- __pycache__/app.cpython-37.pyc | Bin 0 -> 926 bytes __pycache__/delineate.cpython-37.pyc | Bin 0 -> 10259 bytes flask_app.py => app.py | 2 +- delineate.py | 5 +- nldi_delineate.py | 286 ++++++++++++++++++ splitCatchment.geojson | 1 + test.py | 124 ++++++++ test2.py | 56 ++++ test3.py | 46 +++ test4.py | 18 ++ test5_working.py | 42 +++ .../__pycache__/test_delineate.cpython-37.pyc | Bin 0 -> 5725 bytes 14 files changed, 582 insertions(+), 5 deletions(-) create mode 100644 .gitignore create mode 100644 __pycache__/app.cpython-37.pyc create mode 100644 __pycache__/delineate.cpython-37.pyc rename flask_app.py => app.py (94%) create mode 100644 nldi_delineate.py create mode 100644 splitCatchment.geojson create mode 100644 test.py create mode 100644 test2.py create mode 100644 test3.py create mode 100644 test4.py create mode 100644 test5_working.py create mode 100644 tests/__pycache__/test_delineate.cpython-37.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3afd8ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.vscode +data diff --git a/.vscode/settings.json b/.vscode/settings.json index 694b5d3..7a31496 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,5 @@ { - "terminal.integrated.shellArgs.windows": ["/K", "C:\\Users\\marsmith\\miniconda\\Scripts\\activate.bat C:\\Users\\marsmith\\miniconda & conda activate delineate"], - "python.pythonPath": "C:\\Users\\marsmith\\miniconda\\envs\\delineate1\\python.exe", + "python.pythonPath": "C:\\Users\\marsmith\\miniconda\\envs\\delineate\\python.exe", "python.terminal.activateEnvironment": true, "python.testing.unittestArgs": [ "-v", @@ -12,4 +11,5 @@ "python.testing.pytestEnabled": false, "python.testing.nosetestsEnabled": false, "python.testing.unittestEnabled": true, + "liveServer.settings.port": 5501, } \ No newline at end of file diff --git a/__pycache__/app.cpython-37.pyc b/__pycache__/app.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01ae32ffa4df81544d99659284d25d41b99f5919 GIT binary patch literal 926 zcmYjP&2AGh5VqIe-)`Ed0tq|vhDt1J4lU^Q+wqF zI3-73gop4I35i$eiSd@CwdBt;B;EUT{?-=`lN76H*s5=7GC0U%>7H81l;BUoEr?zvyeIahzE-f zbC;NT%)df#x7kL5CFTy>VBvSnI&9P2z}*(3Cn(zb3rtW%wEd>Y)rrnt&W-k*lOx>CGSyB{tZo`fbnJvw~#`tbPV z8plKP!fIhKda$LDf?;4_^`{SIRyGCSVZ6vIo~gX9b|e?yxcG^L4~e&M{iL@y=zl)Q zhUb%J@HSURlP?1)cUPbCLDn?SnhQEqsBys9p~sV=@-T@0dUapVgE)HKb+NNO_TO53MJ4L`9P zkylFl>naofBeY4#F=xU^u6+?-uL_^%gT`RHLYmwLxCiV)>{%Z6 KaA0lQ9{vXcaOI8w literal 0 HcmV?d00001 diff --git a/__pycache__/delineate.cpython-37.pyc b/__pycache__/delineate.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2af857f8bd16808ab06398e2dbde173312c5cfbf GIT binary patch literal 10259 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 Ee 50, xy, return_dist=False) + + #get catchment with pysheds + grid.catchment(data='dir', x=new_xy[0], y=new_xy[1], out_name='catch', recursionlimit=15000, xytype='label') + + # Clip the bounding box to the catchment + grid.clip_to('catch') + + #some sort of strange raster to polygon conversion using rasterio method + shapes = grid.polygonize() + + #get split Catchment geometry + print('Split catchment complete') + split_geom = ogr.Geometry(ogr.wkbPolygon) + + for shape in shapes: + split_geom = split_geom.Union(ogr.CreateGeometryFromJson(json.dumps(shape[0]))) + + #write out shapefile + self.geom_to_shapefile(split_geom, 'splitCatchment') + + return split_geom + + +if __name__=='__main__': + + timeBefore = time.perf_counter() + + #test site + point = (-73.74586, 44.00683) + + #start main program + delineation = Watershed(point[0],point[1]) + + timeAfter = time.perf_counter() + totalTime = timeAfter - timeBefore + print("Total Time:",totalTime) \ No newline at end of file diff --git a/splitCatchment.geojson b/splitCatchment.geojson new file mode 100644 index 0000000..c694285 --- /dev/null +++ b/splitCatchment.geojson @@ -0,0 +1 @@ +{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[-73.74600553494398, 44.00677064364619], [-73.74564034772175, 44.006708220257686], [-73.7458145778786, 44.00618486187204], [-73.74617976245392, 44.0062472847174], [-73.74626687520464, 44.00598560536642], [-73.74663205912603, 44.00604802694228], [-73.74671916988382, 44.00578634739527], [-73.74708435315124, 44.005848767701586], [-73.74717146191612, 44.005587087958546], [-73.74753664452956, 44.00564950699539], [-73.74762375130155, 44.005387827056396], [-73.747988933261, 44.0054502448237], [-73.74807603804011, 44.00518856468874], [-73.74844121934557, 44.00525098118656], [-73.74852832213182, 44.00498930085563], [-73.74889350278325, 44.005051716083926], [-73.74898060357667, 44.004790035556994], [-73.74934578357406, 44.004852449515774], [-73.74943288237465, 44.00459076879292], [-73.74979806171798, 44.004653181482276], [-73.74988515852577, 44.004391500563415], [-73.75025033721504, 44.00445391198326], [-73.75033743203005, 44.00419223086852], [-73.75070261006525, 44.004254641018825], [-73.75078970288747, 44.00399295970815], [-73.75152005831899, 44.0041177764719], [-73.75143296814363, 44.004379458325516], [-73.75106778876977, 44.004317050171174], [-73.75098069660166, 44.00457873182886], [-73.75061551657367, 44.00451632240503], [-73.75052842241277, 44.00477800386682], [-73.75016324173069, 44.004715593173515], [-73.75007614557698, 44.00497727443939], [-73.74971096424083, 44.00491486247661], [-73.74962386609431, 44.005176543546455], [-73.74925868410406, 44.005114130314205], [-73.74917158396471, 44.00537581118811], [-73.74880640132044, 44.0053133966863], [-73.74871929918821, 44.0055750773643], [-73.7483541158899, 44.005512661593016], [-73.74826701176481, 44.00577434207502], [-73.74790182781246, 44.00571192503426], [-73.74781472169447, 44.00597360532026], [-73.74744953708813, 44.00591118700994], [-73.74736242897723, 44.00617286709999], [-73.74699724371689, 44.006110447520136], [-73.74691013361307, 44.00637212741429], [-73.74654494769875, 44.00630970656482], [-73.74645783560199, 44.006571386263005], [-73.7460926490337, 44.00650896414398], [-73.74600553494398, 44.00677064364619]]]}, "properties": {"area": 22499.99999999255}} \ No newline at end of file diff --git a/test.py b/test.py new file mode 100644 index 0000000..043f605 --- /dev/null +++ b/test.py @@ -0,0 +1,124 @@ +import geojson as gj +from osgeo import ogr, osr, gdal +import os +os.environ['PROJ_LIB'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share/proj' +os.environ['GDAL_DATA'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share' + +FDR = 'C:/NYBackup/GitHub/ss-delineate/data/nhdplus/NHDPlusMA/NHDPlus02/NHDPlusFdrFac02b/fdr' +#FDR = 'C:/NYBackup/GitHub/ss-delineate/data/ny/archydro/02020001/fdr' + +# Enable GDAL/OGR exceptions +gdal.UseExceptions() + + +# GDAL & OGR memory drivers +GDAL_MEMORY_DRIVER = gdal.GetDriverByName('MEM') +OGR_MEMORY_DRIVER = ogr.GetDriverByName('Memory') + + +def cut_by_geojson(input_file, output_file, shapefile): + + VectorFormat = 'ESRI Shapefile' + VectorDriver = ogr.GetDriverByName(VectorFormat) + VectorDataset = VectorDriver.Open(shapefile, 0) # 0=Read-only, 1=Read-Write + feature = VectorDataset.GetLayer()[0] + wkt_geom = feature.GetGeometryRef() + min_x, max_x, min_y, max_y = wkt_geom.GetEnvelope() + + print('bounds1:', min_x, max_x, min_y, max_y) + + # Get coords for bounding box + # x, y = zip(*gj.utils.coords(gj.loads(shape_geojson))) + # min_x, max_x, min_y, max_y = min(x), max(x), min(y), max(y) + + # Open original data as read only + dataset = gdal.Open(input_file, gdal.GA_ReadOnly) + + bands = dataset.RasterCount + print('raster bands:', bands) + + + # Getting georeference info + transform = dataset.GetGeoTransform() + projection = dataset.GetProjection() + xOrigin = transform[0] + yOrigin = transform[3] + pixelWidth = transform[1] + pixelHeight = -transform[5] + + # Getting spatial reference of input raster + srs = osr.SpatialReference() + srs.ImportFromWkt(projection) + + # WGS84 projection reference + OSR_WGS84_REF = osr.SpatialReference() + OSR_WGS84_REF.ImportFromEPSG(4326) + + # OSR transformation + wgs84_to_image_trasformation = osr.CoordinateTransformation(OSR_WGS84_REF,srs) + XYmin = wgs84_to_image_trasformation.TransformPoint(min_x, max_y) + XYmax = wgs84_to_image_trasformation.TransformPoint(max_x, min_y) + + # Computing Point1(i1,j1), Point2(i2,j2) + i1 = int((XYmin[0] - xOrigin) / pixelWidth) + j1 = int((yOrigin - XYmin[1]) / pixelHeight) + i2 = int((XYmax[0] - xOrigin) / pixelWidth) + j2 = int((yOrigin - XYmax[1]) / pixelHeight) + new_cols = i2 - i1 + 1 + new_rows = j2 - j1 + 1 + + # New upper-left X,Y values + new_x = xOrigin + i1 * pixelWidth + new_y = yOrigin - j1 * pixelHeight + new_transform = (new_x, transform[1], transform[2], new_y, transform[4], transform[5]) + + wkt_geom.Transform(new_transform) + + print('bounds:', wkt_geom.GetEnvelope()) + + target_ds = GDAL_MEMORY_DRIVER.Create('', new_cols, new_rows, 1, gdal.GDT_Byte) + target_ds.SetGeoTransform(new_transform) + target_ds.SetProjection(projection) + + # Create a memory layer to rasterize from. + ogr_dataset = OGR_MEMORY_DRIVER.CreateDataSource('shapemask') + ogr_layer = ogr_dataset.CreateLayer('shapemask', srs=srs) + ogr_feature = ogr.Feature(ogr_layer.GetLayerDefn()) + ogr_feature.SetGeometryDirectly(ogr.Geometry(wkt=wkt_geom.ExportToWkt())) + ogr_layer.CreateFeature(ogr_feature) + + gdal.RasterizeLayer(target_ds, [1], ogr_layer, burn_values=[1], options=["ALL_TOUCHED=TRUE"]) + + # Create output file + driver = gdal.GetDriverByName('GTiff') + outds = driver.Create(output_file, new_cols, new_rows, bands, gdal.GDT_Float32) + + # Read in bands and store all the data in bandList + mask_array = target_ds.GetRasterBand(1).ReadAsArray() + band_list = [] + + for i in range(bands): + print('i:', i) + band_list.append(dataset.GetRasterBand(i + 1).ReadAsArray(i1, j1, new_cols, new_rows)) + + for j in range(bands): + data = np.where(mask_array == 1, band_list[j], mask_array) + outds.GetRasterBand(j + 1).SetNoDataValue(0) + outds.GetRasterBand(j + 1).WriteArray(data) + + outds.SetProjection(projection) + outds.SetGeoTransform(new_transform) + + target_ds = None + dataset = None + outds = None + ogr_dataset = None + + +shapefile = 'C:/NYBackup/GitHub/ss-delineate/data/OGRGeoJSON.shp' +driver = ogr.GetDriverByName("ESRI Shapefile") +dataSource = driver.Open(shapefile, 0) +feature = dataSource.GetLayer()[0] +geom = feature.GetGeometryRef() + +cut_by_geojson(FDR, 'C:/NYBackup/GitHub/ss-delineate/data/fdr.tif', shapefile) \ No newline at end of file diff --git a/test2.py b/test2.py new file mode 100644 index 0000000..60a0b39 --- /dev/null +++ b/test2.py @@ -0,0 +1,56 @@ + +import os, numpy +os.environ['PROJ_LIB'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share/proj' +os.environ['GDAL_DATA'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share' + +from osgeo import ogr, gdal, osr + +InputImage = 'C:/NYBackup/GitHub/ss-delineate/data/nhd_fdr.tif' +Shapefile = 'C:/NYBackup/GitHub/ss-delineate/data/OGRGeoJSON.shp' +OutImage = 'C:/NYBackup/GitHub/ss-delineate/data/fdr2.tif' +RasterFormat = 'GTiff' +PixelRes = 30 +VectorFormat = 'ESRI Shapefile' + +#tif with projections I want +tif = gdal.Open(InputImage) +Projection = tif.GetProjectionRef() +targetprj = osr.SpatialReference(wkt = tif.GetProjection()) + +VectorDriver = ogr.GetDriverByName(VectorFormat) +VectorDataset = VectorDriver.Open(Shapefile, 0) # 0=Read-only, 1=Read-Write +layer = VectorDataset.GetLayer() +feature = layer[0] +geom = feature.GetGeometryRef() +sourceprj = layer.GetSpatialRef() + +# WGS84 projection reference +sourprjFromEPSG = osr.SpatialReference() +sourprjFromEPSG.ImportFromProj4('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ') + +# print('1\n', sourceprj.ExportToPrettyWkt()) +# print('2\n', sourprjFromEPSG.ExportToPrettyWkt()) + +transform1 = osr.CoordinateTransformation(sourprjFromEPSG, targetprj) +transform2 = osr.CoordinateTransformation(sourceprj, targetprj) + +print('geom before:', geom.GetEnvelope()) + +print('geom from service:', '[-73.7655, 43.9866, -73.6975, 44.0203]') + +minX, maxX, minY, maxY = geom.GetEnvelope() + +geom.Transform(transform1) + +minX, maxX, minY, maxY = geom.GetEnvelope() # Get bounding box of the shapefile feature + +bounds = [minX, minY, maxX, maxY] +print('bounds:', bounds) + +OutTile = gdal.Warp(OutImage, InputImage, format=RasterFormat, outputBounds=bounds, xRes=PixelRes, yRes=PixelRes, dstSRS=Projection, resampleAlg=gdal.GRA_NearestNeighbour, options=['COMPRESS=DEFLATE']) +OutTile = None # Close dataset + +# Close datasets +Raster = None +VectorDataset.Destroy() +print("Done.") \ No newline at end of file diff --git a/test3.py b/test3.py new file mode 100644 index 0000000..594a0b6 --- /dev/null +++ b/test3.py @@ -0,0 +1,46 @@ +from osgeo import ogr, gdal, osr +import os, json +os.environ['PROJ_LIB'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share/proj' +os.environ['GDAL_DATA'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share' + +InputImage = 'C:/NYBackup/GitHub/ss-delineate/data/nhd_fdr.tif' +inputBounds = {'minX':-73.7655,'minY': 43.9866,'maxX':-73.6975,'maxY': 44.0203} +geojson = {"type":"FeatureCollection","features":[{"type":"Feature","id":"catchmentsp.70847","geometry":{"type":"MultiPolygon","coordinates":[[[[-73.7531,43.992],[-73.7557,43.9936],[-73.7575,43.9953],[-73.7592,43.9959],[-73.7603,43.9967],[-73.7604,43.9983],[-73.7609,43.9992],[-73.761,44.001],[-73.7626,44.0012],[-73.7632,44.0016],[-73.7646,44.0015],[-73.7651,44.0012],[-73.7653,44.0013],[-73.7655,44.0021],[-73.7653,44.0033],[-73.7634,44.0064],[-73.7608,44.0089],[-73.7596,44.0113],[-73.7602,44.0127],[-73.7578,44.0142],[-73.7565,44.0151],[-73.7537,44.0155],[-73.7513,44.0162],[-73.7501,44.0173],[-73.7502,44.018],[-73.7497,44.0178],[-73.7482,44.0159],[-73.7463,44.0155],[-73.7442,44.017],[-73.7423,44.0197],[-73.7394,44.0203],[-73.7375,44.0196],[-73.7359,44.0188],[-73.7283,44.0172],[-73.7267,44.0157],[-73.7302,44.0139],[-73.73,44.0126],[-73.7233,44.0053],[-73.7191,44.0043],[-73.7181,44.0038],[-73.7165,44.0031],[-73.7158,44.0015],[-73.7154,44.0003],[-73.715,43.9999],[-73.7123,44.0002],[-73.7092,44.0009],[-73.7087,44.0006],[-73.7086,44],[-73.7075,43.9995],[-73.7063,43.9985],[-73.7038,43.9992],[-73.7024,43.9986],[-73.7004,43.9966],[-73.6975,43.9954],[-73.6975,43.9945],[-73.6981,43.9936],[-73.699,43.9934],[-73.7004,43.9923],[-73.7004,43.9912],[-73.7022,43.9907],[-73.7034,43.9899],[-73.7044,43.99],[-73.7059,43.9901],[-73.7073,43.989],[-73.7087,43.9889],[-73.7104,43.9898],[-73.7126,43.989],[-73.714,43.9889],[-73.7154,43.9875],[-73.7167,43.9866],[-73.7187,43.9885],[-73.7212,43.9888],[-73.7223,43.9904],[-73.7264,43.9904],[-73.7282,43.9895],[-73.7294,43.9893],[-73.732,43.9899],[-73.7336,43.9901],[-73.7359,43.9908],[-73.7385,43.9909],[-73.7402,43.9918],[-73.7423,43.9925],[-73.7453,43.9939],[-73.7479,43.9948],[-73.7507,43.9946],[-73.752,43.9933],[-73.7529,43.992],[-73.7531,43.992]]]]},"geometry_name":"the_geom","properties":{"gridcode":1663570,"featureid":22304091,"sourcefc":"NHDFlowline","areasqkm":10.508532,"shape_length":0.180994304773454,"shape_area":0.00117919874683051,"bbox":[-73.7655,43.9866,-73.6975,44.0203]}}],"totalFeatures":1,"numberMatched":1,"numberReturned":1,"timeStamp":"2020-11-03T01:10:06.559Z","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[-73.7655,43.9866,-73.6975,44.0203]} +OutImage = 'C:/NYBackup/GitHub/ss-delineate/data/fdr3.tif' +RasterFormat = 'GTiff' +PixelRes = 30 + +#tif with projections I want +tif = gdal.Open(InputImage) +Projection = tif.GetProjectionRef() +targetprj = osr.SpatialReference(wkt = tif.GetProjection()) + +# WGS84 projection reference +sourprjFromEPSG = osr.SpatialReference() +sourprjFromEPSG.ImportFromProj4('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ') + +transform = osr.CoordinateTransformation(sourprjFromEPSG,targetprj) + +#grab geom from first feature +gj_geom = json.dumps(geojson['features'][0]['geometry']) +print('test', gj_geom ) +polyogr = ogr.CreateGeometryFromJson(gj_geom) +polyogr.Transform(transform) + + +minX, maxX, minY, maxY = polyogr.GetEnvelope() + +# [-73.7655,43.9866,-73.6975,44.0203] +print('bounds:', minX, maxX, minY, maxY) +# 1760643.1007263518 1766141.231241892 2540598.51252413 2543922.278361059 good albers bounds for clip + +#print('bounds:', minX, maxX, minY, maxY) + +# Create raster +OutTile = gdal.Warp(OutImage,InputImage, format=RasterFormat, outputBounds=[minX, minY, maxX, maxY], xRes=PixelRes, yRes=PixelRes, dstSRS=Projection, resampleAlg=gdal.GRA_NearestNeighbour, options=['COMPRESS=DEFLATE']) +OutTile = None # Close dataset + +# Close datasets +Raster = None +#VectorDataset.Destroy() +print("Done.") \ No newline at end of file diff --git a/test4.py b/test4.py new file mode 100644 index 0000000..d0f4643 --- /dev/null +++ b/test4.py @@ -0,0 +1,18 @@ +from osgeo import ogr +from osgeo import osr +import os +os.environ['PROJ_LIB'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share/proj' +os.environ['GDAL_DATA'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share' + +source = osr.SpatialReference() +source.ImportFromEPSG(4326) + +target = osr.SpatialReference() +target.ImportFromEPSG(5070) + +transform = osr.CoordinateTransformation(source, target) + +point = ogr.CreateGeometryFromWkt("POINT ( 43.9866 -73.7655)") +point.Transform(transform) + +print(point.ExportToWkt()) \ No newline at end of file diff --git a/test5_working.py b/test5_working.py new file mode 100644 index 0000000..bb8309c --- /dev/null +++ b/test5_working.py @@ -0,0 +1,42 @@ +from osgeo import ogr, gdal, osr +import os +os.environ['PROJ_LIB'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share/proj' +os.environ['GDAL_DATA'] = 'C:/Users/marsmith/miniconda/envs/delineate/Library/share' + +InputImage = 'C:/NYBackup/GitHub/ss-delineate/data/nhd_fdrCopy.tif' +Shapefile = 'C:/NYBackup/GitHub/ss-delineate/data/OGRGeoJSON.shp' +OutImage = 'C:/NYBackup/GitHub/ss-delineate/data/fdr2.tif' +RasterFormat = 'GTiff' +PixelRes = 30 + +#tif with projections I want +tif = gdal.Open(InputImage) +Projection = tif.GetProjectionRef() + +driver = ogr.GetDriverByName("ESRI Shapefile") +dataSource = driver.Open(Shapefile, 1) +layer = dataSource.GetLayer() +feature = layer[0] + +#set spatial reference and transformation +sourceprj = layer.GetSpatialRef() +targetprj = osr.SpatialReference(wkt = tif.GetProjection()) +transform = osr.CoordinateTransformation(sourceprj, targetprj) + +#apply transformation +transformed = feature.GetGeometryRef() +transformed.Transform(transform) +geom = ogr.CreateGeometryFromWkb(transformed.ExportToWkb()) + +minX, maxX, minY, maxY = geom.GetEnvelope() # Get bounding box of the shapefile feature + +bounds1 = [minX, minY, maxX, maxY] +print('bounds1:', bounds1) + +# Create raster +OutTile = gdal.Warp(OutImage, InputImage, format=RasterFormat, outputBounds=bounds1, xRes=PixelRes, yRes=PixelRes, dstSRS=Projection, resampleAlg=gdal.GRA_NearestNeighbour, options=['COMPRESS=DEFLATE']) +OutTile = None # Close dataset + +# Close datasets +Raster = None +print("Done.") \ No newline at end of file diff --git a/tests/__pycache__/test_delineate.cpython-37.pyc b/tests/__pycache__/test_delineate.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fddbde51742f81f6a8dd84431721a3bde59f7bd GIT binary patch literal 5725 zcmchbYitx%6o6-DU$fhmM=3~owb<6UNXskuAP6h35>gslP0+PrGMzh}Zke4~@60NN z5>03!F)IEbh?-~{f`C8xLHyAeMFNRNEF@GCbckr9F`%R&CYm55c+L!4mf5!3xQw%z zGc)(jJ@?*k?mdrPQ&JLP;Mnx3vh~DNhWP~_GKU{-VsIL5AP7TPm5Do7HqP45T%03Z z+*i*KAMtlH#4ocQ{@uQK07?QR2qnS0B|#_&5gtnTyCor+C*f@zZI#*Ha38~h{^yuz z8f4b({d#faT%p4rt#Naemf{+;;1Pp*BTsITSI zL!^il!<8o`(9I-kiq0jj4pVogrURFTPA(UjVgvSwldz9N{qkW8qcv`91z(7*oWw5UdXmfw)oHY-GB zBdwYS4M1nd7&;j)|2!eBXlZ|mK1K1X-s4VjZQHY_ zI8^27$fZN6FDhfvAPr#+PJ)I};P#+JD2hQueY6DcC!s)iHabU4fk&(2zR3x?CKx6a zG+hu$hn~<(Y?w`F@%VId6?ntza?fuo-ojtf2u&9D7k)tQ&mxq*R!;v3(1#tA&1B0usUIoXXHqhX5|1WioJ zf?!1iA*qwJiuc8WfDXs0p%7Rwv=qfO6u7_XbQCjCp!3NRXhtbIK{Uh$8eN{{gPEUQ zGkQ?45MG^lP=K+9Rr>s0&m|K@_A(5(9h|$5{|xpB1R1|C@6G$|!Mgs@w0%k8-+oqR zkF<(JkTPL{pvZc%7Wrm5>e^fwBd$8PwKsd@JUjoZfg`X-fYYX_eR(-b=H8IH_|n{ibw^=E-MVupz`rsvQm?*KIH{`4iZW87nE+GU zDUgIA>6#`>;GTr`v}8QxBKG(=#KuwM4Y}(dUA=TQ;q1lXFL&l8hc5l=p<{)U8;K3= zHI~p6FqP>P#D}t&L~N^F)RvAzZ44ES(GYzI)X**6FYSb+(F zlN`Yu?c`_!0?x9zRihGc%x`*l`yukf!H3YfA)jg1)0g^ zCO8c)M9U|DC|8R&(9U+B`?0IRfi|P&vkO#o0-(Ii zm87P3^$!&X&Vhz2dErz*h|_=JlfvORxe~z1NqAmxAzCy(qMY{LtfE<`hk8C}c0kR! zF_;%r8y;mR3J2u`Ia#2xa-OX&R7)m?DocYmuuicz#XYMWSk-&0!CP0tNXNEQ%kUUJ z=@~3L@gar4%A`(iM?D{u(uYx0p{Pbtg93B3QC)TgRIG)hg3I@#VT{NL2TtPO$& QmgoFjX-#Q)X${Z*3-rz+Qvd(} literal 0 HcmV?d00001