From a41c675c08d6f0b2c49e4191306c1cdbb4d37f84 Mon Sep 17 00:00:00 2001 From: BOTLester <58360400+BOTLester@users.noreply.github.com> Date: Sun, 3 May 2020 12:58:47 +0200 Subject: [PATCH 01/12] framework for A*, not implemented yet --- .gitattributes | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain From 8bf82380ab4b114df77d8497133a457728f895c6 Mon Sep 17 00:00:00 2001 From: BOTLester <58360400+BOTLester@users.noreply.github.com> Date: Sun, 3 May 2020 13:05:05 +0200 Subject: [PATCH 02/12] A* framework, not implemented yet --- Tractor_VS/Game1.sln => Game1.sln | 0 .../Game1 => Game1}/Content/Content.mgcb | 12 + {Tractor_VS/Game1 => Game1}/Content/Crop.png | Bin {Tractor_VS/Game1 => Game1}/Content/File.fx | 0 .../Game1 => Game1}/Content/File.spritefont | 0 .../Game1 => Game1}/Content/Font.spritefont | 0 Game1/Content/Mountain.png | Bin 0 -> 5189 bytes .../Game1 => Game1}/Content/Plantable.png | Bin .../Game1 => Game1}/Content/Planted.png | Bin {Tractor_VS/Game1 => Game1}/Content/Tile.png | Bin .../Game1 => Game1}/Content/Tractor.png | Bin {Tractor_VS/Game1 => Game1}/Content/house.png | Bin .../Content/tileunplantable.png | Bin {Tractor_VS/Game1 => Game1}/Game1.cs | 48 +- {Tractor_VS/Game1 => Game1}/Game1.csproj | 23 +- {Tractor_VS/Game1 => Game1}/Icon.ico | Bin {Tractor_VS/Game1 => Game1}/Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 Game1/Sources/Controlls/Controller.cs | 100 + Game1/Sources/Controlls/Input.cs | 72 + {Tractor_VS/Game1 => Game1}/Sources/Crops.cs | 0 Game1/Sources/Crops/Crops.cs | 63 + Game1/Sources/Crops/Farm.cs | 92 + {Tractor_VS/Game1 => Game1}/Sources/Farm.cs | 0 {Tractor_VS/Game1 => Game1}/Sources/House.cs | 0 {Tractor_VS/Game1 => Game1}/Sources/Input.cs | 0 Game1/Sources/Objects/House.cs | 50 + Game1/Sources/Objects/Tractor.cs | 195 + .../Objects/tractorPositionCorrector.cs | 36 + Game1/Sources/Pathing/A-Star/Astar.cs | 35 + .../Sources/Pathing/A-Star/PathSaver/Nodes.cs | 30 + .../Sources/Pathing/A-Star/PathSaver/Path.cs | 86 + .../Pathing/A-Star/PathSaver/PriorityQueue.cs | 71 + {Tractor_VS/Game1 => Game1}/Sources/Queue.cs | 0 Game1/Sources/Smart/ScoreSystem.cs | 75 + Game1/Sources/Smart/SmartTractor.cs | 118 + {Tractor_VS/Game1 => Game1}/Sources/Task.cs | 0 .../Game1 => Game1}/Sources/Tractor.cs | 0 .../Game1 => Game1}/Sources/smartTractor.cs | 0 {Tractor_VS/Game1 => Game1}/TextFile1.txt | 0 {Tractor_VS/Game1 => Game1}/app.manifest | 0 Tractor_VS/.gitattributes | 63 - Tractor_VS/.gitignore | 261 - Tractor_VS/.vs/Game1/v15/.suo | Bin 58368 -> 0 bytes .../.vs/Game1/v15/Server/sqlite3/db.lock | 0 .../.vs/Game1/v15/Server/sqlite3/storage.ide | Bin 438272 -> 0 bytes .../Game1/v15/Server/sqlite3/storage.ide-shm | Bin 32768 -> 0 bytes .../Game1/v15/Server/sqlite3/storage.ide-wal | Bin 82432 -> 0 bytes .../Content/bin/Windows/Content/Font.xnb | Bin 21524 -> 0 bytes .../Content/bin/Windows/Content/Tile.xnb | Bin 262229 -> 0 bytes .../Content/bin/Windows/Content/Tractor.xnb | Bin 12853 -> 0 bytes .../Content/obj/Windows/Content/.mgcontent | 26 - .../Content/obj/Windows/Content/.mgstats | 9 - .../obj/Windows/Content/Font.mgcontent | 22 - .../obj/Windows/Content/Tile.mgcontent | 42 - .../obj/Windows/Content/Tractor.mgcontent | 42 - .../bin/Windows/x86/Debug/Content/Font.xnb | Bin 21524 -> 0 bytes .../bin/Windows/x86/Debug/Content/Tile.xnb | Bin 262229 -> 0 bytes .../bin/Windows/x86/Debug/Content/Tractor.xnb | Bin 12853 -> 0 bytes .../Game1/bin/Windows/x86/Debug/Game1.exe | Bin 164352 -> 0 bytes .../Game1/bin/Windows/x86/Debug/Game1.pdb | Bin 46592 -> 0 bytes .../Windows/x86/Debug/MonoGame.Framework.dll | Bin 904192 -> 0 bytes .../Windows/x86/Debug/MonoGame.Framework.xml | 18630 ----- .../bin/Windows/x86/Debug/SharpDX.DXGI.dll | Bin 140288 -> 0 bytes .../bin/Windows/x86/Debug/SharpDX.DXGI.xml | 10091 --- .../Windows/x86/Debug/SharpDX.Direct2D1.dll | Bin 507904 -> 0 bytes .../Windows/x86/Debug/SharpDX.Direct2D1.xml | 56520 ---------------- .../Windows/x86/Debug/SharpDX.Direct3D11.dll | Bin 285696 -> 0 bytes .../Windows/x86/Debug/SharpDX.Direct3D11.xml | 37725 ----------- .../x86/Debug/SharpDX.MediaFoundation.dll | Bin 546304 -> 0 bytes .../x86/Debug/SharpDX.MediaFoundation.xml | 53316 --------------- .../bin/Windows/x86/Debug/SharpDX.XAudio2.dll | Bin 93696 -> 0 bytes .../bin/Windows/x86/Debug/SharpDX.XAudio2.xml | 5989 -- .../bin/Windows/x86/Debug/SharpDX.XInput.dll | Bin 13824 -> 0 bytes .../bin/Windows/x86/Debug/SharpDX.XInput.xml | 1356 - .../Game1/bin/Windows/x86/Debug/SharpDX.dll | Bin 278016 -> 0 bytes .../Game1/bin/Windows/x86/Debug/SharpDX.xml | 38946 ----------- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7026 -> 0 bytes .../obj/x86/Debug/Game1.csproj.CopyComplete | 0 .../Game1.csproj.CoreCompileInputs.cache | 1 - .../Debug/Game1.csproj.FileListAbsolute.txt | 118 - .../Debug/Game1.csprojAssemblyReference.cache | Bin 49304 -> 0 bytes Tractor_VS/Game1/obj/x86/Debug/Game1.exe | Bin 164352 -> 0 bytes Tractor_VS/Game1/obj/x86/Debug/Game1.pdb | Bin 46592 -> 0 bytes ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 87 files changed, 1076 insertions(+), 223187 deletions(-) rename Tractor_VS/Game1.sln => Game1.sln (100%) rename {Tractor_VS/Game1 => Game1}/Content/Content.mgcb (89%) rename {Tractor_VS/Game1 => Game1}/Content/Crop.png (100%) rename {Tractor_VS/Game1 => Game1}/Content/File.fx (100%) rename {Tractor_VS/Game1 => Game1}/Content/File.spritefont (100%) rename {Tractor_VS/Game1 => Game1}/Content/Font.spritefont (100%) create mode 100644 Game1/Content/Mountain.png rename {Tractor_VS/Game1 => Game1}/Content/Plantable.png (100%) rename {Tractor_VS/Game1 => Game1}/Content/Planted.png (100%) rename {Tractor_VS/Game1 => Game1}/Content/Tile.png (100%) rename {Tractor_VS/Game1 => Game1}/Content/Tractor.png (100%) rename {Tractor_VS/Game1 => Game1}/Content/house.png (100%) rename {Tractor_VS/Game1 => Game1}/Content/tileunplantable.png (100%) rename {Tractor_VS/Game1 => Game1}/Game1.cs (53%) rename {Tractor_VS/Game1 => Game1}/Game1.csproj (80%) rename {Tractor_VS/Game1 => Game1}/Icon.ico (100%) rename {Tractor_VS/Game1 => Game1}/Program.cs (100%) rename {Tractor_VS/Game1 => Game1}/Properties/AssemblyInfo.cs (100%) create mode 100644 Game1/Sources/Controlls/Controller.cs create mode 100644 Game1/Sources/Controlls/Input.cs rename {Tractor_VS/Game1 => Game1}/Sources/Crops.cs (100%) create mode 100644 Game1/Sources/Crops/Crops.cs create mode 100644 Game1/Sources/Crops/Farm.cs rename {Tractor_VS/Game1 => Game1}/Sources/Farm.cs (100%) rename {Tractor_VS/Game1 => Game1}/Sources/House.cs (100%) rename {Tractor_VS/Game1 => Game1}/Sources/Input.cs (100%) create mode 100644 Game1/Sources/Objects/House.cs create mode 100644 Game1/Sources/Objects/Tractor.cs create mode 100644 Game1/Sources/Objects/tractorPositionCorrector.cs create mode 100644 Game1/Sources/Pathing/A-Star/Astar.cs create mode 100644 Game1/Sources/Pathing/A-Star/PathSaver/Nodes.cs create mode 100644 Game1/Sources/Pathing/A-Star/PathSaver/Path.cs create mode 100644 Game1/Sources/Pathing/A-Star/PathSaver/PriorityQueue.cs rename {Tractor_VS/Game1 => Game1}/Sources/Queue.cs (100%) create mode 100644 Game1/Sources/Smart/ScoreSystem.cs create mode 100644 Game1/Sources/Smart/SmartTractor.cs rename {Tractor_VS/Game1 => Game1}/Sources/Task.cs (100%) rename {Tractor_VS/Game1 => Game1}/Sources/Tractor.cs (100%) rename {Tractor_VS/Game1 => Game1}/Sources/smartTractor.cs (100%) rename {Tractor_VS/Game1 => Game1}/TextFile1.txt (100%) rename {Tractor_VS/Game1 => Game1}/app.manifest (100%) delete mode 100644 Tractor_VS/.gitattributes delete mode 100644 Tractor_VS/.gitignore delete mode 100644 Tractor_VS/.vs/Game1/v15/.suo delete mode 100644 Tractor_VS/.vs/Game1/v15/Server/sqlite3/db.lock delete mode 100644 Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide delete mode 100644 Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide-shm delete mode 100644 Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide-wal delete mode 100644 Tractor_VS/Game1/Content/bin/Windows/Content/Font.xnb delete mode 100644 Tractor_VS/Game1/Content/bin/Windows/Content/Tile.xnb delete mode 100644 Tractor_VS/Game1/Content/bin/Windows/Content/Tractor.xnb delete mode 100644 Tractor_VS/Game1/Content/obj/Windows/Content/.mgcontent delete mode 100644 Tractor_VS/Game1/Content/obj/Windows/Content/.mgstats delete mode 100644 Tractor_VS/Game1/Content/obj/Windows/Content/Font.mgcontent delete mode 100644 Tractor_VS/Game1/Content/obj/Windows/Content/Tile.mgcontent delete mode 100644 Tractor_VS/Game1/Content/obj/Windows/Content/Tractor.mgcontent delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Font.xnb delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Tile.xnb delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Tractor.xnb delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/Game1.exe delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/Game1.pdb delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/MonoGame.Framework.dll delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/MonoGame.Framework.xml delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.DXGI.dll delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.DXGI.xml delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.Direct2D1.dll delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.Direct2D1.xml delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.Direct3D11.dll delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.Direct3D11.xml delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.MediaFoundation.dll delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.MediaFoundation.xml delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.XAudio2.dll delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.XAudio2.xml delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.XInput.dll delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.XInput.xml delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.dll delete mode 100644 Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.xml delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/Game1.csproj.CopyComplete delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/Game1.csproj.CoreCompileInputs.cache delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/Game1.csproj.FileListAbsolute.txt delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/Game1.csprojAssemblyReference.cache delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/Game1.exe delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/Game1.pdb delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs delete mode 100644 Tractor_VS/Game1/obj/x86/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs diff --git a/Tractor_VS/Game1.sln b/Game1.sln similarity index 100% rename from Tractor_VS/Game1.sln rename to Game1.sln diff --git a/Tractor_VS/Game1/Content/Content.mgcb b/Game1/Content/Content.mgcb similarity index 89% rename from Tractor_VS/Game1/Content/Content.mgcb rename to Game1/Content/Content.mgcb index 7917e4f..be7215e 100644 --- a/Tractor_VS/Game1/Content/Content.mgcb +++ b/Game1/Content/Content.mgcb @@ -44,6 +44,18 @@ /processorParam:TextureFormat=Color /build:house.png +#begin Mountain.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Mountain.png + #begin Plantable.png /importer:TextureImporter /processor:TextureProcessor diff --git a/Tractor_VS/Game1/Content/Crop.png b/Game1/Content/Crop.png similarity index 100% rename from Tractor_VS/Game1/Content/Crop.png rename to Game1/Content/Crop.png diff --git a/Tractor_VS/Game1/Content/File.fx b/Game1/Content/File.fx similarity index 100% rename from Tractor_VS/Game1/Content/File.fx rename to Game1/Content/File.fx diff --git a/Tractor_VS/Game1/Content/File.spritefont b/Game1/Content/File.spritefont similarity index 100% rename from Tractor_VS/Game1/Content/File.spritefont rename to Game1/Content/File.spritefont diff --git a/Tractor_VS/Game1/Content/Font.spritefont b/Game1/Content/Font.spritefont similarity index 100% rename from Tractor_VS/Game1/Content/Font.spritefont rename to Game1/Content/Font.spritefont diff --git a/Game1/Content/Mountain.png b/Game1/Content/Mountain.png new file mode 100644 index 0000000000000000000000000000000000000000..101bd39e77f7e11a327187fba826c68d650b5afa GIT binary patch literal 5189 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 Dvu*#0 literal 0 HcmV?d00001 diff --git a/Tractor_VS/Game1/Content/Plantable.png b/Game1/Content/Plantable.png similarity index 100% rename from Tractor_VS/Game1/Content/Plantable.png rename to Game1/Content/Plantable.png diff --git a/Tractor_VS/Game1/Content/Planted.png b/Game1/Content/Planted.png similarity index 100% rename from Tractor_VS/Game1/Content/Planted.png rename to Game1/Content/Planted.png diff --git a/Tractor_VS/Game1/Content/Tile.png b/Game1/Content/Tile.png similarity index 100% rename from Tractor_VS/Game1/Content/Tile.png rename to Game1/Content/Tile.png diff --git a/Tractor_VS/Game1/Content/Tractor.png b/Game1/Content/Tractor.png similarity index 100% rename from Tractor_VS/Game1/Content/Tractor.png rename to Game1/Content/Tractor.png diff --git a/Tractor_VS/Game1/Content/house.png b/Game1/Content/house.png similarity index 100% rename from Tractor_VS/Game1/Content/house.png rename to Game1/Content/house.png diff --git a/Tractor_VS/Game1/Content/tileunplantable.png b/Game1/Content/tileunplantable.png similarity index 100% rename from Tractor_VS/Game1/Content/tileunplantable.png rename to Game1/Content/tileunplantable.png diff --git a/Tractor_VS/Game1/Game1.cs b/Game1/Game1.cs similarity index 53% rename from Tractor_VS/Game1/Game1.cs rename to Game1/Game1.cs index b5d5be8..45cbbf8 100644 --- a/Tractor_VS/Game1/Game1.cs +++ b/Game1/Game1.cs @@ -13,7 +13,7 @@ namespace Game1 GraphicsDeviceManager graphics; SpriteBatch spriteBatch; SpriteFont Bold; - private Texture2D[] tile = new Texture2D[4]; + private Texture2D[] tile = new Texture2D[5]; private Texture2D tractor; private Texture2D house; private Tractor tractorUnit = new Tractor(); @@ -34,13 +34,11 @@ namespace Game1 //Generates the map with some random values - input.init(graphics, new Vector2(8,8), 56, 1); //Generates the starting size - - - houseUnit.init(input.getTileSize(), input.getSpacing()); //Generates the house position - tractorUnit.init(houseUnit.GetRectangle()); - tractorUnit.updateSizing(input, 0, houseUnit.getVector()); - tractorUnit.setPos(houseUnit.getVector()); + input.init(graphics, new Vector2(16,16), 56, 1); //Generates the starting size + houseUnit.init(input.getTileSize(), input.getSpacing()); //Generates the house position + tractorUnit.init(houseUnit.GetRectangle(), input); //Generates the Tractor + tractorUnit.updateSizing(input, 0, houseUnit.getVector()); //Updates the first Size of the Tractor + tractorUnit.setPos(houseUnit.getVector()); //Changes the position of the tractor to the houses position at the start @@ -57,10 +55,11 @@ namespace Game1 //Loads the PNG content and Fonts - tile[0] = Content.Load("tileunplantable"); - tile[1] = Content.Load("Plantable"); - tile[2] = Content.Load("Planted"); - tile[3] = Content.Load("Crop"); + tile[0] = Content.Load("Mountain"); + tile[1] = Content.Load("tileunplantable"); + tile[2] = Content.Load("Plantable"); + tile[3] = Content.Load("Planted"); + tile[4] = Content.Load("Crop"); tractor = Content.Load("Tractor"); Bold = Content.Load("Font"); house = Content.Load("house"); @@ -79,9 +78,10 @@ namespace Game1 if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); tractorUnit.updateSizing(input, 0, houseUnit.getVector()); //Updates the size - tractorUnit.setSpeed(input.changeSpeed(tractorUnit.getSpeed())); //Updates the speed of the tractor + tractorUnit.setSpeed(input.changeSpeed(tractorUnit.getSpeed())); //Updates the Simulation Speed + tractorUnit.setTractorSpeed(input.changeTractorSpeed(tractorUnit.getTractorSpeed(), tractorUnit.getPos())); //Updates the Tractor Speed input.controlWindowSize(); //Controls the size of the screen depending on the number of tiles - houseUnit.updateRectangle(input.getSize(), input.getTileSize()); + houseUnit.updateRectangle(input.getSize(), input.getTileSize(), input.getSpacing()); //Updates the position of the house if the house appears out of bound base.Update(gameTime); } @@ -97,18 +97,24 @@ namespace Game1 { for (int j = 0; j < input.getSize().Y; j++) { - spriteBatch.Draw(tile[tractorUnit.getFarm().getCrop(i, j).Status], new Rectangle(i * (input.getTileSize() + input.getSpacing()), j * (input.getTileSize() + input.getSpacing()), input.getTileSize(), input.getTileSize()), Color.White); + spriteBatch.Draw(tile[tractorUnit.getFarm().getCrop(i, j).Status], new Rectangle(i * (input.getSpacingTile()), j * (input.getSpacingTile()), input.getTileSize(), input.getTileSize()), Color.White); } } + spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getTargetPosition().X / input.getSpacingTile() * (input.getTileSize() + input.getSpacing()) + input.getTileSize() / 4, (int)tractorUnit.getTargetPosition().Y / input.getSpacingTile() * (input.getTileSize() + input.getSpacing()) + input.getTileSize() / 4, input.getTileSize()/2, input.getTileSize()/2), Color.Green); + for (int i = 0; i < tractorUnit.getPath().getCount() + 1; i++) + { + spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getPath().getByIndex(i).getVector().X * (input.getSpacingTile()) + input.getTileSize() / 4, (int)tractorUnit.getPath().getByIndex(i).getVector().Y * (input.getSpacingTile()) + input.getTileSize() / 4, input.getTileSize()/2, input.getTileSize()/2), Color.Green); + } - spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getTargetPosition().X, (int)tractorUnit.getTargetPosition().Y, input.getTileSize(), input.getTileSize()) , Color.Red); //Draws the current target of the tractor + spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getPath().getFinalDest().getVector().X * (input.getSpacingTile()) + Convert.ToInt32(input.getTileSize() / 6), (int)tractorUnit.getPath().getFinalDest().getVector().Y * (input.getSpacingTile()) + Convert.ToInt32(input.getTileSize() / 6), Convert.ToInt32(input.getTileSize()/1.5), Convert.ToInt32(input.getTileSize()/1.5)) , Color.Red); //Draws the current target of the tractor spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getPos().X, (int)tractorUnit.getPos().Y, input.getTileSize(), input.getTileSize()), Color.White); spriteBatch.Draw(house, houseUnit.GetRectangle(), Color.White); - spriteBatch.DrawString(Bold, "Speed:" + tractorUnit.getSpeed().ToString(), new Vector2(10, input.getSize().Y * input.getTileSize() + 20) , Color.White); //Draws the speed value - spriteBatch.DrawString(Bold, "Tile Size:" + input.getTileSize().ToString() + "pix", new Vector2(10, input.getSize().Y * input.getTileSize() + 40), Color.White); //Draws the tile size - spriteBatch.DrawString(Bold, "Matrix Size: " + input.getSize().X.ToString() + " X " + input.getSize().Y.ToString(), new Vector2(10, input.getSize().Y * input.getTileSize() + 60), Color.White); - spriteBatch.DrawString(Bold, tractorUnit.getCurrentTask(), new Vector2(10, input.getSize().Y * input.getTileSize() + 80), Color.White); //Draws the tile size - spriteBatch.DrawString(Bold, tractorUnit.getScore().ToString(), new Vector2(10, input.getSize().Y * input.getTileSize() + 100), Color.White); + spriteBatch.DrawString(Bold, "Speed:" + tractorUnit.getSpeed().ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 20) , Color.White); //Draws the speed value + spriteBatch.DrawString(Bold, "Tractor Speed:" + tractorUnit.getTractorSpeed().ToString(), new Vector2(100, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 20), Color.White); + spriteBatch.DrawString(Bold, "Tile Size:" + input.getTileSize().ToString() + "pix", new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 40), Color.White); //Draws the tile size + spriteBatch.DrawString(Bold, "Matrix Size: " + input.getSize().X.ToString() + " X " + input.getSize().Y.ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 60), Color.White); + spriteBatch.DrawString(Bold, tractorUnit.getCurrentTask(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 80), Color.White); //Draws the tile size + spriteBatch.DrawString(Bold, tractorUnit.getScore().ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 100), Color.White); spriteBatch.End(); base.Draw(gameTime); diff --git a/Tractor_VS/Game1/Game1.csproj b/Game1/Game1.csproj similarity index 80% rename from Tractor_VS/Game1/Game1.csproj rename to Game1/Game1.csproj index 9b5f6fb..91feed1 100644 --- a/Tractor_VS/Game1/Game1.csproj +++ b/Game1/Game1.csproj @@ -44,14 +44,19 @@ - - - - - - - - + + + + + + + + + + + + + @@ -63,7 +68,7 @@ - + diff --git a/Tractor_VS/Game1/Icon.ico b/Game1/Icon.ico similarity index 100% rename from Tractor_VS/Game1/Icon.ico rename to Game1/Icon.ico diff --git a/Tractor_VS/Game1/Program.cs b/Game1/Program.cs similarity index 100% rename from Tractor_VS/Game1/Program.cs rename to Game1/Program.cs diff --git a/Tractor_VS/Game1/Properties/AssemblyInfo.cs b/Game1/Properties/AssemblyInfo.cs similarity index 100% rename from Tractor_VS/Game1/Properties/AssemblyInfo.cs rename to Game1/Properties/AssemblyInfo.cs diff --git a/Game1/Sources/Controlls/Controller.cs b/Game1/Sources/Controlls/Controller.cs new file mode 100644 index 0000000..1038854 --- /dev/null +++ b/Game1/Sources/Controlls/Controller.cs @@ -0,0 +1,100 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Graphics; +using System; + +class Controller +{ + private KeyboardState state = Keyboard.GetState(); + private GraphicsDeviceManager graphics; + private bool heldUp = false; + + public void init(GraphicsDeviceManager Graphics) + { + graphics = Graphics; + } + + public Vector2 updateWindow(int tileSize, int Spacing, Vector2 Size) + { + KeyboardState state = Keyboard.GetState(); + if (state.IsKeyDown(Keys.D) && Size.X < 100) + { + Size.X++; + graphics.PreferredBackBufferWidth = (tileSize + Spacing) * (int)Size.X - Spacing; + } + + if (state.IsKeyDown(Keys.A) && Size.X > 2) + { + Size.X--; + graphics.PreferredBackBufferWidth = (tileSize + Spacing) * (int)Size.X - Spacing; + } + + if (state.IsKeyDown(Keys.W) && Size.Y < 20) + { + Size.Y++; + graphics.PreferredBackBufferHeight = (tileSize + Spacing) * (int)Size.Y - Spacing + 100; + } + + if (state.IsKeyDown(Keys.S) && Size.Y > 2) + { + Size.Y--; + graphics.PreferredBackBufferHeight = (tileSize + Spacing) * (int)Size.Y - Spacing + 100; + } + return Size; + } + + public int controllTileSize(Vector2 Size, int tileSize) + { + if (Size.X * tileSize + 5 > GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width) + { + tileSize--; + } + if (Size.X * tileSize - 5 < GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width && tileSize < 56) + { + tileSize++; + } + return tileSize; + } + + public int controllSpeed(int Speed) + { + KeyboardState state = Keyboard.GetState(); + if (state.IsKeyDown(Keys.Right)) + { + Speed++; + } + + if (state.IsKeyDown(Keys.Left) && Speed > 0) + { + Speed--; + } + + return Speed; + } + + public tractorPositionCorrector controllTractorSpeed(float tractorSpeed, Vector2 Position) + { + KeyboardState state = Keyboard.GetState(); + tractorPositionCorrector Corrector = new tractorPositionCorrector(Position, tractorSpeed); + if (!heldUp) + { + if (state.IsKeyDown(Keys.Up) && tractorSpeed < 1) + { + Corrector.setTractorSpeed(tractorSpeed * 2); + heldUp = true; + } + else if (state.IsKeyDown(Keys.Down) && tractorSpeed > 0.0009765625) + { + Corrector.setTractorSpeed(tractorSpeed / 2); + heldUp = true; + } + } + else if (heldUp && !(state.IsKeyDown(Keys.Down) || state.IsKeyDown(Keys.Up))) + { + heldUp = false; + Corrector.setPosition((float)Math.Ceiling(Position.X), (float)Math.Ceiling(Position.Y)); + } + + return Corrector; + } +} diff --git a/Game1/Sources/Controlls/Input.cs b/Game1/Sources/Controlls/Input.cs new file mode 100644 index 0000000..2e611a4 --- /dev/null +++ b/Game1/Sources/Controlls/Input.cs @@ -0,0 +1,72 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Graphics; + + + +class Input +{ + private KeyboardState state = Keyboard.GetState(); + private GraphicsDeviceManager graphics; + private Vector2 Size; + private int tileSize; + private int Spacing; + private Controller controller = new Controller(); + + public void init(GraphicsDeviceManager Graphics, Vector2 size, int TileSize, int SPacing) + { + graphics = Graphics; + tileSize = TileSize; + Spacing = SPacing; + Size = size; + + controller.init(Graphics); + } + + public int changeSpeed(int Speed) + { + return controller.controllSpeed(Speed); + } + + public tractorPositionCorrector changeTractorSpeed(float tractorSpeed, Vector2 Position) + { + return controller.controllTractorSpeed(tractorSpeed, Position); + } + + private void changeSize() + { + Size = controller.updateWindow(tileSize, Spacing, Size); + } + + public void controlWindowSize() + { + tileSize = controller.controllTileSize(Size, tileSize); + changeSize(); + graphics.ApplyChanges(); + } + + public int getTileSize() + { + return tileSize; + } + + public int getSpacing() + { + return Spacing; + } + + public Vector2 getSize() + { + return Size; + } + + public int getSpacingTile() + { + return Spacing + tileSize; + } + + public void setTileSize(int newTileSize) + { + tileSize = newTileSize; + } +} diff --git a/Tractor_VS/Game1/Sources/Crops.cs b/Game1/Sources/Crops.cs similarity index 100% rename from Tractor_VS/Game1/Sources/Crops.cs rename to Game1/Sources/Crops.cs diff --git a/Game1/Sources/Crops/Crops.cs b/Game1/Sources/Crops/Crops.cs new file mode 100644 index 0000000..9e536ba --- /dev/null +++ b/Game1/Sources/Crops/Crops.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +class Crops +{ + public int x; + public int y; + public int Status; + private int cropType; + private int Timer; + private Random r; + + + public void updateCrop() + { + if (Status != 0) + { + Timer--; + } + } + + public int getCropTimer() + { + return Timer; + } + + public int getCostOnMovement() + { + if (Status == 1) + { + return 1; + } + else if (Status == 2) + { + return 2; + } + else if (Status == 3) + { + return 3; + } + else + { + return 4; + } + } + + + public void setPosition(int newx, int newy) + { + x = newx; + y = newy; + } + + public void setCropType(int Type) + { + + } +} diff --git a/Game1/Sources/Crops/Farm.cs b/Game1/Sources/Crops/Farm.cs new file mode 100644 index 0000000..bb2c632 --- /dev/null +++ b/Game1/Sources/Crops/Farm.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +class Farm +{ + private Crops[,] crops; + private Random r; + + //initializes the crops + public void init(Vector2 Size) + { + r = new Random(); + crops = new Crops[100, 100]; + for (int i = 0; i < Size.X; i++) + { + for (int j = 0; j < Size.Y; j++) + { + int x = r.Next(0, 3); + if (x == 0) + { + x = r.Next(0, 2); + } + crops[i, j] = new Crops(); + crops[i, j].Status = x; + } + } + } + + public void updateFarm(Vector2 Size) + { + for (int i = 0; i > Size.X; i++) + { + for (int j = 0; j > Size.Y; j++) + { + crops[i, j].updateCrop(); + } + } + + } + + //Changes the properties of the tile when the tractor reaches this tile. + public void setCropStatus(float xfloat, float yfloat, int Spacing) + { + int x = (int)xfloat / Spacing; + int y = (int)yfloat / Spacing; + if (crops[x, y].Status == 4) + { + crops[x, y].Status = 2; + } + else if(crops[x, y].Status == 0) + { + //do nothing + } + else if (crops[x, y].Status == 2) + { + crops[x, y].Status = 3; + } + else if (crops[x, y].Status == 3) + { + crops[x, y].Status = 4; + } + } + + public Crops getCrop(int x, int y) + { + return crops[x,y]; + } + + public Crops[,] getCrops() + { + return crops; + } + + public void updateSize(Vector2 Size, int tileSize, int Spacing) + { + + for (int i = 0; i < (int)Size.X; i++) + { + for (int j = 0; j < (int)Size.Y; j++) + { + crops[i, j].x = (tileSize + Spacing) * i; + crops[i, j].y = (tileSize + Spacing) * j; + } + } + } + +} diff --git a/Tractor_VS/Game1/Sources/Farm.cs b/Game1/Sources/Farm.cs similarity index 100% rename from Tractor_VS/Game1/Sources/Farm.cs rename to Game1/Sources/Farm.cs diff --git a/Tractor_VS/Game1/Sources/House.cs b/Game1/Sources/House.cs similarity index 100% rename from Tractor_VS/Game1/Sources/House.cs rename to Game1/Sources/House.cs diff --git a/Tractor_VS/Game1/Sources/Input.cs b/Game1/Sources/Input.cs similarity index 100% rename from Tractor_VS/Game1/Sources/Input.cs rename to Game1/Sources/Input.cs diff --git a/Game1/Sources/Objects/House.cs b/Game1/Sources/Objects/House.cs new file mode 100644 index 0000000..02560d3 --- /dev/null +++ b/Game1/Sources/Objects/House.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; + +class House +{ + + private Rectangle housePos; + private Vector2 pos; + private Random r = new Random(); + + //initializes the house + public void init(int tileSize, int Spacing) + { + int x = r.Next(0, 8); + int y = r.Next(0, 8); + + pos = new Vector2(x, y); + housePos = new Rectangle((x * tileSize + Spacing), y * (tileSize + Spacing), tileSize, tileSize); + } + + + //Moves the house if it is currently out of matrix. + public void updateRectangle(Vector2 Size, int tileSize, int Spacing) + { + if (pos.X + 1 > Size.X) + { + pos = new Vector2(pos.X - 1, pos.Y); + } + if (pos.Y + 1 > Size.Y) + { + pos = new Vector2(pos.X, pos.Y - 1); + } + housePos = new Rectangle((int)pos.X * (tileSize + Spacing), (int)pos.Y * (tileSize + Spacing), tileSize, tileSize); + } + + + public Rectangle GetRectangle() + { + return housePos; + } + + public Vector2 getVector() + { + return new Vector2(housePos.X, housePos.Y); + } +} diff --git a/Game1/Sources/Objects/Tractor.cs b/Game1/Sources/Objects/Tractor.cs new file mode 100644 index 0000000..86bf81f --- /dev/null +++ b/Game1/Sources/Objects/Tractor.cs @@ -0,0 +1,195 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using System; + + +class Tractor +{ + + + + private int Spacing, sizeTile, Speed = 1; + private float tractorSpeed = 1; + private String currentTask; + + private Vector2 Position, TargetPosition, Direction, Size, housePos; + + private Path path = new Path(); + private Random r = new Random(); + private Farm farm = new Farm(); + + private SmartTractor smartTractor = new SmartTractor(); + private ScoreSystem scoreSystem = new ScoreSystem(); + + + public void updateSizing(Input input, int Status, Vector2 newHousePos) + { + Spacing = input.getSpacing(); + sizeTile = input.getTileSize(); + Size = input.getSize(); + updatePosition(input.getSize(), Status); + housePos = newHousePos; + } + + + public void init(Rectangle house, Input input) + { + sizeTile = input.getTileSize(); + Spacing = input.getSpacing(); + farm.init(new Vector2(100, (GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height / sizeTile) - 125 / sizeTile)); + Position = housePos; + TargetPosition = new Vector2(house.X, house.Y); + } + + // Runs when the tractor reaches a tile + private void updateDirection(Vector2 Size, Vector2 newPosition) + { + Vector2 DeltaPosition = TargetPosition - Position; + if (DeltaPosition.X == 0) + { + if (DeltaPosition.Y == 0) + { + calculateNewPath(newPosition); + } + else if (DeltaPosition.Y > 0) + { + Direction = new Vector2(0, 1) * tractorSpeed; + } + else if (DeltaPosition.Y < 0) + { + Direction = new Vector2(0, -1) * tractorSpeed; + } + } + else if (DeltaPosition.X > 0) + { + Direction = new Vector2(1, 0) * tractorSpeed; + } + else if (DeltaPosition.X < 0) + { + Direction = new Vector2(-1, 0) * tractorSpeed; + } + + } + + //Moves the tractor + public void updatePosition(Vector2 Size, int Status) /// updates the position + { + + farm.updateSize(Size, sizeTile, Spacing); + for (int i = 0; i < Speed; i++) //Where all the choices the tractor does comes from + { + smartTractor.updateMap(Position, housePos, farm.getCrops(), Size, sizeTile, Spacing, scoreSystem.getScore()); + Position = Position + Direction; + updateDirection(Size, Position); + + } + + + } + + public void calculateNewPath(Vector2 newPosition) + { + if (path.getCount() == 0) + { + if (housePos != Position) + { + //Returns to the farm + int x = (int)Position.X / (sizeTile + Spacing); + int y = (int)Position.Y / (sizeTile + Spacing); + currentTask = scoreSystem.MessageAndScore(farm.getCrop(x, y).Status, 0); + farm.setCropStatus(x, y, Spacing); + path = smartTractor.returnChoice(0); + } + else + { + //Sets a random Target + path = smartTractor.returnChoice(1); + int xTarget = (int)TargetPosition.X / (sizeTile + Spacing); + int yTarget = (int)TargetPosition.Y / (sizeTile + Spacing); + currentTask = scoreSystem.MessageAndScore(farm.getCrop(xTarget, yTarget).Status, 1); + + } + + TargetPosition = path.Reduce().getVector() * (sizeTile + Spacing); + updateDirection(Size, newPosition); + } + else + { + TargetPosition = path.Reduce().getVector() * (sizeTile + Spacing); + updateDirection(Size, newPosition); + } + } + + + + public Vector2 getPos() + { + return Position; + } + + public void increaseSpeed() + { + Speed++; + } + + public void decreaseSpeed() + { + if (Speed > 0) + { + Speed--; + } + + } + + public void setSpeed(int newSpeed) + { + Speed = newSpeed; + } + + public void setTractorSpeed(tractorPositionCorrector corrector) + { + tractorSpeed = corrector.getTractorSpeed(); + Position = corrector.getPosition(); + } + + public int getSpeed() + { + return Speed; + } + + public float getTractorSpeed() + { + return tractorSpeed; + } + + public void setPos(Vector2 newPos) + { + Position = newPos; + } + + public Farm getFarm() + { + return farm; + } + + public Vector2 getTargetPosition() + { + return TargetPosition; + } + + public String getCurrentTask() + { + return currentTask; + } + + public int getScore() + { + return scoreSystem.getScore(); + } + + public Path getPath() + { + return path; + } +} diff --git a/Game1/Sources/Objects/tractorPositionCorrector.cs b/Game1/Sources/Objects/tractorPositionCorrector.cs new file mode 100644 index 0000000..8d0ed8b --- /dev/null +++ b/Game1/Sources/Objects/tractorPositionCorrector.cs @@ -0,0 +1,36 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; + +class tractorPositionCorrector +{ + + Vector2 mPosition; + float mTractorSpeed; + + public tractorPositionCorrector(Vector2 position, float TractorSpeed) + { + mPosition = position; + mTractorSpeed = TractorSpeed; + } + + public Vector2 getPosition() + { + return mPosition; + } + + public float getTractorSpeed() + { + return mTractorSpeed; + } + + public void setPosition(float x, float y) + { + mPosition = new Vector2(x,y); + } + + public void setTractorSpeed(float newSpeed) + { + mTractorSpeed = newSpeed; + } +} diff --git a/Game1/Sources/Pathing/A-Star/Astar.cs b/Game1/Sources/Pathing/A-Star/Astar.cs new file mode 100644 index 0000000..8b93c83 --- /dev/null +++ b/Game1/Sources/Pathing/A-Star/Astar.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; + +class Astar +{ + + private Vector2 tractorPos; + private Vector2 housePos; + private Crops[,] crops; + private Vector2 Size; + private PriorityQueue allPaths; + + public void update(Crops[,] newCrops, Vector2 newSize, Vector2 newTractorPos, Vector2 newHousePos) + { + tractorPos = new Vector2((int)newTractorPos.X, (int)newTractorPos.Y); + housePos = new Vector2((int)newHousePos.X, (int)newHousePos.Y); + crops = newCrops; + Size = newSize; + + } + + public void findPath() + { + int i = 1; + } + + public Path getOptimalPath() + { + return allPaths.Peek(); + } +} \ No newline at end of file diff --git a/Game1/Sources/Pathing/A-Star/PathSaver/Nodes.cs b/Game1/Sources/Pathing/A-Star/PathSaver/Nodes.cs new file mode 100644 index 0000000..c898cb9 --- /dev/null +++ b/Game1/Sources/Pathing/A-Star/PathSaver/Nodes.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Graphics; + +class Nodes +{ + private int Cost; + private Vector2 Node; + + public Nodes(int cost, Vector2 node) + { + Cost = cost; + Node = node; + } + + public Vector2 getVector() + { + return Node; + } + + public int getCost() + { + return Cost; + } +} diff --git a/Game1/Sources/Pathing/A-Star/PathSaver/Path.cs b/Game1/Sources/Pathing/A-Star/PathSaver/Path.cs new file mode 100644 index 0000000..d2c9e25 --- /dev/null +++ b/Game1/Sources/Pathing/A-Star/PathSaver/Path.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Graphics; + +class Path +{ + private Nodes[] nodes = new Nodes[512]; + private int Count = 0; + private int Cost = 0; + private int Efficency; + + + public Nodes getNode(int i) + { + + return nodes[i]; + } + + public void setNode(Vector2 newNode) + { + nodes[Count] = new Nodes(10, newNode); + Count++; + } + + public Nodes Reduce() + { + Count--; + Nodes temp = nodes[0]; + + for (int i = 0; i < Count; i++) + { + nodes[i] = nodes[i + 1]; + } + + return temp; + } + + public Nodes getFinalDest() + { + return nodes[Count]; + } + + public int getCount() + { + return Count; + } + + public Nodes getFirst() + { + return nodes[0]; + } + + public Nodes getByIndex(int i) + { + return nodes[i]; + } + + public int getEfficency() + { + return Efficency; + } + + private void calculateEfficency() + { + for (int i = 0; i < Count; i++) + { + Efficency = Efficency + nodes[i].getCost(); + } + } + + public int getCost() + { + return Cost; + } + + public void setCost(Crops Crop) + { + + } + +} \ No newline at end of file diff --git a/Game1/Sources/Pathing/A-Star/PathSaver/PriorityQueue.cs b/Game1/Sources/Pathing/A-Star/PathSaver/PriorityQueue.cs new file mode 100644 index 0000000..8043950 --- /dev/null +++ b/Game1/Sources/Pathing/A-Star/PathSaver/PriorityQueue.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Graphics; + +class PriorityQueue +{ + public List list; + public int Count { get { return list.Count; } } + + public PriorityQueue() + { + list = new List(); + } + + public PriorityQueue(int count) + { + list = new List(count); + } + + + public void Enqueue(Path x) + { + list.Add(x); + int i = Count - 1; + + while (i > 0) + { + int p = (i - 1) / 2; + if (list[p].getEfficency() <= x.getEfficency()) break; + + list[i] = list[p]; + i = p; + } + + if (Count > 0) list[i] = x; + } + + public void Dequeue() + { + Path min = Peek(); + Path root = list[Count - 1]; + list.RemoveAt(Count - 1); + + int i = 0; + while (i * 2 + 1 < Count) + { + int a = i * 2 + 1; + int b = i * 2 + 2; + int c = b < Count && list[b].getEfficency() < list[a].getEfficency() ? b : a; + + if (list[c].getEfficency() >= root.getEfficency()) break; + list[i] = list[c]; + i = c; + } + + if (Count > 0) list[i] = root; + } + + public Path Peek() + { + if (Count == 0) throw new InvalidOperationException("Queue is empty."); + return list[0]; + } + + public void Clear() + { + list.Clear(); + } +} \ No newline at end of file diff --git a/Tractor_VS/Game1/Sources/Queue.cs b/Game1/Sources/Queue.cs similarity index 100% rename from Tractor_VS/Game1/Sources/Queue.cs rename to Game1/Sources/Queue.cs diff --git a/Game1/Sources/Smart/ScoreSystem.cs b/Game1/Sources/Smart/ScoreSystem.cs new file mode 100644 index 0000000..eda336e --- /dev/null +++ b/Game1/Sources/Smart/ScoreSystem.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +class ScoreSystem +{ + private int Score = 0; + private int previousTask; + + //Message which is displaying what the tractor is currently doing. + public String MessageAndScore(int Status, int Stage) + { + previousTask = Status; + if (previousTask == 3 && Stage != 1) + { + Score++; + } + //When the Tractor is going back to the farm. + if (Stage == 0) + { + if (Status == 1) + { + return "Returning with nothing after going out for a stroll"; + } + else if (Status == 2) + { + return "Returning with nothing after planting seeds"; + } + else if (Status == 3) + { + return "Returning with nothing after adding fertilizer"; + } + else if (Status == 4) + { + return "Returning with Crops"; + } + else + { + return "Error"; + } + } + //When the Tractor is going back to work. + else + { + if (Status == 1) + { + return "Going for a stroll"; + } + else if (Status == 2) + { + return "Planting seeds"; + } + else if (Status == 3) + { + return "Adding fertilizer"; + } + else if (Status == 4) + { + return "Going for Crops"; + } + else + { + return "Error"; + } + } + } + + public int getScore() + { + return Score; + } + +} diff --git a/Game1/Sources/Smart/SmartTractor.cs b/Game1/Sources/Smart/SmartTractor.cs new file mode 100644 index 0000000..6b4102c --- /dev/null +++ b/Game1/Sources/Smart/SmartTractor.cs @@ -0,0 +1,118 @@ +using System; +using Microsoft.Xna.Framework; +using System; + +class SmartTractor +{ + private Crops[,] crops; + private Vector2 housePos; + private Vector2 tractorPos; + private Vector2 Size; + private Vector2 Target; + private Path path; + private int tileSize; + private int Score; + private int Spacing; + private Random r = new Random(); + private Astar astar = new Astar(); + + + //What to do next + public Path returnChoice(int task) + { + astar.update(crops, Size, tractorPos / (tileSize + Spacing), housePos / (tileSize + Spacing)); + if (task == 0) + { + //To the house + getTargetPosition((int)housePos.X / (tileSize + Spacing), (int)housePos.Y / (tileSize + Spacing)); + } + else + { + //To the fields + getTargetPosition(r.Next(0, (int)Size.X), r.Next(0, (int)Size.Y)); + } + astar.findPath(); + createPath(); + return path; + } + + + + + + + + + + + + + + //Updates the variables every frame + public void updateMap(Vector2 newTractorPos, Vector2 newHousePos, Crops[,] newCropsStatus, Vector2 newSize, int newTileSize, int newSpacing, int newScore) + { + crops = newCropsStatus; + housePos = newHousePos; + tractorPos = newTractorPos; + Size = newSize; + tileSize = newTileSize; + Spacing = newSpacing; + Score = newScore; + + + } + + private void getTargetPosition(int x, int y) + { + Target = new Vector2(x, y) * (tileSize + Spacing); + } + + + + + + + + //Only for testing without obstacles + private void createPath() + { + path = new Path(); + Vector2 targetPos = Target / (tileSize + Spacing); + Vector2 currentPath = tractorPos / tileSize; + currentPath.X = (float)Math.Round(currentPath.X); + currentPath.Y = (float)Math.Round(currentPath.Y); + do + { + if (currentPath.X == targetPos.X) + { + //found X pos + if (currentPath.Y == targetPos.Y) + { + //found y pos + } + else if (currentPath.Y < targetPos.Y) + { + currentPath = new Vector2(currentPath.X, currentPath.Y + 1); + path.setNode(currentPath); + } + else if (currentPath.Y > targetPos.Y) + { + currentPath = new Vector2(currentPath.X, currentPath.Y - 1); + path.setNode(currentPath); + } + } + else if (currentPath.X < targetPos.X) + { + currentPath = new Vector2(currentPath.X + 1, currentPath.Y); + path.setNode(currentPath); + } + else if (currentPath.X > targetPos.X) + { + currentPath = new Vector2(currentPath.X - 1, currentPath.Y); + path.setNode(currentPath); + } + } while (currentPath != targetPos); + + + } +} diff --git a/Tractor_VS/Game1/Sources/Task.cs b/Game1/Sources/Task.cs similarity index 100% rename from Tractor_VS/Game1/Sources/Task.cs rename to Game1/Sources/Task.cs diff --git a/Tractor_VS/Game1/Sources/Tractor.cs b/Game1/Sources/Tractor.cs similarity index 100% rename from Tractor_VS/Game1/Sources/Tractor.cs rename to Game1/Sources/Tractor.cs diff --git a/Tractor_VS/Game1/Sources/smartTractor.cs b/Game1/Sources/smartTractor.cs similarity index 100% rename from Tractor_VS/Game1/Sources/smartTractor.cs rename to Game1/Sources/smartTractor.cs diff --git a/Tractor_VS/Game1/TextFile1.txt b/Game1/TextFile1.txt similarity index 100% rename from Tractor_VS/Game1/TextFile1.txt rename to Game1/TextFile1.txt diff --git a/Tractor_VS/Game1/app.manifest b/Game1/app.manifest similarity index 100% rename from Tractor_VS/Game1/app.manifest rename to Game1/app.manifest diff --git a/Tractor_VS/.gitattributes b/Tractor_VS/.gitattributes deleted file mode 100644 index 1ff0c42..0000000 --- a/Tractor_VS/.gitattributes +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain diff --git a/Tractor_VS/.gitignore b/Tractor_VS/.gitignore deleted file mode 100644 index 3c4efe2..0000000 --- a/Tractor_VS/.gitignore +++ /dev/null @@ -1,261 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# DNX -project.lock.json -project.fragment.lock.json -artifacts/ - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings -# but database connection strings (with potential passwords) will be unencrypted -#*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -node_modules/ -orleans.codegen.cs - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc \ No newline at end of file diff --git a/Tractor_VS/.vs/Game1/v15/.suo b/Tractor_VS/.vs/Game1/v15/.suo deleted file mode 100644 index e9dd5330bb27a604506bf6ba9c9d8b394a41829a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58368 zcmeHQ3wT_`b-pq-81pm_mkN%7%nB_G-0~*IsFr-IZ;D zNsJ94Kq2Hw&D%g)Xh>R0UO+b+@;1b#`}kkH;&crS7>45RKu8z z>v4eh4;?zhM|_T8;6_mmtTWR1<%~*WsnH8RV+^neX$1>U{OzxQ*^BT%#!eHlxRgAt&36 z2vT?k-0m%_gcuo%z;;61u#gqH%AnfF#|&-i?fdA-K;KVo~%IECCMhq!5n zdxhS2y5EQQrwlWVKjrwZ&ORo_{~5@0F#b^qa7TLltA3^E0LPC${&}s&KjW(L&oIaT zcmTu7kp`%-&wKj#pNMBp+lFy5o^|Jn>c2LH=u_;292zXRR?yb1U@;1__m0B-~S1Mo}0e*%65I0#^Ve+~b?%rLLZTRy!P-Z(Sjdf-X{Z%mZ9(@^|q!ibAJc%=vYmhtBmpU?I3Z$LTQ z1rM4+O{Bs7Mg$+Y9qkfF$jcG`ctlck)+;`rzXRYqbWJFI40&K}CxLIrkXDfK3jNO* zX8G5E_st;>Nwfo@TjRi+aVJv$#P?dd$Ci^m7>|EozdrW<~)MQUWUg8#(N zzH}nMFaD+TTY;yX>*(0WNpUl1^BCGY-|ALMXs6BcZNr$4@;Bk4 z1>hIIPXAhrCCEcH)^1BddBRxV)#56Q^k(Bf4F0&**fdC$hpx_nU*Hvm_gVgnk=IvG zlO>3N%Ery~Npm?9X0XDvkB5-43gd#a1Z$!nwUrYIT#E89MQ9noZ}}?_mo$s682qHu zIinHzivd4n1ctG=gz^(F=Sw=T{?GNZn!RD1h|A>37Nq^eK?6(cAn-sMhL9H?mIn*zyp*!`XY+;;`gPx8w{g(e3#8vHo zB_vNN^uHMJZNopMKxplx3X@@LPV$pT29p?~R|5tirC8^3O+ds{EwI z3U0vt8v&mHkU#k(;AX%rfMESMHrIcRCgtJ!D=p@=&cT_k8P6yUcXRB2oJywv{PzDl z5I1ZlYL|a;9^ksiF9j^6|L*~AMSt!1$^Z0XmgoH6k2>*Mg8{#g!Tebf<)4hW8z}UK zD~x{tGXqzIDH*ZAzbgM(c<#6Ub^dD^+P4Sw9R|-6$87hO59(EDQ1OW?%Hv;1E^wRVohSZryqrjf^||^ zu!i*}$RZxMi2B64GOLfS44pUqlKtJQe!H;ep|gG|I0`+R4C`5S409cF3Z9II1Yrvph^iP?p`#*7Wy-v3Q{CpcYuWqa|SY~qA%mw)`Qa`yGUIOghc(zH5 zlWO^@_@9gNFGi>t;J5tx_`3>2qZ3$ig6rIfA+rj2nG5d7$|t;+#^}uFN1zsez+ZIv z(dEV78xv4n5dL+$YQt6GTGjs46xbG6ONX7p-`IIYieRl$Y&rdRa(o7Yf^FP-=l*60}ATPlAkaH5(g-oz8%gyVR@K*s^&FeMr+syDf z_z^SAb=3yI6@V)N9|n8`a1|g5*a)~9KpdOl#{eCGIG_`d0CWMm0b2k`z*fLE06Bpk z04Z=9&xpG^2@;SJ-Gma~Q?HTUb1vb$VP&DsDRYXL3RHAQzryjZznkO(hx7i@)|PgE zn4Dt~_Xn1qoOpM3dii4u77nz2|3yx*zTI&0P9#D5AKmS5U2^M7aj)gKb+lo>G6km?)uHT8xK5q&lIv@ zqsm!p!>wlQ;+LTP+0diC{R91v!uluVjk&gTbKHMC4iU&lU@7G-a74VP05<{Xy!L;% zu61*z?0V=Dck-&)?}aA+dA6!S0Bk zc*&<7Zv5QqusemHxasWAov!urUx~V>1{!xAseR3TBksS>#!g5*YPAU*@DkxWrNn)l zaTOQi5%*+D!SB}pluW=)4<%H>{-<7kd;2SWK!3fDb6JnguAO{C549 zR^aSG*?A6GAAwG^hdDz36L^W6j`zGA*J?^=>s=gcD>VE~2d)7>H?cnJ%oR-u|2$DXu z;)>_fyo;_3~5ykZQ7eE_khvz)H-n_24v}W@47V9#|xHfA~3H6X=*1Hwg59#? zpwT9!NHCs(|EY)!Krf^x)Ra!867gIz-J1<9OY|l($#|$aDQ?6v1Dk8Ey2^|g$z_tg z-Bp!6*?2mWN_JFLZb)RZcyCc%sG7g3%BKEQu0NAl)SKwfWn!tS%C`QFR5HFYG0>jg zmgrs7(a;d9kJrx$&#SFVRL`Bau}USb=i>5Mc1teSkxG;o*T!Q|?BmQlPi#u}^u;oX z%tT^~B(F)p8rHd;lo-(8^ttsyvfTM;~6L}o6XR241or< zffH{BCFH6zgxQ8W=+t-)VFl1s1yavx6 z=g*`IRE~eduV|lN{FE0}nyHb$=o36Q&%jGLmtWZjlOTTTFwF$`#b1fI+sro8`7bNg zcjLN{fa$RQ9;E$#@t=!#$uHCC`tM7`9GFClCj{S>6WkFwj-h(*@@>jJ##L}_x)9(O zzdrx5{blcyGKenV>_E?J!8}YUL=I2cCkyq&ni9&-y-Mog(%Jbx=k=E^iIDH9fAYWc zaIpa3xBT2MR{WRO7LEcvt7(R~#oTmR>}+U@(ldG9;Rw?FY>+q<{!c-yNyd|r&Z zXM~l%1+f7JJQ;}NpRw%d9nu1 z+4J!y&->ju*EF|>?)lmKn{O+34Lmr)+TW@%C+pym$}fFt&(vdX=$re66ZdU7{<(72 z!ANU=yO!Jcc04-uM+dJxZroc>KD%z$R8Adb9Rar=;r1V{{;%TWSTCixK>z#5>VMa4 zh_rFV*Vq(kv+JR^;{MRtc@1bIEmdToNlQ*8ub)dkzTEn`d5u&_i^!`}Ui13y^Y*?3 zTe9m$a2`WKmc*Sk<*pn7xlMz=-io$UH7O-uA+#u0KwN!s?%Rrg$~={0ADINm^UJ%y z@69#l7`H=|w4yQ6gdWu79HXtNX_ZPx_bG>zhrm-}Ke8FCjz+9Qmw}sZ$Et7%df!rn zuYfdeH88J1C?XP|wp|!9M_LM6V1{ZC;%-&7&;=lsCZ8=!*#ke9XL>~%(q``ttoeAt zcqc$PO3_AAOUZhUYIUz`ZHLU6AECKD0h% zo|JcYA#F-S>DU97HLhCDckQE+_fNq6HZeMt82~wA`HZ_G@)=K%)4C3A%~6kk3I5sZ zXzL(_Jzvhhv;&=gcQW49=?vepYv~h*Q#?C2$9R-{+S9Xgy@gV<^9F_Dt;M)c2*{U$ z@_swkh^S}Qh7;FSD6dLGA)of?4rv!kk>kgmrpp}Occ9g1LAwev1*J_u3bF|DggV5h1l!))OHlS4-b$kNsfW!zkuMkLA4RR4#(>HV z@p3*IK)<9EiP$N#mv#fB6}wHyZ3FN(fLgTRzZM!U)dfAvVc7Bvz>E?FjUA!3Hq?OSau4MZ* zFI}~qJ$%hzf3(sL-Tq)Dq-(PMXQAiGy}0xs4T_?Fu~n+^%-X*cjnSnyq#pJZDDSlQ z;t+C6oix(XZusnn)KViAq+{MU!pZ{Eovk*0EwzZXB2Ni&#-P4qB|>tqgY+PRz9aW|<6=BYOPK6a z)Q7XiU59y!nyQs}OY+L3C*&cMNSAuFayKK5kkqN|M7&PimG5zW;~ulLtjZKd0~I8P z;fHD>+8~8wcx+I~%_zy}pb~}XJljHdY?rY@->J=MrH*O_sL+dyFiSo9DZXA-rxK10 z%ForLUeXX&IBfpSW&GCQ_Z^(A*^UvLRxjVc!!8`23^PMY;psi+f>1 zkcLpq8_~r%m>Nt)Vm*DSMD`5am5p>Dx;UFib(!}$HxJ(LNq6?A604DpnTVH{Dy?7T zyQwaUvI>OBT3Lk^Yww!=^s9HCx$yeu_FX;yjb)E9bNW^y!(JJ-J?}ld`L~O5e)xmr z>ED_?zI)5Qk4+jFnASAx666kV{wa!4<}Yd>AdrjiU(7n``MVD++#a3s%-+O|ad!@* z6njb}Oocj7DN@3-9)0)z#)_wBjl1olhrjm5-GU(d?N)t-ko_Fm$ZDLgkboH4L{nEAKw`7k@BI7(li2Q)dDgLRYT4A*`kC5B3Gi}IPM&}bsz z$*=EP!AVfhDT-AfB_d%+twLB8Qi?^nSyZgw;&_{u5)-(V-}V_BWr;%$MCpX zL+?iRKhyBUGp&2R^VF?-Z<+Ah$u?(?Z@<=ewd~LQTkx7ekID;np`RJvuv{6eM zl!YH3Pjw?>Z4qBnS8ut=G6la|Mm(=(bZXLGTp^!Xjm*T2lk(@+jW%L ze=ZOIWFHe!hm`Z!D}d3-bJ)uywI$SD`PIjU~2NPy?#1o+Dm>@a2wVE)cqk{ z9L-$4>UU}e<$fnuJ7cNEwu3j|C{w%CEZys4ra!WD-1(E=mf+qX%Qt%IBX>+wkjZzU zTzSq;U5~wz$?}e+Hsh{!UO-jy_g{-Xf2W`SaA^vK1!A0azimY=-5t>CtU{RcQ2yS4uqDPbs>%`X?>g3A_S|tlnS4jYII!lS zar^m<_mxxqNL{=6`g;s3S|Hz%I`4k_Bi|=*)2R#F={!4Wb&6wm=KtRO&7niXSw*t< zN&SI*eNdmx?VC^fnjdAKG~@#ms)9&ZhB&onBKe^suD?Jt|5PE@&HQf{%e`*gBbyx- z>}j3=a4EQ8P<=RT96sF&e|eLF1*)%d7+CYhsY-RR-4*d6Iv`XJR)?|t6FE%_#LfPq zee`CB^aXkT{}SBi+(YLOWyq~>y3&6<8X$k}Ar(vc%qc&B z<4S)RDeu(aSP-8d?Z>A(v(c^TM9TW%&cmtyB`JSCKgEVP$F_o6r!e%B*r%p)7WYc} z(J)dMVk=@Sg8dn~1=wlex7_C7|^uvT#Go1F%Qof;`zB+agwAK zp$5dO6Q@NQaMgnMoAEU`xAhloqXhOJJ?$@6OhcQT2k<-oXse9p!RYemDdksBo$Zgv zxK97DKQl;s{o>z?gp~cqa@ha92DhIzrFwK_HeA{wwzjD+Mk|*M^#1iKgx>Q&E&WuqTY|P@=M)uoA%xTwyrRO;Wv(aVH8JVC9^f7KpF4mNUhWIGw|@H$3g0 zz!y=a{znKc-iUiS$g;N}ltQiO<)?M0^5!Go@BQY1D@@%&R}=EwEpj>0;F;{9DKghy zPPac6*niEKHpjE*3Gx)-ShxR*^=6)-kAg8I`OB|Gt=BXR(2XI|VeC2k;A6jzugvY+ zJFDu1bFVI4gScbpn%2*`20hPu*m@9GYCFI7=3B4b+j!;+@#c*OPU$^B>Tj8{{E}_Q zp~Q78HSons2#XPQIK%HZ4AuFOQomt11JsI|uG`QwTsiQ&8I-?rNkx@o{?n1NQL1Y{ zKoZ!0ERX%i3sJ{@J5nX$meKyB*ngW@1padocPfC6$4&0Tupdd^;Ivxfkg}pe{nzU| zp*nHU!*)rylf4YX;LhS5uC=456BXP=Id&HGoaV!loXNe;z5?U9*!l?UKb2+yGv6xu z1S(so4|JF|ssj5@lDiJm@DL{*$HQgNuSSpcEwSD`&gm8>wObut_nLW(L>Tes?-*gw7JJ!$zUmRGLJ@o=az` zEkDxml@XTHthqnqZ0lL>AyGrvX^*B@nQoyrbutDN*ng=-f20Pw^(4eg=tITLjzcZ> z7IO}QHhy)z?DE;N3GBbHUac$Dk=j<-!2U~M|HVd&0{bs>a3V-rS>_4qyhZdQLtmK( z-ImShw*SI29XvbPS!UkDDs@sj*F0(UzzE~a?0ZD=Jk{nh*N47e$DJrCCn48yI5|G0 z&8+I5dV>6(dLCzacn#(<0VE@HU&N?!z!r9x58mfW)m(euJoX`IT z_FqPx1x9DfHe=KNi&g3Y_CPrD2UZTQ5QPlvKk#e}ywt&^v zLty_Qu>Sy3lSSw7XP!l~Tu{`>bsa-s|Dn`cBstT*P!gQ~CynR1ywcr~KK~z_|D@&9 zqxbwLsBd006`cPodLWPX^MAqlFG@i9y%61ml#-W@{qtXibOi$akMe4&j8y%PVE^an z-v7x6>NlJt_f``Db`~OUGQbcvtZuOEJ`Eqclv4GHbN962BB{CcJKzJxa>yRKu*g(& zorVqhC6fF;*zj{=*Gl2%to+Wsf&rcYSFQMJQw5;~oF)=!D)r7hpNXMUe~ zCw4Z}2@}>_PTVmJe*dssr=APVdPD1itGmw~;T>zMBv!T3X~@|wXyp%;)eeB4iD4{M zLWa8z7T#9CGF%floG1);(DIG6cGLx*U(h1=6O8}i*MmMHSf|1GFP?+)8vi4ABpw;c IH2m@Z|I=iTKmY&$ diff --git a/Tractor_VS/.vs/Game1/v15/Server/sqlite3/db.lock b/Tractor_VS/.vs/Game1/v15/Server/sqlite3/db.lock deleted file mode 100644 index e69de29..0000000 diff --git a/Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide b/Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide deleted file mode 100644 index 2447a789a673a8c5cfb760c860adc8297774dc7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438272 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
    pFV%9bas$Q*=t31@*f}mX3RP{hIrG)*E_$ z^rq!y7uI}k?n7%{8gqM<-|CM0?v)n#qpm$NwpEr-^)B`@jm&>DtBK~ zy=83A`emcL&e6k*es*Ye&C zc2>ksJ>MWob~BppWZX&od#dH1PAWARs*(v=-rLgA!|Qhp`%U}U`Po^q&Y8KHgJbze z)(Xe>_(>t<%s_0{dS>Si z%o}B0;V5lUBt8m1K;J@tYHK`ES1(ENVG^Q^NJQ!o+Set9k8r=1;h9^70AwCJf1( z*6*p~8%5nsNGWkn5Br3Nvd{as>u~RT*)8sVzT(<-D<_m~aY>!dL+ZWqYwF}pUI{pk z3=sp=jcKf=^8gKaQ#Su5Ho!;h~lN+a&G?q)IHvGAGEQ*%*ehL=|iB!YQ zmc;eloye2P?sR<@-EAlBM!K-4D}jqH^K_Dxnz;{Z7%#QA*CgqUiX=VV2ZL zbh$#^k#|m<)%VE`7w^0Lr^Xx4?73)oBzZ9PT5ekVt(RPI>B5Ci960m2(Ch}Vn}0uK z-e=Z&;PXfU(MNCc$vNFf;rQsuP^%YipwJx z4XjmjbG>`EH^1@WI`f{J*J=G#1zmQIOcTQ5eavWD{0`b*kMyl5lr+D5p)-P$>Fzs^ za@^iwegP<%7v+7YFnQj!`5&f8Gse$J^!{((`90rOEz>YkWo?zwmA|ZfM5Pnb--uRB zyCJP@;`KkG(k0n}!BfJdEBaTwy3LsKPYrs;lo|ifbecGH(&B{c(ia(}FEXP40WUH# zCMAyvfA?Lw!IP5v|G(mBGqJ;@a8M|Hu~c#jFMY9;IQ2#U&0Z{x>pO|FkgxnpUlREK zPRdp3-}#bYaPj6um;WO!!i!oKZ%UN=@A*2pC|dk#$p8PqE4Yl}#ffD8_Lnrp^@_tO zx%6Ej4&NnjfRw%~#CuH~3QOM=;@(m6?xwH*%T$^c;lFe#?LcV6fzl3?cA&Ha zr5z~kz`wEsQ}b)26=nXvzVP%ne;cs$>rctAJtcAJ*PoJKpDO+OQ|Z^A{FsFwS@E+H zzE|&C1AgAa4>%}u+YkBpxfNeayX^;4{n&&bRFU>$1Jdf~%WdtwGb8VR^XpIMoL+A4 zNY!dp=2z}gsb7Vr|fuiWta1VLh|ABkuMJ=b!33u-QEkB_*vBT6E ziTq37TP}TXnWM_T^9ON@>rG`Y``&Wt+e-{(>Dx>3-);#X`!0QZiLV2tyuDO3c*^F) z&hj7e5rJ`ir))};Tl%?^f9`W98B<(^b diff --git a/Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide-shm b/Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide-shm deleted file mode 100644 index ad1c6ed87b17043c9adafc4981bde5168baffc8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)J4!=A6b9f)Vq#)^#7B`$xCK|>3M@qsG(I{}3&l!o-HB^(4K6^e(+PHZrU;}Q z2`1d@ci@M6hjVA{`4%w4_uVw9MoNR7c)5&pj`qgAo5QcW>*w2phtI3~*QdAU%g5vJ zm;IBy^S<9xHNBpnkiolmpEd$j5y*FJl~p(O%NlhNsEEK?@qgxf>lA@H39Q#?7_$%{K!8Azz(!G*CISQq z5FkK+009C7W)T?7^099T5FkK+009C72oNAZfB*pka~0T}>uC-nK!5-N0t5&wQebP5 LhdZ0V9|-&avurLK diff --git a/Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide-wal b/Tractor_VS/.vs/Game1/v15/Server/sqlite3/storage.ide-wal deleted file mode 100644 index 1cdc73bf80a57acd3185c66e7017397b7a67347f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82432 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 Y^rLD0FP4p!l4&&bk#C|UP9akN2VZ)d3IG5A diff --git a/Tractor_VS/Game1/Content/bin/Windows/Content/Font.xnb b/Tractor_VS/Game1/Content/bin/Windows/Content/Font.xnb deleted file mode 100644 index 7c940e2899e067191e3b63be53cf68b6927187a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21524 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 diff --git a/Tractor_VS/Game1/Content/bin/Windows/Content/Tile.xnb b/Tractor_VS/Game1/Content/bin/Windows/Content/Tile.xnb deleted file mode 100644 index dabf1f101d4e1dee675191105aa33c058bfe5a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262229 zcmeI!!D)!3x{?9%L5V&fA zuYd3B|Ef>vhbJ%#=zk_NKp-Qa|I8^ZLSPoq|4e3pKt@3SnNwPXz$~EunaluzjDY?# zr?d!xSwR0YnE?VB0sUuAX%Pamfc|GP0|YVx`p=xwA_Qgu{m*0u2xJ8GpE;#P2+RWd zpUDgm$Oz~^b4rU4m<9AdlNlh85zv3;lolZ{3+R6)Ge96Cp#RJ%Eka-x(Em(kfIvn- z|Cv)-gupDI|C!7HfsBCuGpDo&fmuNRGnoMb83FxgPH7PWvw;3*G6MuM0{YLK(jo+A z0sYTp1_)#X^q)DUMF`9S`k%=R5XcDVKXXcp5SRt@Ka&|CkP*;-=9Cs8Fbn8^CNn@F zBcT7xDJ?=^7SR7pW`ICOK>wLjT7G6MR~oYEo$W&!=rWCjRi1oWRdr9}wL0{WlH3=qf&=s$Bxix8Lv^gojs zAdnHzf98}HAutQ*e4B-OlE*UMnM0WQ(A<;ETI3H%m9Imfc`V5 zvstD0RkBT{bx>T5dyP-{%0}+1Tq5p&z#aC1ZDyK&twJ&WCZk|Ii*Di%mVtK z$qW$42wLjT7G6MR~oYEo$W&!=rWCjRi1oWRdr9}wL0{WlH z3=qf&=s$Bxix8Lv^gojsAdnHzf98}HAutQ*e4B-OlE*UMnM0W zQ(A<;ETI3H%m9Imfc`V5vstD0RkBT{bx>T5dyP-{%0}+1Tq5p&z#aC1ZDyK z&twJ&WCZk|Ii*Di%mVtK$qW$42wLj zT7G6MR~oYEo$W&!=r zWCjRi1oWRdr9}wL0{WlH3=qf&=s$Bxix8Lv^gojsAdnHzf98}HAutQ*e4B-OlE*UMnM0WQ(A<;ETI3H%m9Imfc`V5vstD0RkBT{bx>T5dyP- z{%0}+1Tq5p&z#aC1ZDyK&twJ&WCZk|Ii*Di%mVtK$qW$42wLjT7G6MR~oYEo$W&!=rWCjRi1oWRdr9}wL0{WlH3=qf&=s$Bxix8Lv^gojsAdnIG zp8mg{_4VVK0fTFP1Bb)meChL=ck{Dr(;K+_1}?S#^gVu;{rK>?<~Q)I{(b-Q|Bv|a d@dmsBZ@?Sy2D|}pz#H%eya8{(8@R?d@E`4sEM))y diff --git a/Tractor_VS/Game1/Content/bin/Windows/Content/Tractor.xnb b/Tractor_VS/Game1/Content/bin/Windows/Content/Tractor.xnb deleted file mode 100644 index 02f5fd7bd2d21089347e1cd68b972e9ae08ebccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12853 zcmeH^!Ab-%42EY9zRrjXf?id;=|Mc~b!6U$S%xjHc@(}2sT zG0#Ly8s~DxEXm;+v)7-A&-JMFPVrOyT60-0il6FRpIV<3Kh!t17EUZXG}mfA zh#SgR`)|l)hUTGfQA-Wt4gDtE`6Y9vvO>Bgb6~q6PE(^!s*dv2>`NJ?dd)1pmj)Z= zVd_gBO)gC@jc<~JCx>TB)|?z6Z_~?pO6@MS$Ng5NcT)Ro-(}?9tq1kw`o_*vd;NZl wudkurV?3oZ6hn@_l$oo~kpc7MvT4p^Od54fP7SZWm - - Reach - Windows - - - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Crop.png - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Font.spritefont - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/house.png - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Plantable.png - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Planted.png - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Tile.png - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/tileunplantable.png - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Tractor.png - - - - - - - - - - - - \ No newline at end of file diff --git a/Tractor_VS/Game1/Content/obj/Windows/Content/.mgstats b/Tractor_VS/Game1/Content/obj/Windows/Content/.mgstats deleted file mode 100644 index ddf5575..0000000 --- a/Tractor_VS/Game1/Content/obj/Windows/Content/.mgstats +++ /dev/null @@ -1,9 +0,0 @@ -Source File,Dest File,Processor Type,Content Type,Source File Size,Dest File Size,Build Seconds -"C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Crop.png","C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Crop.xnb","TextureProcessor","Texture2DContent",3681,262229,0.2164986 -"C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Font.spritefont","C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Font.xnb","FontDescriptionProcessor","SpriteFontContent",2008,21524,0.1952166 -"C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/house.png","C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/house.xnb","TextureProcessor","Texture2DContent",1226,40085,0.003001 -"C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Plantable.png","C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Plantable.xnb","TextureProcessor","Texture2DContent",776,262229,0.0060014 -"C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Planted.png","C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Planted.xnb","TextureProcessor","Texture2DContent",3958,262229,0.0060017 -"C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Tile.png","C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Tile.xnb","TextureProcessor","Texture2DContent",828,262229,0.008001 -"C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/tileunplantable.png","C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/tileunplantable.xnb","TextureProcessor","Texture2DContent",1823,1000085,0.0220053 -"C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Tractor.png","C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Tractor.xnb","TextureProcessor","Texture2DContent",573,12853,0.0020008 diff --git a/Tractor_VS/Game1/Content/obj/Windows/Content/Font.mgcontent b/Tractor_VS/Game1/Content/obj/Windows/Content/Font.mgcontent deleted file mode 100644 index 0c24e00..0000000 --- a/Tractor_VS/Game1/Content/obj/Windows/Content/Font.mgcontent +++ /dev/null @@ -1,22 +0,0 @@ - - - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Font.spritefont - 2018-12-08T17:35:46+01:00 - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Font.xnb - 2020-04-08T20:07:48.1912196+02:00 - FontDescriptionImporter - 2020-02-26T06:46:56+01:00 - FontDescriptionProcessor - 2020-02-26T06:46:56+01:00 - - PremultiplyAlpha - True - - - TextureFormat - Compressed - - - - - \ No newline at end of file diff --git a/Tractor_VS/Game1/Content/obj/Windows/Content/Tile.mgcontent b/Tractor_VS/Game1/Content/obj/Windows/Content/Tile.mgcontent deleted file mode 100644 index 47396e5..0000000 --- a/Tractor_VS/Game1/Content/obj/Windows/Content/Tile.mgcontent +++ /dev/null @@ -1,42 +0,0 @@ - - - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Tile.png - 2020-04-08T20:07:05.8428994+02:00 - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Tile.xnb - 2020-04-08T20:07:48.2152249+02:00 - TextureImporter - 2020-02-26T06:46:56+01:00 - TextureProcessor - 2020-02-26T06:46:56+01:00 - - ColorKeyColor - 255,0,255,255 - - - ColorKeyEnabled - True - - - GenerateMipmaps - False - - - PremultiplyAlpha - True - - - ResizeToPowerOfTwo - False - - - MakeSquare - False - - - TextureFormat - Color - - - - - \ No newline at end of file diff --git a/Tractor_VS/Game1/Content/obj/Windows/Content/Tractor.mgcontent b/Tractor_VS/Game1/Content/obj/Windows/Content/Tractor.mgcontent deleted file mode 100644 index 8348452..0000000 --- a/Tractor_VS/Game1/Content/obj/Windows/Content/Tractor.mgcontent +++ /dev/null @@ -1,42 +0,0 @@ - - - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/Tractor.png - 2020-04-06T14:11:32.7941423+02:00 - C:/Users/Oskar/Source/Repos/s425077/PotatoPlan/Tractor_VS/Game1/Content/bin/Windows/Content/Tractor.xnb - 2020-04-08T20:07:48.2392297+02:00 - TextureImporter - 2020-02-26T06:46:56+01:00 - TextureProcessor - 2020-02-26T06:46:56+01:00 - - ColorKeyColor - 255,0,255,255 - - - ColorKeyEnabled - True - - - GenerateMipmaps - False - - - PremultiplyAlpha - True - - - ResizeToPowerOfTwo - False - - - MakeSquare - False - - - TextureFormat - Color - - - - - \ No newline at end of file diff --git a/Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Font.xnb b/Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Font.xnb deleted file mode 100644 index 7c940e2899e067191e3b63be53cf68b6927187a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21524 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 diff --git a/Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Tile.xnb b/Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Tile.xnb deleted file mode 100644 index dabf1f101d4e1dee675191105aa33c058bfe5a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262229 zcmeI!!D)!3x{?9%L5V&fA zuYd3B|Ef>vhbJ%#=zk_NKp-Qa|I8^ZLSPoq|4e3pKt@3SnNwPXz$~EunaluzjDY?# zr?d!xSwR0YnE?VB0sUuAX%Pamfc|GP0|YVx`p=xwA_Qgu{m*0u2xJ8GpE;#P2+RWd zpUDgm$Oz~^b4rU4m<9AdlNlh85zv3;lolZ{3+R6)Ge96Cp#RJ%Eka-x(Em(kfIvn- z|Cv)-gupDI|C!7HfsBCuGpDo&fmuNRGnoMb83FxgPH7PWvw;3*G6MuM0{YLK(jo+A z0sYTp1_)#X^q)DUMF`9S`k%=R5XcDVKXXcp5SRt@Ka&|CkP*;-=9Cs8Fbn8^CNn@F zBcT7xDJ?=^7SR7pW`ICOK>wLjT7G6MR~oYEo$W&!=rWCjRi1oWRdr9}wL0{WlH3=qf&=s$Bxix8Lv^gojs zAdnHzf98}HAutQ*e4B-OlE*UMnM0WQ(A<;ETI3H%m9Imfc`V5 zvstD0RkBT{bx>T5dyP-{%0}+1Tq5p&z#aC1ZDyK&twJ&WCZk|Ii*Di%mVtK z$qW$42wLjT7G6MR~oYEo$W&!=rWCjRi1oWRdr9}wL0{WlH z3=qf&=s$Bxix8Lv^gojsAdnHzf98}HAutQ*e4B-OlE*UMnM0W zQ(A<;ETI3H%m9Imfc`V5vstD0RkBT{bx>T5dyP-{%0}+1Tq5p&z#aC1ZDyK z&twJ&WCZk|Ii*Di%mVtK$qW$42wLj zT7G6MR~oYEo$W&!=r zWCjRi1oWRdr9}wL0{WlH3=qf&=s$Bxix8Lv^gojsAdnHzf98}HAutQ*e4B-OlE*UMnM0WQ(A<;ETI3H%m9Imfc`V5vstD0RkBT{bx>T5dyP- z{%0}+1Tq5p&z#aC1ZDyK&twJ&WCZk|Ii*Di%mVtK$qW$42wLjT7G6MR~oYEo$W&!=rWCjRi1oWRdr9}wL0{WlH3=qf&=s$Bxix8Lv^gojsAdnIG zp8mg{_4VVK0fTFP1Bb)meChL=ck{Dr(;K+_1}?S#^gVu;{rK>?<~Q)I{(b-Q|Bv|a d@dmsBZ@?Sy2D|}pz#H%eya8{(8@R?d@E`4sEM))y diff --git a/Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Tractor.xnb b/Tractor_VS/Game1/bin/Windows/x86/Debug/Content/Tractor.xnb deleted file mode 100644 index 02f5fd7bd2d21089347e1cd68b972e9ae08ebccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12853 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 diff --git a/Tractor_VS/Game1/bin/Windows/x86/Debug/Game1.pdb b/Tractor_VS/Game1/bin/Windows/x86/Debug/Game1.pdb deleted file mode 100644 index 7a711d3bbfedb474ed5c49819860095412977932..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46592 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 diff --git a/Tractor_VS/Game1/bin/Windows/x86/Debug/MonoGame.Framework.dll b/Tractor_VS/Game1/bin/Windows/x86/Debug/MonoGame.Framework.dll deleted file mode 100644 index bfd434e0023872ff65f8f3ea60e2b31d963f8d49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 904192 zcmce93w&Hhb@%$d_bH98bnos;+PiTqXQS22yNSJyL!>+vJ2(Vc39B`U65DxLCN{{B z(r%=f7D_3PViG8iLLrpWQd-&qebe%4fffoeh4KhQJU^g3zqa4kmJ)yeb7t<{yONx^ zEx*r+_Rc*sbLPyMGiPSboSD17^~!{vNF)sWojsdK{0W})Z-#%L_~#U&bHShG67NZV z;(|Zf^3+dUFn`a{ljUbGpSXMZj(f|8?>K(^#B@$xlKJ5av&#F0BE zvf0!&h5Dvz6N#s8(GxdWx7-$%wwBmhPH&k?BtDo;BpeC-qqiblrf`madO55~x(Q&> z5B-}#JmB73fZ`}MJW z6VJW#`On4s(EC-rsIH3cFd4GkKCygq`7i*IHq?zO`eCGv{hL9pCzkJg)(IqJT0t}8 z`r8fZu8L*j;A@Gm_(!y92{ZAmhs?yMo^BPuAWl*XMh5&@TsxRjpumNHdgjrh%!ji2=FoZ~MwGmcUF zr_t@2Zd6P{i1dR~dg5X{A-BR?OBq~J%2FvbOQ!sC#`4xCEUN;RSdUV^Esz5Zxe7y) zO^no*NZlzdQ9&9IExeSL)-&Exw(8rn&g_I?5lNuP@tc_>Xv!vy+BYmoR5Hx3CoVvK z&?xkg^q6VC;^?>u>Z(cG`xSRfV#`{JDC6Wc?c^n3K;=^6LL%X!K7+`MrX@a{VMb&m zBO)IBP!@;QvPQ4d^dML~qy=St0f8g8j{=95*iLmM9Nt>p)+PUCN&3m1RNgN9MBLx1 z=@l@Z@Rj288Eea6X!yyG6g#q=B*3P^1q%_iz@rt^zED<*;!t0 zM4?a#!a&;^rZ=T|qgop+Y`o&AIhoVUeCy@J>=gnTDU10m6L@B24+zoPX+(vf6PE*I zavNxgn}8ebBlPj~GWhuHlTSh9&l%oSdKr11eew!=MVaYkKYBIHR?cXp^j93UCcWhm zz^#|%K|p01iBHZ@j?uv>D>0^+rRB^OCg5?aAIv{F)SrNu8fMPWD;EK<{mYKl&nX@q zmGYWMTzH|>f-dkNO(I3@qf?&B0J7*(zS1^J7@#?`;sNfhrAN_M&aZ69{!gpye7x+R z0llbioZgTH;MvOu!K##(Mz^-c5Bfs`|k82837%JT+??G>bSJ(vtgHc5Idm&&Cplq8g$oSk!WNi-maSj!*1>tq?+ z7=a$Y5bsL7Fv41!$6(AoM+}q`4XmVJ@JL|xAaZ7oG4>_aNC2#~jX{No(rruChzC}G z^!O%JfW+Alr=9p;z}W+whPNZ7dpj)Dk#Xt8)=~w%(n>9(L7$zeTnFwrCy+ChO^&$M zm?bRqeDoIAtfqyf#!=Vo;xK6kNm0LRE!Vdso^7xO)}WdUeisGZ`v)r_32`(Nh7MoO>5M?E@v7(#?w=%t%2SZ6W*RJq3}|B8?47^94kQJ zFm;*36vLRa@=bFtp35r8no%ArL45)vw#vf-O8Gp>C*KHL+RH$Gig7eK)9@FXApr>c zJJUu1zdIVQr1mz(1oYpm{J%1ZI#t`<`BlfO9x;mbS#$gvFH_xSJ59@JA{Txru#htg z&Dj=HaCNV>ETMoRIRX#D(up#?9Zx{M zlESE9B#=#M)*g*l9z7uE$YyX1)F@g1Q|>Dw@oCV&^MyMLt-@kT8yJ9&_d$uZ{5ptX zAYNX8q8{;rt5_5t9`S?yDwGd)>V=loG+IpsDR?SS3EXBs096VR_3RBW7e2Gr|J>Fpzf?(VK7} zOfwV)hQmN9WJHjRIFYigW~mjizzV~%N?z7;4bL?_*YaFjds3=OPtY{&dYFt!We1i6qWaY%6KI#HRS~1 zjWeLx)CGFcnrlOEych3D*Q#!(DQ1C$Fvokwm9Y?g&dtqL^=0w=zC-&ftL^ zM(}`})I^dn&605hn5feN)929|*Px!E8YoV0r?!#njs+4I$e*?!^GZ|qo7GHS+fP!n zu&<>zQw+zPvuZ1-VYN!lr3&T`Jg=P?k~!^S)0@|97PrS#Qfpq@Pjh0Lv)xS0Lpjx_ z!oo7quW<>*=057>Tv#pLgZ}1|IRy*8Fn(lT3bmiNn)(fqtdHDKIx=sJ>?hW3!%s-e6iV|4CJI8ro9FU%eM4 zr7UC8vC0~Th}t);(LdB?p;Kl{he#LA2EB)xBZWhEj0_%Wjui0>1Ofp;hK@9)Uhy$8 zg@q%UTVeifloKbcgnZ(uol%)p$+ZdRaku{4~9{&MXCM&mUMwWjFg-0!ADirG>{AmoIL zIcoKQNI59s6$At=ydV?Zj$HMB3=8f zZUP{hcXdNTD)MHlenWRu_nR4!C&@I?)Q|v~ZRN|>63z}|*x49g3{UD<~>=Dx%#zrRCCvkX&CV&Tb%U&Tboa88e5lu+z=a3QR!irY|9 z#K7z-W-bu}EoZQc#K8?2S20mhg{iEu!ercrJT}I&boE(iz**Teqi7m>d(w8P)@3tr z;`40-);xM)Vftl1K7026cd@lsTHcd3^N{6*4YX0uCda=5bvhPTrx=$f{4N0ZVKyMe z^z6rlDQ!wFmP0*y`S;Ntx4OM(>uF&0L{4*TOir3^PV|Ue)9vBBqPO-9kt_cQVt*UO zs8Ek1dYc)>;r2Ru?S22V!A10xj)bH4{}j_t2~X~)Mo})Ls53I}n^%LhFpPa_6p*7f z%@Itt6T;9h2FU)Bt`1tIBdeH$86@e-c6!IF@8DfCTd#e^x{K#(*yn|MfK>!@HGQGD zfR#=KyDAo@Xt1D04A%DhO_*3?@A)PQ2&vTe(^81k+#=RXBm0ZZ$FPpk6W0M!B;0z_ zSQyb3D$uP~YDAZTv>~4v%bv<8 z`tugaZ!S?k3l$lm4@ebn2YxWj-b*tZ^sv$2fCwL*{j5JjTg_4avNSi5-+*kZS-Z z@dC^>u}dUYu|P3WN~Q)#rXWi!c||2t`ADWpw7ho8v~niHYjD$?lWzt$&N+oQo%;hvka26p5vH$|Hk!hr!$*tDx;HBNDKx(u0kz|DA=1(BXlRc{DW!rmj3 z$~b8JEEbEo=5^eWn{HO*u!_tH>~I>b+E)>qnRG-JQ{)t^TPeh0$~{>7ec(w?3`AJd z3adyX9wf>7wVEPz2Af2kcT7`lSw)`nf{V1yHK#8I!9anXJxqj6mAfyww%Uv4si31- zSj0$1V2?tsh=OsfT!Rc2nY6!=#gvp6N;xx(m`{@Z$ti`ZwZ!%)4@)32=tKANFB&h4 zmm)_le;amGuW}7GG(zP^sTu6A1Lq|;zYbiG;KDkv#Bap*un4gc-{b;8vAr~56q=!; zjOa7hMI|eKe>YbFqv!@Yat9-UdcQKi)jij~8F`iaxyM>52D(@I=0OEJY8z8loWl z=GK2UE}d>2gU0Z&S~!-W2O=#oAY8`e3c)yp=)se46c)A){NO`ZAX7$oTmRvusp*!; zATB8iTc7uox2w0b$cMO7nD(ZSAWKgm&*e;!g8&`7g`W$@ZqcC=(|E@`0RaFs>)0)Z z0|1l_eqn4mb_?c8W&*P=wjXI;P1mZLc4tb4bPZ;vgr0Bu2dXeTHb?gQ%|{Mc{^60- z_zw{Y&|YeGe_`>F1KftG#0Rwm`Ee=xZ_dWxwiin30E~xt@#PC!f$f}K{vk?M31HDw z0F{V#^5iZ}nHHQF)38~SsXongNEfV`(8($wEx~{kLP#+T42FTBFfc3wr1dPPggv}q zruI(Yy*a{L3X=xCQ79@RC`YhL6q<@c4H=TyY0tA%dpoSxSDHzp^+p(``H6Oh;H|>2 zW+YD&L`Y$-Vbmj8oo-^!MTQoR&a-V7Wd513_F)P_gT?p|hP0fexQl>fTIFigs(K~y z7t&`4rvfJfav4BtV-B!a@>;#bvLJrKR}HqjSzP6P<0gz_JH7`i?g96`m z@b}$pwI4X`y^sQhGm8-*OT+q(Zz6TiA~GpVA|2Jr28u%>jZ95dwHRbw{nC3mAydp8 z73LNDX*f57>51IN8j((N5-B^8C_|pZz2!(2VFguEX$CVaobmych!t*5A4?l!j#-?- zE-*Q8=zb zZqzg3lit%+e$Of<2*4oo_q!P_=w&Kbu^{g%xwk7{FUPMd8SCwJC5w2;q6>pq z#n97LvSbfeDPHBiu55jqRhjD0-CAzEV7Ci{yRphbRvGh|t}6F;HWcT9Py{_yYCy%uit8QQT!2<_`pKlHy$Qf?la|@nZ^xQ$u9rD~^ zGe5=tA8tv7@^0X{WzW69bGJrn@xmyyEeeewP2p(1reM?g4q*h(V{34qpqk@6h$%w){(RA$fxoVm}VOhcq9Uk09;~k?U7GaBPfmk zK|%4yjleYM1vv%oiNK_!;2hb$n4UO&u)+bHJ~#?RK&KG)(-ZPVXGYNGG}nsGj8vY3 z$nf9@r}?j)9l;uwac?*~LWT0#5lTTPH0T+f9l04V=RP|EV>TiEZ=W5R3-h1f*%3~D z8=dahG8#KUQdyR0xQ{|M&+8n?Em58g=SH|0p7`9z0_UdnJGz?kL#SpnOaBdQT@JE# z)8M}UeQNHhu(>$^z>W~W0RUDAqcKlxPj zm!CUH!Zf0vxQ!mhiQDO6o;XAgxVgf3SKVTsID%Jd^Oi+NrYw16s}Od@&df9T#Al3g5wR~oON=9AUhT0Sp>P5AiDrr*+tC0N^4(= zr?KRpfIOs*;>-~PPM~|F#<93zpE)xz!&Jb@NNZE^uQ<9Rb_j6^A^;I1FpnQ)C zI+GyJ&!iIDr^u}jf(g5a4y6Jehdm-rc=G8eJazJNR6Y&YZ&_O9`M_jX{tdr431n+H z`h%_q*_uYOjP0O7K~v=?h^KWq+zn0xJLzj{#A*LLcqqlsY5xL+Zzp(C%Ahf(Ljsd5 zfk^u@ir+_gu;i9mWu}%e*Ndi*{6Yi^r+O;sg#R*CAJTZ@07z{-1CtD={X(FZ@DuZZ zLfq(Zkz^3$IXqwVZ~rFGkQ7%N;2lnS&?7qb!7o=M`*tYpr3!kPg}~9uNf|greb3|l zH&i6l1y|};5#D-Dt@27Fo1-`QnZ@4X;X<=%S`#=|hWynn9^3-iiK+JIXhZ7j5F;WG z^Zv_GAyfdrnzwQVJv4nJwQ@B=*2$D`4rHtOjFQT zINCFKV=P()3e3{9Hf3cjqj%wr3Q+jlgnETB&q=3eOq#Hxp)c&QS_Y<^i|X-#h#m7haUcBa>a5jbLi2u_1-!Isf7W2x?f$)a*UWg@pLipCDZ zbMZd9j2N@B5|3(`VI)o@Tuv>EiqoFvyYZxdIkU9#2Gk~JdMj^K&tJn+tNbPKjFEjr z9$9)Hm7rC=-VOblgnqjl`h5wd&J)9crX>vjLeSn2Z_cXx9|`|acj|v8=#jtmLP5P&yGtwR>>@!f|W-Dz=9%SH+RUcSBx=A+p$mJcYsac}USr+Dp-Y4c?uN_=+vIw3Y!ueGZ*~tGp2S z;eL_fJZ9}X%q#4Vqb``(iN3_+1An)ccQeu)L)RL z2EE(?WU=`T#pYY8;JbK)pp#ZVgN&+Iycj{8w4$+tVxE7_m{^`)JZBz`k^K{+5bL`L zbq7HX+aQ(4fg~kq7M2NS!a}?+XYH%J2ocukWtg9wn$`{;JB6{@h`mBYlnyWwV1Ts$ zvrcWZN^P@#WM!zeNkN|2in`&%$IeLGN=+#>tqhYU)J9le`c2l0TASj%xlt%iR;=ep zZpq}-r}e}&s?IXA)W4UwKunp*f0os+H9M-cN$-ypl&0R8fW{&%fdPyE$uWcLH?~c^ z&@4ye%AOcS1xW!*tgNrOL`6V2&oL4tb4kcKRDL!b9*8vLq`^fN@D!O%)`4C9Fw300 zD4t#=r>U1DLAMr8YzGzFM^$BYSyk>|X5v9rZoHUVHYvuKoY7^u))II7Scb5mCKL)c zDW38)PnQ6TYkzccy%;PP6srBh**5R;0Vb{=07({9M6{HrfO{4rh_`~Ep@kac; zQ|tcwl7i7pFH>$BL` zg_)aBV&b!)T$gc12S=wSA8WM2v=>3UBO$p4Bxi9tat>D|@NX*J06VfM+0ah#Ny0`GRPva3=B^5s;yKfy7WO*pEId4K3%nkqq;U8*hVUKu zdl-L>FW@JVki7>;tT4F;%1#H!(-e~Xz@v@#hsnoDn&Dak4@tx(_o8DS;O>dvSl&XE z_mhnmhIuc0qP&o2%Cnw`Vua{}jXfbEIOrw!s?sPPGN#1kn+-2a#QpAxDOGtp#D2W- zk6;}0nqOh)SaWc|7Bx3q-#4NBRol& zzw&x?YRQW*pW?-58>ui;ebY=tQHC4XR%2x zOffG)5EcB9>Kr40PDewZi*vH?Z)n87dlC(BJf;CaDfx(O1EZ>{ud`=Hs=6Kf!Pw4v z3nmH<+^}dhaOT%oiRjXmwf0qBAYiNiGb)+)Yw+pF`0481TKlcYXFE&D;|oXMq@qvT z^-HVRoBQ<;WfFL^kGwI8p7gXL9_T7mAFOEhOWf9Jvfc#Asok=4>%oA$f2bhW^gCe-b%yPM(7=biX{ie1 zRN8mAu1@V;KHKEp3BHX{ zZP1e(quurxwcOo}zD};`r;RQ=`smaSFSDn+@q|CZQ z8wkl^j>U;cE-(?YZJg5(E}{@F=T%-pu@I9|DG)`73`4vqk#`gsmnx7z5fX1l4W0T0Pjh z=YS8N<=6!R>j~%HWanW!=QJpPanD7kHs|6U@XgK;$NZdCY3DTL&S8` zOY~jVgnY@|kb!3b0#!D`0f-~L!;;&k%&Cr#;>N17(g-zD)=a*NMwl^D<+A-#(CKJ@ zGi-k|>hDVS;fva7f4&dtbVhen>%-fL1?HXu4Xjxbiisp*>)M}%45I_uA3`{O9hEw{ zTl3|J!qov;1FC`=HV@tc7B)GeyVi|A2VbyAZ>Fjh)S{VUsaZ#u2Jd&08ATj4GfBl2 zpN5k`qmBIWW`XQW_TJrHkYaB2DqWUvnkF!7B-_`I!Enq?ycI9PUc?;}&h_M<=#1bM z?Oerya|$lpgBc&}t+MOc-*3@hQwj6u*r>4=5TkxFn40i!Il5oD%uvKtst#UOvk5QIU@+`DoBX zm{?`u;Q0Cc&Nl{730(Uk54^x#)x(kO&LNZ@5628$;kkWL-QbjM1d?3%q-I36S^jO< z-dl8!ipZ9q^VPFwu?|e)B~zZxkl702V_eVKBnQH5bZ1iwzQ4e+P?j$a&b6d)fRP>x zC={2iG+n4^a+DPjZ;;0bB>%{>H;`;bnW`~RpiLRG$OvpXi4^^UfG7<|XUd=IL*c?M zf5ebPIOQ*tDTFlT(H#_mxR=d5g;FCTU4FxlxMEbTv!CT4FqPl5h9C;cl|S_F6w1*V z8{nr(Cz(6M3zA5JQT4ziglwG0q{$}LwO56Dg-{_O`cw#B_~hFjqz=zJkPK>G@^R;P zmJ9gaV_MA7EClo}qou$I0k?Y@&$2@ADxM`t^g&g~cor#o=XlZ>w3KoU9FoddrD^e# zvuC}Ojop|=nT5vn++=Q15I~`9t-ZUGc1dAok1DsclfyB zK6d~W+J`d?E+sD@IdBvuDqrG28KM}DR7xz2}d?MDT)l}q#%Kj zx+;SkTC$Ls&qHG5JXK53-eJF*YtTA~)h+G{Y12ze>SA6XVLP<5f>LX&i9SxgScQ@iLyPd3k?PnwC&)kLy0WD&9 zUe3Fo?dKrEdk9l{ntLaivi4IE9Bvjcf$0M855XqxI6Wp{Oa3cVAtJK0-vH zRu5rL{{S;C?99kZ!oo2wWHg<(Og8?8c!sl@v{!*)urZ6L#w{RH57BwdOk;qf(v9z< zJOL(BJw#46%XJ91aKxz8f+~}ge@*C8>E}{L`I3|{tJZI&enh(Vy|N6??!VdY<>PVsw-0VYj2B!Pb zmxPN~mxjsdpD<(BIl{v!zVR&PaiQ^aehxOi$2=l#i@}H765Qn*f6nY1YG6YY7j~-Z zmExUfsObix*c~Ig&@g0T+qd8RhndVNwOLn+F}S591=s_C9tR; zp!yFZdRPp1N3*DpQS>092gRTgbqk=Mo~RdqyFlDxQGb|3y$Dc|*uanb{l`O1qW59S5VV60s)D&*1(|(7C%g!L9B0K6#0X7+A zVlnXlqfv$#kYo$592<=38_-gGwo6Vs+LxiqJa|Z3>-#Z8*O{Ms`HQI7R9@$^O?wP* zOM)hz#@k4GnRdY^Jb7aVybcnH( zRkoGi(xdV0AXv1Iwd zC}@GZ5?TFT+(&VAkj`0RWDfSt(I6dMhX-!9*oy}a1JWC=#hCNeT0UEaUgPF{CFtZu z=qy}aXf=$Q;cV$(?J;W*yv*$WQ_zQ9ihIF3?$LUgCOk6_N>R=3uLTxo zq7U;J+MJ1st9>E<#@CI@C5%YZbmc)mT%q|yS0(~bri){lX!y30 z@+hjTC*S;mTQs{kN7I@vz)?mXwIh-X6ND}i7&~z&o~+e!>>0aK&WnQSsWEA#L};so z$@eKt)+lR`okAnCojbeZ%H=C#gc1cXxyM12V;oa;O5Yt7Os^1uWD3XnQA^NbDI7N& zU*~3{!OD_@-_sF`aI`f*bb zecm9r3YXA#rZBSRE7WHt%0e9qsuSO)7=at6X6rf31qnUeHR&O9cFm-c=o&QF>_R|* zF||rjlNkaP(L+BUF(aOXM%NXZlg5E<0<1$rAVTwvP0^^D(FCju5dla&{3y!Be3iAI z{s=}reGCh6t1VkrHa|C%^uSLqpN(>&?dH3XQ_Y02LoJ?S)eTJ@3Phv}b6q+D!d6bV zOh{^KZ^ib_$}<6mvRS#6pGK**a=U~ebO(hbsmHZ8!Izr;(t-*eJi0=YZ6u&tAOR&; z2{?!ZH1)<*`6PywcugXlF;Sq(EwzNifCqAuC8s-^Dk+wYs)cMO7mNq8(TqEuO)d)J zkTw+tbIS@%iQ^G+u@Hx_Xi(CptxJlY)KM`}PwFV52t=JLjxio?uP2~Q#RNT-RT^qL zYEm_Gc4b9kbS*^SaiMx7vR}qxyc+j)d41Tz@7(jrO>3A(6(67~uIHCh`~Sr%5|&sMsa;}%KK%k%S!wO3C;liJ!=TM* z{-zD^#3*jCto#-TgISfh1D)!c;p{;7>uf{g`05_bs$e-M=g~4xHBfUGm|Ag8XZeCC zs}>@q4Yi5S%ezh|dad#Y=p9!se-O|5?`kq2J*-!#jc_{P_f;WsPg+Y{1ns+%=V(~J zs%Dqt?dBsZF^7k;V(koSy-ZlW${%!--uN>RV3of>WVE!(??tii2t(46Nc7L(_(GyO z5}T*7?YZuDO>XW)In~?a4Eg)&)2;HORKgVsOl!SZFim6FWW+SJzF_q-;VsWb5gR#g z@sabHJs7IhbP29LaH_%#H>LB~ZP3}hX#RpprPVCZz1J=HZp=3G%{<*HPg}qy&h)Tv z6K1=KU2phS?Bjc3!`6%z)w|o6!0mDSsY-?Y8K2{NgGae z6c6+SfUgySaHBx1M1P_7F-~opc_ao(IO|17RW=Dj(KJtA0c{N_1N6}rzwQ%t1s&B< zw2Wlul1QvTxLZqB5fonHq+>P5(OXcp&@9+3r&($i6`jq3)3VjOV#`N0lT#{8nw%Hv z{QV)E_+s;DhCr<$ zq|4et|KYTQpG*=zS?PGT6SquF!Z1^nyV_~#0Jbv+w-}l_NoYo1^R_bw4{#txFd`&doyQuP3_{l54!G}X*w{Tu@wDv9fgaI@szHRb)+%Oqi=qWO3 zLRM%VXFv3n&X}#1odm!cLHMQ)0?mvR$u!R&anmb5OOff7=W`lH znG(7x2ej`FN#oPhUd@qgYd^AWaB;o=UJY(-XH4eb%CYT}EM9OEFZ( zF?~EvCwgFfX#9k#PBH?EPn#PetD0q!rJ8&tl9BKs4H4eOcM=tm8&4vRcwWVYdTnk4 z38NsxxIwaQZo@3M%ZZ&3+s8z9gbRkrr$_WiVdw!45{}xfBI`*I(MPys!y*p}fy%@3 zfNPdw(m<2q$$)TErmiTOp*2}d6tDl2cwLx&GiL3=-cMU{EQz#CDa^bH406VfkiGN< zIBoO_V~tMFV4ExIu=_(8_RM1)Hv)%>Qe-UJ8{_jVxb;AmLh`=rH|19o+N2h_kWd%w z??M>MVx6dgd5ueq(455Tr8x5n^m(bBE~5=_BKvs)*D6ch(rQYg;5w5*Rhe!fD%gU- zA*qd3>O^f;vrg=jR`8mi#Z0B~Vpz^4ZTT6@;Sv6?)|aYtWRvRjkq-_@a%OhnjOgoB zNI@}WiNn=L;6w(8n&R+tHP6c%ALkX_f0f+EtC5Xpz69(h_M$)~K_jj^CtUdp);}o+ zcfGH1J&-wUjJ5pw&4l)HxVfPVbeggwHYBB8vcqjHPjGD}f$weL&RnK-HYOV9i4Rp{ zM)UbRI8vgTBiQAD~kXPq?f%`iR%5Ev~7PRsQuio@QhhUmV$d5 z>x+F;l5Jc}nt@{toNN>WIs~7qOJ1`~68jk@u|sqHHYLB3|I?w^sjdWB+R)Y3$s*eN zTvGOj)uW_-@@QRnCK%Oz5RGPp7m!pro9K-%Rd-U#t)U!*Nu^kHwMkcNd@}qxkZPjc zXoPD%1AjF+-s3zg*O_$Fe3+5a%;P&Y6aCnli&(;wr7Z<`7mnU{@+nYBBiaf@j#RK~ zfQw@=53BqILZho2V|`wgX_cR)c+BZ^{%#Ohp3w4g!4?|FDTOzR)A1A8ZrTWPegyiX zx5O!+J0SilD)$yD6#umHJFoy;^bc$0n{TGTq1*8}i)Gr>$Ik=nhK++8P_dhn41e0&dj4jm+~{_5{L^=Zt)d zoN{5Kdmx+(k8)D%mOYBoMybXxqT)$T>&$ESzm3X!Kg#1P8k|QCX!pOJKpzZ2_9F-2 zVkvRMO<#q^JO^iwxTsos`N60t?f&1S+#lfFAQfJ#7N2aHcl<*cxNRy#X+_gC^}ARm z>9bgd*IQy9>n1cAubb!q&u*;R6Sy{&o%v#f1A>+4-h~+93Pj)OGK1tH>-IA`LG zLn$YquxtOQ^2XX|`ZCm!%o{B8s2ks5ptawD(zW*Q;CB}tw7;L;NA}Z^{>N~f|AX57 zze|7{w91D;gVug0-l(wK(P|XNH?o>ApfWhWImXNCP<|nz0y^`D})XbM79w+#QPM`q;aV!O}qaO5xG|RD3Ia28Ql#xc`26tac6r-4`J8^cM!kw zF(j0Zdqj4Mk1W{uOvQV7ttv6plOThl{ZX4gy|j>Cg#)KyKa^da=jT{&Qd7ao-vA>F zLfZZBj#1K0!79`%a^uS#(7gzZ!Jk}HVVNH%hb3c(g)oq#0$+?+Y$f3jKvmd@DkL{l z0f!T5o?Q=|S$qv-_qS+*PlpJEc{jcVxG<6(|6zj;T_ksZB8=ign)vF6jQ(!pJ&0ib z{$DWg3h*~@p_^0C;$%0&-MYBoIp~w$ZN!&ON^{m=b9m0eCnJ(`)^KxZ&MLu+dJZzy z9Kh5oCka;CPh6P7X`HCr_tra<@NSX+)67YgcdV#A34@?<~T7eU|sU)3N znQihn9@G>AP7QRCSTb-cA5y|WYe^Uw6B^(wTI6Zq)!;Y~xLpb#fZj=bQplv4so50i zGjrAZ$gKeI`UnPg5)PcT#}#nsG@XG0Imig;W-xN4acVHD2&AMip$v0A@DCZGQ5OX5 zId{_H{1>vlLgcu@3lD&B-08?uxx#}ZeO;kZ8tN=liM^M$rEbx9BGC=pg@-C=U zHp7c!J+N4j#vNW{0=L78R<&4`AfTi!c@jon-%)x7Uo(u<^@38@-qgpd_}DTymceab zq}}lylG^tnXS3XYTh=T-Bv6Rnuxx3PgE7wIqgvmKdW9T9Y?Mrc$WGkIW`)LlsU0Ya zdyN3u)Sc~hT}NS17n!IL2%n16?x)lv`w^spi{@%iRk~LaJc513lnkaN%{W95+=^X+ ziz6EBpu7mc-UwioK>pp)tK75rB=F9Vjs>IjG2r}!5#|=40&mnVkXMB5*OykG0Sz;f9iz{mk7ELxsiH6N4bN+tP!P&xv~bkw{n^!K zEDtm?dQ2+JgxyD}*x(CQj^(L>R=9Vl9g@FQA#3*>kM?iEc)@yH4I4Ua5Y!Z!xk3X7 zjE$AQM;6lQCf^lxC3rx0Md6Eh8g7<(E+V5lqWTir3e67i#3eY?*tkc^Ht<1BaL*bG zXqxVt7B{iQqYIBi^D>O>SfYge0AT*SOw-H6aij7nB7n-j3oQKal#fdMHwciv1{hZp zSHY(x7&DDw*xIRWhJ6B$f##wofY;^hZUcAV8$*m~=8lLwng zZlqBP9t#+zXs8+FaR~zzh9dcGBmOR#ymtt*j9GNb7e}3vcQZ=0uSD}zoLT7pcGy7> z#@`O30DU`*p7iZ73*QdI6-4-Gn5K^!P#fTpo%pj9?)Cw#IgEA_u(WT=B;$9jreEQfuwqAsBNqYI$BOYK&e~*Q+j|)gTbmv?eUzu(8 zZkZ*!DY;F2C`z2ON|U}w%bLK_x&TWneRf=!@N!Hi*A`qH=1r|Gpu>smX*z3Q@ouEZ zUTcFzCjR>H7vS$Q{6Tpou>4K@BL3L%6RvvrKra4f=c*6HUzR&B7zzMZS{)UoVTjgdZ!$IQtZ6IaIyAP1xoHrLmPwNJpr5i%8>( z={PD!-%YRL3N}mz>XedDCsj%cVyjS^Ep&h>8xE^cK6+%T0-r1qv?~iFP6CcytD2G(Y=C%6l`IYdF z>LH2#8H9el)Drr0N^KHefafJ&Z)3$Z(KQfYH=UJOq`7Fsgs76m!x{NuO`;fkH;F7c$CmrwKN zto#hNNzr6cDf97^L+eW^9xiY(v4Zm(K{Ab1jFD2Dd^L9UO{th<|4U4ey zSFAvS<58-p#+@YDmOpbVOL$0nzNT!Y~{O|6q0Qfy5S-1Rlb@^NT0G9NpW=!w9Cq&H z;OnsoUZ8ujk&lz0yGa;17b%#6bm9KJu=~9d*LGE};tmY2ZR%=tcnt^E)6n8LV~wkb z=|tP??T;Mb9^8*jEP(Or+Q(_K*`ldw?H}a&*GaqwUFSMTRSp(WHIKy<6%HObYkV7B z?ki`t?D?vKyHO}%s(c>PtI^HlZFO5G_U5lc2?3w1pdA5xX1ItC=L-I|Furd}_rAfP zo+mg32*L;3eFXS)y*Dp&V`7U)lRkHwC(K&~ie$>8j6c?L&I_F@R0`Wcu(0>G46--Tz4XA-x+5VCZDd zO}qah1-Wd|;cD#Nrd#+{6PlIobBG#o+;QYG8asALvU54rJ7J$v*x_g)%ak`yC>r7P z8$xsVC@WkuxIo%$JKlmqhuY8Cbl!<%6v$F7j3ofz^6sZWZo*@(B2{~JWYam?8a0)j4jejS-Lm3;Iu@=XN`P) z1U+OBSdz2)?1c0qq>Le0fL@DY8B%Q@PeYW0%6tnmY;%wc-<(%GJ z5*Kswa?;uL8F@C5?CIB^4-FNdF9BV0ufCUPfawb~JaRx@Vi;oma&-^V)hSVZE8THO z-(alg)lG-GyzsE@$jbx014(&tpd#sGzO<*44D1C>UMNS@FfozBW#3YJ7`ExL<1*i@ z8#mcIS+h{zjXgSCzG`73o^Nf@g$cz3ZG-^pEI1Y-$SMurW|Y^3+q*tdy$Ts|)uqa4 zIdZMX88IOy9F!5}X9^Z52zAL{E)H>gFeVFHQnfj*w#UMpzAJO;ne-$Z-eaiiz9;3s z)!qXZ6zUg%x%uQQ?%tz@ox_hX=FqYs`@cTAN+pb)K)So=I#$@;XKBlA>>AYb;2GEE zjI7yl(+Xxc2hYIX-Xwup2Lx*Ab{M6rW;&(fMvIOpy=GLA<#ZA_@dRI|cC{1tVRd~2 z>RP5<)XMhbwN!{z!be?kI*=O3#l_tRVjI)rV1 z(r;SiDxU>_e45&1sG;+0qP?P-%?h|jn+UPO75u&sY3 zGD$!;sU$%b#+{!;5y+a8wj>gAk>kOt458Qp<8kL?Mkg7KU`R%fjmb11dnM|;0uv8< z4E_2OQ!NE7P5bOraiS!4_F}j8VYd zlduVpg*g@@DFW<32Tue$xgLhGAnl{jUyVgDPsWm}*5K<0qDXuE>0nJJzc@~Itb)iC z5u#(bP4+`24$Ua0KJz#NG^Q*aRG5xq1Ea%YJwNktw7frxvh;FD#E;_+F*`f{pLDAem$T7 zfSRvCnaX3ayWZ3IF_{3m3DnxuX<%7RFAq3ji`!#&==pjIXGFQ?;DG}+UmC?LYK4O; zJtKk^aV?cy^_fH>Af!1unJYWRt}i!E5*?EJ{vt3xC&Ce8mXY}u$m$f}V+vl)j^ijV@VhsL!2u;KLQ$)jQv&b*aq{cw@>$SU6&G zmv51Z?&Q1lyRwmlb(}Y(;VUTC8C5kQSozV-Bh;Q)ref+Xbsu39 z?wwu*KKGW?-EGp~s1tcva0TR%NTt$A!BJ23n{^w`-a1y_4z{PEDiwHzhQlh}6@=eW zC}G9z7&#s;CB?9!q$^(_mY^(WY%-E47l+YQ%F3e@-w#?y$q??!7gY|C9rIUdv>xkK zQTZJ>>9K}rdu$5RM3w`3QZ}OiQ)teRh7GeV%YRJ`g`NBqe|-kJE0ls)p-6~7?OAMZ{OI3kzDD~aH=+5d zGvb?IPv)eLPn%S}g6zA$fr2I5N|UMZLp;@N4(ltD3H~gJobTYn+-p49$r-zU0l9MF zw2hcE@!Xs#zpPRpgJS_txd|R6q7g7Q&8xf)h0_|qbGaPWy3WhwFUNqX(ACd2EA<3KAQ+EeOu*f>3T=_+3608%&&r|(VZI4OO%rx z&H1o~;D1`)V+PZm50s7F@H$R*F|w7D-4oGH-gVt1RM2kN&7^jh-=)HSvEVegc5;Pq zfkpHmC#3FSg|mUI6(`6C5;~6!>z6vuBzLNUt0t)b@{A+cFT=lzGPldmWpo}2NDsJg zWF|Z-s7&B`*~Uc13Z6A#TfzO5+b3Rq3yC6LY3z@PV@b*Y)B?1J!cq`(qNN+{F}f$_rqUjRP?+SMk9G^Kum*Tsd#?t$BRW$GpWC48kx#D6ttmk99qMcv+7p zuj+jO2^rqinqDsHi}N;P8k)Bmi#LxC#NgXrcajTRZ=&jG?1hHfl=$jv;@5G@AXGQN z$Z5+E5+COJS&1|h$&IpYqzqhD#|AvjKOqeR%RdOmkl2wGt+I)L=n}f}7u0oR7?-@g zkKXXl8%eKx0AU-?_p9e$(R1Z5@k`=#F^SVQ5~qN~sYv29uzYrt;*q*u)TDT>u)0xU zQV2MrrwCCoL@J+`mx+8J^^b4QfR`CQ^mWlD`D7aO zl34dx_eK?SP_Y^MRs^2)p(jeMw}}Ky=5a|ohsrZYkTH>lx<|nQFG#KUz zHJrtCv(P6z(V_i$P1#_HU{87ipo50@4#fJ>`lJt_`s|On`M2^S`YxvrtaxPm#ySy` zY>4BIL5oN7t_~C!Pt2O>z7#tFNScx=@WcX!AsD!oF1^S zrn8&WRHW`KEMh4y+u5IiuPGRnY`hE4VVtyLeNER1JB=3rMEh5y;{8Rp&rc0uw*hY=r*WYS^7RbP z+|qc6E0?Q9RY$DHGx-h}cUGmk#SHmO-z`PL8kFnXrErJm29_8`i^~>-$m5d1*h?4`!|;p6g}?dGAg`MI3~ov^ zMQ}T`EIL63*=bJ|*Z&6G13Il&dv)UxR9vytEmIGq?OsvF2=2(ihvbOn7VZU}yS0Pr z0(%jMsS1_vB8oc~Jd9$o&LR$470(r$T*O_*gI%#u;%ZkRCoT}iA`UzaaRPTM>atbU z1+pC0WouaKx;{H|Zh?FQ1d=#10k7jx+>yvKC5JHF1^~|YLfeKmEC;*O5OZ(xpRgr# z3QY0b3(->5XTcL?N#?~F+AQtVxZAKkB(2~t97iPXiXqHV>#I+40+hc}_|(rj;};C%d4(1F{8oHk{^?z%1<- zV-sKkvz#Oeo{B88B2XD=3v!~2C0ox#5x>0?{rJsKW~!`Lsy8wYGAI|Z}Er|m8fQ;*3RJ-1^!17E8vp>&$;Mj5fkinZ(ykRn5t zLX_=Lv1|?wBOKfq5L;&Jx-~C(YI9TRrZZ3bVp`%uXrE%lQ&q5hU{?Q>HzQiUr5(S% z2RA)Bc95KT34!B`OWUQ1ej8lt!FimClntJlaKf%1R;j8*8(g#t6qTZ=bp3iwu}7^s zYP-U~M5n|g@FI0@y?BlSG#^VbYDxBI#&_94+0#)UiR+OdNR8lzd22B}GKk-dg%3MP z70?O->4#}Ez0tLLQgxx#ScRdjxfPX4 zgGdrsJxEYF6`F@rsoAl5%fSB|_dV04g>(Rb4WjU2qML(#x8Et%ET^=P@v}H(O3oK> z@Fcsf<@KedKw#|Z7fA=EMA{qZK=JjAf#qYH3@~t+oHvBSLO~nO*dNElF7?E7SCxe3 ztTgGxw0-kgD{hk^>zqBlH;M0^q{pv9&8jt#88<`^OvCuR0KTP+L$+BcdAo((XWUA! zL8apZ46O=Tcejfkj49aH!ZDGLHt3L)y&D)4^mP=%45bZH=|(5I5fXF^iL9IpM~9l? zbMExmc9Emc1@u%0aFKE4e-jFyKGWbw1(~&PRBM6=NFI*p} z9dQ{kwITRCfdYyck>Jwq5^6*Bey^-2=0!s?! zJ+5u7?SdrLMb?ppROSa_lft#*s$ZjO{iyG5jghp;e`V#x+&yn247tT&0YT}T5 zPHx94AmiBdg?XH!OTnL5wSr!RzXX^C*X-}&#vsnMW6aC)$tnk6&Lb0NIcr8w&c$;5 z2ww^wNqbW-CUYgmMKeL)5joJIY2CQksm;Lh>oyTx`B`8x`uz50u|sNjr2Qor;%cOg zaox>dZlp=5U(!?N+tM;Od?`@iokmJI|MSC~t} zfCb8;Q$De-kFgwA`ajWv+!^0S6xK`Zwv{i*46Ndu93t5GU+n=R_z9>_&-2vnT*{9S zv{KI4efWBp-NIMPNnydVH6v1inU*F6rm{L)Rn;l#oW*Jx{~X)2ZhtVBF^H4g~BxU z2z_^lZUKP55k6rFm5Xk|9xGVyfQ0|mcpoH<>CQy?069ZP3Jlr{7uk^R4Ctn#+O_ZS zT{mhc1dN>si^lk7R14V93%539fjLOWgR*)k z{nx4ir5T_!qk&Gytc?YV3?2Xf0$)Ygib@}k3ke~h>dtMk~ zZ=i|0!q;P46K5ZoJ$TF&Tj}fWLLk`3F!|oM&^iXsKOowBO!T$z1ru!K_CiJBuM5Ik zy}inx_MyRfOs|x^PD6{FrVQF$uBf;a`ONw#l}r(SAbr9?WdLBpWx_i#rUt znS<*hJA9+FLxY`{-L%!Rs{;z|h_+q+FNzNpI_b{upqzfzoeJlZm6Kk6TG;p0!U6^E z!i|F{bz>Y#jsuq$k@wUdEQvy6`p;wa6o!96hDm}~UK|VmQY`!u3JgZsj-AV$aCKYsz^ZmZdT0IwcyvEDS|k;;#$ z722;uBCY+a_^oZh_V{c0m4Hnkd?B7ra}CD7U!+j+APy>P?N@S|b%nhEK$y7J(l$DS z98iZW+?h)s>2AVJ1kXG!7^JgllwuAS;!;_~=87y*{=NpF+DTCS5CSr0M3ML^K$Z7)bL<)G`Ar z)HLg%&Y6`{n}dnBJe9!|^W7o^vz#@6Pqxv~Xk&7RJ&uJI$tw=U+B&xx4#ML6j9T8v z&-C4n{+=vhJga^TlYWz|wDjpT`gATLaDpBq9X^{^A6{RLPI=ktD=3NItZ&t99!l}i zP#KT}(2VH&iUOpxo&sscY$EtXMl z*rYu8*vcLQjcU@D7GVqP!Pg-0QMz@_E;6p&ID|27Q#?FZ{3zy%x5VWPRiList<8KM z9D&=hClvt+SW)NhuXDeD!s$~yVJoW_lWK~zLbzkEFQV6^JR`e89Xl+2qF--QB!+{O z&RzbT%Sx4n%XkK4Pi2g~6JiggP^_PByqBB$r2qy)xLgPLS?hAGT3M@5ci(#XfN(BGi1a3ga9t@y(uTUu+LT=Vnk%GW z0U)?=RI26*sehG>m99#`>J#6|&ETDq@Vi<=tvpD1+VmUDEROklDJ+w8uU=qfTXm6> zh-2-HEnd>LGLsr5aT>k-3INeV36&fr^)|@~ocHvBDyl-`ERUN&Mrl`Q0IKfj8f|lk zqtRBz4J`ljCj7$HF8_%JrM(?U8uhKNM$Ot|&(Pa6&U-sxj6cNEiz@G3(NC1<7G|Z@InjS`cBLou0-4!7szFi;qW?e;GUBw58sOyUj zxV~jo)OFWINxuL8oVvGfPbL8sU4P&AbuxA9RGq3ib*k#r`;;zFU^}CC{Hl$O zmsMk3{aT5X9LSFqLMjM0QK9TA+e+L98FOC)%OS)xlBJy@=Z`N{hRa?F9Aa;>?a<|2m`Zr5(?I^yiAsHr+RqQNt(f7Qn`hh0Ip;84i9-4 z{i~n)m;-K0lBTB_&ZIy zSbBiKEP2auOENNrLva&i9=nxPe6OM%Dl0w(AKlb9YvFH48jZDZL@=I!4jSBU32ioJ zE9!>Y{yLDRt3=UKd$^R+aEPy-fNNt3>?t%hCa`48Sk5r9ouT1dQ~kqj&}Y?H@mF`O z^P3C~V#0(`IOj=QKy#Yqgl79BP^6Jyv6^w=Glx%{l4$IYvXGyY(p|vfBt!u0Pd5M@ zP-p-+JktQ|IPi!GGxgNy(JJUl|4|rI;27lm;Ca(W%lShmxB|YS^v{K7%>Bhp?x!~4 z2MOXf+=#1g++Qj}aPYT$_+vjlb`~eT+~u6t&!Q`K{oHl%ZW*|5gpKTE97LUcHk}t= z*DcP6M9$cKaQ)M+>lEiyD+IemqgAO z(78oYZ&F9`v0p^a*857RuZ_uX;7o9{j9RUST4}(SiL$ z9BfV@EhkvcJmWgb#o)={awzB#3n)I1OhPGT279RqC=<@D*C1^i$HtvGVo--irV3tV zkYx!1x-!`gD*#RgA0(gYXbIrO&w6~OukbX9a@4^#cnYD!bn+8VnM+{*N-}gMb|&xW#ok&9FI%`8H@o7s;n(RKP#C% zJ&y9P3kMsOdHO1QR|U4)5v&cKtoqA zr9EG*;!{Tys2*bO@lIsu%ivtS97dGZL=@>%+<8^xJRNs_YUGUJQX`TRBIg&zou3vt zzbNj!md@xSGF1q9RF@+Fqf%1t9EUuiNOIga&Sbom-u>N7Qbz3P=P^T8Lb4Cw3Q?p@eNO{ z8MITkIt$d94P;{VrLgYKs`J$vgNDyoZ3QbEhCi4V{Pqd|GK5*t96=bqy<5Ydir0jY zR-x*mwiSY7P=926^-PTt6N56cP{v(4qDfV*M)J1$!dCconM&|-q*fS59j+jR;^!sW zyheMGedWDqvjf3fk%(Kx&RM1syp0J)K5rMFK~&31@DBQ*d=hw28E4BIGUJs9IMgx- zsWFCxR&+_3Ouq`QrhZ9{mi8d79abS2CuT>BSNk-&F|YO+c4iO-CPeksuy%SKUNXQ* zhD>X44a_zrH+UoHpyD;s4p~Y`6}$m%kqZS?a7*NpE^-xgy_mXT7~IIj;Vbl8y2rcbZF93+n?!~Qf_ zhWM*r;m~b79D5L>FnlnyjUyBunAj)Tk0V(-z?K=hGp#iYQkO)6Gni>S)>23RVtRo> z6?2Eo;4ZwKNa|WJYCDC2HSzB#AllPUJnOOaPc5K z9)J5RgqGhi+~Z#m+$0_%`0{?S5S)tWhW?HH3+3fnlTH|PABJ~W8Wd`YBqR!%w3fq~ z^9Dp;{`?^OCX7KX2+ExHEjPnM`ljkFuw_b1A%u6qmQ7a4PG#!2m#iKQ2!3yb-_Un< z_kfZ-noM7{7Y+|-T({CX*s_%U;S%f6W36^11$)Li{uJ$-IG@E(*t&o`)1qOWHtZ@? zR|1F?nG?JTQKIb{#@_}A&vvrXVWcne?XW0>C!x_k3(`m1!JC0S_$#MeRMc`e#e7K*myYYYWJsq20uH+d_r%0Z87u|aZu!uFBE*OjR4_VH22t3QTSfR7LBu-Z zSht(}<}*eNoS^N$e6;C_53_?|&{Zy*)I_*r4{DxpxDyq=^bGBbOUIeG4l;4HYn&R> zFs?$0pn>Z4ZbckI+mUV`3k=UiVmMQ`u&Bc9$22{bRh0(fmvRaybr_Imf&3g zf`5SV0)nlnaxztYH^9tpXT@&xZto#-YqI)Ye5>!Hhd0QvrG>V<{7B2`K`5q$c&O7g zH-qt+yBhMq;xl`h>iZ>#=$*9T82{_gAP@vlwQ@mz7Tud$+Ssk%b;9**(JCUQF+`G0 z2IqqLL%m5pu9ca39~Xr`2wOR&L3R)AF09zy6(71|oOd`d9w=y>UXOeWv!rnlghM9r zCez4_=EH`4?4>*wfCF8@c}Q)BG|9N&c(|=X{)+!{%hH!Zl?{$_+sPg07jMLJ&$^5# zc(J!{!HaBAy1fyP-g(P5oe#4|?0!ywJ_1OW^#(H(3ysIbXIDSOEZX_4)epl`qyiCH zk7?z3K0M>(VdFGP%^cNn(_=rjQ+d3_RXq)XpmO|cc2dGWJ`qo|XD|eFXSTzregvUG zmdGVk4hy0*XU|~7=gwRc`Y*Pe`7SM`4tomi>#`|~P%f)}6tUn&rMOh@05J4jdj{i6 zxB8EyZm3NFdHw@3@RZ2t569SgW6afzzv=M$Rb8SU<1cNoOzE z#BdkF2(*oP*%7@COiAQ65YKzvakqfU{M%LFRum*hlLs(K>4*PM@ig=F<^SS3H_2nQ{z|2nKrV99fFv=m6H z{E=DK2B{K->CYq3EKAovXI5&;7vLZ@WH>3GQbI6irJB)mmUV6LYP*XntTWW10y3w+ z1UrUv_ux~#7sde*zWjIy_Ynd0*tVXEyliDXj*@##Bf0x1wN&&8Epp47Bw&d66@1G0 z-jDAP*0%G!v`s&!`c;^NmmZ>2E^`k9ZF_+G5}*f-VS`Dg)L$oLk*4yC;6xA~Qu=1k7;`MFH)82D^+pf=QlY({$)#E;^5ej}7JLrd%dgy#l8p38#&20-f3p`iH^(A;5lv~<|P3lRT` zr@#%rN7f`?bcxzu{pq!5S7wn{ieiyH7&Pt^E)_=yB6+e5cxm!vhM^B@!A#>tNMmvf zc3MU~Pe#py=h?+st3{<~{dK^zgWV)>W?^^C-vVfjHS)x!&M^7e*xqGer@n)qeEs$M z!Dye*P5Qw=n$XSs6j8UV`rkFI81B1xp{Gk@aDoSwPoDLlV_DBfK3FU-ix`Yu*VaUS zEahz9l9+Tyyy=I4zYV8`5Y3P`{ar!{40M?%jDblHucw{pDZ#wPY@w!FC|2vc_?v(% z!D%a?;iwhNk)9MrYJ^1>5q9EX&1HAAm2fn(4i>bfmmGB;1Mz)u$snKj#;GaEWsNQj zSx(^u1utm8pdIysFcPCPAt!DO1pRAw9&<3D9XesCYK!bH%uO7vhFs&eU=Y;#ftHJw923 zQ<_6R#6c7hyIvYqauxb%tSz#D$A**xj?4E{o2x*JCwcG0!47Xy-&9j%t;~;GZ*VVT zekEbE7gppvv`&wCFd0auaeBLvfh04KY}9dNAQ@%ARK=WUSf21E2YaW#$A0QX+Ueqg z=k!;gkfweM*~ar7uZ4iaSRr9y&}v=AcHvHcA0g^kWx`q-XG0k;TdFzLAHb?+>i{I@ zhPI*wPIbD{8;lR8)bIXQ`gI~G@$Zj2wk7+vR zgSr*TG%%cGzWOZ0u>!I_v2{%if?ctMD0eH)b?;zb{i{Wmht7uK^IJ`j!JSxQVfXHE z&zWA;9|A(xFB$KW++ipnUSNY1D0uZFAZ;54W0vNFH;^;5L-l85Uz$++l;J0Qi@TE4 zKQ;XYb`_X!yW9uow{{nStL@sY_+pg$2~zuGrl9^#T@XTS6aWWcT$9>h>2JS5YnXsA z%C9oYe@DXGoFb>HBgLtncIz_d+HN#NaS>a9K~zTZ!lWg&rx`-;L~OP9!oUOEO1ijU zdhg1bD`n_5(N z4vccN($t5tErXuR(axqHh8xDoetP=#C_o(V3jPgWuZqz?rggWTbLfTrft2B+XZ03k zjRtE<2aIR;6OYHX20+gg+x_&&v~L^_J)t=I zp_U9~Gq}!PTK_04xSn3WgWupd(4_N7)D8J9h~f-&+5v7pc;%s~ze58sZK5y^XFQGW zmGe_ykDRAE7ljy@QbO+iew)P zDus*lVORavh5oMQ&Y;bAPAE3}hG&Gl7YdN?-#2nHjdum`SdnC#rc-?mi53olokEDP z7&`CZT|JAmf+xfUPp(@WmW4Vw)pLn3wGcv=B$Fp6_7l2VVc=Kp*WYogxaZ*w{;Tqm z`!D3FQ_ay;gV9kla*j~){)j@z=7e<&#vn516{OnrEqq52FGC`l(WHJey0yhfYS+Pk z`xcF{wjIFev3TkbK6JdDfzSsojOkUzI+}64%E;K%!=R@rh=_ROLUQ&M`BD5aIy7db z!3%zlc81a-K^Thgqo@NyGn_~|5ZEPnTPt;b0W#N^fAJIIlL9#L6Qc>czmm(mL{Q7)n4Bo__VvlTQP7L&)Uq>DfFN$ih@&a`WcKn5IpS~B+Z2bpVnX|TdL9u^_!RX+ls6{Uj}v}>P-W1Y<} zbRY#@^-f}`6PqLl6|#H8+-ctEq#j|Jy#)1tT4*B0W$2RPm;K;{$c9}ble#f8&I`Lr z7%0#MGUK_qu%#ztPx?zp+^K6Jl4w^;M>3G8v)FN@Rv;|X0`zRI^SRw{Ou( z7<>_!=nOQRjKHe@2q&x~#GSB?fU`yAaj4T6!ApJ&lbpI91eOw0ufu2R4KOrB?SqJ( z%08k2l$5P73#T|Vaf8ZsFj-}1ZycBl?CnX?(pd6)94NDgw-lsQfWQz?jD_hRUm%dT zinnLOayY@UxaSqtjTTfLGJ5r0D4#!?aVSmlv{!kCHmi`bt1!GVSzf;&yWR(O$?ky( zB1{`9OnnmWspNctl$v_*0PNkDqxn%((*HfK-wv+ZGOUah+giTSs=O$lsBJ*R209N? znhqX8Ey(wp%D^U4U61y$J(41@-o7@7!4jKNsgB6cTnUqwlb$Ck_J zycdsX9`8ZQJ`exWYcrTt4r3^qL z5@A58#$>CXhU*GENvqJu2w^xzFHZ7U&^q0~*%Jaz^;gIX$Ez;S&si@-`<(tYoUl)+ z7K+A-u7vUnmk1grmv@X7LBIG7Df>&zwSSaq-QzoNAGI^Bzq zRzBlrq!yUelKG_Blf*&|deszE|7535>SrB z4TV-wW=L5;jryukRmkg#wDNf%Ww-A`p`E7q5ppgUIzu>e{`& z8{J7FqB$|NI^gkH+8ga}JP%5~PD<_- z51Kk^U?7&}p-V#6Ce-80@ZiI?>|)9&f#w~C1Ru&?&oIY=rQ2{ds`^`4;COMvF;Ri@ z|G*iK6*O=|5s#NQ&E25v-w^v92a zAEB(2Ot_xtwG_IT^ThB{gHI?wiWV(+p110^l;#_QeR2ponV4ZMwgPv!Do^8$a z2qjqu4?riqe0m>3+J=4{Pa`R-E}d?iXF1oT+i5Kw3DeD4V^38(_F4CWR^CwvPN$_` zwOWJKBL5G^w?^J>rzF50qU_~E(E~=xkcc=&!`%b7wUl*IUh2mCZJz&d^?{%+Ow${Uyw0 zv*@RAb!rxU6E0TGqKm;n$60hR?%)S>(FJoDR71{PQ0F*jLFw@2>N*NYW;V#Y*)L95 zJCq!&xE6x;x?|Gt6Mj8)DJzn!%kic##D&%$J6I6gDl3goQqnyRq2ccw zFAKhhqORO9C~o!*96xzhC#q5%WoFk}fe8WHj!%ts5`!DDvtmMSi=DL-LvOLOX7ai* zbSgpdjZ=Fc0z$>-EujigsXwDX!sYVY;p5ak0CSE{7v^tK09!1HiMOHL6(g6J!(II#Regl+I&k6Bb+wGy7Ig*_3NckoK&c6eh&14;61ysR0`(g zTxVLs?d;4r12wEVLh%zKPFHYUpHQ;g2Y1Y1;f{f?B(A>VmLRFQ#EcDuHK(Gmpqi~^ z5XaJ}=M*{w_zg+eS^h<64XK&j{G8AUZjkt&?KgxpiG-i)7k(C?}Bx zaA@dFni)KibB)%Ianz5Q1J(~ps@5f)38)@;KazBWOLdkuw16GsrMuVd#I1R)1Oqjq zaBmI!X|&>9KV)NxxlOeQ%A>f9I zX&=9wyG!b^a1}@Ez+0(9no+~W8}2tbcW<~qK$V3yndjZCY?UC;e&uZ*=uDxdf=5ET zQ4JHLlazNK-Hp1we`-wNxn1a+e*xJ7RRCI5gI@yD`m+V?`zq8Qkp_i|bWfP36ye8cqIcMRld`Mb>%iaNe=uAWJqg^`~emLrruFPHEO~OttRL(H!ky#DF z?4fTfR(>uq-rAnbFWJ?e%IA0G2l0WtDR8G>F(9#raMnnLqrYhMCpdQmp@N6Au=3Ff zEx9=66r#FwLlEL7g@?x@!f!Ux?4$mLM_tD>VSty}|Ad09L9M#h;-m}IEYlZ=FxzFkpZMCc~Q?pD;) z++rwcV4yq*ad)9SmOxYUg`J3Mg}A~ggHu2gSl`8xlMv<2W#q|P%0j4FO5*)%^n!By zD3@G`lSepTl(M+ z+hx}Vn6F&odB$4EC7-toZ*(CelQI_JA{ueJa~OA!36QRH&=@iqhHb}zh0q;uefF&D zk=3k{hiaM2>|(aTlwF23P~;c0mkjEbX2NKRJh|iu|>e26m!>-|kM%p(e99SQc64)?~GWiL%hs zj)&}GnaL$ktdM75`)-6RNI5QK?d%-IDON zGaGXUW@^1Dkh$^iK>gQbX7%U5tnh?%>ew5hat2SLK@M|)!2ccgLt3r#z%W_I@jHY6 zLDF_@IZHARIiL4C{m!ngggo*^SG)EUm;v6%!JOTHY`ncaG4(L!>~*dmlzOo8Fr0An zb3=>ZepKGL`;VD>0j(Ct{gPI(h{?gc&Ts<5jzSPFKgk4U)Zx_<rU{8Kh5&c zDcB98+^!1)9JR9qaO6k?W}LuQUTA6jhkRX>8TuEW-G-HtQ+34ZXDAV2x~AV0xlh-d}cT#~xnts`Wd zjVp!`LcWfh34{*k$Ijy!t<|vM6)VCu##LTs*Ch3P7p^@%j0o|r7UM|DMy-wmGS=iG z%X+EAPh{DhKrbtHu2OPnz%|Z{6^>s| z%peae<4x$n2C#27hfd=e*nB-YWm(6yLg!GMWqk^NeeF1=OCKEv4t$NzGwO z^DA`W$RH_GA_rtM8Qnod{iNAgR;RSCs$$?yx-lNLQCd1fbJ531C@#!WuD9*bd(A1z z&kfmBKNMK^tho$B-Q+S{cJ>PE>tl$-!}C0NG516ape$s>3h;Lw{@#SY36I!4o3g1M z%-|6UORP}ym`!<;ynjuOOneW5RvT+)%6!v>>t2WKLzAU`p+AzZk>|isQW*S})xoZ@ zl3^x22OVm2Q2c&V9&^E)@>LI63e&{#97$w`D*=WMoWvHlt#LO$tyN7DnEG%-04;9$ zvoZazrBMCinkvibB7gBFU4qhg&eso5<4uM*U%vAf;EQb%ua{7~`GHm*tfzGdYv!zP zeCOC*R%+?iQhWea0GTv8t0*yZBt-c4%fD`3ddqb6a z!eZl(PWaEp5eOnJkPIf8qfQP7WpW^y_c zf`$6}&NeCST-)leKZ@OuMnShM(^9?@&VM~p&~KLp!l$j5RHh_Dn%Q$m6TMJ47~YS8wPPa8q4qYE#64G?P=#thZ4Fse)FCTNRoa# z#53N)qY8{6xZ_TVNXw6-9{=@}fc8U5`OKjt)2@+PzCVI<{IurU=Fm^=iln~y_u4fU z6`p{pjD4)M{P7~-aE)>Konv3KYaHw3m%&MfG{QA?v}-c-smW+Y8bS5H&_!W$?ow}Y z3#NnE3ht_t%aJ_&^K|54ne`c=&Ag%lFbn%sjHB#oG4yLBVYW|} zT9)DV5@9^^X!}{b=kiy^AuKnnc|N=C#*iwvNO_cN2a`G%;gu8}ZQ<$_Myk?2(1}W= z;Dgzfed@%@EV(v*Rj$1-vTc5q)uGY3e*qyzBB;j5$ShEUoe3O4V++DN;#hJ((d@!f z5_*nBLqEdhF=_D=St^W`wusd@9ZL>y=Gd7Ffu*}TJIo-n(|n9f34fQY0mz-NBDx^1aXFaG(l4Jd=cN-(^LeUPVr3}k zBOctF@T@a1?713Y^Vx|LU`-BTeyEdw4!ogaSEl8>5-bC8@te%xYI76p4P_jxOgX5^ z&LD85HoqV9;ZexX2tdD{3enUVn^{1Lj-C^9p!smRu0fO)9fK8Fy^vfgoqA?`pjDP6 zQs(TqFvw&>Qh#4G(bu!_${(R@py{-{iL_!CK$H_)m>54OIns7@eXsxG~za@uHO?j=A8GGwV!* zpTiFhZlJ*A;KrHq_3CHw+f{!iKDri@w%&tRTi;vORx zWw67@MHy}yGACSXafEwgc+@~vWs+ExQ75deb4l2)kxcF)%c>05FS=2EK8vBzZCIJ{ z;qVRoosQL+mtu8h4At{0{7u}=dYY2{bIk)BIeC6&%~xS@(y~H>X^||^V9~;p<(XVY zmu9elt<;C>GF;@AMHxK3r;|jxCM>H7!)n5>nsBQoysD8?4%DKjD1o6L{Yhhn3ssJ2 zRnYm1(T|kh!~>`RsI4TZ{wx@QTuV1>zmNkNEWNOD<}y<|Vq-4*$>XS9Bkg}RrDfO1x<+x; z1(eaPSv&xn*(k!A$mS5%L^cYoi9P?9)x-l-wPz#Kn4hzjOpN`G)$;MGS}U+(73=f= zk5nu&Dps)sY^qp&+SITFPCqDqC}D3?I}Pq|r}JZvOdOAnA(vW>b37J17U@lgv^U{$ z;1lR=5c)3m5k}G*$+j5pjy%!+>W@x%=t-2sj;`(L<$nV-v|X@U4S9!=RA(BkmMs~_ zd_*(~u=<1SSagsuam8;j_5S~i#ZD)y0tbCL<*i*~$8$eah{#yQu zTv6pKSvXPzl*FGO&op_D+{JUlurd@?N1&Wg+l?%e4fnM_B@%fp?z~cavHX7 zUk*Xhp3>o&2Mf39aEvD@gVj##pX+cn0gJSMoZ*C3wh?ilNJp%x$r9~!ghCpWv5GNg zt}`R!8h5TU3x#huL?b=y)Gr~^g{VI? z$@JKl_ss_qYsv>UEnC4H>|VC5;g%>ZJe8Eff?R&|v~IDCKE0W-A*AbEJ8lkPWqSyP zzPVN$f^C%tStGB|lIqq=Z7ICcha_RP8+7hIhs3l4oqZX7+w)_;Fd#^5%eAIQFM@#- z49z3VO#9^MAyFDq8A2$e3UvZi={uzrkw<7rr43DZ^cFF}Z0GbYjvv6`Yl2p+g|&T6;E1v%y@D)6;gG z_>)OtdkO;p3WN5PnG{kw@VZktDFlWmlR|_^$*d4Z%7pBVk4yGI+v;iA6Wvd}k9f3D zGj5aifT>9Re=)BG9HDH?dHxp(;c?2eO!CKY(bLZyeHXSN{}<_@I>p+0R3%>Xsfz^) zti@tztqN~(m7i6A4{d=S&>DWOVgW(hy(|ZVg?kl7GNl%FDl!cx! z%6!)U9oF%fleYAUI9DU*Rd83sdMB#=!H^7Z#@|8cr~Uzd_uy{?z1lzEuY@(Acj50W zq)@@%#HBElS9g}o4-#4!Q&0;C3E<45m@BmdIuq0|?L zU+ZThIxKB0THil>nC-WjGGK_Qry^H&jR=if&RS}H_4D95(S@xcMd;ns4|RiN=IF${ zSgwy^A<}+g`T~dQ1xbA3PTD1#e?-1D+<~*LM~<+!$E@{l^eVo8E}lYY&itoAc2i~# zAz7Xex#e_o?TSS_(ebCy`h?2J@7}nzi0ZTV()G`;pNlkcv`CWvJFegSv24QQQH<(| za0_>vkp5n4eMOV+)#SVXLdo|dbzE->Q}5H%Z$j_$m&m+U6_az}mU2!P&zA}@-GlS0 z&M%{?lb3el?-^9_m8$N6RKYc~$Hu#&Fp4vAH`i8%>?E`$4r@y{B9D@=ehy1Zg%ob_ zwMx3U*VnJyxRxs}e|%M7V>ha0_9rR!t%X=Qlxn#6PfPocu7-X_)4zd-dH(pkKjHM} z)k8n4$>;t;$v0O-sSeVF@rp{b+{*RNlUvpQ0fV9{Qy82&3K)iCaW9mzW`>-5G6me@PyRSEbsbd1zpyWDI za=K8W!9+d2M#Yys7%cFBD-kd&TS=x-TDgpQH%cobJCs(6J+8Eps)s_Ql@~GsaF5^G zU0^AdLG8;J@oy-t6ztCu8}%`+vvNNn{}i2-Ov@3aThve~DdYY@LuX~fg*8HSRvsrM z7M9u2u!BL3ge>E}3-MKFrLljW{R$b0aTn>2DX~O6p&rYLiAay-{xW$t(vS359uVm# zR2nd|Uq;9ESe_Z>MKbzHq%njiFPn3Xr*1&_)(Wa%gjEOiLOMf-f>X4hN=gD>M1(;%<&<&w5*_laj}kxc5%9O)3>(d12Wjx? z7f~Y6mthCcGw;=zwUW`ft_UROXtEG-axStR^6=G^hrtpAD0hgW90f!dRPi^ zKLVj&)`Uw!eMX^z`4^tM667RQ=!ip`pGj5H6;)w_>*aFoiBo#4_T9|8PhuBEIt{S@ zX1ot!qQ(+~zxe$732V$bub*HPHs{@JU%3f64U%Zzd=n^z?{u1tozBJ+l0PHrc!Df! zop@*>XoY2qYLjAYy}A~Y=;i8TNLju?mCC|&`5@d@gEtnBOaR!LgQUs_QISV3fdz4c z16wnWDR0*N9In;j#H$nxEhwD*=ql|4@1G2vr(rz1QC*&(?$m{Jp7t7Y9z-;Mtj^Og zj)$I599I`V01;d$P`3;dQMK(hXXV_z560Gxp4DVDDZh7ozL$)F3}c+2ROj z==v^o{aLf?KfqPn`sJXR=QZqZyS5Xq>*{~Y5VgOD33Wm@;iH$a?AqIDec z!8+t0+f;8RkgxC3&s+JiXI_a9Rv|O>x547oZ&lCR^z(XrlxH^Yb<5AL3A<{{MICJf zB+y}oT1D#Z0t*vs%#cB#!wmI`7zAN$jd?Q&beN%b5k<(?KMn`b`U!se>;J@0unO5w zUc3~Pyhg^2C0zU@CD7uKzlAT`dvdLN>?e4{2wtQCdJ^)t$Z;UibONtddNK7Bz4R(N z`9Ag&jcn!`_))048fECWD~Wd+5V?tZ6iVeKNpDwJ zw+{wyt|2WB^abEGN0?bJIfiFJ$6FK54GH&#JvMb=<_8OMUJXTNy%zXOvQA+q&nPYH zO!VT2%21|=Xspge4^AdwNr#FWihEHDZpmjRz7C%>^dzYBPHY+Qjxj{qNHUc^3WI)Z zqvX6198@=Kjx0OzNfLhlt}lwn0sjg%Sf4(Cej%y z*lG4h%V2UdxMteygIuMu>7mv}j!GS=^muBi%Y4P@p{ylKM$f6vJG5z!rR z?*Rqt`YL^u-im4}QC({;-yTys^fKyXUvNB=N5eI?MDJv;xaBjYWr$7K5KF2@JSBsP zu?K;`HUs4d!J0-k5SxIKcSq(zk5?~H6CONZP54Au6T10C2&oE=LyF;L`=6Fxk}4mL zdeFI#H|8i(17e}@u0YRZx8$UBoK%H=TWZ049L+5lAvK}d*UwHaQ%?OMb)uJbVmps? zUWYu`qM`waWk%ON|NK954((oQ9RDo+0e5nF0aKG4_rb0Gq zaB!EgI78@d*?gKsOzBjhv1b4pKWJPyeJqGGX=2|X+PLsON0ZD_3E~7lhpd?A!NiJt zQI*yYZPq@$dvv{$(z6kjMY{7Ed-KUGy0ju6)nI>zPHpGbzO6Hu-nyx|tD zM;v3{^m;ZSG-)(!IeR1pC6#B7P>+`|3JSd8TbRW1M+`=vQ4k)x7P@llFz^@ydO=u) znGYr*WGGU{NLHDjOW-*mU0e+v3Kg@T4<#+8fXM7r=$s{`IKXTt9jP0oi-mj18`|u2 z$UyZG4QFX6*TH?R&g4u6v818b!o~ptXW<*fg8CEr!e?1@BW?joe$qkAihX~AIWG8aL(a5r~hf7r26gg922OjE~ zMaZ!qEfhj>IrbwvmF(WMGCA`y5QNv}uEyti^&4QK2qf({;w$4pl?{u>PcsbF=AJ=1 zA`LLCSU?)g_ZDf;H0(lMU@Pn&JNohB)dc!CHOY?tNtGHxE7$oNwDyl4|9DZx1=m8P zmI9?NKk7eTRLz-E-chy+J;6!r|8#(vC}Zg=CNLZ6&KIRIAK}}6LR}OIl=(&CUL@i0 z;0`#9x7pT$3LH1b(VmUAo{vX6a< z^b*vd&+Kg9(lwO7M~ zfllw9mic}|DW{kBD7pvvEe!Txv2ErmW^!YKH?3O=71Q-#BpW<~+?Kw##q<@FW1KYQ zN6)~+M6k@f9L6{n6`m%9%Zx|Hb2`?u)gBxJUj&u0TV+{A1nWN{WRC#Zq_;AY%#=L0 zuQHI$xV;r`u{ z_`lmXyf_^&JemO`uVATNYWjOnbh3I)NZWdt53;Y4uHKD?n?ZgF;ynmyGXlu8eC!l> zDW}*}OvhR0q#PddsoesAR zt@LL~la$%WQ{r+$otlKjM{wT2;Bz%$4W<172{eliVV^&bOcs=8&lDa67MUONZVq;g zgJNj6#34mPp>8c>`JIgOCUw-T#iR9bC2HI|;MYCeX4_tXCmGG!M~y2WLf{&(sv!hf z4bc=L-^t(vgrQmoEj4-=sV7Ky00}O&U*WFNG2f6nPdttIbIKqF!3hg~5Dh6smn}l^ zK&AT^VIJsF>RMAmUuyL_3gsp$CpZEzPKq9N5++MeTHP%j302DbHif1l04Jp+nrKX} z8s{m3eLIt-a6Uk1GH!Qcfh6oq&{ufYN6D9>IyJ{kE#J4%DjpRvxL|Q1u;aN#g*d)(ahzMGJbBMxh*^ zvLtLCLWDM+b!?TUiIKEpo*@nz18YD<@Nie$)C9Cz<_#aBt7lWqQIEo8RDp=sJsEO` zF+-0~TAF4$bx3|Ki z>3o!L$#ODmQcZD#CKf>0619)vozm5x$7vcgw}Mi4fIt&(lyf&i#K8w70;|K4)%}eJ z=QUxOhipYpwOz(HBAovd!WpfZ1&jd#*~!auT9eq5o2~+b1!&-(?~FsSrd9kJ(O?6r z#*V2IBLrg3yb1;m?W)wmoU{TS;ueVrF@ihz90-#%k^B;ojA0pj6Yg3n8+qNA?8Ndb zMl_VAP>x*Lk;|;TTxxvif{1hJwdXe6c9>LltUamWi1pdl&;tX6wL|bqc2{J+ZSaAT zH7FQ40)6dgL;x@$tS!y=3R`pXK}Y!SVjo8XwI< zN+Xv_PU19pN`T2Mv{sIma4>nyYUNRaPr^x#x{8J82%t9aOpdzo7M`1!xdQ(A;JI{oTIA5~s*BE7 zpM}EW59I1tlBS+PP59}tL;|Nzvs3Sj&epWMg|T$IJM$u-jrLAG1`n|}&PImsJVReoc9zIU)_;eVDe0IPG?TpUF1od58dY-t!+I`LwH~0;)b3G%`N7wMVlaL+o9krq4 z%$0z!TvNlRel2}O2sR&5LZBV=3h;P2CSXUhQ}7b87!I&EL4XE!@BALk&38_ZaVtapY_a%4j?o2)TGBlBn-#&!<5D~FW$ zOdx@RJ_~~CE(Mp2?_;`Bh+OaRtYbhj*WVllY_KeTfDEU;6c$vmdZ=S|Pv@Y<}?qxU8`*F5!%KAr=V=&&W|25Z2sxZu&XAXIRoNXTU-WE~+x zOtzH_s)DqcMk%l5KyYRTo+_~VCwn(m`ZuB@XPqfv&PV1JHbLFvsNK_=Of7}_N9~-; zspQNyAZ^GdeINhNoy1a>G+onXjXYsPhXQzAM@=X9S?i1WajB2}{;J!NYSS`e1Ie(0 z2N;XM+PmKGZtORduP=o0{#r>^VaW`T^-^uQDDDN1qMm6rJTZPM% zN>26Z5K!C&=pM$ooF2UWI78_uB}r9p@W2~WN~DmUj7Y~euYyem ziDvLpnZ-(w8=d=^eGM_$Th4M? zm{!q-cA9m?#cSP`%z(E(i@=4A>syOBq}!5ARo1bmGGU$vI_D$|o4|ENj^SC2^4Vmj zzqPa!8kGyPDK}XDuypnS$pzU?C1#UBClTm8?7TV;vLr0hfDwsI57isd8QK zb-~4qU22zK9Q&!pi7|}@{mePPD0#@3FCyZBbC&!?cyuj^u7laYTM}*oFYa;^A^c)~KZF?ypgpX)kfHS0t^70Tl#7NG= z82WfBeSWK*x=0!lBuqZ2A`R#cD;8gN$IqPLGD6p&%OSnytRY@TCV)fb;)XR3zGJQ^ zc*ndj^I5niR4gb< z%G!#8-vNgS0-YP;WNz|${eAF_#mw3)}$9#W03~sZSt0 z5a@L6VQ9diy&Lx6B&0T-gV#3OL^71^u=Xr@JI-9YC8#FO~_eGv)FnlEiWm z%jtH|1z+1=GrfdZuO$}C%CpKLy}`9`%yd{m9vIM%jWrQG`;Z8B5I2HuAVgVkEW-W0 zw(r9n&#l~;6^fD_cC~;A+8EZWr19pqM9k+^1LP}HYDwK}I+(i?LW65P3vnS^lod~1 zAg-b1Q=jR_6sC%COeQIuGVd-w8u3Vzi=zHVMjhqvCYDEVjmaO&BbL9pru^L)&)*wj z`P-3A&fEj0Zr?JJ7EAI*DEyO1+d3R6!&XCt9)QIwG-3Wwl-A7}*RjlBBd)QfQzOMj z);JJ}6}-l0QVV0fGclM+3@$gs$T*?14GG{UotnJGIB;JZCiTI|;Lj|np6*4a2lDx9 zAHRiye!IK%+tZ`p-d_Fo_33x%QvEJlrr-X4{rYJ?ZESdz*VwXt*4SG8R%2`P+l;N< zZ#T9@{vu<8Vpe0z`8i|j@H>nRZ=M)im)~VQS^((c94INu`TzP8{1R-rx@G8{=vpJ;13wv z3V(&M9pWEiY=Ivb+oArU#y02=8e7RP8C%&e8{3dSWNgF!u(6H!BgVGUUukTk{;08y z`D4a5?vESWVg6ypcDR4Iu^r(bVQfeGM;hCNKVfXE{8h%b+FxyKNBKt?+tL2f#&(Q< zjIkZ-A8TxD{58h5)?aIE$N9$@+wuPK#`aYIsm6AKe}b`{=$~k8PxGH3$^Oa4_Duho#&(K-im^S*f0nVG>Yr+Cr}?KD+q3;=8{6Obe`9Q?`==Y* zbNuHR+Zp~D#&)KErm>ynpJi;%^`C2O6~AI^lm4W!t@GCz+u8ov#&(W>j|bnbm-v?$+w=YB8{4J+rN&nEtHySjf0?me?q6lVc=baX&Cs8glQP~R>Cw4{3gOQ416158U}td zVHyU03t<`tek)-b27Vi18U}tlVHyU02VoipekWlX27VV|8V2T6s7S-W?49qpqA`Js$+081_Ffi_uT16TL{vcr*2L2FX8V3F_VHyU;8ktq3 zVc?GvreWYa2-7g|KN6;4;ExfeVc>rvOvAt*Crrb@yv0zYVc{t96l2ELy#4Fi9bFbxBLjW7)Zf1NN5 z1OF>w8V3FbVHyVhCSe)|{uW^x2L3i-8V3FjVHyU0fG`aM{~KW%2Hs7WhJha>OvAtr z5vF0_?-HhA;D0Af!@%DoOvAw6Crrb@KOjuQz&|8R!@xfxOvAuGCQQS?KOs!Rz&|BS z!@v&{reWa!AWXx+KO;=Tz&|HU!@$2FOvAvB5T;?^UlOKa;9n7@Vc=gAreWa!BuvA= zzadP+!2d;TR2A)TwEc*EH>x|4qhX8BPN7x zJXGuGGVyM#wK8P7>H`656bcjp?9QahSbjPP)(1GfHh1gO*2HmE2B6#*emcIpqO`D( z=5@4~w4h*vskNq-j6;OY^-)j?2@6jG@mAS3JV-1S0aHpGSVjX+2Q;Pum$_QoU27|x6fluq$ zNd{lt1)tWHD-Hfr8u+x1bsKzj7kpZezzS1S$`KJqZfl}6qUi9AO(_dLQ$F(KCQ2iU z4j*euS@46?V9evW3e!J`D$!Y25&-%pCLSSth2$tTTyOK^_#2*SPseC zDewB{0S}er?Qlz$dFdhJrM7Pw`##NaMCX-pOp?x}p84odF{EA+;=8yw#I>7ITVB-5 zIkj(x1r#f*NvHN5IG=zPfzlKVEro~|2II&X1OvL1S`j}>$*snC0^@n+<)bVBcg zj5i~Xr4xE1-%kO7^2@|xk7wkPY%;<*YzfpXGhY{8av0ASB$MmFup^s7MwMVP9`c9| z6Y>()CJh*)*CfbXGzB|wg38gT7Bz)DK!Wo*9jEia32Mlw8a{4%id;5?#eK4fxHh0N*!rs1Ru|4xu zaaW|IVFuxMOeEXgG!!a)G6qQF0>m2+Q%YvLPY1cPJ`%@34>01 z1Dz1j`K{CFXi4rv%*rTsreE?DLx}-8Qwgc1y@5`M==>@%KxZl;I_(W~LPY0Rh>=q( z?war5oSm1Pz7<6+vdgv3jd+~0s{>$gjL*j9aadhN7m|rs-GKJPYDHi^$h!u#A66>@ z^U*-p+%3rJM)G7v1KJO(8_74&55VdMF%9%5#%dWujDy#2VSNUV4`E#{WTX;jr4qN= z)c}rd6C8S`tB1ml)pt{ga;87Vu}fj~g86};@RdmW%?12~n?%}&_6|EG(Zi1wbY&ws zb=R5-Bt~yi5hP7c-L-xKiP4)>1WA)qcd3>6Ou9OVe6DW8DbwAVblFQ+d$IQYfLAuH zJ()6p~&Szx=;$4{=6-UR|MmGHD->N9EW;{UeLTVQLp$hfsgEIeFM zNDFUvCJUrZI|UPoU{i`{Bu&obokr5++=!%m;YdQ~DCZhU=qyP#BI#K;J5A0FNK$g|pM-+@K_Mo)^i|g(C@_=kcV;xxtfV3umXvxj{*ja}>$o zPOTz)@@%5jVbmS1#4(48k)<4CUcf$2MCpe`lv0kOACzCL_QxdX39o=>tR6ZIQFr+B zO%PHU6Q^Tn{1FQbK2bQRJbf^fh|EJwx*i!eD0PpDevbnkKhU^_fcQJYv1QU%{f-JX z(%+n~J50V@>lKi7Z%2NYGk0c!gJaul2eJGd7I-m8y(jl|!Bi&q*g7X)>i=RHz>r=to=pUtv*M^pzt7S+LbqpaQucjwASY_s4Y#dhQhj2s#@ zP6s_LvEmVz(!s=%Di=w)4qyqTk&B6&jG7-e-E^!J#vQrD;*Q*+xFZ)6H`y^iZn}x+ zVW?&~5{tVDE8?(XW zm~>p<9MfSgXN7L}8H1}AwP<4uHh7rCoXQ26^C2sOe?qao6f1OngDVzUP9WotvCu}1 zU91bPbrRbpeoMpCwVy@zhtsvnr67-i2hZ5vFRndP56Kt3Ke=Ok`=;~;%PBCyy$W(J%!5r|=l681_tAm_P+*N6`~W7O&HM)3@^8kPl^sHbCaAj!>S=;{ zo1i|0z}JMu^=$t9j*tl*l2Kf9k_4}3f zDSg4#F>U={foCthj+v}8j9IZ>pakx>yMmRdIe0!)EraHZL+-{w3(%2b3?59N*l_JF zxCiAI)?>$N2d{5~?84%(^sM*6SLgJOg(05xF7d;8&qMRAs7jIVB*Lyi?u7 z9<*y<$)%9t8PMd?v9G##>Y-3-K|@0v?B|X%aTx-50$+}i4$O=77{3#t|vf*hN{|wBIi7r{QT{`w13LhNG zlOo_`=O`32?o2r^phaEt)B?;}P#s0#z5vVkeS;raV9;$w;m2|mt^u5Ub&QhaWcx}s z*FE`3L@I--IL|nS3d{O|SYA4i7gG-$%z{}BaO{1LbGp=-uK)yqh**~7Nj#nh_a6_7 z#l*8vAIiek^ZBeFhGC!9C^2d`LvxYUGyZ#s+6eQyt5G|gTFrfm3(*466prCPn^c0OGf*J=^v5l z(+|-Une{2)^XIo+*MnUjT(y{zh9Al-5pUPBO;cuFEq>V3VOvs>Y5aPpwu@h%`l$dl zeoLor7C$4uRGb>W{;7A1pO1svj8vto@$@rOcc?F}UC~#iZRp!N^#%F{IDcyN4JYIU z6Xr+p^HQY^Nin-hy{6Lo5!k$MAeEx(9uK5bw&3vtso>OaKymVPinX6W`^%F~sU(or`K0v?R^UdtsT`<1gmKh`#{T`7 z{l_u;f6zYtYe=oPu$n4kFqWYpkqC?x?G+jv)R}P^D~1G-Gov-mKZ!Xr1>^iPI?qoG zvo1-DDTLJSj)i9uq5Hqb+?ht`j`2xE1``S0e@gfH3HF!-nMf?{Fn3JDILC9xB#d)B zcTB-JFPJ+F{3Lgflp$W6l@L#%b38G$jLNiWhWysq zfGZORoWEXyQLJqMoHSnvFy}7E-LOxt!xP@((S+N9{)7_@$o~_8tA1ew5?hC(QxNRD z5<~qoCX-%=<7ynXU?g-_qO+Weu5(v%?%6WQgD0n3I^lsQ0r8{-o{gywJPC*=Eoj{A zb5BLS--CQJPivHnU=`>(JEOproEHt8>a9D=z>GK!GcE%&<6@P#7nsZ3D;);fKX-rk zoy&+Xs(uMDoAWw|FFZ83wxjjM?2gx{K<8fRI*Uy z7Wa&1+eeHyM;3WBN7is=WF{)|+@wQmgRXfVVN~;-o9I$cNr%=3UGqGeBa84QlZGyq zy`hWN23_+!!l>puH_@e@k`Ap6y5@N_M;74=UAVi?nxSUX?y@ZUL(1?_L|E_NC-p{8 zMNq+KPckLd1{y_Ul}5HE@uI=lcbhBCLP-r{y8r9|f-O3G!SUj4NJqzuSjRErQgnyX z?i{Hs%1;Q5K{P$HRHX4^!J?6)$~s-Lz+i}u>IKb5F<{-{(NcuuvpM}=ne-iNCDOm0 zbj6}ymvIasEka1r)8vv~V|^ps*Lpv~%D&crN|Z8QeF@_H0Nk6_oni}4vg)$-Y_s6Q z>SjD?ZT4iD8&6t|XTW_IWS)f{90Ge5Fa1oTlk{H7(*rn_B_~{h|AGr-P#@M)9&53z z4>F(FU-%USjP5UVSh7gbFf``iBF5>pdSYqAy>qp7Cioa=t8qz-J8|0J!n~Rt$-~^-V%$MAZVB-^f^G>U zFPoAtdfFh*yIuIFjGeW9T+a$GP!KPT}bp2)|y}oBW=xP@qj4{p|dTAf9pEi zBMw~}awvyitL$iYc64+EtBKv2>&&$u@yuN3CBYGp@fUY?I@!AZTe36``z0;4AGNS~NIT)4 zs@7>)uK2CiYWler&#rz5bx2R==ss=m9FWLsZR{+mufNd-D~GRcf+r7ebM4DnLA92e zV?P>%o=(hDU6bZGlI(TjARQx58c`r_ZC)xp$M{=_u_ zGv>iuTgNq#1m+MA5}0Ed9Eek1G)dhH8^TZ)dnJb(x!5Z?ypT4nH*1j&e^__b>H9fo znq143Qn{8R6i(bP6<18$$@Xjea98iPf!_G^xf3*f6!EZr@~S3Nhf|}u&Z%*Tt|r&4Icrms5N9K50+C~OHR;7^n3{w*KT#8i9K@?hFN~o9(Og%N zx+#Wf-0P&8$rw9H`sHV;rE~ctD^o9&>dzb5hr&%&sl%nld3$>pz&rWGx^V3<>ya2-AGuDG)Ek5$wy?fPX1;Ixj{)Pbqf)*sZ`VJDjYVX$!SO(}n zqF%%F`ps`1FkWa=UUBdDKV!f#f*`?whl%gQ_ZaX9^$k;*Ab3sb-;M8Tf^QuhG~m$$ zci-_U10G9o{jOULxR&5md&7i|CwTvse&c%r!M#^K+kj6ac){y_X26rg_qSmdPA2$3 z*U`rJ6oL&_oGPI8TI2g{0bd(}rxU#6m09C^2Eli}^PL7fOOP)JiL4O(#78eSzUv6S zHj4Qif@fYlVtmgdxcAyH>;{6bAN!K=-Kb$h-wO!-%>++6CIq(< z969YYgM0}=>)x*z@KSjR98Nt0>HyUtCkUtrg;0p+D*|Np>zKCG|4WaLg34UPt za^t&=;NC|cG2oR1m%ldjoe^K~U8~tF!3Q1)%jjx?zm00|%LVxxVfJ51@Y`=Kny{}X zI6FIQz-tIvvmx@e1mCkafVt4j}W}#)vq_ccM!b&GrJA=F@k&dK4id;6NI7=1Kvq+?4B_L-bL`yN5b6wvxJR` z{xbw;BN_5pf*0KrQgt^$JV9-u`U1g^of+o$O9XGc>^sKyUV=w|@Nxs*N3gc}=LWo= zp!MiY2K*YqlfDu*v417_xh1bKzTYI+({q^tzfJHrdqd_tKydH(ziWJV{~z|=1z62n+%ly)Xl)nanZjU)!G| zwzjp_{;G&#tF_j*wXKS_+NxC%TWhN#QlF@ZR;@*w{J-C|);^DW?@R*n`+feO&!73s zJ$tXU_g;Igwby>1y^n(LH}GzP-+8pt#yt{x*I!uZHwj`L#K3P8{GXpW<$Ramfz*2M zCAjzI<1F$I2p+o4QNB;W^Bj0T!GFK@OBVSj1n>K<)8tPHzV4T=v(TRt{LA~Ca(+SZ zE7!V;{{X>5Kl&Go{3`+f{X+&GB>35v?KaR08Tt0l80ZuH+AUu*FeLb{yPbe#f(KIZ ztCBV?{a%89`|4L)+J1s(UG4NdK=7644O!?~f)5;+H*k>PPv3H>f$Iovd*w3>942_^ zXHMP?1aEoDq=iNVZ@>L^12+@=t$H5+~6q z1b=qddo6S)!1c<)=@RlY*A(p{cqpx`k0$u~w6Z=1pxnLjRSZAs_xZtM9n(cj0$y}Z z^Xg!6JP%CdfyoSrhhQM}zeZZF>!oRr%>$f-T1Y&|=sbm_alGFbRf*~ef$yTJCJ7yD^gG$dAL-WFy#(Vqh#SyFxf0auT1;Ekw*g@!EjSLFtK~z}hfekCLw;4qhrb zAa0c0WuUlG@^u5njgq?!6gNt~VW7BCa*u)HM#+B|C~lN|(?D^fbH%fkDptw=;p9YE>B|kM#+$i~(f#OEV&kYneO8(10aiioH28tUc|81bSQSyL+ z;zr3Y4HP#@er2GzQSv_qiW?;d4HP#@4jCwJlwe&)j6vKeS!JNOQQ{jYZj=NDiW?=N zf#OC<$v|zLQBpBb+$gCUC~lPW7$|O(^cpB`l=K-WZj|&JC~lOjHc;Fs88A@X zC|P5mxKXm!Kyjm_W}vuHGH9Ttkqh#Dbaie6y zKyjmF(m-*eWSfEFM#)JAiW?;-8z^p+Jjy_Eqhz~*;zr311I3M!Qw$V0N=`LU+$h;; zptw|1)8zpBLC~lPOGEm$oInzLKqXgg1lmZnuO7ImW0mY4y#~3JXl#f_3D8Ypg*Tx6iQQSzGxiW?LH(~(0 z7yHlRhVcu4zZ&QfLyMcC*Be^g486(F;u?BEhU+||#PKBmLS%io{9o8Te}`_%-=W*` z7qsU8X(wXPOvO^KkW#NChu0-BZTLvCN;RQgNupj!00=5o!a@zC za208(DRaJ=zr~UX3v4xV6PU_*y^$VJ}vLDq4L;J32(a%Kk7ua zS$zChO`FDww|{BuDUKRKA%RsftOjFX7gg&Ek#~&+NUfohG zfP9?^N{yEINxWLC=7{&VM-3Z2)kduf+L8j)SRT)SD|^@~p|t~47T(pN%mw9S8tIHa z)2lh2Ql)!fH@+u-wU!;vdH+>fcGj?r^q>CMz-y^jg>avl*SUX;fO6}(U}9v)a3Iu9 zt6251M#`F>h9zrnGpNh3art)|W=tkOD>(N{af{p|4at7cpTo*5b9M0pP zfUteAJH~AN27vA5g~t$=Pb_U-c-Ze0|>fkUXv)d0qOz%4w^fqskV;f#tM2}@=yNr*pg*K))E58d15H+2J zJ)RIc?dMac?AFBt#0!Xk`$88W9w7EPgm{2hbO`aB?~C=wBYr*v;*qm-{Oozd@e7IE zsh3b2^q%x&6tl&frX+S~eyJY=1xX<^1H{ z`N{ji;oYDpM~I${+7;gh(ycp4A7%JzM5y1WZm?|#c0i2pCr?Bkt>3j+zhklJYApI( ztlwcQt%E0mSG0+c`F9ba7q4ms@kO9?Ju2p=et$o))k++opXtSYWM6l6w_Ca=J*afA z>6#z0E9aM`%jegT4p;pziOe`lN^voSe-&t>F&SB+$8WvL&^J3YJ$~zEqIaR8B*_rF zUf#HX)P#ZC1DyWz!`71_aNPkxd!$y1UkfVnACT19ajgdbjeNWUkNVLg2N+4) zY3lKBME`#PTu%Res()gk4-9WR_1~UO^l`-LUfVT4Vpq;DOP9}YxpcG_m=f=pALgfq zp9(E4yqU^*BOY!L2ITf{`0>-J!VlmzxIOUTOX2hHVt+7&>DWFrLh&vq%HW2hBC8k$&sx|8J>gX=inP!3o|J5u>%ZAs>R@|82n5LW=PUg48A%GW=PUo48DfJ&yv&( zN&1Sxd$ZIGN&1Vyb6GG$7A^*%r8hxpKUrOj`CP`lMDk%sGEfYD9)mBHV1^`XiovZc zm?6p9V(_&Lezv4$NKz{XUzeq3NHSOqp3j0AvTzxNxRpYTEWMS^mcCc|-Zk;%#Q!M~ z$1SdV=LO%`_xro!D~S6u!Aapwy=W?)CGKs+Ej$Wqc}wr3S8eOSUkLg-pyS(F{tIJ_ z@dm-(3dGW%(CaS}v+&<*fOw-I;^P_b7Wxw|^1e(-ieA zQYXACif-$d&=NvKPm6D62wu^pd&4yxr~Ckmh6pA?8J~DYrm9SZ{mZCupoyE{tpx#&z`K$Ll%6g%4t>f;2sShvKOhG7$E*S~^dX*~xb z_Lk@UUYv*`z{_Js0;?s{^~CelBgyb~Jv!Kts}EQbO}<1rVE4D*;LbFohrxw915#7b&UCetIv4 zi?b1N)~+%>=9J?fWVty$p39Iy@GrGaGuv$BSu;f&;z52ibLLA!sGlFWTkw!tFrxbl zpnLw|v+9U7xdY#Z{VXi_4xBO3+R-`z9I+0j;0)E6{fKVnzTFH4ut@9^nZ=R4&icIEuCbou-a zpYAf?tgY)Nboc(gn#6L6mqfp-Xh%q9xo(B^(Z;M{3giG%w ziA6U20=Kp?0X`!50n$7+BhK;Pg-Y6J%LmS+R@IP3AX?QVb};@^+S+T8%M!B&6^8h& zZwme!e73%YCssL(PpmtawNAx7ptb@0%9b)|BEbk%45U&0Br(|?~9yKkv={H#+ zG0*JP@ipHGdospHA7Q&0e-aTVC;j;2aQm>%aUE20oC6xB$e1k9C4C61-!Y6J;v=72FjIaO2FF?rj5o0!jtpsOQ0(C-StM-3Qhd~Q4=sRB6dSFdS`!bR5cbCr^cq_sszo9Lo@ zDH;_$SIIP?iOMQF(SuKT(=(px;U_3F6B>gCF~>n_a9FB(+Kn9z94ZRy3D!*H&yW9$ zX^*Ivn85d_)2?9xR{d=x<>nX1!^vOa5wtK-7$=IO%j83X!buaI!Lu#0$-+~#exe&> zgWrK2!q!`mP3ua^qyG2-=DX8Dza;c_BX~WBfrTpC%Y^v~h$XbFZ3tTH5k4^@ zBSk-G-3wxYm}C6FP)1jk8nlKPdA;Ad2hq6p)cPJge(OKTg6Q=*sa_?In9D|!Lw@`- zCg2C4AzAAxvZTedR=E2vsl>nFQ^q_H;64Bgi>wQ;%cFmkqF)bR{USGu{XQeLzC+xd znhQRXY^C~iHZ^bO5KQ`hf;L(tH`iYS7++V^k!9cfUD-e&kZ7`|7DFyuM_BL2A45Jm zq?K~9Wdve%Ap12LBb;Pua3BvMx&o0)D#h55^s9KSQ>>@8AHu6`wU*$me=fKIH~jk( z7+2D|g6j#j5(EV|Jkol2-<3i5RyyuVusW|spDCjoi1?p z^b!OdpotsudLmy+B#oS-vcIMKao?KhQ*4&>*TCx3h?f~Px2EgsLF}XG+vg_70=MGa z1Q~sV8F7>>9w0tS#HZB_w#5h`1}zkwNwkK44|g1<^>=V{(-$PY9T+N{ZmLx=11(x z`DN+y`5itTmD!meu`B17rOW5nk&Z(f3Y{w_45#9d1+okCQCf&Cv7lUNbdy8tq+Hf% zxr{7{B_8cB^r4f^HiZ5k80*qMBEHnkbFH1i-p^;yGEDT%KV!AC%@CG)MQW*7_(PY^ zliN2EH-*@kB9KrJwq6FJLXYjkM=^HkM$cjodaaiu`h;JuudBaeg@~=+LbRGJullt>#NC^6l-GZ+kk)_lVQ|OV|8}T{*ujT|U2#bXctMTRUOXi&ehF zrQRNRTTf<{V)I8^%Qb&Q(Hz=PEU_Gl8xd4s5Mu`h<4u6nQ4r%zBn8QefmiD2>v|}~ zUpN`9+Zft1Y^Jl%i~kqfG~DImH%iUv&~FUj;5f>pE=H9x8l|~ue7B{! z7rSWT$$>wH8D<9pcz`wc2|*RgzI1ea|!1A@Sx><4w9p6%jcdsdQf#B)zL zMD+Z7rM=figJUHM)9+;PA7*yYhzZ+pTNv_*#^74RajPAWrs@J_i37Wv|&vKGjTmC9bI z@rA`u-n3LULya%2h8kbkEoppVxuo%h?UKe9)=L^+*|!W-2FpPOu`E;?%fm#1ephil zME-*FP**)4KQy%-{Ui7tjUPt>6Zq}GZx?=N;rCeleiJ{;5WHvMcLjcX@f*L^mun}` z*s_@5u$bVml;BVUa9BogC^sC642ROfp`dUmBOHnchl0VONN^|&91&yTZjP7KR=xlZ z_@}az;Nv@9eCy#T{3ypHey8Gx6J+uh!xQ0Rx+XHr!hJ4&H{iE~-{}YNfW6V|>SlLz zRU$P!!YWfJB}!PO3dQgUt6ZTN9$}R%6vHE|vV~%JgjKpw4Nt{Gg^ilwbo?^5;CNq! zKq-DXq03Zpsy9`ez99WtJL9Q_uU|Y;+S6lS$O34v$RhP$JwQ!MKYLeKSnp<0P2{xTdJu{t3*&(^qbTM<)Xj^g#w&c=Y zS#mKQ9cK=%g7x8Vjklk?j$Nb|qD=1rf&vpkR}d7M2)cq`bt8hVAebW&bOpg|iJ&V8 z=1l}$L9kj9L01qgKqBZ0f`v!~T|uxQiJ&V8R$n6M3WACwg03K_JtF7|f+{3}t{_;= ziJ&{Z$CtJk-? zPh$H(QAegJsR2MyOQtKS`9M)mrY)(2Kv7esFR6<_QCFrhsggiZTc$Ho z3x#-0Tn~#k^g9E<@wB*FZ$rNi032(NT5&_~_4nkquhl)rj(qS7r=K#qCWv2wao=Pm zUWe_}@qWOs1S}V=^^R}Ag=`$I^w_mQGkd|1T%bAV4f=X-rXN2JDG6iwo%eDM;5s$3 zCxuRcd`WQ=NUO7r!K8!-a8srvVL20!BrIV9l7waJlCV$*?5hA$gajlB3zC2&VG+6{ zEIXWB&|Fw*1SAQ|i-06yN!e&ni-l)=cvp6=Oa^$1=$}ZbXq#{ox@VjcsSWyF$^|%P zQz#eUm|LM-e7%JYxBb{{?$)+Oq#h^pW7659~fHT4T&ilAJWDTpkJp;Y*)MlQpX&9F-G zAWWlg{7DZtMe?rq!NL(s41iM8TqTI{iP$Xw zNg{U3BnNgoyVbkg)NXmj`x~ttDS3EX+xrLDt5WS%dRU_;rT$pz)*`JZZ5 z809hDl(JzYZwkc-RZGzbLXBL*5EnuBKn}tOc1wb4nFLuf8VTA(7E&;R@T9}FFc3$W zbiJAzB7>xKycx-gkd&^Mv9w%_m~^#@l`dAjEEh(|$|aODSS%O3yNQB%v)O&<4T0jP zQv9j75OB~dNx^Y#HN==M-_9fHZLUlMFF=`onrWqV4df{|Va6AtUF+3Gw;YcF5KJGw z3{9ZlRd*`BWF6zz>9-GxvQ@FV&PK&G2={1osp(X)T_`Qu&9x@3$)I9EUD^Wb)UKEo z6VJ6IrHb+&p9I!sWyDgd7En}esa!x&#rdX1#wnb^nT|O~`BT*t`@<67E0*`!weOws zXKW4g{Vm2q>~BhJ>c%?hu+*3lA&c=@of)61 zDBB1jqedCaBK$xY3I%CC^VJ)2ROB5|CnM-n&bMcBR=n}lUg9|z(_S3MeXhAJbDu|7 z%+ONO&i)(e_%~2aSDJ!3EPc)FRYjH6v}q*+=BJvRU-}-yiz+fQrMXbZNEc*Ls56(8 zdUSs2e=N>-1aI8jzZ;8Y16Z5`KhhOhBoo>RYJp;Aw1h+2}mQL%NpGrY3>M0zb zeNd){TRD%^_(}!Cb4E=yI&-7AAC-QkXqp`O(=-c4SZbzbDD$We-Mllen_;v?*u1Lw zlJBFiR`*pb>p=rIr5bohYLgNYqPv@O@y+b~anLQ8>BAtrqYC#+6|Ro;OBJqK71njW zyu|&|3osrHu_~Pi!&PVfQbns)Me|ziuD^a6-H;mfS9O)RU4LEc?z=M`KFGRjDQUAk z&^_(a1SlA$4Gs&I$#$b?n^K#mu#%1iVKdJ%DvVY#7zV3%Tg#XxDTPR)l{=q=)w->D z#MargWT4f&goP=lrG+A8iEO!+lhmE5qT&venii_{HlIzYF>b;#ULv;s&NBz6~sU;gO*x&R6R&LRW`_%B+qH%F_JkzGpA!IQs8@2=ry# z1Hx=bgNhDBmZSf{hfH6GQ^Ulq@;;FSYr!_9Nynp}>Q4EPQc^Dk3NnF^E*%pY`kPq{N@Z9| zWnM~!bm`p6&=k$QM>@6)(msppGmz|~W-6!yfrsOo-apaS_49_u$N-F$E+MT*K+TSp zgzl4VOt<>*ccSWo4Z$ohq$@hSToysIsQFRDOKV>q*IM=repKCKcK(8>}uX=zUO@od0|O` zHB&!aqzl-xehfS%kagqy&JB*V(hA|Qac;)1#z=8^JHP+9elM0e?g3Jl=Mm$Z8j>0UAJMjZdVbIT)WvM@Eg^EFJAvm*eN$oX*>Jye|6YFoU|}n_+gW#s^bS zJzjh%%5b>O&s0fsCKYAIZJ1CR0MaXJh?u(D79rCJ7W0-i833iz>}M=4h0*L0EEX;; zHUKei1tf0g1D9&O6gCw0#M>RSBW$Bf-T>ePD5m`p2pk8RT*n zdE+`3jRKdb4|RU~RF#*%%tY z3X}kS0M-ELZz7n$+A$5l;^9zjO!4#&A{6oH9m3k;0ItfYt!Xx}__!9Yos@eNQxnV} zFpWwN!VyzZLqJVedk`6@LBuN6h-%0j4)2;nH~d?JeHblOK6T7b9PLC97|UB z#%5$Ru;SjLsuNb#u1%oYl?hb4E`e%SB~a~}1gc$;K(*@;sCG31)viUL+LZ`YyAFYB zS0PaC8U(6cfk3tEPv>ZX_W*2>b63=Fd{b_wm%64!mYXt$B1k0yq(hJj1W1Pg@0 z2b7Z?P)>9}ImrR#1P7FpTg%_~e#XWKfBDvE>K;L420z8Ob@C=Ub-N%kqni3lL1gu9 z>J5U(YTMMS1d-LX9WTmPvmMvvtJ99l^EGM5)AN;R#|8QN!`oQ0dcxaSvMR#cShCu| z+gP%SVXv*pcy%K6e~Zjz5D(G!0T9UNYzLpaB^x5MS1FRyvnMJg0oywm=E zO6&X-)cI)<&QGm6Kdr&}X$#IzOK^VLf%DS}oS#BFKSg$a3hew8*ZEmi>c@MLZS##g zA*QT1l)P^Qo_9yuccY7?eCS~*8ah}?g+H43HhXQd%wC)9vezc7 z?6t|}5U7$xbl5#}wSl>2t#_`r8n1iqMXy~=G5vyBOAG=TRWY?%C5_W3aR!O8IEon} z2GN;VG3&5XURwi9X|A>wscPl9S`9Cu?j2e`mIe%3zz_mv_YMss1aX{ka+gkYq!;hz|Pe=bB(+7$IO|1P)}_0B2_J(8i#)zP3>t-k>&2FBKisM(Cwc z1hozHiiv{?SO*bu4kBcHb}xga79uMRCYJ~%`w}YE8lgxA5*DhQGBFD+P(2`+k{}C_ zkfAIxO2z_0BrTwbG8;yVV-qn{KB6jSGqht-RQE>#VKEeOG!QHuq*TOc00trvag)lh z*~uWy3i8*`qcrsBQ~|74lmW>=!h%O#VwxjEK@FiuMF|Pl?fFdql8;T!efvErF3k{hBTDmQiG4v;NzVP zY%M4Ql7WPUj-`pEMMN;jAsDGBB7?;OSkJUg3%xtLjz_gO;Je9%QGgCiwM~#fS{ggl zteIE81QN->tjSlu1QN+WF>q^7=$Alx7?|}y>X$$w87PG;PxVV6kqi|5$W#3iNF)QL zCdpI%5=bNi#s1}~ehDO!fnqxHRKElg$-t}|QojTe$-t~vQojTe$-u0WQojTe$-u17 zQojTe$-t}!R=)%ispFc^`qpf%mCQXJs+e#N<%N8!emMvR^EnBn*Tef5o zwrs&7Y}s-}*s{fnuw_dXVapaO!j>&lge_a72wS#95w>iBB5c|6bmR3X^gN8lY;J8| z-gD(gjl1O!`vM>qC$x;nEtZp=8L+@@*~EQE(3LcGMJk$(k~HykV>2HbLz<2ymE}i0 zX6Yzp6Q|QH9f_ssSc+LX>NrbB4K#7lteFpu7U|SpoP25_EN`Y$n^5^U98tS70W(8m zR88mv)PyP^*B&&XNvH{(gqqMvs0md>tl6Hya75jCL`Q4^|&93iR6nv80rPDZs# zC!^Y-$!Kd)+8RSSnvnTYMos8s)PyD@#$cMG$*2jPjGEBNs0mF*n2jbh88xAkQ4=~D zHKEA}yU}W5GHShWGHOk5GOF#Hj4&KcXyvF0os62$$*2iUMp%v}G#NFalTi~o88xBF zIN%bRjGEBNs0p2nnvl=t^w1h!+(h}-comx^S8aOSWAoyg9z9rtbyb@S*UB~vu2pRQ zThkqH#Obj)Z>`s6yR|->=hpgdhFe>0bKBa0&1!3F3iH{XN7@Nj-JN}D*|o!TB}2kv=jeF+6ioAvYEh(Gi=oGrV5*=P}>OXdFsxqwGg2-5TUgXcpX+|fOw}> zS_i!Js++3THiXtRgw`@(;aVDo(Aotze)za9VdT!LG;_yP#80kph(r8r3!R^>w)3+g zc7C?4&d)mL{H%A*Pcw6V8lLmh?3|x9)A?zL&d;)Nem1${ck6cFFnLg)soOwj&w!|6 zK%!|I+1RGHjcjzy(zOFR)dnQpx2{+MlI~j_P8TWxNjIbGly1KEMw54R?W;E7>(gVnw1;xv!Y@@* z)?3ClsI<3?;VacFzFWp39iiMZwn@diWo)xbcFP!6$SBk;V>ok9d2SgSMdha~@S)eI z9PptVrws5}zYHHbTJjDbdQS2UAC}n2^DW#5@;xpi@{bc0GC5nAOwL+gsqE@oIE+c2 zXAA4evxVj4*}`hF9&2Md$}wA5OP(z(CF=`Bj7gzp3k%7!g>__o36?P_;A~+PdA6{K zJe%uteU8iJ&o=B-TmUQ=l@%r-u#x<+F2<8;EYInjy*#oPsQP^P_5vT-%hG*{74~$bSCj_H_H?rPX?r?Z z<+MGWtY+GtPF5{#PbaIB+|$WwBlmQqlawd-bg~-AJss&J<;gvrtk!W)M>*S1zaVltc#9x% zI`}<7WIC97i6C-nxW1rVcfCLA#ZX)omih;fwSc#rHoD%0`o+(pDDV z|3D}kOomE3S$zKkp=>M}Ds5!({SSn)o-$NAi{kqq2xU9TQ0Xp;?|&ea-3CLY!zjN0 zflziF43)OB`2I)tv8|qsWRk4oY!v1#I=0o*tBjX*9gV^qM#r{#kd^VW4n&Vj5|{NM zjiQP~QH?HR+eT4YqB1?#N_tuU+9;|`l-KAowrvy@C~9nU8QV6BsuYDba%0>7zs>!Y z8_PdpKiJWI2==qgogu1DER3|*Mxe4moE;_atc!@14dm=hd1p;TtoDisR5qN`dI(fD zwAE?|R5re~)8(C&5V5k6uGT@Ivf-{)L7=iRuWAseY~ZUE5U6a}r}fXR6Wwn6zW#Oc zA`=f<#b3u`qC9^)P6XCRkGGGg&ff{}RxBUsOHHTZz3p4aHrRJjH~MmcO|00+u$$~n zC&g|y>{0%HHhvcO==nR3A>Gj)%K)oM`>A~kAMLYbSW()~#?awcJN$sZpXK22YaD*9 zzn_KS@HLmwpv!2;-_N3P5!Shc>;3&KABP`yc!gsKamZ_p<~Y{uqZp*5A)!bok@ue?Zl_Z_tJwu3V76(PLhPSJklQ zH~(cTGg(%|#bk|V2k9DZ>A35v&^+AJZ5 zUpGIkc-%qG5_0(A`70EUHBXk1!*7_sR`E~)3&!DLw~B`nSTGL1dHyEF+nmzjkDh;> z;zzZ9IsBISPvgV9x5lTSj%Yn=dynp3_a2?^eHkV8_t>ZBy*!+I%F-tR)&Uto5TF)h zBt?KM%b0-xi%>>U1gLab^&~(I$?$*x#gTCV0T!?f2neu1WR;5mwI@RW0<=Nt`w6i4 zrPC+C!jjgS05vP!JOSFL^zVV5*Oa>ze+aw0Gkq6fPWi-zjlw)Yii%f{?41K3$P>fK zXci8uqK1HA{tPEmS$Ka+uq{2+0{XB%YO6E7h4Y;N%dss3rPtuzKT84>s84c0B?DxU zAP09K0T?Qe5vb8z1l!98hMHmosxKD-d-g`Nje_Rb;QNslp^buzV5{++St!BA5RS~^ z=z^SFsNzFD+9$dPFN2v!7+^K?R1@}?z8K~9} zKG0KRjNTff^wk)rzt)TA>RKN@0}Z<#I(e-(qfL@`EZ-Z)L++z&dpwkY1)eE6AlJ*u zykyGq(Ia)a!;nz19L&)plk{?KFK2GDQ=a_|T%{dE>~3dMWtR&sn=4<9dvptW&C3(gjcXG-4Bbx zor63^#{HGRI}P%@4fPKJg`eXgvR;&n5N`3 zfUid|mwP~7a?xW;dNi-8M~3v0Cn}Ue=mk%BWzyIYelBojr3E18t>kvhrgEYMCU<0_ ztg=#4nOS_~OU1@DsGu2ok29K~#s4*ln*9deR5xBpyvVEBRi0NZL*-TN>g=vOK6qk# z>fbI%`5-9N?<*?kK_uOSx}j&7zX)5hGt9rzo{V)p@E#5M{uyDsF^aE><6bu}W?u&r z6SGof#LwrEM4W)eF~z@zH>@t)k4P^@Q{i{Zn9X*c!{z-oC~Q z;u224anW_F1L_wCH&E_L9N_bV+vt@@sO?%2g&f{RK-x8u6XrSAD1WBlQjSmzz?D!Ke&ZjS&w0;~(KVS2y370zLk1azoU&$Pfx6 zG&U$VQ4kJMKOk6)&nS+KtD^j{Y7f-Q6fb59GlV_(EZPIWk(*z_jei%p8#ljluyVt8 zl2Oo*F+|!;fdhqK;x7^mxBr7e1t}q2kX-?SlUSUOqY?o_#2%L%^V%P=LA(=*OVM%l8wRU5USGonf(<7>Z~SXkB?xy7@*F;b zm4;-q-4BmU*Q+FB7ornFMD?dLRu0a7QBV959ygMpqAHVE{TN z+z;Rw#t0o^<3J)=Mk?^E?AH0wF4CM;(^f`jwIV3Hvm!DYMvZ4NEKEgNIG#1|PE^s1 z6ab2)qySJhB?W*2YR!V4SVuU{l>2(vMeJ^l*%dv#c4rSXcMOu0ZA4C&W2ADkqFIX_ zUU(Q9Ff%10q5?WrNQkU}l%NQU*XPKg+4l*)=V2Gu-iOyIDB5*S&!%yqEpqjCUQPGF zZg(=jZ_ul#Btl5Ml^I}lf~xbd2F4E57qOfh>J*Y#H9wtm>KvC?Y7n2ilbNh?aqcUS zw?mMh)AkD+iUN57 zsV%a`{4~3rjuWE538&x7bD~13z|2L}qMT-&aPq1O%yW`cUCN1RfpTYgi!wU3kXL?| zw-!;Bn`*;x1WD#Z(QDIjMmpcR=RY0g_A>&E;k7=JI^uU?p?m2-w?=5pbZMlz}WSd@I8-kh2vt z*dqTxO2sNzieqAVOUalh7>b#0%9&{)XC@gFIej@MO!noCB%f`Tp5j^|6myd7otCKl zVu`qHVIO7hHP9;ihfv}-RfHzKltFDb`&|3iZ|&devNedf71!O5TdFu*89prF;?7)j z3hc7bS=35R>FwaM!($(ZH5#nJz?Ci!{hWXjnW59xluCQdJAwXB@K1B>t{2M=QfBhxvV#QlyFR22&&q{3@e#(|=kZ%D<~R@;c@9v!8aoH|NTUb#G! zHvt`|I1{Mfi&j`FzC1Am$s5l~Dfe*Vb*Y2(zC1;~g_e=zTWA?GoRnqu zD3h{}+kD|P)O?#H(2G?sCUa-4*S86thtCzA2dJd`V5*{vAnEpCKs~+MWeH2iMa~l<sQ!T`cYwZc+Q$NIuYi$bgEIi`H)%oA}rJXr6mdT-^R?(3|L#?AD z2d%4BVPBuks_?2$+-x8m>XVQdmvOgRtTg?2#1JHwsrA@JXe##rpwKBmNmGDi6sXGF z9iLeCzFH`oU#mzU0wKCvc|5a&x)w(VbuEn!>RK2b)U_;1!nZz~ zCE-?|_@J6FsZT=WO`kZOD`io&x-zr6WF^tl+*7i05U-Ykc(n}RmHAiboq#g<8p{9^ z{)g254u!+`8k!8Xyi=+p^y3ywAbxb{MZ0&dQ)_AT)k>2=&$!<++dJOC1q$)+$&kw3 za((}9+(sc6$Ko1|ilssKWP>pDStPKwr+^w?lfk(9q0;Q_tTGR8rL5|n#%Ad3F6s=6 z4G&3YtA~fe9!TkVr<6zFoyANyr>-j06;1}#alZ<6;erv!&aeOAz3K^JDu0fB3 z-fR?0!LV+|&vVrJQzcPHkAWP8^+`AXHw6_(6nMu{NogAhknKge{%vSVEL~GO?P_AD zSWWA6YLii}KfN0~+@0!jrSb9d>vfsZsvM_t>C4UQxW z0HnM8y4skr!^jULL+Vt>JsDF7ClQFw6k2hG;Z&@T~vc+hEtSXt`(`?B=~nN1I7E?^Tl8 zPUiO~Lb((8k#zyIy!my32efQ-Zm|Oge^`d9xf@P}=~BmEE6 z;`$$*&vv)vhig3H%NJMkeWh;OxYkP>b=P?5Zi{QXv{^6L6B*PM9tU*?JWa(zI76svVyYn`RZrD)_bn~8T|1~9lPSWKy`7_;18S&jEnexHc~aSr-` z|3G0nms~OtmMgt@n}iyW{iiMx9g8sIj^0!v#S1U=p5tSTKNzS)J@s4)wbD+08Lc#gT}iyVLDnZWl~)5%Hpyyb$QDS*C6illL%77jg>_ItD!YYG zKpl=tM{NX~kzHc;aD-@TSCS*xu}mX|F3X9Y!Bw@AL^NF<2LZe2l4#Qmy{Rr0FUp{| zyDk}GYNFTalKvU4X{O1SjfBBltqNV@IaJ|Bbf(MdVRc!_1W$F{U6+;RbXjTBWi=yN z)MZs88h;m*xrBliEmz!G{1Ypkp&5g+zvwNn>eN>xle3C){i4thuG_`Ni` z`5C`of_DIFzI^s#7Ge5sQ4xQI;Y07w5dS}993P;R0(}LFUmbHFhkVB;PB`t9YN+;D zM-09tG^-JPZOa(FQJxVIgp=?(@}q+F!`4~Ds|WeHN2$~kXSfI;{=se$viwA?8D)|2 zcfs>F!E>H5$2~Gw z#5o7)4)`t?-^J1c8XM>DlTf_1!cvJfbW{5ogeNFTzTYL+j?6!hr)mAgKjMWjQXV{! z#|UtKf)op3(LC0i+}VaJF$N_^?p-g&7C+wiD#6d!hRSqzsp~IR0ZkKKF*IF&u}9E& zwT|JFks>BBHe%{YOc)uBdK#`@=tvQz?_*tw_lNlQ(h_6C&o`KsBm+byMWxpkSpqCF z^XHp=LO_yin8D(F#vDLRE_-3mG+pA|B00{X3GHpG5jz#KLDL&{qhTQ%GdAod!{Ry@ zvY=Q!p1>EZgdG*dFD(hf1L2Y|%Xg-_%It@Vm)N1|LQ-Hig!BS=ayNw11@h!>2;&Fx z1YucI5>#-~^^Ome3o6+UQh zVUi7f?NZ*tq-Z&iwIm0!nkZQRIaXDeHfU(IRc3K`Qfh+LuMOBFl8UJ{EF>(IQ+0Bd zs)SopLh9-wEr5AqSGQ9WgpfP9W|e%s(wA>np0v#u2uOa)@}yCC_zg=x<`*qbTI&l0 zBtfZj58$8yzkX@yCp3Ma$&U`Yqz)``YDcRf%eT<)+WY9Q1U0*dz3jafVgHNch(L-Z z{%r(Kyr5uK1v`jei!lLu0a1!P;}-yfMcK^q1cUW>(U5j11q%@xtHVmQT)_v78w<}z zo-d|3)Wc!?<=`8g`lkyeIjvnv;zF-31_NZ)n7KJV*^m_CXoF$#-kQc^!%!rqRn$>b z+gM=@ifXYACAS7eZVVgE*QGmkRhs zW{|Ra3!z;`HEg|!AVzQ^&sKl^(ydI$ahY(tNKje4xC3<)Ij*yUF%|@pv;rtWv_2R5 z3vWi?l2D7$B=*W7fYm4uteOnKsh=Icg_+!jNBj;HaQ*CL8u7#*zm13}S;L4&`v=5@ zjyIj`OTYOY>N@@lM4#xJe*!AN!f(L8&yU{F_+C^LnP>zj*#XNO3->d)LYl zhd@%*-#LFGFgR#~+!wIe*W3Cq9wV)f;F-J%^&r7%x3KjAfc5j^KS#EH{5A^wc03^8 zTFMtCHFXBn8KQ$j7Hm@FMRhx5!Qq6!*&z!?fj$```V}}(cpopHAYyijPeP10E1`b< zHETS{0rxmctZ80A$p}Qyo!-+KsnH&((It{xS(&HQM5Jr7?DF9nw8}W~5wyyffIsM9 za;8218IVS)acp@kTv&weeaJU-jA}WTA^bkia!?~GHwVgOR)v;<@+%7An84)2b#eC% zXk0QH)1qOZvWU}K2>0frg^~ncc#Y?A)F&T1l$0(+k8|)H$a5eQ{|3;gW!V+!NZyQ) zWnLtwoIpoq?_4EkhM@{DYC<2ZEp%s1s9SKx-xG~qSN`%8muE6hSUF|qOJV2YKSwRu zD@lQ(cn(E>{q4@c9hQllnL8X~`t>)U0c|Gkh%g^Cvhu`g{a z8R^+eS6>dBr}UqpxAj5fwWnUJATy$hLIs&IvwVsWawf#}bdUorIQ+K-O8?Ooci1I1sldMXqQMZD#Ry?byPySR8Pfg$rXveu!A@;-H9`# z8*#x4@dxt6PsaPcEYWdv33T%o$}py27+uX!>dbkl1N}|fyE)Eq9M52DXslOq4Gr6-Q2Oi#MKc{4bqrL5-h<}Rgf<>c>LQO^d-|@9mAt9E zEt=e>v~$I?=>xQ74^ ze%#At5ob7G&&S{qCC2zZV_0(~?bXvkH$PTco-PJ3YI4gH#;8V{l8V~LPOea4dBVf4 z3T6ac@2H_`{2pvv-`~(D_{v`50Kj)`>>U}of`fbBd>P0+eT2s&pgFiohZ>fg=>$Jk zj;}&+e?^?tgV;6WFoA2}6v2H?`2O8JvXwp8=#fK|a}CqzTvhQ^ho08)Zc3mSKJAhn zr-gL??yBtK=jeg}OC6h7!hvcD0FkOIB&98V0`9#Wb58cnpNUzlPN7SHo|;1b%~uBl zrRkIU=5HWw3iH@~rJJuF2o?FQ6gk{Gexo0hr{7HJ`!JC)Z$Dn<6+S{a<=3nTAE8`I z)SM30jH80(Opom@(<<)t z($oh1o=nRGQZ0Ak^1WDp84ki>C^cS%#5vF>_!DRLU2294>QW=}b?gGjf0#P9Qsru| zRj`w?cPnWA;9=D1Q`>a9f_=E4E*2qD7mVP~WS&y?e!DBbVZpA$o3BPGz^tzscV-O> zzQ`}D{o)N2DOUTim)fG<9f~bt3(7I&zTMTv6tdX<4!M?rZ2{l$qj~5%`@Z*N@X0?k zEcTG(2e>9Ajg34M#|0vX^E}0IwaBH#>q)!<;(#n2MaeLNu&gwq&IWZhsuQWRNuAB= z9Hq|D>Wr$hg^sor9E0%B?K}JXk3pc_t&r`N?&mu+hRya$_aB#H^~QxJc14*UD_2Z_ zT~WrUr|3Y@fudi6O;YMlljw*;BZL~^OBg_r92c(W%1Raq6G2xH%z_BIT-xGMHO96y zLLDf^w^Wh|P)uRzG(+m7;yq1Of_^e1qwiF?b(}mkeU&K-$%yJDPA){cA&jHS{1&eK zaW=JF4#G7fWNa5R5*Zj_x%^Zj%5(Yh@<{&a+E7Pcl6xB5k(1=@mX6q&vVSgn3oFT& z&vAJn^BFHMX+D1y_g;)9sZzH{L_bgz%%SK9io!S){q+Ypm~2l=Tzg{T+Ec^oFv4t4 z4ODw#pxV>ICQ9Dpmn|b(rXr#IO<{&6vHX=`f>u+Lu>cm{<*$pW>0%Xm?qX&d$V|JK zmUF$p6=#&ROIi_Q7 zs(%FK0G<-f3ISm`0IN`Le~yJvXqO(Q4EEI98%bG7Cxfn$6a=|)jU<=WsjqFOFX?}D zU7ga7U8K`hrJ;UJE^F*;BLicOHrc7T!WRR%^IvMan@jEsq+n1 zmO5>)vczeFm8GrY^fmb`EL4(9U8rbtTcYtzG78nDwxt zd<#z7z9a01WNnkubnR^O86UnM5?WF=pHw5zrx~BxjWbjgBU=wO(>{U}oKBEoyF}7f zM{_ze3>i^N(-l>%o1I3HPZA|H^YMv>@pK}shR8S)L~1{Q=f=i`mP8_TwpofMack{V^NQ}m z%>H&}6p>?w2xW%tZFgQ6rwcEF?&L+#!b^LfA^WII;Q9IWO!CqZ~XeLXt*R)^kWU%tngq> z+N=#7q(9@BoMQ(~q|YO%x9$=Kt{*cy>j13@w+_%+Z`T3R)}Qff=V#fup4R%IX3l

    KxeCw0&ZXHu&X}uGZi>+gFvNR1KV=jP)OVa={=mNN8uK_K-)n9k> zsAuHnQE!6{>pY5DOTR_0g`w;9S`FN{=xz1h#;fV~%Qbyz&?cLH6?-LQ3titHwSt`5+H`0NkI%nQb@#5f)c&a>_=pJ)2mxFylQ!&HJQ%WZ@V*-QZm=F zWhggHlDuV&eNvy9AsVx;Sgxq{(^~I2*7dPR@k6$S56>F>>1fOFf;86NIU&(y_=?Du zF24(hw)|d^)-jZe^3uh47vGjQHNIMfi?3E;Yw|9>7)3>Ezud>il~NX2D0eH8z8Hlx z0dFCHwtBz&@rMo_l6A(aw;TGn?_t!(y#;-Ut%Oqe%33p&B2=znE4+!tn{r4ok5Efb zBtZ;0)`b{Sq#`V6(3(^Yh%pq((!avh(2PJM;c^2d&Kp!U*Pbi}t*MF#q|Mt9On)_K zP%TM=dMrm8T&FSzM47ZL?C*B5ts__mKmE_BwX)g}m%^!tbSaz$ku8O@fZN&?7e8k} zZhc&}9>^ya(q_fQ&lylqFrcG3r3Pfq5bq&c3q5w3LB)t zTxW8Lb|#!Z{64hsp!$*{??jHg_gJRepiQH#>|)aodC&6n*Rj+eVtc728On{K*wz>*1|Aj++_jKxmOW6~eW^B$vMz!<^Sj7?B)0u~l=8vXXIC)~TajJFoPgbHaGQX% z#49Kvk07!Zaf^(47eFD12fsZOF?)^DjfvYVDz@Fmq>WrzgRh<*m ziPbrgj;C5@L}c5m@$T}n{L{2JMa;#~*LGq5Nc8Yn3p-@3IJEQgRJ z=NxopGm`leL01rDnFzXqAn!!b<#wggd?IZUf2b#3JRfg(kt z>)1v6QuUsvq%mjCNQdHgdz1MbLdh))$ubHh(<~&*FO%#Y9|g|JK%*Jb>8wWG>`umGS@xDY~3Dx1?6=OzwF6UN+ReAf}#;YR}hqk2)cS8ieq`6NyK_U z{ydb@*1cLKtA3@ZekGRM!#%5wj_C+Xx+DjPlmO8IL|TC803tO&bhI86zJ-#N?M$AS z$(pBV(&ovUyh{6?yfwg1n7yVcmOh~@SCl@N|H!%K`5;p6!I8}yXwq`+lN$GJgyX-1 z-SgV&EFWIfkY&Q%-i$x)_EJ46j_meoTj%1$(7wgt4{Xmg`L(vZusW=qK9 zqJQ~zG$Wq1qlzQ-tQ}Px$!G1T;z)nlb~GcOwxb#Kv>nZer|oD)+wp$3YbSIhcpBDL z-CiBEl(WIvk1bsan9rO>)|Pz_R_R%6s4U0qXKbahS5Fx$hv z=OLzt0dTB%kt_dPm2!uFaz$j@+qqIPOirhQ$#frj&oh4I)^xs!2xGCC7GjP-7DnsR^-C7gytc_A@w><(_)M0PcVU-u zk&W%VD2B)+F+?VaATl`uFL%cXi$EJ{iPhObD4Hc=eUDa1MKe>N+p@}yU6+x88{!2S z6p@ob5jny{99{;->LP=nJ7o}brwoG5%3;~DgzUdlfo?1z2xjBP5`tg`ZY;rV`cG#= zl01cc;(R(L;Wfjei^2#2JNwKXVayXyUP3oQ;JC&0dyb0GDw2|#U!*5gi$ta6GRm)I zZ^is)HGepi6b?C^jd>fZU*|Qz5=mIKo@!P&wLWTAnn3HFW^=X^cn4tr9B)0u*3CxB z`8Nf~iVdu+$G3r%b@n!}vVIoBBc zlTX>{cLuvtqRb4L93>h5_c!zPNLqg@b=i>cgGV zbE?pIvOVDF>1zY_qJZcp&G#GFze3Z(voe8vjGkMC{2cpquG~X@t4aQlj=KU!{^En< zUQ@~LhHg8!ZOX21KR8)5mC3?IVz<@dQt@MHwe@6amBFR-~$x4z}koW>5F+N%kw>D+4`noc+LT|N80P{DqkrZZ7B zoqO9u)2XN~9RR?|6QHJu9U(y?fp)A(?e7EDDoT~*cf6v~`uM((FB9-j9l z#*dfHKhE0iWr^^*2B+}vL&bOt(e8xdzv_AM{|otF%KYEIO#Wc5i~L8h2RJ^84M33- zyUsy3A$eHsD>^R;y@xBGF2WS@;W&kVUGC(k@pT?(rZuGpn$tV^X;p^J-O0~hz_5k; z(0F4QsdKlH^tjtd3UcW_6Yb$ABNzk2Lq>qZa5xN|)y|GPlU(WH&ZM-h%k)FCn?qu* zA3Bl^AlDBqL-W__+m@l3AKi=a`60fjAwSL+h3NcXl`UE7rmRY;e(KI`&{Bc6L5uQc zU$hJ#{~uWM482>$Dn0K--0nQMo)zcV;;yfNVhIPh7wSR_JI0(;9N-oyLTxYA`LGEr zq1-vma2XX1<%Vh@)a}ShTG?mC9d6qYOTOtX9w1I~2=M>`ZEFninEr>b&yBZUYW~R5 zE`-DR4LWjJTQIqHzPZ)AcK#lokNrz5v2mC6Q4AkmIzyeEbT%xVM#o4jGDhnQp;vD0 z#8|SoEI09$2k+0y=sZ62BrBmP^-{2q%;q`qIg3NX^@^JiLP^GWrKMV4A;4%R} zemh=?Y@L9Na0y)hggeNq(froW5wB|!zqM5cy27kbd#|IWL3O!ju4Xpi54V1Z-0!OR z@h~#{D%;3aYmowOPY+Ikzn@}*sd%z`f(qf(A`XGz24EW7vLs2WC8!Uw|WX$a$fhx491_oXnFWS>$9L1 zv_3C6{Ezs*fak(<`>?pcSWx0wbmCty%E9tL6`@z6NLx=wloY)tML&aR$pEqcleDtf z4*fHt-$f#qFn01pc;kD4#BF`?m*`%kBxH4bWa&(BFjB{jKf-t9FA{+pU56z^(XE$& zl(wZOLPp%FhcVB&h}VmI`-1o)WO02DblvaoC$?Ha_3*}f%at8p*M3Xy(P~fkqz9Gm zysr5XyK;V6x_o|zPj`OT{D@sSzbsuozr&}yplg1_uAE<%E}!2@>3$;R_t;{7uy2+h zvB(e8k#})H4dm(mZ`Lc9*`8v|=!h!$`HHbs-jvE~OMd~02vIue@ zE!9BSH2Xc?>Gz+|&B7N^P1qd#2(G_KmGo66>g9!FaFV~j;#XVmhUJ!9tj!bEvea`7 zdmlB4hVGxxFzn+65+l+!`SF{9s6XH@J{nXePYote!=$DSTGdKeOV??8FtWs0;GEKF z%@tvUKi~ThT>fE{#3sIVH5w=Q**3SHtA4iHt-b1J``?;ZKO5`T_3CG5(z;Ro>|Z8> zjpM6ETKg1}brff!EpF{^$3B|aYk~C_PeV5GhFR zg1m;v@3tWqiM$s`T+`sk{|#9%@Qoj!O!57A)-P6m7H`39E^J+a=&dc#2rrqPA`g!N zGtv(QO9BJWEE!I-$%hLJJWVK%7Z~`*5dS>YA-evLutwkpcp0Ne7~;@s@@WMIo+h2g z3k*C>I*%6^c$$44FEH>l`#fG?;A!f4yuiTIMDlon_iVvib>4xq5w_)S495`vj!h6uD)-TgFBVG2|T`ExeDxIB*qj47~E* zV=*^4X9mzn0a{;x@V=&tx$u4_mwL$dpMU;&RX*_>z^@lS>YfEiJj(-vOmBSc(e;h> zP4%N7W>g=kZ?4bJZgWFjX%BFeLjHm~HsKvh85GBOhr4&eAE^g-T!}2&aY)gD;}oYY z-u$bOQR@R>d|muOJV|hvGKAh2EzeSWp8fj9piH~#rS{xMG*q|G<;I$u$R8rMv2;{E zqQ3SduczL`c!=J{?Qxyab(3ADQ8zJmz0@JjP$~W^h;{v%Rh~ZpQA38eEk8p4jU9PGM2hoKhDy0!13v$Y^0dAJ3yR;3kw|a54$diEPp#x~ZQTw6 zt&ib>qnefB*N5@P;n!Qeyvm4!$#+=`oNUE^$80fO_5ykCeuSRQOlyoebD27XL{^IBi^CM zryi*u$usnt>XGaM-r)2~PRm*|GQFxk-vd4#5Ph-^Wcut2!t(Ma`20vT)>okkazQ7r zhYC%QD?0@wHO3{L0&*jeTrtZdyQ;C$X{_Ww^j_ikS9^S3H$7f{q`vCj_#It-Q=Q5G2?0|_AyTkq<4ZSs3;3#CZ+s^nXg=eeDE2_g9N&T~ zOS$6n>7~(`#>m+mYx#@RTWeyKS3cw4GI$%|PZ1u8-wI8f{$cu+-0APm`Ps*`(Z}8l z3ubb%vgOkIF%BCG#H`Z%C)fF{FM_>^{vcVTs)g6e7Oqe2n9k!i_KrVxL+|*xBfaBO zno0c6NI1IoiYEMWrDw*CcCFbf-racrPGUcvetJ>`if z2iIK&eQ{I5vm>d{-E3$TSb9qSlBdiZ6yD!qfYAkM05E*ZY&V9*(I2qK|^^<7=A#HWF= z{%SmfNewv9>@G7ml(;v9-|_Zya9x?LF02KKR+H150%nF7j@74;kbnN@S~aYV0DAG; zPUIF2_qNr?PYWi?TW$rWzU9q)hFcCHCosD6nr-DRw@AR7_+&h)puUAhQTN$EJd>3& zO0K4s06vQ#+>6b$+;cw{c7c#U2ECHgm}`{eQ`O6EL}|YHj%RIaQ~I9@16Ssp=s~ zCxH%!uIf(G4Iv4Ti8;&=p%a8KkHUej1cd5pTIJ#Z0a4VLix>la1g0tubTyO?~gEhOu|He)?p3q5O0b0(63#9*z z^l;qhnTVvXsW3*f5NszOjuK?4F)zsAH^fnQ?*Z0)1@b%kCitc5b|cf8R}vYSrFw|E zcFHiKwo_F1uNLOQsnQ{G7wOc)MADfmjO(EH?lhpR^J8Zr&ivTf_|C;RcKO&jfXZ9J zps@=GQDnw07C)Ebd*z$)*)e?>q4|`pn%!-|Lts?a$)A7i5$tzA44Xf8IlKn%Agen^ z8CP#-@J`xLRPPdOaE-BEtJY1%dYxLYSK|g6qobtI?a#YHYTGEYRi9@;)bCc`@1e1d zi#}$_Mb0(^Hxhkw@Mai=!K{!Iegu}b;5YbU&Odk`%=X}Nd{t+;GK#}F|BTC=ejbJ9 z2UpUWWqTUq$DhV@E717`UR$wI?D_DcK&aEl=_E`RyBpqao$}!=03oh#p%FZUZ>hCS z1T2yLm%s&;?OYlI?ikJBy@-s>3~_jn zNzBgC^Nm$Z&`25MtWcaX#)@7_icuK!wS{s<8F~0L(hAPNC%rv2Ph8U55x>Zc)_(m;(z|__Q5LI)@&kvI{Pd0_DQ_k|l~##~Aad z?0Xg=doLZ`2!yNJAPJ%V0NDm}GtH|FFPh!4VR-Y#%J}wr!H3}(Y^nRex>&@6h$iFs zAbltg*bh$Zj0YvnY4{u{Y8xY0qM38YNFttadmhfEE&#s=P<{a)A*B2VKw}%=NAgv0 z!zYn$_#&{QqKbu3q;GjNXHVr3Wpy_2Nzm0^XAHI8mq4}eO3dLO5fSNBmKd{5hwrh z${$LBQ3d;q(jwxcx*?+oiinhaaoVWBHDPHJ8DSs6l|EM*yu|oYinXWSsshCV=8&@t zGt#p53a#iImj4ciY6U6bA-EA5<$n-UB`Cc;K7v5^@MYjjDYrsj`T1@e`n?iP5aABE zvRg%0=~fAV&Q~og`-`-AHNUihH}Ts2s872#A%_eI0vqb*Bi=5A}*{A zHlo+9uA4N1M@6iSG10t`kXDNyIxg;LibR-S@T)qp4RGu|q1N-g62Z}n9wq6> zt~H77J)y8^1bzFS{P1+NZu#;Zs6E@zjjX%_uAz&Fu0;>9i=Ar0c#Im6yq$r;9U{Fj zMy$#qI!BzD&!F>P-UD2~6m>0NU$YGmX8ZiZsBwTAmt<(;#3;cx>{M;pgEBYYNuBC(+4o*pX+R zwevt7ru8uE%;?vCel6c=CbiU15epk>tvNQ0vo+I(cLp&{kgk#tBdXx#JIPCS>jePf zT^1n#0*S<5TMu;hBoso^oh3&zoQ7ns{i-QB!LTl{PPg{{oCDY#lp1NV%J2?Zxk8Tz&5*35FdTgy#c znIkQ?EFhNK54GHKu-bBCj(1sZjLHk!m=elOY_V`Utu>b9$JtoXz_#ESBu4Xh#(Y-I z%Dc(V6VTq>4}^>D>u0g*Ur+2?UFj=`rB)d?!3DmbVsPfQzHcXZ0JvT5+d=6uc<)hO zSO8gNCfVaw1&76TiNGwbpYIA~eHpKmKypu$xI$HkMJ8lmd8ucVdDaVmMfZT;0OMO! z&ED0X?1k|*z7^^r_%&R5SGj$0uMHarv5iL%+*HVs1UD5T*5~L6=JUq5eS z5@J9(Rjwo7VSa!n^^X8RY_af3*k!fVjyb1YiYmQ}qfG{DozI zoUIkXpIOcU_NU1>bV9v|1HH?7LD{D#Bm1k|%KMReUjhkhH2>>~u+}!}V z!?GIYhke9SmpcX;FL!?eorN}3m_G1u7owMoEuM!+6B&peMyVovaTPvHKtTA6FeReG zmxu~qVpN1r&{M z4s(!kgTx$jdbmuH9Rw6{af1Y6$)9-W66FSaAhQf{tMNe7cp&Ho0X4Vzmb$S4_t<~Ew2^<-#=_v2uWEnno9AJUnGDxFRAkl=ZYa8&p2s*`kSv5$w* zy1^{Ei`=@hBcWCFC6mH#tFN;>k6^rQ7-|*^ZqNR%=pI-XY=KLnFw~gn8hFfy z_azIgci9jlk$^S99A=|k5|nWOCgu4)75a3I!xe_vUr3h>dV@%XJi%kp;H%$0h*`qj zNF-Ry7~Nnlqbo>sAS$ok3;mO5dc5Z123-g<{J|Q1I&R?34J@3XeW;NdNg4HBl0pWU zzDbcgeQLgUCtf*;=D!fkq&>hab{gJ-M%emVps9K#c+dm``S+ZaNSA-FXHMgGWZleZ z+(wXd8d`3?vmSBfYWWCR-@+0;C@2}De1fIf?*`xC*5rF-#}u;=zCtZ2xe5OcFyGx) zeyACv2>N#`{Q6;=RB^&OAImgxM_6X`<3N?V#lS*oxHoFIU+DM!j()$G^a^Wwy>|Ta zYkK=fNpL7L1k{f{_Y64GNv{-iX}NmfFj1jJh)bb;2z`txwTdD2vTckQNm=Zpcfi`$ z<(5Y|#Y2k(7POh-Aq54KRqA9N&V*yS7T0IHu;w zcWsq0aZK5h@7gM1;z)%j-?df3#E~LTzH6(5i6eEMeAiY96Guut`L3-JW`jT(-8J1q zQ_wv$1>Hka&^OII5nvd_(h*y6Aqa{|_ z8*6`+9|ErOL(6~A!VfJ!qJ=hk@Vh%R3tVDQR;9j^jtyy38>cemeNnA2g82!&g!=(* zEVg5^WPdq~Xbz*CR2Q zCtqHV#JD{9B4obz6mR485N*E6y@7y43j7`J2z>_cfp&C97=?hRxg$(|NB#-;l@;LA zMAu$uzOh9 zuwZAp!5U(_B!+Qk50NI&4b}t`k+BcFU_!gpFRuQ0GZaF@Br#xma=cd@f#WOJw4iSP~n)g42*hCXN9D zwx=Wqp2(Q7LTccbvOtiSJkPV=QFd-W=6ntf(+tua9)QHsYGC!n&3f5ba4zCbaA<~s z7-2U&5WaHBd@i+k148C=>BXmr*_h8Y<#Wxmv5&*awPcd*otf0SOnPWtclY`;JJ#o> z`H5w3hg)Wv>}HMwL>J8I!4DmAXEFEuBy)|aTvH~NYhL{Cux8@9#*7a{0*H?T(VkqF zi4S$0bYHHq9g+J2HnrozDHA}HNS9D^5qUQp$md$T_S2E`Tx$$wYABbC7c*wun2A`27(-OrtwkwsaQZ zcPM^~*W%-MPg~Dl=jo^3m&-3cn5fymhwt^q=sZIlxVJ3HI2^zLtgl-v!RIDKNIITE@WC!AzCv9Q7I@> z*_A;p%%Uouok`_#nRKo#)0mrHL^M zOHgyrSS>zDOf;!2`P?*Zw^~ugofLqknj**~J8GEa>(88d{`w19M165T*IGORB{mpO z09xfI7PigGWY_x8B89bRXlB0gKHz&Z*%^azsGs8OOm^mA%A`}w&WQT$qTftrXJU*7 z5lvAG+QMlNW3+~uBy1_zAjb8^kIh~tDWcoLb`Nb2+sbJW<4D_=iMMBxD!Pb~)j)kw zjGKmXIf`-P5UNQ|#JEkwxQ$|*qZm(z{7%;LkN z`G?qOHNw`IY3yA7b~aiZf31NmbM4dZZahO6vaY*zDDC;(vrqDe@VW0eclJXGsK+kr zJbNe|^Sf8jc?F%(si+5xM*^}V``_r%VV=sX5^&whV=%fir&ejw{Q>JvU<&sK>Anu( z2^jZ6J@|I(Ou#tLsyqM2Iun@e{3|-+#57H>zXPcdGX7?71!w9}Jw(6E2m#}zyS48A zuyrRe(H*N8{|R)sH%Dcd^Pt7kaTJ{HqtgQ8M2i=$G{d+5f{hf?R0;`M3dhD#_z3-y zLIRe86?F=KYuyPy4fmLmt;6SHTNVUv6+UzK}mx8tZ>fn!)dDDdB>8maG=9C)}(GBRvsN&8a8C zSe2}L6=qX~4)*~OmdxTQC&H3juR>8!dGIRCbyc#Cr&|b1Dd4^%!ovDlZuu(aTIW6f zMK}#!yTKE{4!?|XO_&6Os+0hWZC+@xKaXJds9}E*!R}kbQoL*oN7k_SN3f^Wu)hSB z?OAR?qw`g?4c%-Tw4S;nA^{`9kr65PkzX?sVWunDcO~O)h0(YbCK2pFcC^@~w$EB$ zg2W5?!bn$G7@P+IQm}j(2lodf>sBaVS|17Dy<+_mY(>X$NxdZ`k7-fz(;N`Q=6Q0u zIdxDHxhTRTX8onBxB&J$@jD5>tMPjnKUv|*I?1_j8FTj4tHrX8ifsw8D14V(h_o0} zct}*e4#~wyJN5b`qPAY6vEC&&EZJb_YRBXZg7q4WbqcTV(O7NLBv~$Qvhhu%xX@TU z9Z~PZ|KtSVf57H=VqBOonZ%dn!WXwfp&MUdci94a6ix|f(nOVzDbLws$cXA86)Zul zFCB*ww8~PSuOnqubS2o@vBu_B7zu5iw3)D1Vj0;a=LSzf)-tj16e^bAv2vkFc?p3; z4-!DA7*tPp?$jzxy8p$x6R_^n>+XN0JDVH=#vM(L4gPoQOu#s!$+6D=u+9V~I78Pz z1#GPuprzgnJWZ!Q}CwgsO< z1#p9#@hyZ$3(QtJcrQUlurhcbKxuzmt_%I&p;Mb-PpR`nMyn#8UWJlZ74h>#SgIl? zo|ITs3d<9=SB2xA)a`8U13SaT0 z7r3ax=T*qxsz@B#>d%l@@5h4c2gyITLTOi7cPo_i;AP;0578I*V|?H8b5eUwak8y( zy*+;-g00qC<0m8757w~M6E=n~)UZ?$7W=ar_L&H_-Xmbmuzu@3f@dSxr)n`g7s39i zhJ8MQt@j>&AHmKUFntxnfkP(P%hvAo;Q$7nf+R=Fhk$`q;jIbw5$ny^@0nnK(b{b^ zR6iOGA)CuNgA=HkU@u#{jfQ2a(TE;nf9PE(Q|vKhe~9|X9TC|Z5vd!IIy~|>GC+ja z6;X0Uh}?=Wra}g5e@MbhEa(p{Q&p{c-5n8W9g*5UA{DhA zpVGxskyVk>t4L{8C<_6mmwgkA{0WZ&!~3v)!d!|4iv`7oJeEsdgm)i}w_hbRS;Hw8 zOyj+Q{V>+oz8IHhRX>(uiFU%QyMQ|h3$1fqsqCdhq8lEHIZce#R#;<+S@3D1*Y;iV zsqK4WeDmH6x~0V+fI!n>a70Oytx=10CoqNkG`h1rB8nqj|T^S?f$- zvU4My(OA&b#)6RXXGWAZsvP~Y=_6pgu<5hzZPuN@M0d1VNuX;@A1(E+M4V1`L`jQj z&JfCvI?+;Z>6&08@idiqLYDY3G#7?A&KsPj&4(Q;N?~Z@CVW>=Sgh@wuv42cVV#1K zwds;&v}kLQT%<({?xk`?Ivgi{`~Q4;W`M|4FhFEMRi(5%;XqX~?^T$ys$|a-*{VwZ zybANCGUQd5xvJ#Qt1x#}$)Z!%{vx+YHpYsZ1V0Iy|ENNblnBH162jE_i}j&_c^q>bkd7*}{O7DZ~7LuffTzv+D#>X+|B*s(m*z0WS=1`ksFV!?JA z@!%mExHsYvG2_9bV*0`3FlD~v=vqBk2@2im|(o|EG20FI?);7Nku=9CxV+*8>DYxn6&fN!H$NypJVX5H{mlxW}K zv3O#rC6-v5FCPYbb4u2Sb1|>X7@Cq8l>QZf36%_2!_)SBCRW1sT3rNAmHd=Kmc*oz zh&5>}fx6BC&aBhq!Xm)?Is+Hlb>cYR^mgWg-mHUF?H3>h)!jiNM#-(%_T$BR3IJ}X z_5c^L&NEgGz?_)?u_`m@R~X0WTzvW)hu7={rXGiwukb63XV(12;V(|aEo>Yw}&a06m-5vLei%8w$cZE{RQQK*CuqMDX8KJ7Jl;WG#`*aj`gL?T^@VpgiIdJa!Q z+5_K1D=-(bQsoC-i83b;ZTs^k(7zjHBzPX8)%QlPgvZM$S$#dY;|gX8n<{8hRWw0W z$hN(jdU#H$FYT^o6FnuPo{}K{Ih@~RZXt(HQ;^y2%|W`<#oz$a)~tt*BkOuVMKB2Z zsM6^>2cplqJLvSxdafT~A~q~s=7ont6mxMeJc1_J$u-DXs z1uJaEB2ckQ8JB6)sJ!xDS+aJmA~Em~`0)?0MZ`tpXi9F{hA6OL)KuKtWU1K;{sv!I z@<&6!k_i4z>$Fs+$;~upre#{n=b@Ol*(H%A3OrSQV@>K*MDmfgg8L%58$sGa=$_sx60IAx9#vC7(j5^6}V7+oJ)(r4e|)2)wKgtIz1S+=dI( z!lUY5!W9vCRRlgT0v{ZK4~@X9Bk&Ol9|c;&V*ulR5+(c|5815&Y!}3k?;(kaEdU>FDz2NRW3b zd^AbDCW7Cjumrz80^bnv|6ahkbRy}cu%n3eDV4zipz<1uZL)wRS%3MRSbt8G4+Vz( zlqLtqq8uFCsL37Vb1%q#ufGXfB18ajGXeyVLKWG_p-MpIGKX0ssX12m%qlReG3y;< zPR+(PEG4ExABivBgksDzD*P70vBKKgnkhtH?q4|_CYJt@k9De6xWZe^pflGT%`WFwJXQXBJe*g)9Qxg=vK4Kpfxj1{7-{_zx-P^REcB? z`X(++qcTco8Z%AhmI&)!!kTBI>V%bz>j9J9RmdE;{?>&3)jI#mncen)&HvbNBs7rwPhPy}2*_ z`O@WczjODh<#T_2@4d_9-aU!b(+!P`#nV_~bHD$^Czs6~={oQ(fz&T!iOpR({Ly7| zzxL%XFPnSj`+pFLWoj2j8q-MUrZ=qHf9@-1{BZxd&mX^3Lu&gGlYRc*VLM$|Uz+1# z4{LBg)&g5%acqhf2>0af3l_TFJJz>4E%8#9+r40Ysjns0;j%Gw58e+R2KWS%*SCp2ERvBx9jfOV*SeW~an zqxT`pSsdF4o(2%t#~dWr=<%7{zsziOt}o5t@p<}hi37M1fbLW6{=3a*Oje}!Wc*7$ zgOuz-7V~iqs%F-S>GLWkAF$3v2F&|iblpv@k`G5;z|J*$tOKNuum+ENYU3a*S#Qqf1TQLL6P{Izbmq=~sw%2wiwQNan$RhVZxG zo=l7<35RRoP_x+aB(=NfvN2Kjoum7}D>|)XVls`GgHn?}%g6mvd_6ibmZ)bXh# zY{sXOx*4Ae31%EBWO(6hMkl10ajTGH#;rn<7tVkm9YF|fUO20UAdy};7vGK7VI+ks zb(&m1T!;y~o=QeEKg1W5- z+psy!u&rm-@ZsW!3+#eDhza%r$0_R^UoS>Gi~W?S*DRO5Bi(=n*oWaG0;LyopXTss z02M#li-Dxvn!+wOIOzsQBr&Nj_+ADGPo!il)@IuLY)MzR4@OWIr+^ z_dcR8i87)jv=5rNanjDl%}JzA;yHuVS;w^4rjAT0MLaie&yS=5^kd%6Gnw8rOw!#y0u#r5&5g)O9l$PMX zSRh84ShBt4Cm`ilY|&UdECVMB0p{qt@>_TpB4w!NZRP}7c?wBP@-%CLr>E)3$Zy9W zlo}VWMi#t_>MGIkMe=7Nq@;oV0X!(UkiwVa!oeerz zg2Chx^b^Va=44^BBzG%4PAab-@>Xon!1i{=JDx(6{W8WD=_<>i?3yuymPewM6 ziP$!=Ps+R$cb=D|N%B_uos^w>m>u%?Ck4Ugas`x~J(2lv@`+f$o56yv`MGuTkGIIQoB^^cv-h*VIVrh>+CzdPq_x zf}6h;4uG4=L~v7i2X1osy0r(~G@JuB4Zpz6$An8@rm$=Aw}dln7di&d)<&gc@Z{Id zqSs81C8v0t7D~t9VVYd~;EMlgayIu<)(q8y|EJ|!^9%V_ZbQD6wI~r4{iu9vL7+s0 z=`0bg6_jr+w(;^UMI!S3v=m`CKn3PbEu5{Yc>mlie zI0%yv_rH+u$t3-s;U-D?pUC%QdR{Y&EQel?e7{<9kR>UQoyvFI`9;ieFh+W{{`Ly= zOP~!^e`9^Y$)^|N`V^qpmigNAt@T5p(f#Y$gR5*8IV@PK)$YdC>Ud*Sx#+Z>HFsUs zstRj{wOZY8!rB(VSZnQov8!C7witV@O)&Oa%V6xa_QBY-0-_cfyKO6s^;u?9*8s0O zZ}}6L;9Y#aS8qPBHfosHvEnhn`NqXqc{0p1-Rvmy662X?td@DkYME!OmU+f%nP;q) zdB$p)XRMZa##&>ZvDcVq?7}=$5n~nJNms=~=6Su=;tSC$Flu^5J@cKK`KCzblanPU zIX?5oYBO)FHuJ`+x$X3f)wXTMs=1wEU2QvOTs3#ItZS{!GtRY^&)9AIXRIO!vL;f? z{KZl)q)A-ytw_m#fhFI(cx$cXQ}2I1?M68Edz>v38ps zYq$BacF9neXRVSUyP8WnuK=A>YB=_jdFq0H+RdG6Ocf=$@`}+{6$kUf(hqGQfM(jI zIb||G)Is5t19ETbAlkRs2XvV=_4cSD_597U<=!fkfk&oHSNh+_NbZHmTHG8*zbfyrh8x?8F8uVJatiS=Ufe%p^F3pH zzHi~UG+c$$YI)zj^SonYi2S|AvgL||j4`-QuoYb}t_vDOmq37Tt`Lof%)9k_2`4mg)C01ziwgaFK&-UCM=s^$A=c*5Gmu^oMB0Xhv6HX$T*sci)~m*P(r+j ztux6Rw=`oNNobM1R!;$$$R|_bHUyS7)5K5Tm_huqE7>buj&zyN@FSWo;Y4`2qc>@G`-% z+yqA;yc{^rdwKFs2G$ueUibnip=_`56Sw>X0)Z2PHC7}mpT;h}dXu^Fcks|0OIAJs zG`8clfIpQ_0WM|Z$;u}Is5QKwEaWwW02jUP-Z+eZ(n!sR?6=kh?sXtg8_^&JPFmRsr(GExfu5qz7cj8 zCP+{3$W@uZ_??CIYxZs2y{TT^Q+S-yae>`am~+m&%S=Z8f>0;};j@G^<)_M}H_t&g%gq3TcXTyXpscSnTWUi39ZmHBK^|NUk zcv07NL_*h{3%abXQ-9QTZ)80(u}5{?zP0!wy6$Xvo?6#I!!geAWa=?%u}bY65=x~e z0F>If79ju-=UIdR-!ozn3z=YW4n8g(Z6$n`!c+uaco;Ef;Dh@*wF$r#jPwu}EcXJ_ zKlN&b3Gl!G0jPy{!05)oMw)aVvF-${I}SEl_bT1jAv^)&j*}18`AX|dz&PXNgLNLW z&IBeqztuVunC$!(>r7y>^V{f*EL>&Ge=+8pY2ru%O+Au8$b_Gb>VhK)mcXm&m+T>6 zyzo4Qb$`2cCos_+#XSsk?K}l7_45?x(+QjW_45=L&}qOp(NcGM6P@gVPFl=? zPNa1qo%UuZ>Mr(o&g7mO!E3U*6(~3pQ_^Txu7H0%nnTFuf2^K=#CZ|pl;p<8NxY`) z%|!rbM*~j$AkNEcaT1y$&SktiwYn5l`UI$&D^$;Zlu_W%oNp9S)WaSkbqb1r>A4RP zCOyfz#YLv)nkhb8x;FlY`8DDe0Q9=dp5HxRy3*JRg zvDX4bQ!RZByn82q|8$z|Sx2GN6RE9=z%sxaD<(yU5BdQz#iLVHqytHMUFLKbR8 z^(y3HRT$}2$i%8}(yNe*Rbi!9AsdyKUWFAvYk^lGPpcyO*wFlLGUW;sHS3$!Hn+mM zriU3XtMM%E+=KoN|FCmZM^kUFy#oge)e%g1Y1A*xG{pQpP0Ecg5Bxa$2NPs zkQ~?Jg~Iz+JM35sM~$fA2-$q>^mJn_97|Qhi7rJwXmr-2OwD;lDn)lhYVU|h+=$fK zkx}ABa9t52yqX~x$!vv8({nu%UYnqC(Nu(k72#Ng<)P;f#k(|EI0m!?_y0+)9}$@z z5osO~Ij%@?S6ICEPbSAb(&HJ8m>bh1qrE%iGHw!$VP z5ttAua`b*Wqot;)Ej1zIPZ(aO@5A)V+!2@@)ko-zD7P8&7GrLvi6m%h5`=6LTT!O< zByOc&b_NI-FYF9h7JbyZ6PV}@9=#jr8jonH^XOf4vYi21>L(~~gRS>_UZFqdwf9f+ zI&l&PyW1}=<53sv&he^rxAam54LzUrN-^&`G`3rz4E3UN%&&DHy3jA2>+%FEi;1J%5u)UHk5hH@0Di$8%)_W^D>_L zfr;O=nIgy9xQoatDAK9zyhx%p?jm&xN&#!KA~p&N&pVYH)1^qz+@FLjj%)7k2lZ}n z7rv&smxO{Z63uv4244o)eQ0e%P%B;><;6wyO+ej;4m{)f!B61N_62HtzBLE`^nBSa zf#k-M>QR-N;fWkqMT9+37*!$06Xj49E_)SnSe1ZRA&aZRXRksYSB24Dg-q6}gXU;`!-)Vn+K32)5pCUmL;J?>C?hvN6=}H=z2l*m@g(eFR%?<5@$k-+CK=Lj+rIBJ)<$kuW!`f(5+iA;hTKGw~9+1!4Fbl_Dts`LEC*68L<*3mRs!?Ol37cSt zOt4S7^?)U<(TJ91f4R{auJ;qDFWnIl%n=dE5vlVdHxVxqjAtkW7U8N0!zyIF_7fz$ zwtwTIsYoeQgzFWSsrD1ZyR??3pCF<;VYsDgI}`>qB;Bo@G=7-z*4hy9`78fd-(yHr&vii zvL>w`XE>B=g73&W`*BW0j_ifkV)Be{iobwaFL&g2coT3C&(8VrkD&^lp60LiM_#6O20-M8~^x5sL19 zl>}mIB67)>_D;bhO$kRYnY%i6J?F+MLc+r!LC$JmhE+TXS}{nU^Y$y5A^eq3MX;Xk z8Ts%u0Zz2Q8w!FM`w9}d@{`Qi4kSNHC?B2aFIj{DKz!LE1OVdSh=BPin(N%)ub@8Ut=n^d{G%T&-x22}<2t^^B8U97#A9n( z{P-H20|F3V-QCo`6voW{z3`pY-;Zx+e}HdS|6F`$^v}Sz`{4fRH0JcT(3snwpt0K^ zPKo5#;In$LCEnt%9!%ndQDU`RPY&h;j?DaO`j;W~{UO)oGf*UW7VAtHjfwJEFt~yC z2pqIN8!&gnhUXB#C7^z>h)HQbJePJH%FZN$SCGM6GKuGY&I8gsYL&sl4L5FQ;sZaG z723qWXY?T;Jk@?a{2j}?pJUEnQMZv>T*oOJN3*e>lCVUE;u-&5}#0q^n zd=@F;#PdaT3n#ce6>+fGq`iTN7lAPLjj&fP#V2aN z4ED8+QOuhs__&-tn&f8v=26y%@Csn?X4E&peB4f6p)KxZ8Sma`mOq{)yaIrG?7xqV%;u{0RQY%Wt+F!s(S&e3%4AGpl>Q~>*fGE6WLq0%Z$M65=l9Of zzSYn|EZ+w^8Rl}xNbm@XqlC-(u~CO&61)w`r?<}tuYx)HFZcvk^YeCmO0j(7_C0rW zdL~Fz}-E0TvJ$A%c{Qz&ZaQR^lG7{|P@=kkLoR)TH2I*jZ8DM=uZT>3K6YU}Z z5MQ$h0f6|rMF;@IH!MN`AnvjV0f6|XMF;@Iw=6;cAnvvZ0f6|nMF;@IcPv5xAiir6 z0s!$nix2>adn`f#Aii%A0s!#?ix2>aA6kR}K>UYA2mr*7EJ6Sveryo}0Pz!x5CDjK ziGcYt>mUFS_gRDhK>XYy1mHaFT`Vg6;TnYNP()}if*4HPJLapAR3l9zA2g}0Q;ili zTGg0AqaMwy@m4%c5p~5y4@?A?KG4A34K#2O1dTp5=Bu%ghDKY8b+;B9+5?=!!Mdau z48p8R?$Ms=9{d%MZ!dfo9Kv(4W)|e|=u^6THV)2tm6=#i!xH8@AlCT>$wd1}jfwn% zCleIMU>}6AW3)BOlKR^4FTgf*(r8E|VIF6Is{cuB`CW*udOyJm5xjW8w2mr(b79ju-4_br(K>XSw1OVa{ix2<^oZ-@B1puPKA_M@!wFm)#@GL@r z&e4Y$C%Rk4tifxqMnI5sbPOly=n%=I$t&;lHIzBxxjQk`P z=@q8p=frT5-fIYVfTWihpB@T|=@E><(=+ly?5_D)4;SU< zuEOD77wD_p`1Ei|74t_d((9Nie-pz=dOHh;TJamLEx~C}AH7g%FTj0x3VaE^Ru5n&#{WySbA|RojP%W< zaV-1?dX{}NhO5AN;ghh$uDz3mb10gS@({9hMI1qXT?>Mi_iW}TuKABuyM!;Vo^_Vl zU;e+8?-o8bTF-dC)w6jwnT`hsk`vf)p`!3wco27vLtlb_E*|R&-hl{Y_+dbfKgxf{ z{7H2?<#vQ$On!_l51!-vO7LYSh>lGjOfQt%feQ{Dhx!F2bG1QDhp)W)I$|73d>uv9 zsPChDaw4vgsXopWM-w&s6Jk%+>`#h4RkJ@;vj?)%YP6qDZ)H@^iqrg>{W-DYu%U5( zUhMQAa6^_mx<8$6V$c`GX<5zwN3k!j+5c2?4`k0*8P5TwtGsHBIv8W7jItN}4X;Gp zyL?lbGPxi8Lk(xV!oo#f8rxaVI2GS^`F6^;aK>7U&jVKGu!zq>sI;0T?c(eS2Y-ls7l;g})T#!d-O+ z%dK^atx%zb57R@1+Dt**tq8chiE{K8rdg=|RgJ%^!5$5e?9jk?iAa^T;4c)ZcO!n> zEcQMa)X%?%JNrGZJeqV6+7)UMS*O|`S^}$0^uhOpz3@hqVITHL3xB#10em*@4}Eil z`1GpussYfAq(#ae2ZSpu`E(IYgkZ@JVp;y_Vw=HI4)FGFg;Ibr3Ez+8Fw^$}tjGwt zO@i4LV2MIZFPMoNtMFtedZN-s6snIHZ@;A}`T91>4i7s`$`^f@cajO>9RYknHw~#d zq>%L{U0h+XtUtuE_DF8TFKZF8tV5C;!BP^K8`dPuLLH0Dlq~Nst4`kCO5SaOh+l!+ zF4EjS3h&SXG{Pf+3O2I53L;+2{?l;Ke2pMqhfI+#`Y`z-s6mh~TBI72R#sxkfnZsg ziDgxm90-%L)^?tncKvA$!9jdYSafIbEaW*Ke2?jk zus1Ps7j|a%9D!>{-hh>1ZyF>Op5xHrQ~S9T*FWyu70)Y+k}=OKL;rYOV|5M#P1-YB ziYoveZwVI>aSJI3h;Heuu&WXND@vEMjcR$vS?mvj@OBv=v z@Foug;^q^KAAqI?3~vV7ZL3naV2GTEc3?lGk< zXMZUnyquDCUije&d_VwwpE2d+yX*0w`?~9Rwj!Q+QHEN2QchvE#*t%WZu~R91N3xZtymSb1NJq z)fwXk-&QpH>>6wNY&P2(kAkWdw`tPh0!Sqkhs51xxsdcpL=2}};e?w@T5$JM{>NyD%|)dmt)rOr(fe62r-=Jm z-p~74K8gT6V{{2`12~@fy7#!>2~N;=R9&ajx$Filht-oaJ>UjsfsBv~4pe}h;E4<< z1OS5FC_JO;X|DZyek7-r@Bn(K_D9 zC~zY?PAxF4gIruSnVTN{U;J#cBRolaR-T5k$af2VxkJgGR2$3zN zYJC%|xXM#TiRT064V@YdSP*;+(%}Ly(fkC_^n}=wE;00kJ78}NU%|HtJ?cbKde6Zo zCMMR)P?pl6@v(D0I2!n%f)DfHIkS<6BSgQDMj0@o73A;{*&#|&_j`{roVUOv1YtxXa0b+m@p!E&l}yrh4K4v_rC@&j4y@r(5}d8IaN1-b~{1{#Mi zTMosb+kPg-8{0*^zOxarVm&RRTY@?aRg-A|3$nxg`G@Rzu;fVXjB{GX~tOF z-lL`oLKJSM$5*?qg{qxx^NnYk#xucaKUaIOy`x@Vi^dU)hYvwAP%YURwl<_ZgOPDE zQUKoR%r(N`HjxDFOYlw?{waCTqA#&TwA-o$`tQg$@RzNq%-&?W66?`YxKPL5HS)_WPZ^t)r+0VYA^{U*9i&{e3Xs=m__)|`@m|GHo@N=f& zXUb_qcZ`47X;EjQ@N{QPT!$FC&i87liFMqj1qJuOtJWNBl8CRN|Lc>G*wO|7{|10304qso!8FVi%tn|# z%>2N?fD!`jXZ++B4j5ngg#lLjFGTxp`VQU|D$ zTxxxeMyW)0u38o%9|7;0lc@#qRPy9f>+nYq#cGQ?x*RT0#Utpk{+{7y;X;eFxEX!IUZz}!KXZspL5nfK^k1>}D=vnq zARj+&4sh}F@hi4^?dy8I!cec*0keImSFbjv4jzCz&dA{<=-g0u+ezuTnvJeM)arPN zq1Fbxfw69Fs~bO@S|`dyZ|uc<+%Grm`6)rjufM_rwhN&p|J3Xgh9~^iRzx64j$*G3NYbR z2*Pzpp)lCiv1v2=L-#IBqwlvG3~$6^zXpe0?gm$AlC4_JDcs_f!bMy~zrCsGb~QOk zKT-ZPB|66QmZ(j|Dv8;S$L8zrIBf5m=XbxnK3(%1cX8G=>NyV2aUDTz$B05R@)^V% z?#?Kg3D+$z0?Acf5NQY~6IVOa-e=Ehe$JV8x55r?P2S@cr;qzOzKDD78Cd0BSdTmA zr4o?!c-1Mm6UnrNpT(EGUiuz~V;Snc6s!wju2aI+*X?=rFSq1mF)8;s#F0h!|MOxR zudJh0?$ya+-(juxRk>{^i6Ucq*@o~7uxh!+oZq5ck40K-C`LN>EtFkb&8d8SkJcCA zKffitJ&5wT{$2+3D?^4~g17W`ZyuOBf$+v`+z=j5DB*EKczhD!7DLq{glFPSeqWat z@wmpan10suVlY85NM`-;%OJta__AGT4YrfXhNU&SKMZpYQjQ%?Q;#jjR%gya9rt1< zrqi<8@mP-UM`E=RudE+1#X5$|2y4K=F7zF{pg6GRV9LsJ{W1_1Tnq^c-wa4ANcis{ zuB|Qn3Jg560*XsnHKod6Mu|AQw_;pqS{K6bu)BERsu_k9G|WIy$4|gvY7q$@SE_p7zeR&d5n53nIPe};9_vm>SR)5 zPAGslD%p^YkK7H1LVMcn8Z{s4GB1rp99Ch1~h9!~a` z{{v_#9XGfe{Lds!DkP{7{)mym{4vb!yJwP6c}Z1ynFQd3fg|_dn&4Dasr4nW{%eR; zIhYUjVA3h0D>JF`PnkHyHIoYO1uT06f5tS^mHS|nvuNp>pqNug%s#85<$4JcSn_^o z9g`sKK^9!enKmWcykq+9EUISg4*WSH%QhFPzcA*1ikYnZ9ovwrOfcJ=to(x(CYxjD@KNzY_~O5xBAb_ZBwmiJ2CeD1qKt!S>@kcdrk*P4wwHr@DvTZs8N% zQ@&u~N8N$EXZ(E3oBlP0IaeDZ-0{>is-+uxt-_9|UB7g6@Gx54@B!ovm!BrW2La%X ztlt6Y*SEgvYgs8bDQnH!+Y)*+^1U)cYeb`_GchuCu(`LTLvyU+gj)HQFwH1hn3~P1gX^wwdf+iypF&{(ejIS$Gnj66cI1CipKcx@NdXEJX)==mCjJ3ZT?Hk8>{Dpo zHaH!dbZ(h>TLt`y%$sTe(Sr{mCDU`ntZM>u+_S)E%{A_0c>)w*(mGkf88TUdk$wdd z(7EeQr+vV-+t}y5Ol6bxXObQHy-7Z+5YiK3nds`|SqhHGNgXMstW{9*Mene|NmNLBb8T>bEQe7C33 zk4kD5&AsB+IbFAF-Z;)U02$z)S@WFvzXxbYvd)&r%3pv^-RX4s z1ixRJ(y#RS&qcaxg_l!xISh_+xD9HRLTEZD%wweXMY=y)gS8@tznA>iZ$~lt-^ZDE zvaJ`c+&8=qG~kVijb`rnmhXTaJafVc`HgqOf_gVC8NLnH!a_e8ZUJDN!yc3dwjL-A ztotc!FIQ0`nbuoByoE22phk3Z{gjr7Y}M3R>4CS}HLJs%Ip;$m;*aMHUWR$n&Uj>d zY)mOC<+29>JY#n)>_*aV!2JhNOjP!^FNimafW8yx zumK;r^d2k9vI_An4Q_UZ)q`v|ZURCx?$X{j#A zyWvS#tVU1vKClaFPHGbg#K`auFs6qulG?m%LV&@rx}LHQ@t(|hgAEAEV^$s5xNrel z?kf+#MdB7&mo2uDji^GWQ})6xZWjGF9zh?i-J1Q zA|8SeeW&n`nh!?e^);YwbK0LT6?1;7G~Yz~C;AdpcpAk>!Q%j8Yj`iF3YO%+LYnceoga%!4)q_YPP%(-KJ@_3cVx z(ItHeDTRN*$JCoz3In%5v}?BN98`zm;yfN~m>Y=*;_L62j#-Wdbb1*}CXS;%a(xv8 z4EzG+NuV~Hx8I>w3E~-DI6yC68bNWTqf{~p{FO|Q6_W5}){wu^t}6!LLm}vv1y}YW zQ|7qxRKj&$B45g6E~SM3Kvzv`JyO zgK57^dtSE(DGA?-kRW>~!$%|`*+HqWs*G?ZQgs9FTXMq(=|>fZ!E@)5;xW&hkaZ2* zF@ZiK8~hf$J{j&n+NG2)%VP2QCBKAzAsc;cvy0EZH-TO(`)q~sp-2ZrYdAlA1;PBv z-Pn%O7*}&hJsO%Wb#MKL23SmD`ILGM+n~^$B z$#5O!50J}KL9a{}HYVEpy#nS;n&PuB#;Su5)|~8HX*xMrlafx(F%-V}5G2~hcYWMs zs!%=v?p3;}k2Eh!lP(b=kSriWuJHUKHR41Ifo)m?Nhv-JZdt?nWi$S&yaHV+TW%TcP>O4r-P4n zy(jH*lMxnan88MuYc_s>30xisCKcnl1+Si4KbcStN4pBhuE}r7+50rxKX{F_;E{=c zJ}thK_y1nLTH!>%LDgbe1VC_Ig~!YKfma4Ib0mX9m~%WMElMjDL-Z!L-l z`1y>VPgFSF5Mpg4Z5L4vwu>m(g-20=uWTZC6Iy5(TnM3+izG1EZWqdE)6-=vx1^JK z{DoL>NpHt}gBmy)rfEMX`tXoV>L8mG+8_Ex)JaV#X;MmRO39t4#N+Q0RukgGreaU# z3;Aq3Y((O@ludA!Nl+Gta?CQ9i)4uiufTRDrI0F|WXYwCg_A6~#(coVn@oBgo}a`N zPo)Xb;#6mxwJh8VvOMqC9|Yes@%;Ju@JLMa&l8QFlh-DX$K#Ss>oUzJ<)#%2vCOpi z5GLdIMxa}-hZf9CLz_R1kHZ#*)Z4%VnQ1Mt0eAahcuZ2$$~3J#zn~G<-m7dJ_}KP6 zusF2{F+CXR!b2gMi7#pEu&pcoAnWQ%Y~Ex?l!S7RM+@c^W#R=e@n{B}XJMWN3p=g+ zBmQLkS^->$p9}&F{&<)@z`Ys2G+_P#bei$o2mmKqYk1se!$OitSzQj&m7${`F!IQ3 zIfu@r9*|nwn6+j|SWe{;L{UXXV?*S0U3?{?3D5xCt0YdaRrDb8`b4_?sZ zcJJ3e9Z-L3vDNK91`iD--0pR2yY|NM);u!K^#$BHD}V5|e*<9mAS|RinB#LW=~(+= zMcbKee#Fz={xI1ftC_SD#zcUGvv#!ZHNS*+^|Nu(jHbD(FuQVN9MRv-{L&8@)q%$g zg;7~Ds$)^g?LGx;ixpdE^>(*{=j|Ay2xx{W;9-Na2BG=q9z>~ONpncUAx;WE;#%-S z1Be?M9H$MxJbpOxguQm)SEoeT!~{C!f0iUdEcd&+&KdB8n z{3y!SEJ7lT1kBQm!Jq^{5Fi1IQpFZ;)|y!7nqIF{jl!B(0Sg%u_VquF%Du~d{oI#J zPj+7}=l4*}<n|vOS*j=CRs)vi7@0t`2>#YXe((ft# zZh0DXqGl8>a*SVlRsj;37BpJwgQk2Hnwz*VSmjV$Anpl^tNM zNJQ$iCwm3XWIN0EQsWpI^!eosoUg#>oaMU~c{z)HB8d!pkUqts66!tnp9Mbrr;9TY zax*rM;&r`dAk3w#iCE&;LeutHaQq+~`~F*}1^*jU<7wR_d8YlnPN(-ko%_Re zMjznq)X3K&n=b)?*vBFS0AjI42mr(qix2>ar4}Io5c^t$06^?#5dwVCEoWH@djsoI zrQ)?xg65PN-O89?_k%P(SWOoqy%5*8r@2{`!MqS-e~j?N67h_*mfN%h0Ahtj2mr)N zix2>aRTd$@<4TCv*E;+;TnjY(GknUQ#^{STlP!Z+H>N3efIK%|?jxyK1?Sv&Ov)37 zku!7CzuaxV;LEsN1+yYE;2Ng*VTm>t=U~Xr5^Zv^IwX!6;QioXc+UsB0fq-D)%#JZ z4LkDnQmvQg45xp!oy*1fDwH!0J7+vEWLzSVK^EZCSbQ^bdMjCx4EG|ogimwv0L;tY4D80+plN$hWgcdQ=#e;*;Zk~R#OD^& z9&ETI+rm4rmeLaoKMo@v-i9xt*or9nK93xEJMs_IDn>F~hOkKYqi|k2qPJOq$q&|i zFwa^jSxcif{e=fkc+{?8-7F}v~2T9xH)(>g=27e<_xX>G1E3Y(Gf zEFSHN5Hnj`3YrE>-!w0gl-eU#vlV+3Em>_&j<7bFmoUuJCi2p>-cdL3Y2Dkq4s9IptzSszBOPv~ zZD*YyaLbqzOsfT(YdT@^Ld^4}c|o??X23QN`$)yQ;Q{nm%O67NN+dW5l}6jGx)|%! zs*C57;Za@eNuDlXnOa>u>#({mrnshyRJRmY=;Fmdc%8v4#NHQC#uTc)|I%7im#CUD zwz{}@kjfHt@hv2jeG9HBpqGL=wGt8oZF2xCPOQ8fDFyrBgXzFb%n!Sfq+5Lh9A!c; z7S0A@;BmLSCq3?s4^{htaF;er03Z&s2mydN*dhb~;t-1v0Ej~^LI5BRvj_n|FV7== z0_K~*H(cZJ9)NDJ2qgI798d*5t$?KouZY9QFTBL9FjI-}2v|eTF_M0gbZCc;DI%XmZXXx7t0^?>0KPyz#A&^b>bDVz(6mY<9YFLHtB zHRK(J)yxyy;!lJ43t9edg*fi+7NE4gfWayG9WrO(?#x(mW+LnX(3Euhvq|x1g5llm z+S=^{h z0C9vx2mr*979ju-M_GgbKpbrm0swK0MF;@Iu@)f!5XV`B06-jX5dr|Q#v%l`->nP* z!8?B3%87(9$UZ?ZxM>8ZGuHwRPDd`Q^ryai&v%1$KtaPTUdc^F}ud5Ja~@67px}-x0ys6hYw#}i?C27A(#-Bl!H?v9ud`@b&q-V zSg0}sZg3hsO8*hCNWJ_`c9!_%J%OvPV>USN z=sK7db3%kSo;Wr|C%e8X3lXC45DVm(Rvb6QXWHymCqK{5zrFVOu+;t<;`8J__KPRd z7oD^-1Y&F3J{Vgyja$R>66dW!?^N|+#_8zQVLN)g&!b@aT0G7fOZH^PlNWGgL%ntq z8AQ<*04)HPA)zdTv&i>5+|dItXPj-n%qPM=pTC zU4o2QVh2n{3AX{0N5XEvj9U@_%mgHr9yj3b%WwlefVrnByi{PxzK{SsHzI_j18{{f zi2=+5RN*K-EW3*ksW4CgAVP}}0Emk%LIC7p{FwC;I8Pq461(d$Ydu_a%sMF?6dG}D zcwU@m3sxH*>h@-@B_3Rhj1*c@E$QI5Jm`yU>u&|d#pHO%9g4wKv|)1mYQf4(InH#n zBwJF!dx4UESkjq`crRg_m3B*AZph7$uBbaNpXY|+tQ-Cv?chB1-#Fzt5yn{vu8~M{ zxUqTqI9lydihQt1lLa4BGJ8UAnjiYf=Y#7kT`6Z;Bo0ov8pmxl|Eb`SXtr?#B${Dv zqJAG@bAw(i;-I{P8#Qk3Kl(c6#&Gv4<{gH?VV>iwd=yJNg=L>5L2A*9Oz4is46g;A zdvw1DCF}++V$^Bqg}Z0nnN_@6g?+gr{V*`UQMV+j=rg8^^RsT3^|Mg?45%Mk64k-F zC12eO7NrWk+h8)fGduKP$__oWptm4l-Ju7|t+dDvJ>1hEJM?09 zXI@Mu^P8hBREoPbzr=Ti)3*ymN~l{Q9eksP#e)k* z!C<-D4dfYO_H?YPV(N5@<$^K!OqMcl$nDDNh=p>w`5S`>2 zos<-n)aYuY3C!xKHezeaoyt|wL|%s|o|NjH3iuu!gVps;*%`b|>&Mj|24*8yz^B=` z$w0bs(+d_-V#(u}^9AI2BimXxNCS%#r;UeWxS-Q0mCF&x>+i%PL;$!ql%_o>Kv*$- zSSzp6FGmGzkg(UWt|qEWAl2E1S=!(`gFO5yL zo-FGKvqf{nm{ntr(!7mhrc0O~oqYDH^oD*Rec@h9>VT^F{KI&kIIk9qb>Z0NHFai~ zz<8NQ1AnC!n7a8C@R5I$;z`AD13$DKID1PiGB2b;2@m3D(l$%*Qpl{OR44P*GIaAe znlR%ce^b#En$oV*G%4A7WSG$T94isbFREF&lKiD^5-W)T7a@fM2^0En-G3!*3M zYb$rWqU9~dv0$-zHsZq`Rv?CEs2><7&1KXCi&wM3M8eNu%A8s?V~?h?2`Ba|xpc zap)wWs_rU;#-WMG*%9b1?F*zD7O!mJ;-~bD*#5AO<#GEa^IRIxZWiJ3-7LcqcC!e& zBTQtRYMiH0pbG@Cr7O*M(xk)-fZjXD=yZ6Obr1lEYb-(lrSH8`6WLcW^PtzllRLWd z|6%V~ZWLL6|4iq}9Ka6nKICq!ftQ35I`YGe@Sd-Zy+e)nFz;eX$?_BnN`yA!zI{r~5G zzVEs9JazWoYtL)1z4qE`Pv{fD*D(Bto5j5>cHb=S!(;araUT)8-zn}RWB0qny*zfm zo9@)+=aFUjo`n4t+SB2CY532Ov{73I;OmJjt7Bn-!nzuC%UzDiyTLS+>JY`A+Lp?t zqz=4KiZ#g9PD^cMB?w>@a z*HN(=xQ=R!=nC!;F^x5F+-;Crf5PHxnU|aPN2AZz`nZw{)L??C@d+SF!nYaGo7F)t zdC2ykWtwQ+pVB-PGq3l-tKw9vtJbUzX@~B97UnqDs)P92j=Zsl12R3aTJLa_vCjr~ zm+iESB^KkYJ2JRU6vrVPb#db+gyq@^6^~hA!x3X;R&i%2E9`A;@5YAmdN%6>-vk=4 z#gA7?9g4BilreMRDk+l2tWS}}4ULSNeG;Rdlpgf?VWc;tB%zf`xrun{D5bDly-h#{|DOnf&Eq(!2+;}D}MnA zGo;h@e@DXF8KtSor8bvvd9wycYf9kFl1fKfbJ2Jp%-=IU`l)MeL)orjKdlVyldcT) zcciYm8Qig6HWo~Y~# zell|8#-$>GH6`PdPxp=Ry0htCCOcyCs&-~ah5?s=vV4&;>uV}skD9j1r8Qc zTo~mA^Drt_Z7dYZ>%9JNP{Vd7TkRad(RMdGoRgtU126n>El34(5UqYuDk#I`^=g$B zJ^P=K3ixDt&(NGy&<6|jr)o(BJ#cCy|JO*nHmD#8p?-{z43QuG3WYV%tDE_VV_gb- zZxFiM288(q#95TF%a??7g7F+|3njR>wh)JVOFJe9Br-dj zk-E+`Oo$W&TK|f^zAmX^UhPOoWDEK-oRi!)?sU=_~;{^wH{^LC^(__Am-Af zZ!=+L)*vs|wcZaju+UJ@;ETx@=L$bYxA204m}Xf}k{T@G@-Og02o?+%9Ek!BxB=N? z3uuJ8^hA-2F1^oxncV}u_=|`w!?jod_)-KA3jp^-0I>k@

    B(k|vAbh5t+4`^M&dW%+$STBb=^mN}Hyu^o>()XsWs*K66b?3wY-&Q2+jlDMOP zBT|+;f6DOBLyBvX4~GvaiS`bb8hh;>Y=g9D7fqTJ%_3QBfM$>eo1n;xyjZkFn->Mz z7XkXBKmznlUu=L4uti%S1^WG*bI@ z1>Agryi6CW_ety(Ef<*BPU2c_8>x2Eeei2%y$`DGtOsG;moIgo4fjufU1C7b>tf|C zeNSX5o zZoTLDXgkv$!?6M(Yen=+m;r;931cKQ7$3Sm{l>{rSshdHxgcxyHU8#xbsoOGGj_`%um&~8}HO#+2(nA_0CU*ta`0#aXBg8 zyf5zW*ITF6Isa6*p_F5rV#!>9@9k|Yc2(EHoikni&LSfEj-5^=JG|^&q3k;4S~Pi+ zSa`+{m(2%MIT;4-!bqVBP;9~Hb)&PHg31!POks(LzQ7>-^m&>29c|3(+g<%ovwdFN zy5b>VGCcUV#SNZgq)D;Y`JYdR2lddH#DE01YqKf*9XV5^;Bx8TN3DYL8o9l;<0#f_~UUMo>GmNjzmNYYL)2-&4OzriK2C|qr*WL5+$z7&C@)obdZNj zis?^gYS4+!MkRl3sdekux+=;GU=ozHOs>h5Nf0R<{Cr3LclOmLl5~?*PT*X_mJhxG z5bk+9q}ETk>PpRgP!L(xqPCv9`k41dwdg-WOXIQ8gWD0X@v1AaLCZ0Un|PZ+CW&b^ zu4jU8@F`sMWx9)LF;px6(Q>&YN{@~t9+P{o6IL8;`TU` zXykI2w+hhabYP}^`6BONnZno7|A>a-CyJHssYmc+vDfv8>Yd&7_w?h+eKIPgm_K*k zgvn7&Z(+^1fDy$}XLd`~$=2l^JG)2a8V(E4RZQwNw2qMCN^TU$G3_dnBQAC}wbWC< zjzwhk;b22gjZ=4HFm=Fr`Af8QcS@}M5sk>;99&-e7~qE-ko0V;$0ePl>ZuT6WA@I%mUxX~BH{>&FkEHx6lecy zz4=pLkr=3~4zLeTwBx)fUBI~b<#BnBOm!{AM%^!rB#7*!$!Fc1C#AYd4brH1ETjmJ zakgE<_dLXjg?k;Evo08FSY$_*A7Ztkf4`xp?riohb(i!4MP!JGq#k`V*$T}pbvLUO z`+Lj&PV*eh(vF2SF7|s~3uldtbmgMdl1)+3%8CHA+W>?Woxv zaC~ODWWH5i7UH*eG1FR9joLuW1ti>+`|jlAgel3gRpXBrG$S9M&HHh_HMIm%E-<^O zVVp9>jB-Gx7xa``2AQ9feV;}5y?wLbGo3m?wvEGyBkdwi7!fg}@5P9jGgTea$Qp0A zGfuB)K~{1*;jT0J&8|MMSd*9F5%R66n^=Yl7QEf;t+Tl_aQDJS}yilN|X*SrDRDGL*Q0I)OB#GdWVj3aE8@} z7bv$)qvC@YaMX3Ocs&ibY*_^)MoL3>ygpU&M8vHs7^eP;MX0TO!P~@H-dS5r?b{2& zXSBsFClyuWF0yDrY}sP=&6$#oGXwbISB`<|RJtr~6In+j2ia3XH9*a^Ag(vn8K}#* zuNp+3TcBjttFuIRRecSk;w!s3KEE6&%0#Af5fjw*b1G*dcw(fTi7Gn@S|Fid)= z_6Ftm;((K{R|y9B0bt(-CpR~x5gN_PaOi<_vgD_j`W}L%CSZ8{&!$%uJkbw)CT%}9 z2h|j;uW);c)+kTwu_43~!g1I4ahtXxD!;foDH_+ko0QoXr)=f{uraA0cqng6$c_}5 z%yxj4qJSah$lzE&oIL!wm;!8DR1x<9tnYvpDYz~dQJk2IsIkZ*Ub}=AFsT3=Mbu0N zMcj-BMZ7(iMUwUm38->4vP&&Rf|oI?7w=FGNa@Kc-5feEQ$VrWu+7*JV*#)Gr209> zj|tE!*<06RG6hJ4e7j@MQPsJy)kFy=YWz!sue!G>G2aiwCS(D-VVz!=Fs@aDX~c>(!TzP~CM?lv*FW0Rs6hkM2D{~| zSp#FP9i%QQ9)Y+NU6ALfHnkk5!Nfu9JmA}gIbwrP>!NPT9dsNRc@8=}s~Zp3iyGi9 z)2THrmm2Ji^?_A?AB-BxL%6_&Dh9#bhtiit-JUp1=YZb~q#K;gnV<((KmG;Hx}F{qCnyyEUD^s3)Lx{>g$*Qeg&gQj}v!tmafF1KnGKol$2a z1zhIE`k`kP+!X6+ChyGf_!Rqe36CDhg(MxqmZ_#vboD42XNEP}VtdNo0y>w{c~F1S zP9;S=wH6l1#wU4It~F%*1*t zBq1FR?Wm0XyDS>4pHDQz)lAvDTC90QibeX5D#MJ*HcR2^`G;=N}D_SlJ>cWrG z#lgjp%#^yjfsJH+*C7jc*ESlE%R5#bhX>rri;SAUB-}TFNro?g*eBLDr?=$1swUOE zzQH5o4H2h}b=hxhhniimAW*E&#z~jushjGIpgHI2GfvXiBuC3@ zWkEZ*tPz;qT~1+3mm9KNRf;%Y<%>XG)zn29bw>d zub6bl3ri}ZDfLV=d8UuQLt3PKAOZf~}``D>IDDFd)Mr1%rqayS z=UOOcjTN<)@uJ!iT+~~Fw~^qAnkJW!iV`4IWujV`Q9dZ=nz+zyhk1aHmjEP%1E73#yx#=d9O^aqoiKz z_KL(DBkgk622Ve?Zfxo#%dVwL4YbhK-Xsr6>JCuT4I?G?18dKWltVu|-Q}+J%f6qX z4+i;JhR1I6?F{jCxrcOh@ZMS1cYIg6s7d~syv0BhV|OIg;j_9npzXon?&xH}7-)-Z zaRd=1>#%k-2g*xI_hY;U|9p{Gfy)ji42wx(m;aRBQS5r$5RwYxS<|N>EaKF>v#J|& z^uwckg0F~j=2JxNs!9>Z5x0o)DFln^K&b$4+w(pS0UZh4YpXt$DR_`s*5vO{Zcg4j zJ>>u@nZ!-Xo@40h5uqHO)$zr4=Lh)2?_I+>rvpd+;@wjDCxhoD75FsshDN22YI}@> zwBBM@F*r?**%0c0YsVAjJScI4SGbH^!s}EI!0L&<&i0iRT}`xF2B*wOp{=vws;ZA8 zsK7zP5JYk^w4Rf0h&qWZWLKh2N=1*4-<@2(d+OB5jn$RAf1w&1pU?Z8>g@Xf-{(}X zyNIPh`Fy%R=p%ri6Sih0vyTbeX9UYymtWtimQU&58~S%z|K8NUxAgBT`uEi>m`!~W zV3c=#%g9VWE;QI)qL}X_3N-f-0b09=AhCxim^KZC@|K~9Z5WnQ+l7ATH}rA0g)PIN zIZ%d83zRO%_?LR;R4f4q+UM*DZ2f?Z2d@Fuu0Jd~T{j>|Yy4i)r6jqH5_B`6ha1nE z>+P;ycSme)ZHZ6N>fFycrKw|h5G=^|uMM|TIRk&I)7h%b&&m*x4+oCL=H8@FE?DQ< zF!>!dGtJudXHC;q#hdV3)h+MM)rGBvy#+nX?e&yVlPh|s$WB)tQafh!n%6 z<4&bA?7_2KV=*ucaR7M0=z29)^vs(4x~+I4pN+P|y%$S$%RbQHL4!HAgMZmh;0L@{ z$IL#ML2e+-aXOUL$qc0SKA?T4(Cd}o>QWjER58QG0yaFxa%;FBWmy#Oz$Nl)1M)!L zV<~BAb`4ZdO8HpN>DT(IUq7@0GS3+S0ZOTZct%*Z2-8ag$~<|88=6-(EviA<#%gO3 zD=b@0E*%lXSqIA*N>$f~%6gMRuU?6!dU`8FB8AfYj9qsh#0Ao2Ood}h;!;FhV7KtK z)y0LYx3_ne-Z--*X0y83hulcU51?%a)tj?wLD<`l2{!4q+n3&D(`BDzz+-)#vE_V}i| z*C1TPF+J&GNMO6z&sS7A_aah(Ye!WINl@35EovZ3EL^Z5S4w6`M+3YiGFoQBQVz2qc5$>5{afcS^;8X#WJRIS2NX5nR? z9g_`{(z*mKQ%pa&kzeoL4=&M25JRCx24oI*U|oMF9@KYUHq-)4HoL%-zG-j$XaM9S zO?iI;;o8d5skh&H-JgQ3@Fr|RaLh@G%x?Ip zcTtb_7%pLJuWkPcZjOs7>;g!NT$A=-yJd>c%38;}rB<7+{n%%BQ&iKm8A*2M2CXio zF?Bg6?F;{<0irDW|zvRuB4c~>Yl>4d8IjpwOR2#ks;@n#fa!^Jq2C-y(HB6 z;6nn+r9wjxF*}xyl6K1`MFO?tUSC7a5k1A&K5_C+(d?I&0DVp|0Y`66VT76#ge#<= zw7||?H(N&;bEj#5Oyo<+g|?F*4Q(Z0cGzSxc7pWj9|_)MJ3f#psU@r@sAfIAJe&X> zKM+f?L#Adh;vT6w>>xN!UcY_hO9_m^6Vdl!s9@SKaX-i@A=-{}c8WW( z7UdfNub=_K6>+C?H%fTJGkUc&U9jV9Rj4e>^^)HiIS6sRQmT#vXtWK}{iQ~p6xU}T zQ=u7-nRQzr;u;gL&3S-*pInXo+OO}-%O6XA&5F>z%uJ%5aHh*8D?PJ1?|~)11)pNFzyx;A z03;4eNaYAYYgxUu%c$Hy{Pm86KNPe`(Jl0WaAT!?x$#5p0~R-3`_mSBJ8huk1#OS6 z1SB+k0i=kN((+kdc;l5;d*wDIHNT{pfDEBzt?WZ?I={bDn6gMd;jO|Hb5+ZS#>`_0 zjz%KOo9x3jYS-)MXAw$HdMS zeXJ0dlj~#g&Pd{ry0EU>Cy{K7wya{a>ufAC%rB)%^$j8$OWp^E!gUKGg?Jwvh$&&| zHKb}L%z%CzA7BQ5wc$7$DU8wJlr&f(-}Y7RC>timh$q*oh|c&Y86(;!|3pF-g8~A& zDSLqAdenkM>wRF(Gg`nU-)5t-4f~Rg^Ftl?m>o<wBokz{;2n6I?`5R+v|qTziS}XC4fns z!cju9-f58Xrc6_Mx>~;}W^MDxp#00F-jHEZ2S3{~BJ!7HBU^;w3%WxKFg@%&txZQ4 zlpJQa_8JiBj52iedJUlV2&+ODt7aw9Qd`oup##37B8V1x^0SaCn@oQd?*f`QuM(_)Ob4&FaK}O1QO@qvo3vHWiF- z%3>-+3SU@QU$H^)B#C&pB9~Od6g2cwSmV)4!8F!;De7_ntX{`p+p=FQ$dNTgbnSe* z(yciZ0tP0n-0kYRzLCv?r}iN`m5|9%Ihe2TXrdm6LQ(zD6^%cy1Lk~`Rs#z<<;p+` z_W|V;*vht4x5fw3<1|a6RPuVwpsC(gj`Urv=L}5W2=_bqrY_{nF4O0@#v@0z>Nd~o zdh#8epsFI1?fjm&kBwOgjCY*#Adk{cZ*1-8;R3znwAxAFq|v1q1EXb37JXw}M6Hba zn2o$~CALUPmw4Zic+#%2FCpEsHbYU$EM%itN>#5C#1^^V&DZ6LrH+Z+D~`8`IQG&| z0$}y`Rfx?mo)?+62>74XY8Bi?nJe33CTTa(C)68hdT88^;`BsSPFnKPJf&f}k80vx zQ-tTb5u&Nd<%KPq#v<(PMv63ik?*aD#$Fh4DoHd~f@XRxAhg*B)U#gRd@^mYO0}+U zBl?HE6*yImDQ@_>~@Ht;}4O!rb%+#t3Jp zHO#AaRZq?kR~ObiSsy>>^>p>nvC6USRegg-(A)gk5LZktt}>4D$v$a2I^>ZvhVMFO zI=2?&+$$y~rYoa%9WUm%1k1~!&a$!an<|JBY>dE=)^4_>OR)~1-wgoY3d+gaEJe#5 zAIY+c{G5le0>3jRB9Ys=I98DglA1K#O-pZmSpFtNlUbxwLeI8m{OX9-b=Y-0HK8X@ zJiT(k`Lvl55&vxsI0em+^U5(Q@^Z8;e}SF=x44q#wG_ zmv70?*5w2te^JX~dV5=;OKbLnGA((?@R2-1kZDUn<5(#y5{)O;6NFyh5GPMjTsbIj z%c_>Nim!8#w!Cc1m@QLL9GSzMZ73iOWXKFJRq)J+vZnhv>Uz4i(K~6MlU-Xn8QCNs z{n|n2`=(F%v+VviZUg?hs@eJc+6i8n+y^l0KST>f4_fGS@(38yFnKL~N0;%`eUjTY zJ|}TU!JQ`Uk>B>0Y01HVhv&wDFd!7Dd^>|Z>1QyRKpaqS#}xH92F7Y+plbu7bQ?G#IB5Q7Ktt+769#_l4lEm2F&PXec`rR`yjNbg&-LCFv%Sd-0FZGQ4bc?&Qy{NB%FYMKj1-*-2#^cJLBpL^E z&evV$wB72c&)#hsa%^^8Ml{pi{Mo#^Ku*Y+nZZGDK3$M%$(hqtqCi0STw3slBCo7W z>6Oy8b!&?{4@yfOCH4$tvyf@4zqwdfo}b^Hl-jEY8q{s8c~C<6T5rxSN5N`A|F~kQ zp9d{d8&&Dh+d3Barczi-$T@!`#=?$xZFLDi+9>n|meoxi!BgSpk zkTeIK^Icg%0+KteaMibM7ucovHhIjq94Mq*m`h?0bD`9W6w#KZJE-~ywr921j{;zC zM6?qx$$+)iOHgt&02^g0>(5Rkd{9zwmG6b5a6HMQ=X)?P^(rl;_vA1TSyh32U9=Jt zK&L}Fvgk$pC2B`sRzaE6y}1aV)#GvzHnty;waDD>DI+4bdS*LZ2$BWEc!%nhBC0nf zaoyF0PCI&`Ib}1+MkjiBmk27r7>3Y||&JcQXiO>i3B%xrhQMDRoo?O)PYDt=g+*<&*<0IayYh}JRM0WL@ z41wL&n#O!!8h-Kn_nvOOJ@B%ZRg#pMn+guY)t!7PZOp zH%CPp{%H|UnePn*ySlfeiIOXFJeZ|z6@+-=#zV{gv$*cRy`AOxg(V$>X~jvP*A&ig zZs(-sgOgNBJ|~0A^e4#m6+EP9c2+eU8lv=T@7K$!BZ&-fI+_T3MP+7(rVT^x5q834 z-wu+^hfgf=GMB8Jy=rn*t|8)R3hMhgx)H+*ssXWAF_gm4ss%C`1NWeOyMT}wG>6X( z4!vtB=OFl6BJ(n@VLjK?1LNIQ%2MZ9nZxvHcB1NJ9oG7s7lk>TZDGN_(N4C+du4mg zu=q4W18Duz%Wj?Z2AEc3V`wDM>46EM&79ZCOW7(u%wThp_iJ?*SIE_%dIc4Uv^-_6 zU+505yM9}TY=JJZ!YUGjVpyNwd>3EY10 zpiWQL9Ck-1jeJmmhhK2GiD_s9k|a4iGvI9g zONU|Iu_F=EF6y8~OK_fNTmIH9gYYWq1+<|f{NnasN{i6I;X|8FsQxHo}3d%{rQp<*t+TJY0{B&okCkH$}5FJ3gnwH>FB z*(Ew+Wj@UEcq6D%DKua+HU|PtgSP3`URH1Blgu{1V5adYl(%d*%^uTRq9_XBfCI@V|34oao`0R;=NgsrXxk+() zHhEVG5Q7D1Gf8k3ua8?CnO>Ei6_Xad>Qmw&D)5k8nwC9elDY?%?>JR^3_U<^FYD0{ zt7Ve!iVJ4PR4E6hMmx~qB7wu|8`d6mvDCH}nN%It_l8!=nnl4d(A7mkPW1;HJU{#P zmR6))E_9GzH1x0(=2UO-qP-vXSbxr#AAo0Zd7DNs?>p@5)-LxRdp(aP3rET?uyC6d z+jd!K&*66aIu#EwBPAtM$lCT!0?1$=L2MwJr*;2vF6ZbmO%j}Y>DwJGVBDrF@0Zsl z>}!2`>uG(L8qznB5gr$oc`RYB^`YZT_Ue@zO%#wVT#YC4tmB++X*@)AO7Pn#aS@~gRq{K@cpzGKI&zWIVZ!Gj02jB(>T5)-1Ip>T7>C8Ia-qT|m z9GY7hKdY;w8{J)fkiL%Q&jMIJ`=CiqO_X7_uMCAc(Jdtq>4E&(jGZ$aFb+9GspqT|p-DZ?vDaHutvvnJnY^o@UMYaj^W84#(t5+(4^br{8!Jg^ z_CTiI%v_PaR)6tM^$4>z%<8iIt<09dHOYY`{7p`I0u4^>7Oj@pW<1@t?!$?{gJfmja>_=oi@0bhge?vAI~&cstZv$ABUR8Q1xmyT0BsY4}br^udkYkNyo^N?SVPZ0Y| znG!-B=-IRKi&6}FVGF6hSbvfaQu!Q*a_@(kT50&NO1F`t{(6eJW((idMA1GYsiR- zZ6z~y0vIAWF@=y1y-A+cS9MF~!RTi-{%F7Tv3{ptJ>oIqlw0B~ZMkvFx6s~6om`|k z^>B$ldtbR32MtX(ApFZ-SS9Ln%~pyyYYU?Ov>=Pk${+%JK(4``6U1JUQ%Ce|6LmoM zc~@4#g0MH&y|%zx=~~z6SDLJ1OLBtJk52gU|52Px-u$!szm@1|07Lpm=~ zlHpHY4e98xNYlxI4$^fr%K>izr)BYJ_+V$dfQK=m0Hv%2B+UujS@(xm`Ci5JUGW2x z5$Y+6mkUqIrNa)X>6edWJVmMwiz%izi^N^bRoNy{Vwez41ZyYKZiPr-R-B6s4X|Vx zDR~VL4JH+>vs}FC=v--Vis)f*Lblg6YQh$j&Vo`8>n9<-nfyd#&$ga2J};X@dN#5i zIx&+t1-8W|zZVw-Wfqfk)5X3J09!H<(OHrtlvzD9yAzr&A~KbF!208Iv152PBFQ*kN2UAihGRSCGWnXh z++XKdk)<{wE8}kT`AH5V+m^J8!*2k(S|ay?To%s+hCc3qWXCWq}#s4 z1EhMIfQG-d25!+b9A~RqkjahLCwETAzVfN{A*&-HiA187kLSY5Z4R-L9VAxT6MNNDc4FDFs^t6eO zzJF7$07Axnz{|TEMHXvSyIb)1B8k$aI#eXNx})1W0}HZS4yaEg?&48Vk=^@fIiDJV z^uaWxMLEUHI#PhRd?hu_22ZxM9`2`{`f_>I$0s>FW;rJ_v^ptV9KD1LK6c)95zjuK zlNQJvvJhZ!pVBWf9^BFB5eV$Dj`*io#e5*ft8#3v{iVD;-`(|nR8H7l%_KmRdrSkAMJ_z09L1-=&)N+I+pQSY5;W3 zUL<4h2yNV7?tqLPH~ZEIioQWiakLvM99J4h6BI!kSR6SGg9{5g-m(Ss(51eKb-6pU zv4KOvjKVM; zI_jeUXg+nkUeWTF7M*Ap^sTjyx*6Vw64|5U(uX#NGNN;C$yXe>nQX#%ksj(m0_tN; z471OIIW(xf9Z9e2H#*#8QS43%q^DZCnv<`*Df5bEiEm|CC~2m@xuv%*q}3V>0m=f> zGqxAP3&FG7Ch3W~D!<)H1=LXu3{{&oIfaYL&F+#ibKA$Opnf;@Se(ZQEHJw!WlJMV zg>$zsR_Z||i`m+@kgK5<&%xhO*Sp}Buj{hvz4Ok#GziyFD&uD+o2}SAkZus0(d$^k!-;^AemW%9H zwJ(DUb2%Yr)osokVe#uoX^!)H>M;)%rE3|k>3|)Oty{m(oEC0G&a*42_;diw22#f; zXv^3GFY3lomCG|2RND~65{y5E_Rgy6esxaXNx7CMRAzl0Ot)* zA6>$xU@vl}y3OiSRBY@}=C)2}-eztoqal)Z-*8jB;mwi&bo`-lMH9~)qXrbuKVXu= zEMivAURA#^G1o1i^JWPZ<=JhBkoPE>06HOX0#5O*?wZeE9Kgz5&*t;44>ZD=mYYL$ zww}N)k2{pH#sNb+mP)cw<(ODgA_bdq2?%0vVi7ju5u<`D=0PQd-PVQ4WY;Yw`Vqs^ zSN-f)Z;&W(Nh?`{XU0dFhc@we*_8ddvIColP;YRrWU-flR=MH;W7eb6Ux3~gUL{}V z)mk;hE7ra4%FfA~n+qqie?+oIrGu+Frb|(N8-p>QtiKm2Uh3evZUMyd5hb}<7~yL$ z(ui=nE3H}1RKBL-usO}l$a$E*eUFOSndjDi7`-@ zF>}W`vZYv7B)BHnh_eZbrEL4HI&a1G$#J2AmOHs42Udw|`t?U@6>u$uw{;W=CmBf$ z7|XOkjkV}NLLs{CA)P>Zf?JR(^-EV?wdPYC8Ox=U8e}I|vtk}RO`fvJm%EJ4?ryIv zEZHYDX{`}M$XSjgM|q~x(aE9wCwLYm)fl2hW+Ev8@-*+)6t6KZfq_p6qu?Z7@%Xgu z+)BmWeKs29p@MchN#0FhhR(`2!Bj5#@Ua_^PO{{HD&oCtR z>Mz6k_1LU7$>kS?x~3VGaTOccs17gh@VY>6t}FB~+8V`O)5imG1UlDA09RxxzeAED zr4Cljl#9pfDD>s-3!qSF)dqi(y5;_>8CP=c{QNw{Xj0Z7Tnp_jodgEs0bp|b_A;oz;FQGE+Xbk~Eeu7I4S7JVI6vGODpgQEg&M=v{_(EH#sbDQN55}vDNVyPf*m~z%h`ClP#EybGkQc zna=9~R7={zS5ty(bq3N$QPnt$-U8RJ&FX`eJN7QDhpZ6~nzGxobm>TDBS>%iX>1qP z9RLDW#(Lx-y5ym{Pbu2yl*8 zgc?#1s3iB!dXZGd?S-i#ZwcC{(z$c1zt;8edrQv5aW=(SFIu4fgc8ijrO7$n*i{LBIw#xKor9Zk% z04&qw;G`raAPMm%i$qG_M}#Bcd~#B~qC0`MU-}o|b5t43W6BN>GT4QQGhzZ!&K`za zPL+Vw+3h7>cI3vRVR<2ip}`cKF(o}BynU9!dPZ2z`%=ZQXcy&l&rMe^5&*qA1!D^o zwh1y@hqfJsl?`KBXE&Y6epR^pXP0!LX-7US_F#ZSo7zBTNSi&LiQSRnt!EGPi=3Pd zUL0iH4(pfbQZ^L5VQTlzjG0fnL5c&m($bYK)<>!&DsA&(@e;oxv{r|bEz1y6>z0pE zjPN{fYevNUp=>9%e3IHQC}n_-qgOXAsgR%b1e6Avo|!4jT53Y@7RDglgxX6ux!3?p z+F(PP?4i+=e6@3%G8{1obS?!oZYjiZ6^YQ+oc3$Ic2s9B<5E-VvsIWQv%CZMh%_N-GHr6KzX87}UKZi&n{c*>fd;k>&1ZlZs1~Scs*jA} zR-p3~9j};ehUW=9;Erw{)=JvLWZ^NpS>-`ID?Bv4srxBA9=4Y{>X?1o&J%RWTlQEn zN15boRaCsi!}746`<)hZE%94UmO^(1r)Z7(VUFYmuO&V6VqaTuhzx=jDBmltQ~I7O z_7poFTU*ih^1w_x({EZ}%l^tmogUa3B5!KyEgJ6%s;U zN?4it5)%4-aG|SS^?@-E_W?KBc&M;uU_);)THcvD{S$iweUcvZ%!Y`9|;Oi3narm(##$0~03BRN7z0w>q%k1Dd|}Ia+{-36MVDk{ z({tfAH0o#atjJkphiN=IkyCIm_ZSnCV~mN6NyN>91BWE#r)1zc6qNZ)Onm;yJWre6FzAP9;I*c_U%mS28HOH=J}dNir$iE z==<6)Y5>^_AxsByDJMN1n6Tg#Pjz=Hk!>8uRn9lJIfScv{P961rkZ4p+o|qe&|%(| z0(%kI+CeBax8=!gFLGg_N0962>v3{tbxD~>S@brHN2s}utOT_Fqyzb5ki7uw-$Qzw zDTRE3QibwM_A3&8>pO)_o{g}%^rguAU0uNI8DgnbiT)OqnbHH=Ks5!DscAZ}vBS1>K4(X@}A+r)@qNsSSPq#Ys(B;giP zlxgRMWtA_^>detTV&|q*gD`<2B7X?NAhv!Q5X`elsxE6OK~!UkBbt|Gitman+}3wJ z*F>FFK(-e2mTH2nEG&1#L##FhWFGvL8B04YC6~7FUE{kLE zJ8Lr~3imHDr^`Az%<)@0Rz-0}uXUrlPUwE`*k)NKu?7#+bSz^$TYB=QM=@}ENT4~`xa5hZWQcM()LPC}@xC}5B z(oK4zypz=IV@|*ZkU+9!SgI%z5EnJbVn=bT8#6p@0-Ikx?TVVhPEke?iWxP8TU!8U zI55}QkbT`)UpG+~a?MMPSh_EkU~>z*R->*_>>92X(ATNnyKEosv5Qa~dEYiPb>+wW z@w7!1AgglawzO~^h|S-zho?7|b`_Ft$F7||L79U32Bn3jy7q%}0ehoG>=HyB^O2DS z1NSBSm>)(Ry-#_k7&N&zbqkO&oE9v;16X7WHdTOv7a3?zZP-Slaj+4(Agy6*tc|VlL z>6YVD8lr_!Ulk#>^(QPBc0orLF}sxRJ|hl&RWwf6tkT;IHlu#I>%Z4`mI&%?Py;it z3NlG4n5RMT8Ce=nzv1Ra%b$YePeJ`~M&3iKP9Q$Pll*D4BQA^nQUW@gK4uZw?nsyf z7j3VcsOy6UcVf4dFeR*Zmvq-&0Xp!m9`^&5gFx*J<9t{9?dEoOxyUmxff9N`xwBbh zEaP>JMY>g#;-t^&YpFh77BFV??%Bn&+j72~zjpo%FYy|}atKN}Jw)LfGM{I75z9R7 z{X5k=?}X*XRG%M9Eu8@+Mz++E`rcdMn{?fJV}*V<_HE9R=de6b8pa#ym;UH*zs zhy&=nP%4fzxO57Q;g}fNZ(%B^q=#==0MKmMi-qw+mikNUS>Nhq#Brksf39z>h=kh3`t zGlCX!{ndf=whu^77Y^E4`=K1AdR2&V5#B1o^RltoGpL@8%H5wMV^GFPH^!fn%P8dO zDO?fuke;^+S%#rGFZSNjvCr&z&INqxJSaak59rN~H5=S zfzpnSl=XLUp_e2n=V$IBt&PJ`GD=Sl)ESr@sWU*#UI!z$^=yVbeRONgzJnCeAn;iZ zK>{e&9KqT}$b92ez9+>>KO6eTaQbPlVUmJ~Z7HbH(hcBUf6mVHoB16ES`=)<%q(Bz zaV~FXIO)P;DhvW)W#_ZRL&YA_n{d2uX>gQ<)-j;?!&jp^ud zZS!u$>*D$>lI-Qizz9P6vN6k|r@L?w$6S}MYB>I!Q~MlIW;ue$N=?o^jm0#BukG<9Z4lch5NPUZpQM)%zJMtU9Ns z^<*q3$k5s&pVk)-Ie|nty$vc-jqAhyDyX}iS_L}f77nV(0#rGRc3OjT%$k#zOomVl zN0|&Ek8N-nM5Y!fYN{KdlDhq=wT+yR!galMitooDe?C#LzhC=?w!=Q)=|R9Z9mo{! zZg<|8YDF*2I>3d(W(B(Ys;|MN0$r3h53@sfi1S{*E9!Ck5J0@!?4W{$J3uEm+Nb4w zrjo4M#eMH0zcF?Skk#rtmo+xvkVi3LcO$ zELgQd`8~M=>Ux(Q)#zLUisku>pl0I)c6djU@RTHg&D#!pFN&1(rER0MIRB7IO}AHp zimyuE&})VTNQ}_Mivp%5;u+`+l}xCOrHI$nqI~+!1)tjs%RmW|0-D~s@ho#1ctet3 zU-<#i?z7V&Lf`5L6N1)R14wNEFlKo{9WLIs8YqMbO4LJzW-=<{n2J&wS!IyA6%9w& zPR`_OV`>M9Gd=#ob)+;~SgwP3OaS(c)v|HorgEZ=GAi;R3KIOjr+<=P1>no6dIC}m zspr4J&_o8>UDdNyF|fqsN|>y5o=6X3kkgRXQ3k6%Z>gbTYjMC*!-QZRmOyN8HHz5z znArt=0%u`+>DFF#NB?LJk1Bm>##llbHd}8EIH%2(rGPD0d37&GW)(strng* zm|BRNX+UU9%Q>;g`fJejI`2L?(ft9%6n1)+#)(x=w!RSPM1dZx7w+Hv>A zwMEVQUUg+j&q2YK%w4;h7gG_G=91%rqghAN-e1T4xfY03R}$Gp>J-Enzp1E&wY8Um z#`era6fgT|94VR;bX>eK-v`Ck(U)Q-l71+TPWUM`3Rt)OO?mI2JhAnduiTgAXX+46 z1u}#YZbGC*mKkozmKsH8^t@oAAq%n67q&avjebL>Q}GO2KC&foJuOr%M5?CW_)Nh_rBHr|(4Xa|BPmoX{-dUS?=2$G*?8MO0d#m2pStMU_ z(@-5r(_6=rMf;+@q|?*sk3JMakz^!{_e*3RFmHNa>O3M$rg=RJ=pmyf@m7g;(IBig zMUAl+adXQ^X_T~0UmThz%C2mC4ERjX!yUd3B%xhTrt3x`x*%@Ar>8WLijvbqSR+%Y zx1>*kbY<*GpQlY=nRC;_l~JOw5!oJ<;QnnHiMak~r9*?$c#L+?8FglDr)MI@4g9Q=sH0sh!^ury#!mXhvD+VZJ%umh<99Ec;6&s`vqZ9`$kJ{ zxbVIW;rrFC-uqQm9bT>$D*0nq)e)IUt7V06Rn^g3RY$Q^g?FlI|C7sASAhuuHx-g` zRtXcz>_ty1{9+w@QL)=f*;WM$)nc`-QWI5AB`CSBd=u4@!kgCYntms&o(apjpq#Yy zLG^m|L;WsRdy01iJy{LyfB5C^P&85)vakY?ps zQOygL4K=c=wE5~z%Gptsw^aIEbwzbvQhjsPH>%Us8`Y~Sv!;^s$_e`Xt_s#s?xD_f zb+fvvGPBinm77+Xi2?teQthuF_}}BI>DB68m5YwPqFRZaQn%I0Yo`>NsNU4SH}oGN z!u~fyi1T0dCGt~(wD|RWz^lVE)dh{(H49ByUx7_)45zB<>ob~$Elm$Y&zR{e*&446 z#nu#`uxTglyvF^Uepdu%WKLGq3%g2v&vM++UrNMSPpBrXWaX>InSA+{s^o^^8&!4a z^{P6ts8)g?mIZer*wko4hrJ@lEtOxf(hJrKBt(hol_k}&DFOsP>SnH}X<1|jX>D2y z3yKYWsZ-rGe3q2EV{mZY7XFm0o(X&yshJv^>bVU6wy31&*Yo`;LG;z}oOZ!Vv8w2A zv#qnDrAxW38iz?y+0_g`-X7-$=C4ItvqqV|#5UAd78=Wz(P7M}MQgflCGs@NPd4FW&31D>>V;BLy-$P3x~O5I`dYodhEBjvXeEz}$70_dhX>NtV_Oe1!#F*=v4i&oA?t(a+t zH~42wJ*=u9h?@lN)l-3uUW}^VSE?xfO92ZC_YtgD#EZU?Vzn-&8G@$h2dfX>RgFhI z%Zjt6tLNUg^hM>P?rr_ID+*D{319E5#4U}4v*5Dkj8(3qoVDt>kJ^^%q!%64$_iXl zORB%oCuYra(QD`;Q_YrQt13y#YE^xiTB)hI@oXveu3+oRR~=^yVZ)*C^uT!&>su@O z`3?1PU3ILfRYr0`vzjA8z*u)d*X`v#e7bPTcsN6k9-nlI;v}WD(@R1ZbY6MpO9_b;lUF1d}nn zs(H{3{X9|&YlYQuTltvRw0d4F(-;BvJh=Y4jY!S&U!k`>Tl4G-+cvYT7?*ZfuN`5} zoK!C~>+Gs7O0c^4P1ujM_=wFO$C^SNYwW2bfAV>|cp;J(zhX?sKPJdM|@ zNEnRBs*Ox82aO|V=$pCfO$tlet(HF2iukp7K@Joc-CC_eIkN!RVA1ZXR zdP#p@tA0y=zgN9nRd0Q_0{)uCzhAx5O84@8r4GHII&W6h%q7E>8IOMX9uEyMLX4-& zV{++99Mbm~X3sg9@#*OY*EAvAg3G?Fx>+%wwib3C#*#LvYhW#t55mPISa=`wJOGcw zfoFBZccxwCtt102R==qbyG4u!5{b)LHV&^qvrt<9F3H+k(9E+YmXW-l{*J47^o$^-JTYjL&slr7ZG<&i`+x0S1$TuMtPHXW)KN|tG`7$FP5{e| zzoZ4(+;XEdNHT?k>VROHbqJv^Ulu-|Kc`I?q4+SJ`0PmcH~8t1?(cX;x>9+@W z%=e~tNp^?2yYJCvIj^jmpc!}zTmfCt2m7RUdg3m3erRM zNxwI=#-Lwc7g?gZCJ6dqv{(%js)m;ZubzsD^VDBe%kX)pbB9%5a_a$UFR6_s{bG%% z@ffyJ??(Gx%JnHYw6C3mxJ^^@5B|Fd8k~ zDmdA;ag*sjz5Hv+mw5~0zN(RiV|brMFCUz-(VLJ)dQJbZ+=Og!zqVddDLC-1e%Cc_ z)c32hzI@H*?u16LZ6zSjsUnYNcq7_Ij&OcNuaSHX?&YACp_hZ(Bvq|lZ&FG*gE7u< zai0nJcJTLLLjz~;{B`AQ_jN+@t!wVFF9g-(o|T%P=HV1;l9_?$mn$rnU?qBe8|+*s zV)Sy3R-HEn$RkgPwy(gp|WTkQ?m9x;Scj&9JJC+!=M=NRzSx^|i)m+inQhQC# z*IZ{Rb%fbLij$;&6r5LVcU0_cr{d;%X0_6nrJ9!z-%y!VgS;UMt-e}vIiH(mIX9e^ z<={%ym2Ry!>}q9&T+H5%4#57usTo8%UQ#@C0@iPEL8MZjNAaiggID>du4nrGc(LEZ zKj0Yal2c233T(bH7@LPI{r3HF2nz}_iR<9?D4ZJH?tMy3V*NxLK}&B+v^V$XBkqHR${ zw>RgvEto2=T-!CslBRtc~EU(d7*E)rr_bwmCI2Lyq=#G+&L-d2&`aqFZTQD zY4|=md6}m=F=L~eHU8l5&X>eZrhUY9m!Rkc$6u~DeK*bA_p9o=SA_S@ zedugO>8?Dyq!SxfJlbFEN@r9foUy0<+D~r2Vbb60P?A2(;j`kl1W!39`RlU&&B_8g zufKD44m2%He_8)cB+E4GX-R#%UyCy~!pJQXqT}jmS}W%oIl6i}=C7Rn>bZ8_po{A1 zOlO%|suvkelq;KK)}tFO)-=tkgi_I&;b?u9v|4wj&9JaH z@y!$xvX#@^W|}L})!C3Sa(|k*JwzQxOO9JT4Fz>2@qA7Hy;Z%f(5Y(Z-f&YWVXEm= z5WbrNA%DbOSHd&-u~_LQ1L>OyMvAOFAlk6FFgieli&hU?Oqu&t#iPCcoP#i6I|t8o z)f`JChO%EwbtNFT!PGk=2lrKx>CnBk81HuCL{)YdWjfmwa^8m-G9;+)3*Cc;%=tI` zU{+mYNMlgWwTADkIDy-(@}%@zrRbdRv#dsTTlVB^Wn--&?Rz`UXOQHPPLM5}r!$3q z`q}I)ays=gVSYN|oV|?~SU~+QTZ^*qegCrzwKEjosIyYnq$4KE2l?OLL2ULTCb(P; zzG6P}@FsIQTQuhV>cvp3rZo{L67G>st^sN4uDr7Van zEM=IK>gWd=Y0v+wN}o`e910Kr5H;cGWt;A8FLMO)P2r<#lo&6pwy|q!)A6zRkvZYC z?)9qyWehd{7Ll<{s0xNmQa2pm*LaNU@Rb_&~4`@jr~x^5+FB=QJBX9%fl z!Uu5>%$V&w&gAt2`4du+Sh3K@Rig}IPOXT@q0;|a2(z!SEk0!4Z#_)Sziu@@sMhMV z_XQ8RE9%!f*0Ve6Szs25x7T-7f_ybTV`IvkvxX!F4;z;|0*}Y>OWebF{3#hnbNF-- zev|On57iE3a2|_%xR2#^mJwHw_~%pD{Z*A8?+d5Zn%aIL29|K5x$bHSkWNnvsNqCm)jG3jXwRl;`8 z6r$fjQ0T~4jKnv^K1$6Bw0@8$L%5vw1*e zP`z7aK5aXLkazVGdhsm)I)fV75`AN2g+Mtwtc0@&noh-R7_L#_9m3{-(DrF>fVIl~5@v1fL?gK2A)rRCSs}_)INIRp)q?5nE6z2(?e;sgRDKtB+6B_B@~AInnAV>L25d8|UeSq z1cKCqVl?hAvM@?+hyw4n7|ul@u;U@G!xK~DP8){d;M%IM2Ng#dxB6xt&d7$q zgOC`OAoX&l^a^*s!hpPL{^F==qqfPtgyQ&hs46; z<@f|GhF!gSp}F22D^8xvaYdPIZ_4L{b@-=gn|^*mBNyT#-iR?)Z0U1NjGjY0V1>A{ z!>;UpVbxQU3b}_OWx%Eyr=?ZfyCauF8g%>o4Z{ba?j6WklE^@0W%c!@AWvd1hLBa7S%qwTjhM9m#l9ujH_=OlM^s@n&cVo6nY& z*DSr@BGW}-=*s@U+vF(pT73Bf9j#y_goLx{wZ;a1IN0r z{Wl(}eb4o9?Z0uq_Q#tv`i9m`d*>{PU&0H!`p5M}U&>GP=yp0%vy)>S$9B)_vp(lQKSd zFmAMn5YetHW9#ktntoVZwbPm<+=u?4aS4M?#yKnXOu@2x;^Roqd{1cmwVp7;)vsw+ z{&oHPuKwvXONy5n^p3uyQqIR^ZXCvQryAj`O!yu8K$G`hV||3CU{P!_4BJf=TF~z~ z!CgfP_r;T9X0F`$@ZdnwrtOoGj`HN66r1m-%YGK#EVHc5361%rCT3N&>6r{6`*(gm z$a1#IuCUbV*kC08!OsUt#3Tf6wQJQ zqW|4Hm^6MyLw1B?7!VXXUt%R;twP_-vSc7!jbV9WtwA4>Rp&Xr$Z;+ayMg;f+lShQ z;P!;?B(2mB4mprvU5A(;1O2N&z^r4_5|aO>X_>LjI4%t4f8IP>p%{V$Dgy#PD7&lY zwi)H94yr-?qD!|VqN9|;N;0K|u#o8twF;?<624Wp1v;iKE6~;czeY+2gy7^M-zw;@%~@3x(g&VR3s;?Hm3qz(EVW0o$`#9LMpNg zX+AzKT%tE&8_M#ayF%1QO?R60-Je2ys@XrVF`;+T7MfQ+(m|5UM_hwNYxVCr?<)j! z*NpvPmElGW$FZ(AhnXof@v;;L>Dk|fId@|66{I$vFLR%1L%7N0@4*f855 z^y_O;-1{kCjjX47%$~`xE2bVeORx6-hxS1Ero{pnwA7{q?;mboHcXqpX%Sj%o6WL& zKx9ZGD59?Pxj_}C&A^r|$F^2pQo!it3pP5e1-}1byBnYHD)t@4E$RoZ3f)qjHdDnF}%~r7tG4 zl&&+uf-qZ>*&^QyY~fDu9Gqy7KC+$!2|h^Ex?f*8(=b^;?;;@&`z6*khX`rW39Z?e zNMj1wBG0Hs9FK5l^b4`L5)sz|c(waue5&J@HEUqfzmQLe z)BQLPlZ)!v@tG#F`0f*e7nlz*${Wfh=4`G4f@&sa%7VT(%K~8Xd+NL!d?EapPABc^ z+a)G{@yXH5q4umrxmFxg zlm`zdB-f|ZVeNyiG0^dIns+lY>5Tzr_|^XZ9hqk}bL?5ZkiyhocH`ge!6^HufjP=h z#*t6;!HoJ{ib7c07>#n+m`0c_i^?VJPIukFIjdOID4~8p=P+W_qn2SC7h<) zwK6nx$Ib8`QCbFm8A9?>tNcv5y~AY3Y^Y8bxri%(eOlC2GC@ zAe@k=&KV7`lQ~Px2cMf@xS3}gPW8$``NB&gr&nLi;j&KlFD$W4C%iPj(d7=k)t3jC z!)m!;woUDg`~PXC9M+=SVV!d51|GufV?R?$>ORaw52B=p?LnKe{`g@U3>tXYMt;ha zc6zFwE~p|;R!Jk|$vnhwzWWs4zl`U(rqamBl{`*@G!8E3^eCEotG$i%8u-Dzu*0)` zASOY@S~>fFHB%xK)$F_yz>=HbhRH5WP=P}8Z0t*NHUulp4rJTa)V#CTE^2!`kbXm%*p zOV%n%vReRs{IbP-552=G5rnX*txDs^>_sNeB8*S)o^tt|553WDw zuWR4`B(KU|LeU5CXS^Pl9%hjYT95a`y1f$r=wTX(m3Y63f68m{wKj)^|CgpKKf?vO z4R3w>)8t2l_p7EVY3~}BDnYv?_J?J);%aQ8Y#)}3w)R}YMd3xfD0YD3Z7g$sVWP`t z%|60a{4zLE zt9WD1MRHDs{1RE%K!~HIc>1RCC6*hf!uXZ?xuf>w{d=rMEQrWxZIll-7zYXaQ4oSJ z$Chps&o!a|!9GgesyY3V`j6!N)&3upBakgWpB}MEAp{4-f)v(xM-S9}T$-q$S~z9- zsa{;lBfro5>sXH-aLSNXR&0_;dfs{eZPH)X5@ZrR%*;Z~)&4&|$im#7(3pjvzl~f2 zGt*uUklVHikA5MfdH8W3qFj2>WVax7Tv6I;F2flvjyws#ChZgJb{D5Q+`Yj9oz;(g zn3N@%G>6`OQ3vI*{10jY%FI{%oe12S)m=NhUUx+ewlMVF7ez3c5qz$7AAz7;wC-nT zIjw&sKLqo+#FByKm8F5eOnf}~TaxvC$a(3qje%1rya8hO^NCoFP(YdD4)3nwBGSjK zyWySr_Gf8e_;9Rhsd@O?T+Z+wn2A%$L5AA?6BkA?985&jx{{I@@p;5jU)}*LN6J$k zVw~^2HfIF#Sxy0*1e@$(HX#`7cSZw6C+^C03<1YcTjV>b<1jcNd%&K;IQhmqK3~_M z`OOQ?Kps>NH6k;(K|1OH52h7DiVMK8f3hcqwS@FMkinb5#tm}RYo{9ff1FVvsp)d# zoWbYOAHMaO$R6`6g;{kd3imOq=^T4ME=6BK`i5``zbJ&7Jm~)E0VC&`WNS z#p35@t~%ST(|h9Uv0>(UXdatqE4OnH(8UM|hXqL|1_&#}luQ^t@nwD2>wG8W;uY58 zD;lPF`1Y*o!5NLA4Cm*3l=Kdp`kWOQlmjyi5#a=e&fi0cwk3@r?=D z8n3XE%9W?mDap?vc~%HX+0D5~A=r%3w=-RGGUhG2-(&O88Gf^*8fcwKh|}2qb4_p~ z=WddXd?Ir@P2R@h3aa$`)=hK0Q~&)iE048f1Rh-Kp#C(m4;BK6QD+->yNhv16W{PP z#BRVG(MGk`+`?SK54kZ|TZl@|*bb6TgBvtwrev3y-wLOVObdfJOn=hE%+@JPhkCFeW^5IqH3p|?h+oTv@)t{Y0n5jQ{n1Qqx`Vu|}QY%W5?D&%n0(Qp=>6ND|kIu5Ksb08b3>I<77qu^~xE!47 zxKj2l?{0&cDx>CmC8FCq7Godg8bGRVvV=}4Z4k>I)Y}?wy#sPZ8eONM+UdIk%gjluxgnpyd{CusqFeO{ko? zbgfYN42lDL13G+H*Vd~M?$>=q*F@N`@=HA&0rLE=Z#=pd@;q^LrYXVLfa5ld=v_uC ze+pzr__%lqwWF~?Z~Vo52465Yp;U)Y3Y$$)diBlVEwIX*AG1{mG9i`4dSmqbd|Aw? za6D||l^st8mV70yS}*E`NCAGtCX6-JO-N4{eLi756K{3 zF6{U)1$GejN7rzCPigL|H#MYZlqZG*iG?Yk**!xlw8n7z2{<+P52`cY8>)eY=-){B z=785AqFrAEuw63Xv#BkL{q^aTL zTAI2}zd&7`V9}5Zd6P*6tCHdSH-cD3K3dfg9|y`+^GtF{f=#UHU7G})RcC?>YioWK zEU*`;>dSsC2U%+Gy?0I>b^2x^od8%H@PCFWAF#$GI(6c}L~bTGRJkVF!P}Xr7;+bL zA+or?>%vQ{Bm9rt=*}-Kde^hq-ZrfV&JS+8x$?tpA+S7Kw?v=ZwJ__5Ara71v^&Vv zCzjqfN6>e)SjC>p_LzHL2Fdo!v7VqpXT5pW1F>@WV8>oP1Ifi_hBhR8C=7jr)f))I z>aeneMjh~2G29_??TQq)%tK$`k^P6FRJ4w9iM;p~p<(3qzy^GBz4R`phbthE7^uL} z21!pIN`N}V-SF?~eb(yL@9FPL5~p6#_hVkJAP^T7f)jirrF~B?uvUk^Tm6!@5rvLl z)mYFsR@k?M5%#36wpF%)>cxkt@t1@HwN=x!`f2aXp4UvkUD1Pi_^&!bEq?#1`sQb; z5tA`XQWwupfBN#(IFwNu9I6+ftrC*`kuxW$Ci`VjCn&Lb&if zlwjmt7TK(kkt6L7q~$s=MR>PLPkra19DI4V!pNCRGf=!uTYVRi)9Q1$J)X3kr(M$78+(S&6a2yHz&Vk3v1u=9ZVlM#oYORw zp(WMCOuA*rY^3r}g$MayTvM32ug2Xc(XXxB_W(|nDw1;;tUe*+_zstq8x7z0nSDh}_$jBMTWWQ_ z5S$bPqeb<>37!e~3%7TDTBFw7NPSxz++LIDGGlDL2D|^qpRQWy5N1^Ft?Xv*b2Nxz z+t$dSWNPqLo=IWQw71uzCiljJa7I#q=fE_*>jxWK;t&!F{)eBY;(sfK;u~`&>bMvc z^gnnPX`cnE!+Q_vZ@H>o(cYAY6(-Ad7eq345H2GpgnK^_D}VfO-|YD8~urcD?XSqVqvkYL2g~O4x-RjbX zKu9&tblzQSDD>Lf|4KX%J+#A5_S(N zQHm_3z^O9(f8#;ZH)uO_)fSx!!%M#&RGuV6oKRHWe`|9s|=}-cN2y=b;hW>}es3%Ht!%TJhrVPcis--0IEE&UI z7z5;2U*7VbJIkWMn&hYYh=q*dAig@Ky00pY6IU3M%N-}=HuYKRU~?($X1z)^oo5?z z3BlW7gY&nceVw(fA};M`^AFf-jO5pN@DU8FlVgT>#>s_6G-jN8ymdCqyoy!hI9n=& z%+7)4QjHpZ>!zESY8&hI#1$JXy3M8=7Pd*l3#qnxVOwqC zD$Z0nk@lNKtE2DOSkTw7@Y8-j6uW-|`b^fJ;fQ{z7u7IK%$HR&%cpvoClMgu%<*vy z@DI6{i=sMI=>#E&B(vX~`^9SL1b%M^+wxCTLvN#WHXm2_F}kSsw z(`7wTOSO7aw02fTv%whoath_V-`e5q##h5mz4(y_ptYDYTAx)MSpnslv4tM1XLy!6 zzUxrHUwlV-Gh2n3`0)iJP~>~=lG@?()-35p%5j)ldAgQM>HOry?~2tr)j{jawgvdN zYS`~EQBI24SBKeM&k!2(kk3S<+^qAwOK6-t^wTA8LB0e8DUtUrXEi=B#CU#G>CZLO zS)I(ZQcjR^O>uvDVnEsF+c}ETRxj>wtBszi-syJF&k9>81H&Fnl3Lgv7=s!8p0zas z)8r(8`Bp8*Y1?^?&-Gq?5~ozdY(_bKmc!L-o067xLGAT4!fd=T>PoXddm1Y*9!Dv1 z6s6C!OTP?GUK%-wS;g#lM|99?XF$%FqgKvW`s>Vd(#rcnf8OgF*;cMoIajpVp4(Q5 z0*728=DL;F48}eN8P5mQ|7ymlEOS5$U(UHRrMIvsX6a_T|3%un?KE30G5-T-cfd&8 z6z94nD#E%2KK1$;koVn#@(vt<18W|b`@p)3@rv1-vmJR=YZI;|x-Tdv&p=@R>Ng?I7^~ zm}T||{D&10;}5pAT}Sh2pj%vY3pyC3I=p%}Gia|I^sSc)Hd zCBeKEgYExU3_apn|DiIXblXL0NvOp+hHrR?a|j+gwSdFWBC;}lK&kzbArTJ7XH*ON z$aQU^p_POf1#wbC(g+VDzA$0c{=W)TL!M+ub{Pwqf|btUL=$b~=s*ud1}T4`^r7}4 zVMmiE6^1@s%Q>&q9qpa2ym{Vl8FG2P{7}jDmGB^lA^3DHSHFElxVrpI{TNh`;{0!h z%nG_HKF3g_j`>Z!Rp z&Xg@{dhxVjB|!k8`IJgMlCSGSd4y@h^6D#64!xbE!c@oc3~&2gtF9MvD)wM-&offj zEf1kv)_W%=c9I$4;%cx~f^m}bHo6>63u3De{|C3&xy~WDaY1I8Pj=MML%$+&{A5}{ zKjU)?Ff1UHm0m)?hucX8bY0(vu%RRKc2b&WL0^k=zpo)z0y4Pg*nlG=G+u z7)*=SoPL`&2GZdZF(H{f!5>)B(z`}}S^kLnp#x!~gYP@oBrEM<<4cMu+uh{Aq$u^5+qYUmBTsWa!xbk4HzJK6dZ9 zq4E9y(*wu$|1=o~Vx9dyDAXL&xq}krNSkE&|_(z_jZ9hh)Aa$W;P@-1`** z>UpZ-_r%asmFF10_a8^#?~`)$ktd%7Al&XPM_@eycO$SLfsZ2ayXyECso@3H z{g^sTFH=Q-Jpz9#0)LwT`2AJ{{(A!I=Z_3A_0t1DqURn^&okuLC`IPE2y8{*xAZAn zC4vs17nI2wBlqtDQS%>uF#;1Q@S}gDz>k#lqyG&Er3e`0WSIqI`*3*Z5M_k&hiQI~ee$0OiMS!D3Hiv7B=Ad~ z<8b77DFQa#@!~Vk<8Tijro%fhAgZ#fK@ZsK*2GL+1edMX?sUa_U zG!^&}eV~aS)o9%mEeevc`j1kU5C11G`QvE-yi}(VtTL1T`{_Q6`+xY%J zE%L2<^7y^G5!jEwM-lj4Z|70}dBVZRe)P8@Fq#6t^N&*C!<(L!

    fV{@n=ty$IA< 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 JWjm3;{{x1YOa%Y{ diff --git a/Tractor_VS/Game1/bin/Windows/x86/Debug/MonoGame.Framework.xml b/Tractor_VS/Game1/bin/Windows/x86/Debug/MonoGame.Framework.xml deleted file mode 100644 index 0ee4257..0000000 --- a/Tractor_VS/Game1/bin/Windows/x86/Debug/MonoGame.Framework.xml +++ /dev/null @@ -1,18630 +0,0 @@ - - - - MonoGame.Framework - - - -

    - Create a bounding box from the given list of points. - - The array of Vector3 instances defining the point cloud to bound - The base index to start iterating from - The number of points to iterate - A bounding box that encapsulates the given point cloud. - Thrown if the given array is null or has no points. - - - - Create a bounding box from the given list of points. - - The list of Vector3 instances defining the point cloud to bound - The base index to start iterating from - The number of points to iterate - A bounding box that encapsulates the given point cloud. - Thrown if the given list is null or has no points. - - - - Create a bounding box from the given list of points. - - The list of Vector3 instances defining the point cloud to bound - A bounding box that encapsulates the given point cloud. - Thrown if the given list has no points. - - - - Deconstruction method for . - - - - - - - Defines a viewing frustum for intersection operations. - - - - - The number of planes in the frustum. - - - - - The number of corner points in the frustum. - - - - - Gets or sets the of the frustum. - - - - - Gets the near plane of the frustum. - - - - - Gets the far plane of the frustum. - - - - - Gets the left plane of the frustum. - - - - - Gets the right plane of the frustum. - - - - - Gets the top plane of the frustum. - - - - - Gets the bottom plane of the frustum. - - - - - Constructs the frustum by extracting the view planes from a matrix. - - Combined matrix which usually is (View * Projection). - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Containment test between this and specified . - - A for testing. - Result of testing for containment between this and specified . - - - - Containment test between this and specified . - - A for testing. - Result of testing for containment between this and specified as an output parameter. - - - - Containment test between this and specified . - - A for testing. - Result of testing for containment between this and specified . - - - - Containment test between this and specified . - - A for testing. - Result of testing for containment between this and specified . - - - - Containment test between this and specified . - - A for testing. - Result of testing for containment between this and specified as an output parameter. - - - - Containment test between this and specified . - - A for testing. - Result of testing for containment between this and specified . - - - - Containment test between this and specified . - - A for testing. - Result of testing for containment between this and specified as an output parameter. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Returns a copy of internal corners array. - - The array of corners. - - - - Returns a copy of internal corners array. - - The array which values will be replaced to corner values of this instance. It must have size of . - - - - Gets the hash code of this . - - Hash code of this . - - - - Gets whether or not a specified intersects with this . - - A for intersection test. - true if specified intersects with this ; false otherwise. - - - - Gets whether or not a specified intersects with this . - - A for intersection test. - true if specified intersects with this ; false otherwise as an output parameter. - - - - Gets whether or not a specified intersects with this . - - An other for intersection test. - true if other intersects with this ; false otherwise. - - - - Gets whether or not a specified intersects with this . - - A for intersection test. - true if specified intersects with this ; false otherwise. - - - - Gets whether or not a specified intersects with this . - - A for intersection test. - true if specified intersects with this ; false otherwise as an output parameter. - - - - Gets type of intersection between specified and this . - - A for intersection test. - A plane intersection type. - - - - Gets type of intersection between specified and this . - - A for intersection test. - A plane intersection type as an output parameter. - - - - Gets the distance of intersection of and this or null if no intersection happens. - - A for intersection test. - Distance at which ray intersects with this or null if no intersection happens. - - - - Gets the distance of intersection of and this or null if no intersection happens. - - A for intersection test. - Distance at which ray intersects with this or null if no intersection happens as an output parameter. - - - - Returns a representation of this in the format: - {Near:[nearPlane] Far:[farPlane] Left:[leftPlane] Right:[rightPlane] Top:[topPlane] Bottom:[bottomPlane]} - - representation of this . - - - - Describes a sphere in 3D-space for bounding operations. - - - - - The sphere center. - - - - - The sphere radius. - - - - - Constructs a bounding sphere with the specified center and radius. - - The sphere center. - The sphere radius. - - - - Test if a bounding box is fully inside, outside, or just intersecting the sphere. - - The box for testing. - The containment type. - - - - Test if a bounding box is fully inside, outside, or just intersecting the sphere. - - The box for testing. - The containment type as an output parameter. - - - - Test if a frustum is fully inside, outside, or just intersecting the sphere. - - The frustum for testing. - The containment type. - - - - Test if a frustum is fully inside, outside, or just intersecting the sphere. - - The frustum for testing. - The containment type as an output parameter. - - - - Test if a sphere is fully inside, outside, or just intersecting the sphere. - - The other sphere for testing. - The containment type. - - - - Test if a sphere is fully inside, outside, or just intersecting the sphere. - - The other sphere for testing. - The containment type as an output parameter. - - - - Test if a point is fully inside, outside, or just intersecting the sphere. - - The vector in 3D-space for testing. - The containment type. - - - - Test if a point is fully inside, outside, or just intersecting the sphere. - - The vector in 3D-space for testing. - The containment type as an output parameter. - - - - Creates the smallest that can contain a specified . - - The box to create the sphere from. - The new . - - - - Creates the smallest that can contain a specified . - - The box to create the sphere from. - The new as an output parameter. - - - - Creates the smallest that can contain a specified . - - The frustum to create the sphere from. - The new . - - - - Creates the smallest that can contain a specified list of points in 3D-space. - - List of point to create the sphere from. - The new . - - - - Creates the smallest that can contain two spheres. - - First sphere. - Second sphere. - The new . - - - - Creates the smallest that can contain two spheres. - - First sphere. - Second sphere. - The new as an output parameter. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Gets the hash code of this . - - Hash code of this . - - - - Gets whether or not a specified intersects with this sphere. - - The box for testing. - true if intersects with this sphere; false otherwise. - - - - Gets whether or not a specified intersects with this sphere. - - The box for testing. - true if intersects with this sphere; false otherwise. As an output parameter. - - - - Gets whether or not the other intersects with this sphere. - - The other sphere for testing. - true if other intersects with this sphere; false otherwise. - - - - Gets whether or not the other intersects with this sphere. - - The other sphere for testing. - true if other intersects with this sphere; false otherwise. As an output parameter. - - - - Gets whether or not a specified intersects with this sphere. - - The plane for testing. - Type of intersection. - - - - Gets whether or not a specified intersects with this sphere. - - The plane for testing. - Type of intersection as an output parameter. - - - - Gets whether or not a specified intersects with this sphere. - - The ray for testing. - Distance of ray intersection or null if there is no intersection. - - - - Gets whether or not a specified intersects with this sphere. - - The ray for testing. - Distance of ray intersection or null if there is no intersection as an output parameter. - - - - Returns a representation of this in the format: - {Center:[] Radius:[]} - - A representation of this . - - - - Creates a new that contains a transformation of translation and scale from this sphere by the specified . - - The transformation . - Transformed . - - - - Creates a new that contains a transformation of translation and scale from this sphere by the specified . - - The transformation . - Transformed as an output parameter. - - - - Deconstruction method for . - - - - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Describes a 32-bit packed color. - - - - - Constructs an RGBA color from a packed value. - The value is a 32-bit unsigned integer, with R in the least significant octet. - - The packed value. - - - - Constructs an RGBA color from the XYZW unit length components of a vector. - - A representing color. - - - - Constructs an RGBA color from the XYZ unit length components of a vector. Alpha value will be opaque. - - A representing color. - - - - Constructs an RGBA color from a and an alpha value. - - A for RGB values of new instance. - The alpha component value from 0 to 255. - - - - Constructs an RGBA color from color and alpha value. - - A for RGB values of new instance. - Alpha component value from 0.0f to 1.0f. - - - - Constructs an RGBA color from scalars representing red, green and blue values. Alpha value will be opaque. - - Red component value from 0.0f to 1.0f. - Green component value from 0.0f to 1.0f. - Blue component value from 0.0f to 1.0f. - - - - Constructs an RGBA color from scalars representing red, green, blue and alpha values. - - Red component value from 0.0f to 1.0f. - Green component value from 0.0f to 1.0f. - Blue component value from 0.0f to 1.0f. - Alpha component value from 0.0f to 1.0f. - - - - Constructs an RGBA color from scalars representing red, green and blue values. Alpha value will be opaque. - - Red component value from 0 to 255. - Green component value from 0 to 255. - Blue component value from 0 to 255. - - - - Constructs an RGBA color from scalars representing red, green, blue and alpha values. - - Red component value from 0 to 255. - Green component value from 0 to 255. - Blue component value from 0 to 255. - Alpha component value from 0 to 255. - - - - Constructs an RGBA color from scalars representing red, green, blue and alpha values. - - - This overload sets the values directly without clamping, and may therefore be faster than the other overloads. - - - - - - - - - Gets or sets the blue component. - - - - - Gets or sets the green component. - - - - - Gets or sets the red component. - - - - - Gets or sets the alpha component. - - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Gets the hash code of this . - - Hash code of this . - - - - Compares whether current instance is equal to specified object. - - The to compare. - true if the instances are equal; false otherwise. - - - - TransparentBlack color (R:0,G:0,B:0,A:0). - - - - - Transparent color (R:0,G:0,B:0,A:0). - - - - - AliceBlue color (R:240,G:248,B:255,A:255). - - - - - AntiqueWhite color (R:250,G:235,B:215,A:255). - - - - - Aqua color (R:0,G:255,B:255,A:255). - - - - - Aquamarine color (R:127,G:255,B:212,A:255). - - - - - Azure color (R:240,G:255,B:255,A:255). - - - - - Beige color (R:245,G:245,B:220,A:255). - - - - - Bisque color (R:255,G:228,B:196,A:255). - - - - - Black color (R:0,G:0,B:0,A:255). - - - - - BlanchedAlmond color (R:255,G:235,B:205,A:255). - - - - - Blue color (R:0,G:0,B:255,A:255). - - - - - BlueViolet color (R:138,G:43,B:226,A:255). - - - - - Brown color (R:165,G:42,B:42,A:255). - - - - - BurlyWood color (R:222,G:184,B:135,A:255). - - - - - CadetBlue color (R:95,G:158,B:160,A:255). - - - - - Chartreuse color (R:127,G:255,B:0,A:255). - - - - - Chocolate color (R:210,G:105,B:30,A:255). - - - - - Coral color (R:255,G:127,B:80,A:255). - - - - - CornflowerBlue color (R:100,G:149,B:237,A:255). - - - - - Cornsilk color (R:255,G:248,B:220,A:255). - - - - - Crimson color (R:220,G:20,B:60,A:255). - - - - - Cyan color (R:0,G:255,B:255,A:255). - - - - - DarkBlue color (R:0,G:0,B:139,A:255). - - - - - DarkCyan color (R:0,G:139,B:139,A:255). - - - - - DarkGoldenrod color (R:184,G:134,B:11,A:255). - - - - - DarkGray color (R:169,G:169,B:169,A:255). - - - - - DarkGreen color (R:0,G:100,B:0,A:255). - - - - - DarkKhaki color (R:189,G:183,B:107,A:255). - - - - - DarkMagenta color (R:139,G:0,B:139,A:255). - - - - - DarkOliveGreen color (R:85,G:107,B:47,A:255). - - - - - DarkOrange color (R:255,G:140,B:0,A:255). - - - - - DarkOrchid color (R:153,G:50,B:204,A:255). - - - - - DarkRed color (R:139,G:0,B:0,A:255). - - - - - DarkSalmon color (R:233,G:150,B:122,A:255). - - - - - DarkSeaGreen color (R:143,G:188,B:139,A:255). - - - - - DarkSlateBlue color (R:72,G:61,B:139,A:255). - - - - - DarkSlateGray color (R:47,G:79,B:79,A:255). - - - - - DarkTurquoise color (R:0,G:206,B:209,A:255). - - - - - DarkViolet color (R:148,G:0,B:211,A:255). - - - - - DeepPink color (R:255,G:20,B:147,A:255). - - - - - DeepSkyBlue color (R:0,G:191,B:255,A:255). - - - - - DimGray color (R:105,G:105,B:105,A:255). - - - - - DodgerBlue color (R:30,G:144,B:255,A:255). - - - - - Firebrick color (R:178,G:34,B:34,A:255). - - - - - FloralWhite color (R:255,G:250,B:240,A:255). - - - - - ForestGreen color (R:34,G:139,B:34,A:255). - - - - - Fuchsia color (R:255,G:0,B:255,A:255). - - - - - Gainsboro color (R:220,G:220,B:220,A:255). - - - - - GhostWhite color (R:248,G:248,B:255,A:255). - - - - - Gold color (R:255,G:215,B:0,A:255). - - - - - Goldenrod color (R:218,G:165,B:32,A:255). - - - - - Gray color (R:128,G:128,B:128,A:255). - - - - - Green color (R:0,G:128,B:0,A:255). - - - - - GreenYellow color (R:173,G:255,B:47,A:255). - - - - - Honeydew color (R:240,G:255,B:240,A:255). - - - - - HotPink color (R:255,G:105,B:180,A:255). - - - - - IndianRed color (R:205,G:92,B:92,A:255). - - - - - Indigo color (R:75,G:0,B:130,A:255). - - - - - Ivory color (R:255,G:255,B:240,A:255). - - - - - Khaki color (R:240,G:230,B:140,A:255). - - - - - Lavender color (R:230,G:230,B:250,A:255). - - - - - LavenderBlush color (R:255,G:240,B:245,A:255). - - - - - LawnGreen color (R:124,G:252,B:0,A:255). - - - - - LemonChiffon color (R:255,G:250,B:205,A:255). - - - - - LightBlue color (R:173,G:216,B:230,A:255). - - - - - LightCoral color (R:240,G:128,B:128,A:255). - - - - - LightCyan color (R:224,G:255,B:255,A:255). - - - - - LightGoldenrodYellow color (R:250,G:250,B:210,A:255). - - - - - LightGray color (R:211,G:211,B:211,A:255). - - - - - LightGreen color (R:144,G:238,B:144,A:255). - - - - - LightPink color (R:255,G:182,B:193,A:255). - - - - - LightSalmon color (R:255,G:160,B:122,A:255). - - - - - LightSeaGreen color (R:32,G:178,B:170,A:255). - - - - - LightSkyBlue color (R:135,G:206,B:250,A:255). - - - - - LightSlateGray color (R:119,G:136,B:153,A:255). - - - - - LightSteelBlue color (R:176,G:196,B:222,A:255). - - - - - LightYellow color (R:255,G:255,B:224,A:255). - - - - - Lime color (R:0,G:255,B:0,A:255). - - - - - LimeGreen color (R:50,G:205,B:50,A:255). - - - - - Linen color (R:250,G:240,B:230,A:255). - - - - - Magenta color (R:255,G:0,B:255,A:255). - - - - - Maroon color (R:128,G:0,B:0,A:255). - - - - - MediumAquamarine color (R:102,G:205,B:170,A:255). - - - - - MediumBlue color (R:0,G:0,B:205,A:255). - - - - - MediumOrchid color (R:186,G:85,B:211,A:255). - - - - - MediumPurple color (R:147,G:112,B:219,A:255). - - - - - MediumSeaGreen color (R:60,G:179,B:113,A:255). - - - - - MediumSlateBlue color (R:123,G:104,B:238,A:255). - - - - - MediumSpringGreen color (R:0,G:250,B:154,A:255). - - - - - MediumTurquoise color (R:72,G:209,B:204,A:255). - - - - - MediumVioletRed color (R:199,G:21,B:133,A:255). - - - - - MidnightBlue color (R:25,G:25,B:112,A:255). - - - - - MintCream color (R:245,G:255,B:250,A:255). - - - - - MistyRose color (R:255,G:228,B:225,A:255). - - - - - Moccasin color (R:255,G:228,B:181,A:255). - - - - - MonoGame orange theme color (R:231,G:60,B:0,A:255). - - - - - NavajoWhite color (R:255,G:222,B:173,A:255). - - - - - Navy color (R:0,G:0,B:128,A:255). - - - - - OldLace color (R:253,G:245,B:230,A:255). - - - - - Olive color (R:128,G:128,B:0,A:255). - - - - - OliveDrab color (R:107,G:142,B:35,A:255). - - - - - Orange color (R:255,G:165,B:0,A:255). - - - - - OrangeRed color (R:255,G:69,B:0,A:255). - - - - - Orchid color (R:218,G:112,B:214,A:255). - - - - - PaleGoldenrod color (R:238,G:232,B:170,A:255). - - - - - PaleGreen color (R:152,G:251,B:152,A:255). - - - - - PaleTurquoise color (R:175,G:238,B:238,A:255). - - - - - PaleVioletRed color (R:219,G:112,B:147,A:255). - - - - - PapayaWhip color (R:255,G:239,B:213,A:255). - - - - - PeachPuff color (R:255,G:218,B:185,A:255). - - - - - Peru color (R:205,G:133,B:63,A:255). - - - - - Pink color (R:255,G:192,B:203,A:255). - - - - - Plum color (R:221,G:160,B:221,A:255). - - - - - PowderBlue color (R:176,G:224,B:230,A:255). - - - - - Purple color (R:128,G:0,B:128,A:255). - - - - - Red color (R:255,G:0,B:0,A:255). - - - - - RosyBrown color (R:188,G:143,B:143,A:255). - - - - - RoyalBlue color (R:65,G:105,B:225,A:255). - - - - - SaddleBrown color (R:139,G:69,B:19,A:255). - - - - - Salmon color (R:250,G:128,B:114,A:255). - - - - - SandyBrown color (R:244,G:164,B:96,A:255). - - - - - SeaGreen color (R:46,G:139,B:87,A:255). - - - - - SeaShell color (R:255,G:245,B:238,A:255). - - - - - Sienna color (R:160,G:82,B:45,A:255). - - - - - Silver color (R:192,G:192,B:192,A:255). - - - - - SkyBlue color (R:135,G:206,B:235,A:255). - - - - - SlateBlue color (R:106,G:90,B:205,A:255). - - - - - SlateGray color (R:112,G:128,B:144,A:255). - - - - - Snow color (R:255,G:250,B:250,A:255). - - - - - SpringGreen color (R:0,G:255,B:127,A:255). - - - - - SteelBlue color (R:70,G:130,B:180,A:255). - - - - - Tan color (R:210,G:180,B:140,A:255). - - - - - Teal color (R:0,G:128,B:128,A:255). - - - - - Thistle color (R:216,G:191,B:216,A:255). - - - - - Tomato color (R:255,G:99,B:71,A:255). - - - - - Turquoise color (R:64,G:224,B:208,A:255). - - - - - Violet color (R:238,G:130,B:238,A:255). - - - - - Wheat color (R:245,G:222,B:179,A:255). - - - - - White color (R:255,G:255,B:255,A:255). - - - - - WhiteSmoke color (R:245,G:245,B:245,A:255). - - - - - Yellow color (R:255,G:255,B:0,A:255). - - - - - YellowGreen color (R:154,G:205,B:50,A:255). - - - - - Performs linear interpolation of . - - Source . - Destination . - Interpolation factor. - Interpolated . - - - - should be used instead of this function. - - Interpolated . - - - - Multiply by value. - - Source . - Multiplicator. - Multiplication result. - - - - Multiply by value. - - Source . - Multiplicator. - Multiplication result. - - - - Gets a representation for this object. - - A representation for this object. - - - - Gets a representation for this object. - - A representation for this object. - - - - Gets or sets packed value of this . - - - - - Returns a representation of this in the format: - {R:[red] G:[green] B:[blue] A:[alpha]} - - representation of this . - - - - Translate a non-premultipled alpha to a that contains premultiplied alpha. - - A representing color. - A which contains premultiplied alpha data. - - - - Translate a non-premultipled alpha to a that contains premultiplied alpha. - - Red component value. - Green component value. - Blue component value. - Alpha component value. - A which contains premultiplied alpha data. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Deconstruction method for . - - - - - - - - Deconstruction method for with Alpha. - - - - - - - - - Defines how the bounding volumes intersects or contain one another. - - - - - Indicates that there is no overlap between two bounding volumes. - - - - - Indicates that one bounding volume completely contains another volume. - - - - - Indicates that bounding volumes partially overlap one another. - - - - - Defines the continuity of keys on a . - - - - - Interpolation can be used between this key and the next. - - - - - Interpolation cannot be used. A position between the two points returns this point. - - - - - Contains a collection of points in 2D space and provides methods for evaluating features of the curve they define. - - - - - Returns true if this curve is constant (has zero or one points); false otherwise. - - - - - Defines how to handle weighting values that are less than the first control point in the curve. - - - - - Defines how to handle weighting values that are greater than the last control point in the curve. - - - - - The collection of curve keys. - - - - - Constructs a curve. - - - - - Creates a copy of this curve. - - A copy of this curve. - - - - Evaluate the value at a position of this . - - The position on this . - Value at the position on this . - - - - Computes tangents for all keys in the collection. - - The tangent type for both in and out. - - - - Computes tangents for all keys in the collection. - - The tangent in-type. for more details. - The tangent out-type. for more details. - - - - Computes tangent for the specific key in the collection. - - The index of a key in the collection. - The tangent type for both in and out. - - - - Computes tangent for the specific key in the collection. - - The index of key in the collection. - The tangent in-type. for more details. - The tangent out-type. for more details. - - - - The collection of the elements and a part of the class. - - - - - Indexer. - - The index of key in this collection. - at position. - - - - Returns the count of keys in this collection. - - - - - Returns false because it is not a read-only collection. - - - - - Creates a new instance of class. - - - - - Adds a key to this collection. - - New key for the collection. - Throws if is null. - The new key would be added respectively to a position of that key and the position of other keys. - - - - Removes all keys from this collection. - - - - - Creates a copy of this collection. - - A copy of this collection. - - - - Determines whether this collection contains a specific key. - - The key to locate in this collection. - true if the key is found; false otherwise. - - - - Copies the keys of this collection to an array, starting at the array index provided. - - Destination array where elements will be copied. - The zero-based index in the array to start copying from. - - - - Returns an enumerator that iterates through the collection. - - An enumerator for the . - - - - Finds element in the collection and returns its index. - - Element for the search. - Index of the element; or -1 if item is not found. - - - - Removes element at the specified index. - - The index which element will be removed. - - - - Removes specific element. - - The element - true if item is successfully removed; false otherwise. This method also returns false if item was not found. - - - - Key point on the . - - - - - Gets or sets the indicator whether the segment between this point and the next point on the curve is discrete or continuous. - - - - - Gets a position of the key on the curve. - - - - - Gets or sets a tangent when approaching this point from the previous point on the curve. - - - - - Gets or sets a tangent when leaving this point to the next point on the curve. - - - - - Gets a value of this point. - - - - - Creates a new instance of class with position: 0 and value: 0. - - - - - Creates a new instance of class. - - Position on the curve. - Value of the control point. - - - - Creates a new instance of class. - - Position on the curve. - Value of the control point. - Tangent approaching point from the previous point on the curve. - Tangent leaving point toward next point on the curve. - - - - Creates a new instance of class. - - Position on the curve. - Value of the control point. - Tangent approaching point from the previous point on the curve. - Tangent leaving point toward next point on the curve. - Indicates whether the curve is discrete or continuous. - - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Creates a copy of this key. - - A copy of this key. - - - - Defines how the value is determined for position before first point or after the end point on the . - - - - - The value of will be evaluated as first point for positions before the beginning and end point for positions after the end. - - - - - The positions will wrap around from the end to beginning of the for determined the value. - - - - - The positions will wrap around from the end to beginning of the . - The value will be offset by the difference between the values of first and end multiplied by the wrap amount. - If the position is before the beginning of the the difference will be subtracted from its value; otherwise the difference will be added. - - - - - The value at the end of the act as an offset from the same side of the toward the opposite side. - - - - - The linear interpolation will be performed for determined the value. - - - - - Defines the different tangent types to be calculated for points in a . - - - - - The tangent which always has a value equal to zero. - - - - - The tangent which contains a difference between current tangent value and the tangent value from the previous . - - - - - The smoouth tangent which contains the inflection between and by taking into account the values of both neighbors of the . - - - - - Defines the orientation of the display. - - - - - The default orientation. - - - - - The display is rotated counterclockwise into a landscape orientation. Width is greater than height. - - - - - The display is rotated clockwise into a landscape orientation. Width is greater than height. - - - - - The display is rotated as portrait, where height is greater than width. - - - - - The display is rotated as inverted portrait, where height is greater than width. - - - - - Unknown display orientation. - - - - - Provides helper methods to make it easier - to safely raise events. - - - - - Safely raises an event by storing a copy of the event's delegate - in the parameter and checking it for - null before invoking it. - - - The object raising the event. - to be invoked - The passed to - - - - Safely raises an event by storing a copy of the event's delegate - in the parameter and checking it for - null before invoking it. - - The object raising the event. - to be invoked - The passed to - - - - Helper class for processing internal framework events. - - - If you use class, is called automatically. - Otherwise you must call it as part of your game loop. - - - - - Processes framework events. - - - - - Event that is triggered when a is added - to this . - - - - - Event that is triggered when a is removed - from this . - - - - - Removes every from this . - Triggers once for each removed. - - - - - Shuts down the component. - - - - - Shuts down the component. - - - - - The maximum amount of time we will frameskip over and only perform Update calls with no Draw calls. - MonoGame extension. - - - - - The SortingFilteringCollection class provides efficient, reusable - sorting and filtering based on a configurable sort comparer, filter - predicate, and associate change events. - - - - - When implemented in a derived class, reports the default - GameRunBehavior for this platform. - - - - - Gets the Game instance that owns this GamePlatform instance. - - - - - Raises the AsyncRunLoopEnded event. This method must be called by - derived classes when the asynchronous run loop they start has - stopped running. - - - - - Gives derived classes an opportunity to do work before any - components are initialized. Note that the base implementation sets - IsActive to true, so derived classes should either call the base - implementation or set IsActive to true by their own means. - - - - - Gives derived classes an opportunity to do work just before the - run loop is begun. Implementations may also return false to prevent - the run loop from starting. - - - - - - When implemented in a derived, ends the active run loop. - - - - - When implemented in a derived, starts the run loop and blocks - until it has ended. - - - - - When implemented in a derived, starts the run loop and returns - immediately. - - - - - Gives derived classes an opportunity to do work just before Update - is called for all IUpdatable components. Returning false from this - method will result in this round of Update calls being skipped. - - - - - - - Gives derived classes an opportunity to do work just before Draw - is called for all IDrawable components. Returning false from this - method will result in this round of Draw calls being skipped. - - - - - - - When implemented in a derived class, causes the game to enter - full-screen mode. - - - - - When implemented in a derived class, causes the game to exit - full-screen mode. - - - - - Gives derived classes an opportunity to modify - Game.TargetElapsedTime before it is set. - - The proposed new value of TargetElapsedTime. - The new value of TargetElapsedTime that will be set. - - - - Starts a device transition (windowed to full screen or vice versa). - - - Specifies whether the device will be in full-screen mode upon completion of the change. - - - - - Completes a device transition. - - - Screen device name. - - - The new width of the game's client window. - - - The new height of the game's client window. - - - - - Gives derived classes an opportunity to take action after - Game.TargetElapsedTime has been set. - - - - - MSDN: Use this method if your game is recovering from a slow-running state, and ElapsedGameTime is too large to be useful. - Frame timing is generally handled by the Game class, but some platforms still handle it elsewhere. Once all platforms - rely on the Game class's functionality, this method and any overrides should be removed. - - - - - Called by the GraphicsDeviceManager to notify the platform - that the presentation parameters have changed. - - The new presentation parameters. - - - - Performs application-defined tasks associated with freeing, - releasing, or resetting unmanaged resources. - - - - - Log the specified Message. - - - - - - - - Defines how should be runned. - - - - - The game loop will be runned asynchronous. - - - - - The game loop will be runned synchronous. - - - - - Gets or sets a bool that enables usage of Alt+F4 for window closing on desktop platforms. Value is true by default. - - - - - The location of this window on the desktop, eg: global coordinate space - which stretches across all screens. - - - - - Gets or sets the title of the game window. - - - For Windows 8 and Windows 10 UWP this has no effect. For these platforms the title should be - set by using the DisplayName property found in the app manifest file. - - - - - Determines whether the border of the window is visible. Currently only supported on the WinDX and WinGL/Linux platforms. - - - Thrown when trying to use this property on a platform other than the WinDX and WinGL/Linux platforms. - - - - - Use this event to retrieve text for objects like textbox's. - This event is not raised by noncharacter keys. - This event also supports key repeat. - For more information this event is based off: - http://msdn.microsoft.com/en-AU/library/system.windows.forms.control.keypress.aspx - - - This event is only supported on the Windows DirectX, Windows OpenGL and Linux platforms. - - - - - Buffered keyboard KeyDown event. - - - - - Buffered keyboard KeyUp event. - - - - - Used by the platform code to control the graphics device. - - - - - Called at the start of rendering a frame. - - Returns true if the frame should be rendered. - - - - Called to create the graphics device. - - Does nothing if the graphics device is already created. - - - - Called after rendering to present the frame to the screen. - - - - - Contains commonly used precalculated values and mathematical operations. - - - - - Represents the mathematical constant e(2.71828175). - - - - - Represents the log base ten of e(0.4342945). - - - - - Represents the log base two of e(1.442695). - - - - - Represents the value of pi(3.14159274). - - - - - Represents the value of pi divided by two(1.57079637). - - - - - Represents the value of pi divided by four(0.7853982). - - - - - Represents the value of pi times two(6.28318548). - - - - - Represents the value of pi times two(6.28318548). - This is an alias of TwoPi. - - - - - Returns the Cartesian coordinate for one axis of a point that is defined by a given triangle and two normalized barycentric (areal) coordinates. - - The coordinate on one axis of vertex 1 of the defining triangle. - The coordinate on the same axis of vertex 2 of the defining triangle. - The coordinate on the same axis of vertex 3 of the defining triangle. - The normalized barycentric (areal) coordinate b2, equal to the weighting factor for vertex 2, the coordinate of which is specified in value2. - The normalized barycentric (areal) coordinate b3, equal to the weighting factor for vertex 3, the coordinate of which is specified in value3. - Cartesian coordinate of the specified point with respect to the axis being used. - - - - Performs a Catmull-Rom interpolation using the specified positions. - - The first position in the interpolation. - The second position in the interpolation. - The third position in the interpolation. - The fourth position in the interpolation. - Weighting factor. - A position that is the result of the Catmull-Rom interpolation. - - - - Restricts a value to be within a specified range. - - The value to clamp. - The minimum value. If value is less than min, min will be returned. - The maximum value. If value is greater than max, max will be returned. - The clamped value. - - - - Restricts a value to be within a specified range. - - The value to clamp. - The minimum value. If value is less than min, min will be returned. - The maximum value. If value is greater than max, max will be returned. - The clamped value. - - - - Calculates the absolute value of the difference of two values. - - Source value. - Source value. - Distance between the two values. - - - - Performs a Hermite spline interpolation. - - Source position. - Source tangent. - Source position. - Source tangent. - Weighting factor. - The result of the Hermite spline interpolation. - - - - Linearly interpolates between two values. - - Source value. - Destination value. - Value between 0 and 1 indicating the weight of value2. - Interpolated value. - This method performs the linear interpolation based on the following formula: - value1 + (value2 - value1) * amount. - Passing amount a value of 0 will cause value1 to be returned, a value of 1 will cause value2 to be returned. - See for a less efficient version with more precision around edge cases. - - - - - Linearly interpolates between two values. - This method is a less efficient, more precise version of . - See remarks for more info. - - Source value. - Destination value. - Value between 0 and 1 indicating the weight of value2. - Interpolated value. - This method performs the linear interpolation based on the following formula: - ((1 - amount) * value1) + (value2 * amount). - Passing amount a value of 0 will cause value1 to be returned, a value of 1 will cause value2 to be returned. - This method does not have the floating point precision issue that has. - i.e. If there is a big gap between value1 and value2 in magnitude (e.g. value1=10000000000000000, value2=1), - right at the edge of the interpolation range (amount=1), will return 0 (whereas it should return 1). - This also holds for value1=10^17, value2=10; value1=10^18,value2=10^2... so on. - For an in depth explanation of the issue, see below references: - Relevant Wikipedia Article: https://en.wikipedia.org/wiki/Linear_interpolation#Programming_language_support - Relevant StackOverflow Answer: http://stackoverflow.com/questions/4353525/floating-point-linear-interpolation#answer-23716956 - - - - - Returns the greater of two values. - - Source value. - Source value. - The greater value. - - - - Returns the greater of two values. - - Source value. - Source value. - The greater value. - - - - Returns the lesser of two values. - - Source value. - Source value. - The lesser value. - - - - Returns the lesser of two values. - - Source value. - Source value. - The lesser value. - - - - Interpolates between two values using a cubic equation. - - Source value. - Source value. - Weighting value. - Interpolated value. - - - - Converts radians to degrees. - - The angle in radians. - The angle in degrees. - - This method uses double precission internally, - though it returns single float - Factor = 180 / pi - - - - - Converts degrees to radians. - - The angle in degrees. - The angle in radians. - - This method uses double precission internally, - though it returns single float - Factor = pi / 180 - - - - - Reduces a given angle to a value between π and -π. - - The angle to reduce, in radians. - The new angle, in radians. - - - - Determines if value is powered by two. - - A value. - true if value is powered by two; otherwise false. - - - - Represents the right-handed 4x4 floating point matrix, which can store translation, scale and rotation information. - - - - - Constructs a matrix. - - A first row and first column value. - A first row and second column value. - A first row and third column value. - A first row and fourth column value. - A second row and first column value. - A second row and second column value. - A second row and third column value. - A second row and fourth column value. - A third row and first column value. - A third row and second column value. - A third row and third column value. - A third row and fourth column value. - A fourth row and first column value. - A fourth row and second column value. - A fourth row and third column value. - A fourth row and fourth column value. - - - - Constructs a matrix. - - A first row of the created matrix. - A second row of the created matrix. - A third row of the created matrix. - A fourth row of the created matrix. - - - - A first row and first column value. - - - - - A first row and second column value. - - - - - A first row and third column value. - - - - - A first row and fourth column value. - - - - - A second row and first column value. - - - - - A second row and second column value. - - - - - A second row and third column value. - - - - - A second row and fourth column value. - - - - - A third row and first column value. - - - - - A third row and second column value. - - - - - A third row and third column value. - - - - - A third row and fourth column value. - - - - - A fourth row and first column value. - - - - - A fourth row and second column value. - - - - - A fourth row and third column value. - - - - - A fourth row and fourth column value. - - - - - The backward vector formed from the third row M31, M32, M33 elements. - - - - - The down vector formed from the second row -M21, -M22, -M23 elements. - - - - - The forward vector formed from the third row -M31, -M32, -M33 elements. - - - - - Returns the identity matrix. - - - - - The left vector formed from the first row -M11, -M12, -M13 elements. - - - - - The right vector formed from the first row M11, M12, M13 elements. - - - - - Position stored in this matrix. - - - - - The upper vector formed from the second row M21, M22, M23 elements. - - - - - Creates a new which contains sum of two matrixes. - - The first matrix to add. - The second matrix to add. - The result of the matrix addition. - - - - Creates a new which contains sum of two matrixes. - - The first matrix to add. - The second matrix to add. - The result of the matrix addition as an output parameter. - - - - Creates a new for spherical billboarding that rotates around specified object position. - - Position of billboard object. It will rotate around that vector. - The camera position. - The camera up vector. - Optional camera forward vector. - The for spherical billboarding. - - - - Creates a new for spherical billboarding that rotates around specified object position. - - Position of billboard object. It will rotate around that vector. - The camera position. - The camera up vector. - Optional camera forward vector. - The for spherical billboarding as an output parameter. - - - - Creates a new for cylindrical billboarding that rotates around specified axis. - - Object position the billboard will rotate around. - Camera position. - Axis of billboard for rotation. - Optional camera forward vector. - Optional object forward vector. - The for cylindrical billboarding. - - - - Creates a new for cylindrical billboarding that rotates around specified axis. - - Object position the billboard will rotate around. - Camera position. - Axis of billboard for rotation. - Optional camera forward vector. - Optional object forward vector. - The for cylindrical billboarding as an output parameter. - - - - Creates a new which contains the rotation moment around specified axis. - - The axis of rotation. - The angle of rotation in radians. - The rotation . - - - - Creates a new which contains the rotation moment around specified axis. - - The axis of rotation. - The angle of rotation in radians. - The rotation as an output parameter. - - - - Creates a new rotation from a . - - of rotation moment. - The rotation . - - - - Creates a new rotation from a . - - of rotation moment. - The rotation as an output parameter. - - - - Creates a new rotation from the specified yaw, pitch and roll values. - - The yaw rotation value in radians. - The pitch rotation value in radians. - The roll rotation value in radians. - The rotation . - For more information about yaw, pitch and roll visit http://en.wikipedia.org/wiki/Euler_angles. - - - - - Creates a new rotation from the specified yaw, pitch and roll values. - - The yaw rotation value in radians. - The pitch rotation value in radians. - The roll rotation value in radians. - The rotation as an output parameter. - For more information about yaw, pitch and roll visit http://en.wikipedia.org/wiki/Euler_angles. - - - - - Creates a new viewing . - - Position of the camera. - Lookup vector of the camera. - The direction of the upper edge of the camera. - The viewing . - - - - Creates a new viewing . - - Position of the camera. - Lookup vector of the camera. - The direction of the upper edge of the camera. - The viewing as an output parameter. - - - - Creates a new projection for orthographic view. - - Width of the viewing volume. - Height of the viewing volume. - Depth of the near plane. - Depth of the far plane. - The new projection for orthographic view. - - - - Creates a new projection for orthographic view. - - Width of the viewing volume. - Height of the viewing volume. - Depth of the near plane. - Depth of the far plane. - The new projection for orthographic view as an output parameter. - - - - Creates a new projection for customized orthographic view. - - Lower x-value at the near plane. - Upper x-value at the near plane. - Lower y-coordinate at the near plane. - Upper y-value at the near plane. - Depth of the near plane. - Depth of the far plane. - The new projection for customized orthographic view. - - - - Creates a new projection for customized orthographic view. - - The viewing volume. - Depth of the near plane. - Depth of the far plane. - The new projection for customized orthographic view. - - - - Creates a new projection for customized orthographic view. - - Lower x-value at the near plane. - Upper x-value at the near plane. - Lower y-coordinate at the near plane. - Upper y-value at the near plane. - Depth of the near plane. - Depth of the far plane. - The new projection for customized orthographic view as an output parameter. - - - - Creates a new projection for perspective view. - - Width of the viewing volume. - Height of the viewing volume. - Distance to the near plane. - Distance to the far plane. - The new projection for perspective view. - - - - Creates a new projection for perspective view. - - Width of the viewing volume. - Height of the viewing volume. - Distance to the near plane. - Distance to the far plane. - The new projection for perspective view as an output parameter. - - - - Creates a new projection for perspective view with field of view. - - Field of view in the y direction in radians. - Width divided by height of the viewing volume. - Distance to the near plane. - Distance to the far plane. - The new projection for perspective view with FOV. - - - - Creates a new projection for perspective view with field of view. - - Field of view in the y direction in radians. - Width divided by height of the viewing volume. - Distance of the near plane. - Distance of the far plane. - The new projection for perspective view with FOV as an output parameter. - - - - Creates a new projection for customized perspective view. - - Lower x-value at the near plane. - Upper x-value at the near plane. - Lower y-coordinate at the near plane. - Upper y-value at the near plane. - Distance to the near plane. - Distance to the far plane. - The new for customized perspective view. - - - - Creates a new projection for customized perspective view. - - The viewing volume. - Distance to the near plane. - Distance to the far plane. - The new for customized perspective view. - - - - Creates a new projection for customized perspective view. - - Lower x-value at the near plane. - Upper x-value at the near plane. - Lower y-coordinate at the near plane. - Upper y-value at the near plane. - Distance to the near plane. - Distance to the far plane. - The new for customized perspective view as an output parameter. - - - - Creates a new rotation around X axis. - - Angle in radians. - The rotation around X axis. - - - - Creates a new rotation around X axis. - - Angle in radians. - The rotation around X axis as an output parameter. - - - - Creates a new rotation around Y axis. - - Angle in radians. - The rotation around Y axis. - - - - Creates a new rotation around Y axis. - - Angle in radians. - The rotation around Y axis as an output parameter. - - - - Creates a new rotation around Z axis. - - Angle in radians. - The rotation around Z axis. - - - - Creates a new rotation around Z axis. - - Angle in radians. - The rotation around Z axis as an output parameter. - - - - Creates a new scaling . - - Scale value for all three axises. - The scaling . - - - - Creates a new scaling . - - Scale value for all three axises. - The scaling as an output parameter. - - - - Creates a new scaling . - - Scale value for X axis. - Scale value for Y axis. - Scale value for Z axis. - The scaling . - - - - Creates a new scaling . - - Scale value for X axis. - Scale value for Y axis. - Scale value for Z axis. - The scaling as an output parameter. - - - - Creates a new scaling . - - representing x,y and z scale values. - The scaling . - - - - Creates a new scaling . - - representing x,y and z scale values. - The scaling as an output parameter. - - - - Creates a new that flattens geometry into a specified as if casting a shadow from a specified light source. - - A vector specifying the direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A that can be used to flatten geometry onto the specified plane from the specified direction. - - - - Creates a new that flattens geometry into a specified as if casting a shadow from a specified light source. - - A vector specifying the direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A that can be used to flatten geometry onto the specified plane from the specified direction as an output parameter. - - - - Creates a new translation . - - X coordinate of translation. - Y coordinate of translation. - Z coordinate of translation. - The translation . - - - - Creates a new translation . - - X,Y and Z coordinates of translation. - The translation as an output parameter. - - - - Creates a new translation . - - X,Y and Z coordinates of translation. - The translation . - - - - Creates a new translation . - - X coordinate of translation. - Y coordinate of translation. - Z coordinate of translation. - The translation as an output parameter. - - - - Creates a new reflection . - - The plane that used for reflection calculation. - The reflection . - - - - Creates a new reflection . - - The plane that used for reflection calculation. - The reflection as an output parameter. - - - - Creates a new world . - - The position vector. - The forward direction vector. - The upward direction vector. Usually . - The world . - - - - Creates a new world . - - The position vector. - The forward direction vector. - The upward direction vector. Usually . - The world as an output parameter. - - - - Decomposes this matrix to translation, rotation and scale elements. Returns true if matrix can be decomposed; false otherwise. - - Scale vector as an output parameter. - Rotation quaternion as an output parameter. - Translation vector as an output parameter. - true if matrix can be decomposed; false otherwise. - - - - Returns a determinant of this . - - Determinant of this - See more about determinant here - http://en.wikipedia.org/wiki/Determinant. - - - - - Divides the elements of a by the elements of another matrix. - - Source . - Divisor . - The result of dividing the matrix. - - - - Divides the elements of a by the elements of another matrix. - - Source . - Divisor . - The result of dividing the matrix as an output parameter. - - - - Divides the elements of a by a scalar. - - Source . - Divisor scalar. - The result of dividing a matrix by a scalar. - - - - Divides the elements of a by a scalar. - - Source . - Divisor scalar. - The result of dividing a matrix by a scalar as an output parameter. - - - - Compares whether current instance is equal to specified without any tolerance. - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified without any tolerance. - - The to compare. - true if the instances are equal; false otherwise. - - - - Gets the hash code of this . - - Hash code of this . - - - - Creates a new which contains inversion of the specified matrix. - - Source . - The inverted matrix. - - - - Creates a new which contains inversion of the specified matrix. - - Source . - The inverted matrix as output parameter. - - - - Creates a new that contains linear interpolation of the values in specified matrixes. - - The first . - The second . - Weighting value(between 0.0 and 1.0). - >The result of linear interpolation of the specified matrixes. - - - - Creates a new that contains linear interpolation of the values in specified matrixes. - - The first . - The second . - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified matrixes as an output parameter. - - - - Creates a new that contains a multiplication of two matrix. - - Source . - Source . - Result of the matrix multiplication. - - - - Creates a new that contains a multiplication of two matrix. - - Source . - Source . - Result of the matrix multiplication as an output parameter. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - Result of the matrix multiplication with a scalar. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - Result of the matrix multiplication with a scalar as an output parameter. - - - - Copy the values of specified to the float array. - - The source . - The array which matrix values will be stored. - - Required for OpenGL 2.0 projection matrix stuff. - - - - - Returns a matrix with the all values negated. - - Source . - Result of the matrix negation. - - - - Returns a matrix with the all values negated. - - Source . - Result of the matrix negation as an output parameter. - - - - Adds two matrixes. - - Source on the left of the add sign. - Source on the right of the add sign. - Sum of the matrixes. - - - - Divides the elements of a by the elements of another . - - Source on the left of the div sign. - Divisor on the right of the div sign. - The result of dividing the matrixes. - - - - Divides the elements of a by a scalar. - - Source on the left of the div sign. - Divisor scalar on the right of the div sign. - The result of dividing a matrix by a scalar. - - - - Compares whether two instances are equal without any tolerance. - - Source on the left of the equal sign. - Source on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal without any tolerance. - - Source on the left of the not equal sign. - Source on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Multiplies two matrixes. - - Source on the left of the mul sign. - Source on the right of the mul sign. - Result of the matrix multiplication. - - Using matrix multiplication algorithm - see http://en.wikipedia.org/wiki/Matrix_multiplication. - - - - - Multiplies the elements of matrix by a scalar. - - Source on the left of the mul sign. - Scalar value on the right of the mul sign. - Result of the matrix multiplication with a scalar. - - - - Subtracts the values of one from another . - - Source on the left of the sub sign. - Source on the right of the sub sign. - Result of the matrix subtraction. - - - - Inverts values in the specified . - - Source on the right of the sub sign. - Result of the inversion. - - - - Creates a new that contains subtraction of one matrix from another. - - The first . - The second . - The result of the matrix subtraction. - - - - Creates a new that contains subtraction of one matrix from another. - - The first . - The second . - The result of the matrix subtraction as an output parameter. - - - - Returns a representation of this in the format: - {M11:[] M12:[] M13:[] M14:[]} - {M21:[] M12:[] M13:[] M14:[]} - {M31:[] M32:[] M33:[] M34:[]} - {M41:[] M42:[] M43:[] M44:[]} - - A representation of this . - - - - Swap the matrix rows and columns. - - The matrix for transposing operation. - The new which contains the transposing result. - - - - Swap the matrix rows and columns. - - The matrix for transposing operation. - The new which contains the transposing result as an output parameter. - - - - Helper method for using the Laplace expansion theorem using two rows expansions to calculate major and - minor determinants of a 4x4 matrix. This method is used for inverting a matrix. - - - - - Provides functionality to handle input from keyboards, mice, gamepads, etc. - - - - - Defines the buttons on gamepad. - - - - - Directional pad up. - - - - - Directional pad down. - - - - - Directional pad left. - - - - - Directional pad right. - - - - - START button. - - - - - BACK button. - - - - - Left stick button (pressing the left stick). - - - - - Right stick button (pressing the right stick). - - - - - Left bumper (shoulder) button. - - - - - Right bumper (shoulder) button. - - - - - Big button. - - - - - A button. - - - - - B button. - - - - - X button. - - - - - Y button. - - - - - Left stick is towards the left. - - - - - Right trigger. - - - - - Left trigger. - - - - - Right stick is towards up. - - - - - Right stick is towards down. - - - - - Right stick is towards the right. - - - - - Right stick is towards the left. - - - - - Left stick is towards up. - - - - - Left stick is towards down. - - - - - Left stick is towards the right. - - - - - Defines a button state for buttons of mouse, gamepad or joystick. - - - - - The button is released. - - - - - The button is pressed. - - - - - Supports querying the game controllers and setting the vibration motors. - - - - - Returns the capabilites of the connected controller. - - Player index for the controller you want to query. - The capabilites of the controller. - - - - Returns the capabilites of the connected controller. - - Index for the controller you want to query. - The capabilites of the controller. - - - - Gets the current state of a game pad controller with an independent axes dead zone. - - Player index for the controller you want to query. - The state of the controller. - - - - Gets the current state of a game pad controller with an independent axes dead zone. - - Index for the controller you want to query. - The state of the controller. - - - - Gets the current state of a game pad controller, using a specified dead zone - on analog stick positions. - - Player index for the controller you want to query. - Enumerated value that specifies what dead zone type to use. - The state of the controller. - - - - Gets the current state of a game pad controller, using a specified dead zone - on analog stick positions. - - Index for the controller you want to query. - Enumerated value that specifies what dead zone type to use. - The state of the controller. - - - - Gets the current state of a game pad controller, using a specified dead zone - on analog stick positions. - - Player index for the controller you want to query. - Enumerated value that specifies what dead zone type to use for the left stick. - Enumerated value that specifies what dead zone type to use for the right stick. - The state of the controller. - - - - Gets the current state of a game pad controller, using a specified dead zone - on analog stick positions. - - Index for the controller you want to query. - Enumerated value that specifies what dead zone type to use for the left stick. - Enumerated value that specifies what dead zone type to use for the right stick. - The state of the controller. - - - - Sets the vibration motor speeds on the controller device if supported. - - Player index that identifies the controller to set. - The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. - The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. - Returns true if the vibration motors were set. - - - - Sets the vibration motor speeds on the controller device if supported. - - Player index that identifies the controller to set. - The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. - The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. - (Xbox One controller only) The speed of the left trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor. - (Xbox One controller only) The speed of the right trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor. - Returns true if the vibration motors were set. - - - - Sets the vibration motor speeds on the controller device if supported. - - Index for the controller you want to query. - The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. - The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. - Returns true if the vibration motors were set. - - - - Sets the vibration motor speeds on the controller device if supported. - - Index for the controller you want to query. - The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. - The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. - (Xbox One controller only) The speed of the left trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor. - (Xbox One controller only) The speed of the right trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor. - Returns true if the vibration motors were set. - - - - The maximum number of game pads supported on this system. Attempting to - access a gamepad index higher than this number will result in an - being thrown by the API. - - - - - A struct that represents the current button states for the controller. - - - - - Gets a value indicating if the button A is pressed. - - if the button A is pressed; otherwise, . - - - - Gets a value indicating if the button B is pressed. - - if the button B is pressed; otherwise, . - - - - Gets a value indicating if the button Back is pressed. - - if the button Back is pressed; otherwise, . - - - - Gets a value indicating if the button X is pressed. - - if the button X is pressed; otherwise, . - - - - Gets a value indicating if the button Y is pressed. - - if the button Y is pressed; otherwise, . - - - - Gets a value indicating if the button Start is pressed. - - if the button Start is pressed; otherwise, . - - - - Gets a value indicating if the left shoulder button is pressed. - - if the left shoulder button is pressed; otherwise, . - - - - Gets a value indicating if the left stick button is pressed. - - if the left stick button is pressed; otherwise, . - - - - Gets a value indicating if the right shoulder button is pressed. - - if the right shoulder button is pressed; otherwise, . - - - - Gets a value indicating if the right stick button is pressed. - - if the right stick button is pressed; otherwise, . - - - - Gets a value indicating if the guide button is pressed. - - if the guide button is pressed; otherwise, . - - - - Determines whether two specified instances of are equal. - - The first object to compare. - The second object to compare. - true if and are equal; otherwise, false. - - - - Determines whether two specified instances of are not equal. - - The first object to compare. - The second object to compare. - true if and are not equal; otherwise, false. - - - - Returns a value indicating whether this instance is equal to a specified object. - - An object to compare to this instance. - true if is a and has the same value as this instance; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current . - - A that represents the current . - - - - A stuct that represents the controller capabilities. - - - - - Gets a value indicating if the controller is connected. - - true if it is connected; otherwise, false. - - - - Gets the gamepad display name. - - This property is not available in XNA. - - String representing the display name of the gamepad. - - - - Gets the unique identifier of the gamepad. - - This property is not available in XNA. - - String representing the unique identifier of the gamepad. - - - - Gets a value indicating whether the controller has the button A. - - true if it has the button A; otherwise, false. - - - - Gets a value indicating whether the controller has the button Back. - - true if it has the button Back; otherwise, false. - - - - Gets a value indicating whether the controller has the button B. - - true if it has the button B; otherwise, false. - - - - Gets a value indicating whether the controller has the directional pad down button. - - true if it has the directional pad down button; otherwise, false. - - - - Gets a value indicating whether the controller has the directional pad left button. - - true if it has the directional pad left button; otherwise, false. - - - - Gets a value indicating whether the controller has the directional pad right button. - - true if it has the directional pad right button; otherwise, false. - - - - Gets a value indicating whether the controller has the directional pad up button. - - true if it has the directional pad up button; otherwise, false. - - - - Gets a value indicating whether the controller has the left shoulder button. - - true if it has the left shoulder button; otherwise, false. - - - - Gets a value indicating whether the controller has the left stick button. - - true if it has the left stick button; otherwise, false. - - - - Gets a value indicating whether the controller has the right shoulder button. - - true if it has the right shoulder button; otherwise, false. - - - - Gets a value indicating whether the controller has the right stick button. - - true if it has the right stick button; otherwise, false. - - - - Gets a value indicating whether the controller has the button Start. - - true if it has the button Start; otherwise, false. - - - - Gets a value indicating whether the controller has the button X. - - true if it has the button X; otherwise, false. - - - - Gets a value indicating whether the controller has the button Y. - - true if it has the button Y; otherwise, false. - - - - Gets a value indicating whether the controller has the guide button. - - true if it has the guide button; otherwise, false. - - - - Gets a value indicating whether the controller has X axis for the left stick (thumbstick) button. - - true if it has X axis for the left stick (thumbstick) button; otherwise, false. - - - - Gets a value indicating whether the controller has Y axis for the left stick (thumbstick) button. - - true if it has Y axis for the left stick (thumbstick) button; otherwise, false. - - - - Gets a value indicating whether the controller has X axis for the right stick (thumbstick) button. - - true if it has X axis for the right stick (thumbstick) button; otherwise, false. - - - - Gets a value indicating whether the controller has Y axis for the right stick (thumbstick) button. - - true if it has Y axis for the right stick (thumbstick) button; otherwise, false. - - - - Gets a value indicating whether the controller has the left trigger button. - - true if it has the left trigger button; otherwise, false. - - - - Gets a value indicating whether the controller has the right trigger button. - - true if it has the right trigger button; otherwise, false. - - - - Gets a value indicating whether the controller has the left vibration motor. - - true if it has the left vibration motor; otherwise, false. - - - - Gets a value indicating whether the controller has the right vibration motor. - - true if it has the right vibration motor; otherwise, false. - - - - Gets a value indicating whether the controller has a microphone. - - true if it has a microphone; otherwise, false. - - - - Gets the type of the controller. - - A representing the controller type.. - - - - Determines whether a specified instance of - is equal to another specified . - - The first to compare. - The second to compare. - true if left and right are equal; otherwise, false. - - - - Determines whether a specified instance of - is not equal to another specified . - - The first to compare. - The second to compare. - true if left and right are not equal; otherwise, false. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - true if the specified is equal to the current - ; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current . - - A that represents the current . - - - - Specifies a type of dead zone processing to apply to Xbox 360 Controller - analog sticks when calling GetState. - - - - - The values of each stick are not processed and are returned by GetState as - "raw" values. This is best if you intend to implement your own dead zone - processing. - - - - - The X and Y positions of each stick are compared against the dead zone independently. - This setting is the default when calling GetState. - - - - - The combined X and Y position of each stick is compared to the dead zone. - This provides better control than IndependentAxes when the stick is used - as a two-dimensional control surface, such as when controlling a character's - view in a first-person game. - - - - - Gets a value indicating wethever down is pressed on the directional pad. - - if the down button is pressed; otherwise, . - - - - Gets a value indicating wethever left is pressed on the directional pad. - - if the left button is pressed; otherwise, . - - - - Gets a value indicating wethever right is pressed on the directional pad. - - if the right button is pressed; otherwise, . - - - - Gets a value indicating wethever up is pressed on the directional pad. - - if the up button is pressed; otherwise, . - - - - Initializes a new instance of the struct. - - Current state of directional pad up. - Current state of directional pad down. - Current state of directional pad left. - Current state of directional pad right. - - - - Determines whether two specified instances of are equal. - - The first object to compare. - The second object to compare. - true if and are equal; otherwise, false. - - - - Determines whether two specified instances of are not equal. - - The first object to compare. - The second object to compare. - true if and are not equal; otherwise, false. - - - - Returns a value indicating whether this instance is equal to a specified object. - - An object to compare to this instance. - true if is a and has the same value as this instance; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current - in a format of 0000 where each number represents a boolean value of each respecting object property: Left, Up, Right, Down. - - A that represents the current . - - - - Represents specific information about the state of the controller, - including the current state of buttons and sticks. - - This is implemented as a partial struct to allow for individual platforms - to offer additional data without separate state queries to GamePad. - - - - - The default initialized gamepad state. - - - - - Gets a value indicating if the controller is connected. - - true if it is connected; otherwise, false. - - - - Gets the packet number associated with this state. - - The packet number. - - - - Gets a structure that identifies what buttons on the controller are pressed. - - The buttons structure. - - - - Gets a structure that identifies what directions of the directional pad on the controller are pressed. - - The directional pad structure. - - - - Gets a structure that indicates the position of the controller sticks (thumbsticks). - - The thumbsticks position. - - - - Gets a structure that identifies the position of triggers on the controller. - - Positions of the triggers. - - - - Initializes a new instance of the struct - using the specified GamePadThumbSticks, GamePadTriggers, GamePadButtons, and GamePadDPad. - - Initial thumbstick state. - Initial trigger state.. - Initial button state. - Initial directional pad state. - - - - Initializes a new instance of the struct - using the specified stick, trigger, and button values. - - Left stick value. Each axis is clamped between −1.0 and 1.0. - Right stick value. Each axis is clamped between −1.0 and 1.0. - Left trigger value. This value is clamped between 0.0 and 1.0. - Right trigger value. This value is clamped between 0.0 and 1.0. - Button(s) to initialize as pressed. - - - - Initializes a new instance of the struct - using the specified stick, trigger, and button values. - - Left stick value. Each axis is clamped between −1.0 and 1.0. - Right stick value. Each axis is clamped between −1.0 and 1.0. - Left trigger value. This value is clamped between 0.0 and 1.0. - Right trigger value. This value is clamped between 0.0 and 1.0. - Array of Buttons to initialize as pressed. - - - - Gets the button mask along with 'virtual buttons' like LeftThumbstickLeft. - - - - - Determines whether specified input device buttons are pressed in this GamePadState. - - true, if button was pressed, false otherwise. - Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation. - - - - Determines whether specified input device buttons are released (not pressed) in this GamePadState. - - true, if button was released (not pressed), false otherwise. - Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation. - - - - Determines whether a specified instance of is equal - to another specified . - - The first to compare. - The second to compare. - true if left and right are equal; otherwise, false. - - - - Determines whether a specified instance of is not - equal to another specified . - - The first to compare. - The second to compare. - true if left and right are not equal; otherwise, false. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - true if the specified is equal to the current - ; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current . - - A that represents the current . - - - - A struct that represents the current stick (thumbstick) states for the controller. - - - - - Gets a value indicating the position of the left stick (thumbstick). - - A indicating the current position of the left stick (thumbstick). - - - - Gets a value indicating the position of the right stick (thumbstick). - - A indicating the current position of the right stick (thumbstick). - - - - Determines whether two specified instances of are equal. - - The first object to compare. - The second object to compare. - true if and are equal; otherwise, false. - - - - Determines whether two specified instances of are not equal. - - The first object to compare. - The second object to compare. - true if and are not equal; otherwise, false. - - - - Returns a value indicating whether this instance is equal to a specified object. - - An object to compare to this instance. - true if is a and has the same value as this instance; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current . - - A that represents the current . - - - - A struct that countains information on the left and the right trigger buttons. - - - - - Gets the position of the left trigger. - - A value from 0.0f to 1.0f representing left trigger. - - - - Gets the position of the right trigger. - - A value from 0.0f to 1.0f representing right trigger. - - - - Initializes a new instance of the struct. - - The position of the left trigger, the value will get clamped between 0.0f and 1.0f. - The position of the right trigger, the value will get clamped between 0.0f and 1.0f. - - - - Determines whether two specified instances of are equal. - - The first object to compare. - The second object to compare. - true if and are equal; otherwise, false. - - - - Determines whether two specified instances of are not equal. - - The first object to compare. - The second object to compare. - true if and are not equal; otherwise, false. - - - - Returns a value indicating whether this instance is equal to a specified object. - - An object to compare to this instance. - true if is a and has the same value as this instance; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current . - - A that represents the current . - - - - Defines a type of gamepad. - - - - - Unknown. - - - - - GamePad is the XBOX controller. - - - - - GamePad is a wheel. - - - - - GamePad is an arcade stick. - - - - - GamePad is a flight stick. - - - - - GamePad is a dance pad. - - - - - GamePad is a guitar. - - - - - GamePad is an alternate guitar. - - - - - GamePad is a drum kit. - - - - - GamePad is a big button pad. - - - - - Allows interaction with joysticks. Unlike the number of Buttons/Axes/DPads is not limited. - - - - - A default . - - - - - Gets a value indicating whether the current platform supports reading raw joystick data. - - true if the current platform supports reading raw joystick data; otherwise, false. - - - - Gets a value indicating the last joystick index connected to the system. If this value is less than 0, no joysticks are connected. - The order joysticks are connected and disconnected determines their index. - As such, this value may be larger than 0 even if only one joystick is connected. - - - - - - Gets the capabilites of the joystick. - - Index of the joystick you want to access. - The capabilites of the joystick. - - - - Gets the current state of the joystick. - - Index of the joystick you want to access. - The state of the joystick. - - - - Gets the current state of the joystick by updating an existing . - - The to update. - Index of the joystick you want to access. - - - - Describes joystick capabilities. - - - - - Gets a value indicating whether the joystick is connected. - - true if the joystick is connected; otherwise, false. - - - - Gets the unique identifier of the joystick. - - String representing the unique identifier of the joystick. - - - - Gets the joystick's display name. - - String representing the display name of the joystick. - - - - Gets a value indicating if the joystick is a gamepad. - - true if the joystick is a gamepad; otherwise, false. - - - - Gets the axis count. - - The number of axes that the joystick possesses. - - - - Gets the button count. - - The number of buttons that the joystick possesses. - - - - Gets the hat count. - - The number of hats/dpads that the joystick possesses. - - - - Determines whether a specified instance of - is equal to another specified . - - The first to compare. - The second to compare. - true if left and right are equal; otherwise, false. - - - - Determines whether a specified instance of - is not equal to another specified . - - The first to compare. - The second to compare. - true if left and right are not equal; otherwise, false. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - true if the specified is equal to the current - ; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current . - - A that represents the current . - - - - Describes joystick hat state. - - - - - Gets if joysticks hat "down" is pressed. - - if the button is pressed otherwise, . - - - - Gets if joysticks hat "left" is pressed. - - if the button is pressed otherwise, . - - - - Gets if joysticks hat "right" is pressed. - - if the button is pressed otherwise, . - - - - Gets if joysticks hat "up" is pressed. - - if the button is pressed otherwise, . - - - - Determines whether a specified instance of is equal - to another specified . - - The first to compare. - The second to compare. - true if left and right are equal; otherwise, false. - - - - Determines whether a specified instance of is not - equal to another specified . - - The first to compare. - The second to compare. - true if left and right are not equal; otherwise, false. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - true if the specified is equal to the current - ; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current in a format of 0000 where each number represents a boolean value of each respecting object property: Left, Up, Right, Down. - - A that represents the current . - - - - Describes current joystick state. - - - - - Gets a value indicating whether the joystick is connected. - - true if the joystick is connected; otherwise, false. - - - - Gets the joystick axis values. - - An array list of ints that indicate axis values. - - - - Gets the joystick button values. - - An array list of ButtonState that indicate button values. - - - - Gets the joystick hat values. - - An array list of that indicate hat values. - - - - Determines whether a specified instance of is - equal to another specified . - - The first to compare. - The second to compare. - true if left and right are equal; otherwise, false. - - - - Determines whether a specified instance of is not - equal to another specified . - - The first to compare. - The second to compare. - true if left and right are not equal; otherwise, false. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - true if the specified is equal to the current - ; otherwise, false. - - - - Serves as a hash function for a object. - - A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a - hash table. - - - - Returns a that represents the current . - - A that represents the current . - - - - Allows getting keystrokes from keyboard. - - - - - Returns the current keyboard state. - - Current keyboard state. - - - - Returns the current keyboard state for a given player. - - Player index of the keyboard. - Current keyboard state. - - - - Displays the keyboard input interface asynchronously. - - Title of the dialog box. - Description of the dialog box. - Default text displayed in the input area. - If password mode is enabled, the characters entered are not displayed. - Text entered by the player. Null if back was used. - Thrown when the message box is already visible - - - var name = await KeyboardInput.Show("Name", "What's your name?", "Player"); - - - - - - Hides the keyboard input interface and returns the parameter as the result of - - Result to return - Thrown when the keyboard input is not visible - - - var nameTask = KeyboardInput.Show("Name", "What's your name?", "Player"); - KeyboardInput.Cancel("John Doe"); - var name = await nameTask; - - - - - - Holds the state of keystrokes by a keyboard. - - - - - Initializes a new instance of the class. - - List of keys to be flagged as pressed on initialization. - Caps Lock state. - Num Lock state. - - - - Initializes a new instance of the class. - - List of keys to be flagged as pressed on initialization. - - - - Gets the current state of the Caps Lock key. - - - - - Gets the current state of the Num Lock key. - - - - - Returns the state of a specified key. - - The key to query. - The state of the key. - - - - Gets whether given key is currently being pressed. - - The key to query. - true if the key is pressed; false otherwise. - - - - Gets whether given key is currently being not pressed. - - The key to query. - true if the key is not pressed; false otherwise. - - - - Returns the number of pressed keys in this . - - An integer representing the number of keys currently pressed in this . - - - - Returns an array of values holding keys that are currently being pressed. - - The keys that are currently being pressed. - - - - Fills an array of values holding keys that are currently being pressed. - - The keys array to fill. - This array is not cleared, and it must be equal to or larger than the number of keys pressed. - - - - Gets the hash code for instance. - - Hash code of the object. - - - - Compares whether two instances are equal. - - instance to the left of the equality operator. - instance to the right of the equality operator. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance to the left of the inequality operator. - instance to the right of the inequality operator. - true if the instances are different; false otherwise. - - - - Compares whether current instance is equal to specified object. - - The to compare. - true if the provided instance is same with current; false otherwise. - - - - Defines the keys on a keyboard. - - - - - Reserved. - - - - - BACKSPACE key. - - - - - TAB key. - - - - - ENTER key. - - - - - CAPS LOCK key. - - - - - ESC key. - - - - - SPACEBAR key. - - - - - PAGE UP key. - - - - - PAGE DOWN key. - - - - - END key. - - - - - HOME key. - - - - - LEFT ARROW key. - - - - - UP ARROW key. - - - - - RIGHT ARROW key. - - - - - DOWN ARROW key. - - - - - SELECT key. - - - - - PRINT key. - - - - - EXECUTE key. - - - - - PRINT SCREEN key. - - - - - INS key. - - - - - DEL key. - - - - - HELP key. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - A key. - - - - - B key. - - - - - C key. - - - - - D key. - - - - - E key. - - - - - F key. - - - - - G key. - - - - - H key. - - - - - I key. - - - - - J key. - - - - - K key. - - - - - L key. - - - - - M key. - - - - - N key. - - - - - O key. - - - - - P key. - - - - - Q key. - - - - - R key. - - - - - S key. - - - - - T key. - - - - - U key. - - - - - V key. - - - - - W key. - - - - - X key. - - - - - Y key. - - - - - Z key. - - - - - Left Windows key. - - - - - Right Windows key. - - - - - Applications key. - - - - - Computer Sleep key. - - - - - Numeric keypad 0 key. - - - - - Numeric keypad 1 key. - - - - - Numeric keypad 2 key. - - - - - Numeric keypad 3 key. - - - - - Numeric keypad 4 key. - - - - - Numeric keypad 5 key. - - - - - Numeric keypad 6 key. - - - - - Numeric keypad 7 key. - - - - - Numeric keypad 8 key. - - - - - Numeric keypad 9 key. - - - - - Multiply key. - - - - - Add key. - - - - - Separator key. - - - - - Subtract key. - - - - - Decimal key. - - - - - Divide key. - - - - - F1 key. - - - - - F2 key. - - - - - F3 key. - - - - - F4 key. - - - - - F5 key. - - - - - F6 key. - - - - - F7 key. - - - - - F8 key. - - - - - F9 key. - - - - - F10 key. - - - - - F11 key. - - - - - F12 key. - - - - - F13 key. - - - - - F14 key. - - - - - F15 key. - - - - - F16 key. - - - - - F17 key. - - - - - F18 key. - - - - - F19 key. - - - - - F20 key. - - - - - F21 key. - - - - - F22 key. - - - - - F23 key. - - - - - F24 key. - - - - - NUM LOCK key. - - - - - SCROLL LOCK key. - - - - - Left SHIFT key. - - - - - Right SHIFT key. - - - - - Left CONTROL key. - - - - - Right CONTROL key. - - - - - Left ALT key. - - - - - Right ALT key. - - - - - Browser Back key. - - - - - Browser Forward key. - - - - - Browser Refresh key. - - - - - Browser Stop key. - - - - - Browser Search key. - - - - - Browser Favorites key. - - - - - Browser Start and Home key. - - - - - Volume Mute key. - - - - - Volume Down key. - - - - - Volume Up key. - - - - - Next Track key. - - - - - Previous Track key. - - - - - Stop Media key. - - - - - Play/Pause Media key. - - - - - Start Mail key. - - - - - Select Media key. - - - - - Start Application 1 key. - - - - - Start Application 2 key. - - - - - The OEM Semicolon key on a US standard keyboard. - - - - - For any country/region, the '+' key. - - - - - For any country/region, the ',' key. - - - - - For any country/region, the '-' key. - - - - - For any country/region, the '.' key. - - - - - The OEM question mark key on a US standard keyboard. - - - - - The OEM tilde key on a US standard keyboard. - - - - - The OEM open bracket key on a US standard keyboard. - - - - - The OEM pipe key on a US standard keyboard. - - - - - The OEM close bracket key on a US standard keyboard. - - - - - The OEM singled/double quote key on a US standard keyboard. - - - - - Used for miscellaneous characters; it can vary by keyboard. - - - - - The OEM angle bracket or backslash key on the RT 102 key keyboard. - - - - - IME PROCESS key. - - - - - Attn key. - - - - - CrSel key. - - - - - ExSel key. - - - - - Erase EOF key. - - - - - Play key. - - - - - Zoom key. - - - - - PA1 key. - - - - - CLEAR key. - - - - - Green ChatPad key. - - - - - Orange ChatPad key. - - - - - PAUSE key. - - - - - IME Convert key. - - - - - IME NoConvert key. - - - - - Kana key on Japanese keyboards. - - - - - Kanji key on Japanese keyboards. - - - - - OEM Auto key. - - - - - OEM Copy key. - - - - - OEM Enlarge Window key. - - - - - Checks if specified value is valid Key. - - Keys base value - Returns true if value is valid Key, false otherwise - - - - Identifies the state of a keyboard key. - - - - - Key is released. - - - - - Key is pressed. - - - - - Displays the message box interface asynchronously. - - Title of the message box. - Description of the message box. - Captions of the message box buttons. Up to three supported. - Index of button selected by the player. Null if back was used. - Thrown when the message box is already visible - - - var color = await MessageBox.Show("Color", "What's your favorite color?", new[] { "Red", "Green", "Blue" }); - - - - - - Hides the message box interface and returns the parameter as the result of - - Result to return - Thrown when the message box is not visible - - - var colorTask = MessageBox.Show("Color", "What's your favorite color?", new[] { "Red", "Green", "Blue" }); - MessageBox.Cancel(0); - var color = await colorTask; - - - - - - Allows reading position and button click information from mouse. - - - - - Gets or sets the window handle for current mouse processing. - - - - - This API is an extension to XNA. - Gets mouse state information that includes position and button - presses for the provided window - - Current state of the mouse. - - - - Gets mouse state information that includes position and button presses - for the primary window - - Current state of the mouse. - - - - Sets mouse cursor's relative position to game-window. - - Relative horizontal position of the cursor. - Relative vertical position of the cursor. - - - - Sets the cursor image to the specified MouseCursor. - - Mouse cursor to use for the cursor image. - - - - Describes a mouse cursor. - - - - - Gets the default arrow cursor. - - - - - Gets the cursor that appears when the mouse is over text editing regions. - - - - - Gets the waiting cursor that appears while the application/system is busy. - - - - - Gets the crosshair ("+") cursor. - - - - - Gets the cross between Arrow and Wait cursors. - - - - - Gets the northwest/southeast ("\") cursor. - - - - - Gets the northeast/southwest ("/") cursor. - - - - - Gets the horizontal west/east ("-") cursor. - - - - - Gets the vertical north/south ("|") cursor. - - - - - Gets the size all cursor which points in all directions. - - - - - Gets the cursor that points that something is invalid, usually a cross. - - - - - Gets the hand cursor, usually used for web links. - - - - - Creates a mouse cursor from the specified texture. - - Texture to use as the cursor image. - X cordinate of the image that will be used for mouse position. - Y cordinate of the image that will be used for mouse position. - - - - Represents a mouse state with cursor position and button press information. - - - - - Initializes a new instance of the MouseState. - - Horizontal position of the mouse in relation to the window. - Vertical position of the mouse in relation to the window. - Mouse scroll wheel's value. - Left mouse button's state. - Middle mouse button's state. - Right mouse button's state. - XBUTTON1's state. - XBUTTON2's state. - Normally should be used to get mouse current state. The constructor is provided for simulating mouse input. - - - - Initializes a new instance of the MouseState. - - Horizontal position of the mouse in relation to the window. - Vertical position of the mouse in relation to the window. - Mouse scroll wheel's value. - Left mouse button's state. - Middle mouse button's state. - Right mouse button's state. - XBUTTON1's state. - XBUTTON2's state. - Mouse horizontal scroll wheel's value. - Normally should be used to get mouse current state. The constructor is provided for simulating mouse input. - - - - Compares whether two MouseState instances are equal. - - MouseState instance on the left of the equal sign. - MouseState instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two MouseState instances are not equal. - - MouseState instance on the left of the equal sign. - MouseState instance on the right of the equal sign. - true if the objects are not equal; false otherwise. - - - - Compares whether current instance is equal to specified object. - - The MouseState to compare. - - - - - Gets the hash code for MouseState instance. - - Hash code of the object. - - - - Gets horizontal position of the cursor in relation to the window. - - - - - Gets vertical position of the cursor in relation to the window. - - - - - Gets cursor position. - - - - - Gets state of the left mouse button. - - - - - Gets state of the middle mouse button. - - - - - Gets state of the right mouse button. - - - - - Returns cumulative scroll wheel value since the game start. - - - - - Returns the cumulative horizontal scroll wheel value since the game start - - - - - Gets state of the XButton1. - - - - - Gets state of the XButton2. - - - - - Represents data from a multi-touch gesture over a span of time. - - - - - Gets the type of the gesture. - - - - - Gets the starting time for this multi-touch gesture sample. - - - - - Gets the position of the first touch-point in the gesture sample. - - - - - Gets the position of the second touch-point in the gesture sample. - - - - - Gets the delta information for the first touch-point in the gesture sample. - - - - - Gets the delta information for the second touch-point in the gesture sample. - - - - - Initializes a new . - - - - - - - - - - - Enumuration of values that represent different gestures that can be processed by . - - - - - No gestures. - - - - - The user touched a single point. - - - - - States completion of a drag gesture(VerticalDrag, HorizontalDrag, or FreeDrag). - - No position or delta information is available for this sample. - - - - States that a touch was combined with a quick swipe. - - Flicks does not contain position information. The velocity of it can be read from - - - - The use touched a point and then performed a free-form drag. - - - - - The use touched a single point for approximately one second. - - As this is a single event, it will not be contionusly fired while the user is holding the touch-point. - - - - The user touched the screen and performed either left to right or right to left drag gesture. - - - - - The user either converged or diverged two touch-points on the screen which is like a two-finger drag. - - When this gesture-type is enabled and two fingers are down, it takes precedence over drag gestures. - - - - An in-progress pinch operation was completed. - - No position or delta information is available for this sample. - - - - The user tapped the device twice which is always preceded by a Tap gesture. - - If the time between two touchs are long enough, insted two seperate single Tap gestures will be generated. - - - - The user touched the screen and performed either top to bottom or bottom to top drag gesture. - - - - - Provides state information for a touch screen enabled device. - - - - - States if a touch screen is available. - - - - - Initializes a new instance of the with a pre-determined set of touch locations. - - Array of items to initialize with. - - - - Returns specified by ID. - - - - - - - - States if touch collection is read only. - - - - - Returns the index of the first occurrence of specified item in the collection. - - to query. - - - - - Inserts a item into the indicated position. - - The position to insert into. - The item to insert. - - - - Removes the item at specified index. - - Index of the item that will be removed from collection. - - - - Gets or sets the item at the specified index of the collection. - - Position of the item. - - - - - Adds a to the collection. - - The item to be added. - - - - Clears all the items in collection. - - - - - Returns true if specified item exists in the collection, false otherwise./> - - The item to query for. - Returns true if queried item is found, false otherwise. - - - - Copies the collection to specified array starting from the given index. - - The array to copy items. - The starting index of the copy operation. - - - - Returns the number of items that exist in the collection. - - - - - Removes the specified item from the collection. - - The item to remove. - - - - - Returns an enumerator for the . - - Enumerable list of objects. - - - - Returns an enumerator for the . - - Enumerable list of objects. - - - - Returns an enumerator for the . - - Enumerable list of objects. - - - - Provides the ability to iterate through the TouchLocations in an TouchCollection. - - - - - Gets the current element in the TouchCollection. - - - - - Advances the enumerator to the next element of the TouchCollection. - - - - - Immediately releases the unmanaged resources used by this object. - - - - - Attributes - - - - - True if this touch was pressed and released on the same frame. - In this case we will keep it around for the user to get by GetState that frame. - However if they do not call GetState that frame, this touch will be forgotten. - - - - - Helper for assigning an invalid touch location. - - - - - Returns a copy of the touch with the state changed to moved. - - The new touch location. - - - - Updates the touch location using the new event. - - The next event for this touch location. - - - - Holds the possible state information for a touch location.. - - - - - This touch location position is invalid. - - Typically, you will encounter this state when a new touch location attempts to get the previous state of itself. - - - - This touch location position was updated or pressed at the same position. - - - - - This touch location position is new. - - - - - This touch location position was released. - - - - - Allows retrieval of information from Touch Panel device. - - - - - Gets the current state of the touch panel. - - - - - - Returns the next available gesture on touch panel device. - - - - - - The window handle of the touch panel. Purely for Xna compatibility. - - - - - Gets or sets the display height of the touch panel. - - - - - Gets or sets the display orientation of the touch panel. - - - - - Gets or sets the display width of the touch panel. - - - - - Gets or sets enabled gestures. - - - - - Returns true if a touch gesture is available. - - - - - Allows retrieval of capabilities information from touch panel device. - - - - - Returns true if a device is available for use. - - - - - Returns the maximum number of touch locations tracked by the touch panel device. - - - - - The reserved touchId for all mouse touch points. - - - - - The current touch state. - - - - - The current gesture state. - - - - - The positional scale to apply to touch input. - - - - - The current size of the display. - - - - - The next touch location identifier. - The value 1 is reserved for the mouse touch point. - - - - - The current timestamp that we use for setting the timestamp of new TouchLocations - - - - - The mapping between platform specific touch ids - and the touch ids we assign to touch locations. - - - - - The window handle of the touch panel. Purely for Xna compatibility. - - - - - Returns capabilities of touch panel device. - - - - - - Age all the touches, so any that were Pressed become Moved, and any that were Released are removed - - - - - Apply the given new touch to the state. If it is a Pressed it will be added as a new touch, otherwise we update the existing touch it matches - - - - - This will release all touch locations. It should only be - called on platforms where touch state is reset all at once. - - - - - Gets or sets the display height of the touch panel. - - - - - Gets or sets the display orientation of the touch panel. - - - - - Gets or sets the display width of the touch panel. - - - - - Gets or sets enabled gestures. - - - - - Returns true if a touch gesture is available. - - - - - Returns the next available gesture on touch panel device. - - - - - - Maximum distance a touch location can wiggle and - not be considered to have moved. - - - - - The pinch touch locations. - - - - - If true the pinch touch locations are valid and - a pinch gesture has begun. - - - - - Used to disable emitting of tap gestures. - - - - - Used to disable emitting of hold gestures. - - - - - Support for playing sound effects and XACT audio. - - - - - Represents how many channels are used in the audio data. - - - - Single channel. - - - Two channels. - - - - Represents a 3D audio emitter. Used to simulate 3D audio effects. - - - - Initializes a new AudioEmitter instance. - - - Gets or sets a scale applied to the Doppler effect between the AudioEmitter and an AudioListener. - - Defaults to 1.0 - A value of 1.0 leaves the Doppler effect unmodified. - - - - Gets or sets the emitter's forward vector. - - Defaults to Vector3.Forward. (new Vector3(0, 0, -1)) - Used with AudioListener.Velocity to calculate Doppler values. - The Forward and Up values must be orthonormal. - - - - Gets or sets the position of this emitter. - - - Gets or sets the emitter's Up vector. - - Defaults to Vector3.Up. (new Vector3(0, -1, 1)). - The Up and Forward vectors must be orthonormal. - - - - Gets or sets the emitter's velocity vector. - - Defaults to Vector3.Zero. - This value is only used when calculating Doppler values. - - - - - Represents a 3D audio listener. Used when simulating 3D Audio. - - - - Gets or sets the listener's forward vector. - - Defaults to Vector3.Forward. (new Vector3(0, 0, -1)) - Used with AudioListener.Velocity and AudioEmitter.Velocity to calculate Doppler values. - The Forward and Up vectors must be orthonormal. - - - - Gets or sets the listener's position. - - Defaults to Vector3.Zero. - - - - - Gets or sets the listener's up vector.. - - - Defaults to Vector3.Up (New Vector3(0, -1, 0)). - Used with AudioListener.Velocity and AudioEmitter.Velocity to calculate Doppler values. - The values of the Forward and Up vectors must be orthonormal. - - - - Gets or sets the listener's velocity vector. - - Defaults to Vector3.Zero. - Scaled by DopplerScale to calculate the Doppler effect value applied to a Cue. - This value is only used to calculate Doppler values. - - - - - A for which the audio buffer is provided by the game at run time. - - - - - This value has no effect on DynamicSoundEffectInstance. - It may not be set. - - - - - Returns the number of audio buffers queued for playback. - - - - - The event that occurs when the number of queued audio buffers is less than or equal to 2. - - - This event may occur when is called or during playback when a buffer is completed. - - - - Sample rate, in Hertz (Hz). - Number of channels (mono or stereo). - - - - Returns the duration of an audio buffer of the specified size, based on the settings of this instance. - - Size of the buffer, in bytes. - The playback length of the buffer. - - - - Returns the size, in bytes, of a buffer of the specified duration, based on the settings of this instance. - - The playback length of the buffer. - The data size of the buffer, in bytes. - - - - Plays or resumes the DynamicSoundEffectInstance. - - - - - Pauses playback of the DynamicSoundEffectInstance. - - - - - Resumes playback of the DynamicSoundEffectInstance. - - - - - Immediately stops playing the DynamicSoundEffectInstance. - - - Calling this also releases all queued buffers. - - - - - Stops playing the DynamicSoundEffectInstance. - If the parameter is false, this call has no effect. - - - Calling this also releases all queued buffers. - - When set to false, this call has no effect. - - - - Queues an audio buffer for playback. - - - The buffer length must conform to alignment requirements for the audio format. - - The buffer containing PCM audio data. - - - - Queues an audio buffer for playback. - - - The buffer length must conform to alignment requirements for the audio format. - - The buffer containing PCM audio data. - The starting position of audio data. - The amount of bytes to use. - - - - Handles the buffer events of all DynamicSoundEffectInstance instances. - - - - - Updates buffer queues of the currently playing instances. - - - XNA posts events always on the main thread. - - - - - The exception thrown when the system attempts to play more SoundEffectInstances than allotted. - - - Most platforms have a hard limit on how many sounds can be played simultaneously. This exception is thrown when that limit is exceeded. - - - - - The exception thrown when no audio hardware is present, or driver issues are detected. - - - - A message describing the error. - - - A message describing the error. - The exception that is the underlying cause of the current exception. If not null, the current exception is raised in a try/catch block that handled the innerException. - - - Represents a loaded sound resource. - - A SoundEffect represents the buffer used to hold audio data and metadata. SoundEffectInstances are used to play from SoundEffects. Multiple SoundEffectInstance objects can be created and played from the same SoundEffect object. - The only limit on the number of loaded SoundEffects is restricted by available memory. When a SoundEffect is disposed, all SoundEffectInstances created from it will become invalid. - SoundEffect.Play() can be used for 'fire and forget' sounds. If advanced playback controls like volume or pitch is required, use SoundEffect.CreateInstance(). - - - - - Initializes the sound system for SoundEffect support. - This method is automatically called when a SoundEffect is loaded, a DynamicSoundEffectInstance is created, or Microphone.All is queried. - You can however call this method manually (preferably in, or before the Game constructor) to catch any Exception that may occur during the sound system initialization (and act accordingly). - - - - - Create a sound effect. - - The buffer with the sound data. - The sound data sample rate in hertz. - The number of channels in the sound data. - This only supports uncompressed 16bit PCM wav data. - - - - Create a sound effect. - - The buffer with the sound data. - The offset to the start of the sound data in bytes. - The length of the sound data in bytes. - The sound data sample rate in hertz. - The number of channels in the sound data. - The position where the sound should begin looping in samples. - The duration of the sound data loop in samples. - This only supports uncompressed 16bit PCM wav data. - - - - Releases unmanaged resources and performs other cleanup operations before the - is reclaimed by garbage collection. - - - - - Creates a new SoundEffectInstance for this SoundEffect. - - A new SoundEffectInstance for this SoundEffect. - Creating a SoundEffectInstance before calling SoundEffectInstance.Play() allows you to access advanced playback features, such as volume, pitch, and 3D positioning. - - - - Creates a new SoundEffect object based on the specified data stream. - This internally calls . - - The path to the audio file. - The loaded from the given file. - The stream must point to the head of a valid wave file in the RIFF bitstream format. The formats supported are: - - - 8-bit unsigned PCM - 16-bit signed PCM - 24-bit signed PCM - 32-bit IEEE float PCM - MS-ADPCM 4-bit compressed - IMA/ADPCM (IMA4) 4-bit compressed - - - - - - - Creates a new SoundEffect object based on the specified data stream. - - A stream containing the wave data. - A new SoundEffect object. - The stream must point to the head of a valid wave file in the RIFF bitstream format. The formats supported are: - - - 8-bit unsigned PCM - 16-bit signed PCM - 24-bit signed PCM - 32-bit IEEE float PCM - MS-ADPCM 4-bit compressed - IMA/ADPCM (IMA4) 4-bit compressed - - - - - - - Returns the duration for 16-bit PCM audio. - - The length of the audio data in bytes. - Sample rate, in Hertz (Hz). Must be between 8000 Hz and 48000 Hz - Number of channels in the audio data. - The duration of the audio data. - - - - Returns the data size in bytes for 16bit PCM audio. - - The total duration of the audio data. - Sample rate, in Hertz (Hz), of audio data. Must be between 8,000 and 48,000 Hz. - Number of channels in the audio data. - The size in bytes of a single sample of audio data. - - - Gets an internal SoundEffectInstance and plays it. - True if a SoundEffectInstance was successfully played, false if not. - - Play returns false if more SoundEffectInstances are currently playing then the platform allows. - To loop a sound or apply 3D effects, call SoundEffect.CreateInstance() and SoundEffectInstance.Play() instead. - SoundEffectInstances used by SoundEffect.Play() are pooled internally. - - - - Gets an internal SoundEffectInstance and plays it with the specified volume, pitch, and panning. - True if a SoundEffectInstance was successfully created and played, false if not. - Volume, ranging from 0.0 (silence) to 1.0 (full volume). Volume during playback is scaled by SoundEffect.MasterVolume. - Pitch adjustment, ranging from -1.0 (down an octave) to 0.0 (no change) to 1.0 (up an octave). - Panning, ranging from -1.0 (left speaker) to 0.0 (centered), 1.0 (right speaker). - - Play returns false if more SoundEffectInstances are currently playing then the platform allows. - To apply looping or simulate 3D audio, call SoundEffect.CreateInstance() and SoundEffectInstance.Play() instead. - SoundEffectInstances used by SoundEffect.Play() are pooled internally. - - - - - Returns a sound effect instance from the pool or null if none are available. - - - - Gets the duration of the SoundEffect. - - - Gets or sets the asset name of the SoundEffect. - - - - Gets or sets the master volume scale applied to all SoundEffectInstances. - - - Each SoundEffectInstance has its own Volume property that is independent to SoundEffect.MasterVolume. During playback SoundEffectInstance.Volume is multiplied by SoundEffect.MasterVolume. - This property is used to adjust the volume on all current and newly created SoundEffectInstances. The volume of an individual SoundEffectInstance can be adjusted on its own. - - - - - Gets or sets the scale of distance calculations. - - - DistanceScale defaults to 1.0 and must be greater than 0.0. - Higher values reduce the rate of falloff between the sound and listener. - - - - - Gets or sets the scale of Doppler calculations applied to sounds. - - - DopplerScale defaults to 1.0 and must be greater or equal to 0.0 - Affects the relative velocity of emitters and listeners. - Higher values more dramatically shift the pitch for the given relative velocity of the emitter and listener. - - - - Returns the speed of sound used when calculating the Doppler effect.. - - Defaults to 343.5. Value is measured in meters per second. - Has no effect on distance attenuation. - - - - Indicates whether the object is disposed. - - - Releases the resources held by this . - - - - Releases the resources held by this . - - If set to true, Dispose was called explicitly. - If the disposing parameter is true, the Dispose method was called explicitly. This - means that managed objects referenced by this instance should be disposed or released as - required. If the disposing parameter is false, Dispose was called by the finalizer and - no managed objects should be touched because we do not know if they are still valid or - not at that time. Unmanaged resources should always be released. - - - - Initializes XAudio. - - - - Represents a single instance of a playing, paused, or stopped sound. - - SoundEffectInstances are created through SoundEffect.CreateInstance() and used internally by SoundEffect.Play() - - - - Enables or Disables whether the SoundEffectInstance should repeat after playback. - This value has no effect on an already playing sound. - - - Gets or sets the pan, or speaker balance.. - Pan value ranging from -1.0 (left speaker) to 0.0 (centered), 1.0 (right speaker). Values outside of this range will throw an exception. - - - Gets or sets the pitch adjustment. - Pitch adjustment, ranging from -1.0 (down an octave) to 0.0 (no change) to 1.0 (up an octave). Values outside of this range will throw an Exception. - - - Gets or sets the volume of the SoundEffectInstance. - Volume, ranging from 0.0 (silence) to 1.0 (full volume). Volume during playback is scaled by SoundEffect.MasterVolume. - - This is the volume relative to SoundEffect.MasterVolume. Before playback, this Volume property is multiplied by SoundEffect.MasterVolume when determining the final mix volume. - - - - Gets the SoundEffectInstance's current playback state. - - - Indicates whether the object is disposed. - - - - Releases unmanaged resources and performs other cleanup operations before the - is reclaimed by garbage collection. - - - - Applies 3D positioning to the SoundEffectInstance using a single listener. - Data about the listener. - Data about the source of emission. - - - Applies 3D positioning to the SoundEffectInstance using multiple listeners. - Data about each listener. - Data about the source of emission. - - - Pauses playback of a SoundEffectInstance. - Paused instances can be resumed with SoundEffectInstance.Play() or SoundEffectInstance.Resume(). - - - Plays or resumes a SoundEffectInstance. - Throws an exception if more sounds are playing than the platform allows. - - - Resumes playback for a SoundEffectInstance. - Only has effect on a SoundEffectInstance in a paused state. - - - Immediately stops playing a SoundEffectInstance. - - - Stops playing a SoundEffectInstance, either immediately or as authored. - Determined whether the sound stops immediately, or after playing its release phase and/or transitions. - Stopping a sound with the immediate argument set to false will allow it to play any release phases, such as fade, before coming to a stop. - - - Releases the resources held by this . - - - - Releases the resources held by this . - - If set to true, Dispose was called explicitly. - If the disposing parameter is true, the Dispose method was called explicitly. This - means that managed objects referenced by this instance should be disposed or released as - required. If the disposing parameter is false, Dispose was called by the finalizer and - no managed objects should be touched because we do not know if they are still valid or - not at that time. Unmanaged resources should always be released. - - - - Gets a value indicating whether the platform has capacity for more sounds to be played at this time. - - true if more sounds can be played; otherwise, false. - - - - Add the specified instance to the pool if it is a pooled instance and removes it from the - list of playing instances. - - The SoundEffectInstance - - - - Adds the SoundEffectInstance to the list of playing instances. - - The SoundEffectInstance to add to the playing list. - - - - Returns a pooled SoundEffectInstance if one is available, or allocates a new - SoundEffectInstance if the pool is empty. - - The SoundEffectInstance. - - - - Iterates the list of playing instances, returning them to the pool if they - have stopped playing. - - - - - Iterates the list of playing instances, stop them and return them to the pool if they are instances of the given SoundEffect. - - The SoundEffect - - - Described the playback state of a SoundEffectInstance. - - - The SoundEffectInstance is currently playing. - - - The SoundEffectInstance is currently paused. - - - The SoundEffectInstance is currently stopped. - - - - Microphone state. - - - - - Provides microphones capture features. - - - Provides microphones capture features. - - - - - Returns the friendly name of the microphone. - - - - - Gets or sets the capture buffer duration. This value must be greater than 100 milliseconds, lower than 1000 milliseconds, and must be 10 milliseconds aligned (BufferDuration % 10 == 10). - - - - - Determines if the microphone is a wired headset. - Note: XNA could know if a headset microphone was plugged in an Xbox 360 controller but MonoGame can't. - Hence, this is always true on mobile platforms, and always false otherwise. - - - - - Returns the sample rate of the captured audio. - Note: default value is 44100hz - - - - - Returns the state of the Microphone. - - - - - Returns all compatible microphones. - - - - - Returns the default microphone. - - - - - Returns the duration based on the size of the buffer (assuming 16-bit PCM data). - - Size, in bytes - TimeSpan of the duration. - - - - Returns the size, in bytes, of the array required to hold the specified duration of 16-bit PCM data. - - TimeSpan of the duration of the sample. - Size, in bytes, of the buffer. - - - - Starts microphone capture. - - - - - Stops microphone capture. - - - - - Gets the latest available data from the microphone. - - Buffer, in bytes, of the captured data (16-bit PCM). - The buffer size, in bytes, of the captured data. - - - - Gets the latest available data from the microphone. - - Buffer, in bytes, of the captured data (16-bit PCM). - Byte offset. - Amount, in bytes. - The buffer size, in bytes, of the captured data. - - - - Event fired when the audio data are available. - - - - - The exception thrown when no audio hardware is present, or driver issues are detected. - - - - A message describing the error. - - - A message describing the error. - The exception that is the underlying cause of the current exception. If not null, the current exception is raised in a try/catch block that handled the innerException. - - - - Provides functionality for manipulating multiple sounds at a time. - - - - - Gets the category's friendly name. - - - - - Pauses all associated sounds. - - - - - Resumes all associated paused sounds. - - - - - Stops all associated sounds. - - - - - Determines whether two AudioCategory instances are equal. - - First AudioCategory instance to compare. - Second AudioCategory instance to compare. - true if the objects are equal or false if they aren't. - - - - Determines whether two AudioCategory instances are not equal. - - First AudioCategory instance to compare. - Second AudioCategory instance to compare. - true if the objects are not equal or false if they are. - - - - Determines whether two AudioCategory instances are equal. - - AudioCategory to compare with this instance. - true if the objects are equal or false if they aren't - - - - Determines whether two AudioCategory instances are equal. - - Object to compare with this instance. - true if the objects are equal or false if they aren't. - - - - Gets the hash code for this instance. - - Hash code for this object. - - - - Returns the name of this AudioCategory - - Friendly name of the AudioCategory - - - - Class used to create and manipulate code audio objects. - - - - - The current content version. - - - - Path to a XACT settings file. - - - Path to a XACT settings file. - Determines how many milliseconds the engine will look ahead when determing when to transition to another sound. - A string that specifies the audio renderer to use. - For the best results, use a lookAheadTime of 250 milliseconds or greater. - - - - Performs periodic work required by the audio engine. - - Must be called at least once per frame. - - - Returns an audio category by name. - Friendly name of the category to get. - The AudioCategory with a matching name. Throws an exception if not found. - - - Gets the value of a global variable. - Friendly name of the variable. - float value of the queried variable. - A global variable has global scope. It can be accessed by all code within a project. - - - Sets the value of a global variable. - Friendly name of the variable. - Value of the global variable. - - - - This event is triggered when the AudioEngine is disposed. - - - - - Is true if the AudioEngine has been disposed. - - - - - Disposes the AudioEngine. - - - - Controls how Cue objects should cease playback when told to stop. - - - Stop normally, playing any pending release phases or transitions. - - - Immediately stops the cue, ignoring any pending release phases or transitions. - - - Manages the playback of a sound or set of sounds. - - Cues are comprised of one or more sounds. - Cues also define specific properties such as pitch or volume. - Cues are referenced through SoundBank objects. - - - - Indicates whether or not the cue is currently paused. - IsPlaying and IsPaused both return true if a cue is paused while playing. - - - Indicates whether or not the cue is currently playing. - IsPlaying and IsPaused both return true if a cue is paused while playing. - - - Indicates whether or not the cue is currently stopped. - - - Gets the friendly name of the cue. - The friendly name is a value set from the designer. - - - Pauses playback. - - - Requests playback of a prepared or preparing Cue. - Calling Play when the Cue already is playing can result in an InvalidOperationException. - - - Resumes playback of a paused Cue. - - - Stops playback of a Cue. - Specifies if the sound should play any pending release phases or transitions before stopping. - - - - Sets the value of a cue-instance variable based on its friendly name. - - Friendly name of the variable to set. - Value to assign to the variable. - The friendly name is a value set from the designer. - - - Gets a cue-instance variable value based on its friendly name. - Friendly name of the variable. - Value of the variable. - - Cue-instance variables are useful when multiple instantiations of a single cue (and its associated sounds) are required (for example, a "car" cue where there may be more than one car at any given time). While a global variable allows multiple audio elements to be controlled in unison, a cue instance variable grants discrete control of each instance of a cue, even for each copy of the same cue. - The friendly name is a value set from the designer. - - - - Updates the simulated 3D Audio settings calculated between an AudioEmitter and AudioListener. - The listener to calculate. - The emitter to calculate. - - This must be called before Play(). - Calling this method automatically converts the sound to monoaural and sets the speaker mix for any sound played by this cue to a value calculated with the listener's and emitter's positions. Any stereo information in the sound will be discarded. - - - - - This event is triggered when the Cue is disposed. - - - - - Is true if the Cue has been disposed. - - - - - Disposes the Cue. - - - - Represents a collection of Cues. - - - - Is true if the SoundBank has any live Cues in use. - - - - AudioEngine that will be associated with this sound bank. - Path to a .xsb SoundBank file. - - - - Returns a pooled Cue object. - - Friendly name of the cue to get. - a unique Cue object from a pool. - - Cue instances are unique, even when sharing the same name. This allows multiple instances to simultaneously play. - - - - - Plays a cue. - - Name of the cue to play. - - - - Plays a cue with static 3D positional information. - - - Commonly used for short lived effects. To dynamically change the 3D - positional information on a cue over time use and . - The name of the cue to play. - The listener state. - The cue emitter state. - - - - This event is triggered when the SoundBank is disposed. - - - - - Is true if the SoundBank has been disposed. - - - - - Disposes the SoundBank. - - - - Represents a collection of wave files. - - - - - - - - - - - Instance of the AudioEngine to associate this wave bank with. - Path to the .xwb file to load. - This constructor immediately loads all wave data into memory at once. - - - Instance of the AudioEngine to associate this wave bank with. - Path to the .xwb to stream from. - DVD sector-aligned offset within the wave bank data file. - Stream packet size, in sectors, to use for each stream. The minimum value is 2. - - This constructor streams wave data as needed. - Note that packetsize is in sectors, which is 2048 bytes. - AudioEngine.Update() must be called at least once before using data from a streaming wave bank. - - - - - This event is triggered when the WaveBank is disposed. - - - - - Is true if the WaveBank has been disposed. - - - - - Disposes the WaveBank. - - - - - Set the combined volume scale from the parent objects. - - The volume scale. - - - - Set the volume for the clip. - - The volume level. - - - - The runtime support for loading content pipeline content. - - - - - Virtual property to allow a derived ContentManager to have it's assets reloaded - - - - - Gets the GraphicsDevice from the ContentManager.ServiceProvider. - - The . - - - - External reference reader, provided for compatibility with XNA Framework built content - - - - - Creates an instance of the attribute. - - - - - Returns the overriden XML element name or the default "Item". - - - - - Returns true if the default CollectionItemName value was overridden. - - - - - This is used to specify the XML element name to use for each item in a collection. - - - - - Creates an instance of the attribute. - - The XML element name to use for each item in the collection. - - - - The XML element name to use for each item in the collection. - - - - - This is used to specify the type to use when deserializing this object at runtime. - - - - - Creates an instance of the attribute. - - The name of the type to use at runtime. - - - - The name of the type to use at runtime. - - - - - This is used to specify the version when deserializing this object at runtime. - - - - - Creates an instance of the attribute. - - The version passed to the type at runtime. - - - - The version passed to the type at runtime. - - - - - Removes Version, Culture and PublicKeyToken from a type string. - - - Supports multiple generic types (e.g. Dictionary<TKey,TValue>) and nested generic types (e.g. List<List<int>>). - - - A - - - A - - - - - Adds the type creator. - - - Type string. - - - Create function. - - - - - Returns a value indicating what side (positive/negative) of a plane a point is - - The point to check with - The plane to check against - Greater than zero if on the positive side, less than zero if on the negative size, 0 otherwise - - - - Returns the perpendicular distance from a point to a plane - - The point to check - The place to check - The perpendicular distance from the point to the plane - - - - Create a that contains the specified point and has the specified vector. - - A point the created should contain. - The normal of the plane. - - - - Transforms a normalized plane by a matrix. - - The normalized plane to transform. - The transformation matrix. - The transformed plane. - - - - Transforms a normalized plane by a matrix. - - The normalized plane to transform. - The transformation matrix. - The transformed plane. - - - - Transforms a normalized plane by a quaternion rotation. - - The normalized plane to transform. - The quaternion rotation. - The transformed plane. - - - - Transforms a normalized plane by a quaternion rotation. - - The normalized plane to transform. - The quaternion rotation. - The transformed plane. - - - - Deconstruction method for . - - - - - - - Defines the intersection between a and a bounding volume. - - - - - There is no intersection, the bounding volume is in the negative half space of the plane. - - - - - There is no intersection, the bounding volume is in the positive half space of the plane. - - - - - The plane is intersected. - - - - - Defines the index of player for various MonoGame components. - - - - - The first player index. - - - - - The second player index. - - - - - The third player index. - - - - - The fourth player index. - - - - - Describes a 2D-point. - - - - - The x coordinate of this . - - - - - The y coordinate of this . - - - - - Returns a with coordinates 0, 0. - - - - - Constructs a point with X and Y from two values. - - The x coordinate in 2d-space. - The y coordinate in 2d-space. - - - - Constructs a point with X and Y set to the same value. - - The x and y coordinates in 2d-space. - - - - Adds two points. - - Source on the left of the add sign. - Source on the right of the add sign. - Sum of the points. - - - - Subtracts a from a . - - Source on the left of the sub sign. - Source on the right of the sub sign. - Result of the subtraction. - - - - Multiplies the components of two points by each other. - - Source on the left of the mul sign. - Source on the right of the mul sign. - Result of the multiplication. - - - - Divides the components of a by the components of another . - - Source on the left of the div sign. - Divisor on the right of the div sign. - The result of dividing the points. - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Gets the hash code of this . - - Hash code of this . - - - - Returns a representation of this in the format: - {X:[] Y:[]} - - representation of this . - - - - Gets a representation for this object. - - A representation for this object. - - - - Deconstruction method for . - - - - - - - The arguments to the event. - - - - - Create a new instance of the event. - - The default settings to be used in device creation. - - - - The default settings that will be used in device creation. - - - - - An efficient mathematical representation for three dimensional rotations. - - - - - The x coordinate of this . - - - - - The y coordinate of this . - - - - - The z coordinate of this . - - - - - The rotation component of this . - - - - - Constructs a quaternion with X, Y, Z and W from four values. - - The x coordinate in 3d-space. - The y coordinate in 3d-space. - The z coordinate in 3d-space. - The rotation component. - - - - Constructs a quaternion with X, Y, Z from and rotation component from a scalar. - - The x, y, z coordinates in 3d-space. - The rotation component. - - - - Constructs a quaternion from . - - The x, y, z coordinates in 3d-space and the rotation component. - - - - Returns a quaternion representing no rotation. - - - - - Creates a new that contains the sum of two quaternions. - - Source . - Source . - The result of the quaternion addition. - - - - Creates a new that contains the sum of two quaternions. - - Source . - Source . - The result of the quaternion addition as an output parameter. - - - - Creates a new that contains concatenation between two quaternion. - - The first to concatenate. - The second to concatenate. - The result of rotation of followed by rotation. - - - - Creates a new that contains concatenation between two quaternion. - - The first to concatenate. - The second to concatenate. - The result of rotation of followed by rotation as an output parameter. - - - - Transforms this quaternion into its conjugated version. - - - - - Creates a new that contains conjugated version of the specified quaternion. - - The quaternion which values will be used to create the conjugated version. - The conjugate version of the specified quaternion. - - - - Creates a new that contains conjugated version of the specified quaternion. - - The quaternion which values will be used to create the conjugated version. - The conjugated version of the specified quaternion as an output parameter. - - - - Creates a new from the specified axis and angle. - - The axis of rotation. - The angle in radians. - The new quaternion builded from axis and angle. - - - - Creates a new from the specified axis and angle. - - The axis of rotation. - The angle in radians. - The new quaternion builded from axis and angle as an output parameter. - - - - Creates a new from the specified . - - The rotation matrix. - A quaternion composed from the rotation part of the matrix. - - - - Creates a new from the specified . - - The rotation matrix. - A quaternion composed from the rotation part of the matrix as an output parameter. - - - - Creates a new from the specified yaw, pitch and roll angles. - - Yaw around the y axis in radians. - Pitch around the x axis in radians. - Roll around the z axis in radians. - A new quaternion from the concatenated yaw, pitch, and roll angles. - - - - Creates a new from the specified yaw, pitch and roll angles. - - Yaw around the y axis in radians. - Pitch around the x axis in radians. - Roll around the z axis in radians. - A new quaternion from the concatenated yaw, pitch, and roll angles as an output parameter. - - - - Divides a by the other . - - Source . - Divisor . - The result of dividing the quaternions. - - - - Divides a by the other . - - Source . - Divisor . - The result of dividing the quaternions as an output parameter. - - - - Returns a dot product of two quaternions. - - The first quaternion. - The second quaternion. - The dot product of two quaternions. - - - - Returns a dot product of two quaternions. - - The first quaternion. - The second quaternion. - The dot product of two quaternions as an output parameter. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Gets the hash code of this . - - Hash code of this . - - - - Returns the inverse quaternion which represents the opposite rotation. - - Source . - The inverse quaternion. - - - - Returns the inverse quaternion which represents the opposite rotation. - - Source . - The inverse quaternion as an output parameter. - - - - Returns the magnitude of the quaternion components. - - The magnitude of the quaternion components. - - - - Returns the squared magnitude of the quaternion components. - - The squared magnitude of the quaternion components. - - - - Performs a linear blend between two quaternions. - - Source . - Source . - The blend amount where 0 returns and 1 . - The result of linear blending between two quaternions. - - - - Performs a linear blend between two quaternions. - - Source . - Source . - The blend amount where 0 returns and 1 . - The result of linear blending between two quaternions as an output parameter. - - - - Performs a spherical linear blend between two quaternions. - - Source . - Source . - The blend amount where 0 returns and 1 . - The result of spherical linear blending between two quaternions. - - - - Performs a spherical linear blend between two quaternions. - - Source . - Source . - The blend amount where 0 returns and 1 . - The result of spherical linear blending between two quaternions as an output parameter. - - - - Creates a new that contains subtraction of one from another. - - Source . - Source . - The result of the quaternion subtraction. - - - - Creates a new that contains subtraction of one from another. - - Source . - Source . - The result of the quaternion subtraction as an output parameter. - - - - Creates a new that contains a multiplication of two quaternions. - - Source . - Source . - The result of the quaternion multiplication. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - The result of the quaternion multiplication with a scalar. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - The result of the quaternion multiplication with a scalar as an output parameter. - - - - Creates a new that contains a multiplication of two quaternions. - - Source . - Source . - The result of the quaternion multiplication as an output parameter. - - - - Flips the sign of the all the quaternion components. - - Source . - The result of the quaternion negation. - - - - Flips the sign of the all the quaternion components. - - Source . - The result of the quaternion negation as an output parameter. - - - - Scales the quaternion magnitude to unit length. - - - - - Scales the quaternion magnitude to unit length. - - Source . - The unit length quaternion. - - - - Scales the quaternion magnitude to unit length. - - Source . - The unit length quaternion an output parameter. - - - - Returns a representation of this in the format: - {X:[] Y:[] Z:[] W:[]} - - A representation of this . - - - - Gets a representation for this object. - - A representation for this object. - - - - Adds two quaternions. - - Source on the left of the add sign. - Source on the right of the add sign. - Sum of the vectors. - - - - Divides a by the other . - - Source on the left of the div sign. - Divisor on the right of the div sign. - The result of dividing the quaternions. - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Multiplies two quaternions. - - Source on the left of the mul sign. - Source on the right of the mul sign. - Result of the quaternions multiplication. - - - - Multiplies the components of quaternion by a scalar. - - Source on the left of the mul sign. - Scalar value on the right of the mul sign. - Result of the quaternion multiplication with a scalar. - - - - Subtracts a from a . - - Source on the left of the sub sign. - Source on the right of the sub sign. - Result of the quaternion subtraction. - - - - Flips the sign of the all the quaternion components. - - Source on the right of the sub sign. - The result of the quaternion negation. - - - - Deconstruction method for . - - Receives the start position of the ray. - Receives the direction of the ray. - - - - Describes a 2D-rectangle. - - - - - The x coordinate of the top-left corner of this . - - - - - The y coordinate of the top-left corner of this . - - - - - The width of this . - - - - - The height of this . - - - - - Returns a with X=0, Y=0, Width=0, Height=0. - - - - - Returns the x coordinate of the left edge of this . - - - - - Returns the x coordinate of the right edge of this . - - - - - Returns the y coordinate of the top edge of this . - - - - - Returns the y coordinate of the bottom edge of this . - - - - - Whether or not this has a and - of 0, and a of (0, 0). - - - - - The top-left coordinates of this . - - - - - The width-height coordinates of this . - - - - - A located in the center of this . - - - If or is an odd number, - the center point will be rounded down. - - - - - Creates a new instance of struct, with the specified - position, width, and height. - - The x coordinate of the top-left corner of the created . - The y coordinate of the top-left corner of the created . - The width of the created . - The height of the created . - - - - Creates a new instance of struct, with the specified - location and size. - - The x and y coordinates of the top-left corner of the created . - The width and height of the created . - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Gets whether or not the provided coordinates lie within the bounds of this . - - The x coordinate of the point to check for containment. - The y coordinate of the point to check for containment. - true if the provided coordinates lie inside this ; false otherwise. - - - - Gets whether or not the provided coordinates lie within the bounds of this . - - The x coordinate of the point to check for containment. - The y coordinate of the point to check for containment. - true if the provided coordinates lie inside this ; false otherwise. - - - - Gets whether or not the provided lies within the bounds of this . - - The coordinates to check for inclusion in this . - true if the provided lies inside this ; false otherwise. - - - - Gets whether or not the provided lies within the bounds of this . - - The coordinates to check for inclusion in this . - true if the provided lies inside this ; false otherwise. As an output parameter. - - - - Gets whether or not the provided lies within the bounds of this . - - The coordinates to check for inclusion in this . - true if the provided lies inside this ; false otherwise. - - - - Gets whether or not the provided lies within the bounds of this . - - The coordinates to check for inclusion in this . - true if the provided lies inside this ; false otherwise. As an output parameter. - - - - Gets whether or not the provided lies within the bounds of this . - - The to check for inclusion in this . - true if the provided 's bounds lie entirely inside this ; false otherwise. - - - - Gets whether or not the provided lies within the bounds of this . - - The to check for inclusion in this . - true if the provided 's bounds lie entirely inside this ; false otherwise. As an output parameter. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Gets the hash code of this . - - Hash code of this . - - - - Adjusts the edges of this by specified horizontal and vertical amounts. - - Value to adjust the left and right edges. - Value to adjust the top and bottom edges. - - - - Adjusts the edges of this by specified horizontal and vertical amounts. - - Value to adjust the left and right edges. - Value to adjust the top and bottom edges. - - - - Gets whether or not the other intersects with this rectangle. - - The other rectangle for testing. - true if other intersects with this rectangle; false otherwise. - - - - Gets whether or not the other intersects with this rectangle. - - The other rectangle for testing. - true if other intersects with this rectangle; false otherwise. As an output parameter. - - - - Creates a new that contains overlapping region of two other rectangles. - - The first . - The second . - Overlapping region of the two rectangles. - - - - Creates a new that contains overlapping region of two other rectangles. - - The first . - The second . - Overlapping region of the two rectangles as an output parameter. - - - - Changes the of this . - - The x coordinate to add to this . - The y coordinate to add to this . - - - - Changes the of this . - - The x coordinate to add to this . - The y coordinate to add to this . - - - - Changes the of this . - - The x and y components to add to this . - - - - Changes the of this . - - The x and y components to add to this . - - - - Returns a representation of this in the format: - {X:[] Y:[] Width:[] Height:[]} - - representation of this . - - - - Creates a new that completely contains two other rectangles. - - The first . - The second . - The union of the two rectangles. - - - - Creates a new that completely contains two other rectangles. - - The first . - The second . - The union of the two rectangles as an output parameter. - - - - Deconstruction method for . - - - - - - - - - This class is used for the game window's TextInput event as EventArgs. - - - - - Returns an open stream to an exsiting file in the title storage area. - - The filepath relative to the title storage area. - A open stream or null if the file is not found. - - - - Describes a 2D-vector. - - - - - The x coordinate of this . - - - - - The y coordinate of this . - - - - - Returns a with components 0, 0. - - - - - Returns a with components 1, 1. - - - - - Returns a with components 1, 0. - - - - - Returns a with components 0, 1. - - - - - Constructs a 2d vector with X and Y from two values. - - The x coordinate in 2d-space. - The y coordinate in 2d-space. - - - - Constructs a 2d vector with X and Y set to the same value. - - The x and y coordinates in 2d-space. - - - - Inverts values in the specified . - - Source on the right of the sub sign. - Result of the inversion. - - - - Adds two vectors. - - Source on the left of the add sign. - Source on the right of the add sign. - Sum of the vectors. - - - - Subtracts a from a . - - Source on the left of the sub sign. - Source on the right of the sub sign. - Result of the vector subtraction. - - - - Multiplies the components of two vectors by each other. - - Source on the left of the mul sign. - Source on the right of the mul sign. - Result of the vector multiplication. - - - - Multiplies the components of vector by a scalar. - - Source on the left of the mul sign. - Scalar value on the right of the mul sign. - Result of the vector multiplication with a scalar. - - - - Multiplies the components of vector by a scalar. - - Scalar value on the left of the mul sign. - Source on the right of the mul sign. - Result of the vector multiplication with a scalar. - - - - Divides the components of a by the components of another . - - Source on the left of the div sign. - Divisor on the right of the div sign. - The result of dividing the vectors. - - - - Divides the components of a by a scalar. - - Source on the left of the div sign. - Divisor scalar on the right of the div sign. - The result of dividing a vector by a scalar. - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Performs vector addition on and . - - The first vector to add. - The second vector to add. - The result of the vector addition. - - - - Performs vector addition on and - , storing the result of the - addition in . - - The first vector to add. - The second vector to add. - The result of the vector addition. - - - - Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 2d-triangle. - - The first vector of 2d-triangle. - The second vector of 2d-triangle. - The third vector of 2d-triangle. - Barycentric scalar b2 which represents a weighting factor towards second vector of 2d-triangle. - Barycentric scalar b3 which represents a weighting factor towards third vector of 2d-triangle. - The cartesian translation of barycentric coordinates. - - - - Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 2d-triangle. - - The first vector of 2d-triangle. - The second vector of 2d-triangle. - The third vector of 2d-triangle. - Barycentric scalar b2 which represents a weighting factor towards second vector of 2d-triangle. - Barycentric scalar b3 which represents a weighting factor towards third vector of 2d-triangle. - The cartesian translation of barycentric coordinates as an output parameter. - - - - Creates a new that contains CatmullRom interpolation of the specified vectors. - - The first vector in interpolation. - The second vector in interpolation. - The third vector in interpolation. - The fourth vector in interpolation. - Weighting factor. - The result of CatmullRom interpolation. - - - - Creates a new that contains CatmullRom interpolation of the specified vectors. - - The first vector in interpolation. - The second vector in interpolation. - The third vector in interpolation. - The fourth vector in interpolation. - Weighting factor. - The result of CatmullRom interpolation as an output parameter. - - - - Round the members of this towards positive infinity. - - - - - Creates a new that contains members from another vector rounded towards positive infinity. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded towards positive infinity. - - Source . - The rounded . - - - - Clamps the specified value within a range. - - The value to clamp. - The min value. - The max value. - The clamped value. - - - - Clamps the specified value within a range. - - The value to clamp. - The min value. - The max value. - The clamped value as an output parameter. - - - - Returns the distance between two vectors. - - The first vector. - The second vector. - The distance between two vectors. - - - - Returns the distance between two vectors. - - The first vector. - The second vector. - The distance between two vectors as an output parameter. - - - - Returns the squared distance between two vectors. - - The first vector. - The second vector. - The squared distance between two vectors. - - - - Returns the squared distance between two vectors. - - The first vector. - The second vector. - The squared distance between two vectors as an output parameter. - - - - Divides the components of a by the components of another . - - Source . - Divisor . - The result of dividing the vectors. - - - - Divides the components of a by the components of another . - - Source . - Divisor . - The result of dividing the vectors as an output parameter. - - - - Divides the components of a by a scalar. - - Source . - Divisor scalar. - The result of dividing a vector by a scalar. - - - - Divides the components of a by a scalar. - - Source . - Divisor scalar. - The result of dividing a vector by a scalar as an output parameter. - - - - Returns a dot product of two vectors. - - The first vector. - The second vector. - The dot product of two vectors. - - - - Returns a dot product of two vectors. - - The first vector. - The second vector. - The dot product of two vectors as an output parameter. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Round the members of this towards negative infinity. - - - - - Creates a new that contains members from another vector rounded towards negative infinity. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded towards negative infinity. - - Source . - The rounded . - - - - Gets the hash code of this . - - Hash code of this . - - - - Creates a new that contains hermite spline interpolation. - - The first position vector. - The first tangent vector. - The second position vector. - The second tangent vector. - Weighting factor. - The hermite spline interpolation vector. - - - - Creates a new that contains hermite spline interpolation. - - The first position vector. - The first tangent vector. - The second position vector. - The second tangent vector. - Weighting factor. - The hermite spline interpolation vector as an output parameter. - - - - Returns the length of this . - - The length of this . - - - - Returns the squared length of this . - - The squared length of this . - - - - Creates a new that contains linear interpolation of the specified vectors. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors. - - - - Creates a new that contains linear interpolation of the specified vectors. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains linear interpolation of the specified vectors. - Uses on MathHelper for the interpolation. - Less efficient but more precise compared to . - See remarks section of on MathHelper for more info. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors. - - - - Creates a new that contains linear interpolation of the specified vectors. - Uses on MathHelper for the interpolation. - Less efficient but more precise compared to . - See remarks section of on MathHelper for more info. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains a maximal values from the two vectors. - - The first vector. - The second vector. - The with maximal values from the two vectors. - - - - Creates a new that contains a maximal values from the two vectors. - - The first vector. - The second vector. - The with maximal values from the two vectors as an output parameter. - - - - Creates a new that contains a minimal values from the two vectors. - - The first vector. - The second vector. - The with minimal values from the two vectors. - - - - Creates a new that contains a minimal values from the two vectors. - - The first vector. - The second vector. - The with minimal values from the two vectors as an output parameter. - - - - Creates a new that contains a multiplication of two vectors. - - Source . - Source . - The result of the vector multiplication. - - - - Creates a new that contains a multiplication of two vectors. - - Source . - Source . - The result of the vector multiplication as an output parameter. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - The result of the vector multiplication with a scalar. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - The result of the multiplication with a scalar as an output parameter. - - - - Creates a new that contains the specified vector inversion. - - Source . - The result of the vector inversion. - - - - Creates a new that contains the specified vector inversion. - - Source . - The result of the vector inversion as an output parameter. - - - - Turns this to a unit vector with the same direction. - - - - - Creates a new that contains a normalized values from another vector. - - Source . - Unit vector. - - - - Creates a new that contains a normalized values from another vector. - - Source . - Unit vector as an output parameter. - - - - Creates a new that contains reflect vector of the given vector and normal. - - Source . - Reflection normal. - Reflected vector. - - - - Creates a new that contains reflect vector of the given vector and normal. - - Source . - Reflection normal. - Reflected vector as an output parameter. - - - - Round the members of this to the nearest integer value. - - - - - Creates a new that contains members from another vector rounded to the nearest integer value. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded to the nearest integer value. - - Source . - The rounded . - - - - Creates a new that contains cubic interpolation of the specified vectors. - - Source . - Source . - Weighting value. - Cubic interpolation of the specified vectors. - - - - Creates a new that contains cubic interpolation of the specified vectors. - - Source . - Source . - Weighting value. - Cubic interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains subtraction of on from a another. - - Source . - Source . - The result of the vector subtraction. - - - - Creates a new that contains subtraction of on from a another. - - Source . - Source . - The result of the vector subtraction as an output parameter. - - - - Returns a representation of this in the format: - {X:[] Y:[]} - - A representation of this . - - - - Gets a representation for this object. - - A representation for this object. - - - - Creates a new that contains a transformation of 2d-vector by the specified . - - Source . - The transformation . - Transformed . - - - - Creates a new that contains a transformation of 2d-vector by the specified . - - Source . - The transformation . - Transformed as an output parameter. - - - - Creates a new that contains a transformation of 2d-vector by the specified , representing the rotation. - - Source . - The which contains rotation transformation. - Transformed . - - - - Creates a new that contains a transformation of 2d-vector by the specified , representing the rotation. - - Source . - The which contains rotation transformation. - Transformed as an output parameter. - - - - Apply transformation on vectors within array of by the specified and places the results in an another array. - - Source array. - The starting index of transformation in the source array. - The transformation . - Destination array. - The starting index in the destination array, where the first should be written. - The number of vectors to be transformed. - - - - Apply transformation on vectors within array of by the specified and places the results in an another array. - - Source array. - The starting index of transformation in the source array. - The which contains rotation transformation. - Destination array. - The starting index in the destination array, where the first should be written. - The number of vectors to be transformed. - - - - Apply transformation on all vectors within array of by the specified and places the results in an another array. - - Source array. - The transformation . - Destination array. - - - - Apply transformation on all vectors within array of by the specified and places the results in an another array. - - Source array. - The which contains rotation transformation. - Destination array. - - - - Creates a new that contains a transformation of the specified normal by the specified . - - Source which represents a normal vector. - The transformation . - Transformed normal. - - - - Creates a new that contains a transformation of the specified normal by the specified . - - Source which represents a normal vector. - The transformation . - Transformed normal as an output parameter. - - - - Apply transformation on normals within array of by the specified and places the results in an another array. - - Source array. - The starting index of transformation in the source array. - The transformation . - Destination array. - The starting index in the destination array, where the first should be written. - The number of normals to be transformed. - - - - Apply transformation on all normals within array of by the specified and places the results in an another array. - - Source array. - The transformation . - Destination array. - - - - Deconstruction method for . - - - - - - - Describes a 3D-vector. - - - - - The x coordinate of this . - - - - - The y coordinate of this . - - - - - The z coordinate of this . - - - - - Returns a with components 0, 0, 0. - - - - - Returns a with components 1, 1, 1. - - - - - Returns a with components 1, 0, 0. - - - - - Returns a with components 0, 1, 0. - - - - - Returns a with components 0, 0, 1. - - - - - Returns a with components 0, 1, 0. - - - - - Returns a with components 0, -1, 0. - - - - - Returns a with components 1, 0, 0. - - - - - Returns a with components -1, 0, 0. - - - - - Returns a with components 0, 0, -1. - - - - - Returns a with components 0, 0, 1. - - - - - Constructs a 3d vector with X, Y and Z from three values. - - The x coordinate in 3d-space. - The y coordinate in 3d-space. - The z coordinate in 3d-space. - - - - Constructs a 3d vector with X, Y and Z set to the same value. - - The x, y and z coordinates in 3d-space. - - - - Constructs a 3d vector with X, Y from and Z from a scalar. - - The x and y coordinates in 3d-space. - The z coordinate in 3d-space. - - - - Performs vector addition on and . - - The first vector to add. - The second vector to add. - The result of the vector addition. - - - - Performs vector addition on and - , storing the result of the - addition in . - - The first vector to add. - The second vector to add. - The result of the vector addition. - - - - Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 3d-triangle. - - The first vector of 3d-triangle. - The second vector of 3d-triangle. - The third vector of 3d-triangle. - Barycentric scalar b2 which represents a weighting factor towards second vector of 3d-triangle. - Barycentric scalar b3 which represents a weighting factor towards third vector of 3d-triangle. - The cartesian translation of barycentric coordinates. - - - - Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 3d-triangle. - - The first vector of 3d-triangle. - The second vector of 3d-triangle. - The third vector of 3d-triangle. - Barycentric scalar b2 which represents a weighting factor towards second vector of 3d-triangle. - Barycentric scalar b3 which represents a weighting factor towards third vector of 3d-triangle. - The cartesian translation of barycentric coordinates as an output parameter. - - - - Creates a new that contains CatmullRom interpolation of the specified vectors. - - The first vector in interpolation. - The second vector in interpolation. - The third vector in interpolation. - The fourth vector in interpolation. - Weighting factor. - The result of CatmullRom interpolation. - - - - Creates a new that contains CatmullRom interpolation of the specified vectors. - - The first vector in interpolation. - The second vector in interpolation. - The third vector in interpolation. - The fourth vector in interpolation. - Weighting factor. - The result of CatmullRom interpolation as an output parameter. - - - - Round the members of this towards positive infinity. - - - - - Creates a new that contains members from another vector rounded towards positive infinity. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded towards positive infinity. - - Source . - The rounded . - - - - Clamps the specified value within a range. - - The value to clamp. - The min value. - The max value. - The clamped value. - - - - Clamps the specified value within a range. - - The value to clamp. - The min value. - The max value. - The clamped value as an output parameter. - - - - Computes the cross product of two vectors. - - The first vector. - The second vector. - The cross product of two vectors. - - - - Computes the cross product of two vectors. - - The first vector. - The second vector. - The cross product of two vectors as an output parameter. - - - - Returns the distance between two vectors. - - The first vector. - The second vector. - The distance between two vectors. - - - - Returns the distance between two vectors. - - The first vector. - The second vector. - The distance between two vectors as an output parameter. - - - - Returns the squared distance between two vectors. - - The first vector. - The second vector. - The squared distance between two vectors. - - - - Returns the squared distance between two vectors. - - The first vector. - The second vector. - The squared distance between two vectors as an output parameter. - - - - Divides the components of a by the components of another . - - Source . - Divisor . - The result of dividing the vectors. - - - - Divides the components of a by a scalar. - - Source . - Divisor scalar. - The result of dividing a vector by a scalar. - - - - Divides the components of a by a scalar. - - Source . - Divisor scalar. - The result of dividing a vector by a scalar as an output parameter. - - - - Divides the components of a by the components of another . - - Source . - Divisor . - The result of dividing the vectors as an output parameter. - - - - Returns a dot product of two vectors. - - The first vector. - The second vector. - The dot product of two vectors. - - - - Returns a dot product of two vectors. - - The first vector. - The second vector. - The dot product of two vectors as an output parameter. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Round the members of this towards negative infinity. - - - - - Creates a new that contains members from another vector rounded towards negative infinity. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded towards negative infinity. - - Source . - The rounded . - - - - Gets the hash code of this . - - Hash code of this . - - - - Creates a new that contains hermite spline interpolation. - - The first position vector. - The first tangent vector. - The second position vector. - The second tangent vector. - Weighting factor. - The hermite spline interpolation vector. - - - - Creates a new that contains hermite spline interpolation. - - The first position vector. - The first tangent vector. - The second position vector. - The second tangent vector. - Weighting factor. - The hermite spline interpolation vector as an output parameter. - - - - Returns the length of this . - - The length of this . - - - - Returns the squared length of this . - - The squared length of this . - - - - Creates a new that contains linear interpolation of the specified vectors. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors. - - - - Creates a new that contains linear interpolation of the specified vectors. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains linear interpolation of the specified vectors. - Uses on MathHelper for the interpolation. - Less efficient but more precise compared to . - See remarks section of on MathHelper for more info. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors. - - - - Creates a new that contains linear interpolation of the specified vectors. - Uses on MathHelper for the interpolation. - Less efficient but more precise compared to . - See remarks section of on MathHelper for more info. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains a maximal values from the two vectors. - - The first vector. - The second vector. - The with maximal values from the two vectors. - - - - Creates a new that contains a maximal values from the two vectors. - - The first vector. - The second vector. - The with maximal values from the two vectors as an output parameter. - - - - Creates a new that contains a minimal values from the two vectors. - - The first vector. - The second vector. - The with minimal values from the two vectors. - - - - Creates a new that contains a minimal values from the two vectors. - - The first vector. - The second vector. - The with minimal values from the two vectors as an output parameter. - - - - Creates a new that contains a multiplication of two vectors. - - Source . - Source . - The result of the vector multiplication. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - The result of the vector multiplication with a scalar. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - The result of the multiplication with a scalar as an output parameter. - - - - Creates a new that contains a multiplication of two vectors. - - Source . - Source . - The result of the vector multiplication as an output parameter. - - - - Creates a new that contains the specified vector inversion. - - Source . - The result of the vector inversion. - - - - Creates a new that contains the specified vector inversion. - - Source . - The result of the vector inversion as an output parameter. - - - - Turns this to a unit vector with the same direction. - - - - - Creates a new that contains a normalized values from another vector. - - Source . - Unit vector. - - - - Creates a new that contains a normalized values from another vector. - - Source . - Unit vector as an output parameter. - - - - Creates a new that contains reflect vector of the given vector and normal. - - Source . - Reflection normal. - Reflected vector. - - - - Creates a new that contains reflect vector of the given vector and normal. - - Source . - Reflection normal. - Reflected vector as an output parameter. - - - - Round the members of this towards the nearest integer value. - - - - - Creates a new that contains members from another vector rounded to the nearest integer value. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded to the nearest integer value. - - Source . - The rounded . - - - - Creates a new that contains cubic interpolation of the specified vectors. - - Source . - Source . - Weighting value. - Cubic interpolation of the specified vectors. - - - - Creates a new that contains cubic interpolation of the specified vectors. - - Source . - Source . - Weighting value. - Cubic interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains subtraction of on from a another. - - Source . - Source . - The result of the vector subtraction. - - - - Creates a new that contains subtraction of on from a another. - - Source . - Source . - The result of the vector subtraction as an output parameter. - - - - Returns a representation of this in the format: - {X:[] Y:[] Z:[]} - - A representation of this . - - - - Creates a new that contains a transformation of 3d-vector by the specified . - - Source . - The transformation . - Transformed . - - - - Creates a new that contains a transformation of 3d-vector by the specified . - - Source . - The transformation . - Transformed as an output parameter. - - - - Creates a new that contains a transformation of 3d-vector by the specified , representing the rotation. - - Source . - The which contains rotation transformation. - Transformed . - - - - Creates a new that contains a transformation of 3d-vector by the specified , representing the rotation. - - Source . - The which contains rotation transformation. - Transformed as an output parameter. - - - - Apply transformation on vectors within array of by the specified and places the results in an another array. - - Source array. - The starting index of transformation in the source array. - The transformation . - Destination array. - The starting index in the destination array, where the first should be written. - The number of vectors to be transformed. - - - - Apply transformation on vectors within array of by the specified and places the results in an another array. - - Source array. - The starting index of transformation in the source array. - The which contains rotation transformation. - Destination array. - The starting index in the destination array, where the first should be written. - The number of vectors to be transformed. - - - - Apply transformation on all vectors within array of by the specified and places the results in an another array. - - Source array. - The transformation . - Destination array. - - - - Apply transformation on all vectors within array of by the specified and places the results in an another array. - - Source array. - The which contains rotation transformation. - Destination array. - - - - Creates a new that contains a transformation of the specified normal by the specified . - - Source which represents a normal vector. - The transformation . - Transformed normal. - - - - Creates a new that contains a transformation of the specified normal by the specified . - - Source which represents a normal vector. - The transformation . - Transformed normal as an output parameter. - - - - Apply transformation on normals within array of by the specified and places the results in an another array. - - Source array. - The starting index of transformation in the source array. - The transformation . - Destination array. - The starting index in the destination array, where the first should be written. - The number of normals to be transformed. - - - - Apply transformation on all normals within array of by the specified and places the results in an another array. - - Source array. - The transformation . - Destination array. - - - - Deconstruction method for . - - - - - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Adds two vectors. - - Source on the left of the add sign. - Source on the right of the add sign. - Sum of the vectors. - - - - Inverts values in the specified . - - Source on the right of the sub sign. - Result of the inversion. - - - - Subtracts a from a . - - Source on the left of the sub sign. - Source on the right of the sub sign. - Result of the vector subtraction. - - - - Multiplies the components of two vectors by each other. - - Source on the left of the mul sign. - Source on the right of the mul sign. - Result of the vector multiplication. - - - - Multiplies the components of vector by a scalar. - - Source on the left of the mul sign. - Scalar value on the right of the mul sign. - Result of the vector multiplication with a scalar. - - - - Multiplies the components of vector by a scalar. - - Scalar value on the left of the mul sign. - Source on the right of the mul sign. - Result of the vector multiplication with a scalar. - - - - Divides the components of a by the components of another . - - Source on the left of the div sign. - Divisor on the right of the div sign. - The result of dividing the vectors. - - - - Divides the components of a by a scalar. - - Source on the left of the div sign. - Divisor scalar on the right of the div sign. - The result of dividing a vector by a scalar. - - - - Describes a 4D-vector. - - - - - The x coordinate of this . - - - - - The y coordinate of this . - - - - - The z coordinate of this . - - - - - The w coordinate of this . - - - - - Returns a with components 0, 0, 0, 0. - - - - - Returns a with components 1, 1, 1, 1. - - - - - Returns a with components 1, 0, 0, 0. - - - - - Returns a with components 0, 1, 0, 0. - - - - - Returns a with components 0, 0, 1, 0. - - - - - Returns a with components 0, 0, 0, 1. - - - - - Constructs a 3d vector with X, Y, Z and W from four values. - - The x coordinate in 4d-space. - The y coordinate in 4d-space. - The z coordinate in 4d-space. - The w coordinate in 4d-space. - - - - Constructs a 3d vector with X and Z from and Z and W from the scalars. - - The x and y coordinates in 4d-space. - The z coordinate in 4d-space. - The w coordinate in 4d-space. - - - - Constructs a 3d vector with X, Y, Z from and W from a scalar. - - The x, y and z coordinates in 4d-space. - The w coordinate in 4d-space. - - - - Constructs a 4d vector with X, Y, Z and W set to the same value. - - The x, y, z and w coordinates in 4d-space. - - - - Performs vector addition on and . - - The first vector to add. - The second vector to add. - The result of the vector addition. - - - - Performs vector addition on and - , storing the result of the - addition in . - - The first vector to add. - The second vector to add. - The result of the vector addition. - - - - Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 4d-triangle. - - The first vector of 4d-triangle. - The second vector of 4d-triangle. - The third vector of 4d-triangle. - Barycentric scalar b2 which represents a weighting factor towards second vector of 4d-triangle. - Barycentric scalar b3 which represents a weighting factor towards third vector of 4d-triangle. - The cartesian translation of barycentric coordinates. - - - - Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 4d-triangle. - - The first vector of 4d-triangle. - The second vector of 4d-triangle. - The third vector of 4d-triangle. - Barycentric scalar b2 which represents a weighting factor towards second vector of 4d-triangle. - Barycentric scalar b3 which represents a weighting factor towards third vector of 4d-triangle. - The cartesian translation of barycentric coordinates as an output parameter. - - - - Creates a new that contains CatmullRom interpolation of the specified vectors. - - The first vector in interpolation. - The second vector in interpolation. - The third vector in interpolation. - The fourth vector in interpolation. - Weighting factor. - The result of CatmullRom interpolation. - - - - Creates a new that contains CatmullRom interpolation of the specified vectors. - - The first vector in interpolation. - The second vector in interpolation. - The third vector in interpolation. - The fourth vector in interpolation. - Weighting factor. - The result of CatmullRom interpolation as an output parameter. - - - - Round the members of this towards positive infinity. - - - - - Creates a new that contains members from another vector rounded towards positive infinity. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded towards positive infinity. - - Source . - The rounded . - - - - Clamps the specified value within a range. - - The value to clamp. - The min value. - The max value. - The clamped value. - - - - Clamps the specified value within a range. - - The value to clamp. - The min value. - The max value. - The clamped value as an output parameter. - - - - Returns the distance between two vectors. - - The first vector. - The second vector. - The distance between two vectors. - - - - Returns the distance between two vectors. - - The first vector. - The second vector. - The distance between two vectors as an output parameter. - - - - Returns the squared distance between two vectors. - - The first vector. - The second vector. - The squared distance between two vectors. - - - - Returns the squared distance between two vectors. - - The first vector. - The second vector. - The squared distance between two vectors as an output parameter. - - - - Divides the components of a by the components of another . - - Source . - Divisor . - The result of dividing the vectors. - - - - Divides the components of a by a scalar. - - Source . - Divisor scalar. - The result of dividing a vector by a scalar. - - - - Divides the components of a by a scalar. - - Source . - Divisor scalar. - The result of dividing a vector by a scalar as an output parameter. - - - - Divides the components of a by the components of another . - - Source . - Divisor . - The result of dividing the vectors as an output parameter. - - - - Returns a dot product of two vectors. - - The first vector. - The second vector. - The dot product of two vectors. - - - - Returns a dot product of two vectors. - - The first vector. - The second vector. - The dot product of two vectors as an output parameter. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Compares whether current instance is equal to specified . - - The to compare. - true if the instances are equal; false otherwise. - - - - Round the members of this towards negative infinity. - - - - - Creates a new that contains members from another vector rounded towards negative infinity. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded towards negative infinity. - - Source . - The rounded . - - - - Gets the hash code of this . - - Hash code of this . - - - - Creates a new that contains hermite spline interpolation. - - The first position vector. - The first tangent vector. - The second position vector. - The second tangent vector. - Weighting factor. - The hermite spline interpolation vector. - - - - Creates a new that contains hermite spline interpolation. - - The first position vector. - The first tangent vector. - The second position vector. - The second tangent vector. - Weighting factor. - The hermite spline interpolation vector as an output parameter. - - - - Returns the length of this . - - The length of this . - - - - Returns the squared length of this . - - The squared length of this . - - - - Creates a new that contains linear interpolation of the specified vectors. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors. - - - - Creates a new that contains linear interpolation of the specified vectors. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains linear interpolation of the specified vectors. - Uses on MathHelper for the interpolation. - Less efficient but more precise compared to . - See remarks section of on MathHelper for more info. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors. - - - - Creates a new that contains linear interpolation of the specified vectors. - Uses on MathHelper for the interpolation. - Less efficient but more precise compared to . - See remarks section of on MathHelper for more info. - - The first vector. - The second vector. - Weighting value(between 0.0 and 1.0). - The result of linear interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains a maximal values from the two vectors. - - The first vector. - The second vector. - The with maximal values from the two vectors. - - - - Creates a new that contains a maximal values from the two vectors. - - The first vector. - The second vector. - The with maximal values from the two vectors as an output parameter. - - - - Creates a new that contains a minimal values from the two vectors. - - The first vector. - The second vector. - The with minimal values from the two vectors. - - - - Creates a new that contains a minimal values from the two vectors. - - The first vector. - The second vector. - The with minimal values from the two vectors as an output parameter. - - - - Creates a new that contains a multiplication of two vectors. - - Source . - Source . - The result of the vector multiplication. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - The result of the vector multiplication with a scalar. - - - - Creates a new that contains a multiplication of and a scalar. - - Source . - Scalar value. - The result of the multiplication with a scalar as an output parameter. - - - - Creates a new that contains a multiplication of two vectors. - - Source . - Source . - The result of the vector multiplication as an output parameter. - - - - Creates a new that contains the specified vector inversion. - - Source . - The result of the vector inversion. - - - - Creates a new that contains the specified vector inversion. - - Source . - The result of the vector inversion as an output parameter. - - - - Turns this to a unit vector with the same direction. - - - - - Creates a new that contains a normalized values from another vector. - - Source . - Unit vector. - - - - Creates a new that contains a normalized values from another vector. - - Source . - Unit vector as an output parameter. - - - - Round the members of this to the nearest integer value. - - - - - Creates a new that contains members from another vector rounded to the nearest integer value. - - Source . - The rounded . - - - - Creates a new that contains members from another vector rounded to the nearest integer value. - - Source . - The rounded . - - - - Creates a new that contains cubic interpolation of the specified vectors. - - Source . - Source . - Weighting value. - Cubic interpolation of the specified vectors. - - - - Creates a new that contains cubic interpolation of the specified vectors. - - Source . - Source . - Weighting value. - Cubic interpolation of the specified vectors as an output parameter. - - - - Creates a new that contains subtraction of on from a another. - - Source . - Source . - The result of the vector subtraction. - - - - Creates a new that contains subtraction of on from a another. - - Source . - Source . - The result of the vector subtraction as an output parameter. - - - - Creates a new that contains a transformation of 2d-vector by the specified . - - Source . - The transformation . - Transformed . - - - - Creates a new that contains a transformation of 2d-vector by the specified . - - Source . - The which contains rotation transformation. - Transformed . - - - - Creates a new that contains a transformation of 3d-vector by the specified . - - Source . - The transformation . - Transformed . - - - - Creates a new that contains a transformation of 3d-vector by the specified . - - Source . - The which contains rotation transformation. - Transformed . - - - - Creates a new that contains a transformation of 4d-vector by the specified . - - Source . - The transformation . - Transformed . - - - - Creates a new that contains a transformation of 4d-vector by the specified . - - Source . - The which contains rotation transformation. - Transformed . - - - - Creates a new that contains a transformation of 2d-vector by the specified . - - Source . - The transformation . - Transformed as an output parameter. - - - - Creates a new that contains a transformation of 2d-vector by the specified . - - Source . - The which contains rotation transformation. - Transformed as an output parameter. - - - - Creates a new that contains a transformation of 3d-vector by the specified . - - Source . - The transformation . - Transformed as an output parameter. - - - - Creates a new that contains a transformation of 3d-vector by the specified . - - Source . - The which contains rotation transformation. - Transformed as an output parameter. - - - - Creates a new that contains a transformation of 4d-vector by the specified . - - Source . - The transformation . - Transformed as an output parameter. - - - - Creates a new that contains a transformation of 4d-vector by the specified . - - Source . - The which contains rotation transformation. - Transformed as an output parameter. - - - - Apply transformation on vectors within array of by the specified and places the results in an another array. - - Source array. - The starting index of transformation in the source array. - The transformation . - Destination array. - The starting index in the destination array, where the first should be written. - The number of vectors to be transformed. - - - - Apply transformation on vectors within array of by the specified and places the results in an another array. - - Source array. - The starting index of transformation in the source array. - The which contains rotation transformation. - Destination array. - The starting index in the destination array, where the first should be written. - The number of vectors to be transformed. - - - - Apply transformation on all vectors within array of by the specified and places the results in an another array. - - Source array. - The transformation . - Destination array. - - - - Apply transformation on all vectors within array of by the specified and places the results in an another array. - - Source array. - The which contains rotation transformation. - Destination array. - - - - Returns a representation of this in the format: - {X:[] Y:[] Z:[] W:[]} - - A representation of this . - - - - Deconstruction method for . - - - - - - - - - Inverts values in the specified . - - Source on the right of the sub sign. - Result of the inversion. - - - - Compares whether two instances are equal. - - instance on the left of the equal sign. - instance on the right of the equal sign. - true if the instances are equal; false otherwise. - - - - Compares whether two instances are not equal. - - instance on the left of the not equal sign. - instance on the right of the not equal sign. - true if the instances are not equal; false otherwise. - - - - Adds two vectors. - - Source on the left of the add sign. - Source on the right of the add sign. - Sum of the vectors. - - - - Subtracts a from a . - - Source on the left of the sub sign. - Source on the right of the sub sign. - Result of the vector subtraction. - - - - Multiplies the components of two vectors by each other. - - Source on the left of the mul sign. - Source on the right of the mul sign. - Result of the vector multiplication. - - - - Multiplies the components of vector by a scalar. - - Source on the left of the mul sign. - Scalar value on the right of the mul sign. - Result of the vector multiplication with a scalar. - - - - Multiplies the components of vector by a scalar. - - Scalar value on the left of the mul sign. - Source on the right of the mul sign. - Result of the vector multiplication with a scalar. - - - - Divides the components of a by the components of another . - - Source on the left of the div sign. - Divisor on the right of the div sign. - The result of dividing the vectors. - - - - Divides the components of a by a scalar. - - Source on the left of the div sign. - Divisor scalar on the right of the div sign. - The result of dividing a vector by a scalar. - - - - Defines the buffers for clearing when calling operation. - - - - - Color buffer. - - - - - Depth buffer. - - - - - Stencil buffer. - - - - - Defines the color channels for render target blending operations. - - - - - No channels selected. - - - - - Red channel selected. - - - - - Green channel selected. - - - - - Blue channel selected. - - - - - Alpha channel selected. - - - - - All channels selected. - - - - - Defines the faces in a cube map for the class. - - - - - Positive X face in the cube map. - - - - - Negative X face in the cube map. - - - - - Positive Y face in the cube map. - - - - - Negative Y face in the cube map. - - - - - Positive Z face in the cube map. - - - - - Negative Z face in the cube map. - - - - - A snapshot of rendering statistics from to be used for runtime debugging and profiling. - - - - - Number of times Clear was called. - - - - - Number of times Draw was called. - - - - - Number of times the pixel shader was changed on the GPU. - - - - - Number of rendered primitives. - - - - - Number of sprites and text characters rendered via . - - - - - Number of times a target was changed on the GPU. - - - - - Number of times a texture was changed on the GPU. - - - - - Number of times the vertex shader was changed on the GPU. - - - - - Returns the difference between two sets of metrics. - - Source on the left of the sub sign. - Source on the right of the sub sign. - Difference between two sets of metrics. - - - - Returns the combination of two sets of metrics. - - Source on the left of the add sign. - Source on the right of the add sign. - Combination of two sets of metrics. - - - - Built-in effect that supports alpha testing. - - - - - Gets or sets the world matrix. - - - - - Gets or sets the view matrix. - - - - - Gets or sets the projection matrix. - - - - - Gets or sets the material diffuse color (range 0 to 1). - - - - - Gets or sets the material alpha. - - - - - Gets or sets the fog enable flag. - - - - - Gets or sets the fog start distance. - - - - - Gets or sets the fog end distance. - - - - - Gets or sets the fog color. - - - - - Gets or sets the current texture. - - - - - Gets or sets whether vertex color is enabled. - - - - - Gets or sets the alpha compare function (default Greater). - - - - - Gets or sets the reference alpha value (default 0). - - - - - Creates a new AlphaTestEffect with default parameter settings. - - - - - Creates a new AlphaTestEffect by cloning parameter settings from an existing instance. - - - - - Creates a clone of the current AlphaTestEffect instance. - - - - - Looks up shortcut references to our effect parameters. - - - - - Lazily computes derived parameter values immediately before applying the effect. - - - - - Built-in effect that supports optional texturing, vertex coloring, fog, and lighting. - - - - - Gets or sets the world matrix. - - - - - Gets or sets the view matrix. - - - - - Gets or sets the projection matrix. - - - - - Gets or sets the material diffuse color (range 0 to 1). - - - - - Gets or sets the material emissive color (range 0 to 1). - - - - - Gets or sets the material specular color (range 0 to 1). - - - - - Gets or sets the material specular power. - - - - - Gets or sets the material alpha. - - - - - - - - Gets or sets the per-pixel lighting prefer flag. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets or sets whether texturing is enabled. - - - - - Gets or sets the current texture. - - - - - Gets or sets whether vertex color is enabled. - - - - - Creates a new BasicEffect with default parameter settings. - - - - - Creates a new BasicEffect by cloning parameter settings from an existing instance. - - - - - Creates a clone of the current BasicEffect instance. - - - - - - - - Looks up shortcut references to our effect parameters. - - - - - Lazily computes derived parameter values immediately before applying the effect. - - - - - Built-in effect that supports two-layer multitexturing. - - - - - Gets or sets the world matrix. - - - - - Gets or sets the view matrix. - - - - - Gets or sets the projection matrix. - - - - - Gets or sets the material diffuse color (range 0 to 1). - - - - - Gets or sets the material alpha. - - - - - Gets or sets the fog enable flag. - - - - - Gets or sets the fog start distance. - - - - - Gets or sets the fog end distance. - - - - - Gets or sets the fog color. - - - - - Gets or sets the current base texture. - - - - - Gets or sets the current overlay texture. - - - - - Gets or sets whether vertex color is enabled. - - - - - Creates a new DualTextureEffect with default parameter settings. - - - - - Creates a new DualTextureEffect by cloning parameter settings from an existing instance. - - - - - Creates a clone of the current DualTextureEffect instance. - - - - - Looks up shortcut references to our effect parameters. - - - - - Lazily computes derived parameter values immediately before applying the effect. - - - - - The MonoGame Effect file format header identifier ("MGFX"). - - - - - The current MonoGame Effect file format versions - used to detect old packaged content. - - - We should avoid supporting old versions for very long if at all - as users should be rebuilding content when packaging their game. - - - - - Clone the source into this existing object. - - - Note this is not overloaded in derived classes on purpose. This is - only a reason this exists is for caching effects. - - The source effect to clone from. - - - - Returns a deep copy of the effect where immutable types - are shared and mutable data is duplicated. - - - See "Cloning an Effect" in MSDN: - http://msdn.microsoft.com/en-us/library/windows/desktop/ff476138(v=vs.85).aspx - - The cloned effect. - - - - Track which effect parameters need to be recomputed during the next OnApply. - - - - - Helper code shared between the various built-in effects. - - - - - Sets up the standard key/fill/back lighting rig. - - - - - Lazily recomputes the world+view+projection matrix and - fog vector based on the current effect parameter settings. - - - - - Sets a vector which can be dotted with the object space vertex position to compute fog amount. - - - - - Lazily recomputes the world inverse transpose matrix and - eye position based on the current effect parameter settings. - - - - - Sets the diffuse/emissive/alpha material color parameters. - - - - - Defines classes for effect parameters and shader constants. - - - - - Scalar class type. - - - - - Vector class type. - - - - - Matrix class type. - - - - - Class type for textures, shaders or strings. - - - - - Structure class type. - - - - - The next state key used when an effect parameter - is updated by any of the 'set' methods. - - - - - The current state key which is used to detect - if the parameter value has been changed. - - - - - Property referenced by the DebuggerDisplayAttribute. - - - - - Defines types for effect parameters and shader constants. - - - - - Pointer to void type. - - - - - Boolean type. Any non-zero will be true; false otherwise. - - - - - 32-bit integer type. - - - - - Float type. - - - - - String type. - - - - - Any texture type. - - - - - 1D-texture type. - - - - - 2D-texture type. - - - - - 3D-texture type. - - - - - Cubic texture type. - - - - - Internal helper for accessing the bytecode for stock effects. - - - - - Built-in effect that supports environment mapping. - - - - - Gets or sets the world matrix. - - - - - Gets or sets the view matrix. - - - - - Gets or sets the projection matrix. - - - - - Gets or sets the material diffuse color (range 0 to 1). - - - - - Gets or sets the material emissive color (range 0 to 1). - - - - - Gets or sets the material alpha. - - - - - Gets or sets the ambient light color (range 0 to 1). - - - - - Gets the first directional light. - - - - - Gets the second directional light. - - - - - Gets the third directional light. - - - - - Gets or sets the fog enable flag. - - - - - Gets or sets the fog start distance. - - - - - Gets or sets the fog end distance. - - - - - Gets or sets the fog color. - - - - - Gets or sets the current texture. - - - - - Gets or sets the current environment map texture. - - - - - Gets or sets the amount of the environment map RGB that will be blended over - the base texture. Range 0 to 1, default 1. If set to zero, the RGB channels - of the environment map will completely ignored (but the environment map alpha - may still be visible if EnvironmentMapSpecular is greater than zero). - - - - - Gets or sets the amount of the environment map alpha channel that will - be added to the base texture. Range 0 to 1, default 0. This can be used - to implement cheap specular lighting, by encoding one or more specular - highlight patterns into the environment map alpha channel, then setting - EnvironmentMapSpecular to the desired specular light color. - - - - - Gets or sets the Fresnel factor used for the environment map blending. - Higher values make the environment map only visible around the silhouette - edges of the object, while lower values make it visible everywhere. - Setting this property to 0 disables Fresnel entirely, making the - environment map equally visible regardless of view angle. The default is - 1. Fresnel only affects the environment map RGB (the intensity of which is - controlled by EnvironmentMapAmount). The alpha contribution (controlled by - EnvironmentMapSpecular) is not affected by the Fresnel setting. - - - - - This effect requires lighting, so we explicitly implement - IEffectLights.LightingEnabled, and do not allow turning it off. - - - - - Creates a new EnvironmentMapEffect with default parameter settings. - - - - - Creates a new EnvironmentMapEffect by cloning parameter settings from an existing instance. - - - - - Creates a clone of the current EnvironmentMapEffect instance. - - - - - Sets up the standard key/fill/back lighting rig. - - - - - Looks up shortcut references to our effect parameters. - - - - - Lazily computes derived parameter values immediately before applying the effect. - - - - - The common effect fog rendering parameters. - - - - - The floating point fog color. - - - - - Used to toggle the rendering of fog. - - - - - The world space distance from the camera at which fogging is fully applied. - - - FogEnd should be greater than FogStart. If FogEnd and FogStart - are the same value everything is fully fogged. - - - - - The world space distance from the camera at which fogging begins. - - - FogStart should be less than FogEnd. If FogEnd and FogStart are the - same value everything is fully fogged. - - - - - The common effect light rendering parameters. - - - - - The floating point ambient light color. - - - - - Returns the first directional light. - - - - - Returns the second directional light. - - - - - Returns the third directional light. - - - - - Toggles the rendering of lighting. - - - - - Initializes the lights to the standard key/fill/back lighting rig. - - - - - Built-in effect for rendering skinned character models. - - - - - Gets or sets the world matrix. - - - - - Gets or sets the view matrix. - - - - - Gets or sets the projection matrix. - - - - - Gets or sets the material diffuse color (range 0 to 1). - - - - - Gets or sets the material emissive color (range 0 to 1). - - - - - Gets or sets the material specular color (range 0 to 1). - - - - - Gets or sets the material specular power. - - - - - Gets or sets the material alpha. - - - - - Gets or sets the per-pixel lighting prefer flag. - - - - - Gets or sets the ambient light color (range 0 to 1). - - - - - Gets the first directional light. - - - - - Gets the second directional light. - - - - - Gets the third directional light. - - - - - Gets or sets the fog enable flag. - - - - - Gets or sets the fog start distance. - - - - - Gets or sets the fog end distance. - - - - - Gets or sets the fog color. - - - - - Gets or sets the current texture. - - - - - Gets or sets the number of skinning weights to evaluate for each vertex (1, 2, or 4). - - - - - Sets an array of skinning bone transform matrices. - - - - - Gets a copy of the current skinning bone transform matrices. - - - - - This effect requires lighting, so we explicitly implement - IEffectLights.LightingEnabled, and do not allow turning it off. - - - - - Creates a new SkinnedEffect with default parameter settings. - - - - - Creates a new SkinnedEffect by cloning parameter settings from an existing instance. - - - - - Creates a clone of the current SkinnedEffect instance. - - - - - Sets up the standard key/fill/back lighting rig. - - - - - Looks up shortcut references to our effect parameters. - - - - - Lazily computes derived parameter values immediately before applying the effect. - - - - - The default effect used by SpriteBatch. - - - - - Creates a new SpriteEffect. - - - - - An optional matrix used to transform the sprite geometry. Uses if null. - - - - - Creates a new SpriteEffect by cloning parameter settings from an existing instance. - - - - - Creates a clone of the current SpriteEffect instance. - - - - - Looks up shortcut references to our effect parameters. - - - - - Lazily computes derived parameter values immediately before applying the effect. - - - - - Defines the driver type for graphics adapter. Usable only on DirectX platforms for now. - - - - - Hardware device been used for rendering. Maximum speed and performance. - - - - - Emulates the hardware device on CPU. Slowly, only for testing. - - - - - Useful when acceleration does not work. - - - - - Used to request creation of the reference graphics device, - or the default hardware accelerated device (when set to false). - - - This only works on DirectX platforms where a reference graphics - device is available and must be defined before the graphics device - is created. It defaults to false. - - - - - Used to request creation of a specific kind of driver. - - - These values only work on DirectX platforms and must be defined before the graphics device - is created. by default. - - - - - Used to request the graphics device should be created with debugging - features enabled. - - - - - Returns true if the is widescreen. - - - Common widescreen modes include 16:9, 16:10 and 2:1. - - - - - Queries for support of the requested render target format on the adaptor. - - The graphics profile. - The requested surface format. - The requested depth stencil format. - The requested multisample count. - Set to the best format supported by the adaptor for the requested surface format. - Set to the best format supported by the adaptor for the requested depth stencil format. - Set to the best count supported by the adaptor for the requested multisample count. - True if the requested format is supported by the adaptor. False if one or more of the values was changed. - - - - Provides information about the capabilities of the - current graphics device. A very useful thread for investigating GL extenion names - http://stackoverflow.com/questions/3881197/opengl-es-2-0-extensions-on-android-devices - - - - - Whether the device fully supports non power-of-two textures, including - mip maps and wrap modes other than CLAMP_TO_EDGE - - - - - Whether the device supports anisotropic texture filtering - - - - - Gets the support for DXT1 - - - - - Gets the support for S3TC (DXT1, DXT3, DXT5) - - - - - Gets the support for PVRTC - - - - - Gets the support for ETC1 - - - - - Gets the support for ETC2 - - - - - Gets the support for ATITC - - - - - True, if sRGB is supported. On Direct3D platforms, this is always true. - On OpenGL platforms, it is true if both framebuffer sRGB - and texture sRGB are supported. - - - - - True, if the underlying platform supports floating point textures. - For Direct3D platforms this is always true. - For OpenGL Desktop platforms it is always true. - For OpenGL Mobile platforms it requires `GL_EXT_color_buffer_float`. - If the requested format is not supported an NotSupportedException - will be thrown. - - - - - True, if the underlying platform supports half floating point textures. - For Direct3D platforms this is always true. - For OpenGL Desktop platforms it is always true. - For OpenGL Mobile platforms it requires `GL_EXT_color_buffer_half_float`. - If the requested format is not supported an NotSupportedException - will be thrown. - - - - - Gets the max texture anisotropy. This value typically lies - between 0 and 16, where 0 means anisotropic filtering is not - supported. - - - - - Attempt to dequeue a debugging message from the graphics subsystem. - - - When running on a graphics device with debugging enabled, this allows you to retrieve - subsystem-specific (e.g. DirectX, OpenGL, etc.) debugging messages including information - about improper usage of shaders and APIs. - - The graphics debugging message if retrieved, null otherwise. - True if a graphics debugging message was retrieved, false otherwise. - - - - Indicates if DX9 style pixel addressing or current standard - pixel addressing should be used. This flag is set to - false by default. If `UseHalfPixelOffset` is - `true` you have to add half-pixel offset to a Projection matrix. - See also . - - - XNA uses DirectX9 for its graphics. DirectX9 interprets UV - coordinates differently from other graphics API's. This is - typically referred to as the half-pixel offset. MonoGame - replicates XNA behavior if this flag is set to true. - - - - - Get or set the color a is cleared to when it is set. - - - - - The active vertex shader. - - - - - The active pixel shader. - - - - - The cache of effects from unique byte streams. - - - - - The rendering information for debugging and profiling. - The metrics are reset every frame after draw within . - - - - - Access debugging APIs for the graphics subsystem. - - - - - Initializes a new instance of the class. - - The graphics adapter. - The graphics profile. - The presentation options. - - is . - - - - - Initializes a new instance of the class. - - The graphics adapter. - The graphics profile. - Indicates if DX9 style pixel addressing or current standard pixel addressing should be used. This value is passed to - The presentation options. - - is . - - - - - The color used as blend factor when alpha blending. - - - When only changing BlendFactor, use this rather than to - only update BlendFactor so the whole BlendState does not have to be updated. - - - - - Trigger the DeviceResetting event - Currently internal to allow the various platforms to send the event at the appropriate time. - - - - - Trigger the DeviceReset event to allow games to be notified of a device reset. - Currently internal to allow the various platforms to send the event at the appropriate time. - - - - - Draw geometry by indexing into the vertex buffer. - - The type of primitives in the index buffer. - Used to offset the vertex range indexed from the vertex buffer. - This is unused and remains here only for XNA API compatibility. - This is unused and remains here only for XNA API compatibility. - The index within the index buffer to start drawing from. - The number of primitives to render from the index buffer. - Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored. - - - - Draw geometry by indexing into the vertex buffer. - - The type of primitives in the index buffer. - Used to offset the vertex range indexed from the vertex buffer. - The index within the index buffer to start drawing from. - The number of primitives to render from the index buffer. - - - - Draw primitives of the specified type from the data in an array of vertices without indexing. - - The type of the vertices. - The type of primitives to draw with the vertices. - An array of vertices to draw. - The index in the array of the first vertex that should be rendered. - The number of primitives to draw. - The will be found by getting - from an instance of and cached for subsequent calls. - - - - Draw primitives of the specified type from the data in the given array of vertices without indexing. - - The type of the vertices. - The type of primitives to draw with the vertices. - An array of vertices to draw. - The index in the array of the first vertex that should be rendered. - The number of primitives to draw. - The layout of the vertices. - - - - Draw primitives of the specified type from the currently bound vertexbuffers without indexing. - - The type of primitives to draw. - Index of the vertex to start at. - The number of primitives to draw. - - - - Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices. - - The type of the vertices. - The type of primitives to draw with the vertices. - An array of vertices to draw. - The index in the array of the first vertex to draw. - The index in the array of indices of the first index to use - The number of primitives to draw. - The number of vertices to draw. - The index data. - The will be found by getting - from an instance of and cached for subsequent calls. - All indices in the vertex buffer are interpreted relative to the specified . - For example a value of zero in the array of indices points to the vertex at index - in the array of vertices. - - - - Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices. - - The type of the vertices. - The type of primitives to draw with the vertices. - An array of vertices to draw. - The index in the array of the first vertex to draw. - The index in the array of indices of the first index to use - The number of primitives to draw. - The number of vertices to draw. - The index data. - The layout of the vertices. - All indices in the vertex buffer are interpreted relative to the specified . - For example a value of zero in the array of indices points to the vertex at index - in the array of vertices. - - - - Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices. - - The type of the vertices. - The type of primitives to draw with the vertices. - An array of vertices to draw. - The index in the array of the first vertex to draw. - The index in the array of indices of the first index to use - The number of primitives to draw. - The number of vertices to draw. - The index data. - The will be found by getting - from an instance of and cached for subsequent calls. - All indices in the vertex buffer are interpreted relative to the specified . - For example a value of zero in the array of indices points to the vertex at index - in the array of vertices. - - - - Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices. - - The type of the vertices. - The type of primitives to draw with the vertices. - An array of vertices to draw. - The index in the array of the first vertex to draw. - The index in the array of indices of the first index to use - The number of primitives to draw. - The number of vertices to draw. - The index data. - The layout of the vertices. - All indices in the vertex buffer are interpreted relative to the specified . - For example value of zero in the array of indices points to the vertex at index - in the array of vertices. - - - - Draw instanced geometry from the bound vertex buffers and index buffer. - - The type of primitives in the index buffer. - Used to offset the vertex range indexed from the vertex buffer. - This is unused and remains here only for XNA API compatibility. - This is unused and remains here only for XNA API compatibility. - The index within the index buffer to start drawing from. - The number of primitives in a single instance. - The number of instances to render. - Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored. - - - - Draw instanced geometry from the bound vertex buffers and index buffer. - - The type of primitives in the index buffer. - Used to offset the vertex range indexed from the vertex buffer. - The index within the index buffer to start drawing from. - The number of primitives in a single instance. - The number of instances to render. - Draw geometry with data from multiple bound vertex streams at different frequencies. - - - - Draw instanced geometry from the bound vertex buffers and index buffer. - - The type of primitives in the index buffer. - Used to offset the vertex range indexed from the vertex buffer. - The index within the index buffer to start drawing from. - The number of primitives in a single instance. - The number of instances to render. - Used to offset the instance range indexed from the instance buffer. - Draw geometry with data from multiple bound vertex streams at different frequencies. - - - - Gets the Pixel data of what is currently drawn on screen. - The format is whatever the current format of the backbuffer is. - - A byte[] of size (ViewPort.Width * ViewPort.Height * 4) - - - - Returns a handle to internal device object. Valid only on DirectX platforms. - For usage, convert this to SharpDX.Direct3D11.Device. - - - - - Create graphics device specific resources. - - - - - Get highest multisample quality level for specified format and multisample count. - Returns 0 if multisampling is not supported for input parameters. - - The texture format. - The number of samples during multisampling. - - Higher than zero if multiSampleCount is supported. - Zero if multiSampleCount is not supported. - - - - - Sends queued-up commands in the command buffer to the graphics processing unit (GPU). - - - - - Describes the status of the . - - - - - The device is normal. - - - - - The device has been lost. - - - - - The device has not been reset. - - - - - Defines a set of graphic capabilities. - - - - - Use a limited set of graphic features and capabilities, allowing the game to support the widest variety of devices. - - - - - Use the largest available set of graphic features and capabilities to target devices, that have more enhanced graphic capabilities. - - - - - Called before the device is reset. Allows graphics resources to - invalidate their state so they can be recreated after the device reset. - Warning: This may be called after a call to Dispose() up until - the resource is garbage collected. - - - - - The method that derived classes should override to implement disposing of managed and native resources. - - True if managed objects should be disposed. - Native resources should always be released regardless of the value of the disposing parameter. - - - - Represents a render target. - - - - - Gets the width of the render target in pixels - - The width of the render target in pixels. - - - - Gets the height of the render target in pixels - - The height of the render target in pixels. - - - - Gets the usage mode of the render target. - - The usage mode of the render target. - - - - Gets the for the specified array slice. - - The array slice. - The . - - For texture cubes: The array slice is the index of the cube map face. - - - - - Gets the . - - The . Can be . - - - - Represents a set of bones associated with a model. - - - - - Retrieves a ModelBone from the collection, given the name of the bone. - - The name of the bone to retrieve. - - - - Finds a bone with a given name if it exists in the collection. - - The name of the bone to find. - The bone named boneName, if found. - true if the bone was found - - - - Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection. - - - - - - Provides the ability to iterate through the bones in an ModelMeshCollection. - - - - - Gets the current element in the ModelMeshCollection. - - - - - Advances the enumerator to the next element of the ModelMeshCollection. - - - - - Immediately releases the unmanaged resources used by this object. - - - - - Transform of this node from the root of the model not from the parent - - - - - A basic 3D model with per mesh parent bones. - - - - - A collection of objects which describe how each mesh in the - mesh collection for this model relates to its parent mesh. - - - - - A collection of objects which compose the model. Each - in a model may be moved independently and may be composed of multiple materials - identified as objects. - - - - - Root bone for this model. - - - - - Custom attached object. - - Skinning data is example of attached object for model. - - - - - - Constructs a model. - - A valid reference to . - The collection of bones. - The collection of meshes. - - is null. - - - is null. - - - is null. - - - - - Draws the model meshes. - - The world transform. - The view transform. - The projection transform. - - - - Copies bone transforms relative to all parent bones of the each bone from this model to a given array. - - The array receiving the transformed bones. - - - - Copies bone transforms relative to bone from a given array to this model. - - The array of prepared bone transform data. - - is null. - - - is invalid. - - - - - Copies bone transforms relative to bone from this model to a given array. - - The array receiving the transformed bones. - - is null. - - - is invalid. - - - - - Represents a collection of ModelMesh objects. - - - - - Retrieves a ModelMesh from the collection, given the name of the mesh. - - The name of the mesh to retrieve. - - - - Finds a mesh with a given name if it exists in the collection. - - The name of the mesh to find. - The mesh named meshName, if found. - true if a mesh was found - - - - Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection. - - - - - - Provides the ability to iterate through the bones in an ModelMeshCollection. - - - - - Gets the current element in the ModelMeshCollection. - - - - - Advances the enumerator to the next element of the ModelMeshCollection. - - - - - Immediately releases the unmanaged resources used by this object. - - - - - Gets a value indicating whether the occlusion query has completed. - - - if the occlusion query has completed; otherwise, - . - - - - - Gets the number of visible pixels. - - The number of visible pixels. - - The occlusion query has not yet completed. Check before reading - the result! - - - - - Initializes a new instance of the class. - - The graphics device. - - is . - - - The current graphics profile does not support occlusion queries. - - - - - Begins the occlusion query. - - - is called again before calling . - - - - - Ends the occlusion query. - - - is called before calling . - - - - - Packed vector type containing a single 8 bit normalized W values that is ranging from 0 to 1. - - - - - Gets and sets the packed value. - - - - - Creates a new instance of Alpha8. - - The alpha component - - - - Gets the packed vector in float format. - - The packed vector in Vector3 format - - - - Sets the packed vector from a Vector4. - - Vector containing the components. - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Compares an object with the packed vector. - - The object to compare. - True if the object is equal to the packed vector. - - - - Compares another Alpha8 packed vector with the packed vector. - - The Alpha8 packed vector to compare. - True if the packed vectors are equal. - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - Gets a hash code of the packed vector. - - The hash code for the packed vector. - - - - Packed vector type containing unsigned normalized values ranging from 0 to 1. The x and z components use 5 bits, and the y component uses 6 bits. - - - - - Creates a new instance of Bgr565. - - The x component - The y component - The z component - - - - Creates a new instance of Bgr565. - - Vector containing the components for the packed vector. - - - - Gets and sets the packed value. - - - - - Gets the packed vector in Vector3 format. - - The packed vector in Vector3 format - - - - Sets the packed vector from a Vector4. - - Vector containing the components. - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Compares an object with the packed vector. - - The object to compare. - true if the object is equal to the packed vector. - - - - Compares another Bgr565 packed vector with the packed vector. - - The Bgr565 packed vector to compare. - true if the packed vectors are equal. - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - Gets a hash code of the packed vector. - - The hash code for the packed vector. - - - - Packed vector type containing unsigned normalized values, ranging from 0 to 1, using 4 bits each for x, y, z, and w. - - - - - Creates a new instance of Bgra4444. - - The x component - The y component - The z component - The w component - - - - Creates a new instance of Bgra4444. - - Vector containing the components for the packed vector. - - - - Gets and sets the packed value. - - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Sets the packed vector from a Vector4. - - Vector containing the components. - - - - Compares an object with the packed vector. - - The object to compare. - true if the object is equal to the packed vector. - - - - Compares another Bgra4444 packed vector with the packed vector. - - The Bgra4444 packed vector to compare. - true if the packed vectors are equal. - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - Gets a hash code of the packed vector. - - The hash code for the packed vector. - - - - Packed vector type containing unsigned normalized values ranging from 0 to 1. - The x , y and z components use 5 bits, and the w component uses 1 bit. - - - - - Gets and sets the packed value. - - - - - Creates a new instance of Bgra5551. - - The x component - The y component - The z component - The w component - - - - Creates a new instance of Bgra5551. - - - Vector containing the components for the packed vector. - - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Sets the packed vector from a Vector4. - - Vector containing the components. - - - - Compares an object with the packed vector. - - The object to compare. - True if the object is equal to the packed vector. - - - - Compares another Bgra5551 packed vector with the packed vector. - - The Bgra5551 packed vector to compare. - True if the packed vectors are equal. - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - Gets a hash code of the packed vector. - - The hash code for the packed vector. - - - - Packed vector type containing four 8-bit unsigned integer values, ranging from 0 to 255. - - - - - Initializes a new instance of the Byte4 class. - - A vector containing the initial values for the components of the Byte4 structure. - - - - Initializes a new instance of the Byte4 class. - - Initial value for the x component. - Initial value for the y component. - Initial value for the z component. - Initial value for the w component. - - - - Compares the current instance of a class to another instance to determine whether they are different. - - The object to the left of the equality operator. - The object to the right of the equality operator. - true if the objects are different; false otherwise. - - - - Compares the current instance of a class to another instance to determine whether they are the same. - - The object to the left of the equality operator. - The object to the right of the equality operator. - true if the objects are the same; false otherwise. - - - - Directly gets or sets the packed representation of the value. - - The packed representation of the value. - - - - Returns a value that indicates whether the current instance is equal to a specified object. - - The object with which to make the comparison. - true if the current instance is equal to the specified object; false otherwise. - - - - Returns a value that indicates whether the current instance is equal to a specified object. - - The object with which to make the comparison. - true if the current instance is equal to the specified object; false otherwise. - - - - Gets the hash code for the current instance. - - Hash code for the instance. - - - - Returns a string representation of the current instance. - - String that represents the object. - - - - Packs a vector into a uint. - - The vector containing the values to pack. - The ulong containing the packed values. - - - - Sets the packed representation from a Vector4. - - The vector to create the packed representation from. - - - - Expands the packed representation into a Vector4. - - The expanded vector. - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Packed vector type containing four 16-bit floating-point values. - - - - - Initializes a new instance of the HalfVector4 structure. - - Initial value for the x component. - Initial value for the y component. - Initial value for the z component. - Initial value for the q component. - - - - Initializes a new instance of the HalfVector4 structure. - - A vector containing the initial values for the components of the HalfVector4 structure. - - - - Sets the packed representation from a Vector4. - - The vector to create the packed representation from. - - - - Packs a vector into a ulong. - - The vector containing the values to pack. - The ulong containing the packed values. - - - - Expands the packed representation into a Vector4. - - The expanded vector. - - - - Directly gets or sets the packed representation of the value. - - The packed representation of the value. - - - - Returns a string representation of the current instance. - - String that represents the object. - - - - Gets the hash code for the current instance. - - Hash code for the instance. - - - - Returns a value that indicates whether the current instance is equal to a specified object. - - The object with which to make the comparison. - true if the current instance is equal to the specified object; false otherwise. - - - - Returns a value that indicates whether the current instance is equal to a specified object. - - The object with which to make the comparison. - true if the current instance is equal to the specified object; false otherwise. - - - - Compares the current instance of a class to another instance to determine whether they are the same. - - The object to the left of the equality operator. - The object to the right of the equality operator. - true if the objects are the same; false otherwise. - - - - Compares the current instance of a class to another instance to determine whether they are different. - - The object to the left of the equality operator. - The object to the right of the equality operator. - true if the objects are different; false otherwise. - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Packed vector type containing two 16-bit unsigned normalized values ranging from 0 to 1. - - - - - Gets and sets the packed value. - - - - - Creates a new instance of Rg32. - - The x component - The y component - - - - Creates a new instance of Rg32. - - - Vector containing the components for the packed vector. - - - - - Gets the packed vector in Vector2 format. - - The packed vector in Vector2 format - - - - Sets the packed vector from a Vector4. - - Vector containing the components. - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Compares an object with the packed vector. - - The object to compare. - True if the object is equal to the packed vector. - - - - Compares another Rg32 packed vector with the packed vector. - - The Rg32 packed vector to compare. - True if the packed vectors are equal. - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - Gets a hash code of the packed vector. - - The hash code for the packed vector. - - - - Packed vector type containing four 16-bit unsigned normalized values ranging from 0 to 1. - - - - - Gets and sets the packed value. - - - - - Creates a new instance of Rgba64. - - The x component - The y component - The z component - The w component - - - - Creates a new instance of Rgba64. - - - Vector containing the components for the packed vector. - - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Sets the packed vector from a Vector4. - - Vector containing the components. - - - - Compares an object with the packed vector. - - The object to compare. - True if the object is equal to the packed vector. - - - - Compares another Rgba64 packed vector with the packed vector. - - The Rgba64 packed vector to compare. - True if the packed vectors are equal. - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - Gets a hash code of the packed vector. - - The hash code for the packed vector. - - - - Packed vector type containing unsigned normalized values ranging from 0 to 1. - The x, y and z components use 10 bits, and the w component uses 2 bits. - - - - - Gets and sets the packed value. - - - - - Creates a new instance of Rgba1010102. - - The x component - The y component - The z component - The w component - - - - Creates a new instance of Rgba1010102. - - - Vector containing the components for the packed vector. - - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Sets the packed vector from a Vector4. - - Vector containing the components. - - - - Compares an object with the packed vector. - - The object to compare. - True if the object is equal to the packed vector. - - - - Compares another Rgba1010102 packed vector with the packed vector. - - The Rgba1010102 packed vector to compare. - True if the packed vectors are equal. - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - Gets a hash code of the packed vector. - - The hash code for the packed vector. - - - - Gets the packed vector in Vector4 format. - - The packed vector in Vector4 format - - - - Packed vector type containing four 16-bit signed integer values. - - - - - Initializes a new instance of the Short4 class. - - A vector containing the initial values for the components of the Short4 structure. - - - - Initializes a new instance of the Short4 class. - - Initial value for the x component. - Initial value for the y component. - Initial value for the z component. - Initial value for the w component. - - - - Compares the current instance of a class to another instance to determine whether they are different. - - The object to the left of the equality operator. - The object to the right of the equality operator. - true if the objects are different; false otherwise. - - - - Compares the current instance of a class to another instance to determine whether they are the same. - - The object to the left of the equality operator. - The object to the right of the equality operator. - true if the objects are the same; false otherwise. - - - - Directly gets or sets the packed representation of the value. - - The packed representation of the value. - - - - Returns a value that indicates whether the current instance is equal to a specified object. - - The object with which to make the comparison. - true if the current instance is equal to the specified object; false otherwise. - - - - Returns a value that indicates whether the current instance is equal to a specified object. - - The object with which to make the comparison. - true if the current instance is equal to the specified object; false otherwise. - - - - Gets the hash code for the current instance. - - Hash code for the instance. - - - - Returns a string representation of the current instance. - - String that represents the object. - - - - Packs a vector into a ulong. - - The vector containing the values to pack. - The ulong containing the packed values. - - - - Sets the packed representation from a Vector4. - - The vector to create the packed representation from. - - - - Expands the packed representation into a Vector4. - - The expanded vector. - - - - Create a instance with default values for all properties. - - - - - Get or set the format of the back buffer. - - - - - Get or set the height of the back buffer. - - - - - Get or set the width of the back buffer. - - - - - Get the bounds of the back buffer. - - - - - Get or set the handle of the window that will present the back buffer. - - - - - Get or set the depth stencil format for the back buffer. - - - - - Get or set a value indicating if we are in full screen mode. - - - - - If true the will do a mode switch - when going to full screen mode. If false it will instead do a - soft full screen by maximizing the window and making it borderless. - - - - - Get or set the multisample count for the back buffer. - - - - - Get or set the presentation interval. - - - - - Get or set the display orientation. - - - - - Get or set the RenderTargetUsage for the back buffer. - Determines if the back buffer is cleared when it is set as the - render target by the . - target. - - - - - Reset all properties to their default values. - - - - - Create a copy of this instance. - - - - - - Defines how updates the game window. - - - - - Equivalent to . - - - - - The driver waits for the vertical retrace period, before updating window client area. Present operations are not affected more frequently than the screen refresh rate. - - - - - The driver waits for the vertical retrace period, before updating window client area. Present operations are not affected more frequently than every second screen refresh. - - - - - The driver updates the window client area immediately. Present operations might be affected immediately. There is no limit for framerate. - - - - - Allows child class to specify the surface type, eg: a swap chain. - - - - - Represents a texture cube that can be used as a render target. - - - - - Gets the depth-stencil buffer format of this render target. - - The format of the depth-stencil buffer. - - - - Gets the number of multisample locations. - - The number of multisample locations. - - - - Gets the usage mode of this render target. - - The usage mode of the render target. - - - - - - - - - - Initializes a new instance of the class. - - The graphics device. - The width and height of a texture cube face in pixels. - to generate a full mipmap chain; otherwise . - The preferred format of the surface. - The preferred format of the depth-stencil buffer. - - - - Initializes a new instance of the class. - - The graphics device. - The width and height of a texture cube face in pixels. - to generate a full mipmap chain; otherwise . - The preferred format of the surface. - The preferred format of the depth-stencil buffer. - The preferred number of multisample locations. - The usage mode of the render target. - - - - - - - - - - Defines if the previous content in a render target is preserved when it set on the graphics device. - - - - - The render target content will not be preserved. - - - - - The render target content will be preserved even if it is slow or requires extra memory. - - - - - The render target content might be preserved if the platform can do so without a penalty in performance or memory usage. - - - - - The newly created resource object. - - - - - The name of the destroyed resource. - - - - - The resource manager tag of the destroyed resource. - - - - - Mark all the sampler slots as dirty. - - - - - Defines how vertex or index buffer data will be flushed during a SetData operation. - - - - - The SetData can overwrite the portions of existing data. - - - - - The SetData will discard the entire buffer. A pointer to a new memory area is returned and rendering from the previous area do not stall. - - - - - The SetData operation will not overwrite existing data. This allows the driver to return immediately from a SetData operation and continue rendering. - - - - - Returns the platform specific shader profile identifier. - - - - - A hash value which can be used to compare shaders. - - - - - Helper class for drawing text strings and sprites in one or more optimized batches. - - - - - Constructs a . - - The , which will be used for sprite rendering. - Thrown when is null. - - - - Constructs a . - - The , which will be used for sprite rendering. - The initial capacity of the internal array holding batch items (the value will be rounded to the next multiple of 64). - Thrown when is null. - - - - Begins a new sprite and text batch with the specified render state. - - The drawing order for sprite and text drawing. by default. - State of the blending. Uses if null. - State of the sampler. Uses if null. - State of the depth-stencil buffer. Uses if null. - State of the rasterization. Uses if null. - A custom to override the default sprite effect. Uses default sprite effect if null. - An optional matrix used to transform the sprite geometry. Uses if null. - Thrown if is called next time without previous . - This method uses optional parameters. - The Begin should be called before drawing commands, and you cannot call it again before subsequent . - - - - Flushes all batched text and sprites to the screen. - - This command should be called after and drawing commands. - - - - Submit a sprite for drawing in the current batch. - - A texture. - The drawing location on screen. - An optional region on the texture which will be rendered. If null - draws full texture. - A color mask. - A rotation of this sprite. - Center of the rotation. 0,0 by default. - A scaling of this sprite. - Modificators for drawing. Can be combined. - A depth of the layer of this sprite. - - - - Submit a sprite for drawing in the current batch. - - A texture. - The drawing location on screen. - An optional region on the texture which will be rendered. If null - draws full texture. - A color mask. - A rotation of this sprite. - Center of the rotation. 0,0 by default. - A scaling of this sprite. - Modificators for drawing. Can be combined. - A depth of the layer of this sprite. - - - - Submit a sprite for drawing in the current batch. - - A texture. - The drawing bounds on screen. - An optional region on the texture which will be rendered. If null - draws full texture. - A color mask. - A rotation of this sprite. - Center of the rotation. 0,0 by default. - Modificators for drawing. Can be combined. - A depth of the layer of this sprite. - - - - Submit a sprite for drawing in the current batch. - - A texture. - The drawing location on screen. - An optional region on the texture which will be rendered. If null - draws full texture. - A color mask. - - - - Submit a sprite for drawing in the current batch. - - A texture. - The drawing bounds on screen. - An optional region on the texture which will be rendered. If null - draws full texture. - A color mask. - - - - Submit a sprite for drawing in the current batch. - - A texture. - The drawing location on screen. - A color mask. - - - - Submit a sprite for drawing in the current batch. - - A texture. - The drawing bounds on screen. - A color mask. - - - - Submit a text string of sprites for drawing in the current batch. - - A font. - The text which will be drawn. - The drawing location on screen. - A color mask. - - - - Submit a text string of sprites for drawing in the current batch. - - A font. - The text which will be drawn. - The drawing location on screen. - A color mask. - A rotation of this string. - Center of the rotation. 0,0 by default. - A scaling of this string. - Modificators for drawing. Can be combined. - A depth of the layer of this string. - - - - Submit a text string of sprites for drawing in the current batch. - - A font. - The text which will be drawn. - The drawing location on screen. - A color mask. - A rotation of this string. - Center of the rotation. 0,0 by default. - A scaling of this string. - Modificators for drawing. Can be combined. - A depth of the layer of this string. - - - - Submit a text string of sprites for drawing in the current batch. - - A font. - The text which will be drawn. - The drawing location on screen. - A color mask. - - - - Submit a text string of sprites for drawing in the current batch. - - A font. - The text which will be drawn. - The drawing location on screen. - A color mask. - A rotation of this string. - Center of the rotation. 0,0 by default. - A scaling of this string. - Modificators for drawing. Can be combined. - A depth of the layer of this string. - - - - Submit a text string of sprites for drawing in the current batch. - - A font. - The text which will be drawn. - The drawing location on screen. - A color mask. - A rotation of this string. - Center of the rotation. 0,0 by default. - A scaling of this string. - Modificators for drawing. Can be combined. - A depth of the layer of this string. - - - - Immediately releases the unmanaged resources used by this object. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - This class handles the queueing of batch items into the GPU by creating the triangle tesselations - that are used to draw the sprite textures. This class supports int.MaxValue number of sprites to be - batched and will process them into short.MaxValue groups (strided by 6 for the number of vertices - sent to the GPU). - - - - - Initialization size for the batch item list and queue. - - - - - The maximum number of batch items that can be processed per iteration - - - - - Initialization size for the vertex array, in batch units. - - - - - The list of batch items to process. - - - - - Index pointer to the next available SpriteBatchItem in _batchItemList. - - - - - The target graphics device. - - - - - Vertex index array. The values in this array never change. - - - - - Reuse a previously allocated SpriteBatchItem from the item pool. - if there is none available grow the pool and initialize new items. - - - - - - Resize and recreate the missing indices for the index and vertex position color buffers. - - - - - - Sorts the batch items and then groups batch drawing into maximal allowed batch sets that do not - overflow the 16 bit array indices for vertices. - - The type of depth sorting desired for the rendering. - The custom effect to apply to the drawn geometry - - - - Sends the triangle list to the graphics device. Here is where the actual drawing starts. - - Start index of vertices to draw. Not used except to compute the count of vertices to draw. - End index of vertices to draw. Not used except to compute the count of vertices to draw. - The custom effect to apply to the geometry - The texture to draw. - - - - Defines sprite visual options for mirroring. - - - - - No options specified. - - - - - Render the sprite reversed along the X axis. - - - - - Render the sprite reversed along the Y axis. - - - - - All the glyphs in this SpriteFont. - - - - - Initializes a new instance of the class. - - The font texture. - The rectangles in the font texture containing letters. - The cropping rectangles, which are applied to the corresponding glyphBounds to calculate the bounds of the actual character. - The characters. - The line spacing (the distance from baseline to baseline) of the font. - The spacing (tracking) between characters in the font. - The letters kernings(X - left side bearing, Y - width and Z - right side bearing). - The character that will be substituted when a given character is not included in the font. - - - - Gets the texture that this SpriteFont draws from. - - Can be used to implement custom rendering of a SpriteFont - - - - Returns a copy of the dictionary containing the glyphs in this SpriteFont. - - A new Dictionary containing all of the glyphs inthis SpriteFont - Can be used to calculate character bounds when implementing custom SpriteFont rendering. - - - - Gets a collection of the characters in the font. - - - - - Gets or sets the character that will be substituted when a - given character is not included in the font. - - - - - Gets or sets the line spacing (the distance from baseline - to baseline) of the font. - - - - - Gets or sets the spacing (tracking) between characters in - the font. - - - - - Returns the size of a string when rendered in this font. - - The text to measure. - The size, in pixels, of 'text' when rendered in - this font. - - - - Returns the size of the contents of a StringBuilder when - rendered in this font. - - The text to measure. - The size, in pixels, of 'text' when rendered in - this font. - - - - Struct that defines the spacing, Kerning, and bounds of a character. - - Provides the data necessary to implement custom SpriteFont rendering. - - - - The char associated with this glyph. - - - - - Rectangle in the font texture where this letter exists. - - - - - Cropping applied to the BoundsInTexture to calculate the bounds of the actual character. - - - - - The amount of space between the left side ofthe character and its first pixel in the X dimention. - - - - - The amount of space between the right side of the character and its last pixel in the X dimention. - - - - - Width of the character before kerning is applied. - - - - - Width of the character before kerning is applied. - - - - - Defines sprite sort rendering options. - - - - - All sprites are drawing when invokes, in order of draw call sequence. Depth is ignored. - - - - - Each sprite is drawing at individual draw call, instead of . Depth is ignored. - - - - - Same as , except sprites are sorted by texture prior to drawing. Depth is ignored. - - - - - Same as , except sprites are sorted by depth in back-to-front order prior to drawing. - - - - - Same as , except sprites are sorted by depth in front-to-back order prior to drawing. - - - - - Defines a blend mode. - - - - - Each component of the color is multiplied by {1, 1, 1, 1}. - - - - - Each component of the color is multiplied by {0, 0, 0, 0}. - - - - - Each component of the color is multiplied by the source color. - {Rs, Gs, Bs, As}, where Rs, Gs, Bs, As are color source values. - - - - - Each component of the color is multiplied by the inverse of the source color. - {1 − Rs, 1 − Gs, 1 − Bs, 1 − As}, where Rs, Gs, Bs, As are color source values. - - - - - Each component of the color is multiplied by the alpha value of the source. - {As, As, As, As}, where As is the source alpha value. - - - - - Each component of the color is multiplied by the inverse of the alpha value of the source. - {1 − As, 1 − As, 1 − As, 1 − As}, where As is the source alpha value. - - - - - Each component color is multiplied by the destination color. - {Rd, Gd, Bd, Ad}, where Rd, Gd, Bd, Ad are color destination values. - - - - - Each component of the color is multiplied by the inversed destination color. - {1 − Rd, 1 − Gd, 1 − Bd, 1 − Ad}, where Rd, Gd, Bd, Ad are color destination values. - - - - - Each component of the color is multiplied by the alpha value of the destination. - {Ad, Ad, Ad, Ad}, where Ad is the destination alpha value. - - - - - Each component of the color is multiplied by the inversed alpha value of the destination. - {1 − Ad, 1 − Ad, 1 − Ad, 1 − Ad}, where Ad is the destination alpha value. - - - - - Each component of the color is multiplied by a constant in the . - - - - - Each component of the color is multiplied by a inversed constant in the . - - - - - Each component of the color is multiplied by either the alpha of the source color, or the inverse of the alpha of the source color, whichever is greater. - {f, f, f, 1}, where f = min(As, 1 − As), where As is the source alpha value. - - - - - Defines a function for color blending. - - - - - The function will adds destination to the source. (srcColor * srcBlend) + (destColor * destBlend) - - - - - The function will subtracts destination from source. (srcColor * srcBlend) − (destColor * destBlend) - - - - - The function will subtracts source from destination. (destColor * destBlend) - (srcColor * srcBlend) - - - - - The function will extracts minimum of the source and destination. min((srcColor * srcBlend),(destColor * destBlend)) - - - - - The function will extracts maximum of the source and destination. max((srcColor * srcBlend),(destColor * destBlend)) - - - - - Returns the target specific blend state. - - The 0 to 3 target blend state index. - A target blend state. - - - - The color used as blend factor when alpha blending. - - - is set to this value when this - is bound to a GraphicsDevice. - - - - - Enables use of the per-target blend states. - - - - - The comparison function used for depth, stencil, and alpha tests. - - - - - Always passes the test. - - - - - Never passes the test. - - - - - Passes the test when the new pixel value is less than current pixel value. - - - - - Passes the test when the new pixel value is less than or equal to current pixel value. - - - - - Passes the test when the new pixel value is equal to current pixel value. - - - - - Passes the test when the new pixel value is greater than or equal to current pixel value. - - - - - Passes the test when the new pixel value is greater than current pixel value. - - - - - Passes the test when the new pixel value does not equal to current pixel value. - - - - - Defines a culling mode for faces in rasterization process. - - - - - Do not cull faces. - - - - - Cull faces with clockwise order. - - - - - Cull faces with counter clockwise order. - - - - - Defines formats for depth-stencil buffer. - - - - - Depth-stencil buffer will not be created. - - - - - 16-bit depth buffer. - - - - - 24-bit depth buffer. Equivalent of for DirectX platforms. - - - - - 32-bit depth-stencil buffer. Where 24-bit depth and 8-bit for stencil used. - - - - - Defines options for filling the primitive. - - - - - Draw solid faces for each primitive. - - - - - Draw lines for each primitive. - - - - - When using comparison sampling, also set to . - - - - - Defines stencil buffer operations. - - - - - Does not update the stencil buffer entry. - - - - - Sets the stencil buffer entry to 0. - - - - - Replaces the stencil buffer entry with a reference value. - - - - - Increments the stencil buffer entry, wrapping to 0 if the new value exceeds the maximum value. - - - - - Decrements the stencil buffer entry, wrapping to the maximum value if the new value is less than 0. - - - - - Increments the stencil buffer entry, clamping to the maximum value. - - - - - Decrements the stencil buffer entry, clamping to 0. - - - - - Inverts the bits in the stencil buffer entry. - - - - - Defines modes for addressing texels using texture coordinates that are outside of the range of 0.0 to 1.0. - - - - - Texels outside range will form the tile at every integer junction. - - - - - Texels outside range will be set to color of 0.0 or 1.0 texel. - - - - - Same as but tiles will also flipped at every integer junction. - - - - - Texels outside range will be set to the border color. - - - - - Defines filtering types for texture sampler. - - - - - Use linear filtering. - - - - - Use point filtering. - - - - - Use anisotropic filtering. - - - - - Use linear filtering to shrink or expand, and point filtering between mipmap levels (mip). - - - - - Use point filtering to shrink (minify) or expand (magnify), and linear filtering between mipmap levels. - - - - - Use linear filtering to shrink, point filtering to expand, and linear filtering between mipmap levels. - - - - - Use linear filtering to shrink, point filtering to expand, and point filtering between mipmap levels. - - - - - Use point filtering to shrink, linear filtering to expand, and linear filtering between mipmap levels. - - - - - Use point filtering to shrink, linear filtering to expand, and point filtering between mipmap levels. - - - - - Filtering modes for texture samplers. - - - - - Defines types of surface formats. - - - - - Unsigned 32-bit ARGB pixel format for store 8 bits per channel. - - - - - Unsigned 16-bit BGR pixel format for store 5 bits for blue, 6 bits for green, and 5 bits for red. - - - - - Unsigned 16-bit BGRA pixel format where 5 bits reserved for each color and last bit is reserved for alpha. - - - - - Unsigned 16-bit BGRA pixel format for store 4 bits per channel. - - - - - DXT1. Texture format with compression. Surface dimensions must be a multiple 4. - - - - - DXT3. Texture format with compression. Surface dimensions must be a multiple 4. - - - - - DXT5. Texture format with compression. Surface dimensions must be a multiple 4. - - - - - Signed 16-bit bump-map format for store 8 bits for u and v data. - - - - - Signed 32-bit bump-map format for store 8 bits per channel. - - - - - Unsigned 32-bit RGBA pixel format for store 10 bits for each color and 2 bits for alpha. - - - - - Unsigned 32-bit RG pixel format using 16 bits per channel. - - - - - Unsigned 64-bit RGBA pixel format using 16 bits per channel. - - - - - Unsigned A 8-bit format for store 8 bits to alpha channel. - - - - - IEEE 32-bit R float format for store 32 bits to red channel. - - - - - IEEE 64-bit RG float format for store 32 bits per channel. - - - - - IEEE 128-bit RGBA float format for store 32 bits per channel. - - - - - Float 16-bit R format for store 16 bits to red channel. - - - - - Float 32-bit RG format for store 16 bits per channel. - - - - - Float 64-bit ARGB format for store 16 bits per channel. - - - - - Float pixel format for high dynamic range data. - - - - - For compatibility with WPF D3DImage. - - - - - For compatibility with WPF D3DImage. - - - - - Unsigned 32-bit RGBA sRGB pixel format that supports 8 bits per channel. - - - - - Unsigned 32-bit sRGB pixel format that supports 8 bits per channel. 8 bits are unused. - - - - - Unsigned 32-bit sRGB pixel format that supports 8 bits per channel. - - - - - DXT1. sRGB texture format with compression. Surface dimensions must be a multiple of 4. - - - - - DXT3. sRGB texture format with compression. Surface dimensions must be a multiple of 4. - - - - - DXT5. sRGB texture format with compression. Surface dimensions must be a multiple of 4. - - - - - PowerVR texture compression format (iOS and Android). - - - - - PowerVR texture compression format (iOS and Android). - - - - - PowerVR texture compression format (iOS and Android). - - - - - PowerVR texture compression format (iOS and Android). - - - - - Ericcson Texture Compression (Android) - - - - - DXT1 version where 1-bit alpha is used. - - - - - ATC/ATITC compression (Android) - - - - - ATC/ATITC compression (Android) - - - - - Etc2 RGB8 (Android/iOS withh OpenglES 3.0) - - - - - Etc2 SRGB8 (Android/iOS withh OpenglES 3.0) - - - - - Etc2 RGB8A1 (Android/iOS withh OpenglES 3.0) - - - - - Etc2 SRGB8A1 (Android/iOS withh OpenglES 3.0) - - - - - Etc2 RGBA8 EAC (Android/iOS withh OpenglES 3.0) - - - - - Etc2 SRGB8A8 EAC (Android/iOS withh OpenglES 3.0) - - - - - A swap chain used for rendering to a secondary GameWindow. - - - This is an extension and not part of stock XNA. - It is currently implemented for Windows and DirectX only. - - - - - Displays the contents of the active back buffer to the screen. - - - - - Gets the dimensions of the texture - - - - - Creates a new texture of the given size - - - - - - - - Creates a new texture of a given size with a surface format and optional mipmaps - - - - - - - - - - Creates a new texture array of a given size with a surface format and optional mipmaps. - Throws ArgumentException if the current GraphicsDevice can't work with texture arrays - - - - - - - - - - - Creates a new texture of a given size with a surface format and optional mipmaps. - - - - - - - - - - - Gets the width of the texture in pixels. - - - - - Gets the height of the texture in pixels. - - - - - Changes the pixels of the texture - Throws ArgumentNullException if data is null - Throws ArgumentException if arraySlice is greater than 0, and the GraphicsDevice does not support texture arrays - - - Layer of the texture to modify - Index inside the texture array - Area to modify - New data for the texture - Start position of data - - - - - Changes the pixels of the texture - - - Layer of the texture to modify - Area to modify - New data for the texture - Start position of data - - - - - Changes the texture's pixels - - - New data for the texture - Start position of data - - - - - Changes the texture's pixels - - New data for the texture - - - - - Retrieves the contents of the texture - Throws ArgumentException if data is null, data.length is too short or - if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays - - - Layer of the texture - Index inside the texture array - Area of the texture to retrieve - Destination array for the data - Starting index of data where to write the pixel data - Number of pixels to read - - - - Retrieves the contents of the texture - Throws ArgumentException if data is null, data.length is too short or - if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays - - - Layer of the texture - Area of the texture - Destination array for the texture data - First position in data where to write the pixel data - Number of pixels to read - - - - Retrieves the contents of the texture - Throws ArgumentException if data is null, data.length is too short or - if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays - - - Destination array for the texture data - First position in data where to write the pixel data - Number of pixels to read - - - - Retrieves the contents of the texture - Throws ArgumentException if data is null, data.length is too short or - if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays - - - Destination array for the texture data - - - - Creates a from a file, supported formats bmp, gif, jpg, png, tif and dds (only for simple textures). - May work with other formats, but will not work with tga files. - This internally calls . - - The graphics device to use to create the texture. - The path to the image file. - The created from the given file. - Note that different image decoders may generate slight differences between platforms, but perceptually - the images should be identical. This call does not premultiply the image alpha, but areas of zero alpha will - result in black color data. - - - - - Creates a from a stream, supported formats bmp, gif, jpg, png, tif and dds (only for simple textures). - May work with other formats, but will not work with tga files. - - The graphics device to use to create the texture. - The stream from which to read the image data. - The created from the image stream. - Note that different image decoders may generate slight differences between platforms, but perceptually - the images should be identical. This call does not premultiply the image alpha, but areas of zero alpha will - result in black color data. - - - - - Converts the texture to a JPG image - - Destination for the image - - - - - - Converts the texture to a PNG image - - Destination for the image - - - - - - Gets a copy of 3D texture data, specifying a mipmap level, source box, start index, and number of elements. - - The type of the elements in the array. - Mipmap level. - Position of the left side of the box on the x-axis. - Position of the top of the box on the y-axis. - Position of the right side of the box on the x-axis. - Position of the bottom of the box on the y-axis. - Position of the front of the box on the z-axis. - Position of the back of the box on the z-axis. - Array of data. - Index of the first element to get. - Number of elements to get. - - - - Gets a copy of 3D texture data, specifying a start index and number of elements. - - The type of the elements in the array. - Array of data. - Index of the first element to get. - Number of elements to get. - - - - Gets a copy of 3D texture data. - - The type of the elements in the array. - Array of data. - - - - Marks all texture slots as dirty. - - - - - Gets a unique identifier of this texture for sorting purposes. - - - For example, this value is used by when drawing with . - The value is an implementation detail and may change between application launches or MonoGame versions. - It is only guaranteed to stay consistent during application lifetime. - - - - - Gets the handle to a shared resource. - - - The handle of the shared resource, or if the texture was not - created as a shared resource. - - - - - Gets the width and height of the cube map face in pixels. - - The width and height of a cube map face in pixels. - - - - Gets a copy of cube texture data specifying a cubemap face. - - - The cube map face. - The data. - - - - A usage hint for optimizing memory placement of graphics buffers. - - - - - No special usage. - - - - - The buffer will not be readable and will be optimized for rendering and writing. - - - - - Special offset used internally by GraphicsDevice.DrawUserXXX() methods. - - - - - Special offset used internally by GraphicsDevice.DrawUserXXX() methods. - - - - - Immutable version of . Can be used as a key in the - . - - - - - Initializes a new instance of the class. - - The vertex declarations per resource slot. - The instance frequencies per resource slot. - - The specified arrays are stored internally - the arrays are not copied. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data - structures like a hash table. - - - - - Gets the relevant IndexElementSize enum value for the given type. - - The graphics device. - The type to use for the index buffer - The IndexElementSize enum value that matches the type - - - - The GraphicsDevice is resetting, so GPU resources must be recreated. - - - - - Defines size for index in and . - - - - - 16-bit short/ushort value been used. - - - - - 32-bit int/uint value been used. - - - - - Caches DirectX input layouts for the input assembler stage. - - - - - Initializes a new instance of the class. - - The graphics device. - The byte code of the vertex shader. - - - - Releases all resources used by an instance of the class. - - - This method calls the virtual method, passing in - , and then suppresses finalization of the instance. - - - - - Releases the unmanaged resources used by an instance of the - class and optionally releases the managed resources. - - - to release both managed and unmanaged resources; - to release only unmanaged resources. - - - - - Gets or create the DirectX input layout for the specified vertex buffers. - - The vertex buffers. - The DirectX input layout. - - - - Gets a more helpful message for the SharpDX invalid arg error. - - The input elements. - The exception message. - - - - Defines how vertex data is ordered. - - - - - Renders the specified vertices as a sequence of isolated triangles. Each group of three vertices defines a separate triangle. Back-face culling is affected by the current winding-order render state. - - - - - Renders the vertices as a triangle strip. The back-face culling flag is flipped automatically on even-numbered triangles. - - - - - Renders the vertices as a list of isolated straight line segments; the count may be any positive integer. - - - - - Renders the vertices as a single polyline; the count may be any positive integer. - - - - - The GraphicsDevice is resetting, so GPU resources must be recreated. - - - - - Get the vertex data froom this VertexBuffer. - - The struct you want to fill. - The offset to the first element in the vertex buffer in bytes. - An array of T's to be filled. - The index to start filling the data array. - The number of T's to get. - The size of how a vertex buffer element should be interpreted. - - - Note that this pulls data from VRAM into main memory and because of that is a very expensive operation. - It is often a better idea to keep a copy of the data in main memory. - - - -

    Using this operation it is easy to get certain vertex elements from a VertexBuffer.

    -

    - For example to get the texture coordinates from a VertexBuffer of you can call - GetData(4 * 3, data, elementCount, 20). 'data'should be an array of in this example. - The offsetInBytes is the number of bytes taken up by the of the vertex. - For vertexStride we pass the size of a . -

    -
    -
    - - - Sets the vertex buffer data, specifying the index at which to start copying from the source data array, - the number of elements to copy from the source data array, - and how far apart elements from the source data array should be when they are copied into the vertex buffer. - - Type of elements in the data array. - Offset in bytes from the beginning of the vertex buffer to the start of the copied data. - Data array. - Index at which to start copying from . - Must be within the array bounds. - Number of elements to copy from . - The combination of and - must be within the array bounds. - Specifies how far apart, in bytes, elements from should be when - they are copied into the vertex buffer. - In almost all cases this should be sizeof(T), to create a tightly-packed vertex buffer. - If you specify sizeof(T), elements from will be copied into the - vertex buffer with no padding between each element. - If you specify a value greater than sizeof(T), elements from will be copied - into the vertex buffer with padding between each element. - If you specify 0 for this parameter, it will be treated as if you had specified sizeof(T). - With the exception of 0, you must specify a value greater than or equal to sizeof(T). - - If T is VertexPositionTexture, but you want to set only the position component of the vertex data, - you would call this method as follows: - - Vector3[] positions = new Vector3[numVertices]; - vertexBuffer.SetData(0, positions, 0, numVertices, vertexBuffer.VertexDeclaration.VertexStride); - - - Continuing from the previous example, if you want to set only the texture coordinate component of the vertex data, - you would call this method as follows (note the use of : - - Vector2[] texCoords = new Vector2[numVertices]; - vertexBuffer.SetData(12, texCoords, 0, numVertices, vertexBuffer.VertexDeclaration.VertexStride); - - - - If you provide a byte[] in the parameter, then you should almost certainly - set to 1, to avoid leaving any padding between the byte values - when they are copied into the vertex buffer. - - - - - Sets the vertex buffer data, specifying the index at which to start copying from the source data array, - and the number of elements to copy from the source data array. This is the same as calling - with offsetInBytes equal to 0, - and vertexStride equal to sizeof(T). - - Type of elements in the data array. - Data array. - Index at which to start copying from . - Must be within the array bounds. - Number of elements to copy from . - The combination of and - must be within the array bounds. - - - - Sets the vertex buffer data. This is the same as calling - with offsetInBytes and startIndex equal to 0, elementCount equal to data.Length, - and vertexStride equal to sizeof(T). - - Type of elements in the data array. - Data array. - - - - Defines how a vertex buffer is bound to the graphics device for rendering. - - - - - Gets the vertex buffer. - - The vertex buffer. - - - - Gets the index of the first vertex in the vertex buffer to use. - - The index of the first vertex in the vertex buffer to use. - - - - Gets the number of instances to draw using the same per-instance data before advancing - in the buffer by one element. - - - The number of instances to draw using the same per-instance data before advancing in the - buffer by one element. This value must be 0 for an element that contains per-vertex - data and greater than 0 for per-instance data. - - - - - Creates an instance of . - - The vertex buffer to bind. - - - - Creates an instance of . - - The vertex buffer to bind. - - The index of the first vertex in the vertex buffer to use. - - - - - Creates an instance of VertexBufferBinding. - - The vertex buffer to bind. - - The index of the first vertex in the vertex buffer to use. - - - The number of instances to draw using the same per-instance data before advancing in the - buffer by one element. This value must be 0 for an element that contains per-vertex data - and greater than 0 for per-instance data. - - - is . - - - or is invalid. - - - - - Stores the vertex buffers to be bound to the input assembler stage. - - - - - Initializes a new instance of the class. - - The maximum number of vertex buffer slots. - - - - Clears the vertex buffer slots. - - - if the input layout was changed; otherwise, - . - - - - - Binds the specified vertex buffer to the first input slot. - - The vertex buffer. - - The offset (in vertices) from the beginning of the vertex buffer to the first vertex to - use. - - - if the input layout was changed; otherwise, - . - - - - - Binds the the specified vertex buffers to the input slots. - - The vertex buffer bindings. - - if the input layout was changed; otherwise, - . - - - - - Gets vertex buffer bound to the specified input slots. - - The vertex buffer binding. - - - - Gets vertex buffers bound to the input slots. - - The vertex buffer bindings. - - - - Creates an that can be used as a key in the - . - - The . - - - - Helper class which ensures we only lookup a vertex - declaration for a particular type once. - - A vertex structure which implements IVertexType. - - - - Defines per-vertex data of a vertex buffer. - - - implements and can be used as - a key in a dictionary. Two vertex declarations are considered equal if the vertices are - structurally equivalent, i.e. the vertex elements and the vertex stride are identical. (The - properties and are - ignored in and !) - - - - - Gets the internal vertex elements array. - - The internal vertex elements array. - - - - Initializes a new instance of the class. - - The vertex elements. - - is or empty. - - - - - Initializes a new instance of the class. - - The size of a vertex (including padding) in bytes. - The vertex elements. - - is or empty. - - - - - Returns the VertexDeclaration for Type. - - A value type which implements the IVertexType interface. - The VertexDeclaration. - - Prefer to use VertexDeclarationCache when the declaration lookup - can be performed with a templated type. - - - - - Gets a copy of the vertex elements. - - A copy of the vertex elements. - - - - Gets the size of a vertex (including padding) in bytes. - - The size of a vertex (including padding) in bytes. - - - - Determines whether the specified is equal to this instance. - - The object to compare with the current object. - - if the specified is equal to this instance; - otherwise, . - - - - - Determines whether the specified is equal to this - instance. - - The object to compare with the current object. - - if the specified is equal to this - instance; otherwise, . - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data - structures like a hash table. - - - - - Compares two instances to determine whether they are the - same. - - The first instance. - The second instance. - - if the and are - the same; otherwise, . - - - - - Compares two instances to determine whether they are - different. - - The first instance. - The second instance. - - if the and are - the different; otherwise, . - - - - - Defines a single element in a vertex. - - - - - Gets or sets the offset in bytes from the beginning of the stream to the vertex element. - - The offset in bytes. - - - - Gets or sets the data format. - - The data format. - - - - Gets or sets the HLSL semantic of the element in the vertex shader input. - - The HLSL semantic of the element in the vertex shader input. - - - - Gets or sets the semantic index. - - - The semantic index, which is required if the semantic is used for more than one vertex - element. - - - Usage indices in a vertex declaration usually start with 0. When multiple vertex buffers - are bound to the input assembler stage (see ), - MonoGame internally adjusts the usage indices based on the order in which the vertex - buffers are bound. - - - - - Initializes a new instance of the struct. - - The offset in bytes from the beginning of the stream to the vertex element. - The element format. - The HLSL semantic of the element in the vertex shader input-signature. - The semantic index, which is required if the semantic is used for more than one vertex element. - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data - structures like a hash table. - - - - - Returns a that represents this instance. - - A that represents this instance. - - - - Determines whether the specified is equal to this instance. - - The object to compare with the current object. - - if the specified is equal to this instance; - otherwise, . - - - - - Determines whether the specified is equal to this - instance. - - The object to compare with the current object. - - if the specified is equal to this - instance; otherwise, . - - - - - Compares two instances to determine whether they are the - same. - - The first instance. - The second instance. - - if the and are - the same; otherwise, . - - - - - Compares two instances to determine whether they are - different. - - The first instance. - The second instance. - - if the and are - the different; otherwise, . - - - - - Gets the DirectX . - - The input resource slot. - - The number of instances to draw using the same per-instance data before advancing in the - buffer by one element. This value must be 0 for an element that contains per-vertex - data. - - . - - Unknown vertex element format or usage! - - - - - Defines vertex element formats. - - - - - Single 32-bit floating point number. - - - - - Two component 32-bit floating point number. - - - - - Three component 32-bit floating point number. - - - - - Four component 32-bit floating point number. - - - - - Four component, packed unsigned byte, mapped to 0 to 1 range. - - - - - Four component unsigned byte. - - - - - Two component signed 16-bit integer. - - - - - Four component signed 16-bit integer. - - - - - Normalized, two component signed 16-bit integer. - - - - - Normalized, four component signed 16-bit integer. - - - - - Two component 16-bit floating point number. - - - - - Four component 16-bit floating point number. - - - - - Defines usage for vertex elements. - - - - - Position data. - - - - - Color data. - - - - - Texture coordinate data or can be used for user-defined data. - - - - - Normal data. - - - - - Binormal data. - - - - - Tangent data. - - - - - Blending indices data. - - - - - Blending weight data. - - - - - Depth data. - - - - - Fog data. - - - - - Point size data. Usable for drawing point sprites. - - - - - Sampler data for specifies the displacement value to look up. - - - - - Single, positive float value, specifies a tessellation factor used in the tessellation unit to control the rate of tessellation. - - - - - Stores the vertex layout (input elements) for the input assembler stage. - - - In the DirectX version the input layouts are cached in a dictionary. The - is used as the key in the dictionary and therefore needs to - implement . Two instance are - considered equal if the vertex layouts are structurally identical. - - - - - Gets or sets the number of used input slots. - - The number of used input slots. - - - - Initializes a new instance of the class. - - The maximum number of vertex buffer slots. - - - - Initializes a new instance of the class. - - The array for storing vertex declarations. - The array for storing instance frequencies. - The number of used slots. - - - - Determines whether the specified is equal to this instance. - - The object to compare with the current object. - - if the specified is equal to this instance; - otherwise, . - - - - - Determines whether the specified is equal to this - instance. - - The object to compare with the current object. - - if the specified is equal to this - instance; otherwise, . - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data - structures like a hash table. - - - - - Compares two instances to determine whether they are the - same. - - The first instance. - The second instance. - - if the and are - the same; otherwise, . - - - - - Compares two instances to determine whether they are - different. - - The first instance. - The second instance. - - if the and are - the different; otherwise, . - - - - - Describes the view bounds for render-target surface. - - - - - The height of the bounds in pixels. - - - - - The upper limit of depth of this viewport. - - - - - The lower limit of depth of this viewport. - - - - - The width of the bounds in pixels. - - - - - The y coordinate of the beginning of this viewport. - - - - - The x coordinate of the beginning of this viewport. - - - - - Gets the aspect ratio of this , which is width / height. - - - - - Gets or sets a boundary of this . - - - - - Returns the subset of the viewport that is guaranteed to be visible on a lower quality display. - - - - - Constructs a viewport from the given values. The will be 0.0 and will be 1.0. - - The x coordinate of the upper-left corner of the view bounds in pixels. - The y coordinate of the upper-left corner of the view bounds in pixels. - The width of the view bounds in pixels. - The height of the view bounds in pixels. - - - - Constructs a viewport from the given values. - - The x coordinate of the upper-left corner of the view bounds in pixels. - The y coordinate of the upper-left corner of the view bounds in pixels. - The width of the view bounds in pixels. - The height of the view bounds in pixels. - The lower limit of depth. - The upper limit of depth. - - - - Creates a new instance of struct. - - A that defines the location and size of the in a render target. - - - - Projects a from model space into screen space. - The source point is transformed from model space to world space by the world matrix, - then from world space to view space by the view matrix, and - finally from view space to screen space by the projection matrix. - - The to project. - The projection . - The view . - The world . - - - - - Unprojects a from screen space into model space. - The source point is transformed from screen space to view space by the inverse of the projection matrix, - then from view space to world space by the inverse of the view matrix, and - finally from world space to model space by the inverse of the world matrix. - Note source.Z must be less than or equal to MaxDepth. - - The to unproject. - The projection . - The view . - The world . - - - - - Returns a representation of this in the format: - {X:[] Y:[] Width:[] Height:[] MinDepth:[] MaxDepth:[]} - - A representation of this . - - - - The settings used in creation of the graphics device. - See . - - - - - The graphics adapter on which the graphics device will be created. - - - This is only valid on desktop systems where multiple graphics - adapters are possible. Defaults to . - - - - - The requested graphics device feature set. - - - - - The settings that define how graphics will be presented to the display. - - - - - Used to initialize and control the presentation of the graphics device. - - - - - The default back buffer width. - - - - - The default back buffer height. - - - - - Associates this graphics device manager to a game instances. - - The game instance to attach. - - - - This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to - allow users to change the settings. Then returns that GraphicsDeviceInformation. - Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null. - - - - - Applies any pending property changes to the graphics device. - - - - - Toggles between windowed and fullscreen modes. - - - Note that on platforms that do not support windowed modes this has no affect. - - - - - The profile which determines the graphics feature level. - - - - - Returns the graphics device for this manager. - - - - - Indicates the desire to switch into fullscreen mode. - - - When called at startup this will automatically set fullscreen mode during initialization. If - set after startup you must call ApplyChanges() for the fullscreen mode to be changed. - Note that for some platforms that do not support windowed modes this property has no affect. - - - - - Gets or sets the boolean which defines how window switches from windowed to fullscreen state. - "Hard" mode(true) is slow to switch, but more effecient for performance, while "soft" mode(false) is vice versa. - The default value is true. - - - - - Indicates if DX9 style pixel addressing or current standard - pixel addressing should be used. This flag is set to - false by default. It should be set to true - for XNA compatibility. It is recommended to leave this flag - set to false for projects that are not ported from - XNA. This value is passed to . - - - XNA uses DirectX9 for its graphics. DirectX9 interprets UV - coordinates differently from other graphics API's. This is - typically referred to as the half-pixel offset. MonoGame - replicates XNA behavior if this flag is set to true. - - - - - Indicates the desire for a multisampled back buffer. - - - When called at startup this will automatically set the MSAA mode during initialization. If - set after startup you must call ApplyChanges() for the MSAA mode to be changed. - - - - - Indicates the desired back buffer color format. - - - When called at startup this will automatically set the format during initialization. If - set after startup you must call ApplyChanges() for the format to be changed. - - - - - Indicates the desired back buffer height in pixels. - - - When called at startup this will automatically set the height during initialization. If - set after startup you must call ApplyChanges() for the height to be changed. - - - - - Indicates the desired back buffer width in pixels. - - - When called at startup this will automatically set the width during initialization. If - set after startup you must call ApplyChanges() for the width to be changed. - - - - - Indicates the desired depth-stencil buffer format. - - - The depth-stencil buffer format defines the scene depth precision and stencil bits available for effects during rendering. - When called at startup this will automatically set the format during initialization. If - set after startup you must call ApplyChanges() for the format to be changed. - - - - - Indicates the desire for vsync when presenting the back buffer. - - - Vsync limits the frame rate of the game to the monitor referesh rate to prevent screen tearing. - When called at startup this will automatically set the vsync mode during initialization. If - set after startup you must call ApplyChanges() for the vsync mode to be changed. - - - - - Indicates the desired allowable display orientations when the device is rotated. - - - This property only applies to mobile platforms with automatic display rotation. - When called at startup this will automatically apply the supported orientations during initialization. If - set after startup you must call ApplyChanges() for the supported orientations to be changed. - - - - - The key that was either pressed or released. - - - - - Create a new keyboard input event - - The key involved in this event - - - - Gets the duration of the Album. - - - - - Gets the Genre of the Album. - - - - - Gets a value indicating whether the Album has associated album art. - - - - - Gets a value indicating whether the object is disposed. - - - - - Gets the name of the Album. - - - - - Gets a SongCollection that contains the songs on the album. - - - - - Immediately releases the unmanaged resources used by this object. - - - - - Returns the stream that contains the album art image data. - - - - - Returns the stream that contains the album thumbnail image data. - - - - - Returns a String representation of this Album. - - - - - Gets the hash code for this instance. - - - - - Gets the number of Album objects in the AlbumCollection. - - - - - Gets a value indicating whether the object is disposed. - - - - - Gets the Album at the specified index in the AlbumCollection. - - Index of the Album to get. - - - - Immediately releases the unmanaged resources used by this object. - - - - - Gets the AlbumCollection for the Artist. - - - - - Gets a value indicating whether the object is disposed. - - - - - Gets the name of the Artist. - - - - - Gets the SongCollection for the Artist. - - - - - Immediately releases the unmanaged resources used by this object. - - - - - Returns a String representation of the Artist. - - - - - Gets the hash code for this instance. - - - - - Gets the AlbumCollection for the Genre. - - - - - Gets a value indicating whether the object is disposed. - - - - - Gets the name of the Genre. - - - - - Gets the SongCollection for the Genre. - - - - - Immediately releases the unmanaged resources used by this object. - - - - - Returns a String representation of the Genre. - - - - - Gets the hash code for this instance. - - - - - Load the contents of MediaLibrary. This blocking call might take up to a few minutes depending on the platform and the size of the user's music library. - - Callback that reports back the progress of the music library loading in percents (0-100). - - - - This class provides a way for the MediaManager to be initialised exactly once, - regardless of how many different places need it, and which is called first. - - - - - Ensures that the MediaManager has been initialised. Must be called from UI thread. - - - - - Ensures that the MediaManager has been shutdown. Must be called from UI thread. - - - - - Play clears the current playback queue, and then queues up the specified song for playback. - Playback starts immediately at the beginning of the song. - - - - - Play clears the current playback queue, and then queues up the specified song for playback. - Playback starts immediately at the given position of the song. - - - - - Gets the Album on which the Song appears. - - - - - Gets the Artist of the Song. - - - - - Gets the Genre of the Song. - - - - - Returns a song that can be played via . - - The name for the song. See . - The path to the song file. - - - - - Type of sounds in a video - - - - - This video contains only music. - - - - - This video contains only dialog. - - - - - This video contains music and dialog. - - - - - Represents a video. - - - - - I actually think this is a file PATH... - - - - - Gets the duration of the Video. - - - - - Gets the frame rate of this video. - - - - - Gets the height of this video, in pixels. - - - - - Gets the VideoSoundtrackType for this video. - - - - - Gets the width of this video, in pixels. - - - - - Gets a value that indicates whether the object is disposed. - - - - - Gets a value that indicates whether the player is playing video in a loop. - - - - - Gets or sets the muted setting for the video player. - - - - - Gets the play position within the currently playing video. - - - - - Gets the media playback state, MediaState. - - - - - Gets the Video that is currently playing. - - - - - Video player volume, from 0.0f (silence) to 1.0f (full volume relative to the current device volume). - - - - - Retrieves a Texture2D containing the current frame of video being played. - - The current frame of video. - Thrown if no video is set on the player - Thrown if the platform was unable to get a texture in a reasonable amount of time. Often the platform specific media code is running - in a different thread or process. Note: This may be a change from XNA behaviour - - - - Pauses the currently playing video. - - - - - Plays a Video. - - Video to play. - - - - Resumes a paused video. - - - - - Stops playing a video. - - - - - Immediately releases the unmanaged resources used by this object. - - - - - Compute a hash from a byte array. - - - Modified FNV Hash in C# - http://stackoverflow.com/a/468084 - - - - - Compute a hash from the content of a stream and restore the position. - - - Modified FNV Hash in C# - http://stackoverflow.com/a/468084 - - - - - Combines the filePath and relativeFile based on relativeFile being a file in the same location as filePath. - Relative directory operators (..) are also resolved - - "A\B\C.txt","D.txt" becomes "A\B\D.txt" - "A\B\C.txt","..\D.txt" becomes "A\D.txt" - Path to the file we are starting from - Relative location of another file to resolve the path to - - - - Returns the Assembly of a Type - - - - - Returns true if the given type represents a non-object type that is not abstract. - - - - - Returns true if the get method of the given property exist and are public. - Note that we allow a getter-only property to be serialized (and deserialized), - *if* CanDeserializeIntoExistingObject is true for the property type. - - - - - Returns true if the given type can be assigned the given value - - - - - Returns true if the given type can be assigned a value with the given object type - - - - - Generics handler for Marshal.SizeOf - - - - - Fallback handler for Marshal.SizeOf(type) - - - - - Returns the current timer resolution in milliseconds - - - - - Sleeps as long as possible without exceeding the specified period - - - - - Represents a Zlib stream for compression or decompression. - - - - - The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any - stream. - - - Using this stream, applications can compress or decompress data via - stream Read() and Write() operations. Either compression or - decompression can occur through either reading or writing. The compression - format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed - Data Format Specification version 3.3". This implementation of ZLIB always uses - DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE - Compressed Data Format Specification version 1.3.") - - - The ZLIB format allows for varying compression methods, window sizes, and dictionaries. - This implementation always uses the DEFLATE compression method, a preset dictionary, - and 15 window bits by default. - - - - This class is similar to DeflateStream, except that it adds the - RFC1950 header and trailer bytes to a compressed stream when compressing, or expects - the RFC1950 header and trailer bytes when decompressing. It is also similar to the - . - - - - - - - Create a ZlibStream using the specified CompressionMode. - - - - - When mode is CompressionMode.Compress, the ZlibStream - will use the default compression level. The "captive" stream will be - closed when the ZlibStream is closed. - - - - - - This example uses a ZlibStream to compress a file, and writes the - compressed data to another file. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".zlib") - Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - The stream which will be read or written. - Indicates whether the ZlibStream will compress or decompress. - - - - Create a ZlibStream using the specified CompressionMode and - the specified CompressionLevel. - - - - - - When mode is CompressionMode.Decompress, the level parameter is ignored. - The "captive" stream will be closed when the ZlibStream is closed. - - - - - - This example uses a ZlibStream to compress data from a file, and writes the - compressed data to another file. - - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (Stream compressor = new ZlibStream(raw, - CompressionMode.Compress, - CompressionLevel.BestCompression)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".zlib") - Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - The stream to be read or written while deflating or inflating. - Indicates whether the ZlibStream will compress or decompress. - A tuning knob to trade speed for effectiveness. - - - - Create a ZlibStream using the specified CompressionMode, and - explicitly specify whether the captive stream should be left open after - Deflation or Inflation. - - - - - - When mode is CompressionMode.Compress, the ZlibStream will use - the default compression level. - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - that will be re-read after - compression. Specify true for the parameter to leave the stream - open. - - - - See the other overloads of this constructor for example code. - - - - - The stream which will be read or written. This is called the - "captive" stream in other places in this documentation. - Indicates whether the ZlibStream will compress or decompress. - true if the application would like the stream to remain - open after inflation/deflation. - - - - Create a ZlibStream using the specified CompressionMode - and the specified CompressionLevel, and explicitly specify - whether the stream should be left open after Deflation or Inflation. - - - - - - This constructor allows the application to request that the captive - stream remain open after the deflation or inflation occurs. By - default, after Close() is called on the stream, the captive - stream is also closed. In some cases this is not desired, for example - if the stream is a that will be - re-read after compression. Specify true for the parameter to leave the stream open. - - - - When mode is CompressionMode.Decompress, the level parameter is - ignored. - - - - - - - This example shows how to use a ZlibStream to compress the data from a file, - and store the result into another file. The filestream remains open to allow - additional data to be written to it. - - - using (var output = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - // can write additional data to the output stream here - } - - - Using output As FileStream = File.Create(fileToCompress & ".zlib") - Using input As Stream = File.OpenRead(fileToCompress) - Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - ' can write additional data to the output stream here. - End Using - - - - The stream which will be read or written. - - Indicates whether the ZlibStream will compress or decompress. - - - true if the application would like the stream to remain open after - inflation/deflation. - - - - A tuning knob to trade speed for effectiveness. This parameter is - effective only when mode is CompressionMode.Compress. - - - - - This property sets the flush behavior on the stream. - Sorry, though, not sure exactly how to describe all the various settings. - - - - - The size of the working buffer for the compression codec. - - - - - The working buffer is used for all stream operations. The default size is - 1024 bytes. The minimum size is 128 bytes. You may get better performance - with a larger buffer. Then again, you might not. You would have to test - it. - - - - Set this before the first call to Read() or Write() on the - stream. If you try to set it afterwards, it will throw. - - - - - Returns the total number of bytes input so far. - - - Returns the total number of bytes output so far. - - - - Dispose the stream. - - - - This may or may not result in a Close() call on the captive - stream. See the constructors that have a leaveOpen parameter - for more information. - - - This method may be invoked in two distinct scenarios. If disposing - == true, the method has been called directly or indirectly by a - user's code, for example via the public Dispose() method. In this - case, both managed and unmanaged resources can be referenced and - disposed. If disposing == false, the method has been called by the - runtime from inside the object finalizer and this method should not - reference other objects; in that case only unmanaged resources must - be referenced or disposed. - - - - indicates whether the Dispose method was invoked by user code. - - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the total bytes - written out, if used in writing, or the total bytes read in, if used in - reading. The count may refer to compressed bytes or uncompressed bytes, - depending on how you've used the stream. - - - - - Read data from the stream. - - - - - - If you wish to use the ZlibStream to compress data while reading, - you can create a ZlibStream with CompressionMode.Compress, - providing an uncompressed data stream. Then call Read() on that - ZlibStream, and the data read will be compressed. If you wish to - use the ZlibStream to decompress data while reading, you can create - a ZlibStream with CompressionMode.Decompress, providing a - readable compressed data stream. Then call Read() on that - ZlibStream, and the data will be decompressed as it is read. - - - - A ZlibStream can be used for Read() or Write(), but - not both. - - - - - - The buffer into which the read data should be placed. - - - the offset within that data array to put the first byte read. - - the number of bytes to read. - - the number of bytes read - - - - Calling this method always throws a . - - - The offset to seek to.... - IF THIS METHOD ACTUALLY DID ANYTHING. - - - The reference specifying how to apply the offset.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - - nothing. This method always throws. - - - - Calling this method always throws a . - - - The new value for the stream length.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - - - - Write data to the stream. - - - - - - If you wish to use the ZlibStream to compress data while writing, - you can create a ZlibStream with CompressionMode.Compress, - and a writable output stream. Then call Write() on that - ZlibStream, providing uncompressed data as input. The data sent to - the output stream will be the compressed form of the data written. If you - wish to use the ZlibStream to decompress data while writing, you - can create a ZlibStream with CompressionMode.Decompress, and a - writable output stream. Then call Write() on that stream, - providing previously compressed data. The data sent to the output stream - will be the decompressed form of the data written. - - - - A ZlibStream can be used for Read() or Write(), but not both. - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Compress a string into a byte array using ZLIB. - - - - Uncompress it with . - - - - - - - - A string to compress. The string will first be encoded - using UTF8, then compressed. - - - The string in compressed form - - - - Compress a byte array into a new byte array using ZLIB. - - - - Uncompress it with . - - - - - - - A buffer to compress. - - - The data in compressed form - - - - Uncompress a ZLIB-compressed byte array into a single string. - - - - - - - A buffer containing ZLIB-compressed data. - - - The uncompressed string - - - - Uncompress a ZLIB-compressed byte array into a byte array. - - - - - - - A buffer containing ZLIB-compressed data. - - - The data in uncompressed form - - - - A bunch of constants used in the Zlib interface. - - - - - The maximum number of window bits for the Deflate algorithm. - - - - - The default number of window bits for the Deflate algorithm. - - - - - indicates everything is A-OK - - - - - Indicates that the last operation reached the end of the stream. - - - - - The operation ended in need of a dictionary. - - - - - There was an error with the stream - not enough data, not open and readable, etc. - - - - - There was an error with the data - not enough data, bad data, etc. - - - - - There was an error with the working buffer. - - - - - The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. - - - - - The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. - - - - - Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). - - - - This class compresses and decompresses data according to the Deflate algorithm - and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. - - - - - The buffer from which data is taken. - - - - - An index into the InputBuffer array, indicating where to start reading. - - - - - The number of bytes available in the InputBuffer, starting at NextIn. - - - Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. - The class will update this number as calls to Inflate/Deflate are made. - - - - - Total number of bytes read so far, through all calls to Inflate()/Deflate(). - - - - - Buffer to store output data. - - - - - An index into the OutputBuffer array, indicating where to start writing. - - - - - The number of bytes available in the OutputBuffer, starting at NextOut. - - - Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. - The class will update this number as calls to Inflate/Deflate are made. - - - - - Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). - - - - - used for diagnostics, when something goes wrong! - - - - - The compression level to use in this codec. Useful only in compression mode. - - - - - The number of Window Bits to use. - - - This gauges the size of the sliding window, and hence the - compression effectiveness as well as memory consumption. It's best to just leave this - setting alone if you don't know what it is. The maximum value is 15 bits, which implies - a 32k window. - - - - - The compression strategy to use. - - - This is only effective in compression. The theory offered by ZLIB is that different - strategies could potentially produce significant differences in compression behavior - for different data sets. Unfortunately I don't have any good recommendations for how - to set it differently. When I tested changing the strategy I got minimally different - compression performance. It's best to leave this property alone if you don't have a - good feel for it. Or, you may want to produce a test harness that runs through the - different strategy options and evaluates them on different file types. If you do that, - let me know your results. - - - - - The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. - - - - - Create a ZlibCodec. - - - If you use this default constructor, you will later have to explicitly call - InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress - or decompress. - - - - - Create a ZlibCodec that either compresses or decompresses. - - - Indicates whether the codec should compress (deflate) or decompress (inflate). - - - - - Initialize the inflation state. - - - It is not necessary to call this before using the ZlibCodec to inflate data; - It is implicitly called when you call the constructor. - - Z_OK if everything goes well. - - - - Initialize the inflation state with an explicit flag to - govern the handling of RFC1950 header bytes. - - - - By default, the ZLIB header defined in RFC 1950 is expected. If - you want to read a zlib stream you should specify true for - expectRfc1950Header. If you have a deflate stream, you will want to specify - false. It is only necessary to invoke this initializer explicitly if you - want to specify false. - - - whether to expect an RFC1950 header byte - pair when reading the stream of data to be inflated. - - Z_OK if everything goes well. - - - - Initialize the ZlibCodec for inflation, with the specified number of window bits. - - The number of window bits to use. If you need to ask what that is, - then you shouldn't be calling this initializer. - Z_OK if all goes well. - - - - Initialize the inflation state with an explicit flag to govern the handling of - RFC1950 header bytes. - - - - If you want to read a zlib stream you should specify true for - expectRfc1950Header. In this case, the library will expect to find a ZLIB - header, as defined in RFC - 1950, in the compressed stream. If you will be reading a DEFLATE or - GZIP stream, which does not have such a header, you will want to specify - false. - - - whether to expect an RFC1950 header byte pair when reading - the stream of data to be inflated. - The number of window bits to use. If you need to ask what that is, - then you shouldn't be calling this initializer. - Z_OK if everything goes well. - - - - Inflate the data in the InputBuffer, placing the result in the OutputBuffer. - - - You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and - AvailableBytesOut before calling this method. - - - - private void InflateBuffer() - { - int bufferSize = 1024; - byte[] buffer = new byte[bufferSize]; - ZlibCodec decompressor = new ZlibCodec(); - - Console.WriteLine("\n============================================"); - Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); - MemoryStream ms = new MemoryStream(DecompressedBytes); - - int rc = decompressor.InitializeInflate(); - - decompressor.InputBuffer = CompressedBytes; - decompressor.NextIn = 0; - decompressor.AvailableBytesIn = CompressedBytes.Length; - - decompressor.OutputBuffer = buffer; - - // pass 1: inflate - do - { - decompressor.NextOut = 0; - decompressor.AvailableBytesOut = buffer.Length; - rc = decompressor.Inflate(FlushType.None); - - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new Exception("inflating: " + decompressor.Message); - - ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); - } - while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); - - // pass 2: finish and flush - do - { - decompressor.NextOut = 0; - decompressor.AvailableBytesOut = buffer.Length; - rc = decompressor.Inflate(FlushType.Finish); - - if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - throw new Exception("inflating: " + decompressor.Message); - - if (buffer.Length - decompressor.AvailableBytesOut > 0) - ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); - } - while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); - - decompressor.EndInflate(); - } - - - - The flush to use when inflating. - Z_OK if everything goes well. - - - - Ends an inflation session. - - - Call this after successively calling Inflate(). This will cause all buffers to be flushed. - After calling this you cannot call Inflate() without a intervening call to one of the - InitializeInflate() overloads. - - Z_OK if everything goes well. - - - - I don't know what this does! - - Z_OK if everything goes well. - - - - Initialize the ZlibCodec for deflation operation. - - - The codec will use the MAX window bits and the default level of compression. - - - - int bufferSize = 40000; - byte[] CompressedBytes = new byte[bufferSize]; - byte[] DecompressedBytes = new byte[bufferSize]; - - ZlibCodec compressor = new ZlibCodec(); - - compressor.InitializeDeflate(CompressionLevel.Default); - - compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); - compressor.NextIn = 0; - compressor.AvailableBytesIn = compressor.InputBuffer.Length; - - compressor.OutputBuffer = CompressedBytes; - compressor.NextOut = 0; - compressor.AvailableBytesOut = CompressedBytes.Length; - - while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) - { - compressor.Deflate(FlushType.None); - } - - while (true) - { - int rc= compressor.Deflate(FlushType.Finish); - if (rc == ZlibConstants.Z_STREAM_END) break; - } - - compressor.EndDeflate(); - - - - Z_OK if all goes well. You generally don't need to check the return code. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. - - - The codec will use the maximum window bits (15) and the specified - CompressionLevel. It will emit a ZLIB stream as it compresses. - - The compression level for the codec. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, - and the explicit flag governing whether to emit an RFC1950 header byte pair. - - - The codec will use the maximum window bits (15) and the specified CompressionLevel. - If you want to generate a zlib stream, you should specify true for - wantRfc1950Header. In this case, the library will emit a ZLIB - header, as defined in RFC - 1950, in the compressed stream. - - The compression level for the codec. - whether to emit an initial RFC1950 byte pair in the compressed stream. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, - and the specified number of window bits. - - - The codec will use the specified number of window bits and the specified CompressionLevel. - - The compression level for the codec. - the number of window bits to use. If you don't know what this means, don't use this method. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified - CompressionLevel, the specified number of window bits, and the explicit flag - governing whether to emit an RFC1950 header byte pair. - - - The compression level for the codec. - whether to emit an initial RFC1950 byte pair in the compressed stream. - the number of window bits to use. If you don't know what this means, don't use this method. - Z_OK if all goes well. - - - - Deflate one batch of data. - - - You must have set InputBuffer and OutputBuffer before calling this method. - - - - private void DeflateBuffer(CompressionLevel level) - { - int bufferSize = 1024; - byte[] buffer = new byte[bufferSize]; - ZlibCodec compressor = new ZlibCodec(); - - Console.WriteLine("\n============================================"); - Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); - MemoryStream ms = new MemoryStream(); - - int rc = compressor.InitializeDeflate(level); - - compressor.InputBuffer = UncompressedBytes; - compressor.NextIn = 0; - compressor.AvailableBytesIn = UncompressedBytes.Length; - - compressor.OutputBuffer = buffer; - - // pass 1: deflate - do - { - compressor.NextOut = 0; - compressor.AvailableBytesOut = buffer.Length; - rc = compressor.Deflate(FlushType.None); - - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new Exception("deflating: " + compressor.Message); - - ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); - } - while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); - - // pass 2: finish and flush - do - { - compressor.NextOut = 0; - compressor.AvailableBytesOut = buffer.Length; - rc = compressor.Deflate(FlushType.Finish); - - if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - throw new Exception("deflating: " + compressor.Message); - - if (buffer.Length - compressor.AvailableBytesOut > 0) - ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); - } - while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); - - compressor.EndDeflate(); - - ms.Seek(0, SeekOrigin.Begin); - CompressedBytes = new byte[compressor.TotalBytesOut]; - ms.Read(CompressedBytes, 0, CompressedBytes.Length); - } - - - whether to flush all data as you deflate. Generally you will want to - use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to - flush everything. - - Z_OK if all goes well. - - - - End a deflation session. - - - Call this after making a series of one or more calls to Deflate(). All buffers are flushed. - - Z_OK if all goes well. - - - - Reset a codec for another deflation session. - - - Call this to reset the deflation state. For example if a thread is deflating - non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first - block and before the next Deflate(None) of the second block. - - Z_OK if all goes well. - - - - Set the CompressionStrategy and CompressionLevel for a deflation session. - - the level of compression to use. - the strategy to use for compression. - Z_OK if all goes well. - - - - Set the dictionary to be used for either Inflation or Deflation. - - The dictionary bytes to use. - Z_OK if all goes well. - - - - Describes how to flush the current deflate operation. - - - The different FlushType values are useful when using a Deflate in a streaming application. - - - - No flush at all. - - - Closes the current block, but doesn't flush it to - the output. Used internally only in hypothetical - scenarios. This was supposed to be removed by Zlib, but it is - still in use in some edge cases. - - - - - Use this during compression to specify that all pending output should be - flushed to the output buffer and the output should be aligned on a byte - boundary. You might use this in a streaming communication scenario, so that - the decompressor can get all input data available so far. When using this - with a ZlibCodec, AvailableBytesIn will be zero after the call if - enough output space has been provided before the call. Flushing will - degrade compression and so it should be used only when necessary. - - - - - Use this during compression to specify that all output should be flushed, as - with FlushType.Sync, but also, the compression state should be reset - so that decompression can restart from this point if previous compressed - data has been damaged or if random access is desired. Using - FlushType.Full too often can significantly degrade the compression. - - - - Signals the end of the compression/decompression stream. - - - - The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. - - - - - None means that the data will be simply stored, with no change at all. - If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None - cannot be opened with the default zip reader. Use a different CompressionLevel. - - - - - Same as None. - - - - - The fastest but least effective compression. - - - - - A synonym for BestSpeed. - - - - - A little slower, but better, than level 1. - - - - - A little slower, but better, than level 2. - - - - - A little slower, but better, than level 3. - - - - - A little slower than level 4, but with better compression. - - - - - The default compression level, with a good balance of speed and compression efficiency. - - - - - A synonym for Default. - - - - - Pretty good compression! - - - - - Better compression than Level7! - - - - - The "best" compression, where best means greatest reduction in size of the input data stream. - This is also the slowest compression. - - - - - A synonym for BestCompression. - - - - - Describes options for how the compression algorithm is executed. Different strategies - work better on different sorts of data. The strategy parameter can affect the compression - ratio and the speed of compression but not the correctness of the compresssion. - - - - - The default strategy is probably the best for normal data. - - - - - The Filtered strategy is intended to be used most effectively with data produced by a - filter or predictor. By this definition, filtered data consists mostly of small - values with a somewhat random distribution. In this case, the compression algorithm - is tuned to compress them better. The effect of Filtered is to force more Huffman - coding and less string matching; it is a half-step between Default and HuffmanOnly. - - - - - Using HuffmanOnly will force the compressor to do Huffman encoding only, with no - string matching. - - - - - An enum to specify the direction of transcoding - whether to compress or decompress. - - - - - Used to specify that the stream should compress the data. - - - - - Used to specify that the stream should decompress the data. - - - - - A general purpose exception class for exceptions in the Zlib library. - - - - - The ZlibException class captures exception information generated - by the Zlib library. - - - - - This ctor collects a message attached to the exception. - - the message for the exception. - - - - Performs an unsigned bitwise right shift with the specified number - - Number to operate on - Ammount of bits to shift - The resulting number from the shift operation - - - - Reads a number of characters from the current source TextReader and writes - the data to the target array at the specified index. - - - The source TextReader to read from - Contains the array of characteres read from the source TextReader. - The starting index of the target array. - The maximum number of characters to read from the source TextReader. - - - The number of characters read. The number will be less than or equal to - count depending on the data available in the source TextReader. Returns -1 - if the end of the stream is reached. - - - - - Computes an Adler-32 checksum. - - - The Adler checksum is similar to a CRC checksum, but faster to compute, though less - reliable. It is used in producing RFC1950 compressed streams. The Adler checksum - is a required part of the "ZLIB" standard. Applications will almost never need to - use this class directly. - - - - - - - Calculates the Adler32 checksum. - - - - This is used within ZLIB. You probably don't need to use this directly. - - - - To compute an Adler32 checksum on a byte array: - - var adler = Adler.Adler32(0, null, 0, 0); - adler = Adler.Adler32(adler, buffer, index, length); - - - - - - Map from a distance to a distance code. - - - No side effects. _dist_code[256] and _dist_code[257] are never used. - - - - - A class for compressing and decompressing GZIP streams. - - - - - The GZipStream is a Decorator on a - . It adds GZIP compression or decompression to any - stream. - - - - Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the - Ionic.Zlib.GZipStream can compress while writing, or decompress while - reading, but not vice versa. The compression method used is GZIP, which is - documented in IETF RFC - 1952, "GZIP file format specification version 4.3". - - - A GZipStream can be used to decompress data (through Read()) or - to compress data (through Write()), but not both. - - - - If you wish to use the GZipStream to compress data, you must wrap it - around a write-able stream. As you call Write() on the GZipStream, the - data will be compressed into the GZIP format. If you want to decompress data, - you must wrap the GZipStream around a readable stream that contains an - IETF RFC 1952-compliant stream. The data will be decompressed as you call - Read() on the GZipStream. - - - - Though the GZIP format allows data from multiple files to be concatenated - together, this stream handles only a single segment of GZIP format, typically - representing a single file. - - - - - - - - The comment on the GZIP stream. - - - - - The GZIP format allows for each file to optionally have an associated - comment stored with the file. The comment is encoded with the ISO-8859-1 - code page. To include a comment in a GZIP stream you create, set this - property before calling Write() for the first time on the - GZipStream. - - - - When using GZipStream to decompress, you can retrieve this property - after the first call to Read(). If no comment has been set in the - GZIP bytestream, the Comment property will return null - (Nothing in VB). - - - - - - The FileName for the GZIP stream. - - - - - - The GZIP format optionally allows each file to have an associated - filename. When compressing data (through Write()), set this - FileName before calling Write() the first time on the GZipStream. - The actual filename is encoded into the GZIP bytestream with the - ISO-8859-1 code page, according to RFC 1952. It is the application's - responsibility to insure that the FileName can be encoded and decoded - correctly with this code page. - - - - When decompressing (through Read()), you can retrieve this value - any time after the first Read(). In the case where there was no filename - encoded into the GZIP bytestream, the property will return null (Nothing - in VB). - - - - - - The last modified time for the GZIP stream. - - - - GZIP allows the storage of a last modified time with each GZIP entry. - When compressing data, you can set this before the first call to - Write(). When decompressing, you can retrieve this value any time - after the first call to Read(). - - - - - The CRC on the GZIP stream. - - - This is used for internal error checking. You probably don't need to look at this property. - - - - - Create a GZipStream using the specified CompressionMode. - - - - - When mode is CompressionMode.Compress, the GZipStream will use the - default compression level. - - - - As noted in the class documentation, the CompressionMode (Compress - or Decompress) also establishes the "direction" of the stream. A - GZipStream with CompressionMode.Compress works only through - Write(). A GZipStream with - CompressionMode.Decompress works only through Read(). - - - - - - This example shows how to use a GZipStream to compress data. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(outputFile)) - { - using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Dim outputFile As String = (fileToCompress & ".compressed") - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(outputFile) - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - - This example shows how to use a GZipStream to uncompress a file. - - private void GunZipFile(string filename) - { - if (!filename.EndsWith(".gz)) - throw new ArgumentException("filename"); - var DecompressedFile = filename.Substring(0,filename.Length-3); - byte[] working = new byte[WORKING_BUFFER_SIZE]; - int n= 1; - using (System.IO.Stream input = System.IO.File.OpenRead(filename)) - { - using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) - { - using (var output = System.IO.File.Create(DecompressedFile)) - { - while (n !=0) - { - n= decompressor.Read(working, 0, working.Length); - if (n > 0) - { - output.Write(working, 0, n); - } - } - } - } - } - } - - - - Private Sub GunZipFile(ByVal filename as String) - If Not (filename.EndsWith(".gz)) Then - Throw New ArgumentException("filename") - End If - Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) - Dim working(WORKING_BUFFER_SIZE) as Byte - Dim n As Integer = 1 - Using input As Stream = File.OpenRead(filename) - Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) - Using output As Stream = File.Create(UncompressedFile) - Do - n= decompressor.Read(working, 0, working.Length) - If n > 0 Then - output.Write(working, 0, n) - End IF - Loop While (n > 0) - End Using - End Using - End Using - End Sub - - - - The stream which will be read or written. - Indicates whether the GZipStream will compress or decompress. - - - - Create a GZipStream using the specified CompressionMode and - the specified CompressionLevel. - - - - - The CompressionMode (Compress or Decompress) also establishes the - "direction" of the stream. A GZipStream with - CompressionMode.Compress works only through Write(). A - GZipStream with CompressionMode.Decompress works only - through Read(). - - - - - - - This example shows how to use a GZipStream to compress a file into a .gz file. - - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".gz")) - { - using (Stream compressor = new GZipStream(raw, - CompressionMode.Compress, - CompressionLevel.BestCompression)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".gz") - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream to be read or written while deflating or inflating. - Indicates whether the GZipStream will compress or decompress. - A tuning knob to trade speed for effectiveness. - - - - Create a GZipStream using the specified CompressionMode, and - explicitly specify whether the stream should be left open after Deflation - or Inflation. - - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - memory stream that will be re-read after compressed data has been written - to it. Specify true for the parameter to leave - the stream open. - - - - The (Compress or Decompress) also - establishes the "direction" of the stream. A GZipStream with - CompressionMode.Compress works only through Write(). A GZipStream - with CompressionMode.Decompress works only through Read(). - - - - The GZipStream will use the default compression level. If you want - to specify the compression level, see . - - - - See the other overloads of this constructor for example code. - - - - - - The stream which will be read or written. This is called the "captive" - stream in other places in this documentation. - - - Indicates whether the GZipStream will compress or decompress. - - - - true if the application would like the base stream to remain open after - inflation/deflation. - - - - - Create a GZipStream using the specified CompressionMode and the - specified CompressionLevel, and explicitly specify whether the - stream should be left open after Deflation or Inflation. - - - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - memory stream that will be re-read after compressed data has been written - to it. Specify true for the parameter to - leave the stream open. - - - - As noted in the class documentation, the CompressionMode (Compress - or Decompress) also establishes the "direction" of the stream. A - GZipStream with CompressionMode.Compress works only through - Write(). A GZipStream with CompressionMode.Decompress works only - through Read(). - - - - - - This example shows how to use a GZipStream to compress data. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(outputFile)) - { - using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Dim outputFile As String = (fileToCompress & ".compressed") - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(outputFile) - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream which will be read or written. - Indicates whether the GZipStream will compress or decompress. - true if the application would like the stream to remain open after inflation/deflation. - A tuning knob to trade speed for effectiveness. - - - - This property sets the flush behavior on the stream. - - - - - The size of the working buffer for the compression codec. - - - - - The working buffer is used for all stream operations. The default size is - 1024 bytes. The minimum size is 128 bytes. You may get better performance - with a larger buffer. Then again, you might not. You would have to test - it. - - - - Set this before the first call to Read() or Write() on the - stream. If you try to set it afterwards, it will throw. - - - - - Returns the total number of bytes input so far. - - - Returns the total number of bytes output so far. - - - - Dispose the stream. - - - - This may or may not result in a Close() call on the captive - stream. See the constructors that have a leaveOpen parameter - for more information. - - - This method may be invoked in two distinct scenarios. If disposing - == true, the method has been called directly or indirectly by a - user's code, for example via the internal Dispose() method. In this - case, both managed and unmanaged resources can be referenced and - disposed. If disposing == false, the method has been called by the - runtime from inside the object finalizer and this method should not - reference other objects; in that case only unmanaged resources must - be referenced or disposed. - - - - indicates whether the Dispose method was invoked by user code. - - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the total bytes - written out, if used in writing, or the total bytes read in, if used in - reading. The count may refer to compressed bytes or uncompressed bytes, - depending on how you've used the stream. - - - - - Read and decompress data from the source stream. - - - - With a GZipStream, decompression is done through reading. - - - - - byte[] working = new byte[WORKING_BUFFER_SIZE]; - using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) - { - using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) - { - using (var output = System.IO.File.Create(_DecompressedFile)) - { - int n; - while ((n= decompressor.Read(working, 0, working.Length)) !=0) - { - output.Write(working, 0, n); - } - } - } - } - - - The buffer into which the decompressed data should be placed. - the offset within that data array to put the first byte read. - the number of bytes to read. - the number of bytes actually read - - - - Calling this method always throws a . - - irrelevant; it will always throw! - irrelevant; it will always throw! - irrelevant! - - - - Calling this method always throws a . - - irrelevant; this method will always throw! - - - - Write data to the stream. - - - - - If you wish to use the GZipStream to compress data while writing, - you can create a GZipStream with CompressionMode.Compress, and a - writable output stream. Then call Write() on that GZipStream, - providing uncompressed data as input. The data sent to the output stream - will be the compressed form of the data written. - - - - A GZipStream can be used for Read() or Write(), but not - both. Writing implies compression. Reading implies decompression. - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Compress a string into a byte array using GZip. - - - - Uncompress it with . - - - - - - - A string to compress. The string will first be encoded - using UTF8, then compressed. - - - The string in compressed form - - - - Compress a byte array into a new byte array using GZip. - - - - Uncompress it with . - - - - - - - A buffer to compress. - - - The data in compressed form - - - - Uncompress a GZip'ed byte array into a single string. - - - - - - - A buffer containing GZIP-compressed data. - - - The uncompressed string - - - - Uncompress a GZip'ed byte array into a byte array. - - - - - - - A buffer containing data that has been compressed with GZip. - - - The data in uncompressed form - - - - Computes a CRC-32. The CRC-32 algorithm is parameterized - you - can set the polynomial and enable or disable bit - reversal. This can be used for GZIP, BZip2, or ZIP. - - - This type is used internally by DotNetZip; it is generally not used - directly by applications wishing to create, read, or manipulate zip - archive files. - - - - - Indicates the total number of bytes applied to the CRC. - - - - - Indicates the current CRC for all blocks slurped in. - - - - - Returns the CRC32 for the specified stream. - - The stream over which to calculate the CRC32 - the CRC32 calculation - - - - Returns the CRC32 for the specified stream, and writes the input into the - output stream. - - The stream over which to calculate the CRC32 - The stream into which to deflate the input - the CRC32 calculation - - - - Get the CRC32 for the given (word,byte) combo. This is a - computation defined by PKzip for PKZIP 2.0 (weak) encryption. - - The word to start with. - The byte to combine it with. - The CRC-ized result. - - - - Update the value for the running CRC32 using the given block of bytes. - This is useful when using the CRC32() class in a Stream. - - block of bytes to slurp - starting point in the block - how many bytes within the block to slurp - - - - Process one byte in the CRC. - - the byte to include into the CRC . - - - - Process a run of N identical bytes into the CRC. - - - - This method serves as an optimization for updating the CRC when a - run of identical bytes is found. Rather than passing in a buffer of - length n, containing all identical bytes b, this method accepts the - byte value and the length of the (virtual) buffer - the length of - the run. - - - the byte to include into the CRC. - the number of times that byte should be repeated. - - - - Combines the given CRC32 value with the current running total. - - - This is useful when using a divide-and-conquer approach to - calculating a CRC. Multiple threads can each calculate a - CRC32 on a segment of the data, and then combine the - individual CRC32 values at the end. - - the crc value to be combined with this one - the length of data the CRC value was calculated on - - - - Create an instance of the CRC32 class using the default settings: no - bit reversal, and a polynomial of 0xEDB88320. - - - - - Create an instance of the CRC32 class, specifying whether to reverse - data bits or not. - - - specify true if the instance should reverse data bits. - - - - In the CRC-32 used by BZip2, the bits are reversed. Therefore if you - want a CRC32 with compatibility with BZip2, you should pass true - here. In the CRC-32 used by GZIP and PKZIP, the bits are not - reversed; Therefore if you want a CRC32 with compatibility with - those, you should pass false. - - - - - - Create an instance of the CRC32 class, specifying the polynomial and - whether to reverse data bits or not. - - - The polynomial to use for the CRC, expressed in the reversed (LSB) - format: the highest ordered bit in the polynomial value is the - coefficient of the 0th power; the second-highest order bit is the - coefficient of the 1 power, and so on. Expressed this way, the - polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. - - - specify true if the instance should reverse data bits. - - - - - In the CRC-32 used by BZip2, the bits are reversed. Therefore if you - want a CRC32 with compatibility with BZip2, you should pass true - here for the reverseBits parameter. In the CRC-32 used by - GZIP and PKZIP, the bits are not reversed; Therefore if you want a - CRC32 with compatibility with those, you should pass false for the - reverseBits parameter. - - - - - - Reset the CRC-32 class - clear the CRC "remainder register." - - - - Use this when employing a single instance of this class to compute - multiple, distinct CRCs on multiple, distinct data blocks. - - - - - - A Stream that calculates a CRC32 (a checksum) on all bytes read, - or on all bytes written. - - - - - This class can be used to verify the CRC of a ZipEntry when - reading from a stream, or to calculate a CRC when writing to a - stream. The stream should be used to either read, or write, but - not both. If you intermix reads and writes, the results are not - defined. - - - - This class is intended primarily for use internally by the - DotNetZip library. - - - - - - The default constructor. - - - - Instances returned from this constructor will leave the underlying - stream open upon Close(). The stream uses the default CRC32 - algorithm, which implies a polynomial of 0xEDB88320. - - - The underlying stream - - - - The constructor allows the caller to specify how to handle the - underlying stream at close. - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - The underlying stream - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - - - - A constructor allowing the specification of the length of the stream - to read. - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - Instances returned from this constructor will leave the underlying - stream open upon Close(). - - - The underlying stream - The length of the stream to slurp - - - - A constructor allowing the specification of the length of the stream - to read, as well as whether to keep the underlying stream open upon - Close(). - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - The underlying stream - The length of the stream to slurp - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - - - - A constructor allowing the specification of the length of the stream - to read, as well as whether to keep the underlying stream open upon - Close(), and the CRC32 instance to use. - - - - The stream uses the specified CRC32 instance, which allows the - application to specify how the CRC gets calculated. - - - The underlying stream - The length of the stream to slurp - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - the CRC32 instance to use to calculate the CRC32 - - - - Gets the total number of bytes run through the CRC32 calculator. - - - - This is either the total number of bytes read, or the total number of - bytes written, depending on the direction of this stream. - - - - - Provides the current CRC for all blocks slurped in. - - - - The running total of the CRC is kept as data is written or read - through the stream. read this property after all reads or writes to - get an accurate CRC for the entire stream. - - - - - - Indicates whether the underlying stream will be left open when the - CrcCalculatorStream is Closed. - - - - Set this at any point before calling . - - - - - - Read from the stream - - the buffer to read - the offset at which to start - the number of bytes to read - the number of bytes actually read - - - - Write to the stream. - - the buffer from which to write - the offset at which to start writing - the number of bytes to write - - - - Indicates whether the stream supports reading. - - - - - Indicates whether the stream supports seeking. - - - - Always returns false. - - - - - - Indicates whether the stream supports writing. - - - - - Flush the stream. - - - - - Returns the length of the underlying stream. - - - - - The getter for this property returns the total bytes read. - If you use the setter, it will throw - . - - - - - Seeking is not supported on this stream. This method always throws - - - N/A - N/A - N/A - - - - This method always throws - - - N/A - - - - A custom encoding class that provides encoding capabilities for the - 'Western European (ISO)' encoding under Silverlight.
    - This class was generated by a tool. For more information, visit - http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator -
    -
    - - - Gets the name registered with the - Internet Assigned Numbers Authority (IANA) for the current encoding. - - - The IANA name for the current . - - - - - A character that can be set in order to make the encoding class - more fault tolerant. If this property is set, the encoding class will - use this property instead of throwing an exception if an unsupported - byte value is being passed for decoding. - - - - - A byte value that corresponds to the . - It is used in encoding scenarios in case an unsupported character is - being passed for encoding. - - - - - Encodes a set of characters from the specified character array into the specified byte array. - - - The actual number of bytes written into . - - The character array containing the set of characters to encode. - The index of the first character to encode. - The number of characters to encode. - The byte array to contain the resulting sequence of bytes. - The index at which to start writing the resulting sequence of bytes. - - - - - Decodes a sequence of bytes from the specified byte array into the specified character array. - - - The actual number of characters written into . - - The byte array containing the sequence of bytes to decode. - The index of the first byte to decode. - The number of bytes to decode. - The character array to contain the resulting set of characters. - The index at which to start writing the resulting set of characters. - - - - - Calculates the number of bytes produced by encoding a set of characters - from the specified character array. - - - The number of bytes produced by encoding the specified characters. This class - always returns the value of . - - - - - Calculates the number of characters produced by decoding a sequence - of bytes from the specified byte array. - - - The number of characters produced by decoding the specified sequence of bytes. This class - always returns the value of . - - - - - Calculates the maximum number of bytes produced by encoding the specified number of characters. - - - The maximum number of bytes produced by encoding the specified number of characters. This - class always returns the value of . - - The number of characters to encode. - - - - - Calculates the maximum number of characters produced by decoding the specified number of bytes. - - - The maximum number of characters produced by decoding the specified number of bytes. This class - always returns the value of . - - The number of bytes to decode. - - - - Gets the number of characters that are supported by this encoding. - This property returns a maximum value of 256, as the encoding class - only supports single byte encodings (1 byte == 256 possible values). - - - - - This table contains characters in an array. The index within the - array corresponds to the encoding's mapping of bytes to characters - (e.g. if a byte value of 5 is used to encode the character 'x', this - character will be stored at the array index 5. - - - - - This dictionary is used to resolve byte values for a given character. - - - - - Get a buffer that is at least as big as size. - - - - - Return the given buffer to the pool. - - - - - - Utility class that returns information about the underlying platform - - - - - Underlying game platform type - - - - - Graphics backend - - - - - Type of the underlying game platform. - - - - - MonoGame Android platform. - - - - - MonoGame iOS platform. - - - - - MonoGame tvOS platform. - - - - - MonoGame cross platform desktop OpenGL platform. - - - - - MonoGame Win32 Windows platform. - - - - - MonoGame Windows universal platform. - - - - - MonoGame WebGL platform. - - - - - MonoGame PSVita platform. - - - - - MonoGame Xbox One platform. - - - - - MonoGame PlayStation 4 platform. - - - - - MonoGame Nintendo Switch platform. - - - - - MonoGame Google Stadia platform. - - - - - Type of the underlying graphics backend. - - - - - Represents the Microsoft DirectX graphics backend. - - - - - Represents the OpenGL graphics backend. - - - - - Represents the Vulkan graphics backend. - - - - - Represents the Apple Metal graphics backend. - - - - - This code had been borrowed from here: https://github.com/MachineCognitis/C.math.NET - - - - - - - - - - - - - - - Should be from 1 to 100 - - - - - - - - - - - Should be from 1 to 100 - - - diff --git a/Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.DXGI.dll b/Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.DXGI.dll deleted file mode 100644 index 9f30efd380c706160f83c56a6df58843ec800818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140288 zcmeF)d3+Sby72MpnPieoHj+RR7D?DbfUsjkL_xub0)mPW6$J!>C=vyXA`FXQ1ZDGx zQQUBiiVH3fcR|ItiwXu26ch}2j*4r<!8jd@1?)&KhA;h8J5Q*xe5F>4dvZS{;b7BzN4{DN{~HH7J^VythFD(n^8KC9 z4z6vN@w7^`;*DwMF-HE;|K2-V(zzss{&rd>X}$Ho;J;?BOqBocTkDbS>VJ(fjrf1~ zUnjH|Gqa@JVVdqQ3;CRh?tjL3Op?Su_4b$+?&*J(&J9(aobeJ5axK$k`h+W|OT4A2 ztXJl-t&(*Amut+JE>ovX9j6nuZoxXXh|Jhu=5(1lVRETt)Vdm}v(YTA8{|7dXS@G< zT-#Ot)4F*~tl1(hmiv@t5||ohgiN0s4iA}XmcPd`zK$lNo7eP~T$V9u(*(cY<13X_ z`O~d@siSZ9K+DABOV9J?%dYcxPKql?@WqwJO1jfWzEas*e@89DFJ;JLX&!I7$(N~8 zG-YQ5r@t?Ao9D+#{!oTfJmHC6XCW;sQ#;CL8N_l`9pp*QXUt zlnP5F{LVIYmNKN0X_>M;huDG#Z(s{5r$cG;<+M{NGHg=|{$ zb4CvBAlsIfpDOcXe6IDx`=)&(<#ngB^dRmNA$5d;VZ?jX$oCH^a(gJpYnY*;@TYB=- zq{_0-W7to!?P=bnll;CV?PX<&9&em4KU?Y_CwULomQqMWTS`08ma^}iwzS(=+K1_K zOfy}}Y_7{XZ8Jpvl`}^~dxu-b-Q0f3MRO;5>$SJ;S8eZL6J>NuFmt3_sbgAdOnzh8 z-hy~ZG?9d#U6trfw%aOUb4;w0rE`+K7iA0lophI{Tfx2V-a+ZXY9wXuN=}K5bMN}N zX}x4mQ56rJS^HX?S*F`6i)C*1dkgwXYw!BAh1A*F_GhX;GpSQsU%c!uop8=bZ~UzV zexWo=YY|J~JL9uPCdJEQJ!)dwWyBQt(qfiQ>KrSp@05@hletWHoU=K;gw3(hI)OBS z({{2{u$icv^hYD@k`~i0sUSAqE;q4Le7s$3qFtD`Al_Rly&_nnd~Kt+zgU$&b62AD zUD<8+F&}4+mUVGnu#YNAiNV8HT2CELF&s~wBg+YHu;10|rGoYb*I%}$EGuoB=5;nL zE_Bc&x)u-hwTO+-b6ZPUUe6D%Qy(WesbXvG;`wq8?$l9_`xuUUX|=Rmy=v~t(%qeV zP#Pf7GrO6zO1kBnCWnGQKVKG1O84Z;G2$=q%|1d~%ojH@^K@svtW%qiGJ84e_vYtl z?sU7TOuHB6>4D|V&y_iTdxp2Pl?1+g<{a*LmSvpd*=LTFb!Z#KIBg{7mQXXfkI2xe zC8CwIo`-Fx4(@i+I!VK^ef7`RoX0s|$5E$n-;o-{#L{z|o!`{8^O{Q4IZ;IJd!HE~ z+Z9GpYs|$ z-lS6ouf@7(T!G}(OK<%$e1G#=EMgOjN1v`&@cH@k{i=Q;b# zqPxqZCn|sNY&Tk``0}-0_PNQc*Eo}_ZKh+EV`P4~S?H_U7v*%6Hcid|j8kPn-6+jk zzaME|>?E_bFBZ7gp?y)#7s0-$i~jAtNS~AC>z`+OOCdTgl(A7?O=|lVNj^Q#N3^f2 zX_H*X=OG7z6Qnd}AUNCZ1WpgkNp>wRM`jvhaM@0Gn;$1jdpmnGJ6TzgO+Qv<1e;#Z zpVU9fc4-05b{((DdUZ%?SO>pZCFRH|LdQ+gT=uw0#+t!#Q>-)4h}xO$Yk9(EXW0e= zs+8D*gp}9@C*1HjD<{=eCFz0ok;y z4KD$%{oKe^BRMD9HPT};rQSg)b|>=O(TN|1avC=_=;$ z);Y_yOt{YRW=cdK`ipaQY(adK?i;!}%*l4GM9!72&Jq)O29J7<9j1r%U!7y+dS#y@ z^w!(M{dn+}vu|>>{1`np?7ZHFndSNs%B<&*)p~-E{PoX`S}FUUInEp<^R;h> z`edpnJTT00518Zx?_5>g9a8≈Jb*v1N{XxO9jeo9D?NAysNRPAc1awj~dwJS()` z$9b}PBzSVB{prd4)9RSnvGr_epBT>#IL}__I$; z)x;rQGIVb+Pp7$Gono@2;7nat>)A5uaMs&;wq$bBWuBa(vvX1k<2*U%pWXb(q%3dK zkJ`h&5L?&<UP zt4Q<2M&@ZHv!|XJ&U2FH@kQpjO!KS?=NY7V;v(~`(>z~>^PH@C{E>P7&^$+ZLiIUC z^CU**IZI|wy*r#|u;xjM%=3ZfY2^)-Geq;`M&>y~W>38-oM))!X%(60Ma}a~IM1n? zr*&kWxERSZRB-m!FwN5@GS3Xn^IAC1aLv;;GS4rXr)O-aoYOQS% z^K^>L(^+Ou9UabdmgXsl%ristJRQz6QuB0<%(Gqd91$N{*V&q?5Q)uc`lGV zdLGrWM}nNPG+lq}F+r#E{KtNlEcb&vOTJL1>jHY8uJ>sLGF_jokC9WdJw|m6;N3UX z{@}1gAFhv<+jyG&pq<8t+R4>Q?)$fhejry^`sD)+`ax^CC`-3* zaGcDjS05RqP@ij@`slXEzTy}QzV{W(Q|`($-^n9mg+-dwA*TU)IO?&Ru6`weH8OGS+EO zW$Jvi)LF+?awdgIa^`Nd%j_;OHPyZX*BR1N5oU*U2;G;)* zlQY<5-4}~vLroR!Jx+NRnikvOJx(n)_<${H6NbA^)Kx`3xYKsfb4J5G0mL z$2HO3zX%rKzQBchap)4su|!{$y3{`oS2}&T-m&by1oo4r;#ekclrnA)9S8Adn#})i zJ`Pf1f*b0-M)nWw-q1T08QtP}kJa7Y`kc4Haqt%b6jwkoZ z1_sL-=G3eHG5MHN)?c58-NTm9r6JUPwZ4aHrzb+|NH8+y``hoE(D(nw8zt@ymR{ss zwCwju?6(k;p{Mlj-P|rz z(-dF5w?$`2gSkIcB=tL7`>qSMZ>;Grd0poZ{qT$oBO@-&QTk-VGx_1x_l&bX&GWpb zWt}?q`R`h{_QkWMOnDC>_&)ZZO{BT3;LuY)Ar%^Yy4&=`P@Br$uh*!~$D=}LaIJHU zk^6dAdpS+x9^C5@RPPfVhijXcTy696|47@!^Epl(i>Jic%@UiK5^Nc{x#5kGsI3!v zTd3a1{6B4nLoVk&RYYmOLoVmOsfn`O;o800)$VWp548K?*8P@i-S7Snt($d7U#)-s ze$Tb;4_xc+9?`GuXEIT)H4P7ZSx&c=V?4_GK6KVs|6cxMnXV@SJrBq;G1oB_yu`UX zMNxx;N|);@%gL+3=U&|1B2;1510;QKZ;&i|k}T_OFwSlp9%sjG4i4|!x4kVxm2usz zYJGz5gCFYNIr`^u>W@QWqkbO9*%vwP8{g2jg|4dFp7!T$UFY=RHsrW(f}=f1(D!Jv zrCp?L(meS!vWMiOwsv#KCvCS%9M`eVGjp6g4()t|$1`oGObKWtPY(5;{JnCy%-<$c zWx{xwz{frO)1{ux0~*Wzz92N~Xt~Tp%rY0*OBKit)!d%h(xCoQ89T_6q&|G!#qaS3 zIA{qDg;lyi`b_4aBJx{h2;$olFZlV63_aman=?tdqT`kyoI z3?4_FrEJ%J4|W;%!3N=1EB`kwRQsyE?5R$kgP~>Z&!Nj0lxLDxMtLR~{TP=c?+WLUCE35Sw6sggB{Fd_v|jc~I&Jekv!%^{mR>@~6qd!8bP}A5}^Dai&<> zvbSWB%dD0b`RFU^=P{z~qGpF&iCzaI&y~UD-Dib{olwsSCq(v*Xyd%7=ZVupwF%$k z)VqIhKj-3pT+fAa#x`fjvie@f#ZmTO#HY&q!IkKH9Tzz}@QH{WsAbCe+Kh0@oaE$s zRC3v^;Cf!|ek$cETejd~ccH<0y31@(mit+XtE@kpT;``JjSwyw(q<+-j?CAtyLU3B>Qk^5OjxD?mb&X_KqR8OoozfO;2-DVkX zn=@tK$ai4$4VK3FKkLD~M2~|+UuJjtvW85JW2$~#gL4k&7D?AXA9|!k?Q?Ftk^ZO0 zRrF)FOiGV-%;van(+_>n);ngkwEw~}>;7cf;f~q=Qh#uN>MY#y;X_aMpU;euHfbbn z67hM@XuZsJNJRY{TK$jLHkXE%`^exePjJ7U<=(F`lE=41+seIPb!uq8vj3v&SNRA9 z`?cQr!~Jo$HnOUYJv{k|k~LpWCR~&C`oywP%1n03)P1SvoRLz1eQ?>&nX{w}_j6`f zlej+t7k&WcdhbuyOZidO+bFc&c+N|5{~20u)Kk4{#qJ?PsCT-?r@CIskFws3(0c9f z4V@$FwfjLzOoMBhY<%eWh}J)1Vk17&?Y=WkmvXt(>E}o5-5J;GCLGJuD@uJcL-n<< z_2+6kNq=rC(}Uv{-EX60x?U@;k}5Yi2fOdDLq~;PD`w~+E2V9f(t^F#zNa|!`zr4H zicnz@gYd(RhjiQB?+u;jY)?zq_UJV_QKm};XKDqVkGzMz^X4AAoG)TxvYfqJgLmp)_pWjeO2S=N_Ec=WU6m)*ig+@l>ya^#87=E=_&q8H`=QTG$88S3 zd*L2LhSn&pmh8GJ1j`;1wd{awQexDy-J_R7mmP0Tk$UU+N}prQk0O-ZT4rZmR@zzHrHA}0r;vuK-?e-Wa{NG|za^-L+y@5wKeXy&c*Azt51 zdAjUB=c25vX>x({pQhvFh|jspZAZk1;!B6>>iAl2N3N-~yVR$CKRj0Q+55w1^tqjm z1)VXEs|ULK`b5cLU(H>^8@5Bn>_+ZnwC~C7mEHH``Hy_%i7&o7lN{MjT)9tQdH`|BnYdc4!*VTRw1?0W*XP4d^@<^iE?j^o(l zK07h^JsLhv9D0Twac_C(p}9HT`Odwr(;MR{?XK&Pbsz3nkk9o-919oO+m$b$RgHKa zBKN!;Bl5Y@i0Q#|u6$0E=@rh73wCe!adMQD!CsR}>9tj2jcDG?yG3{12s{e z14R9^*Hpn(tW-5hZc4Xk2v1s zd02z%hU=g`#M6d)qdL8Dju_R2uh-7FQ%+3{$DKJ*pElUPwQ%@ti~d-_y=}qcHCL+U zjY;+L9R)d>>YejEa`Z=h5r}i1^F?$$SIB*bxkOq|uP^d>YxmbOr7W+J!&$!vrSqkK z$fwA|U#Se;F!qs?@+op&X`C;gM5hj3%4NUHNKroL&QE;EUecfN;CSb_ma>D}ku3A{ zcR2JNVE47J)T!G1oH}1vZ+e_FeUdX>o(E6XB7@5X&l8u_TkbMvxl(7k zo|C5Nf>OuevQwQr^1TA;qIoV2<%t;AE{uB2{Eg>4^^UzoQOj{ZZjnX}4Yk9k9;x%; zjve>2l;{QMxu#IIUB{zQzmMg9auPbd)Ia{~e>Y!_|A>z}xu25AmDSl0XLw25|JAb# z-Oj%_#@){yLL1xQhe8fi}agUC&_W|m*6@LB$q$Y*EuO&ZaCXYi>1YMN(yGwK~hqj%!{?( zR8Na#9?K1pdC9Re7fKoJGUO}YX>sySgD-PehOd)9EiQAJmX+a4kN>mDJUO1yr7}aGy2jga z{>7Xb^c=xCO}4xKxvoreMETt7T$!%zsLRfw6n>j$o+g9mA{nf6{+sXQ<$a#3?aX@Y zc8TmW!QoDh`&me6yc6!W(%=5-v&8NZll#Dre1k@h%R}_r9M?Bt|AT&;>smbeK~wLX z(aN=eJRjHZ(;x2K*xHpndilD%>)7rV_1JFnm&Hh1+tXl|1_UMVHZXChPL3i_wW5ghrc={(mjA*IC0 z$EFii_lKwK&rR!+JvOKKqJ2`hsqCrXCxz{iXu@Xa-K?QG?OoNB=bWMOvimoY63s-Z z=T$OSR#5*(k+k&C2P7Hi#%-2uNl1xn@Tt?_h(GE&BQByD-4g4+zh&1v#mAL2B`)HE z8ofZ*^BV0x^phz4XSvgV^xmhJ%nx7p>R-3>U2WCix=kN#ZFk`Y=e!$3>#(1R&6Kv( zvFFV)J$TN$#p$zpoVlKJNYgibRv7&<9B~Qd8d?y!JGF>}25+1w zqY|xYKY?R2@O|FF~7 zYWhz*y-?E!?ero|%QwBX%?-L{lPY_47Ksi zk|SDwy0rkC33W}04Rr<-efxt*3@PK*iMV5g7J^grx$ zOHJQsr*kyD!cOOE`X)OqU#X4>R7l!s``1EkuXStC_PQbU+g>w9YkS?AfNqzxlWt8w zw@cExH38i&N$b`Gbh{+2TNBXjlC*A3K(|ZMx-|jaE=lXw1a!M3ty>e&?UJ-^O+dFx z(z-PP-7eQYd8pw&=^{Cz?UU9r-QFjUNh;7rkbSa7({1hadCZO9TY2BKDZkMEWYXZ7mlGd#W=ypk3w)bfclWWDuPju)VUps$5r#k1Y$L#$V zW8|c%zdQ>`rIOZF1$3p7)>Q>`rS>YMeZs5#%k>4@rI~D_++@o2v?fv8 zrBR+Id&!Y@o9L8=`L;I5r&Ai{`?x_qozgJhwg&lhisqAR=X1e*@w3!Z#v<~$)3vm% zR#DpaGs#+STbsGs)sw$2lsm~gYnS9sc18yYcFzpvmiMWXJo#0j+!@lUUr6?hSb2wy zKAaXCxkQHiYH5b->!-uZ_`I|B=rVD^+wwH0{|DES5vMo#(uZm#Ti_Ex(t9<%-A?b* z^bR}ym8L%x+{drJ|1_Wd^-r18u5((RC#TVpLVJhlBx$%{f4B4fi+p;V-y_Qgv+7i* zjW@^!FxI<3<}aX)pJ$u2RB7X{C2PGlmfzR0M^f5(J^3$$vP&cXF4^lfGHZ60(1v!7 z$>93zRY*DE)gEqr_9|p=g;)F6>kIa~aQodUZ`j%GmlSLio#eD%INz#<`E-)xlm1y9 zY&-e9gwu8}hZ;lL?k>q$e_N6w+U}K5c4@muBzwJW$q8n+8&3Caa9wus(r)2Z9&TNB z@zQSLRUUp_4cqLQP+Rm5wwX?{+v4qDTgU?j`+AZ8dT8UMEuM|i7X4jqK_3h*YiE~j z3l~v;+ai|Lx;`nN+5Syd;*n9Y{u3McL;p#U!La_D88~SFW8}$~9#hA8><{9~Vw$0& z?9UH^+aS*|oUwYcXzz#7k_z+?WIv42bWb}yR@1%g^aYwe(oT=lbfKLduj!*So&O;{RvRMGJ8ObW zN^(x&&Sj&e(_!_F*^|FHlsnlwYog@Nh;gnf!K+3ve}+^u*^|E|v_M9zch)3b!WX=- z1TPw)Mf8bqtSA4Y@G^1USr_Xv@xcpATD@vz#LF^q(gc@Cwm@G&(o-~jteq~^^l^f; zvyQ#4lJ+g9A81oH=!@Fu_4}e`jMf*m@dLUWq|a&N2Xr?`S{py0yFt?0_yOGwlGer# z=x&g-Hhw^NgWc%TQsEtO_%?OgUD_$UGybYgotBS_*dKq%#Pm6Yb_nmGppSwi%?>Y9;V`ViaFV%SMY{v8m zruAnAWnR_Po8?E1vX{tHa;sgYUBF^}N_bDZEV~Fh%9juB>)1V5?+U4u)ca=nr(@OB z2O`SQdEqiNOJo@*yf4q=oR7JTu!{}-uD?7NPSZ*9uSb80yxHuvx(c0tmQL?7?O(FJ zbD4ONCo6xXO!PGV)AzMZo%W58e>NpH?`H9QP;NhD{OFaUO3#%U)8)M!Pw5`nj?a?w z<@2R}{oOvl|Fe|Y@}Wz=en>?wwDRla9rgF|^uMeulPpioS|HjI{ z3GzynSBAXgeMmkl)JpzsFE4$br`I+ax9V?8@L6Q}Y>OEpFTK|2JSjQkLu@Ge%xomW~&+JRNV1lUK34 z&XkwDpTc{l$H>2ZJTzmFgvRpRr^TCYRZLAPhPyiSvs zZkN_Y>lLia7)iV9<1SN|2`+!Ur2EUOpS-lqj+2+Pzwyf}MPAAB(l(d=s-LIjb42O# zukHisIP3>)Pw5v%+pV*_^5xZ7Uh>&1z7wqbNxC@SYtw68YkB3#tDU@B$*Zlr+Q_Sm zymTLSkXI9Vb&{9vS3Pb9$}3l1Ir7qRV@r9pkeBX1-KWx7*>?lv->&kKC%61*7I|mF zXupY**SQljA6mPts>MhB=a#h@eeA`v@0by{;nxdpd|=Q|caI*C@XVyUZis*Mq6>1a z{rQMX2E<(P_02!-eCd{7UjOZ?FY^wh<^SBXa`ioJ_OEVq{)}~F-rtiqIQQz-9|i8d zZsKthnpLi7@pZzMdklT!~BMU+o9w^3weJ(*1F=ytK_V);=PO(Kj^KcFvZUwz=2& zS99t-BcA|y*KCp1AC&vyOw+=eC;MoWHP-T(Ibx={n<>we{)Tijk4_)%nI~)7>KP{a zzn3XKbHJ0~%`~TZwS*F{PI*tvG?Qbr-#E5-DV9VXMyjvE{2Gu`|d z-ezW@Uzd6mpTg&5y3c$E4t6I}tOZcv*x~!LOQNmHW?69LW9XC(Qyy{(b z#Cz&zpX=PCcI&b;ajUr3G})v5zVjYk>Y_c=1h-+Wm||kT940Nfl7@rD)XEiS8llPIaQ#Mw)ZD z6J=y-^oA1+C3@G1ZYSF8M7xMScA`3>?M{@QrKRk2qFzK_IMF1cy-su;(LbH&aiVXX z=u@Kaov2y1mie<2^(Q*uMCTIy7F>?VXW4C?(o~o8JJDdG6en6hn>BW#YnhkrM7I&O zaH6+}a-Ha@W?E)fC)z{Q%ZW~GuJigzG*^ZfOC;)UPSAPMUy@sBG{721WLl=nA2b_h zO&~f-qBkU(L^MUBcO<%m=%$=>^S(rv6Fn`_(GtxdN^g}eC6BYNBf4Lr9TF`k`lm#@ zBw9)Ii$r@Qx}B(?wOz`6L=Q>SR_3iH+AUGOM2`_2*~ZTK1kv+Ow2tUcCwhkHoVIq( zmx%6lqH3Zaoaim0_;%?g$r@+9M^qw_k?2D?dp9!ss?KBlC2=qKzfC84*p5h?Ye}k3>XoMntutsJq#fkmu`ezDejP9>hesP4xM0NL=VE zp1U&fdht%YUkp!Q$#nJpMD=YkICppAJu+oK{(-)vdqQ(tBt0y1yW$CW7G8p7xC|@t zdHfLf;z4YZtmSmV6Y)H}5^utX@HN~i25aa|IVj6E!947PCyT*6Gg7>9#d83d+`xmi!b79_#SS>f8xK<-&kvsg{`m~9*ZYoF^cQ(ukZk7G|~08!=rI9j>b#y3Y>>a@fLglAHgTE3ZKUf_!@4) zEw~Lo!`-+KzrpYDXN<|zx+P$W80^~}GW#bK&+UOL6E)pO(!sgjlz}qk;!HJwOYvlx z9?bJX<{+8-I=+u969TBVLBvazE)f6$9vv+nW zIZH!RMr2QyDGO4jho)SZJwv8kf-`YGF2Pm!6mG=#ab@C+PzgU}FO(8~L96M)(Ddx4 zOJsT;9xDcGHLB@9WcpoM>V5byj+g1dJd>L~E^}8Vs?#MMoPIEKolJ?zQdcIf3r+8x zyr&#I{hEb7y1fKc8e5$ zp=pbqu@Fzd;dm}i#4B)KsxGyR^u72vR^v|m9)HL9BQ$>t?13lY2rR*?@EW`WpTSDj z^#-KxZZtcHnH<3UV4 zTGx_;U9ley!_ioZb8s21!Zo-aH{nj)j|VZe59MQ5?1#f}G?wBVT!yP~4X(#cxD)r| zK}>qLoP*176|TYcxCwXS zemsb&$5K9a#eO&pM`J0@!DYA#*Wh~GggbFR9>hk+Y5A?N2M)jyI04J>TD%1x!sqa9 z+=1WVpP1TDOU}jacmke*z+==_~Af|Fe-hO2N5uE$Nd6ZhjmOy!8k!LHa3hv8@}#W}bP zSK%65kDG8O?#F|e$`O%+U9ley!_ioZb8s21!Zo-aH{nj)j|cJpzhiB`bJYCjN8C^u zm-3Ga2SrpQk;X!a22k>^|%Rl;(k1c|Gyr6kw;MdBk_p- zI@&zc2s5w0jxhK4lV?^YvK+m3|L>S{4%fA1xC+aTD&u{df>lxmx95SL}zwa5R?U99)L0a1E}H<3UX2c*()8*bj%{ zXe`A!xC~d}8eET?a3}7^gZTf}k@%k-LHqmZaW|Bs?;M;?19JQa2$4{8K`T?z}DCu`{OV?A1}dKcs<^V58*TTI@aKq_!D|h)U~8zE9{2- z@KihxC*w@K4p-uX_%v4IN4N)nL{E{fB@J`2D;|eKaTH#RSK%VO1s}jFti~Fw#X9tz zq-)8iFz)GybYOKLptV7?) zl#h8>h(%b8C0K^#Sb>#Th1FPtwOEI~Qz#$vun>!|7)!7W%drA0u?nlP25YeneS;|< z^RN($uoz3Q49l?sE3pczu?B0g4t+x?AM>yfi?A3=unfzw0xPi!tFZ=au?~GhDIfE& z5R0%FORx;fu>vcx3ahaOYq1V}r&2!VVIdY_F_vH%mSY80Vii_n4c1~E`i4)aV-40~9r}h-KIUN|7GW`#U>TNU1y*7eR$~p;VjcQUqkPQ6LM*~! zEWt7?#|o^(Dy+sDti?L?olg0fhlN;##aM!6SdJA~iB(vQHCT&v=sSb*F%Ju|2#c`< z%di|PuoA1V8f&l?>(DoX@-Yt!u?UN?1k11-E3gu)uo`Qy7VFS=Cgo!u7Ge<=V+odF zIaXjLR$(>PU@g|6ubA>N4-2sfi?IaDupBF}605KpYp@pU(03N)V;&Y_5f)yfi?A3=unfzw0xPi! ztFZ=au?~HsC?E5%5R0%FORx;fu>vcx3ahaOYq1V}=TSc9VIdY_F_vH%mSY80Vii_n z4c1~E`p&0(%)>$~!eT7JGAzdmti&p;#u}`}I`oaEe9Xf_EW%$~!eT7JGAzdmti&p;#u}`}I`mDXe9Xf_EW%(F;GPU@g|6?-I(#JS@Z_EXEQn!*Z;^O02?atif8WL*Eq2$2=^=A}q!d zEW>iFz)GybYOKLptV3TZh(%b8C0K^#Sb>#Th1FPtwOEI~>6DLoScpYfj3roxvcx3ahaOYq1V}S5iLaVIdY_F_vH%mSY80Vii_n z4c1~E`esl*=3yZgVKJ6q8J1%OR$>)aV-40~9r~`Ke9Xf_EW%yfi?A3=unfzw0xPi!tFZ=au@2+r zX!+UL0sG)!9EF$QY+QzS;S=}@ZpJN8>4YE>6Y(E){)d)!Zw@XXnlo zH{q9a7y7*Bz}(q~oa-~W^JdDrx?n#Xj$?5u&c_vaKUU%ExDEe>e_-m>T4pQki6`P& zI0PvL906~DsYF!@?7GY7ll06Y^X;taeV@4z+qGH%8%@fS>3sAV?CE_ghS zz=?PjF2TF-DXhkA_%$BH^hH``JM4{v@qD}t7vRmf8ehcsaW~ds!gX3&3+##~;F)+K z&cvm7H?GCk@e}+8&GlMZ2Ik?>I0Q%IRJ;an!H4lB`~dghFX&&aWgdauZ~zwLB%FoI z@E%-;Z{T+P7Of>(T4QXFeQ+p_!D(2IEAbIrk00WfcmNZZYMCvuI}XIN@FEQ0a=aI- z@J-x-`_Z#ZOKXDpcnqG3V{tlOi?`yVxB)j~E&hs0%eBlL?13lZNW2(l;|+KpK8Pw*QwcWP-Fn1@H>5FCwD@fy4ZAI6vP1KfkZpnsK?c?5RD0a%Qa za277ZdvG1Tf!pz0wC>W<8e@CxgF|r)PQ!9siI3oV{1Csy1DJTXme~@!<3KzMFTwyW z$9u5~-^3lbA3gVIX-zO6kHJ%MEKbL3@m72kH{fQh#a}V$UM({Rd*F#U5--Ntcmv*t zPvcwoDSn6E`?R!7?0|i77+!#v<3hX*AH$b%3+}~#WAgo4W-j)`B0L)>;~e}4-jC1V z+xQuNk1>^6S{8Q1V{tf+!!lfix8oXo1wX=l_#37?pk=ngUU(9ogO}i3yb&w$S$qd~ z;tv@6pq7@6o$xq34aegZcpct>kK?OYgJ0qAnEH^G*&2_;L3l1s!Fjj>AHe7EUEGB~ zqHnd9))Wh{AD)gA@JhTM@5Co?BW}fi;vd-PVJ))_7UIb`3QO^7ya^w~=kY!K9Dl;N zN3^tN*ctod8CZfda51jJC-F7>82^QTV%noxW?MW8Pr>u>Qk;(!_z=E;oA3+#8RH+* z(wbuzJRV2jM7#=@;9d9>R^vAO8V_Rn8ZEOO_Qt_@K3;|k@Mc_%FXH>S8|yIPaV@O{ zcEuC$OuP_h;!?aD*W&B=34Vj-2`w!H^YCaKf}?RNUW2#b!}t<@fP3&4^gpR(9)aC( z02bpUoQ2Eq9$bfS;CB2Lt*5lK#@HVF;7}Zc)36*@;v={oKg2Kb04A>0GFxJI9EfM( zMHs;4crRAro45n_qi3C#)&%qM7(5ln;&i+gZ^cJ(18&Az{1ua`w9FjrfhXcfyclQW z4R{|ujc?(n_#Jwm*3vSu1NOyXcmZCH3-LC53}41AxEKG8$C}* zAfAO6VE~uoy;y~B;tt%8o;S3#CYX=M;Hfwkr{lGFD?W-Fa5L88ubA|vmYIV+@I)Mm z7vpTa0q?`7@h$umzeDd^T3RM{z`i&PFTl%jA>M|M;mf!M_u_Au`nHzY29LtQI2xzn zwRjt@!B=rB{tFLc#yeVCdprh*;W)ekug6vR6uvHc&DZa&6c3>9T}@|*K9lpVev9Eq z9Q^JbGGz>|7cKKG>9mex@7_Vhv2z*5zfGccr#YwI^2kx@eBMO%?G-cRBVZzu`dqBb8r$~iPvHU-j8eXRs0Y? z$M5hUrhKUDIsyyu7(4~f#tZQZEXSMhK70ya!4Gg3?#Dkdd9$vi1$M$dcruQ}iCBi$ z;0nAKpTw8(ecXxP;vbl_Mc2|CJL1te2+zV2yc`$cjd%|}fg5lWeum%R@0j?JuB91v zz@zbGJR2wB3|xdO@gaN`-^6YB75<6|HCldC?0`q($#^zS!Wp;-SK>qXEWU}`@GJZk z6Sh)5cEF?YWIP)u;S5}aEAb(G7T?5e_!a(&2_I8FcEF?YWIP)u;S5}aEAb(G7T?5e z_!a&t{!g4Y{=3c(UUTd=J)4c#rY&$DPQuG^9xlO^ct1XYFXEe6gS+uN`~&@;XvtaF z7Q5qdI2cFb1e}UZ(_+n|F+m->P)=7N_Vt?7!~N@7TtC+D^(z|5T^E*i(M%%;bHl>-u$v zesi|hr|Jnf9M8wecoi~- z8*meThTn*X+b-Se)SbH3t#^jEy4OzK>b^U*h2vU1ET1>{`kmQ~B~;(LYKG`DC-2lx zCKTg1{C~Zz{<<~fdz$a+sO($OXWkYlit(myGb`E-LRGJ*m0G#x!uQB(DIvh z>bJIc;*Yd^>@M9Sjj_wFIgqv){N-ih@7S)kOwy;;&J?e}yK3i3`pw#F#2;!eIAVCN{J5>j$bQM_FXxUV zDvv+L`nN>4+mSiRinT1WHWW3HU((zXikeBZFBEl`y_M9;$baQ#t985;YYLpm@@$u1 z*}l+@viF-|vM;9-RmA6c&a>joVtZbEf6pW<-rPqtUrJdd(E%sA%5$&fH$z(M8s?iD zJkMK+W+73zl(|)Yzkj(MnLgfRPqJAXnm0^-4SWNUt}n}zYCg8-#b4!Z?P+AbbE0zZ zcKMyqc>RHXQyzc2x0B3kOf=s-<1O^0naNJ{o%bS7x;fxPeY|&gvdoIMcFp>D*Lj-R zKlv}e{ocpB(Q||u)XttaH>Q&(*DP?NJ7Yfav@#os%FS0XIo{UhJ3ERW9@|f%f%?Y- zq%POTeqgmW3+#v%Y-5%a=@t$3wlxph^Q4qByzR`_PV{1Ij<>zZZciyJ*WR=x(&ZL; z^G#oSo_Rg?R&NLS-D7f^uVe4=7MS;)DAiZx?P40~A3KnJ`(o@F-tK0E6FuYo-rLhm zx1;zId>*5o_;d|H%WRYi|;Bq{;4}Woqj-k0~^hiOS7XU+0+K z<`E~l&9~Ik$Lw=*zT!JBrjHq-e<(rf@|ACJ%(3PXJE9jHXLdRBa^sf9$lrL-Kdm4w zSP-{5rk@#TN2X8QcKJIHbM1(l^)ri!v}Vu5^f&i8%MFfuDdu?d2+@3#8~3V2{OJa% zbwK6~FuD4N9E|osf9wD=G87H72Ac6iT4q}8iDs5PFaBX!uE;DPnr~hwy3dJr#T^@4 zWQOY>myk8Ij-L=a#Oxs|Hz&tm5qp{`&_5m_+kR#I?ASBRbSJtmzC5Hy#dq?I zG`pPWOUZe*$=5#?A8>636z>}bR#+gfF-|nx-^+K2xzve9N;JjHa-si5mRAq@b~vkGr2vqE;n%IyWFhMKTKk7FsCG5=DXbNa-x#NS-vYwzI0e4 z%iZ7n>x3DaG;_@jxvw_=DPg7=;mrHI`R@sV(7d0T$NJ}*xy-ZAOY_Y_B71%FO*Vf6 zL+1^%=9{)e+GZ{M3rt^oUVK8!4*qM*2%`C>S<9m&deF68xmg=puGD|6dB<6{MU&q9o%oclI{GB;R zC03ZPiRPOJb54|~zy47cr=B;PAw;@dAn_J6-kuk~CFi=tm1dR`?ao;)(LyKsLFV0R z?s6h4cezB5I8meAn-gy{Yn>=3_jZXk*pcay`*7mz=69m`=4@GRmFaz~)@8mamFO-r zov7Rda-U1Q+dS^fTb8>a@m_PliSCf-KGR=LINC}N=Wb5C-z+4WZ{CviJzzFE(Qc{B zgJzGNlU91rd`F~Po0asCiPt|-Bj>DUt+t!h@;i2R)T31=&uUXZG~b*e(Zl9KCz{;q z6VD^&K|3d9K5EtyX_KQ)C(*2=b!LY%?}b)( zCOu=Wl+&GV(F?8CB|UHU5Y3ZlW712e-~@Z#C#{BAFPq7B#M)mmR}$&ke@=SUEO&DL z&}ysMXdZXv+-P11n+L@Qy zdV2DQX5m0PXKL#u$sd`Yh~}Bp)*F*PHhoWI9yQx;1`%n^UQga(#@O@Xk7@l<%%|o; zCmPoJz2r~LbfWoYtjzn&tZ<^KGVe39*3L%Y1Cli+{59cJsN}bCuw9Io-|1i_-c~a(< zlt0Z}A}w=E%0csvJx|IUD}O8{_mps%G1f>YS}bdbv6eg0EktkF5$lVwwh-z1R;9*T zU)%HIUu|2N>az|I%{L!N6lV<_9NzYLYdDcE_i1W^b)h|v<^0xkB73<+YlCaKBFXA)oZAhIp4(OZAffl&2pj^dBfx{N4!8(ZVL0BOU$wk z*iroOyg7}US}jhcF7ah~w@Eb0iIz#!%({|jo_RQLt7&enu;)qZe%q+Ibstf!^@+@D zVXYxiI|8bV~RFV`ADWG|O%jUm$IW~Q~WuC(Wwr2OmBT3c(KsD1t|X>G0V zT+6kyeh)48dRm^Kq(Y5S5!h^0&(00(sww(mR})-p$HA zow}Hg9k!YtR)3=T=9mr>(tB7doM?Q9%hP*W`_ksU zRA}uWnr}Ypups>?tL+Fo=l2~Jr}wtHInkp0yVH-c#@i9c(XrO0MB2LFrXOc5B${tV zcZ|vCXYF&Ao7OQcV}Lc}OuNj*9dj~@tlORF-i~=0Ct30Or{Sb#qdOL646^##5oBJ9f5)Sj%0@4Y6(yEmxT_)LLuLGrx6QmvO2U zuYVfNIkyhC8WZUnzREbwDzN97tWF0qPPgW|a-L}|4(069xY)YS$$4z2;~Sr4b<;oh z=9GD^)t5-iyt45qYlJ;dMr+qJKF^v=q@%SPCE8%mlY5L$Jm*{daX6=x(N@ygTBerr zcH=QtTO#d)A2%Lr^(E52R4dVRd!Bi|)3=Q;uy#0+r@-H2g4O#RYG%$aXxrpMYlRc7 zE9l$gV(V+7`KEK{K}|}nUgz35hj!j7f01Rf6OARh&yLtDms*b#Y0c&~xy*XQo)>>b z=cS&h)-ESn*m=8|Y8`N*J34ogc`>7O4fD;Dov&>&%^FBlZa$QG)2+GAygd?KZoS|{ z30*$%lv%&qIa&J^R{VKdimv_XCRbXyL^2}l@=}u-)?_DI-R0{hGp&6@5b0V$OU!W48Z&s=0Ju;;P%>#gPXJlTc~nTxFlo#h5}{UCFR zwU21NIj!s7%%#?lF?N}gx^6YgtP4ZY^2BA7BteY$|*2sVMIr3&JiAa~5ly!^M)}ALVQI@sR>gz-=cfDGo5l&Rob-P(uv8;QnkDYnvbbC4L zUMqW?opVXIce5U}MiR|8Pjvez>mh5cGw-!-pJuJLesbn*@Air3VXN2p;1<9 zBa_wr`>ZwAm39=bXW_@KTb!s}_s-Vi)&?gk?Cy_!+&$Ct&2Pb=&>~W8Eb?S z9n<65CeK_sAM+ACb28sHR&ja}o2n&-vKOb|Ssc`PgdfL?85A>e*%$ zIME+HCpFz>4RoTkUZoNZCz@~C^?EMx6Kk;(_3X7dafh|ViS%yiGpo_X_V(%B(oSo* z6CK}csb`mUsS}OvHLK|^>v1QVCDG^B0iyEwn|dv3`h}G}*{<~yy_QK-U`O<&-BxcR z-M)94?y-hDIjtkNn=h@APSoPa%}u|w#uLpq1v0PJTJV3U`~EmNj_S_po>^%uS=O#B z*(*yjG8VS6z4p%U8Dqe+v%At_{a9;PvP2B)*_qzmL9;XKnOR8-Cdifp_+nxM2AqTB zOdvoU=VAyy9FBk!6VAlI5#q!qb`pbq;7iCsE(Ey53HN=kx_i1_tqAwIzYe3J0cOA9J&r^+T-vuu?9}81EFZjN*y-8)ap)7O3 zkDLalw66cvIms!K<(3Qn&ACUHsjp^FUhq@r>k&@ZeJ135;DVU@LtU15G5eVd;_lfk z-PE8Ms{$f?un<+(q&pwGS8PnA%%#=TE-s@LWI_=2_Wvwqo~`8C_txi9#s2asCt zo?N0fPpe0f!XJ>oMW^n};|$lmGE7~yZG)TfQxD{?+IEinbwBkeQXAd7+P!-H?mb~D zx2@m3&rdy&&utrU_jZEk<+g2dcXoUA&UJT%saI_~*S*qDJ&=FZw$1Lde(F)Awz!{M z?$tZbeV9{kO+0nok!|O>&xd6*NPW*wJ&>Q-cD}p!c<}U@ZG-NEeu{d#)qRLlZ%v$Y z+uOEnb)N~#?n3H$KlMQVu5A~%(^r;4{>UNQ>WFP`3F#M$xl6i)DE}1qMt`kxX?YxskbJMe(mXP7rOWR zsRd4bCFFb-Wl#922lCHudx<;x#z5+4x9xO4>8Gg8i`<7frQ5v7eb!G=n-{r>Hw91s zDN_A@>Vf=Ex4qQ8)lWT&)Wz-#A?K57m-{_Vy*07>n@?}s2^+0~@ z_LsRw{M4gJUEw++-u() z^!D=YSGk|_Q`Fn5-A6b@WAwIdSGzCxsk=GV|BFU(<KBej#s*; zBAl;u-_9xh^jEs~8f6dZGWF)?v#3W>#u$OF+3_kr^(E)Sm;ASN*M+ICK7ZYgQkeST z^Vjd7zYy%;Zymaz?{tED*T4T3=kzmAifP?-@i$+WKpk}_=X{iNKE?OH5Th2N{GW&s z=cAlY{I2>p+{e_qIQ=#7{-)^-l@f1Wj_ z_4bb!Qv3f3>Zsm*OkMsG$@#O})Rr8j*Y2d2_kzZJ>zc>CqcpvfOFy!XB%I&bqo2XO zs~%y_rLbH2)LMr)lZN9!>9^yq!G1(GE0 zYvBJS|Du;tf1@p&DJLq4*4SyT8_kd2<4;>dZ}fIOrY;0EwW?>$BA3$25XUU0H847h zqop4OC(U#>oaxbL{n%<>OQ`d&+eM>){Vpkk$wSh<37j$Y7SQ+^`TzP1?VKrp{AKdF z*KrF!LOxL7Wn^_*E+L+`G3P6B@2YXm(GqI9=ThQ1%2ek>H4weud>OSc2#Rmg$1fv|{Uvf@>TkIPJzhIsPSW1^a%#ED_g%jKPfWkWIrQe< zQKWf{{^g|4&6iUSt!x1zMCJMUW%v@eOp@S>l~8iiuI!ez{Ly?Z39SP`@1mu;r&=fb zuOOY&KzmOi4cy7NfB!1^#QBvgNPFJ~jj8W5&z38x@0VXmIj_RKqn0@54$gTm=lluh ze2a5_3>sHkhv-?a9*RDl?)3=%5$8Y6^e4=@<0{EX2}S6J>6B`NcC=*J?RTnvZ>K8#B^&gp2 z`)@C>-F~0*@u>^iA?uB)^|*KZ-su?^m8T!8mIKe5XfRKEwxKPgoTAdBU~<*Xe6L$r z!hKA=8TpQSg!8}4_uu9FjcLl?m8QB;d4`b_hgALjeJY#o$KUz8-r~6_!ef_GU94)j?dq89AffFp$GgXI^_zH+{!3~%uDfyFgSYvopYC!cnf1|dl zi=FQv=W6GFf~K7xs*BVj-qI%3Z#$PbTh$}Z5a?H&Cshe=G@n!xIH8z!CQ$1}=LYp! zw}aAt=d^PaE&r)g;r8oHSD5Zn-;518yVQ4LH@Fk(68ErsgBpteihC#18`NLL&yD@6 z+SoS~n*e_@wpG2PZ^-!|zCz8%eoI}~cTMbr>h*nPOz%eD9^9Ymds^KB&I8Vs-2Ro^ zmn&KRD_Q;<)I)0yK$5|=x8a*R>Tia5GR%`gj7_2<={_|?-+-J$P%Z$VD`yc%=X zn6rk~{->fA5;$HZO*TSJp0)K(@PBswoeq6bd#6KR(L1xY zpmsj@mF<5B&OgO?-Sgb{w|^P;PpWT%Ug7?!bMf>2JHF+-^7(UP-*U#E-?3w>ntJ|X z&`aDaKz}%x1noZmv^vZEzB;&LD=3{&eP8|7jwI-xIz`ZReI>r1V0r`7qf9GI>r8K9 zy2A7}rgt(;s6lo2nuNk;%1x-9>R#Mm#yJG^3BVcUWYn*LUd#E{asDXh?@=E?{v_v5 zbN&&|zlrm2=2|uNyWm++p9F2F-v?b%p9k%#M?p`j$3SmYUj;p-z5#lNdJ^>Q@Uau> zF7++Yd(?M8?^S;XdY}3M=m*q4f!?qF8T4cP^auIr5AoAK$xnZnpZ*Bvf06Sa326dY*Z{$E82u(jRi^i=2by06K{~q?3g65%?GzoQ-`6SjhQn6Kb=w z9dyvS2z0x13FuDe3ea87Fz97Y7W7Kz8qi_q)u0(?6!cn$^gqgU54XRU+n+@H2{rAI z=8rg}!G16i>F_Rx zba;^9!K&J2!)V*zrI==DY#)L8k@!kkbYIq_YD0u=9(cpL0%w zKH|I`^o!0rKp%771^N}|eV|`=J^=cJ^Fh$3oR5G$fnH7 zG3_$XN#;4lrFU@tT}1S7*^m8TO5A%H{PP)1_{yy+u7ykh0X#9hqd*UAf-5dXH&}nYr2-muaYt`bPMg9Wk zG`O_O_b0jZR?fMDbKcH5cg0EP_ryu&ds*iDSmqC~%=gE?jMhHPl7EaPe=ziaGTF^o6mEbFL0aR<2HZDb$`NAy~uS{ zAFXfkKGId9PvI90&YHW|Y*H7kCHgX^MWz#=*z&1P?29j@>-yM#pv|Q^H}();x5a+n zzh3wf%HI|{y_2pN$G&?JUEhS&mabRC{+`pXh!we=a%`Nh*T*`1or-;wufO15tFcdT zIvv}^*JDVR(avf07fuz|cVo>u&FTN)eu%F#u}As(NbEVj-WZR;pFgdhjbF^yPxO`f z`eI)dSCZ>AuD^%thjD#B+Pm1*>2ge8Py1Iot0%ta{OiSWov!-V)Bg2C{#uF7^7WYwr}=vBIUnNd-g6%1>xa&Hj<0`tP7IUhv>M)cF<+NAmihX78>@VMe&cDr zZtedNUq9Rb9Ik)o6b9&eS|tWzXX)$3eEqe7GGD*Asmj;Vxu^Mh>$xA|>le;_l&|s4 z&+&Et<`{Mtr_~2HU(DCTTgrTW$CjIMrSYh8dfj=a{Pbx~zxTZR{q%=8{o;9#_~}PE z{p$0d_0!LB`hr2VUbh#+^|VTD-RY+<=JaoDz0OaUIlcRWoBec^)2A*t&DSR`s19g5 zdlc7L?C6f?{PcBjk(Yvi|c*3zEAy;a-55tqO-@TIxXjo&byuWJHPFG z-05?7xR<)a?knA!+_$*za(~Nx-2I08ve@0R2V#F4`*Cbzd{;ahe{1|b@sG#98b819 zioQdA@94X??}fetYc5`Q^}6HhZeRE1bx*8&X5IJKCD*@l{T=InWBn)AKeqnq^#{(r z@$6qZ``u?haQ2I5r#E;TZrkw0h7IQoY&_aO+kc|}_JMZ}d~M(_2fj1#zX$p@ZP~PI z)AgHPw`pj-1yx z@4ue+UmwgVn*~gWnmfZau#Bj;-I^`aib*XzO_weEfoQ zwq3C8hHdlPZr^tQwoh#Pi)}A#yJq{5?PJi2Qh#~L<=7oM&~OYV1${UnSfdi4XW_q; zTBp)5fh=}=Is7&(5ADAKdzx$2x#~K#8N0kKYDAr<%IbVIiV+#Z4sl#{UDA zX@?qiRvT!wiB^};VjHckptZZO zgH-BK_lpqparbf1KZZY`)EDCa9rR;;^hR*a+8baTZ(sWa=)2ZF4SM7(qL*LzYS?h) z!gqmw{3ZKfhySqi+n_HpU3<|BxPRwG)Xp!zl=$Dz^v_>PIqBFH8;LG~zOd_eLVEaR zTVQ_w{_y7#6@+TR-_{@+Po ziu^xF4}t2wJdz=vr!((G&fjG|0Q#S@)aIwNBNr(3r@60zekVsc-@R@LZ>@ITb}#4` zzWP>CY{q#2}{|jHGx_`p-Nv6*+{qN7M+X3$lR@JZm3Y7kX z0|Gk&Ji>C;f^LR&;e;O4RTrWJkzPPu*v1CXoZ1L_4J^%7*P#a9e}dOl$6#l!Isq%g zTLsvegPqtm+`n1v!2K_Ry6P=x$x)}6z618>!itD~1UBfXkHQLF^`N>G_n%cS2Ym$3 zbkt*N2=puJYS6E%BzT^H<>M_bY~NAO!SZqT%=G)Ji2EPFVqNtQ>Xj({U!bn~NBkDf zRcAXT&_SmRy2BX*z0BDS`f_IioR@>5ch2>o6V5)+*Ek12ug7lN#ja@z^r&+PoUa9S z)$5%bL1%DYf|E|?7eFh{>p*9n8PF=uEgbBuD!BK6dn(XBbbbl+kDRxG{#WNt&~G@u4EkrzJ3yas?gssH=bfN0IPZq`|C?Ix zoNy*wH~t&(i~C-?<_&A!)&FN({^mSq>j$^1*dOATVwmc&KUUwO>uIGvwV@yM(;F5* zKeOQu(1$lX0{Z(KUIhK@hRHiHD>p2Fes04l&_CGlAn4~ejQ$d=bVK|UoyXDHSnv;1 z(?=BC;C~;2wb1{FEBN1s6!}^*@4zZ~%`lIiK>vFXUz5@Q%=YfI@;-$p)Bnb?*1cZ6 zPTj0#)U2wgnyRWgR>osk85glKwy-kZf|ap@mGLC(|BYB3Z&Rn#J7C+t0(y_S8(4TZ zaPV$m;N8H#yMcXo1NZI*=H1QDI7`J}pqusn^%eegw}1UzH~vCeT@d>n_2ccIQs?6b z2W00(%-kaSQN-LWQuV2YN_%Pa$W^09c28VYYcz}uHMP>|dW%;bTyA#ji(Z)YI<4h) z)$3e!(7)SPX;$XFcF3UlubOCfy>@G9%4;95gFPrNw;Bzv+O4;m$kNXbiu@;CHFmP= zH9O3)*r~SKjry#rot&?;h}Z6G)s`FHtJGE1YPZ!^rCMbP4^n&Uoi2VT=?fis%2m6) zrq`}lQGxj9z3xo81sN6OUv6|qy-u}VU!tPc(#*u-Qlnn22ZfY1cFS_5QODO`rCLo* zw@U4HWrbTgu-si*?sn8fhr2pgsd`h(OG~YG*8}6qQlK)`rTg7pm-5Ejt;Ic+X072V zzq^#{=PY-;HoE5>_S)2ab*Nj%lj~3(YVTgI*QhqPObHfZYPkyKc2s%6s~#I`x6uvo zYSC1SC7fv1ypw9Q-dSpOypc-B3+{WIS|QC!w|?B4?6ws;M3>iM09gemeXaN$tvZb@ zKR-|(iCbP;IxzbN46d3n8MPd~IFOAV9IaTx7##HGbSI=T6+eu$yT1Z6T;4b8tA}dn zj&@YEHPTI~+illpm%E-SbvoYSY-44#RaL%p<<{a-z2UXlFe(_W9=B=pR|TA*5s!Lg z%<6_^ue}o3Kd$wf*Q~B6u=|gw26r7bS!q`m*=l-^nTHVuhD-OmCl5_8w7p7gvR!Yr z$=Eup<{qy!mf4ho$`x(>q>BB^jYeg*;b9U`lY1(i!^}+yeOJa4y0FnUDN{9<7ya9g zTJBWlJ=MW<^lH6s&8d#&r6Hqc_G<(2hrb=H1XPTKR>D-b(p~P5KzKmV7VNX7br9ar zT!m3v9bXDGu={6~Qu}sYJv!xudZVUjs!aNlqA7piAjV>=$+IV1{OWC(Yn z$B!+IdOTjKH5>xGD}O$q5w1Sbp%FRI)^#-7 zbZgJJJV&H3&E4>v!btG4Ty-8D8f(rvGR7HZ$Z&?i`yhjk2UgxMU&(2iER z71g9!Qp4R;{f+vDlw~r7b4)Eak2PB-nygQ=ouCOSTH+^>EaMegMOQE>X;C2+`KHKg zlz*?66W=zKf2G>{D#yGVQMGjf)3Q~q!=A8ioZuXP4V-IK=D97KkLHAFg1$wcs4SHi zD)pwXGm^Ly+|X<a88Va`qBREd+~zY9LAM2fcZKwb$0&&_#%6jL2+=~u)WP{#TxgEbGqEaQ1>9FTN!S3x^QNkmW~1Kp^fI#G)#n$wMABJcgOT_L}iiDZW4;NLCl^l*{O?8)R z^_Ji>GgHH25q2(8xQy+`Ddt+nr|M9^i%BTn2WYhQ1L)=A#3>KXO?HZQO$#!d=R!i)M z)S)FTro4!Z*V~=0+S@u|q{%7MprRNjYG}CJsH0X5Gx?xbV+WH&-`@h*9_zN2N_x|V zkyu)QQ-FnWsX4{l>WStdY|uz+@MxOzXrgyN(G0}GylxSm(W6Fdl^ZLaDQp!RqwUHG zQYOZ_gU%lGZdt~&;S0m>Cok5|FEtvi6Vo0n0KERPbx8Yx>R>vxJDnOyr%LJ6Ot?ZD zx#Nvi1smij;~|WwnKNbNtkTkqXlBN2V@5ZS%+ zSu9R8XUb-Z$Q*eX_tTIzDylChm4709Sm~(7L4Q!BXp02l^1aMiVKrH z%|=>hO$QIxi9l2uQD1|)AUYDEI(uz}nj`}Yn#5hGQ9W#_%fdQJJl2knImq~;2q5OguOC)x$1 z4$UQV=p*i?^j$v6kPn0?`**sX($PbQ)zM6Hm`G0TKb%bAGj1e7a_YcR<(6eH0}t!y zp`$5$Nlkny&6iZAiA+XKlt3m6s#E|O$?VP?%#;F!!y_rE!%Q-`8^>9d=fecUEqjsV zTH@@mrVbqU+CWwIDg50|a6%Gb+3J1<4k#Akq96A{|6saZ2fj6W8I$#sUL!2tQ)$;u zRNB}Bg!?N0a8t>S@dAAIii%9J<12>4`|2WSrug*>npDLb z6P+^+ueH^NXG#Kdz33r@g10ofjQt$BSB776(5p5o_3#7|59AHlfn((K(O|=zAraJv z0iY9maQMf#WLtE)OG&sj{>?;Fucz8Z)EEweQEj?~=8h2)4{kVi`|8d5BDQqc*7DW2 zN*qUHKh`}+0tZ><(TP^sRB&i>h9U5cFBplCUDt-SF12xXPi}EdtA*zA)QLLWUbVYc zC!>J~v{!`WeC$I*5C2$qm~%|IMsdUl$JqCn*~ECU*o$Z2?3>20g!cT?NqCjsJhlwY z+TO|vs`aL;J_I4Ev~HGNLQ+>L;2wT|kF%blIM+wCBV3BqKPX(Ayw>CB>ptYTQS^ zoda;a*{3GYn|26zX`p?0z4}CsGxZQm@U9xYP{ADz7wDylPQp%_U4Q-3hbFX(@XwX} zGgdzK^|Pqd&rYg2eFob**^HLXDD-TYNYbvGS|y7sq{t31LCSP!Fww+8M7>t7KzdA( zaT-Q!L)!X$8Al4?TP}U7PA3(#v)8FT%h*)}1vs)*a(BXJLmMU>0%G$64ZnfT>6NxH zI7MC?tEhgLMf>TKd~k=27)@7w!rE9V9mmN$pS|dF5^T6I`ZQXtW-~A+IzTzFJa=Hu zpR;<%_O`Gbk-bjiwPp(zF-04_R#Q~g(_-2`4TZdzEaghG*}`c%TWm02bgQFYla5vB z{JzwnS2-(VC(%K?ZZ5`MLm z|Gq=NK85rtI>?N0reFn;LcdxXmZpz?dl1j-j;~cTL|aq5BJfXY7bWQk%zV+2p#1kH}Wu~U>;q5Np+%L!wE2~CsGTk z2sctDH#MkFhW(}^l2*f`OlmVy5NSTrc7#DMTY5tH$Q=baR>^Al=*()_i8M)Z)lfrYO@QID2eGsX>PFHEPWPg}HfKbONvp{uy%Hj) ziCVQ)LPdy%v3BR?8#mc;=&D#GAN53G2OSIfsfcp`= z;=i%pUC>tGza&+wG~w5!f%JJ{LH-?98Qw#v5iH+LI%!nPOW0cBEgjaG*4!Lw!R~5Y za>lkqK?=Vg+!!h=2lPj|5`3(h*F!^ZOqnyO%s}T`3R6mKCkpgDgOp^vZ$KdU2IM0(@Ra_i)A|`ZA~C&68xX?^(Rm!{-1s zpDXC8_8+m@kQ*t=(6!bvPaS9)QYceq>!Ff4IskqddAFo>JqSTcO$2xBTYB`SIml7h z(l(-X;#J3HX2=@h$njeNWpH7LXf39f!Ep3QCAyY2CvJeZBiP#u%UD$~pSSnk@8_xH z8x}OKXIIz*LoYMxdT+(6?ZX?_lX!v1?+Vm0Zw2qp_u*wiy#qf(n*v_B;-!TCEP%VT zyRx`g@v#7h4wc#9J2mQWw2*skWDtkg0gw^;_(I!M`jSt1cpvJ&n!p`p^SU>VPesZN zoJDm2r`XIw$9zJy2!`nvXVKbSjj(XKg+qsS)2r#ljIwA0fCu1PGHgOBjgdyBiNCvm z?^6z(z~_RUh5C}}?K}>`h@paB5hRZG%G3cXr?SKXW5I|rVqb>O2kH5u1zNj&9Rxsu zQ;H_GCw`LZlv_(HCew5a%Q?1DO-4Y!U8!CiwP+B>Gyfgs8Jbg3$&D^X3-p;`Z$IbT ziQYu?UINmnCe<0nFUsuqmtZ)l!ox1#`1B>Ee5~&H=OCRKJ=65YG|aWweA&|49q=m$ z?tpGPW0duLLz62jB}?L4Ise;FZMOIZg4S1=OGBg|l+zFDZD%5m1Gl8+=*xg!g+Lc@ zb%N49jA6(SY;L4RlKeA zZ?(I@PLIsw=2l@0-Z)Zu&^CQAp_``Vo$n$o2YEV+>IFHS9@lEkMh`UAlK#*SEA5ik ztF}ruJz#a_=rf`mf%b50j2#FmFqof>7Jb)39imnbHEj-m+0Y{t=smy$93lB0#5|Tn zK2F5Qh6jjnr|eAV6n*T~>_ig2&h>#8f6z%eSXQj2>BB;Dn8RnG*?*Ub8;d+nAAm+% z2|5^@J54RmwtZU*R5s;Rm+8BM5YEDHz^}qN8ouu#Rp2ljoe#dOq;(+hv!jo%1Yh{_ z45^*)kK-CkbOM8kuRn6dn5f0z!2eJaw@Ul>!G4)izA33mJ|3kUI-0F4>aQsEEqzWJ zdVWFkdf6%mdoQ>~3=^Z}ncg%ay@mO`?4SugGzm24e`gsaX@+)sO5}43YA(AA?V!_&Hh-c#A%)hkmo($muG2TTafUzMG_vr#);Ld6Xf6 z)m`+A1S7Tx1|iGRK|?5oM4t0MXT{pczXG7O6?MtI^OZCYi=626&ac^{F)}QXtS1}n zp%v+4hMr2Xyo55)Q~6^}{dnUgh>t|rB2Xdp#)sy?L8Zb*jZsUVAW={Bwuv)YdYQ+~ z1fSQ?y2BsT_^Mc4zTI9|e@luFN=c7MN4^YgdvmgE7nQRp~g$7gCmiJ?tz_b@gc_Xqd5JeSMasS ziN5mP2sW~iLI0r0fB&R?HzSL`@t(n~ZgQ!DIs4<$d?lGrG$JbAzw9FLcXGquPEdz3i*mczM_yXIV=QB;ujf)#K~bHViM6-1&0ta zIV_}14hu1p!$Qs^K0*|YN=a=fk&;?ql9ZBKaAM(!1t>`=sRbz#Q<4%?k`h&t5>}ED zSCSG~k`h^x5?YeL7XM=l!w=B=F1sYP3U`|P9yls+di)CPsED_gk>-P4p5EpAJ{Np8 zc#`=3gib=I@P&Ytal>SpzQW-``aLh*M_z>T*?wthsg09E%Uz`3b>OXpe)H(Rby&tv zjCfnDPpCN=xt)oykBS}*l zHsDC9DGwWOq|}s%4L4G1%EU$+DK({HgYA{Fxki$vlGs!urKXzLOe3YHqS*b3l$xqy z=ciZ7zE31+>WV#|NU5nS_Io0wrmooQiIkeUVxK2cYU+wTo?aWbZ(NU5nSc4~U1?9)V&rmondiIkeUVt*!5YU+x;nMkRr zEB0j~rKYaflj)VRBNIuQx?(pbQflgootQ|esVjD2BBiFT*n#Plvi}lEnz~}|B~ohY zihY+zsi`aWTq32WuGnvhl$yHIUQ4f7J1x<)sV?oZM9WQuX@@0RZmLYXE75XOX-RzY zZ>;jxGH>cFDHnQnR3h!mrJmiCXt|J&os?*~kdIxINV!<>wSy8Z7y1)xzV=R{{N~td z-y~XYj&72-z0q=^Ke6;DdD|P|7mI(Ax4qGFF}}R*jg|}j@wPWwF7(IS-blFsfuulz zByW48{N~I^^0qfxF7(IS-e|edA8&i3jqnRVNbwGm zqvb+>yzPyY3t&hJWJvP1H_9*c$J^d$xzHbPd!yw-f4uFDmJ9s}h)D9bH^MJKBFWp{ zXt~fIZ+oNVLVvvNjg|}j@wPWoF2Euw&?3p(-YCD&A8&i3yzPya3;pr7H(DA1Se|ND2H%3H(S2{74D>NQu2gO5jII>@HFQKT=|UkrMck5<3iv zL}AP?fgdS>A1Q$!DY4B+3H(TjjYdk~M@nopQUX6x0zXm$KT-leQewZ668Mo4JC2mV zkCfPRqy&DX#I7SH@FOMgBPH-7CGaC9wjL>gA1Sfy#G@qA7+cVd{G@q76%T4@E3;ak6{74J@NDKT(3;ak6{74J@NQ?bP zTHr@o;73~EM_S-Vn$Jfg{S)|+7Wk1C_>mU)krwApX@MVUfgfpsA8COfX@MVUfgfps zA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COf zX@MVUfgfpsA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COfX@MVU zfgfpsA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COfX@MVUfgfps zA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COfX@MVUfgfpsA8COf8G#=efgc%x9~prk z8G#=efgc%x9~rU#ppYL?|0E;!9~5-NC>QvV5%`f2_>mF#krDVo@l4G2O?=A;{KyFW zps*)KeSsetfgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk z8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=e zfgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x z9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=efgc%x9~prk z8G#=efgc%x9~prk8G#=efgc%x9~prk8G#=efgc%xA6bDPS%Du}fgf3cA6bDPS%Du} zfgf3cA6bDPS%Du}fgf3cA6bDPS%Du}fgf3cA6bDPS+W1f3jD|l{KyLY$O`<(3jD|l z{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY z$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<( z3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l z{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY$O`<(3jD|l{KyLY z$O`<(3jD|l{KyLY$O`<(3jD|l{KyIXpm@tse>x}dBPZ}9C-5UD@FOSiBPZ}9C-5UD z@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSi zBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9 zC-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD z@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSi zBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9C-5UD@FOSiBPZ}9 zC-5UD@FOSiBPZ}9FYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYtpxu14`IFYqHT@FOqq zBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkH zFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT z@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqq zBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkH zFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT@FOqqBQNkHFYqHT z@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B` zqag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63 zAn>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg z@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B` zqag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63 zAn>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`B`qag63An>Cg@S`a3qbTsBDDa~w z@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3 zqbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsB zDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w z@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3 zqbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@S`a3qbTsB zDDa~w@S`a3qbTsBDDa~w@S`a3qbTsBDDa~w@B_aeG(R9hhWQ2r8RkzIkRg6UGb}&^ z9O73r!vaRYVSeX?4D&-QWSA#e_+_J%RA31>q@)5(z+rxFj0`EM02FXYNd=^ULrN+@ z1%V@^P6e!hL+TX3g6Q$|3;$BHrhnt#i+ktC$w%Nl{7D*$!o+{*-2an1BA24`A!0oT zXYymRBCuB^Pfa0qA_56eL@cwwOwE|3)Fp#~ly78Emy8TjzL7!7H!|pJI3t6UZ)A{} z7#XB|BZKY4%&}x;OEGyYY1vjx9!p-f7L&)4nC->nv1De8F?iTy%p6O>Y&0g1rDAqS zOdd1mYUfyF?iTDF>@?EvwLFlSbAm`#pJQ{%x;RwW9gY)6_dx(GrKDW4?8So zj-_XIT1*~G&+NFEJeHo>c` zCXc0Oc54hCc5KWXOV8}wm^_xA*}*Y+EIqT6WAa#fW=F^1VOPh@vGmODj>%)`nOz=} z$I>&qJtmK(XLfx|9!t;c{un&$0GT6zUklgH9CyGACDrDt}JOdd>`;wmY(5`*f3*Bts_JkP3eFOBFj>?4!a<@EOqPP z3xdm1xDLT!a;*l5w)CrjB0Er`En9kaq6C*MJv&l@%a)#A0OY~Ayb zfZ(!q&j$l0mkpviJcQt~b#LQnlFtc5MO*iLS|GS=-Se4&;IegZ!>JA)VOF#ORfmue zT(<7{AVF~1y658r!DZ{74;4%<8(4K{3BhIS-p1A>pD~Dvw(j|)L2%i+=ko@^W$WIC zSRHu6tZ0L*4nHBdY~AxAgy6Du&qoo0%ho*~NElo?CWXkd&`L+95L}jzkm92W!DZ<_ z#m5tZ%hEmljcBpe)Zr@3iZ<5jpcR74vK$?{LU38S*8wa9m!%#wWVKWFUn`*qAgqZd_pd`Y~AxYx!|&;x3N|Syf7=;SgXTc2rgUqHrDF+7owsq zy}dQnfiTR9HrDEJ7=p{zy^XaxE{3RR>)ys%9UwzgwC&#BrRqo-W<@@17g@ISeB>^; zY~9;ft7B(~ini|U?WzuDO9e~5EXk)Do!y&kA>20jl@i;_9TlY5B>cAYL zqOE&-H>)Fbm=*buUu4wP##$XBL~z-Fs^34oYHHwD+|-G>PD{?cT;(9iv24wC&!;S{v+86>Yn> zu~r8$5fyE_x3N}7GchaLSgT{22rk=l?Bin{+(cBgEyv#1>L@3oqGdTc)``KT!<~pM zOZPhHiQuvM$#U%a-28S{-jiRJ3((W33LnA}ZRtx3N}7U@Y55fm#HYZ8`SaSRJuNRJ1L} zK10@_Tg-|!*6IK*g3GoXdta*~xrmCk<=8J~bx0Rc(Y74>3|Yr^F)P|{XLW=Z!DU;H zeTJ+3|R+%F)P|<$T|d!;Ib{p-q-3_FruPuIrhF*2Zb>z z>bNi>%i7oK=rDrI(!GumBe*Qf(UD>VmnFT97bCbV-Rr0^CYO!1I(CfUvZc2_W70un zL`BPTbSN3YW!b$BC}VQjSgXUz2rg^Z>fkbh%d#9DVn%S;(%auO=~y$OqOE&-U#o-8 zm=*1PtqwgSxNPZdtkp4SL`BG6Xv~T>*6NTng3H#ujkP*9ji_kby^XaxNR6my zTaJyjI$Dic(Z*UGvqo^)c5h>?4qhWF+LmKut&UEu5*jTH>+?W+@tkuD81ea|&HrDE>H=?3#IX2en@He8OZ8Nq%NMH_2% zG#tTYTaJyjIxLQ;Xj_hrwK_hIsAyY`jkP*Zj#<&hS{*J&aM_k)W37&xBP!aKV`Hrj zpkq|jF?2+hg|#}8j^MI%ujAL_0Wn-<5vm>}{>20jl z0e3`2%W`zs9l>SUy$-%(a@km`L+}VLYu4&OJc7%z9375FaM{w^SgYgmh>EuEZLHM+ zdd!M8*6J`lg3FfP##$Y(M^v;e$HrP6xW}w$W33L~Be-nc+gPjP_=t+O-P>5J1Nw-H zw&mDZt0ViE6>Y55@qGlBZTB|T>OeoDqHQ@g*6N5qqM~g%HrDFUKW0T6Yjpr1!DU;H zjkP)wkf>-|j*YcCB#>Fr##$X1NO0MfV`Ht35F{$vmSbbB4izLS+LmKut&SOFRIX2en zU_(Yl9dAfvSy-#14hb$x_d52F;Ib@7M<5bhmh?Ifk>Ij)ucHx}TsGF~m_&lhmfpr% z9h^v1v@A!5C=y(j-RnR_CYO!1I$V+9vSzIgS|qqE%h92W1eYznjkP+4k*H|v-o{!T z%*d>0W33KpB)DwpZLHO?jYLJ;a%`;CL5|FdHrDD;M}o`Ny^Xax=8>pq+r5poI{1;O zXj_hrwK@utS<%K?9Scct*>-PZtqzJLD%zG~W37&kBr4jLV`HrjlVn!3u~r955?r?B z*jTHhCW(r+<=9xO!zY;)ZLHNnlmwS;IX2enXiB1@Z8aa?pqHQ@g*6R35WZ0T*R z)q$KuMayz@I48kn*}V?xWOCV9t3x{pE^F5608fI;vK$@eNpRWH+gPjPJ&B68?rp5q zfuGEZHrDF!PlC&q-o{!T2TD}5Eyu=M9T3W_Xk)Do3njR0-P>5J<3ovxw%yxUs{=)e zinit0SgRvOnH6oU)p4T)mu>ep*6ILKqM~g%HrDD$Qlg@5IX2enkWywv8*6o7DZyo1 zj*YcC!j!0JTaJyjI@FX|(Z*UGa7u95mSbbBjyxqQ+LmKutqwsYD%zG~W37%wWmdGY zR!5`~T(;%dSgS)*iHf%6*jTG$REdhV<=9xOgH@RoZLHNHs|1&AIX2en*j1vUZ8L6A|MIFaVWLa3Nqge?qOZPgamEf{0M@P02T$c1YzLnszbg!danOrv3>R4BT%a-28 zS{?LCRJ1HdhrSYAmfh_Yby^XaxHkPPp>)ys% z9VE-FXk)Dol_j`r>20jlF|$NP+j4BI)xopOiZ<5j5L$xE*1e6jI+m8GXxqJwwK}Ml zsAyY`jkP+umRZrpS{-9caM^ZmW33LhB`VsMV`Ht3x+N;wmSbbB4!>nqw6RtP;SyZ7 z<=9xOqj8Cfw&mDZtHW}c6>Y55!MOyNZ8L^{JqHQ@g*6MIwqM~g%HrDF6U1mia zYjyN4!DU;HjkP+Am#Ao4j*YcCo|mX-TaJyjI{-wgFI^pkZ1J*d6o$w&l&{;-dd#}HtvFN zm42)e*+NGL6FOKWw#D!&QJ-{}Fj;q%eykGTV%P>?KV+C_kE4dkyj8{nKfK*jYwz>A zm0G1+!7VB3pjVr0*B2}86*aTF?Rm{GHPTr2!o-aW^{&Uk!W5#6?W=UUUK{bj_AW2h zo0VqOQ;0IQT5jbe3FbAsd+YNH-M!v%uR#rrw=0WY2~o-_^IoK6qS=KKDdJc}EJ_-Z zQASiaN=M|2R5hwat3=pmBF`e%GFpeyk!qCe)l90_EP3;#>YnAfxy4Fzx-yGsX^1&i z^UAH|X1Am7IR;xtjjVKoP-QDYK zX-ef!`LNWK%KwFZSZYe;{{kT_H8th`qCPA&b>(~2L8kUgyUHReI!ctRL{x93ZQd3vHcN>)Y@z=tnsVo0i>|v>?E8mk1OHEz* zzoZLGO;s$E-W>5<^L)!DD^$j zFlp+_|0P^lYU;|5n--Ruy7E2Fu+-F*|BJVv)b}#Oq^T?4y9`TBUHQLm3rkI1`C-w* zQd3vH7a5kCx`HdlVNil%xK|==sw;?q*5fx77Q{a5m76LHqMr52O{E3#&cbqQnHTcO zh2HlBd-a8Uz6aPV7xKx~-jDa$;}`l93w{vGEaVqUeh|g1S1#o9(8?#=ykk3Cs>6Hul{Mcl@av`4|l`Je5AP~eO>y-=n1P%mY z$a?(d+z0}Y^~%lJk@Q24^~%Ng3OEQNj)nXJ5Q11^y>g*HKk`YhTT7UM;}G0aAA@_+e{j!}KTJfQ%+o$Bi9VZsyRans zboT4QlIZh!l7}Tx33z%3CHx!HFcIxM|E@GFiFTjob665p0MF#GB&q_Q!$Ap8;4l%@ z0iS|~B~cx)&lZ+Mb-?~wSQ6C%`)XlHR0ljogA(@A!bDUDJTt?Rs1DdW3rnIpV9zWp ziRys8vY><~VVH>OfTv$r64e3wVqr;C2keK1B~cx)4;Ge0b->dsC}Hm_Ohk16&ud?0 zY00Y{^s3zo2jZR_sbf~{!)|cY>r~tIC7N{Vpf}g{ItvFY*k2+pc(YM&dI#Dy-kqy< zq)=2$ssqd2rR8q4Ej`!wV{5LEeXQGB8o^Gs)FE_k)+mR|xvn)Pn0y{FQw z(Y|-4SDDn>OHr?SDN<}NMPu7bk!pJ>8r@!sl-o8QdL(H|!_z%dYRbb? zK2mB*#M3@fYRbe@KT>K+#nZo6$_qdwX)1{qfk>&TCSC|4rKX~IF^H6!s^SHqSISF5 zB)N)FBm+|@w_5EQ4tu&@N1f3c6xryc*Dkjjtu~zrMGlB6Cym7Ta-+e=K)qbwBA1sM z^(vlYnkL)h#3BxiCYn<#IDcB)=PkByY$a-On-k5sR(p|QN$tg9)ghj`p1IZfK?_ge4yNHXAK>MAlS5uSiRu?&5%|FhU(Zdd(dH)x|v z>c^xf2H9;XMkvqWdZ$h&Q{q8BKZ_I9)}B^(YN>^8X^l-*=%fyZeH}GgZ+BOGwcvb9 zP4+U>mm1JmrhF6RAq6gVc0Yu6Dqh+%otR_h_q?h@9@|we|?==ZqHS!M)j!^m8J4R zrQVFr6Kz?#Wj*440~4Ja>&;s01Z;V=ipgFsO-zgmj)J2N13s1;n0oatrpA1o&VMl{ zj$^FaYRc;_FRAIuJl2JFeRdg8L?F^xB8gj7br_a|Uiy8|)2>slG#ay&>aqP8nByLL z4dGO|wRm9m4KQy%eYiW@fC>ZN$!;4doD$Q`@qfQn_CYaB+)R0CNw>|ZAou5xP1g=2 z<5a0u!xUd=)l}H3FEPejcLl~e6Ua@bf)QPAbjRDR#j%rBPlI>wj=9N@eC_P_yqZ^= zfXS%tLcK%%HA+UkhBuGpO6^0VSS>pMaz6*AN$Ue!4kGGC_YNFIxX;!r$ zitj@K$C@>tsm*e#Lrt7%V~*9vmz!0ZI{t#u8)B*p!^VPm921g!k!$g~05i}dv3V1~ zb8Zwb9O{kEt5hnTN#)A9@yy70YAiim${>VMaU_F3&W^vAg>UcjG9#*NP09ko*x^-JEc^1q&Pe}I!Zsk&W;R^rAnF6%xGyiTgG46DU9Vy z_~r?3RPiS%Q{(C3WGOp}V~yS9oh!)-#jX3rwqnz&N-I zSdo^{?V?b_9+>)oj4 z_j}9Tb_MQ-2F=c1_!i4pym}SG-uoPi{mjr` zs?@-K)lyyLwA3=%s-3a!K9*$+wMX&vY5Y?I`%tT`uxrC}yZEPuR(~!%YYI=C#DCPI zY4i@yKK~G&*uis`@E^6*MO%;{y?QI7sC5_`DC0VVR>l;`bXd2wZ4`BnLkm@058~e< zT0E}XJA+hadwW}hCcM#8_xfGpa>Qd5Xoh_z~I@B)@IZgDwfjVvcM;3af8A>y2KlqNIKYO_! z`nhT=&95ffItiH@kiFwSMUAa4b1+BCtR1o_8k4>1DC8~iDnRy8QX`G3uGx3H4Ew~b^Yp33}zDPhSnBZW%N@6+bDDIsDEY1!gDtn%rVka8SU5o zXKU-Ia<8f1Rn{bC^(%g!r;|-g<7wk;v3kups?^2NryW3F=fE=u9zD<7=jjtSQ1&(Q9rQ@&(%*5esL9#e|fmgMSBGe?zH;r-|X^cy-cA9AwtVt{2If?ekdOGS%>(CV1yB_V47WOd)(p(}<%pgrq zAe-0^SY%YBIYgS+$4{ZvgID`AU|OJmbM;VLR$C>`gcy5(IWv$lI)Z`4 zo?(7oy$3jCj-$5RGtAW+Rv!t{x*iR(Tdgk|TaxAguS;bf7s3%rYb+zn!cGfgL96v5 zG*o5%)u6daSQD*HRg@BnP)g$&t;%OYW4)S3$BV{CuY813@YG(S*LAX1Jx(+-WVJPv z*VUO;cUsYOkIKMBnlZb%e;WU^&Ivd5I-y=p9v1bZ%pN0+Jhs!2To79YU`VDr}M5RuGD zaY2wiI8{ojxKa-O8!JEgrqWBV{MS7{eD8%uz0big&RA#v7DNSNqH z8)$jpwvz)J*19fAH#%$4Ws!|=wRI77Cv$bSq2!H#z;1#mzOszVMfp;+Acw%D5z^M0?}CaC*qfp^p~jwsU(~6s`>m}Whj}>=Z7*GFE>=Erc*Hv5rj{)X&CcekL&-vokMib{m7F4#Z5j+a z4-KqEuLgD`{N^?l*N1x9=$y3^%D^)cgVe2xS52knW(!04++2DHA!mz2#aVB7C{^%g zGwDh$UrE71rWeOU_axbqIp_?(jJ58f44f zWmxvE0e7u$m^Az7zw>vlLH7sI|DD>VcVYT&y6xtTzTpRa12FwfMOM^K&9R0wiA97g zH_@NaNwQ$Hn%Lm>MIW>?u668JWkVi@;FV-`$Q#b5Ft;;>p+bIkc!-Wa=PK!3C0E1T z<^fqpn!3z4taT(&0uNnB21+d@XRA4{GMpOn=F&OXP6n&Q+%S(>C0+EgILO8ENNmlH z1pc{bD=}~rs7usMB(T7`$Vp&xh(yj1Vak86`4CWSq!uB72BT5P1!e>xsbUQt^F6;PtBb0V0z` zZXj}y$P|%jB8P|^CUPT@BSel8c`cD&AaWCt*AaO=kr^U46M?;|_$(1D<|B@fMLKBDWC135trtT~+bhiJT^K2MC7zX8fz+-va(M z@NWtKy7+ez|89-188~%{$Q?x9PUJ2k_Yk=ksDXBr3xec*L_R>|{y3VxjL0OBlSDZ0 zF)IBqk&jUxxBMU_ABvwsI*$MFf6R)w>er2al1d*Y@;REMH1Bcc^(CQVn9j(+jmGHM znoVb&g~e)M!#VgLc|)fj)Bek?edNE~%D%}d_$CCdNVCszD=j4W15W9}TrN43Ml1v@ zB&pm`F*#Qo8pbP=JYL)+EBGlBJ6NZ_qMN*fo4kXYe0$jB9o*y{)Z}oflq`)6mxjhm z!(&64kwRvufCzs>W5e0;@xoZPR2~VM{5qP%LbL&kI1m#a!0kw!#fV8gBPhE)kr?PE z{48F1kzPm7$z|}aCSS_HEhu6&#h*hOD#1w_Dhy}wZYn)iOplNHqCcTUzl%k`i$%XD z6#Xt1{Vr+}z)~v~YssO^+$YeL+_lP_(6!a6QV6;!dy#x%RLC}*t zP6+ylS8}sMnJk>aOf_E_g7;H^m*`dSbHXfy#%jQlJ;Ml*&(~)0qHJy`hrd=flqmo` zXDg|~&~P3<^h(3QD5fyaxWcngeT@A%U-i&D`EUt1+Iuh$$Zt!qq6GYjQyZdQ z;8E=WvW13~cMKd2dWhR-J4mu(23go)L@Y<7hx`!KUK_&S@_^o9eM9(KwNS{+X6AAg zEORXE^MidZxpHg)`28GyhhH7SAAo{VDyTaPyL@Q=TGULVU_|Rx!v^10{ z!%XqEH8+$V$>&C4w}lcu;L@UfkA2>Oqu4m0U)uMbSi z0G?f2tBWONcjKnpR1RBEsRJH$b}lfwxvBTs!ZC+Z8Ks=UnZ3wn+Ua@nMWZ)yOVVi9Mv=w-d9j)hAP_$ zXiqTjo1K0Tm~PKnH0Ql=-kfJjv)^uifz@lBZD{Ch^+`n`m@y(MO}0_;PH|Ch3@(Z) zQI}G4I}5Wk>6ocwA=t8$I^YDbh+cUV@llShQ^0h%zcmdOP=JuxvJllY&$W3k7YNfe zdK9@GGfXU|m7TG)--XacFm6G);aE$kf=Jl3V7Q_>23p3co0(CX0%ptcn8kr-dhFJl zT0s`3NrC6XNi{JRLwm6k_HEPY^`WI+uWR;f>x8-3WyQW1TC$#9RHrl-m8s9FHgGy& zI{rL_(e2r0NYrF`ePKTIZ8oQ*jr(iO;mkPV-QXASi(jfHA8d^&ZH%7pLhuXFVbL%z zh>|86C*;nM6Ov$a@GJe#6w(D9pwnfXIw+akGYFDs7~~N!WW3vMg@J?MYeCU+&oN^M z1YrVqd8^)MbCsfj2c?9UG#n2?YRikkO9IrvOHvvWg^_iAGsqwXI8HFtvMe)wpLyal zS-JvLp~}t1S1Lvq$CdT9{_ChBu~|_(%aa|iY}5(m&dcJj)`_vszRgaEB1O*g;!O0 zMTLq?Mi~<)OJg(fnG1Xb#WI7`vrR7w(u9v3cbo{hP=WkNYj6LyclT+#=+ib0+HQs# zVU}oNbJ%Z&MWeQLqqe0{f;g6yq-hof%#IK=ggly&<65u}Hb}DB^0u3l1i=!cP_=Oe z<3LridZCv&A}H9t4d-EBT{8@0NK3?K1!-opBNYO>YPYKdn*s8MXuOjshw!Zl z>^?6>>5`6XguSJ(@Rq`kw|B7PmKxk!3cg*ufw~#|7*mJ9mma1mRNe7&ujAytze6kg zy2#tA$lIC|?wHVSE6&Tvz5}mWDzQL_379^ixH9oN{95Bbi1+TDJHvPDW0NKC7w&LC zF?d9+#_;_Dhp($f-8N@lvY$ry5?pj$1zte?PRE$56=a!~CFx{yF78fRj zmxzIKaAAD3j7g8(-U2og#D3%!czM!^5&L@!=KSJ9$6n|;_Bj8-`q(VUJ*Rq1VbES+%@CGbyGi!J9$*dCc_mCv>64o8Q_74L!3}Fl&LXP zLM0R{rHm>XXSfBi0j6g_*~0~xXC{<^31wgm`FcdO0%r2yHGO+{L!DKjXmSk4CBg0H z477D~M$Foe7|KdIyaa$C(NYOisd1*Npg%)Mio%DEm10e@%+$`LYZjKX$Z{EyFl7|j zQmb21)u(mW+Nx`98S2eh6`xhZz9sR&mSR4GEitMuiH@_RbR40tbaAs?oM)ANQ=m~G zmd;pjEIlOh;p|;Dw>m(ORYN5@$J03ik!b*MNS*PHtb47msZS~8_E ztV+d=O+x{rt-@IeX*S`Kzy*~ea=qL)t<;6a1t>;HA(3fCo|oiVH+OfqO{(BBxTgAl zP51vAf;N@u-VUzqht;9ZQNx@1{+p`0YbtzG>WhLn!-|iF8iuHoAu@T)XJSnsXUQ;+ z!ywJD3CBxg``Ckf zZfT?Y)ULEvOMr4r8X3B%yfG{|@8k&E5%$O!hfLE?(KLJuH7YKN$13B>R9e;cYp2hL zL69}g`M!&a6NF4Z;bJ&uo|s2Dw-*;n*>p`ob9h;xHN30=IJ~UpjHtWcC$iCX-AJj5t85Qk{WcNL*4GtLZ~C6tP)n3L}|+wqi6( z$$Xa+zNjgi?kH)mBkqM^COpQ6u31n&x{s!(4$^=9Yk^7sLy79`Wtj{$E|Dt$| zN{rmpequ~Bv=NaSnu8B0r7}ZSRwh1>5*owtv5El$7MmPRJ1)Vp1WOW}lHjxieF;uV zu=0qkwVtj%^quu+?a6azcU;|1Kf8YJhZ_}L>}MzzYaz!lsTjlWmL28Q5}Z_>e#bg; z>iaRT1ARR^|CnXjd@PlNPw2@J>MQmSVyhf===&(Je6<;~7f-5WiScti*GYXJ@x!+5 zBv0KScQY#um|L-(vvQJjyd3jL=CH)bM?WK<9FY~XQG13$>~~myiX%R^f&!Ie5X-aF zX1O6uLLWKKwYm<{Tbl4WAq)mt6!~@zQHyQ-xY>)__uMpxq6AS&rAeHJRNx>GIecW^ z!j9HS;>>keyWH*7~wM$s#G(a?lo>oNs=F ztO~KcHi|3+7VBk%fXTkVIRxB^;cWK+a_2sfKS?0RVDiddOt$;?Vf;xV@(Ak;hS9AU zpPPGf;WS?UXVYjsJyJN5KlX#pTnFMaeQ?KhzW?0D+G=!Oz1w=QVm#1W&0Zwade(k| z*Ogc+nXDM2-{cjVXd^R>BNgLIC(ada@9o3Mqiq`kViI)Qcja^{#$4$u-(FMiMB#|v z)+B7XZMMap(k|YnY4=V&&U)4a3$yN=HHQGvs2Gzw$ikEQW_H&6wk#jXaqSgT)`}FN zlvSO2ST*XOuj16w|JI+UkG}D?h?1ha2iokBqb8~BHY`jdJUXUGm%>;2W$ zCwNKCczz=}$4g~%>8kX>F#i2TqkUY({=c9iD?&!gFa~?`3)?a9Ai6tUo|Bcl<>OW3 zRn5#KiMXsGK84@Y_Xx!=x%7b29{=K{FUQvYe|#t|MDRdk*14{PW5u`8>n9MjOOaUp&0EZ)2O*KS!$e2VLeF zlV9nR)+VpCIa0oGDR+AKvpvpR6mlGAbjo_y)N|+YvD1E=a$o$v#1~siNL3weJS)Y+ zm3Jw*KW|KtzwD=Yk8a>2Ctk7Q8CQ6o@!UP%;Nad7(I9rpc#1OCDdkRHm$q8`n1s~V z;MtG*o8M{iz3Q2x^~%?dGF~taQ^rZ^d4_(iDyXmF? - - - SharpDX.DXGI - - - - -

    The interface represents a display subsystem (including one or more GPUs, DACs and video memory).

    -
    - -

    A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard.

    To enumerate the display subsystems, use .

    To get an interface to the adapter for a particular device, use .

    To create a software adapter, use .

    Windows?Phone?8: This API is supported.

    -
    - - bb174523 - IDXGIAdapter - IDXGIAdapter -
    - - - Gets all outputs from this adapter. - - bb174525 - HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) - IDXGIAdapter::EnumOutputs - - - - Checks to see if a device interface for a graphics component is supported by the system. - - The GUID of the interface of the device version for which support is being checked. For example, typeof(ID3D10Device).GUID. - - true if the interface is supported; otherwise, false. - - Bb174524 - HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) - IDXGIAdapter::CheckInterfaceSupport - - - - Checks to see if a device interface for a graphics component is supported by the system. - - the interface of the device version for which support is being checked. - - true if the interface is supported; otherwise, false. - - Bb174524 - HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) - IDXGIAdapter::CheckInterfaceSupport - - - - Checks to see if a device interface for a graphics component is supported by the system. - - the interface of the device version for which support is being checked. - The user mode driver version of InterfaceName. This is only returned if the interface is supported. - - true if the interface is supported; otherwise, false. - - Bb174524 - HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) - IDXGIAdapter::CheckInterfaceSupport - - - - Checks to see if a device interface for a graphics component is supported by the system. - - The GUID of the interface of the device version for which support is being checked. For example, typeof(ID3D10Device).GUID. - The user mode driver version of InterfaceName. This is only returned if the interface is supported. - - true if the interface is supported; otherwise, false. - - Bb174524 - HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) - IDXGIAdapter::CheckInterfaceSupport - - - - Gets an adapter (video card) outputs. - - The index of the output. - - An instance of - - HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) - - When the EnumOutputs method succeeds and fills the ppOutput parameter with the address of the reference to the output interface, EnumOutputs increments the output interface's reference count. To avoid a memory leak, when you finish using the output interface, call the Release method to decrement the reference count.EnumOutputs first returns the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumOutputs then returns other outputs. - - if the index is greater than the number of outputs, result code - bb174525 - HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) - IDXGIAdapter::EnumOutputs - - - - Return the number of available outputs from this adapter. - - The number of outputs - bb174525 - HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) - IDXGIAdapter::EnumOutputs - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets a DXGI 1.0 description of an adapter (or video card).

    -
    - -

    Graphics apps can use the DXGI API to retrieve an accurate set of graphics memory values on systems that have Windows Display Driver Model (WDDM) drivers. The following are the critical steps involved.

    • Graphics driver model determination ? Because DXGI is only available on systems with WDDM drivers, the app must first confirm the driver model by using the following API.
       HasWDDMDriver()	
      -            { LPDIRECT3DCREATE9EX pD3D9Create9Ex = null; HMODULE             hD3D9          = null; hD3D9 = LoadLibrary( L"d3d9.dll" ); if ( null == hD3D9 ) { return false; } // /*  Try to create IDirect3D9Ex interface (also known as a DX9L interface). This interface can only be created if the driver is a WDDM driver. */ // pD3D9Create9Ex = (LPDIRECT3DCREATE9EX) GetProcAddress( hD3D9, "Direct3DCreate9Ex" ); return pD3D9Create9Ex != null;	
      -            } 
    • Retrieval of graphics memory values.? After the app determines the driver model to be WDDM, the app can use the Direct3D 10 or later API and DXGI to get the amount of graphics memory. After you create a Direct3D device, use this code to obtain a structure that contains the amount of available graphics memory.
        * pDXGIDevice;	
      -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
      -             * pDXGIAdapter;	
      -            pDXGIDevice->GetAdapter(&pDXGIAdapter);	
      -             adapterDesc;	
      -            pDXGIAdapter->GetDesc(&adapterDesc); 
    -
    - - bb174526 - GetDesc - GetDesc - HRESULT IDXGIAdapter::GetDesc([Out] DXGI_ADAPTER_DESC* pDesc) -
    - - -

    Enumerate adapter (video card) outputs.

    -
    -

    The index of the output.

    -

    The address of a reference to an interface at the position specified by the Output parameter.

    -

    A code that indicates success or failure (see DXGI_ERROR). is returned if the index is greater than the number of outputs.

    If the adapter came from a device created using , then the adapter has no outputs, so is returned.

    - - Note??If you call this API in a Session 0 process, it returns .?

    When the EnumOutputs method succeeds and fills the ppOutput parameter with the address of the reference to the output interface, EnumOutputs increments the output interface's reference count. To avoid a memory leak, when you finish using the output interface, call the Release method to decrement the reference count.

    EnumOutputs first returns the output on which the desktop primary is displayed. This output corresponds with an index of zero. EnumOutputs then returns other outputs.

    -
    - - bb174525 - HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) - IDXGIAdapter::EnumOutputs -
    - - -

    Gets a DXGI 1.0 description of an adapter (or video card).

    -
    -

    A reference to a structure that describes the adapter. This parameter must not be null. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID in the VendorId, DeviceId, SubSysId, and Revision members of and ?Software Adapter? for the description string in the Description member.

    -

    Returns if successful; otherwise returns E_INVALIDARG if the pDesc parameter is null.

    - -

    Graphics apps can use the DXGI API to retrieve an accurate set of graphics memory values on systems that have Windows Display Driver Model (WDDM) drivers. The following are the critical steps involved.

    • Graphics driver model determination ? Because DXGI is only available on systems with WDDM drivers, the app must first confirm the driver model by using the following API.
       HasWDDMDriver()	
      -            { LPDIRECT3DCREATE9EX pD3D9Create9Ex = null; HMODULE             hD3D9          = null; hD3D9 = LoadLibrary( L"d3d9.dll" ); if ( null == hD3D9 ) { return false; } // /*  Try to create IDirect3D9Ex interface (also known as a DX9L interface). This interface can only be created if the driver is a WDDM driver. */ // pD3D9Create9Ex = (LPDIRECT3DCREATE9EX) GetProcAddress( hD3D9, "Direct3DCreate9Ex" ); return pD3D9Create9Ex != null;	
      -            } 
    • Retrieval of graphics memory values.? After the app determines the driver model to be WDDM, the app can use the Direct3D 10 or later API and DXGI to get the amount of graphics memory. After you create a Direct3D device, use this code to obtain a structure that contains the amount of available graphics memory.
        * pDXGIDevice;	
      -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
      -             * pDXGIAdapter;	
      -            pDXGIDevice->GetAdapter(&pDXGIAdapter);	
      -             adapterDesc;	
      -            pDXGIAdapter->GetDesc(&adapterDesc); 
    -
    - - bb174526 - HRESULT IDXGIAdapter::GetDesc([Out] DXGI_ADAPTER_DESC* pDesc) - IDXGIAdapter::GetDesc -
    - - -

    Checks whether the system supports a device interface for a graphics component.

    -
    -

    The of the interface of the device version for which support is being checked. For example, __uuidof(ID3D10Device).

    -

    The user mode driver version of InterfaceName. This is returned only if the interface is supported, otherwise this parameter will be null.

    -

    indicates that the interface is supported, otherwise is returned (For more information, see DXGI_ERROR).

    - - Note??You can use CheckInterfaceSupport only to check whether a Direct3D 10.x interface is supported, and only on Windows Vista SP1 and later versions of the operating system. If you try to use CheckInterfaceSupport to check whether a Direct3D 11.x and later version interface is supported, CheckInterfaceSupport returns . Therefore, do not use CheckInterfaceSupport. Instead, to verify whether the operating system supports a particular interface, try to create the interface. For example, if you call the method and it fails, the operating system does not support the interface.? - - - bb174524 - HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) - IDXGIAdapter::CheckInterfaceSupport -
    - - - The assembly provides managed DXGI API. - - hh404534 - DXGI - DXGI - - - -

    An interface implements a derived class for DXGI objects that produce image data.

    -
    - -

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
    -            

    Windows?Phone?8: This API is supported.

    -
    - - bb174527 - IDXGIDevice - IDXGIDevice -
    - - - Gets the residency status of an array of resources. - - - The information returned by the pResidencyStatus argument array describes the residency status at the time that the QueryResourceResidency method was called. Note that the residency status will constantly change. If you call the QueryResourceResidency method during a device removed state, the pResidencyStatus argument will return the DXGI_RESIDENCY_EVICTED_TO_DISK flag. Note??This method should not be called every frame as it incurs a non-trivial amount of overhead. - - An array of interfaces. - Returns an array of flags. Each element describes the residency status for corresponding element in the ppResources argument array. - HRESULT IDXGIDevice::QueryResourceResidency([In, Buffer] const IUnknown** ppResources,[Out, Buffer] DXGI_RESIDENCY* pResidencyStatus,[None] int NumResources) - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Returns the adapter for the specified device.

    -
    - -

    If the GetAdapter method succeeds, the reference count on the adapter interface will be incremented. To avoid a memory leak, be sure to release the interface when you are finished using it.

    -
    - - bb174531 - GetAdapter - GetAdapter - HRESULT IDXGIDevice::GetAdapter([Out] IDXGIAdapter** pAdapter) -
    - - -

    Gets or sets the GPU thread priority.

    -
    - - bb174532 - GetGPUThreadPriority / SetGPUThreadPriority - GetGPUThreadPriority - HRESULT IDXGIDevice::GetGPUThreadPriority([Out] int* pPriority) -
    - - -

    Returns the adapter for the specified device.

    -
    -

    The address of an interface reference to the adapter. This parameter must not be null.

    -

    Returns if successful; otherwise, returns one of the DXGI_ERROR that indicates failure. If the pAdapter parameter is null this method returns E_INVALIDARG.

    - -

    If the GetAdapter method succeeds, the reference count on the adapter interface will be incremented. To avoid a memory leak, be sure to release the interface when you are finished using it.

    -
    - - bb174531 - HRESULT IDXGIDevice::GetAdapter([Out] IDXGIAdapter** pAdapter) - IDXGIDevice::GetAdapter -
    - - -

    Returns a surface. This method is used internally and you should not call it directly in your application.

    -
    -

    A reference to a structure that describes the surface.

    -

    The number of surfaces to create.

    -

    A DXGI_USAGE flag that specifies how the surface is expected to be used.

    -

    An optional reference to a structure that contains shared resource information for opening views of such resources.

    -

    The address of an interface reference to the first created surface.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - -

    The CreateSurface method creates a buffer to exchange data between one or more devices. It is used internally, and you should not directly call it.

    The runtime automatically creates an interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an interface when it calls or ID3D10Device::CreateTexture2D to create a 2D texture. To retrieve the interface that represents the 2D texture surface, call ID3D11Texture2D::QueryInterface or ID3D10Texture2D::QueryInterface. In this call, you must pass the identifier of . If the 2D texture has only a single MIP-map level and does not consist of an array of textures, QueryInterface succeeds and returns a reference to the interface reference. Otherwise, QueryInterface fails and does not return the reference to . -

    -
    - - bb174530 - HRESULT IDXGIDevice::CreateSurface([In] const DXGI_SURFACE_DESC* pDesc,[In] unsigned int NumSurfaces,[In] unsigned int Usage,[In, Optional] const DXGI_SHARED_RESOURCE* pSharedResource,[Out] IDXGISurface** ppSurface) - IDXGIDevice::CreateSurface -
    - - -

    Gets the residency status of an array of resources.

    -
    -

    An array of interfaces.

    -

    An array of flags. Each element describes the residency status for corresponding element in the ppResources argument array.

    -

    The number of resources in the ppResources argument array and pResidencyStatus argument array.

    -

    Returns if successful; otherwise, returns , E_INVALIDARG, or E_POINTER (see Common Values and WinError.h for more information).

    - -

    The information returned by the pResidencyStatus argument array describes the residency status at the time that the QueryResourceResidency method was called.

    Note??The residency status will constantly change.?

    If you call the QueryResourceResidency method during a device removed state, the pResidencyStatus argument will return the flag.

    Note??This method should not be called every frame as it incurs a non-trivial amount of overhead.? -
    - - bb174533 - HRESULT IDXGIDevice::QueryResourceResidency([In, Buffer] const IUnknown** ppResources,[Out, Buffer] DXGI_RESIDENCY* pResidencyStatus,[In] unsigned int NumResources) - IDXGIDevice::QueryResourceResidency -
    - - -

    Gets the residency status of an array of resources.

    -
    -

    An array of interfaces.

    -

    An array of flags. Each element describes the residency status for corresponding element in the ppResources argument array.

    -

    The number of resources in the ppResources argument array and pResidencyStatus argument array.

    -

    Returns if successful; otherwise, returns , E_INVALIDARG, or E_POINTER (see Common Values and WinError.h for more information).

    - -

    The information returned by the pResidencyStatus argument array describes the residency status at the time that the QueryResourceResidency method was called.

    Note??The residency status will constantly change.?

    If you call the QueryResourceResidency method during a device removed state, the pResidencyStatus argument will return the flag.

    Note??This method should not be called every frame as it incurs a non-trivial amount of overhead.? -
    - - bb174533 - HRESULT IDXGIDevice::QueryResourceResidency([In, Buffer] const IUnknown** ppResources,[Out, Buffer] DXGI_RESIDENCY* pResidencyStatus,[In] unsigned int NumResources) - IDXGIDevice::QueryResourceResidency -
    - - -

    Gets the residency status of an array of resources.

    -
    -

    An array of interfaces.

    -

    An array of flags. Each element describes the residency status for corresponding element in the ppResources argument array.

    -

    The number of resources in the ppResources argument array and pResidencyStatus argument array.

    -

    Returns if successful; otherwise, returns , E_INVALIDARG, or E_POINTER (see Common Values and WinError.h for more information).

    - -

    The information returned by the pResidencyStatus argument array describes the residency status at the time that the QueryResourceResidency method was called.

    Note??The residency status will constantly change.?

    If you call the QueryResourceResidency method during a device removed state, the pResidencyStatus argument will return the flag.

    Note??This method should not be called every frame as it incurs a non-trivial amount of overhead.? -
    - - bb174533 - HRESULT IDXGIDevice::QueryResourceResidency([In, Buffer] const IUnknown** ppResources,[Out, Buffer] DXGI_RESIDENCY* pResidencyStatus,[In] unsigned int NumResources) - IDXGIDevice::QueryResourceResidency -
    - - -

    Sets the GPU thread priority.

    -
    -

    A value that specifies the required GPU thread priority. This value must be between -7 and 7, inclusive, where 0 represents normal priority.

    -

    Return if successful; otherwise, returns E_INVALIDARG if the Priority parameter is invalid.

    - -

    The values for the Priority parameter function as follows:

    • Positive values increase the likelihood that the GPU scheduler will grant GPU execution cycles to the device when rendering.
    • Negative values lessen the likelihood that the device will receive GPU execution cycles when devices compete for them.
    • The device is guaranteed to receive some GPU execution cycles at all settings.

    To use the SetGPUThreadPriority method, you should have a comprehensive understanding of GPU scheduling. You should profile your application to ensure that it behaves as intended. If used inappropriately, the SetGPUThreadPriority method can impede rendering speed and result in a poor user experience.

    -
    - - bb174534 - HRESULT IDXGIDevice::SetGPUThreadPriority([In] int Priority) - IDXGIDevice::SetGPUThreadPriority -
    - - -

    Gets the GPU thread priority.

    -
    -

    A reference to a variable that receives a value that indicates the current GPU thread priority. The value will be between -7 and 7, inclusive, where 0 represents normal priority.

    -

    Return if successful; otherwise, returns E_POINTER if the pPriority parameter is null.

    - - bb174532 - HRESULT IDXGIDevice::GetGPUThreadPriority([Out] int* pPriority) - IDXGIDevice::GetGPUThreadPriority -
    - - -

    Inherited from objects that are tied to the device so that they can retrieve a reference to it.

    -
    - -

    Windows?Phone?8: This API is supported.

    -
    - - bb174528 - IDXGIDeviceSubObject - IDXGIDeviceSubObject -
    - - - Retrieves the device. - - The interface that is returned can be any interface published by the device. - The associated device. - HRESULT IDXGIDeviceSubObject::GetDevice([In] GUID* riid,[Out] void** ppDevice) - - - - Gets or sets the debug-name for this object. - - - The debug name. - - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Retrieves the device.

    -
    -

    The reference id for the device.

    -

    The address of a reference to the device.

    -

    A code that indicates success or failure (see DXGI_ERROR).

    - -

    The type of interface that is returned can be any interface published by the device. For example, it could be an * called pDevice, and therefore the REFIID would be obtained by calling __uuidof(pDevice).

    -
    - - bb174529 - HRESULT IDXGIDeviceSubObject::GetDevice([In] const GUID& riid,[Out] void** ppDevice) - IDXGIDeviceSubObject::GetDevice -
    - - -

    An interface is a base interface for all DXGI objects; supports associating caller-defined (private data) with an object and retrieval of an interface to the parent object.

    -
    - -

    implements base-class functionality for the following interfaces:

    Windows?Phone?8: This API is supported.

    -
    - - bb174541 - IDXGIObject - IDXGIObject -
    - - - Gets the parent of the object. - - Type of the parent object - Returns the parent object based on the GUID of the type of the parent object. - bb174542 - HRESULT IDXGIObject::GetParent([In] const GUID& riid,[Out] void** ppParent) - IDXGIObject::GetParent - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Sets application-defined data to the object and associates that data with a .

    -
    -

    A that identifies the data. Use this in a call to GetPrivateData to get the data.

    -

    The size of the object's data.

    -

    A reference to the object's data.

    -

    Returns one of the DXGI_ERROR values.

    - -

    SetPrivateData makes a copy of the specified data and stores it with the object.

    Private data that SetPrivateData stores in the object occupies the same storage space as private data that is stored by associated Direct3D objects (for example, by a Microsoft Direct3D?11 device through or by a Direct3D?11 child device through ).

    The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "<unnamed>". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the SetPrivateData method and the well-known private data () that is in D3Dcommon.h. For example, to give pContext a friendly name of My name, use the following code:

     static const char c_szName[] = "My name";	
    -            hr = pContext->SetPrivateData( , sizeof( c_szName ) - 1, c_szName );	
    -            

    You can use to track down memory leaks and understand performance characteristics of your applications. This information is reflected in the output of the debug layer that is related to memory leaks () and with the event tracing for Windows events that we've added to Windows?8. -

    -
    - - bb174544 - HRESULT IDXGIObject::SetPrivateData([In] const GUID& Name,[In] unsigned int DataSize,[In, Buffer] const void* pData) - IDXGIObject::SetPrivateData -
    - - -

    Set an interface in the object's private data.

    -
    -

    A identifying the interface.

    -

    The interface to set.

    -

    Returns one of the following DXGI_ERROR.

    - -

    This API associates an interface reference with the object.

    When the interface is set its reference count is incremented. When the data are overwritten (by calling SPD or SPDI with the same ) or the object is destroyed, ::Release() is called and the interface's reference count is decremented.

    -
    - - bb174545 - HRESULT IDXGIObject::SetPrivateDataInterface([In] const GUID& Name,[In, Optional] const IUnknown* pUnknown) - IDXGIObject::SetPrivateDataInterface -
    - - -

    Get a reference to the object's data.

    -
    -

    A identifying the data.

    -

    The size of the data.

    -

    Pointer to the data.

    -

    Returns one of the following DXGI_ERROR.

    - -

    If the data returned is a reference to an , or one of its derivative classes, previously set by , you must call ::Release() on the reference before the reference is freed to decrement the reference count.

    You can pass GUID_DeviceType in the Name parameter of GetPrivateData to retrieve the device type from the display adapter object (, , ).

    To get the type of device on which the display adapter was created

    1. Call IUnknown::QueryInterface on the or ID3D10Device object to retrieve the object.
    2. Call GetParent on the object to retrieve the object.
    3. Call GetPrivateData on the object with GUID_DeviceType to retrieve the type of device on which the display adapter was created. pData will point to a value from the driver-type enumeration (for example, a value from ).

    On Windows?7 or earlier, this type is either a value from D3D10_DRIVER_TYPE or depending on which kind of device was created. On Windows?8, this type is always a value from . Don't use with GUID_DeviceType because the behavior when doing so is undefined.

    -
    - - bb174543 - HRESULT IDXGIObject::GetPrivateData([In] const GUID& Name,[InOut] unsigned int* pDataSize,[Out, Buffer] void* pData) - IDXGIObject::GetPrivateData -
    - - -

    Gets the parent of the object.

    -
    -

    The ID of the requested interface.

    -

    The address of a reference to the parent object.

    -

    Returns one of the DXGI_ERROR values.

    - - bb174542 - HRESULT IDXGIObject::GetParent([In] const GUID& riid,[Out] void** ppParent) - IDXGIObject::GetParent -
    - - -

    An interface implements methods for generating DXGI objects (which handle full screen transitions).

    -
    - -

    Create a factory by calling CreateDXGIFactory.

    Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the interface from the Direct3D device and then use the method to locate the factory. The following code shows how.

     * pDXGIDevice = nullptr;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);  * pDXGIAdapter = nullptr;	
    -            hr = pDXGIDevice->GetAdapter( &pDXGIAdapter );  * pIDXGIFactory = nullptr;	
    -            pDXGIAdapter->GetParent(__uuidof(), (void **)&pIDXGIFactory);

    Windows?Phone?8: This API is supported.

    -
    - - bb174535 - IDXGIFactory - IDXGIFactory -
    - - - Gets both adapters (video cards) with or without outputs. - - The index of the adapter to enumerate. - a reference to an interface at the position specified by the Adapter parameter - - When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop.When the EnumAdapters method succeeds and fills the ppAdapter parameter with the address of the reference to the adapter interface, EnumAdapters increments the adapter interface's reference count. When you finish using the adapter interface, call the Release method to decrement the reference count before you destroy the reference.EnumAdapters first returns the local adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumAdapters then returns other adapters with outputs. - - HRESULT IDXGIFactory::EnumAdapters([In] unsigned int Adapter,[Out] IDXGIAdapter** ppAdapter) - - - - Return an array of available from this factory. - - HRESULT IDXGIFactory::EnumAdapters([In] unsigned int Adapter,[Out] IDXGIAdapter** ppAdapter) - - - - Return the number of available adapters from this factory. - - The number of adapters - HRESULT IDXGIFactory::EnumAdapters([In] unsigned int Adapter,[Out] IDXGIAdapter** ppAdapter) - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Enumerates the adapters (video cards).

    -
    -

    The index of the adapter to enumerate.

    -

    The address of a reference to an interface at the position specified by the Adapter parameter. This parameter must not be null.

    -

    Returns if successful; otherwise, returns if the index is greater than or equal to the number of adapters in the local system, or if ppAdapter parameter is null.

    - -

    When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop.

    When the EnumAdapters method succeeds and fills the ppAdapter parameter with the address of the reference to the adapter interface, EnumAdapters increments the adapter interface's reference count. When you finish using the adapter interface, call the Release method to decrement the reference count before you destroy the reference.

    EnumAdapters first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumAdapters next returns other adapters with outputs. EnumAdapters finally returns adapters without outputs.

    -
    - - bb174538 - HRESULT IDXGIFactory::EnumAdapters([In] unsigned int Adapter,[Out] IDXGIAdapter** ppAdapter) - IDXGIFactory::EnumAdapters -
    - - -

    Allows DXGI to monitor an application's message queue for the alt-enter key sequence (which causes the application to switch from windowed to full screen or vice versa).

    -
    -

    The handle of the window that is to be monitored. This parameter can be null; but only if the flags are also 0.

    -

    One or more of the following values:

    • - Prevent DXGI from monitoring an applications message queue; this makes DXGI unable to respond to mode changes.
    • - Prevent DXGI from responding to an alt-enter sequence.
    • - Prevent DXGI from responding to a print-screen key.
    -

    if WindowHandle is invalid, or E_OUTOFMEMORY.

    - - Note??If you call this API in a Session 0 process, it returns .?

    The combination of WindowHandle and Flags informs DXGI to stop monitoring window messages for the previously-associated window.

    If the application switches to full-screen mode, DXGI will choose a full-screen resolution to be the smallest supported resolution that is larger or the same size as the current back buffer size.

    Applications can make some changes to make the transition from windowed to full screen more efficient. For example, on a WM_SIZE message, the application should release any outstanding swap-chain back buffers, call , then re-acquire the back buffers from the swap chain(s). This gives the swap chain(s) an opportunity to resize the back buffers, and/or recreate them to enable full-screen flipping operation. If the application does not perform this sequence, DXGI will still make the full-screen/windowed transition, but may be forced to use a stretch operation (since the back buffers may not be the correct size), which may be less efficient. Even if a stretch is not required, presentation may not be optimal because the back buffers might not be directly interchangeable with the front buffer. Thus, a call to ResizeBuffers on WM_SIZE is always recommended, since WM_SIZE is always sent during a fullscreen transition.

    While windowed, the application can, if it chooses, restrict the size of its window's client area to sizes to which it is comfortable rendering. A fully flexible application would make no such restriction, but UI elements or other design considerations can, of course, make this flexibility untenable. If the application further chooses to restrict its window's client area to just those that match supported full-screen resolutions, the application can field WM_SIZING, then check against . If a matching mode is found, allow the resize. (The can be retrieved from . Absent subsequent changes to desktop topology, this will be the same output that will be chosen when alt-enter is fielded and fullscreen mode is begun for that swap chain.)

    Applications that want to handle mode changes or Alt+Enter themselves should call MakeWindowAssociation with the flag after swap chain creation. The WindowHandle argument, if non-null, specifies that the application message queues will not be handled by the DXGI runtime for all swap chains of a particular target . Calling MakeWindowAssociation with the flag after swapchain creation ensures that DXGI will not interfere with application's handling of window mode changes or Alt+Enter.

    -
    - - bb174540 - HRESULT IDXGIFactory::MakeWindowAssociation([In] HWND WindowHandle,[In] DXGI_MWA_FLAGS Flags) - IDXGIFactory::MakeWindowAssociation -
    - - -

    Get the window through which the user controls the transition to and from full screen.

    -
    -

    A reference to a window handle.

    - - Note??If you call this API in a Session 0 process, it returns .? - - - bb174539 - HRESULT IDXGIFactory::GetWindowAssociation([Out] HWND* pWindowHandle) - IDXGIFactory::GetWindowAssociation -
    - - -

    [Starting with Direct3D 11.1, we recommend not to use CreateSwapChain anymore to create a swap chain. Instead, use CreateSwapChainForHwnd, CreateSwapChainForCoreWindow, or CreateSwapChainForComposition depending on how you want to create the swap chain.]

    Creates a swap chain.

    -
    - No documentation. - No documentation. - No documentation. -

    if pDesc or ppSwapChain is null, if you request full-screen mode and it is unavailable, or E_OUTOFMEMORY. Other error codes defined by the type of device passed in may also be returned.

    - - Note??If you call this API in a Session 0 process, it returns .?

    If you attempt to create a swap chain in full-screen mode, and full-screen mode is unavailable, the swap chain will be created in windowed mode and will be returned.

    If the buffer width or the buffer height is zero, the sizes will be inferred from the output window size in the swap-chain description.

    Because the target output can't be chosen explicitly when the swap chain is created, we recommend not to create a full-screen swap chain. This can reduce presentation performance if the swap chain size and the output window size do not match. Here are two ways to ensure that the sizes match:

    • Create a windowed swap chain and then set it full-screen using .
    • Save a reference to the swap chain immediately after creation, and use it to get the output window size during a WM_SIZE event. Then resize the swap chain buffers (with ) during the transition from windowed to full-screen.

    If the swap chain is in full-screen mode, before you release it you must use SetFullscreenState to switch it to windowed mode. For more information about releasing a swap chain, see the "Destroying a Swap Chain" section of DXGI Overview.

    After the runtime renders the initial frame in full screen, the runtime might unexpectedly exit full screen during a call to . To work around this issue, we recommend that you execute the following code right after you call CreateSwapChain to create a full-screen swap chain (Windowed member of set to ). -

     // Detect if newly created full-screen swap chain isn't actually full screen.	
    -            * pTarget;  bFullscreen;	
    -            if (SUCCEEDED(pSwapChain->GetFullscreenState(&bFullscreen, &pTarget)))	
    -            { pTarget->Release();	
    -            }	
    -            else bFullscreen = ;	
    -            // If not full screen, enable full screen again.	
    -            if (!bFullscreen)	
    -            { ShowWindow(hWnd, SW_MINIMIZE); ShowWindow(hWnd, SW_RESTORE); pSwapChain->SetFullscreenState(TRUE, null);	
    -            }	
    -            

    You can specify and values in the swap-chain description that pDesc points to. These values allow you to use features like flip-model presentation and content protection by using pre-Windows?8 APIs.

    However, to use stereo presentation and to change resize behavior for the flip model, applications must use the method. Otherwise, the back-buffer contents implicitly scale to fit the presentation target size; that is, you can't turn off scaling.

    -
    - - bb174537 - HRESULT IDXGIFactory::CreateSwapChain([In] IUnknown* pDevice,[In] DXGI_SWAP_CHAIN_DESC* pDesc,[Out, Fast] IDXGISwapChain** ppSwapChain) - IDXGIFactory::CreateSwapChain -
    - - -

    Create an adapter interface that represents a software adapter.

    -
    -

    Handle to the software adapter's dll. HMODULE can be obtained with GetModuleHandle or LoadLibrary.

    -

    Address of a reference to an adapter (see ).

    - -

    A software adapter is a DLL that implements the entirety of a device driver interface, plus emulation, if necessary, of kernel-mode graphics components for Windows. Details on implementing a software adapter can be found in the Windows Vista Driver Development Kit. This is a very complex development task, and is not recommended for general readers.

    Calling this method will increment the module's reference count by one. The reference count can be decremented by calling FreeLibrary.

    The typical calling scenario is to call LoadLibrary, pass the handle to CreateSoftwareAdapter, then immediately call FreeLibrary on the DLL and forget the DLL's HMODULE. Since the software adapter calls FreeLibrary when it is destroyed, the lifetime of the DLL will now be owned by the adapter, and the application is free of any further consideration of its lifetime.

    -
    - - bb174536 - HRESULT IDXGIFactory::CreateSoftwareAdapter([In] HINSTANCE Module,[Out] IDXGIAdapter** ppAdapter) - IDXGIFactory::CreateSoftwareAdapter -
    - - -

    The interface implements methods for generating DXGI objects.

    -
    - -

    This interface is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    To create a factory, call the CreateDXGIFactory1 function.

    Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. - You can request the or interface from the Direct3D device and then use the method to locate - the factory. The following code shows how.

     * pDXGIDevice;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);  * pDXGIAdapter;	
    -            hr = pDXGIDevice->GetParent(__uuidof(), (void **)&pDXGIAdapter);  * pIDXGIFactory;	
    -            pDXGIAdapter->GetParent(__uuidof(), (void **)&pIDXGIFactory);	
    -            
    -
    - - ff471335 - IDXGIFactory1 - IDXGIFactory1 -
    - - - Default Constructor for Factory1. - - - - - Gets both adapters (video cards) with or without outputs. - - The index of the adapter to enumerate. - a reference to an interface at the position specified by the Adapter parameter - - This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop.When the EnumAdapters1 method succeeds and fills the ppAdapter parameter with the address of the reference to the adapter interface, EnumAdapters1 increments the adapter interface's reference count. When you finish using the adapter interface, call the Release method to decrement the reference count before you destroy the reference.EnumAdapters1 first returns the local adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumAdapters1 next returns other adapters with outputs. EnumAdapters1 finally returns adapters without outputs. - - HRESULT IDXGIFactory1::EnumAdapters1([In] unsigned int Adapter,[Out] IDXGIAdapter1** ppAdapter) - - - - Return an array of available from this factory. - - HRESULT IDXGIFactory1::EnumAdapters1([In] unsigned int Adapter,[Out] IDXGIAdapter1** ppAdapter) - - - - Return the number of available adapters from this factory. - - The number of adapters - HRESULT IDXGIFactory1::EnumAdapters1([In] unsigned int Adapter,[Out] IDXGIAdapter1** ppAdapter) - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Informs an application of the possible need to re-enumerate adapters.

    -
    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    -
    - - ff471337 - IsCurrent - IsCurrent - BOOL IDXGIFactory1::IsCurrent() -
    - - -

    Enumerates both adapters (video cards) with or without outputs.

    -
    -

    The index of the adapter to enumerate.

    -

    The address of a reference to an interface at the position specified by the Adapter parameter. This parameter must not be null.

    -

    Returns if successful; otherwise, returns if the index is greater than or equal to the number of adapters in the local system, or if ppAdapter parameter is null.

    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop.

    When the EnumAdapters1 method succeeds and fills the ppAdapter parameter with the address of the reference to the adapter interface, EnumAdapters1 increments the adapter interface's reference count. When you finish using the adapter interface, call the Release method to decrement the reference count before you destroy the reference.

    EnumAdapters1 first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumAdapters1 next returns other adapters with outputs. EnumAdapters1 finally returns adapters without outputs.

    -
    - - ff471336 - HRESULT IDXGIFactory1::EnumAdapters1([In] unsigned int Adapter,[Out] IDXGIAdapter1** ppAdapter) - IDXGIFactory1::EnumAdapters1 -
    - - -

    Informs an application of the possible need to re-enumerate adapters.

    -
    -

    , if a new adapter is becoming available or the current adapter is going away. TRUE, no adapter changes.

    IsCurrent returns to inform the calling application to re-enumerate adapters.

    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    -
    - - ff471337 - BOOL IDXGIFactory1::IsCurrent() - IDXGIFactory1::IsCurrent -
    - - -

    The interface includes methods to create a newer version swap chain with more features than and to monitor stereoscopic 3D capabilities.

    -
    - -

    To create a Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 factory interface, pass into either the CreateDXGIFactory or CreateDXGIFactory1 function or call QueryInterface from a factory object that either CreateDXGIFactory or CreateDXGIFactory1 returns. -

    Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. - You can request the , , or interface from the Direct3D device and then use the method to locate - the factory. The following code shows how.

     * pDXGIDevice;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);  * pDXGIAdapter;	
    -            hr = pDXGIDevice->GetParent(__uuidof(), (void **)&pDXGIAdapter);  * pIDXGIFactory;	
    -            pDXGIAdapter->GetParent(__uuidof(), (void **)&pIDXGIFactory);	
    -            
    -
    - - hh404556 - IDXGIFactory2 - IDXGIFactory2 -
    - - - Initializes a new instance of class. - - True - to set the DXGI_CREATE_FACTORY_DEBUG flag. - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Determines whether to use stereo mode.

    -
    - -

    We recommend that windowed applications call IsWindowedStereoEnabled before they attempt to use stereo. IsWindowedStereoEnabled returns TRUE if both of the following items are true:

    • All adapters in the computer have drivers that are capable of stereo. This only means that the driver is implemented to the Windows Display Driver Model (WDDM) for Windows?8 (WDDM 1.2). However, the adapter does not necessarily have to be able to scan out stereo.
    • The current desktop mode (desktop modes are mono) and system policy and hardware are configured so that the Desktop Window Manager (DWM) performs stereo composition on at least one adapter output.

    The creation of a windowed stereo swap chain succeeds if the first requirement is met. However, if the adapter can't scan out stereo, the output on that adapter is reduced to mono.

    The Direct3D 11.1 Simple Stereo 3D Sample shows how to add a stereoscopic 3D effect and how to respond to system stereo changes.

    -
    - - hh404561 - IsWindowedStereoEnabled - IsWindowedStereoEnabled - BOOL IDXGIFactory2::IsWindowedStereoEnabled() -
    - - -

    Determines whether to use stereo mode.

    -
    -

    Indicates whether to use stereo mode. TRUE indicates that you can use stereo mode; otherwise, .

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, IsWindowedStereoEnabled always returns because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    We recommend that windowed applications call IsWindowedStereoEnabled before they attempt to use stereo. IsWindowedStereoEnabled returns TRUE if both of the following items are true:

    • All adapters in the computer have drivers that are capable of stereo. This only means that the driver is implemented to the Windows Display Driver Model (WDDM) for Windows?8 (WDDM 1.2). However, the adapter does not necessarily have to be able to scan out stereo.
    • The current desktop mode (desktop modes are mono) and system policy and hardware are configured so that the Desktop Window Manager (DWM) performs stereo composition on at least one adapter output.

    The creation of a windowed stereo swap chain succeeds if the first requirement is met. However, if the adapter can't scan out stereo, the output on that adapter is reduced to mono.

    The Direct3D 11.1 Simple Stereo 3D Sample shows how to add a stereoscopic 3D effect and how to respond to system stereo changes.

    -
    - - hh404561 - BOOL IDXGIFactory2::IsWindowedStereoEnabled() - IDXGIFactory2::IsWindowedStereoEnabled -
    - - -

    Creates a swap chain that is associated with an handle to the output window for the swap chain.

    -
    - No documentation. - No documentation. - No documentation. - No documentation. - No documentation. - No documentation. -

    CreateSwapChainForHwnd returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.

    Platform Update for Windows?7:?? is not supported on Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed and causes CreateSwapChainForHwnd to return when called. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - - Note??Do not use this method in Windows Store apps. Instead, use .?

    If you specify the width, height, or both (Width and Height members of that pDesc points to) of the swap chain as zero, the runtime obtains the size from the output window that the hWnd parameter specifies. You can subsequently call the method to retrieve the assigned width or height value.

    Because you can associate only one flip presentation model swap chain at a time with an , the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see Deferred Destruction Issues with Flip Presentation Swap Chains.

    For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.

    -
    - - hh404557 - HRESULT IDXGIFactory2::CreateSwapChainForHwnd([In] IUnknown* pDevice,[In] HWND hWnd,[In] const DXGI_SWAP_CHAIN_DESC1* pDesc,[In, Optional] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pFullscreenDesc,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out, Fast] IDXGISwapChain1** ppSwapChain) - IDXGIFactory2::CreateSwapChainForHwnd -
    - - -

    Creates a swap chain that is associated with the CoreWindow object for the output window for the swap chain.

    -
    - No documentation. - No documentation. - No documentation. - No documentation. - No documentation. -

    CreateSwapChainForCoreWindow returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, CreateSwapChainForCoreWindow fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - - Note??Use this method in Windows Store apps rather than .?

    If you specify the width, height, or both (Width and Height members of that pDesc points to) of the swap chain as zero, the runtime obtains the size from the output window that the pWindow parameter specifies. You can subsequently call the method to retrieve the assigned width or height value.

    Because you can associate only one flip presentation model swap chain (per layer) at a time with a CoreWindow, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see Deferred Destruction Issues with Flip Presentation Swap Chains.

    For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.

    -
    - - hh404559 - HRESULT IDXGIFactory2::CreateSwapChainForCoreWindow([In] IUnknown* pDevice,[In] IUnknown* pWindow,[In] const DXGI_SWAP_CHAIN_DESC1* pDesc,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out, Fast] IDXGISwapChain1** ppSwapChain) - IDXGIFactory2::CreateSwapChainForCoreWindow -
    - - -

    Identifies the adapter on which a shared resource object was created.

    -
    -

    A handle to a shared resource object. The method returns this handle.

    -

    A reference to a variable that receives a locally unique identifier () value that identifies the adapter. is defined in Dxgi.h. An is a 64-bit value that is guaranteed to be unique only on the operating system on which it was generated. The uniqueness of an is guaranteed only until the operating system is restarted.

    -

    GetSharedResourceAdapterLuid returns:

    • if it identified the adapter.
    • if hResource is invalid.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, GetSharedResourceAdapterLuid fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    You cannot share resources across adapters. Therefore, you cannot open a shared resource on an adapter other than the adapter on which the resource was created. Call GetSharedResourceAdapterLuid before you open a shared resource to ensure that the resource was created on the appropriate adapter. To open a shared resource, call the or method.

    -
    - - hh404560 - HRESULT IDXGIFactory2::GetSharedResourceAdapterLuid([In] void* hResource,[Out] LUID* pLuid) - IDXGIFactory2::GetSharedResourceAdapterLuid -
    - - -

    Registers an application window to receive notification messages of changes of stereo status.

    -
    -

    The handle of the window to send a notification message to when stereo status change occurs.

    -

    Identifies the notification message to send.

    -

    A reference to a key value that an application can pass to the method to unregister the notification message that wMsg specifies.

    -

    RegisterStereoStatusWindow returns:

    • if it successfully registered the window.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, RegisterStereoStatusWindow fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - - hh404587 - HRESULT IDXGIFactory2::RegisterStereoStatusWindow([In] HWND WindowHandle,[In] unsigned int wMsg,[Out] unsigned int* pdwCookie) - IDXGIFactory2::RegisterStereoStatusWindow -
    - - -

    Registers to receive notification of changes in stereo status by using event signaling.

    -
    -

    A handle to the event object that the operating system sets when notification of stereo status change occurs. The CreateEvent or OpenEvent function returns this handle.

    -

    A reference to a key value that an application can pass to the method to unregister the notification event that hEvent specifies.

    -

    RegisterStereoStatusEvent returns:

    • if it successfully registered the event.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, RegisterStereoStatusEvent fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - - hh404584 - HRESULT IDXGIFactory2::RegisterStereoStatusEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) - IDXGIFactory2::RegisterStereoStatusEvent -
    - - -

    Unregisters a window or an event to stop it from receiving notification when stereo status changes.

    -
    -

    A key value for the window or event to unregister. The or method returns this value.

    - -

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, UnregisterStereoStatus has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404593 - void IDXGIFactory2::UnregisterStereoStatus([In] unsigned int dwCookie) - IDXGIFactory2::UnregisterStereoStatus -
    - - -

    Registers an application window to receive notification messages of changes of occlusion status.

    -
    -

    The handle of the window to send a notification message to when occlusion status change occurs.

    -

    Identifies the notification message to send.

    -

    A reference to a key value that an application can pass to the method to unregister the notification message that wMsg specifies.

    -

    RegisterOcclusionStatusWindow returns:

    • if it successfully registered the window.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if WindowHandle is not a valid window handle or not the window handle that the current process owns.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, RegisterOcclusionStatusWindow fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    Apps choose the Windows message that Windows sends when occlusion status changes.

    -
    - - hh404581 - HRESULT IDXGIFactory2::RegisterOcclusionStatusWindow([In] HWND WindowHandle,[In] unsigned int wMsg,[Out] unsigned int* pdwCookie) - IDXGIFactory2::RegisterOcclusionStatusWindow -
    - - -

    Registers to receive notification of changes in occlusion status by using event signaling.

    -
    -

    A handle to the event object that the operating system sets when notification of occlusion status change occurs. The CreateEvent or OpenEvent function returns this handle.

    -

    A reference to a key value that an application can pass to the method to unregister the notification event that hEvent specifies.

    -

    RegisterOcclusionStatusEvent returns:

    • if the method successfully registered the event.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if hEvent is not a valid handle or not an event handle.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, RegisterOcclusionStatusEvent fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    If you call RegisterOcclusionStatusEvent multiple times with the same event handle, RegisterOcclusionStatusEvent fails with .

    If you call RegisterOcclusionStatusEvent multiple times with the different event handles, RegisterOcclusionStatusEvent properly registers the events.

    -
    - - hh404578 - HRESULT IDXGIFactory2::RegisterOcclusionStatusEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) - IDXGIFactory2::RegisterOcclusionStatusEvent -
    - - -

    Unregisters a window or an event to stop it from receiving notification when occlusion status changes.

    -
    -

    A key value for the window or event to unregister. The or method returns this value.

    - -

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, UnregisterOcclusionStatus has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404590 - void IDXGIFactory2::UnregisterOcclusionStatus([In] unsigned int dwCookie) - IDXGIFactory2::UnregisterOcclusionStatus -
    - - -

    Creates a swap chain that you can use to send Direct3D content into the DirectComposition API or the Windows.UI.Xaml framework to compose in a window.

    -
    - No documentation. - No documentation. - No documentation. - No documentation. -

    CreateSwapChainForComposition returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, CreateSwapChainForComposition fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    You can use composition swap chains with either DirectComposition?s interface or XAML?s SwapChainBackgroundPanel class. For DirectComposition, you can call the method to set the swap chain as the content of a visual object, which then allows you to bind the swap chain to the visual tree. For XAML, the SwapChainBackgroundPanel class exposes a classic COM interface . You can use the method to bind to the XAML UI graph. For info about how to use composition swap chains with XAML?s SwapChainBackgroundPanel class, see DirectX and XAML interop.

    The , , , , and IDXGISwapChain::GetCoreWindow methods aren't valid on this type of swap chain. If you call any of these methods on this type of swap chain, they fail.

    For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.

    -
    - - hh404558 - HRESULT IDXGIFactory2::CreateSwapChainForComposition([In] IUnknown* pDevice,[In] const DXGI_SWAP_CHAIN_DESC1* pDesc,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out, Fast] IDXGISwapChain1** ppSwapChain) - IDXGIFactory2::CreateSwapChainForComposition -
    - - -

    Enables creating Microsoft DirectX Graphics Infrastructure (DXGI) objects.

    -
    - - mt427785 - IDXGIFactory4 - IDXGIFactory4 -
    - - - Initializes a new instance of class. - - - - - Gets the default warp adapter. - - The warp adapter. - - - - Gets the adapter for the specified LUID. - - A unique value that identifies the adapter. - The adapter. - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Outputs the for the specified .

    -
    - No documentation. - No documentation. - No documentation. -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR. See also Direct3D 12 Return Codes.

    - -

    For Direct3D 12, it's no longer possible to backtrack from a device to the that was used to create it. enables an app to retrieve information about the adapter where a D3D12 device was created. is designed to be paired with . For more information, see DXGI 1.4 Improvements.

    -
    - - mt427786 - HRESULT IDXGIFactory4::EnumAdapterByLuid([In] LUID AdapterLuid,[In] const GUID& riid,[Out] void** ppvAdapter) - IDXGIFactory4::EnumAdapterByLuid -
    - - -

    Provides an adapter which can be provided to to use the WARP renderer.

    -
    -

    The globally unique identifier () of the object referenced by the ppvAdapter parameter.

    -

    The address of an interface reference to the adapter. This parameter must not be null.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR. See also Direct3D 12 Return Codes.

    - -

    For more information, see DXGI 1.4 Improvements.

    -
    - - mt427787 - HRESULT IDXGIFactory4::EnumWarpAdapter([In] const GUID& riid,[Out] void** ppvAdapter) - IDXGIFactory4::EnumWarpAdapter -
    - - - Helper to use with . - - - - - Calculates the size of a in bytes. Can be 0 for compressed format (as they are less than 1 byte) - - The DXGI format. - size of in bytes - - - - Calculates the size of a in bits. - - The DXGI format. - size of in bits - - - - Returns true if the is valid. - - A format to validate - True if the is valid. - - - - Returns true if the is a compressed format. - - The format to check for compressed. - True if the is a compressed format - - - - Determines whether the specified is packed. - - The DXGI Format. - true if the specified is packed; otherwise, false. - - - - Determines whether the specified is video. - - The . - true if the specified is video; otherwise, false. - - - - Determines whether the specified is a SRGB format. - - The . - true if the specified is a SRGB format; otherwise, false. - - - - Determines whether the specified is typeless. - - The . - true if the specified is typeless; otherwise, false. - - - - Computes the scanline count (number of scanlines). - - The . - The height. - The scanline count. - - - - Static initializer to speed up size calculation (not sure the JIT is enough "smart" for this kind of thing). - - - - -

    Identifies the type of DXGI adapter.

    -
    - -

    The enumerated type is used by the Flags member of the or structure to identify the type of DXGI adapter.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG - DXGI_ADAPTER_FLAG -
    - - -

    Specifies no flags.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG_NONE - DXGI_ADAPTER_FLAG_NONE -
    - - -

    Value always set to 0. This flag is reserved.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG_REMOTE - DXGI_ADAPTER_FLAG_REMOTE -
    - - -

    Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG_SOFTWARE - DXGI_ADAPTER_FLAG_SOFTWARE -
    - - -

    Identifies the type of DXGI adapter.

    -
    - -

    The enumerated type is used by the Flags member of the or structure to identify the type of DXGI adapter.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG3 - DXGI_ADAPTER_FLAG3 -
    - - -

    Specifies no flags.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG3_NONE - DXGI_ADAPTER_FLAG3_NONE -
    - - -

    Value always set to 0. This flag is reserved.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG3_REMOTE - DXGI_ADAPTER_FLAG3_REMOTE -
    - - -

    Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG3_SOFTWARE - DXGI_ADAPTER_FLAG3_SOFTWARE -
    - - -

    Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.

    -
    - - ff471327 - DXGI_ADAPTER_FLAG3_ACG_COMPATIBLE - DXGI_ADAPTER_FLAG3_ACG_COMPATIBLE -
    - - -

    Identifies the alpha value, transparency behavior, of a surface.

    -
    - -

    For more information about alpha mode, see .

    -
    - - hh404496 - DXGI_ALPHA_MODE - DXGI_ALPHA_MODE -
    - - -

    Indicates that the transparency behavior is not specified.

    -
    - - hh404496 - DXGI_ALPHA_MODE_UNSPECIFIED - DXGI_ALPHA_MODE_UNSPECIFIED -
    - - -

    Indicates that the transparency behavior is premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.

    -
    - - hh404496 - DXGI_ALPHA_MODE_PREMULTIPLIED - DXGI_ALPHA_MODE_PREMULTIPLIED -
    - - -

    Indicates that the transparency behavior is not premultiplied. The alpha channel indicates the transparency of the color.

    -
    - - hh404496 - DXGI_ALPHA_MODE_STRAIGHT - DXGI_ALPHA_MODE_STRAIGHT -
    - - -

    Indicates to ignore the transparency behavior.

    -
    - - hh404496 - DXGI_ALPHA_MODE_IGNORE - DXGI_ALPHA_MODE_IGNORE -
    - - -

    Specifies color space types.

    -
    - -

    This enum is used within DXGI in the CheckColorSpaceSupport, SetColorSpace1 and CheckOverlayColorSpaceSupport methods. It is also referenced in D3D11 video methods such as , and D2D methods such as .

    The following color parameters are defined:

    -
    - - dn903661 - DXGI_COLOR_SPACE_TYPE - DXGI_COLOR_SPACE_TYPE -
    - - -
    PropertyValue
    ColorspaceRGB
    Range0-255
    Gamma2.2
    SitingImage
    PrimariesBT.709

    ?

    This is the standard definition for sRGB. Note that this is often implemented with a linear segment, but in that case the exponent is corrected to stay aligned with a gamma 2.2 curve. This is usually used with 8 bit and 10 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 - DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 -
    - - -
    PropertyValue
    ColorspaceRGB
    Range0-255
    Gamma1.0
    SitingImage
    PrimariesBT.709

    ?

    This is the standard definition for scRGB, and is usually used with 16 bit integer, 16 bit floating point, and 32 bit floating point channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 - DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 -
    - - -
    PropertyValue
    ColorspaceRGB
    Range16-235
    Gamma2.2
    SitingImage
    PrimariesBT.709

    ?

    This is the standard definition for ITU-R Recommendation BT.709. Note that due to the inclusion of a linear segment, the transfer curve looks similar to a pure exponential gamma of 1.9. This is usually used with 8 bit and 10 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709 - DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709 -
    - - -
    PropertyValue
    ColorspaceRGB
    Range16-235
    Gamma2.2
    SitingImage
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020 - DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020 -
    - - -

    Reserved.

    -
    - - dn903661 - DXGI_COLOR_SPACE_RESERVED - DXGI_COLOR_SPACE_RESERVED -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range0-255
    Gamma2.2
    SitingImage
    PrimariesBT.709
    TransferBT.601

    ?

    This definition is commonly used for JPG, and is usually used with 8, 10, 12, or 16 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 - DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2.2
    SitingVideo
    PrimariesBT.601

    ?

    This definition is commonly used for MPEG2, and is usually used with 8, 10, 12, or 16 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range0-255
    Gamma2.2
    SitingVideo
    PrimariesBT.601

    ?

    This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601 - DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2.2
    SitingVideo
    PrimariesBT.709

    ?

    This definition is commonly used for H.264 and HEVC, and is usually used with 8, 10, 12, or 16 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range0-255
    Gamma2.2
    SitingVideo
    PrimariesBT.709

    ?

    This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709 - DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2.2
    SitingVideo
    PrimariesBT.2020

    ?

    This definition may be used by HEVC, and is usually used with 10, 12, or 16 bit color channels. -

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range0-255
    Gamma2.2
    SitingVideo
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 - DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 -
    - - -
    PropertyValue
    ColorspaceRGB
    Range0-255
    Gamma2084
    SitingImage
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    -
    - - dn903661 - DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 - DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2084
    SitingVideo
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_LEFT_P2020 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_LEFT_P2020 -
    - - -
    PropertyValue
    ColorspaceRGB
    Range16-235
    Gamma2084
    SitingImage
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    -
    - - dn903661 - DXGI_COLOR_SPACE_RGB_STUDIO_G2084_NONE_P2020 - DXGI_COLOR_SPACE_RGB_STUDIO_G2084_NONE_P2020 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2.2
    SitingVideo
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_TOPLEFT_P2020 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_TOPLEFT_P2020 -
    - - -
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2084
    SitingVideo
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_TOPLEFT_P2020 - DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_TOPLEFT_P2020 -
    - - -
    PropertyValue
    ColorspaceRGB
    Range0-255
    Gamma2.2
    SitingImage
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    -
    - - dn903661 - DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P2020 - DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P2020 -
    - - -

    A custom color definition is used.

    -
    - - dn903661 - DXGI_COLOR_SPACE_YCBCR_STUDIO_GHLG_TOPLEFT_P2020 - DXGI_COLOR_SPACE_YCBCR_STUDIO_GHLG_TOPLEFT_P2020 -
    - - - No documentation. - - - dn903661 - DXGI_COLOR_SPACE_YCBCR_FULL_GHLG_TOPLEFT_P2020 - DXGI_COLOR_SPACE_YCBCR_FULL_GHLG_TOPLEFT_P2020 - - - -

    A custom color definition is used.

    -
    - - dn903661 - DXGI_COLOR_SPACE_CUSTOM - DXGI_COLOR_SPACE_CUSTOM -
    - - -

    Identifies the granularity at which the graphics processing unit (GPU) can be preempted from performing its current compute task.

    -
    - -

    You call the method to retrieve the granularity level at which the GPU can be preempted from performing its current compute task. The operating system specifies the compute granularity level in the ComputePreemptionGranularity member of the structure.

    -
    - - hh404499 - DXGI_COMPUTE_PREEMPTION_GRANULARITY - DXGI_COMPUTE_PREEMPTION_GRANULARITY -
    - - -

    Indicates the preemption granularity as a compute packet.

    -
    - - hh404499 - DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY - DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY -
    - - -

    Indicates the preemption granularity as a dispatch (for example, a call to the method). A dispatch is a part of a compute packet.

    -
    - - hh404499 - DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY - DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY -
    - - -

    Indicates the preemption granularity as a thread group. A thread group is a part of a dispatch.

    -
    - - hh404499 - DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY - DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY -
    - - -

    Indicates the preemption granularity as a thread in a thread group. A thread is a part of a thread group.

    -
    - - hh404499 - DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY - DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY -
    - - -

    Indicates the preemption granularity as a compute instruction in a thread.

    -
    - - hh404499 - DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY - DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY -
    - - - No documentation. - - - DXGI_ENUM_MODES_FLAGS - DXGI_ENUM_MODES_FLAGS - - - - No documentation. - - - DXGI_ENUM_MODES_INTERLACED - DXGI_ENUM_MODES_INTERLACED - - - - No documentation. - - - DXGI_ENUM_MODES_SCALING - DXGI_ENUM_MODES_SCALING - - - - No documentation. - - - DXGI_ENUM_MODES_STEREO - DXGI_ENUM_MODES_STEREO - - - - No documentation. - - - DXGI_ENUM_MODES_DISABLED_STEREO - DXGI_ENUM_MODES_DISABLED_STEREO - - - -

    Flags that indicate how the back buffers should be rotated to fit the physical rotation of a monitor.

    -
    - - bb173065 - DXGI_MODE_ROTATION - DXGI_MODE_ROTATION -
    - - -

    Unspecified rotation.

    -
    - - bb173065 - DXGI_MODE_ROTATION_UNSPECIFIED - DXGI_MODE_ROTATION_UNSPECIFIED -
    - - -

    Specifies no rotation.

    -
    - - bb173065 - DXGI_MODE_ROTATION_IDENTITY - DXGI_MODE_ROTATION_IDENTITY -
    - - -

    Specifies 90 degrees of rotation.

    -
    - - bb173065 - DXGI_MODE_ROTATION_ROTATE90 - DXGI_MODE_ROTATION_ROTATE90 -
    - - -

    Specifies 180 degrees of rotation.

    -
    - - bb173065 - DXGI_MODE_ROTATION_ROTATE180 - DXGI_MODE_ROTATION_ROTATE180 -
    - - -

    Specifies 270 degrees of rotation.

    -
    - - bb173065 - DXGI_MODE_ROTATION_ROTATE270 - DXGI_MODE_ROTATION_ROTATE270 -
    - - -

    Flags indicating how an image is stretched to fit a given monitor's resolution.

    -
    - -

    Selecting the CENTERED or STRETCHED modes can result in a mode change even if you specify the native resolution of the display in the . If you know the native resolution of the display and want to make sure that you do not initiate a mode change when transitioning a swap chain to full screen (either via ALT+ENTER or ), you should use UNSPECIFIED.

    This enum is used by the and structures.

    -
    - - bb173066 - DXGI_MODE_SCALING - DXGI_MODE_SCALING -
    - - -

    Unspecified scaling.

    -
    - - bb173066 - DXGI_MODE_SCALING_UNSPECIFIED - DXGI_MODE_SCALING_UNSPECIFIED -
    - - -

    Specifies no scaling. The image is centered on the display. This flag is typically used for a fixed-dot-pitch display (such as an LED display).

    -
    - - bb173066 - DXGI_MODE_SCALING_CENTERED - DXGI_MODE_SCALING_CENTERED -
    - - -

    Specifies stretched scaling.

    -
    - - bb173066 - DXGI_MODE_SCALING_STRETCHED - DXGI_MODE_SCALING_STRETCHED -
    - - -

    Flags indicating the method the raster uses to create an image on a surface.

    -
    - -

    This enum is used by the and structures.

    -
    - - bb173067 - DXGI_MODE_SCANLINE_ORDER - DXGI_MODE_SCANLINE_ORDER -
    - - -

    Scanline order is unspecified.

    -
    - - bb173067 - DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED - DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED -
    - - -

    The image is created from the first scanline to the last without skipping any.

    -
    - - bb173067 - DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE - DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE -
    - - -

    The image is created beginning with the upper field.

    -
    - - bb173067 - DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST - DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST -
    - - -

    The image is created beginning with the lower field.

    -
    - - bb173067 - DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST - DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST -
    - - -

    Status codes that can be returned by DXGI functions.

    -

    - -

    The value for each value is determined from this macro that is defined in DXGItype.h:

     #define _FACDXGI    0x87a	
    -            #define MAKE_DXGI_STATUS(code)  MAKE_HRESULT(0, _FACDXGI, code)	
    -            

    For example, is defined as 0x087A0001:

     #define                     MAKE_DXGI_STATUS(1)	
    -            
    -
    - - cc308061 - DXGI_STATUS - DXGI_STATUS -
    - - - No documentation. - - - cc308061 - DXGI_STATUS_OCCLUDED - DXGI_STATUS_OCCLUDED - - - - No documentation. - - - cc308061 - DXGI_STATUS_CLIPPED - DXGI_STATUS_CLIPPED - - - - No documentation. - - - cc308061 - DXGI_STATUS_NO_REDIRECTION - DXGI_STATUS_NO_REDIRECTION - - - - No documentation. - - - cc308061 - DXGI_STATUS_NO_DESKTOP_ACCESS - DXGI_STATUS_NO_DESKTOP_ACCESS - - - - No documentation. - - - cc308061 - DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE - DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE - - - - No documentation. - - - cc308061 - DXGI_STATUS_MODE_CHANGED - DXGI_STATUS_MODE_CHANGED - - - - No documentation. - - - cc308061 - DXGI_STATUS_MODE_CHANGE_IN_PROGRESS - DXGI_STATUS_MODE_CHANGE_IN_PROGRESS - - - - No documentation. - - - cc308061 - DXGI_STATUS_UNOCCLUDED - DXGI_STATUS_UNOCCLUDED - - - - No documentation. - - - cc308061 - DXGI_STATUS_DDA_WAS_STILL_DRAWING - DXGI_STATUS_DDA_WAS_STILL_DRAWING - - - - No documentation. - - - cc308061 - DXGI_STATUS_PRESENT_REQUIRED - DXGI_STATUS_PRESENT_REQUIRED - - - -

    Specifies a range of hardware features, to be used when checking for feature support.

    -
    - -

    This enum is used by the CheckFeatureSupport method.

    -
    - - mt722565 - DXGI_FEATURE - DXGI_FEATURE -
    - - -

    The display supports tearing, a requirement of variable refresh rate displays.

    -
    - - mt722565 - DXGI_FEATURE_PRESENT_ALLOW_TEARING - DXGI_FEATURE_PRESENT_ALLOW_TEARING -
    - - -

    Resource data formats, including fully-typed and typeless formats. A list of modifiers at the bottom of the page more fully describes each format type.

    -
    - - bb173059 - DXGI_FORMAT - DXGI_FORMAT -
    - - -

    The format is not known.

    -
    - - bb173059 - DXGI_FORMAT_UNKNOWN - DXGI_FORMAT_UNKNOWN -
    - - -

    A four-component, 128-bit typeless format that supports 32 bits per channel including alpha. ?

    -
    - - bb173059 - DXGI_FORMAT_R32G32B32A32_TYPELESS - DXGI_FORMAT_R32G32B32A32_TYPELESS -
    - - -

    A four-component, 128-bit floating-point format that supports 32 bits per channel including alpha. 1,5,8

    -
    - - bb173059 - DXGI_FORMAT_R32G32B32A32_FLOAT - DXGI_FORMAT_R32G32B32A32_FLOAT -
    - - -

    A four-component, 128-bit unsigned-integer format that supports 32 bits per channel including alpha. ?

    -
    - - bb173059 - DXGI_FORMAT_R32G32B32A32_UINT - DXGI_FORMAT_R32G32B32A32_UINT -
    - - -

    A four-component, 128-bit signed-integer format that supports 32 bits per channel including alpha. ?

    -
    - - bb173059 - DXGI_FORMAT_R32G32B32A32_SINT - DXGI_FORMAT_R32G32B32A32_SINT -
    - - -

    A three-component, 96-bit typeless format that supports 32 bits per color channel.

    -
    - - bb173059 - DXGI_FORMAT_R32G32B32_TYPELESS - DXGI_FORMAT_R32G32B32_TYPELESS -
    - - -

    A three-component, 96-bit floating-point format that supports 32 bits per color channel.5,8

    -
    - - bb173059 - DXGI_FORMAT_R32G32B32_FLOAT - DXGI_FORMAT_R32G32B32_FLOAT -
    - - -

    A three-component, 96-bit unsigned-integer format that supports 32 bits per color channel.

    -
    - - bb173059 - DXGI_FORMAT_R32G32B32_UINT - DXGI_FORMAT_R32G32B32_UINT -
    - - -

    A three-component, 96-bit signed-integer format that supports 32 bits per color channel.

    -
    - - bb173059 - DXGI_FORMAT_R32G32B32_SINT - DXGI_FORMAT_R32G32B32_SINT -
    - - -

    A four-component, 64-bit typeless format that supports 16 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R16G16B16A16_TYPELESS - DXGI_FORMAT_R16G16B16A16_TYPELESS -
    - - -

    A four-component, 64-bit floating-point format that supports 16 bits per channel including alpha.5,7

    -
    - - bb173059 - DXGI_FORMAT_R16G16B16A16_FLOAT - DXGI_FORMAT_R16G16B16A16_FLOAT -
    - - -

    A four-component, 64-bit unsigned-normalized-integer format that supports 16 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R16G16B16A16_UNORM - DXGI_FORMAT_R16G16B16A16_UNORM -
    - - -

    A four-component, 64-bit unsigned-integer format that supports 16 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R16G16B16A16_UINT - DXGI_FORMAT_R16G16B16A16_UINT -
    - - -

    A four-component, 64-bit signed-normalized-integer format that supports 16 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R16G16B16A16_SNORM - DXGI_FORMAT_R16G16B16A16_SNORM -
    - - -

    A four-component, 64-bit signed-integer format that supports 16 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R16G16B16A16_SINT - DXGI_FORMAT_R16G16B16A16_SINT -
    - - -

    A two-component, 64-bit typeless format that supports 32 bits for the red channel and 32 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R32G32_TYPELESS - DXGI_FORMAT_R32G32_TYPELESS -
    - - -

    A two-component, 64-bit floating-point format that supports 32 bits for the red channel and 32 bits for the green channel.5,8

    -
    - - bb173059 - DXGI_FORMAT_R32G32_FLOAT - DXGI_FORMAT_R32G32_FLOAT -
    - - -

    A two-component, 64-bit unsigned-integer format that supports 32 bits for the red channel and 32 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R32G32_UINT - DXGI_FORMAT_R32G32_UINT -
    - - -

    A two-component, 64-bit signed-integer format that supports 32 bits for the red channel and 32 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R32G32_SINT - DXGI_FORMAT_R32G32_SINT -
    - - -

    A two-component, 64-bit typeless format that supports 32 bits for the red channel, 8 bits for the green channel, and 24 bits are unused.

    -
    - - bb173059 - DXGI_FORMAT_R32G8X24_TYPELESS - DXGI_FORMAT_R32G8X24_TYPELESS -
    - - -

    A 32-bit floating-point component, and two unsigned-integer components (with an additional 32 bits). This format supports 32-bit depth, 8-bit stencil, and 24 bits are unused.?

    -
    - - bb173059 - DXGI_FORMAT_D32_FLOAT_S8X24_UINT - DXGI_FORMAT_D32_FLOAT_S8X24_UINT -
    - - -

    A 32-bit floating-point component, and two typeless components (with an additional 32 bits). This format supports 32-bit red channel, 8 bits are unused, and 24 bits are unused.?

    -
    - - bb173059 - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS -
    - - -

    A 32-bit typeless component, and two unsigned-integer components (with an additional 32 bits). This format has 32 bits unused, 8 bits for green channel, and 24 bits are unused.

    -
    - - bb173059 - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT -
    - - -

    A four-component, 32-bit typeless format that supports 10 bits for each color and 2 bits for alpha.

    -
    - - bb173059 - DXGI_FORMAT_R10G10B10A2_TYPELESS - DXGI_FORMAT_R10G10B10A2_TYPELESS -
    - - -

    A four-component, 32-bit unsigned-normalized-integer format that supports 10 bits for each color and 2 bits for alpha.

    -
    - - bb173059 - DXGI_FORMAT_R10G10B10A2_UNORM - DXGI_FORMAT_R10G10B10A2_UNORM -
    - - -

    A four-component, 32-bit unsigned-integer format that supports 10 bits for each color and 2 bits for alpha.

    -
    - - bb173059 - DXGI_FORMAT_R10G10B10A2_UINT - DXGI_FORMAT_R10G10B10A2_UINT -
    - - -

    Three partial-precision floating-point numbers encoded into a single 32-bit value (a variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There are no sign bits, and there is a 5-bit biased (15) exponent for each channel, 6-bit mantissa for R and G, and a 5-bit mantissa for B, as shown in the following illustration.5,7

    -
    - - bb173059 - DXGI_FORMAT_R11G11B10_FLOAT - DXGI_FORMAT_R11G11B10_FLOAT -
    - - -

    A four-component, 32-bit typeless format that supports 8 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R8G8B8A8_TYPELESS - DXGI_FORMAT_R8G8B8A8_TYPELESS -
    - - -

    A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R8G8B8A8_UNORM - DXGI_FORMAT_R8G8B8A8_UNORM -
    - - -

    A four-component, 32-bit unsigned-normalized integer sRGB format that supports 8 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB -
    - - -

    A four-component, 32-bit unsigned-integer format that supports 8 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R8G8B8A8_UINT - DXGI_FORMAT_R8G8B8A8_UINT -
    - - -

    A four-component, 32-bit signed-normalized-integer format that supports 8 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R8G8B8A8_SNORM - DXGI_FORMAT_R8G8B8A8_SNORM -
    - - -

    A four-component, 32-bit signed-integer format that supports 8 bits per channel including alpha.

    -
    - - bb173059 - DXGI_FORMAT_R8G8B8A8_SINT - DXGI_FORMAT_R8G8B8A8_SINT -
    - - -

    A two-component, 32-bit typeless format that supports 16 bits for the red channel and 16 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R16G16_TYPELESS - DXGI_FORMAT_R16G16_TYPELESS -
    - - -

    A two-component, 32-bit floating-point format that supports 16 bits for the red channel and 16 bits for the green channel.5,7

    -
    - - bb173059 - DXGI_FORMAT_R16G16_FLOAT - DXGI_FORMAT_R16G16_FLOAT -
    - - -

    A two-component, 32-bit unsigned-normalized-integer format that supports 16 bits each for the green and red channels.

    -
    - - bb173059 - DXGI_FORMAT_R16G16_UNORM - DXGI_FORMAT_R16G16_UNORM -
    - - -

    A two-component, 32-bit unsigned-integer format that supports 16 bits for the red channel and 16 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R16G16_UINT - DXGI_FORMAT_R16G16_UINT -
    - - -

    A two-component, 32-bit signed-normalized-integer format that supports 16 bits for the red channel and 16 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R16G16_SNORM - DXGI_FORMAT_R16G16_SNORM -
    - - -

    A two-component, 32-bit signed-integer format that supports 16 bits for the red channel and 16 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R16G16_SINT - DXGI_FORMAT_R16G16_SINT -
    - - -

    A single-component, 32-bit typeless format that supports 32 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R32_TYPELESS - DXGI_FORMAT_R32_TYPELESS -
    - - -

    A single-component, 32-bit floating-point format that supports 32 bits for depth.5,8

    -
    - - bb173059 - DXGI_FORMAT_D32_FLOAT - DXGI_FORMAT_D32_FLOAT -
    - - -

    A single-component, 32-bit floating-point format that supports 32 bits for the red channel.5,8

    -
    - - bb173059 - DXGI_FORMAT_R32_FLOAT - DXGI_FORMAT_R32_FLOAT -
    - - -

    A single-component, 32-bit unsigned-integer format that supports 32 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R32_UINT - DXGI_FORMAT_R32_UINT -
    - - -

    A single-component, 32-bit signed-integer format that supports 32 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R32_SINT - DXGI_FORMAT_R32_SINT -
    - - -

    A two-component, 32-bit typeless format that supports 24 bits for the red channel and 8 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R24G8_TYPELESS - DXGI_FORMAT_R24G8_TYPELESS -
    - - -

    A 32-bit z-buffer format that supports 24 bits for depth and 8 bits for stencil.

    -
    - - bb173059 - DXGI_FORMAT_D24_UNORM_S8_UINT - DXGI_FORMAT_D24_UNORM_S8_UINT -
    - - -

    A 32-bit format, that contains a 24 bit, single-component, unsigned-normalized integer, with an additional typeless 8 bits. This format has 24 bits red channel and 8 bits unused.

    -
    - - bb173059 - DXGI_FORMAT_R24_UNORM_X8_TYPELESS - DXGI_FORMAT_R24_UNORM_X8_TYPELESS -
    - - -

    A 32-bit format, that contains a 24 bit, single-component, typeless format, with an additional 8 bit unsigned integer component. This format has 24 bits unused and 8 bits green channel.

    -
    - - bb173059 - DXGI_FORMAT_X24_TYPELESS_G8_UINT - DXGI_FORMAT_X24_TYPELESS_G8_UINT -
    - - -

    A two-component, 16-bit typeless format that supports 8 bits for the red channel and 8 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R8G8_TYPELESS - DXGI_FORMAT_R8G8_TYPELESS -
    - - -

    A two-component, 16-bit unsigned-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R8G8_UNORM - DXGI_FORMAT_R8G8_UNORM -
    - - -

    A two-component, 16-bit unsigned-integer format that supports 8 bits for the red channel and 8 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R8G8_UINT - DXGI_FORMAT_R8G8_UINT -
    - - -

    A two-component, 16-bit signed-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R8G8_SNORM - DXGI_FORMAT_R8G8_SNORM -
    - - -

    A two-component, 16-bit signed-integer format that supports 8 bits for the red channel and 8 bits for the green channel.

    -
    - - bb173059 - DXGI_FORMAT_R8G8_SINT - DXGI_FORMAT_R8G8_SINT -
    - - -

    A single-component, 16-bit typeless format that supports 16 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R16_TYPELESS - DXGI_FORMAT_R16_TYPELESS -
    - - -

    A single-component, 16-bit floating-point format that supports 16 bits for the red channel.5,7

    -
    - - bb173059 - DXGI_FORMAT_R16_FLOAT - DXGI_FORMAT_R16_FLOAT -
    - - -

    A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for depth.

    -
    - - bb173059 - DXGI_FORMAT_D16_UNORM - DXGI_FORMAT_D16_UNORM -
    - - -

    A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R16_UNORM - DXGI_FORMAT_R16_UNORM -
    - - -

    A single-component, 16-bit unsigned-integer format that supports 16 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R16_UINT - DXGI_FORMAT_R16_UINT -
    - - -

    A single-component, 16-bit signed-normalized-integer format that supports 16 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R16_SNORM - DXGI_FORMAT_R16_SNORM -
    - - -

    A single-component, 16-bit signed-integer format that supports 16 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R16_SINT - DXGI_FORMAT_R16_SINT -
    - - -

    A single-component, 8-bit typeless format that supports 8 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R8_TYPELESS - DXGI_FORMAT_R8_TYPELESS -
    - - -

    A single-component, 8-bit unsigned-normalized-integer format that supports 8 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R8_UNORM - DXGI_FORMAT_R8_UNORM -
    - - -

    A single-component, 8-bit unsigned-integer format that supports 8 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R8_UINT - DXGI_FORMAT_R8_UINT -
    - - -

    A single-component, 8-bit signed-normalized-integer format that supports 8 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R8_SNORM - DXGI_FORMAT_R8_SNORM -
    - - -

    A single-component, 8-bit signed-integer format that supports 8 bits for the red channel.

    -
    - - bb173059 - DXGI_FORMAT_R8_SINT - DXGI_FORMAT_R8_SINT -
    - - -

    A single-component, 8-bit unsigned-normalized-integer format for alpha only.

    -
    - - bb173059 - DXGI_FORMAT_A8_UNORM - DXGI_FORMAT_A8_UNORM -
    - - -

    A single-component, 1-bit unsigned-normalized integer format that supports 1 bit for the red channel. ?.

    -
    - - bb173059 - DXGI_FORMAT_R1_UNORM - DXGI_FORMAT_R1_UNORM -
    - - -

    Three partial-precision floating-point numbers encoded into a single 32-bit value all sharing the same 5-bit exponent (variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There is no sign bit, and there is a shared 5-bit biased (15) exponent and a 9-bit mantissa for each channel, as shown in the following illustration. 2,6,7.

    -
    - - bb173059 - DXGI_FORMAT_R9G9B9E5_SHAREDEXP - DXGI_FORMAT_R9G9B9E5_SHAREDEXP -
    - - -

    A four-component, 32-bit unsigned-normalized-integer format. This packed RGB format is analogous to the UYVY format. Each 32-bit block describes a pair of pixels: (R8, G8, B8) and (R8, G8, B8) where the R8/B8 values are repeated, and the G8 values are unique to each pixel. ?

    Width must be even.

    -
    - - bb173059 - DXGI_FORMAT_R8G8_B8G8_UNORM - DXGI_FORMAT_R8G8_B8G8_UNORM -
    - - -

    A four-component, 32-bit unsigned-normalized-integer format. This packed RGB format is analogous to the YUY2 format. Each 32-bit block describes a pair of pixels: (R8, G8, B8) and (R8, G8, B8) where the R8/B8 values are repeated, and the G8 values are unique to each pixel. ?

    Width must be even.

    -
    - - bb173059 - DXGI_FORMAT_G8R8_G8B8_UNORM - DXGI_FORMAT_G8R8_G8B8_UNORM -
    - - -

    Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC1_TYPELESS - DXGI_FORMAT_BC1_TYPELESS -
    - - -

    Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC1_UNORM - DXGI_FORMAT_BC1_UNORM -
    - - -

    Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC1_UNORM_SRGB - DXGI_FORMAT_BC1_UNORM_SRGB -
    - - -

    Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC2_TYPELESS - DXGI_FORMAT_BC2_TYPELESS -
    - - -

    Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC2_UNORM - DXGI_FORMAT_BC2_UNORM -
    - - -

    Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC2_UNORM_SRGB - DXGI_FORMAT_BC2_UNORM_SRGB -
    - - -

    Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC3_TYPELESS - DXGI_FORMAT_BC3_TYPELESS -
    - - -

    Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC3_UNORM - DXGI_FORMAT_BC3_UNORM -
    - - -

    Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC3_UNORM_SRGB - DXGI_FORMAT_BC3_UNORM_SRGB -
    - - -

    One-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC4_TYPELESS - DXGI_FORMAT_BC4_TYPELESS -
    - - -

    One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC4_UNORM - DXGI_FORMAT_BC4_UNORM -
    - - -

    One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC4_SNORM - DXGI_FORMAT_BC4_SNORM -
    - - -

    Two-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC5_TYPELESS - DXGI_FORMAT_BC5_TYPELESS -
    - - -

    Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC5_UNORM - DXGI_FORMAT_BC5_UNORM -
    - - -

    Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC5_SNORM - DXGI_FORMAT_BC5_SNORM -
    - - -

    A three-component, 16-bit unsigned-normalized-integer format that supports 5 bits for blue, 6 bits for green, and 5 bits for red.

    Direct3D 10 through Direct3D 11:??This value is defined for DXGI. However, Direct3D 10, 10.1, or 11 devices do not support this format.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_B5G6R5_UNORM - DXGI_FORMAT_B5G6R5_UNORM -
    - - -

    A four-component, 16-bit unsigned-normalized-integer format that supports 5 bits for each color channel and 1-bit alpha.

    Direct3D 10 through Direct3D 11:??This value is defined for DXGI. However, Direct3D 10, 10.1, or 11 devices do not support this format.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_B5G5R5A1_UNORM - DXGI_FORMAT_B5G5R5A1_UNORM -
    - - -

    A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8-bit alpha.

    -
    - - bb173059 - DXGI_FORMAT_B8G8R8A8_UNORM - DXGI_FORMAT_B8G8R8A8_UNORM -
    - - -

    A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8 bits unused.

    -
    - - bb173059 - DXGI_FORMAT_B8G8R8X8_UNORM - DXGI_FORMAT_B8G8R8X8_UNORM -
    - - -

    A four-component, 32-bit 2.8-biased fixed-point format that supports 10 bits for each color channel and 2-bit alpha.

    -
    - - bb173059 - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM -
    - - -

    A four-component, 32-bit typeless format that supports 8 bits for each channel including alpha. ?

    -
    - - bb173059 - DXGI_FORMAT_B8G8R8A8_TYPELESS - DXGI_FORMAT_B8G8R8A8_TYPELESS -
    - - -

    A four-component, 32-bit unsigned-normalized standard RGB format that supports 8 bits for each channel including alpha. ?

    -
    - - bb173059 - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB -
    - - -

    A four-component, 32-bit typeless format that supports 8 bits for each color channel, and 8 bits are unused. ?

    -
    - - bb173059 - DXGI_FORMAT_B8G8R8X8_TYPELESS - DXGI_FORMAT_B8G8R8X8_TYPELESS -
    - - -

    A four-component, 32-bit unsigned-normalized standard RGB format that supports 8 bits for each color channel, and 8 bits are unused. ?

    -
    - - bb173059 - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB -
    - - -

    A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC6H_TYPELESS - DXGI_FORMAT_BC6H_TYPELESS -
    - - -

    A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?

    -
    - - bb173059 - DXGI_FORMAT_BC6H_UF16 - DXGI_FORMAT_BC6H_UF16 -
    - - -

    A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?

    -
    - - bb173059 - DXGI_FORMAT_BC6H_SF16 - DXGI_FORMAT_BC6H_SF16 -
    - - -

    A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC7_TYPELESS - DXGI_FORMAT_BC7_TYPELESS -
    - - -

    A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC7_UNORM - DXGI_FORMAT_BC7_UNORM -
    - - -

    A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    -
    - - bb173059 - DXGI_FORMAT_BC7_UNORM_SRGB - DXGI_FORMAT_BC7_UNORM_SRGB -
    - - -

    Most common YUV 4:4:4 video resource format. Valid view formats for this video resource format are and . For UAVs, an additional valid view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV, RTV, and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is V->R8, - U->G8, - Y->B8, - and A->A8.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_AYUV - DXGI_FORMAT_AYUV -
    - - -

    10-bit per channel packed YUV 4:4:4 video resource format. Valid view formats for this video resource format are and . For UAVs, an additional valid view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U->R10, - Y->G10, - V->B10, - and A->A2.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_Y410 - DXGI_FORMAT_Y410 -
    - - -

    16-bit per channel packed YUV 4:4:4 video resource format. Valid view formats for this video resource format are and . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U->R16, - Y->G16, - V->B16, - and A->A16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_Y416 - DXGI_FORMAT_Y416 -
    - - -

    Most common YUV 4:2:0 video resource format. Valid luminance data view formats for this video resource format are and . Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are and . Supported view types are SRV, RTV, and UAV. For luminance data view, the mapping to the view channel is Y->R8. For chrominance data view, the mapping to the view channel is U->R8 and - V->G8.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the UV plane.

    An app using the YUY 4:2:0 formats must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_NV12 - DXGI_FORMAT_NV12 -
    - - -

    10-bit per channel planar YUV 4:2:0 video resource format. Valid luminance data view formats for this video resource format are and . The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, is no different than . Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are and . For UAVs, an additional valid chrominance data view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV, RTV, and UAV. For luminance data view, the mapping to the view channel is Y->R16. For chrominance data view, the mapping to the view channel is U->R16 and - V->G16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the UV plane.

    An app using the YUY 4:2:0 formats must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_P010 - DXGI_FORMAT_P010 -
    - - -

    16-bit per channel planar YUV 4:2:0 video resource format. Valid luminance data view formats for this video resource format are and . Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are and . For UAVs, an additional valid chrominance data view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV, RTV, and UAV. For luminance data view, the mapping to the view channel is Y->R16. For chrominance data view, the mapping to the view channel is U->R16 and - V->G16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the UV plane.

    An app using the YUY 4:2:0 formats must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_P016 - DXGI_FORMAT_P016 -
    - - -

    8-bit per channel planar YUV 4:2:0 video resource format. This format is subsampled where each pixel has its own Y value, but each 2x2 pixel block shares a single U and V value. The runtime requires that the width and height of all resources that are created with this format are multiples of 2. The runtime also requires that the left, right, top, and bottom members of any that are used for this format are multiples of 2. This format differs from in that the layout of the data within the resource is completely opaque to applications. Applications cannot use the CPU to map the resource and then access the data within the resource. You cannot use shaders with this format. Because of this behavior, legacy hardware that supports a non-NV12 4:2:0 layout (for example, YV12, and so on) can be used. Also, new hardware that has a 4:2:0 implementation better than NV12 can be used when the application does not need the data to be in a standard layout.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes.

    An app using the YUY 4:2:0 formats must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_420_OPAQUE - DXGI_FORMAT_420_OPAQUE -
    - - -

    Most common YUV 4:2:2 video resource format. Valid view formats for this video resource format are and . For UAVs, an additional valid view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is Y0->R8, - U0->G8, - Y1->B8, - and V0->A8.

    A unique valid view format for this video resource format is . With this view format, the width of the view appears to be twice what the or view would be when hardware reconstructs RGBA automatically on read and before filtering. This Direct3D hardware behavior is legacy and is likely not useful any more. With this view format, the mapping to the view channel is Y0->R8, - U0-> - G8[0], - Y1->B8, - and V0-> - G8[1].

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width must be even.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_YUY2 - DXGI_FORMAT_YUY2 -
    - - -

    10-bit per channel packed YUV 4:2:2 video resource format. Valid view formats for this video resource format are and . The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, is no different than . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is Y0->R16, - U->G16, - Y1->B16, - and V->A16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width must be even.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_Y210 - DXGI_FORMAT_Y210 -
    - - -

    16-bit per channel packed YUV 4:2:2 video resource format. Valid view formats for this video resource format are and . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is Y0->R16, - U->G16, - Y1->B16, - and V->A16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width must be even.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_Y216 - DXGI_FORMAT_Y216 -
    - - -

    Most common planar YUV 4:1:1 video resource format. Valid luminance data view formats for this video resource format are and . Valid chrominance data view formats (width and height are each 1/4 of luminance view) for this video resource format are and . Supported view types are SRV, RTV, and UAV. For luminance data view, the mapping to the view channel is Y->R8. For chrominance data view, the mapping to the view channel is U->R8 and - V->G8.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width must be a multiple of 4. Direct3D11 staging resources and initData parameters for this format use (rowPitch * height * 2) bytes. The first (SysMemPitch * height) bytes are the Y plane, the next ((SysMemPitch / 2) * height) bytes are the UV plane, and the remainder is padding.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_NV11 - DXGI_FORMAT_NV11 -
    - - -

    4-bit palletized YUV format that is commonly used for DVD subpicture.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_AI44 - DXGI_FORMAT_AI44 -
    - - -

    4-bit palletized YUV format that is commonly used for DVD subpicture.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_IA44 - DXGI_FORMAT_IA44 -
    - - -

    8-bit palletized format that is used for palletized RGB data when the processor processes ISDB-T data and for palletized YUV data when the processor processes BluRay data.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_P8 - DXGI_FORMAT_P8 -
    - - -

    8-bit palletized format with 8 bits of alpha that is used for palletized YUV data when the processor processes BluRay data.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_A8P8 - DXGI_FORMAT_A8P8 -
    - - -

    A four-component, 16-bit unsigned-normalized integer format that supports 4 bits for each channel including alpha.

    Direct3D 11.1:??This value is not supported until Windows?8.

    -
    - - bb173059 - DXGI_FORMAT_B4G4R4A4_UNORM - DXGI_FORMAT_B4G4R4A4_UNORM -
    - - -

    A video format; an 8-bit version of a hybrid planar 4:2:2 format.

    -
    - - bb173059 - DXGI_FORMAT_P208 - DXGI_FORMAT_P208 -
    - - -

    An 8 bit YCbCrA 4:4 rendering format.

    -
    - - bb173059 - DXGI_FORMAT_V208 - DXGI_FORMAT_V208 -
    - - -

    An 8 bit YCbCrA 4:4:4:4 rendering format.

    -
    - - bb173059 - DXGI_FORMAT_V408 - DXGI_FORMAT_V408 -
    - - -

    Indicates options for presenting frames to the swap chain.

    -
    - -

    This enum is used by the structure.

    -
    - - dn384107 - DXGI_FRAME_PRESENTATION_MODE - DXGI_FRAME_PRESENTATION_MODE -
    - - -

    Specifies that the presentation mode is a composition surface, meaning that the conversion from YUV to RGB is happening once per output refresh (for example, 60 Hz). When this value is returned, the media app should discontinue use of the decode swap chain and perform YUV to RGB conversion itself, reducing the frequency of YUV to RGB conversion to once per video frame.

    -
    - - dn384107 - DXGI_FRAME_PRESENTATION_MODE_COMPOSED - DXGI_FRAME_PRESENTATION_MODE_COMPOSED -
    - - -

    Specifies that the presentation mode is an overlay surface, meaning that the YUV to RGB conversion is happening efficiently in hardware (once per video frame). When this value is returned, the media app can continue to use the decode swap chain. See .

    -
    - - dn384107 - DXGI_FRAME_PRESENTATION_MODE_OVERLAY - DXGI_FRAME_PRESENTATION_MODE_OVERLAY -
    - - -

    No presentation is specified.

    -
    - - dn384107 - DXGI_FRAME_PRESENTATION_MODE_NONE - DXGI_FRAME_PRESENTATION_MODE_NONE -
    - - -

    An issue occurred that caused content protection to be invalidated in a swap-chain with hardware content protection, and is usually because the system ran out of hardware protected memory. The app will need to do one of the following:

    • Drastically reduce the amount of hardware protected memory used. For example, media applications might be able to reduce their buffering. -
    • Stop using hardware protection if possible.

    Note that simply re-creating the swap chain or the device will usually have no impact as the DWM will continue to run out of memory and will return the same failure.

    -
    - - dn384107 - DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE - DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE -
    - - -

    Identifies the granularity at which the graphics processing unit (GPU) can be preempted from performing its current graphics rendering task.

    -
    - -

    You call the method to retrieve the granularity level at which the GPU can be preempted from performing its current graphics rendering task. The operating system specifies the graphics granularity level in the GraphicsPreemptionGranularity member of the structure.

    The following figure shows granularity of graphics rendering tasks.

    -
    - - hh404504 - DXGI_GRAPHICS_PREEMPTION_GRANULARITY - DXGI_GRAPHICS_PREEMPTION_GRANULARITY -
    - - -

    Indicates the preemption granularity as a DMA buffer.

    -
    - - hh404504 - DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY -
    - - -

    Indicates the preemption granularity as a graphics primitive. A primitive is a section in a DMA buffer and can be a group of triangles.

    -
    - - hh404504 - DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY -
    - - -

    Indicates the preemption granularity as a triangle. A triangle is a part of a primitive.

    -
    - - hh404504 - DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY -
    - - -

    Indicates the preemption granularity as a pixel. A pixel is a part of a triangle.

    -
    - - hh404504 - DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY -
    - - -

    Indicates the preemption granularity as a graphics instruction. A graphics instruction operates on a pixel.

    -
    - - hh404504 - DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY -
    - - - No documentation. - - - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS - - - - No documentation. - - - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN - - - - No documentation. - - - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED - - - - No documentation. - - - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED - - - - None. - - - None - None - - - -

    Specifies the header metadata type.

    -
    - -

    This enum is used by the SetHDRMetaData method.

    -
    - - mt732701 - DXGI_HDR_METADATA_TYPE - DXGI_HDR_METADATA_TYPE -
    - - -

    Indicates there is no header metadata.

    -
    - - mt732701 - DXGI_HDR_METADATA_TYPE_NONE - DXGI_HDR_METADATA_TYPE_NONE -
    - - -

    Indicates the header metadata is held by a structure.

    -
    - - mt732701 - DXGI_HDR_METADATA_TYPE_HDR10 - DXGI_HDR_METADATA_TYPE_HDR10 -
    - - -

    Get a reference to the data contained in the surface, and deny GPU access to the surface.

    -
    - -

    Use to access a surface from the CPU. To release a mapped surface (and allow GPU access) call .

    -
    - - bb174567 - DXGI_MAP_FLAGS - DXGI_MAP_FLAGS -
    - - -

    A reference to the surface data (see ).

    -
    - - bb174567 - DXGI_MAP_READ - DXGI_MAP_READ -
    - - -

    CPU read-write flags. These flags can be combined with a logical OR.

    • - Allow CPU read access.
    • - Allow CPU write access.
    • - Discard the previous contents of a resource when it is mapped.
    -
    - - bb174567 - DXGI_MAP_WRITE - DXGI_MAP_WRITE -
    - - - No documentation. - - - bb174567 - DXGI_MAP_DISCARD - DXGI_MAP_DISCARD - - - -

    Specifies the memory segment group to use.

    -
    - -

    This enum is used by QueryVideoMemoryInfo and SetVideoMemoryReservation.

    Refer to the remarks for .

    -
    - - dn933219 - DXGI_MEMORY_SEGMENT_GROUP - DXGI_MEMORY_SEGMENT_GROUP -
    - - -

    The grouping of segments which is considered local to the video adapter, and represents the fastest available memory to the GPU. Applications should target the local segment group as the target size for their working set.

    -
    - - dn933219 - DXGI_MEMORY_SEGMENT_GROUP_LOCAL - DXGI_MEMORY_SEGMENT_GROUP_LOCAL -
    - - -

    The grouping of segments which is considered non-local to the video adapter, and may have slower performance than the local segment group.

    -
    - - dn933219 - DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL - DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL -
    - - -

    Options for swap-chain color space.

    -
    - -

    This enum is used by SetColorSpace.

    -
    - - dn313170 - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS -
    - - -

    Specifies nominal range YCbCr, which isn't an absolute color space, but a way of encoding RGB info.

    -
    - - dn313170 - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE -
    - - -

    Specifies BT.709, which standardizes the format of high-definition television and has 16:9 (widescreen) aspect ratio.

    -
    - - dn313170 - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 -
    - - -

    Specifies xvYCC or extended-gamut YCC (also x.v.Color) color space that can be used in the video electronics of television sets to support a gamut 1.8 times as large as that of the sRGB color space.

    -
    - - dn313170 - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC -
    - - - None. - - - None - None - - - -

    Specifies flags for the OfferResources1 method.

    -
    - - mt732702 - DXGI_OFFER_RESOURCE_FLAGS - DXGI_OFFER_RESOURCE_FLAGS -
    - - - No documentation. - - - mt732702 - DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT - DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT - - - - None. - - - None - None - - - -

    Identifies the importance of a resource?s content when you call the method to offer the resource.

    -
    - -

    Priority determines how likely the operating system is to discard an offered resource. Resources offered with lower priority are discarded first.

    -
    - - dn933257 - DXGI_OFFER_RESOURCE_PRIORITY - DXGI_OFFER_RESOURCE_PRIORITY -
    - - - No documentation. - - - dn933257 - DXGI_OFFER_RESOURCE_PRIORITY_LOW - DXGI_OFFER_RESOURCE_PRIORITY_LOW - - - - No documentation. - - - dn933257 - DXGI_OFFER_RESOURCE_PRIORITY_NORMAL - DXGI_OFFER_RESOURCE_PRIORITY_NORMAL - - - - No documentation. - - - dn933257 - DXGI_OFFER_RESOURCE_PRIORITY_HIGH - DXGI_OFFER_RESOURCE_PRIORITY_HIGH - - - - No documentation. - - - DXGI_OUTDUPL_FLAG - DXGI_OUTDUPL_FLAG - - - - No documentation. - - - DXGI_OUTDUPL_COMPOSITED_UI_CAPTURE_ONLY - DXGI_OUTDUPL_COMPOSITED_UI_CAPTURE_ONLY - - - - None. - - - None - None - - - -

    Identifies the type of reference shape.

    -
    - - hh404520 - DXGI_OUTDUPL_POINTER_SHAPE_TYPE - DXGI_OUTDUPL_POINTER_SHAPE_TYPE -
    - - -

    The reference type is a monochrome mouse reference, which is a monochrome bitmap. The bitmap's size is specified by width and height in a 1 bits per pixel (bpp) device independent bitmap (DIB) format AND mask that is followed by another 1 bpp DIB format XOR mask of the same size.

    -
    - - hh404520 - DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME - DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME -
    - - -

    The reference type is a color mouse reference, which is a color bitmap. The bitmap's size is specified by width and height in a 32 bpp ARGB DIB format.

    -
    - - hh404520 - DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR - DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR -
    - - -

    The reference type is a masked color mouse reference. A masked color mouse reference is a 32 bpp ARGB format bitmap with the mask value in the alpha bits. The only allowed mask values are 0 and 0xFF. When the mask value is 0, the RGB value should replace the screen pixel. When the mask value is 0xFF, an XOR operation is performed on the RGB value and the screen pixel; the result replaces the screen pixel.

    -
    - - hh404520 - DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR - DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR -
    - - -

    Specifies support for overlay color space.

    -
    - - dn903665 - DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG - DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG -
    - - -

    Overlay color space support is present.

    -
    - - dn903665 - DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG_PRESENT - DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG_PRESENT -
    - - - None. - - - None - None - - - -

    Specifies overlay support to check for in a call to .

    -
    - - dn903667 - DXGI_OVERLAY_SUPPORT_FLAG - DXGI_OVERLAY_SUPPORT_FLAG -
    - - - No documentation. - - - dn903667 - DXGI_OVERLAY_SUPPORT_FLAG_DIRECT - DXGI_OVERLAY_SUPPORT_FLAG_DIRECT - - - - No documentation. - - - dn903667 - DXGI_OVERLAY_SUPPORT_FLAG_SCALING - DXGI_OVERLAY_SUPPORT_FLAG_SCALING - - - -

    Presents a rendered image to the user.

    -
    - -

    Starting with Direct3D 11.1, consider using because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.

    For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.

    Because calling Present might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.

    Differences between Direct3D 9 and Direct3D 10:

    Specifying in the Flags parameter is analogous to IDirect3DDevice9::TestCooperativeLevel in Direct3D 9.

    ?

    For flip presentation model swap chains that you create with the value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.

    For info about how data values change when you present content to the screen, see Converting data for the color space.

    -
    - - bb174576 - DXGI_PRESENT_FLAGS - DXGI_PRESENT_FLAGS -
    - - -

    An integer that specifies how to synchronize presentation of a frame with the vertical blank. -

    For the bit-block transfer (bitblt) model ( or ), values are:

    • 0 - The presentation occurs immediately, there is no synchronization.
    • 1 through 4 - Synchronize presentation after the nth vertical blank.

    For the flip model (), values are:

    • 0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. -
    • 1 through 4 - Synchronize presentation for at least n vertical blanks.

    For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.

    If the update region straddles more than one output (each represented by ), Present performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.

    -
    - - bb174576 - DXGI_PRESENT_TEST - DXGI_PRESENT_TEST -
    - - -

    An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants.

    -
    - - bb174576 - DXGI_PRESENT_DO_NOT_SEQUENCE - DXGI_PRESENT_DO_NOT_SEQUENCE -
    - - - No documentation. - - - bb174576 - DXGI_PRESENT_RESTART - DXGI_PRESENT_RESTART - - - - No documentation. - - - bb174576 - DXGI_PRESENT_DO_NOT_WAIT - DXGI_PRESENT_DO_NOT_WAIT - - - - No documentation. - - - bb174576 - DXGI_PRESENT_STEREO_PREFER_RIGHT - DXGI_PRESENT_STEREO_PREFER_RIGHT - - - - No documentation. - - - bb174576 - DXGI_PRESENT_STEREO_TEMPORARY_MONO - DXGI_PRESENT_STEREO_TEMPORARY_MONO - - - - No documentation. - - - bb174576 - DXGI_PRESENT_RESTRICT_TO_OUTPUT - DXGI_PRESENT_RESTRICT_TO_OUTPUT - - - - No documentation. - - - bb174576 - DXGI_PRESENT_USE_DURATION - DXGI_PRESENT_USE_DURATION - - - - No documentation. - - - bb174576 - DXGI_PRESENT_ALLOW_TEARING - DXGI_PRESENT_ALLOW_TEARING - - - - None. - - - None - None - - - -

    Specifies result flags for the ReclaimResources1 method.

    -
    - - mt732703 - DXGI_RECLAIM_RESOURCE_RESULTS - DXGI_RECLAIM_RESOURCE_RESULTS -
    - - - No documentation. - - - mt732703 - DXGI_RECLAIM_RESOURCE_RESULT_OK - DXGI_RECLAIM_RESOURCE_RESULT_OK - - - - No documentation. - - - mt732703 - DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED - DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED - - - - No documentation. - - - mt732703 - DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED - DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED - - - -

    Flags indicating the memory location of a resource.

    -
    - -

    This enum is used by QueryResourceResidency.

    -
    - - bb173070 - DXGI_RESIDENCY - DXGI_RESIDENCY -
    - - -

    The resource is located in video memory.

    -
    - - bb173070 - DXGI_RESIDENCY_FULLY_RESIDENT - DXGI_RESIDENCY_FULLY_RESIDENT -
    - - -

    At least some of the resource is located in CPU memory.

    -
    - - bb173070 - DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY - DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY -
    - - -

    At least some of the resource has been paged out to the hard drive.

    -
    - - bb173070 - DXGI_RESIDENCY_EVICTED_TO_DISK - DXGI_RESIDENCY_EVICTED_TO_DISK -
    - - -

    Set the priority for evicting the resource from memory.

    -
    - -

    The eviction priority is a memory-management variable that is used by DXGI for determining how to populate overcommitted memory.

    You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.

    -
    - - bb174564 - DXGI_RESOURCE_PRIORITY - DXGI_RESOURCE_PRIORITY -
    - - -

    The priority is one of the following values:

    ValueMeaning
    (0x28000000)

    The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.

    (0x50000000)

    The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a GPU can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.

    (0x78000000)

    The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource.

    (0xa0000000)

    The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.

    (0xc8000000)

    The resource is evicted from memory only if there is no other way of resolving the memory requirement.

    ?

    -
    - - bb174564 - DXGI_RESOURCE_PRIORITY_MINIMUM - DXGI_RESOURCE_PRIORITY_MINIMUM -
    - - - No documentation. - - - bb174564 - DXGI_RESOURCE_PRIORITY_LOW - DXGI_RESOURCE_PRIORITY_LOW - - - - No documentation. - - - bb174564 - DXGI_RESOURCE_PRIORITY_NORMAL - DXGI_RESOURCE_PRIORITY_NORMAL - - - - No documentation. - - - bb174564 - DXGI_RESOURCE_PRIORITY_HIGH - DXGI_RESOURCE_PRIORITY_HIGH - - - - No documentation. - - - bb174564 - DXGI_RESOURCE_PRIORITY_MAXIMUM - DXGI_RESOURCE_PRIORITY_MAXIMUM - - - -

    Identifies resize behavior when the back-buffer size does not match the size of the target output.

    -
    - -

    The value is supported only for flip presentation model swap chains that you create with the value. You pass these values in a call to , , or .

    will prefer to use a horizontal fill, otherwise it will use a vertical fill, using the following logic.

    float aspectRatio = backBufferWidth / float(backBufferHeight); // Horizontal fill float scaledWidth = outputWidth; float scaledHeight = outputWidth / aspectRatio; if (scaledHeight >= outputHeight) { // Do vertical fill scaledWidth = outputHeight * aspectRatio; scaledHeight = outputHeight; } float offsetX = (outputWidth - scaledWidth) * 0.5f; float offsetY = (outputHeight - scaledHeight) * 0.5f; rect.left = static_cast<LONG>(offsetX); rect.top = static_cast<LONG>(offsetY); rect.right = static_cast<LONG>(offsetX + scaledWidth); rect.bottom = static_cast<LONG>(offsetY + scaledHeight); rect.left = std::max<LONG>(0, rect.left); rect.top = std::max<LONG>(0, rect.top); rect.right = std::min<LONG>(static_cast<LONG>(outputWidth), rect.right); rect.bottom = std::min<LONG>(static_cast<LONG>(outputHeight), rect.bottom); -

    Note that outputWidth and outputHeight are the pixel sizes of the presentation target size. In the case of CoreWindow, this requires converting the logicalWidth and logicalHeight values from DIPS to pixels using the window's DPI property.

    -
    - - hh404526 - DXGI_SCALING - DXGI_SCALING -
    - - -

    Directs DXGI to make the back-buffer contents scale to fit the presentation target size. This is the implicit behavior of DXGI when you call the method.

    -
    - - hh404526 - DXGI_SCALING_STRETCH - DXGI_SCALING_STRETCH -
    - - -

    Directs DXGI to make the back-buffer contents appear without any scaling when the presentation target size is not equal to the back-buffer size. The top edges of the back buffer and presentation target are aligned together. If the WS_EX_LAYOUTRTL style is associated with the handle to the target output window, the right edges of the back buffer and presentation target are aligned together; otherwise, the left edges are aligned together. All target area outside the back buffer is filled with window background color.

    This value specifies that all target areas outside the back buffer of a swap chain are filled with the background color that you specify in a call to .

    -
    - - hh404526 - DXGI_SCALING_NONE - DXGI_SCALING_NONE -
    - - -

    Directs DXGI to make the back-buffer contents scale to fit the presentation target size, while preserving the aspect ratio of the back-buffer. If the scaled back-buffer does not fill the presentation area, it will be centered with black borders.

    This constant is supported on Windows Phone 8 and Windows 10.

    Note that with legacy Win32 window swapchains, this works the same as . -

    -
    - - hh404526 - DXGI_SCALING_ASPECT_RATIO_STRETCH - DXGI_SCALING_ASPECT_RATIO_STRETCH -
    - - - No documentation. - - - DXGI_SHARED_RESOURCE_FLAGS - DXGI_SHARED_RESOURCE_FLAGS - - - - No documentation. - - - DXGI_SHARED_RESOURCE_READ - DXGI_SHARED_RESOURCE_READ - - - - No documentation. - - - DXGI_SHARED_RESOURCE_WRITE - DXGI_SHARED_RESOURCE_WRITE - - - - None. - - - None - None - - - -

    Specifies color space support for the swap chain.

    -
    - - dn903668 - DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG - DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG -
    - - -

    Color space support is present.

    -
    - - dn903668 - DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT - DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT -
    - - -

    Overlay color space support is present.

    -
    - - dn903668 - DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT - DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT -
    - - - None. - - - None - None - - - -

    Options for swap-chain behavior.

    -
    - -

    This enumeration is used by the structure and the method.

    This enumeration is also used by the structure.

    You don't need to set for swap chains that you create in full-screen mode with the method because those swap chains already behave as if is set. That is, presented content is not accessible by remote access or through the desktop duplication APIs.

    Swap chains that you create with the , , and methods are not protected if is not set and are protected if is set. When swap chains are protected, screen scraping is prevented and, in full-screen mode, presented content is not accessible through the desktop duplication APIs.

    When you call to change the swap chain's back buffer, you can reset or change all flags.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG - DXGI_SWAP_CHAIN_FLAG -
    - - -

    Set this flag to turn off automatic image rotation; that is, do not perform a rotation when transferring the contents of the front buffer to the monitor. Use this flag to avoid a bandwidth penalty when an application expects to handle rotation. This option is valid only during full-screen mode.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_NONPREROTATED - DXGI_SWAP_CHAIN_FLAG_NONPREROTATED -
    - - -

    Set this flag to enable an application to switch modes by calling . When switching from windowed to full-screen mode, the display mode (or monitor resolution) will be changed to match the dimensions of the application window.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH - DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH -
    - - -

    Set this flag to enable an application to render using GDI on a swap chain or a surface. This will allow the application to call on the 0th back buffer or a surface.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE - DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE -
    - - -

    Set this flag to indicate that the swap chain might contain protected content; therefore, the operating system supports the creation of the swap chain only when driver and hardware protection is used. If the driver and hardware do not support content protection, the call to create a resource for the swap chain fails.

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT - DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT -
    - - -

    Set this flag to indicate that shared resources that are created within the swap chain must be protected by using the driver?s mechanism for restricting access to shared surfaces.

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER - DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER -
    - - -

    Set this flag to restrict presented content to the local displays. Therefore, the presented content is not accessible via remote accessing or through the desktop duplication APIs.

    This flag supports the window content protection features of Windows. Applications can use this flag to protect their own onscreen window content from being captured or copied through a specific set of public operating system features and APIs.

    If you use this flag with windowed ( or IWindow) swap chains where another process created the , the owner of the must use the SetWindowDisplayAffinity function appropriately in order to allow calls to or to succeed. -

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY - DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY -
    - - -

    Set this flag to create a waitable object you can use to ensure rendering does not begin while a frame is still being presented. When this flag is used, the swapchain's latency must be set with the API instead of .

    Note??This enumeration value is supported starting with Windows?8.1.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT - DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT -
    - - -

    Set this flag to create a swap chain in the foreground layer for multi-plane rendering. This flag can only be used with CoreWindow swap chains, which are created with CreateSwapChainForCoreWindow. Apps should not create foreground swap chains if indicates that hardware support for overlays is not available.

    Note that cannot be used to add or remove this flag.

    Note??This enumeration value is supported starting with Windows?8.1.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER - DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER -
    - - -

    Set this flag to create a swap chain for full-screen video.

    Note??This enumeration value is supported starting with Windows?8.1.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO - DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO -
    - - -

    Set this flag to create a swap chain for YUV video.

    Note??This enumeration value is supported starting with Windows?8.1.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO - DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO -
    - - -

    Indicates that the swap chain should be created such that all underlying resources can be protected by the hardware. Resource creation will fail if hardware content protection is not supported.

    This flag has the following restrictions:

    • This flag can only be used with swap effect .
    Note??Creating a swap chain using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the DRM components are first initialized prior to any guarantees of protection. ?

    Note??This enumeration value is supported starting with Windows?10.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED - DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED -
    - - -

    Tearing support is a requirement to enable displays that support variable refresh rates to function properly when the application presents a swap chain tied to a full screen borderless window. Win32 apps can already achieve tearing in fullscreen exclusive mode by calling SetFullscreenState(TRUE), but the recommended approach for Win32 developers is to use this tearing flag instead.

    To check for hardware support of this feature, refer to . For usage information refer to and the DXGI_PRESENT flags.

    -
    - - bb173076 - DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING - DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING -
    - - - No documentation. - - - bb173076 - DXGI_SWAP_CHAIN_FLAG_RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS - DXGI_SWAP_CHAIN_FLAG_RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS - - - - None. - - - None - None - - - -

    Options for handling pixels in a display surface after calling .

    -
    - -

    This enumeration is used by the and structures.

    To use multisampling with or , you must perform the multisampling in a separate render target. For example, create a multisampled texture by calling with a filled structure (BindFlags member set to and SampleDesc member with multisampling parameters). Next call to create a render-target view for the texture, and render your scene into the texture. Finally call to resolve the multisampled texture into your non-multisampled swap chain.

    The primary difference between presentation models is how back-buffer contents get to the Desktop Window Manager (DWM) for composition. In the bitblt model, which is used with the and values, contents of the back buffer get copied into the redirection surface on each call to . In the flip model, which is used with the value, all back buffers are shared with the DWM. Therefore, the DWM can compose straight from those back buffers without any additional copy operations. In general, the flip model is the more efficient model. The flip model also provides more features, such as enhanced present statistics.

    When you call on a flip model swap chain () with 0 specified in the SyncInterval parameter, 's behavior is the same as the behavior of Direct3D 9Ex's IDirect3DDevice9Ex::PresentEx with D3DSWAPEFFECT_FLIPEX and D3DPRESENT_FORCEIMMEDIATE. That is, the runtime not only presents the next frame instead of any previously queued frames, it also terminates any remaining time left on the previously queued frames.

    Regardless of whether the flip model is more efficient, an application still might choose the bitblt model because the bitblt model is the only way to mix GDI and DirectX presentation. In the flip model, the application must create the swap chain with , and then must use GetDC on the back buffer explicitly. After the first successful call to on a flip-model swap chain, GDI no longer works with the that is associated with that swap chain, even after the destruction of the swap chain. This restriction even extends to methods like ScrollWindowEx.

    For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas.

    -
    - - bb173077 - DXGI_SWAP_EFFECT - DXGI_SWAP_EFFECT -
    - - - No documentation. - - - bb173077 - DXGI_SWAP_EFFECT_DISCARD - DXGI_SWAP_EFFECT_DISCARD - - - - No documentation. - - - bb173077 - DXGI_SWAP_EFFECT_SEQUENTIAL - DXGI_SWAP_EFFECT_SEQUENTIAL - - - - No documentation. - - - bb173077 - DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL - DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL - - - - No documentation. - - - bb173077 - DXGI_SWAP_EFFECT_FLIP_DISCARD - DXGI_SWAP_EFFECT_FLIP_DISCARD - - - - No documentation. - - - DXGI_USAGE_ENUM - DXGI_USAGE_ENUM - - - - No documentation. - - - DXGI_USAGE_SHADER_INPUT - DXGI_USAGE_SHADER_INPUT - - - - No documentation. - - - DXGI_USAGE_RENDER_TARGET_OUTPUT - DXGI_USAGE_RENDER_TARGET_OUTPUT - - - - No documentation. - - - DXGI_USAGE_BACK_BUFFER - DXGI_USAGE_BACK_BUFFER - - - - No documentation. - - - DXGI_USAGE_SHARED - DXGI_USAGE_SHARED - - - - No documentation. - - - DXGI_USAGE_READ_ONLY - DXGI_USAGE_READ_ONLY - - - - No documentation. - - - DXGI_USAGE_DISCARD_ON_PRESENT - DXGI_USAGE_DISCARD_ON_PRESENT - - - - No documentation. - - - DXGI_USAGE_UNORDERED_ACCESS - DXGI_USAGE_UNORDERED_ACCESS - - - - No documentation. - - - DXGI_MWA_FLAGS - DXGI_MWA_FLAGS - - - - No documentation. - - - DXGI_MWA_NO_WINDOW_CHANGES - DXGI_MWA_NO_WINDOW_CHANGES - - - - No documentation. - - - DXGI_MWA_NO_ALT_ENTER - DXGI_MWA_NO_ALT_ENTER - - - - No documentation. - - - DXGI_MWA_NO_PRINT_SCREEN - DXGI_MWA_NO_PRINT_SCREEN - - - - No documentation. - - - DXGI_MWA_VALID - DXGI_MWA_VALID - - - - None. - - - None - None - - - - Functions - - - - - Constant CreateFactoryDebug. - DXGI_CREATE_FACTORY_DEBUG - - - -

    Creates a DXGI 1.1 factory that you can use to generate other DXGI objects.

    -
    -

    The globally unique identifier () of the object referenced by the ppFactory parameter.

    -

    Address of a reference to an object.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - -

    Use a DXGI 1.1 factory to generate objects that enumerate adapters, create swap chains, and associate a window with the alt+enter key sequence for toggling to and from the full-screen display mode.

    If the CreateDXGIFactory1 function succeeds, the reference count on the interface is incremented. To avoid a memory leak, when you finish using the interface, call the IDXGIFactory1::Release method to release the interface.

    This entry point is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Note??Do not mix the use of DXGI 1.0 () and DXGI 1.1 () in an application. Use or , but not both in an application.?Note??CreateDXGIFactory1 fails if your app's DllMain function calls it. For more info about how DXGI responds from DllMain, see DXGI Responses from DLLMain.?Note??Starting with Windows?8, all DXGI factories (regardless if they were created with CreateDXGIFactory or CreateDXGIFactory1) enumerate adapters identically. The enumeration order of adapters, which you retrieve with or , is as follows:
    • Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.
    • Adapters with outputs.
    • Adapters without outputs.
    ? -
    - - ff471318 - HRESULT CreateDXGIFactory1([In] const GUID& riid,[Out] void** ppFactory) - CreateDXGIFactory1 -
    - - -

    Creates a DXGI 1.3 factory that you can use to generate other DXGI objects.

    In Windows?8, any DXGI factory created while DXGIDebug.dll was present on the system would load and use it. Starting in Windows?8.1, apps explicitly request that DXGIDebug.dll be loaded instead. Use CreateDXGIFactory2 and specify the flag to request DXGIDebug.dll; the DLL will be loaded if it is present on the system.

    -
    -

    Valid values include the (0x01) flag, and zero.

    Note??This flag will be set by the D3D runtime if:
    • The system creates an implicit factory during device creation.
    • The flag is specified during device creation, for example using (or the swapchain method, or the Direct3D 10 equivalents).
    ?
    -

    The globally unique identifier () of the object referenced by the ppFactory parameter.

    -

    Address of a reference to an object.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - -

    This function accepts a flag indicating whether DXGIDebug.dll is loaded. The function otherwise behaves identically to CreateDXGIFactory1.

    -
    - - dn268307 - HRESULT CreateDXGIFactory2([In] unsigned int Flags,[In] const GUID& riid,[Out] void** ppFactory) - CreateDXGIFactory2 -
    - - - Functions - - - - - Constant InvalidCall. - DXGI_ERROR_INVALID_CALL - - - Constant NotFound. - DXGI_ERROR_NOT_FOUND - - - Constant MoreData. - DXGI_ERROR_MORE_DATA - - - Constant Unsupported. - DXGI_ERROR_UNSUPPORTED - - - Constant DeviceRemoved. - DXGI_ERROR_DEVICE_REMOVED - - - Constant DeviceHung. - DXGI_ERROR_DEVICE_HUNG - - - Constant DeviceReset. - DXGI_ERROR_DEVICE_RESET - - - Constant WasStillDrawing. - DXGI_ERROR_WAS_STILL_DRAWING - - - Constant FrameStatisticsDisjoint. - DXGI_ERROR_FRAME_STATISTICS_DISJOINT - - - Constant GraphicsVidpnSourceInUse. - DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE - - - Constant DriverInternalError. - DXGI_ERROR_DRIVER_INTERNAL_ERROR - - - Constant Nonexclusive. - DXGI_ERROR_NONEXCLUSIVE - - - Constant NotCurrentlyAvailable. - DXGI_ERROR_NOT_CURRENTLY_AVAILABLE - - - Constant RemoteClientDisconnected. - DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED - - - Constant RemoteOufOfMemory. - DXGI_ERROR_REMOTE_OUTOFMEMORY - - - Constant AccessLost. - DXGI_ERROR_ACCESS_LOST - - - Constant WaitTimeout. - DXGI_ERROR_WAIT_TIMEOUT - - - Constant SessionDisconnected. - DXGI_ERROR_SESSION_DISCONNECTED - - - Constant RestrictToOutputStale. - DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE - - - Constant CannotProtectContent. - DXGI_ERROR_CANNOT_PROTECT_CONTENT - - - Constant AccessDenied. - DXGI_ERROR_ACCESS_DENIED - - - Constant NameAlreadyExists. - DXGI_ERROR_NAME_ALREADY_EXISTS - - - Constant SdkComponentMissing. - DXGI_ERROR_SDK_COMPONENT_MISSING - - - Constant NotCurrent. - DXGI_ERROR_NOT_CURRENT - - - Constant HwProtectionOufOfMemory. - DXGI_ERROR_HW_PROTECTION_OUTOFMEMORY - - - Constant DynamicCodePolicyViolation. - DXGI_ERROR_DYNAMIC_CODE_POLICY_VIOLATION - - - Constant NonCompositedUi. - DXGI_ERROR_NON_COMPOSITED_UI - - - Constant ModeChangeInProgress. - DXGI_ERROR_MODE_CHANGE_IN_PROGRESS - - - Constant CacheCorrupt. - DXGI_ERROR_CACHE_CORRUPT - - - Constant CacheFull. - DXGI_ERROR_CACHE_FULL - - - Constant CacheHashCollision. - DXGI_ERROR_CACHE_HASH_COLLISION - - - Constant AlreadyExists. - DXGI_ERROR_ALREADY_EXISTS - - - -

    The interface represents a display sub-system (including one or more GPU's, DACs and video memory).

    -
    - -

    This interface is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    A display sub-system is often referred to as a video card, however, on some machines the display sub-system is part of the mother board.

    To enumerate the display sub-systems, use . To get an interface to the adapter for a particular device, use . To create a software adapter, use .

    Windows?Phone?8: This API is supported.

    -
    - - ff471329 - IDXGIAdapter1 - IDXGIAdapter1 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets a DXGI 1.1 description of an adapter (or video card).

    -
    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Use the GetDesc1 method to get a DXGI 1.1 description of an adapter. To get a DXGI 1.0 description, use the method.

    -
    - - ff471330 - GetDesc1 - GetDesc1 - HRESULT IDXGIAdapter1::GetDesc1([Out] DXGI_ADAPTER_DESC1* pDesc) -
    - - -

    Gets a DXGI 1.1 description of an adapter (or video card).

    -
    -

    A reference to a structure that describes the adapter. This parameter must not be null. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID in the VendorId, DeviceId, SubSysId, and Revision members of and ?Software Adapter? for the description string in the Description member.

    -

    Returns if successful; otherwise, returns E_INVALIDARG if the pDesc parameter is null.

    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Use the GetDesc1 method to get a DXGI 1.1 description of an adapter. To get a DXGI 1.0 description, use the method.

    -
    - - ff471330 - HRESULT IDXGIAdapter1::GetDesc1([Out] DXGI_ADAPTER_DESC1* pDesc) - IDXGIAdapter1::GetDesc1 -
    - - -

    The interface represents a display subsystem, which includes one or more GPUs, DACs, and video memory.

    -
    - -

    A display subsystem is often referred to as a video card; however, on some computers, the display subsystem is part of the motherboard.

    To enumerate the display subsystems, use .

    To get an interface to the adapter for a particular device, use .

    To create a software adapter, use .

    -
    - - hh404537 - IDXGIAdapter2 - IDXGIAdapter2 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets a Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 description of an adapter or video card. This description includes information about the granularity at which the graphics processing unit (GPU) can be preempted from performing its current task.

    -
    - -

    Use the GetDesc2 method to get a DXGI 1.2 description of an adapter. To get a DXGI 1.1 description, use the method. To get a DXGI 1.0 description, use the method.

    The Windows Display Driver Model (WDDM) scheduler can preempt the GPU's execution of application tasks. The granularity at which the GPU can be preempted from performing its current task in the WDDM 1.1 or earlier driver model is a direct memory access (DMA) buffer for graphics tasks or a compute packet for compute tasks. The GPU can switch between tasks only after it completes the currently executing unit of work, a DMA buffer or a compute packet.

    A DMA buffer is the largest independent unit of graphics work that the WDDM scheduler can submit to the GPU. This buffer contains a set of GPU instructions that the WDDM driver and GPU use. A compute packet is the largest independent unit of compute work that the WDDM scheduler can submit to the GPU. A compute packet contains dispatches (for example, calls to the method), which contain thread groups. The WDDM 1.2 or later driver model allows the GPU to be preempted at finer granularity levels than a DMA buffer or compute packet. You can use the GetDesc2 method to retrieve the granularity levels for graphics and compute tasks.

    -
    - - hh404540 - GetDesc2 - GetDesc2 - HRESULT IDXGIAdapter2::GetDesc2([Out] DXGI_ADAPTER_DESC2* pDesc) -
    - - -

    Gets a Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 description of an adapter or video card. This description includes information about the granularity at which the graphics processing unit (GPU) can be preempted from performing its current task.

    -
    -

    A reference to a structure that describes the adapter. This parameter must not be null. On feature level 9 graphics hardware, earlier versions of GetDesc2 (GetDesc and GetDesc1) return zeros for the PCI ID in the VendorId, DeviceId, SubSysId, and Revision members of the adapter description structure and ?Software Adapter? for the description string in the Description member. GetDesc2 returns the actual feature level 9 hardware values in these members.

    -

    Returns if successful; otherwise, returns E_INVALIDARG if the pDesc parameter is null.

    - -

    Use the GetDesc2 method to get a DXGI 1.2 description of an adapter. To get a DXGI 1.1 description, use the method. To get a DXGI 1.0 description, use the method.

    The Windows Display Driver Model (WDDM) scheduler can preempt the GPU's execution of application tasks. The granularity at which the GPU can be preempted from performing its current task in the WDDM 1.1 or earlier driver model is a direct memory access (DMA) buffer for graphics tasks or a compute packet for compute tasks. The GPU can switch between tasks only after it completes the currently executing unit of work, a DMA buffer or a compute packet.

    A DMA buffer is the largest independent unit of graphics work that the WDDM scheduler can submit to the GPU. This buffer contains a set of GPU instructions that the WDDM driver and GPU use. A compute packet is the largest independent unit of compute work that the WDDM scheduler can submit to the GPU. A compute packet contains dispatches (for example, calls to the method), which contain thread groups. The WDDM 1.2 or later driver model allows the GPU to be preempted at finer granularity levels than a DMA buffer or compute packet. You can use the GetDesc2 method to retrieve the granularity levels for graphics and compute tasks.

    -
    - - hh404540 - HRESULT IDXGIAdapter2::GetDesc2([Out] DXGI_ADAPTER_DESC2* pDesc) - IDXGIAdapter2::GetDesc2 -
    - - -

    This interface adds some memory residency methods, for budgeting and reserving physical memory.

    -
    - -

    For more details, refer to the Residency section of the D3D12 documentation.

    -
    - - dn933221 - IDXGIAdapter3 - IDXGIAdapter3 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Registers to receive notification of hardware content protection teardown events.

    -
    -

    A handle to the event object that the operating system sets when hardware content protection teardown occurs. The CreateEvent or OpenEvent function returns this handle.

    -

    A reference to a key value that an application can pass to the method to unregister the notification event that hEvent specifies.

    - -

    Call () to check for the presence of the capability to know whether the hardware contains an automatic teardown mechanism. After the event is signaled, the application can call to determine the impact of the hardware teardown for a specific interface. -

    -
    - - dn933230 - HRESULT IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) - IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent -
    - - -

    Unregisters an event to stop it from receiving notification of hardware content protection teardown events.

    -
    -

    A key value for the window or event to unregister. The method returns this value.

    - - dn933233 - void IDXGIAdapter3::UnregisterHardwareContentProtectionTeardownStatus([In] unsigned int dwCookie) - IDXGIAdapter3::UnregisterHardwareContentProtectionTeardownStatus -
    - - -

    This method informs the process of the current budget and process usage.

    -
    -

    Specifies the device's physical adapter for which the video memory information is queried. For single-GPU operation, set this to zero. If there are multiple GPU nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is queried. See Multi-Adapter.

    -

    Specifies a that identifies the group as local or non-local.

    -

    Fills in a structure with the current values.

    - -

    Applications must explicitly manage their usage of physical memory explicitly and keep usage within the budget assigned to the application process. Processes that cannot kept their usage within their assigned budgets will likely experience stuttering, as they are intermittently frozen and paged-out to allow other processes to run.

    -
    - - dn933223 - HRESULT IDXGIAdapter3::QueryVideoMemoryInfo([In] unsigned int NodeIndex,[In] DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup,[Out] DXGI_QUERY_VIDEO_MEMORY_INFO* pVideoMemoryInfo) - IDXGIAdapter3::QueryVideoMemoryInfo -
    - - -

    This method sends the minimum required physical memory for an application, to the OS.

    -
    -

    Specifies the device's physical adapter for which the video memory information is being set. For single-GPU operation, set this to zero. If there are multiple GPU nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is being set. See Multi-Adapter.

    -

    Specifies a that identifies the group as local or non-local.

    -

    Specifies a UINT64 that sets the minimum required physical memory, in bytes.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - -

    Applications are encouraged to set a video reservation to denote the amount of physical memory they cannot go without. This value helps the OS quickly minimize the impact of large memory pressure situations.

    -
    - - dn933232 - HRESULT IDXGIAdapter3::SetVideoMemoryReservation([In] unsigned int NodeIndex,[In] DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup,[In] unsigned longlong Reservation) - IDXGIAdapter3::SetVideoMemoryReservation -
    - - -

    This method establishes a correlation between a CPU synchronization object and the budget change event.

    -
    -

    Specifies a HANDLE for the event.

    -

    A key value for the window or event to unregister. The method returns this value.

    - -

    Instead of calling QueryVideoMemoryInfo regularly, applications can use CPU synchronization objects to efficiently wake threads when budget changes occur.

    -
    - - dn933231 - HRESULT IDXGIAdapter3::RegisterVideoMemoryBudgetChangeNotificationEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) - IDXGIAdapter3::RegisterVideoMemoryBudgetChangeNotificationEvent -
    - - -

    This method stops notifying a CPU synchronization object whenever a budget change occurs. An application may switch back to polling the information regularly.

    -
    -

    A key value for the window or event to unregister. The method returns this value.

    - -

    An application may switch back to polling for the information regularly.

    -
    - - dn933234 - void IDXGIAdapter3::UnregisterVideoMemoryBudgetChangeNotification([In] unsigned int dwCookie) - IDXGIAdapter3::UnregisterVideoMemoryBudgetChangeNotification -
    - - -

    The interface represents a display subsystem (including one or more GPUs, DACs and video memory).

    -
    - -

    A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard.

    To enumerate the display subsystems, use .

    To get an interface to the adapter for a particular device, use .

    To create a software adapter, use .

    Windows?Phone?8: This API is supported.

    -
    - - bb174523 - IDXGIAdapter4 - IDXGIAdapter4 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - - No documentation. - - - GetDesc3 - GetDesc3 - HRESULT IDXGIAdapter4::GetDesc3([Out] DXGI_ADAPTER_DESC3* pDesc) - - - - No documentation. - - No documentation. - No documentation. - - HRESULT IDXGIAdapter4::GetDesc3([Out] DXGI_ADAPTER_DESC3* pDesc) - IDXGIAdapter4::GetDesc3 - - - -

    Represents a swap chain that is used by desktop media apps to decode video data and show it on a DirectComposition surface.

    -
    - -

    Decode swap chains are intended for use primarily with YUV surface formats. When using decode buffers created with an RGB surface format, the TargetRect and DestSize must be set equal to the buffer dimensions. SourceRect cannot exceed the buffer dimensions.

    In clone mode, the decode swap chain is only guaranteed to be shown on the primary output.

    Decode swap chains cannot be used with dirty rects.

    -
    - - dn384109 - IDXGIDecodeSwapChain - IDXGIDecodeSwapChain -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets or sets the source region that is used for the swap chain.

    -
    - - dn384121 - GetSourceRect / SetSourceRect - GetSourceRect - HRESULT IDXGIDecodeSwapChain::GetSourceRect([Out] RECT* pRect) -
    - - -

    Gets or sets the rectangle that defines the target region for the video processing blit operation.

    -
    - - dn384122 - GetTargetRect / SetTargetRect - GetTargetRect - HRESULT IDXGIDecodeSwapChain::GetTargetRect([Out] RECT* pRect) -
    - - -

    Gets or sets the color space used by the swap chain.

    -
    - - dn384119 - GetColorSpace / SetColorSpace - GetColorSpace - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS IDXGIDecodeSwapChain::GetColorSpace() -
    - - -

    Presents a frame on the output adapter. The frame is a subresource of the object that was used to create the decode swap chain.

    -
    - No documentation. - No documentation. - No documentation. -

    This method returns on success, or it returns one of the following error codes:

    • E_OUTOFMEMORY
    - - dn384123 - HRESULT IDXGIDecodeSwapChain::PresentBuffer([In] unsigned int BufferToPresent,[In] unsigned int SyncInterval,[In] unsigned int Flags) - IDXGIDecodeSwapChain::PresentBuffer -
    - - -

    Sets the rectangle that defines the source region for the video processing blit operation.

    The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.

    -
    -

    A reference to a structure that contains the source region to set for the swap chain.

    -

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    - - dn384126 - HRESULT IDXGIDecodeSwapChain::SetSourceRect([In] const RECT* pRect) - IDXGIDecodeSwapChain::SetSourceRect -
    - - -

    Sets the rectangle that defines the target region for the video processing blit operation.

    The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.

    -
    -

    A reference to a structure that contains the target region to set for the swap chain.

    -

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    - - dn384127 - HRESULT IDXGIDecodeSwapChain::SetTargetRect([In] const RECT* pRect) - IDXGIDecodeSwapChain::SetTargetRect -
    - - -

    Sets the size of the destination surface to use for the video processing blit operation.

    The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.

    -
    -

    The width of the destination size, in pixels.

    -

    The height of the destination size, in pixels.

    -

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    - - dn384125 - HRESULT IDXGIDecodeSwapChain::SetDestSize([In] unsigned int Width,[In] unsigned int Height) - IDXGIDecodeSwapChain::SetDestSize -
    - - -

    Gets the source region that is used for the swap chain.

    -
    -

    A reference to a structure that receives the source region for the swap chain.

    -

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    - - dn384121 - HRESULT IDXGIDecodeSwapChain::GetSourceRect([Out] RECT* pRect) - IDXGIDecodeSwapChain::GetSourceRect -
    - - -

    Gets the rectangle that defines the target region for the video processing blit operation.

    -
    -

    A reference to a structure that receives the target region for the swap chain.

    -

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    - - dn384122 - HRESULT IDXGIDecodeSwapChain::GetTargetRect([Out] RECT* pRect) - IDXGIDecodeSwapChain::GetTargetRect -
    - - -

    Gets the size of the destination surface to use for the video processing blit operation.

    -
    -

    A reference to a variable that receives the width in pixels.

    -

    A reference to a variable that receives the height in pixels.

    -

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    - - dn384120 - HRESULT IDXGIDecodeSwapChain::GetDestSize([Out] unsigned int* pWidth,[Out] unsigned int* pHeight) - IDXGIDecodeSwapChain::GetDestSize -
    - - -

    Sets the color space used by the swap chain.

    -
    -

    A reference to a combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies the color space to set for the swap chain.

    -

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    - - dn384124 - HRESULT IDXGIDecodeSwapChain::SetColorSpace([In] DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS ColorSpace) - IDXGIDecodeSwapChain::SetColorSpace -
    - - -

    Gets the color space used by the swap chain.

    -
    -

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies the color space for the swap chain.

    - - dn384119 - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS IDXGIDecodeSwapChain::GetColorSpace() - IDXGIDecodeSwapChain::GetColorSpace -
    - - -

    An interface implements a derived class for DXGI objects that produce image data.

    -
    - -

    This interface is not supported by Direct3D 12 devices. Direct3D 12 applications have direct control over their swapchain management, so better latency control should be handled by the application. You can make use of Waitable objects (refer to ) and the method if desired.

    This interface is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
    -            

    Windows?Phone?8: This API is supported.

    -
    - - ff471331 - IDXGIDevice1 - IDXGIDevice1 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets or sets the number of frames that the system is allowed to queue for rendering.

    -
    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    -
    - - ff471332 - GetMaximumFrameLatency / SetMaximumFrameLatency - GetMaximumFrameLatency - HRESULT IDXGIDevice1::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) -
    - - -

    Sets the number of frames that the system is allowed to queue for rendering.

    -
    -

    The maximum number of back buffer frames that a driver can queue. The value defaults to 3, but can range from 1 to 16. A value of 0 will reset latency to the default. For multi-head devices, this value is specified per-head.

    -

    Returns if successful; otherwise, if the device was removed.

    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    -
    - - ff471334 - HRESULT IDXGIDevice1::SetMaximumFrameLatency([In] unsigned int MaxLatency) - IDXGIDevice1::SetMaximumFrameLatency -
    - - -

    Gets the number of frames that the system is allowed to queue for rendering.

    -
    -

    This value is set to the number of frames that can be queued for render. This value defaults to 3, but can range from 1 to 16.

    -

    Returns if successful; otherwise, returns one of the following members of the D3DERR enumerated type:

    • D3DERR_DEVICELOST
    • D3DERR_DEVICEREMOVED
    • D3DERR_DRIVERINTERNALERROR
    • D3DERR_INVALIDCALL
    • D3DERR_OUTOFVIDEOMEMORY
    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    -
    - - ff471332 - HRESULT IDXGIDevice1::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) - IDXGIDevice1::GetMaximumFrameLatency -
    - - -

    The interface implements a derived class for DXGI objects that produce image data. The interface exposes methods to block CPU processing until the GPU completes processing, and to offer resources to the operating system.

    -
    - -

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
    -            

    Windows?Phone?8: This API is supported.

    -
    - - hh404543 - IDXGIDevice2 - IDXGIDevice2 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Allows the operating system to free the video memory of resources by discarding their content.

    -
    -

    The number of resources in the ppResources argument array.

    -

    An array of references to interfaces for the resources to offer.

    -

    A -typed value that indicates how valuable data is.

    -

    OfferResources returns:

    • if resources were successfully offered
    • E_INVALIDARG if a resource in the array or the priority is invalid
    - -

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the IDXGIDevice2::ReclaimResource method to reclaim the resource. You cannot call OfferResources to offer immutable resources.

    To offer shared resources, call OfferResources on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    Note??The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources. The driver can postpone offering them until the next call to , , or .?

    Platform Update for Windows?7:??The runtime validates that OfferResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404549 - HRESULT IDXGIDevice2::OfferResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority) - IDXGIDevice2::OfferResources -
    - - -

    Allows the operating system to free the video memory of resources by discarding their content.

    -
    -

    The number of resources in the ppResources argument array.

    -

    An array of references to interfaces for the resources to offer.

    -

    A -typed value that indicates how valuable data is.

    -

    OfferResources returns:

    • if resources were successfully offered
    • E_INVALIDARG if a resource in the array or the priority is invalid
    - -

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the IDXGIDevice2::ReclaimResource method to reclaim the resource. You cannot call OfferResources to offer immutable resources.

    To offer shared resources, call OfferResources on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    Note??The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources. The driver can postpone offering them until the next call to , , or .?

    Platform Update for Windows?7:??The runtime validates that OfferResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404549 - HRESULT IDXGIDevice2::OfferResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority) - IDXGIDevice2::OfferResources -
    - - -

    Allows the operating system to free the video memory of resources by discarding their content.

    -
    -

    The number of resources in the ppResources argument array.

    -

    An array of references to interfaces for the resources to offer.

    -

    A -typed value that indicates how valuable data is.

    -

    OfferResources returns:

    • if resources were successfully offered
    • E_INVALIDARG if a resource in the array or the priority is invalid
    - -

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the IDXGIDevice2::ReclaimResource method to reclaim the resource. You cannot call OfferResources to offer immutable resources.

    To offer shared resources, call OfferResources on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    Note??The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources. The driver can postpone offering them until the next call to , , or .?

    Platform Update for Windows?7:??The runtime validates that OfferResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404549 - HRESULT IDXGIDevice2::OfferResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority) - IDXGIDevice2::OfferResources -
    - - -

    Restores access to resources that were previously offered by calling .

    -
    - No documentation. - No documentation. - No documentation. -

    ReclaimResources returns:

    • if resources were successfully reclaimed
    • E_INVALIDARG if the resources are invalid
    - -

    After you call to offer one or more resources, you must call ReclaimResources before you can use those resources again. You must check the values in the array at pDiscarded to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.

    To reclaim shared resources, call ReclaimResources only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources only while you hold the mutex.

    Platform Update for Windows?7:??The runtime validates that ReclaimResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404551 - HRESULT IDXGIDevice2::ReclaimResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer, Optional] BOOL* pDiscarded) - IDXGIDevice2::ReclaimResources -
    - - -

    Restores access to resources that were previously offered by calling .

    -
    - No documentation. - No documentation. - No documentation. -

    ReclaimResources returns:

    • if resources were successfully reclaimed
    • E_INVALIDARG if the resources are invalid
    - -

    After you call to offer one or more resources, you must call ReclaimResources before you can use those resources again. You must check the values in the array at pDiscarded to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.

    To reclaim shared resources, call ReclaimResources only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources only while you hold the mutex.

    Platform Update for Windows?7:??The runtime validates that ReclaimResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404551 - HRESULT IDXGIDevice2::ReclaimResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer, Optional] BOOL* pDiscarded) - IDXGIDevice2::ReclaimResources -
    - - -

    Restores access to resources that were previously offered by calling .

    -
    - No documentation. - No documentation. - No documentation. -

    ReclaimResources returns:

    • if resources were successfully reclaimed
    • E_INVALIDARG if the resources are invalid
    - -

    After you call to offer one or more resources, you must call ReclaimResources before you can use those resources again. You must check the values in the array at pDiscarded to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.

    To reclaim shared resources, call ReclaimResources only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources only while you hold the mutex.

    Platform Update for Windows?7:??The runtime validates that ReclaimResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404551 - HRESULT IDXGIDevice2::ReclaimResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer, Optional] BOOL* pDiscarded) - IDXGIDevice2::ReclaimResources -
    - - -

    Flushes any outstanding rendering commands and sets the specified event object to the signaled state after all previously submitted rendering commands complete.

    -
    -

    A handle to the event object. The CreateEvent or OpenEvent function returns this handle. All types of event objects (manual-reset, auto-reset, and so on) are supported.

    The handle must have the EVENT_MODIFY_STATE access right. For more information about access rights, see Synchronization Object Security and Access Rights.

    -

    Returns if successful; otherwise, returns one of the following values:

    • E_OUTOFMEMORY if insufficient memory is available to complete the operation.
    • E_INVALIDARG if the parameter was validated and determined to be incorrect.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, EnqueueSetEvent fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    EnqueueSetEvent calls the SetEvent function on the event object after all previously submitted rendering commands complete or the device is removed.

    After an application calls EnqueueSetEvent, it can immediately call the WaitForSingleObject function to put itself to sleep until rendering commands complete.

    You cannot use EnqueueSetEvent to determine work completion that is associated with presentation (); instead, we recommend that you use .

    -
    - - hh404546 - HRESULT IDXGIDevice2::EnqueueSetEvent([In] void* hEvent) - IDXGIDevice2::EnqueueSetEvent -
    - - -

    The interface implements a derived class for DXGI objects that produce image data. The interface exposes a method to trim graphics memory usage by the DXGI device.

    -
    - -

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);

    Windows?Phone?8: This API is supported.

    -
    - - dn280345 - IDXGIDevice3 - IDXGIDevice3 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Trims the graphics memory allocated by the DXGI device on the app's behalf.

    For apps that render with DirectX, graphics drivers periodically allocate internal memory buffers in order to speed up subsequent rendering requests. These memory allocations count against the app's memory usage for PLM and in general lead to increased memory usage by the overall system.

    Starting in Windows?8.1, apps that render with Direct2D and/or Direct3D (including CoreWindow and XAML interop) must call Trim in response to the PLM suspend callback. The Direct3D runtime and the graphics driver will discard internal memory buffers allocated for the app, reducing its memory footprint.

    Calling this method does not change the rendering state of the graphics device and it has no effect on rendering operations. There is a brief performance hit when internal buffers are reallocated during the first rendering operations after the Trim call, therefore apps should only call Trim when going idle for a period of time (in response to PLM suspend, for example).

    Apps should ensure that they call Trim as one of the last D3D operations done before going idle. Direct3D will normally defer the destruction of D3D objects. Calling Trim, however, forces Direct3D to destroy objects immediately. For this reason, it is not guaranteed that releasing the final reference on Direct3D objects after calling Trim will cause the object to be destroyed and memory to be deallocated before the app suspends.

    Similar to , apps should call before calling Trim. ClearState clears the Direct3D pipeline bindings, ensuring that Direct3D does not hold any references to the Direct3D objects you are trying to release.

    It is also prudent to release references on middleware before calling Trim, as that middleware may also need to release references - to Direct3D objects.

    -
    - - dn280346 - void IDXGIDevice3::Trim() - IDXGIDevice3::Trim -
    - - -

    An interface implements a derived class for DXGI objects that produce image data.

    -
    - -

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
    -            

    Windows?Phone?8: This API is supported.

    -
    - - bb174527 - IDXGIDevice4 - IDXGIDevice4 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.

    -
    -

    The number of resources in the ppResources argument array.

    -

    An array of references to interfaces for the resources to offer.

    -

    A -typed value that indicates how valuable data is.

    -

    Specifies the .

    -

    This method returns an success or error code, which can include E_INVALIDARG if a resource in the array, or the priority, is invalid.

    - -

    OfferResources1 (an extension of the original API) enables D3D based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. - A de-committed allocation cannot be reused, so opting in to the new flag means the new reclaim results must be properly handled. Refer to the flag descriptions in and the Example below.

    OfferResources1 and ReclaimResources1 may not be used interchangeably with OfferResources and ReclaimResources. -

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources1 to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources1 on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the ReclaimResources1 method to reclaim the resource. You cannot call OfferResources1 to offer immutable resources.

    To offer shared resources, call OfferResources1 on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources1 only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources1. The driver can postpone offering them until the next call to , , or .

    -
    - - mt732705 - HRESULT IDXGIDevice4::OfferResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority,[In] unsigned int Flags) - IDXGIDevice4::OfferResources1 -
    - - -

    Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.

    -
    -

    The number of resources in the ppResources argument array.

    -

    An array of references to interfaces for the resources to offer.

    -

    A -typed value that indicates how valuable data is.

    -

    Specifies the .

    -

    This method returns an success or error code, which can include E_INVALIDARG if a resource in the array, or the priority, is invalid.

    - -

    OfferResources1 (an extension of the original API) enables D3D based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. - A de-committed allocation cannot be reused, so opting in to the new flag means the new reclaim results must be properly handled. Refer to the flag descriptions in and the Example below.

    OfferResources1 and ReclaimResources1 may not be used interchangeably with OfferResources and ReclaimResources. -

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources1 to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources1 on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the ReclaimResources1 method to reclaim the resource. You cannot call OfferResources1 to offer immutable resources.

    To offer shared resources, call OfferResources1 on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources1 only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources1. The driver can postpone offering them until the next call to , , or .

    -
    - - mt732705 - HRESULT IDXGIDevice4::OfferResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority,[In] unsigned int Flags) - IDXGIDevice4::OfferResources1 -
    - - -

    Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.

    -
    -

    The number of resources in the ppResources argument array.

    -

    An array of references to interfaces for the resources to offer.

    -

    A -typed value that indicates how valuable data is.

    -

    Specifies the .

    -

    This method returns an success or error code, which can include E_INVALIDARG if a resource in the array, or the priority, is invalid.

    - -

    OfferResources1 (an extension of the original API) enables D3D based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. - A de-committed allocation cannot be reused, so opting in to the new flag means the new reclaim results must be properly handled. Refer to the flag descriptions in and the Example below.

    OfferResources1 and ReclaimResources1 may not be used interchangeably with OfferResources and ReclaimResources. -

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources1 to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources1 on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the ReclaimResources1 method to reclaim the resource. You cannot call OfferResources1 to offer immutable resources.

    To offer shared resources, call OfferResources1 on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources1 only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources1. The driver can postpone offering them until the next call to , , or .

    -
    - - mt732705 - HRESULT IDXGIDevice4::OfferResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority,[In] unsigned int Flags) - IDXGIDevice4::OfferResources1 -
    - - -

    Restores access to resources that were previously offered by calling .

    -
    - No documentation. - No documentation. - No documentation. -

    This method returns an success or error code, including E_INVALIDARG if the resources are invalid.

    - -

    After you call OfferResources1 to offer one or more resources, you must call ReclaimResources1 before you can use those resources again.

    To reclaim shared resources, call ReclaimResources1 only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources1 only while you hold the mutex.

    -
    - - mt732706 - HRESULT IDXGIDevice4::ReclaimResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer] DXGI_RECLAIM_RESOURCE_RESULTS* pResults) - IDXGIDevice4::ReclaimResources1 -
    - - -

    Restores access to resources that were previously offered by calling .

    -
    - No documentation. - No documentation. - No documentation. -

    This method returns an success or error code, including E_INVALIDARG if the resources are invalid.

    - -

    After you call OfferResources1 to offer one or more resources, you must call ReclaimResources1 before you can use those resources again.

    To reclaim shared resources, call ReclaimResources1 only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources1 only while you hold the mutex.

    -
    - - mt732706 - HRESULT IDXGIDevice4::ReclaimResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer] DXGI_RECLAIM_RESOURCE_RESULTS* pResults) - IDXGIDevice4::ReclaimResources1 -
    - - -

    Restores access to resources that were previously offered by calling .

    -
    - No documentation. - No documentation. - No documentation. -

    This method returns an success or error code, including E_INVALIDARG if the resources are invalid.

    - -

    After you call OfferResources1 to offer one or more resources, you must call ReclaimResources1 before you can use those resources again.

    To reclaim shared resources, call ReclaimResources1 only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources1 only while you hold the mutex.

    -
    - - mt732706 - HRESULT IDXGIDevice4::ReclaimResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer] DXGI_RECLAIM_RESOURCE_RESULTS* pResults) - IDXGIDevice4::ReclaimResources1 -
    - - -

    The interface exposes methods to indicate user preference for the operating system's stereoscopic 3D display behavior and to set stereoscopic 3D display status to enable or disable.

    We recommend that you not use to query or set system-wide stereoscopic 3D settings in your stereoscopic 3D apps. Instead, for your windowed apps, call the method to determine whether to render in stereo; for your full-screen apps, call the method and then determine whether any of the returned display modes support rendering in stereo.

    -
    - - Note?? The interface is only used by the Display app of the operating system's Control Panel or by control applets from third party graphics vendors. This interface is not meant for developers of end-user apps.?Note?? The interface does not exist for Windows Store apps.?

    Call QueryInterface from a factory object (, or ) to retrieve the interface. The following code shows how.

     * pDXGIDisplayControl;	
    -            hr = g_pDXGIFactory->QueryInterface(__uuidof(), (void **)&pDXGIDisplayControl);

    The operating system processes changes to stereo-enabled configuration asynchronously. Therefore, these changes might not be immediately visible in every process that calls to query for stereo configuration. Control applets can use the or method to register for notifications of all stereo configuration changes.

    Platform Update for Windows?7:?? Stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404552 - IDXGIDisplayControl - IDXGIDisplayControl -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Retrieves a Boolean value that indicates whether the operating system's stereoscopic 3D display behavior is enabled.

    -
    - -

    You pass a Boolean value to the method to either enable or disable the operating system's stereoscopic 3D display behavior. TRUE enables the operating system's stereoscopic 3D display behavior and disables it.

    -
    - - hh404553 - IsStereoEnabled - IsStereoEnabled - BOOL IDXGIDisplayControl::IsStereoEnabled() -
    - - -

    Set a Boolean value to either enable or disable the operating system's stereoscopic 3D display behavior.

    -
    - -

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, SetStereoEnabled doesn't change stereoscopic 3D display behavior because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404554 - SetStereoEnabled - SetStereoEnabled - void IDXGIDisplayControl::SetStereoEnabled([In] BOOL enabled) -
    - - -

    Retrieves a Boolean value that indicates whether the operating system's stereoscopic 3D display behavior is enabled.

    -
    -

    IsStereoEnabled returns TRUE when the operating system's stereoscopic 3D display behavior is enabled and when this behavior is disabled.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, IsStereoEnabled always returns because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    You pass a Boolean value to the method to either enable or disable the operating system's stereoscopic 3D display behavior. TRUE enables the operating system's stereoscopic 3D display behavior and disables it.

    -
    - - hh404553 - BOOL IDXGIDisplayControl::IsStereoEnabled() - IDXGIDisplayControl::IsStereoEnabled -
    - - -

    Set a Boolean value to either enable or disable the operating system's stereoscopic 3D display behavior.

    -
    -

    A Boolean value that either enables or disables the operating system's stereoscopic 3D display behavior. TRUE enables the operating system's stereoscopic 3D display behavior and disables it.

    - -

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, SetStereoEnabled doesn't change stereoscopic 3D display behavior because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    -
    - - hh404554 - void IDXGIDisplayControl::SetStereoEnabled([In] BOOL enabled) - IDXGIDisplayControl::SetStereoEnabled -
    - - -

    Enables creating Microsoft DirectX Graphics Infrastructure (DXGI) objects.

    -
    - - dn457942 - IDXGIFactory3 - IDXGIFactory3 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets the flags that were used when a Microsoft DirectX Graphics Infrastructure (DXGI) object was created.

    -
    - -

    The GetCreationFlags method returns flags that were passed to the CreateDXGIFactory2 function, or were implicitly constructed by CreateDXGIFactory, CreateDXGIFactory1, , or D3D11CreateDeviceAndSwapChain.

    -
    - - dn457943 - GetCreationFlags - GetCreationFlags - unsigned int IDXGIFactory3::GetCreationFlags() -
    - - -

    Gets the flags that were used when a Microsoft DirectX Graphics Infrastructure (DXGI) object was created.

    -
    -

    The creation flags.

    - -

    The GetCreationFlags method returns flags that were passed to the CreateDXGIFactory2 function, or were implicitly constructed by CreateDXGIFactory, CreateDXGIFactory1, , or D3D11CreateDeviceAndSwapChain.

    -
    - - dn457943 - unsigned int IDXGIFactory3::GetCreationFlags() - IDXGIFactory3::GetCreationFlags -
    - - -

    This interface enables a single method to support variable refresh rate displays.

    -
    - - mt722566 - IDXGIFactory5 - IDXGIFactory5 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Used to check for hardware feature support.

    -
    -

    Specifies one member of to query support for.

    -

    Specifies a reference to a buffer that will be filled with data that describes the feature support.

    -

    The size, in bytes, of pFeatureSupportData.

    -

    This method returns an success or error code.

    - -

    Refer to the description of .

    -
    - - mt722567 - HRESULT IDXGIFactory5::CheckFeatureSupport([In] DXGI_FEATURE Feature,[Out, Buffer] void* pFeatureSupportData,[In] unsigned int FeatureSupportDataSize) - IDXGIFactory5::CheckFeatureSupport -
    - - -

    Creates swap chains for desktop media apps that use DirectComposition surfaces to decode and display video.

    -
    - -

    To create a Microsoft DirectX Graphics Infrastructure (DXGI) media factory interface, pass into either the CreateDXGIFactory or CreateDXGIFactory1 function or call QueryInterface from a factory object returned by CreateDXGIFactory, CreateDXGIFactory1, or CreateDXGIFactory2.

    Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the , , , or interface from the Direct3D device and then use the method to locate the factory. The following code shows how.

     * pDXGIDevice;	
    -            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);  * pDXGIAdapter;	
    -            hr = pDXGIDevice->GetParent(__uuidof(), (void **)&pDXGIAdapter);  * pIDXGIFactory;	
    -            pDXGIAdapter->GetParent(__uuidof(), (void **)&pIDXGIFactory);
    -
    - - dn384128 - IDXGIFactoryMedia - IDXGIFactoryMedia -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Creates a YUV swap chain for an existing DirectComposition surface handle.

    -
    - No documentation. - No documentation. - No documentation. - No documentation. - No documentation. -

    CreateSwapChainForCompositionSurfaceHandle returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc, pYuvDecodeBuffers, or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.
    - - dn384130 - HRESULT IDXGIFactoryMedia::CreateSwapChainForCompositionSurfaceHandle([In] IUnknown* pDevice,[In, Optional] void* hSurface,[In] const DXGI_SWAP_CHAIN_DESC1* pDesc,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out] IDXGISwapChain1** ppSwapChain) - IDXGIFactoryMedia::CreateSwapChainForCompositionSurfaceHandle -
    - - -

    Creates a YUV swap chain for an existing DirectComposition surface handle. The swap chain is created with pre-existing buffers and very few descriptive elements are required. Instead, this method requires a DirectComposition surface handle and an buffer to hold decoded frame data. The swap chain format is determined by the format of the subresources of the .

    -
    - No documentation. - No documentation. - No documentation. - No documentation. - No documentation. - No documentation. -

    CreateDecodeSwapChainForCompositionSurfaceHandle returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc, pYuvDecodeBuffers, or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.
    - -

    The provided via the pYuvDecodeBuffers parameter must point to at least one subresource, and all subresources must be created with the flag.

    -
    - - dn384129 - HRESULT IDXGIFactoryMedia::CreateDecodeSwapChainForCompositionSurfaceHandle([In] IUnknown* pDevice,[In, Optional] void* hSurface,[In] DXGI_DECODE_SWAP_CHAIN_DESC* pDesc,[In] IDXGIResource* pYuvDecodeBuffers,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out] IDXGIDecodeSwapChain** ppSwapChain) - IDXGIFactoryMedia::CreateDecodeSwapChainForCompositionSurfaceHandle -
    - - -

    Enables performing bulk operations across all SurfaceImageSource objects created in the same process.

    -
    - - dn448959 - ISurfaceImageSourceManagerNative - ISurfaceImageSourceManagerNative -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Flushes all current GPU work for all SurfaceImageSource or VirtualSurfaceImageSource objects associated with the given device.

    -
    - No documentation. -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - -

    The FlushAllSurfacesWithDevice method flushes current GPU work for all SurfaceImageSource objects that were created with device. This GPU work includes Direct2D rendering work and internal GPU work done by the framework associated with rendering. This is useful if an application has created multiple SurfaceImageSource objects and needs to flush the GPU work for all of these surfaces from the background rendering thread. By flushing this work from the background thread the work can be better parallelized, with work being done on the UI thread to improve performance.

    You can call the FlushAllSurfacesWithDevice method from a non-UI thread.

    -
    - - dn448960 - HRESULT ISurfaceImageSourceManagerNative::FlushAllSurfacesWithDevice([In] IUnknown* device) - ISurfaceImageSourceManagerNative::FlushAllSurfacesWithDevice -
    - - -

    Provides the implementation of a shared fixed-size surface for Direct2D drawing.

    Note??If the surface is larger than the screen size, use instead.? -
    - -

    This interface provides the native implementation of the SurfaceImageSource Windows runtime type. To obtain a reference to , you must cast a SurfaceImageSource instance to IInspectable or , and call QueryInterface.

     Microsoft::WRL::ComPtr<>	m_sisNative;	
    -            // ...	
    -            IInspectable* sisInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(surfaceImageSource);	
    -            sisInspectable->QueryInterface(__uuidof(), (void **)&m_sisNative) 
    -
    - - hh848322 - ISurfaceImageSourceNative - ISurfaceImageSourceNative -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Sets the DXGI device, created with , that will draw the surface. This method must be called from the UI thread.

    -
    - - hh848325 - SetDevice - SetDevice - HRESULT ISurfaceImageSourceNative::SetDevice([In] IDXGIDevice* device) -
    - - -

    Sets the DXGI device, created with , that will draw the surface. This method must be called from the UI thread.

    -
    -

    Pointer to the DXGI device interface.

    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - hh848325 - HRESULT ISurfaceImageSourceNative::SetDevice([In] IDXGIDevice* device) - ISurfaceImageSourceNative::SetDevice -
    - - -

    Opens the supplied DXGI surface for drawing.

    -
    -

    The region of the surface that will be drawn into.

    -

    Receives the point (x,y) offset of the surface that will be drawn into.

    -

    Receives a reference to the surface for drawing.

    - -

    If the app window that contains the SurfaceImageSource isn't active, like when it's suspended, calling the BeginDraw method returns an error.

    -
    - - hh848323 - HRESULT ISurfaceImageSourceNative::BeginDraw([In] RECT updateRect,[Out] IDXGISurface** surface,[Out] POINT* offset) - ISurfaceImageSourceNative::BeginDraw -
    - - -

    Closes the surface draw operation.

    -
    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - hh848324 - HRESULT ISurfaceImageSourceNative::EndDraw() - ISurfaceImageSourceNative::EndDraw -
    - - -

    Provides the implementation of a shared Microsoft DirectX surface which is displayed in a SurfaceImageSource or VirtualSurfaceImageSource.

    -
    - -

    The interface provides the native implementation of the SurfaceImageSource class. To get a reference to the interface, you must cast a SurfaceImageSource instance to IInspectable or , and call the QueryInterface method.

     Microsoft::WRL::ComPtr<>	m_sisD2DNative;	
    -            // ...	
    -            IInspectable* sisInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(surfaceImageSource);	
    -            sisInspectable->QueryInterface(__uuidof(), (void **)&m_sisD2DNative) 

    The interface provides high-performance batched Direct2D drawing, which enables drawing to multiple different SurfaceImageSource or VirtualSurfaceImageSource objects in the same batch, as long as they share the same Direct2D device. Batching can improve performance when updating multiple surfaces at the same time.

    The interface enables drawing to a SurfaceImageSource or VirtualSurfaceImageSource from one or more background threads, which allows high-performance DirectX rendering off the UI thread.

    Only call the SetDevice, BeginDraw, and EndDraw methods on interface, not on the or interfaces.

    In order to support batching updates to multiple surfaces to improve performance, you can pass an to the SetDevice method, instead of an . The BeginDraw method can then optionally return a shared , which the app uses to draw all content for that update.

    To draw to the surface from a background thread, you must set any DirectX resources, including the Microsoft Direct3D device, Direct3D device context, Direct2D device, and Direct2D device context, to enable multithreading support.

    You can call the BeginDraw, SuspendDraw, and ResumeDraw methods from any background thread to enable high-performance multithreaded drawing.

    Always call the EndDraw method on the UI thread in order to synchronize updating the DirectX content with the current XAML UI thread frame. You can call BeginDraw on a background thread, call SuspendDraw when you're done drawing on the background thread, and call EndDraw on the UI thread.

    Use SuspendDraw and ResumeDraw to suspend and resume drawing on any background or UI thread.

    Handle the SurfaceContentsLost event to determine when you need to recreate content which may be lost if the system resets the GPU.

    -
    - - dn302137 - ISurfaceImageSourceNativeWithD2D - ISurfaceImageSourceNativeWithD2D -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Sets the Microsoft DirectX Graphics Infrastructure (DXGI) or Direct2D device, created with , that will draw the surface.

    -
    - - dn302141 - SetDevice - SetDevice - HRESULT ISurfaceImageSourceNativeWithD2D::SetDevice([In] IUnknown* device) -
    - - -

    Sets the Microsoft DirectX Graphics Infrastructure (DXGI) or Direct2D device, created with , that will draw the surface.

    -
    -

    Pointer to the DXGI device interface. You can pass an to signal that this surface participates in Direct2D batching to improve performance when updating Direct2D content across multiple surfaces. The device must have multithreading supported enabled if the app draws to the surface from a background thread.

    -

    This method fails when the SurfaceImageSource is larger than the maximum texture size supported by the Direct3D device. Apps should use VirtualSurfaceImageSource for surfaces larger than the maximum texture size supported by the Direct3D device.

    - - dn302141 - HRESULT ISurfaceImageSourceNativeWithD2D::SetDevice([In] IUnknown* device) - ISurfaceImageSourceNativeWithD2D::SetDevice -
    - - -

    Initiates an update to the associated SurfaceImageSource or VirtualSurfaceImageSource.

    -
    - No documentation. - No documentation. - No documentation. - No documentation. -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - dn302138 - HRESULT ISurfaceImageSourceNativeWithD2D::BeginDraw([In] const RECT& updateRect,[In] const GUID& iid,[Out] void** updateObject,[Out] POINT* offset) - ISurfaceImageSourceNativeWithD2D::BeginDraw -
    - - -

    Closes the surface draw operation.

    -
    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - -

    Always call the EndDraw method on the UI thread in order to synchronize updating the Microsoft DirectX content with the current XAML UI thread frame.

    -
    - - dn302139 - HRESULT ISurfaceImageSourceNativeWithD2D::EndDraw() - ISurfaceImageSourceNativeWithD2D::EndDraw -
    - - -

    Suspends the drawing operation.

    -
    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - dn302142 - HRESULT ISurfaceImageSourceNativeWithD2D::SuspendDraw() - ISurfaceImageSourceNativeWithD2D::SuspendDraw -
    - - -

    Resume the drawing operation.

    -
    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - dn302140 - HRESULT ISurfaceImageSourceNativeWithD2D::ResumeDraw() - ISurfaceImageSourceNativeWithD2D::ResumeDraw -
    - - - No documentation. - - - ISwapChainBackgroundPanelNative - ISwapChainBackgroundPanelNative - - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Sets the DirectX swap chain for SwapChainBackgroundPanel.

    -
    - - hh848327 - SetSwapChain - SetSwapChain - HRESULT ISwapChainBackgroundPanelNative::SetSwapChain([In] IDXGISwapChain* swapChain) -
    - - -

    Sets the DirectX swap chain for SwapChainBackgroundPanel.

    -
    - No documentation. -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - hh848327 - HRESULT ISwapChainBackgroundPanelNative::SetSwapChain([In] IDXGISwapChain* swapChain) - ISwapChainBackgroundPanelNative::SetSwapChain -
    - - -

    Provides interoperation between XAML and a DirectX swap chain. Unlike SwapChainBackgroundPanel, a SwapChainPanel can appear at any level in the XAML display tree, and more than 1 can be present in any given tree.

    -
    - -

    This interface provides the native implementation of the Windows::UI::XAML::Control::SwapChainPanel Windows Runtime type. To obtain a reference to , you must cast a SwapChainPanel instance to IInspectable or , and call QueryInterface.

     Microsoft::WRL::ComPtr<>	m_swapChainNative;	
    -            // ...	
    -            IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel);	
    -            panelInspectable->QueryInterface(__uuidof(), (void **)&m_swapChainNative); 
    -
    - - dn302143 - ISwapChainPanelNative - ISwapChainPanelNative -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Sets the DirectX swap chain for SwapChainPanel.

    -
    - - dn302144 - SetSwapChain - SetSwapChain - HRESULT ISwapChainPanelNative::SetSwapChain([In] IDXGISwapChain* swapChain) -
    - - -

    Sets the DirectX swap chain for SwapChainPanel.

    -
    - No documentation. -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - dn302144 - HRESULT ISwapChainPanelNative::SetSwapChain([In] IDXGISwapChain* swapChain) - ISwapChainPanelNative::SetSwapChain -
    - - -

    Provides interoperation between XAML and a DirectX swap chain. Unlike SwapChainBackgroundPanel, a SwapChainPanel can appear at any level in the XAML display tree, and more than 1 can be present in any given tree.

    -
    - -

    This interface provides the native implementation of the Windows::UI::XAML::Control::SwapChainPanel Windows Runtime type. To obtain a reference to , you must cast a SwapChainPanel instance to IInspectable or , and call QueryInterface.

     Microsoft::WRL::ComPtr<>	m_swapChainNative2;	
    -            // ...	
    -            IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel);	
    -            panelInspectable->QueryInterface(__uuidof(), (void **)&m_swapChainNative2); 
    -
    - - dn858172 - ISwapChainPanelNative2 - ISwapChainPanelNative2 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Sets the DirectX swap chain for SwapChainPanel using a handle to the swap chain.

    -
    - -

    SetSwapChain(HANDLE swapChainHandle) allows a swap chain to be rendered by referencing a shared handle to the swap chain. This enables scenarios where a swap chain is created in one process and needs to be passed to another process.

    XAML supports setting a DXGI swap chain as the content of a SwapChainPanel element. Apps accomplish this by querying for the interface from a SwapChainPanel instance and calling SetSwapChain( *swapChain).

    This process works for references to in process swap chains. However, this doesn?t work for VoIP apps, which use a two-process model to enable continuing calls on a background process when a foreground process is suspended or shut down. This two-process implementation requires the ability to pass a shared handle to a swap chain, rather than a reference, created on the background process to the foreground process to be rendered in a XAML SwapChainPanel in the foreground app.

     <!-- XAML markup --> 	
    -            <Page>  <SwapChainPanel x:Name=?captureStreamDisplayPanel? /> 	
    -            </Page>  // Definitions 	
    -            ComPtr<> m_swapChain; 	
    -            HANDLE m_swapChainHandle; 	
    -            ComPtr<> m_d3dDevice; 	
    -            ComPtr<> dxgiAdapter; 	
    -            ComPtr<> dxgiFactory; 	
    -            ComPtr<> dxgiFactoryMedia; 	
    -            ComPtr<> dxgiDevice; 	
    -             swapChainDesc = {0};  // Get DXGI factory (assume standard boilerplate has created D3D11Device) 	
    -            m_d3dDevice.As(&dxgiDevice); 	
    -            dxgiDevice->GetAdapter(&dxgiAdapter); 	
    -            dxgiAdapter->GetParent(__uuidof(), &dxgiFactory);  // Create swap chain and get handle 	
    -            (GENERIC_ALL, nullptr, &m_swapChainHandle); 	
    -            dxgiFactory.As(&dxgiFactoryMedia); 	
    -            dxgiFactoryMedia->CreateSwapChainForCompositionSurfaceHandle(  m_d3dDevice.Get(),  m_swapChainHandle,  &swapChainDesc,  nullptr,  &m_swapChain 	
    -            );  // Set swap chain to display in a SwapChainPanel 	
    -            ComPtr<> panelNative; 	
    -            reinterpret_cast<*>(captureStreamDisplayPanel)->QueryInterface(IID_PPV_ARGS(&panelNative))); 	
    -            panelNative->SetSwapChainHandle(m_swapChainHandle);  
    -
    - - dn858173 - SetSwapChainHandle - SetSwapChainHandle - HRESULT ISwapChainPanelNative2::SetSwapChainHandle([In] void* swapChainHandle) -
    - - -

    Sets the DirectX swap chain for SwapChainPanel using a handle to the swap chain.

    -
    - No documentation. -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - -

    SetSwapChain(HANDLE swapChainHandle) allows a swap chain to be rendered by referencing a shared handle to the swap chain. This enables scenarios where a swap chain is created in one process and needs to be passed to another process.

    XAML supports setting a DXGI swap chain as the content of a SwapChainPanel element. Apps accomplish this by querying for the interface from a SwapChainPanel instance and calling SetSwapChain( *swapChain).

    This process works for references to in process swap chains. However, this doesn?t work for VoIP apps, which use a two-process model to enable continuing calls on a background process when a foreground process is suspended or shut down. This two-process implementation requires the ability to pass a shared handle to a swap chain, rather than a reference, created on the background process to the foreground process to be rendered in a XAML SwapChainPanel in the foreground app.

     <!-- XAML markup --> 	
    -            <Page>  <SwapChainPanel x:Name=?captureStreamDisplayPanel? /> 	
    -            </Page>  // Definitions 	
    -            ComPtr<> m_swapChain; 	
    -            HANDLE m_swapChainHandle; 	
    -            ComPtr<> m_d3dDevice; 	
    -            ComPtr<> dxgiAdapter; 	
    -            ComPtr<> dxgiFactory; 	
    -            ComPtr<> dxgiFactoryMedia; 	
    -            ComPtr<> dxgiDevice; 	
    -             swapChainDesc = {0};  // Get DXGI factory (assume standard boilerplate has created D3D11Device) 	
    -            m_d3dDevice.As(&dxgiDevice); 	
    -            dxgiDevice->GetAdapter(&dxgiAdapter); 	
    -            dxgiAdapter->GetParent(__uuidof(), &dxgiFactory);  // Create swap chain and get handle 	
    -            (GENERIC_ALL, nullptr, &m_swapChainHandle); 	
    -            dxgiFactory.As(&dxgiFactoryMedia); 	
    -            dxgiFactoryMedia->CreateSwapChainForCompositionSurfaceHandle(  m_d3dDevice.Get(),  m_swapChainHandle,  &swapChainDesc,  nullptr,  &m_swapChain 	
    -            );  // Set swap chain to display in a SwapChainPanel 	
    -            ComPtr<> panelNative; 	
    -            reinterpret_cast<*>(captureStreamDisplayPanel)->QueryInterface(IID_PPV_ARGS(&panelNative))); 	
    -            panelNative->SetSwapChainHandle(m_swapChainHandle);  
    -
    - - dn858173 - HRESULT ISwapChainPanelNative2::SetSwapChainHandle([In] void* swapChainHandle) - ISwapChainPanelNative2::SetSwapChainHandle -
    - - -

    Provides an interface for the implementation of drawing behaviors when a VirtualSurfaceImageSource requests an update.

    -
    - -

    This interface is implemented by the developer to provide specific drawing behaviors for updates to a VirtualSurfaceImageSource. Classes that implement this interface are provided to the , which calls the UpdatesNeeded method implementation whenever an update is requested.

    -
    - - hh848336 - IVirtualSurfaceImageSourceNative - IVirtualSurfaceImageSourceNative -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets the boundaries of the visible region of the shared surface.

    -
    - - hh848331 - GetVisibleBounds - GetVisibleBounds - HRESULT IVirtualSurfaceImageSourceNative::GetVisibleBounds([Out] RECT* bounds) -
    - - -

    Invalidates a specific region of the shared surface for drawing.

    -
    -

    The region of the surface to invalidate.

    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - hh848332 - HRESULT IVirtualSurfaceImageSourceNative::Invalidate([In] RECT updateRect) - IVirtualSurfaceImageSourceNative::Invalidate -
    - - -

    Gets the total number of regions of the surface that must be updated.

    -
    -

    Receives the number of regions to update.

    - - hh848329 - HRESULT IVirtualSurfaceImageSourceNative::GetUpdateRectCount([Out] unsigned int* count) - IVirtualSurfaceImageSourceNative::GetUpdateRectCount -
    - - -

    Gets the set of regions that must be updated on the shared surface.

    -
    -

    The number of regions that must be updated. You obtain this by calling GetUpdateRectCount.

    -

    Receives a list of regions that must be updated.

    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - hh848330 - HRESULT IVirtualSurfaceImageSourceNative::GetUpdateRects([Out, Buffer] RECT* updates,[In] unsigned int count) - IVirtualSurfaceImageSourceNative::GetUpdateRects -
    - - -

    Gets the boundaries of the visible region of the shared surface.

    -
    -

    Receives a rectangle that specifies the visible region of the shared surface.

    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - hh848331 - HRESULT IVirtualSurfaceImageSourceNative::GetVisibleBounds([Out] RECT* bounds) - IVirtualSurfaceImageSourceNative::GetVisibleBounds -
    - - -

    Registers for the callback that will perform the drawing when an update to the shared surface is requested.

    -
    -

    Pointer to an implementation of .

    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - hh848334 - HRESULT IVirtualSurfaceImageSourceNative::RegisterForUpdatesNeeded([In, Optional] IVirtualSurfaceUpdatesCallbackNative* callback) - IVirtualSurfaceImageSourceNative::RegisterForUpdatesNeeded -
    - - -

    Resizes the surface.

    -
    -

    The updated width of the surface.

    -

    The updated height of the surface.

    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - - hh848335 - HRESULT IVirtualSurfaceImageSourceNative::Resize([In] int newWidth,[In] int newHeight) - IVirtualSurfaceImageSourceNative::Resize -
    - - - Gets the set of regions that must be updated on the shared surface. - - - - - Event fired when an update is needed. Use to get the region to update. - - - - -

    Performs the drawing behaviors when an update to VirtualSurfaceImageSource is requested.

    -
    - -

    This method is implemented by the developer.

    -
    - - hh848337 - IVirtualSurfaceUpdatesCallbackNative - IVirtualSurfaceUpdatesCallbackNative -
    - - - Callback method for IVirtualSurfaceUpdatesCallbackNative - - HRESULT IVirtualSurfaceUpdatesCallbackNative::UpdatesNeeded() - - - -

    Performs the drawing behaviors when an update to VirtualSurfaceImageSource is requested.

    -
    - -

    This method is implemented by the developer.

    -
    - - hh848337 - IVirtualSurfaceUpdatesCallbackNative - IVirtualSurfaceUpdatesCallbackNative -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Performs the drawing behaviors when an update to VirtualSurfaceImageSource is requested.

    -
    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - -

    This method is implemented by the developer.

    -
    - - hh848337 - HRESULT IVirtualSurfaceUpdatesCallbackNative::UpdatesNeeded() - IVirtualSurfaceUpdatesCallbackNative::UpdatesNeeded -
    - - -

    Represents a keyed mutex, which allows exclusive access to a shared resource that is used by multiple devices.

    -
    - -

    The is required to create a resource capable of supporting the interface.

    An should be retrieved for each device sharing a resource. In Direct3D 10.1, such a resource that is shared between two or more devices is created with the D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX flag. In Direct3D 11, such a resource that is shared between two or more devices is created with the flag.

    For information about creating a keyed mutex, see the method.

    -
    - - ff471338 - IDXGIKeyedMutex - IDXGIKeyedMutex -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Using a key, acquires exclusive rendering access to a shared resource.

    -
    -

    A value that indicates which device to give access to. This method will succeed when the device that currently owns the surface calls the method using the same value. This value can be any UINT64 value.

    -

    The time-out interval, in milliseconds. This method will return if the interval elapses, and the keyed mutex has not been released using the specified Key. If this value is set to zero, the AcquireSync method will test to see if the keyed mutex has been released and returns immediately. If this value is set to INFINITE, the time-out interval will never elapse.

    -

    Return if successful.

    If the owning device attempted to create another keyed mutex on the same shared resource, AcquireSync returns E_FAIL.

    AcquireSync can also return the following DWORD constants. Therefore, you should explicitly check for these constants. If you only use the SUCCEEDED macro on the return value to determine if AcquireSync succeeded, you will not catch these constants.

    • WAIT_ABANDONED - The shared surface and keyed mutex are no longer in a consistent state. If AcquireSync returns this value, you should release and recreate both the keyed mutex and the shared surface.
    • WAIT_TIMEOUT - The time-out interval elapsed before the specified key was released.
    - -

    The AcquireSync method creates a lock to a surface that is shared between multiple devices, allowing only one device to render to a surface at a time. This method uses a key to determine which device currently has exclusive access to the surface.

    When a surface is created using the D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX value of the D3D10_RESOURCE_MISC_FLAG enumeration, you must call the AcquireSync method before rendering to the surface. You must call the ReleaseSync method when you are done rendering to a surface.

    To acquire a reference to the keyed mutex object of a shared resource, call the QueryInterface method of the resource and pass in the UUID of the interface. For more information about acquiring this reference, see the following code example.

    The AcquireSync method uses the key as follows, depending on the state of the surface:

    • On initial creation, the surface is unowned and any device can call the AcquireSync method to gain access. For an unowned device, only a key of 0 will succeed. Calling the AcquireSync method for any other key will stall the calling CPU thread.
    • If the surface is owned by a device when you call the AcquireSync method, the CPU thread that called the AcquireSync method will stall until the owning device calls the ReleaseSync method using the same Key.
    • If the surface is unowned when you call the AcquireSync method (for example, the last owning device has already called the ReleaseSync method), the AcquireSync method will succeed if you specify the same key that was specified when the ReleaseSync method was last called. Calling the AcquireSync method using any other key will cause a stall.
    • When the owning device calls the ReleaseSync method with a particular key, and more than one device is waiting after calling the AcquireSync method using the same key, any one of the waiting devices could be woken up first. The order in which devices are woken up is undefined.
    • A keyed mutex does not support recursive calls to the AcquireSync method.
    -
    - - ff471339 - HRESULT IDXGIKeyedMutex::AcquireSync([In] unsigned longlong Key,[In] unsigned int dwMilliseconds) - IDXGIKeyedMutex::AcquireSync -
    - - -

    Using a key, releases exclusive rendering access to a shared resource.

    -
    -

    A value that indicates which device to give access to. This method succeeds when the device that currently owns the surface calls the ReleaseSync method using the same value. This value can be any UINT64 value.

    -

    Returns if successful.

    If the device attempted to release a keyed mutex that is not valid or owned by the device, ReleaseSync returns E_FAIL.

    - -

    The ReleaseSync method releases a lock to a surface that is shared between multiple devices. This method uses a key to determine which device currently has exclusive access to the surface.

    When a surface is created using the D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX value of the D3D10_RESOURCE_MISC_FLAG enumeration, you must call the method before rendering to the surface. You must call the ReleaseSync method when you are done rendering to a surface.

    After you call the ReleaseSync method, the shared resource is unset from the rendering pipeline.

    To acquire a reference to the keyed mutex object of a shared resource, call the QueryInterface method of the resource and pass in the UUID of the interface. For more information about acquiring this reference, see the following code example.

    -
    - - ff471340 - HRESULT IDXGIKeyedMutex::ReleaseSync([In] unsigned longlong Key) - IDXGIKeyedMutex::ReleaseSync -
    - - -

    An interface represents an adapter output (such as a monitor).

    -
    - -

    To see the outputs available, use . To see the specific output that the swap chain will update, use .

    -
    - - bb174546 - IDXGIOutput - IDXGIOutput -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Get a description of the output.

    -
    - -

    On a high DPI desktop, GetDesc returns the visualized screen size unless the app is marked high DPI aware. For info about writing DPI-aware Win32 apps, see High DPI.

    -
    - - bb174548 - GetDesc - GetDesc - HRESULT IDXGIOutput::GetDesc([Out] DXGI_OUTPUT_DESC* pDesc) -
    - - -

    Gets a description of the gamma-control capabilities.

    -
    - -

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    -
    - - bb174553 - GetGammaControlCapabilities - GetGammaControlCapabilities - HRESULT IDXGIOutput::GetGammaControlCapabilities([Out] DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps) -
    - - -

    Gets or sets the gamma control settings.

    -
    - -

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    -
    - - bb174552 - GetGammaControl / SetGammaControl - GetGammaControl - HRESULT IDXGIOutput::GetGammaControl([Out] DXGI_GAMMA_CONTROL* pArray) -
    - - -

    Gets statistics about recently rendered frames.

    -
    - -

    This API is similar to .

    Note??Calling this method is only supported while in full-screen mode.? -
    - - bb174551 - GetFrameStatistics - GetFrameStatistics - HRESULT IDXGIOutput::GetFrameStatistics([Out] DXGI_FRAME_STATISTICS* pStats) -
    - - -

    Get a description of the output.

    -
    -

    A reference to the output description (see ).

    -

    Returns a code that indicates success or failure. if successful, if pDesc is passed in as null.

    - -

    On a high DPI desktop, GetDesc returns the visualized screen size unless the app is marked high DPI aware. For info about writing DPI-aware Win32 apps, see High DPI.

    -
    - - bb174548 - HRESULT IDXGIOutput::GetDesc([Out] DXGI_OUTPUT_DESC* pDesc) - IDXGIOutput::GetDesc -
    - - -

    [Starting with Direct3D 11.1, we recommend not to use GetDisplayModeList anymore to retrieve the matching display mode. Instead, use , which supports stereo display mode.]

    Gets the display modes that match the requested format and other input options.

    -
    - No documentation. - No documentation. - No documentation. - No documentation. -

    Returns one of the following DXGI_ERROR. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case is returned (if there is not enough room for all the display modes). If GetDisplayModeList is called from a Remote Desktop Services session (formerly Terminal Services session), is returned.

    - -

    In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this API to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).

    As shown, this API is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.

     UINT num = 0;	
    -             format = ;	
    -            UINT flags         = ; pOutput->GetDisplayModeList( format, flags, &num, 0); ...  * pDescs = new [num];	
    -            pOutput->GetDisplayModeList( format, flags, &num, pDescs); 
    -
    - - bb174549 - HRESULT IDXGIOutput::GetDisplayModeList([In] DXGI_FORMAT EnumFormat,[In] unsigned int Flags,[InOut] unsigned int* pNumModes,[Out, Buffer, Optional] DXGI_MODE_DESC* pDesc) - IDXGIOutput::GetDisplayModeList -
    - - -

    [Starting with Direct3D 11.1, we recommend not to use FindClosestMatchingMode anymore to find the display mode that most closely matches the requested display mode. Instead, use , which supports stereo display mode.]

    Finds the display mode that most closely matches the requested display mode.

    -
    - No documentation. - No documentation. - No documentation. -

    Returns one of the following DXGI_ERROR.

    - -

    FindClosestMatchingMode behaves similarly to the except FindClosestMatchingMode considers only the mono display modes. considers only stereo modes if you set the Stereo member in the structure that pModeToMatch points to, and considers only mono modes if Stereo is not set.

    returns a matched display-mode set with only stereo modes or only mono modes. - FindClosestMatchingMode behaves as though you specified the input mode as mono.

    -
    - - bb174547 - HRESULT IDXGIOutput::FindClosestMatchingMode([In] const DXGI_MODE_DESC* pModeToMatch,[Out] DXGI_MODE_DESC* pClosestMatch,[In, Optional] IUnknown* pConcernedDevice) - IDXGIOutput::FindClosestMatchingMode -
    - - -

    Halt a thread until the next vertical blank occurs.

    -
    -

    Returns one of the following DXGI_ERROR.

    - -

    A vertical blank occurs when the raster moves from the lower right corner to the upper left corner to begin drawing the next frame.

    -
    - - bb174559 - HRESULT IDXGIOutput::WaitForVBlank() - IDXGIOutput::WaitForVBlank -
    - - -

    Takes ownership of an output.

    -
    -

    A reference to the interface of a device (such as an ID3D10Device).

    -

    Set to TRUE to enable other threads or applications to take ownership of the device; otherwise, set to .

    -

    Returns one of the DXGI_ERROR values.

    - -

    When you are finished with the output, call .

    TakeOwnership should not be called directly by applications, since results will be unpredictable. It is called implicitly by the DXGI swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.

    -
    - - bb174558 - HRESULT IDXGIOutput::TakeOwnership([In] IUnknown* pDevice,[In] BOOL Exclusive) - IDXGIOutput::TakeOwnership -
    - - -

    Releases ownership of the output.

    -
    - -

    If you are not using a swap chain, get access to an output by calling and release it when you are finished by calling . An application that uses a swap chain will typically not call either of these methods.

    -
    - - bb174554 - void IDXGIOutput::ReleaseOwnership() - IDXGIOutput::ReleaseOwnership -
    - - -

    Gets a description of the gamma-control capabilities.

    -
    -

    A reference to a description of the gamma-control capabilities (see ).

    -

    Returns one of the DXGI_ERROR values.

    - -

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    -
    - - bb174553 - HRESULT IDXGIOutput::GetGammaControlCapabilities([Out] DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps) - IDXGIOutput::GetGammaControlCapabilities -
    - - -

    Sets the gamma controls.

    -
    -

    A reference to a structure that describes the gamma curve to set.

    -

    Returns one of the DXGI_ERROR values.

    - -

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    -
    - - bb174557 - HRESULT IDXGIOutput::SetGammaControl([In] const DXGI_GAMMA_CONTROL* pArray) - IDXGIOutput::SetGammaControl -
    - - -

    Gets the gamma control settings.

    -
    -

    An array of gamma control settings (see ).

    -

    Returns one of the DXGI_ERROR values.

    - -

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    -
    - - bb174552 - HRESULT IDXGIOutput::GetGammaControl([Out] DXGI_GAMMA_CONTROL* pArray) - IDXGIOutput::GetGammaControl -
    - - -

    Changes the display mode.

    -
    -

    A reference to a surface (see ) used for rendering an image to the screen. The surface must have been created as a back buffer (DXGI_USAGE_BACKBUFFER).

    -

    Returns one of the DXGI_ERROR values.

    - -

    should not be called directly by applications, since results will be unpredictable. It is called implicitly by the DXGI swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.

    This method should only be called between and calls.

    -
    - - bb174556 - HRESULT IDXGIOutput::SetDisplaySurface([In] IDXGISurface* pScanoutSurface) - IDXGIOutput::SetDisplaySurface -
    - - -

    [Starting with Direct3D 11.1, we recommend not to use GetDisplaySurfaceData anymore to retrieve the current display surface. Instead, use , which supports stereo display mode.]

    Gets a copy of the current display surface.

    -
    - No documentation. -

    Returns one of the DXGI_ERROR values.

    - -

    can only be called when an output is in full-screen mode. If the method succeeds, DXGI fills the destination surface.

    Use to determine the size (width and height) of the output when you want to allocate space for the destination surface. This is true regardless of target monitor rotation. A destination surface created by a graphics component (such as Direct3D 10) must be created with CPU-write permission (see D3D10_CPU_ACCESS_WRITE). Other surfaces should be created with CPU read-write permission (see D3D10_CPU_ACCESS_READ_WRITE). This method will modify the surface data to fit the destination surface (stretch, shrink, convert format, rotate). The stretch and shrink is performed with point-sampling.

    -
    - - bb174550 - HRESULT IDXGIOutput::GetDisplaySurfaceData([In] IDXGISurface* pDestination) - IDXGIOutput::GetDisplaySurfaceData -
    - - -

    Gets statistics about recently rendered frames.

    -
    -

    A reference to frame statistics (see ).

    -

    If this function succeeds, it returns . Otherwise, it might return .

    - -

    This API is similar to .

    Note??Calling this method is only supported while in full-screen mode.? -
    - - bb174551 - HRESULT IDXGIOutput::GetFrameStatistics([Out] DXGI_FRAME_STATISTICS* pStats) - IDXGIOutput::GetFrameStatistics -
    - - - Find the display mode that most closely matches the requested display mode. - - - Direct3D devices require UNORM formats. This method finds the closest matching available display mode to the mode specified in pModeToMatch. Similarly ranked fields (i.e. all specified, or all unspecified, etc) are resolved in the following order. ScanlineOrdering Scaling Format Resolution RefreshRate When determining the closest value for a particular field, previously matched fields are used to filter the display mode list choices, and other fields are ignored. For example, when matching Resolution, the display mode list will have already been filtered by a certain ScanlineOrdering, Scaling, and Format, while RefreshRate is ignored. This ordering doesn't define the absolute ordering for every usage scenario of FindClosestMatchingMode, because the application can choose some values initially, effectively changing the order that fields are chosen. Fields of the display mode are matched one at a time, generally in a specified order. If a field is unspecified, FindClosestMatchingMode gravitates toward the values for the desktop related to this output. If this output is not part of the desktop, then the default desktop output is used to find values. If an application uses a fully unspecified display mode, FindClosestMatchingMode will typically return a display mode that matches the desktop settings for this output. Unspecified fields are lower priority than specified fields and will be resolved later than specified fields. - - A reference to the Direct3D device interface. If this parameter is NULL, only modes whose format matches that of pModeToMatch will be returned; otherwise, only those formats that are supported for scan-out by the device are returned. - The desired display mode (see ). Members of DXGI_MODE_DESC can be unspecified indicating no preference for that member. A value of 0 for Width or Height indicates the value is unspecified. If either Width or Height are 0 both must be 0. A numerator and denominator of 0 in RefreshRate indicate it is unspecified. Other members of DXGI_MODE_DESC have enumeration values indicating the member is unspecified. If pConnectedDevice is NULL Format cannot be DXGI_FORMAT_UNKNOWN. - The mode that most closely matches pModeToMatch. - Returns one of the following . - HRESULT IDXGIOutput::FindClosestMatchingMode([In] const DXGI_MODE_DESC* pModeToMatch,[Out] DXGI_MODE_DESC* pClosestMatch,[In, Optional] IUnknown* pConcernedDevice) - - - - Gets the display modes that match the requested format and other input options. - - - In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this API to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor). As shown, this API is designed to be called twice. First to get the number of modes available, and second to return a description of the modes. - UINT num = 0; - DXGI_FORMAT format = DXGI_FORMAT_R32G32B32A32_FLOAT; - UINT flags = DXGI_ENUM_MODES_INTERLACED; pOutput->GetDisplayModeList( format, flags, &num, 0); ... DXGI_MODE_DESC * pDescs = new DXGI_MODE_DESC[num]; - pOutput->GetDisplayModeList( format, flags, &num, pDescs); - - - - The color format (see ). - format for modes to include (see {{DXGI_ENUM_MODES}}). DXGI_ENUM_MODES_SCALING needs to be specified to expose the display modes that require scaling. Centered modes, requiring no scaling and corresponding directly to the display output, are enumerated by default. - Returns a list of display modes (see ); - HRESULT IDXGIOutput::GetDisplayModeList([None] DXGI_FORMAT EnumFormat,[None] int Flags,[InOut] int* pNumModes,[Out, Buffer, Optional] DXGI_MODE_DESC* pDesc) - - - -

    An interface represents an adapter output (such as a monitor).

    -
    - -

    To determine the outputs that are available from the adapter, use . To determine the specific output that the swap chain will update, use . You can then call QueryInterface from any object to obtain an object.

    -
    - - hh404597 - IDXGIOutput1 - IDXGIOutput1 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    [Starting with Direct3D 11.1, we recommend not to use GetDisplayModeList anymore to retrieve the matching display mode. Instead, use , which supports stereo display mode.]

    Gets the display modes that match the requested format and other input options.

    -
    - No documentation. - No documentation. - No documentation. - No documentation. -

    Returns one of the following DXGI_ERROR. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case is returned (if there is not enough room for all the display modes). If GetDisplayModeList is called from a Remote Desktop Services session (formerly Terminal Services session), is returned.

    - -

    In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this API to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).

    As shown, this API is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.

     UINT num = 0;	
    -             format = ;	
    -            UINT flags         = ; pOutput->GetDisplayModeList( format, flags, &num, 0); ...  * pDescs = new [num];	
    -            pOutput->GetDisplayModeList( format, flags, &num, pDescs); 
    -
    - - bb174549 - HRESULT IDXGIOutput1::GetDisplayModeList1([In] DXGI_FORMAT EnumFormat,[In] unsigned int Flags,[InOut] unsigned int* pNumModes,[Out, Buffer, Optional] DXGI_MODE_DESC1* pDesc) - IDXGIOutput1::GetDisplayModeList1 -
    - - -

    Finds the display mode that most closely matches the requested display mode.

    -
    -

    A reference to the structure that describes the display mode to match. Members of can be unspecified, which indicates no preference for that member. A value of 0 for Width or Height indicates that the value is unspecified. If either Width or Height is 0, both must be 0. A numerator and denominator of 0 in RefreshRate indicate it is unspecified. Other members of have enumeration values that indicate that the member is unspecified. If pConcernedDevice is null, the Format member of cannot be .

    -

    A reference to the structure that receives a description of the display mode that most closely matches the display mode described at pModeToMatch.

    -

    A reference to the Direct3D device interface. If this parameter is null, FindClosestMatchingMode1 returns only modes whose format matches that of pModeToMatch; otherwise, FindClosestMatchingMode1 returns only those formats that are supported for scan-out by the device. For info about the formats that are supported for scan-out by the device at each feature level:

    • DXGI Format Support for Direct3D Feature Level 12.1 Hardware
    • DXGI Format Support for Direct3D Feature Level 12.0 Hardware
    • DXGI Format Support for Direct3D Feature Level 11.1 Hardware
    • DXGI Format Support for Direct3D Feature Level 11.0 Hardware
    • Hardware Support for Direct3D 10Level9 Formats
    • Hardware Support for Direct3D 10.1 Formats
    • Hardware Support for Direct3D 10 Formats
    -

    Returns one of the error codes described in the DXGI_ERROR topic.

    - -

    Direct3D devices require UNORM formats.

    FindClosestMatchingMode1 finds the closest matching available display mode to the mode that you specify in pModeToMatch.

    If you set the Stereo member in the structure to which pModeToMatch points to specify a stereo mode as input, FindClosestMatchingMode1 considers only stereo modes. FindClosestMatchingMode1 considers only mono modes if Stereo is not set.

    FindClosestMatchingMode1 resolves similarly ranked members of display modes (that is, all specified, or all unspecified, and so on) in the following order:

    1. ScanlineOrdering
    2. Scaling
    3. Format
    4. Resolution
    5. RefreshRate

    When FindClosestMatchingMode1 determines the closest value for a particular member, it uses previously matched members to filter the display mode list choices, and ignores other members. For example, when FindClosestMatchingMode1 matches Resolution, it already filtered the display mode list by a certain ScanlineOrdering, Scaling, and Format, while it ignores RefreshRate. This ordering doesn't define the absolute ordering for every usage scenario of FindClosestMatchingMode1, because the application can choose some values initially, which effectively changes the order of resolving members.

    FindClosestMatchingMode1 matches members of the display mode one at a time, generally in a specified order.

    If a member is unspecified, FindClosestMatchingMode1 gravitates toward the values for the desktop related to this output. If this output is not part of the desktop, FindClosestMatchingMode1 uses the default desktop output to find values. If an application uses a fully unspecified display mode, FindClosestMatchingMode1 typically returns a display mode that matches the desktop settings for this output. Because unspecified members are lower priority than specified members, FindClosestMatchingMode1 resolves unspecified members later than specified members.

    -
    - - hh404603 - HRESULT IDXGIOutput1::FindClosestMatchingMode1([In] const DXGI_MODE_DESC1* pModeToMatch,[Out] DXGI_MODE_DESC1* pClosestMatch,[In, Optional] IUnknown* pConcernedDevice) - IDXGIOutput1::FindClosestMatchingMode1 -
    - - -

    Copies the display surface (front buffer) to a user-provided resource.

    -
    -

    A reference to a resource interface that represents the resource to which GetDisplaySurfaceData1 copies the display surface.

    -

    Returns one of the error codes described in the DXGI_ERROR topic.

    - -

    GetDisplaySurfaceData1 is similar to except GetDisplaySurfaceData1 takes an and takes an .

    GetDisplaySurfaceData1 returns an error if the input resource is not a 2D texture (represented by the interface) with an array size (ArraySize member of the structure) that is equal to the swap chain buffers.

    The original and the updated GetDisplaySurfaceData1 behave exactly the same. GetDisplaySurfaceData1 was required because textures with an array size equal to 2 (ArraySize = 2) do not implement .

    You can call GetDisplaySurfaceData1 only when an output is in full-screen mode. If GetDisplaySurfaceData1 succeeds, it fills the destination resource.

    Use to determine the size (width and height) of the output when you want to allocate space for the destination resource. This is true regardless of target monitor rotation. A destination resource created by a graphics component (such as Direct3D 11) must be created with CPU write permission (see ). Other surfaces can be created with CPU read-write permission ( | ). GetDisplaySurfaceData1 modifies the surface data to fit the destination resource (stretch, shrink, convert format, rotate). GetDisplaySurfaceData1 performs the stretch and shrink with point sampling.

    -
    - - hh404609 - HRESULT IDXGIOutput1::GetDisplaySurfaceData1([In] IDXGIResource* pDestination) - IDXGIOutput1::GetDisplaySurfaceData1 -
    - - -

    Creates a desktop duplication interface from the interface that represents an adapter output.

    -
    - No documentation. - No documentation. - -

    If an application wants to duplicate the entire desktop, it must create a desktop duplication interface on each active output on the desktop. This interface does not provide an explicit way to synchronize the timing of each output image. Instead, the application must use the time stamp of each output, and then determine how to combine the images.

    For DuplicateOutput to succeed, you must create pDevice from or a later version of a DXGI factory interface that inherits from .

    If the current mode is a stereo mode, the desktop duplication interface provides the image for the left stereo image only.

    By default, only four processes can use a interface at the same time within a single session. A process can have only one desktop duplication interface on a single desktop output; however, that process can have a desktop duplication interface for each output that is part of the desktop.

    For improved performance, consider using DuplicateOutput1.

    -
    - - hh404600 - HRESULT IDXGIOutput1::DuplicateOutput([In] IUnknown* pDevice,[Out] IDXGIOutputDuplication** ppOutputDuplication) - IDXGIOutput1::DuplicateOutput -
    - - -

    [This documentation is preliminary and is subject to change.]

    Applies to: desktop apps | Metro style apps

    Gets the display modes that match the requested format and other input options.

    -
    -

    A -typed value for the color format.

    -

    A combination of DXGI_ENUM_MODES-typed values that are combined by using a bitwise OR operation. The resulting value specifies options for display modes to include. You must specify to expose the display modes that require scaling. Centered modes that require no scaling and correspond directly to the display output are enumerated by default.

    - A list of display modes - -

    GetDisplayModeList1 is updated from GetDisplayModeList to return a list of structures, which are updated mode descriptions. GetDisplayModeList behaves as though it calls GetDisplayModeList1 because GetDisplayModeList can return all of the modes that are specified by DXGI_ENUM_MODES, including stereo mode. However, GetDisplayModeList returns a list of structures, which are the former mode descriptions and do not indicate stereo mode.

    The GetDisplayModeList1 method does not enumerate stereo modes unless you specify the flag in the Flags parameter. If you specify , stereo modes are included in the list of returned modes that the pDesc parameter points to. In other words, the method returns both stereo and mono modes.

    In general, when you switch from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth, and refresh rate of the swap chain. To exercise more control over the display mode, use GetDisplayModeList1 to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).

    The following example code shows that you need to call GetDisplayModeList1 twice. First call GetDisplayModeList1 to get the number of modes available, and second call GetDisplayModeList1 to return a description of the modes.

     UINT num = 0;	
    -             format = ;	
    -            UINT flags         = ; pOutput->GetDisplayModeList1( format, flags, &num, 0); ...  * pDescs = new [num];	
    -            pOutput->GetDisplayModeList1( format, flags, &num, pDescs); 
    -
    - hh404606 - HRESULT IDXGIOutput1::GetDisplayModeList1([In] DXGI_FORMAT EnumFormat,[In] unsigned int Flags,[InOut] unsigned int* pNumModes,[Out, Buffer, Optional] DXGI_MODE_DESC1* pDesc) - IDXGIOutput1::GetDisplayModeList1 -
    - - -

    An interface represents an adapter output (such as a monitor).

    -
    - -

    To see the outputs available, use . To see the specific output that the swap chain will update, use .

    -
    - - bb174546 - IDXGIOutput2 - IDXGIOutput2 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Queries an adapter output for multiplane overlay support. If this API returns ?TRUE?, multiple swap chain composition takes place in a performant manner using overlay hardware. If this API returns false, apps should avoid using foreground swap chains (that is, avoid using swap chains created with the flag).

    -
    -

    TRUE if the output adapter is the primary adapter and it supports multiplane overlays, otherwise returns .

    - -

    See CreateSwapChainForCoreWindow for info on creating a foreground swap chain.

    -
    - - dn280411 - BOOL IDXGIOutput2::SupportsOverlays() - IDXGIOutput2::SupportsOverlays -
    - - -

    [This documentation is preliminary and is subject to change.]

    Queries an adapter output for multiplane overlay support.

    -
    -

    TRUE if the output adapter is the primary adapter and it supports multiplane overlays, otherwise returns .

    - - dn280411 - BOOL IDXGIOutput2::SupportsOverlays() - IDXGIOutput2::SupportsOverlays -
    - - -

    Represents an adapter output (such as a monitor). The interface exposes a method to check for overlay support.

    -
    - - dn903669 - IDXGIOutput3 - IDXGIOutput3 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Checks for overlay support.

    -
    -

    A -typed value for the color format.

    -

    A reference to the Direct3D device interface. CheckOverlaySupport returns only support info about this scan-out device.

    -

    A reference to a variable that receives a combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for overlay support.

    - - dn903670 - HRESULT IDXGIOutput3::CheckOverlaySupport([In] DXGI_FORMAT EnumFormat,[In] IUnknown* pConcernedDevice,[Out] DXGI_OVERLAY_SUPPORT_FLAG* pFlags) - IDXGIOutput3::CheckOverlaySupport -
    - - -

    Represents an adapter output (such as a monitor). The interface exposes a method to check for overlay color space support.

    -
    - - dn903671 - IDXGIOutput4 - IDXGIOutput4 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Checks for overlay color space support.

    -
    -

    A -typed value for the color format.

    -

    A -typed value that specifies color space type to check overlay support for.

    -

    A reference to the Direct3D device interface. CheckOverlayColorSpaceSupport returns only support info about this scan-out device.

    -

    A reference to a variable that receives a combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for overlay color space support.

    - - dn903672 - HRESULT IDXGIOutput4::CheckOverlayColorSpaceSupport([In] DXGI_FORMAT Format,[In] DXGI_COLOR_SPACE_TYPE ColorSpace,[In] IUnknown* pConcernedDevice,[Out] DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG* pFlags) - IDXGIOutput4::CheckOverlayColorSpaceSupport -
    - - -

    An interface represents an adapter output (such as a monitor).

    -
    - -

    To see the outputs available, use . To see the specific output that the swap chain will update, use .

    -
    - - bb174546 - IDXGIOutput5 - IDXGIOutput5 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Allows specifying a list of supported formats for fullscreen surfaces that can be returned by the object.

    -
    - No documentation. - No documentation. - No documentation. - No documentation. - No documentation. - -

    This method allows directly receiving the original back buffer format used by a running fullscreen application. For comparison, using the original DuplicateOutput function always converts the fullscreen surface to a 32-bit BGRA format. In cases where the current fullscreen application is using a different buffer format, a conversion to 32-bit BGRA incurs a performance penalty. Besides the performance benefit of being able to skip format conversion, using DuplicateOutput1 also allows receiving the full gamut of colors in cases where a high-color format (such as R10G10B10A2) is being presented.

    The pSupportedFormats array should only contain display scan-out formats. See Format Support for Direct3D Feature Level 11.0 Hardware for required scan-out formats at each feature level. If the current fullscreen buffer format is not contained in the pSupportedFormats array, DXGI will pick one of the supplied formats and convert the fullscreen buffer to that format before returning from . The list of supported formats should always contain , as this is the most common format for the desktop. -

    -
    - - mt679496 - HRESULT IDXGIOutput5::DuplicateOutput1([In] IUnknown* pDevice,[In] unsigned int Flags,[In] unsigned int SupportedFormatsCount,[In, Buffer] const DXGI_FORMAT* pSupportedFormats,[Out] IDXGIOutputDuplication** ppOutputDuplication) - IDXGIOutput5::DuplicateOutput1 -
    - - -

    An interface represents an adapter output (such as a monitor).

    -
    - -

    To see the outputs available, use . To see the specific output that the swap chain will update, use .

    -
    - - bb174546 - IDXGIOutput6 - IDXGIOutput6 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - - No documentation. - - - GetDesc1 - GetDesc1 - HRESULT IDXGIOutput6::GetDesc1([Out] DXGI_OUTPUT_DESC1* pDesc) - - - - No documentation. - - No documentation. - No documentation. - - HRESULT IDXGIOutput6::GetDesc1([Out] DXGI_OUTPUT_DESC1* pDesc) - IDXGIOutput6::GetDesc1 - - - - No documentation. - - No documentation. - No documentation. - - HRESULT IDXGIOutput6::CheckHardwareCompositionSupport([Out] unsigned int* pFlags) - IDXGIOutput6::CheckHardwareCompositionSupport - - - -

    The interface accesses and manipulates the duplicated desktop image.

    -
    - -

    A collaboration application can use to access the desktop image. is supported in Desktop Window Manager (DWM) on non-8bpp DirectX full-screen modes and non-8bpp OpenGL full-screen modes. 16-bit or 32-bit GDI non-DWM desktop modes are not supported.

    An application can use on a separate thread to receive the desktop images and to feed them into their specific image-processing pipeline. The application uses to perform the following operations:

    1. Acquire the next desktop image.
    2. Retrieve the information that describes the image.
    3. Perform an operation on the image. This operation can be as simple as copying the image to a staging buffer so that the application can read the pixel data on the image. The application reads the pixel data after the application calls . Alternatively, this operation can be more complex. For example, the application can run some pixel shaders on the updated regions of the image to encode those regions for transmission to a client.
    4. After the application finishes processing each desktop image, it releases the image, loops to step 1, and repeats the steps. The application repeats these steps until it is finished processing desktop images.

    The following components of the operating system can generate the desktop image:

    • The DWM by composing the desktop image
    • A full-screen DirectX or OpenGL application
    • An application by switching to a separate desktop, for example, the secure desktop that is used to display the login screen

    All current interfaces become invalid when the operating system switches to a different component that produces the desktop image or when a mode change occurs. In these situations, the application must destroy its current interface and create a new interface.

    Examples of situations in which becomes invalid are:

    • Desktop switch
    • Mode change
    • Switch from DWM on, DWM off, or other full-screen application

    In these situations, the application must release the interface and must create a new interface for the new content. If the application does not have the appropriate privilege to the new desktop image, its call to the method fails.

    While the application processes each desktop image, the operating system accumulates all the desktop image updates into a single update. For more information about desktop updates, see Updating the desktop image data.

    The desktop image is always in the format.

    The interface does not exist for Windows Store apps.

    -
    - - hh404611 - IDXGIOutputDuplication - IDXGIOutputDuplication -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Retrieves a description of a duplicated output. This description specifies the dimensions of the surface that contains the desktop image.

    -
    - -

    After an application creates an interface, it calls GetDesc to retrieve the dimensions of the surface that contains the desktop image. The format of the desktop image is always .

    -
    - - hh404618 - GetDesc - GetDesc - void IDXGIOutputDuplication::GetDesc([Out] DXGI_OUTDUPL_DESC* pDesc) -
    - - -

    Retrieves a description of a duplicated output. This description specifies the dimensions of the surface that contains the desktop image.

    -
    -

    A reference to a structure that describes the duplicated output. This parameter must not be null.

    - -

    After an application creates an interface, it calls GetDesc to retrieve the dimensions of the surface that contains the desktop image. The format of the desktop image is always .

    -
    - - hh404618 - void IDXGIOutputDuplication::GetDesc([Out] DXGI_OUTDUPL_DESC* pDesc) - IDXGIOutputDuplication::GetDesc -
    - - -

    Indicates that the application is ready to process the next desktop image.

    -
    -

    The time-out interval, in milliseconds. This interval specifies the amount of time that this method waits for a new frame before it returns to the caller. This method returns if the interval elapses, and a new desktop image is not available.

    For more information about the time-out interval, see Remarks.

    -

    A reference to a memory location that receives the structure that describes timing and presentation statistics for a frame.

    -

    A reference to a variable that receives the interface of the surface that contains the desktop bitmap.

    -

    AcquireNextFrame returns:

    • if it successfully received the next desktop image.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the time-out interval elapsed before the next desktop frame was available.
    • if the application called AcquireNextFrame without releasing the previous frame.
    • E_INVALIDARG if one of the parameters to AcquireNextFrame is incorrect; for example, if pFrameInfo is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - -

    When AcquireNextFrame returns successfully, the calling application can access the desktop image that AcquireNextFrame returns in the variable at ppDesktopResource. - If the caller specifies a zero time-out interval in the TimeoutInMilliseconds parameter, AcquireNextFrame verifies whether there is a new desktop image available, returns immediately, and indicates its outcome with the return value. If the caller specifies an INFINITE time-out interval in the TimeoutInMilliseconds parameter, the time-out interval never elapses.

    Note??You cannot cancel the wait that you specified in the TimeoutInMilliseconds parameter. Therefore, if you must periodically check for other conditions (for example, a terminate signal), you should specify a non-INFINITE time-out interval. After the time-out interval elapses, you can check for these other conditions and then call AcquireNextFrame again to wait for the next frame.?

    AcquireNextFrame acquires a new desktop frame when the operating system either updates the desktop bitmap image or changes the shape or position of a hardware reference. The new frame that AcquireNextFrame acquires might have only the desktop image updated, only the reference shape or position updated, or both.

    -
    - - hh404615 - HRESULT IDXGIOutputDuplication::AcquireNextFrame([In] unsigned int TimeoutInMilliseconds,[Out] DXGI_OUTDUPL_FRAME_INFO* pFrameInfo,[Out] IDXGIResource** ppDesktopResource) - IDXGIOutputDuplication::AcquireNextFrame -
    - - -

    Gets information about dirty rectangles for the current desktop frame.

    -
    -

    The size in bytes of the buffer that the caller passed to the pDirtyRectsBuffer parameter.

    -

    A reference to an array of structures that identifies the dirty rectangle regions for the desktop frame.

    -

    Pointer to a variable that receives the number of bytes that GetFrameDirtyRects needs to store information about dirty regions in the buffer at pDirtyRectsBuffer.

    For more information about returning the required buffer size, see Remarks.

    -

    GetFrameDirtyRects returns:

    • if it successfully retrieved information about dirty rectangles.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the buffer that the calling application provided was not big enough.
    • if the application called GetFrameDirtyRects without owning the desktop image.
    • E_INVALIDARG if one of the parameters to GetFrameDirtyRects is incorrect; for example, if pDirtyRectsBuffer is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - -

    GetFrameDirtyRects stores a size value in the variable at pDirtyRectsBufferSizeRequired. This value specifies the number of bytes that GetFrameDirtyRects needs to store information about dirty regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to pDirtyRectsBuffer:

    • GetFrameDirtyRects fails with because the buffer is not big enough.
    • GetFrameDirtyRects supplies a buffer that is bigger than necessary. The size value returned at pDirtyRectsBufferSizeRequired informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the DirtyRectsBufferSize parameter.

    The caller can also use the value returned at pDirtyRectsBufferSizeRequired to determine the number of s returned in the pDirtyRectsBuffer array.

    The buffer contains the list of dirty s for the current frame.

    Note??To produce a visually accurate copy of the desktop, an application must first process all move s before it processes dirty s.? -
    - - hh404619 - HRESULT IDXGIOutputDuplication::GetFrameDirtyRects([In] unsigned int DirtyRectsBufferSize,[Out, Buffer] RECT* pDirtyRectsBuffer,[Out] unsigned int* pDirtyRectsBufferSizeRequired) - IDXGIOutputDuplication::GetFrameDirtyRects -
    - - -

    Gets information about the moved rectangles for the current desktop frame.

    -
    -

    The size in bytes of the buffer that the caller passed to the pMoveRectBuffer parameter.

    -

    A reference to an array of structures that identifies the moved rectangle regions for the desktop frame.

    -

    Pointer to a variable that receives the number of bytes that GetFrameMoveRects needs to store information about moved regions in the buffer at pMoveRectBuffer.

    For more information about returning the required buffer size, see Remarks.

    -

    GetFrameMoveRects returns:

    • if it successfully retrieved information about moved rectangles.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the buffer that the calling application provided is not big enough.
    • if the application called GetFrameMoveRects without owning the desktop image.
    • E_INVALIDARG if one of the parameters to GetFrameMoveRects is incorrect; for example, if pMoveRectBuffer is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - -

    GetFrameMoveRects stores a size value in the variable at pMoveRectsBufferSizeRequired. This value specifies the number of bytes that GetFrameMoveRects needs to store information about moved regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to pMoveRectBuffer:

    • GetFrameMoveRects fails with because the buffer is not big enough.
    • GetFrameMoveRects supplies a buffer that is bigger than necessary. The size value returned at pMoveRectsBufferSizeRequired informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the MoveRectsBufferSize parameter.

    The caller can also use the value returned at pMoveRectsBufferSizeRequired to determine the number of structures returned.

    The buffer contains the list of move RECTs for the current frame.

    Note??To produce a visually accurate copy of the desktop, an application must first process all move RECTs before it processes dirty RECTs.? -
    - - hh404620 - HRESULT IDXGIOutputDuplication::GetFrameMoveRects([In] unsigned int MoveRectsBufferSize,[Out, Buffer] DXGI_OUTDUPL_MOVE_RECT* pMoveRectBuffer,[Out] unsigned int* pMoveRectsBufferSizeRequired) - IDXGIOutputDuplication::GetFrameMoveRects -
    - - -

    Gets information about the new reference shape for the current desktop frame.

    -
    -

    The size in bytes of the buffer that the caller passed to the pPointerShapeBuffer parameter.

    -

    A reference to a buffer to which GetFramePointerShape copies and returns pixel data for the new reference shape.

    -

    Pointer to a variable that receives the number of bytes that GetFramePointerShape needs to store the new reference shape pixel data in the buffer at pPointerShapeBuffer.

    For more information about returning the required buffer size, see Remarks.

    -

    Pointer to a structure that receives the reference shape information.

    -

    GetFramePointerShape returns:

    • if it successfully retrieved information about the new reference shape.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the buffer that the calling application provided was not big enough.
    • if the application called GetFramePointerShape without owning the desktop image.
    • E_INVALIDARG if one of the parameters to GetFramePointerShape is incorrect; for example, if pPointerShapeInfo is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - -

    GetFramePointerShape stores a size value in the variable at pPointerShapeBufferSizeRequired. This value specifies the number of bytes that pPointerShapeBufferSizeRequired needs to store the new reference shape pixel data. You can use the value in the following situations to determine the amount of memory to allocate for future buffers that you pass to pPointerShapeBuffer:

    • GetFramePointerShape fails with because the buffer is not big enough.
    • GetFramePointerShape supplies a bigger than necessary buffer. The size value returned at pPointerShapeBufferSizeRequired informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the PointerShapeBufferSize parameter.

    The pPointerShapeInfo parameter describes the new reference shape.

    -
    - - hh404621 - HRESULT IDXGIOutputDuplication::GetFramePointerShape([In] unsigned int PointerShapeBufferSize,[Out, Buffer] void* pPointerShapeBuffer,[Out] unsigned int* pPointerShapeBufferSizeRequired,[Out] DXGI_OUTDUPL_POINTER_SHAPE_INFO* pPointerShapeInfo) - IDXGIOutputDuplication::GetFramePointerShape -
    - - -

    Provides the CPU with efficient access to a desktop image if that desktop image is already in system memory.

    -
    -

    A reference to a structure that receives the surface data that the CPU needs to directly access the surface data.

    -

    MapDesktopSurface returns:

    • if it successfully retrieved the surface data.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the application already has an outstanding map on the desktop image. The application must call UnMapDesktopSurface before it calls MapDesktopSurface again. is also returned if the application did not own the desktop image when it called MapDesktopSurface.
    • if the desktop image is not in system memory. In this situation, the application must first transfer the image to a staging surface and then lock the image by calling the method.
    • E_INVALIDARG if the pLockedRect parameter is incorrect; for example, if pLockedRect is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - -

    You can successfully call MapDesktopSurface if the DesktopImageInSystemMemory member of the structure is set to TRUE. If DesktopImageInSystemMemory is , MapDesktopSurface returns . Call to retrieve the structure.

    -
    - - hh404622 - HRESULT IDXGIOutputDuplication::MapDesktopSurface([Out] DXGI_MAPPED_RECT* pLockedRect) - IDXGIOutputDuplication::MapDesktopSurface -
    - - -

    Invalidates the reference to the desktop image that was retrieved by using .

    -
    -

    UnMapDesktopSurface returns:

    • if it successfully completed.
    • if the application did not map the desktop surface by calling .
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - - hh404624 - HRESULT IDXGIOutputDuplication::UnMapDesktopSurface() - IDXGIOutputDuplication::UnMapDesktopSurface -
    - - -

    Indicates that the application finished processing the frame.

    -
    -

    ReleaseFrame returns:

    • if it successfully completed.
    • if the application already released the frame.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - -

    The application must release the frame before it acquires the next frame. After the frame is released, the surface that contains the desktop bitmap becomes invalid; you will not be able to use the surface in a DirectX graphics operation.

    For performance reasons, we recommend that you release the frame just before you call the method to acquire the next frame. When the client does not own the frame, the operating system copies all desktop updates to the surface. This can result in wasted GPU cycles if the operating system updates the same region for each frame that occurs. When the client acquires the frame, the client is aware of only the final update to this region; therefore, any overlapping updates during previous frames are wasted. When the client acquires a frame, the client owns the surface; therefore, the operating system can track only the updated regions and cannot copy desktop updates to the surface. Because of this behavior, we recommend that you minimize the time between the call to release the current frame and the call to acquire the next frame.

    -
    - - hh404623 - HRESULT IDXGIOutputDuplication::ReleaseFrame() - IDXGIOutputDuplication::ReleaseFrame -
    - - -

    Set the priority for evicting the resource from memory.

    -
    - -

    The eviction priority is a memory-management variable that is used by DXGI for determining how to populate overcommitted memory.

    You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.

    -
    - - bb174564 - IDXGIResource - IDXGIResource -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    [Starting with Direct3D 11.1, we recommend not to use GetSharedHandle anymore to retrieve the handle to a shared resource. Instead, use to get a handle for sharing. To use , you must create the resource as shared and specify that it uses NT handles (that is, you set the flag). We also recommend that you create shared resources that use NT handles so you can use CloseHandle, DuplicateHandle, and so on on those shared resources.]

    Gets the handle to a shared resource.

    -
    - -

    GetSharedHandle returns a handle for the resource that you created as shared (that is, you set the with or without the flag). You can pass this handle to the method to give another device access to the shared resource. You can also marshal this handle to another process to share a resource with a device in another process. However, this handle is not an NT handle. Therefore, don't use the handle with CloseHandle, DuplicateHandle, and so on.

    The creator of a shared resource must not destroy the resource until all intended entities have opened the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device.

    GetSharedHandle can also return handles for resources that were passed into to open those resources.

    GetSharedHandle fails if the resource to which it wants to get a handle is not shared.

    -
    - - bb174562 - GetSharedHandle - GetSharedHandle - HRESULT IDXGIResource::GetSharedHandle([Out] void** pSharedHandle) -
    - - -

    Get or sets the eviction priority.

    -
    - -

    The eviction priority is a memory-management variable that is used by DXGI to determine how to manage overcommitted memory.

    Priority levels other than the defined values are used when appropriate. For example, a resource with a priority level of 0x78000001 indicates that the resource is slightly above normal.

    -
    - - bb174561 - GetEvictionPriority / SetEvictionPriority - GetEvictionPriority - HRESULT IDXGIResource::GetEvictionPriority([Out] unsigned int* pEvictionPriority) -
    - - -

    [Starting with Direct3D 11.1, we recommend not to use GetSharedHandle anymore to retrieve the handle to a shared resource. Instead, use to get a handle for sharing. To use , you must create the resource as shared and specify that it uses NT handles (that is, you set the flag). We also recommend that you create shared resources that use NT handles so you can use CloseHandle, DuplicateHandle, and so on on those shared resources.]

    Gets the handle to a shared resource.

    -
    - No documentation. -

    Returns one of the DXGI_ERROR values.

    - -

    GetSharedHandle returns a handle for the resource that you created as shared (that is, you set the with or without the flag). You can pass this handle to the method to give another device access to the shared resource. You can also marshal this handle to another process to share a resource with a device in another process. However, this handle is not an NT handle. Therefore, don't use the handle with CloseHandle, DuplicateHandle, and so on.

    The creator of a shared resource must not destroy the resource until all intended entities have opened the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device.

    GetSharedHandle can also return handles for resources that were passed into to open those resources.

    GetSharedHandle fails if the resource to which it wants to get a handle is not shared.

    -
    - - bb174562 - HRESULT IDXGIResource::GetSharedHandle([Out] void** pSharedHandle) - IDXGIResource::GetSharedHandle -
    - - -

    Get the expected resource usage.

    -
    -

    A reference to a usage flag (see DXGI_USAGE). For Direct3D 10, a surface can be used as a shader input or a render-target output.

    -

    Returns one of the following DXGI_ERROR.

    - - bb174563 - HRESULT IDXGIResource::GetUsage([In] unsigned int* pUsage) - IDXGIResource::GetUsage -
    - - -

    Set the priority for evicting the resource from memory.

    -
    -

    The priority is one of the following values:

    ValueMeaning
    (0x28000000)

    The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.

    (0x50000000)

    The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a GPU can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.

    (0x78000000)

    The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource.

    (0xa0000000)

    The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.

    (0xc8000000)

    The resource is evicted from memory only if there is no other way of resolving the memory requirement.

    ?

    -

    Returns one of the following DXGI_ERROR.

    - -

    The eviction priority is a memory-management variable that is used by DXGI for determining how to populate overcommitted memory.

    You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.

    -
    - - bb174564 - HRESULT IDXGIResource::SetEvictionPriority([In] unsigned int EvictionPriority) - IDXGIResource::SetEvictionPriority -
    - - -

    Get the eviction priority.

    -
    -

    A reference to the eviction priority, which determines when a resource can be evicted from memory.

    The following defined values are possible.

    ValueMeaning
    (0x28000000)

    The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.

    (0x50000000)

    The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a GPU can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.

    (0x78000000)

    The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource.

    (0xa0000000)

    The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.

    (0xc8000000)

    The resource is evicted from memory only if there is no other way of resolving the memory requirement.

    ?

    -

    Returns one of the following DXGI_ERROR.

    - -

    The eviction priority is a memory-management variable that is used by DXGI to determine how to manage overcommitted memory.

    Priority levels other than the defined values are used when appropriate. For example, a resource with a priority level of 0x78000001 indicates that the resource is slightly above normal.

    -
    - - bb174561 - HRESULT IDXGIResource::GetEvictionPriority([Out] unsigned int* pEvictionPriority) - IDXGIResource::GetEvictionPriority -
    - - -

    An interface extends the interface by adding support for creating a subresource surface object and for creating a handle to a shared resource.

    -
    - -

    To determine the type of memory a resource is currently located in, use . To share resources between processes, use . For information about how to share resources between multiple Windows graphics APIs, including Direct3D 11, Direct2D, Direct3D 10, and Direct3D 9Ex, see Surface Sharing Between Windows Graphics APIs.

    You can retrieve the interface from any video memory resource that you create from a Direct3D 10 and later function. Any Direct3D object that supports ID3D10Resource or also supports . For example, the Direct3D 2D texture object that you create from supports . You can call QueryInterface on the 2D texture object () to retrieve the interface. For example, to retrieve the interface from the 2D texture object, use the following code.

     * pDXGIResource;	
    -            hr = g_pd3dTexture2D->QueryInterface(__uuidof(), (void **)&pDXGIResource);

    Windows?Phone?8: This API is supported.

    -
    - - hh404625 - IDXGIResource1 - IDXGIResource1 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Creates a subresource surface object.

    -
    -

    The index of the subresource surface object to enumerate.

    -

    The address of a reference to a interface that represents the created subresource surface object at the position specified by the index parameter.

    -

    Returns if successful; otherwise, returns one of the following values:

    • if the index is out of range or if the subresource is not a valid surface.
    • E_OUTOFMEMORY if insufficient memory is available to create the subresource surface object.

    A subresource is a valid surface if the original resource would have been a valid surface had its array size been equal to 1.

    - -

    Subresource surface objects implement the interface, which inherits from and indirectly . Therefore, the GDI-interoperable methods of work if the original resource interface object was created with the GDI-interoperable flag ().

    CreateSubresourceSurface creates a subresource surface that is based on the resource interface on which CreateSubresourceSurface is called. For example, if the original resource interface object is a 2D texture, the created subresource surface is also a 2D texture.

    You can use CreateSubresourceSurface to create parts of a stereo resource so you can use Direct2D on either the left or right part of the stereo resource.

    -
    - - hh404627 - HRESULT IDXGIResource1::CreateSubresourceSurface([In] unsigned int index,[Out, Fast] IDXGISurface2** ppSurface) - IDXGIResource1::CreateSubresourceSurface -
    - - -

    Creates a handle to a shared resource. You can then use the returned handle with multiple Direct3D devices.

    -
    -

    A reference to a structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether child processes can inherit the returned handle.

    Set this parameter to null if you want child processes that the application might create to not inherit the handle returned by CreateSharedHandle, and if you want the resource that is associated with the returned handle to get a default security descriptor.

    The lpSecurityDescriptor member of the structure specifies a SECURITY_DESCRIPTOR for the resource. Set this member to null if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The ACLs in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights.

    -

    The requested access rights to the resource. In addition to the generic access rights, DXGI defines the following values:

    • ( 0x80000000L ) - specifies read access to the resource.
    • ( 1 ) - specifies write access to the resource.

    You can combine these values by using a bitwise OR operation.

    -

    The name of the resource to share. The name is limited to MAX_PATH characters. Name comparison is case sensitive. You will need the resource name if you call the method to access the shared resource by name. If you instead call the method to access the shared resource by handle, set this parameter to null.

    If lpName matches the name of an existing resource, CreateSharedHandle fails with . This occurs because these objects share the same namespace.

    The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.

    The object can be created in a private namespace. For more information, see Object Namespaces.

    -

    A reference to a variable that receives the NT HANDLE value to the resource to share. You can use this handle in calls to access the resource.

    - -

    CreateSharedHandle only returns the NT handle when you created the resource as shared and specified that it uses NT handles (that is, you set the and flags). If you created the resource as shared and specified that it uses NT handles, you must use CreateSharedHandle to get a handle for sharing. In this situation, you can't use the method because it will fail.

    You can pass the handle that CreateSharedHandle returns in a call to the method to give a device access to a shared resource that you created on a different device.

    Because the handle that CreateSharedHandle returns is an NT handle, you can use the handle with CloseHandle, DuplicateHandle, and so on. You can call CreateSharedHandle only once for a shared resource; later calls fail. If you need more handles to the same shared resource, call DuplicateHandle. When you no longer need the shared resource handle, call CloseHandle to close the handle, in order to avoid memory leaks.

    If you pass a name for the resource to lpName when you call CreateSharedHandle to share the resource, you can subsequently pass this name in a call to the method to give another device access to the shared resource. If you use a named resource, a malicious user can use this named resource before you do and prevent your app from starting. To prevent this situation, create a randomly named resource and store the name so that it can only be obtained by an authorized user. Alternatively, you can use a file for this purpose. To limit your app to one instance per user, create a locked file in the user's profile directory.

    If you created the resource as shared and did not specify that it uses NT handles, you cannot use CreateSharedHandle to get a handle for sharing because CreateSharedHandle will fail.

    -
    - - hh404626 - HRESULT IDXGIResource1::CreateSharedHandle([In, Optional] const SECURITY_ATTRIBUTES* pAttributes,[In] DXGI_SHARED_RESOURCE_FLAGS dwAccess,[In, Optional] const wchar_t* lpName,[Out] void** pHandle) - IDXGIResource1::CreateSharedHandle -
    - - - Creates a handle to a shared resource. You can then use the returned handle with multiple Direct3D devices. - - A reference to a structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether child processes can inherit the returned handle. Set this parameter to null if you want child processes that the application might create to not inherit the handle returned by CreateSharedHandle, and if you want the resource that is associated with the returned handle to get a default security descriptor. The lpSecurityDescriptor member of the structure specifies a SECURITY_DESCRIPTOR for the resource. Set this member to null if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. - The requested access rights to the resource. In addition to the generic access rights, DXGI defines the following values: ( 0x80000000L ) - specifies read access to the resource. ( 1 ) - specifies write access to the resource. You can combine these values by using a bitwise OR operation. - The name of the resource to share. You will need the resource name if you call the method to access the shared resource by name. If you instead call the method to access the shared resource by handle, set this parameter to null. - A reference to a variable that receives the NT HANDLE value to the resource to share. You can use this handle in calls to access the resource. - - If you created the resource as shared and specified that it uses NT handles (that is, you set the flag), you must use CreateSharedHandle to get a handle for sharing. In this situation, you cannot use the method because it will fail. Similarly, if you created the resource as shared and did not specify that it uses NT handles, you cannot use CreateSharedHandle to get a handle for sharing because CreateSharedHandle will fail.You can pass the handle that CreateSharedHandle returns in a call to the or method to give a device access to a shared resource that you created on a different device.CreateSharedHandle only returns the NT handle when you created the resource as shared (that is, you set the and flags).Because the handle that CreateSharedHandle returns is an NT handle, you can use the handle with CloseHandle, DuplicateHandle, and so on. You can call CreateSharedHandle only once for a shared resource; later calls fail. If you need more handles to the same shared resource, call DuplicateHandle. When you no longer need the shared resource handle, call CloseHandle to close the handle, in order to avoid memory leaks.The creator of a shared resource must not destroy the resource until all entities that opened the resource have destroyed the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device. - - HRESULT IDXGIResource1::CreateSharedHandle([In, Optional] const SECURITY_ATTRIBUTES* pAttributes,[In] DXGI_SHARED_RESOURCE_FLAGS dwAccess,[In, Optional] const wchar_t* name,[Out] void** pHandle) - - - -

    The interface implements methods for image-data objects.

    -
    - -

    An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call .

    The runtime automatically creates an interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an interface when you call or ID3D10Device::CreateTexture2D to create a 2D texture. To retrieve the interface that represents the 2D texture surface, call ID3D11Texture2D::QueryInterface or ID3D10Texture2D::QueryInterface. In this call, you must pass the identifier of . If the 2D texture has only a single MIP-map level and does not consist of an array of textures, QueryInterface succeeds and returns a reference to the interface reference. Otherwise, QueryInterface fails and does not return the reference to .

    -
    - - bb174565 - IDXGISurface - IDXGISurface -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Get a description of the surface.

    -
    - - bb174566 - GetDesc - GetDesc - HRESULT IDXGISurface::GetDesc([Out] DXGI_SURFACE_DESC* pDesc) -
    - - -

    Get a description of the surface.

    -
    -

    A reference to the surface description (see ).

    -

    Returns if successful; otherwise, returns one of the error codes that are described in the DXGI_ERROR topic.

    - - bb174566 - HRESULT IDXGISurface::GetDesc([Out] DXGI_SURFACE_DESC* pDesc) - IDXGISurface::GetDesc -
    - - -

    Get a reference to the data contained in the surface, and deny GPU access to the surface.

    -
    -

    A reference to the surface data (see ).

    -

    CPU read-write flags. These flags can be combined with a logical OR.

    • - Allow CPU read access.
    • - Allow CPU write access.
    • - Discard the previous contents of a resource when it is mapped.
    -

    Returns if successful; otherwise, returns one of the error codes that are described in the DXGI_ERROR topic.

    - -

    Use to access a surface from the CPU. To release a mapped surface (and allow GPU access) call .

    -
    - - bb174567 - HRESULT IDXGISurface::Map([Out] DXGI_MAPPED_RECT* pLockedRect,[In] unsigned int MapFlags) - IDXGISurface::Map -
    - - -

    Get a reference to the data contained in the surface, and deny GPU access to the surface.

    -
    -

    Returns if successful; otherwise, returns one of the error codes that are described in the DXGI_ERROR topic.

    - -

    Use to access a surface from the CPU. To release a mapped surface (and allow GPU access) call .

    -
    - - bb174567 - HRESULT IDXGISurface::Unmap() - IDXGISurface::Unmap -
    - - - Acquires access to the surface data. - - Flags specifying CPU access permissions. - A for accessing the mapped data, or null on failure.. - - - - Acquires access to the surface data. - - Flags specifying CPU access permissions. - Stream to contain the surface data. - A for accessing the mapped data, or null on failure.. - - - - Gets a swap chain back buffer. - - The swap chain to get the buffer from. - The index of the desired buffer. - The buffer interface, or null on failure. - - - -

    The interface extends the by adding support for using Windows Graphics Device Interface (GDI) to render to a Microsoft DirectX Graphics Infrastructure (DXGI) surface.

    -
    - -

    This interface is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call . Then, call QueryInterface on the object that returns to retrieve the interface.

    Any object that supports also supports .

    The runtime automatically creates an interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an interface when you call or ID3D10Device::CreateTexture2D to create a 2D texture. To retrieve the interface that represents the 2D texture surface, call ID3D11Texture2D::QueryInterface or ID3D10Texture2D::QueryInterface. In this call, you must pass the identifier of . If the 2D texture has only a single MIP-map level and does not consist of an array of textures, QueryInterface succeeds and returns a reference to the interface reference. Otherwise, QueryInterface fails and does not return the reference to .

    -
    - - ff471343 - IDXGISurface1 - IDXGISurface1 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Returns a device context (DC) that allows you to render to a Microsoft DirectX Graphics Infrastructure (DXGI) surface using Windows Graphics Device Interface (GDI).

    -
    -

    A Boolean value that specifies whether to preserve Direct3D contents in the GDI DC. TRUE directs the runtime not to preserve Direct3D contents in the GDI DC; that is, the runtime discards the Direct3D contents. guarantees that Direct3D contents are available in the GDI DC.

    -

    A reference to an handle that represents the current device context for GDI rendering.

    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    After you use the GetDC method to retrieve a DC, you can render to the DXGI surface by using GDI. The GetDC method readies the surface for GDI rendering and allows inter-operation between DXGI and GDI technologies.

    Keep the following in mind when using this method:

    • You must create the surface by using the flag for a surface or by using the flag for swap chains, otherwise this method fails.
    • You must release the device and call the method before you issue any new Direct3D commands.
    • This method fails if an outstanding DC has already been created by this method.
    • The format for the surface or swap chain must be or .
    • On GetDC, the render target in the output merger of the Direct3D pipeline is unbound from the surface. You must call the method on the device prior to Direct3D rendering after GDI rendering.
    • Prior to resizing buffers you must release all outstanding DCs.

    You can also call GetDC on the back buffer at index 0 of a swap chain by obtaining an from the swap chain. The following code illustrates the process.

     * g_pSwapChain = null;	
    -            * g_pSurface1 = null;	
    -            ...	
    -            //Setup the device and and swapchain	
    -            g_pSwapChain->GetBuffer(0, __uuidof(), (void**) &g_pSurface1);	
    -            g_pSurface1->GetDC( , &g_hDC );	
    -            ...      	
    -            //Draw on the DC using GDI	
    -            ...	
    -            //When finish drawing release the DC	
    -            g_pSurface1->ReleaseDC( null ); 
    -
    - - ff471345 - HRESULT IDXGISurface1::GetDC([In] BOOL Discard,[Out] HDC* phdc) - IDXGISurface1::GetDC -
    - - -

    Releases the GDI device context (DC) that is associated with the current surface and allows you to use Direct3D to render.

    -
    -

    A reference to a structure that identifies the dirty region of the surface. A dirty region is any part of the surface that you used for GDI rendering and that you want to preserve. This area is used as a performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to the specified rectangular region. If you pass in null, ReleaseDC considers the whole surface as dirty. Otherwise, ReleaseDC uses the area specified by the as a performance hint to indicate what areas have been manipulated by GDI rendering.

    You can pass a reference to an empty structure (a rectangle with no position or area) if you didn't change any content.

    -

    If this method succeeds, it returns . Otherwise, it returns an error code.

    - -

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Use the ReleaseDC method to release the DC and indicate that your application finished all GDI rendering to this surface. You must call the ReleaseDC method before you can use Direct3D to perform additional rendering.

    Prior to resizing buffers you must release all outstanding DCs.

    -
    - - ff471346 - HRESULT IDXGISurface1::ReleaseDC([In, Optional] RECT* pDirtyRect) - IDXGISurface1::ReleaseDC -
    - - - Releases the GDI device context (DC) associated with the current surface and allows rendering using Direct3D. The whole surface to be considered dirty. - - - Use the ReleaseDC method to release the DC and indicate that your application has finished all GDI rendering to this surface. You must call the ReleaseDC method before you perform addition rendering using Direct3D. Prior to resizing buffers all outstanding DCs must be released. - - If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - HRESULT IDXGISurface1::ReleaseDC([In, Optional] RECT* pDirtyRect) - - - - Releases the GDI device context (DC) associated with the current surface and allows rendering using Direct3D. - - - Use the ReleaseDC method to release the DC and indicate that your application has finished all GDI rendering to this surface. You must call the ReleaseDC method before you perform addition rendering using Direct3D. Prior to resizing buffers all outstanding DCs must be released. - - A reference to a structure that identifies the dirty region of the surface. A dirty region is any part of the surface that you have used for GDI rendering and that you want to preserve. This is used as a performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to the specified rectangular region. The area specified by the will be used as a performance hint to indicate what areas have been manipulated by GDI rendering. - If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. - HRESULT IDXGISurface1::ReleaseDC([In, Optional] RECT* pDirtyRect) - - - -

    The interface extends the interface by adding support for subresource surfaces and getting a handle to a shared resource.

    -
    - -

    An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call . Then, call QueryInterface on the object that returns to retrieve the interface.

    Any object that supports also supports .

    The runtime automatically creates an interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an interface when you call to create a 2D texture. To retrieve the interface that represents the 2D texture surface, call ID3D11Texture2D::QueryInterface. In this call, you must pass the identifier of . If the 2D texture has only a single MIP-map level and does not consist of an array of textures, QueryInterface succeeds and returns a reference to the interface reference. Otherwise, QueryInterface fails and does not return the reference to .

    You can call the method to create an interface that refers to one subresource of a stereo resource.

    -
    - - hh404628 - IDXGISurface2 - IDXGISurface2 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets the parent resource and subresource index that support a subresource surface.

    -
    -

    The globally unique identifier () of the requested interface type.

    -

    A reference to a buffer that receives a reference to the parent resource object for the subresource surface.

    -

    A reference to a variable that receives the index of the subresource surface.

    -

    Returns if successful; otherwise, returns one of the following values:

    • E_NOINTERFACE if the object does not implement the that the riid parameter specifies.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - -

    For subresource surface objects that the method creates, GetResource simply returns the values that were used to create the subresource surface.

    Current objects that implement are either resources or views. GetResource for these objects returns ?this? or the resource that supports the view respectively. In this situation, the subresource index is 0.

    -
    - - hh404629 - HRESULT IDXGISurface2::GetResource([In] const GUID& riid,[Out] void** ppParentResource,[Out] unsigned int* pSubresourceIndex) - IDXGISurface2::GetResource -
    - - - Initializes a new sub resource surface instance of class. - - - - - - -

    An interface implements one or more surfaces for storing rendered data before presenting it to an output.

    -
    - -

    You can create a swap chain by - calling , , or . You can also create a swap chain when you call D3D11CreateDeviceAndSwapChain; however, you can then only access the sub-set of swap-chain functionality that the interface provides.

    -
    - - bb174569 - IDXGISwapChain - IDXGISwapChain -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    [Starting with Direct3D 11.1, we recommend not to use GetDesc anymore to get a description of the swap chain. Instead, use .]

    Get a description of the swap chain.

    -
    - - bb174572 - GetDesc - GetDesc - HRESULT IDXGISwapChain::GetDesc([Out] DXGI_SWAP_CHAIN_DESC* pDesc) -
    - - -

    Get the output (the display monitor) that contains the majority of the client area of the target window.

    -
    - -

    If the method succeeds, the output interface will be filled and its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.

    The output is also owned by the adapter on which the swap chain's device was created.

    You cannot call GetContainingOutput on a swap chain that you created with .

    -
    - - bb174571 - GetContainingOutput - GetContainingOutput - HRESULT IDXGISwapChain::GetContainingOutput([Out] IDXGIOutput** ppOutput) -
    - - -

    Gets the number of times that or has been called.

    -
    - -

    For info about presentation statistics for a frame, see .

    -
    - - bb174575 - GetLastPresentCount - GetLastPresentCount - HRESULT IDXGISwapChain::GetLastPresentCount([Out] unsigned int* pLastPresentCount) -
    - - -

    Presents a rendered image to the user.

    -
    -

    An integer that specifies how to synchronize presentation of a frame with the vertical blank.

    For the bit-block transfer (bitblt) model ( or ), values are:

    • 0 - The presentation occurs immediately, there is no synchronization.
    • 1 through 4 - Synchronize presentation after the nth vertical blank.

    For the flip model (), values are:

    • 0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued.
    • 1 through 4 - Synchronize presentation for at least n vertical blanks.

    For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.

    If the update region straddles more than one output (each represented by ), Present performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.

    -

    An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants.

    -

    Possible return values include: , or (see DXGI_ERROR), (see ), or D3DDDIERR_DEVICEREMOVED.

    Note??The Present method can return either or D3DDDIERR_DEVICEREMOVED if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.?
    - -

    Starting with Direct3D 11.1, consider using because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.

    For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.

    Because calling Present might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.

    Differences between Direct3D 9 and Direct3D 10:

    Specifying in the Flags parameter is analogous to IDirect3DDevice9::TestCooperativeLevel in Direct3D 9.

    ?

    For flip presentation model swap chains that you create with the value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.

    For info about how data values change when you present content to the screen, see Converting data for the color space.

    -
    - - bb174576 - HRESULT IDXGISwapChain::Present([In] unsigned int SyncInterval,[In] DXGI_PRESENT_FLAGS Flags) - IDXGISwapChain::Present -
    - - -

    Accesses one of the swap-chain's back buffers.

    -
    -

    A zero-based buffer index.

    If the swap chain's swap effect is , this method can only access the first buffer; for this situation, set the index to zero.

    If the swap chain's swap effect is either or , only the swap chain's zero-index buffer can be read from and written to. The swap chain's buffers with indexes greater than zero can only be read from; so if you call the method for such buffers, they have the flag set.

    -

    The type of interface used to manipulate the buffer.

    -

    A reference to a back-buffer interface.

    -

    Returns one of the following DXGI_ERROR.

    - - bb174570 - HRESULT IDXGISwapChain::GetBuffer([In] unsigned int Buffer,[In] const GUID& riid,[Out] void** ppSurface) - IDXGISwapChain::GetBuffer -
    - - -

    Sets the display state to windowed or full screen.

    -
    -

    A Boolean value that specifies whether to set the display state to windowed or full screen. TRUE for full screen, and for windowed.

    -

    If you pass TRUE to the Fullscreen parameter to set the display state to full screen, you can optionally set this parameter to a reference to an interface for the output target that contains the swap chain. If you set this parameter to null, DXGI will choose the output based on the swap-chain's device and the output window's placement. If you pass to Fullscreen, you must set this parameter to null.

    -

    This methods returns:

    • if the action succeeded and the swap chain was placed in the requested state.
    • if the action failed. There are many reasons why a windowed-mode swap chain cannot switch to full-screen mode. For instance:
      • The application is running over Terminal Server.
      • The output window is occluded.
      • The output window does not have keyboard focus.
      • Another application is already in full-screen mode.

      When this error is returned, an application can continue to run in windowed mode and try to switch to full-screen mode later.

    • is returned if a fullscreen/windowed mode transition is occurring when this API is called.
    • Other error codes if you run out of memory or encounter another unexpected fault; these codes may be treated as hard, non-continuable errors.
    - -

    DXGI may change the display state of a swap chain in response to end user or system requests.

    We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through SetFullscreenState; that is, do not set the Windowed member of to to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. Also, we recommend that you have a time-out confirmation screen or other fallback mechanism when you allow the end user to change display modes.

    -
    - - bb174579 - HRESULT IDXGISwapChain::SetFullscreenState([In] BOOL Fullscreen,[In, Optional] IDXGIOutput* pTarget) - IDXGISwapChain::SetFullscreenState -
    - - -

    Get the state associated with full-screen mode.

    -
    -

    A reference to a boolean whose value is either:

    • TRUE if the swap chain is in full-screen mode
    • if the swap chain is in windowed mode
    -

    A reference to the output target (see ) when the mode is full screen; otherwise null.

    -

    Returns one of the following DXGI_ERROR.

    - -

    When the swap chain is in full-screen mode, a reference to the target output will be returned and its reference count will be incremented.

    -
    - - bb174574 - HRESULT IDXGISwapChain::GetFullscreenState([Out, Optional] BOOL* pFullscreen,[Out, Optional] IDXGIOutput** ppTarget) - IDXGISwapChain::GetFullscreenState -
    - - -

    [Starting with Direct3D 11.1, we recommend not to use GetDesc anymore to get a description of the swap chain. Instead, use .]

    Get a description of the swap chain.

    -
    - No documentation. -

    Returns one of the following DXGI_ERROR.

    - - bb174572 - HRESULT IDXGISwapChain::GetDesc([Out] DXGI_SWAP_CHAIN_DESC* pDesc) - IDXGISwapChain::GetDesc -
    - - -

    Changes the swap chain's back buffer size, format, and number of buffers. This should be called when the application window is resized.

    -
    -

    The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than DXGI_MAX_SWAP_CHAIN_BUFFERS. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model.

    -

    The new width of the back buffer. If you specify zero, DXGI will use the width of the client area of the target window. You can't specify the width as zero if you called the method to create the swap chain for a composition surface.

    -

    The new height of the back buffer. If you specify zero, DXGI will use the height of the client area of the target window. You can't specify the height as zero if you called the method to create the swap chain for a composition surface.

    -

    A -typed value for the new format of the back buffer. Set this value to to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model.

    -

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - -

    You can't resize a swap chain unless you release all outstanding references to its back buffers. You must release all of its direct and indirect references on the back buffers in order for ResizeBuffers to succeed.

    Direct references are held by the application after it calls AddRef on a resource.

    Indirect references are held by views to a resource, binding a view of the resource to a device context, a command list that used the resource, a command list that used a view to that resource, a command list that executed another command list that used the resource, and so on.

    Before you call ResizeBuffers, ensure that the application releases all references (by calling the appropriate number of Release invocations) on the resources, any views to the resource, and any command lists that use either the resources or views, and ensure that neither the resource nor a view is still bound to a device context. You can use to ensure that all references are released. If a view is bound to a deferred context, you must discard the partially built command list as well (by calling , then , then Release on the command list). After you call ResizeBuffers, you can re-query interfaces via .

    For swap chains that you created with , before you call ResizeBuffers, also call on the swap chain's back-buffer surface to ensure that you have no outstanding GDI device contexts (DCs) open.

    We recommend that you call ResizeBuffers when a client window is resized (that is, when an application receives a WM_SIZE message).

    The only difference between in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the or value set. In Windows?8, you must call ResizeBuffers to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the method fails.

    -
    - - bb174577 - HRESULT IDXGISwapChain::ResizeBuffers([In] unsigned int BufferCount,[In] unsigned int Width,[In] unsigned int Height,[In] DXGI_FORMAT NewFormat,[In] DXGI_SWAP_CHAIN_FLAG SwapChainFlags) - IDXGISwapChain::ResizeBuffers -
    - - -

    Resizes the output target.

    -
    -

    A reference to a structure that describes the mode, which specifies the new width, height, format, and refresh rate of the target. If the format is , ResizeTarget uses the existing format. We only recommend that you use when the swap chain is in full-screen mode as this method is not thread safe.

    -

    Returns a code that indicates success or failure. is returned if a full-screen/windowed mode transition is occurring when this API is called. See DXGI_ERROR for additional DXGI error codes.

    - -

    ResizeTarget resizes the target window when the swap chain is in windowed mode, and changes the display mode on the target output when the swap chain is in full-screen mode. Therefore, apps can call ResizeTarget to resize the target window (rather than a Microsoft Win32API such as SetWindowPos) without knowledge of the swap chain display mode.

    If a Windows Store app calls ResizeTarget, it fails with .

    You cannot call ResizeTarget on a swap chain that you created with .

    Apps must still call after they call ResizeTarget because only ResizeBuffers can change the back buffers. But, if those apps have implemented window resize processing to call ResizeBuffers, they don't need to explicitly call ResizeBuffers after they call ResizeTarget because the window resize processing will achieve what the app requires.

    -
    - - bb174578 - HRESULT IDXGISwapChain::ResizeTarget([In] const DXGI_MODE_DESC* pNewTargetParameters) - IDXGISwapChain::ResizeTarget -
    - - -

    Get the output (the display monitor) that contains the majority of the client area of the target window.

    -
    -

    A reference to the output interface (see ).

    -

    Returns one of the following DXGI_ERROR.

    - -

    If the method succeeds, the output interface will be filled and its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.

    The output is also owned by the adapter on which the swap chain's device was created.

    You cannot call GetContainingOutput on a swap chain that you created with .

    -
    - - bb174571 - HRESULT IDXGISwapChain::GetContainingOutput([Out] IDXGIOutput** ppOutput) - IDXGISwapChain::GetContainingOutput -
    - - -

    Gets performance statistics about the last render frame.

    -
    -

    A reference to a structure for the frame statistics.

    -

    Returns one of the DXGI_ERROR values.

    - -

    You cannot use GetFrameStatistics for swap chains that both use the bit-block transfer (bitblt) presentation model and draw in windowed mode.

    You can only use GetFrameStatistics for swap chains that either use the flip presentation model or draw in full-screen mode. You set the value in the SwapEffect member of the structure to specify that the swap chain uses the flip presentation model.

    -
    - - bb174573 - HRESULT IDXGISwapChain::GetFrameStatistics([Out] DXGI_FRAME_STATISTICS* pStats) - IDXGISwapChain::GetFrameStatistics -
    - - -

    Gets the number of times that or has been called.

    -
    - No documentation. -

    Returns one of the DXGI_ERROR values.

    - -

    For info about presentation statistics for a frame, see .

    -
    - - bb174575 - HRESULT IDXGISwapChain::GetLastPresentCount([Out] unsigned int* pLastPresentCount) - IDXGISwapChain::GetLastPresentCount -
    - - - Creates a swap chain. - - - If you attempt to create a swap chain in full-screen mode, and full-screen mode is unavailable, the swap chain will be created in windowed mode and DXGI_STATUS_OCCLUDED will be returned. If the buffer width or the buffer height are zero, the sizes will be inferred from the output window size in the swap-chain description. Since the target output cannot be chosen explicitly when the swap-chain is created, you should not create a full-screen swap chain. This can reduce presentation performance if the swap chain size and the output window size do not match. Here are two ways to ensure the sizes match: Create a windowed swap chain and then set it full-screen using . Save a reference to the swap-chain immediately after creation, and use it to get the output window size during a WM_SIZE event. Then resize the swap chain buffers (with ) during the transition from windowed to full-screen. If the swap chain is in full-screen mode, before you release it, you must use {{SetFullscreenState}} to switch it to windowed mode. For more information about releasing a swap chain, see the Destroying a Swap Chain section of {{DXGI Overview}}. - - a reference to a . - A reference to the device that will write 2D images to the swap chain. - A reference to the swap-chain description (see ). - HRESULT IDXGIFactory::CreateSwapChain([In] IUnknown* pDevice,[In] DXGI_SWAP_CHAIN_DESC* pDesc,[Out] IDXGISwapChain** ppSwapChain) - bb174537 - HRESULT IDXGIFactory::CreateSwapChain([In] IUnknown* pDevice,[In] DXGI_SWAP_CHAIN_DESC* pDesc,[Out, Fast] IDXGISwapChain** ppSwapChain) - IDXGIFactory::CreateSwapChain - - - - Access one of the swap-chain back buffers. - - The interface of the surface to resolve from the back buffer - A zero-based buffer index. If the swap effect is not DXGI_SWAP_EFFECT_SEQUENTIAL, this method only has access to the first buffer; for this case, set the index to zero. - - Returns a reference to a back-buffer interface. - - bb174570 - HRESULT IDXGISwapChain::GetBuffer([In] unsigned int Buffer,[In] const GUID& riid,[Out] void** ppSurface) - IDXGISwapChain::GetBuffer - - - -

    Gets performance statistics about the last render frame.

    -
    - -

    You cannot use GetFrameStatistics for swap chains that both use the bit-block transfer (bitblt) presentation model and draw in windowed mode.

    You can only use GetFrameStatistics for swap chains that either use the flip presentation model or draw in full-screen mode. You set the value in the SwapEffect member of the structure to specify that the swap chain uses the flip presentation model.

    -
    - - bb174573 - GetFrameStatistics - GetFrameStatistics - HRESULT IDXGISwapChain::GetFrameStatistics([Out] DXGI_FRAME_STATISTICS* pStats) -
    - - - Gets or sets a value indicating whether the swapchain is in fullscreen. - - - true if this swapchain is in fullscreen; otherwise, false. - - bb174574 - HRESULT IDXGISwapChain::GetFullscreenState([Out] BOOL* pFullscreen,[Out] IDXGIOutput** ppTarget) - IDXGISwapChain::GetFullscreenState - - - -

    [Starting with Direct3D 11.1, we recommend not to use Present anymore to present a rendered image. Instead, use . For more info, see Remarks.]

    Presents a rendered image to the user.

    -
    - No documentation. - No documentation. -

    Possible return values include: , or (see DXGI_ERROR), (see ), or D3DDDIERR_DEVICEREMOVED.

    Note??The Present method can return either or D3DDDIERR_DEVICEREMOVED if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.

    - -

    Starting with Direct3D 11.1, we recommend to instead use because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.

    For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.

    Because calling Present might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.

    Differences between Direct3D 9 and Direct3D 10:

    Specifying in the Flags parameter is analogous to IDirect3DDevice9::TestCooperativeLevel in Direct3D 9.

    ?

    For flip presentation model swap chains that you create with the value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.

    For info about how data values change when you present content to the screen, see Converting data for the color space.

    -
    - - bb174576 - HRESULT IDXGISwapChain::Present([In] unsigned int SyncInterval,[In] DXGI_PRESENT_FLAGS Flags) - IDXGISwapChain::Present -
    - - -

    Provides presentation capabilities that are enhanced from . These presentation capabilities consist of specifying dirty rectangles and scroll rectangle to optimize the presentation.

    -
    - -

    You can create a swap chain by - calling , , or . You can also create a swap chain when you call D3D11CreateDeviceAndSwapChain; however, you can then only access the sub-set of swap-chain functionality that the interface provides.

    provides the IsTemporaryMonoSupported method that you can use to determine whether the swap chain supports "temporary mono? presentation. This type of swap chain is a stereo swap chain that can be used to present mono content. -

    Note??Some stereo features like the advanced presentation flags are not represented by an explicit interface change. Furthermore, the original () and new () swap chain interfaces generally have the same behavior. For information about how methods are translated into methods, see the descriptions of the methods.? -
    - - hh404631 - IDXGISwapChain1 - IDXGISwapChain1 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets a description of the swap chain.

    -
    - - hh404640 - GetDesc1 - GetDesc1 - HRESULT IDXGISwapChain1::GetDesc1([Out] DXGI_SWAP_CHAIN_DESC1* pDesc) -
    - - -

    Gets a description of a full-screen swap chain.

    -
    - -

    The semantics of GetFullscreenDesc are identical to that of the IDXGISwapchain::GetDesc method for -based swap chains.

    -
    - - hh404644 - GetFullscreenDesc - GetFullscreenDesc - HRESULT IDXGISwapChain1::GetFullscreenDesc([Out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc) -
    - - -

    Retrieves the underlying for this swap-chain object.

    -
    - -

    Applications call the method to create a swap chain that is associated with an .

    -
    - - hh404647 - GetHwnd - GetHwnd - HRESULT IDXGISwapChain1::GetHwnd([Out] HWND* pHwnd) -
    - - -

    Determines whether a swap chain supports ?temporary mono.?

    -
    - -

    Temporary mono is a feature where a stereo swap chain can be presented using only the content in the left buffer. To present using the left buffer as a mono buffer, an application calls the method with the flag. All windowed swap chains support temporary mono. However, full-screen swap chains optionally support temporary mono because not all hardware supports temporary mono on full-screen swap chains efficiently.

    -
    - - hh446794 - IsTemporaryMonoSupported - IsTemporaryMonoSupported - BOOL IDXGISwapChain1::IsTemporaryMonoSupported() -
    - - -

    Gets the output (the display monitor) to which you can restrict the contents of a present operation.

    -
    - -

    If the method succeeds, the runtime fills the buffer at ppRestrictToOutput with a reference to the restrict-to output interface. This restrict-to output interface has its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.

    The output is also owned by the adapter on which the swap chain's device was created.

    -
    - - hh446788 - GetRestrictToOutput - GetRestrictToOutput - HRESULT IDXGISwapChain1::GetRestrictToOutput([Out] IDXGIOutput** ppRestrictToOutput) -
    - - -

    Retrieves or sets the background color of the swap chain.

    -
    - - Note??The background color that GetBackgroundColor retrieves does not indicate what the screen currently displays. The background color indicates what the screen will display with your next call to the method. The default value of the background color is black with full opacity: 0,0,0,1.? - - - hh404634 - GetBackgroundColor / SetBackgroundColor - GetBackgroundColor - HRESULT IDXGISwapChain1::GetBackgroundColor([Out] D3DCOLORVALUE* pColor) -
    - - -

    Gets or sets the rotation of the back buffers for the swap chain.

    -
    - - hh446791 - GetRotation / SetRotation - GetRotation - HRESULT IDXGISwapChain1::GetRotation([Out] DXGI_MODE_ROTATION* pRotation) -
    - - -

    Gets a description of the swap chain.

    -
    -

    A reference to a structure that describes the swap chain.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - - hh404640 - HRESULT IDXGISwapChain1::GetDesc1([Out] DXGI_SWAP_CHAIN_DESC1* pDesc) - IDXGISwapChain1::GetDesc1 -
    - - -

    Gets a description of a full-screen swap chain.

    -
    -

    A reference to a structure that describes the full-screen swap chain.

    -

    GetFullscreenDesc returns:

    • if it successfully retrieved the description of the full-screen swap chain.
    • for non- swap chains or if pDesc is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - -

    The semantics of GetFullscreenDesc are identical to that of the IDXGISwapchain::GetDesc method for -based swap chains.

    -
    - - hh404644 - HRESULT IDXGISwapChain1::GetFullscreenDesc([Out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc) - IDXGISwapChain1::GetFullscreenDesc -
    - - -

    Retrieves the underlying for this swap-chain object.

    -
    - No documentation. -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    If pHwnd receives null (that is, the swap chain is not -based), GetHwnd returns .

    - -

    Applications call the method to create a swap chain that is associated with an .

    -
    - - hh404647 - HRESULT IDXGISwapChain1::GetHwnd([Out] HWND* pHwnd) - IDXGISwapChain1::GetHwnd -
    - - -

    Retrieves the underlying CoreWindow object for this swap-chain object.

    -
    - No documentation. - No documentation. -

    GetCoreWindow returns:

    • if it successfully retrieved the underlying CoreWindow object.
    • if ppUnk is null; that is, the swap chain is not associated with a CoreWindow object.
    • Any that a call to QueryInterface to query for an CoreWindow object might typically return.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, GetCoreWindow fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    Applications call the method to create a swap chain that is associated with an CoreWindow object.

    -
    - - hh404650 - HRESULT IDXGISwapChain1::GetCoreWindow([In] const GUID& refiid,[Out] void** ppUnk) - IDXGISwapChain1::GetCoreWindow -
    - - -

    Presents a frame on the display screen.

    -
    -

    An integer that specifies how to synchronize presentation of a frame with the vertical blank.

    For the bit-block transfer (bitblt) model ( or ), values are:

    • 0 - The presentation occurs immediately, there is no synchronization.
    • 1 through 4 - Synchronize presentation after the nth vertical blank.

    For the flip model (), values are:

    • 0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued.
    • 1 through 4 - Synchronize presentation for at least n vertical blanks.

    For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.

    If the update region straddles more than one output (each represented by ), Present1 performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.

    -

    An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants.

    -

    A reference to a structure that describes updated rectangles and scroll information of the frame to present.

    -

    Possible return values include: , , , , or E_OUTOFMEMORY.

    - -

    An app can use Present1 to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager (DWM). The DWM can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An app must confine its modifications to only the dirty regions that it passes to Present1, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.

    For flip presentation model swap chains that you create with the value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.

    For info about how data values change when you present content to the screen, see Converting data for the color space.

    For info about calling Present1 when your app uses multiple threads, see Multithread Considerations and Multithreading and DXGI.

    -
    - - hh446797 - HRESULT IDXGISwapChain1::Present1([In] unsigned int SyncInterval,[In] DXGI_PRESENT_FLAGS PresentFlags,[In] const void* pPresentParameters) - IDXGISwapChain1::Present1 -
    - - -

    Determines whether a swap chain supports ?temporary mono.?

    -
    -

    Indicates whether to use the swap chain in temporary mono mode. TRUE indicates that you can use temporary-mono mode; otherwise, .

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, IsTemporaryMonoSupported always returns because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    Temporary mono is a feature where a stereo swap chain can be presented using only the content in the left buffer. To present using the left buffer as a mono buffer, an application calls the method with the flag. All windowed swap chains support temporary mono. However, full-screen swap chains optionally support temporary mono because not all hardware supports temporary mono on full-screen swap chains efficiently.

    -
    - - hh446794 - BOOL IDXGISwapChain1::IsTemporaryMonoSupported() - IDXGISwapChain1::IsTemporaryMonoSupported -
    - - -

    Gets the output (the display monitor) to which you can restrict the contents of a present operation.

    -
    -

    A reference to a buffer that receives a reference to the interface for the restrict-to output. An application passes this reference to in a call to the , , or method to create the swap chain.

    -

    Returns if the restrict-to output was successfully retrieved; otherwise, returns E_INVALIDARG if the reference is invalid.

    - -

    If the method succeeds, the runtime fills the buffer at ppRestrictToOutput with a reference to the restrict-to output interface. This restrict-to output interface has its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.

    The output is also owned by the adapter on which the swap chain's device was created.

    -
    - - hh446788 - HRESULT IDXGISwapChain1::GetRestrictToOutput([Out] IDXGIOutput** ppRestrictToOutput) - IDXGISwapChain1::GetRestrictToOutput -
    - - -

    Changes the background color of the swap chain.

    -
    -

    A reference to a DXGI_RGBA structure that specifies the background color to set.

    -

    SetBackgroundColor returns:

    • if it successfully set the background color.
    • E_INVALIDARG if the pColor parameter is incorrect, for example, pColor is null or any of the floating-point values of the members of DXGI_RGBA to which pColor points are outside the range from 0.0 through 1.0.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, SetBackgroundColor fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    The background color affects only swap chains that you create with in windowed mode. You pass this value in a call to , , or . Typically, the background color is not visible unless the swap-chain contents are smaller than the destination window.

    When you set the background color, it is not immediately realized. It takes effect in conjunction with your next call to the method. The DXGI_PRESENT flags that you pass to can help achieve the effect that you require. For example, if you call SetBackgroundColor and then call with the Flags parameter set to , you change only the background color without changing the displayed contents of the swap chain.

    When you call the method to display contents of the swap chain, uses the value that is specified in the AlphaMode member of the structure to determine how to handle the a member of the DXGI_RGBA structure, the alpha value of the background color, that achieves window transparency. For example, if AlphaMode is , ignores the a member of DXGI_RGBA.

    Note??Like all presentation data, we recommend that you perform floating point operations in a linear color space. When the desktop is in a fixed bit color depth mode, the operating system converts linear color data to standard RGB data (sRGB, gamma 2.2 corrected space) to compose to the screen. For more info, see Converting data for the color space.? -
    - - hh446799 - HRESULT IDXGISwapChain1::SetBackgroundColor([In] const D3DCOLORVALUE* pColor) - IDXGISwapChain1::SetBackgroundColor -
    - - -

    Retrieves the background color of the swap chain.

    -
    -

    A reference to a DXGI_RGBA structure that receives the background color of the swap chain.

    -

    GetBackgroundColor returns:

    • if it successfully retrieves the background color.
    • if the pColor parameter is invalid, for example, pColor is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - - Note??The background color that GetBackgroundColor retrieves does not indicate what the screen currently displays. The background color indicates what the screen will display with your next call to the method. The default value of the background color is black with full opacity: 0,0,0,1.? - - - hh404634 - HRESULT IDXGISwapChain1::GetBackgroundColor([Out] D3DCOLORVALUE* pColor) - IDXGISwapChain1::GetBackgroundColor -
    - - -

    Sets the rotation of the back buffers for the swap chain.

    -
    -

    A -typed value that specifies how to set the rotation of the back buffers for the swap chain.

    -

    SetRotation returns:

    • if it successfully set the rotation.
    • if the swap chain is bit-block transfer (bitblt) model. The swap chain must be flip model to successfully call SetRotation.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, SetRotation fails with . For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - -

    You can only use SetRotation to rotate the back buffers for flip-model swap chains that you present in windowed mode.

    SetRotation isn't supported for rotating the back buffers for flip-model swap chains that you present in full-screen mode. In this situation, SetRotation doesn't fail, but you must ensure that you specify no rotation () for the swap chain. Otherwise, when you call or to present a frame, the presentation fails.

    -
    - - hh446801 - HRESULT IDXGISwapChain1::SetRotation([In] DXGI_MODE_ROTATION Rotation) - IDXGISwapChain1::SetRotation -
    - - -

    Gets the rotation of the back buffers for the swap chain.

    -
    -

    A reference to a variable that receives a -typed value that specifies the rotation of the back buffers for the swap chain.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, GetRotation fails with . For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    - - hh446791 - HRESULT IDXGISwapChain1::GetRotation([Out] DXGI_MODE_ROTATION* pRotation) - IDXGISwapChain1::GetRotation -
    - - - Creates a swapchain associated to the specified HWND. This is applicable only for Desktop platform. - - The DXGI Factory used to create the swapchain. - The associated device instance. - The HWND of the window to which this swapchain is associated. - The swap chain description. - The fullscreen description of the swap chain. Default is null. - The output to which this swap chain should be restricted. Default is null, meaning that there is no restriction. - - - - Creates a swapchain associated to the specified CoreWindow. This is applicable only for WinRT platform. - - The DXGI Factory used to create the swapchain. - The associated device instance. - The HWND of the window to which this swapchain is associated. - The swap chain description. - The output to which this swap chain should be restricted. Default is null, meaning that there is no restriction. - - - - Creates a swapchain for DirectComposition API or WinRT XAML framework. This is applicable only for WinRT platform. - - The DXGI Factory used to create the swapchain. - The associated device instance. - The swap chain description. - The output to which this swap chain should be restricted. Default is null, meaning that there is no restriction. - - - - [This documentation is preliminary and is subject to change.] - - An integer that specifies how to synchronize presentation of a frame with the vertical blank. For the bit-block transfer (bitblt) model, values are: 0 - The presentation occurs immediately, there is no synchronization. 1,2,3,4 - Synchronize presentation after the nth vertical blank. For the flip model, values are: 0 - Discard this frame if you submitted a more recent presentation. n > 0 - Synchronize presentation for at least n vertical blanks. For an example that shows how sync-interval values affect a flip presentation queue, see Remarks. If the update region straddles more than one output (each represented by ), Present1 performs the synchronization to the output that contains the largest subrectangle of the target window's client area. - An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants. - A reference to a structure that describes updated rectangles and scroll information of the frame to present. - Possible return values include: , , , , or E_OUTOFMEMORY. - - An application can use Present1 to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager (DWM). The DWM can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An application must confine its modifications to only the dirty regions that it passes to Present1, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.For flip presentation model swap chains that you create with the value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.Flip presentation model queueSuppose the following frames with sync-interval values are queued from oldest (A) to newest (E) before you call Present1.A: 3, B: 0, C: 0, D: 1, E: 0When you call Present1, the runtime shows frame A for 3 vertical blank intervals, then frame D for 1 vertical blank interval, and then frame E until you submit a new presentation. The runtime discards frames C and D. - - - HRESULT IDXGISwapChain1::Present1([In] unsigned int SyncInterval,[In] unsigned int PresentFlags,[In] const void* pPresentParameters) - - - -

    Extends with methods to support swap back buffer scaling and lower-latency swap chains.

    -
    - -

    You can create a swap chain by - calling , , or .

    -
    - - dn280420 - IDXGISwapChain2 - IDXGISwapChain2 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets or sets the number of frames that the swap chain is allowed to queue for rendering.

    -
    - - dn268311 - GetMaximumFrameLatency / SetMaximumFrameLatency - GetMaximumFrameLatency - HRESULT IDXGISwapChain2::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) -
    - - -

    Returns a waitable handle that signals when the DXGI adapter has finished presenting a new frame.

    Windows?8.1 introduces new APIs that allow lower-latency rendering by waiting until the previous frame is presented to the display before drawing the next frame. To use this method, first create the DXGI swap chain with the flag set, then call GetFrameLatencyWaitableObject to retrieve the waitable handle. Use the waitable handle with WaitForSingleObjectEx to synchronize rendering of each new frame with the end of the previous frame. For every frame it renders, the app should wait on this handle before starting any rendering operations. Note that this requirement includes the first frame the app renders with the swap chain. See the DirectXLatency sample.

    -
    - - dn268309 - GetFrameLatencyWaitableObject - GetFrameLatencyWaitableObject - void* IDXGISwapChain2::GetFrameLatencyWaitableObject() -
    - - -

    Gets or sets the transform matrix that will be applied to a composition swap chain upon the next present.

    Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in XAML pages using the SwapChainPanel element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch UI. The GetMatrixTransform and SetMatrixTransform methods are used to synchronize scaling of the DirectX swap chain with its associated SwapChainPanel element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.

    -
    - - dn268310 - GetMatrixTransform / SetMatrixTransform - GetMatrixTransform - HRESULT IDXGISwapChain2::GetMatrixTransform([Out] DXGI_MATRIX_3X2_F* pMatrix) -
    - - -

    Sets the source region to be used for the swap chain.

    Use SetSourceSize to specify the portion of the swap chain from which the operating system presents. This allows an effective resize without calling the more-expensive method. Prior to Windows?8.1, calling was the only way to resize the swap chain. The source rectangle is always defined by the region [0, 0, Width, Height].

    -
    - No documentation. - No documentation. -

    This method can return:

    • E_INVALIDARG if one or more parameters exceed the size of the back buffer.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - - dn280409 - HRESULT IDXGISwapChain2::SetSourceSize([In] unsigned int Width,[In] unsigned int Height) - IDXGISwapChain2::SetSourceSize -
    - - -

    Gets the source region used for the swap chain.

    Use GetSourceSize to get the portion of the swap chain from which the operating system presents. The source rectangle is always defined by the region [0, 0, Width, Height]. Use SetSourceSize to set this portion of the swap chain.

    -
    - No documentation. - No documentation. -

    This method can return error codes that are described in the DXGI_ERROR topic.

    - - dn280408 - HRESULT IDXGISwapChain2::GetSourceSize([Out] unsigned int* pWidth,[Out] unsigned int* pHeight) - IDXGISwapChain2::GetSourceSize -
    - - -

    Sets the number of frames that the swap chain is allowed to queue for rendering.

    -
    -

    The maximum number of back buffer frames that will be queued for the swap chain. This value is 3 by default.

    -

    Returns if successful; otherwise, if the device was removed.

    - -

    This method is only valid for use on swap chains created with . Otherwise, the result will be .

    -
    - - dn268313 - HRESULT IDXGISwapChain2::SetMaximumFrameLatency([In] unsigned int MaxLatency) - IDXGISwapChain2::SetMaximumFrameLatency -
    - - -

    Gets the number of frames that the swap chain is allowed to queue for rendering.

    -
    -

    The maximum number of back buffer frames that will be queued for the swap chain. This value is 1 by default, but should be set to 2 if the scene takes longer than it takes for one vertical refresh (typically about 16ms) to draw.

    -

    Returns if successful; otherwise, returns one of the following members of the D3DERR enumerated type:

    • D3DERR_DEVICELOST
    • D3DERR_DEVICEREMOVED
    • D3DERR_DRIVERINTERNALERROR
    • D3DERR_INVALIDCALL
    • D3DERR_OUTOFVIDEOMEMORY
    - - dn268311 - HRESULT IDXGISwapChain2::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) - IDXGISwapChain2::GetMaximumFrameLatency -
    - - -

    Returns a waitable handle that signals when the DXGI adapter has finished presenting a new frame.

    Windows?8.1 introduces new APIs that allow lower-latency rendering by waiting until the previous frame is presented to the display before drawing the next frame. To use this method, first create the DXGI swap chain with the flag set, then call GetFrameLatencyWaitableObject to retrieve the waitable handle. Use the waitable handle with WaitForSingleObjectEx to synchronize rendering of each new frame with the end of the previous frame. For every frame it renders, the app should wait on this handle before starting any rendering operations. Note that this requirement includes the first frame the app renders with the swap chain. See the DirectXLatency sample.

    -
    -

    A handle to the waitable object, or null if the swap chain was not created with .

    - - dn268309 - void* IDXGISwapChain2::GetFrameLatencyWaitableObject() - IDXGISwapChain2::GetFrameLatencyWaitableObject -
    - - -

    Sets the transform matrix that will be applied to a composition swap chain upon the next present.

    Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in XAML pages using the SwapChainPanel element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch UI. The GetMatrixTransform and SetMatrixTransform methods are used to synchronize scaling of the DirectX swap chain with its associated SwapChainPanel element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.

    -
    - No documentation. -

    SetMatrixTransform returns:

    • if it successfully retrieves the transform matrix.
    • E_INVALIDARG if the pMatrix parameter is incorrect, for example, pMatrix is null or the matrix represented by includes components other than scale and translation.
    • if the method is called on a swap chain that was not created with CreateSwapChainForComposition.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - - dn268312 - HRESULT IDXGISwapChain2::SetMatrixTransform([In] const DXGI_MATRIX_3X2_F* pMatrix) - IDXGISwapChain2::SetMatrixTransform -
    - - -

    Gets the transform matrix that will be applied to a composition swap chain upon the next present.

    Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in XAML pages using the SwapChainPanel element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch UI. The GetMatrixTransform and SetMatrixTransform methods are used to synchronize scaling of the DirectX swap chain with its associated SwapChainPanel element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.

    -
    - No documentation. -

    GetMatrixTransform returns:

    • if it successfully retrieves the transform matrix.
    • if the method is called on a swap chain that was not created with CreateSwapChainForComposition.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    - - dn268310 - HRESULT IDXGISwapChain2::GetMatrixTransform([Out] DXGI_MATRIX_3X2_F* pMatrix) - IDXGISwapChain2::GetMatrixTransform -
    - - -

    [This documentation is preliminary and is subject to change.]

    Gets the source region used for the swap chain.

    Use GetSourceSize to get the portion of the swap chain from which the operating system presents. The source rectangle is always defined by the region [0, 0, Width, Height]. Use SetSourceSize to set this portion of the swap chain.

    -
    -

    This method can return error codes that are described in the DXGI_ERROR topic.

    - - dn280408 - HRESULT IDXGISwapChain2::GetSourceSize([Out] unsigned int* pWidth,[Out] unsigned int* pHeight) - IDXGISwapChain2::GetSourceSize -
    - - -

    Extends with methods to support getting the index of the swap chain's current back buffer and support for color space.

    -
    - - dn903673 - IDXGISwapChain3 - IDXGISwapChain3 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Gets the index of the swap chain's current back buffer.

    -
    - - dn903675 - GetCurrentBackBufferIndex - GetCurrentBackBufferIndex - unsigned int IDXGISwapChain3::GetCurrentBackBufferIndex() -
    - - -

    Sets the color space used by the swap chain.

    -
    - - dn903676 - SetColorSpace1 - SetColorSpace1 - HRESULT IDXGISwapChain3::SetColorSpace1([In] DXGI_COLOR_SPACE_TYPE ColorSpace) -
    - - -

    Gets the index of the swap chain's current back buffer.

    -
    -

    Returns the index of the current back buffer.

    - - dn903675 - unsigned int IDXGISwapChain3::GetCurrentBackBufferIndex() - IDXGISwapChain3::GetCurrentBackBufferIndex -
    - - -

    Checks the swap chain's support for color space.

    -
    -

    A -typed value that specifies color space type to check support for.

    -

    A reference to a variable that receives a combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for color space support.

    - - dn903674 - HRESULT IDXGISwapChain3::CheckColorSpaceSupport([In] DXGI_COLOR_SPACE_TYPE ColorSpace,[Out] DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG* pColorSpaceSupport) - IDXGISwapChain3::CheckColorSpaceSupport -
    - - -

    Sets the color space used by the swap chain.

    -
    -

    A -typed value that specifies the color space to set.

    -

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    - - dn903676 - HRESULT IDXGISwapChain3::SetColorSpace1([In] DXGI_COLOR_SPACE_TYPE ColorSpace) - IDXGISwapChain3::SetColorSpace1 -
    - - -

    Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a D3D12 command queue as an input device. This should be called when the application window is resized.

    -
    -

    The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than DXGI_MAX_SWAP_CHAIN_BUFFERS. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model.

    -

    The new width of the back buffer. If you specify zero, DXGI will use the width of the client area of the target window. You can't specify the width as zero if you called the method to create the swap chain for a composition surface.

    -

    The new height of the back buffer. If you specify zero, DXGI will use the height of the client area of the target window. You can't specify the height as zero if you called the method to create the swap chain for a composition surface.

    -

    A -typed value for the new format of the back buffer. Set this value to to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model.

    -

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    -

    An array of UINTs, of total size BufferCount, where the value indicates which node the back buffer should be created on. Buffers created using ResizeBuffers1 with a non-null pCreationNodeMask array are visible to all nodes.

    -

    An array of command queues ( instances), of total size BufferCount. Each queue provided must match the corresponding creation node mask specified in the pCreationNodeMask array. When Present() is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - -

    This method is only valid to call when the swapchain was created using a D3D12 command queue () as an input device.

    When a swapchain is created on a multi-GPU adapter, the backbuffers are all created on node 1 and only a single command queue is supported. ResizeBuffers1 enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering (AFR) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters.

    The only difference between in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the or value set. In Windows?8, you must call ResizeBuffers to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the method fails.

    Also see the Remarks section in , all of which is relevant to ResizeBuffers1.

    -
    - - mt403341 - HRESULT IDXGISwapChain3::ResizeBuffers1([In] unsigned int BufferCount,[In] unsigned int Width,[In] unsigned int Height,[In] DXGI_FORMAT Format,[In] DXGI_SWAP_CHAIN_FLAG SwapChainFlags,[In, Buffer] const unsigned int* pCreationNodeMask,[In, Buffer] const IUnknown** ppPresentQueue) - IDXGISwapChain3::ResizeBuffers1 -
    - - -

    Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a D3D12 command queue as an input device. This should be called when the application window is resized.

    -
    -

    The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than DXGI_MAX_SWAP_CHAIN_BUFFERS. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model.

    -

    The new width of the back buffer. If you specify zero, DXGI will use the width of the client area of the target window. You can't specify the width as zero if you called the method to create the swap chain for a composition surface.

    -

    The new height of the back buffer. If you specify zero, DXGI will use the height of the client area of the target window. You can't specify the height as zero if you called the method to create the swap chain for a composition surface.

    -

    A -typed value for the new format of the back buffer. Set this value to to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model.

    -

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    -

    An array of UINTs, of total size BufferCount, where the value indicates which node the back buffer should be created on. Buffers created using ResizeBuffers1 with a non-null pCreationNodeMask array are visible to all nodes.

    -

    An array of command queues ( instances), of total size BufferCount. Each queue provided must match the corresponding creation node mask specified in the pCreationNodeMask array. When Present() is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - -

    This method is only valid to call when the swapchain was created using a D3D12 command queue () as an input device.

    When a swapchain is created on a multi-GPU adapter, the backbuffers are all created on node 1 and only a single command queue is supported. ResizeBuffers1 enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering (AFR) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters.

    The only difference between in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the or value set. In Windows?8, you must call ResizeBuffers to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the method fails.

    Also see the Remarks section in , all of which is relevant to ResizeBuffers1.

    -
    - - mt403341 - HRESULT IDXGISwapChain3::ResizeBuffers1([In] unsigned int BufferCount,[In] unsigned int Width,[In] unsigned int Height,[In] DXGI_FORMAT Format,[In] DXGI_SWAP_CHAIN_FLAG SwapChainFlags,[In, Buffer] const unsigned int* pCreationNodeMask,[In, Buffer] const IUnknown** ppPresentQueue) - IDXGISwapChain3::ResizeBuffers1 -
    - - -

    Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a D3D12 command queue as an input device. This should be called when the application window is resized.

    -
    -

    The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than DXGI_MAX_SWAP_CHAIN_BUFFERS. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model.

    -

    The new width of the back buffer. If you specify zero, DXGI will use the width of the client area of the target window. You can't specify the width as zero if you called the method to create the swap chain for a composition surface.

    -

    The new height of the back buffer. If you specify zero, DXGI will use the height of the client area of the target window. You can't specify the height as zero if you called the method to create the swap chain for a composition surface.

    -

    A -typed value for the new format of the back buffer. Set this value to to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model.

    -

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    -

    An array of UINTs, of total size BufferCount, where the value indicates which node the back buffer should be created on. Buffers created using ResizeBuffers1 with a non-null pCreationNodeMask array are visible to all nodes.

    -

    An array of command queues ( instances), of total size BufferCount. Each queue provided must match the corresponding creation node mask specified in the pCreationNodeMask array. When Present() is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation.

    -

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    - -

    This method is only valid to call when the swapchain was created using a D3D12 command queue () as an input device.

    When a swapchain is created on a multi-GPU adapter, the backbuffers are all created on node 1 and only a single command queue is supported. ResizeBuffers1 enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering (AFR) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters.

    The only difference between in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the or value set. In Windows?8, you must call ResizeBuffers to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the method fails.

    Also see the Remarks section in , all of which is relevant to ResizeBuffers1.

    -
    - - mt403341 - HRESULT IDXGISwapChain3::ResizeBuffers1([In] unsigned int BufferCount,[In] unsigned int Width,[In] unsigned int Height,[In] DXGI_FORMAT Format,[In] DXGI_SWAP_CHAIN_FLAG SwapChainFlags,[In, Buffer] const unsigned int* pCreationNodeMask,[In, Buffer] const IUnknown** ppPresentQueue) - IDXGISwapChain3::ResizeBuffers1 -
    - - -

    An interface implements one or more surfaces for storing rendered data before presenting it to an output.

    -
    - -

    You can create a swap chain by - calling , , or . You can also create a swap chain when you call D3D11CreateDeviceAndSwapChain; however, you can then only access the sub-set of swap-chain functionality that the interface provides.

    -
    - - bb174569 - IDXGISwapChain4 - IDXGISwapChain4 -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    This method sets High Dynamic Range (HDR) and Wide Color Gamut (WCG) header metadata.

    -
    -

    Specifies one member of the enum.

    -

    Specifies the size of pMetaData, in bytes.

    -

    Specifies a void reference that references the metadata, if it exists. Refer to the structure.

    -

    This method returns an success or error code.

    - -

    This method sets metadata to enable a monitor's output to be adjusted depending on its capabilities.

    -
    - - mt732708 - HRESULT IDXGISwapChain4::SetHDRMetaData([In] DXGI_HDR_METADATA_TYPE Type,[In] unsigned int Size,[In, Buffer, Optional] void* pMetaData) - IDXGISwapChain4::SetHDRMetaData -
    - - -

    This swap chain interface allows desktop media applications to request a seamless change to a specific refresh rate.

    For example, a media application presenting video at a typical framerate of 23.997 frames per second can request a custom refresh rate of 24 or 48 Hz to eliminate jitter. If the request is approved, the app starts presenting frames at the custom refresh rate immediately - without the typical 'mode switch' a user would experience when changing the refresh rate themselves by using the control panel.

    -
    - -

    Seamless changes to custom framerates can only be done on integrated panels. Custom frame rates cannot be applied to external displays. If the DXGI output adapter is attached to an external display then CheckPresentDurationSupport will return (0, 0) for upper and lower bounds, indicating that the device does not support seamless refresh rate changes.

    Custom refresh rates can be used when displaying video with a dynamic framerate. However, the refresh rate change should be kept imperceptible to the user. A best practice for keeping the refresh rate transition imperceptible is to only set the custom framerate if the app determines it can present at that rate for least 5 seconds.

    -
    - - dn384131 - IDXGISwapChainMedia - IDXGISwapChainMedia -
    - - - Initializes a new instance of the class. - - The native pointer. - - - - Performs an explicit conversion from to . (This method is a shortcut to ) - - The native pointer. - - The result of the conversion. - - - - -

    Queries the system for a structure that indicates whether a custom refresh rate is currently approved by the system.

    -
    - - dn384133 - GetFrameStatisticsMedia - GetFrameStatisticsMedia - HRESULT IDXGISwapChainMedia::GetFrameStatisticsMedia([Out] DXGI_FRAME_STATISTICS_MEDIA* pStats) -
    - - -

    Requests a custom presentation duration (custom refresh rate).

    -
    - - dn384134 - SetPresentDuration - SetPresentDuration - HRESULT IDXGISwapChainMedia::SetPresentDuration([In] unsigned int Duration) -
    - - -

    Queries the system for a structure that indicates whether a custom refresh rate is currently approved by the system.

    -
    - No documentation. -

    This method returns on success, or a DXGI error code on failure.

    - - dn384133 - HRESULT IDXGISwapChainMedia::GetFrameStatisticsMedia([Out] DXGI_FRAME_STATISTICS_MEDIA* pStats) - IDXGISwapChainMedia::GetFrameStatisticsMedia -
    - - -

    Requests a custom presentation duration (custom refresh rate).

    -
    -

    The custom presentation duration, specified in hundreds of nanoseconds.

    -

    This method returns on success, or a DXGI error code on failure.

    - - dn384134 - HRESULT IDXGISwapChainMedia::SetPresentDuration([In] unsigned int Duration) - IDXGISwapChainMedia::SetPresentDuration -
    - - -

    Queries the graphics driver for a supported frame present duration corresponding to a custom refresh rate.

    -
    -

    Indicates the frame duration to check. This value is the duration of one frame at the desired refresh rate, specified in hundreds of nanoseconds. For example, set this field to 167777 to check for 60 Hz refresh rate support.

    -

    A variable that will be set to the closest supported frame present duration that's smaller than the requested value, or zero if the device does not support any lower duration.

    -

    A variable that will be set to the closest supported frame present duration that's larger than the requested value, or zero if the device does not support any higher duration.

    -

    This method returns on success, or a DXGI error code on failure.

    - -

    If the DXGI output adapter does not support custom refresh rates (for example, an external display) then the display driver will set upper and lower bounds to (0, 0).

    -
    - - dn384132 - HRESULT IDXGISwapChainMedia::CheckPresentDurationSupport([In] unsigned int DesiredPresentDuration,[Out] unsigned int* pClosestSmallerPresentDuration,[Out] unsigned int* pClosestLargerPresentDuration) - IDXGISwapChainMedia::CheckPresentDurationSupport -
    - - -

    Describes an adapter (or video card) by using DXGI 1.0.

    -
    - -

    The structure provides a description of an adapter. This structure is initialized by using the method.

    -
    - - bb173058 - DXGI_ADAPTER_DESC - DXGI_ADAPTER_DESC -
    - - -

    A string that contains the adapter description. On feature level 9 graphics hardware, GetDesc returns ?Software Adapter? for the description string.

    -
    - - bb173058 - wchar_t Description[128] - wchar_t Description -
    - - -

    The PCI ID of the hardware vendor. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the hardware vendor.

    -
    - - bb173058 - unsigned int VendorId - unsigned int VendorId -
    - - -

    The PCI ID of the hardware device. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the hardware device.

    -
    - - bb173058 - unsigned int DeviceId - unsigned int DeviceId -
    - - -

    The PCI ID of the sub system. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the sub system.

    -
    - - bb173058 - unsigned int SubSysId - unsigned int SubSysId -
    - - -

    The PCI ID of the revision number of the adapter. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the revision number of the adapter.

    -
    - - bb173058 - unsigned int Revision - unsigned int Revision -
    - - -

    The number of bytes of dedicated video memory that are not shared with the CPU.

    -
    - - bb173058 - SIZE_T DedicatedVideoMemory - SIZE_T DedicatedVideoMemory -
    - - -

    The number of bytes of dedicated system memory that are not shared with the CPU. This memory is allocated from available system memory at boot time.

    -
    - - bb173058 - SIZE_T DedicatedSystemMemory - SIZE_T DedicatedSystemMemory -
    - - -

    The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.

    -
    - - bb173058 - SIZE_T SharedSystemMemory - SIZE_T SharedSystemMemory -
    - - -

    A unique value that identifies the adapter. See for a definition of the structure. is defined in dxgi.h.

    -
    - - bb173058 - LUID AdapterLuid - LUID AdapterLuid -
    - - -

    Describes an adapter (or video card) using DXGI 1.1.

    -
    - -

    The structure provides a DXGI 1.1 description of an adapter. This structure is initialized by using the method.

    -
    - - ff471326 - DXGI_ADAPTER_DESC1 - DXGI_ADAPTER_DESC1 -
    - - -

    A string that contains the adapter description. On feature level 9 graphics hardware, GetDesc1 returns ?Software Adapter? for the description string.

    -
    - - ff471326 - wchar_t Description[128] - wchar_t Description -
    - - -

    The PCI ID of the hardware vendor. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID of the hardware vendor.

    -
    - - ff471326 - unsigned int VendorId - unsigned int VendorId -
    - - -

    The PCI ID of the hardware device. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID of the hardware device.

    -
    - - ff471326 - unsigned int DeviceId - unsigned int DeviceId -
    - - -

    The PCI ID of the sub system. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID of the sub system.

    -
    - - ff471326 - unsigned int SubSysId - unsigned int SubSysId -
    - - -

    The PCI ID of the revision number of the adapter. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID of the revision number of the adapter.

    -
    - - ff471326 - unsigned int Revision - unsigned int Revision -
    - - -

    The number of bytes of dedicated video memory that are not shared with the CPU.

    -
    - - ff471326 - SIZE_T DedicatedVideoMemory - SIZE_T DedicatedVideoMemory -
    - - -

    The number of bytes of dedicated system memory that are not shared with the CPU. This memory is allocated from available system memory at boot time.

    -
    - - ff471326 - SIZE_T DedicatedSystemMemory - SIZE_T DedicatedSystemMemory -
    - - -

    The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.

    -
    - - ff471326 - SIZE_T SharedSystemMemory - SIZE_T SharedSystemMemory -
    - - -

    A unique value that identifies the adapter. See for a definition of the structure. is defined in dxgi.h.

    -
    - - ff471326 - LUID AdapterLuid - LUID AdapterLuid -
    - - -

    A value of the enumerated type that describes the adapter type. The flag is reserved.

    -
    - - ff471326 - DXGI_ADAPTER_FLAG Flags - DXGI_ADAPTER_FLAG Flags -
    - - -

    Describes an adapter (or video card) that uses Microsoft DirectX Graphics Infrastructure (DXGI) 1.2.

    -
    - -

    The structure provides a DXGI 1.2 description of an adapter. This structure is initialized by using the method.

    -
    - - hh404493 - DXGI_ADAPTER_DESC2 - DXGI_ADAPTER_DESC2 -
    - - -

    A string that contains the adapter description.

    -
    - - hh404493 - wchar_t Description[128] - wchar_t Description -
    - - -

    The PCI ID of the hardware vendor.

    -
    - - hh404493 - unsigned int VendorId - unsigned int VendorId -
    - - -

    The PCI ID of the hardware device.

    -
    - - hh404493 - unsigned int DeviceId - unsigned int DeviceId -
    - - -

    The PCI ID of the sub system.

    -
    - - hh404493 - unsigned int SubSysId - unsigned int SubSysId -
    - - -

    The PCI ID of the revision number of the adapter.

    -
    - - hh404493 - unsigned int Revision - unsigned int Revision -
    - - -

    The number of bytes of dedicated video memory that are not shared with the CPU.

    -
    - - hh404493 - SIZE_T DedicatedVideoMemory - SIZE_T DedicatedVideoMemory -
    - - -

    The number of bytes of dedicated system memory that are not shared with the CPU. This memory is allocated from available system memory at boot time.

    -
    - - hh404493 - SIZE_T DedicatedSystemMemory - SIZE_T DedicatedSystemMemory -
    - - -

    The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.

    -
    - - hh404493 - SIZE_T SharedSystemMemory - SIZE_T SharedSystemMemory -
    - - -

    A unique value that identifies the adapter. See for a definition of the structure. is defined in dxgi.h.

    -
    - - hh404493 - LUID AdapterLuid - LUID AdapterLuid -
    - - -

    A value of the enumerated type that describes the adapter type. The flag is reserved.

    -
    - - hh404493 - DXGI_ADAPTER_FLAG Flags - DXGI_ADAPTER_FLAG Flags -
    - - -

    A value of the enumerated type that describes the granularity level at which the GPU can be preempted from performing its current graphics rendering task.

    -
    - - hh404493 - DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity - DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity -
    - - -

    A value of the enumerated type that describes the granularity level at which the GPU can be preempted from performing its current compute task.

    -
    - - hh404493 - DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity - DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity -
    - - -

    Describes an adapter (or video card) by using DXGI 1.0.

    -
    - -

    The structure provides a description of an adapter. This structure is initialized by using the method.

    -
    - - bb173058 - DXGI_ADAPTER_DESC3 - DXGI_ADAPTER_DESC3 -
    - - -

    A string that contains the adapter description. On feature level 9 graphics hardware, GetDesc returns ?Software Adapter? for the description string.

    -
    - - bb173058 - wchar_t Description[128] - wchar_t Description -
    - - -

    The PCI ID of the hardware vendor. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the hardware vendor.

    -
    - - bb173058 - unsigned int VendorId - unsigned int VendorId -
    - - -

    The PCI ID of the hardware device. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the hardware device.

    -
    - - bb173058 - unsigned int DeviceId - unsigned int DeviceId -
    - - -

    The PCI ID of the sub system. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the sub system.

    -
    - - bb173058 - unsigned int SubSysId - unsigned int SubSysId -
    - - -

    The PCI ID of the revision number of the adapter. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the revision number of the adapter.

    -
    - - bb173058 - unsigned int Revision - unsigned int Revision -
    - - -

    The number of bytes of dedicated video memory that are not shared with the CPU.

    -
    - - bb173058 - SIZE_T DedicatedVideoMemory - SIZE_T DedicatedVideoMemory -
    - - -

    The number of bytes of dedicated system memory that are not shared with the CPU. This memory is allocated from available system memory at boot time.

    -
    - - bb173058 - SIZE_T DedicatedSystemMemory - SIZE_T DedicatedSystemMemory -
    - - -

    The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.

    -
    - - bb173058 - SIZE_T SharedSystemMemory - SIZE_T SharedSystemMemory -
    - - -

    A unique value that identifies the adapter. See for a definition of the structure. is defined in dxgi.h.

    -
    - - bb173058 - LUID AdapterLuid - LUID AdapterLuid -
    - - - No documentation. - - - bb173058 - DXGI_ADAPTER_FLAG3 Flags - DXGI_ADAPTER_FLAG3 Flags - - - - No documentation. - - - bb173058 - DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity - DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity - - - - No documentation. - - - bb173058 - DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity - DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity - - - -

    Used with ::CreateDecodeSwapChainForCompositionSurfaceHandle to describe a decode swap chain.

    -
    - - dn384106 - DXGI_DECODE_SWAP_CHAIN_DESC - DXGI_DECODE_SWAP_CHAIN_DESC -
    - - - No documentation. - - - dn384106 - unsigned int Flags - unsigned int Flags - - - -

    Describes timing and presentation statistics for a frame.

    -
    - -

    You initialize the structure with the or method.

    You can only use for swap chains that either use the flip presentation model or draw in full-screen mode. You set the value in the SwapEffect member of the structure to specify that the swap chain uses the flip presentation model.

    The values in the PresentCount and PresentRefreshCount members indicate information about when a frame was presented on the display screen. You can use these values to determine whether a glitch occurred. The values in the SyncRefreshCount and SyncQPCTime members indicate timing information that you can use for audio and video synchronization or very precise animation. If the swap chain draws in full-screen mode, these values are based on when the computer booted. - If the swap chain draws in windowed mode, these values are based on when the swap chain is created.

    -
    - - bb173060 - DXGI_FRAME_STATISTICS - DXGI_FRAME_STATISTICS -
    - - -

    A value that represents the running total count of times that an image was presented to the monitor since the computer booted.

    Note??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called or . ?
    -
    - - bb173060 - unsigned int PresentCount - unsigned int PresentCount -
    - - -

    A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).

    -
    - - bb173060 - unsigned int PresentRefreshCount - unsigned int PresentRefreshCount -
    - - -

    A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling QueryPerformanceCounter and that have happened since the computer booted (for windowed mode, since the swap chain was created).

    -
    - - bb173060 - unsigned int SyncRefreshCount - unsigned int SyncRefreshCount -
    - - -

    A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the QueryPerformanceCounter function.

    -
    - - bb173060 - LARGE_INTEGER SyncQPCTime - LARGE_INTEGER SyncQPCTime -
    - - -

    Reserved. Always returns 0.

    -
    - - bb173060 - LARGE_INTEGER SyncGPUTime - LARGE_INTEGER SyncGPUTime -
    - - -

    Used to verify system approval for the app's custom present duration (custom refresh rate). Approval should be continuously verified on a frame-by-frame basis.

    -
    - -

    This structure is used with the GetFrameStatisticsMedia method.

    -
    - - dn384108 - DXGI_FRAME_STATISTICS_MEDIA - DXGI_FRAME_STATISTICS_MEDIA -
    - - -

    A value that represents the running total count of times that an image was presented to the monitor since the computer booted.

    Note??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called or . ?
    -
    - - dn384108 - unsigned int PresentCount - unsigned int PresentCount -
    - - -

    A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).

    -
    - - dn384108 - unsigned int PresentRefreshCount - unsigned int PresentRefreshCount -
    - - -

    A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling QueryPerformanceCounter and that have happened since the computer booted (for windowed mode, since the swap chain was created).

    -
    - - dn384108 - unsigned int SyncRefreshCount - unsigned int SyncRefreshCount -
    - - -

    A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the QueryPerformanceCounter function.

    -
    - - dn384108 - LARGE_INTEGER SyncQPCTime - LARGE_INTEGER SyncQPCTime -
    - - -

    Reserved. Always returns 0.

    -
    - - dn384108 - LARGE_INTEGER SyncGPUTime - LARGE_INTEGER SyncGPUTime -
    - - -

    A value indicating the composition presentation mode. This value is used to determine whether the app should continue to use the decode swap chain. See .

    -
    - - dn384108 - DXGI_FRAME_PRESENTATION_MODE CompositionMode - DXGI_FRAME_PRESENTATION_MODE CompositionMode -
    - - -

    If the system approves an app's custom present duration request, this field is set to the approved custom present duration.

    If the app's custom present duration request is not approved, this field is set to zero.

    -
    - - dn384108 - unsigned int ApprovedPresentDuration - unsigned int ApprovedPresentDuration -
    - - -

    Controls the settings of a gamma curve.

    -
    - -

    The structure is used by the method.

    For info about using gamma correction, see Using gamma correction.

    -
    - - bb173061 - DXGI_GAMMA_CONTROL - DXGI_GAMMA_CONTROL -
    - - -

    A structure with scalar values that are applied to rgb values before being sent to the gamma look up table.

    -
    - - bb173061 - DXGI_RGB Scale - DXGI_RGB Scale -
    - - -

    A structure with offset values that are applied to the rgb values before being sent to the gamma look up table.

    -
    - - bb173061 - DXGI_RGB Offset - DXGI_RGB Offset -
    - - -

    An array of structures that control the points of a gamma curve.

    -
    - - bb173061 - DXGI_RGB GammaCurve[1025] - DXGI_RGB GammaCurve -
    - - -

    Controls the gamma capabilities of an adapter.

    -
    - -

    To get a list of the capabilities for controlling gamma correction, call .

    For info about using gamma correction, see Using gamma correction.

    -
    - - bb173062 - DXGI_GAMMA_CONTROL_CAPABILITIES - DXGI_GAMMA_CONTROL_CAPABILITIES -
    - - -

    True if scaling and offset operations are supported during gamma correction; otherwise, false.

    -
    - - bb173062 - BOOL ScaleAndOffsetSupported - BOOL ScaleAndOffsetSupported -
    - - -

    A value describing the maximum range of the control-point positions.

    -
    - - bb173062 - float MaxConvertedValue - float MaxConvertedValue -
    - - -

    A value describing the minimum range of the control-point positions.

    -
    - - bb173062 - float MinConvertedValue - float MinConvertedValue -
    - - -

    A value describing the number of control points in the array.

    -
    - - bb173062 - unsigned int NumGammaControlPoints - unsigned int NumGammaControlPoints -
    - - -

    An array of values describing control points; the maximum length of control points is 1025.

    -
    - - bb173062 - float ControlPointPositions[1025] - float ControlPointPositions -
    - - -

    Describes the 10 bit display metadata, and is usually used for video. This is used to adjust the output to best match a display's capabilities.

    -
    - -

    The X and Y coordinates of the parameters mean the xy chromacity coordinate in the CIE1931 color space. The values are normalized to 50000, so to get a value between 0.0 and 1.0, divide by 50000.

    This structure is used in conjunction with the SetHDRMetaData method.

    -
    - - mt732700 - DXGI_HDR_METADATA_HDR10 - DXGI_HDR_METADATA_HDR10 -
    - - -

    The chromaticity coordinates of the 1.0 red value. Index 0 contains the X coordinate and index 1 contains the Y coordinate.

    -
    - - mt732700 - unsigned short RedPrimary[2] - unsigned short RedPrimary -
    - - -

    The chromaticity coordinates of the 1.0 green value. Index 0 contains the X coordinate and index 1 contains the Y coordinate.

    -
    - - mt732700 - unsigned short GreenPrimary[2] - unsigned short GreenPrimary -
    - - -

    The chromaticity coordinates of the 1.0 blue value. Index 0 contains the X coordinate and index 1 contains the Y coordinate.

    -
    - - mt732700 - unsigned short BluePrimary[2] - unsigned short BluePrimary -
    - - -

    The chromaticity coordinates of the white point. Index 0 contains the X coordinate and index 1 contains the Y coordinate.

    -
    - - mt732700 - unsigned short WhitePoint[2] - unsigned short WhitePoint -
    - - -

    The maximum number of nits of the display used to master the content. Units are 0.0001 nit, so if the value is 1 nit, the value should be 10,000.

    -
    - - mt732700 - unsigned int MaxMasteringLuminance - unsigned int MaxMasteringLuminance -
    - - -

    The minimum number of nits (in units of 0.00001 nit) of the display used to master the content.

    -
    - - mt732700 - unsigned int MinMasteringLuminance - unsigned int MinMasteringLuminance -
    - - -

    The maximum nit value (in units of 0.00001 nit) used anywhere in the content.

    -
    - - mt732700 - unsigned short MaxContentLightLevel - unsigned short MaxContentLightLevel -
    - - -

    The per-frame average of the maximum nit values (in units of 0.00001 nit).

    -
    - - mt732700 - unsigned short MaxFrameAverageLightLevel - unsigned short MaxFrameAverageLightLevel -
    - - -

    Describes a JPEG AC huffman table.

    -
    - - dn903662 - DXGI_JPEG_AC_HUFFMAN_TABLE - DXGI_JPEG_AC_HUFFMAN_TABLE -
    - - -

    The number of codes for each code length.

    -
    - - dn903662 - unsigned char CodeCounts[16] - unsigned char CodeCounts -
    - - -

    The Huffman code values, in order of increasing code length.

    -
    - - dn903662 - unsigned char CodeValues[162] - unsigned char CodeValues -
    - - -

    Describes a JPEG DC huffman table.

    -
    - - dn903663 - DXGI_JPEG_DC_HUFFMAN_TABLE - DXGI_JPEG_DC_HUFFMAN_TABLE -
    - - -

    The number of codes for each code length.

    -
    - - dn903663 - unsigned char CodeCounts[12] - unsigned char CodeCounts -
    - - -

    The Huffman code values, in order of increasing code length.

    -
    - - dn903663 - unsigned char CodeValues[12] - unsigned char CodeValues -
    - - -

    Describes a JPEG quantization table.

    -
    - - dn903664 - DXGI_JPEG_QUANTIZATION_TABLE - DXGI_JPEG_QUANTIZATION_TABLE -
    - - -

    An array of bytes containing the elements of the quantization table.

    -
    - - dn903664 - unsigned char Elements[64] - unsigned char Elements -
    - - -

    Describes a mapped rectangle that is used to access a surface.

    -
    - -

    The structure is initialized by the method.

    -
    - - bb173063 - DXGI_MAPPED_RECT - DXGI_MAPPED_RECT -
    - - -

    A value that describes the width, in bytes, of the surface.

    -
    - - bb173063 - int Pitch - int Pitch -
    - - -

    A reference to the image buffer of the surface.

    -
    - - bb173063 - unsigned char* pBits - unsigned char pBits -
    - - -

    Describes a display mode.

    -
    - -

    This structure is used by the GetDisplayModeList and FindClosestMatchingMode methods.

    The following format values are valid for display modes and when you create a bit-block transfer (bitblt) model swap chain. The valid values depend on the feature level that you are working with.

    • Feature level >= 9.1

      • (except 10.x on Windows?Vista)
      • (except 10.x on Windows?Vista)
    • Feature level >= 10.0

    • Feature level >= 11.0

    You can pass one of these format values to to determine if it is a valid format for displaying on screen. If returns in the bit field to which the pFormatSupport parameter points, the format is valid for displaying on screen.

    Starting with Windows?8 for a flip model swap chain (that is, a swap chain that has the value set in the SwapEffect member of ), you must set the Format member of to , , or .

    Because of the relaxed render target creation rules that Direct3D 11 has for back buffers, applications can create a render target view from a swap chain so they can use automatic color space conversion when they render the swap chain.

    -
    - - bb173064 - DXGI_MODE_DESC - DXGI_MODE_DESC -
    - - -

    A value that describes the resolution width. If you specify the width as zero when you call the method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the method to retrieve the assigned width value.

    -
    - - bb173064 - unsigned int Width - unsigned int Width -
    - - -

    A value describing the resolution height. If you specify the height as zero when you call the method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the method to retrieve the assigned height value.

    -
    - - bb173064 - unsigned int Height - unsigned int Height -
    - - -

    A structure describing the refresh rate in hertz

    -
    - - bb173064 - DXGI_RATIONAL RefreshRate - DXGI_RATIONAL RefreshRate -
    - - -

    A structure describing the display format.

    -
    - - bb173064 - DXGI_FORMAT Format - DXGI_FORMAT Format -
    - - -

    A member of the enumerated type describing the scanline drawing mode.

    -
    - - bb173064 - DXGI_MODE_SCANLINE_ORDER ScanlineOrdering - DXGI_MODE_SCANLINE_ORDER ScanlineOrdering -
    - - -

    A member of the enumerated type describing the scaling mode.

    -
    - - bb173064 - DXGI_MODE_SCALING Scaling - DXGI_MODE_SCALING Scaling -
    - - - Initializes a new instance of the structure. - - The width. - The height. - The refresh rate. - The format. - - - - Initializes a new instance of the struct. - - The format. - - - -

    Describes a display mode and whether the display mode supports stereo.

    -
    - -

    is identical to except that includes the Stereo member.

    This structure is used by the GetDisplayModeList1 and FindClosestMatchingMode1 methods.

    -
    - - hh404507 - DXGI_MODE_DESC1 - DXGI_MODE_DESC1 -
    - - -

    A value that describes the resolution width.

    -
    - - hh404507 - unsigned int Width - unsigned int Width -
    - - -

    A value that describes the resolution height.

    -
    - - hh404507 - unsigned int Height - unsigned int Height -
    - - -

    A structure that describes the refresh rate in hertz.

    -
    - - hh404507 - DXGI_RATIONAL RefreshRate - DXGI_RATIONAL RefreshRate -
    - - -

    A -typed value that describes the display format.

    -
    - - hh404507 - DXGI_FORMAT Format - DXGI_FORMAT Format -
    - - -

    A -typed value that describes the scan-line drawing mode.

    -
    - - hh404507 - DXGI_MODE_SCANLINE_ORDER ScanlineOrdering - DXGI_MODE_SCANLINE_ORDER ScanlineOrdering -
    - - -

    A -typed value that describes the scaling mode.

    -
    - - hh404507 - DXGI_MODE_SCALING Scaling - DXGI_MODE_SCALING Scaling -
    - - -

    Specifies whether the full-screen display mode is stereo. TRUE if stereo; otherwise, .

    -
    - - hh404507 - BOOL Stereo - BOOL Stereo -
    - - -

    Describes an output or physical connection between the adapter (video card) and a device.

    -
    - -

    The structure is initialized by the method.

    -
    - - bb173068 - DXGI_OUTPUT_DESC - DXGI_OUTPUT_DESC -
    - - -

    A string that contains the name of the output device.

    -
    - - bb173068 - wchar_t DeviceName[32] - wchar_t DeviceName -
    - - -

    A structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch (DPI) of the desktop. - For info about writing DPI-aware Win32 apps, see High DPI.

    -
    - - bb173068 - RECT DesktopCoordinates - RECT DesktopCoordinates -
    - - -

    True if the output is attached to the desktop; otherwise, false.

    -
    - - bb173068 - BOOL AttachedToDesktop - BOOL AttachedToDesktop -
    - - -

    A member of the enumerated type describing on how an image is rotated by the output.

    -
    - - bb173068 - DXGI_MODE_ROTATION Rotation - DXGI_MODE_ROTATION Rotation -
    - - -

    An handle that represents the display monitor. For more information, see and the Device Context.

    -
    - - bb173068 - HMONITOR Monitor - HMONITOR Monitor -
    - - -

    Describes an output or physical connection between the adapter (video card) and a device.

    -
    - -

    The structure is initialized by the method.

    -
    - - bb173068 - DXGI_OUTPUT_DESC1 - DXGI_OUTPUT_DESC1 -
    - - -

    A string that contains the name of the output device.

    -
    - - bb173068 - wchar_t DeviceName[32] - wchar_t DeviceName -
    - - -

    A structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch (DPI) of the desktop. - For info about writing DPI-aware Win32 apps, see High DPI.

    -
    - - bb173068 - RECT DesktopCoordinates - RECT DesktopCoordinates -
    - - -

    True if the output is attached to the desktop; otherwise, false.

    -
    - - bb173068 - BOOL AttachedToDesktop - BOOL AttachedToDesktop -
    - - -

    A member of the enumerated type describing on how an image is rotated by the output.

    -
    - - bb173068 - DXGI_MODE_ROTATION Rotation - DXGI_MODE_ROTATION Rotation -
    - - -

    An handle that represents the display monitor. For more information, see and the Device Context.

    -
    - - bb173068 - HMONITOR Monitor - HMONITOR Monitor -
    - - - No documentation. - - - bb173068 - unsigned int BitsPerColor - unsigned int BitsPerColor - - - - No documentation. - - - bb173068 - DXGI_COLOR_SPACE_TYPE ColorSpace - DXGI_COLOR_SPACE_TYPE ColorSpace - - - - No documentation. - - - bb173068 - float RedPrimary[2] - float RedPrimary - - - - No documentation. - - - bb173068 - float GreenPrimary[2] - float GreenPrimary - - - - No documentation. - - - bb173068 - float BluePrimary[2] - float BluePrimary - - - - No documentation. - - - bb173068 - float WhitePoint[2] - float WhitePoint - - - - No documentation. - - - bb173068 - float MinLuminance - float MinLuminance - - - - No documentation. - - - bb173068 - float MaxLuminance - float MaxLuminance - - - - No documentation. - - - bb173068 - float MaxFullFrameLuminance - float MaxFullFrameLuminance - - - -

    The structure describes the dimension of the output and the surface that contains the desktop image. The format of the desktop image is always .

    -
    - -

    This structure is used by GetDesc.

    -
    - - hh404510 - DXGI_OUTDUPL_DESC - DXGI_OUTDUPL_DESC -
    - - - No documentation. - - - hh404510 - DXGI_MODE_DESC ModeDesc - DXGI_MODE_DESC ModeDesc - - - - No documentation. - - - hh404510 - DXGI_MODE_ROTATION Rotation - DXGI_MODE_ROTATION Rotation - - - - No documentation. - - - hh404510 - BOOL DesktopImageInSystemMemory - BOOL DesktopImageInSystemMemory - - - -

    The structure describes the current desktop image.

    -
    - -

    A non-zero LastMouseUpdateTime indicates an update to either a mouse reference position or a mouse reference position and shape. That is, the mouse reference position is always valid for a non-zero LastMouseUpdateTime; however, the application must check the value of the PointerShapeBufferSize member to determine whether the shape was updated too.

    If only the reference was updated (that is, the desktop image was not updated), the AccumulatedFrames, TotalMetadataBufferSize, and LastPresentTime members are set to zero.

    An AccumulatedFrames value of one indicates that the application completed processing the last frame before a new desktop image was presented. If the AccumulatedFrames value is greater than one, more desktop image updates have occurred while the application processed the last desktop update. In this situation, the operating system accumulated the update regions. For more information about desktop updates, see Desktop Update Data.

    A non-zero TotalMetadataBufferSize indicates the total size of the buffers that are required to store all the desktop update metadata. An application cannot determine the size of each type of metadata. The application must call the , , or method to obtain information about each type of metadata.

    Note??To correct visual effects, an application must process the move region data before it processes the dirty rectangles.? -
    - - hh404512 - DXGI_OUTDUPL_FRAME_INFO - DXGI_OUTDUPL_FRAME_INFO -
    - - -

    The time stamp of the last update of the desktop image. The operating system calls the QueryPerformanceCounter function to obtain the value. A zero value indicates that the desktop image was not updated since an application last called the method to acquire the next frame of the desktop image.

    -
    - - hh404512 - LARGE_INTEGER LastPresentTime - LARGE_INTEGER LastPresentTime -
    - - -

    The time stamp of the last update to the mouse. The operating system calls the QueryPerformanceCounter function to obtain the value. A zero value indicates that the position or shape of the mouse was not updated since an application last called the method to acquire the next frame of the desktop image. The mouse position is always supplied for a mouse update. A new reference shape is indicated by a non-zero value in the PointerShapeBufferSize member.

    -
    - - hh404512 - LARGE_INTEGER LastMouseUpdateTime - LARGE_INTEGER LastMouseUpdateTime -
    - - -

    The number of frames that the operating system accumulated in the desktop image surface since the calling application processed the last desktop image. For more information about this number, see Remarks.

    -
    - - hh404512 - unsigned int AccumulatedFrames - unsigned int AccumulatedFrames -
    - - -

    Specifies whether the operating system accumulated updates by coalescing dirty regions. Therefore, the dirty regions might contain unmodified pixels. TRUE if dirty regions were accumulated; otherwise, .

    -
    - - hh404512 - BOOL RectsCoalesced - BOOL RectsCoalesced -
    - - -

    Specifies whether the desktop image might contain protected content that was already blacked out in the desktop image. TRUE if protected content was already blacked; otherwise, . The application can use this information to notify the remote user that some of the desktop content might be protected and therefore not visible.

    -
    - - hh404512 - BOOL ProtectedContentMaskedOut - BOOL ProtectedContentMaskedOut -
    - - -

    A structure that describes the most recent mouse position if the LastMouseUpdateTime member is a non-zero value; otherwise, this value is ignored. This value provides the coordinates of the location where the top-left-hand corner of the reference shape is drawn; this value is not the desktop position of the hot spot.

    -
    - - hh404512 - DXGI_OUTDUPL_POINTER_POSITION PointerPosition - DXGI_OUTDUPL_POINTER_POSITION PointerPosition -
    - - -

    Size in bytes of the buffers to store all the desktop update metadata for this frame. For more information about this size, see Remarks.

    -
    - - hh404512 - unsigned int TotalMetadataBufferSize - unsigned int TotalMetadataBufferSize -
    - - -

    Size in bytes of the buffer to hold the new pixel data for the mouse shape. For more information about this size, see Remarks.

    -
    - - hh404512 - unsigned int PointerShapeBufferSize - unsigned int PointerShapeBufferSize -
    - - -

    The structure describes the movement of a rectangle.

    -
    - -

    This structure is used by GetFrameMoveRects.

    -
    - - hh404514 - DXGI_OUTDUPL_MOVE_RECT - DXGI_OUTDUPL_MOVE_RECT -
    - - -

    The starting position of a rectangle.

    -
    - - hh404514 - POINT SourcePoint - POINT SourcePoint -
    - - -

    The target region to which to move a rectangle.

    -
    - - hh404514 - RECT DestinationRect - RECT DestinationRect -
    - - -

    The structure describes the position of the hardware cursor.

    -
    - -

    The Position member is valid only if the Visible member?s value is set to TRUE.

    -
    - - hh404516 - DXGI_OUTDUPL_POINTER_POSITION - DXGI_OUTDUPL_POINTER_POSITION -
    - - -

    The position of the hardware cursor relative to the top-left of the adapter output.

    -
    - - hh404516 - POINT Position - POINT Position -
    - - -

    Specifies whether the hardware cursor is visible. TRUE if visible; otherwise, . If the hardware cursor is not visible, the calling application does not display the cursor in the client.

    -
    - - hh404516 - BOOL Visible - BOOL Visible -
    - - -

    The structure describes information about the cursor shape.

    -
    - -

    An application draws the cursor shape with the top-left-hand corner drawn at the position that the Position member of the structure specifies; the application does not use the hot spot to draw the cursor shape.

    An application calls the method to retrieve cursor shape information in a structure.

    -
    - - hh404518 - DXGI_OUTDUPL_POINTER_SHAPE_INFO - DXGI_OUTDUPL_POINTER_SHAPE_INFO -
    - - -

    A -typed value that specifies the type of cursor shape.

    -
    - - hh404518 - unsigned int Type - unsigned int Type -
    - - -

    The width in pixels of the mouse cursor.

    -
    - - hh404518 - unsigned int Width - unsigned int Width -
    - - -

    The height in scan lines of the mouse cursor.

    -
    - - hh404518 - unsigned int Height - unsigned int Height -
    - - -

    The width in bytes of the mouse cursor.

    -
    - - hh404518 - unsigned int Pitch - unsigned int Pitch -
    - - -

    The position of the cursor's hot spot relative to its upper-left pixel. An application does not use the hot spot when it determines where to draw the cursor shape.

    -
    - - hh404518 - POINT HotSpot - POINT HotSpot -
    - - -

    Describes information about present that helps the operating system optimize presentation.

    -
    - -

    This structure is used by the Present1 method.

    The scroll rectangle and the list of dirty rectangles could overlap. In this situation, the dirty rectangles take priority. Applications can then have pieces of dynamic content on top of a scrolled area. For example, an application could scroll a page and play video at the same time.

    The following diagram and coordinates illustrate this example.

    DirtyRectsCount = 2 - pDirtyRects[ 0 ] = { 10, 30, 40, 50 } // Video - pDirtyRects[ 1 ] = { 0, 70, 50, 80 } // New line - *pScrollRect = { 0, 0, 50, 70 } - *pScrollOffset = { 0, -10 } -

    Parts of the previous frame and content that the application renders are combined to produce the final frame that the operating system presents on the display screen. Most of the window is scrolled from the previous frame. The application must update the video frame with the new chunk of content that appears due to scrolling.

    The dashed rectangle shows the scroll rectangle in the current frame. The scroll rectangle is specified by the pScrollRect member. - The arrow shows the scroll offset. The scroll offset is specified by the pScrollOffset member. - Filled rectangles show dirty rectangles that the application updated with new content. The filled rectangles are specified by the DirtyRectsCount and pDirtyRects members.

    The scroll rectangle and offset are not supported for the or present option. Dirty rectangles and scroll rectangle are not supported for multisampled swap chains.

    The actual implementation of composition and necessary bitblts is different for the bitblt model and the flip model. For more info about these models, see DXGI Flip Model.

    For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas.

    -
    - - hh404522 - DXGI_PRESENT_PARAMETERS - DXGI_PRESENT_PARAMETERS -
    - - -

    The number of updated rectangles that you update in the back buffer for the presented frame. The operating system uses this information to optimize presentation. You can set this member to 0 to indicate that you update the whole frame.

    -
    - - hh404522 - unsigned int DirtyRectsCount - unsigned int DirtyRectsCount -
    - - -

    A list of updated rectangles that you update in the back buffer for the presented frame. An application must update every single pixel in each rectangle that it reports to the runtime; the application cannot assume that the pixels are saved from the previous frame. For more information about updating dirty rectangles, see Remarks. You can set this member to null if DirtyRectsCount is 0. An application must not update any pixel outside of the dirty rectangles.

    -
    - - hh404522 - RECT* pDirtyRects - RECT pDirtyRects -
    - - -

    A reference to the scrolled rectangle. The scrolled rectangle is the rectangle of the previous frame from which the runtime bit-block transfers (bitblts) content. The runtime also uses the scrolled rectangle to optimize presentation in terminal server and indirect display scenarios.

    The scrolled rectangle also describes the destination rectangle, that is, the region on the current frame that is filled with scrolled content. You can set this member to null to indicate that no content is scrolled from the previous frame.

    -
    - - hh404522 - RECT* pScrollRect - RECT pScrollRect -
    - - -

    A reference to the offset of the scrolled area that goes from the source rectangle (of previous frame) to the destination rectangle (of current frame). You can set this member to null to indicate no offset.

    -
    - - hh404522 - POINT* pScrollOffset - POINT pScrollOffset -
    - - - A list of updated rectangles that you update in the back buffer for the presented frame. An application must update every single pixel in each rectangle that it reports to the runtime; the application cannot assume that the pixels are saved from the previous frame. For more information about updating dirty rectangles, see Remarks. You can set this member to null if DirtyRectsCount is 0. An application must not update any pixel outside of the dirty rectangles. - - RECT* pDirtyRects - - - - A reference to the scrolled rectangle. The scrolled rectangle is the rectangle of the previous frame from which the runtime bit-block transfers (bitblts) content. The runtime also uses the scrolled rectangle to optimize presentation in terminal server and indirect display scenarios. - The scrolled rectangle also describes the destination rectangle, that is, the region on the current frame that is filled with scrolled content. You can set this member to null to indicate that no content is scrolled from the previous frame. - - RECT* pScrollRect - - - - A reference to the offset of the scrolled area that goes from the source rectangle (of previous frame) to the destination rectangle (of current frame). You can set this member to null to indicate no offset. - - POINT* pScrollOffset - - - -

    Describes the current video memory budgeting parameters.

    -
    - -

    Use this structure with QueryVideoMemoryInfo.

    Refer to the remarks for .

    -
    - - dn933220 - DXGI_QUERY_VIDEO_MEMORY_INFO - DXGI_QUERY_VIDEO_MEMORY_INFO -
    - - -

    Specifies the OS-provided video memory budget, in bytes, that the application should target. If CurrentUsage is greater than Budget, the application may incur stuttering or performance penalties due to background activity by the OS to provide other applications with a fair usage of video memory.

    -
    - - dn933220 - unsigned longlong Budget - unsigned longlong Budget -
    - - -

    Specifies the application?s current video memory usage, in bytes.

    -
    - - dn933220 - unsigned longlong CurrentUsage - unsigned longlong CurrentUsage -
    - - -

    The amount of video memory, in bytes, that the application has available for reservation. To reserve this video memory, the application should call .

    -
    - - dn933220 - unsigned longlong AvailableForReservation - unsigned longlong AvailableForReservation -
    - - -

    The amount of video memory, in bytes, that is reserved by the application. The OS uses the reservation as a hint to determine the application?s minimum working set. Applications should attempt to ensure that their video memory usage can be trimmed to meet this requirement.

    -
    - - dn933220 - unsigned longlong CurrentReservation - unsigned longlong CurrentReservation -
    - - -

    Represents a rational number.

    -
    - -

    This structure is a member of the structure.

    The structure operates under the following rules:

    • 0/0 is legal and will be interpreted as 0/1.
    • 0/anything is interpreted as zero.
    • If you are representing a whole number, the denominator should be 1.
    -
    - - bb173069 - DXGI_RATIONAL - DXGI_RATIONAL -
    - - -

    An unsigned integer value representing the top of the rational number.

    -
    - - bb173069 - unsigned int Numerator - unsigned int Numerator -
    - - -

    An unsigned integer value representing the bottom of the rational number.

    -
    - - bb173069 - unsigned int Denominator - unsigned int Denominator -
    - - - An empty rational that can be used for comparisons. - - - - - Initializes a new instance of the structure. - - The numerator of the rational pair. - The denominator of the rational pair. - - - -

    Describes multi-sampling parameters for a resource.

    -
    - -

    This structure is a member of the structure.

    The default sampler mode, with no anti-aliasing, has a count of 1 and a quality level of 0.

    If multi-sample antialiasing is being used, all bound render targets and depth buffers must have the same sample counts and quality levels.

    Differences between Direct3D 10.0 and Direct3D 10.1 and between Direct3D 10.0 and Direct3D 11:

    Direct3D 10.1 has defined two standard quality levels: D3D10_STANDARD_MULTISAMPLE_PATTERN and D3D10_CENTER_MULTISAMPLE_PATTERN in the D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS enumeration in D3D10_1.h.

    Direct3D 11 has defined two standard quality levels: and in the enumeration in D3D11.h.

    ?

    -
    - - bb173072 - DXGI_SAMPLE_DESC - DXGI_SAMPLE_DESC -
    - - -

    The number of multisamples per pixel.

    -
    - - bb173072 - unsigned int Count - unsigned int Count -
    - - -

    The image quality level. The higher the quality, the lower the performance. The valid range is between zero and one less than the level returned by ID3D10Device::CheckMultisampleQualityLevels for Direct3D 10 or for Direct3D 11.

    For Direct3D 10.1 and Direct3D 11, you can use two special quality level values. For more information about these quality level values, see Remarks.

    -
    - - bb173072 - unsigned int Quality - unsigned int Quality -
    - - - Initializes a new instance of the structure. - - The sample count. - The sample quality. - - - -

    Represents a handle to a shared resource.

    -
    - -

    To create a shared surface, pass a shared-resource handle into the method.

    -
    - - bb173073 - DXGI_SHARED_RESOURCE - DXGI_SHARED_RESOURCE -
    - - -

    A handle to a shared resource.

    -
    - - bb173073 - void* Handle - void Handle -
    - - -

    Describes a surface.

    -
    - -

    This structure is used by the GetDesc and CreateSurface methods.

    -
    - - bb173074 - DXGI_SURFACE_DESC - DXGI_SURFACE_DESC -
    - - -

    A value describing the surface width.

    -
    - - bb173074 - unsigned int Width - unsigned int Width -
    - - -

    A value describing the surface height.

    -
    - - bb173074 - unsigned int Height - unsigned int Height -
    - - -

    A member of the enumerated type that describes the surface format.

    -
    - - bb173074 - DXGI_FORMAT Format - DXGI_FORMAT Format -
    - - -

    A member of the structure that describes multi-sampling parameters for the surface.

    -
    - - bb173074 - DXGI_SAMPLE_DESC SampleDesc - DXGI_SAMPLE_DESC SampleDesc -
    - - -

    Describes a swap chain.

    -
    - -

    This structure is used by the GetDesc and CreateSwapChain methods.

    In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.

    If you create a swap chain with one buffer, specifying does not cause the contents of the single buffer to be swapped with the front buffer.

    For performance information about flipping swap-chain buffers in full-screen application, see Full-Screen Application Performance Hints.

    -
    - - bb173075 - DXGI_SWAP_CHAIN_DESC - DXGI_SWAP_CHAIN_DESC -
    - - -

    A structure that describes the backbuffer display mode.

    -
    - - bb173075 - DXGI_MODE_DESC BufferDesc - DXGI_MODE_DESC BufferDesc -
    - - -

    A structure that describes multi-sampling parameters.

    -
    - - bb173075 - DXGI_SAMPLE_DESC SampleDesc - DXGI_SAMPLE_DESC SampleDesc -
    - - -

    A member of the DXGI_USAGE enumerated type that describes the surface usage and CPU access options for the back buffer. The back buffer can be used for shader input or render-target output.

    -
    - - bb173075 - DXGI_USAGE_ENUM BufferUsage - DXGI_USAGE_ENUM BufferUsage -
    - - -

    A value that describes the number of buffers in the swap chain. When you call to create a full-screen swap chain, you typically include the front buffer in this value. For more information about swap-chain buffers, see Remarks.

    -
    - - bb173075 - unsigned int BufferCount - unsigned int BufferCount -
    - - -

    An handle to the output window. This member must not be null.

    -
    - - bb173075 - HWND OutputWindow - HWND OutputWindow -
    - - -

    A Boolean value that specifies whether the output is in windowed mode. TRUE if the output is in windowed mode; otherwise, .

    We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through ; that is, do not set this member to to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes through the BufferDesc member because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything.

    For more information about choosing windowed verses full screen, see .

    -
    - - bb173075 - BOOL Windowed - BOOL Windowed -
    - - -

    A member of the enumerated type that describes options for handling the contents of the presentation buffer after presenting a surface.

    -
    - - bb173075 - DXGI_SWAP_EFFECT SwapEffect - DXGI_SWAP_EFFECT SwapEffect -
    - - -

    A member of the enumerated type that describes options for swap-chain behavior.

    -
    - - bb173075 - DXGI_SWAP_CHAIN_FLAG Flags - DXGI_SWAP_CHAIN_FLAG Flags -
    - - -

    Describes a swap chain.

    -
    - -

    This structure is used by the CreateSwapChainForHwnd, CreateSwapChainForCoreWindow, CreateSwapChainForComposition, CreateSwapChainForCompositionSurfaceHandle, and GetDesc1 methods.

    Note??You cannot cast a to a and vice versa. An application must explicitly use the method to retrieve the newer version of the swap-chain description structure.?

    In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.

    For a flip-model swap chain (that is, a swap chain that has the value set in the SwapEffect member), you must set the Format member to , , or ; you must set the Count member of the structure that the SampleDesc member specifies to one and the Quality member of to zero because multiple sample antialiasing (MSAA) is not supported; you must set the BufferCount member to from two to sixteen. For more info about flip-model swap chain, see DXGI Flip Model.

    -
    - - hh404528 - DXGI_SWAP_CHAIN_DESC1 - DXGI_SWAP_CHAIN_DESC1 -
    - - -

    A value that describes the resolution width. If you specify the width as zero when you call the method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the method to retrieve the assigned width value. You cannot specify the width as zero when you call the method.

    -
    - - hh404528 - unsigned int Width - unsigned int Width -
    - - -

    A value that describes the resolution height. If you specify the height as zero when you call the method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the method to retrieve the assigned height value. You cannot specify the height as zero when you call the method.

    -
    - - hh404528 - unsigned int Height - unsigned int Height -
    - - -

    A structure that describes the display format.

    -
    - - hh404528 - DXGI_FORMAT Format - DXGI_FORMAT Format -
    - - -

    Specifies whether the full-screen display mode or the swap-chain back buffer is stereo. TRUE if stereo; otherwise, . If you specify stereo, you must also specify a flip-model swap chain (that is, a swap chain that has the value set in the SwapEffect member).

    -
    - - hh404528 - BOOL Stereo - BOOL Stereo -
    - - -

    A structure that describes multi-sampling parameters. This member is valid only with bit-block transfer (bitblt) model swap chains.

    -
    - - hh404528 - DXGI_SAMPLE_DESC SampleDesc - DXGI_SAMPLE_DESC SampleDesc -
    - - -

    A DXGI_USAGE-typed value that describes the surface usage and CPU access options for the back buffer. The back buffer can be used for shader input or render-target output.

    -
    - - hh404528 - DXGI_USAGE_ENUM BufferUsage - DXGI_USAGE_ENUM BufferUsage -
    - - -

    A value that describes the number of buffers in the swap chain. When you create a full-screen swap chain, you typically include the front buffer in this value.

    -
    - - hh404528 - unsigned int BufferCount - unsigned int BufferCount -
    - - -

    A -typed value that identifies resize behavior if the size of the back buffer is not equal to the target output.

    -
    - - hh404528 - DXGI_SCALING Scaling - DXGI_SCALING Scaling -
    - - -

    A -typed value that describes the presentation model that is used by the swap chain and options for handling the contents of the presentation buffer after presenting a surface. You must specify the value when you call the method because this method supports only flip presentation model.

    -
    - - hh404528 - DXGI_SWAP_EFFECT SwapEffect - DXGI_SWAP_EFFECT SwapEffect -
    - - -

    A -typed value that identifies the transparency behavior of the swap-chain back buffer.

    -
    - - hh404528 - DXGI_ALPHA_MODE AlphaMode - DXGI_ALPHA_MODE AlphaMode -
    - - -

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    -
    - - hh404528 - DXGI_SWAP_CHAIN_FLAG Flags - DXGI_SWAP_CHAIN_FLAG Flags -
    - - -

    Describes full-screen mode for a swap chain.

    -
    - -

    This structure is used by the CreateSwapChainForHwnd and GetFullscreenDesc methods.

    -
    - - hh404531 - DXGI_SWAP_CHAIN_FULLSCREEN_DESC - DXGI_SWAP_CHAIN_FULLSCREEN_DESC -
    - - -

    A structure that describes the refresh rate in hertz.

    -
    - - hh404531 - DXGI_RATIONAL RefreshRate - DXGI_RATIONAL RefreshRate -
    - - -

    A member of the enumerated type that describes the scan-line drawing mode.

    -
    - - hh404531 - DXGI_MODE_SCANLINE_ORDER ScanlineOrdering - DXGI_MODE_SCANLINE_ORDER ScanlineOrdering -
    - - -

    A member of the enumerated type that describes the scaling mode.

    -
    - - hh404531 - DXGI_MODE_SCALING Scaling - DXGI_MODE_SCALING Scaling -
    - - -

    A Boolean value that specifies whether the swap chain is in windowed mode. TRUE if the swap chain is in windowed mode; otherwise, .

    -
    - - hh404531 - BOOL Windowed - BOOL Windowed -
    - - - Internal class used to initialize this assembly. - - - - - Initializes this assembly. - - - This method is called when the assembly is loaded. - - - - - The namespace provides a managed DXGI API. - - hh404534 - DXGI - DXGI - - - - Internal VirtualSurfaceUpdatesCallbackNative Callback - - - - - Get a native callback pointer from a managed callback. - - The geometry sink. - A pointer to the unmanaged geometry sink counterpart - -
    -
    diff --git a/Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.Direct2D1.dll b/Tractor_VS/Game1/bin/Windows/x86/Debug/SharpDX.Direct2D1.dll deleted file mode 100644 index 52efbec5dc0d209fd2756460b0cc6eb23d53a5b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 507904 zcmc${2b^71wLgC5+&bsZ+{vAp+*C3XAmK1G2_Z-cHH0pNE`}gd1B5m>13YE8F&4xY zqGH94B3Q6t!HQkchff{F9%3)}tWSMDH2HtOyPb8~y_0~y|9p~r&fa_Nwbx#I?X}ll zyPUP_U*;7&&nx2p&YhljKc4(st$y48Y({c@=;L+oL){N8zQ5~~hZdiG#m33u>n6r8 zpSb9n;Y%*M_S*65hcDhRJaNOd!yB(1KK8V;hOZgFbi?xA-e7No`t;*G@06~B_k+8Z zooh?m?)i&rT~*KfNX7H;;NPdegZE+eil5c`-Pd$8mh`K?VPru3m8~l3wfYv%o2C9m zPZKoY*8%UzeBTcIWfK{DRJ|UAfAsB&w=fppAu#MnSAbQ7PZU{}U%%m**CYIe51V?i zuAp1~4SU{&%O@r$E@32TvozihSn;e`5`C>Mg~@Nc`r236J4Hn-6W(f z*c^0u#R>4;1Zxbw$_0BEe8dHN8Qiza0@oRwbiqCbKjnh67_9gfxWV8VF4&LYh@|aV zmbTYBm;q+_g$oWcxL?5{oXy~~T(HUD=Us3PgS|xyJeR?zy5Kwp-|B+%5gbAJk{-va zM;+J#<~p!saV})=*)F&TgAcmkA_fP_7I=uk^IdS5!Mj~>F@t|{!95u~tYY)-g&^9m zz#inG=^C4EMvUL@jia*#OUpG01^L!Mj~>4TFDj!DARatYPyW z%it|8cpQWO<$}jEIIrIVpTOWHE_fn?_qyOo4F25(pUmLV12*r;48Ft#Phs#oF1VJ# zp+O6LDuWwc@H7VRbHURY{Fe)!!QctAZQe5(e7Osr#o!NJ@N5Q`G%fH`7#w%Oa~S-X z3qF;>!W;{{j={AqcrJslal!Qr{=@~(V{mk?&HFS4Z*al$8GOJ6pUz3w#ZO7r5ZH48GF^#~J*K3tq?I5sPfzXE1oH3u5pp zPJGh^G5!=M77SV7>lxhOf;TYuJ{P=^!GE~me=vB=u+95S2DiB2vl#rY3*N-w;>8wt z3c*RJ+F;2h)@JC$aVSp&*n@^vm;hyBXtfEj&4)r0psJj2-YMS0o1wo=n4EQhl)<54 zlR`Oh$f?(cW|z}B9fbm$OM@(KoQTTrLE{8Sn)KUK3MfL+s(&XL7| zu}eEJioe4~_2u%g%efQ|n2QWG>=Tj?9EluqDhMY796DS{94TBSs40f7GYF|CBtmKi zhl69YEqN60R;)SR+eYU&>L}p2A+fPXyP~Mg9Yxf~j-sUqSmtvCbWkAzmH_G<*D4%T z9fLSL$x^A3913b67vPZL0vx9u4r*~zjmKKu;ASb_1~0*c{M9Ogm76!vs5n+Q{h!|a9RiAy4wXA`Cthj|fU9*kf% z6Q(B)^9RE0vzIIDIfUtr!yJd?iKz(YxrA9Ahj|TQrX!f=5$5PP%wGw!YHwH8^9i#i z4s!{TCtef5+(MXR;xHc|%r7FC7ZB#yILuDM9Ja)jbt_?xi^H6c*WTM6^C2<9b(IXw=u-#&o320unNUP_oV;xI2K z%ya~^g)nEvVICvQfuX~58(}Vt!#oAa6VHiYwi4!|ILz&Y`D_I9GQwOOhxra+y7zTu zy__(Y#9{VA^29|E%qs|UT^!~X!h9lvxt%c2h{JrBFx?}rtXC3dA`Y_{$rEQpFs~xa zWE|#l!rUFfyqYkZ<1h~qX7;En>otUVP8{YKBv0HL!Mv6*FOI`}fG~fFU|vU-FVIGQL-bk3OahS&l zbHH+k=S_rpSsdmJBv0HP!MvF;FOS1~f-r^s9GB_o?F!eahF-V@cA%b})VY=dFZ6VAT zBbav)rWl9$8DV-4aAm!lFr|1|dmwq@j0omEglYOQny(_vTO*iz0YksZo_-njL*@w2SrPu3YfIHF+s4a~rbigyNJ;h1VD=)j)>Tu=!6@LTNnw(IcPMbkSL z0%*bdb!+#93!|ZUTq}zbs^v*|O3R~NgZ*70{38Kr;23-~o<(Fan8&Jx@dlDdOFA

    cx7=AIHE(X8k~<)yvCj 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�|s`w3`sma-n}FVH*eGvo)ZFyV1aHHgL4@L7Vp< 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

    }a0Pc+dVnLrvTR7Zo zUCa8)nv7X;!R3u)-!|^};x2OkuP6gv9Re&5rn4MXD4-^Aw%ggw-zP))GeY1YlEoi| zh-mx&3|G)abQgrBk8$) zPoAIHgQq5*{5G)R#SK2Shd9BfcjHNH2A|!N=bgLpJc%*y8t<73jsraW?0B@82DlUO z=>3=Mk`=pNepx-_K8Vdd;MV@XN*j8$skZ+wY(P&#+*-t#!b8->)WVlcB;E_L`3W}l zze%J_?LugM7%8)bU{jd8r7$gUQcd{z-N5gf2tS_TzrezSX_oMy4IZz#1%3W6$SmVy zi>L@UZEB8v4FTC%zE1NDsO4a?52uJNaS{4e19b#S7w$$(g^Y}p|Av%(Z1r~iKf&g3 z?--*)F~;x%H`*JRst+Y7&TlfZf3R4Yr;mAgZ2)f|&VI#E=xVZBhAYgH+Bg=XyKxlR zm=x^k$-IxIH%nnWwa|@=G3N@U>T_+U?7J*3`}q67)A+-+bLFxuh=q?aGS?+!al&fc zgZjp-;=ct0KG@DUhB z-hC6xf*)Q&0T6rap5b_PysiU>-(q-N)acHYTcE=S=uV59vUvDyx;r!g1c_Ampa3)k z@9Pa85&*6bpeZH98qTvQv{M-Zfn-rC3*qpd|VzaI9`T9TDWJ$ z#2%AM2@vnQz$>V-0gwvQJ1R;~8oM8_$S?$Nr-q%S4S3x&>?~-|fITc}F2Xejv`!S$u3O}-^eqDz*2IiU?!9fw(R!;yn6sAV-NB{{H zU>r6`t#g8BQMi$ifny&WB%sgF#D}r$4Wwfe$7C@)F0Ki|xF%1AXr@tHT|Esl;%r5THr!*PpbEP|4i zcE!<=mQFpi$W00QI$SYUq$C%(n9m9i50K%xAe0Sn1hItK;5Dd7ZMlgRhh`=hm{=De zR{B!^CW!y*XxS{5@#)M#I=0`5FX<^~%|hE=C$b(C;+{`F6DhH9l1Nrc+ZmX&_dU?k z^{;~VaJ=nR(OxE|y^PXcL~t%d3PW&)nlig1ri@(j)j|i_3>qUN#5x%zX~c}sZYv#W zocgROu4x@Z@gwT7Zl$zjZN>!uB&ln{CJ{EO=_N>n_mm+K0&9UJlJsw(=#%Y9DRz%J z?=i&=541inLF?@;M9YFCNIk2R?v1B((_Kyf7*FX+_7SBY0h$#?&?I%~{SmDjnqUO{}>9tyy<;ZIG zIy~WvVR)SuWKyD2hNY}Wxt4OPR#qkKOBf^*c2Bu#`>({<@n-2iDL>CKsM%ZcPOvv1DwyP?{P{}3 z3Hkx-FX6_DBD55P>GE^!HQZBE-trvwm_LUta_PnY0;0n8Ho*}PLwTQ6wf(i&<&SqB ztGOY(YbFQ~W{o$_$lCf(bb>*ox^DQ4N?|e1BUrdlE!ZCrc`@<_yQVYk5zJ#U_32%0 z#mpF9lub!8ejUT9qy^nkFVZ8|V|x1{wh1^qe1=!bc4duUF|%PAqAQ&ap8>d*A%Y7V z96qC%P5aoM;Fh3{CIb>-u3vE?0$o3rIRH1pQ)a_qaiRus69g<1#z%=gol^_B!pN<%|`L_S{17LyWm8Qn%C z=$;m0tz|p1xf(wc) zArs`f>6;^GfZTF|whM&HGWEF#p#&3$Fw~2H^jIOIv%D=|QX(y>bP2IuElW9T>q=z@ zvqoC4WsK#55I0TXs+Ej*F*Wg`<$@5mC&5eQ`)JgL#LXBZX({6{?+%hMj1djx2*aod zL+CIs6G|=S`xUV`TEZHq5mB)^H)+9&=@C=5$%$o1)yU6K9z_o9wNK zOY>%QdBx(S{H>G$gY#M$oQ7l%^h#aXdQVqZ#N>*~N2GUy$tB=P=9j5g;YDQhpI9_e z$ODw3SAZcWy(Ok$k6m3|sje=67bhl7{#Ys%O9>WPEVb}RlYyCkPGDy;i!)*N$RiW! zM1|fnk4z*QMc56GoH*(1-jgI=>{d~H!lZL*ORVvt_*5Z~NEAP%SSofYYwl9kY|1N* z7ftAs1&^oBt*knlkDfg~K_N={M5(-T(tPiFLh=;QV;TgV$}mujhXI_RFLe}gB437q zr~l4j0N2s#v{vNJq`Xl;V*jto8^=-;@;~y%c$s96ed+&jdE+=V`TwT8(HF@ZPeI;z ztC2TIlhRTCzmPX_DgSdKZ{)i2dyqHsuU6j3|Bt*esigFOmArwYh9YkWb5nT(%==Z# z8@P`3f8-6!a1zs}buC)&glrH6;*<%2C>EJn*{hK_;$&r7mPj@lb0>%#CXfG-IifX+ z|CY=lL%~xmGRHmU#N7<1j?K$lU*qOwS!a_Q=(=_3%`7Q$y@_WDxPLI-6@|eeg%^Ob zvn))QI_+9ERb4V%y?<4wjlEJogpw%SK_x&rd=iFkH6*}o%mxwZ?xobi-`ltVl*0{V zpp}(H30R7k*^2qKWBm^KzYXKvbcdUMet;150t7KyZeBaTZ2<7i zhhk+LyG4vQE+3( z(>=qqRffgR5Ons4vo~_8Z(ro>72j!*QvzeN3}n6ZbOLc@qw6gEFm(=I$dcN9sDllq zQTRi+WUVx9-HaBz0rkccl_}X0hUL=xPQ*IiZ)CYtaD}a4P7ihwflP>JtRoVG{t_S` z&!UL~d!tAcdX3_@IdwXo&+IJ5g`!p&`=C$?k9SB)lPvJW;H6kB32tq~?WZ z;+}RXSipN-%h(jyhZRLE{O87=L8$APOEI%+I?Z7Kf7}H2URj@?QCnA3;H6x(wQ8 z8g#DPQ0cd$Z5-K5=&Z=4>+93a#qi(+tls8pN8o0QcS3@a#oT0VG38)w6@*43uFHm| z%WmJwo{^0O4?4W1Xh)>61!)X^VdoITBUBRf$V*@;HAqc5hcK@89QY2*!A6cQWGGb6*eJkT3i5n}Ym7{r9d z4<}?i@k59ZNB)z39fc6b{tW~R$T_5CqUK@kP&Jm!JX^sW=geToQb&bI4^JpZ?9G!p z!xM@Ud&fl~Brb}0OHow9HAQKHRexrRLZn4SQGDPLttLuh?-(WUZek_&j*CJ_Tom!1 zh?OQ-MQc+Owpmn^7%MHMi9;k2(^8-~L|h<3;sS~HMBF67aWjDgF^)LaBVaiECFsMM zKrj=iB$K3)^aLu=C8P;dqH9VMsbtt>7&m>&WEcZFq6`VaE>vsI6^ zH*h_{8ROT-BbIWi;1_Vn_~lw3M|XlI~Grcf5_#CE<7ov zE~)@=)D51e(Q~OfJ-ifx@{W;PgfRRsyTsug>7`G)7db>%M!H2`; z2%ou~g>!?`k$Jrm6~hf)2lv=92v8YbP%n9h*Vg z&cO{!mh}#{ouK*VwHpscZjBK{fK)-uL)fbIdYRi;zjik}M$Be|l?b4_o*^JUFNyw= ziSqo3Sdh!}1iXN&G&|4)^;tG-Qz)fvAd&d{p)7-4qeq{FiYyg5$50O*PiI6V@KThb zSOEA{1Q3hxnr@UITUfC77&iz3srrf+*GxQ-DU<%xakToUEbRBTu=Azpj4eUM1`D_~ z9-8CpE(G@)F!~l>mH_kOQK&#|s0)p02uyf8QMB7dy#X|p1$4dNUW3b-!cWlI*qV{jUtU9SH`sN`c0fJpztXJk~#n-zVj6iJpZhbiT`i=1MPXZ5Ko zhB96QaT!uqD`jQQTh!6w&PQ8Q6|GDDEDLXG9C&9csf_4{ykX&KdRE{L)D&_s=#UiK zpRcDWjA9WtSIa^aeIC^JTy83)SPgLV+R6&NU2+7jS|6^QS4yKPfEk7w8J7O$>gz1Prc;RyVYpCBBaH=L&P*Ljr>34>9!R;wu}SGz22TPQf5q_W-T8{? zKZ7W@%*%M!pwRRzdyE7=b*OXn4iL9)(vye$)MJ3BE5>Z>o`9IY|H)B5)?K6ZZZ(~G z`O&vD{q*LXfm`Evxl_i)%a2|XgLpEg4e8@#3=W&oR^A#s2pYgX|H1&$vLnlLhLH0)b6Az&Ni-6I45)H~~(zg2f4Nx)m%=m80VQ9=eymZ}W@b1|i$i zG@#vh05#mEu1brmr^VG9x%>lC*u}^anL}bM1!g>w>%+Ex8q&k|l7Gfb4XS}7=t}vA z(n$Nu)Hs+%B_sh$A4pm6M<3uXI&%=nMV*qy#4_XU>cvbU_%^;#(VfafV2{%?5!mbW zwg4SLwpPdy42M!9N6@O(l5qkHKk^%$a;mkyuiQ8txo>h&htUH7C{I&>N5FXuVE`Ed zKEx0e4UuKFanAU4h>w$Y8**@Smc<8uDEspMDb>@+*{(Uzyntn~&6;P%=)$o18`~cy zCXAK`Vpg1(?enpFBq?d$3v-L`Mg};D#~*pr<^jz3qMi)qa~6i=@|N!c7(B&fCDY1Q z<5L;$(-ZmhjQ8n{e0rNcJkmoN(P!GuMpii0qmFanNN#F(8>;{bSyX$BUk>FnX`)Mn zQsGdX09RYV;skhBD_EQW&u#^a6W}?mU~vNcnpUtl0p6<>EKY#?TfyQ4cy23LoB;3L z3Kl28ek)j<0PoWZ7AL?1tzdBiTx$i36X1F)SeyV4wt~gE6Sukp{0hU%H$m0WhJ4xe z&*8lSPxiMXsRv^aGKu;Y_@F0Uqz$WUrVFx2Wm9bxLS=X)VNHI zF*Pnw<2*GkQUiy3UFB2$RZZ&~)pH$;ftziABb^b;63W8yVNw#96stq|!nS^(#f{4A zBzP1~xFVRwbc7@|x+8QLlKOB~lGGOR13O79;>kwtvVE>}>RqAK2N_p)~hXqi;OjT3@L&t_3DG%>#V& zvjmhCurC2G0f4h25`qUR$ig-efnZ?^;P#i1g^d`sG3P!_RT_=W9XOh^xJ4LO%g!#@Y^IygxsTmyG4!;^xv zG4|zg?DGudN3% ztzdBid{8S`oB+SJ6)aAG4{imEb0_Y#2KW_t<}s|0Im8t6OcU?NO}~g|E;}O%E<6*M zke}h1J^tH?3f%EVL#JKupta&}QIB^uJ>H`p?}afiYWp9cGiG|kCAb|6qHSke7q#Zq z%I_Fn8UTERm<{=XoyZUQft{!g`GKAI4EcebNDTRbotO&+eGiZRGwNDtd=TZ@bO^ws zgJ)Xnd(?d>-B-h1R`(LP$$+-9GGIVU;r2mnEez-*TEmC|#bFEsBL7(qhVw4rKlD9_ z>m1}ik5Df1Z$SJ)MvgRbGbX8(6kMC$W%Y!YgUV}NT~@E!z<4TRBjb4|A}ZSo5Q>nS zW5{|yoZx)OX6;#dcYw*VGq6+ekH?Mjwel=$6JErqbW4%@#8*2)la>iGWDf^!$O3VIjYHU~I6EtKV=zogVKL4}oaVHIBLwC_y@xP!RUxG1! z$>F_p#!QFEgrvpxg2DEI!S(?N>f;XfDu z+M-!Mf-x}bz4E<9zC7YIFzcQ2eT#hGEZmhlsCExji+opR8l;jkq>@Bxqub+zKi7Pdlc}cgXUeq9S=q%22N zIk<3_dOA_d!A^Btz~o@3)-7O~uv57fFk#pqr=6+8PE}dJEMVV3yJQ2VbT(V@M0<<{ z4UAe!VDLL<5`;{9AO*H0)Y{CW@^1k(Z56vmEj_F4KDG6&wr8qs z=4$f#yyT8dk{{jK+J>;3#Nr1ITo*d_a;U528I1S(7*0Wd< zEP?yst=2PnVY@z#j-xTS3$6_dnfGC`($!|}g7bDw-A-ofZFm4+H~a!U)zK4vvFS*M z8=DSXT6C?raK(U_Uib|$tFyuf#nKZ#BqpwiE|L*HEG|PykHAs%3U)^>+y+Y3%j4R! z0h*@9yDWn5AOKGS1z>r#QqC^sikVE~yMTrtLxi1s6?1j3nA2??#VqXRYF-?$@DLvy zGxsxljA8Y8Kx`a}ZYt)hvQHo-y_*=@Xm&6&JQQ0@%foaqc*~vN#gh-kRQMGn(%~KW zCNu~RYV)qnT(+xVZqO^ZdRcM7T%HG0F3-buoiRM*YAyw(3pd-C>xv7WUJY6>PY4#G zYxD|oM`$T;XN&p9v#e|b3m~`_FON#)wNe~I+V&%L{?_XHn~37DKWFXj=^c5t^^A3J zDYE~#t@Af(=lw$1VYa7xdj(y%!wB{DpTl4ny_nvPN7ECpVpD6eC;qAo6 z9L#-|;M}_ZQxsZVX}Eq)7xp3WHf1c=^FpFbDqZ&HqLkr10?dTlVRqoAthNDttyEZr z|L?3l@XuUmG8@dRGuCY2=_T%4jPKQj()&pCKmf4jPEO-5hg0R4jJ1CpzKm@#@HfGy z*m8eGeF|<{am7QU8Ghv-l}Lkm-a=lc7eze@4(B2JDC08hE#bi;CWbHL?V@H3x?1AA zntC10G98KnYfb!P;xf82Dx4r?q-e?_x-8bQ48r@__ClHH&x=LCnxnf%aEE;qT8bp$ z`8Gxk;oob*SK0h>SBc}_0ouXkQvM&&K>3}y=Hrrh%UJiMO|^1W?PpA95z@hq(4vie z6EB9qwNIQX4;-gJ6SBe_N8#j4b6TUq4fnx-=!5> z5qyUh^tZIM`SqX?#~$H5e16KirI7M6v#gh`msi1nxvJWE{_2c8ItlBV)wh~mtUpw` z@vJvuXnjA*4K*b;F#+(e1|#n9((*$6XTTK)9k=G;S^8s8kL%X3 zYnK;hA(-@|kPACULsW7UZ)%!el`1coqiey5Yj{oHyN!40NZ-Rnz*%q}b{Hg4Ky1Cm zS3Gfns&@r5@~=Zt>fPAQj2-$&I0svnHgxwp8OJ*(N)TN#Neue@w7LHE1u)lwmzkf= zcxTr;M?ZEXVoqBg$4r+O;zp4UE^T#=RskRVNYfKg_QPSk&-DdD(QbTgPp*}H9_b$V z0*FH0T^Q5+Ujinp^d7bntSIpuD$8EB+!^*Qo z^udPDobY79xMomYI1lO;W?kJ6w-Rc~)lO+flkQA$jP#7m7@oPZy#~d&1Rshc?mx7b ziKsza;r@h1VMzZtv8ZDv;XupYfcV*@4qjTp*KYvt& zVWq>g^)1J;KEVEyxIBI&=Wa%KwDVe0z8iZar$UF}eg~7JuN% zx)J7M_@96<=|s3=5${IE#eXqw^RwK|(@;RXqURq6K2k1q)~cCe=Lbr-Ppq>jzeXo6 zQM;XmDRyEfZfCL6UHG%b9f)gtK9r}m#kQp5az~M!^^qmg>8j20ie1@a*A~KkZ;ItM z@R+Vis0#^o6}#MpKV1y@42AFz2*MF|9G@uBOSRb^P8X(%r7iUG%dPQCh>s(n?!spm zzeVEXehC|!pNnb#B#Gb6_}yry?k)84=d{M}M*Qw#H{%~E@w1E%Im`7=miSW{e=5!i zOx;2+e_m_+sfa(dIF<3!5Js;+FIm%pMleg*L>#fsEl;$u&ijT;1tS^qSN-^2JlAlIHP^ztuk zjo*X#J;ffWzr-&xJ_TI=bcx@~_`Q&Kd$-WbzqU1gFXHzWd!_yozl-tnb}{cmYlY_T zWBk5izSy^gUjF9R_xM^%MS&F@6_Qmkj&wBm~@d*VJ!dSnYDl;ky8#`ED^Q;d{jN!dnddy<)oI`(WB- z$KM4J0AwvXO1U_g)1p$YT*?=5w$Pu+obdi8pQiw=yYe`AF%8*aA3(~%`;pAfZkada z{MiWnGnDfK0LnYnl;3T<2vB=2nm;VDKKlomPz!!=iLJF2_>t=3dRVP*z9a396u7w_ z>6AP?PR{yfOm*9N*}2pjc7xvZU*5v~;zoFZlnCh&f#VnXroA#2~qB0Nm79(g*# zL)JPB9Ogr$6Mf@=6d@OX_F<_nmRejH;c#YzVzh`Y3c=BuPXlrgwQ|i@ZanjRO~$-j z6TNK{y>(-<;_ThLf@2=APt9VR=>zsDJ7_~Qn@4ZVYxY2N8r1?PmlsGvc7UWd66pB} zr<5#I0;BEOQX2a#iR;oZ*e6hAERf*1Hh40XpS; z<5Off*knZdR9b_Bq^Sf42cxQz0uBni`j816(h5z|vu1{T*M^%3Qm7JAO^_Xc&lpc3 zJ7K_yw{3d(whhWfJul~MET0{`47P?DPJ%*}!_9!6!xj1*n1gk#pCe^Nrq1FEi2Gs0 zb%MWv*Vl0k%->-;!58rz$~ke1H+~O5!N~+?A#Nu416=wJpiu_7eg4H5?{F3M1u)86 zN)WzysiItHRO`oarrzPHyT77oJKHU(^|3YM=s+1rLndkD2DvH_O zk*a$gxSq4Pb8gm4rTd)fNH7B)J1go8aA~ExGgp4D@H4k=cXPy0K6$dW_y$q7f?kiY z4!=p1uNH>h&wz$F1b^0;pQE|FsYEEt(?DoX>KJZ8J^B0Z>r-UbRbLHMEyhO`FX$rj zG-fJfp)l&ROi+)6EECq#R59YJ)&z|asZafGw!qR_-v6wLK9 zKB!CgL*}i0qr4NPrqb7>H!;3{&gA8m=F-N(Bvl+dt;8GlVnc5Io=iB`4F6n>B(l` zS;+NaFG@G z7l?w2Nl&DYgj_S3ybJ+Zr4z`^!N-xtI1xD#43*zqX3cy@Q!c#W{Y|+LZv$BWK>Xt@ zmEa%eu$%aYqltewn)n9;64V1Y4)xeME~vL>Q5sP6+r6QnAAUq^2Axb^r;~gBCt$eU z!!cnDQ9zN%ahN+$EGD-w7-~>HQxQ2KkGWo!q8Q$!hcBo%%Tva&I0pR?dM&g<=(nYO zhl}g7R;5erwS`4oQOl#pDt@6Kc_NpInx-ixApq|tZ^yh1vRg-b;iD4r6UZuxkRNFV zFCbi@SU@lT(9W5VM=4ePteA%Ao>D<7TgS;QS=$+C^NFd4tPh;smH}D8{vPY83!-(8 z&DJlk(03Uhix-#g0-54SKO_S?yqorP_yrpJ$jcXL^=ATQJoQ2U=6fj6jL6R(V}$w) zdyHu%9)HP?9&|4F6=u-T#hJ+Ze2yd}FQzbq=*1M;Wju7Oc}O`6o~rxX8N9i_oi4B- z>~EiqawQ6iEf>vF4VF=qJUOS*bmX0$rla8WHXVFrxwcmER7`EH564z_-d?fYn}joF4LsFt%hd2t>E2K5O1sAK#+4iElh2|#WP2& z1ia<}vrgVa^+%QL=86c4DRSUUmQZWv_2V&!X90bvBGXuexwW@1jzz z->V)xui#ae&-1+M$coQjHmG@lBp-qrI>D=`>wJIQYfRu;=KtoY^n&go#mwu3rSlqF+@4Z!cKNKpLvfM`gU z!UoPsaB*eV`qbz-cs~K5{52>9-b0b&h@Qy$lZNGZ&H~bh{W{ zcong+EHB~7nib|T^4qfP&=)wkJzNpTzxcRs(*-J zm^{dnc_8M$^4=JR&}f~^X)ctd%3yf@`K&BT$2et}jDtmWW+BW=luPNs z)e)=(qJGI`%L|$0f29l;y_zzZK(De4n15;+ux4j%N1bH-%O3)U5|Xn$9-!-AF0KK= zn%66?e9MZ&0DzZ3~ zPAm?=E~5Bu7KhH^vijGBuETFg7os3V;hW>={h+mvv+W>zi>?LYHammrS|W!$lL$vs z*U~m!)hqxC6Kbki@L;N_S=x-6rELQrj;)woI^rnHd$e5$Av%|~K2h~iAZIy6AaA}v zY>%$+cnEaA28D%APAjLwg zx)L>eX$qGBUx&57j*;RNs47K4S)_upkWf$-A<=Mg5Q<6-xbP>%q9`htVa-PKD|R$R z>PVrPTeyAatgeC)sXd6)u8PzmUZz=oZ0o}pX}*q`u^ z^pu3(jX&2o|DJ&JZPZ@^{z=f-xV406&KE5saBU%)^L06y79GA!_b`BI6Q}sN=r=g) z%@{?rE;MA!LPN$ZG|;!X&_LIv@j?S#mqiN=SXY^_#E>ns5xa2L7KXi|8)>z9=ee0T za{pO&+=7D68}GJeJkgvtKK@fhpBaHG{_8j(#;()pIw;cK_-i>tEW!ei3~|OKj*5RJ zgC0vfd;~U(bOy96ijCblm&mBa@dz47nO7*@B}L2wHNYCg;2xQ;BONRed=p0aZS;4F zjgk2f-MocDEbw?Z0*D2GM&Z)p$>F1QdCOoR6XX!jJUDDtY5dE9sCKj1 zSxTkB!@0|-b#)gP!RhKQv>zR*>`3EtNM~-M@Z++}VCV?$L>TZB-qiMaSRMZ^d>Pxn z8x}WHmL;Q|Gm~pZ$XQk?Gj-RjU_cMQA9?Vo)pKLSU!J!P=!tY5+pTN&igY1stjFrA z{~+Emy|F$$9`EP%L92sH^M~wd5duZCaCBU*9+ev9(*|&O zX9p%n&u68dGbDCD1Ybkoy6p})!Fy09 zER;O}1Kpg3m)E`RF;*bc_&NgSeoiGcwrqa`j*a)>qp>IkeyZWHwfi|+X95=*l z`3Xuec0W7@7sO6%y~>UL?gDH5wBP|osYE`be+Mw6cLiFacCN#5;f<>JFJR)>p7Ae5 zv9h{}5o?x{mu_dr+?Iel5t8-v+~C_t8gqV*)s}Ui)%Rno<4STcYnC7T5oSW4foab4_4-GJQbE*?w4>IQR6|R)W3;7{(AHT|4bktH`;xnwcZ{5 z#YNV7|Bq}{jFdk@&N7yY1%Rg`fLH){CIX0sx{uefc=)}FG4l$NP}&b@V9ad5Ovw|* z&O8qn{mX(FrZhi99=5*;zReMIf=p3XF#`j{bqvVy+m&|`sXsC@9H#qjCq$;pnW4WP z-{7P8j9`O^x1e+MMO1zCKk-qW!Q>-Vr)G5hkN1M4SaBO3ou5 zmV|Cy3%HK3(a?4Uhqh>(9Hm3bJ3;p0$m#kL09$-jOHfu>h_Vv*_fbwr%1Xu?>3OnF z-{LRnMInfzEGS9W`&z4OQk)D`yFp^1Bb}LuL<$*@HLyA+tDd0N^(t|QTBa3GdtVaa z2}1S0(?++z?dtmQ;&q@(s2Ot&90i~{CsLSruHPW~7TNywY}K(JlORC_bWu#8I}#I6 z-;C^U{G9L)dO=PoLn^?%oOI;eS?p1(b3OT_Opu@zC7uzl;zmM(WC$EmUOWXRR=y#F z{6y2%@`ykn+Yv+{K!=S50vzyNifVDIf(Qf&iNL&l%#=XR;C*Rp5%BkUrf(`Mg`QLn zVJyCr`X(Z!Ih;^~oy7>vG14GQ%c^1po@T^Cg-#Acs>quWumIHq_J!H4Td0cZX#Cql z9xO>LOJIAjH#7}vDVd}|0pd`JqIMvznXS!(f7TljVZ#J0X3>`fpfZRj0*K!83cu9C z$59)}NhK2O1C1+!Qk!j4mX3>uSkqU?i9yIDAG5BT)0PK%MLzl3ppJ{g^$bi7?;3~e z12NoL5I@{k7C%T9k@!*K96B@9iycl)F{&wu)b`_uvrmgJUbrw7PGJxkuJ|IdM1u+{ z{3OH|$wS2#Zr^VT0+HN;$rg4Wd03GWVK9ezp~x*wVK6}(STbWN$GY;A5E0RcGB`0L zvsRq?kG$*b!k+Nd{7E2a2U4Y)0wFyb1zzJ{Bh?_>5ep z|BB3=6tvu!q^!fB&!rxrj{ipd@4!EYKYxTDj+Vjx6>AO5Bph#aTkilohd@a85}j4{a; zNZJ1?qT!N0%0&0Hu&HP4p)mmf(mJwyjvV^%fHd} zcH}-(*8+N5Bk0=*#eNy4-wb;Lp!3eu5_`#@$?C=)Oxe^thA~}(gc!zDZ>?ZWZaD8j za9J|Kg+6IXxE36a59YUQ*vty(Mv1LVHi4$dA^3?MEVyxS84%hZHmu9VW44^LRqN*5 zqWExbX$Z9gXRfsrX!?TiaOS$1Xp*x(T+n1>&qVf2WKSdC&VYLM2h#gf)T21o0Z8kM zaauTRK}yF81FHckr_krbOzn3riB57)r08y^N!>h^Dgqu#yaE)3{CSVc~B zVw>nE0S4wZ9)W$+b0{6>RSwPrS=N`3??!@9dKdF34&S!ZxCg>~LExD829F}%;9htu zYyo_){5>)V&wz-ZX?y@#wrj9#@EwH8mQu-skwuX&bgq@Ljy_r05iaET6*Nsyq&?5F zEW~xLFvplA^?v?`k*ec=h;@^4z6s^LNASaFsd_4PGj;@S0LvJ?nS4Wb1dgu+o)4c` ziF${fmCPjPo%1uPaaFQ2;-givrAo>AMEe)}t<&D1b&1-K``XxlYWvvU7Hr3~{p~1! zWd8*0{);I5aKX*&YiE>@ZIHl|s3X$=tCyeM?SB_-ha*t;vwly<^}`KUP}rf~|4KML z%?U~WUNp*8e?gZ0;J1C3!ec2?xF)y^nf4p9z!jeKIF%l_imQq6X8q%KcpcjT+Ssc| zhW^Lc43{|F{_U`EC7*5O$afbc+$dHs52cWEanP*fxRukV1!v_saJ;~Frsh;E0K6Ch z!~(!CBY;={cqsyi1#-E>#jwB_TxKO4!-Ir>pJt)yRtf2`GuP%#rG zW|cyG2f;iV|4rtPnW0tN*ky@ELX;1+F}hG!bzKJ6Ut`xQxKfuzey6}yj$MbtH9vOk z57*JLYj3zlVplI*m&C68=<8wEc`x^G69XZYCW4{8^dP z@IMECtQyD*B-g@R{1$w=tm;1DV@OK2u)x(RuG-aI)^xR@dOd1858ehi4C_pVo&f7y zwJw9TL#+qE+OO6+tnF&W?!f9CwPMA-np10j^zKCUobbCS4y#Ez3?COqs*W?v(CB_o zUE%j($~omWJZ>NzN-XFub_5U$08RuD3zi}#$WOfM>o70`=t(&4p~v1sBjw*q>Lder z8RX*MN0;!ZtAIG_JaC%>#3^UUu0W{b@aF{lLWz$VZ*7JSTrMuHLzN=i-EwZOlCRZbpbV)R^4!*-9)c#be4Jx*%6cC8g25IWJ5a0~?khjqh!f-{OA}{v{WubAl%kH`;iW1=D{*t~WQBxYG@uf`7hJ z@@iM$HgDApQrlO`#78rM41xnZU*K?2iJ=Tx%no6m3oRi|h~f)HZ_!)$ zNR(JHE1jr_+Vb{r+=adH22Y47MVjf`n5Kb?8R^_r#)b}Cx%=g#|KUUNH%9nP1dkTL z<3xFa-~z@yx$yMQ^FT8k10Dem$d;ZJnsI`klHRU>BE-IlAD?a?yb4-Ykd$~h+r@`5 z2i{uQOuY7&%ee2O@mYXwr@OHgwoOt@=&nK+Sz=)DV4(CF8h6+m2u+mUki`au+EoUF z&`O;P!eTowMLY91EgBYBRT&nTj?|XJ!k^G%WmsS`H!&3s3q*rq^|#t%^m63u&%hy5 zzP`jX9Qi70%7UCHCPhvgk;Bh;6xE%LuT==T?BN z9F26y$02|;J`^Kk$1+6&-q&EbN$|&bN&H24WkS2k*i+PsR}L@y&6t2!rauv{Og_e| zbvdz(;g*Tt#I(2dPfud|clMaP9wT2tZM`2C10%E}-?#yofFsHH_hXS8V=t-mnMoVK zW&`juz5xhxwu=vA0$-kWxK_{VeRXZo-&5_Z;HJBAjU(u12L}RG)^ZC z_eb8RIu@AEx1q z@v9(o5GLTrH`zYFn6!N`b+>QgXMFn*=4=-q#(b6S)6<)14zy3tB<&+DKvq*kInh2{ zFwih18elbqCU731oT0{{{1tc&6N+)J*o6qnbPRUK^BP8Q#`uj<$of!ho%~K)M zhMm_!gi@K^Cg|UTY2Lt7pcP5WB$L(@Fl}LMy$La7o%QybQ1J29Jx9WNmBhgLZ3({7 z6k3a`1=S+@e`A{ot^GUr##bP}U>Bl~htu4Yd~=TLpMfztkGrQ)C3oz3J{*qAr^WFS z9mBYOT3o*smpk^4Foz47IlOzv$1Py);9ysqC-E~Yk)P zOE3{7V%NbWvexOVLs2ppw1y<&7?RC`kjWgBu#}osAPCVkESch#7#-g+SDOS6J|4Pr zb5q(B4W<+;OsQ6~j7vwP6#6I`12SJz2n3WuwFJCCO2&|^v?)_d0TmtpKePam!7&87 z3hT3wp=~@lHwVJ;jh{r4c_-fLJ^xQo-02rP%tVsje+)! z4(wwFZ#J=kP9Hr;pqShebMajHAQ@h&(7LnfZsIK<+xn}y(UTPp)jlacf)|o=YjA`< z_z9a43nngp2goxN*P-gY4y}0Y;Vaj1v)I@m8YU6sX124{{ItesTt!(HGk9JdA~Sfo zLnMnFfGCr^BV_>U1ixh@C-@bp$(kDz_NOucD~BwZ{{sl>6r1UY;uHJVD0dLD^REPb zO3_Cy^|3V}_f$mBoYC?(N#K7w%miMGy{gsx8Yik6`mITC!?HNYl2y~ztWHe~(vr&R zCwUJPSjZG2b{g@04G>A*p*=#WJ>iXJkziE%h~+;NP|cr*QmvblnVmXh1YDYa)6T0d z0cdvS`hz1-B1{96;tuRWb_2)`1x3lCnvK;Ig!-&S8mI{_vTq5s`bo`xx$SqO?1;W; zN#km!xDoH8I#=;R7f9$=&~&!*>racDmW6Yqh-_N4ZJVrnf1G_sl0&1KasN?FWZ1Nf z;{VVzZ8AQa7VX8k#!b?4&|FN!`ub+uO<7efteK>FTY}6)jb9;^zDb+6B^5NUIh*Xy zU;|HQ1Hao~9M1$uGZU|-?=%CUnI$lrSuETac!H^)`prDAIt8u!_8V?E1gx2X`X)fe zho}}3L9_>Ib784Mnv15honPONn~P~Xl0$@RZ7=LOL3{Dm9cizNIY)`wi*e%iN+!Ve zLhWV{6|9|DA}lQ;mISf~EHwj3yQi&VW4thGHK#p+1icbHfiUz0c8(-yB4EmSl~wCv zw!|BOge}R{Knr4IFgaWziEj(-DlT|~&_rA?aEyy&`~>a3HLAlzs%zmG)!bx!rzOa% z;XC8Ih;qTTl~vU#Ye2OJ@!_|_*cdZWcI{tj8Q)k>yxS&A;pE_Wn=KLW)G3z#T0}!^ z8gi%W!1D1xw!fsy_7}^jb5+hzAWdgGzy3i;0%O4<`w9W78@zx~{Ke$?%hfS@A;vTR zN8}FV16zU1OG%p%XOmIr+QWrQYfUfHE93BTi*mKyhM2hqT2aILb{hyc&tWL#@E5h- zWSLca))d^;-s%jlUIo8OTg#(17i?&WUJr_8{bruu>c%~H;{ZJ|Kxvla^T}+oDw_-_ z7LzCz3s!?@`e-8A+AX+AM7Z4ckAhcJ0jVokx{T6KIrV)b9aA1Ha}z&0wUI>?@OeU< z?E*hho9$4|5U;Z!+qkbxL7im`m)w$rx0Ej8@N`5mrI%2?nvS?%HTw5oAwMW}!!xm{ z;*JgD>z~4Wx#sf-!eRSr(XMu$H;an*RXMv_IZyFdUB4pF6Rp=;s|sFu{vlrVulqXg zlLMJq7{aX8g=&YlqP>!>tN?>p!x!f=S=hiD@b)wwuEWj_abvv+{luHK1$hnal^M)p zAJPWP0xVN)Kd)e1nbn!PT*XWHtd~*wVR~0qLExACR@L2dLDZwwnG2d}xOj4K&1wck zM9_-fyYe;E9YuFgp?vkv1sgfO{PL>7Bfa|mwM?e60tv0jd$X(*0@VNL&3gH7@J3|? z1)$MP_1fWTWzA|lY`A81t~RgflY`DU4rW(#=cCHiDJxpScR9PJ3f3JrTmgJ%$B275 zP~e{l)Q7W3cWW@Zb<2o072k0l6f|_$OL(v^II_~vE8_`iSScAr&bjC;^sfQW*Gb#s zsVQXiq!6;c!U)|yLFgg|%B;;i?KLJI-t9uVIeo5G--C@vJ)&}S8L0xhj94PMg!!8I zluIs5j&lsCya=LfJBU)o3|jnEq{lK9z6|6@;{MZQQnJP*-m=C-8;P7efpdt-c*M_T+#V>~htq+AD+L=b2XG~oKds{U7GdooX&`D54H?S>ozj)w3tx66;Z$_6kt8%5Ni686xY$bh9WA~D6Mjd3ysU<=@;mej zaYQm39f<}b|KiHB^7ma+$zZu)%U~F(F`8Wr`rP&M@|7{arx&Up!wtvR{&f=4lCeZ0 znHjmH@UTEc4qU4#qw$gOp2L`NXj~6#VvKy7>oLl=K>#8=H9zRy6r*-iC3f1#OIoz0 z!sOt4?0X+)JN5$|ao=k~q$zJpHYFWwN{PUx6bqWNJ8DW=dU2iR7CzgY-e$f>&Q)y@8j*usK~2c4}yRB+M_rFCNL^%6Ruo+98otD!?5vL zWEoL2gd`a@Kq|beRiqrbwDm4hlql?&4c<+}7mOns^Hp|YN;2lR$W9EZOdNwmGPX$k z+Lw=GZ^Cb)!UmO#lx=ZWMnLl4XgHk^1a!2TF>bv=7ZdpqsRH zk(7?Sn-NWWCvZ<_g!@aH$k*Ua3K<_Grj6J`nK;nTt8NATwD|YM=x0uNsuEwIA7xAG zXucNVzePvGuqtx_|H)w4wMVea5Qu5eZ3lvswOBcVo;F<}8J zG+riQIAu2%uZyJ-0@29BF6DCYNOk8aE%>%aoJ*=1nKZP*1aV7LK za*%WcmR;`Gd64vH@aW$}A0Nk0YXiSC5q1LZVDXK8$MG*z;KkegpSl z-gy2N4rn3Uv*mqvWClA0YB#0;8hjKnT6fQ5GqT(hma)#c(8>{ye6!^&nDna{vZf-ioq+#gC3Sg^oq2Q9RT{ZOm@XOaCl zYsymCd4~0a@cj0x#)*^b&I8X_Sirljm#h znr`sV*h;mtjP8ZoPW2K89OyK+oqB`i(RZWx?&#h4N)tE!%sP6CQj|~c9y-#Rd0uok z$br_PK>Hl!g(nc^LDV4~9ElR?*BE(q6{^ES6}NigP?uL-Hq^e6JTw#h8O;Jhe*pPv zmKwNSjs97iknXDTE~k{LE)_GKoi=Yuwr^g3w6VS!=R{;$a=Wny8+RzJt}jjp0>SD{ z9gn?KJ64pkcxI@WZQO{1KiC}JhkL2Yso6OB#^1G#H!9dk$y+ZD&MG(Bflgkp$Ug4` z|H5*D^wjmQa8a@$fsv*>>p_$gFTUUodI#}>zaT(v@%sS8TIpZm;Jq6Ei)r-R#s=fx z05FE^=Jx*`fB;KMwH@S!a`J5SL#U>IDau#b3{eAJH5p@D@E?d`qZdbB%miI{cd2g+ z{)PZ^QL4YgJm?(MUN86fGdl@ZBETk%kcwa&h{fPFI*rftfI#hY*B%oic$^Rx#J2spv>!ry!v;#igP4(w7Z3rhM+N8fF3)cpu*YZ< z!s8%;H?eTuZWD6crbj=-d*N^GF(wi?NUl(ufm8k|*xGRcP#UHS(}lS;@bHCa2FBpC zXfS(M`LA(G*Zh z@tdTByGG;U{4VMEebVuVq=P$5G2DrK!&6+3vF{3%Tr~^W%(-$cG06>jr7@arkOlJ5 zti+xh*d!&5&m(T%C7z?<*!8bNJIlKJUhsRIX@jj9^y+x~FyhPT!50UwM{s@VPa+}? z+wUlt-($K$cPNtW4B&zY(jpEb;{m#u!7C6C%x$%`5<#4N9*>nVd9-Ro6D+F}Jb(h| zInN9_7`wuNW2bgoI4P4YZ>$O;KmcAv%;0LYTGh*Jh1kv-x_ZPlYiAveFUO&H4(X?j z7b!xWII+^2M@sImdjfeha%lLR>x6lj+8BASyr8OG*Q=~>cew?4HQM>f#R@kB#6+tq63WHwvmZD3g&wup=eYkd4$qCjv4eYmNs2QHriGp(~xf3^VDqNFU8Ui>~BHDdPS=t(-tNyl_JsJiz%i49G&8|8y! z3z~inT1WXw&TXLAx&z<0gAM?L96md6)JzBXporL4(aAH%2lqp$Ii3v{{Dqs}Nz>p> z@^gG2F&l5n;w-Wg;OJ%Ts^217ut5Qoc!Eu8KZ5q_)y{$h>(x&77L2O>1ll*k&MI`V z3NTAr73oWmDXbl&!MmC?=-@$fq!)I_;am%JYdwi@PQYw)xJi4^b2l?mz8O`zVtqEK zx8h}RRW=g{-ikWh&VWL-?g1~=4k@?S_ICmfM5UC6!+_=ag|76jsSH$1*NTo46yS#w zfGf5(qvL#Dd)7VR5l?8cf$}`X@+iLUL>2L(PmC`}2pFt_&j9RJf;(t9fgov1!v3y= z{XJ?IrikdNS$IwV=zfeu(fXuxhvQx)jg~%n8|@0!L&&4R!^SR~@0{YgeNLQJQEh zrHyGqmT+_0>4=90=T*x^ukl8>g7fiFhPLot!O%=ohpN`WkvqSCBz2et&}@{Dzx#9j z?uFPeb?EuMm#kWgOQjpLO~g530&~W_7fr-qKRZ(5qDM8UHtdJLz2iTl4iL_z8{|v4 z_Jq9+ggy%KVT*X|qe$~VPS%|p`YQpyShmSCsmmaF1lsKikW6QVD?*0 zXm-A!hS=ISmz;&E0-r+k>wpc+bb>*e#M`L`Z>GO}4?UrUKRr4g@R$Om&wX9((zotY zyY#2WVP|ghmr3kQM8dtO;=?y@JCKbMan?w*xB)Z88#12+1{v zw%{O!{Es$-+_L+S^a>7SNN`qb2Ty10CQW(;OBfRB2y4d!5eZJn{YrWTOBr$lLvp=! zH)+aJ>@tQtl_9Yfp|ZuqH0c!_&X7Jsa;V--n)C{eV8~sdgB>5;eVX(Nj%3ImG9-uZ z-K0scU^zqH!H`g&?5>>j3XWpPO$s5Q6KD|jtJ)>iCj8=qht>`HnChcMW} z9jkYr8oh!;87x2g@03%|;Ft~KlWFzU|0&bzwq51swAvjwY&s&Lls)*r6P8cnFB5FI zLFxNSzrv#t+OJZ)AAt8yV7w6C;fVBrmvlI4I9}Ne79iwY?R9WA{;b_+3j9Ug!|t`H^+;QkSDtOQv&v76LlA-k=o!t?NV$5qhZbUd z86AQTL0MTFRLkFOQ~9?k(aQlpyPuCSB}2$<1%OJl)dvmmHgRkIxrgp zC?yOirLl)WoZcnR4C=VuNZeUtn#4*bwUSA$6r~4ojPGvg$WJvLE?K~{n0St}qwyx3 z+9IA0CBk4XQN&T6nhm@G$3;iB&+V60fjw9Az>iQIJaC`FlyP7xnnUR2F7&sbNj=rO zu~bluTm24kf}7FsB}gNbxk_GRD&8CF$1`4CVy1(Fm~PMklXppE0?cV}lfPac>mG0) zuSC2EceV$IA<+^KgI3KgT2ar4yPEKkV^ zFr%!Mx-}XeyY4JbZ7f5{!c|zWE0-#Ze*knf9$+eXNxIk>o(ni$rGnO&g_#l@&T1^8 zy%J#7mMitvyv7-D^W|twHaLmikpoxDG#$qz9Y+}lixeD3N6#3u8)I3Dy}=R43T3E- ztKoKvJ-gg*bA9nhmf)R;BcKNfT29crBG5ww9YxT)0V(fvZfm0`BZy$ zu+-#1o_`#YXs?ywnGKGI9jf>PufPa+LNjUJ&g|7LX~t^Gqb#5>u2KdH8J*~5i`nvm zsnOIf=2Zxhp^!>mmc=vFctakM@l@|k%H4vK;Eb+b$t-+VR`_mOZYs)h4lc!mE(s-E z$r3_P&0T|Qb@p-w-IQCtwN^>F4m8#O4*1!(Mz)omZF0K~A})N|!Ftp>#)aYm*L|TS zPDZAxYuZygU_xZt%eFYr+9~b8QL5er_DyfWLgQ2hqy{1j!9$uF^QYXv=oGB+aO4dC z1jQ2_gaM#YFQ+ zW`}rZnRsVvIGrbAWuP^E%_bUhNy=9<-txrcNyqGkwlAu4v+)!N-g13n?WYvs|a(Verwm2mh=(5ZFV(cO3z z0Er^L9?r(qgl(cv_y&AhP*6=&d$5buhRQ;tXy9G$H3UdOF@JSrkM#4PgH%16+D;ah zt1Ys}NWI54F#kHlBQLpLOk7-T++ldJJ^JnG?PpL>B>)wLzDuAO+@IAH5{NV0{{fi0vJ!)tA!MzFlS79eJdov4w{K(H< z3-blw*9nsAK{IqZ5M)6S7M?BZ^>bRiKPCkjJMZQ3@WxhXB_EPy?m| z*3ASW`SJhZ?n~h0DyqG2?(M$a)3e_0neLuWGCd@j;WFJ5lIaj80g^!2L`6l!nTeXP zK1qNp-2{=&9mW+!5{MvbWHS(1+!2vQ1$pYj4IwIvU{C~Q$9+K@zW@JJ-R|2nL%{dF z_xpaouamh|b?VfqQ>XUrlpd;sV^V zd{|PUL{Ile=w`my#=e$eJdX5q)@4VY>oF@?IT5}un_1ka%8q*f)WRb8U@Gpu57U4m z6wK1Z^eq*QrEp<#k45wGVB;ZC76AMmr2o!=4?zZqmg@asqAmh>=qeup!s(zimcJ7~$6kIc4Vi_xYq6*R-FN5( zQ}N-~ObJ7gEMGDcFs}$7dwmZregib|`27)W5~%)yis9lA`~h4X@T zAZDOjHh%Z=X^0GV20RPDOX~ba3P*9Oa*$>kO_4CI*21vtfc0#Q+BDNxN8qeME}NOvt$Ud|J_bZKjDW7%uBnwrJo5Vp`s6v|dEIP`kOD zK=)Sd=2isVAJgu6sNi&8q}}ZC=)PFH7tqbNQt1bH0y45Ztd)RMd`bsLbMmXWYZ&2Wj?RLBjP9oL4qR|oVxfZPTneKHkJhBP>i;URk2k^IQ8muNVBc$oE|Neo($A%6E-?kCg9(e6QhGt>r+w{yUHX&35JUAcb>( zk~2Q#InLbT6vr7IAu67bG7YaIMUbT_@rJ8r8Q!V9RqnhKT z(pyoMoEG)wS1l$@1nah60eSM$yuDC@PFw8DLDl(@6{=**I5t(;R?ZNWo=y`r*uIAj zcW(@n^&wg(x=qgNr0}SpX0cZlF^u~P-<^5Pvhk?6qomP+L12KOD;!xpJ)1{0n6}_?BfzvzI`Za<+~Q!mHQ#tv&~I!185FNf@BhU^=OI znmzx{%{VMQ%RjpgIa=jPwFc?!?J^97wy6%h2l=ls{W|c^PJlUH2QCNy3iF&g5E~Gh z=0pvcKU|@`7ZC0Ub?Fkp2r$IQ^a8nrCad>C#69#Vm5>K0r0gVsqScJ|z5x0|kD{=$ ztbQ#nZz4NZ<>%Pjz}W3Z))Qq!){nI4cv$jUwVeejrORoRB@OQoOJS}uXHvFyFt>2( zUHLE*Q+QV@)ogqBAtDWCPAy-FsU{9g{Q}_Po_4-NY^kQ2EuoN|CfuQO66^eTBai}R zB&&xfZR~%mc$me@J;*@2na$mJr$PCi0as>iri97K<49(Im>0WS;`JG#7Il-|qqxyL zC^}A44;kr8Wqnd~vVOf}RT(}t$C;B+v*R~G*jz?vM@|ppkP~K)q9VRm$CuKStISzW zL^&Z;dD*k?LuOCFI=yu&SSs9~vTM{0N0p@@EtSD`e+G{*T);XcD~ZOCf|3uiw_Z-G zEXSI<5*qz_pFk3}7Bzatms+BUvV5g`{{e)6Gz(abbiH6#S@0F<;U57-g;&HV@%vE# zZ0})w^Bs$ut^DNrjQ4tGlgh1~+DKvPh`F~jl?yE0&g`D!);T#|4|lqu8*LqTTm>mW zc~yaQx%l^DiWkhT0aamQs4*+By@8Pjs}Y^q^&^W~gH-LmAN;xoumjz^IN~&8WdXa< zqbc3;ZDJ|vdo3VGbI&?6x|Zwbr#UU_p(*UN#fU{qd`b~J52fnUSc%zzzv27w39`T5 zBuNR;S#G;OM-fT2I;~PP_Re7au#auL(~7d!0ySkV!z)2j`;QWH?pnSJKesd(kgm63 zRc5fXDft#n8gIcn9U}~p<+ru_cb5_)pxXiJUi+n zvDaC^N?f}W!@vf6=1x1-74~x42QmGJS03A;r8aoB*F0PB7CK#VqGGu(1qtJ74tlWD zoc8rYO-{;bA5C=@4uvHO>qx2-t2U8Q>{53*ZF}zxe!E7&X~gM*912MUphVE1cGB$J zda2XZ2f=iu7d@6n*of2ia(HdTYXhFsl0Kkjlz{r7VOcQ60vb7TcZP)0pJ z>X`s(I^By8#%Hu4n;^9$y4zHHkf3@GB@I~5TwMgxz)UkEUke(gfme+_$8pk&J3|G7 zG5-HkApVSnx56^jIDyCtEoW{TFC)HzZJsli`({HJ?4z``u(Z|dzqAvn zmh|Gd)0{rwi_pwR^M$|DERtX(m2onIXhUeWp`2&1NdSw7b=sgejmW@Il}pDC4XT`& z479Y58hY!+_Gu zwXM~t8-Kufo97N9nFxoRe0w=_0v8N1GCc%a^FvX4YrM3l6Tu|Lu}AvQ+(nn-aU92P zE#OvO4E4O(zN`tgw>7=b^BAq(iw)I%e}Hi-s9>O6uEiZw-LE98=&Z!0Z1T~XVEkayr9?I<{41r z;-3y0(4h@=W9}myRl3cz{#vXZwEm_JeH>P<1v1P4mH6Pdq`7<;W04~+SjQ7T;FO6& zy&Yl!pb`MY0>BvoKr8@k3;<%eTeGQnd!o+8Q+3{+sY9RByqy^k5eulkI{=6UfU^RC zSO9oW01(SDru!0T@$AljF=4NR%+7{RVS$>}bBG+c+z7W}QJ*YhFUSIo1{Pz^21Wvx zS1tEQwCrc#aLsItsR@n8T#VeXkR2;MqT02Y!@cnp!Yca^_sN^fhnyAU6)@W)S)OjHfsk81NZ?(SaT-~li8Wmd zl+3jMNjftAHW<7nDnc@=5}-)+&I61P%6YhLU@)KJ+9Kvsf4lxHSbgkbrp*au9Q+bV+p)#YQG(&>WZ2d9`5C1 zr;{wYq;qN`onpiyseje*ae(6|u^# zK=(fbA~>8b(a@f$+(z(~1XtyYD~Ir{d;?(boA{WOZxLgH7?s;;eJ`xgDpMuMy8{q9 z7}ooC*l{NvQf@iN=TBqNLtFn7)&ll>gw%K7@V?8>Z;|=q?_-QrM&^BwK&%=<3bjbn zi|z`>H*W^*KS6#HBLpcaN9QTI_0wKM5-#@&vFr1E`uG{>U;4`3>8 zVx8U(#lbjY-j84(c)=TOl3y_6=)J;pKV76C#91z5`Dmwb^a4P^3U5L}ZQNcAu6s*mxKit!(-It!R3$fe6k9+E{|^aYy-xYJ(5j^N#XMgstrg zuodE4H#Gnw>AgG32_LWxb;R{pc|tnZFYPEFKE=yk)7*yQ-%-Ak9`<-Z9Csxaca(E* zhk>y{JJx28cEs9Z408p&9}k6D-xgax5@S67Z1gfQ;%$pczb}Q41&P_La#iIs@7`fm zTz+QSU5pHQMV(4Kiu5F!!{SK8P-(sYmGrIfjAvst2xgA(XUFmVp~;s&A)g zE<6XKxd$JWv%4Ezp`}>ZZZ{SXbI=|~8v{KF8!USa$|H@514RkufopVqVH;pc8^AWt z6l`uqC$RH9ADq1S(o0tyD7D=^6HtsMo**|e`2KgffeOAB(3r}}DPt#7rW~tb-$U{N z`8J<9p&pO*j)7gj18a)>nOBWCIQR!7JL0{TM$~%^jaop`?$xx_XittMZv+zFrIq{* zGM&>6wre!m7Rr=DEV=Oy)BQ!I=yfPgb7JLEoR?z(5Kpr-Yrvc!ntK*#~Wv=^PV7C5V8`#DxT(H%_D2l@_Pq zRPIIlKXC!TfuKpBuyZSSHD?cX%;)z$~ zKEm$D2lH4L_n;E~18~Gt5dT5gg=l8;bEsN<>DYGf7Xgg=U#!|YOG0iilg6W{4*|n1 zfd_$k57SAO1|0$5k=b7ov`-CV7o3@eEsF0);3#w{Oz&54RDaFSqxiV{BFL`Ze(@}J zDDv2d#{NE|>lBi^4BdAa#)b_>Z#Ven8q*xeC954?tY-!7Hf;Ut6*XMjT%+Zc>#2EXPnSoakK7Q zPOA;r*-}e9)>L^6(ZHRvyGzZOKR&LU&E=z6FprV84i~%eBAD>O=D5zsLEwWwD_bhH z#oJ=&n}d$|z3`g_^+4$OC5m(eU9_UXE?Q`mKU9l@=U1Y}1E7Wb2s}qv`7Ibp>}qW- z-wLFr%J1Mj+xDJ-f$_cVJqe5V6h2rggSrJdM7kWoP5jX;yj|lw4IFKK2G%umN3&zt zQHaL87m>J=Ls)B^=vYf(k@5%y(bi`XdaP&7`ZXuF;9Bil-V5=p67eYiSX$*!B)&lh zcn$#?#G%WCX*4w(t-qHt5izjGBR|ZIFF}pK-1s6ImFE!}N37`Zejl<6*D@gQ%dhhP zK%c1pM;g$@^e3A6feI8}B>X?a;a~jk6Z?xM_E(y6fXV;cG`b%LU71sU8{EIhvM93~ zbcCC%Dkn{5mC0FnnsP~2DUeu8hif?VM8jz~Wi_0+py9MGY_q+;!?ZoA zg6KgCs$wn>Lt*yJL(6?|Jy2pW?E#>qT)zwCi8uifR{*4IrGYU4Ic* zOuPOnuDEvnO=Y4wCf+@YSu33j5YNH*nFtxQ-yRA8p%DxpP}}K^p86z>eL1mjGOM40IhcOgP((whlXa-e7)r); zTp!^tOhH!WrpC)43aJGgA94A_GbzqWh40XA6P~oQ;kGMprY4>~z z5_i|BAQI+e@`ImQWg0M$jl2&nHjW@*@a`Q6MCuq53yyM_-dh<|yBDTrS|U_AgQ{L- zdPDLu-D4RT@gGMM3w-YJ%3>)CMr)F0Jz9H*VhPJ!mg@l#(iJf?t+s(nVa7{Ht6FX; z#?+_O&6&rB)bAv;%5P?ITD_X!cM&#z1rYr- ztcZUt2%z>ghSh^04&G$c*6I!eEoSHUh&Oo|1jNA|Y3+qK9^$WN0Zn_|Bq}}t<>2sU z6iyt-d2!#%>=w zCONCoZC0;AItH7~${fVu)1g4Ne(9KMx@>uyxAIkXhjWEF;;FZc)f2|* z*N&^C5f9PG*D#s{qe(EDLKwX@49j~MX_DMgjH!A`-6lBL2su0nZ^+?U7?8v7U_cH} z!}vGlaIKcZ9*Ekf!>sa4MGMEVr-Bryzs#Qpe>#{bf4+85#{L30oQU5CV`^9>D;-ve zOovsH3&Qr#5LQW1hmD8hRWc32?m0tPC0`v@iCM?1q#cBHYhee@(^V!Z#gd(hthdTa zYR2CIkpz7_*T78Vfevu83UHiR{VYX^o3>IPICLrmm4o9QUADcw5NCA&pY&oZS=S>` zRxZ~nD9-e%wNgRhx-V9s!+g}+C}I>x6(2`wK2~blwde*1cNbfT>)pp|8mm|r@l)iA zi&VUOS=fq@G^D+Ph*kKO5rnuE#P4x+UW7Czy#KTpiKXB2p-4juuxP>Ezqp7PpfA3LoA;EOlY>5pJ1Dir&IQaS6jW6;bZBUs*fJ|N9i3MuBD3SSo~EA8#gEaSX(tBMcrE=V%?StSot_{{pL z?A0;~1!95n%xu0w4!}zc6;MoEO@Ox;wn9naWCI+I?dv#DEY8tm9Uy^BT~gIJgnRN< zz1^tw&D1XXcQ&=NqAHI1l))WB)P4z{ zaoNqYd5W9EihPH%vtA5bqOQSw4t9A0w6C%+QaEuP+{$)6u{btdg!D!r*Ky*8-YFO- zt~ZQOc#Gntb0#A#VGa9ntqVGC%vliVUpD1V4qo@3M$4>n2wO~!Ggi}E2BJD45{v0A z2c$ntKe%HaHx>=o>AT={CiZpGCl_y(HYX)*&^IYit*0E;uFLP zl_TDMAges-+8?gC8k5IOpECv-IjxjMQCbZ{Rz$UxYozhCcNh)jc?zxGY4{d8Wf8n( z3OOjxPe50-?cxed;$dpc57KeT22s+WSH&xg6H^K`-~b)H6$_?P9$ZRAOcaj8A7 zcI00!(jPWN8pz?0*Vp6Z-No1pa!{Nfz`QHWfntLdu(dX+i9`#YwBV5h$usz^gx}yp zyRuX+y=PtNK`js1W-C4SvyHtDHrn7cOx&A3;wZ((O|pKE2J?bdYPar2mh;|&KaW}2 zO|)kGuhWn@+`!I%2OGWoR}qxGJc+W6GL3hT0sQbJ(&;E8x~~{rHI!_CfSskyMRsx&L(b!E5~Q zP6vGtAVmhdZ*$lB-yw?KeZ2pl;=$1U%HKT{%SX+)QYhDnN$MF8H@I zcswiiJ7CB8sVW(Vo>&$MDX)u>F7D5!xrQ)X`NzCNDa*GY3Tk5;NoeKp4C@_6k>1bj zm+-?nKadd^Y!Cw)H)^3Vn5lzsIsoSy6-1G_yOSlDLX`dIC8R|eOCaxXkikJpJPGg` z5_}`rf&B>B2cK5Y17I9F_5FkHKGgeRi+hQYJ5t5H#jLW_ zTJkMn#gVyS$v5ZS$+H}3JaQ1m!RTiy4zEjNN0Mt%ly!pX*mwp`a})=x9W*gaVk~w; zEOuioX}pRc5D#+)9YCzdvT*ztf~&G-84D0cvy_h?0=nho%^y@z(1miPfbKP@B{p93 zwqzH#yf%Tmi=UMSi+mP9qlGlo`!H59UwImwLz#>RMYD-mdVN}5jIre;QB1u*6E(Ku zc1bJ4RbGn%=--7Xwe<&LeI23qi1qcf-YeDvLE8T*thKN6B~noiRaMK^FQlA3BY-=RBihu?RW#? z_LqbmOT&(R#Nl*RiQ*68gUc3O-W$P2vde8oZ5?c;7Ds^;7C@JXvYJ&ECxm09P-yrj z1i;8vQrgMuGEV3ErqfoAV%%>!9o|v!_F3*t;ELn>a8%yR)Fw@AsJ@qS-bs>?^y-ta z#-|&T?Rw2rrfK&asLwE`oqn$(+P(Sx zOwJx~rBk`Wo1l1-b|-fM;W#};+yO#n@+i#U!Rq4gB{U%1oRf39hpt0tMmT#kJ%lSB zp#(NLNhj;Q6=^Z6BGa^!y_(W;(g+PzlG&%kwDq{@tLktF!h%&cpR1HD+a$QTzx9W|d#hLj#J& zl6S{Vv~z3mmqokvZu})+=Z|pC1@;2$y&*Wqu524QwnAT?Qz^7BVDhTWeyaqP3c3ep z;m_Anq>N*SA0uXWBOJ}9?b8A6%{)!B0na?Kot>hppn%0f zHp+P7>TQUHcUI!w0}w0p%X}BcU=u74!&2ey8jSPCjI%_^&+6R)z^U%>XH%4WcgqweGKTU?hh+)))W(1XcbU@}a(qX$4(BTdxQ)f%M+$L$x%3Dc#E#!2z$_pGw zz=LmY53(nWE@EiimB9N^F*T2-4p22VI>ML}dKZynQ%A}Gvo^E*HHZbW&~TW{d6aW7Ilce@vPiRpfs^=8%pNPPu1tLUJ6X4G=R+(p|`7%1z@ zB$odRcwn#Y7DgI%zYc?=yN3d0YEHcX7#rK;BK^--diD9j7z72IZ*+4`xNYB z2sT|-??LDqy$dD>tZ7F4WDt*70C*|@hy{R02~hP5mj>lmOU$p~huI%dFa`T4Dv|&Dl6p8ZO@YeT z*IS3`Pt7PH(6IoGuSL_R#IxmO5Bs>#GNYXFZNk0jK8U1Xx=6m7RCw=oQjhBEZCI;$ z0^UeI(;c*hZN@v#40!!F)6Xg3E2iHx-uMbK4JB4OkH&JSCWhf?f&{2Gq0LydLh;W& zm}|be55{f|%ZX}aWk6`TUqw$&-A1}2ra!uf`?|1Cp!j6inc8p5{TXDIu)7wb?XHuZ zsqL=&s-{e6vkv@^(w1&O^*f6({_JGCjQ;62>_lW{#Orr|skzK5vz{H#?_k0!`oW+h zQ(MLn*+6&y1DoXNZfXTJ)Cpmtz6`#tX88vQEArruJ(KIG9=b`IZf;NE3DmgV;8rmG&vTP+hMF1`0-OBy)%h9&*K_{BfNHhEkM5JZR zp&&HST&%`D7`Ie811Qc-BJs=w05|~hK9AC;#y;^vFFloHW*i+s0icYIsB}g2gqn!2 z6MuW)uY^A=nHq(|poSAH-gVF#_b?=JEKyhmT}^;saSaztOBiE?y;}==BrzOwOUSH3 zIvEYD&E-j!Bw2+GH0eMk)5w!W)$r(>4iG& zyVW~VIBle6RL{aYus;{FKM%XotJpuV6HChUTha=8wD=5#$NQ?pT1qG_3W^m|@#XoK zK#$%W{Tga{!G}agmsuss`CQ(lvaTV4VjrHgH8fW~T%cIBBy9zCmmq&d{t;QTMM=TF zDbDGB4TSKO9|Ylc z0!5D%m=9{CfK9VJrc(^qw3T8ClpfREQSxb~cIOcDB$ot8Bidja6}XPFk8b>U8AK%%?Y>&B@~&VCuy&v!8F80hX8n);t5OWd>O546wEtVC^%&I%a@5 zGr*EFz)~~7I%j}&gsxqfKKY z)Rw>z1;4A&*KsGBUv(MO1tm|prpH{W?i7ER#FkIJjd!@6x zxqM~~gn0G^HV&oCupj#7gAaNwc1u1?Y}r0h8$)_GGhg_>*$?F&P_Q2wY>(<~(O@gn z);pZ9W_L8$7S&+`!>;dxa$oMlZ1$H?I&e@su|Et)I@QeMn6x_0?x9%giRD+x114#h ze}%hz14JNu+M;xKyVH!_0=!qpohNLaIJM186&m{!)stxLj12hX;Q%7K^nrgS5Hodotch1Q)G%{~f z3!;6{Qn%gPfI@(G4+AeeP7bSg3ZPJiIKs#DxNm!YQ+jp9BrBn9;Ev&A08-p!kI$?v zo~bhd`?j(ftvO3Vq1`mju+fv8!dd(@r(^xd&+6=@8rci{Lp%=OfR0+n+SwRum+f>0 zvFa^!T;SqnWler`K#Z~@@1$jw7%Jn^a$+Zy?LGl|AG@)QDRU*KyEeh1;*Htt^9A|drHOQ9j!#79>*`uG^h^b}PV>@#L?y;?#3vzV3 z?eu7|72c&2o>%*-NC~%BYsFa=i(crCdl^E#0iiuL^LuFK=P^dpndj`G*e&2rFN)aN zP7WmkTd?b$^l2-f#wM!mbiGU-;t|7e$qKR#o3kuhwIu5tXvl~TMACthfKBu(`QYn} zJF6I{9jNzEsfXY=w0ThZq84f4M!7WB;jaQ1&fwSJT=PNeWOPek!rE<(p8YW99qsb)N?@)xeom32$$=aUyIXvQ@^85rb!~bD%%d z8n4tr?$Mn_!ggf=>N)n}SpBTzEYAx=Gj2PGDuyh)q;xk1FMZxmWB|>vJk$5T8;^G{ zBV%0e{5RtIHH*r>ou)nr@qR=X#2MauTLJM*Uz;Oz_iJy*=Ngwezdr% zEdp&UL+7Fkt1DE2o))P1xP-vp;-gf2V1@e-M9&4gL&c2xhrvwFf;JKyIH9>so1fC= zr(vd{Wye1lh!J(HN)A=EHsz!j?8n9ACVATnZ)W-*13H#=4hM1$dH||)cQ3NK1ABg8 zD5kLclg8}Le`be$5u?Cv|5Ce3s}s9`V1?yh2*^zEt%8YW2aDrQWbt=^j*6%-(?X!i zpuxGbFX3BF#u0 z(SHqMHmm#&cA4>5mFbUF86B2-2+m>?M)C~#giM1&XhiEYipv{e%!gustV%Y!O7Wm5 zDL`gKbWbQp`cephF>XGUxqcvd(EzAiG5v!8P`MZnaxI)NjJcQn1l2l?w@?pL;z(gj zlcAjW1*8zGvhezs;?n?knsA{bZ>)_~DZVlPGJGAVY2zalih-doQT_ahc$-)l%#4=O zjnZQ(F^a@tO^FYB=_ST0NkJL5h6>DSbPCF-e>vmS>g;u#TZiXkAcWE3a2w2I>tq)b z5fqHo$yS}`Oi#_h2x|@!tvRj;JFbMI@E%0~nZq3J8EUQJlB9y>TS8zG*Wiv2n9*o( zX9&y)H8>jrGwJ}m_dKVy%HYNBB<5b>@<@q_RJ8E$#P!uoe=veoLR$Gak9}3yXf3}) zGQX`*)gjuhB7Uk}l^Lg9B&|yKNKk;90A~DBky9NeoFYyqnM|gVoo*4$u32SK#Gyn7 zM+cM8w+&6(RVEGw6I02ci`yQ&Sf(P!PS%+`EZ8Zf){?P@S!KmGy?3D?%Jcdc@GWx}|qX!~ZH?gw2$6AX1 zBLfvKx&z^!#t`C~BV#3st(c8uur$hIYl*<9fodsvi=+W((yeV7Z@vssrtGi137*sY za6)(Ahu6b}`|xSu&>0>DTGEG$g?;!w%#oMt!|A!(KAiIAxq`XUe=Y{P>duE?vx@tx z^ztZO3-0xMi;(Ero&M+0*E7#x>`4PJ6N9->m%p(5B0JL4k-cZ97IhdKZNuoP_0wk7 zUBzHgp9`)LnV`6b077|lC)Izmz&U?tj>w!wZWLgR+#iJxZWkQiz1Ek-*Le5w8|EeM zpTGZ@&-Havq5E$W0_^5wn$Q}NF0VGZQ*mPN9dqAzqh|QW0G|&F-HZW6L}qu2(1v+l z^8L%lQg$EI`KDrhvrj+)#JR>Z1CMyW6FVdUG4kF|H~w&`NS@uh5e*gXQOhu(#?iq2 zSp!!N4Lr)|?1u~O#xQPI8s!r{9LP!W)L%0=X-G9`P7~VH;@}MqY&!#)Sb+=A0U;UK zL2{s3-^y&pGm5yG;Uq4vS(`5JOsA7AlU+FQFxzPf+0dj85!MQ2Z|7&g4q9s~}K?vo^nKa#pG%-@Z2GK(8}b1NxnIVJ?*nEKuRE)TDQ&p@%<} zE*yx)C9No5j+O>iGIF^xQWT;Y= z((B@=3jt3YXenHY{8O<_$(nA>Lr$BsXOcsZH4*Q1I-_tlAT_7aIag7T8#Sq(up=Ll zId7_0n|o+;o;K$zWX)M}fy&sve8<{+M=6zDfGPQ0XU=HlCOoq3mQfp$eE~}E+I%li z`kWpo@AQOG`c+YooGay${Z6m5htoTX`SN^c-e_eb4vV-IHrz88w_Lrrb+foRea-@> z-FpwYgB6dp8PjQ6L>Hz(tPh?B%#& z=`0RVv;Y@715Uvi2%`)&3UJ6NI)hGe)LH24?JNulP^C9jQaseE$`V$UeQH&uq^inN zM_cxV1-i;+rH0d~W$Dy%RF!?5+U z@%ZV=7hZZvHTF$<>4x)L_I00vnU_9jC8A(oXI9^e_R<>hX%rSIPVhK3TwEz3H0Irm zws2@c%)1pPLeLW%Y&4WZh1zoR&>fBLNgNk$DP)v)d|RvCWO;Xj#=2k?o+O5TWe>)5 zcNp+VvscC>Y|YsLXQ@~xzVRG%RK<84k2`-0bZVV(@YWNRtL?#XmVdNx_ZIomKBns` z6)>k_@oiYqp{`Ev+n}R#FoXZ!4Sdg(ToQ5Mgo&gP&ozR8%PBf~d+D|X$sGnn&gJzX z-gyoD%7EdUVIDbPU|5w#(|DOMw>5@Q!-Q7|^Nq$Z85Ix4OYZ>RGF}qP@<1%^YVtv+ z$VWLj7UaE7kzaLY!L?Fw-tA$LJsa=_RqIn^fcNOPS>7FC=AIpRYX0Qx!~gb~cb{;_ zd<4Mn_bbg)=3jJ7{)t7+N3U8l|K>M;`X?RNKeSSmI*hED|Kh$EKDYY$H?A7lFfjSw z4k{IHpsZtDunIA%$d{~IqqIjrIWrW+B_?=8cHk)%0z40}0S>(*oc7nzVfp_-BjO)N zBkCVdBQ33y|1Q`e4C;#5jDgR5mWOF{B0`{cy;NNhC22d~#(g5Z3`L_E7g<-ML-0?M zc+~Kaw@v*M6d=@<`X>UUDB@l!L-k_?rb?p4CIxRPWCMc2v4Tn>py?^Zf8qG3j1twt zGN_VVDyr~tuF|pVY2_LWPJJ=iPRxqRh|#+Sxy{${)Iy6r^oXLzH#trl(XCNzunAS` zod|~+az-o)Yi{r!mgas4cho+@q3N-}j}JX!dE3E( zS*6_MQblXh!gIlZsd8%Zo~^L}d86)nmYO0`m*sY+hztjQ83!93Xbj$lre+!9s5Ldu zC^|7?J@U9uwKXg!k*N_UaMJbTh}V`|$U|r=+)Lo3O2}ftQL)<9?_mkhdo3b>qDZ;B ziW&WP0aFbOJ7}{oLyIDO2Up!(b(g?a3ggF&poIaBj?Wa-jO)`Uw8!M=jEbX4pF1I3l;=v_GDYtm^G_!( zlwGR5VWV8jt!IM-EY*zjL{GN#s*|JRJWiJx9Vc4WpomC2e?U0O=YlA)hbX+O(@C#R zeE*N)qyCltx=bOSAbn}+cRdal261a^ML4C81u4ZLC`l=W3#DhuAqT2Jm;K6{8|m*= zr=O|Q&y*0s{^1CI6GVXXShWb`JeIiRJeJVMRVrgo;XhPYEOz%@T!DJzFG^0lDOmlN=nDTNt(az@55!k0@- z?il2u`UF#SK@O0|G*oiCC&6b3-N0nmRum83g8C2QQU~KZl*LjO9P+l@bp(lWNwJ+4 zqG6BUjD%9_hkG)yj)YA*2-QoRKp1z1xUeUV)S{Si4ARM8hz?#`s%x*(r|D~iv^yFQ z*6y~c2=1wjE+?r|>9&kZOiXN$?(qv*^tR$jH1{-M4L0+>0u%2<2gWa;-?oIpvAr`e zeZDjZfZZz(0Yd0@+S>?>X6m#hg;@1WIN38np>iDQ>ct&npF6myPUA+cI9iWOYa6YM_dV$H^R>MMm01IDWT^c|qAeFVf`~rG;5SG(?xUUSb zj8zgAUqH9lpc5~>1d8|qdbL2Cs_%hJ(vzlpgLa=SZp;0=c2~9gi`u0d4=XdzSS^B#2Sa7LO_ynC+yfR~m!o1eD7>Df3wA253bPZ( zGwkmN3zy;o%?Ds6V15v0^De7@ml2fs7FFUEu_TH&g|Q)4r3^O6V%0oj@})!F+p%mF zt5UM?q(G;7qEUDT3?*?0j`HPd+c~S(#3XaH!+n7W*k)lN&baI0Qub`fo(tJ~#O~fz zLsYaCQTG&pQ_&SOC!Wx6M)>??BCo^!USmp7z z3?cenMTB=HjfIeP8n?@(V#&wd0E+7b)N2^M_-E8W`QChQ&5_O4thrpx+S60BW->La z)E)VRK&U8ETWX;Es{E>&L#m8?YM^{azN6;oWtEXn2!xt~>Qdv_%J&S#ZKPnrSeJ+d zj#Y3-DJ(|qd@qtJ#ZcYH`=o(89-;E*>hcG<=@KVR=pZ^8Hl2V<hI&ua3>WFbH@S?a!o7?;k#L$O_5k3k^+xs#ZZOLY}rMp{MCfLj5HeZ0`Pf#AY z&99@C{M6PPgb20J`h37&v zkD|^RqyLL}N0>gu;d zD|y_7gz}fq1eeeLhy_mMvFV-;V&`)QhnLTCA0ZU)(Ut4aTzP>&XPa)N4xLk8BG9>b zKd%n$DX$P{zR7eq*1`Ei`EUhqHr+Er@RstJg16$~k`TPDe71tOo9P;_<(-dWzM;9aI$4Z+jp!IxlZnin&Jm{Vc_;Nt;6EC5^*0K@{o zCjx+20Qh785DNgG3IJjOU|RqX3jm)E0Ac~)(f}Y904@svVgcat03a3st_T2P0pQ92 zAQk{V69B{l!1e$j767ga0Ac~)>Hr`X0Cofbu>kPd03a3st_c8Q0pQvIAQk|w3jksP z;Q9a{763jM0K@{o=L3LP0Qf=x5DNfb3;<#Q;7b8OEGY9_lYdN?{|ufa`XI^yln~O8 zOXh0|h5~$A0ca?|WePw;0j^L08Vc|k1)!k-S1AAu1=yhgG!)<(1)!k- z*C_xE1^Ao-&`^LcC;$xw_>uz9P=K!}01XBBsshkZfUhY44F&kR0?<%^TNHo>0MbI< z2D@${Ij><0Nz>ZFuS;LFkVB^AyJ%q3edcp$>`%bnd45^YPCg^;2ii%N1NLXBUyCnK4>PdS6*l)S%^Yj zE#>biFSL{_P9d+h^6!-w8cPx*$_uR~ zi(SYoUA|m-K_V=GA+K!t2g(cG2a96JD_5RWUXTt8Wyotzxp=;C2syEMhP-;pZ&Y4+ z(`7*odG(f0QC@rCTuP(Yyz+;Y*L>4u;SGgaP`*}q^_ebrh03b{C3}rt#q!&f*P!XLxQ9Y5EKew}y-k+|KjgKj{8{C-*mPM1 zLS94V2b5RIbXgffUQ5a?TZF@XOqbOn@-RH51H3V4HN}Ev z^lJe?ECAdT0K@{o*8_l9F2Rrn+96B~PyP$>KmpFTX++)sq=7Y)@4}RQJPr}{7>EI6 z4Ad@TptySvkZOaUr!n}c5v5P#{ZzEbcL0c{oJMIe+;=KBjnW=)e@D4#lpMIfr`$AT zWr>5SAHt!V3bMndLfG2DulS;=c+`|gG7Dv1WlBWKksUE58s*BtMe54cGs5v6$JhtM zf#e01yiR-v|I=0pObfKr8@!D*%Y)24ooL{gCS~zyeCa z!!)8Y>1Qc;fXzI-$+Lg&P=NL+9Y2c-WI+qd~j;Mzml9`PQIEzEB!8R2qtKFjlT2>kHBHT>{RQe!$7fTv^a3N6*+N9%!-V3%qlomWGSqpuqu^0 z1Kb+NV-TZjR3Bj(E;#=($~~&|BZwejNA|JZufR57M@9o=T*I~3xZfc3i>U2SB4*&z zaPI(6nt-PikcI$t6Tl`yHvuejYyxOnJNT6bM4A9;uc(^~>K#!BNm}atNszBp?x5O} zexuK^DBBTZ6~gj2JE*WnOMO9wC9U&Ghf59T2^95|bTl+Kr4D@u#Yv{+VnJp4ZU7L= zPE;S(zG?d{?%zO@D{=UV~|I*k}pVmMS75kyDyf!0x6MZ0DBqvTpGxS;cI$;YVsk4njWCgvPI5~rI4N; z(~WA=ra2F-eVi8ZwgS8@L0iuC_)mfFq>*-;;fZy5s76h=?P5>6jy6-;?9yfiCSSF^ zmvT=i-D{+|kEZ!)O|ziz<=l!ps2y7Bg=c;p}%i(lNT zhoDWz*3TR~kxoSlvoW|QLr&yk?hL;j7blK87O&XhXcdlsDLXS&SUA`5_0hlspviFf>H>DTFME?N> zw?6<@(y9+-%Xho_4z&tfJ7@D%D@&+-G=@jmc7H~x(elhM6 zLS4dz!0HzQ4mE84)-K;2;)$tC*$B}Oh0;oPF=#J1pF&ey@OX5H3kSj&`ss8w*mEf~ z+q(-vaJpeX&{q3!C}_qoWGs7za_W5IHz>6EL}e?un|KWN@z3Di*QEU@m8gG=z~2IR z&lN0F*MppU5nz4ZDE7@n)s>5GI#Ib8z=U@gfX#*8nAZoy9o*}Hc!oOSg19Jd$9H;v zhEL2JK$yV?b~&+)z1RwCZNhU!9=6*O58K{fU`#y9illUzt}%+|8V=Y-`(znqn9IQb z_~XDR9y3nn-DOB#@rZF@p3Hh52RHrWB*KG_19og{OWfTbScAEEtKcm+vt)74zwg|bwEssLPNcUO~Pk=HuJyC34MJdW(dEZx731TFu18WI0Q(to}(XIGOfmv6$)Rn9W1UNdDNG%9)G-VK%VS%J`Fm_8JsleB!6(ypp#s} zNrO)E3MUOZ$uXQX=p^58(x8*v!$~8U$9xSu?2dO&?@Z&w|0y1{ zXm%SVv`JBbyb54qkSz{slQQvAl;s}Gwn|RVaP~x(ESk~67FCTw*MVRDR0(z81W#47 z#5$s?RbXdv3G6I0ft>{>u(R|8b`~LJAGpsnGbi-E1;4eU9fsLk!f&maJwaJU05WqY zjP$nSx3+f{eq;IU3BqGU+9x$$#jSzUGB%sD^=pgGk!W9Lq{Fi8k;_G&cD{G$S5X~? zYLHj3EJ)20CjK|l1@$oY_%lf6fX(+eO$>BYj71zpWi3g^;_gupD!{CIe5ZnDzPAo% zT_l`lepMY#X%kK}zpf6aY-gC+5l3MwK?qAOt#!1yfrmXIrq){<{+etL{yBJ&^lr z?elL3h6HYUp937D#!mx@qed}RJg-4KD-jRJjbFh~jN`@|#Eke~7SsJa0{dSQdzb%3 zn0A#eHD0_{jTZ@UzsOila^HqjO&Kp9%Y;gQHH!FFF0aofg(Lk?<@4pxhInqEVZrI<_4O_ zjbF|{&0@GG5Hx-TAhHH`ipD&Z=ECtSN%yT72Xl$%2C_;BNLKGQVM_j4#$hnuj`l++ zZlVwN(m|l^w%p6;W?<8*91nut7(QIec^ga^2%m7@38a2Z4g}BJ443y+Ny+$URJ0Rf z=Ek>crH4S=doN>tj%&bmQyL)?LH44%;j4g-9gj`2~hW zKkkbq=Uzbga(%_naz8@nJ8*CaXuO>3ZUq20=Sikw^Tw zH$tH4$`%B7-^I_@>h3b#H`U!|(Eatg`%JoTuDj2o`ocfXJBZ`Iu&p!@c^`$KTE%+1C=3MS*mf$aai$67HNGrh-QG$E zV>{jd1U)`_PnY){IG{d8vOFDRx%BI`dmfg56EIOAzD^_R-%O(|q7MeN>5c#Fx;8w5 z#>Jo9y0(};46v>(E;cjYf#LkE44C$BfuYA?XdL8+lKVdy2ej?0NZ3EH-R2L+IS{cW zU-ni^jU`|9R^-i+FMBH{(ULEFE7G#$TkEYZLB?>HjNWR8?yYEAJNR|!i{9!v6{X%5 zk*JOh9E_pnU<5S>Ig!UP$*xptv7nlgV*!Ze2t{3iD@ksTtx)N}h<}lc>@Tr0r4CFl zNiw4|fYVL7^OI{;js&5gTXuS=+|*G2oDvEXis_*^cVis2xc(J{LMoVYNrhMdkgQ_k zB^I3qD7T$Xw`VHdzXfy;(uu+)XBBK4lFlcqB&k8+tMT)E5DwAbMt)#^Lz~~!=C`zY zyEgBjc`Mjt0MrKJqc#v7wZSJkFXj>5#Kk;82U|aeyKm6$AHN$G)#uHUN$Ejof81ZA zq_6|~D@)86htPjVE3b#pme0T{jA`tTGK^c(e7|pj>E4I{_Ep!RwDD}mkKnR!`>Wx&6*ZB@0t}xdLxetR%{rRCFG~NMRs?aQnPx150bf$9g zP?|jwqr=r_=)+0iQksqf zLC!s(%?Gvl3vJ%7&3m+YuQq?K&7aadi1*vlvgz#J3#xJnPEQ0ogto#<@6DVV^ulvZWk~ zE@}8o8|=jJnLh0ED@5@S76p!W^&xm8bJ*r_t?ppLjkC}4J#j0q2P2x&4x2O0Fq zO47&(|7s5>g?Zf}q@g(xzOjQD&;h&_5+?zKBtO_#`3Yp!U1|YTutg@8!WL-=GTxvB zwtFj5oj{l$AdE_NLHYQ>6*UnNE=C6HMt z!VIV+Nj(j7per3~9tbmfsf@5QeyMb@lL4u;u#*d61+QkSddPKN{uE=XT$Bz}*`_K- zsid+?7m#nGGz|7C-YvD))brz8sj@9epB5ag=ssy>L(dSoTMo0_U&0GYw7nk# zfJ@>DJH7Y!q@T5nb3l`0GTcHSfozEyr0xbDuJIPuhRAb(1|%A#)jGOtX-^%lyEGTD z?<*X3gf3LmCW>**#Xxda#QizIcuqpGp$2#=B}1Q7>HDze1<#)%&9y`xq})2CF=?cV zdm%cB=O2u0JtIrkxWZyIDJTi(1m7B>iaq*q4!sIkL6xX}f&|Nm3`K?j_a#u3^Pd=4 zNnPaG#V5cYcBLJ3$cvyU8uKdVv6b=ep`g(}i4!DP3YxJrC&eKq-r5t&&+i2?RJ>5t zG*0-SEc2c!i+#~gn$W$4_wLBSZ75Z)ByJ~o0XDFRjV@d977Lcn9|3aPIlQ+CE&&dw}FME8(bybyU!NfPoT8OI#E+04lD??&7+A zYFtYA-h+q`Z^zC-pM_oGgWoGtE!eL$4tZADheGniU|-~I`IN5dMv$v)QT_}*q(u=+ z5Q3Rf4?$Nw#9x9CVgZT21^}@D@V5XUmNDpokTRtDreA<xn7HNM3CA)vN_J+& zdtsPWHs0wAWWdZU$Kqxf#7x)ajAI@_Zn~P-!+${WR*+06IGPM1X;3Kms&CivHH9w$ zq6;sKyI696j3y$5_TnYb80>PWpQPoWB}_&doDcg5VJ(9KTd06{y9wDKkP`{1{u6|pdZ2~1w{*T0vq7F4qCdenN!>?RNOHw zjhyLl!exjz5oU1(w4E^bi$xVYJ1uxUb)mp%pIK3eLEc$})*rSw|V@}tGQ{Cu~2Y45TFTasL*CrLCI)2 zXsPmNSNW{89P<4E5IaKpHL?l`feMRo zkmx#NFDpD*K!ETppQ%L8EhTd?);e~}k;@9F*jM#V=o(B_X7ffIyMGVsC~9 zAi`R3K_@mCiKB=j21*s0#oA|~4*UXk1=Y1tgv$jGzEsV^-?QKCNU@_XlepNo#M#c^ zI)<@oOdyjc-Y!+p0E5qjB7Z^{V4d`^M4gJ+#Xa#hMRe^TIt>D$n>d|R7X^HdCXg6a z^A3#_2Z3p?MVSyxNnEKrKxQ;5!3sZ(r<~Uoo6Me|;%3F7!U8TdvebY$rK6D%z4*?M z2hjY&vRrQ%WUL)CdLesgr*tgUg`l{JJmXecmL(IGYGcuCXn5xTu=X9`Q5Id>v%AS| z3MHY09!L-jp@u*x(!2CfLN5VAhXq1WLvSfkK#B?qq99-c0R<6MiWCtMlvpC*t99Yu`D z@1$Vgc7$v{XJ4vXATL!pUtVFS8LQNBJRokmu(HLqQn`Nbt~$cSuxUiPY?EjlYKZS* z7jZJ=by#?=VPIA}72ILn#4a)d&EriHFjqwc=t6j2P^yN@K0}8~oLJq5o|^j!dwIUo zn6NP8V?2I?r%435&sY3Cd0z2RUVNnXt84}m7q~O)A$@iO1Y|NBna}|OHdeN0vL`tY zU31W(-6iMm!bG0klL_>?mt4O?evn-AG1ctxytZ3B?4hu3qMSFg8S-0=uK?!;>_a^z zYo5c6ef%BVDZJSWkwEvV(uQ3asrDvn_9}+U7MhQ->&jkj1JUxK z*B2PDt(=&4WD|O4!mGT8e-?iNXRyq{v4Vv+)PkPu>r4@neS;91{SyJF>OWfy&He?L z7(eYMgUe9NjTf{*<0UuIi&qzc7KmW(Y~OasMBmMR++>x4>_EX|KV zIl+=8OY);k#Z|UcEJBEO!leNA4`9!*fFT8)E^VP z2xAvsvlO1U`~%l`Nd6pOgLtge%F~Lt zaVG&c^vvrB?-`6PhhgpXAKvp9Te13n4}`gzx5k(jf{;HHe^7JW$e?b=OkPI$@JFi> zOkMM&h}iOr{rCe-9qhW1Eoj@$<{|CL-s}&vnV^H*FNW~?!@<~oi~}%sZLG_gzjPei zw_~aocZVfJKu)8={E=E9?NUKwRIi5)8O*%qv)FOiV4iI7h)Et@;r={5IXB_KJk5lU z$Y*irdj3rZ;MgVqH!!zjFa>+hze~X`^KVk%E24Jj;21=@ILCZj*s~+oUN6yAYwf+Z zM`Or{RfA>r<{2fnRejRM@p3-0RIRmP?Gs+3jHGVhAt#Clo}XJpKU)gxJ4+99N@MkW6LinRh-dr7H9LcfHMTT=Rk{4M0lwb*Ywrwxi7CckL?|ej08;j+*#~+OX z!HMAc4;<>19Z@aGS9Vl2pRcUHT6E>al7Yz(DpDk2Mi@4|rM%M$L(Kmwo@**QBspKg zvt&aPRsgIvcM<;;S_k=-bn>+qAWAuey$C*AmR;JK(4AGriMJOhBg=|MflX(Y_2s+E zTGpS8@BZa24muKb`74K`G?dR%npj7LXQ z6=MI^Koj+_A^xoqk-s4y{}D48&7swaj_c zUy0XHb8iINrZ?K8G6>8xRR~40t1?>Z&39Ay&z)uCvM7k>k;~%@!ltqGGMfSvWpLbW zfj7@YS{YRw!$z?=OuJKQv7X7^%=7TCc-iQ2loCVe&JtD2e2Rsy$b{zoR z|5OGOiXkF#EPjp@fvULuZOP&w;cM;?EI~myo)xSJ?8kK|-}yNP)dR3THkiebzj=t(hauF5fFEJCe<|iKiJY}QWD{dNAuv+4%yqO~ z12SV_u!c-fB)bv8<8O&FWH)Bq48&Qoh=|~KIzijF5=CGxesCKMzjIIY_*-yB6fuv# zEv?OYe=$1^{*}$=-2Z>m-ghtNp4tS-65dBDen{X`%i{ijQ?T;}p`-Es|7FW!+H97~ zmY#6ivN$YlPPPCWP%JUAEPy<0Bb3feURU*$Y{r}%;q5`PEl5e|0IO`K31-63}y<{ySxz~lb{iS1=V8(d}HC}_Mm7$^rt zvJUXa;WBYDK6H-aW(~j}d~_av{bkt+{2lVas{b*z`F|PPl(CK6SpzU`Jt0N>@ytnl z>%Ay>7x;tB^581Cv+p5YKP5rM#H$R>6P?p4Ro z76~WVt>}(NF&L9Q8bJGp+TUX2UWkiN%K9(Cz{eu;1|rdAna&qG$UCqsZnZLXFTUI~ zQ1l5?Hmc__t5|}bny=ApOjx#@hvGvLA5l$w*K<(bw4Pp)lx1?8SlFb5-E(+il47t& zIf>!}P64oYOgIg+OA;z)hqcwgkWa$P9PX(L!P?7&&Fpj4GS5Rkz!#XYTsmf7`Q^RJ z5VIfobhEbS8@1Rj4zcgeR*9Uj3Y}2in=O{m7-wDhCMP8DAx`_3@8;r@oA{g143YlI zuzNn-@2Uc<+Q1!CA;P|*>ki9aLrME$F1`emfcHu(pX-5dbArw1o=Uh~vWb8%Ui;qPKfc>L?XaI2_-XB(mxcT%v!kSu9fc# z+eALEzcx5u*%JN~i{<=vh{gPMg^np(A||sQuKo2%`26?rx&i*!`#t@k)#v{NCF)hY zkG~=4%trW=5Br{VP99;BN0`sw7*S;l_Ow|+Vm&3AfD4oC!jRV;*@3V+!@~Yewq;B7 z@;7DT7=JTBW^??>j~^9l0SuQc!^7^#GF-9=FIzCPC4_8^kf0S)x5gjdot$vyDKpNR zhCh1K25dBb$(J@_m>J>23I6+mxk>(&o22+%Ns0%Pv_+Ee@PAW}@H@q^M}$ z4Kz}FP=!N_*hbHNP21lAG;V0%=hc#V44a=(1!vgwv%`k3BPG0sexEPQ-x*3v)IclnqH5HH@=Nd*Ne=$#TO?V0m&u*Q zH<`i`26AAfLXeLDbYTJ+Sj^QOp1qkc)xO|_Cx>6>!0P4BB8!_ygxf`XI|GYJprjj= z#3Zm-k>~L1+Z;nynbm?*@$QJ1p_NPf64Jn8Xa&dC+q+B&9b3%Zlh8v1IJQ>cFs(=K z*m@4f-5gtQLhgS&wzfEl{x@TbPcZzOvBf@~4;`L;{H|eDLWh+zl=Ad(Bw!!s+b1pX zz(2}|&sX#WQ`jq=n7=#jl}?YFJjHrSC-#L&zYnb%hA&sxKJWaHpJ=h&q2`7=MyFHo zu>ZPO^TjgTtMeBL(Av|M3EmFaAI2oySKC?8e0w zq*`Wg6f(fmh{P1T-^c3Q?((6lS=YABuwcd&?tbF`ce9h_S=$>y$s13N=fY;5Xa4cQv!|G8(6f@~yky&-K?*gzK(A zxY=kwR`B+p+qhgk{(h@*I5$1NyOQ~XBh39x{J95n$ou#(!%z4y!x#A2z+Uhux+&~2 z<|+_iAYv-xKd(`LQw&%e|Igt6q7ca8?oNALhvI)9=*$mH#((C)`azB1d-CJ(AH&;V z-G_f!M?`}0EnhZff4mDsd6q;*wnp;I+@}vq&Re$SA8HSS8I`0 zu1*K9j=tn@KZ6TB!4xNgxt)OKS8Tq`gI6nYHK9Dq(leOHH{e9`HR$WNm0D&Y_d57M znb$lEIk`%O+^<>W_{ATo(Lt0?@_p;1bM*wyF@<~MIP4KeeaS(&(aRmVu2@ls-1}%4 zxvJtbW>;0F7%|J?HeibHa(G6IF z2vcXaXo)d?q@Y|O^E6U0w}(wnY#OC4*Q4fQwbf;u(oaCyj$y;#HD@DSdiBU}PAiNG zUKP3JaL0n&{x2Pyt`A!GlLe0Er-PdN|KM=j!(7@5qfa~B(-;-Bb4jxZmh6Pq_L`C? zDSM*VysWh>X>OqPB^Do)(U$qq>s+mc?WH}u&?5HhhjyC)dwI>kk}kc%Nvo!vtD3!L z2vSJe&Cn-T??pR30=qc#)kkc>Dm$D~VG*rzp(vG&0fe!4_kmG0()m6Qxj!jY^+(+!DU*OaR*=012n=`RyuapoIiHlvi}P(GA} z<1NN?!6~e8I48FCNHqUCZ_LRH_Scmjcdpv)m#cVl79%Qu1Z(+qGf5F|zPo13#0pHY z52K7}h01$meYB>73L5pzvu{4pZ`xE5KYnq{?(ptrRV#!4FDn<|G3Ym7u zgRzO`>|{q@saQwLAFu)C;!UrkVzop(z~RKU&T>*bzS_BZY>{(S>S^cdgXiTc-n3ul z)Z=&LD-%u*B3IinPI*<( zl{=;%g%91bqIqqi$W=6n z=r4?|Xo}#8Ik{RpQm$f+3nQL+R5Z1!2^Vi}J|(%unz}zaC4Db=wGb^MrLO{uOWFY_ zn`j<|GRxIls;{6c^@_3oUUxgSj5h_4r}Xxx(7sZ)NZ4M|)`F+uRlI3=Oj;q{e2=G@ z*w-qWj~;aD(fzuU;_?*ds$P&Q6TG@T!bvd&<3sZJYo&8lr+^cC3$>Kk^sk(&W*Fzf zx%8@#Iij}rnorQa(hB{8Y3l|xX9l@X{^jUvjk!YftqI0H9=!Ush?Cn}4>@vMf;L?r z)bcS#o@j|yJA2J~*or;}tsmsdJ|eSFMH9%?qOBEcXfYeYL`D5c)XCxm!=v-}Y>Wq}xFFIT;SW-s(k%^8+fAxFE-?uIZ z4l9ak=4ZTa_63$iUNZx+oL8%viwKjeX8LA2SI01`eTe_@CJA%p#017Zrm^v+PFsgN zQA_kyGd1BOs3qP!#J+|UUb7E*uvGD89(tl^=^V`C^@c9<+h~>`rHaw3!x#(9x0-2z zRe@af$BZpklNw1LHO)7eh3deXHO)d;T(0(4bgmw#3IA+kSHd^RRaN*aUd5YD@SPk1 zHO*t_2jslwKG<(_GOwz=&w*%tZU_}`2BKK!1SMGOkX$KsIm6bShERb zrnikXk(im}>JObw<4pxvh%;iW8GsTA6k_T4`a`jPgecDFlDw;!B!_o7{n_KWwEJ3XKD;WE6 za5jA>cr_<@)dhY?W{sgiE(>YNdCiL`DQ8aXdu~XpRy6Tw8AK^VSQT^h&EHn(8_h z63u65L5>fvc}4wDgxLzeCLXg8(uwARSDmY;gL6+cw2Z_q4$d=^v5qB&oj+z5&VKy2 zwS)!yu_r{h4G{C9F-2>-@HHccX$=p?xqytDf+oI|%k09aOGm(C0!X!RA!-071Nza~ za7NSwYcgRX@sb*4CSxTdOny_&G7DaCQWY@eZK~0jD>p$;4O5BVJkh+!q+(vt#CX;Svn0{8K2lR-{qsnyK=`eFlx|O+(d0AxUn8B9Ghjo=O3(asauxK!^g$Bz* z)S~Bc(KEt4ZXU4Ah#<4v%ta-lOkb?ysAq(E-Ym76kG60$uQG3-%u(j6Do%OUS;m+_ z@UTpkZnl|&R`aJpJ@0~{eSUy<5Sb(9yk#nX>@X+5&>A(SIC?IrOk?;NNp+PnDB>-&&?(P{!^0-ZJHb zOhMN#mYISPBdHQxf7-mh4Cd9y6@o+0C{qgOg(B0~6>6EG1s$e`D;$F-%5(@?ez2=3 zWQ^GfU&B=CW(@ATk?9t+>IBO~nI1tslgU62KG~vq?RE{Y%%efg`&|<(lMXLI&3~DX zTyre*ApC)p@UZJycR0#id4kJ)bHJD!bHue0b8nQ{fqqCP!+hp?&&q6GB213?+;tU< zF)K?rsm{0}JZ$Be@QF;7ZbrL1g^+16Rb((O$Ut+S*Bs56%B=a?VJ5r#TbWUlB~^x* z;vQr51mJf?^HleA%M^nj6lR7p`LPZX<`FW;>$b|&aLot9F<2KPg)$jtk^9LIj^!no zH5_KKmDy0PsgrJ`r4`z6bCz`9tN z@OH77-N+bo!acw;XSMERhFa$H0+Nc%Fw5MUo||f<&HZb&PbYwLlVi@gXJVxiWflZwesF(hWr{x`nsdw#?jJ+h6GjGG@VYz7OC}YwCCi*{egQ+x zJS!%XV}7R$GJ(hVT*n2&mzLw!Bu;>Z(jKaJcWy<-4$-wgt zPg$AisyWBx_pI?wM|nmCYf;d%*2+}R@92s0Y_g2Epu@y?B7H1#uR;!Uk7q2_{!wQ2 zMJKOno{uf_g<3wtBzZoysTK!wZ|jK)W6ul(b8qK~w#>)paj*Rx`)WH+i7;wz7~`_c zDpxyCDa&-p!<4hkuslqKFxLH64LGkhmlR;C@+08*Z( zm1!BQ#Y#^kJTul&@B@^okD3SccNOr4N?Hr2amQ!?qMc}N?Zs(vt4M`gOG<_yy*q%(HX z7#C9<%{@YT+EnSmnhp)=W0~X)j?A!-L6&(UXrGZGBO_M9PydEK#@z86rv<>Q+6SB@SlY`8fkW;o^SFrz*nywG|(w6yU%>Tk{4{>8r8)XJ; zcS`taNNvmfhJCHboC>LHnWwS873OS6^GMoxH})fB(oI6>SCQ;3Kf#lTOcgM+&uOgC z$hcfpLND1=Kg|{<-Bby^9622_vx7FQ4u;nFK=Z;~-q2qn;UG-EPNJF2ZCjoqYUek= zc=EA_mw3`CVeL?#WeOg0n1-RnEz?Qcbem}&icfDL)mqiF7fe;lJdHKB)S`K4l4Y_r z)rY2SXk*KKGsvlF+t4PK`Sd$U<#MHk_P{A?l-UbkM?D|7(?Waaqcw`b&y(3?`h*U# zGA$Z8disVAgC6{l7|swWlWsOG3}) zqYw85N6NEgP}BDLow~0G#rZPowIDdYUJCs_Ul>xIh0kQ}Ip$SmBGx#}MljTqhF(pX z58Q8(fu4mp0}=b|3=KstQRa~L-VfZn!7x=I%CYLlp`|Tz@H0t;6>Ml+e%g6iQ;|tG zUxZcw6J>tGdV`uX%$Jri<`Q-slGl~c6q{=KScmyenZs8d<_|LHtGxdrWp;Tb)!Cp- zq_?lt!!r}nTtt}_ZJqKICj&io(eXu38I|GrilnOPoo!`WuX1E+EAv+{Ra5UOn-}ky zNUE;hz1CtsVP+(Q*_;eA<6RPw8R9)*nFrNFq8}>rOi(6MnZNIM$~>72EI(DpX_#k~ zGQ6in%^N*0ct5u?>x0aCZ&(3ZJ|Wo0HhGH|piemQjHLR&y~SG|>!m2OUi5#p(69A=RI$Gn`)<%%DvCq(P}>O zx?_!l-r)t~5HsF^9clY^puj)rt)dd&gSMEV(U@`%^F+r@SLa z2Ky%OqqaQ5sypR5>z!}&8j4jkWzY}3i=hE0pxS~TxWDo~ZS{1-dS3Kg@V;bo@7!LP zbaUCe#WFL4_W21+0JU%r6PXO-@@;`0W2Rkm$`j&y&oaLhcQku_A6aIjwndH!_Z_#) z*dUYN_l0Ga1(|5yMKDpO`w&M@5#P6#>0cas!qTjJNuRqQW$-I^%9QdIw9G)942n!? zUm43B^f*izU!r9K(GC;qt7DlyvmK_auLaiRQDzy|&(xEFwSH$S69YdWn#=jRS?0^2 zo;cs2f^5@GNI@B#XZie=xsCmT!;H77dciM=o_JrTWhMvpl=n@y%!|Ri?(r?K%y8@r zBvl39bCwCgTr5mQ-&)Ho2-f{x-&>Z6!n#pp5`6nC^IA}ICEroYObBXD^nGdT{!umj zvQ2N+y|V9GLC(wGI<6q|T|thfeBX(T%T?KT9gHy-@YhN8b3u;EsaOw_sqIej<%^mQ z<_pa4BGbs1fYL^p)+$rq)yP-LGV@?D$}|E~*)nIa>mk$3)!0|fGR>7~1*V2&j;o%w zU}{>Xs>*Z(Q_C_>Vh>0?UBIMRW~(x3VCq_CrKai)roLs4DAONI1Iv7@sRn^*WSIua z3uQ1UaTH1}m-23Tgl=Dxz!(l^*LMKrI~U@|Q8sHS=u%y7%#d1PC{S6!`q zqb<`;>;9Unwa;&vrKYfO*m~sanGC!7R4SGn(oKn5Qk%U74F; zmRe?-GQWdaW|=|C+y?WUWyUGvcDMDdu*_r1c)_f+%udZc0?ca5j8~=rm=`TGN0~xk zUXG%dxc?Pti+-l9Z;fSKFF8zS-&>ZM9b{5{+ay&UX1ir3z3imw;(IrWYk)~=pA6I0 zx5qMgWLVq1o9_Tp88a#9wYvE}v?XkS-2wYXhUx7)8pU;HL`z|EOh4aAD^vGj(c^NB z0YiWIzUrA6GRAkx%Fv6hzr_=evA)l3UR`UsERzoA3!7>ePFF-`yfVp{cZ8YjyKL+A z$0X77cIZRCAEE*%a|PrjGBbSzqG`iI*wK@D#xu)T$TH2o&t(c*re_By)hu7pXqLGI z&Ok)Z5?`xmYED1uFl&9|kqYw|)}oY2H|u>5TBb{o*=U(4(*-9dqGz)*^)Ne-ak;kp zo`~j5?S4pd&oSG5i)`*yo^Vnf@U6C*7h_)_d7boai4LHIf1@2l^XFg;%2OC?B#}Am zm%BEV0m8Yco(Ra}@Z{c)Bn4gt7{e~m+yE5&cau^ea zRLJYHmgh{USDA0BJ0&a~_Jhs6=WCKG$CL>RE5tItspUyG@nPYGSi&aQDKPgOQwa=Z z7GX6g<*A}FQ8OGpNnlvhI4XbEnw%&G9bq%Xi zh_iVt&On$~h8Ymn(#kCJJ2C^q?zaqkZ;4?X1>?hd7Gh7RQO{+WbTGXv^XW>FNjHyy z;r#w_4JXwCFl_frXjAIRF^j^+Tju_X4zoCHrqy%gNk`Adu-#T>v+Bt)Zz}UFb{wMT z?XaU(rYG*62(v5fs%0+R=P>)iZd%QI(K9KNZuW!Wqw)ZlzC}*U#t1%ct_@0WtKkY^A=&1(`y6Pa|gC;Uw-^9*)UBJ;5_lP@^Tk?;>}s<+YZ zlIm>um$rn{4+)cDE`Xs`C%~$r=VJKJC?U>iQ64fG=Id~LCliIHp!&y7ZBuA99GRK25wIkvzQ{+7-Rqcohmia!9OeM>FjuP_UcvCx~ zs%7@)VUjF^FFOWhYTMjT)pT;N9Z}CRLxSb08&SVV1ZtYes^DLaX&KSb%3RrO36!~q zGDBf`{=*%ph(RPEkyWM+V&=2;k{{Fh^%jc8_NDxMZ5!>j;9nSRRT zm=`0OTjqJygHsV@PQWMdA4U@xTJ^(i!ep4ODifb54Ejbyiz4}qRd-*Tj90x<02Oo5plgbPa%3RP? zt>Az7Z@jrq23Ij}S^_q_9?=$`T#GXJ-i-a1VSbJ1P$Uv1Z0!>!2VcrfFXD;A3bu+P z-pxO62mpn7WZKpe;~$JO#pk8K!>Z zT3fH5wLfQ=24L8xE}WF|Uyf-Qxxwmbz0+ZuL~gY8dgLpIX%qPd7w+Z^yeR*rn|6_# ztquQdCwZltPGs(|a~CUv)458LD#LV(+*+hCa_=7OnLQ%6-Ic008OW3lwrT&!U6xrb zS)pD7BKKHkaEPOMVB}s~o|-t#;J@)^P~?6q^N`z-85H@UWj+t48X9@{uH1)59<>%r z#7PeSWtdTspIK{svr6>jn6Z&(i_k~Sh!rN?JOYNDpx;V|c?=9|u`rnXLNM%^4`~T= z%;S+?S*BdD|2(No54Bj1S**;nzd5--2j)&YuOb7@gRwH{{p54K`-j4kCu0FOC45yj=g`K>1MP9eeeI@Q@28Z9x%)qGv|KVPeruyR_ zdJ4qcE%R3KyP2>5q33F$yJb%OBULvM$&>raf0VF(vAgxC8_SbwBhFj+FSi!lf!@jV z_=ld>Meml0{fEWyA@#fT)D$95ULXFW?pOX{u_ymgLi-{ibmf+L`9Dhd#y@IN`XBaL z_mA8&|B+YIJM_?xb-{fE{*&CvoW|ZtnBC|JWPS=Vdz48DrrN7aT#$KBnaCis56qq8 z;(ah)?*|oerza*YP+|(+x@(sfD3E}?1MtmP1rOXSm{Sfj6!>?_i~Iu`enIg`i!Srd zalA(bueS{6sj=;%&0w5})sBfVd*?7+j9L4F;E|67Z{zfv{4bb);@icT)XI3O0=T2P zgnMiF;4C~D3jPXwBjf+Phx%j8BUJ=1YIv-MKhSVD4R6qJeGPZN2j{U!-$AjJVk54m9d>+ZaTt1@9ygY*S$hBj!9(WcJcA`Crv?r1FB+{OBkZye!ro(A{ zhTy0Dgnw7@ujZovPJ70gU$D};FOOZ{z!oQiux#Ms?}4TcKe z(PE6bx(Cl2#K)LF6z@MM?RlWA%i4MOX0fXu4uy6 zquh7cIS`w}UZeBmbF2d1$_0NI>4{}gKjL}l9hXOr`Ar1hWrE;Tq+__(uf%9GF^%?! zHVd)Ko!BnP90oqnF2zj5`si}L6w~l6_P-P}RKrb6x-6e&G09vTgy(mxZnAE_P4+Ia{u**D@kL~L+smO=z*+#MHXldUK=pPRw{({PXp_n;DS0m6+NvR%3cT8*Jx*Fb(dPPzs%VIPJMlo2e6_F|Yn#znjuCwNnF z2kb$9$~p4*x*AqSvB;(zPMZ!X61D`>ABSbY(Pp`5R@!>?y#!{-3wAHv-i z;MfOIe_$q_cVv7g@Y{jkSpA{qr?a$AsKFg=)F;%`f1ULSHS4f*U|9ST(%Jl7=6?9= z-Qb%%#`1@nWmv}%r!B-==iqnullGW{_TJhcxBtKVB+HQ&cn|)7xF7o&;!j5e-$Xy! znx}r0UygXbwN9K{OK=~`#qfjh%fxpI2+qg2u;Idj^v?|6!g_=F304QhF~tRMpBG$H zf|y%QrdtiUDGiLpHV@os_mWLruwPmr#bUBKW&Lro8DslRvgxUKL~)?vSj7!0{|?Gk zJ0{t_VQ;aRgugD2=i}QY8xQ6&;wL!O`2_fLyx=!UM30HK@gCE$IsK}~6vp^qKWU8T z&x!f=Fq~xOp?{3P_)W+7W;nL2X;$z% z9}sMcd?=S-(PIWr#d~eYe=6jdZ*hb_!8pHd^Gnrnma5|{H6Y_GHPFS5t5h9tsXE?L z1JTw_sezjsU&e;J1~z>}{apirno|Dnj!HQOjTh{lBIWlC7aW-(_$T^dGV0UUmd9fz zV*JuxN3ER4972C)_(hBl;xgq&!7nBU>yd2UfnAc}Pi~{0Cm~m;tJt}Cj?}xsI0<*N z<$zzPEP7kRFHvv73NCX7xMYaPeFJ_y!rd_*Xt$OK6Qi{~KOH6hW&K#;`{AUF@k12j zP>+g@Jm#L+2{=4X`dFDkN!aX0qq^qKFJK#aXQ@AA7_SF@ijc~ zC8psU4?wX?k~wPICCQvo+@~n^N-}+IJ0_XQcKjrnnTlbyy^~BAjc;W8N0M>IdlltV z6u&9W`Z|6i$&9dkZae&|wb-}H7O`tdAno0}zwjlO;H|>;9uxYm@E=*f;xSKXyEN1O z@AUWm8owUnkbb3dlK7X$VQ=bvLE~F%`nsCFmX60MgQfk;;B>4g@{QXg=}PPnd}W5< zt5(iqMk!WAKGdJ8@(pzUZ83%Z-(#ksf3iHI6;l;IM87JDe13#~CSHbrCPogD@^AS| z#>vAvZu;AGh{v2oKF6W2R;t+P7p+&6j-MYp3qM=ajZmBfKf-eM)$pu0Fz?qxxEafj zk192hetW_8f0ua<_8EbGjwZD0u(j|n?AIHob6uVqNU-w(>WH+QC#oWUu1_91F8e$7 z_uWX}$nq{-FStzK!Y)&`y~}*p(U^PNN1JpH*N4$2YAx;rwvRJk)pwb?_@vb{=Zt9r z?2LLhK|gObkmXM@o`U3)%tg%KO`zx8c)VMPbYG)vZGqSBb(zkP_uKL5q{Ca**auMG z6!g1#uz8{NtY5TA=!*3{%29ZzU|c7`2T?xq*)0U?wioQwLGXq91zV;HMysCNttA|( zdcGYZ;RbyLW7`O3brvk5`P5K+3CAqVw~xmEs(Q=x*7RwDOH_X?4QHy}sv{+SehxJ>o-(0slhA^ba9e_w`#@73~tt>ta4`8U>ZTP^<* zt>2fL|DooR{D%?9_ZmXnDpCmvpy>3HH_e$7%VutG=qEB>qdSfA{_p zp0D9GT8ML)co3Legm~$?`gWGPQBG$r&K;v`$K+}zoPbgO!Zu7C;1gp zJ#{qy*4jRy+RojyzxlLWi_|X1+e-SkHNVNKf28U=rS0>o+GCTZf4jS+yQT5NHQ!^} z58hP!KcIG7r}pos^;x9l+otjjRQ~`iS2vaaRm-(Z^Lb3=n)XvWtG=(b{i4;5KWX{O zYk9Y8J@3`@^R!(zX??qD_)WF{I1L9h|Iw=NlJ>J^10?^$s=tBiIj;R{jkZq*wc{a; z4_AGYw4B$qT;FSc4{JS->o{MkI7sbTK;>(w{y(k$-1+<>?qK(Uze-OL+=%@_pZ2-& z55eCLMEt|Ii7s;%cgZq5y1xj3`?8qZU(k3A*01^Y*aOKxB| zSO2frw`4&7Ev!e02J;H>x8)Kp2mhRrr#x$s&jW}jPh|NX$P>?fP&W7%x(H6e{L1jW z?t(wvG&aohf^3xcou)GH$bQ>}Q+@h*msx}IaK33(2X_h}SFAQMTII1HKgxY1=AUF^ z<{|z|%wNPJy(%oV&bVOZ0`P-lnZw=2^&JhHX{?cj8HamoN|aKWWUX z2xnnFc^%jc_zti@L6>%rMMx-4_ZbFA#hX^C076MhM0= zq2lw5f6=|evc^`E&1f1E9V)!%O2UmWAAQ9A)PBl z>N`nsux)>QEo>OR(vSFi(SOPU)BYl+1!`hFQZGI&@I@KH$XLP4=%3`j%_q1D`7(S_ z`A4u`#CR|>Jmm2$w{XFO`2}AnD7Z=EmumcH8Xq1d@$YE-dm8U8AbdTI$9Jo({!tNv z1vGwyjgK~Erg9zQHK%R)z2=*PcKs7Pe=pb9Wh$YboA%dkebf05udl$YU0P=4ZG z#TIU^1CvZQ^dI7Al#j@LIkES6;S(+1osVM=$uAY@4(#6P?Qf0F^;@i!N`sh`{>?RW%Ze(cMyoOFVOvu_GI{`T|^3BL%xPrtDCjD$UNq#WtkH*9T?V)oj6Qp{hPZ+`VpG3bZ% zPxGM#qs)3n0qkI*eb2lQo>9 zSV8eY#a<;v?uyF)ruYuV5&L;T^)nr??qmI09Ky5qDAz{x$JxMNmf*LffX|V*UX>p!};VF&`j&68pK>5=q93dF&+gv_n5Q34Y3Zm=92&9JI@MV8&SKKlh)& zTd@e&M*V&Ox-ma&i^%mWDd=}Uz_0A?=mO^Q?gp%HS|Akp6JKaZgpa|wC+!@7eSb!{ zG1h1F`{m&OX}`SjEQjQW^Z9fs&!S5rFY}YjY=&R>D^I@ptKmBk9n%6Ov9BlkEIQ}) z7z3J*lkeHqY>(XgXouP}UGDug(U0?*{&*G*{8Jdu`GC@%F4O!se6k#2X;+;4*miVj z`{wqCJKHa}-K0Il{xQ%~JAe=30}Epu#O68w`4Hz`a zmtlA__SM8tjeknRpQ_w>v~~549@puR^kYNpyn%Mv&GCi%ZO3swfcQr~6)gOj;5rR|saRa`$$Hd_wY1gmGI68vRUqiD zgY^t?&t(ap!g`Ehr+f`zNA{P}gJr!u5a}3hhjKSW{x97tJdkHy*!PQCBLI;A!0 z^IDkTJgjpVzS|ym*L%-h?Q?hioccKB{{Pi3QjTPtvtgakG0tSv#l1k3_dCp=J%HCS z-unU_|I>JwwBM1Tg10da>6eBiPcnb9%YJcaf3V~}y`>(uXVd)#e@2H3Z<{@YMr;w)f$ zAfGd+h&-~a-rRbB*o<~f3-moI$S>M4%x~8bH@zju_XioST3V2AAu`N&4=rLG^+ow_ zRdSgH!1plr7X$O7O`ZXEQjB>XAHYVqE#|owfIU_jvnEeHrMxMIZ^duun1Z#gAm4yz zm~VO$+bT}B7-u|~Z!6+3+nI+BXW==Hj;VpJ^Vly^1J@rDEUe-BiY~=U7URs0Dp;GL zJl)ZMcIC03(+-Y*Xs+Y`mSPXZLyC@nbNt8u)L-1~ANHvKDEL40ga3d0Ls}p#LFRR* z{&&~!f9oH=SG)Zu|M-9F_y4!`%^oN9bo^o^ou4{myzfJQ*sb$T&In@;c1$wG8smN` z`1E^lrUR^ies=-mH>!g%SAZYGAJN}0=_USYc1!VB9d&(kM#JR>h+IGH8=6Go45O#W z?b7&Km^-f_zj1Zo3z3hvpU5AA-=qH47~jNuy9@rP@sY|GhaSdvSNsm+p5aOwpQ8Nj zZogsV_zCS6KP-8KS?xwv%%% zQv?1x4eNri(t=a7MX&fFwA~8&BbWJjs_?aOZo+WAF@hWF2*zy?6u*Ue)cP;nx6pK} zQQsGk?m`XvHTYSq^N5arYodPcrpl*2D}K+f_$1`%2mgK)^9X#}R+U?MAHHr4do0j$ zAIy(?9te-L;W+a|b*$qM{&pbk9B0~W!F?WtW6>^UfcatPc;Gw0dx5LKGrUa0;+IiQ z)i3@UYd_WB8~Io16lanwdQ4gXUt>e~$org6;>_9dF4F+|PGO($@Ai)=jj%pL{LrTO zraG|7+p^ExiG5Qqg!AK^iTAUv;QWsGt3_uY?J={;xy)e5joEI@aG^G5L8Z#Z`uhCAJ7WBA1O7N%%I(PifquRV^@=$u>)zuS?=9O$ zn`EqQ_d(vtuLatf>CeNja8L3i?6eE$#z~p%41%J)+md^JZb0beX^IZHpv_H@3h&-nw&R#C*UWffyjsnU#G)*c7oJH`Zd;f+Hc=O+CR~s??wNoeP3-WcKGk~ zNjV%nx&6EY#@`Lpr=Q|ji!O7kjr3EeUr77L89C32GsXYL+l`&$%+8F!`^v@~4U0FPLz<5P}x-U=pA03CEy+wJif6Vl8 zW-d|AzT6giHe;RB3G#&z=KS?oufxicS zf!Gr34`L(5?e_}*rsBVpKdbna@~0L5EG6kLD=xpp^tt)XsfjOIK>rV@8}VyJK6k+| zpSzd|JA^!M%xoafthlan)yffa9 z`E@epXJXYT!HLC*x%G;iC4MAzreNd4c&--hJLeO@so%)?PXfwGzTCGG-UB(d|1gzb zqUm4Objvke{6Udxsp&VU{kA^9#np~@*gSRxEA(mdCqHUpd9O=e+BG7+=2QL zpT(MCeV+32e)%Tw{FWwhb5%TN4P39`;u@b%al7)@-6FrrhI9Kh`^#3O=kMrj&65wm z{yGxf#~1&O_w4 zIEnn;CXrtNBJwLgM1I?ccx}31ebskB^*>Qr_(_T*71I?TR-CPvf|cR_=`TOTxFNRv5$imR#h#c4cB6k4vwE;c(e>t;J)(zeamx3z>2lXe zpWuA#ee_#ry~A|~%fV+JM&iEtPMs$gO(u`~Ll!-DzWNCHMUQluBb_~_?j|j-=F`{a zliRQ8cRoYEYV-i^bwK{lRLMsW^Z5fzkNqP0FUy&HKjpFR9VU7wrW*4(!dy?~T_1hl z+yx%uE7pY{*yG{(!Gp%v`TJy zB!4^~l8@zxGc{12bDfZ`3+oeSW=#_0KKVN0w>0B=FWM}{y!B|6BvS_E`4xQ6L_BYs z3ZG@uVSNRAha=o>n!)-E=O$yRC)a))7vZTgE{OaxEs^7c$niW};RhN1DNe8l`WwS1(BFtWpC;aT zU2wo0!MM_t!?Q$#@cc09duxEKFQ?f334V1C`8R2wV!w#?XcZ^ywO^l3`;R<+-w)+% z-{GI>^m&K>7=LFv%yScHclc>L4s!1kIroiTLj8E(=D1?v^>_~EUU}~G^?JETo?#-N zcl~!^o~OI&iX4%0U!tE7uK^jKH+|mlIhAAlV>nmtiE>}PH#IN~?aT7~@DSgF!Q7Ak zMPTQ1=!YeM-vZ--&VKWA^kcp+x$}MQr=rc<=(i0z;XW_MU}ebh+hH%EZ-$^OH4$Eb za0B3yd2;@>5p`^e@cp=t(KXd$PMqg>^_T^H#g1dc@N8~%lt*!oSHef0#{FmTZ!H#d z#Q8$yRhe6;OoG}snKTkQLIB@-}>d{+|Jn-%Xw*>k^Aah4nR!EO0*|66gUpM2LqGuVUk)OpnF70B-ct_Lo|et8pc(NxZZ(WXB7 zLUQeB(>xRHiGJJp7}kM6`uE+yk0J%>m)}Qur92+f&+bD#<~i^@=ac!uWA8702)Rk8 z#jehM{TFvgdH+gs;XPiw*Ms~HL%*Z9VHKQnq5en4Gah-4lXdp14W++UbjiGZ2sS+p z{Y?vDEUUdP0t>-zMCrG=ew@!w{lrPJ^@%B>%`wto*S6&X0&(CGvZ92C-8nrYMeO`2cOZ!W1nwe zysZT| zHxsP?!#S$;U%BU^@?1`?T^GTQ&AQ0`yIGeIvkU8p)?IMFBSYGKI>t}l{W{m@g&;oy z^(IE3o`p~z$4=7U#a`{fmoLYD;M5P#o1$NLf&Lk#r9U)nD)><=K~HNz=NwndYl>`O zIVzeh>jk52IJX}Cn!tymJg>r!5qDY4jemOr+aoP7YAwDh0el(vF^C1RULu~)BIe3> z{0#S7!M~6o*jK~PYxpnp^S*iH{jg&?+^;F_T>-~F%5a=%cmVg!fiV{) z+;#x_OPslE*ni@%c;Naf&a6;OZcaZOXDR^chb}CXb{UC&!FhWf`YZ9pQi6r7KfyhC zjepLLzc@1+{cIHS%>+&YPP2&TJN%;e$XLNwhU3{$v`>w#YzH~#n}uH>&xf&r_pMFe z8T3b9^B~quxW8}WiopLN{&Xws3G>)v7s@dg^L%(|p@_e6*$oIL3O))nxos9QjI@1;7WX0qXs-?MFB#R&?@}c_YqjD8uz&?l`EadY?x- z<@P(Q^|X8gwI46gd1ML7^9joTB>K-M>hF^CJRkPspZI+c^o!Lu1(!jV;W1qWdk+@m z^TFiHz)un@EB=Y~CBykKUlPClN#bXg6nv(XAfFFrJfHt1Zqj_ZM@hPP#o~WS{4u9I zT8@1x@6-5Q8vlrm&+YeT8{ikam`_7uVZ(Cs`N$S%i?6yQnQt25djY_&hT^wJfR&T^ z+*x^37wvHZdBmzeeZQTo55Mg%n9^I?bDv@t#VUP--=%m#v6JFB#fvJxM8iHsZ(m72 zR^#U?zO0zhRpMV$oTGS5@l}+M{p>@YPYieK}@~ao08rW&EyeVew9cRKI(;nkuRCl7}OaIJ#^UkAuuj6}^lV30-PC6u* z|9!y}#eEuo4)vkjXNnV`--c~`w0Y)v+>b!H{=hnj_Hx?YX>X_f^XWVr0Xwpu-whS4 zpyB`8Ub%W>U=Q9$p`Bt-=lnyADcv>6B;3RKD#_el#q)|J`@T(l*JvZ}OC%ZJa@=o0 zII%6u8ExXWBY%X~V4YAO<^L4phWoyK7NgCqskk2k{jna|M?MiI=+7_MsGwkaA;ANM z1${AsXB7Xq&&~(A_Z`q~t#RJP@kC6lEZDRtpRdPz53oNmbCKZ034*`EzmQ*t@k)Gl zwBYmbR}6blR$?!VYvN%IC!)O>-qcazZ@}*|e0+`Y2hIp?hJPZzWwnGO{uX@82zCe& z{21qhlxt8x@K%&y7V1xab5X&bs6WHyiwpKCAxM8lp8kwjxwIhPt6-S#i4aR*zeh|| zY_8Z-vA5#uiayL6l#fzurI?}koZ=S6Ch;O4j`MG(dsgw3;-89q{-5#myF~h3;(o;u zZNzSq6xU%qGQR$8k^9>%_^3~?cs{|oYQM2KH=_I|wcmBM-+r}UhT3nX+HVTZ{V31- zLqvX;g~!0_`J55!9t55(fQpF^yy`YtMds(L%Cz748xvFbaj`a-o|t@4^odUr3bjQXNl`FAD$WO~Knb{*JvT z;a!StRL_X#gn#(3;Bc(hsrRI|`#f#;>(_<8?{iqEQ~sIHg@5H? z!3kQ=J?bwGDel*LM610A{x0%m9uz&r?f8i{+u)ztbj@97&|h`#ig6A<)%id8=k8q# zoAtXjqQ(4y`8DT5&Y?r`i+fvdU;Udj;cJwWg?jUV1z!fz^ zJ5~!u?Gs#xa*)3=O7JBOZ$SSie^BM0(DX}fe4N?-HO}EMzxpR)Z`W0xYo3bo{n}K@ z@09P-w^A;iZ%jx0aI_Qg*seG{OV%eRRQ^}YGpwi77v~%eXxC)3qnR;}yUGe1c&PLMcYtbw%7c4mOC|2t_CsA%zqx|zFl$d zVG-xA)1@9E8?nxS-K$!;X!Be@mJ|C3tQQt{EpOUj|Gpgc+mC(PD+nL5{S(imX@7B^ zGwL&t_H~)gSnsf0QxWEOs|rq{U6PSb^p@L6JL5g4#v=DleZh5#FQZ+!Mt= zZpp4%kYl>vHUD0iCm5cE`GE5EWAQt^klTj&fEb7Lk-*`19m|^$-wI1 zY1c{!lfQ`k>H=d?KZak2{)WJV8ovm3WWImEj?KDx&7NxTd%$Tp&u9;9n*_fG+=TT& zci<@ah2Fr(F>F?+ySz zsDR*)qwyXh!oOqwC!W&qHyAfecYco`zmLT5aQJuP&lnfPCh*_H6&O!Mxqsu;`!`;* z4gG@rWcVTC0F;aQbl38|w@J$R80ts<0K$WT$2Gs%+a+C}`{CERRWvVD!T0Tey%i1a zgH1qq0m4&|t{d#be1<7jP+S6gk^e&VKCOEBb?T`|*B17mJsY+VIes^Y=P@};CI71% z1P8)?)N^>Wgd6S@{2Akz{Op?&ZiV_V9C1?cd}YBt+D_XrH{cw=to%s$TE7YMJKQr+ z9)5lMQQ!vPJmBa#g89*3Xr~pJZ;6GpeZR#zfcf=G5S)d6!|;5}55&*L!Qa%wc^LNH ztk)TYiQkNtc&D9DVtq=zZ}E|o* zdsk0D@3*srFZGN%>Kb09;b;xd)bQi*w=BnVuoE#*OUknj_GS3V zA>7}2&8;kcSJZ2kRFN?6my^Eb*A{1TM&8u;gcj9&%paMYNWflRj!SPK1N zBk+A4M}Lo&dZlasar#q{VR#l1a*w0m5F^JJi(g{CVEOuCe7yrc6MmgI0Acn+K37PT ze(yE?Q9iayw_1WHwVlpFo_aQ5JxT1*Mey5f!BxeiUsrll^yRN2_#VbB^&=Q^7@8?=oFG_=EisxGw~|AphWgwJ`k6!}#9Si@OD%L_c8o zQfHjk0-sd=0`xze=RB-s5j+=z_`kyh=iJBd7Ut@G6#o1q;%k%_>;gZ`@D$}oDUMeh zhk2Xv(WoaeTlveFCr;+k`ziEXMtrGqf>omh@5lT`{%nL`Kg?$g7jy|8gnouAs(dq* zKd$m!Ri61$j`{MtWqnY8-gnt<+sR|bYxr%&(XqIHgLUia>3A==Tb#+RjkP1z9sOX( z=Ne!=al@EDfYT6u9oWgn<9`0bod0njqbQ#72M$MnJ`SuDf^$@0FU4kx6D=m01JKu} zVMX(l9XA!t4YYT3!xYm4^WVO1F$TY_Z4LsTM}3Y1FQR_LPN?rCU^42@@N~?d#66hz zegJO3ym$*(y}00`&==V~#$Y2rNdJ%dZ({t)UT&kIOApWm1Gw7}qoe9i#xO&2E0`CvNq zy#1D(=l_87;i26tnv#2@9`aoVd^?w-UmgkTvn(hxsd6%@r{TAf=7UolyCw;H*{4V1Ne1DedA4mG4XoshOSSp*9 zz*)d`NY@npscvl46yC~tU8ulY2b&q=_q zVt%XG$ZIHHrjg`#B?;eI#yB_uj&JM!CIU9v5@2ZUK;eF9Q2dDAy51q z0dnEoov;*aEbZ+so&T|2s&-Y?nuwOnuOXjsoXJtOy zpyApY-l5@U8h%2a%D{N(gUXPmtTdwha;-Unm7%pk!@kFg(n&79YzzN-~?V%lYUdX>z(?qB3(VS-_3ud7rnRt!HaxkTCTpBuUHPRc~|XoK=IgL zGB2OCD1L(bZSfOcvjF==_P4x9`{WICJt$!vmks|9SN9!X)A`2%{JHmxd+t34Q6gHZ z!L2<)&0k~BDmALv<7RIXTcsru5o)DK?V3f!YVAGJpr~1U*KAP~HKKms@AG_ba)>{? z-mlMd_H&-|oOyeBGx*D{I00HA{P(s4c%H{TYzTMP{otuGlPmgJSvt80u0B@rlh{&| zYr;~kBlm(tk^C6-eFx$Ztv&G29xWiGxn)p zMV3VlgId?y?_IXS6~V6qd<|c?9<-*peqC8txLSredahp&mQJn> zt?qKaK5W0q8~g&;D`DEcVayYHNwB`P&zr+rRUd@0%G^`gxmIv?tB0}LRG=ywv9Xk*7rTXf$S9d zbME2n0eLm}rQb+q)Dq)M1l#?`u=eB(?g`9APJ^R(MgOVn^V*{P{zZ&k)Mv0@@*b$K zPXC!~5P5NF#_IXcX3NO`9%ihW|MzTN9WnflCU8g1e+g>=XK}bZp)mfw{;OF<=uM-W za<5|=j2AsA4c<=i-^@0V4H!?nKWqdakv9UT`R`zD$s2RwX)*uZY*%BE{|HCB9REUA z>m%Xn;BWm8unFX~uzu&2JH*zJ(@w+o_WzAtBL{AWvlahi%mcO)&QJAr@Kk{Ran=NS zSLlE3@QcL$r&uz%EzIW*|1)eqxy3H{>b?ItRvETCmY)yvci8_Tn*v82bR_f+&->qC z-W`S4cYylh{})Rq>rgMB_&;EeJBd61a(lot*0!_o0?0iAUNDbOgg=4x*C4=ZsnrXe zTQRya%&)FlQv0B@wY>x2Nhn3L3?m-~D@?Ow2vhyFTgGv_+atSWn#mR6r>-}VMSG-M z{xG?wUunw&vS^RWT3URL)6Zk*nttUi9m%3S^0Evwxh33E$uhaU-}{!eWYHdZTMm&$ zdsNl(kI8|4PRpC^5p*N^is_5?sJ5lC$^HH6THb7r>RWs%-!}-}0t;wh3Fpq%>^m8( zKOajRxg1zwK9*GS|N7$kZDbin?gUm?BTEMP3uu2k1vIvdBS(X~fxjhp;Q2?ES>*0K z|H!h4Y=ix3MX4s16=V-7G1s@0qwyYx8Fc>=)5N_E|{ubK5vjLHo8{|{4elF^h{&~S@C0z+mlph5 zE-vo|IHP$#aHM4oc{;dWV3wsusK^_`_Ww9=oTV)psv7GSIN1_J{uJ`y!0DDjuY3irv3%?j9+igWf3|cd4*;(VTxW?O9~p)D zddmRvZt%Lm4VJOw6lmWH{Wn_XlSe|Yc5C1kOSxzUe|fAitnb3WotAp!)!@T{dn|a? zi+Pi?jGYPGXX%`Yv$OD9L!0@eu{;+f(D%=3BzIF+^X~`$=fU8D-2HvuCA13l^(0)ik zw=L_w7H+kcvCo3;Sgw$_ZpY>O%OZ~w`MWT_mw|UJM>B=D*m3^vTkeh#ZrmB(1PS`v z@*rE-2lAJJk1T5@2oL0bY#B6B_ynv!Dd?$X=_KJ&3S5;7`qz?AZmOe;EEmXCxGmOU zlSTRN+^SWcB7Cksme;Mm!mV#`;-T`kH1+}nF`Cbe^X9W6xRyJRF1JtvdLB7^$*xt90}{+8Qj|%vQ!M;8rlz^U_a|(vJU;J_kx40-pfRu!ShgSJb4k! z&;NoWtTV_Hz_SA*t@3hFzTPfuzoV=j$xhfl9fD)62Gj#wzQ17m_6hE1J+wji;!HOBURq;)^J5SIU))wUXFu$_{XIaz96QKO;z}ePoWEO*-V|_qA1?|u3;JMbm1!8>V;VgJ{@H}fi zdFaQ`o(6w!o$!muKZW(XHF%+Q@qXdPu>9kK7F!FB3Xg&Q%D&(qt>upiSLO4!(i(qU zcpYD!wbm9Vgge3f9tr-*I)R+bmw%o0tJ5Oi%gb-E&LFQGhsTGl)_P||J_5>L3)o?W z&pyLn9vjY=_ZMp*`8XfG&>ByUg!w-cywB>oB+9pe^2>t`S{IYUV1Kz0e8l?TvdG85 z)vSBL$E*R@gdK3c@GSU*wcah^&QMMZIb$7lTX;O5|I1e8j&K{k{5Px~sqVd-Z z!ucsJ{lHzoUe3nyrKL06nOfWN&>n=8k*;uOXrF+)g71jowOZNGemgv*r{ryrchEiH z^CWzIXbY>tRooB{=~Hqk*#EoPJfyzl>R?aiAuS;nd0<{vT1nQ+VqR9-Lq2~4o>~Zb zN7_#gg6*0PW`B$6#eqkI#rpe&J%j5J<3h?wbtym47W#v>@=_D>Ij|=yFOA~P){Ky@B@#cn9D)v$6KP(A(UkZ7MLu9Z9P#)e{lJdC=*kE42s!A6q@7fi&S5>LE~ zIfR_iny~@zRFzW6%NC-mOL&(C$A1{wt#u(EN>|C}!P`P=N=4+O6V{#Oit2IddmKa;wW%dE!v z_m$Rj7qI)|u)h0B1>Bjmf3}k9Jrl#1hx$9FR2T6 zo>u=fJarw?i}t5Ht$YeRO%CoZa`rE*uV-K!8mAX95#Gl0>LqOw<754y{mR#SOA}sU zi98J+z-L7vy=nQ})9WqG;Q3V6V>`@GXm9DZ$+plwQqq5Xcs3Z`UV6XG=h7&0-5qdO z#^@`xc#U~3`wIMi89ynXe0BudUrL9iELpw)={h%@KTLzSok!6DZ-^ zc<75m;jP-xAPJwMM8~v+C%Qv}rSHh`u-)Ge4Uv|R^;Eci6B;J%CO6;?moAdugMOV) zs7vyI>$o_+2KC|mBs4F|`E5iM=whU<)L;j7@KVvE=JLfFr{ zhQ>(+Ja@0pM5%~|-wb)5&_u}z*Ku)r$Irl5!ofYb-Pb#kq!^QfLzAQ&VYUg*hk`>> zqzl~c_P)P#m%ETvZ3O2-wp8hi4ac9sJZ9kapMg@mCj35m8uTkLw}C&i4RjyBwEujt zeH>EUUYFYUrspgYb|2rKV*Ox4q=Rr51&*Iur(N(gj!|N4-_6GMy@yhqv+^+h_O_w! z;n`CdzK1fr*o$C#Un*Zp$NBih`iTtvN_xPZ!SL7jB11<>d*JRh+@GTTH&eRB?Oq>Q zZ!O>0x0bKOV)@1v@9$#y#=7T+maoKO`ARI7Z>;n$OMRKettp;M)5CXWlvliF|>+WQQLS`|7=>P~in=YUg0dF|mUtPiuL zbTWhXQDL(s{7N-!Kl^iNUxpfUq!;8wcxni3lrpd1IZ^<3A=Q_;Z>`U{(pQv=^*L8s zD9ptAocq@LoGTSjd9glAa5|EpLf1)8OuiYqK{DXF3APVQaeSehr3mg!whz2N zbc-~aJcmzjtMom24;aq4q@Co7P2md!phX$Fg;GW6XJGvi^`TIj59dj^e1+R_`Uj*3?+WMl6L!8Q%8UAXpm={3`||;*kvrdo z?bSi4Eq4aHumStehopRRLj|v|ACeBiebkcrdq_%z>%w5#e~w5)$)deIB4v@q{&Pgi zC5!g;hj9>@P>8`Mms8Uf(^#j!M_bSl=s$9hWM9fYYDKu)aIPPD=S?tnc;0 zPDxI0%te0~&OoJlCVPOJa!+MmaHn}*xwBGRa%Z?}-ZbpIltKPv5IngadRdx8UI=a* zc13#g`uJk zc>U|aThn_aW%1lSe~%Z zlXtg;{iAew`7r#C`q< zr~j@z^DT?{b=RMF<)3(-$@`zX!rql1lW~3yg?%8e=^>_<9c^JJ!>Y=9UvAC6F7Ds8 zWw_;m^P>#{d%`nqm4&JOts~bp*^||gI|}pu(sre;{2dveUP7-U zUu|V?7mnZEzO|Fx=l`O8YbST2T(ocPvXj^=jPhn{i{w|jr+Df_~8O>7_TZpHntr@W2)Zf)VN(C@*tIlLf;5{3PrPc}=_+{!{RF#b0g#*9~!e z4WON?TisvIC%5C}gXBGln8W!(J>368$1q$oSO;oPLGxuzZ}{y}xh~KmNwa&&YpUaCzh8 zoK%rNh2blO$H`UGgri{mo-9#zk^6rO=ZE1*azD6lhT{+A<&)(ppr!*k@vWC_~CsPJ)e&NwmttB@y!eLu z9H%FQeuT)ciYTkbHCPoIt#bLH+Pd$PH5kjZyHnkRoH%#R=N zeGNI=lz&udzMN1JCa_a)x|d$KjMi`#vEv{wF&Ec(0aRMZg>6MDtDvlMf2;?Tjk!|*_sd3|6So*al+-!6CL&S2xu)*U5mRTt#x0$unI4$%B8y;cr?_e+0iw>ar+vxeFP3 zwacn(;?8CleJyOAOH!KTV|n4N;EAiyg={IDPi$9YWgT}m!(V${=8}~|Chv7AO8ROs zJm!a8Hf4gzCtaGd*yQsryV7E9N%9F6qxLE zRaLH-T;EkqskgCYd@Ws0rK`#9T^}kL+@ii6cGXnIbGz$XEoC8<7xk^Svd-kKuG-2q zDlh6=9pxG2qQ2Ep%5M_WNAGpjRT`Uo*i~O?Yw}4~10}@d^R9+Uy2&?Ojg)C7-*+`u zuABVA)kG;WS&e9_^xBNmch{fhiuV?D20H@#4}9-UIkQ#xG90hb+jgMg{y?yWb&Y7Q ztlKH_dsEr4OfV=%;fv7Q00lqFI?e@e4u1{ zYJ^Mi;C65SNF{`F2Ft%IB2w}GRg^~`h=@`ylCgdHJt9W=hgZKq0E${O-?@X+uqup7tEBCs&F5PVuDN=#RsHr@T*j4qrbr6es1meErN&>QR0l z_Kzx&GnJ1he+71eKc+n5UmX7|r9I_IU?;d6<$Y5zpRM$!JQC~#2U1>r1?F=U7v+t> zPH;Ts!{%Tx{w~}ftP;6ESwVRXuoL_<<@e#ahboZ^l`WLN06W2ZDF5;-=8KdAlxKpS z;A50m;nQENoT0of*crK4xkC8_KKv5p7UeVf@Jp1xDPP0a?+?mT%J=Z~`-Acy<>>=) z`z=+JGopTs13ST`xbw7L=W+g)Ddi~-13ST$DX$CXBUK`oE7d7)33h_(Qa-N^=07Tp zDPIM4g8xVPrE{3CP}))c5bOkhLiu@K|MQhzl>f==f4&kxdD-?j{7NO9a&NE`97p-~ z#+a{C`cZxW>;w;?ygc7NtCg=Pug)(3iGUe0x{W)iDbM5cw^4aQ`9eN_8-YLvI&?dKMy4&^`a`n6SQMEM3@ zzqTqZDIZ%4$G=T!OZil=6Wo>Z1}`w*uJokb7wiQ4Qy$N!ze5S5d?=s(4kecIElD{1 zP9=r%y zC<`g?l#JVVudm1xyyv+5`;;4$F918i_b6B4cw8lNzw(%J53mzlM7bB={|_kAIZ;2V z^8NpSqI2hI)pQ*GSLGeb8-ktS_b5LO*H^1V9#pDQejV%t*QPv~*N;Pr59MF-`f*5U zL3x`iIQ(Iy4duPSPH-1@&g=hg%4d}K;PwAE#gFoze#POBD4~?^20Otql>flD-%%x* z@^xTmmPHJEn}FydK|v$COOUSMmCBTp3UKHeNrDE8kL{!?a?zdw|5l+OV>!MT+8XCc_%P+3 zA7Or5IZ1hKuoHZN@?c(n?kImyp3Ljd9px{|%O1z!|5P4P{sGttenELYpZ;Hp<$|am zTln<*^@&V=hdH>*^Qj_woy#2qgG@v|yxBvH* zW|S}g3frf@l~$Dh1a^WuQC@cdPXB?@o$}^jC%7-=zw`e0LnWB<%e?>nP>G_vL0ugF zk&;NcFW3nlKzS~o|9_O>l+WSw|BsSE`GUqc{9`4D^3`A`cnak&+hP7h`Hpgx*RLna z_mofI$FHZ#50ua2$FHZ#D$0N0_3K|{J>~0o{rXqgPWjbYIR0l!0p1KjicG zTsc9x#Oud%T19pP{q}=us<}a0plzW1m;OCT&kH_s(q_B&keoO^B z!5Vj-7RTGiS4tVmQ+fONO7Wt637pSYiTqEgLisAN6I_Gx-F*Ljt<DL5Rf8zs4R(SfDR052FR2NX zcjnWV)HKQm^WkN680BO5@Ul9J^8X&<_!V_5<@QH7enp*3`E)+Ks^(F?m=CY2^C&OJ zx4%tYLb*5J{x)?b<#UeW_%(GM<;%fN@HWa1^8T4!-Anl?-aoUe2PwZ%0k@w+Jx=)p zuoHZa@~?RNp{rLZAIIAdUA;s32Hw6I>I2FPz|KfReMWf&etasWzNXyCk58pk+a;_o zdD<9${3)%L=FZh7@#9ZvwF2exd0f6S>id+J2Rp$ZQr?$u9}l%2<&k{*c&JS%UjX+f zszjDmKc;*+*a_}H`RD_fzoT}e{2QaUa+^7UUyJx2K{zWytz z7evmETj2VAWMwtvGT)wTGb~@-$Pd&DWc+$?i^ytjYlFC*YMCoy`=i@O)==AXXS4gI z;j4a;wbWE{_jlm=Ebt0p?GeH3{!&4=fyBWkJZc<#R5TU)Jl702(so>*I5 z%bmv#G>7N6B5SKROpb`GqiWZ%ytrPP6xl$1ms{Mw7!cV|ZDw+MWMef{SbOM?_w$>n zspManh2=yxQ-_g{fhU18$W~ZiIg!oPapW@KN#JkE2fD)h-jOZTS;BNbu7$c%n7O9H z`%sWyA@_yty#U%$p5K}$yxyXa#N(Qy2j+4k*!tj77m}m z?vG)t{5$Q`Wb(AXaQyAn(A#|cTF&qARnN!{YBD(&d@Qn~dY=2HyNN67D_-yKqAupn=F2}l zvI~4xN0i6=FIT{&$@QPXSF$3z()e#$zJT#Ri0r1m&+}}Suom7=2G=Dg!~UeOPt}$* z{3ojzjIX=eMdVtIbPKaa^-z0~n}RiP02!Yrs#N(i)kUrj?F%}d+z5Q4>1S#h`MX&7 zz-Z;3>TvQ8;1f-Is-wx5png}X+)Eu#z70Onw3j+nnATr!b&1IiuiokwlfAq?SNEG- zCdyxZ!kwq#_1pKNLR9%LTz}&F?t4*T>IiPJew|S+bw2k^%XK&&y^M6JyUBQc_ex}h z`YX5lenO;rn=I}pM5!(Biu%%i5MyLTtRGS8XOxcyD=bP)ro1)Ozizf@ zbr9valzQ^l>{Up4v=MxpD`jT&P$E#`F;{H$9kOVb@ zyO6)11TVL%Gq~N)pCzi|{e%KbToBg3q+$hC`$P>?Z*k|b4s-GQI78GI+_|hBS-+3Vm&@lDb1{GJ z`x!&j@;uMhLZN>b8Z|`iPEO?>s%DX=wZ(jxx{bV?d${_TyMPU7ip%?@TIX+^UIDub z`*%Xrmudia2AdD#ON&ZZ&Nv$>~gUk`@oA)=UYQR5=^4fLq4DipCZ-nE~_fgZ-t>oI1 zVfb>>)V<_3;3bgXAeWki`E>Oj*&DnhYPwqcDb7!}_5{w~y4mv7W@JC!UgW7A$O*i? z$Wwch*H6UpeW!+y4}zCOeW$J=w}tbaZnhcfCURe}C!3+}CeNw{@4H3KR1c7Q!v6mg z_!v1Dya{}rEZVzSYV&`^{AMP>FRVw+Qaf^IYT4~@db8B-lt;G4`ZY_O#;?QmW_W^M74J6}Sf0gWe_)aN zstEG}%MCE*?)G*NA76>1-m++qOLEa3FH((HVtitMTcie&Mff5 z-@Z|6)fQwcKVJN#Mw9(``|z`Rnhc-*g7xvU`j@cwurxf+9`&>8{hE(Y)62lG=7N2> zGnmpD*WWrdm3$WVH}nefeezy%^+0&uAZnfZFS$AQdbK{Y!u-0ACmYmo?kr7${lA-S zgBmBy`yX9HHmEbW-R~!FRAFHFD=a16pWmqN=Xo~0KfX~t%I$8yH>zhT7yI)j^(uF! zW`+KjC)=c!x8VF_YhwT2tX3wA{d=?8ge>;2E%2kKSUyXe1pC|7s4Z#;<^RC;@`>82 zP9xiS`@T&*L>Bwsc2%~D>52Vshw4if``=D=5LxVhyVT{}S*#U|4}M!t-Ns#L5#IyY zP4&IdBEA=}+r54ivA>mAd@rEH;(Gxl7T*UbvG_i~p5pO|?*r^Dws;?SuS(AcS~jeQ zuir%)C~ zIiQ~8b{}636pvpVkA77j@_Z`m2FJ&TQ3uuM-0tJqA=Qxh_F>xxG4>+rkQ%~$(;~z1 zs9nR~)G3rdg&j;K765Fd@tdg`W;z(FX3GA@OXZb9&*0e_InPPQxFC`sNdL zNv({ZiH80CCii8vFS$MMZ(UI*kOR4|ss-d4y!yO#qltU;qeE(mFHP(AS}N*ZxD>_{om?u zlt<9;S804-!SXhX{#$)Ot^~`|D*A!?n%o`czg6@@n%`d(@x6>kw1&%{ z$HHL$>=^yny?mv_`P{$77Uypz7Uydv7Uyfvipz`hwdcha=W8$AR>bl9WwFKay{Oot zKT+b^u>ZpwEycO$UzAuJ|BGEp^#5PE%a;=U|Nn|D`v0$sE&Bh=1}g*p3QLLe4@0l=m47Q}rlo zyG_o9`z1Z2%h_`5V*B9rxPa)2wp=n^j|+&dWSdX!l>*;~^QiKM=auueEvJ0uB^-aX zH$1PL)3%QC;s4?IYS?a)D}QKV$II5XJt4PmhOT3i9b$gI9t+>^C|lRoo;>FTe6K9J zo~!|REk*mBA5gP%lvV%tcb@)UDu!O1hhPa?Y6ipU@F;Xk!iEG?$jh7bR#tsQrs zRtByI&5G`B>q|y(X90h(7(ZhC#T=fr}pU-SJ z$c?~HB0jU}WyJKa6=B}f<|N+%KZ)pR>&~6W@cP;O=w7yD4=gX7AKk~6Usm|vRQTRY z^cS}MCZC87w6!fK@(Ymv9UW$KnOr(1%J$4ti+sz6j2(^H zVoNvqbj(&;0Xd`w=G$!-Og_v#`~fd2K9n4`9MlP$5wZJV4TZwK`? zEarFHQIqe)oUu*$uq3|{bI!KRDLh&3>B=zseGO#}-mY_=Z1TZ@p_9R#yyx9^sw%g51JS6r%+oqPnc>iR6v{k#(s>J!xvi7W9iJQgRwEgW%+&0#( zZR#MrWe|KnJl4>nI||3Z@w;zqDXnj(5{Jf?)|zzY)|x{9aDKFhmeoc0*%kCV+R3gZ zZWdc!yYPuHz8^9D{CITg{Q*yo*!LB zbM+Da`x?%lx7O=(Zic@yIX}9pHotF)^P{V4SH3{I@AuTu^8L~7`#m+Zu7RSwJ_pBF zLvxuN8e3EA7=(E)+tm?%u{O50);5Hjz8~FOTgIKoeuw_m*4XCSV{#`r{%(zJslE9= z{m0s*P#j(y&+bQjto>{}kRym5VKMnVfiE#t8R%G0tCdLiY z!pOLPPK+C(jU?mxoEbMv8%M_dac10?S{}E1{ibWHxW)Qi6!(?(8|7mCeyu$qM{UIO zy{|RjXqX>MHmg<&zDF7NwbmOA?Jd54u?GC+{fJRol*sw=Zi*YF4G`AC;rOsKE<^j0 zJ45>lya}9XD(~erT3cvxbOc;yHu-);j%JAw>j(Q^zr>BxG;Vi$Fiy)6Iqwf0g#5P2 zr{liSI>z$hSxeY|4#rK=icCHoH$__>CzkJPXfNUVw|1O6kD+hHP1PQo{2*?cRxe(R z5Bo<&ad}#*$!h!zZ9lnZ8hp<>ezsPWD9WQN$IsC!rwC*Js8;+uZJWuB;umPC{X~w( zuY++*vAaeLJc3N*Cp^J-ZcmQoCaEgSg+d zz@Wmfz>%`qCs=YId^zUIR%+T#WB;B3r=SH}OXbu@Wf z{6j6oZgHMV5c`H~aCqrraUE^vO49`agC=XNjO zYwfzodHcGh+G|Z3&&SVgO_1zOxkddk5)^wH8IK1>g3bPwD9_(_EER6I|7>!F1l|6? z|MX%ZBBc-$qug?_Bkex4yk1?FgZG*w*3LOd;hOv zPo9F~%VT+0;Cqeq2_5)-*UMx!JZohBx>V(hi_UU5&G2fif%kD&5@-#d?ElTKP?{4zygueDKsXVsF zdlUTZv&h)q>`e%8&kyg9ElLQoZx=cD;e-(T4KiLIy_gVg_s-+fXXyJ0(e_j_UN4ms z6YaZ9_Dbw;fA>2qpUwVQkNvg5_IBKP+_Mq}+mlW9NgQIIM#k%{zKO%^2TcAnafDr) zA*PSlTf-Aa+S{6(keFdlC-;W_PIzLLJ>TSn#B8y?VE@Pd+Mr;fYi2*(N6>PPZ@NcDJ81X#I=!vqr*9`*xmZv;24Q{=h8z z4H_OjD`A%1W0sgc+9z?gy#=@Xcs|!2KsjDtmJ{dNmznI9xX^ByE!OvYyRpBw%>E%+ z^#7LG+jGPBX`z3YmAK5FVsdWc3j6nDygr?kxZ3`!$+?L?*^9_{y?Rl?2D|SZF~8`; z37hN_$#}hbQNmXHA(Ia$YiRqzz5`VJ~BX5G^&!U8*_LC+b zPB?C_|GikBec=6Gc%$9^1$Q1p&r0~+KFVaD#8dWVWV{}qm3YQ}!sOh<^X~nfUq4xt zaM`ZR7xRPt>B9+E?LOS@JSdyPhyl?NdsKoaYAKU*inI*ljTNjt)9!an4Wyz=E`o+RT=ICYe zszj?}vB~EW6-VDCVt6dil61#yZqeWKPAcsv;&%6UJsg2Q@bdh8y;hQk!$rpS868K) z_8HxejO{aeFnJR>-Ce#&f-1}#`d>aQa8t9lb~b<$^!4_1odv3&ca-i{zLw$B%n`Z~s#d@IS% zv5wo_J_kDf;}-3+ksRcxw+hGSZl8l4aol;ly$N}AwU!|iULCpo;=iQ%z5UXnD)k!A9# zq{)uQWNe?CCFMFstrz9d?USZDv<>KN-X6mjSR5U=MfC^ET6 z@{f*+n@h?ECg(fYmJ%lHOv>gct-#NQ|HaAfQd#`d*Q@@~fz zlUpV4b@=Qo$rF+b9rbpVcyjU~hrSyv+T#I{M`(W#=clWak2^l(xj4UHoqW>WUh(TA z&5};Jx3`A<+a*b7-0P2DA8nR&)?J_Y`z6hi&b#Xq_miZHjz%oS9NVHx7vM*nSUBc~{Rd zIWwh_uKg-OBsM;juj*o>EKCHaRn;j=r1Q z-JaLiFL8_Zd|65Zz49R(-rb%z)Q544_Pkw6L;Z}&-BNt?CWo=SyFG8LXL08-Y|lMY z8tdhM6Z3R$zSL{n4Fv9 zub(w}c1oaL{zOUnOUWU63K`q;b}8ZdRFk`&1?$M(EkN~C_$eb^vb8i@YuiZmJ+KEBV&8LIwf8|Y4Wy|B)#KlQ6AgtRnS3KNiezo-4_}=r`ewJf`1d-RFEsKDghv`WlmS z`pwXNE|lc6`_0p5n7pFj0-asN+ zjP3jJ{ zRNnU-eOB@qWWWeLZ&;E58ZePwRI`FCfo>@xSbM zSUp3_mi54Zby<)ivE?hMw7 zZ@*)D$So|N!Djz~_b-p@)3~!)JUkBvZ}jP^SM0KYGIE47xWS2pTHjAZ^%FN#rr82^{M0nFnmlvUqtS=6YsBF(pQkb0W0j1zLos2 zn}vDxzpU>imxb}a4?aPjJpkwLihiEF1MJDJ=zoz5n!~RTg(e>?l%)SGbUu^)QC`_cVx>3zr%Fn>+@-_{42 z+^YW_J>f5$ULL={-nsvudO8{3hwj<`FMT>0?Ql($z!_ezboFn{#qz=`G2R>>Gdy@+$i(=p#+&0)jWd*s@oC1JQZ7;}mxuOY?!} zEBaS7Zj-;g2G{5NziU)~gwxB^T5iGm^`23e+!gG}-ZPqTXKPN_zvuR^WF(VYaaT4L z2=nPJ@BhBBNtktbAKQ;AhV~DRzo2cshVc8y6{{FNPtfqa=&#Wq7+1J+S(SOvU+M2{ zbbN|=wl+1!!nX9UZgeN#yN>U_RX08-pZgBJrwO^Zf0M0UhW>6hTZzT{KGlt2D&Ggb zchEtvZbXq2p}j1G;gh(<_s0)`2i}9p!}D?C_wZ^OqJNUjPQdu$ z^Van1yfytg#usl)zofjFejOw9jp^5UYx;F*c=z<{8p&@=zpgQy#xIt?u8~0&>$9#g zjypqp2af-qtgi7b(&PPd($!{!2Y$uE?2xBe&u#2-`K?M z-X0BT{xeulUcLcMFN2lm+oxf%2l4vWu(7oJVpFRBdD_*Mm^U+GDW7;3?!TlqGg8Ru&>mC;58}?%vcWaM(Q2gcj4Qkz3~G%h;NVf#?R!h`1a^vY#~qM+oOZAhy0Rn zkB-Ixa@mh@dvr8TlIQXD---6;T(*I)-%f_}m6)HQ3vhdMGU}51!}2x&Hz6OciObW; z$R}q&J~^mb9Xn6k{@1${zK|# zMiKeH!8rY%M%HUF{BL}F^fcy>!}#{-X*?kR1{!Hxvb@=kA}y8>PsiKNfFzlEv{j-guu|{N7Uq82%%ZJy@dA zm)m`PAj!xQx#qb8`)f(Y1nxZ6We;PO(~^w&-0tIVim{s8{d>hJ#;@G&>yiD8<5V8M z_wqcopYecl@qO?9hNR;1i0d~s(o&7`WW0V;BW-};&7Dp4X^>Hi{G>JZmj@X>r8 zK(`=^`ZdUCOWqlQ?ZqIYE4eMS&*)y{X|l)zxHGkgp>RDSZII#O&fv!b4>rj7-iGs= z!La`TzqeG}znH|g&yZrzxD;`iN#7+1vbn)rRUA;ulb#r`_fc*yPE zUxykmDF3w|KA$nnuxhycnc5}riKfF0ojY6mA3y&dZj__E6F>hRZd9iH`82qHm-eOM zq`d5OcwPovpK?1tKObQ{GPg?*AX$~Yv-Ycj0Ap5QYyJoX3Rdo#vhhk5&F7%RBl{r}O% z&myP(?`UHiHMA{qO8-E3LL4KnukJXx0U9~t{+6UvP-D(g7? zYz_NoeraP2A971*PeQ;g$k-pNRC$cimW=(e6HUh$DZC(yj@zhafOWi zH4Do&o{_PC77zI-gHNCLx8RK+V>221Tj*ol?)5*`xWesT|6`43WU)STjIO1``aH;| zpJS{eV}GZAT8{B28T&7AMa6hVUIFuiE-EdC$NmPoRvBUJZ=kct*gry_BV+#vEzU19 z*lyS!<~#`2Kl)E9kNvX=<;EE=$zuN>XLxvs>0$o|zRzRy=FZfb*Jkj0uj7qCk!xMR zo57LXH!XhS;P(;Iz9~LlbuNUxDlNCzpTYSDd=aO_u>3ug63>R`H+v{ki}M?hk58Lc z><=NIl9pHOKCnJ|C^L-deERPG)l5VDzG{iZ@2d)Xu$jhOQ~4p~X1!H@j`3#sId7Gp zYb+JRYhQ%p?>B#MtR^>r_6xm{{2k>x$)&8YtQ;?|?YoWd z&n`1G^6%g$5zCA^WIH?$*FAE%(U@Eb{3K$z5keO4d;e%elg0O@el+fqvA_CL+6tpr zd7Pf;zwAoOC%gME`9>tq#qs?hx|xHas6Vw zkxq`|K0HZKzOSc^v4EV zFh+6Tv|EzldQ-#|BZsVm8-eGO3*mb_btA4C%g9H-jljFe3vc4^|L5w?<7_JbIDkJB zV=m?__nzgFk+CFO*~=Q)Vj@fYtQAsGLSr^##>|~Nt{F3mtYrx)LiSMhHEU>W*$I&~ zdnJC~=llI0bEf(4{ra5kInQ&R`f7dWr(`N+~}_#R$;`TKDp@>zBeY>5kzZP-sie^4swVq{0Q2F|N{F>(Mq z2Fg<^>i5Wx*I!|jJ+JW!Epn* zeSbv$#BKq$#2=AY*w0;t^~YX`yv?o;E(z1`ZcjBdd||_pDOv zwaA%h`aVeY*z1v>l#}ys$Mc;RV{b%GLBsc#;QkBTF^a5KUgq1xk|gr&XQiF`z7hEk zo9g>Uq*0M_s_&bTrPx&8HzRAaslNY=Y{;hi{xh-@+Ntkbkv-T{-?t(^W~bx+z8yJ? z{Tc4>+mU10)W6(`oX)2HryMP5K( zEUI98x*vIs-2vOv{YdX~vi$HK9gH_)A|6DRWd8xS#DmDj=!-@BWB>P8WJ~r4?En6X z?8TP5wNdQfk^R_H;P{sw$WBnmacpYee@CXUseS()Ig?H8`=7{pY-->CL~dkL`+gX? zgH7%GVdNP$weNo;ud%6p{~P%aI^_AFo-FU9$U>E<{Hb6|Jc@jdP3`}2WF0oO|HqNd z9Ao+H#isf#rmSI8{T5fY zu&I8FE63SXzmdu%Hq~#Wau4nFUy4$wx-4(VL-nU9UUrj6IX+gEXV`7QW~{1IbEe1o z)s#AHs$Wg%M&|m}l^tlR-!`#cWpWLXy^L0rA$TB`aXu~_q&`P z8>LjOP5UdpDUAMOODna}0Z$fq47d^JU%>g^gxF`47Mw2xe*tdCIi0VUQMzzW*MrI^ zZ*l%Aj2G91M=S4f-WeP&qLsm%%l|9BF1)Og$a!HH|AmXPN;>D!FUavmIVFqp=fOJM zB^}54xW-{(R&06YbIxai=YnT*KBHQgSQJ}9na}xm;1%HIoHzdt-sg{fR$0UD2HphT ziVk{;HiWOC#a2}I@cgC0`@n}N=l1cOavx3Y<49~J#i)b(7xPoGm6ZxE{~lXaIfxDj zD;(ZmjIFL@)s@o+u)jDGTT^NLqV)DK`Mu{CV{0jN{c&3u{od75T4U~fueO%55xq^U z#QvqWauXd8P2m3XKe4ryruF3V#)&TV;CseH>nQ!%*DHsK;zR2yXBtqx5%yoHq4kug zM$+Sj?5`>et*_K*Og{Ug5VeOkQl_EDiQl8bM33IB5>B%`Aj{}u=IH%)rpfZqiI^I4~;y9<{?IR_Xb2{DzDI+_|BOzdtliDcp*tUvLJVe;pdHv|_i-lH==mWgxq5 z9Q03d@k)nRY5Es%{qag7`;{p9dlRorW6uE>gXuRp{uuf%@FjK;7%$C#KVGTOnwGa~ zXqd1eU&78)<@sv7a+7@;@)f<~m6SF#{XVb!K7PEik$ng9(sKJ^D8IZ=j(1>tTn-lr z%2AhV_DNJ$x1;F`!S#rmeUg+Z9rEX|5I0Oo>XPqjammVQm-FflSIqzA=e6Tflx{B9 zk4sfnxZH2R2qm&>{`5`b(v;3F-|dsGtZ;cv?||~q7NFamYKO1D@Z&XTd!B~9opXthnoYVfDp$z4m`qvps3Yxb6QrwryBA0K) z%~JNDo$>V7%0V`br@vONvS~d1jdF)gE?N{8s72rt`yZl>uxTZ_iggX480kzLJG@&d(MoW7%|mwm_N7rt`Cf%3?O1 zpDk2YvFZG5p|XKZ=VuF*pV%~hU#MJR)A;>6Nlx{fZ@M0^?nzGV zE#K7M)<4Oqz2%$QTfXV~M84_z#1n_p`SFG)%cJ8h-*mj?n~v9wPo}5iHQ#joZ_|^U zj`vMU;(Ky`JN?0CC5=t_W@R#)mcK>$l1Zdf3QtC#issX zn{t;;{lRwSUpDmz+ZFSDxqa|_G+vMSNh!;w>qS2))!B5tXou2>P1lQdC^2m6Pj)Ju z*wmlwR0go=deAQAV>Vq6+NDfHJN?aWWjdScf48!NP4&M=S<9yS-=l10Q~mEz_OPkF z?okf1slDz|9^FwU^U(uJ0=qvrTpUp5k;SFD@c)CH4}U<=pclwK? z%CbSy&hn2cyU89ujCZa0UzI#|Rd6);1e(@gE&iBt1?{Z=xN;lqT+cYJL=JYZ@3;~* zMA{io99IUQCwcB$VWM{YaV3F$1FqNB2dA?4!21as8XQ+fv3~>CD{)+z$UX_z7h1%h zP^LNagJZyR*kzl*^ZE@=Dht?k!1YR;RF44ae^Z%(V>;io9eE2QJ6EE{1 z{{Navv9}a2+0*}Txjna)lIVaZ18j-gN;%HspO^U^r3&X?fGu%Hsm-~f%lxj=kn^%& zOWajjaGtkM=J%AgoZkXl;-1ol^EL4NXiUU?CV7UIRoaB6JRhd6l zE^xjOY>CIpbY*bEvioDye!xfMb(*Pd>*M%Y%z6UA{{S&xc@ydzPMWOc!^Z!VIC4&QsMc; z_(*jHnXfl0s+mOdufbeZ+YFNqdAHWHBHI7{hp10c_Ushenu8uCJo@cj#Guxa_)?7^F3(e97F|SJ>af^J6b3yr|w`Zw0piZ^@+P-~3XD*AiY*_ppo16rv-z^GMpBO0#8u zR!?1s4hi}E>q`ms)$1;IOK70_LbyE4`z5@r)<8Ssfo5t`wDW#sGc|V@Hb)1<=N;t!Y^e_6oW4ibQr+xwuU;+HGw7g@?{|iYR_dH= zTAzHsQ+gFTL&Nh&Wu-f-o!R@q`x3gSz0g6=)5YNZ zXK+7uRq%0eHv4!{ng356$G!qS4qizXZD4)p61u8~(IL-o(BH*G^iWT+?}9DSL;amB ze9wo8YY9Eo2QL4W&_@k?LglXkd7;F2)d?=^i38LYpHluBYTF zmm4G|sfEYU^fG@vFgN+=K2H1!_ZJo?eyi?4j~C{1Laa($pca`Z^YNk(da>$7 zhdlEC_53ZCt0mC^QSm8xJSC@*5t1MbHr{-9QyA?FW>uc3VX64t0Cz9iH8U>nps>@xWOsWzy+ zXHwn>j^Evh8`K)Jq(gZ8>zRy`!DFvZzXP1&!B_CgZ=R~ zb>Li@J`#@K2Z`I&sCneMaJ=M|-=#)Um9E`>2I~t zQt}pPPc@VNQ42nw`iRGm&hPbObqY@J{Qf@X{l6`Y?ted4cVO=PUOiTi()9fQEg!3O zmSOokG`Q5#yuZ{lNz;pcw$_6EA^3A}JND|s^7&D})`h(tToe2j`yl2ewD;J*V_rfVOve2aCQ544$>I|@ z9%m+%)E2P6`B1?6p4N8p{CD7a`A||R?H6>w^9Y;^KF+z^Uvrb9wBI>+*Px(I&9x@bu@|gL(Qo>*ewSVp>=D{?V`)Ef?)PzxJB803Gts`B__SIZe;! zXKl5$l;igG>eWu$?J|tmwR=4O2k?EBVuN4T9to-vB%;2Ztb-a z>{c7(^{)eV#Y8{%ra_&l}puZ2CS=XKfgpzR%NH%V5vO>z7@$(d<>=aM48@&wd@o zV||DHPn*hqAKV{2hkXm)XH4kTRa?j|dQrglZ@OyVv+4J|o3@VK34Y%P59_AwAmjCc zFwtF$+DPq1KCgIrP;uKkD(c&Pl{wJn^}_V>_sb57geLpzARSd`Y^Q#-*q zt-q({oZr*+q+Z%3US0%TU#js=FD-f#)wdu0rq%@=5KWuN_WzdFn{sSV3B%sfR--3~ z6EI%Q9oApF-!7N8Rh)z0UrkPr-X{9r z5Tbk8$=W7#i0gB*wiE5t=Va{{&Z$19Xva9G`kbQuhIZ=nbL|S}RG**!r#`>X?(p)c zKEKea{e=79L-jdT>w|XcbDB1ga;zUKd78En?bPSj+D%tpC3&u<@4)5Z^bM02X*JMP zA1#xYX<{es5BWVCOZ=c!Ks)>UN9_We_V*g?8am|pus!^KB(Kr#vORErb6xlv?O$}z z(-ZrHHCp(t{PmAZSff>Uc}l`sZJ^6}iR-n)F84~_sEOVA^B+&#q_soC_xZboiFcB> zXkA<$n7mbclcwkT+orvXcIt1NHi&bozwKHA=Tv{&wKTL-e?MuXIH&siNgInkTlCm^ zS>7E_Tpat`9sjA{9oiI}9{PJcK6hyQ*;KzfweUUp<%>_=rP(fLChyZapq=_Xtfix= z{w60M)voS!*WXF4@z2s1!{~hEl=do{&PPsb?a?7m`9yhsc3SI-4ti>UV@jOXdQ*<= zB}|;r`t$U3esD$`!qd}u>x?#xa~f}))dHN;c;oDUmUm9er5u<4P4YRd>OL$#jyD%4 zU(o8Y<^S_onS4>ZiVkxBdr5nFznmVfkHY&%A#p}y%pRXP2X48lYCX{z?R#WmwZi| zN7M86-O!G*Uu`Ite?zPH3oUlHVW?`dQ6aCzbx6Q0LN{#)yCP&y>!|NEUA`%v3~4&eQ_F!8U};Sfzv`{Q4&A37*z z!}FDolmFGupq>6!==af+JR9J7;7et~^hY$k=Sz4#d0lvzUgR*9X8|}|gy|X@p8tXU zS#0=Ix}Wp6z+P}P=M&-i>5{_>>6JL24Soh(lXKeth4uQJ_k#MUFubtdjPvzX;CbfZ z;d%_`d%?B9ozYZZ4TcxdOZ_Uh&-wlF=;hHtem>NrS7o<^^NAM2J$h}nyxtoFZo`(> zcRPUT`M7anH|`IQ{x;@x{QVE|Y&QLV71I}@o&8x%|CRH9V0rKcg8qQr2-YY4!ZEBr zJRT~=7T4>!{Pyrj{RCOa@#*`+Rej)boL=anLPYyeZ?tSzC1r&HN3oj#^po9tLZ*y!YH268si)UCpYN!YM*19=E2lKkqb^WBX%)Qxk8KcVDHDKe{XJ)W;yb+C9v1f4@C^us)V7et_e7b;`%OeqZJR zQFFL#-yiFq2eiDSa6fH*N~}KTFUqgS!TDTDoZj#6{N;s-Bz+oLl!xEPgDFY+(T6m@ z^dBji`hrK&7sJlqhx>IYx%zr^$n!%@xW1n{M&Cik?JEXO7VzOkxZh3h?@iP*$zm%^ zUpsZ8zK`>kjl)C}@DX&t(;3_ve1`Ku2HX#Mdy;;M9R%+Lmkp!kzYX{I*M(2kE3*fK z!^LF17W-9jsi-M>1NIx>yt-5L7G$A7{dG$HT<_;{_tY=+Omqs#6P{s+&Sr+%sb%N`LYuRqSz>lUWz%M6z7ZI=Efn)>79)LHub?CzJL)>3Ed z3G5-@QQ%zm<&T8;B=swOD!UL|ubu#2%6=E~Ir>I+GI&Dj9Q`nRDlY$P{Q`R#F8^!& zA9fvB-Y2Qw=*7Zmf4+{(|3;5y&%));)vL2t;_~O}E!o~WVPb0PJiRl!5_lH)19l&H z9%pLmxB4*lFz_t!r|c$*%;)Pf*j>T1z$@4)T*;i8xpd4 zp?;HHeTQrx-{}w7&B5W~J3XQZm3LK!Jl|NPYwTaZmRO`mld(O+9UpxHn%;k!m%3Qr z;c|ibP%5xd^uscz70*^w}JaR`a!gFd@t919y!0$|F6(1p@ZTy z+<#u4xu#n~@nzEXdhefekj|Kh2u^m1%- zAG|LBuE}nL`D(pBdjNQI>T10;yUri-eexgl4(x8=vf#Jbm*9E7wW&Yq@3TEk!(jd& z^#t}!oPUiz!pX15`Pb-U*pp#<)`hRtC$blU!^K*C4tqIn-#UFE`)Ay~b^03iP%Qs? zeG7XemVdqe3%fGTzd=97u8;F?&@Zziar-vvf3l;od>eI9jP~zSJLUFm(miY+I9zPf z{p=lB{>^$B_EGTW)Xn+}>>#$sE&7Y>DcByj=q=f!hspZgs<&g$23umQ-U}TR)W2-g zC$Oo1*{-jp>AAgb*Iz9zx0l-M&eZMtK$klv?9^Y2l)2Mhcj@V9YOk*)?9#K)PJ7*@ zPeeQIb(g*n?X=h3`bM5#-Y=^ZyIY^B;_}6zhw%T-Q}^gM&>_!lD9^8{d-eNl0nY=R z1{cw2|K5E@KJWjtuCfc2kR$DfjOI{S9^A8Lm>5X(*UaFtlsfYAlE>}r7qVGdH^>b7Y^UCR|ekvp!)r+E?`Z=oG zXs3RT>d&K{`uSCF%JWnG{Hjmz$>llAKc+_*(jm{v3h;f8)ML8F-U1FAaZG=PeGK#C zdPVl{m><{cvMW6+=Rcu0X4eIWjX0sVWj8D-pPxCYcV@o^ehK^zyDgj_ct)JkKV)|W ztKekzfMIexe_GFA4+q2Z!TLCMyS?)GJfnZkeiIxn&gk>l30S{p^(E}juzt_#8`z8R z_&=xr#NLL-|2h3IdpNXLYs7E*DfVb^DeyJ4Q~&4nXU)P`UsV4W^bTk`e}XqK^`&U4 z|8gTP=;vL2e#9kxxJC2J>veTTT-JkVr@k-iW6@51U)JZMo%;SmU(55S!S6?d5r61Q zY`MH~;vDSH<|D4?xqk94*#7n-uIa1MbUxA|;ksV9ME?4_jkuwIhz@yZymC_?%BJzk zO??!b#w&m7pR#GZ@~8e4o5m}*^aX4huiVl%uxY$PUZrpup>5Z+3qas7gxuPWvpi+1V{{yi8v z=qU}?vr9!4_bx^UJk`K?b&GpfbKaq|?4KgN8#(U{&Z`^g-H8r)==!(fJwwL+=D;w; z`_SdNBXn=nGq^pNuNYx@8=#bKtPJgi|-CwTkZOW$m%ay&Y z(IGtFKR=?fH_7D(BdUAXx;#Fyj`ym|If*ZMqoZm6d{?tcmbXq6x5_CWmtqa#j(zBk8T_h*84;S01q2XTKUc~`UR;{F`&-O65-0{0`*MtIY!%juo= zli|%`Q~SyAjzxz&fladi&hSnlWBW`_%kVBlQ+v!x%ks9ZA(uz(Ehq6)Z-1A^Cyw<_ zaCvgtc<*_(Y+sYprhB7n()`ln6X$x{x}1|Z-`gKe^*uRlfp=3aDzChsmX-Fs_a@re zpKHDIYEv%jYhKz~?~poVSznXWc6y^*dg&E|Tr>rne&I)W83ocGFu2P4!tM{f>7YqcI zypUH-f9$Qsme)s(^l)Eqm!Cvi)^SkMd1>g)G}=xAby8cYiS;y^^os{kkf?dChQp@%Z~Vy^3$8%W3H^__mU< zzaNuc%a`Z!)byABv%H4Bv#$B)r8o55a5*i#iSMcAxISFo%Jk+w)8(n@ZG3gexINp_ z+xgm|o$ukc_jRG%qr?5red+CeZ=wU9Xz(HMdz^pJM~)vm_y%!43=H>=eTkf}S`7a$ zD7~XEjq^R=bKopAwU5i`oqRK0evsbPcbn$t{ng7C)*^rZrKR`wl|YY!f6**NM4+Fq z7usp>@A>-C^w>VSq`l``=JNQ&4}9xg&Pn{pw}&m;PnWbozGE(rPmJ~b?s86Iyzd@5 zQ#9NK-`h@4@IBX3ZeP%|v3Qs;0>gcE(bS$wf*Z5x`f#eREt~FtruycwW&7%qmg#TY@jG88n(B9D`Xb-! z?d0;E`d#7cg{Jz2FO>NDv8jGn_~O`9zbkzE*`p%m@5u^Zjo0P!;Q3zMo)x}n?a8vf zdjx*)RqG_})b}Re>*$b&p4Zvz`yZR0&)MvIi#;e_9*>)S?~!qTE=}0%``G2x30r(A zE`J!<=F4+AT#(-@vZ8e9;M>57->Y^DRM-7j-8Ju`6)U7u}7@ z^9e5Rknbh3=M|WKUHBni3$*k7&_ljXX!`$%d4a>ek2t6Ai5~GKqv`wM#{x%uLG~oL zzi=$@tM5}Ze6JAR?^qXp+&7th3>+?w`)0E1v<(yI11Eg**lodofS0oS!}0uQ;H2*d zb{hCTcr&{wK96kee~aa z-=eAf#WK$OE}*Hr-i!;r8*Eu#Z^rMwhv=Yqxf`5+WnA{1=_!|==?T6RCdy}A@m)d( zJYRsTfdAxt13bT3a`;u>Uz{HSKLdWM7uFYlU+$W(7&_DQVlP>~Yd(XFKEz!>Y{>#^mP2ZpW%NK{H{n;hsFW)G(+@D=C{_&0H>8U>c z_3c7C$Im0*RWuzBZ)ZI6Jw!X}hpz>{Ew|5Ezc6aBY5l@TLDTvNWC&vpTdsdV##6=; zo}SiU*!UgotUug%x_5s0hh~HuHPO!cJw`pWvwn|}#isRpj6cw{{`3rw@oXQtJo>(G zdPXs$CfcdLNTWa6S-)beLR0xiXDG(cXlMPpag^t$`qhm}eQAHt`gLP8n$|x#LpQdu zW%(y(_>2QQJ(b@yJnzW)o%LHrS2V4ER)%G~k9OAYHwK}d^81ZxY+AqHxP+$lFUas4 zdcXYgFUTlqM4_GXmonZ!JL``!LTKmv_ff_tZ2JCvlrfq81Dr3GiYje<$=(jmt6SQb z$Iik08Dj~13g*ukKd|X~Mj2xho4$`<#@NMv7T%{=7anc=!mbJq7tzLXb`Y*_!uJu4 z-`Lq;_&%a>l}+D^E@v3;%JMtcXUZA1*aOSL*Ub~k8U5JwedzK=kc`LQkLAi6t6ly+ z<2mDZmq#Z&Z+PCr<%=)j{B%Rc3kKX^lwes zV$oX*;QIol>KS+0Pr>ukiEr049-*l{wOv+ z)zKHj+QLY!Q{RTh8)&D#8yX*SF5BOcj7CNZ=hS{08#CC{z8mxO)SgadG&UAsPRG-! zj3&lb*;KwBMhcnh zt0&Lzl&`082y>@Ay^Om&y)2I}_@?3cNUq;$Pj4BO*;JmlczP;N$>3YYi{?G@7EF`Ux35*;Kv|PfzvJ zIT$kfV@~_Gb1=(DL5~*)-huz76dY~LarvEKj*%2A*GGB(V6IVcd_TsphRU4EU(7$o zsNizH0iPO;(N6is8r{(2;LIsZd=wmKB+>NnWnB3^$??V#w9{XVH%^mrf4)&_yzx7m z>U+F#6YZ3Lg5iym+vEKHPB5Nf%lcp3dxG&In#O}egAeLsNOi2j>`5*|I$2gWnjibL9RBe-3_suJ@Vu z#MGX@b*#wWySc^lEw^t}#J9#gTpsO@egozkn_MpDUtsKat#5kpJL5ODJbtGK7aOG)X@Tx+yu%kr%Vt~a`&o&IT~ z(VI=}b)zu=?HtdWcz!D1`ru|Gi*qX97Golt%D2UshoIjIdG;A9+9}U|qax+l z9*+bM81*@)^88}7VpDm3F}k6h{r`(G2MzZZ|Azm+7yQL|jCRU*&?u4YF5e*|8BOK8 z-sh0!Sl<&0hC*@ea zOTjZn;o)+7oc`vl;bl|#&KmH{E9B$E6nK8)M(`|euT!22#!<|j_IS~FKZW+MJpSG& zbXlH#_jKZn3{dBxtF{04a z9`6UQ8r3+b@?108v8g_<@$}T+JPKYjdSFib`%&lgR30t!p>YgzDvy@=$he87^4tgtGd0a!Uxm$)Y^txq<|k;UJmKa{m#_CJYVM%v zxje-n0q*cG`P6^E{f$ zcfC(J^N!1Ye|huipj;l6uVLnMW_7kKU&GAG<|}BY{Z=*Gu&Mo4H9Mi5@>MejQ;y|p znfbh#$~l$q1#>i;%J+gf4Ndit8GM1a*C|hRvu&o_KBqi2%!1>w8s=A+PZH6k;rp?f zHOzzTr=NrCOPMuIZ6uaYJcx$>f0|j#jA5^68YYxCYnuh%&#Yq>d_S{}S@8YLx@I?= z-?={Vk{K1E`dF^P^`y*~%!TX|=z3;_Q8FJd=Jt^PzqP)(1nqnep}u(rP4zP*v%Xm; zOHNNt%xqvzM?3dN8kx(`&i8y8nFrC^!;)SRA}zDA**06wzdcO;f9JH!m(Bg?tzlL2 z;Qm4BCT8!^GS3w6!uznH%%*0A9O;12s|hhNvzhrA9Tf4ILVTOq$}E*D^Q}eqHVYF= zGG8?-ki#B=!^Ep*;W3zp4Tk0Y2>Dp__OK4{ya0Sbz&fs~P9= z{mgFWCYK*)b~lf*-${h;-;eBRMvbTC{T(UKPkNbc*+1d+j$URidkb9O>D0HEd6Zok zzNc0*p_f^1f}B4ncES6@>%x1P)!2(C%lGMFdFV-EJUkz7kL+cpqqm8&&|b@oeAB#u zruGjXWcM*goKkH0DeHaT7Gn zA2YI_+1lk!Bi}PWC@_70Gxk4Dc1{1*$o}T20{I8#SXchR$PdgV1@eLBYFC~xa-g}f zKt9Oa;mSvh9Axe{h4Ks{Et6zOB`AmU)tXa{OR|$TA5&+ckf!(0KEV%Pm3^&Cr+b z?U`(T@*ht@j}sH1f9w#NZ0<{{drkP8= zlGDTguYv31cWTTqwK?wjXPG6?&iu2?rffO?kkD*%NP+3+m`ScYGc?DXSRnt#oaxHP zhQ2X37RcwBJ6!p+&^&X0fqcGs)RoT*%{Lzu$QPR8Yq|ZjKURbmnl;c)ds<{RLp#UM zBC`WePxZCPZ2ArDk2gK=eS?~d&DQhsmscdT)QtSry?>UQCYsi_F|^!_Dv*C~R&eDz zLf@O!T;3mAWlk?J{SW3mSAHV&gL$JszQ%mu$}ff1n7!w_w`ZN%|34mrrtP~ET4z>V z;GTYi`2w19F=~VPVu5^<+0>PLMr|@P7v=8{bJP~|<;CvhZ8KY=X?fA3wwdP&1H@bb)-YSYN9{8k6vz*l&0Kk}Q3uSJ0(qX<$(8pXm1p)SkRLMpy7IVDhs=R4r;j>ft}ihC zujUR{o;&JSv*uEFd5@co&{W=5}s#~ZpE$$w!~SpJ-acCm*D&1W>`lh^z2=Pi&HRx}_nX9T=1!iT z%5&a4fDUkZ&YK;gp?i4pJjn&~Sb_O3n3s9}`V-{-xM=>#^S1%(;-dMtYx;2UyIFKO z?XT>!^8Vx{(~AyxJ_p15<|aMwx4kI+USBq!=IQIh^JxzwFF(m?{>x@L%<1{3B4L+J z=l`8i|MZ6`w;uYpaM}MB30*O3x~7LO*qJTR)IN%Yt`(TRLhT!73g*uF)t}}bbV$5k z1fGu>^`{xRLY5~ey1@8+`KVjwgO$>g#Jf=b(%Nlv(JFGSr(yg#>W;aS{l6yi{OjI- z&L8iYM=_`VH(cB^Gk?VWC0=|bOzawU-)y}_Iv~~rgg7|rA9Ko9@-cXS_0*`x=Fx5B zi$~yo%&0;Z?GI=BJyyZrM1lLFZ@1tb*sa#jQ!M>EV5A>k!$~ z1-1v?53o+M-vh(@0oGsa+8@jNlaW@~Pq;o$6Y$+WkybHwk1H})EFb%Q@ZCO&Rf>HM z-q&i|SGCHsFN5#)QLSq1*Wvm=+rFArhusr=w~uBuCi8e(w?5{awnw*yv1xmBD}znj zxhK zojjBM2=`A}>pM36zxcA&k8JvX^7%Ra|M;@j4$kTS$CtG#?V;t@f$dKYFU!YIK(xm7 zSFlELPX7+d4@w40>dLF!dRyAw2%hj`LS#|cw zd=id#;d+oY1WoH}oK@e-a{1M)Mpoeia(d@_QFE&fIwV%Y_IJr@ZuLgf`z}4f^Vsrz zm%dpotc`5h9zV!xY1R3K)-T&*d{%2~EjonlF(%?Q>x|3kS+7|o@~}K&GOTY@*6UUa zbjWk z**CzScJF8{W6S>Tg(01+AK0?L`?Px}>ma+&V41&R9cRaaKkfd8^(Q*yq3?fow*Epp z*V8&%o`bS{0e=3!vsDp2-m_pRybqt%#d;n+&a)Cc0bG~!55ZHj{%1Afd^mU(xCMF= zy#Es>=4ExYUSmHGUIgyT^N)!V;`^*_Ru;Q9%)bU)_>kP5@%a6dg~hvB3(@05^Izcm zx{x14!}o0u!S~{`dRlkb&0^qr%&d2;l*3e>t?+#1g{=P89(LV4c%CwAh_&$u<=5c% zGb}sSN^YyxJjL>ykn0b57K8KZrdVCk+lx|vo@%|#In{rv^*)-8PxykkHQD9l@KkFa+Bx3R zt)n!*I0f}pDm&de@A9+R8J2QVu77(N_1~FR2{!fbnbsIK_2-$^L}z;J&oiwVE?Xkg znu~VY=SXWM+PU64(z*}N>C5&izZabx9MS`+wgt0>>O*!X>vt) z{-Az#uBDzOQ~x~1s>7!KdyKV~P5m|G=V*G_Ut3~~mCoMOP>y#$v9j6Ufny>*wZ^eO z!}|Qx+K3K{$sfz#m$6pdZ*qC##e8tH?6Fp(^R)cYSij?~5$wcSFj>|FYY{sD{Y75g z3DzETP%MD!t$B4PS_3c0`Gevryw4hwJ;^%A{uvBkM71hiq~%ll{oERfcG~L~){Osn zD|)}giYC7ND-&uC%s z>6U(({HR=*=#xF&%4EL|llbjA?SbKhyeyEsux(*)y$M=t-XE_6soxY+jM;hx|HjQ6qSueAD!1FWkMSH6iI~LpXZ0mKle81_hH)mTtU4A{{E2}@*a~z)c zukp?|)=c&l^jzyGdc5$%|Myr}e4b@qrTtf*P3=D@YT^3l@$nE8G@i(}-2c!6KgscZ zg@}3o8J{n(3f}KoU=_UIv(V~*>!ZEUt`&y?Xt?Do&I;XRR`_-9_+UI(eylC z*lmqQ)A{i4*?X+H=#XbkNBMsCK5H>e@7V*+tGmxy&H0kY^7m`MwUP7n;Jmu~Eocnz zw>_MGKMp)G9bYcP@f{}eP3MxEV*Y&R;qPPKljVi5e?IucS#{NWjCGVOnopMd>%8@V=I7(@ zyw&y}YCp8UA!pP6g#01pbUdE7R-*$V3fkL`kr%8xoOj3echTzbFHPSLd@lQvwUABY zhs)N(M=}rM_wMrQUa_JcO9w>%=Vg1jYGuMz89APz@7-Uu*0QPnUbFsW(|G2(^%pwG z?f1I%RG6IKX}>qD;%H}ld&6pirt^(|VsBbQ$wL1B>AbpsTJz9Oe{jnx{1k2v?%%Sb zZ&~}%&iSjbYZQ`s0M8$w@z@=TNN*R^Uc>A!9bKAGEXUq4k ze<`8ZDeOFWeyLQHW`D|F%AU|NPbL{&|$qm_?IB(Cs$oV_$Exf&n?A`GFNV&co_Wdffyf4|2RmscQXF30g zy`O!Yy{{Tge}nx!oNvhG7mB3vJlCG=XV2lh8d-Fn4d+XJVgGPm_IY`{>-Hsf1^B+B z^j&uRPRgHBX!$prk~K27U)^rO`9Gh_+-tW*2Rsp9$o|7?ccUEJbH~v>JIN=P2j4q@ z-|Oz9P5UT1Br3r5hj&K%?WP8~3s2UQ63!*mS%; zV^2gozcZ{=F$lChj>ig5jt4saT*l)s z-*o)tn~uMH)A9H0ljYIzSJCF{Y1n@i8eR2CPRCz0yEbi~hxY#qc0;tY|6j0Ma8CVy zb-OL+)c;qvyHL*cQ^W2@IXZ20ExS%BS^j`11?Rh?N55oGMAPy8`RGRW95mJESEHNS z=PBp@w3!_hMfFAX)7lIrsw);X^YadeK+8I zec|X;TzA=fj=sY;?dAnjyr-(VgticzPYKr{vXr!=A;a@n&ax2~96H z!1xcIsIsqe{soR7y4e1Ta{ZIUDR|!Sr_ukjJF%~#yV{?*{EN4ny%_DBe|5LlplSc? z8QtA};PRo-z3d5<-23Nk`vjWy$GOpc?9Npvm;HTS-FNIA?2d4LGda7TU9W2X{+XQp zu078&?w|K;Pc_PEf4*n;N5l7JalHMWy^$^JKe8X9;dv$;4-K;0 zzJSZ~oW}9cAbSFv#!rLng4g#4*%vUMB(}hKTjUI~Z@OGGXRuwex?J8Q{2q~>Go*k^ z=6r0IbLG)Fv36CLtL4PmbzOcjC&6ywa?6}yc29QJd3c^DC&eD@a?hN!0{MG6nRbdR z|0rjaeTwX93g-jq}#AdZlmdYvWvoX9hnbhKgW3vd)sZA{wp%}hx1_i zg=jiIU7R!1K8L2~UsvVKvTw2F`QfUZuk1%?=X~&MyHq{7{m%2;-`Ew{^nB(wcFX!y zzV$Hvj*0ljZifzfeg<3O8~cBpZ-V=+&5O^q-{SlLSQm5c_c_0y%jf^**@HR11J=bn zJBjlmP`;RmZ|!u>EwClNwX-?Di}`$e9On^tWIo^ig7XTPFR*8GUK{6MU@zc23#N~W zSZFWjdO3&fdy-GT0K|*?T!(gZU!+5a+*OzQ{hs`3hYAV*4WJJ8=1n z?Hin*z>H5x3c3UnL@KJDo&b!0;&g`6>_7KkB0Ureq z<6Pdaot?AG4sb5-*B%9rrX2gP(>c5CC1|Jr+Gn43d0x(b`zD&oe-_lli~4vC9U|9!#Z*j4_OzG}}w)BYcjd(D2fMgIODkbA?fiFWq?pLPc}?f+Z$ zem3p@TYSFYjQ?)gQ(Dsgm+fu-`?u_wY}vk~=aI2|LvwH0E6~(lQgiRv4_Z-qs>1Oy zCij7z@+$ekXF`0D`;R@H?T36$?!Wd9_8H6{+YixHzWKRf{z|R$%Qru_kiQPvDPOq1 zGn>j+#6Olz^6D1xU*lYsuT)fo|1Rh9_{pmq;eSLq zmbaMSD=f1wcAm9mE}2|TiM?P?UbjgzZaXzQ_Vkz6DO}DgXcTeV*_4xz1#!+xO|Bnv_a~ zm}t5wvP39yi7e5g6`CZqa!D!CR6`lXf>>+?MG zoq3um?eFscEw6b#z0c)yKId~j=X1{Yobx?j##3UG5w}9zP~*uTZ<)Ej-(2I#AAf;( zAB{h@zXRXQJiza)@k0^+gt(Zo)F)bYpg%`3)hAkZkiUSj)u-5BrC93I-9P&TlF!yp zyZfsKvp)Fwt+1>*_7P)ZxCYAGbj9b(Hf4wSYdO97$3y+8Lnwba_m{%5L;cW+g5T&3 zurK1qjBkc!xF6Xg)x+<~cwTJgb=1F0{9;KTyB%?lREghP;^Bh}@qLxDp8kBr8(+Zp zg+}%DmrHthi{lUT+ngljRdM_gem}-|zbM`Z*`sWLzn<|F_z`itOOEvC45jo_;7P{6 z@Q0i%_;9>065ki{X9{Njc39a_e(@<3FVFvj%8v0@WZ_fFj`KU6%JH%Ho~8bJynl$| z+Z7+7`1;oXepz z_<5&MdHB8HaSohccB0>p@ichlXa~lYo#M|N#_}*e1#$B;2;1}1ss2#LVm}khPW4|^ zO!hOeY?%L^rkD3m&+vCJw)P(G=MCrb)gKP`PhmU{zrBcW!;Bp6pDS3~_e}rSl3v^Q zOn;oFr}mvv_DjD~F}3gfvJw7fNzd(jciB1qz%!-3)V}k}e&wIfcwX$!c;DuVvh)0l z6~BSFzjvNLUNGD9sa)u?(bdfS16|OVpZ8C{yN1G=0C=7{Y#R69(>09$J+R!`n%Nc zCh@U{M&o(SvP=CQjLTyy5LY4Yr|~~j0mhH>kJ9+)D|kN+;uAFfHz!m6%luO`ehT6$ z#J|+|2|mS-_kX4F(-2o7zDVQ$#N}V^kJI>0Szp5iC^w`+W?HO2qNU#Rho5LY2yqVe7Lq4+EOM>M`4;wr=|G`%%dYfa()bOCs}OI{_(h{B{wn_+jeihv72*#i9?ocq_c@nc z?H8U!?IqtsewE6u*!TaTUU4`w_i_5!y5 zKgy>1r)8!83h@}m<#5#_blzf`-|uX(_mfzjY5svD2-|(?Gt&0C9^YU3p)7+}e}m_x zXWihBi@lF-Q|}tw(;Zl{{4z&{J7iy zi1D=8l=gIf<8J?R##3T55PNX9|Fy=;eN>D5pEO?Xqgv$0&ZY9F#ppckq~Z7YEfoI( z*9(4s<2`<7#`t|~#BU%TqVe1EjemgiFZNe!eCwqo z?|uHW8efdqgZuoKG=3n*FYz~M`~@7p#D7oY_li;Z_xu0Q_?C#@K-^@c)MrH=#XsQh z%XmucS;TK3K2GCH=i>U|tfl_RiZ}d3=Vg}qXDTLr+<*R3|5u8ChxrL#r1(PI-y(dO z;=7ZAuN2JocP#Q>%6M|@A0OfU@UtHE*Jyf~uRiL(nU($mjNdL8Zo}ujF|!`?<^8yi z;xZnF%RKJg$QMi9Man|Gh3%E{5_%U2BxMtQ9X*?RoPY+i3mrD9Ljd$12T50id z+P}PJ)>DQZI{ouogkRob2Z|#v+(n?*81ZZ%k$;NS(X0vS@`2wFZylHXZhhim&)(=?z<3G_#PadPOkn(b%YRqW^LX88_FMixvT!rRUn{2lhqkld_G6=o zKi+?II^HLaxKS29c=mgKN5=D@3GS~RHv0p=uV9@oeBhs;Smp~K_#+e_jN|3sTW|Kq zDn1hNJIT%dRK;I@i2Zl=hyE>!>HD_FB3`WctEcIEejoWO6i3zo=Ksk5i{cS@KJ3KV zANy}9z6|kch(A+2@C>{Uujk+W9~GaAxJT;me!)ee&l#Bh>7HBsBE<_4_egE=4^}+s zTAELP;tyavh0kx}4W|AC#?xZILwh?W`iXyyV(|x`_}42Q{7af|ev%$v&TWJ8A)dqW zH^-vbdM(C$>ffrkCE~MYf9l`GSnP4rxm*3cE+%=WvA&;3eCGR#N#BtA%x@!@pWn}$ z{kdPvcrsjx_l=H5e7)i>tMNX++5hkxU&8#@KCYX+&A*TF6mI|3v$pxmv+#|xxBK^v zq4bmSu4J;eZ~TH%!c*XSD)dmj_s;V)H8?cD@+_>U{5 z_C6;1gTGoawRaQv!GBIMwf8a6AN_X(v%TLr`$zv1#*^Xdp17Wb_#4G5IsZ@os_~+q z_b(*>3#kJy7kmRgf6SZZr2ek>4#cx(g;EnHNc{502!~VKCknpz4|ra4mYZsG1!41_ zUJ3z(^?B+0gyH9$r>+6G>XfL)Kj%D-_<`ApG`p}c zhNUs-Pz#Z>CuZ)a}?A3=A7iksrMDjeCd+Zn8}i! z=1b=!FG*dcnC457hGSA?g5xq@8k>^!Rh!?9P2H~PPj2DBjn3HAQpTGcnIDZ!tztYG zM*W5S>DW}8YeoKJ6@RaI{x2MqcWkQb6p6o@@ujJ=6z8M<@P_l$1&U8S6u(c@a9nDP z;<1d!r=DYM`kRn?hq35yc)^6!XN>1T3tVqFw9ju+-!QiM$`z?*Q>lEL-&~P8lCkld z6tL$>sUaLc1@;Qz_h08sN)1!I#KrUHbFNICqxiD~;j2>@DjwDV;L16ZQ&SZ8DWrHD z2NmDgi12l(TNJ<01lx1Y^we(^KiL%D-R!bqXlb+N+>m-$ad|VG@6MT-`mS)Psh2H2On6ReqvCgPTE2MBO{u>ro`v!+n=>~h>)FbZz;rh!T=FCg| zQ}HhmFPSub>xwzIrp~>N?JK?l*Ds%+b6e^{#*<@zLi`fqaT*W!{P5bG`Kd`7 zUx4^6#MS%f?WyZHUfT0-b8ZjFcSmZj@)P;)NG(t-^4*cTPq50jAhk{7MZVvrzGZCk z{WcYvCi07Xccv1IC&xs-J5!Aqn|=H)An)%|tvP-Qe2x0uGUs=xVb#(vOkEnl)$6-3 zb+zWd0Q3KI&cf7m!92eoJnr|YyBL4uRGv@c{oSc=1joM{=D>Gz?hfeZ?i5U?`fQ57 zMe%TVs*Pahh`}_!xjS_rW2?{If%@E?>do;}-~_aHD8D;(lwg);=7dG5QyG86<=;Hv zp46`et9_cV$~657mgk<-ye$6F@_SMbWbr>_?7gWKnx4LIFw z_og;6HvadfwhGqz-kb8TCw<8L^T7%CraCYd`5TrmPW2S5@-Gg^zgW{7|HY{@HND8c zICY+4S`SSjzs0k#I2?~?J>;@0mjv{Ce`++RH~rtAn!s4>y#Ve{&CSBC${$EQE||a1 zzQS9YdV{g8&p)X08oviq6J}6-h2Q&m52j`_w)lqw@;scngX5<_2W;>51m!&@^<*G^MGZVh)8B*XmyKVMdPp(77V`Y~ zm8o@#ccA}%ee6>@o{RpzPy9i#jQ?MBTb;%<{vTcbbQ;Ti>X|_KYg3;n|4J2(+~TjPhXunOuTp<|IkiUdO-DF* zfBMU*qB6EG_z>~X@~Tuf#ed=WS5iY2kLLJSQ&%Z&lkedDnCny16mP-(FqA+?I}Chp&OLwoA3StS1^ zXG%GaKkn;+{BNWl;dp!>5A)*+f9i`llAinx;T`4K`QHfS-qsSyATbhi4_22qSNMfvC4J?U zL~&lC_1*C><*$jWXfVd`cU;MLDvqUuuj23!oW=PwdJ-Ih)EZ2N`WuOB1pqD_j&oef zxAS-p9v=ChbT##6dWpaSd={#|9y96Bz%^&GlXbY(O8lk$9I)`G@s2+VxAv|pd@k;Z zQThc;T@btSKpJ0uX(c8^1!j)W6137^^UtDYd`=B3N6*q_2fDqmRn zy2{s6z7gf;!2hiDQ3!XTdhe=S(R90--bJ5bt+%W7_R{sf0oRzQ97`|ln!(bq!|KOe zZTC#PwV$+;3mv#!JZ-NCj4G|p-_qCB-qOEg$}bM5ayuuKZ>IdZ>Sy(;E8Xu{&Jc76 zi{35YSrsII7+T=FKG}M*aFH`3kNK#|`sm ze`p}#&GD=_rT_K{$`^t=2M9JlYvam@QzYEvFg_=}L;1omhpC&ki|3es2%hHfj2|@| zcO*2BT&gS3NJE^K^0R69(+Oa|3UR@ z?LO{N3J=3G?9W{IZ9BpqJjLlFuy;$sQQS`=8iTd?Za}tum>t--CH=$tUB;ivc>ACE zgV|kO^9QqU(_4M%3U0@m^9gI0N!(xYeiQV&1qC5^jvk&c%xNTcKjKf)zJfF1B2Q-C z@)XYTv-1aWaGp4q{Xv$!|Aop4!~VGUM)RF_9FfE9Qu=Q=-G43I#$%ID!ZY(Q@fUUB zFqE;M4W1*asyhPy+&eA4I_VL0$ZV>4W^IA1(GP_0EhBqQ|JtLt^Rjp5%E0?&nXIb};*`orXZh zi;RA)UsMmb_?mQ)j>FS%PmS!z`iJ?Kli!eV(MNDz>cG#*Oe0$FD1P{v+RMt#JdasE(~p&Be1)H@{2ZNU z5YGeialiJAtr}~3k|^+uM;1Od(ezR1b1>!4wEGLXZXxC64mUZ& zizvU%w_F&ae&w18BG1Nig_`}Cy@4N>GX8P*$)nIxDa+M?b z>h52`b~J4D6TM{mUkSdWMEbFQXnvvmThd!y<<+crbDoEVpdiisiUb1|6ZhWTL@w2n4(}(o=uIdH~55X2Z<3{~yUtaIV@4dW57~hk>O6Vag zgx2-k+Y#SwqI|j1U7+LRlRRFApzV#sHw=$ojQQHozeyV0tbJx<42Ljv(|qsc`Gn1%@q0_S{y^moD-+uGk3>T-o}VA_JTGH>53Wk$2hOXV zPSyRIzPC#Ln^g}tOp^K-E#v(hymv>#Exp;D;eE9n!em!hZ6g|jIZVT_3Mt7w6!l7U zHqN(b9R(^RJcv!7*6&Wmy-(7QJx}EdH@PHz2&&!_{uZ7qAC*rMPk)HghhYX&(|67A zy5zI+c2y2(-w^zGg~(kUhvCx~YY*Sf^Q4TtlHbz1VDToGQLBgHT>9D7df0eq&y_dz z5xI?8{Whz8?XByxLPKET3AJadx6lxLqxlTm{G>V#r_)*b>ij}*nm$+FKT+&b`dbJd z!$nHS5Htq@%ATtCz5DkJ4t{15t6>q?G*3AVciLPkXJz%?{hDd zbfU*F^d3XlO|NH;=JCkJ@eG}!>voga?!%DOamn^aZ2v;+DFg>IUwdA2b$`p#{iq0t zzmJ0WxtOjm#Nmb?NzMd}dzWZ3y`O0FfMfXiIt)j#o?T7vrPn2nVZR!JHJ4ES%)04n z-Z$`I8n3TL;5$wig$qh4T}=7J(|ja-NYjTky{qXnBkmt8>^e5{l){o2{ zs^f5aJghz3g&*TmZ{cThgmr$KiMMvmHLm6gw|u$gEf#O|!xGWgTl9Q{e!UFu_MmZ# z_6uozJD9`q`wDwFo$$x;Ov?@PIs~roaycG|JhE>|?YXDYSv_QY&djS#o?y7>!vT>m zv!5;c&)^Suz8!*#`1#0z<9U5qC_N9zJ}tgC|GKpQt8ABe4-P*!Wa77;L3($9Xm-B$ z@p+V<8%Vx_f{ffd3nxCg%JKd}a)h7(Q+!`73)6G3$@@To$aAi)t8D2lcz5g9s$A+% zG`oKLTqb;pW{2B)rS<=8OwU`ScS>)1H@h~Pou2d&#JgLMT7_0`lO0q0WZPj7@60Z9@y{jauG*oDD|pWjjxVMM zvOm%zVbf#KzJj>XQn7zq_peSvdj1dR5zVB1oS>r-P-qS-87%t<8$$= zD__KX$NZ?O+ie4WSWjR36bVOx1OlT;Zbs zQ2HEC5Z^yp_yyak+1@g))$WH~osT#`^9CAEC>@O_yq`(w7AV*6ya zKl4anUnz)R=5@ueuIpv?Yifk^`z^Wsgy=n#ZYSFZGHUG-OxI+X=(VnT=8Cua*SFrL zC)0bctHiD>JXbmY?(i>t(Sy~)Xnor;*sj5Sxm?)FF>3WZPTR$(>Dl7<6t!}V8sGZv z_gTAHJDQxff3}|QfO0@^hFZ9l7o<<{esc(}Wr}`B@yATV@V=g73FiCn!gc9O_D!91 zKR0_YYWv={Z!3BXp8L+-|E=EEjz%p!7p?9W!|-SW>W?n`k>6ABU_rk0&s^!I6;iyH z9$%%L5I?umxLf_Xy=HiIz8OFLIF}#R@!N%)S&mFO)$`RozE@A5DM#i9yNWaA4Z^!L zXdKzMz0h8|Uv2tc$nSlG;Cfyc#PwpX2cBEoOZ4_Q$K!hy93O>^93O-31r#5L)f}II zc!F>e65Kv{(1+vm;aQGv0GDw5UeJ)^3*aJ-$M^nOkGTHCd~v?P<+?DjA@Q?u-e_hV zev{9shamF4q^pkcy`l#te0S+jD%Wb33-7DV!rAKpUw=yFgkT)gF#Ob#^o;v%Owljw zBtC?8Y3m}vbY1wItnu;S)g1h4ONUxX^F5ULguvQ88)w(!)%U3$xL$|U))xr>j?WW@ z;2vJ@55wnrPNcT*>~$W|2kukoKBwpfZ%t8sWQS+xORXU}?7T@B8u5Ca3vpey+gW_J zJ{$7+xe$y#nc4&AlN*Sy3zzcw6;Ju%zMJxWb~eR_G(4OR-xWR~d~eCxGbm@<%cT5b zrg;Ct8YxfSV+uode0Dv0|C;0v!KZwFt$I4{A3KT9=2KTar2Gh&e5MZx52wR-g-^CV z%nuRGwy#|cm**ULpCOyib(2M(Gnt0rW~L6*7M^WyojZ_z@qT8c+5C3=UHI8LT{h0{ zH&eDsx}{9R@B~wQzZ7XUKY1>|eZX4MXUmiAuWIHG!Re(`UKj@OxmPKNO3Ds5e)QZ% z`XWBv@Qy!{`=k#je|3Kr#M$*Tzc*gzN!d6%oz0hRU9GnD%3wL!&%MT1{H=^%R*#zb zs>`1(hw*8m{xTb9r^}X)_-C)H)>WRRCyfU6Qrmb@8$T&O1VK41zsYCvTX;6kRiA9T zv3mW8&kvNoFOFlR*MH^_^gnm;F+ZTA$P zjf4Aa*_iZW^CFWYyFXEVgZ*6Q$#x$C`jNkhpRxD7v-wm0Ag<0Y$UoyJg8eyLuI&2d z3J>bDKdSs58_;W>g$Kz)N@SZ_l+6122VaUE z1=nq@UbeoTYaRZ6eE*-$lQhwDUzTrJneY`Fg5NZh`MHJv?FNYtwyWhgy0iL{odn}0 zUuHfg{VB8F5KM2_=6{BFXT2ud-&E(b>+4tfmK0J-=E*T?FUE}O6En`m}FF+OrG zDYMR2TX^>PVDYu-F}I$ox987E7i>?$yTdQ&59-oWeb*CrmM*(ps_QW`&ej&5TmQS8 zZ_l+yeeJ-;KdWDGe9xu-T;Z~B8shmf`HO6vZ4bHfn;atlp4X#|=Qf|r#x>=W=YOh) z$eURYu=!^ve%~MjKj{1E!qs2BCH<(_Yf9g&ze8bAu0plb2GvW4p zX!Xm++4ZyhyDE3K9Kmsq^i+L(vF8obpV3hIoPG87uCM+7-}CQB>N@(N`C>=eIJ;eU zPoMSGdnVnk`1{?F??2-JwX>Xa*&Y4mvV*$(eRjU=a&!6XT;bV%|3Blv|E+O=?8e@Q z%C;x6gSxQUQ~lEI{&Pp|<5Xt7!Nz;3N9O%C3%7NN`pBEzkE++}|K2!Oz5dnhA-A4( zJ>7rCCmKIw{`|k`Ipx1^TL zwsUQ{sGS=;qpz$#rsc|U|4RCNCHBLNo=jhRfNHtvaYNv({4#yt)Tq6W z8l?9A&q?||pxqmPI-kSN+#{bqpZMCjDi?zBL0nh**j$m*%B!9}Q||v3zGk1-(8f6S z6S==8LoGf?*Iy|1W%n=|{hRKmo>@%%!tep#&w%&Ad`vi`_t1pl5x&>Kg|D>z_SN%# zwk|L6PCA~-CwnP+hWOxpHRFXE4$8N?_}Qm~uh0;T;d3tztip3O_8uvfAB+#4XSRK! z@%@C~iWNc+?j`iky#HU5Pmph2*yNLSv`l|BJ&GK7-ebCyEBx#}piuh!u%);C52LyE zK`cI~=j#p>yVzZRr{73&;{7E1h`fR`@}8i6*8H5+$JQ&B>Av|G-8T1|!pu;shA5skoY4-s`>GGhlC z@%g|Y#q$aaB%Q?L37Qk7-8@Zi_lpV5>}TZ)uWS6Rz&ESSnhdx z@1OZ&+mC*k_utL`hjm=Wd*nuto#Xd9_&$pW^xU8H98G^8q;q5O6Lr;pSL5#uw5Q+@ zJkRq9e6O414QK9&visd6o!s+~Z5QT8*Xw;U)oBRU9!K@T`#X9{y)3>Lo)0Ad@DQ*2 z<2`=5?teVr-xq?S(G(wsLwO#A-EjDLeu1 zF~zT4={a>t7uIxcIzCr$8VU9}^z#~9pmB*_(rCam{F+P+K<zSM{ z1b<~Y!f?xeB9Hln)qH=Aqy3_8`GRsi6?sL`K!ma#&w?5n%WUnER`5WFpehkU$!VzcEJi~)81`>_HH5g9kygwQ)^`U&U zo|HOFu*i+?6X<*6!qn(9UQk#0SL-~$)|Z~;`4iq_%;RQQ@6U6gP~Ru3E8gZG*XlggsL7Q}p0)h` z8Tw(SxX(5g#Yg#1JzVNxbd2I|4J2G>2nOo&+`?WG{+Iln*Z<3_h<^wc^SRHket#yT zufNWf_@l=VpD?^|2~ihjwI%Ao6O8daEWVG-fna)xcWcDI&d*_CmAAg}9$dVc{`B><<_r#qHvA+(Ve%Gw~Of_ zuteVzw0i}GhSWa7(2$=m9QfPuWH*`b%9wpvyvb$l65KBip0D0nJdYD=s5E&$Glx30rNA`-qv5k@EGgIg*Cb!E_NDHI}OA2sz1|@ zwYTZd^kwludy;`j zCZTolv*+`|jxs*1&~>^n-|rfN?=}!0yFVA#@%ec;q|eV`eSXGucAc*-R%+PlY3t5L zEqt`rpJ;adO|HZAzP`HZ5sWwf!SFqWZ9XS7v(8F#lb^Ehj0EkguKB~BlCLg4reE>L z)-PN*^9O2g4_4y*ot{rG*=Ox~s;Qq`^YP&L9!zKYtsb74SDRjQQPa1) zHx^d?x~gCNK9-JC^-CADhm3xL?I8NW`?Z-re&?C{t(R^;^G8;{T=L8FYX}zhmT}=- z?)RB>C0SR@j90eKXwSX&TvDpfF%}=pXX$Od!pc3Uvy^)~@0;N|C_gWG>F=S~eb3h( zE$M#E`_OKBJ<{S2c}@J2t&bXikuR*zO&Pn%rH^2^@v(JhtM3}!H#a>?`)1nf$SdeQ zG~EBd?@Q3WG_3>D{l>|KL|tAFEGWQx#~DX>J+Gi33Wwo6tmJ3k<8u*sKQp&$2qs@3 z;Xy3vLj3+Cjo%A+AKBICVUO=;Apb7kO^NC~e=)ePKk?cjx8oDL()6)W?DLua8-mM= z2;+0%6I6~1)A|th;OgasBXA?rC|u6*F__Q$?sbnp<`1$d&8zMGW%}L&Ve`lG{fEqY ztAz*s-MO4ON&cKL#GSo)|wm&DTL*>_T8ei_#FLYtRm)|+j;(9+8~ zP*~@0c)u;LOXK&Ob=@r2dZeva8lV5_a!p@%{js{81;3|KUH_TytOUcK_h^zMudV0@b1oq|UfhbJkbG9+KI(c7w{co%2(Hk5Mxi0N<0|P#mX7pD^KYsLJ%@@O zYx)bS7rhTf^IqED-&7%dq#ZK%XG(sT`zxiB^fK=ze`NQ7NxsZ;x3z0#S%ULJ!zNel`oZrJcdage?Ru^| zT~H6TmzQbJ^u6UfZJ%82V&Qo2`M))P#y&(Zc;B?nBkL-6=kXc7Hb1d;x=qi!TDYCx z_!Xa*%>CSI`D?e&n(bG6x?ub4njO=6qu8;vPq05(cwOzbr}m^sYrmyP$F!P zy2;MtJ-CPGi4k~}sRL_@q(9jGt#bZ8a~@yL7vTFh>`!t3g3ssIj1S(sX!Wq~$Juv? zOz+lT9_R1RgkS?x2ZGr02kT|`a^woP@=OlHyIOwj{4@7!)D>^#{#-dMe|^ida`$w7 zjc;9Y1nnV+tv*5djK9%Ku9yC7=`B2%FK9PG{N$s;XGGxr^6K@ld)_kiFM7}BXuW6C z@JmX{e4Of?==6$I_xh;RNzCk|5-)Qytn)MBq6U6l^ zwa&&9uP+e_vXM(<7t78-&tek0hP%Wj=1`D&-Q!o}yC@jD)zE~MWn z$8+@_@p04f(|F%6lkN&Vw{P{e{Z`<8-wYoq*M$w6NDeQ}Z@r$sw)e=V^Lxt4Ne7LsI`6VnXFR^_l!4U*@~@R!%V8|8)HCs>i>JZ(aJVZ@F^*2+yDD`FF$C zj=A{Q{SdO>k1x&g`ygl|dQPD(`F?J^l_M12BXeuF&!1b)uI3NwZ&&fImba(V2jva& zH~&;$`mUbOw)Dg1ivKjcWK(rKP}eD}eS_uKg)P6-BlCU4(34aS-haDA%CmcHM)LbW zA$V;gg@@r;#x87OjL(sLE-(bk2atW?{&EGSb0KvdQ3r-={BZuBY8Y-EN$Fg;P3P~D z4!`Tl&x>K@=PExho$fIncS6uv*8y#OF+Kge=pXq$kPuAO{b4yb>A>6%rG7X4R_JpL zs9uh~9~J^x_sOic*!U>va>v{JVbFNtYqa|PLm{y7+4g5&j8pj`EkCU5Zg`%q6@`0n z48I44`$TJm@26deX3|Uj@H>oLUk?_aM)@L|FPhG0@=H3r$4~WQ;nnM%;V0>8^0R$? ztB2?}q;h2Vi@s}y%Y8wa@7ax4yPT`dVLY34aHSkI7?H?83gc9flEV zw-#^ogE1nXoTI|^%OcW87^-v~+T=6+7&Uvd^OSaPfbk9b4XIx)`>DB~Vfv`vzcTlc ziGRrWg^~DO7t*)gGhqIH^(7RJ_iOR{yAIfWTjHNX@TH#f3SwK|GygPG*KykZQTDf& z@O>K&NO%Zlmr*%kIPX9y&mSUsmG{nYe$4*L&iQ4iosYD0i>AL^)Y@ask5oZ--!t`fsbh`Hi4IsbG7+drY|f@%x@Fq#jLA5E|q^O7%Wi>u>rFhCk2i zv@W!3BYdnq%x;49xA0&;$|Z-%W%@CFTX^mIa-r{^Nq-*v?qHHD0uEDr519Q~4EALj z2mb>~mw<8n{F8*MndZR^rulFz-;>h-K1N$3dt0FA=yzA&!FIEHTfNL~gl68Guzd@w zx6vNjPIm9vV&0Fz^BYL%{>^SrQ2jD?Y5KQzk#-2D{h9F%QqzAfeVaav?yemM^%IoC z>KkLbbinXoYNt|PSLZDrbkTd#Xq=#NgT^1y3ytG+PUUjkm!b0~f982YhF^Q-Cw|IJ z^AWw`cPdn`LHP`uzHB}q_85X&qGU&5IGE=x4p{pK>s{aeYvq~Vjhg(Q24|BUh2R3F=5O)-e73(#J*@v5eNyj1G`=EVSijqg{)qjO zr+x{)53GL4C17?KlK`PbB&5y`v14^!R=%&$sdYnLxT=xTRmWx3tp+rVi8| z?!x~39E|(fOf%&N^ILze9-b?IhEGtw-|tUy;W>qWN_`D?`4{0ZTonix`NDO`SCpBsL2U8`^)CG}lNmE znC}J4yq{y?MuYJ|IqHjp@&vKTR~Nrvz98Pyd~BTf=R#@Uzv+5Q!9&^Y?LY(mZeIw_ z+eY*MFnn=7oo~hcPfc&@?AhtaZYUkC{{++7eb+&H8onn_=V!M*E9KmallJe4l6t9;0x?)%6sHOV&}i3v<3AiqCI6&PQMi<0y3Edn{w{ zN*=}k-28DE#^u$2oH0H8TzW098{_v$u@0nXd!P0pt{2`5!}pj+;Nhgy^Y-@A4xb!O z+QaqDze%{=A0quA1l6(4uZ(7%vn-ua+yD4V=b;u(p|DLGH=|Jt__+9XYl+J^X zbiB!xPU>A>K6o!E>&b!br;8q}AJaMq-7j*F>Z7jvo2`G~`O=J7h~?)Se+eqPPw zH#y9XM8A&e8Sj%>O?u2FPp)tmc2`cZM+ctiF6CPJxv1IWZO2o4;C)kLB%ggxK+bW7 z)9=~V9`3>fem@8I4VaGu=5K?19e&?8bN=1-lWPy(b-pitE%F;b!C{pT_dn_-A9_5M zQ|cA2GvA+hd=0@RJPzCYeh$gU3TVQMcAWL+-;*YP@Bro8&4 zkE&i`b=I%?`G+vb`_HFl*;Q6ZqU+8%po449M4)Q*!*-OoH z@z!p(u5b4g9Lwvs4%~I2$Yb;6Tr}ucZU5QcJFkv&`@hF_PfA1-%HLR_}3Hv zx;d{nui@WD{F@A~;=f zV(P#`rH=Fc9TZ;_lKOOFigGI+qIj6n5uuZj5B6k@U#8(J6>ntP1V)9v!&^DNgKdl> z&XBOwZv@lkQ0x$&8=X<16@y8SPL$$ba0_EZBTlDSCC={f8{4rd=#}1bOE}ztVpsC5 z)cVbc4X*@fWN%9Hdn^ zI-Za5Z6-QU>Q%wrcLV&!TgH3}V5QQ^*aX}in&wp**77&S&cj`yd%R7t;Y=%I&*Ez3 z3a>JDFCFGaS+&KifFJvz=Mx!Xr4vmOed z3L4|?zp`j$Y!;51YvS=Z z@hyPTSjTAqPb4a1S53kjBNCk)qR%BtV=LbVcp)(?d^*0pwjRT$;Ofe1uanarS65bh z1D!bD8bP$@P&_H&4GR~J#T6$Q7Vd(pVsB!;;pm_~#(X0Gu<$6vpCtySardnN+Y?1B z$M;xX6I?ZLl3Q7S-zUmhehTl5?H5ay#-==ocPS-HIR9QqhvICtG1A3oCrzN6@+ol! z_5o;-92P#OFQp$Ap8tEIrLkAg-U&~8PiTkHL`%};f7{Q2w#i}6mdhPD5a|t9;G25M z@>sj?0Qw=O`W%6H9)=&4>>s}o^>!Tc%YPqWXtJAg<+IdZW~#osIWrXx#8ty{Fx|ro z0WL_6axTPGh}B+ctS{QvG0`DhAF5{|o+h|4IoTP3r^U)q-t9dcxDB!Bd9vzxF1PRW z=v?>ZrIdfJ`|bk(i<1*$z42*hDbf#cwQFf|hBF19N}fm#jDK?#z*9)2olBge9)S8P zjeSh3l`tg!6Uy<|!sGohFT;Nha zUW}CbBgGHn_<;`T$IZj`M!RW{HzIx!>b*(csJQr(QkD<*l*3P>KAPvDo{(Qr-b}UI zVVwVvWT7(^<>;2T5}Mx&&@*oayg7sPUm5!~+UJpZ!<m7TM|vFgx3k6qT!HaKuR}_DzY*yr z71$0)sh`Zr`&Rvv(0PbY#-|{XV-21byfbfpobunDw~XuI;F$0co|1hkZzW?7O5IU7 zdwv@65+e%_M!Xl%ca@(S4wx8yC;{<<?a-b^S2>s@SeDO2*O+M8}6?}Lf*}vq&J8ZdL4s6o;Rlx%Ev*g$Qg{w7|k0|-C z2l9o_%KTE7{PKi+X{WpMmc+=9uFqc*J2!#;2j%-0`q|^WMQT@zv|lb#KlrUP6ZQUO z{x-+MQz)?prEVA0%U(#gV!pi^h(B)JpbGNQ-;zA!w=d7z!g3zkARf8`{l^hW@v{!Z zL*$2tHu%2UYf1e08v*v-Yq|F0ZBB3O zx4jTkf0!O!uKjwObMr?yUhP#FDnL1p+iM%^amZe)G~X&sx7K}WJdRsQCn0`)t$Y1z z0H5x)PWfSdkuTn%tazQ~U+cbue&i=iCw}BxXC(KhwW_zZthbH@>)kHH$ z`sD!_PURenbTsxC58{byPCbu^&@E{RiULao6#yf>QTv+@1Rl`(0P;C$Ylq zT3<=mtZ*auwgjr-heFmfdOEKh>p#4} z^`!o;C*!T_iN0M={H5!O9$b&?!GSza{AZpg^>jV*Kj$P}kK~RtbUm_{21sT6*cjXV zH9%v$8i~f|W(}Jq+LZ&8G~5)Md^Nz4h$&r3!^YlI*8p7DuslR`Y{Q`-at{TOdnkEISRy;uIAf-b!zA)4f+vUVY zg`py}-(g6PU^+<0`HhbFZ|VQ*3JOCs-ky)?Ts*}(x{P$nq0SE% zhE7NO!g*`x?os%KRgCY-{bXV2WE{6VKRkk5Xmy?&qA3}XLr9=8*Ip^V>t zGp4>@q_ogE0>|yvej(2{w&Zn7JaHMozJC938|;5ween~A`z7J%x9I=<{)yvpw~@yE zkFg$uG2K3x?o_1Ha9r%_SH^yi%~d;?tL;2j z{nrBZR}0i%4M~)sAM24Ck{FDBX=$=Nd^XM#j!2b<|Na2#E45V9Z*;cqhx4dZDUcl> zk(?hUz06OIO1z8nwYyRi6HU&*aXmFL-1|9z$5JyAgRxy!re=hvm61G?!~d8K@JecO zcmjTfWwkdkJQnlg3^^h5$wk^v7HL0O#P){cr_zbx#W*ke2>FwraGNbmcyj<+H5-+1 zvAy?cwj{9t$FYN&EmuCvl@FHVkY8D=_Pa^jVXf+Ct?Fk}_(h!m?$uze_T#nMU)HJK z)@k~6ntok6UdDrU+JDxozSgUL*Xek$PW#h39S_!NIqOuewOY{F?)+)bm!-H`ibVPDg;$qa(L(K|xd@pq0Z-aK)%yFCG>g;pP;_jQ+pI>U$%>CwM z2i`*c^}hn(Z_O$aiOcc1u32efAAD~88gUCu{~1!3X_0#ku7W367PZbviDvh z*Ez`NSnPkqhvxTw^AeSNQ=$;dxwQGFM6X+k&gXW+^^?SzSk9E@lM`1j1bC$R#Bg|D zYTt?B=W+f@_9V|aLzIuq>&7?Qta{$8dfuvf-K_1nRrR}_)1m)iKiRm&DCTo8(&rij zoPe|+_V1IB(){e=*AKkI#)QTDlSPFCJ9J&d2_9WS$$Lc}T|sHzMOq7cDQ3(|w=Vl30e%&+}V~ zKl?+=QulqF2R?^X)+e^<{AQRl?G;>K*t-g7UUG1Y0m`RcM8>Cf5gAvyFkc6{Xt~7^ z87JneKEF-;ircZb$~oUXC=vF=Ud$$z{rboPNlPiN{RmrkSS zcqcg*=LdeP!sK61qVcIP8CE)f1EnuaR-iR>Z`vh7^R||)21IC{R@`b(q|ta9KNq^K zal9PVYNcDahSINe2V;Ne-gHoe{M)cro3)<}h{(KdiyMCt;8(2{hF_fkaB-`m3?-Ro#2VgyKZ!OPp540``e|Q^?U#;c2>zUS*B8P7Vc&+u+2(5?xz4c7Bx0$Tx z#mO!1H|x+2+H7I_>VUKd?vnLtBmU{AHgWHUyU=ditaNEzZ6wmSa2_!V!v`b3i`$fV zBagzJCd9X(-QCh=q1y{j`Q6cGn|leKet5mju;i}}ci7Qb|>*W3RO57_h>g4sre$c&X zC+|M=cX7l&p*=J}deQ;-CGMiq`!!}NrrVs6J9ow?eMMI7Ef>Tr4Y7OhnN+uU`(#^>CkZSK)XpC~F%()j#x z(a1>qF8Fj;w1D~SC|bmPhP7Ix_7L|voQ~^mZAW=@daDE}o!%l!^&m?1AiAJJ@L!m2 zbBFnO0;lc5+?z^J{2&lH7(W8Xqd&D> zl6)%Pf#=&!=K8#fcy=#*I>q?r36!_(@(7J*)1yn0Tkx&Te`5GsakT%ot2BJ1`qhyU znkRQGSdzRF$Io{AY;zO+0XidXjn5MWjWONR`;>cktfKat;kC!-y;t{{;n8}-%G4%q|6@`k zdH(y%-c{Uh9ayLRd3~D7bLl$muOl7tBO@L0)8jP%+nRoyb7Xg1|7^Ee({I-PJyp|H z#*V!e{aw4Q>gTtrUz)4@<|_ZWntra18{5^6#_>AmImv}=_w(8<^c>`ON4xo~kGtA! zbJyTJdpXiO(BBh%uoJ+a+b#3<--PR5NK@k+_@mJ>kHp|<@`I{-9 zO7APQqu;dO=PTiYs(tfl_`_U$C?~Tm&@%G!?e_(sQ+P=~oh<3N7{U{eO-;eFT z<@l!iZc{o_$J3RL>=&$bWIQf)-^2d<^1h`mJ%=SbxKZ)TdA#2C%-(KP+Ox5)zqO1? zyShpnr{iO|p0zmHIQrsh8V4Fj@5E7nu<$E&i*SB@VuyCj=W?Vnk0^{>i2dPD9SS2G zt|fm}81beMoyc-mb|{McwuEp|WX_iW?;#%dJiun8FKc*f#9I(APztEetsT1My}{|b z<^2Ku{WipFl)lHbC{o1fnz3E}tHZElcl7Jfu_WT+t?(_7Ufh$)Es6B*A#_A*YLAjg zA<~kzC6V{hueZT;J6MjA$XxVGlzxb&zw#&YE8UoX`;H5f)6icW(6N8y&+TxZ1?i_s zOVB?NKA{<||0Dex$K63lPn}5R^^bgl^WBoR{Uep1Q2qNyp1Fkh_K&>8w2JjKq~owi zS1xy0WGU9~48&Cz0i2EWVq704dW(j4)bJCOR-xX0)lt@0$2Xc0d1HTot2@nzY{PNH zo+oE?+TzLlWsBE_?RJZ|4A;TCH{IgN{APtfKOW_`CV6-@^UM zSr5hgNx8icpUi%((i@NcW5Rw5BYknad?F$JCcpDW9%p)Y-lTrBJW1=%hj$*5N8{8{ zoy9*M*SXxAgX3mD+@GO!o-;d_Cp+ML=iJWaF|uF6w0}3fa~JI&U7|9-D~`(iu6I=C zZ^coWr*w(RJf}-k=Fb%@|EA6h!<+D}p3ggf8$IX`GLNI@nC+b_Bez^cc2F4^qw`c+ zkNgqKlm0V+%l#hbue4t2cNrAD?NF4b%TSePsFpJ{D&t9|>a{ZRd!A=hM%oS${{8=k z`!roDBQIk=?cTH^M&-QKWu)>M$>mLtj@14U4>JAm;(oN9j)?jNqmg!76ZCgIN=U>V`tYb3Gy4i?m8|VKjl_{>oNYr zHV*v0>m&_#RX$hc8?NKUa2-E3xs?ynylHqu)=@|04Z9s+W7nyi@8hmBHGfI?yW41< zSQ3_X!;S9wcY1xyDx~!yncbUe`#J3?x&oxf2Fe# z`|UaVSH_>Z2GqyGWpcs&j8 z237iY^x_!K_79kxJvO_rR&o1w-n&I+ySybvEYF9 z>F^gSaXs~bw-s-WzKqZ3%MaKbeG>Id^dBtO=4eHP&`UFnW=Jk5)akGi^EQvvT_Ic*PY9FzLzX?SC$EtR%Y+C}Lo_b#l@<$1-HPV-M? z|K&k%4IiLX=35@lyJXzm%KpNGsX8Cps`IFJygv7RqKndErGu1DZ!Kps`!_s!;L^I} zmIF)OAvkWY_9VOjddEJ-=h*ESz6GD#e>`xg$)ouPG2iLY;Tk?t>1d_nlulAQG z`D0%^+1G7L;)@9m+>i0PujhP)?Y|>$V?_2BH%5kH{4vpyu}ZY>=evzoeTFmZfZt*|Xk4rmX~TnNrqk!){3d?T$k?Dl3LhD}y%F)NiqP|Uw}Yx8)K7aIG(1M* z#^=eoG1c+gD6bCoVox=86#rOTDBQo2^@I;HEC zzOA&7?fp1!v*N8vw=3PD)YbKuJf)45wp7|qsT-z#)9&B}s;@;%as65KR_Hv0exCM~ zPiH$^6q9jrsit49bd}PzO4lh}uk>xDo0V==x?SlGrLOJ^=P4~zzpy~dZOndoak7y8 z{nmpE9onb<^58{mpB)Pp#biIUFiPtOZ*`G%`Jb?U623swEr`iDUlhFt*Tar29;EBz zBe=Zw(Q>9|7Pn+M@LWptI(#0vq_~~R)kSH$xXi!Hqp}}W9+mau^5~1$fAGmLF6%X& zqFrABxS_a<;x2JnkD1~9^0(+ei#u_7_aYs{&lTm-^YifJCzdDax^X;OB+~+=xNj1B z3)crLiwAP}d&TqfUMa?X(c)3j8NZ}?!>H(kJYN{b@n01$Wcp)qDO0a|Y4p|K(Y&}c zdIzVUpVt(hzw)}5aC~E=CzR9tu)pRniC&4%VMX2hN58~*DX!l|Kfv-jbg#%8i|Z}> zcdyL*7lt3)UG&&_pDOleo%b0L?RX6CqjaChd=73Q`#<9wO^hDFdYKq~2xyo@I z&IgFU(?-gBVGQHE1?X>Y#C96M?X)C%7(Sntv|SQCN$Emv*Co+0xb8*a-a!sL+I?X3 zfID%%-F;=W!;ysN=dCHlH}nyo(vs4ZN5B3SpIf^xQ9Un-KDibBFygb&FA{Bz&lyA? zMeTjueVL{!49j{>VOZ943d7Iwy3R7qzfAKl)BMXce|dBg%HtlgEpJjke$L>2)_O=q^v}3nR?@a2`cM(+ zt0GG43`b$Qv8b;>hZJ-F^`Kb$Z*g44x8k_0XBNk0JTH#RytFtj{=auz{D1Gb%>M?c z9~i{+nY{;Sz5&X2sKyUf{zEl>XgXf_4p+Xzm9MPp<2bANM=KrWK8yC=`OtBS$0^@& z%5Pj;p64f}1|8JyQ9}zSwGSW?c3OX2xY7dsFxWp1;l2@VOekUC*B^Pas78ohfUGj@p*qS;@)VtMB8fkYz^gqdxX#$KDE}d*OXD&wu8PyRw4vv!IE`!XBRv4;^Pl%z z%lz?Oj`)0BC-i!C$|w6u_Ue{T_Cn_wpSlL;QN7k``e9+&XImS82WnoI<@z8 zYVYfn?|PQ&oaB0ybF<2^S>@QQe79=)t!XU$OJj6C^SWN8u?@IhGqYDo{zId2e+B6e zRk$9E^d}4_+P}Zh5i2FUyp_-&+X;=e7TSFup(QU1{p;647vX&1=3bMzpFD*0koRf* zVj^QmP2_VOD|=0h$$oWVh~|@{8*SI|e}~HN>VDgH#XGcr?a+R=L;cSVw)5cyJG9+) zXuow6V*hSJ`iINsfzC+^e-C!V54al7H}u}2de2LU|H?~<|JtGL?Ixt%w`=*^b>7h~ zF#^Xe+!sq+iS4~_(_)pkOX5tl!v(#2r}0&YAMV{HaRR67lK2+OeFE`5O>jR0X(#Ll ze?mG;=>@oc|0?3c6^~Qe9QE{e?*YsgpO+F3ehKh>??H(#(as9{3{8-I?cHZk;+7=! zt1gLASgr$I62~$f&hh6YM>6eLP@ItY*&yaO9I^QME{S~PgCjwr1@7-1+NW6cHdXh> zyCkmu1=(xwbox_q-DYgV(aN_=Vl3lg)mv|+Q+2<%x0c%_@n@9(j6S^+w0_&TMel_A zV?8%ktl`BP-X$@g%blwG`jZm${PUYWlM*jFxR2dus_JECVjix?+}dYmg4W~r?lUnF zKLek)`c#F-e}m^K`V7f`4afVHeM%EF4}PZ4l32k;YLB;de{QbY!CXC0F<0$js;=Kx z#v9=}Bl^wwBRF2(-K~kGLfMH<==Vf#r{ZOX;m0xM>LM;D=zNNAIvDH23 zAM5ijKsn-#IDf-)(d@sTYFiq6<2@W7F#K#x|2w2|4!$&2j`K7;Uz6r{%LbZ<4vh81 z@siF}H+q`{<{rK z!{2r=8-F{(Z5X~37UJ(CoOe0rUBP)*Vcr=09qz^7?VRQtPP2p4fJ6LUhtk9x;*jT1 z=>`1n#{BP;Lz1-QkTx9BjzcEGb=Z)5rxyze}Pznh(>@%Qfz$+^{8i@#qumH7J&^Vz|CAViY5A(A;SMA8<7NZQ66 zp5pMMLoZ>-pwO%MJ2>2Ns5p3T1_In4$9JDO9D z;gsVz<%BS4Y*Lssa1H-X4U-Zr>jIbLnd*|R?qY7A zF}EH33m);rGqU&_^H~2L)i>YcR`4iqV~^_6ghNsu)up9Jb!p=f|KZ*~Sk~DbvVzmB zVxDW5=UV2uj>BK(@bw&C5bcP$j*b$av!ld+B>#JPoXTAhC#hD&NvgFR@;rxZ=YN00 z|K7o|kRX}e1j(G2V3`w?w{e2*`^5K4YFg&>&f6q>?#NUz0KjQBN$!G9)bno9K&UQSZE zZ*a)l9P&PgY)+D##rdyb`X2eO<8SZ$xAC`M{wDk#kpB_>9-aRw{tn9j0)GeRe}%t8 z^S{I2)AE19-{JXgf7Dfeyno{VvGyKdQdD{0_NnTgnT``A49pN_nC>BGkgPp|1Qi7_ zfQcSK1p!epA*elKLS-=v3fd!rps1J=t~~;)7}lJ1?OAlyHK!HhzW1s6^>_JtJ(r_0>Z((xYO1@$N>$}8;DwiVths_@>^3Olu?!nU8Nu*>aHVfUXt6?V@YP+^xiq+-L~r6yC+ zrlHhaQ1Jx3q+-@SrRMUAHe*Z86%{+-H5I3fqlG;x_vO84W7qBZHg;JrwXtjUmKVS0 z#kaP#`HgMuI&5xh*WrFI^RSmWxm_n(*x1h2+1$?7+0xFd)6TAEhxRt#slCnDw72=R zmznKl=6IP^US^G#$$FVv+uM0}d--3y{E$k!hYYW*wQK9eCs*2*Pph;opH*pF&U%?! zz05{0v$@i?v!&8*tB1X*TfM0{Z|Zh$>eJrT=PK=%e6iAQ$yY1wmVC3)d-p5tF`lp7 z4nL^e2|uo^XC1!sTKmpxZMWCjFJ5b=gI(5u4tCv!bg=6-yn|i0(H-oXq`ax)I@o1R z>|mF5KnJ_5L%jOaz4}La^=EsTIbLSImpR#M;W;n=qL-i2(JtkXj&>>2JKCij)zK~` z-O;YY?2dLRb2{3k%5>@sr+@oqFai6Na;ee`fa7fi8IK1jWIJ(O2 z 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 z