├── GifEditingStudio-sm.png ├── README.md ├── ScreenCapture.png └── TeamsPhoneScreenCaptureTool.ps1 /GifEditingStudio-sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamescussen/Teams-Phone-Screen-Capture-Tool/b3ea57d2f7fd271936f778e22276099a746ad1e7/GifEditingStudio-sm.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Teams Phone Screen Capture Tool 2 | 3 | Hello, this is a PowerShell based tool for easily screen capturing on a Microsoft Teams Phone device as either a single image or an animated GIF (that you can also edit and markup in the tool). You can read more about it and how to use it on my blog here: https://www.myteamslab.com/2020/10/teams-phone-screen-capture-tool.html 4 | 5 | ![Image](https://github.com/jamescussen/TeamsPhoneScreenCaptureTool/raw/main/ScreenCapture.png) 6 | 7 | ![Image](https://github.com/jamescussen/TeamsPhoneScreenCaptureTool/raw/main/GifEditingStudio-sm.png) 8 | 9 | **Updates:** 10 | 11 | Updated to 1.02 12 | - Fixed GIF Export Error on PowerShell 5 and lower 13 | 14 | Updated to 1.01: 15 | - Updated to support for non-Teams CCX and VVX phones 16 | - Support for PowerShell Version 7 17 | 18 | 19 | -------------------------------------------------------------------------------- /ScreenCapture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamescussen/Teams-Phone-Screen-Capture-Tool/b3ea57d2f7fd271936f778e22276099a746ad1e7/ScreenCapture.png -------------------------------------------------------------------------------- /TeamsPhoneScreenCaptureTool.ps1: -------------------------------------------------------------------------------- 1 | ######################################################################## 2 | # Name: Teams Phone Screen Capture Tool 3 | # Version: v1.0.2 (6/10/2022) 4 | # Original Release Date: 20/10/2020 5 | # Created By: James Cussen 6 | # Web Site: http://www.myteamslab.com 7 | # Notes: This is a PowerShell tool. To run the tool, open it from the PowerShell command line or right click on it and select "Run with PowerShell". 8 | # For more information on the requirements for setting up and using this tool please visit http://www.myteamslab.com. 9 | # 10 | # Copyright: Copyright (c) 2022, James Cussen (www.myteamslab.com) All rights reserved. 11 | # Licence: Redistribution and use of script, source and binary forms, with or without modification, are permitted provided that the following conditions are met: 12 | # 1) Redistributions of script code must retain the above copyright notice, this list of conditions and the following disclaimer. 13 | # 2) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 14 | # 3) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 15 | # 4) This license does not include any resale or commercial use of this software. 16 | # 5) Any portion of this software may not be reproduced, duplicated, copied, sold, resold, or otherwise exploited for any commercial purpose without express written consent of James Cussen. 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; LOSS OF GOODWILL OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 18 | # 19 | # Prerequisites: You need a Microsoft Teams Phone to connect to 20 | # Known Issues: Doesn't work with AudioCodes phones because at the time of making it they don't support web based access to screen images. 21 | # Release Notes: 22 | # 1.00 - Initial Release 23 | # 24 | # 1.01 - Poly Phone and PowerShell v7 Update 25 | # - Updated to support for non-Teams CCX and VVX phones 26 | # - Support for PowerShell Version 7 27 | # 28 | # 1.02 - Fixed GIF Export Error on PowerShell 5 and lower 29 | # 30 | ######################################################################### 31 | 32 | 33 | 34 | param ( 35 | [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] 36 | [ValidateNotNullOrEmpty()] 37 | [string] $IPAddress = "10.0.0.238", 38 | 39 | [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] 40 | [ValidateNotNullOrEmpty()] 41 | [string] $DeviceType = "Poly", 42 | 43 | 44 | [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] 45 | [ValidateNotNullOrEmpty()] 46 | [string] $Password = "12345" 47 | ) 48 | 49 | 50 | $theVersion = $PSVersionTable.PSVersion 51 | $MajorVersion = $theVersion.Major 52 | $MinorVersion = $theVersion.Minor 53 | 54 | $OS = [environment]::OSVersion 55 | if($OS -match "Windows") 56 | { 57 | Write-Host "This is a Windows Machine. CHECK PASSED!" -foreground "green" 58 | } 59 | else 60 | { 61 | Write-Host "This is not a Windows machine. You're in untested territory, good luck. If it doesn't work, try Windows." -foreground "Yellow" 62 | } 63 | 64 | $DotNetCoreCommands = $false 65 | Write-Host "" 66 | Write-Host "--------------------------------------------------------------" 67 | Write-Host "Powershell Version Check..." -foreground "yellow" 68 | Write-Host "Powershell Version ${MajorVersion}.${MinorVersion}" -foreground "yellow" 69 | if($MajorVersion -eq "1") 70 | { 71 | Write-Host "This machine only has Version 1 Powershell installed. This version of Powershell is not supported." -foreground "red" 72 | exit 73 | } 74 | elseif($MajorVersion -eq "2") 75 | { 76 | Write-Host "This machine has Version 2 Powershell installed. This version of Powershell is not supported." -foreground "red" 77 | exit 78 | } 79 | elseif($MajorVersion -eq "3") 80 | { 81 | Write-Host "This machine has version 3 Powershell installed. CHECK PASSED!" -foreground "green" 82 | } 83 | elseif($MajorVersion -eq "4") 84 | { 85 | Write-Host "This machine has version 4 Powershell installed. CHECK PASSED!" -foreground "green" 86 | } 87 | elseif($MajorVersion -eq "5") 88 | { 89 | Write-Host "This machine has version 5 Powershell installed. CHECK PASSED!" -foreground "green" 90 | } 91 | elseif($MajorVersion -eq "6") 92 | { 93 | Write-Host "ERROR: This machine has version 6 Powershell installed. It's recommended that you upgrade to a minimum of Version 7" -foreground "red" 94 | exit 95 | } 96 | elseif($MajorVersion -eq "7") 97 | { 98 | Write-Host "This machine has version 7 Powershell installed. CHECK PASSED!" -foreground "green" 99 | $DotNetCoreCommands = $true 100 | } 101 | else 102 | { 103 | Write-Host "This machine has version ${MajorVersion}.${MinorVersion} of Powershell installed. This tool in GUI mode is not supported with this version. Try command line mode instead." -foreground "red" 104 | exit 105 | } 106 | Write-Host "--------------------------------------------------------------" 107 | Write-Host "" 108 | 109 | if(!$DotNetCoreCommands) #PowerShell 7 doesn't like this using -SkipCertificateCheck instead 110 | { 111 | add-type @" 112 | using System.Net; 113 | using System.Security.Cryptography.X509Certificates; 114 | 115 | public class IDontCarePolicy : ICertificatePolicy { 116 | public IDontCarePolicy() {} 117 | public bool CheckValidationResult( 118 | ServicePoint sPoint, X509Certificate cert, 119 | WebRequest wRequest, int certProb) { 120 | return true; 121 | } 122 | } 123 | "@ 124 | [System.Net.ServicePointManager]::CertificatePolicy = new-object IDontCarePolicy 125 | } 126 | [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls12 127 | 128 | 129 | 130 | # Set up the form ============================================================ 131 | 132 | [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 133 | [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 134 | 135 | $objForm = New-Object System.Windows.Forms.Form 136 | $objForm.Text = "Teams Phone Screen Capture Tool 1.02" 137 | $objForm.Size = New-Object System.Drawing.Size(390,220) 138 | $objForm.MinimumSize = New-Object System.Drawing.Size(390,220) 139 | $objForm.MaximizeBox = $false 140 | $objForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle 141 | $objForm.StartPosition = "CenterScreen" 142 | $objForm.Res 143 | #MyTeamsLab Icon 144 | [byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59) 145 | $ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length) 146 | $objForm.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon()) 147 | $objForm.KeyPreview = $True 148 | $objForm.TabStop = $false 149 | 150 | 151 | $MyLinkLabel = New-Object System.Windows.Forms.LinkLabel 152 | $MyLinkLabel.Location = New-Object System.Drawing.Size(220,10) 153 | $MyLinkLabel.Size = New-Object System.Drawing.Size(135,15) 154 | $MyLinkLabel.DisabledLinkColor = [System.Drawing.Color]::Red 155 | $MyLinkLabel.VisitedLinkColor = [System.Drawing.Color]::Blue 156 | $MyLinkLabel.LinkBehavior = [System.Windows.Forms.LinkBehavior]::HoverUnderline 157 | $MyLinkLabel.LinkColor = [System.Drawing.Color]::Navy 158 | $MyLinkLabel.TabStop = $False 159 | $MyLinkLabel.Text = " www.myteamslab.com" 160 | $MyLinkLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right 161 | $MyLinkLabel.TextAlign = [System.Drawing.ContentAlignment]::BottomRight #TopRight 162 | $MyLinkLabel.add_click( 163 | { 164 | [system.Diagnostics.Process]::start("http://www.myteamslab.com") 165 | }) 166 | $objForm.Controls.Add($MyLinkLabel) 167 | 168 | 169 | $IPAddressLabel = New-Object System.Windows.Forms.Label 170 | $IPAddressLabel.Location = New-Object System.Drawing.Size(50,40) 171 | $IPAddressLabel.Size = New-Object System.Drawing.Size(80,15) 172 | $IPAddressLabel.Text = "IP Address:" 173 | $IPAddressLabel.TabStop = $false 174 | $IPAddressLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 175 | $objForm.Controls.Add($IPAddressLabel) 176 | 177 | 178 | #IPAddressTextBox ============================================================ 179 | $IPAddressTextBox = new-object System.Windows.Forms.textbox 180 | $IPAddressTextBox.location = new-object system.drawing.size(130,40) 181 | $IPAddressTextBox.size= new-object system.drawing.size(150,23) 182 | $IPAddressTextBox.text = $IPAddress 183 | $IPAddressTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 184 | $IPAddressTextBox.tabIndex = 1 185 | $objform.controls.add($IPAddressTextBox) 186 | 187 | 188 | $BrandLabel = New-Object System.Windows.Forms.Label 189 | $BrandLabel.Location = New-Object System.Drawing.Size(50,70) 190 | $BrandLabel.Size = New-Object System.Drawing.Size(80,15) 191 | $BrandLabel.Text = "Phone Type:" 192 | $BrandLabel.TabStop = $false 193 | $BrandLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 194 | $objForm.Controls.Add($BrandLabel) 195 | 196 | $BrandDropDownBox = New-Object System.Windows.Forms.ComboBox 197 | $BrandDropDownBox.Location = New-Object System.Drawing.Size(130,70) 198 | $BrandDropDownBox.Size = New-Object System.Drawing.Size(150,15) 199 | $BrandDropDownBox.DropDownHeight = 100 200 | $BrandDropDownBox.tabIndex = 2 201 | $BrandDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 202 | $BrandDropDownBox.DropDownStyle = "DropDownList" 203 | 204 | [void] $BrandDropDownBox.Items.Add("Poly") 205 | [void] $BrandDropDownBox.Items.Add("Yealink") 206 | #[void] $BrandDropDownBox.Items.Add("AudioCodes") 207 | 208 | $objForm.Controls.Add($BrandDropDownBox) 209 | 210 | $DeviceType = $DeviceType.toLower() 211 | if($DeviceType -eq "yealink") 212 | { 213 | $BrandDropDownBox.SelectedItem = "Yealink" 214 | } 215 | else 216 | { 217 | $BrandDropDownBox.SelectedItem = "Poly" 218 | } 219 | 220 | 221 | $BrandDropDownBox.Add_SelectedIndexChanged({ 222 | 223 | if($BrandDropDownBox.SelectedItem -eq "Poly") 224 | { 225 | $PasswordTextBox.text = "456" 226 | } 227 | elseif($BrandDropDownBox.SelectedItem -eq "Yealink") 228 | { 229 | $PasswordTextBox.text = "admin" 230 | } 231 | }) 232 | 233 | #PasswordLabel ============================================================ 234 | $PasswordLabel = New-Object System.Windows.Forms.Label 235 | $PasswordLabel.Location = New-Object System.Drawing.Size(50,100) 236 | $PasswordLabel.Size = New-Object System.Drawing.Size(80,15) 237 | $PasswordLabel.Text = "Password:" 238 | $PasswordLabel.TabStop = $false 239 | $PasswordLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 240 | $objForm.Controls.Add($PasswordLabel) 241 | 242 | 243 | #PasswordTextBox ============================================================ 244 | $PasswordTextBox = new-object System.Windows.Forms.textbox 245 | $PasswordTextBox.location = new-object system.drawing.size(130,100) 246 | $PasswordTextBox.size = new-object system.drawing.size(150,23) 247 | $PasswordTextBox.text = $Password 248 | $PasswordTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 249 | $PasswordTextBox.tabIndex = 3 250 | $objform.controls.add($PasswordTextBox) 251 | 252 | 253 | # ScreenButton ============================================================ 254 | $ScreenButton = New-Object System.Windows.Forms.Button 255 | $ScreenButton.Location = New-Object System.Drawing.Size(120,135) 256 | $ScreenButton.Size = New-Object System.Drawing.Size(130,23) 257 | $ScreenButton.Text = "Show Screen" 258 | $ScreenButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 259 | $ScreenButton.Add_Click( 260 | { 261 | 262 | [System.Windows.Forms.Application]::DoEvents() 263 | 264 | $theIPAddress = $null 265 | $theIPAddress = $IPAddressTextBox.Text 266 | 267 | if($theIPAddress -ne $null) 268 | { 269 | $theBrand = $BrandDropDownBox.SelectedItem 270 | $thePassword = $PasswordTextBox.text 271 | Write-Host "INFO: Type Selected: $theBrand" -foreground yellow 272 | $Script:ImageArrayResult = $null 273 | ShowScreen -IPAddress $theIPAddress -Brand $theBrand -Password $thePassword 274 | if($Script:ImageArrayResult -ne $null) 275 | { 276 | EditGifDialog -ImageArray $Script:ImageArrayResult 277 | } 278 | 279 | } 280 | 281 | }) 282 | $objForm.Controls.Add($ScreenButton) 283 | 284 | 285 | $Script:ImageArrayResult = $null 286 | function ShowScreen([string]$IPAddress, [string] $Brand, [string] $Password) 287 | { 288 | 289 | $SyncHash = [hashtable]::Synchronized(@{}) 290 | $SyncHash.boolWhile = $true 291 | $SyncHash.IPAddress = $IPAddress 292 | $SyncHash.Brand = $Brand 293 | $SyncHash.Port = "443" 294 | $SyncHash.Image = $null 295 | $SyncHash.DotNetCoreCommands = $DotNetCoreCommands 296 | if($SyncHash.Brand -eq "Poly") 297 | { 298 | $SyncHash.HTTPUsername = "Polycom" 299 | $SyncHash.HTTPPassword = $Password 300 | } 301 | elseif($SyncHash.Brand -eq "Yealink") 302 | { 303 | $SyncHash.HTTPUsername = "admin" 304 | $SyncHash.HTTPPassword = $Password 305 | } 306 | 307 | $SyncHash.UseHTTPS = $true 308 | 309 | $SyncHash.screenConnected = $false 310 | 311 | [byte[]]$SyncHash.connectingImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 46, 15, 20, 50, 14, 22, 56, 13, 24, 52, 15, 18, 62, 12, 17, 44, 18, 15, 62, 12, 22, 61, 12, 27, 48, 17, 17, 57, 14, 20, 65, 13, 13, 69, 11, 22, 44, 19, 21, 43, 19, 26, 72, 11, 17, 47, 18, 26, 55, 17, 14, 60, 16, 16, 50, 19, 23, 40, 22, 30, 84, 9, 23, 36, 25, 16, 34, 25, 26, 43, 23, 23, 92, 8, 22, 30, 27, 26, 29, 27, 30, 36, 25, 35, 40, 25, 23, 39, 25, 27, 24, 29, 35, 38, 25, 32, 27, 29, 26, 84, 12, 19, 26, 29, 31, 43, 24, 28, 68, 17, 22, 33, 28, 23, 34, 27, 32, 33, 27, 36, 37, 27, 24, 32, 29, 28, 31, 29, 32, 30, 30, 24, 77, 15, 30, 36, 28, 28, 33, 29, 28, 26, 32, 24, 25, 32, 28, 29, 31, 28, 30, 30, 37, 28, 31, 33, 97, 11, 19, 32, 30, 33, 23, 33, 33, 36, 29, 34, 30, 32, 29, 80, 17, 23, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 31, 33, 30, 78, 19, 27, 33, 33, 27, 40, 31, 31, 90, 16, 27, 96, 14, 32, 45, 31, 33, 34, 35, 33, 92, 18, 24, 113, 13, 34, 84, 24, 32, 106, 18, 31, 108, 18, 37, 38, 40, 37, 117, 17, 30, 117, 18, 37, 97, 25, 39, 99, 25, 34, 105, 23, 36, 42, 44, 41, 133, 19, 35, 115, 25, 43, 121, 23, 47,45, 47, 45, 131, 23, 45, 133, 23, 41, 111, 30, 42, 128, 29, 40, 109, 35, 42, 51, 53, 50, 122, 32, 48, 217, 3, 50, 151, 25, 45, 130, 32, 50, 143, 28, 52, 217, 5, 61, 160, 24, 49, 217, 6, 56, 55, 57, 54, 219, 8, 51, 160, 27, 45, 155, 28, 52,220, 11, 46, 210, 15, 47, 209, 15, 52, 135, 38, 55, 142, 36, 53, 220, 12, 52, 60, 62, 59, 137, 39, 51, 176, 27, 53, 219, 13, 62, 210, 17, 58, 220, 14, 57, 143, 40, 50, 203, 23, 44, 222, 17, 53, 212, 21, 49, 202, 24, 55, 212, 21, 54, 213, 22, 43, 211, 21, 64, 204, 25, 50, 169, 35, 61, 176, 33, 59, 155, 40, 55, 185, 31, 52, 169, 36, 56, 171, 36, 52, 212, 23, 60, 195, 29, 52, 203, 26, 61, 203, 26, 66, 214, 24, 50, 194, 29, 67, 186, 32, 63, 223, 21, 59, 164, 40, 60, 187, 33, 59,214, 25, 55, 186, 33, 69, 196, 31, 58, 195, 31, 63, 215, 26, 50, 165, 41, 66, 179, 37, 67, 69, 71, 69, 158, 44, 65, 206, 30, 57, 182, 38, 57, 217, 28, 51, 153, 47, 64, 182, 39, 63, 191, 37, 56, 173, 43, 65, 175, 43, 60, 191, 38, 62, 190, 38, 67, 165, 49, 57, 74, 76, 73, 202, 40, 68, 217, 36, 71, 79, 81, 78, 83, 85, 83, 88, 90, 87, 200, 56, 82, 200, 57, 88, 177, 65, 82, 204, 57, 78, 187, 62, 83, 94, 96, 93, 193, 66, 89, 102, 104, 101, 207, 83, 106, 203, 85, 99, 111, 113, 110,209, 84, 101, 198, 88, 97, 192, 89, 109, 204, 87, 106, 197, 90, 104, 175, 102, 112, 119, 121, 118, 124, 126, 123, 130, 132, 129, 135, 137, 134, 240, 105, 129, 222, 113, 133, 225, 113, 126, 139, 141, 138, 234, 114, 130, 235, 114, 139, 230, 117, 130, 225, 120, 136, 143, 145, 142, 231, 120, 140, 217, 125, 138, 207, 129, 146, 148, 150, 147, 197, 136, 146, 156, 158, 155, 163, 165, 162, 255, 137, 158, 255, 144, 169, 170, 172, 169, 255, 149, 171, 174, 177, 173, 245, 158, 164, 255, 155, 166, 253, 156, 174, 246, 160, 174, 179, 182, 178, 239, 167, 174, 187, 189, 186, 193, 195, 192, 198, 200, 197, 202, 205, 201, 255, 190, 208, 255, 191, 201, 206, 209, 205, 254, 198, 205, 210, 213, 209, 255, 199, 212, 214, 216, 213, 218, 221, 217, 255, 211, 224, 222, 224, 221, 255, 215, 224, 255, 219, 220, 225, 228, 224, 255, 224, 229, 230, 232, 229, 234, 237, 233, 255, 230, 241, 237, 240, 236, 255, 236, 239, 255, 236, 245, 254, 238, 253, 241, 244, 240, 255, 242, 236, 255, 242, 243, 254, 244, 250, 245, 248, 244, 250, 247, 252, 249, 251, 248, 255, 250, 242, 255, 250, 248, 255, 252, 251, 255, 252, 255, 251, 254, 250, 250, 254, 255, 254, 254, 245, 253, 255, 252, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116,101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 99, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 186, 112, 33, 16, 134, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 24, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57, 147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 81, 133, 10, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3,47, 84, 76, 184, 177, 99, 177, 103, 113, 8, 4, 193, 83, 34, 221, 131, 56, 36, 31, 100, 60, 16, 132, 231, 129, 53, 106, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 198, 17, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 119, 140, 214, 174, 97, 255, 45, 232, 153, 114, 12, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190,188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 129, 128, 145, 103, 48, 80, 54, 81, 11, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 46, 20, 151, 218, 132, 32, 56, 152, 22, 67, 192, 21, 52, 131, 131, 26, 209, 246, 87, 113, 34, 138, 168, 130, 9, 129, 89, 116, 28,106, 34, 248, 165, 130, 6, 26, 236, 48, 17, 8, 62, 200, 230, 163, 8, 34, 204, 160, 228, 111, 2, 225, 48, 209, 107, 158,37, 233, 3, 14, 21, 34, 133, 163, 143, 44, 213, 72, 160, 11, 38, 224, 56, 131, 13, 58, 254, 70, 164, 15, 51, 104, 80, 195, 14, 59, 36, 39, 89, 6, 40, 116, 208, 193, 5, 23, 48, 32, 129, 4, 12, 212, 9, 231, 8, 28, 116, 208, 66, 9, 37, 122, 134, 67, 17, 59, 168, 32, 2, 8, 61, 76, 233, 130, 143, 88, 106, 9, 225, 74, 74, 190, 232, 66, 11, 65, 252, 134, 195, 14, 55, 152, 80, 34, 12, 152, 246, 0, 130, 5, 12, 12, 64, 128, 3, 20, 132, 64, 3, 13, 73, 96, 128, 65, 8, 20, 56, 16, 1, 2, 23, 148, 176, 194, 11, 254, 56, 72, 232, 2, 144, 51, 100, 70, 99, 69, 74, 118, 169, 160, 162, 2, 42, 233, 215, 7, 24, 254, 150, 1, 164, 46, 148, 16, 4, 7, 157, 146, 128, 196, 19, 83, 188, 145, 201, 31, 160, 116, 210, 73, 32, 210, 46, 178, 8, 27, 111, 96, 225, 196, 15, 9, 12, 192, 0, 156, 122, 30, 10, 130, 6, 147, 173, 240, 42, 166, 51, 116, 9, 35, 175, 3, 190, 120, 163, 10, 51, 88, 88, 44, 10, 12, 36, 64, 65, 19, 103, 248, 1, 9, 36, 143, 60, 66, 200, 191, 120, 88, 98, 9, 31, 120, 224, 65, 72, 191, 144, 32, 146, 72, 31, 96, 76, 33, 4, 9, 3, 112, 192, 167, 11, 53, 40, 41, 153, 185, 43, 196, 144,46, 142, 236, 214, 56, 67, 154, 241, 174, 128, 66, 1, 16, 44, 240, 196, 26, 146, 36, 82, 200, 32, 99, 180, 225, 114, 27, 141, 196, 124, 7, 26, 101, 148, 113, 200, 24, 99, 204, 49, 134, 34, 113, 236, 33, 138, 35, 146, 88, 1, 197, 15, 16, 0,48, 130, 11, 72, 206, 64, 145, 185, 2, 37, 218, 177, 127, 126, 81, 228, 82, 153, 34, 20, 81, 66, 1, 33, 92, 33, 8, 35, 252, 226, 49, 72, 35, 56, 151, 209, 197, 33, 119, 148, 125, 136, 29, 46, 147, 109, 246, 29, 99, 52, 162, 70, 193, 143, 120, 18, 200, 21, 33, 36, 208, 2, 14, 47, 234, 250, 244, 254, 131, 81, 35, 69, 81, 133, 65, 116, 0, 64, 4, 90, 252, 225, 9, 31, 135, 196, 172, 56, 216, 99, 28, 226, 120, 226, 135, 212, 252, 248, 228, 143, 183, 129, 118, 35, 131, 64, 178, 200, 20, 36, 0, 208, 65, 165, 62, 238, 186, 55, 127, 26, 168, 80, 195, 74, 146, 149, 192, 192, 2, 74, 156, 161, 201, 35, 120, 152, 77, 57, 206, 180, 151, 129, 243, 226, 49, 59, 110, 118, 25, 47, 195, 204, 71, 33, 159, 244, 209, 196, 2, 12, 224, 32, 130, 6, 55, 220, 144, 129, 11, 154, 141, 206, 223, 12, 199, 87, 140, 131, 5, 23, 36, 144, 67, 22, 157, 24, 162, 134, 26, 141, 76, 94, 243, 247, 142, 211, 126, 187, 226, 145, 219, 76, 57, 239, 109, 220, 161, 179, 26, 133, 104, 194, 6, 18, 158, 155, 80, 169, 14, 37, 58, 223, 159, 103, 74, 218, 0, 2, 17, 4, 48, 33, 200, 38, 120, 72, 131, 34, 20, 97, 59, 156, 61, 174, 102, 104, 64, 67, 27, 10, 72, 62, 244, 185, 204, 102, 184, 19, 95, 204, 222, 246, 8, 78, 80, 97, 1, 23, 192, 129, 160, 124, 160, 33, 251, 229, 199, 56, 69, 112, 193, 8, 22, 144, 5, 79, 88, 66, 13, 135, 120, 160, 206, 104, 119, 192, 4, 46, 208, 118, 185, 115, 224, 203, 32, 24, 193, 220, 149, 173, 17, 150, 240, 3, 27, 8, 112, 129, 18, 37, 201, 131, 254, 250, 57, 77, 9, 46, 176, 128, 51, 64, 2, 15, 221, 211, 3, 26, 236, 224, 182, 49, 192, 112, 113, 141, 43, 159, 249, 190, 71, 197, 222, 221, 110, 16, 95, 195, 89, 218, 238, 80, 7, 75, 48, 130, 13, 14, 184, 64, 147, 128, 152, 159, 11, 9, 206, 1, 108, 16, 133, 204, 34, 215, 134, 46, 144, 47, 113, 109, 195, 93, 247, 164, 104, 62, 199, 117, 207, 138, 184, 179, 92, 2, 239, 16, 137, 70, 224, 193, 19, 127, 200, 1, 3, 74, 80, 36, 50, 226, 71, 3, 31, 0, 64, 14, 22, 177, 9, 196, 145, 45, 133, 99, 232, 194, 13, 187, 231, 64, 155, 221, 1, 138, 45, 163, 97, 35, 118, 39, 185, 196, 53, 34, 13, 119, 224,221, 18, 219, 112, 136, 52, 184, 77, 20, 146, 192, 128, 4, 68, 103, 200, 242, 248, 102, 6, 49, 8, 2, 0, 132, 240, 135, 71, 168, 97, 119, 181, 35, 91, 238, 202, 71, 51, 93, 42, 78, 139, 141, 147, 153, 236, 192, 183, 198, 222, 189, 44, 133, 153, 59, 3, 5, 16, 208, 129, 173, 176, 178, 149, 216, 185, 145, 174, 50, 80, 132, 223, 28, 74, 105, 28, 112, 192, 34, 68, 129, 196, 237, 241, 110, 151, 139, 83, 219, 29, 60, 185, 75, 244, 101, 178, 123, 107, 147, 98, 28, 121, 87, 134, 6, 190, 204, 143, 155, 48, 3, 13, 0, 208, 39, 14, 74, 72, 93, 235, 254, 130, 230, 117, 242, 166, 171, 88, 89, 68, 7, 63, 226,128, 2, 232, 0, 137, 9, 114, 207, 101, 114, 52, 96, 217, 198, 25, 199, 201, 1, 211, 113, 157, 60, 32, 66, 27, 145, 54, 183, 113, 143, 119, 104, 43, 195, 219, 8, 225, 5, 7, 140, 128, 154, 198, 185, 39, 188, 96, 201, 52, 125, 90, 7, 81, 127,241, 65, 166, 50, 96, 129, 32, 36, 224, 10, 158, 144, 67, 219, 184, 151, 66, 82, 206, 241, 118, 45, 163, 153, 57, 27, 183, 80, 220, 157, 141, 148, 143, 3, 219, 49, 237, 232, 182, 220, 245, 238, 14, 124, 240, 98, 19, 12, 208, 129, 113, 137,166, 7, 72, 241, 11, 73, 51, 102, 82, 234, 28, 74, 170, 21, 233, 129, 13, 244, 215, 1, 9, 12, 33, 17, 114, 80, 195, 28,98, 22, 201, 7, 62, 14, 167, 198, 68, 91, 250, 22, 186, 61, 197, 161, 15, 142, 113, 180, 220, 2, 229, 72, 201, 5, 46, 176, 108, 132, 224, 132, 18, 36, 144, 129, 27, 252, 5, 170, 49, 240, 209, 12, 74, 90, 85, 233, 92, 117, 73, 49, 192, 212,86, 123, 112, 1, 109, 22, 34, 103, 106, 192, 89, 23, 94, 216, 201, 39, 78, 180, 101, 104, 91, 168, 39, 29, 8, 215, 241,153, 149, 174, 141, 168, 217, 216, 30, 216, 136, 66, 44, 98, 1, 35, 184, 129, 6, 112, 112, 174, 23, 157, 192, 4, 175, 42, 254, 44, 117, 176, 74, 17, 28, 216, 160, 76, 56, 24, 192, 21, 32, 49, 136, 177, 70, 182, 11, 117, 172, 108, 1, 131, 41, 212, 204, 142, 243, 102, 57, 181, 41, 227, 60, 11, 212, 114, 218, 241, 146, 155, 180, 220, 229, 32, 241, 5, 3, 124, 64, 66, 175, 122, 1, 12, 164, 25, 131, 23, 200, 54, 58, 22, 161, 45, 69, 242, 198, 0, 33, 124, 66, 13, 131, 104, 171, 29,106, 182, 208, 154, 197, 176, 13, 113, 92, 110, 27, 18, 168, 7, 59, 166, 16, 13, 208, 93, 110, 92, 23, 88, 185, 25, 30,162, 173, 141, 152, 236, 203, 240, 48, 137, 33, 92, 160, 66, 64, 120, 129, 119, 221, 245, 93, 233, 132, 23, 94, 126, 187, 234, 8, 217, 128, 135, 54, 108, 239, 162, 118, 88, 104, 40, 219, 25, 218, 119, 46, 55, 133, 101, 64, 131, 30, 198, 137, 62, 14, 203, 151, 195, 21, 173, 89, 239, 32, 120, 201, 178, 189, 12, 13, 165, 61, 67, 2, 248, 212, 193, 6, 87, 167, 81, 171, 49, 129, 0, 154, 240, 9, 62, 0, 85, 197, 101, 208, 172, 123, 41, 186, 64, 180, 193, 149, 157, 143, 188, 131, 90,221, 216, 8, 2, 130, 248, 101, 151, 220, 30, 27, 103, 168, 73, 242, 181, 81, 13, 159, 112, 2, 3, 50, 226, 21, 196, 218,120, 58, 102, 100, 193, 25, 10, 113, 71, 255, 14, 19, 197, 46, 211, 131, 254, 229, 120, 122, 135, 177, 69, 185, 205, 11, 188, 29, 31, 184, 7, 92, 250, 90, 52, 134, 84, 236, 100, 30, 213, 247, 8, 54, 44, 160, 3, 61, 50, 65, 12, 152, 134, 227, 47, 47, 39, 159, 191, 105, 1, 3, 158, 112, 222, 232, 30, 243, 141, 194, 37, 91, 102, 83, 200, 68, 238, 13, 34, 96, 220, 211, 25, 230, 54, 17, 211, 77, 62, 114, 14, 119, 0, 112, 56, 43, 25, 206, 196, 225, 129, 17, 76, 0, 128, 6, 5, 189, 130, 18, 104, 204, 203, 134, 190, 13, 103, 2, 211, 1, 2, 188, 161, 160, 199, 141, 104, 3, 193, 247, 200, 67, 116, 97, 14,107, 69, 111, 33, 16, 209, 9, 102, 140, 98, 123, 99, 24, 196, 35, 192, 225, 139, 215, 89, 34, 13, 165, 228, 93, 124, 71, 237, 95, 220, 165, 33, 169, 98, 48, 0, 151, 44, 181, 130, 241, 194, 58, 214, 165, 9, 12, 211, 112, 132, 131, 11, 24, 97, 17, 143, 216, 100, 59, 185, 23, 90, 77, 150, 143, 114, 161, 76, 159, 205, 6, 81, 8, 71, 208, 194, 28, 237, 80, 5, 89,199, 192, 136, 118, 196, 195, 26, 169, 128, 4, 247, 198, 144, 6, 151, 229, 23, 210, 213, 86, 28, 40, 249, 141, 4, 14, 168, 107, 42, 136, 6, 247, 99, 196, 237, 221, 46, 197, 0, 0, 48, 117, 228, 76, 99, 166, 231, 119, 207, 17, 162, 160, 30, 39, 31, 254, 30, 49, 137, 98, 184, 227, 30, 241, 56, 133, 26, 218, 25, 6, 77, 180, 163, 31, 242, 40, 199, 43, 84, 54, 112, 245, 145, 115, 151, 16, 213, 179, 219, 28, 103, 135, 71, 96, 129, 153, 78, 43, 139, 196, 29, 227, 151, 236, 110, 87, 5, 32, 72, 128, 24, 6, 17, 185, 105, 59, 113, 138, 80, 222, 29, 219, 186, 48, 54, 53, 108, 194, 22, 220, 112, 7, 62, 252, 33, 143, 83, 80, 116, 12, 97, 72, 132, 59, 250, 129, 143, 121, 184, 131, 26, 125, 120, 4, 31, 208, 73, 197, 160, 150, 154, 168, 78, 180, 3, 30, 216, 64, 130, 14, 204, 64, 6, 50, 80, 1, 135, 134, 78, 24, 189, 155, 203, 34, 50, 48, 1, 10, 144, 192, 136, 57, 40, 48, 190, 78, 228, 239, 148, 97, 102, 54, 156, 205, 1, 189, 132, 96, 132, 48, 220, 33, 143, 173, 115, 29, 21, 44, 43, 67, 24, 28, 225, 14, 127, 248, 3, 31, 101, 31, 71, 45, 46, 65, 8, 104, 151, 216, 237, 13, 180, 99, 36, 121, 103, 137, 62, 24, 225, 2, 183, 141, 154, 208, 249, 62, 154, 208, 200, 160, 5, 8, 72, 2, 36, 50, 57, 134, 11, 119,152, 191, 57, 99, 225, 228, 112, 248, 137, 90, 128, 99, 30, 243, 208, 199, 214, 251, 209, 14, 84, 236, 97, 147, 113, 72, 68, 59, 60, 207, 15, 125, 212, 195, 236, 211, 8, 4, 30, 124, 254, 221, 70, 181, 17, 21, 108, 145, 182, 157, 26, 30, 33, 5, 9, 192, 96, 73, 46, 200, 0, 237, 113, 163, 164, 228, 201, 160, 3, 17, 200, 194, 35, 88, 24, 234, 139, 62, 176, 12, 43, 28, 67, 188, 47, 137, 135, 71, 104, 98, 24, 235, 48, 15, 248, 160, 15, 250, 176, 15, 251, 0, 115, 206, 151, 51, 141,32, 125, 254, 176, 15, 213, 87, 15, 214, 55, 15, 220, 32, 11, 176, 115, 75, 233, 147, 66, 227, 68, 86, 91, 36, 57, 138,99, 9, 98, 144, 0, 26, 82, 34, 205, 179, 126, 163, 209, 126, 56, 210, 1, 14, 64, 7, 243, 103, 64, 250, 5, 100, 166, 212, 86, 81, 118, 106, 182, 224, 13, 149, 7, 122, 91, 199, 15, 254, 192, 124, 167, 160, 127, 151, 36, 125, 3, 72, 128, 158,151, 131, 248, 208, 14, 198, 48, 9, 100, 182, 51, 167, 87, 102, 49, 51, 89, 139, 51, 8, 129, 64, 2, 234, 119, 17, 199, 65, 130, 165, 225, 43, 126, 113, 1, 33, 0, 10, 100, 150, 54, 55, 3, 95, 44, 132, 78, 25, 72, 48, 144, 48, 9, 195, 160, 117, 158, 103, 15, 250, 224, 15, 202, 39, 15, 242, 96, 12, 143, 96, 51, 138, 48, 126, 195, 80, 14, 200, 183, 117, 246, 96, 15, 251, 160, 134, 243, 176, 13, 173, 0, 9, 133, 32, 86, 119, 0, 109, 158, 228, 50, 97, 3, 51, 96, 19, 51, 254, 154, 128, 4, 22, 208, 60, 53, 70, 133, 164, 161, 2, 18, 64, 3, 157, 128, 68, 6, 55, 101, 180, 179, 70, 75, 116, 7, 163, 192, 8, 181, 192, 13, 108, 136, 15, 121, 72, 128, 252, 128, 15, 238, 0, 14, 178, 208, 72, 135, 120, 109, 132, 160, 9, 220, 240, 114, 121, 216, 128, 213, 135, 124, 238, 80, 132, 134, 32, 7, 95, 211, 83, 132, 24, 117, 186, 195, 8, 78, 208, 1, 94, 209, 136, 142, 72, 116, 18, 192, 4, 158, 128, 68, 188, 147, 107, 94, 104, 81, 119, 176, 64, 236, 227, 7, 101, 88, 121, 65, 168, 135, 216, 167, 125, 151, 116, 59, 138, 16, 73, 57, 100, 12, 53, 232, 128, 213, 151, 134, 164, 200, 135, 52, 39, 51, 68, 150, 73, 146, 68, 98, 93, 0, 9, 78, 208, 0, 83, 49, 130, 193, 56, 26, 32, 48, 0, 82, 0, 59, 171, 7, 119, 78, 247,120, 144, 48, 131, 53, 168, 134, 250, 192, 15, 177, 184, 14, 175, 192, 8, 120, 64, 83, 108, 214, 5, 138, 128, 67, 155, 32, 11, 158, 216, 15, 14, 40, 138, 159, 215, 14, 179, 152, 8, 123, 144, 73, 59, 21, 100, 143, 228, 50, 144, 48, 5, 1, 208, 2, 84, 197, 142, 237, 88, 24, 157, 145, 0, 94, 16, 144, 145, 52, 54, 158, 52, 109, 110, 131, 7, 137, 80, 12, 237, 0, 122, 65, 248, 131, 215, 231, 13, 156, 240, 254, 8, 97, 213, 56, 81, 228, 133, 138, 48, 7, 237, 132, 7, 130, 16, 13, 53, 104, 121, 159, 7, 122, 243, 48, 13, 167, 176, 50, 29, 134, 98, 227, 228, 98, 118, 80, 8, 92, 32, 0, 29, 144, 49, 32, 16,43, 29, 217, 24, 127, 3, 85, 74, 103, 9, 224, 167, 92, 115, 100, 54, 111, 115, 10, 158, 184, 117, 4, 248, 138, 160, 231, 14, 189, 240, 9, 21, 8, 73, 49, 35, 98, 165, 118, 7, 167, 246, 10, 229, 0, 141, 158, 71, 128, 214, 23, 115, 193, 0, 144, 1, 54, 89, 32, 118, 67, 243, 85, 8, 107, 192, 148, 43, 80, 36, 192, 24, 149, 109, 177, 17, 48, 64, 149, 75, 199, 113,230, 99, 64, 135, 160, 7, 245, 53, 126, 205, 32, 15, 121, 216, 141, 202, 135, 15, 242, 224, 13, 169, 0, 8, 115, 22, 51,30, 134, 122, 115, 52, 86, 143, 208, 7, 212, 0, 141, 112, 89, 15, 91, 135, 15, 235, 192, 9, 132, 16, 90, 106, 166, 64, 150, 20, 90, 104, 160, 151, 6, 192, 1, 43, 32, 25, 127, 9, 152, 107, 33, 152, 132, 249, 53, 31, 135, 92, 53, 51, 98, 119, 96, 9, 144, 240, 12, 102, 8, 153, 102, 103, 12, 130, 64, 8, 107, 247, 75, 104, 211, 123, 134, 57, 124, 23, 86, 8, 41, 217, 150, 248, 128, 131, 158, 87, 118, 235, 32, 9, 2, 23, 57, 46, 100, 62, 29, 254, 230, 154, 176, 41, 155, 180, 137, 23, 83, 129, 41, 49, 160, 116, 233, 181, 75, 181, 83, 6, 188, 233, 155, 205, 48, 15, 254, 80, 15, 16, 24, 129, 201, 144, 9, 182, 244, 73, 250, 53, 86, 110, 133, 6, 103, 5, 96, 106, 0, 9, 146, 112, 11, 236, 201, 143, 252, 88, 118, 238, 80, 9, 233, 54, 78, 217, 105, 95, 109, 240, 8, 107, 240, 154, 221, 86, 63, 223, 105, 23, 46, 129, 41, 73, 39, 6, 39, 68, 62, 81, 132, 64, 237, 36, 7, 144, 208, 152, 250, 8, 129, 122, 120, 12, 126, 112, 66, 142, 211, 6, 43, 132, 103, 52, 116, 59, 227, 148, 6, 131, 160, 9, 199, 128, 14, 55, 136, 131, 222, 216, 14, 4, 250, 73, 24, 72, 76, 221, 163, 160, 12, 186, 18, 179, 249, 160, 95, 17, 161, 21, 50, 0, 94, 80, 161, 224, 84, 62, 113, 198, 62, 207, 32, 15, 247, 240, 121, 162, 184, 15, 101, 183, 13, 168, 112, 68, 40, 244, 68, 183, 196, 59, 228, 132, 51, 129, 56, 114, 147, 48, 13, 148, 199, 146, 250, 40, 153, 235, 208, 7, 72, 84, 84, 237, 70, 67, 135, 240, 8, 95, 112, 0, 77, 57, 123, 60, 26, 22, 59, 241, 142, 33, 201, 61, 52, 165, 54, 53, 67, 59, 151, 198, 149, 160, 153, 134, 159, 119, 125, 98, 57, 9, 150, 16, 136, 203, 200, 97, 67, 134, 153, 11, 196, 7, 254, 140, 96, 11, 116, 8, 129, 150, 199, 15, 251, 160, 15, 243, 48, 14, 188, 80, 160, 19, 116, 158, 185, 227, 9, 103, 154, 166, 215, 180, 166, 119, 161, 36, 239, 24, 143, 86, 121, 81, 114, 58, 62, 110, 243, 8, 129, 160, 141, 54, 216, 128, 106, 40, 153, 238, 48, 13, 171, 160, 118, 203, 136, 6, 109, 3, 170, 161, 213, 8, 143, 224, 7, 211, 176, 14, 150, 135, 167, 160, 87, 15, 103, 183, 170, 209, 53, 92, 181, 51, 169, 92, 144, 145, 126, 131, 169, 110, 1, 75, 19, 225, 35, 145, 120, 9, 207, 150, 59, 110, 149, 140, 49, 115, 105, 158, 240, 10, 220, 16, 15, 73, 250, 150, 145, 57, 15, 229,64, 11, 202, 26, 98, 152, 51, 62, 208, 38, 171, 51, 136, 124, 251, 24, 141, 97, 57, 12, 137, 96, 149, 64, 101, 86, 52, 217, 54, 5, 199, 8, 79, 208, 0, 27, 32, 3, 26, 224, 2, 42, 69, 172, 107, 97, 3, 23, 129, 172, 70, 48, 137, 55, 199, 113,164, 85, 84, 189, 39, 170, 209, 16, 15, 165, 90, 128, 158, 39, 15, 238, 240, 12, 126, 112, 154, 219, 51, 7, 113, 168, 6, 124, 64, 8, 158, 208, 11, 90, 71, 128, 245, 224, 15, 246, 240, 147, 242, 192, 13, 169, 0, 86, 199, 180, 97, 162, 197, 54, 220, 51, 78, 140, 128, 4, 29, 112, 2, 175, 229, 2, 61, 16, 38, 246, 58, 254, 22, 46, 224, 46, 12, 144, 3, 127, 64, 8, 45, 243, 75, 137, 87, 81, 159, 116, 147, 244, 198, 8, 176, 0, 157, 209, 249, 147, 160, 55, 153, 181, 192, 8, 106, 64, 64, 109, 160, 162, 144, 176, 10, 52, 104, 131, 105, 152, 135, 94, 26, 12, 154, 80, 8, 182, 136, 66, 110, 247, 64, 110, 116, 80, 105, 112, 9, 36, 64, 49, 129, 119, 41, 45, 219, 22, 190, 50, 2, 182, 246, 134, 39, 218, 56, 156, 245, 130, 56, 51, 8, 26, 186, 8, 209, 208, 14, 208, 88, 170, 97, 9, 12, 120, 48, 89, 203, 72, 8, 193, 48, 14, 2, 104, 121, 25, 139, 170, 220, 208, 135, 17, 217, 123, 183, 228, 118, 153, 148, 56, 236, 198, 7, 129, 144, 0, 49, 80, 3, 122, 231, 160, 95, 11, 25, 2, 241, 34, 130, 131, 5, 144, 128, 158, 186, 68, 84, 83, 102, 159, 6, 37, 7, 167, 86, 11, 235, 224, 150, 55, 168, 124, 249, 70, 86, 122, 0, 8, 1, 72, 128, 160, 135, 131, 48, 183, 14, 197, 112, 9, 82, 219, 86, 52, 133, 179, 136, 25, 57, 161, 86, 8, 87, 48, 0, 61, 224, 40, 207, 212, 184, 87, 1, 113, 45, 208, 1, 72, 240, 9, 99, 80, 95, 108, 115, 115, 53, 21, 100, 184, 179, 114, 106, 0, 8, 139, 112, 124, 149, 183, 143, 252, 184, 15, 93, 183, 61, 203, 8, 8, 238, 0, 151, 150, 254, 39, 153, 222, 80, 11, 128, 128, 7, 52, 100, 74, 105, 208, 118, 200, 85, 87, 106, 249, 9, 71, 192, 0, 154, 98, 28, 138, 171, 187, 108, 58, 16, 142, 98, 0, 126, 176, 73, 122, 128, 100, 165, 150, 62, 138, 160, 59, 52, 117, 73, 132, 0, 7, 119, 91, 121, 246, 192, 143, 254, 208, 14, 94, 23, 51, 122, 112, 9, 213, 27, 141, 186, 250, 12, 175, 19, 64, 165, 52, 57,134, 88, 102, 138, 247, 50, 166, 69, 1, 25, 244, 148, 177, 178, 3, 228, 162, 190, 61, 202, 18, 74, 18, 0, 99, 150, 6, 106, 166, 120, 138, 99, 54, 109, 244, 78, 40, 20, 74, 119, 32, 7, 136, 32, 9, 219, 208, 188, 105, 56, 15, 1, 220, 61, 151, 240, 14, 251, 184, 134, 217, 10, 86, 136, 35, 59, 53, 101, 185, 84, 54, 89, 188, 131, 163, 29, 32, 25, 62, 240, 2, 32,96, 193, 17, 135, 193, 87, 161, 36, 15, 112, 4, 61, 246, 86, 30, 167, 89, 46, 99, 7, 106, 245, 72, 152, 83, 8, 254, 39,12, 1, 8, 129, 249, 6, 103, 101, 16, 195, 1, 218, 14, 210, 224, 7, 134, 112, 66, 233, 229, 118, 50, 84, 71, 83, 86, 141, 136, 160, 101, 45, 32, 16, 84, 229, 52, 70, 124, 196, 4, 49, 3, 13, 64, 1, 103, 192, 189, 25, 88, 188, 226, 84, 83, 43, 22, 62, 88, 4, 177, 155, 176, 10, 254, 219, 240, 14, 102, 167, 10, 203, 56, 89, 140, 80, 189, 216, 58, 11, 128, 32, 86, 27, 23, 168, 101, 252, 70, 192, 229, 54, 123, 208, 7, 36, 128, 2, 10, 242, 109, 111, 92, 21, 248, 58, 16, 55, 48, 1, 2, 48, 5, 159, 224, 54, 208, 37, 191, 228, 227, 78, 132, 216, 54, 87, 186, 138, 38, 135, 14, 170, 192, 110, 109, 176, 9, 235, 144, 170, 173, 240, 8, 117, 160, 8, 36, 138, 108, 19, 37, 84, 206, 42, 76, 115, 36, 7, 159, 96, 5, 1, 224, 36, 46, 146, 201, 89, 241, 37, 4, 209, 187, 23, 240, 3, 125, 176, 50, 151, 36, 69, 158, 20, 57, 55, 183, 83, 119, 149, 129, 40, 137, 117, 162, 0, 131, 203, 102, 174, 1, 217, 70, 192, 165, 62, 45, 211, 192, 140, 35, 71, 147, 116, 7, 133, 32, 9, 20, 48, 2, 195, 26, 88, 69, 76, 204, 76, 81, 104, 221, 214, 2, 45, 16, 0, 84, 192, 167, 36, 54, 87, 138, 227, 95, 122, 188, 78, 16, 116, 59, 150, 224, 47, 94, 131, 155, 35, 247, 8, 86, 89, 84, 138, 176, 68, 101, 144, 6, 160, 202, 110, 115, 132,59, 245, 247, 9, 24, 249, 1, 139, 219, 52, 235, 204, 206, 69, 1, 47, 195, 209, 106, 72, 51, 1, 44, 64, 160, 149, 99, 98, 68, 246, 192, 201, 232, 61, 119, 165, 54, 152, 163, 56, 145, 229, 75, 166, 84, 254, 6, 80, 204, 97, 55, 35, 142, 56, 199, 172, 161, 214, 122, 63, 208, 1, 26, 160, 52, 25, 99, 3, 121, 55, 104, 20, 93, 21, 130, 53, 104, 230, 34, 2, 27, 240,0, 88, 240, 8, 248, 21, 111, 52, 100, 163, 168, 204, 54, 183, 131, 62, 191, 150, 152, 118, 144, 212, 221, 51, 89, 115, 96, 95, 119, 80, 191, 13, 117, 122, 7, 84, 64, 15, 196, 7, 158, 112, 5, 118, 147, 36, 76, 131, 211, 127, 65, 85, 59, 237, 20, 61, 141, 49, 54, 160, 2, 31, 176, 0, 96, 26, 184, 111, 245, 113, 12, 173, 212, 70, 213, 6, 138, 224, 98, 241, 75, 74, 12, 197, 205, 54, 35, 136, 112, 218, 172, 189, 68, 98, 170, 231, 133, 166, 21, 2, 12, 0, 2, 208, 3, 34, 57, 77, 214,101, 13, 21, 79, 2, 3, 60, 96, 3, 241, 60, 4, 146, 192, 7, 248, 217, 8, 192, 198, 102, 143, 115, 92, 225, 115, 213, 247, 103, 185, 89, 109, 198, 207, 44, 62, 226, 180, 127, 255, 197, 200, 123, 224, 8, 66, 80, 0, 40, 144, 184, 34, 112, 91, 38, 0, 209, 139, 253, 20, 25, 97, 17, 143, 114, 55, 142, 205, 3, 46, 208, 0, 7, 64, 5, 155, 144, 6, 3, 103, 203, 186, 163, 217, 57, 71, 188, 37, 70, 166, 148, 115, 220, 14, 133, 162, 34, 236, 170, 69, 85, 6, 131, 128, 8, 86, 48, 0, 230, 254, 66, 36, 173, 61, 3, 31, 240, 1, 185, 27, 219, 81, 1, 19, 181, 45, 130, 18, 242, 1, 13, 240, 3, 94, 144, 110, 2, 36, 215, 155, 20, 111, 9, 135, 103, 47, 244, 204, 200, 221, 222, 77, 199, 217, 232, 51, 7, 115, 208, 5, 133, 64, 119, 21, 240,2, 43, 240, 148, 49, 224, 218, 130, 198, 178, 218, 45, 20, 74, 113, 33, 24, 82, 34, 19, 145, 1, 0, 112, 110, 5, 170, 156, 184, 169, 199, 233, 93, 87, 29, 231, 222, 199, 93, 95, 190, 250, 196, 107, 134, 67, 130, 240, 3, 173, 242, 2, 64, 16,43, 90, 197, 96, 255, 205, 20, 122, 113, 33, 22, 48, 224, 56, 192, 3, 49, 80, 94, 124, 74, 165, 191, 244, 50, 90, 196, 95, 165, 198, 107, 16, 142, 220, 141, 39, 62, 42, 102, 97, 166, 101, 4, 5, 176, 2, 64, 160, 227, 254, 180, 21, 31, 94, 20, 1, 222, 221, 32, 192, 3, 60, 0, 2, 18, 144, 4, 33, 202, 131, 130, 58, 81, 157, 13, 105, 48, 30, 227, 237, 13, 95, 240, 69, 54, 54, 30, 8, 80, 48, 0, 40, 224, 36, 25, 2, 149, 5, 17, 34, 63, 142, 19, 62, 161, 35, 143, 114, 41, 48, 128, 72,2, 0, 5, 126, 48, 103, 34, 12, 95, 205, 170, 115, 229, 244, 228, 80, 30, 69, 12, 254, 72, 132, 176, 8, 88, 16, 0, 29, 16, 4, 240, 220, 2, 254, 234, 199, 142, 239, 50, 209, 95, 94, 32, 43, 129, 41, 48, 128, 3, 203, 131, 33, 120, 115, 35, 45, 176, 99, 147, 64, 8, 117, 160, 152, 132, 88, 84, 206, 76, 188, 116, 4, 229, 201, 61, 162, 9, 100, 51, 236, 211, 9, 87,14, 209, 242, 115, 3, 37, 82, 4, 203, 67, 16, 127, 30, 232, 67, 225, 163, 180, 61, 230, 46, 80, 41, 59, 208, 1, 1, 0, 5, 154, 208, 167, 55, 68, 67, 185, 118, 64, 111, 30, 81, 200, 173, 107, 113, 154, 100, 135, 80, 8, 125, 160, 4, 76, 233, 87, 35, 101, 172, 193, 66, 232, 238, 2, 232, 166, 158, 18, 74, 33, 158, 126, 3, 207, 22, 240, 178, 62, 160, 3, 3, 144, 4, 125, 0, 64, 209, 149, 97, 166, 228, 105, 148, 51, 71, 224, 123, 220, 184, 14, 57, 12, 229, 219, 126, 4, 9, 98, 0, 5, 104, 42, 88, 91, 101, 3, 221, 157, 88, 232, 226, 46, 217, 157, 236, 38, 177, 34, 9, 1, 2, 64, 128, 41, 46, 224, 234, 44, 240, 5, 126, 48, 8, 118, 144, 64, 165, 4, 74, 23, 165, 107, 220, 14, 218, 7, 228, 61, 17, 181, 51, 165, 165, 9, 95, 0, 63, 31, 160, 90, 25, 96, 91, 233, 190, 238, 3, 145, 234, 239, 14, 239, 121, 33, 239, 5, 1, 3, 10, 246, 2, 61, 144, 1, 138, 59, 1, 11, 208, 4, 177, 78, 81, 217, 30, 254, 194, 108, 164, 157, 195, 13, 225, 188, 70, 147, 141, 160, 161, 147, 64, 5, 6, 112, 1, 132, 162, 229, 20, 177, 85, 74, 19, 44, 62, 110, 241, 55, 49, 23, 48, 129, 41, 10, 22, 155, 198, 227, 1, 173, 30, 0, 57, 192, 6, 159, 224, 53, 22, 197, 110, 236, 68, 240, 150, 62, 124, 109, 83, 8, 147, 176, 6, 78, 32, 0, 13, 96, 2, 56, 208, 3, 13, 42, 23, 195, 94, 241, 58, 79, 22, 1, 62, 241, 153, 194, 36, 183, 149, 36, 25, 112, 1, 4, 144, 4, 139, 144, 8, 176, 51, 103, 153, 214, 70, 223, 222, 244, 145, 131, 67, 143, 16, 60, 74, 96, 0, 85, 127, 3, 162, 129, 223, 13, 10, 207, 27, 177, 245, 92, 31, 232, 177, 242, 26, 31, 18, 18, 226, 121, 25, 46, 17, 43, 46, 160, 3, 32, 144, 41, 62,224, 2, 31, 48, 2, 18, 64, 0, 80, 240, 7, 141, 36, 189, 197, 171, 157, 185, 233, 237, 16, 21, 54, 167, 246, 7, 73, 64, 0, 12, 64, 4, 65, 240, 236, 2, 161, 93, 180, 237, 34, 61, 205, 34, 201, 174, 223, 76, 194, 250, 32, 193, 236, 101, 225, 18, 126, 97, 41, 204, 163, 96, 18, 162, 184, 155, 34, 1, 14, 32, 5, 102, 112, 9, 158, 224, 47, 150, 32, 7, 56, 231, 237,28, 120, 146, 253, 199, 8, 128, 96, 6, 76, 144, 3, 8, 176, 218, 250, 254, 51, 17, 78, 57, 152, 194, 156, 88, 143, 155, 250, 11, 193, 145, 255, 221, 60, 216, 191, 243, 207, 244, 40, 23, 224, 41, 57, 0, 5, 108, 32, 9, 154, 224, 135, 95, 243,61, 32, 29, 233, 153, 163, 9, 139, 144, 45, 57, 16, 1, 3, 112, 1, 107, 220, 27, 40, 177, 163, 93, 223, 20, 18, 210, 85,6, 64, 1, 73, 96, 5, 249, 146, 8, 0, 225, 233, 209, 64, 130, 3, 55, 49, 98, 228, 71, 204, 149, 36, 20, 8, 0, 224, 80, 2, 4, 136, 24, 21, 45, 94, 196, 152, 81, 227, 70, 142, 29, 61, 126, 4, 25, 82, 228, 72, 146, 37, 77, 158, 68, 153, 82, 229, 74, 148, 42, 84, 104, 48, 97, 162, 195, 5, 0, 3, 18, 144, 248, 33, 228, 9, 22, 44, 92, 124, 242, 116, 130, 228, 7, 137, 4, 3, 36, 48, 232, 208, 98, 199, 14, 138, 44, 157, 62, 133, 26, 85, 234, 84, 170, 85, 173, 58, 85, 33, 195, 131, 7, 17, 34, 102, 224, 192, 225, 2, 5, 135, 11, 12, 36, 72, 16, 96, 64, 64, 0, 6, 23, 80, 148, 88, 1, 4, 71, 69, 151, 117, 175, 222, 197, 155, 87, 239, 94, 190, 125, 67, 206, 232, 58, 67, 176, 75, 23, 25, 92, 180, 64, 140, 248, 195, 132, 9, 29, 92, 196, 0, 1, 3, 198, 68, 23, 46, 106, 212, 112, 233, 87, 243, 102, 206, 157, 61, 127, 254, 174, 40, 120, 34, 8, 176, 77, 113, 248, 16, 44, 56, 166, 138, 138, 48, 122, 244, 240, 129, 3, 68, 6, 195, 149, 65, 223, 198, 157, 91, 247, 238, 141,133, 93, 172, 88, 49, 49, 6, 142, 30, 146, 71, 131, 56, 140, 216, 197, 68, 24, 193, 129, 175, 224, 29, 93, 250, 116, 234, 121, 75, 148, 168, 12, 86, 182, 228, 225, 115, 43, 127, 127, 140, 17, 120, 69, 225, 213, 205, 159, 71, 159, 94, 35, 120, 246, 182, 99, 212, 85, 145, 122, 6, 235, 202, 202, 31, 75, 134, 161, 94, 255, 126, 254, 186, 193, 195, 7, 176, 174, 25, 108, 72, 205, 165, 152, 86, 27, 208, 6, 27, 250, 99, 176, 65, 7, 243, 146, 207, 165, 193, 234, 74, 46, 188, 208, 230, 11, 16, 190, 7, 55, 228, 176, 67, 15, 63, 4, 49, 68, 17, 71, 36, 177, 68, 19, 79, 68, 49, 69, 21, 87, 100, 177, 69, 23, 95, 132, 49, 70, 25, 103, 164, 177, 70, 27, 111, 196, 49, 71, 29, 119, 228, 241, 174, 101, 252, 241, 135, 156, 30, 135, 20, 105, 23, 108, 206, 129, 103, 159, 125, 224, 57, 39, 27, 98, 170, 120, 241, 71, 127, 156, 217, 72, 27, 32, 175, 33,50, 75, 142, 136, 81, 7, 72, 47, 191, 244, 7, 158, 106, 182, 104, 49, 27, 32, 113, 217, 40, 29, 32, 145, 209, 178, 77, 139, 40, 9, 7, 76, 57, 129, 220, 254, 135, 76, 22, 213, 180, 103, 9, 55, 247, 236, 200, 20, 53, 129, 100, 231, 26, 93, 76, 217, 194, 20, 92, 148, 209, 134, 30, 127, 210, 105, 209, 141, 125, 130, 228, 51, 210, 140, 200, 232, 210, 31, 123, 198, 220, 136, 146, 107, 178, 105, 113, 151, 43, 37, 5, 181, 34, 51, 253, 161, 103, 151, 146, 182, 80, 38, 28, 118, 236, 161, 39, 157, 107, 66, 209, 232, 26, 32, 119, 113, 229, 154, 115, 232, 217, 135, 30, 114, 126, 137, 117, 214, 90, 111, 205, 117, 215, 142, 126, 201, 70, 29, 92, 225, 249, 198, 84, 142, 118, 41, 246, 88, 113, 160, 49, 165, 34, 100, 230, 164, 211, 78, 89, 253, 33, 230, 162, 107, 105, 181, 21, 87, 93, 121, 221, 8, 85, 113, 146, 204, 213, 85, 69, 197, 9, 181, 63,93, 188, 4, 119, 164, 95, 42, 5, 19, 30, 52, 49, 34, 7, 200, 108, 30, 149, 115, 153, 140, 234, 245, 231, 222, 57, 245, 205, 200, 21, 113, 168, 173, 70, 35, 92, 248, 149, 211, 30, 88, 171, 161, 214, 31, 117, 44, 26, 216, 31, 88, 45, 226, 215, 223, 124, 53, 202, 5, 222, 57, 177, 76, 119, 191, 56, 251, 45, 73, 74, 106, 225, 161, 228, 162, 40, 236, 105, 24, 72,120, 244, 180, 232, 228, 148, 195, 100, 217, 162, 92, 20, 109, 88, 89, 139, 144, 65, 121, 228, 138, 186, 105, 56, 156, 138, 138, 254, 80, 244, 225, 150, 115, 110, 120, 101, 140, 126, 33, 154, 218, 118, 59, 70, 207, 21, 58, 89, 33, 105, 90,32, 207, 81, 198, 20, 55, 112, 177, 18, 200, 130, 45, 194, 229, 75, 118, 160, 113, 133, 12, 87, 70, 245, 39, 150, 139, 186, 246, 242, 235, 176, 199, 246, 210, 108, 139, 98, 65, 217, 158, 110, 136, 113, 101, 11, 74, 118, 225, 183, 155, 139,118, 193, 87, 157, 101, 234, 14, 37, 150, 101, 190, 209, 187, 34, 151, 25, 213, 40, 22, 32, 181, 57, 219, 107, 176, 197, 38, 219, 237, 138, 112, 201, 217, 111, 86, 196, 70, 166, 155, 156, 75, 102, 58, 61, 103, 128, 252, 134, 36, 82, 224, 185, 178, 8, 140, 70, 21, 210, 162, 207, 45, 117, 6, 74, 139, 150, 32, 221, 159, 92, 46, 90, 221, 158, 214, 47, 130, 29, 200, 217, 43, 34, 67, 205, 116, 92, 153, 20, 101, 161, 99, 160, 36, 118, 109, 236, 228, 40, 23, 32, 177, 217, 72, 74, 42, 85, 7, 210, 118, 215, 43, 202, 93, 246, 150, 255, 60, 126, 95, 135, 59, 87, 239, 27, 32, 159, 23, 233, 218, 194, 49, 114, 218, 31, 118, 46, 226, 217, 31, 101, 52, 58, 7, 72, 168, 45, 74, 127, 253, 140, 218, 247, 231, 253, 24, 160, 33, 181, 148, 141, 216, 9, 211, 34, 134, 253, 17, 135, 233, 60, 242, 191, 108, 105, 36, 107, 146, 139, 65, 252, 254, 216, 231, 62, 139, 72, 41, 128, 25, 169, 2, 202, 24, 199, 61, 244, 84, 106, 119, 33, 217, 2, 233, 236, 65, 10, 141, 44, 225, 81, 240, 184, 8, 255, 252, 161, 191, 140, 116, 9, 132, 33, 4, 18, 9, 49, 98, 194, 150, 197, 238, 101, 136, 171, 2, 233, 246, 97, 191, 142, 196, 105, 31, 110, 216, 72, 151, 232, 33, 192, 138, 136, 80, 133, 23, 97, 161, 69, 212, 52, 67, 141, 172, 203, 31, 0, 163, 160, 121, 104, 70, 195, 143, 120, 202, 31, 227, 195, 200, 22, 128, 132, 184, 24, 144, 2, 72, 195, 187, 136, 27, 128, 228, 51, 139, 88, 113, 123, 25, 209, 162, 63, 184, 24, 3, 35, 190, 204, 31, 161, 139, 129, 19, 161, 216, 17, 69, 157, 35, 83, 64, 66, 87, 23, 175, 168, 145, 48, 142, 81, 113, 103, 220, 200, 255, 16, 152, 68, 233, 68, 193, 75, 28, 20, 201, 255, 144, 136, 145, 59, 142, 81, 106, 19, 60, 154, 214, 46, 114, 72, 141, 252, 66, 145, 21, 249, 159, 25, 183, 118, 173, 65, 114, 228, 142, 28, 203, 136, 35, 253, 129, 201, 24, 48, 50, 147, 143, 140, 193, 234, 192, 135, 145, 129, 209, 131, 143, 230, 241, 35, 144, 246, 232, 145, 172, 233, 98, 35, 248, 243, 7, 52, 44, 66, 201, 94, 249, 195, 149, 179, 4, 82, 37, 43, 114, 173, 91, 198, 32, 107, 54, 99, 229, 172, 64, 254, 178, 58, 96, 106, 11, 72, 5, 220, 101, 46, 107, 217, 203, 86, 106, 196, 101, 113, 60, 37, 117, 104, 54, 202, 143, 124, 236, 130, 23, 41, 194, 159, 36, 199, 47, 224, 101, 100, 96, 246, 64, 94, 12, 184, 169, 145, 111, 34, 239, 99, 243, 170, 38, 144, 122, 217, 17, 158, 237, 131, 12, 27, 137, 216, 196, 42, 50, 78, 111, 90, 202, 156, 170, 196, 24, 40, 163, 41, 157, 136, 169, 35, 156, 30, 241, 158, 250, 52, 178, 58, 104, 46, 1, 101, 39, 196, 136, 65, 253, 225, 198, 215, 29, 180, 131, 40, 99, 104, 69, 2, 170, 203, 141, 124, 140, 162, 25, 225, 31, 22, 177, 25, 52, 220, 57, 52, 35, 10, 141, 104, 12, 34, 182, 52, 255, 1, 137, 164, 251, 220, 141, 200, 186, 241, 206, 14, 18, 67, 28, 243, 194, 198, 212, 120, 40, 173, 71, 237, 227, 130, 104, 67, 35, 70, 148, 231, 15, 230, 113, 13, 116, 249, 228, 169, 49, 29, 6, 72, 143, 196, 116, 81, 44, 229, 8, 37, 230, 152, 184, 197, 53, 14, 143, 25, 217, 105, 79, 119, 102, 175, 76, 118, 233, 134, 40, 157, 78, 21, 224, 165, 14, 103, 196, 194, 13, 100, 96, 5, 46, 150, 161, 13, 13, 70, 161, 34, 78, 12, 210, 46, 66, 17, 138, 93, 164, 111, 147, 180, 251, 158, 70, 96, 201, 38, 232, 77, 73, 174, 107, 114, 106, 152, 156, 81, 254, 183, 45, 144, 34, 23, 202, 192, 70, 58, 108, 166, 73, 135, 33, 131, 21, 91, 40, 133, 88, 181, 161, 14, 179, 198, 128, 21, 94, 130, 70, 41, 220, 128, 12, 104, 58, 15, 174, 118, 205, 200, 92, 47, 2, 203, 125, 92, 35, 108, 172, 88, 6, 253, 22, 149, 17, 145, 161, 179, 129, 94, 50, 109, 69, 74, 139, 213, 167, 196, 130, 102, 47, 75, 221, 60, 83, 198, 41, 244, 157, 73, 35, 1, 253, 97, 250, 82, 43, 209, 20, 98, 36, 107, 13, 187, 42, 197, 82, 22, 209, 45, 36, 109, 106, 22, 57, 96, 109, 253, 177, 219, 24, 224, 246, 34, 166, 48, 174, 156, 104, 123, 145, 172, 237, 48, 35, 213, 157, 105, 69, 176, 203, 218, 167, 184, 2, 97, 115, 162, 71, 54, 16, 232, 167, 57, 217, 174, 132, 164, 202, 110,69, 72, 167, 81, 29, 166, 55, 6, 235, 133, 224, 111, 231, 4, 205, 138, 144, 66, 180, 96, 218, 199, 214, 68, 37, 167, 241, 181, 23, 136, 232, 213, 8, 124, 49, 34, 178, 47, 169, 227, 90, 116, 253, 47, 0, 53, 82, 41, 250, 90, 132, 193, 220, 141, 138, 46, 178, 145, 14, 92, 217, 3, 30, 228, 192, 6, 49, 254, 201, 59, 103, 144, 227, 88, 231, 168, 70, 180, 48, 226,197, 6, 87, 164, 124, 80, 36, 177, 70, 78, 188, 145, 92, 76, 88, 81, 246, 96, 199, 55, 160, 177, 202, 245, 24, 68, 97, 25, 227, 218, 135, 133, 195, 225, 12, 162, 26, 206, 25, 20, 182, 135, 58, 186, 113, 203, 80, 192, 241, 34, 41, 14, 24, 144, 214, 120, 86, 113, 28, 139, 28, 203, 136, 66, 76, 247, 193, 57, 139, 148, 194, 75, 250, 173, 242, 149, 51, 98, 101, 125, 66, 216, 203, 123, 169, 2, 255, 114, 250, 101, 50, 243, 167, 8, 233, 91, 103, 153, 213, 188, 155, 88, 176, 35, 195,135, 21, 91, 104, 155, 186, 102, 58, 167, 116, 184, 56, 172, 115, 158, 111, 67, 54, 254, 202, 83, 207, 127, 230, 12, 46, 174, 65, 142, 85, 229, 234, 28, 216, 96, 46, 160, 21, 189, 104, 70, 55, 218, 209, 143, 134, 116, 164, 37, 61, 105, 74,87, 218, 210, 151, 198, 116, 166, 53, 189, 105, 78, 119, 218, 211, 46, 210, 206, 167, 25, 13, 150, 139, 104, 199, 212, 165, 54, 245, 92, 42, 146, 234, 211, 136, 90, 209, 170, 30, 201, 169, 81, 61, 23, 82, 187, 218, 214, 183, 198, 117, 174,117, 189, 107, 94, 247, 218, 215, 191, 6, 118, 176, 133, 61, 108, 98, 23, 219, 216, 199, 70, 118, 178, 149, 189, 108, 102, 55, 219, 217, 207, 134, 118, 180, 165, 61, 109, 106, 87, 219, 218, 215, 198, 118, 182, 181, 189, 109, 110, 119, 219,219, 223, 6, 119, 184, 197, 61, 110, 28, 5, 4, 0, 59) 312 | [byte[]]$SyncHash.screenCapErrorImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 66, 8, 18, 46, 15, 20, 51, 14, 17, 50, 14, 21, 74, 7, 17, 61, 11, 21, 75, 8, 11, 56, 13, 24, 62, 12, 17, 50, 15, 26, 44, 18, 15, 43, 18, 20, 61, 12, 27, 48, 17, 17, 57, 14, 20, 31, 22, 23, 65, 13, 13, 43, 19, 26, 90, 5, 21, 47, 18, 26, 55, 17, 14, 55, 17, 20, 60, 16, 16, 50, 19, 23, 71, 13, 17, 42, 22, 22, 40, 22, 30, 72, 13, 22, 46, 21, 23, 71, 13, 27, 32, 25, 29, 31, 26, 21, 36, 25, 16, 36, 24, 30, 38, 24, 26, 85, 10, 24, 30, 27, 26, 29, 27, 30, 36, 25, 35, 35, 26, 27, 40, 25, 23, 24, 29, 35, 27, 29, 26, 26, 29, 31, 43, 24, 28, 68, 17, 22, 45, 24, 24, 33, 27, 36, 68, 17, 26, 23, 31, 27, 37, 27, 24, 22, 31, 32, 35, 27, 32, 40, 26, 28, 28, 30, 28, 32, 29, 28, 31, 29, 32, 30, 30, 24, 36, 28, 28, 33, 29, 28, 26, 32, 24, 27, 31, 33, 40, 27, 33, 29, 31, 28, 30, 30, 37, 97, 11, 19, 32, 30, 33, 87, 14, 21, 35, 30, 24, 36, 29, 34, 25, 33, 29, 24, 33, 34, 82, 16, 23, 77, 18, 22, 30, 32, 29, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 82, 17, 31, 31, 33, 30, 30, 33, 35, 33, 33, 27, 99, 13, 27, 40, 31, 31, 96, 14, 32, 91, 17, 28, 45, 31, 33, 80, 21, 29, 34, 35, 33, 93, 19, 25, 122, 12, 38, 124, 13, 29, 109, 18, 32, 95, 22, 38, 87, 25,34, 38, 40, 37, 116, 16, 37, 117, 17, 30, 105, 23, 32, 99, 25, 34, 111, 21, 39, 105, 24, 37, 42, 44, 41, 45, 47, 45, 103, 30, 40, 141, 19, 39, 110, 29, 42, 131, 23, 39, 122, 25, 50, 124, 26, 47, 118, 29, 50, 132, 25, 47, 49, 51, 48, 157, 18, 42, 114, 33, 44, 128, 29, 40, 143, 24, 47, 121, 32, 47, 128, 30, 45, 52, 54, 51, 152, 26, 46, 160, 24, 50, 218, 6, 56, 55, 57, 54, 218, 8, 51, 132, 35, 53, 154, 29, 52, 57, 59, 57, 140, 34, 52, 210, 15, 47, 220, 12, 46, 209, 15, 52, 135,38, 55, 165, 29, 52, 220, 12, 52, 219, 12, 57, 158, 32, 45, 137, 39, 51, 152, 36, 53, 221, 15, 53, 62, 64, 61, 143, 40,50, 168, 33, 49, 211, 19, 59, 221, 16, 58, 167, 33, 59, 212, 21, 49, 212, 21, 54, 176, 32, 59, 211, 21, 64, 203, 25, 55, 148, 42, 57, 223, 19, 54, 214, 23, 44, 162, 38, 58, 205, 26, 45, 203, 26, 61, 223, 20, 59, 214, 24, 50, 205, 27, 51, 214, 24, 55, 196, 30, 53, 194, 30, 68, 171, 38, 64, 180, 36, 56, 196, 31, 58, 215, 25, 61, 163, 41, 65, 179, 36, 66, 188,34, 60, 187, 34, 65, 69, 71, 68, 206, 30, 58, 174, 40, 59, 205, 30, 68, 197, 33, 64, 160, 45, 59, 190, 36, 56, 182, 39,63, 168, 44, 62, 189, 37, 71, 207, 33, 64, 73, 75, 72, 192, 39, 63, 191, 39, 68, 169, 47, 58, 77, 79, 77, 213, 40, 63, 215, 41, 63, 81, 83, 81, 215, 43, 70, 86, 88, 85, 215, 53, 72, 90, 92, 89, 95, 97, 94, 216, 65, 81, 100, 103, 100, 104, 106, 103, 109, 111, 108, 114, 116, 113, 116, 119, 116, 120, 122, 120, 123, 126, 123, 130, 132, 129, 134, 136, 133, 137, 139, 136, 142, 144, 141, 222, 123, 130, 147, 149, 146, 222, 130, 134, 150, 152, 149, 156, 158, 155, 226, 141, 147, 162, 164, 161, 227, 148, 152, 166, 168, 165, 170, 173, 170, 229, 156, 157, 229, 158, 165, 175, 177, 174, 230, 165, 170, 179, 182, 179, 231, 173, 175, 185, 187, 184, 235, 177, 179, 188, 191, 187, 193, 195, 192, 198, 200, 197, 202, 204, 201, 206, 208, 205, 239, 202, 203, 210, 212, 209, 214, 216, 213, 242, 213, 212, 219, 221, 218, 244, 217, 221, 222, 224, 221, 225, 227, 224, 243, 223, 225, 230, 232, 229, 249, 229, 231, 246, 233, 233, 234, 237, 233, 238, 240, 237, 250, 237, 238, 247, 241, 240, 241, 244, 240, 246, 248, 245, 252, 247, 246, 249, 251, 248, 255, 251, 250, 251, 253, 250, 255, 253, 251, 253, 255, 252, 30, 30, 30, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 127, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 238, 216, 33, 208, 136, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 31, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57,147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 17, 7, 14, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3, 47, 84, 76, 184, 177, 99, 177, 103, 149, 8, 84, 193, 83, 34, 221, 131, 74, 36, 31, 100, 60, 80, 133, 231, 129, 66, 132, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 86, 18, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 247, 143, 214, 174, 97, 255, 45, 232, 153, 242, 15, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190, 188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 169, 128, 145, 103, 49, 80, 54, 145, 14, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 59, 20, 151, 218, 132, 42, 56, 152, 22, 67, 192, 21, 180, 130, 131, 26,209, 246, 87, 113, 34, 138, 136, 3, 13, 129, 89, 116, 28, 106, 47, 250, 85, 66, 9, 76, 76, 164, 2, 20, 178, 249, 133, 195, 10, 72, 70, 17, 197, 111, 2, 41, 49, 209, 107, 158, 173, 16, 5, 20, 74, 84, 136, 20, 142, 70, 178, 84, 35, 129, 59, 208, 128, 227, 10, 71, 232, 248, 219, 144, 80, 172, 80, 130, 16, 76, 48, 145, 156, 100, 36, 200, 80, 131, 8, 25, 100, 192, 193, 5, 23, 112, 96, 103, 6, 46, 176, 128, 66, 13, 58, 16, 81, 162, 103, 74, 100, 193, 196, 145, 42, 56, 65, 229, 14,70, 102, 185, 37, 132, 43, 33, 249, 226, 14, 58, 80, 241, 155, 18, 76, 20, 225, 65, 137, 49, 100, 234, 132, 10, 15, 44,32, 0, 2, 24, 140, 48, 68, 16, 65, 76, 49, 133, 4, 67, 140, 128, 129, 5, 13, 100, 240, 65, 14, 254, 60, 40, 33, 225, 14, 63, 70, 145, 25, 141, 21, 33, 233, 165, 130, 139, 10, 136, 164, 95, 33, 156, 144, 33, 9, 39, 80, 177, 3, 17, 84, 160, 224, 105, 11, 95, 144, 97, 135, 34, 152, 196, 162, 139, 43, 212, 82, 75, 11, 45, 152, 220, 49, 135, 23, 88, 56, 32, 192,2, 120, 242, 137, 168, 10, 37, 76, 150, 3, 172, 49, 24, 177, 130, 151, 48, 246, 58, 96, 143, 95, 90, 184, 195, 7, 50, 44, 224, 192, 8, 97, 252, 81, 9, 44, 176, 152, 98, 138, 40, 0, 95, 114, 73, 43, 160, 8, 44, 138, 191, 176, 140, 178, 138,36, 117, 148, 49, 66, 11, 2, 160, 240, 193, 68, 66, 32, 41, 217, 185, 57, 252, 176, 46, 142, 238, 214, 184, 130, 154, 43, 168, 144, 131, 12, 10, 80, 176, 1, 25, 133, 160, 178, 74, 39, 167, 32, 194, 200, 203, 140, 132, 18, 10, 37, 147, 12, 210, 71, 31, 159, 32, 162, 51, 34, 145, 156, 98, 9, 44, 181, 160, 18, 136, 25, 88, 80, 16, 0, 11, 59, 36, 73, 209, 185, 2, 41, 218, 177, 127, 126, 81, 228, 146, 153, 43, 100, 65, 132, 2, 67, 176, 241, 136, 42, 253, 94, 2, 73, 40, 58, 223, 252, 201, 36, 100, 127, 146, 9, 35, 56, 147, 61, 201, 216, 136, 132, 66, 136, 192, 166, 224, 98, 8, 27, 67, 56, 112, 130,18, 47, 238, 250, 244, 254, 131, 81, 35, 69, 145, 17, 42, 80, 81, 67, 0, 22, 164, 17, 139, 42, 160, 124, 66, 137, 204, 148, 52, 174, 243, 39, 144, 43, 254, 137, 216, 145, 87, 14, 121, 31, 103, 83, 2, 9, 44, 155, 148, 209, 66, 0, 34, 176, 219, 247, 222, 1, 150, 128, 131, 16, 43, 73, 70, 196, 2, 27, 148, 241, 199, 44, 166, 92, 82, 182, 229, 59, 135, 173, 115,227, 184, 83, 2, 121, 217, 55, 247, 30, 10, 40, 157, 44, 28, 70, 7, 28, 224, 93, 130, 151, 36, 236, 160, 25, 233, 252, 69, 97, 102, 197, 74, 60, 144, 129, 3, 72, 208, 225, 202, 43, 132, 16, 18, 74, 229, 189, 83, 94, 59, 34, 185, 79, 142, 179, 229, 189, 79, 162, 51, 33, 157, 204, 18, 200, 19, 160, 123, 233, 193, 18, 37, 50, 223, 95, 148, 96, 170, 112, 5, 2, 98, 60, 34, 203, 37, 130, 32, 226, 73, 31, 59, 139, 220, 205, 6, 97, 51, 0, 130, 175, 113, 226, 235, 158, 226, 114, 87, 187, 198, 189, 205, 20, 164, 112, 3, 0, 92, 160, 132, 35, 65, 65, 67, 242, 203, 143, 113, 178, 176, 3, 22, 0, 224, 14, 170, 184, 4, 33, 62, 129, 54, 3, 6, 240, 114, 4, 236, 221, 1, 19, 216, 61, 156, 229, 206, 113, 50, 27, 219, 36, 40, 209, 138, 74, 4, 2, 1, 25, 40, 145, 148, 50, 168, 159, 211, 124, 32, 3, 254, 27, 248, 3, 44, 46, 161, 59, 77, 12, 34, 19, 110, 67, 4, 0, 95, 136, 136, 203, 81, 174, 133, 80, 188, 29, 36, 32, 65, 137, 176, 165, 141, 19, 173, 80, 69, 32, 8, 224, 130, 38, 241, 48, 63, 19, 57, 193, 224, 48, 128, 9, 88, 52, 110, 109, 189, 91, 156, 238, 20, 119, 192, 23, 58, 145, 114, 144, 211, 93, 247, 218, 56, 51, 204, 17, 112, 109, 161, 184, 4, 46, 22, 145, 4, 14, 124, 128, 72, 95, 196, 79, 9, 124, 16, 0, 36, 108, 66, 22, 137, 27, 219, 228, 148, 72, 54, 4, 182, 112, 108, 12, 84, 162, 11, 207, 136, 70, 202, 53, 78, 16,147, 24, 224, 217, 62, 33, 8, 183, 193, 2, 21, 18, 184, 0, 175, 2, 105, 30, 223, 172, 224, 7, 84, 8, 192, 8, 22, 97, 10, 66, 240, 110, 103, 105, 67, 160, 248, 108, 6, 73, 220, 217, 110, 129, 106, 123, 35, 46, 89, 216, 187, 201, 109, 238, 15, 35, 104, 64, 13, 182, 50, 74, 82, 102, 231, 70, 187, 34, 65, 22, 126, 131, 168, 40, 236, 0, 5, 24, 216, 196, 16, 221,70, 136, 155, 201, 50, 124, 185, 124, 161, 54, 113, 87, 182, 74, 46, 145, 18, 105, 116, 100, 31, 94, 150, 71, 89, 36, 34, 8, 1, 248, 211, 5, 37, 36, 58, 99, 114, 39, 111, 187, 146, 85, 12, 126, 176, 4, 28, 148, 0, 5, 16, 254, 112, 132, 25,41, 145, 189, 80, 88, 147, 137, 77, 204, 101, 27, 183, 233, 70, 1, 254, 83, 108, 252, 36, 4, 56, 25, 113, 182, 62, 188,77, 20, 121, 192, 0, 11, 148, 105, 28, 118, 30, 233, 148, 76, 115, 167, 117, 18, 245, 23, 40, 104, 138, 88, 84, 112, 0,27, 112, 1, 137, 182, 105, 79, 124, 146, 203, 25, 248, 148, 88, 64, 130, 186, 212, 165, 113, 228, 167, 35, 75, 56, 9, 80, 100, 241, 14, 5, 168, 1, 185, 68, 227, 4, 164, 248, 5, 163, 25, 211, 40, 117, 16, 245, 83, 129, 196, 192, 9, 71, 56, 130, 10, 106, 112, 129, 42, 172, 2, 18, 132, 56, 160, 36, 225, 120, 59, 37, 50, 226, 165, 88, 205, 170, 56, 203, 55, 9, 81, 144, 162, 12, 23, 32, 1, 199, 122, 250, 3, 35, 173, 32, 163, 66, 149, 14, 81, 145, 100, 212, 24, 28, 97, 6, 78, 112,1, 1, 54, 209, 137, 243, 89, 81, 129, 139, 212, 170, 94, 181, 218, 203, 151, 245, 129, 18, 157, 160, 197, 6, 88, 80, 132, 18, 40, 1, 93, 47, 122, 1, 13, 96, 149, 86, 234, 20, 149, 34, 74, 152, 65, 20, 12, 91, 1, 54, 192, 162, 164, 73, 132,227, 19, 255, 186, 215, 206, 18, 116, 134, 161, 200, 100, 38, 206, 22, 10, 88, 184, 161, 0, 33, 144, 16, 172, 120, 96, 4, 100, 254, 128, 7, 141, 141, 254, 142, 69, 30, 75, 145, 40, 220, 104, 1, 86, 200, 5, 33, 160, 170, 189, 76, 220, 76, 109, 255, 92, 160, 103, 135, 155, 187, 126, 46, 20, 102, 151, 72, 69, 21, 50, 80, 33, 41, 240, 0, 182, 61, 138, 173, 116,102, 123, 36, 191, 17, 149, 5, 27, 8, 196, 37, 24, 145, 61, 237, 97, 78, 109, 153, 228, 44, 113, 199, 251, 194, 208, 134, 183, 15, 131, 8, 69, 39, 254, 224, 128, 137, 97, 80, 186, 213, 113, 212, 106, 104, 112, 128, 45, 228, 2, 20, 227, 235, 94, 46, 255, 73, 222, 254, 106, 147, 132, 14, 93, 69, 26, 22, 144, 17, 175, 176, 21, 190, 67, 133, 84, 13, 58, 32, 137, 78, 108, 239, 145, 179, 19, 175, 127, 39, 140, 187, 62, 152, 207, 20, 129, 216, 128, 8, 242, 246, 3, 166, 201, 23, 193, 203, 105, 215, 100, 116, 176, 0, 50, 232, 54, 180, 10, 196, 29, 228, 226, 225, 143, 22, 187, 248, 197, 48, 142, 177, 140, 103, 44, 99, 121, 192, 244, 19, 121, 84, 133, 24, 2, 80, 65, 26, 116, 152, 8, 26, 59, 48, 136, 113, 195, 153, 192, 212, 0, 1, 138, 48, 227, 218, 80, 26, 211, 198, 177, 152, 198, 80, 142, 178, 148, 109, 236, 210, 80, 8, 194, 166, 122, 40, 64, 151, 104, 176, 131, 28, 80, 228, 195, 67, 190, 77, 96, 152, 134, 35, 37, 100, 64, 11, 180, 48, 5, 254, 138, 101, 10, 206, 73, 82, 226, 201, 82, 142, 179, 156, 91, 76, 101, 130, 90, 217, 124, 170, 120, 2, 10, 216, 53, 21, 17, 135, 121,52, 99, 134, 173, 151, 126, 16, 128, 145, 38, 18, 124, 10, 109, 179, 112, 225, 60, 231, 70, 211, 184, 206, 219, 28, 161, 217, 76, 49, 7, 97, 58, 173, 44, 127, 118, 140, 95, 86, 27, 3, 191, 168, 192, 1, 134, 128, 68, 94, 109, 201, 223, 55, 183, 184, 30, 20, 206, 170, 60, 232, 140, 85, 37, 102, 226, 18, 152, 104, 65, 13, 86, 0, 4, 32, 224, 128, 67, 153, 38, 204, 173, 207, 101, 17, 32, 208, 64, 6, 88, 80, 5, 34, 6, 193, 136, 182, 57, 46, 156, 78, 62, 117, 170, 177, 186, 106, 127, 64, 186, 188, 146, 100, 68, 43, 72, 161, 5, 23, 28, 161, 71, 184, 206, 181, 99, 66, 3, 132, 19, 52, 96, 12, 176, 144,36, 34, 186, 219, 230, 23, 62, 25, 213, 4, 253, 133, 103, 213, 77, 208, 102, 63, 251, 133, 56, 3, 32, 33, 76, 193, 133,11, 168, 235, 148, 59, 32, 129, 182, 113, 163, 43, 26, 0, 65, 4, 22, 160, 131, 41, 2, 56, 137, 236, 149, 59, 119, 231, 38, 40, 52, 236, 81, 141, 189, 86, 195, 30, 208, 104, 55, 171, 93, 138, 179, 153, 133, 162, 21, 122, 112, 128, 134, 74, 180, 188, 125, 143, 166, 223, 56, 16, 1, 6, 254, 28, 49, 240, 199, 85, 113, 103, 218, 76, 184, 54, 161, 145, 15, 127, 236, 163, 225, 89, 189, 198, 62, 252, 145, 143, 136, 107, 211, 221, 90, 149, 25, 36, 92, 209, 2, 125, 95, 228, 56, 30, 47,205, 175, 252, 146, 129, 33, 232, 194, 193, 222, 51, 96, 202, 149, 173, 77, 118, 184, 120, 31, 215, 192, 170, 204, 93, 252, 142, 109, 226, 252, 165, 51, 59, 224, 44, 176, 112, 183, 206, 4, 93, 57, 56, 184, 64, 16, 92, 113, 9, 127, 90, 56, 129, 3, 77, 182, 63, 208, 253, 66, 98, 188, 227, 233, 218, 112, 233, 54, 102, 222, 226, 120, 16, 195, 234, 19, 119, 233,236, 38, 161, 138, 47, 136, 192, 43, 239, 253, 250, 99, 194, 46, 134, 16, 154, 125, 201, 55, 75, 187, 169, 215, 78, 208, 96, 188, 189, 197, 251, 216, 198, 54, 231, 78, 245, 187, 227, 221, 217, 88, 229, 93, 31, 96, 145, 134, 8, 76, 165, 227, 130, 31, 141, 10, 42, 160, 134, 216, 73, 50, 166, 183, 51, 55, 211, 183, 25, 12, 167, 67, 190, 27, 47, 236, 6, 221, 253, 241, 142, 96, 184, 244, 234, 48, 93, 219, 203, 96, 241, 134, 1, 232, 32, 168, 160, 15, 125, 97, 58, 227, 128, 60, 136, 240, 244, 11, 84, 252, 226, 217, 190, 205, 95, 168, 227, 197, 223, 192, 221, 55, 94, 172, 14, 219, 223, 62, 239, 4, 149, 33, 67, 59, 254, 97, 135, 3, 212, 32, 99, 42, 144, 149, 240, 27, 67, 145, 163, 254, 192, 1, 122, 104, 69, 21, 17, 122, 77, 213, 51, 254, 165, 188, 120, 190, 139, 195, 65, 137, 112, 80, 159, 23, 204, 198, 254, 54, 27, 137, 222, 78, 20, 194, 251, 57, 64, 36, 129, 55, 126, 110, 177, 17, 230, 7, 106, 167, 208, 56, 222, 211, 68, 194, 133, 59, 42, 247, 82, 167,112, 14, 47, 246, 120, 45, 166, 14, 248, 151, 127, 152, 247, 82, 144, 212, 127, 133, 80, 0, 40, 144, 3, 146, 49, 128, 4, 200, 22, 27, 97, 4, 61, 133, 128, 139, 83, 57, 86, 180, 116, 239, 135, 85, 161, 32, 129, 49, 118, 14, 9, 168, 106, 250, 247, 95, 138, 51, 78, 254, 231, 129, 32, 200, 36, 35, 120, 23, 83, 97, 4, 22, 1, 106, 80, 21, 67, 42, 37, 73, 44, 200,124, 88, 5, 131, 46, 118, 14, 51, 163, 85, 184, 151, 125, 146, 195, 8, 166, 208, 129, 31, 40, 36, 61, 232, 131, 25, 1, 132, 159, 150, 126, 218, 51, 51, 57, 227, 68, 71, 184, 87, 74, 216, 98, 76, 168, 87, 79, 184, 77, 147, 244, 9, 83, 168, 131, 43, 33, 130, 87, 8, 22, 46, 161, 133, 21, 144, 7, 173, 144, 104, 107, 36, 71, 18, 166, 118, 72, 104, 103, 99, 184, 132, 77, 136, 129, 239, 6, 111, 11, 164, 134, 126, 192, 0, 223, 135, 105, 254, 111, 8, 25, 128, 55, 135, 34, 36, 83, 187, 19, 94, 97, 136, 85, 17, 56, 129, 247, 71, 131, 25, 72, 113, 156, 245, 9, 184, 224, 6, 134, 232, 101, 136, 114, 74, 137, 104, 23, 72, 50, 122, 165, 167, 126, 222, 37, 67, 223, 132, 112, 171, 71, 80, 241, 247, 98, 244, 103, 127, 46, 102, 129, 128, 216, 106, 153, 136, 11, 189, 167, 3, 126, 19, 138, 110, 129, 111, 68, 21, 118, 65, 80, 10, 173, 208, 73, 186, 83, 97, 169, 168, 135, 47, 229, 124, 208, 39, 125, 212, 103, 125, 18, 119, 137, 4, 165, 51, 86, 198, 8, 170, 64, 6, 17, 96, 2, 64, 80, 2, 59, 224, 81, 186, 184, 22, 71, 112, 17, 70, 114, 1, 90, 160, 11, 151, 128, 99, 240, 86, 106, 203, 231, 82, 173, 247, 116, 176, 151, 59, 178, 71, 117, 204, 120, 115, 53, 200, 68, 218, 179, 54, 170, 128, 5, 34, 240, 2, 138, 181, 3, 78, 48, 79, 219, 72, 130, 61, 194, 1, 72, 16, 11, 162, 160, 68, 77, 120, 87, 238, 183, 135, 141, 227, 120, 79, 39, 121, 218, 212, 142, 45, 246, 14, 150, 7, 143, 206, 184, 77, 110, 227, 79, 130, 80, 10, 45, 176, 3, 66, 224, 107, 37, 34, 38, 253, 56, 22, 191, 194, 2, 72, 102, 10, 236, 247, 56, 200, 118, 142, 218, 228, 118, 112, 39, 119, 179, 103, 119, 151, 23, 136, 185, 227, 254, 54, 139, 3, 10, 134, 224, 0, 63, 32, 4, 183, 22, 63, 31, 57, 22, 25, 241, 34, 131, 51, 7, 176, 208, 7, 154, 48, 54, 219, 51, 136, 18, 246, 128, 185, 227, 122, 46, 23, 117, 47, 53, 117, 15, 249, 146, 26, 56, 57, 5, 215, 9, 117, 32, 0, 78, 240, 40, 197, 180, 147, 166, 1, 34, 58, 32, 2, 95, 144, 11, 136, 48, 148, 230, 211, 128, 147, 227, 128, 171, 136, 59, 44, 231, 114, 48, 39, 117, 51, 151, 15, 210, 0, 149, 48, 53, 78, 147, 112, 9, 171, 16, 6, 11, 176, 41, 198, 129, 147, 90, 25, 22, 83, 241, 40, 48, 80, 9, 161, 165, 9, 189, 20, 62, 102, 217, 130, 47, 180, 112, 107, 153, 85, 15, 103, 115, 18, 9, 147, 107, 52, 78, 125, 208, 9, 155, 48, 2, 25, 32, 43, 183, 194, 4, 229, 178, 151, 95, 145, 133, 65, 54, 0, 127, 208, 9, 130, 32, 152, 150, 68, 73, 198, 152, 110, 235, 118, 125, 19, 153, 59, 55, 83, 66, 166, 224,7, 5, 32, 2, 146, 1, 5, 60, 160, 2, 152, 233, 103, 154, 137, 21, 82, 50, 1, 97, 112, 95, 171, 233, 68, 138, 163, 54, 40, 185, 108, 205, 8, 147, 171, 57, 9, 96, 51, 10, 94, 176, 0, 184, 216, 97, 77, 19, 34, 183, 249, 20, 160, 40, 16, 43, 16, 1, 35, 240, 7, 151, 112, 118, 120, 152, 54, 101, 254, 131, 148, 194, 249, 66, 103, 40, 75, 214, 68, 8, 150, 32, 9, 45,32, 3, 10, 34, 100, 207, 121, 21, 221, 56, 16, 52, 160, 1, 7, 80, 6, 185, 192, 79, 51, 212, 102, 110, 182, 120, 142, 118, 159, 49, 22, 136, 141, 4, 57, 144, 144, 11, 112, 48, 0, 78, 226, 34, 233, 153, 21, 96, 66, 16, 58, 80, 3, 46, 176, 1,13, 6, 9, 51, 148, 64, 70, 201, 104, 248, 25, 161, 250, 105, 156, 161, 213, 9, 168, 48, 2, 44, 144, 139, 101, 101, 155,3, 218, 20, 31, 230, 101, 58, 160, 3, 3, 208, 6, 169, 32, 59, 9, 164, 154, 125, 0, 161, 17, 122, 159, 142, 89, 112, 132, 144, 11, 118, 48, 0, 62, 144, 147, 205, 217, 161, 88, 113, 36, 195, 145, 3, 126, 178, 2, 26, 240, 4, 152, 96, 10, 6, 133, 162, 42, 186, 162, 141, 86, 103, 49, 245, 155, 132, 48, 109, 27, 80, 3, 37, 224, 76, 25, 115, 4, 182, 198, 156, 54, 10, 21, 102, 213, 97, 231, 178, 2, 38, 48, 1, 107, 96, 10, 131, 64, 54, 131, 73, 159, 201, 71, 51, 230, 211, 157, 113, 105, 64, 189, 3, 10, 184, 192, 6, 14, 160, 3, 82, 194, 52, 80, 250, 23, 65, 53, 165, 78, 81, 165, 24, 115, 4, 56, 16, 2, 0, 32, 9, 34, 228, 77, 41, 213, 128, 98, 154, 122, 100, 202, 77, 147, 19, 71, 254, 74, 164, 51, 146, 105, 0, 28, 160, 2,206, 3, 34, 81, 26, 167, 114, 10, 21, 79, 18, 3, 77, 112, 4, 58, 144, 0, 85, 64, 10, 160, 48, 8, 108, 4, 64, 50, 20, 57, 75, 6, 57, 169, 199, 75, 126, 74, 92, 192, 117, 118, 217, 163, 51, 150, 80, 11, 86, 160, 0, 50, 112, 147, 96, 178, 46,51, 250, 168, 79, 193, 153, 144, 162, 3, 85, 210, 4, 77, 176, 3, 17, 192, 0, 109, 32, 11, 130, 160, 61, 97, 243, 136, 228, 83, 159, 162, 42, 75, 150, 115, 172, 145, 131, 114, 251, 53, 8, 136, 6, 78, 144, 48, 10, 112, 80, 1, 231, 50, 36, 43, 48, 3, 43, 224, 3, 33, 144, 149, 178, 250, 19, 74, 81, 171, 28, 39, 33, 33, 16, 1, 27, 144, 7, 166, 64, 9, 253, 99, 62, 7, 228, 165, 143, 20, 62, 235, 186, 70, 200, 250, 174, 74, 39, 71, 104, 131, 54, 97, 99, 11, 129, 208, 2, 32, 192, 3, 57, 16, 126, 63, 112, 109, 131, 230, 145, 219, 42, 20, 221, 234, 173, 37, 50, 17, 36, 16, 0, 67, 176, 9, 106, 102, 62, 218, 67, 69, 217, 153, 98, 42, 134, 87, 238, 250, 174, 150, 51, 148, 38, 100, 85, 190, 149, 9, 224, 211, 10, 143, 128, 5,25, 64, 4, 60, 32, 5, 178, 130, 84, 209, 21, 176, 76, 161, 23, 23, 114, 2, 24, 162, 60, 77, 240, 254, 3, 184, 149, 10, 173, 48, 78, 194, 101, 85, 102, 202, 126, 224, 9, 71, 20, 139, 172, 101, 243, 61, 171, 233, 80, 129, 165, 5, 10, 144, 3,82, 32, 180, 178, 2, 176, 63, 103, 178, 111, 1, 19, 23, 130, 33, 42, 128, 171, 42, 112, 1, 93, 80, 9, 173, 128, 8, 141,68, 159, 156, 5, 177, 143, 217, 75, 57, 187, 181, 0, 196, 169, 153, 132, 62, 174, 96, 6, 2, 32, 3, 78, 146, 33, 226, 87, 16, 206, 137, 180, 55, 225, 19, 58, 2, 41, 152, 98, 4, 131, 116, 0, 102, 80, 9, 160, 224, 74, 149, 212, 70, 18, 171, 98, 44, 180, 181, 180, 99, 80, 98, 179, 54, 162, 176, 9, 107, 48, 0, 53, 64, 5, 58, 160, 178, 250, 6, 122, 55, 146, 182, 106, 91, 19, 37, 8, 132, 74, 144, 60, 24, 130, 55, 55, 162, 3, 7, 16, 6, 169, 32, 10, 156, 160, 9, 162, 217, 172, 14, 74, 150, 123, 203, 183, 201, 202, 128, 232, 69, 75, 96, 43, 182, 51, 234, 37, 92, 166, 2, 89, 144, 60, 4, 177, 184, 28, 218, 184, 142, 155, 133, 64, 232, 55, 43, 107, 41, 76, 32, 2, 3, 96, 6, 179, 32, 59, 252, 183, 75, 131, 122, 57, 55, 139, 179, 199, 10, 71, 142, 184, 59, 138, 100, 11, 146, 80, 6, 7, 32, 2, 69, 240, 83, 108, 229, 182, 63, 0, 132, 234, 226, 52, 178, 254, 27, 21, 48, 81, 187, 182, 171, 3, 15, 144, 52, 80, 176, 4, 2, 48, 5, 146, 176, 63, 40, 150, 9, 147, 208, 73,161, 117, 172, 89, 75, 188, 6, 101, 57, 186, 179, 54, 136, 240, 171, 121, 4, 11, 122, 96, 6, 12, 32, 2, 102, 53, 3, 73,229, 173, 211, 11, 132, 67, 167, 173, 215, 123, 18, 43, 146, 16, 42, 32, 5, 153, 178, 3, 34, 144, 0, 79, 0, 7, 149, 0, 9, 153, 64, 64, 156, 132, 73, 10, 165, 181, 131, 200, 100, 197, 203, 61, 84, 5, 62, 233, 227, 7, 88, 16, 0, 33, 64, 3, 37, 64, 2, 74, 144, 84, 251, 27, 162, 94, 97, 17, 217, 22, 192, 38, 49, 23, 7, 97, 4, 207, 197, 3, 78, 64, 2, 56, 169, 1,29, 16, 6, 179, 160, 126, 125, 32, 140, 140, 195, 167, 41, 197, 190, 195, 58, 62, 77, 4, 62, 155, 147, 10, 110, 0, 3, 25, 80, 40, 101, 75, 17, 73, 181, 2, 210, 187, 21, 42, 140, 19, 115, 145, 189, 46, 172, 175, 153, 177, 2, 41, 144, 187, 3, 128, 4, 129, 176, 10, 94, 147, 80, 137, 134, 87, 162, 251, 174, 96, 163, 94, 169, 16, 8, 94, 112, 0, 17, 64, 3, 74, 224, 4, 158, 40, 23, 23, 197, 196, 79, 60, 20, 124, 241, 131, 70, 96, 126, 148, 113, 4, 206, 19, 5, 36, 144, 1, 8, 208, 5,155, 176, 10, 254, 177, 83, 183, 192, 90, 66, 227, 19, 198, 220, 115, 113, 166, 144, 11, 203, 91, 0, 105, 76, 3, 162, 161, 175, 158, 104, 194, 43, 241, 198, 136, 24, 199, 150, 41, 25, 31, 18, 18, 181, 123, 25, 46, 33, 43, 59, 176, 4, 42, 160, 41, 80, 176, 3, 33, 192, 2, 23, 128, 0, 102, 176, 8, 136, 148, 61, 186, 87, 66, 71, 74, 177, 249, 21, 54, 151, 160, 10, 139, 48, 6, 8, 176, 0, 87, 64, 5, 194, 34, 16, 60, 144, 41, 72, 225, 34, 85, 202, 34, 215, 203, 175, 76, 66, 204, 32, 161, 189, 101, 225, 18, 126, 193, 101, 202, 243, 92, 18, 130, 147, 42, 112, 2, 23, 64, 0, 92, 32, 7, 165, 128, 11, 255, 210, 197, 19, 251, 195, 138, 227, 54, 112, 163, 10, 178, 240, 8, 98, 128, 4, 13, 208, 170, 51, 48, 43, 224, 103, 130, 1, 58, 189, 210, 25, 204, 11, 17, 124, 1, 187, 60, 240, 188, 182, 89, 9, 41, 46, 240, 41, 73, 96, 6, 129, 128, 10, 179, 0, 11, 157, 240, 53, 143, 52, 57, 48, 35, 196, 176, 48, 11, 155, 160, 8, 107, 144, 4, 22, 80, 1, 25, 176, 156, 26, 129, 18, 110, 24, 199, 78, 33, 33, 76, 85, 0, 35, 208, 5, 112, 176, 9, 149, 176, 10, 170, 224, 47, 30, 237, 209, 178, 160, 10, 170, 80, 9, 122, 80, 7, 93, 48, 2, 8, 16, 254, 0, 18, 211, 34, 18, 29, 29, 62, 226, 37, 53, 144, 1, 1, 32, 0, 14, 208,2, 88, 96, 5, 100, 176, 6, 115, 96, 7, 60, 61, 7, 107, 224, 5, 95, 128, 5, 45, 224, 0, 21, 80, 39, 124, 146, 38, 17, 221, 210, 33, 6, 4, 41, 144, 2, 73, 146, 25, 59, 32, 3, 40, 144, 1, 11, 64, 39, 7, 80, 0, 7, 48, 0, 224, 34, 3, 175, 34, 178, 205, 105, 189, 74, 13, 29, 142, 162, 36, 216, 38, 185, 33, 26, 162, 33, 160, 1, 26, 80, 3, 25, 146, 41, 36, 18, 26, 140, 27, 214, 203, 161, 36, 197, 113, 43, 77, 2, 5, 206, 3, 114, 21, 225, 4, 134, 34, 43, 36, 144, 60, 149, 44, 215, 202, 145, 111, 93, 182, 175, 148, 177, 198, 110, 93, 28, 181, 202, 180, 161, 188, 175, 24, 35, 216, 215, 65, 4, 126, 162, 60, 183, 82, 187, 175, 49, 192, 4, 145, 81, 44, 13, 217, 204, 17, 197, 202, 108, 86, 142, 242, 23, 75, 187, 18, 212, 203,217, 209, 113, 22, 28, 149, 218, 71, 114, 109, 67, 167, 186, 95, 66, 194, 166, 45, 214, 161, 125, 81, 137, 194, 191, 3,49, 116, 170, 29, 215, 177, 189, 219, 188, 221, 219, 190, 253, 219, 192, 29, 220, 194, 61, 220, 196, 93, 220, 198, 13, 22, 216, 208, 98, 237, 16, 219, 206, 48, 14, 238, 112, 15, 250, 160, 15, 247, 254, 224, 14, 228, 240, 12, 104, 64, 29, 214, 208, 98, 217, 128, 16, 229, 208, 98, 226, 240, 20, 183, 32, 103, 212, 224, 78, 207, 48, 15, 80, 118, 15, 222, 128, 7, 210, 65, 14, 45, 166, 12, 8, 1, 15, 45, 22, 13, 79, 17, 13, 114, 118, 12, 164, 196, 10, 233, 16, 103, 250, 160, 222, 209, 1, 223, 250, 0, 6, 99, 33, 14, 250, 189, 76, 95, 36, 12, 240, 221, 98, 244, 32, 14, 204, 32, 12, 120, 32, 12, 202, 64, 13, 229, 128, 15, 254, 0, 15, 210, 209, 8, 252, 224, 15, 203, 61, 22, 237, 208, 98, 207, 128, 96, 128, 96, 222, 254, 160, 15, 222, 16, 7, 8, 209, 8, 226, 64, 14, 210, 225, 12, 222, 61, 22, 103, 160, 15, 45, 198, 10, 8, 198, 222, 254, 128, 15, 205, 192, 17, 120, 64, 13, 233, 64, 15, 250, 128, 15, 240, 0, 14, 187, 112, 16, 2, 238, 15, 206, 80, 12, 224, 224,14, 248, 192, 15, 248, 208, 14, 29, 110, 16, 65, 62, 228, 69, 126, 228, 73, 190, 228, 8, 225, 12, 228, 48, 15, 248, 32,221, 232, 224, 12, 10, 65, 229, 86, 46, 221, 235, 192, 13, 192, 32, 16, 244, 61, 99, 252, 192, 223, 224, 192, 225, 6, 113, 227, 57, 190, 227, 61, 254, 227, 76, 222, 98, 78, 110, 228, 72, 174, 228, 28, 177, 12, 45, 70, 225, 14, 49, 14, 45, 86, 227, 254, 202, 80, 14, 58, 174, 15, 224, 32, 16, 122, 238, 15, 124, 238, 231, 209, 29, 232, 3, 161, 230, 58, 206, 227, 62, 126, 16, 131, 94, 232, 127, 142, 232, 217, 193, 12, 46, 38, 229, 15, 225, 12, 32, 14, 99, 247, 224, 222, 5, 177, 225, 254, 64, 14, 23, 30, 99, 214, 96, 16, 158, 14, 234, 50, 54, 234, 6, 97, 12, 235, 48, 99, 222, 112, 16, 202, 224, 233, 49, 166, 15, 183, 240, 3, 222, 64, 99, 243, 48, 16, 171, 238, 15, 110, 62, 16, 152, 46, 99, 155, 78, 234, 45, 102, 234, 162, 30, 17, 220, 16, 236, 15, 225, 14, 33, 110, 12, 249, 253, 98, 168, 142, 236, 250, 160, 236, 48, 134, 234, 63, 208, 235, 49, 246, 235, 5, 225, 236, 208, 206, 236, 219, 177, 236, 40, 30, 17, 217, 77, 99, 247, 0, 227, 3, 209, 226, 81, 118, 15, 0, 62, 238, 46, 126, 222, 231, 62, 16, 203, 32, 225, 52, 86, 227, 4, 17, 13, 233, 238, 235, 2, 97, 14, 52, 150,14, 2, 145, 5, 18, 126, 235, 4, 241, 237, 51, 22, 238, 4, 65, 238, 234, 14, 17, 232, 208, 98, 227, 221, 16, 113, 224, 226, 209, 29, 99, 246, 157, 240, 33, 62, 239, 46, 102, 223, 63, 224, 239, 190, 46, 238, 2, 225, 240, 11, 15, 99, 18, 143,29, 197, 208, 98, 250, 32, 12, 17, 49, 230, 254, 224, 14, 212, 32, 254, 12, 141, 208, 231, 46, 214, 234, 3, 161, 12, 47, 70, 15, 220, 96, 12, 128, 80, 12, 50, 238, 15, 27, 255, 3, 44, 239, 98, 46, 15, 243, 50, 31, 241, 4, 113, 12, 10, 111,14, 207, 80, 12, 120, 192, 10, 205, 224, 233, 232, 64, 16, 205, 16, 234, 243, 128, 13, 66, 127, 11, 200, 96, 13, 232, 112, 244, 2, 65, 238, 120, 110, 16, 199, 208, 98, 230, 16, 239, 46, 70, 242, 38, 143, 242, 45, 166, 242, 2, 113, 243, 8, 254, 242, 49, 63, 243, 53, 207, 16, 247, 208, 98, 195, 224, 16, 148, 238, 98, 240, 144, 13, 198, 112, 221, 3, 209, 246, 119, 14, 247, 114, 47, 230, 91, 95, 242, 39, 223, 221, 95, 79, 16, 116, 63, 225, 118, 223, 29, 201, 237, 15, 82, 255, 16, 187, 144, 246, 254, 32, 14, 4, 62, 16, 50, 158, 225, 2, 145, 13, 30, 159, 13, 119, 255, 3, 96, 128, 248, 203, 64, 16, 144, 31, 226, 146, 79, 16, 149, 223, 98, 151, 47, 16, 124, 0, 223, 240, 80, 12, 6, 1, 8, 46, 206, 239, 63, 192, 10, 136,111, 14, 36, 174, 16, 109, 63, 14, 8, 49, 248, 216, 48, 16, 135, 239, 221, 139, 47, 16, 141, 143, 249, 145, 63, 249, 157, 239, 15, 159, 223, 16, 195, 32, 103, 210, 94, 236, 51, 110, 13, 183, 63, 16, 196, 143, 15, 198, 111, 16, 181, 159, 248, 199, 254, 159, 251, 200, 223, 98, 202, 127, 252, 219, 81, 240, 254, 48, 251, 16, 17, 228, 89, 159, 234, 8, 78, 16, 246, 238, 15, 7, 127, 237, 45, 6, 242, 3, 241, 253, 225, 79, 16, 200, 238, 15, 228, 255, 3, 197, 142, 15, 97, 126, 16, 244, 224, 15, 247, 48, 16, 103, 238, 15, 235, 64, 253, 6, 65, 252, 150, 78, 16, 124, 143, 12, 3, 161, 253, 0, 241, 67, 224,192, 31, 198, 252, 249, 163, 71, 208, 220, 65, 106, 4, 7, 186, 59, 40, 204, 225, 68, 130, 212, 14, 94, 196, 152, 17, 217, 64, 116, 7, 149, 81, 20, 216, 209, 223, 71, 138, 226, 14, 154, 163, 104, 16, 33, 65, 145, 36, 65, 190, 132, 25, 83, 230, 76, 154, 53, 107, 206, 59, 184, 204, 38, 158, 123, 254, 244, 237, 162, 8, 134, 159, 191, 123, 4, 233, 29, 4, 70, 17,103, 81, 163, 72, 149, 18, 29, 120, 166, 103, 70, 170, 254, 224, 9, 68, 211, 83, 223, 176, 153, 233, 124, 54, 2, 137, 19, 95, 22, 129, 60, 125, 2, 157, 40, 20, 234, 192, 163, 254, 146, 78, 92, 106, 147, 92, 85, 170, 250, 192, 176, 245, 55,246, 229, 81, 189, 19, 205, 254, 12, 58, 148, 169, 64, 190, 100, 109, 30, 70, 156, 88, 49, 98, 124, 7, 185, 214, 116, 118, 18, 100, 156, 131, 87, 5, 250, 58, 56, 143, 98, 163, 131, 233, 8, 98, 254, 246, 167, 121, 34, 103, 127, 158, 5, 50, 163, 75, 21, 157, 192, 102, 7, 87, 207, 108, 236, 14, 36, 171, 131, 235, 6, 70, 246, 135, 146, 34, 101, 171, 3, 65, 139,118, 72, 218, 52, 77, 120, 7, 163, 209, 4, 86, 251, 101, 114, 127, 182, 41, 226, 214, 61, 145, 183, 229, 31, 204, 157, 47, 198, 158, 93, 251, 225, 51, 23, 209, 210, 4, 119, 208, 26, 72, 100, 157, 7, 70, 59, 88, 238, 249, 65, 111, 4, 209, 251, 83, 63, 17, 119, 123, 129, 225, 83, 99, 4, 87, 255, 32, 182, 153, 229, 253, 229, 167, 232, 153, 131, 0, 252, 193, 190, 241, 40, 242, 111, 184, 247, 226, 115, 104, 190, 154, 26, 25, 74, 31, 176, 102, 154, 102, 192, 151, 42, 252, 15, 36, 3, 201, 51, 79, 32, 12, 9, 220, 46, 68, 17, 71, 236, 238, 160, 141, 106, 42, 231, 32, 102, 64, 226, 230, 32, 110, 6, 50,201, 159, 3, 29, 178, 111, 69, 24, 197, 163, 168, 198, 129, 82, 244, 199, 25, 154, 120, 244, 81, 38, 108, 14, 10, 114, 34, 251, 158, 217, 81, 69, 22, 93, 188, 81, 198, 28, 149, 164, 9, 183, 118, 106, 26, 231, 32, 36, 65, 170, 210, 159, 43,39, 226, 209, 198, 137, 90, 244, 231, 69, 129, 178, 220, 114, 68, 51, 207, 84, 172, 49, 127, 248, 171, 201, 43, 127, 116, 154, 40, 139, 226, 252, 57, 254, 102, 160, 118, 14, 42, 134, 162, 117, 124, 194, 131, 160, 59, 253, 201, 115, 162, 61, 245, 233, 83, 32, 55, 93, 138, 201, 77, 47, 97, 90, 136, 31, 64, 64, 218, 211, 159, 91, 6, 114, 19, 78, 135, 228, 60, 168, 78, 129, 254, 12, 212, 161, 65, 11, 157, 201, 62, 16, 99, 250, 115, 82, 144, 74, 5, 169, 82, 138, 48, 165, 211, 206, 131, 76, 69, 51, 86, 89, 101, 138, 116, 158, 56, 106, 18, 169, 161, 137, 178, 81, 78, 32, 48, 244, 89, 203, 161, 95, 253, 145, 109, 160, 97, 7, 35, 104, 216, 98, 67, 194, 177, 171, 102, 99, 58, 10, 184, 75, 27, 147, 54, 87, 138, 120, 109,206, 88, 96, 145, 213, 150, 88, 155, 34, 181, 52, 166, 51, 128, 149, 214, 161, 113, 67, 123, 201, 218, 93, 123, 253, 225, 220, 114, 103, 133, 55, 222, 31, 134, 116, 141, 15, 144, 192, 120, 102, 29, 146, 178, 116, 199, 176, 129, 166, 1, 150, 31, 75, 149, 113, 141, 34, 130, 253, 25, 135, 160, 131, 95, 115, 232, 224, 132, 7, 178, 111, 158, 239, 96, 202, 18, 30, 123, 97, 162, 13, 93, 4, 211, 35, 136, 95, 127, 61, 12, 120, 224, 130, 39, 114, 184, 166, 44, 26, 235, 75, 166, 131, 25, 36, 153, 99, 44, 15, 234, 215, 33, 128, 253, 17, 120, 160, 149, 229, 197, 57, 94, 52, 112, 202, 44, 155, 99, 26, 254,225, 99, 24, 101, 176, 49, 71, 171, 51, 4, 194, 205, 159, 118, 154, 185, 229, 22, 103, 22, 178, 112, 32, 122, 179, 161,8, 204, 105, 8, 154, 186, 234, 131, 174, 182, 249, 162, 123, 176, 49, 6, 143, 56, 124, 81, 134, 154, 113, 224, 105, 102, 32, 1, 51, 155, 102, 152, 56, 128, 81, 198, 154, 114, 230, 57, 250, 135, 97, 46, 226, 198, 151, 70, 162, 185, 142, 94,54, 145, 190, 104, 233, 166, 159, 190, 8, 196, 172, 191, 220, 186, 38, 255, 24, 150, 9, 219, 191, 215, 93, 243, 165, 164, 5, 119, 26, 234, 12, 7, 114, 60, 103, 205, 101, 61, 70, 205, 251, 148, 246, 243, 62, 114, 28, 130, 250, 68, 135, 68, 242, 69, 33, 19, 41, 66, 221, 33, 30, 83, 227, 103, 194, 77, 239, 91, 22, 15, 96, 51, 90, 150, 71, 211, 103, 79, 109, 116, 213, 253, 217, 157, 163, 131, 82, 167, 137, 222, 207, 145, 45, 253, 165, 228, 95, 250, 147, 46, 223, 7, 90, 126, 115,233, 71, 44, 166, 249, 170, 240, 33, 71, 83, 129, 128, 153, 51, 35, 125, 168, 118, 72, 172, 143, 7, 234, 169, 92, 241, 41, 42, 127, 34, 52, 94, 175, 234, 186, 203, 32, 170, 138, 31, 250, 4, 154, 43, 163, 232, 206, 39, 136, 251, 170, 190, 135, 43, 175, 241, 5, 74, 95, 77, 44, 119, 159, 225, 252, 0, 127, 79, 73, 25, 69, 254, 244, 87, 23, 240, 17, 228, 128, 211, 131, 224, 118, 152, 65, 14, 120, 224, 131, 31, 250, 184, 71, 59, 198, 17, 141, 91, 77, 132, 15, 217, 104, 135, 5, 239, 225, 14, 111, 72, 196, 33, 187, 232, 144, 67, 84, 18, 157, 31, 160, 176, 52, 41, 145, 12, 69, 150, 65, 193, 198, 232, 131, 30, 232, 224, 134, 246, 8, 114, 6, 107, 172, 227, 30, 250, 192, 96, 58, 176, 65, 188, 168, 96, 163, 130, 250, 152, 135, 57, 108, 116, 11, 118, 17, 228, 131, 33, 228, 199, 8, 75, 56, 17, 23, 22, 112, 32, 43, 180, 9, 207, 62, 71, 32, 23,186, 239, 132, 77, 4, 201, 19, 69, 72, 66, 19, 18, 164, 139, 17, 68, 99, 26, 213, 184, 70, 54, 182, 209, 141, 111, 132,99, 28, 229, 56, 71, 58, 214, 209, 142, 119, 196, 99, 30, 245, 184, 71, 62, 246, 209, 143, 127, 4, 100, 32, 5, 57, 72, 66, 22, 210, 144, 135, 68, 100, 34, 21, 185, 72, 70, 54, 210, 145, 143, 132, 100, 36, 37, 57, 73, 74, 86, 210, 146, 151,196, 100, 38, 53, 185, 73, 78, 118, 210, 147, 159, 4, 101, 40, 69, 57, 74, 82, 150, 210, 148, 167, 68, 101, 42, 85, 185, 74, 86, 182, 242, 37, 74, 128, 165, 43, 101, 73, 201, 88, 14, 4, 150, 183, 172, 165, 64, 112, 153, 203, 93, 42, 1, 10,179, 4, 230, 35, 149, 96, 128, 24, 92, 58, 228, 150, 63, 200, 101, 48, 149, 185, 76, 102, 54, 211, 153, 207, 132, 102, 52, 165, 57, 77, 106, 86, 211, 154, 215, 196, 102, 54, 181, 185, 77, 110, 118, 211, 155, 223, 4, 103, 56, 197, 57, 78, 114, 150, 211, 156, 231, 68, 103, 58, 213, 185, 78, 118, 182, 211, 157, 239, 132, 103, 60, 229, 57, 79, 122, 214, 211, 158, 247, 196, 103, 62, 245, 185, 79, 126, 246, 211, 159, 255, 4, 104, 64, 5, 58, 80, 130, 22, 180, 158, 1, 1, 0, 59) 313 | 314 | 315 | # SaveImageButton ============================================================ 316 | $SyncHash.SaveImageButton = New-Object System.Windows.Forms.Button 317 | $SyncHash.SaveImageButton.Location = New-Object System.Drawing.Size(20,230) 318 | $SyncHash.SaveImageButton.Size = New-Object System.Drawing.Size(80,22) 319 | $SyncHash.SaveImageButton.Text = "Save Image" 320 | $SyncHash.SaveImageButton.Margin = 10 321 | $SyncHash.SaveImageButton.Enabled = $false 322 | $SyncHash.SaveImageButton.Add_Click( 323 | { 324 | #SAVE IMAGE 325 | $img = $SyncHash.PictureBox.Image 326 | SaveImageFile -bmp $img 327 | }) 328 | 329 | 330 | $SyncHash.RecordingGIF = $false 331 | 332 | # RecordGifButton button ============================================================ 333 | $SyncHash.RecordGifButton = New-Object System.Windows.Forms.Button 334 | $SyncHash.RecordGifButton.Location = New-Object System.Drawing.Size(200,230) 335 | $SyncHash.RecordGifButton.Size = New-Object System.Drawing.Size(80,22) 336 | $SyncHash.RecordGifButton.Text = "Record GIF" 337 | #$SyncHash.RecordGifButton.Margin = 10 338 | $SyncHash.RecordGifButton.ForeColor = "green" 339 | $SyncHash.RecordGifButton.Enabled = $false 340 | #$SyncHash.RecordGifButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 341 | $SyncHash.RecordGifButton.Add_Click( 342 | { 343 | Write-Host "INFO: Recording GIF" -foreground yellow 344 | $SyncHash.RecordGifButton.Enabled = $false 345 | $SyncHash.SaveImageButton.Enabled = $false 346 | $SyncHash.StopRecordGifButton.Enabled = $true 347 | 348 | #SAVE IMAGE 349 | $imgArray = @() 350 | 351 | $SyncHash.RecordingGIF = $true 352 | While ($SyncHash.RecordingGIF) 353 | { 354 | [System.Drawing.Image]$imageObject = $SyncHash.PictureBox.Image 355 | $imgArray += $imageObject 356 | [System.Windows.Forms.Application]::DoEvents() 357 | Start-Sleep -Milliseconds 500 358 | [System.Windows.Forms.Application]::DoEvents() 359 | 360 | } 361 | 362 | $SyncHash.RecordGifButton.Enabled = $true 363 | $SyncHash.SaveImageButton.Enabled = $true 364 | $Script:ImageArrayResult = $imgArray 365 | $SyncHash.form.Close() 366 | }) 367 | 368 | # StopRecordGifButton ============================================================ 369 | $SyncHash.StopRecordGifButton = New-Object System.Windows.Forms.Button 370 | $SyncHash.StopRecordGifButton.Location = New-Object System.Drawing.Size(290,230) 371 | $SyncHash.StopRecordGifButton.Size = New-Object System.Drawing.Size(80,22) 372 | $SyncHash.StopRecordGifButton.Text = "Stop Record" 373 | $SyncHash.StopRecordGifButton.Enabled = $false 374 | $SyncHash.StopRecordGifButton.ForeColor = "red" 375 | $SyncHash.StopRecordGifButton.Add_Click( 376 | { 377 | Write-Host "INFO: Stop Recording GIF" -foreground yellow 378 | $SyncHash.RecordingGIF = $false 379 | $SyncHash.StopRecordGifButton.Enabled = $false 380 | }) 381 | 382 | $SyncHash.ImageWidth = 300 383 | $SyncHash.ImageHeight = 300 384 | 385 | # PictureBox ============================================================ 386 | $SyncHash.PictureBox = new-object Windows.Forms.PictureBox 387 | $SyncHash.PictureBox.Location = New-Object System.Drawing.Size(10,10) 388 | $SyncHash.PictureBox.width = 0 389 | $SyncHash.PictureBox.height = 0 390 | $SyncHash.PictureBox.BorderStyle = "FixedSingle" 391 | $SyncHash.PictureBox.sizemode = "Autosize" 392 | $SyncHash.PictureBox.Margin = 10 393 | $SyncHash.PictureBox.WaitOnLoad = $true 394 | $SyncHash.PictureBox.Image = $SyncHash.connectingImage 395 | 396 | $SyncHash.PictureBox.Add_SizeChanged( 397 | { 398 | if($SyncHash.screenConnected) 399 | { 400 | if($SyncHash.ImageHeight -gt 700) 401 | { 402 | $SyncHash.PictureBox.sizemode = "StretchImage" 403 | $SyncHash.PictureBox.width = ($SyncHash.ImageWidth / 2) 404 | $SyncHash.PictureBox.height = ($SyncHash.ImageHeight / 2) 405 | 406 | if($SyncHash.form -ne $null) 407 | { 408 | $SyncHash.form.Height = ($SyncHash.ImageHeight / 2) + 60 409 | $SyncHash.form.Width = ($SyncHash.ImageWidth / 2) + 40 410 | $SyncHash.form.Refresh() 411 | [System.Windows.Forms.Application]::DoEvents() 412 | } 413 | } 414 | else 415 | { 416 | $SyncHash.form.Refresh() 417 | [System.Windows.Forms.Application]::DoEvents() 418 | } 419 | } 420 | elseif(!$SyncHash.screenConnected) 421 | { 422 | $SyncHash.PictureBox.sizemode = "Autosize" 423 | } 424 | 425 | $width = $SyncHash.PictureBox.Width 426 | $height = $SyncHash.PictureBox.Height 427 | $SyncHash.SaveImageButton.Location = New-Object System.Drawing.Size(20,($height + 20)) 428 | $SyncHash.RecordGifButton.Location = New-Object System.Drawing.Size(($width - 150),($height + 20)) 429 | $SyncHash.StopRecordGifButton.Location = New-Object System.Drawing.Size(($width - 70),($height + 20)) 430 | 431 | $SyncHash.form.Refresh() 432 | [System.Windows.Forms.Application]::DoEvents() 433 | }) 434 | 435 | $SyncHash.PictureBox.Add_MouseDown( 436 | { 437 | #$script:startX = $_.X 438 | #$script:startY = $_.Y 439 | }) 440 | 441 | $SyncHash.PictureBox.Add_MouseUp( 442 | { 443 | #$X = $_.X 444 | #$Y = $_.Y 445 | }) 446 | 447 | 448 | 449 | 450 | # Create the form 451 | $SyncHash.form = New-Object System.Windows.Forms.Form 452 | $SyncHash.form.Text = "Screen" 453 | $SyncHash.form.Size = New-Object System.Drawing.Size(100,100) 454 | $SyncHash.form.FormBorderStyle = "FixedSingle" 455 | $SyncHash.form.StartPosition = "CenterScreen" 456 | $SyncHash.form.AutoSizeMode = "GrowAndShrink" 457 | $SyncHash.form.AutoSize = $True 458 | $SyncHash.form.Topmost = $True 459 | $SyncHash.form.MaximizeBox = $False 460 | $SyncHash.form.MinimizeBox = $False 461 | $SyncHash.form.tag = $null 462 | #$SyncHash.form.MaximumSize = New-Object System.Drawing.Size(500,370) 463 | #Myteamslab Icon 464 | [byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59) 465 | $ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length) 466 | $SyncHash.form.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon()) 467 | $SyncHash.form.ShowInTaskbar = $true 468 | 469 | $SyncHash.form.Add_Closing( 470 | { 471 | Write-Host "INFO: Closing window" -foreground yellow 472 | $SyncHash.boolWhile = $false 473 | }) 474 | 475 | 476 | # Add all of the controls to the form 477 | $SyncHash.form.Controls.Add($SyncHash.PictureBox) 478 | $SyncHash.form.Controls.Add($SyncHash.TextLabel) 479 | $SyncHash.form.Controls.Add($SyncHash.SaveImageButton) 480 | $SyncHash.form.Controls.Add($SyncHash.RecordGifButton) 481 | $SyncHash.form.Controls.Add($SyncHash.StopRecordGifButton) 482 | 483 | 484 | $runspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($Host) 485 | $runspace.Open() 486 | $runspace.SessionStateProxy.SetVariable('SyncHash',$SyncHash) 487 | $powershell = [System.Management.Automation.PowerShell]::Create() 488 | $powershell.Runspace = $runspace 489 | 490 | 491 | #THIS IS THE RUNSPACE CODE 492 | $powershell.AddScript({ 493 | 494 | [string]$theIPAddress = $SyncHash.IPAddress 495 | [string]$thePort = $SyncHash.Port 496 | [byte[]]$errorImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 66, 8, 18, 46, 15, 20, 51, 14, 17, 50, 14, 21, 74, 7, 17, 61, 11, 21, 75, 8, 11, 56, 13, 24, 62, 12, 17, 50, 15, 26, 44, 18, 15, 43, 18, 20, 61, 12, 27, 48, 17, 17, 57, 14, 20, 31, 22, 23, 65, 13, 13, 43, 19, 26, 90, 5, 21, 47, 18, 26, 55, 17, 14, 55, 17, 20, 60, 16, 16, 50, 19, 23, 71, 13, 17, 42, 22, 22, 40, 22, 30, 72, 13, 22, 46, 21, 23, 71, 13, 27, 32, 25, 29, 31, 26, 21, 36, 25, 16, 36, 24, 30, 38, 24, 26, 85, 10, 24, 30, 27, 26, 29, 27, 30, 36, 25, 35, 35, 26, 27, 40, 25, 23, 24, 29, 35, 27, 29, 26, 26, 29, 31, 43, 24, 28, 68, 17, 22, 45, 24, 24, 33, 27, 36, 68, 17, 26, 23, 31, 27, 37, 27, 24, 22, 31, 32, 35, 27, 32, 40, 26, 28, 28, 30, 28, 32, 29, 28, 31, 29, 32, 30, 30, 24, 36, 28, 28, 33, 29, 28, 26, 32, 24, 27, 31, 33, 40, 27, 33, 29, 31, 28, 30, 30, 37, 97, 11, 19, 32, 30, 33, 87, 14, 21, 35, 30, 24, 36, 29, 34, 25, 33, 29, 24, 33, 34, 82, 16, 23, 77, 18, 22, 30, 32, 29, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 82, 17, 31, 31, 33, 30, 30, 33, 35, 33, 33, 27, 99, 13, 27, 40, 31, 31, 96, 14, 32, 91, 17, 28, 45, 31, 33, 80, 21, 29, 34, 35, 33, 93, 19, 25, 122, 12, 38, 124, 13, 29, 109, 18, 32, 95, 22, 38, 87, 25,34, 38, 40, 37, 116, 16, 37, 117, 17, 30, 105, 23, 32, 99, 25, 34, 111, 21, 39, 105, 24, 37, 42, 44, 41, 45, 47, 45, 103, 30, 40, 141, 19, 39, 110, 29, 42, 131, 23, 39, 122, 25, 50, 124, 26, 47, 118, 29, 50, 132, 25, 47, 49, 51, 48, 157, 18, 42, 114, 33, 44, 128, 29, 40, 143, 24, 47, 121, 32, 47, 128, 30, 45, 52, 54, 51, 152, 26, 46, 160, 24, 50, 218, 6, 56, 55, 57, 54, 218, 8, 51, 132, 35, 53, 154, 29, 52, 57, 59, 57, 140, 34, 52, 210, 15, 47, 220, 12, 46, 209, 15, 52, 135,38, 55, 165, 29, 52, 220, 12, 52, 219, 12, 57, 158, 32, 45, 137, 39, 51, 152, 36, 53, 221, 15, 53, 62, 64, 61, 143, 40,50, 168, 33, 49, 211, 19, 59, 221, 16, 58, 167, 33, 59, 212, 21, 49, 212, 21, 54, 176, 32, 59, 211, 21, 64, 203, 25, 55, 148, 42, 57, 223, 19, 54, 214, 23, 44, 162, 38, 58, 205, 26, 45, 203, 26, 61, 223, 20, 59, 214, 24, 50, 205, 27, 51, 214, 24, 55, 196, 30, 53, 194, 30, 68, 171, 38, 64, 180, 36, 56, 196, 31, 58, 215, 25, 61, 163, 41, 65, 179, 36, 66, 188,34, 60, 187, 34, 65, 69, 71, 68, 206, 30, 58, 174, 40, 59, 205, 30, 68, 197, 33, 64, 160, 45, 59, 190, 36, 56, 182, 39,63, 168, 44, 62, 189, 37, 71, 207, 33, 64, 73, 75, 72, 192, 39, 63, 191, 39, 68, 169, 47, 58, 77, 79, 77, 213, 40, 63, 215, 41, 63, 81, 83, 81, 215, 43, 70, 86, 88, 85, 215, 53, 72, 90, 92, 89, 95, 97, 94, 216, 65, 81, 100, 103, 100, 104, 106, 103, 109, 111, 108, 114, 116, 113, 116, 119, 116, 120, 122, 120, 123, 126, 123, 130, 132, 129, 134, 136, 133, 137, 139, 136, 142, 144, 141, 222, 123, 130, 147, 149, 146, 222, 130, 134, 150, 152, 149, 156, 158, 155, 226, 141, 147, 162, 164, 161, 227, 148, 152, 166, 168, 165, 170, 173, 170, 229, 156, 157, 229, 158, 165, 175, 177, 174, 230, 165, 170, 179, 182, 179, 231, 173, 175, 185, 187, 184, 235, 177, 179, 188, 191, 187, 193, 195, 192, 198, 200, 197, 202, 204, 201, 206, 208, 205, 239, 202, 203, 210, 212, 209, 214, 216, 213, 242, 213, 212, 219, 221, 218, 244, 217, 221, 222, 224, 221, 225, 227, 224, 243, 223, 225, 230, 232, 229, 249, 229, 231, 246, 233, 233, 234, 237, 233, 238, 240, 237, 250, 237, 238, 247, 241, 240, 241, 244, 240, 246, 248, 245, 252, 247, 246, 249, 251, 248, 255, 251, 250, 251, 253, 250, 255, 253, 251, 253, 255, 252, 30, 30, 30, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 127, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 238, 216, 33, 208, 136, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 31, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57,147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 17, 7, 14, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3, 47, 84, 76, 184, 177, 99, 177, 103, 149, 8, 84, 193, 83, 34, 221, 131, 74, 36, 31, 100, 60, 80, 133, 231, 129, 66, 132, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 86, 18, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 247, 143, 214, 174, 97, 255, 45, 232, 153, 242, 15, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190, 188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 169, 128, 145, 103, 49, 80, 54, 145, 14, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 59, 20, 151, 218, 132, 42, 56, 152, 22, 67, 192, 21, 180, 130, 131, 26,209, 246, 87, 113, 34, 138, 136, 3, 13, 129, 89, 116, 28, 106, 47, 250, 85, 66, 9, 76, 76, 164, 2, 20, 178, 249, 133, 195, 10, 72, 70, 17, 197, 111, 2, 41, 49, 209, 107, 158, 173, 16, 5, 20, 74, 84, 136, 20, 142, 70, 178, 84, 35, 129, 59, 208, 128, 227, 10, 71, 232, 248, 219, 144, 80, 172, 80, 130, 16, 76, 48, 145, 156, 100, 36, 200, 80, 131, 8, 25, 100, 192, 193, 5, 23, 112, 96, 103, 6, 46, 176, 128, 66, 13, 58, 16, 81, 162, 103, 74, 100, 193, 196, 145, 42, 56, 65, 229, 14,70, 102, 185, 37, 132, 43, 33, 249, 226, 14, 58, 80, 241, 155, 18, 76, 20, 225, 65, 137, 49, 100, 234, 132, 10, 15, 44,32, 0, 2, 24, 140, 48, 68, 16, 65, 76, 49, 133, 4, 67, 140, 128, 129, 5, 13, 100, 240, 65, 14, 254, 60, 40, 33, 225, 14, 63, 70, 145, 25, 141, 21, 33, 233, 165, 130, 139, 10, 136, 164, 95, 33, 156, 144, 33, 9, 39, 80, 177, 3, 17, 84, 160, 224, 105, 11, 95, 144, 97, 135, 34, 152, 196, 162, 139, 43, 212, 82, 75, 11, 45, 152, 220, 49, 135, 23, 88, 56, 32, 192,2, 120, 242, 137, 168, 10, 37, 76, 150, 3, 172, 49, 24, 177, 130, 151, 48, 246, 58, 96, 143, 95, 90, 184, 195, 7, 50, 44, 224, 192, 8, 97, 252, 81, 9, 44, 176, 152, 98, 138, 40, 0, 95, 114, 73, 43, 160, 8, 44, 138, 191, 176, 140, 178, 138,36, 117, 148, 49, 66, 11, 2, 160, 240, 193, 68, 66, 32, 41, 217, 185, 57, 252, 176, 46, 142, 238, 214, 184, 130, 154, 43, 168, 144, 131, 12, 10, 80, 176, 1, 25, 133, 160, 178, 74, 39, 167, 32, 194, 200, 203, 140, 132, 18, 10, 37, 147, 12, 210, 71, 31, 159, 32, 162, 51, 34, 145, 156, 98, 9, 44, 181, 160, 18, 136, 25, 88, 80, 16, 0, 11, 59, 36, 73, 209, 185, 2, 41, 218, 177, 127, 126, 81, 228, 146, 153, 43, 100, 65, 132, 2, 67, 176, 241, 136, 42, 253, 94, 2, 73, 40, 58, 223, 252, 201, 36, 100, 127, 146, 9, 35, 56, 147, 61, 201, 216, 136, 132, 66, 136, 192, 166, 224, 98, 8, 27, 67, 56, 112, 130,18, 47, 238, 250, 244, 254, 131, 81, 35, 69, 145, 17, 42, 80, 81, 67, 0, 22, 164, 17, 139, 42, 160, 124, 66, 137, 204, 148, 52, 174, 243, 39, 144, 43, 254, 137, 216, 145, 87, 14, 121, 31, 103, 83, 2, 9, 44, 155, 148, 209, 66, 0, 34, 176, 219, 247, 222, 1, 150, 128, 131, 16, 43, 73, 70, 196, 2, 27, 148, 241, 199, 44, 166, 92, 82, 182, 229, 59, 135, 173, 115,227, 184, 83, 2, 121, 217, 55, 247, 30, 10, 40, 157, 44, 28, 70, 7, 28, 224, 93, 130, 151, 36, 236, 160, 25, 233, 252, 69, 97, 102, 197, 74, 60, 144, 129, 3, 72, 208, 225, 202, 43, 132, 16, 18, 74, 229, 189, 83, 94, 59, 34, 185, 79, 142, 179, 229, 189, 79, 162, 51, 33, 157, 204, 18, 200, 19, 160, 123, 233, 193, 18, 37, 50, 223, 95, 148, 96, 170, 112, 5, 2, 98, 60, 34, 203, 37, 130, 32, 226, 73, 31, 59, 139, 220, 205, 6, 97, 51, 0, 130, 175, 113, 226, 235, 158, 226, 114, 87, 187, 198, 189, 205, 20, 164, 112, 3, 0, 92, 160, 132, 35, 65, 65, 67, 242, 203, 143, 113, 178, 176, 3, 22, 0, 224, 14, 170, 184, 4, 33, 62, 129, 54, 3, 6, 240, 114, 4, 236, 221, 1, 19, 216, 61, 156, 229, 206, 113, 50, 27, 219, 36, 40, 209, 138, 74, 4, 2, 1, 25, 40, 145, 148, 50, 168, 159, 211, 124, 32, 3, 254, 27, 248, 3, 44, 46, 161, 59, 77, 12, 34, 19, 110, 67, 4, 0, 95, 136, 136, 203, 81, 174, 133, 80, 188, 29, 36, 32, 65, 137, 176, 165, 141, 19, 173, 80, 69, 32, 8, 224, 130, 38, 241, 48, 63, 19, 57, 193, 224, 48, 128, 9, 88, 52, 110, 109, 189, 91, 156, 238, 20, 119, 192, 23, 58, 145, 114, 144, 211, 93, 247, 218, 56, 51, 204, 17, 112, 109, 161, 184, 4, 46, 22, 145, 4, 14, 124, 128, 72, 95, 196, 79, 9, 124, 16, 0, 36, 108, 66, 22, 137, 27, 219, 228, 148, 72, 54, 4, 182, 112, 108, 12, 84, 162, 11, 207, 136, 70, 202, 53, 78, 16,147, 24, 224, 217, 62, 33, 8, 183, 193, 2, 21, 18, 184, 0, 175, 2, 105, 30, 223, 172, 224, 7, 84, 8, 192, 8, 22, 97, 10, 66, 240, 110, 103, 105, 67, 160, 248, 108, 6, 73, 220, 217, 110, 129, 106, 123, 35, 46, 89, 216, 187, 201, 109, 238, 15, 35, 104, 64, 13, 182, 50, 74, 82, 102, 231, 70, 187, 34, 65, 22, 126, 131, 168, 40, 236, 0, 5, 24, 216, 196, 16, 221,70, 136, 155, 201, 50, 124, 185, 124, 161, 54, 113, 87, 182, 74, 46, 145, 18, 105, 116, 100, 31, 94, 150, 71, 89, 36, 34, 8, 1, 248, 211, 5, 37, 36, 58, 99, 114, 39, 111, 187, 146, 85, 12, 126, 176, 4, 28, 148, 0, 5, 16, 254, 112, 132, 25,41, 145, 189, 80, 88, 147, 137, 77, 204, 101, 27, 183, 233, 70, 1, 254, 83, 108, 252, 36, 4, 56, 25, 113, 182, 62, 188,77, 20, 121, 192, 0, 11, 148, 105, 28, 118, 30, 233, 148, 76, 115, 167, 117, 18, 245, 23, 40, 104, 138, 88, 84, 112, 0,27, 112, 1, 137, 182, 105, 79, 124, 146, 203, 25, 248, 148, 88, 64, 130, 186, 212, 165, 113, 228, 167, 35, 75, 56, 9, 80, 100, 241, 14, 5, 168, 1, 185, 68, 227, 4, 164, 248, 5, 163, 25, 211, 40, 117, 16, 245, 83, 129, 196, 192, 9, 71, 56, 130, 10, 106, 112, 129, 42, 172, 2, 18, 132, 56, 160, 36, 225, 120, 59, 37, 50, 226, 165, 88, 205, 170, 56, 203, 55, 9, 81, 144, 162, 12, 23, 32, 1, 199, 122, 250, 3, 35, 173, 32, 163, 66, 149, 14, 81, 145, 100, 212, 24, 28, 97, 6, 78, 112,1, 1, 54, 209, 137, 243, 89, 81, 129, 139, 212, 170, 94, 181, 218, 203, 151, 245, 129, 18, 157, 160, 197, 6, 88, 80, 132, 18, 40, 1, 93, 47, 122, 1, 13, 96, 149, 86, 234, 20, 149, 34, 74, 152, 65, 20, 12, 91, 1, 54, 192, 162, 164, 73, 132,227, 19, 255, 186, 215, 206, 18, 116, 134, 161, 200, 100, 38, 206, 22, 10, 88, 184, 161, 0, 33, 144, 16, 172, 120, 96, 4, 100, 254, 128, 7, 141, 141, 254, 142, 69, 30, 75, 145, 40, 220, 104, 1, 86, 200, 5, 33, 160, 170, 189, 76, 220, 76, 109, 255, 92, 160, 103, 135, 155, 187, 126, 46, 20, 102, 151, 72, 69, 21, 50, 80, 33, 41, 240, 0, 182, 61, 138, 173, 116,102, 123, 36, 191, 17, 149, 5, 27, 8, 196, 37, 24, 145, 61, 237, 97, 78, 109, 153, 228, 44, 113, 199, 251, 194, 208, 134, 183, 15, 131, 8, 69, 39, 254, 224, 128, 137, 97, 80, 186, 213, 113, 212, 106, 104, 112, 128, 45, 228, 2, 20, 227, 235, 94, 46, 255, 73, 222, 254, 106, 147, 132, 14, 93, 69, 26, 22, 144, 17, 175, 176, 21, 190, 67, 133, 84, 13, 58, 32, 137, 78, 108, 239, 145, 179, 19, 175, 127, 39, 140, 187, 62, 152, 207, 20, 129, 216, 128, 8, 242, 246, 3, 166, 201, 23, 193, 203, 105, 215, 100, 116, 176, 0, 50, 232, 54, 180, 10, 196, 29, 228, 226, 225, 143, 22, 187, 248, 197, 48, 142, 177, 140, 103, 44, 99, 121, 192, 244, 19, 121, 84, 133, 24, 2, 80, 65, 26, 116, 152, 8, 26, 59, 48, 136, 113, 195, 153, 192, 212, 0, 1, 138, 48, 227, 218, 80, 26, 211, 198, 177, 152, 198, 80, 142, 178, 148, 109, 236, 210, 80, 8, 194, 166, 122, 40, 64, 151, 104, 176, 131, 28, 80, 228, 195, 67, 190, 77, 96, 152, 134, 35, 37, 100, 64, 11, 180, 48, 5, 254, 138, 101, 10, 206, 73, 82, 226, 201, 82, 142, 179, 156, 91, 76, 101, 130, 90, 217, 124, 170, 120, 2, 10, 216, 53, 21, 17, 135, 121,52, 99, 134, 173, 151, 126, 16, 128, 145, 38, 18, 124, 10, 109, 179, 112, 225, 60, 231, 70, 211, 184, 206, 219, 28, 161, 217, 76, 49, 7, 97, 58, 173, 44, 127, 118, 140, 95, 86, 27, 3, 191, 168, 192, 1, 134, 128, 68, 94, 109, 201, 223, 55, 183, 184, 30, 20, 206, 170, 60, 232, 140, 85, 37, 102, 226, 18, 152, 104, 65, 13, 86, 0, 4, 32, 224, 128, 67, 153, 38, 204, 173, 207, 101, 17, 32, 208, 64, 6, 88, 80, 5, 34, 6, 193, 136, 182, 57, 46, 156, 78, 62, 117, 170, 177, 186, 106, 127, 64, 186, 188, 146, 100, 68, 43, 72, 161, 5, 23, 28, 161, 71, 184, 206, 181, 99, 66, 3, 132, 19, 52, 96, 12, 176, 144,36, 34, 186, 219, 230, 23, 62, 25, 213, 4, 253, 133, 103, 213, 77, 208, 102, 63, 251, 133, 56, 3, 32, 33, 76, 193, 133,11, 168, 235, 148, 59, 32, 129, 182, 113, 163, 43, 26, 0, 65, 4, 22, 160, 131, 41, 2, 56, 137, 236, 149, 59, 119, 231, 38, 40, 52, 236, 81, 141, 189, 86, 195, 30, 208, 104, 55, 171, 93, 138, 179, 153, 133, 162, 21, 122, 112, 128, 134, 74, 180, 188, 125, 143, 166, 223, 56, 16, 1, 6, 254, 28, 49, 240, 199, 85, 113, 103, 218, 76, 184, 54, 161, 145, 15, 127, 236, 163, 225, 89, 189, 198, 62, 252, 145, 143, 136, 107, 211, 221, 90, 149, 25, 36, 92, 209, 2, 125, 95, 228, 56, 30, 47,205, 175, 252, 146, 129, 33, 232, 194, 193, 222, 51, 96, 202, 149, 173, 77, 118, 184, 120, 31, 215, 192, 170, 204, 93, 252, 142, 109, 226, 252, 165, 51, 59, 224, 44, 176, 112, 183, 206, 4, 93, 57, 56, 184, 64, 16, 92, 113, 9, 127, 90, 56, 129, 3, 77, 182, 63, 208, 253, 66, 98, 188, 227, 233, 218, 112, 233, 54, 102, 222, 226, 120, 16, 195, 234, 19, 119, 233,236, 38, 161, 138, 47, 136, 192, 43, 239, 253, 250, 99, 194, 46, 134, 16, 154, 125, 201, 55, 75, 187, 169, 215, 78, 208, 96, 188, 189, 197, 251, 216, 198, 54, 231, 78, 245, 187, 227, 221, 217, 88, 229, 93, 31, 96, 145, 134, 8, 76, 165, 227, 130, 31, 141, 10, 42, 160, 134, 216, 73, 50, 166, 183, 51, 55, 211, 183, 25, 12, 167, 67, 190, 27, 47, 236, 6, 221, 253, 241, 142, 96, 184, 244, 234, 48, 93, 219, 203, 96, 241, 134, 1, 232, 32, 168, 160, 15, 125, 97, 58, 227, 128, 60, 136, 240, 244, 11, 84, 252, 226, 217, 190, 205, 95, 168, 227, 197, 223, 192, 221, 55, 94, 172, 14, 219, 223, 62, 239, 4, 149, 33, 67, 59, 254, 97, 135, 3, 212, 32, 99, 42, 144, 149, 240, 27, 67, 145, 163, 254, 192, 1, 122, 104, 69, 21, 17, 122, 77, 213, 51, 254, 165, 188, 120, 190, 139, 195, 65, 137, 112, 80, 159, 23, 204, 198, 254, 54, 27, 137, 222, 78, 20, 194, 251, 57, 64, 36, 129, 55, 126, 110, 177, 17, 230, 7, 106, 167, 208, 56, 222, 211, 68, 194, 133, 59, 42, 247, 82, 167,112, 14, 47, 246, 120, 45, 166, 14, 248, 151, 127, 152, 247, 82, 144, 212, 127, 133, 80, 0, 40, 144, 3, 146, 49, 128, 4, 200, 22, 27, 97, 4, 61, 133, 128, 139, 83, 57, 86, 180, 116, 239, 135, 85, 161, 32, 129, 49, 118, 14, 9, 168, 106, 250, 247, 95, 138, 51, 78, 254, 231, 129, 32, 200, 36, 35, 120, 23, 83, 97, 4, 22, 1, 106, 80, 21, 67, 42, 37, 73, 44, 200,124, 88, 5, 131, 46, 118, 14, 51, 163, 85, 184, 151, 125, 146, 195, 8, 166, 208, 129, 31, 40, 36, 61, 232, 131, 25, 1, 132, 159, 150, 126, 218, 51, 51, 57, 227, 68, 71, 184, 87, 74, 216, 98, 76, 168, 87, 79, 184, 77, 147, 244, 9, 83, 168, 131, 43, 33, 130, 87, 8, 22, 46, 161, 133, 21, 144, 7, 173, 144, 104, 107, 36, 71, 18, 166, 118, 72, 104, 103, 99, 184, 132, 77, 136, 129, 239, 6, 111, 11, 164, 134, 126, 192, 0, 223, 135, 105, 254, 111, 8, 25, 128, 55, 135, 34, 36, 83, 187, 19, 94, 97, 136, 85, 17, 56, 129, 247, 71, 131, 25, 72, 113, 156, 245, 9, 184, 224, 6, 134, 232, 101, 136, 114, 74, 137, 104, 23, 72, 50, 122, 165, 167, 126, 222, 37, 67, 223, 132, 112, 171, 71, 80, 241, 247, 98, 244, 103, 127, 46, 102, 129, 128, 216, 106, 153, 136, 11, 189, 167, 3, 126, 19, 138, 110, 129, 111, 68, 21, 118, 65, 80, 10, 173, 208, 73, 186, 83, 97, 169, 168, 135, 47, 229, 124, 208, 39, 125, 212, 103, 125, 18, 119, 137, 4, 165, 51, 86, 198, 8, 170, 64, 6, 17, 96, 2, 64, 80, 2, 59, 224, 81, 186, 184, 22, 71, 112, 17, 70, 114, 1, 90, 160, 11, 151, 128, 99, 240, 86, 106, 203, 231, 82, 173, 247, 116, 176, 151, 59, 178, 71, 117, 204, 120, 115, 53, 200, 68, 218, 179, 54, 170, 128, 5, 34, 240, 2, 138, 181, 3, 78, 48, 79, 219, 72, 130, 61, 194, 1, 72, 16, 11, 162, 160, 68, 77, 120, 87, 238, 183, 135, 141, 227, 120, 79, 39, 121, 218, 212, 142, 45, 246, 14, 150, 7, 143, 206, 184, 77, 110, 227, 79, 130, 80, 10, 45, 176, 3, 66, 224, 107, 37, 34, 38, 253, 56, 22, 191, 194, 2, 72, 102, 10, 236, 247, 56, 200, 118, 142, 218, 228, 118, 112, 39, 119, 179, 103, 119, 151, 23, 136, 185, 227, 254, 54, 139, 3, 10, 134, 224, 0, 63, 32, 4, 183, 22, 63, 31, 57, 22, 25, 241, 34, 131, 51, 7, 176, 208, 7, 154, 48, 54, 219, 51, 136, 18, 246, 128, 185, 227, 122, 46, 23, 117, 47, 53, 117, 15, 249, 146, 26, 56, 57, 5, 215, 9, 117, 32, 0, 78, 240, 40, 197, 180, 147, 166, 1, 34, 58, 32, 2, 95, 144, 11, 136, 48, 148, 230, 211, 128, 147, 227, 128, 171, 136, 59, 44, 231, 114, 48, 39, 117, 51, 151, 15, 210, 0, 149, 48, 53, 78, 147, 112, 9, 171, 16, 6, 11, 176, 41, 198, 129, 147, 90, 25, 22, 83, 241, 40, 48, 80, 9, 161, 165, 9, 189, 20, 62, 102, 217, 130, 47, 180, 112, 107, 153, 85, 15, 103, 115, 18, 9, 147, 107, 52, 78, 125, 208, 9, 155, 48, 2, 25, 32, 43, 183, 194, 4, 229, 178, 151, 95, 145, 133, 65, 54, 0, 127, 208, 9, 130, 32, 152, 150, 68, 73, 198, 152, 110, 235, 118, 125, 19, 153, 59, 55, 83, 66, 166, 224,7, 5, 32, 2, 146, 1, 5, 60, 160, 2, 152, 233, 103, 154, 137, 21, 82, 50, 1, 97, 112, 95, 171, 233, 68, 138, 163, 54, 40, 185, 108, 205, 8, 147, 171, 57, 9, 96, 51, 10, 94, 176, 0, 184, 216, 97, 77, 19, 34, 183, 249, 20, 160, 40, 16, 43, 16, 1, 35, 240, 7, 151, 112, 118, 120, 152, 54, 101, 254, 131, 148, 194, 249, 66, 103, 40, 75, 214, 68, 8, 150, 32, 9, 45,32, 3, 10, 34, 100, 207, 121, 21, 221, 56, 16, 52, 160, 1, 7, 80, 6, 185, 192, 79, 51, 212, 102, 110, 182, 120, 142, 118, 159, 49, 22, 136, 141, 4, 57, 144, 144, 11, 112, 48, 0, 78, 226, 34, 233, 153, 21, 96, 66, 16, 58, 80, 3, 46, 176, 1,13, 6, 9, 51, 148, 64, 70, 201, 104, 248, 25, 161, 250, 105, 156, 161, 213, 9, 168, 48, 2, 44, 144, 139, 101, 101, 155,3, 218, 20, 31, 230, 101, 58, 160, 3, 3, 208, 6, 169, 32, 59, 9, 164, 154, 125, 0, 161, 17, 122, 159, 142, 89, 112, 132, 144, 11, 118, 48, 0, 62, 144, 147, 205, 217, 161, 88, 113, 36, 195, 145, 3, 126, 178, 2, 26, 240, 4, 152, 96, 10, 6, 133, 162, 42, 186, 162, 141, 86, 103, 49, 245, 155, 132, 48, 109, 27, 80, 3, 37, 224, 76, 25, 115, 4, 182, 198, 156, 54, 10, 21, 102, 213, 97, 231, 178, 2, 38, 48, 1, 107, 96, 10, 131, 64, 54, 131, 73, 159, 201, 71, 51, 230, 211, 157, 113, 105, 64, 189, 3, 10, 184, 192, 6, 14, 160, 3, 82, 194, 52, 80, 250, 23, 65, 53, 165, 78, 81, 165, 24, 115, 4, 56, 16, 2, 0, 32, 9, 34, 228, 77, 41, 213, 128, 98, 154, 122, 100, 202, 77, 147, 19, 71, 254, 74, 164, 51, 146, 105, 0, 28, 160, 2,206, 3, 34, 81, 26, 167, 114, 10, 21, 79, 18, 3, 77, 112, 4, 58, 144, 0, 85, 64, 10, 160, 48, 8, 108, 4, 64, 50, 20, 57, 75, 6, 57, 169, 199, 75, 126, 74, 92, 192, 117, 118, 217, 163, 51, 150, 80, 11, 86, 160, 0, 50, 112, 147, 96, 178, 46,51, 250, 168, 79, 193, 153, 144, 162, 3, 85, 210, 4, 77, 176, 3, 17, 192, 0, 109, 32, 11, 130, 160, 61, 97, 243, 136, 228, 83, 159, 162, 42, 75, 150, 115, 172, 145, 131, 114, 251, 53, 8, 136, 6, 78, 144, 48, 10, 112, 80, 1, 231, 50, 36, 43, 48, 3, 43, 224, 3, 33, 144, 149, 178, 250, 19, 74, 81, 171, 28, 39, 33, 33, 16, 1, 27, 144, 7, 166, 64, 9, 253, 99, 62, 7, 228, 165, 143, 20, 62, 235, 186, 70, 200, 250, 174, 74, 39, 71, 104, 131, 54, 97, 99, 11, 129, 208, 2, 32, 192, 3, 57, 16, 126, 63, 112, 109, 131, 230, 145, 219, 42, 20, 221, 234, 173, 37, 50, 17, 36, 16, 0, 67, 176, 9, 106, 102, 62, 218, 67, 69, 217, 153, 98, 42, 134, 87, 238, 250, 174, 150, 51, 148, 38, 100, 85, 190, 149, 9, 224, 211, 10, 143, 128, 5,25, 64, 4, 60, 32, 5, 178, 130, 84, 209, 21, 176, 76, 161, 23, 23, 114, 2, 24, 162, 60, 77, 240, 254, 3, 184, 149, 10, 173, 48, 78, 194, 101, 85, 102, 202, 126, 224, 9, 71, 20, 139, 172, 101, 243, 61, 171, 233, 80, 129, 165, 5, 10, 144, 3,82, 32, 180, 178, 2, 176, 63, 103, 178, 111, 1, 19, 23, 130, 33, 42, 128, 171, 42, 112, 1, 93, 80, 9, 173, 128, 8, 141,68, 159, 156, 5, 177, 143, 217, 75, 57, 187, 181, 0, 196, 169, 153, 132, 62, 174, 96, 6, 2, 32, 3, 78, 146, 33, 226, 87, 16, 206, 137, 180, 55, 225, 19, 58, 2, 41, 152, 98, 4, 131, 116, 0, 102, 80, 9, 160, 224, 74, 149, 212, 70, 18, 171, 98, 44, 180, 181, 180, 99, 80, 98, 179, 54, 162, 176, 9, 107, 48, 0, 53, 64, 5, 58, 160, 178, 250, 6, 122, 55, 146, 182, 106, 91, 19, 37, 8, 132, 74, 144, 60, 24, 130, 55, 55, 162, 3, 7, 16, 6, 169, 32, 10, 156, 160, 9, 162, 217, 172, 14, 74, 150, 123, 203, 183, 201, 202, 128, 232, 69, 75, 96, 43, 182, 51, 234, 37, 92, 166, 2, 89, 144, 60, 4, 177, 184, 28, 218, 184, 142, 155, 133, 64, 232, 55, 43, 107, 41, 76, 32, 2, 3, 96, 6, 179, 32, 59, 252, 183, 75, 131, 122, 57, 55, 139, 179, 199, 10, 71, 142, 184, 59, 138, 100, 11, 146, 80, 6, 7, 32, 2, 69, 240, 83, 108, 229, 182, 63, 0, 132, 234, 226, 52, 178, 254, 27, 21, 48, 81, 187, 182, 171, 3, 15, 144, 52, 80, 176, 4, 2, 48, 5, 146, 176, 63, 40, 150, 9, 147, 208, 73,161, 117, 172, 89, 75, 188, 6, 101, 57, 186, 179, 54, 136, 240, 171, 121, 4, 11, 122, 96, 6, 12, 32, 2, 102, 53, 3, 73,229, 173, 211, 11, 132, 67, 167, 173, 215, 123, 18, 43, 146, 16, 42, 32, 5, 153, 178, 3, 34, 144, 0, 79, 0, 7, 149, 0, 9, 153, 64, 64, 156, 132, 73, 10, 165, 181, 131, 200, 100, 197, 203, 61, 84, 5, 62, 233, 227, 7, 88, 16, 0, 33, 64, 3, 37, 64, 2, 74, 144, 84, 251, 27, 162, 94, 97, 17, 217, 22, 192, 38, 49, 23, 7, 97, 4, 207, 197, 3, 78, 64, 2, 56, 169, 1,29, 16, 6, 179, 160, 126, 125, 32, 140, 140, 195, 167, 41, 197, 190, 195, 58, 62, 77, 4, 62, 155, 147, 10, 110, 0, 3, 25, 80, 40, 101, 75, 17, 73, 181, 2, 210, 187, 21, 42, 140, 19, 115, 145, 189, 46, 172, 175, 153, 177, 2, 41, 144, 187, 3, 128, 4, 129, 176, 10, 94, 147, 80, 137, 134, 87, 162, 251, 174, 96, 163, 94, 169, 16, 8, 94, 112, 0, 17, 64, 3, 74, 224, 4, 158, 40, 23, 23, 197, 196, 79, 60, 20, 124, 241, 131, 70, 96, 126, 148, 113, 4, 206, 19, 5, 36, 144, 1, 8, 208, 5,155, 176, 10, 254, 177, 83, 183, 192, 90, 66, 227, 19, 198, 220, 115, 113, 166, 144, 11, 203, 91, 0, 105, 76, 3, 162, 161, 175, 158, 104, 194, 43, 241, 198, 136, 24, 199, 150, 41, 25, 31, 18, 18, 181, 123, 25, 46, 33, 43, 59, 176, 4, 42, 160, 41, 80, 176, 3, 33, 192, 2, 23, 128, 0, 102, 176, 8, 136, 148, 61, 186, 87, 66, 71, 74, 177, 249, 21, 54, 151, 160, 10, 139, 48, 6, 8, 176, 0, 87, 64, 5, 194, 34, 16, 60, 144, 41, 72, 225, 34, 85, 202, 34, 215, 203, 175, 76, 66, 204, 32, 161, 189, 101, 225, 18, 126, 193, 101, 202, 243, 92, 18, 130, 147, 42, 112, 2, 23, 64, 0, 92, 32, 7, 165, 128, 11, 255, 210, 197, 19, 251, 195, 138, 227, 54, 112, 163, 10, 178, 240, 8, 98, 128, 4, 13, 208, 170, 51, 48, 43, 224, 103, 130, 1, 58, 189, 210, 25, 204, 11, 17, 124, 1, 187, 60, 240, 188, 182, 89, 9, 41, 46, 240, 41, 73, 96, 6, 129, 128, 10, 179, 0, 11, 157, 240, 53, 143, 52, 57, 48, 35, 196, 176, 48, 11, 155, 160, 8, 107, 144, 4, 22, 80, 1, 25, 176, 156, 26, 129, 18, 110, 24, 199, 78, 33, 33, 76, 85, 0, 35, 208, 5, 112, 176, 9, 149, 176, 10, 170, 224, 47, 30, 237, 209, 178, 160, 10, 170, 80, 9, 122, 80, 7, 93, 48, 2, 8, 16, 254, 0, 18, 211, 34, 18, 29, 29, 62, 226, 37, 53, 144, 1, 1, 32, 0, 14, 208,2, 88, 96, 5, 100, 176, 6, 115, 96, 7, 60, 61, 7, 107, 224, 5, 95, 128, 5, 45, 224, 0, 21, 80, 39, 124, 146, 38, 17, 221, 210, 33, 6, 4, 41, 144, 2, 73, 146, 25, 59, 32, 3, 40, 144, 1, 11, 64, 39, 7, 80, 0, 7, 48, 0, 224, 34, 3, 175, 34, 178, 205, 105, 189, 74, 13, 29, 142, 162, 36, 216, 38, 185, 33, 26, 162, 33, 160, 1, 26, 80, 3, 25, 146, 41, 36, 18, 26, 140, 27, 214, 203, 161, 36, 197, 113, 43, 77, 2, 5, 206, 3, 114, 21, 225, 4, 134, 34, 43, 36, 144, 60, 149, 44, 215, 202, 145, 111, 93, 182, 175, 148, 177, 198, 110, 93, 28, 181, 202, 180, 161, 188, 175, 24, 35, 216, 215, 65, 4, 126, 162, 60, 183, 82, 187, 175, 49, 192, 4, 145, 81, 44, 13, 217, 204, 17, 197, 202, 108, 86, 142, 242, 23, 75, 187, 18, 212, 203,217, 209, 113, 22, 28, 149, 218, 71, 114, 109, 67, 167, 186, 95, 66, 194, 166, 45, 214, 161, 125, 81, 137, 194, 191, 3,49, 116, 170, 29, 215, 177, 189, 219, 188, 221, 219, 190, 253, 219, 192, 29, 220, 194, 61, 220, 196, 93, 220, 198, 13, 22, 216, 208, 98, 237, 16, 219, 206, 48, 14, 238, 112, 15, 250, 160, 15, 247, 254, 224, 14, 228, 240, 12, 104, 64, 29, 214, 208, 98, 217, 128, 16, 229, 208, 98, 226, 240, 20, 183, 32, 103, 212, 224, 78, 207, 48, 15, 80, 118, 15, 222, 128, 7, 210, 65, 14, 45, 166, 12, 8, 1, 15, 45, 22, 13, 79, 17, 13, 114, 118, 12, 164, 196, 10, 233, 16, 103, 250, 160, 222, 209, 1, 223, 250, 0, 6, 99, 33, 14, 250, 189, 76, 95, 36, 12, 240, 221, 98, 244, 32, 14, 204, 32, 12, 120, 32, 12, 202, 64, 13, 229, 128, 15, 254, 0, 15, 210, 209, 8, 252, 224, 15, 203, 61, 22, 237, 208, 98, 207, 128, 96, 128, 96, 222, 254, 160, 15, 222, 16, 7, 8, 209, 8, 226, 64, 14, 210, 225, 12, 222, 61, 22, 103, 160, 15, 45, 198, 10, 8, 198, 222, 254, 128, 15, 205, 192, 17, 120, 64, 13, 233, 64, 15, 250, 128, 15, 240, 0, 14, 187, 112, 16, 2, 238, 15, 206, 80, 12, 224, 224,14, 248, 192, 15, 248, 208, 14, 29, 110, 16, 65, 62, 228, 69, 126, 228, 73, 190, 228, 8, 225, 12, 228, 48, 15, 248, 32,221, 232, 224, 12, 10, 65, 229, 86, 46, 221, 235, 192, 13, 192, 32, 16, 244, 61, 99, 252, 192, 223, 224, 192, 225, 6, 113, 227, 57, 190, 227, 61, 254, 227, 76, 222, 98, 78, 110, 228, 72, 174, 228, 28, 177, 12, 45, 70, 225, 14, 49, 14, 45, 86, 227, 254, 202, 80, 14, 58, 174, 15, 224, 32, 16, 122, 238, 15, 124, 238, 231, 209, 29, 232, 3, 161, 230, 58, 206, 227, 62, 126, 16, 131, 94, 232, 127, 142, 232, 217, 193, 12, 46, 38, 229, 15, 225, 12, 32, 14, 99, 247, 224, 222, 5, 177, 225, 254, 64, 14, 23, 30, 99, 214, 96, 16, 158, 14, 234, 50, 54, 234, 6, 97, 12, 235, 48, 99, 222, 112, 16, 202, 224, 233, 49, 166, 15, 183, 240, 3, 222, 64, 99, 243, 48, 16, 171, 238, 15, 110, 62, 16, 152, 46, 99, 155, 78, 234, 45, 102, 234, 162, 30, 17, 220, 16, 236, 15, 225, 14, 33, 110, 12, 249, 253, 98, 168, 142, 236, 250, 160, 236, 48, 134, 234, 63, 208, 235, 49, 246, 235, 5, 225, 236, 208, 206, 236, 219, 177, 236, 40, 30, 17, 217, 77, 99, 247, 0, 227, 3, 209, 226, 81, 118, 15, 0, 62, 238, 46, 126, 222, 231, 62, 16, 203, 32, 225, 52, 86, 227, 4, 17, 13, 233, 238, 235, 2, 97, 14, 52, 150,14, 2, 145, 5, 18, 126, 235, 4, 241, 237, 51, 22, 238, 4, 65, 238, 234, 14, 17, 232, 208, 98, 227, 221, 16, 113, 224, 226, 209, 29, 99, 246, 157, 240, 33, 62, 239, 46, 102, 223, 63, 224, 239, 190, 46, 238, 2, 225, 240, 11, 15, 99, 18, 143,29, 197, 208, 98, 250, 32, 12, 17, 49, 230, 254, 224, 14, 212, 32, 254, 12, 141, 208, 231, 46, 214, 234, 3, 161, 12, 47, 70, 15, 220, 96, 12, 128, 80, 12, 50, 238, 15, 27, 255, 3, 44, 239, 98, 46, 15, 243, 50, 31, 241, 4, 113, 12, 10, 111,14, 207, 80, 12, 120, 192, 10, 205, 224, 233, 232, 64, 16, 205, 16, 234, 243, 128, 13, 66, 127, 11, 200, 96, 13, 232, 112, 244, 2, 65, 238, 120, 110, 16, 199, 208, 98, 230, 16, 239, 46, 70, 242, 38, 143, 242, 45, 166, 242, 2, 113, 243, 8, 254, 242, 49, 63, 243, 53, 207, 16, 247, 208, 98, 195, 224, 16, 148, 238, 98, 240, 144, 13, 198, 112, 221, 3, 209, 246, 119, 14, 247, 114, 47, 230, 91, 95, 242, 39, 223, 221, 95, 79, 16, 116, 63, 225, 118, 223, 29, 201, 237, 15, 82, 255, 16, 187, 144, 246, 254, 32, 14, 4, 62, 16, 50, 158, 225, 2, 145, 13, 30, 159, 13, 119, 255, 3, 96, 128, 248, 203, 64, 16, 144, 31, 226, 146, 79, 16, 149, 223, 98, 151, 47, 16, 124, 0, 223, 240, 80, 12, 6, 1, 8, 46, 206, 239, 63, 192, 10, 136,111, 14, 36, 174, 16, 109, 63, 14, 8, 49, 248, 216, 48, 16, 135, 239, 221, 139, 47, 16, 141, 143, 249, 145, 63, 249, 157, 239, 15, 159, 223, 16, 195, 32, 103, 210, 94, 236, 51, 110, 13, 183, 63, 16, 196, 143, 15, 198, 111, 16, 181, 159, 248, 199, 254, 159, 251, 200, 223, 98, 202, 127, 252, 219, 81, 240, 254, 48, 251, 16, 17, 228, 89, 159, 234, 8, 78, 16, 246, 238, 15, 7, 127, 237, 45, 6, 242, 3, 241, 253, 225, 79, 16, 200, 238, 15, 228, 255, 3, 197, 142, 15, 97, 126, 16, 244, 224, 15, 247, 48, 16, 103, 238, 15, 235, 64, 253, 6, 65, 252, 150, 78, 16, 124, 143, 12, 3, 161, 253, 0, 241, 67, 224,192, 31, 198, 252, 249, 163, 71, 208, 220, 65, 106, 4, 7, 186, 59, 40, 204, 225, 68, 130, 212, 14, 94, 196, 152, 17, 217, 64, 116, 7, 149, 81, 20, 216, 209, 223, 71, 138, 226, 14, 154, 163, 104, 16, 33, 65, 145, 36, 65, 190, 132, 25, 83, 230, 76, 154, 53, 107, 206, 59, 184, 204, 38, 158, 123, 254, 244, 237, 162, 8, 134, 159, 191, 123, 4, 233, 29, 4, 70, 17,103, 81, 163, 72, 149, 18, 29, 120, 166, 103, 70, 170, 254, 224, 9, 68, 211, 83, 223, 176, 153, 233, 124, 54, 2, 137, 19, 95, 22, 129, 60, 125, 2, 157, 40, 20, 234, 192, 163, 254, 146, 78, 92, 106, 147, 92, 85, 170, 250, 192, 176, 245, 55,246, 229, 81, 189, 19, 205, 254, 12, 58, 148, 169, 64, 190, 100, 109, 30, 70, 156, 88, 49, 98, 124, 7, 185, 214, 116, 118, 18, 100, 156, 131, 87, 5, 250, 58, 56, 143, 98, 163, 131, 233, 8, 98, 254, 246, 167, 121, 34, 103, 127, 158, 5, 50, 163, 75, 21, 157, 192, 102, 7, 87, 207, 108, 236, 14, 36, 171, 131, 235, 6, 70, 246, 135, 146, 34, 101, 171, 3, 65, 139,118, 72, 218, 52, 77, 120, 7, 163, 209, 4, 86, 251, 101, 114, 127, 182, 41, 226, 214, 61, 145, 183, 229, 31, 204, 157, 47, 198, 158, 93, 251, 225, 51, 23, 209, 210, 4, 119, 208, 26, 72, 100, 157, 7, 70, 59, 88, 238, 249, 65, 111, 4, 209, 251, 83, 63, 17, 119, 123, 129, 225, 83, 99, 4, 87, 255, 32, 182, 153, 229, 253, 229, 167, 232, 153, 131, 0, 252, 193, 190, 241, 40, 242, 111, 184, 247, 226, 115, 104, 190, 154, 26, 25, 74, 31, 176, 102, 154, 102, 192, 151, 42, 252, 15, 36, 3, 201, 51, 79, 32, 12, 9, 220, 46, 68, 17, 71, 236, 238, 160, 141, 106, 42, 231, 32, 102, 64, 226, 230, 32, 110, 6, 50,201, 159, 3, 29, 178, 111, 69, 24, 197, 163, 168, 198, 129, 82, 244, 199, 25, 154, 120, 244, 81, 38, 108, 14, 10, 114, 34, 251, 158, 217, 81, 69, 22, 93, 188, 81, 198, 28, 149, 164, 9, 183, 118, 106, 26, 231, 32, 36, 65, 170, 210, 159, 43,39, 226, 209, 198, 137, 90, 244, 231, 69, 129, 178, 220, 114, 68, 51, 207, 84, 172, 49, 127, 248, 171, 201, 43, 127, 116, 154, 40, 139, 226, 252, 57, 254, 102, 160, 118, 14, 42, 134, 162, 117, 124, 194, 131, 160, 59, 253, 201, 115, 162, 61, 245, 233, 83, 32, 55, 93, 138, 201, 77, 47, 97, 90, 136, 31, 64, 64, 218, 211, 159, 91, 6, 114, 19, 78, 135, 228, 60, 168, 78, 129, 254, 12, 212, 161, 65, 11, 157, 201, 62, 16, 99, 250, 115, 82, 144, 74, 5, 169, 82, 138, 48, 165, 211, 206, 131, 76, 69, 51, 86, 89, 101, 138, 116, 158, 56, 106, 18, 169, 161, 137, 178, 81, 78, 32, 48, 244, 89, 203, 161, 95, 253, 145, 109, 160, 97, 7, 35, 104, 216, 98, 67, 194, 177, 171, 102, 99, 58, 10, 184, 75, 27, 147, 54, 87, 138, 120, 109,206, 88, 96, 145, 213, 150, 88, 155, 34, 181, 52, 166, 51, 128, 149, 214, 161, 113, 67, 123, 201, 218, 93, 123, 253, 225, 220, 114, 103, 133, 55, 222, 31, 134, 116, 141, 15, 144, 192, 120, 102, 29, 146, 178, 116, 199, 176, 129, 166, 1, 150, 31, 75, 149, 113, 141, 34, 130, 253, 25, 135, 160, 131, 95, 115, 232, 224, 132, 7, 178, 111, 158, 239, 96, 202, 18, 30, 123, 97, 162, 13, 93, 4, 211, 35, 136, 95, 127, 61, 12, 120, 224, 130, 39, 114, 184, 166, 44, 26, 235, 75, 166, 131, 25, 36, 153, 99, 44, 15, 234, 215, 33, 128, 253, 17, 120, 160, 149, 229, 197, 57, 94, 52, 112, 202, 44, 155, 99, 26, 254,225, 99, 24, 101, 176, 49, 71, 171, 51, 4, 194, 205, 159, 118, 154, 185, 229, 22, 103, 22, 178, 112, 32, 122, 179, 161,8, 204, 105, 8, 154, 186, 234, 131, 174, 182, 249, 162, 123, 176, 49, 6, 143, 56, 124, 81, 134, 154, 113, 224, 105, 102, 32, 1, 51, 155, 102, 152, 56, 128, 81, 198, 154, 114, 230, 57, 250, 135, 97, 46, 226, 198, 151, 70, 162, 185, 142, 94,54, 145, 190, 104, 233, 166, 159, 190, 8, 196, 172, 191, 220, 186, 38, 255, 24, 150, 9, 219, 191, 215, 93, 243, 165, 164, 5, 119, 26, 234, 12, 7, 114, 60, 103, 205, 101, 61, 70, 205, 251, 148, 246, 243, 62, 114, 28, 130, 250, 68, 135, 68, 242, 69, 33, 19, 41, 66, 221, 33, 30, 83, 227, 103, 194, 77, 239, 91, 22, 15, 96, 51, 90, 150, 71, 211, 103, 79, 109, 116, 213, 253, 217, 157, 163, 131, 82, 167, 137, 222, 207, 145, 45, 253, 165, 228, 95, 250, 147, 46, 223, 7, 90, 126, 115,233, 71, 44, 166, 249, 170, 240, 33, 71, 83, 129, 128, 153, 51, 35, 125, 168, 118, 72, 172, 143, 7, 234, 169, 92, 241, 41, 42, 127, 34, 52, 94, 175, 234, 186, 203, 32, 170, 138, 31, 250, 4, 154, 43, 163, 232, 206, 39, 136, 251, 170, 190, 135, 43, 175, 241, 5, 74, 95, 77, 44, 119, 159, 225, 252, 0, 127, 79, 73, 25, 69, 254, 244, 87, 23, 240, 17, 228, 128, 211, 131, 224, 118, 152, 65, 14, 120, 224, 131, 31, 250, 184, 71, 59, 198, 17, 141, 91, 77, 132, 15, 217, 104, 135, 5, 239, 225, 14, 111, 72, 196, 33, 187, 232, 144, 67, 84, 18, 157, 31, 160, 176, 52, 41, 145, 12, 69, 150, 65, 193, 198, 232, 131, 30, 232, 224, 134, 246, 8, 114, 6, 107, 172, 227, 30, 250, 192, 96, 58, 176, 65, 188, 168, 96, 163, 130, 250, 152, 135, 57, 108, 116, 11, 118, 17, 228, 131, 33, 228, 199, 8, 75, 56, 17, 23, 22, 112, 32, 43, 180, 9, 207, 62, 71, 32, 23,186, 239, 132, 77, 4, 201, 19, 69, 72, 66, 19, 18, 164, 139, 17, 68, 99, 26, 213, 184, 70, 54, 182, 209, 141, 111, 132,99, 28, 229, 56, 71, 58, 214, 209, 142, 119, 196, 99, 30, 245, 184, 71, 62, 246, 209, 143, 127, 4, 100, 32, 5, 57, 72, 66, 22, 210, 144, 135, 68, 100, 34, 21, 185, 72, 70, 54, 210, 145, 143, 132, 100, 36, 37, 57, 73, 74, 86, 210, 146, 151,196, 100, 38, 53, 185, 73, 78, 118, 210, 147, 159, 4, 101, 40, 69, 57, 74, 82, 150, 210, 148, 167, 68, 101, 42, 85, 185, 74, 86, 182, 242, 37, 74, 128, 165, 43, 101, 73, 201, 88, 14, 4, 150, 183, 172, 165, 64, 112, 153, 203, 93, 42, 1, 10,179, 4, 230, 35, 149, 96, 128, 24, 92, 58, 228, 150, 63, 200, 101, 48, 149, 185, 76, 102, 54, 211, 153, 207, 132, 102, 52, 165, 57, 77, 106, 86, 211, 154, 215, 196, 102, 54, 181, 185, 77, 110, 118, 211, 155, 223, 4, 103, 56, 197, 57, 78, 114, 150, 211, 156, 231, 68, 103, 58, 213, 185, 78, 118, 182, 211, 157, 239, 132, 103, 60, 229, 57, 79, 122, 214, 211, 158, 247, 196, 103, 62, 245, 185, 79, 126, 246, 211, 159, 255, 4, 104, 64, 5, 58, 80, 130, 22, 180, 158, 1, 1, 0, 59) 497 | 498 | $RetryTimer = 3 499 | 500 | While($SyncHash.boolWhile) 501 | { 502 | 503 | if($SyncHash.Brand -eq "Poly") 504 | { 505 | $PhoneUrl = "https://${theIPAddress}:${thePort}/captureScreen/mainScreen" 506 | } 507 | elseif($SyncHash.Brand -eq "Yealink") 508 | { 509 | $PhoneUrl = "https://${theIPAddress}:${thePort}/screencapture/download" 510 | } 511 | 512 | $sessionText = "" 513 | if($SyncHash.Brand -eq "Poly") 514 | { 515 | 516 | $user = $SyncHash.HTTPUsername 517 | $pass = $SyncHash.HTTPPassword 518 | $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$pass))) 519 | try{ 520 | if($SyncHash.DotNetCoreCommands) 521 | { 522 | $r = Invoke-WebRequest -Uri "https://${theIPAddress}:${thePort}/form-submit/auth.htm" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0" -SessionVariable so -SkipCertificateCheck 523 | } 524 | else 525 | { 526 | $r = Invoke-WebRequest -Uri "https://${theIPAddress}:${thePort}/form-submit/auth.htm" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0" 527 | } 528 | } 529 | catch 530 | { 531 | Write-Host "ERROR: " $_ -foreground red 532 | Write-Host "It looks like the phone doesn't have the web interface enabled. Make sure that you have enabled the web interface!" -foreground red 533 | $ConnectError = $true 534 | } 535 | 536 | $sessionText = "" 537 | if($r.StatusCode -eq 200 -and !($r.Content -imatch "INVALID_LOGIN") -and !($ConnectError)) 538 | { 539 | $cookieSession = $r.Headers."Set-Cookie" 540 | $sessionC = $cookieSession -split ";" 541 | $sessionText = $sessionC[0] 542 | } 543 | else 544 | { 545 | Write-Host "ERROR: Failed to get session cookie" -foreground "red" 546 | } 547 | } 548 | 549 | Try { 550 | if($SyncHash.DotNetCoreCommands) 551 | { 552 | if($SyncHash.Brand -eq "Poly") 553 | { 554 | $response = Invoke-WebRequest -Uri $PhoneUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET -WebSession $so -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0" -TimeoutSec 3 -SkipCertificateCheck 555 | } 556 | else 557 | { 558 | $user = $SyncHash.HTTPUsername 559 | $pass = $SyncHash.HTTPPassword 560 | $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$pass))) 561 | $response = Invoke-WebRequest -Uri $PhoneUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0" -TimeoutSec 3 -SkipCertificateCheck 562 | } 563 | [System.Drawing.Image] $Image = $response.Content 564 | } 565 | else 566 | { 567 | $WebClient = $null 568 | $WebClient = New-Object System.Net.WebClient 569 | $WebClient.Credentials = New-Object System.Net.NetworkCredential($SyncHash.HTTPUsername,$SyncHash.HTTPPassword) 570 | if($SyncHash.Brand -eq "Poly" -and $sessionText -ne "") 571 | { 572 | $WebClient.Headers.Add("Cookie", "$sessionText") 573 | } 574 | [System.Drawing.Image] $Image = $WebClient.DownloadData($PhoneUrl) 575 | } 576 | 577 | } 578 | Catch [Exception] { 579 | $theError = $_.Exception.Message 580 | Write-Host "ERROR: $theError" -foreground red 581 | $WebResponse = [net.HttpWebResponse]$_.Exception.Response 582 | $resst = $WebResponse.getResponseStream() 583 | $sr = new-object IO.StreamReader($resst) 584 | [string]$result = $sr.ReadToEnd() 585 | $WebResponse.close() 586 | 587 | if($theError -imatch "Not Found") 588 | { 589 | Write-Host "ERROR: It looks like the phone does not have the Screen Capture feature enabled. Enable Screen Capture in the settings of the phone and try again." -foreground "red" 590 | $Image = $null 591 | $SyncHash.screenConnected = $false 592 | $SyncHash.form.Close() 593 | } 594 | elseif($theError -imatch "Unauthorized") 595 | { 596 | Write-Host "ERROR: The password you have entered is incorrect. Check your password." -foreground "red" 597 | $Image = $null 598 | $SyncHash.screenConnected = $false 599 | $SyncHash.form.Close() 600 | } 601 | elseif($theError -imatch "Forbidden") 602 | { 603 | Write-Host "ERROR: It looks like the phone does not have the Screen Capture feature enabled. Enable Screen Capture in the settings of the phone and try again." -foreground "red" 604 | $Image = $null 605 | $SyncHash.screenConnected = $false 606 | $SyncHash.form.Close() 607 | } 608 | else 609 | { 610 | $Image = $null 611 | $SyncHash.screenConnected = $false 612 | Write-Host "INFO: " $_.Exception.Message -foreground "yellow" 613 | } 614 | 615 | } 616 | if($Image -ne $null) 617 | { 618 | 619 | Try { 620 | #DISPLAY IMAGE 621 | $SyncHash.screenConnected = $true 622 | 623 | #Get the Image Size 624 | $SyncHash.ImageWidth = $Image.Width 625 | $SyncHash.ImageHeight = $Image.Height 626 | 627 | #Display Image 628 | $SyncHash.PictureBox.Image = $Image 629 | $SyncHash.PictureBox.Visible = $true 630 | 631 | if($SyncHash.RecordingGIF) 632 | { 633 | $SyncHash.RecordGifButton.Enabled = $false 634 | $SyncHash.StopRecordGifButton.Enabled = $true 635 | $SyncHash.SaveImageButton.Enabled = $false 636 | } 637 | else 638 | { 639 | $SyncHash.RecordGifButton.Enabled = $true 640 | $SyncHash.StopRecordGifButton.Enabled = $false 641 | $SyncHash.SaveImageButton.Enabled = $true 642 | } 643 | $RetryTimer = 1 644 | 645 | } 646 | Catch [Exception] { 647 | Write-Host "INFO: Cannot display image." -foreground "yellow" 648 | 649 | $SyncHash.screenConnected = $false 650 | 651 | #If display fails show error image. 652 | $SyncHash.PictureBox.Image = $errorImage 653 | $SyncHash.PictureBox.Visible = $true 654 | $SyncHash.SaveImageButton.Enabled = $false 655 | $SyncHash.RecordGifButton.Enabled = $false 656 | 657 | $RetryTimer = 10 658 | } 659 | } 660 | else 661 | { 662 | #RESIZE THE IMAGE SIZE 663 | $SyncHash.PictureBox.sizemode = "Autosize" 664 | 665 | $SyncHash.screenConnected = $false 666 | #If display fails show error image. 667 | $SyncHash.PictureBox.Image = $SyncHash.screenCapErrorImage 668 | $SyncHash.PictureBox.Visible = $true 669 | $SyncHash.SaveImageButton.Enabled = $false 670 | $SyncHash.RecordGifButton.Enabled = $false 671 | } 672 | 673 | for($i=0; $i -lt $RetryTimer; $i++) 674 | { 675 | if(!$SyncHash.boolWhile) 676 | { 677 | break 678 | } 679 | Start-Sleep -milliseconds 300 680 | } 681 | 682 | } 683 | 684 | }) | Out-Null 685 | 686 | $handle = $powershell.BeginInvoke() 687 | 688 | 689 | # Initialize and show the form. 690 | $SyncHash.form.Add_Shown({$SyncHash.form.Activate()}) 691 | $SyncHash.form.ShowDialog() > $null # Trash the text of the button that was clicked. 692 | 693 | $SyncHash.boolWhile = $false 694 | While (-Not $handle.IsCompleted) { 695 | Start-Sleep -Milliseconds 50 696 | } 697 | 698 | $script:screenConnected = $false 699 | 700 | $runspace.Close() 701 | $powershell.Dispose() 702 | } 703 | 704 | 705 | $script:startX = 0 706 | $script:startY = 0 707 | $script:currentImage = 0 708 | $script:frames = @() 709 | $script:mouseDown = $false 710 | $script:ghostBoxCount = 0 711 | 712 | function EditGifDialog([array] $ImageArray) 713 | { 714 | Add-Type -AssemblyName System.Drawing 715 | Add-Type -AssemblyName System.Windows.Forms 716 | 717 | Write-Host "INFO: Opening GIF Editing Studio." -foreground yellow 718 | 719 | $X = 0 720 | $Y = 0 721 | 722 | function Update-ShapeTable 723 | { 724 | $lv.Items.Clear() 725 | foreach($frame in $frames) 726 | { 727 | $lvItem = new-object System.Windows.Forms.ListViewItem($frame.ShapeNumber) 728 | [void]$lvItem.SubItems.Add($frame.StartFrame) 729 | [void]$lvItem.SubItems.Add($frame.EndFrame) 730 | [void]$lv.Items.Add($lvItem) 731 | } 732 | } 733 | 734 | 735 | #DrawShapesLabel ============================================================ 736 | $DrawShapesLabel = New-Object System.Windows.Forms.Label 737 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 738 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 739 | $DrawShapesLabel.Font = $Font 740 | $DrawShapesLabel.Location = New-Object System.Drawing.Size(20,5) 741 | $DrawShapesLabel.Size = New-Object System.Drawing.Size(150,18) 742 | $DrawShapesLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 743 | $DrawShapesLabel.Text = "Draw Shapes:" 744 | $DrawShapesLabel.TabStop = $false 745 | 746 | $PictureBox = new-object Windows.Forms.PictureBox 747 | $PictureBox.Location = New-Object System.Drawing.Size(20,25) 748 | $PictureBox.width = 280 749 | $PictureBox.height = 280 750 | $PictureBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 751 | $PictureBox.BorderStyle = "FixedSingle" 752 | #$PictureBox.sizemode = "Zoom" 753 | $PictureBox.sizemode = 4 754 | $PictureBox.Margin = 10 755 | #$PictureBox.ForeColor = [System.Drawing.Color]::Black 756 | $PictureBox.WaitOnLoad = $true 757 | if($ImageArray.Length -ne -1) 758 | { 759 | $PictureBox.Image = $ImageArray[0] 760 | } 761 | 762 | $PictureBox.Add_MouseDown( 763 | { 764 | $script:startX = $_.X 765 | $script:startY = $_.Y 766 | $script:mouseDown = $true 767 | }) 768 | 769 | $PictureBox.Add_MouseMove( 770 | { 771 | $script:ghostBoxCount++ 772 | 773 | if($script:ghostBoxCount -gt 10) 774 | { 775 | if($script:mouseDown -eq $true) 776 | { 777 | $X = $_.X 778 | $Y = $_.Y 779 | 780 | $img = $ImageArray[$script:currentImage] 781 | 782 | $sizeMultiplier = 1 783 | $lineThickness = 1 784 | 785 | $tempY = $script:startY 786 | $tempX = $script:startX 787 | if($img.Width -gt $PictureBox.Width -and $img.Width -gt $img.Height) 788 | { 789 | $sizeMultiplier = ($img.Width / $PictureBox.Width) 790 | 791 | $difference = ($PictureBox.Height - ($img.Height / $sizeMultiplier)) / 2 792 | $tempY = $tempY - $difference 793 | $Y = $Y - $difference 794 | $tempY = $tempY -as [int] 795 | $Y = $Y -as [int] 796 | 797 | [int]$lineThickness = $img.Width / 200 798 | 799 | } 800 | elseif($img.Height -gt $PictureBox.Height -and $img.Height -gt $img.Width) 801 | { 802 | $sizeMultiplier = ($img.Height / $PictureBox.Height) 803 | $difference = ($PictureBox.Width - ($img.Width / $sizeMultiplier)) / 2 804 | $tempX = $tempX - $difference 805 | $X = $X - $difference 806 | $tempX = $tempX -as [int] 807 | $X = $X -as [int] 808 | 809 | [int]$lineThickness = $img.Height / 200 810 | 811 | } 812 | 813 | $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height) 814 | [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs 815 | $graph.DrawImage($img, 0, 0, [int]$img.Width, [int]$img.Height) 816 | 817 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Gray, $lineThickness) 818 | 819 | $1 = $tempX * $sizeMultiplier 820 | $2 = $tempY * $sizeMultiplier 821 | $3 = ($X * $sizeMultiplier - ($tempX * $sizeMultiplier)) 822 | $4 =($Y * $sizeMultiplier - ($tempY * $sizeMultiplier)) 823 | $1 = $1 -as [int] 824 | $2 = $2 -as [int] 825 | $3 = $3 -as [int] 826 | $4 = $4 -as [int] 827 | 828 | if($3 -lt 0) 829 | { 830 | $1 = $1 + $3 831 | $3 = $3 * -1 832 | } 833 | if($4 -lt 0) 834 | { 835 | $2 = $2 + $4 836 | $4 = $4 * -1 837 | } 838 | 839 | if($ShapeDropDownBox.SelectedItem -eq "Circle") 840 | { 841 | $graph.DrawEllipse($pen,$1, $2, $3, $4) 842 | } 843 | else 844 | { 845 | $graph.DrawRectangle($pen,$1, $2, $3, $4) 846 | } 847 | $graph.Dispose() 848 | 849 | $PictureBox.Image = $imgForGraph 850 | $imgForGraph = $null 851 | $script:ghostBoxCount = 0 852 | } 853 | } 854 | }) 855 | 856 | $PictureBox.Add_MouseUp( 857 | { 858 | $script:mouseDown = $false 859 | 860 | $X = $_.X 861 | $Y = $_.Y 862 | 863 | $img = $ImageArray[$script:currentImage] 864 | 865 | $sizeMultiplier = 1 866 | $lineThickness = 1 867 | if($img.Width -gt $PictureBox.Width -and $img.Width -gt $img.Height) 868 | { 869 | $sizeMultiplier = ($img.Width / $PictureBox.Width) 870 | 871 | $difference = ($PictureBox.Height - ($img.Height / $sizeMultiplier)) / 2 872 | $script:startY = $script:startY - $difference 873 | $Y = $Y - $difference 874 | $script:startY = $script:startY -as [int] 875 | $Y = $Y -as [int] 876 | 877 | [int]$lineThickness = $img.Width / 200 878 | 879 | } 880 | elseif($img.Height -gt $PictureBox.Height -and $img.Height -gt $img.Width) 881 | { 882 | $sizeMultiplier = ($img.Height / $PictureBox.Height) 883 | $difference = ($PictureBox.Width - ($img.Width / $sizeMultiplier)) / 2 884 | $script:startX = $script:startX - $difference 885 | $X = $X - $difference 886 | $script:startX = $script:startX -as [int] 887 | $X = $X -as [int] 888 | 889 | [int]$lineThickness = $img.Height / 200 890 | 891 | } 892 | 893 | $1 = $script:startX * $sizeMultiplier 894 | $2 = $script:startY * $sizeMultiplier 895 | $3 = ($X * $sizeMultiplier - ($script:startX * $sizeMultiplier)) 896 | $4 =($Y * $sizeMultiplier - ($script:startY * $sizeMultiplier)) 897 | $1 = $1 -as [int] 898 | $2 = $2 -as [int] 899 | $3 = $3 -as [int] 900 | $4 = $4 -as [int] 901 | 902 | if($3 -lt 0) 903 | { 904 | $1 = $1 + $3 905 | $3 = $3 * -1 906 | } 907 | if($4 -lt 0) 908 | { 909 | $2 = $2 + $4 910 | $4 = $4 * -1 911 | } 912 | 913 | $lvItem = new-object System.Windows.Forms.ListViewItem($script:currentImage) 914 | [void]$lvItem.SubItems.Add($script:currentImage) 915 | [void]$lvItem.SubItems.Add($ShapeDropDownBox.SelectedItem) 916 | [void]$lvItem.SubItems.Add($ColourDropDownBox.SelectedItem) 917 | [void]$lvItem.SubItems.Add($1) 918 | [void]$lvItem.SubItems.Add($2) 919 | [void]$lvItem.SubItems.Add($3) 920 | [void]$lvItem.SubItems.Add($4) 921 | [void]$lv.Items.Add($lvItem) 922 | 923 | Update-AnimationScreen 924 | 925 | }) 926 | 927 | 928 | #ShapeLabel ============================================================ 929 | $ShapeLabel = New-Object System.Windows.Forms.Label 930 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 931 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 932 | $ShapeLabel.Font = $Font 933 | $ShapeLabel.Location = New-Object System.Drawing.Size(340,20) 934 | $ShapeLabel.Size = New-Object System.Drawing.Size(140,18) 935 | $ShapeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 936 | $ShapeLabel.Text = "Markup Shape:" 937 | $ShapeLabel.TabStop = $false 938 | 939 | 940 | $ShapeDropDownBox = New-Object System.Windows.Forms.ComboBox 941 | $ShapeDropDownBox.Location = New-Object System.Drawing.Size(340,40) 942 | $ShapeDropDownBox.Size = New-Object System.Drawing.Size(140,15) 943 | $ShapeDropDownBox.DropDownHeight = 100 944 | $ShapeDropDownBox.tabIndex = 4 945 | $ShapeDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 946 | $ShapeDropDownBox.DropDownStyle = "DropDownList" 947 | 948 | [void] $ShapeDropDownBox.Items.Add("Rectangle") 949 | [void] $ShapeDropDownBox.Items.Add("Circle") 950 | 951 | $numberOfItems = $ShapeDropDownBox.count 952 | if($numberOfItems -gt 0) 953 | { 954 | $ShapeDropDownBox.SelectedIndex = 0 955 | } 956 | 957 | #ColourLabel ============================================================ 958 | $ColourLabel = New-Object System.Windows.Forms.Label 959 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 960 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 961 | $ColourLabel.Font = $Font 962 | $ColourLabel.Location = New-Object System.Drawing.Size(500,20) 963 | $ColourLabel.Size = New-Object System.Drawing.Size(140,18) 964 | $ColourLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 965 | $ColourLabel.Text = "Markup Colour:" 966 | $ColourLabel.TabStop = $false 967 | 968 | 969 | $ColourDropDownBox = New-Object System.Windows.Forms.ComboBox 970 | $ColourDropDownBox.Location = New-Object System.Drawing.Size(500,40) 971 | $ColourDropDownBox.Size = New-Object System.Drawing.Size(140,15) 972 | $ColourDropDownBox.DropDownHeight = 200 973 | $ColourDropDownBox.tabIndex = 5 974 | $ColourDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 975 | $ColourDropDownBox.DropDownStyle = "DropDownList" 976 | 977 | [void] $ColourDropDownBox.Items.Add("Red") 978 | [void] $ColourDropDownBox.Items.Add("Purple") 979 | [void] $ColourDropDownBox.Items.Add("Green") 980 | [void] $ColourDropDownBox.Items.Add("Blue") 981 | [void] $ColourDropDownBox.Items.Add("Orange") 982 | [void] $ColourDropDownBox.Items.Add("Pink") 983 | [void] $ColourDropDownBox.Items.Add("Yellow") 984 | [void] $ColourDropDownBox.Items.Add("White") 985 | [void] $ColourDropDownBox.Items.Add("Maroon") 986 | [void] $ColourDropDownBox.Items.Add("Black") 987 | 988 | $numberOfItems = $ColourDropDownBox.count 989 | if($numberOfItems -gt 0) 990 | { 991 | $ColourDropDownBox.SelectedIndex = 0 992 | } 993 | 994 | #MarkupShapeLabel ============================================================ 995 | $MarkupShapeLabel = New-Object System.Windows.Forms.Label 996 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 997 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 998 | $MarkupShapeLabel.Font = $Font 999 | $MarkupShapeLabel.Location = New-Object System.Drawing.Size(340,70) 1000 | $MarkupShapeLabel.Size = New-Object System.Drawing.Size(200,18) 1001 | $MarkupShapeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1002 | $MarkupShapeLabel.Text = "Markup Shapes:" 1003 | $MarkupShapeLabel.TabStop = $false 1004 | 1005 | $lv = New-Object windows.forms.ListView 1006 | $lv.View = [System.Windows.Forms.View]"Details" 1007 | $lv.Size = New-Object System.Drawing.Size(510,190) 1008 | $lv.Location = New-Object System.Drawing.Size(340,90) 1009 | $lv.FullRowSelect = $true 1010 | $lv.GridLines = $true 1011 | $lv.HideSelection = $false 1012 | #$lv.Sorting = [System.Windows.Forms.SortOrder]::Ascending 1013 | $lv.Sorting = [System.Windows.Forms.SortOrder]::None 1014 | $lv.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1015 | [void]$lv.Columns.Add("StartFrame", 65) 1016 | [void]$lv.Columns.Add("EndFrame", 60) 1017 | [void]$lv.Columns.Add("Shape", 60) 1018 | [void]$lv.Columns.Add("Colour", 60) 1019 | [void]$lv.Columns.Add("StartX", 60) 1020 | [void]$lv.Columns.Add("StartY", 60) 1021 | [void]$lv.Columns.Add("Width", 60) 1022 | [void]$lv.Columns.Add("Height", 60) 1023 | 1024 | $lv.add_MouseUp( 1025 | { 1026 | foreach ($item in $lv.SelectedItems) 1027 | { 1028 | $user = $item.Text 1029 | if($item -ne $null) 1030 | { 1031 | $startFrame = $item.Text -as [int] 1032 | $endFrame = $item.SubItems[1].Text -as [int] 1033 | $Shape = $item.SubItems[2].Text 1034 | $Colour = $item.SubItems[3].Text 1035 | $StartX = $item.SubItems[4].Text -as [int] 1036 | $StartY = $item.SubItems[5].Text -as [int] 1037 | $Width = $item.SubItems[6].Text -as [int] 1038 | $Height = $item.SubItems[7].Text -as [int] 1039 | $StartFrameTextBox.text = "$startFrame" 1040 | $EndFrameTextBox.text = "$endFrame" 1041 | $ShapeTextBox.SelectedItem = "$Shape" 1042 | $ColourTextBox.SelectedItem = "$Colour" 1043 | $StartXTextBox.text = "$StartX" 1044 | $StartYTextBox.text = "$StartY" 1045 | $WidthTextBox.text = "$Width" 1046 | $HeightTextBox.text = "$Height" 1047 | 1048 | #Update the image number 1049 | $arrayLength = $ImageArray.length - 1 1050 | $script:currentImage = $startFrame 1051 | Update-AnimationScreen 1052 | $currentImageNumber = $script:currentImage 1053 | $FrameNumberNumberBox.Value = $currentImageNumber 1054 | } 1055 | } 1056 | #Write-Host "Number of selected items: " $lv.SelectedItems.count 1057 | if($lv.SelectedItems.count -eq 0) 1058 | { 1059 | $StartFrameTextBox.text = "" 1060 | $EndFrameTextBox.text = "" 1061 | $ShapeTextBox.SelectedItem = "" 1062 | $ColourTextBox.SelectedItem = "" 1063 | $StartXTextBox.text = "" 1064 | $StartYTextBox.text = "" 1065 | $WidthTextBox.text = "" 1066 | $HeightTextBox.text = "" 1067 | } 1068 | $lv.Refresh() 1069 | }) 1070 | 1071 | # List Key Event ============================================================ 1072 | $lv.add_KeyUp( 1073 | { 1074 | if ($_.KeyCode -eq "Up" -or $_.KeyCode -eq "Down") 1075 | { 1076 | foreach ($item in $lv.SelectedItems) 1077 | { 1078 | if($item -ne $null) 1079 | { 1080 | $startFrame = $item.Text -as [int] 1081 | $endFrame = $item.SubItems[1].Text -as [int] 1082 | $Shape = $item.SubItems[2].Text 1083 | $Colour = $item.SubItems[3].Text 1084 | $StartX = $item.SubItems[4].Text -as [int] 1085 | $StartY = $item.SubItems[5].Text -as [int] 1086 | $Width = $item.SubItems[6].Text -as [int] 1087 | $Height = $item.SubItems[7].Text -as [int] 1088 | $StartFrameTextBox.text = "$startFrame" 1089 | $EndFrameTextBox.text = "$endFrame" 1090 | $ShapeTextBox.SelectedItem = "$Shape" 1091 | $ColourTextBox.SelectedItem = "$Colour" 1092 | $StartXTextBox.text = "$StartX" 1093 | $StartYTextBox.text = "$StartY" 1094 | $WidthTextBox.text = "$Width" 1095 | $HeightTextBox.text = "$Height" 1096 | 1097 | #Update the image number 1098 | $arrayLength = $ImageArray.length - 1 1099 | $script:currentImage = $startFrame 1100 | Update-AnimationScreen 1101 | $currentImageNumber = $script:currentImage 1102 | $FrameNumberNumberBox.Value = $currentImageNumber 1103 | 1104 | } 1105 | } 1106 | } 1107 | if($lv.SelectedItems.count -eq 0) 1108 | { 1109 | $StartFrameTextBox.text = "" 1110 | $EndFrameTextBox.text = "" 1111 | $ShapeTextBox.SelectedItem = "" 1112 | $ColourTextBox.SelectedItem = "" 1113 | $StartXTextBox.text = "" 1114 | $StartYTextBox.text = "" 1115 | $WidthTextBox.text = "" 1116 | $HeightTextBox.text = "" 1117 | } 1118 | $lv.Refresh() 1119 | }) 1120 | 1121 | $lv.add_SelectedIndexChanged( 1122 | { 1123 | Update-AnimationScreen 1124 | }) 1125 | 1126 | 1127 | 1128 | #StartFrameTextBox ============================================================ 1129 | $StartFrameTextBox = new-object System.Windows.Forms.textbox 1130 | $StartFrameTextBox.location = new-object system.drawing.size(340,285) 1131 | $StartFrameTextBox.size = new-object system.drawing.size(70,23) 1132 | $StartFrameTextBox.text = "" 1133 | $StartFrameTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1134 | $StartFrameTextBox.tabIndex = 6 1135 | 1136 | 1137 | #EndFrameTextBox ============================================================ 1138 | $EndFrameTextBox = new-object System.Windows.Forms.textbox 1139 | $EndFrameTextBox.location = new-object system.drawing.size(410,285) 1140 | $EndFrameTextBox.size = new-object system.drawing.size(60,23) 1141 | $EndFrameTextBox.text = "" 1142 | $EndFrameTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1143 | $EndFrameTextBox.tabIndex = 7 1144 | 1145 | #ShapeTextBox ============================================================ 1146 | $ShapeTextBox = New-Object System.Windows.Forms.ComboBox 1147 | $ShapeTextBox.Location = New-Object System.Drawing.Size(470,285) 1148 | $ShapeTextBox.Size = New-Object System.Drawing.Size(60,23) 1149 | $ShapeTextBox.DropDownHeight = 100 1150 | $ShapeTextBox.tabIndex = 8 1151 | $ShapeTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1152 | $ShapeTextBox.DropDownStyle = "DropDownList" 1153 | 1154 | [void] $ShapeTextBox.Items.Add("Rectangle") 1155 | [void] $ShapeTextBox.Items.Add("Circle") 1156 | 1157 | $numberOfItems = $ShapeTextBox.count 1158 | if($numberOfItems -gt 0) 1159 | { 1160 | $ShapeTextBox.SelectedIndex = 0 1161 | } 1162 | 1163 | 1164 | $ColourTextBox = New-Object System.Windows.Forms.ComboBox 1165 | $ColourTextBox.Location = New-Object System.Drawing.Size(530,285) 1166 | $ColourTextBox.Size = New-Object System.Drawing.Size(60,23) 1167 | $ColourTextBox.DropDownHeight = 200 1168 | $ColourTextBox.tabIndex = 9 1169 | $ColourTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1170 | $ColourTextBox.DropDownStyle = "DropDownList" 1171 | 1172 | [void] $ColourTextBox.Items.Add("Red") 1173 | [void] $ColourTextBox.Items.Add("Purple") 1174 | [void] $ColourTextBox.Items.Add("Green") 1175 | [void] $ColourTextBox.Items.Add("Blue") 1176 | [void] $ColourTextBox.Items.Add("Orange") 1177 | [void] $ColourTextBox.Items.Add("Pink") 1178 | [void] $ColourTextBox.Items.Add("Yellow") 1179 | [void] $ColourTextBox.Items.Add("White") 1180 | [void] $ColourTextBox.Items.Add("Maroon") 1181 | [void] $ColourTextBox.Items.Add("Black") 1182 | 1183 | $numberOfItems = $ColourTextBox.count 1184 | if($numberOfItems -gt 0) 1185 | { 1186 | $ColourTextBox.SelectedIndex = 0 1187 | } 1188 | 1189 | 1190 | #StartXTextBox ============================================================ 1191 | $StartXTextBox = new-object System.Windows.Forms.textbox 1192 | $StartXTextBox.location = new-object system.drawing.size(590,285) 1193 | $StartXTextBox.size = new-object system.drawing.size(60,23) 1194 | $StartXTextBox.text = "" 1195 | $StartXTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1196 | $StartXTextBox.tabIndex = 10 1197 | 1198 | #StartYTextBox ============================================================ 1199 | $StartYTextBox = new-object System.Windows.Forms.textbox 1200 | $StartYTextBox.location = new-object system.drawing.size(650,285) 1201 | $StartYTextBox.size = new-object system.drawing.size(60,23) 1202 | $StartYTextBox.text = "" 1203 | $StartYTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1204 | $StartYTextBox.tabIndex = 11 1205 | 1206 | #WidthTextBox ============================================================ 1207 | $WidthTextBox = new-object System.Windows.Forms.textbox 1208 | $WidthTextBox.location = new-object system.drawing.size(710,285) 1209 | $WidthTextBox.size = new-object system.drawing.size(60,23) 1210 | $WidthTextBox.text = "" 1211 | $WidthTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1212 | $WidthTextBox.tabIndex = 12 1213 | 1214 | #HeightTextBox ============================================================ 1215 | $HeightTextBox = new-object System.Windows.Forms.textbox 1216 | $HeightTextBox.location = new-object system.drawing.size(770,285) 1217 | $HeightTextBox.size = new-object system.drawing.size(60,23) 1218 | $HeightTextBox.text = "" 1219 | $HeightTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1220 | $HeightTextBox.tabIndex = 13 1221 | 1222 | 1223 | 1224 | #EditShapeButton ============================================================ 1225 | $EditShapeButton = New-Object System.Windows.Forms.Button 1226 | $EditShapeButton.Location = New-Object System.Drawing.Size(490,315) 1227 | $EditShapeButton.Size = New-Object System.Drawing.Size(100,20) 1228 | $EditShapeButton.Text = "Update Shape" 1229 | $EditShapeButton.TabIndex = 14 1230 | $EditShapeButton.Add_Click( 1231 | { 1232 | foreach ($item in $lv.SelectedItems) 1233 | { 1234 | $StartFrame = $StartFrameTextBox.text -as [int] 1235 | if($StartFrame -gt 0 -and $StartFrame -lt ($ImageArray.length)) 1236 | { 1237 | $item.Text = $StartFrameTextBox.text 1238 | } 1239 | else 1240 | { 1241 | Write-Host "INFO: Unable to use the Start Frame value" -foreground yellow 1242 | } 1243 | $EndFrame = $EndFrameTextBox.text -as [int] 1244 | if($EndFrame -gt 0 -and $EndFrame -lt ($ImageArray.length)) 1245 | { 1246 | $item.SubItems[1].Text = $EndFrameTextBox.text 1247 | } 1248 | else 1249 | { 1250 | Write-Host "INFO: Unable to use the End Frame value" -foreground yellow 1251 | } 1252 | if($ShapeTextBox.text -eq "Rectangle" -or $ShapeTextBox.text -eq "Circle") 1253 | { 1254 | $item.SubItems[2].Text = $ShapeTextBox.text 1255 | } 1256 | else 1257 | { 1258 | Write-Host "INFO: Unable to use the Shape value" -foreground yellow 1259 | } 1260 | 1261 | $item.SubItems[3].Text = $ColourTextBox.text 1262 | 1263 | $StartX = $StartXTextBox.text -as [int] 1264 | if($StartX -ge 0) 1265 | { 1266 | $item.SubItems[4].Text = $StartXTextBox.text 1267 | } 1268 | else 1269 | { 1270 | Write-Host "INFO: Unable to use the Start X value" -foreground yellow 1271 | } 1272 | $StartY = $StartYTextBox.text -as [int] 1273 | if($StartY -ge 0) 1274 | { 1275 | $item.SubItems[5].Text = $StartYTextBox.text 1276 | } 1277 | else 1278 | { 1279 | Write-Host "INFO: Unable to use the Start Y value" -foreground yellow 1280 | } 1281 | $Width = $WidthTextBox.text -as [int] 1282 | if($Width -ge 0) 1283 | { 1284 | $item.SubItems[6].Text = $WidthTextBox.text 1285 | } 1286 | else 1287 | { 1288 | Write-Host "INFO: Unable to use the Width value" -foreground yellow 1289 | } 1290 | $Height = $HeightTextBox.text -as [int] 1291 | if($Height -ge 0) 1292 | { 1293 | $item.SubItems[7].Text = $HeightTextBox.text 1294 | } 1295 | else 1296 | { 1297 | Write-Host "INFO: Unable to use the Height value" -foreground yellow 1298 | } 1299 | 1300 | } 1301 | Update-AnimationScreen 1302 | 1303 | }) 1304 | 1305 | #DeleteShapeButton ============================================================ 1306 | $DeleteShapeButton = New-Object System.Windows.Forms.Button 1307 | $DeleteShapeButton.Location = New-Object System.Drawing.Size(600,315) 1308 | $DeleteShapeButton.Size = New-Object System.Drawing.Size(100,20) 1309 | $DeleteShapeButton.Text = "Delete Shape" 1310 | $DeleteShapeButton.TabIndex = 15 1311 | $DeleteShapeButton.Add_Click( 1312 | { 1313 | $beforeDelete = $lv.SelectedItems[0].Index 1314 | if($beforeDelete -ne $null) 1315 | { 1316 | $lv.Items.RemoveAt($lv.SelectedItems[0].Index) 1317 | Update-AnimationScreen 1318 | } 1319 | if($beforeDelete -ge $lv.Items.Count) 1320 | { 1321 | $beforeDelete = $beforeDelete - 1 1322 | } 1323 | if($lv.items.Count -ge 1) 1324 | { 1325 | $lv.Items[$beforeDelete].Selected = $true; 1326 | } 1327 | elseif($lv.items.Count -eq 0) 1328 | { 1329 | Write-Host "No items left" 1330 | } 1331 | }) 1332 | 1333 | 1334 | 1335 | function Update-AnimationScreen 1336 | { 1337 | $img = $ImageArray[$script:currentImage] 1338 | 1339 | $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height) 1340 | [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs 1341 | $graph.DrawImage($img, 0, 0, [int]$img.Width, [int]$img.Height) 1342 | 1343 | foreach ($item in $lv.Items) 1344 | { 1345 | [int]$lineThickness = $img.Height / 200 1346 | 1347 | $startFrame = $item.Text -as [int] 1348 | $endFrame = $item.SubItems[1].Text -as [int] 1349 | $shape = $item.SubItems[2].Text 1350 | $colour = $item.SubItems[3].Text 1351 | $1 = $item.SubItems[4].Text -as [int] 1352 | $2 = $item.SubItems[5].Text -as [int] 1353 | $3 = $item.SubItems[6].Text -as [int] 1354 | $4 = $item.SubItems[7].Text -as [int] 1355 | 1356 | if($script:currentImage -ge $startFrame -and $script:currentImage -le $endFrame) 1357 | { 1358 | Write-Host "INFO: Found $shape to render" -foreground yellow 1359 | 1360 | if($item.Index -eq $lv.SelectedItems[0].Index) 1361 | { 1362 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::MediumTurquoise, $lineThickness) 1363 | } 1364 | elseif($colour -eq "Green") 1365 | { 1366 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Green, $lineThickness) 1367 | } 1368 | elseif($colour -eq "Purple") 1369 | { 1370 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Purple, $lineThickness) 1371 | } 1372 | elseif($colour -eq "Blue") 1373 | { 1374 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Blue, $lineThickness) 1375 | } 1376 | elseif($colour -eq "Orange") 1377 | { 1378 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Orange, $lineThickness) 1379 | } 1380 | elseif($colour -eq "Pink") 1381 | { 1382 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Pink, $lineThickness) 1383 | } 1384 | elseif($colour -eq "Yellow") 1385 | { 1386 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Yellow, $lineThickness) 1387 | } 1388 | elseif($colour -eq "White") 1389 | { 1390 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::White, $lineThickness) 1391 | } 1392 | elseif($colour -eq "Maroon") 1393 | { 1394 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Maroon, $lineThickness) 1395 | } 1396 | elseif($colour -eq "Black") 1397 | { 1398 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, $lineThickness) 1399 | } 1400 | else 1401 | { 1402 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Red, $lineThickness) 1403 | } 1404 | 1405 | if($shape -eq "Circle") 1406 | { 1407 | $graph.DrawEllipse($pen,$1, $2, $3, $4) 1408 | } 1409 | else 1410 | { 1411 | $graph.DrawRectangle($pen,$1, $2, $3, $4) 1412 | } 1413 | } 1414 | } 1415 | $PictureBox.Image = $imgForGraph 1416 | $graph.Dispose() 1417 | $imgForGraph = $null 1418 | } 1419 | 1420 | 1421 | #LeftManualButton ============================================================ 1422 | $LeftManualButton = New-Object System.Windows.Forms.Button 1423 | $LeftManualButton.Location = New-Object System.Drawing.Size(30,310) 1424 | $LeftManualButton.Size = New-Object System.Drawing.Size(60,18) 1425 | $LeftManualButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1426 | $LeftManualButton.Text = "Previous" 1427 | $LeftManualButton.TabIndex = 16 1428 | $LeftManualButton.Add_Click( 1429 | { 1430 | $arrayLength = $ImageArray.length - 1 1431 | if($script:currentImage -gt 0) 1432 | {$script:currentImage--} 1433 | $img = $ImageArray[$script:currentImage] 1434 | 1435 | Update-AnimationScreen 1436 | 1437 | $currentImageNumber = $script:currentImage 1438 | $FrameNumberNumberBox.Value = $currentImageNumber 1439 | 1440 | }) 1441 | 1442 | 1443 | #RightManualButton ============================================================ 1444 | $RightManualButton = New-Object System.Windows.Forms.Button 1445 | $RightManualButton.Location = New-Object System.Drawing.Size(100,310) 1446 | $RightManualButton.Size = New-Object System.Drawing.Size(60,18) 1447 | $RightManualButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1448 | $RightManualButton.Text = "Next" 1449 | $RightManualButton.TabIndex = 17 1450 | $RightManualButton.Add_Click( 1451 | { 1452 | $arrayLength = $ImageArray.length - 1 1453 | if($script:currentImage -lt ($ImageArray.length - 1)) 1454 | { 1455 | $script:currentImage++ 1456 | } 1457 | 1458 | Update-AnimationScreen 1459 | 1460 | $currentImageNumber = $script:currentImage 1461 | $FrameNumberNumberBox.Value = $currentImageNumber 1462 | }) 1463 | 1464 | #FrameNumberLabel ============================================================ 1465 | $FrameNumberLabel = New-Object System.Windows.Forms.Label 1466 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 1467 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 1468 | $FrameNumberLabel.Font = $Font 1469 | $FrameNumberLabel.Location = New-Object System.Drawing.Size(170,310) 1470 | $FrameNumberLabel.Size = New-Object System.Drawing.Size(53,18) 1471 | $FrameNumberLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1472 | $FrameNumberLabel.Text = "Frame:" 1473 | $FrameNumberLabel.TabStop = $false 1474 | 1475 | 1476 | $FrameNumberNumberBox = New-Object System.Windows.Forms.NumericUpDown 1477 | $FrameNumberNumberBox.Location = New-Object Drawing.Size(226,310) 1478 | $FrameNumberNumberBox.Size = New-Object Drawing.Size(45,24) 1479 | $FrameNumberNumberBox.Minimum = 0 1480 | $FrameNumberNumberBox.Maximum = $ImageArray.length - 1 1481 | $FrameNumberNumberBox.Increment = 1 1482 | $FrameNumberNumberBox.Value = 0 1483 | $FrameNumberNumberBox.TabIndex = 18 1484 | 1485 | $FrameNumberNumberBox.Add_ValueChanged({ 1486 | 1487 | $script:currentImage = $FrameNumberNumberBox.Value 1488 | 1489 | Update-AnimationScreen 1490 | 1491 | }) 1492 | 1493 | #FrameNumberLabel ============================================================ 1494 | $FrameNumberEndNumberLabel = New-Object System.Windows.Forms.Label 1495 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 1496 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 1497 | $FrameNumberEndNumberLabel.Font = $Font 1498 | $FrameNumberEndNumberLabel.Location = New-Object System.Drawing.Size(280,310) 1499 | $FrameNumberEndNumberLabel.Size = New-Object System.Drawing.Size(60,18) 1500 | $FrameNumberEndNumberLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1501 | $arrayLength = $ImageArray.length - 1 1502 | $FrameNumberEndNumberLabel.Text = "/ $arrayLength" 1503 | $FrameNumberEndNumberLabel.TabStop = $false 1504 | 1505 | 1506 | #StartFrameLabel ============================================================ 1507 | $StartFrameImageLabel = New-Object System.Windows.Forms.Label 1508 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 1509 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 1510 | $StartFrameImageLabel.Font = $Font 1511 | $StartFrameImageLabel.Location = New-Object System.Drawing.Size(20,340) 1512 | $StartFrameImageLabel.Size = New-Object System.Drawing.Size(90,18) 1513 | $StartFrameImageLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1514 | $StartFrameImageLabel.Text = "Start Frame:" 1515 | $StartFrameImageLabel.TabStop = $false 1516 | 1517 | 1518 | $StartFrameImageNumberBox = New-Object System.Windows.Forms.NumericUpDown 1519 | $StartFrameImageNumberBox.Location = New-Object Drawing.Size(110,340) 1520 | $StartFrameImageNumberBox.Size = New-Object Drawing.Size(45,24) 1521 | $StartFrameImageNumberBox.Minimum = 0 1522 | $StartFrameImageNumberBox.Maximum = $ImageArray.length - 1 1523 | $StartFrameImageNumberBox.Increment = 1 1524 | $StartFrameImageNumberBox.Value = 0 1525 | $StartFrameImageNumberBox.TabIndex = 19 1526 | 1527 | $StartFrameImageNumberBox.Add_ValueChanged({ 1528 | 1529 | if($StartFrameImageNumberBox.Value -ge $EndFrameImageNumberBox.Value) 1530 | { 1531 | $StartFrameImageNumberBox.Value = $StartFrameImageNumberBox.Value - 1 1532 | } 1533 | }) 1534 | 1535 | 1536 | #EndFrameLabel ============================================================ 1537 | $EndFrameImageLabel = New-Object System.Windows.Forms.Label 1538 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 1539 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 1540 | $EndFrameImageLabel.Font = $Font 1541 | $EndFrameImageLabel.Location = New-Object System.Drawing.Size(160,340) 1542 | $EndFrameImageLabel.Size = New-Object System.Drawing.Size(90,18) 1543 | $EndFrameImageLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1544 | $EndFrameImageLabel.Text = "End Frame:" 1545 | $EndFrameImageLabel.TabStop = $false 1546 | 1547 | 1548 | $EndFrameImageNumberBox = New-Object System.Windows.Forms.NumericUpDown 1549 | $EndFrameImageNumberBox.Location = New-Object Drawing.Size(250,340) 1550 | $EndFrameImageNumberBox.Size = New-Object Drawing.Size(45,24) 1551 | $EndFrameImageNumberBox.Minimum = 0 1552 | $EndFrameImageNumberBox.Maximum = $ImageArray.length - 1 1553 | $EndFrameImageNumberBox.Increment = 1 1554 | $EndFrameImageNumberBox.Value = $ImageArray.length - 1 1555 | $EndFrameImageNumberBox.TabIndex = 20 1556 | 1557 | 1558 | $EndFrameImageNumberBox.Add_ValueChanged({ 1559 | 1560 | if($EndFrameImageNumberBox.Value -le $StartFrameImageNumberBox.Value) 1561 | { 1562 | $EndFrameImageNumberBox.Value = $EndFrameImageNumberBox.Value + 1 1563 | } 1564 | }) 1565 | 1566 | 1567 | #ImageSizeLabel ============================================================ 1568 | $ImageSizeLabel = New-Object System.Windows.Forms.Label 1569 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 1570 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 1571 | $ImageSizeLabel.Font = $Font 1572 | $ImageSizeLabel.Location = New-Object System.Drawing.Size(20,365) 1573 | $ImageSizeLabel.Size = New-Object System.Drawing.Size(90,18) 1574 | $ImageSizeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1575 | $ImageSizeLabel.Text = "Image Size:" 1576 | $ImageSizeLabel.TabStop = $false 1577 | 1578 | 1579 | $ImageHeightTextBox = New-Object System.Windows.Forms.NumericUpDown 1580 | $ImageHeightTextBox.Location = New-Object Drawing.Size(110,365) 1581 | $ImageHeightTextBox.Size = New-Object Drawing.Size(50,23) 1582 | $ImageHeightTextBox.Minimum = 0 1583 | $ImageHeightTextBox.Maximum = 5000 1584 | $ImageHeightTextBox.Increment = 1 1585 | $ImageHeightTextBox.Value = $imgSize.Height -as [int] 1586 | $ImageHeightTextBox.TabIndex = 21 1587 | 1588 | 1589 | $ImageHeightTextBox.Add_ValueChanged({ 1590 | 1591 | [int]$imageHeight = $ImageHeightTextBox.Value 1592 | $SizeMult = $imageHeight / $imgSize.Height 1593 | $ImageWidthTextBox.text = ($imgSize.Width * $SizeMult) -as [int] 1594 | 1595 | }) 1596 | 1597 | 1598 | #ImageSizeXLabel ============================================================ 1599 | $ImageSizeXLabel = New-Object System.Windows.Forms.Label 1600 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 1601 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 1602 | $ImageSizeXLabel.Font = $Font 1603 | $ImageSizeXLabel.Location = New-Object System.Drawing.Size(167,365) 1604 | $ImageSizeXLabel.Size = New-Object System.Drawing.Size(9,18) 1605 | $ImageSizeXLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1606 | $ImageSizeXLabel.Text = "x" 1607 | $ImageSizeXLabel.TabStop = $false 1608 | 1609 | #WidthWidth Text box ============================================================ 1610 | $ImageWidthTextBox = new-object System.Windows.Forms.textbox 1611 | $ImageWidthTextBox.location = new-object system.drawing.size(185,365) 1612 | $ImageWidthTextBox.size = new-object system.drawing.size(50,23) 1613 | $ImageWidthTextBox.text = "" 1614 | $ImageWidthTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1615 | $ImageWidthTextBox.tabIndex = 22 1616 | $ImageWidthTextBox.Enabled = $false 1617 | 1618 | 1619 | $imgSize = $ImageArray[0] 1620 | if($imgSize -ne $null) 1621 | { 1622 | $ImageHeightTextBox.text = $imgSize.Height 1623 | $ImageWidthTextBox.text = $imgSize.Width 1624 | } 1625 | 1626 | #ResetSizeButton ============================================================ 1627 | $ResetSizeButton = New-Object System.Windows.Forms.Button 1628 | $ResetSizeButton.Location = New-Object System.Drawing.Size(245,365) 1629 | $ResetSizeButton.Size = New-Object System.Drawing.Size(70,18) 1630 | $ResetSizeButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1631 | $ResetSizeButton.Text = "Reset Size" 1632 | $ResetSizeButton.TabIndex = 23 1633 | $ResetSizeButton.Add_Click( 1634 | { 1635 | $imgSize = $ImageArray[0] 1636 | if($imgSize -ne $null) 1637 | { 1638 | $ImageHeightTextBox.Value = $imgSize.Height 1639 | #$ImageWidthTextBox.text = $imgSize.Width 1640 | } 1641 | 1642 | }) 1643 | 1644 | 1645 | #InfiniteLoopsLabel ============================================================ 1646 | $InfiniteLoopsLabel = New-Object System.Windows.Forms.Label 1647 | $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold) 1648 | # Font styles are: Regular, Bold, Italic, Underline, Strikeout 1649 | $InfiniteLoopsLabel.Font = $Font 1650 | $InfiniteLoopsLabel.Location = New-Object System.Drawing.Size(20,390) 1651 | $InfiniteLoopsLabel.Size = New-Object System.Drawing.Size(95,18) 1652 | $InfiniteLoopsLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 1653 | $InfiniteLoopsLabel.Text = "Infinite Loop:" 1654 | $InfiniteLoopsLabel.TabStop = $false 1655 | 1656 | # InfiniteLoopsCheckBox ============================================================ 1657 | $InfiniteLoopsCheckBox = New-Object System.Windows.Forms.Checkbox 1658 | $InfiniteLoopsCheckBox.Location = New-Object System.Drawing.Size(120,390) 1659 | $InfiniteLoopsCheckBox.Size = New-Object System.Drawing.Size(20,20) 1660 | $InfiniteLoopsCheckBox.Checked = $true 1661 | $InfiniteLoopsCheckBox.TabIndex = 24 1662 | 1663 | 1664 | # ExportGIFButton button. 1665 | $ExportGIFButton = New-Object System.Windows.Forms.Button 1666 | $ExportGIFButton.Location = New-Object System.Drawing.Size(350,385) 1667 | $ExportGIFButton.Size = New-Object System.Drawing.Size(90,25) 1668 | $ExportGIFButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1669 | $ExportGIFButton.Text = "Export GIF" 1670 | $ExportGIFButton.tabIndex = 25 1671 | $ExportGIFButton.Add_Click({ 1672 | 1673 | #Process the array 1674 | $loopNo = 0 1675 | $FinalImageArray = @() 1676 | foreach($img in $ImageArray) 1677 | { 1678 | $StartFrameImageSetting = $StartFrameImageNumberBox.Value 1679 | $EndFrameImageSetting = $EndFrameImageNumberBox.Value 1680 | if($loopNo -ge $StartFrameImageSetting -and $loopNo -le $EndFrameImageSetting) 1681 | { 1682 | $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height) 1683 | [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs 1684 | $graph.DrawImage($img, 0, 0, [int]$img.Width, [int]$img.Height) 1685 | 1686 | 1687 | foreach ($item in $lv.Items) 1688 | { 1689 | [int]$lineThickness = $img.Height / 200 1690 | 1691 | $startFrame = $item.Text -as [int] 1692 | $endFrame = $item.SubItems[1].Text -as [int] 1693 | $shape = $item.SubItems[2].Text 1694 | $colour = $item.SubItems[3].Text 1695 | $1 = $item.SubItems[4].Text -as [int] 1696 | $2 = $item.SubItems[5].Text -as [int] 1697 | $3 = $item.SubItems[6].Text -as [int] 1698 | $4 = $item.SubItems[7].Text -as [int] 1699 | 1700 | if($loopNo -ge $startFrame -and $loopNo -le $endFrame) 1701 | { 1702 | #Write-Host "INFO: Found shape to render - $colour,$1,$2,$3,$4" -foreground yellow 1703 | 1704 | if($colour -eq "Green") 1705 | { 1706 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Green, $lineThickness) 1707 | } 1708 | elseif($colour -eq "Purple") 1709 | { 1710 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Purple, $lineThickness) 1711 | } 1712 | elseif($colour -eq "Blue") 1713 | { 1714 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Blue, $lineThickness) 1715 | } 1716 | elseif($colour -eq "Orange") 1717 | { 1718 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Orange, $lineThickness) 1719 | } 1720 | elseif($colour -eq "Pink") 1721 | { 1722 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Pink, $lineThickness) 1723 | } 1724 | elseif($colour -eq "Yellow") 1725 | { 1726 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Yellow, $lineThickness) 1727 | } 1728 | elseif($colour -eq "White") 1729 | { 1730 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::White, $lineThickness) 1731 | } 1732 | elseif($colour -eq "Maroon") 1733 | { 1734 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Maroon, $lineThickness) 1735 | } 1736 | elseif($colour -eq "Black") 1737 | { 1738 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, $lineThickness) 1739 | } 1740 | else 1741 | { 1742 | [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Red, $lineThickness) 1743 | } 1744 | 1745 | if($shape -eq "Circle") 1746 | { 1747 | $graph.DrawEllipse($pen,$1, $2, $3, $4) 1748 | } 1749 | else 1750 | { 1751 | $graph.DrawRectangle($pen,$1, $2, $3, $4) 1752 | } 1753 | } 1754 | } 1755 | 1756 | $graph.Dispose() 1757 | 1758 | $ImageHeightSetting = $ImageHeightTextBox.Value -as [int] 1759 | if($imgForGraph.Height -ne $ImageHeightSetting) 1760 | { 1761 | Write-Host "INFO: Resizing image." -foreground yellow 1762 | $imgForGraph = ResizeImageHeightRetainRatio -img $imgForGraph -heightInPixels $ImageHeightSetting 1763 | } 1764 | 1765 | $FinalImageArray += $imgForGraph 1766 | } 1767 | else 1768 | { 1769 | Write-Host "INFO: Ignoring frame $loopNo as it's outside of the start/end bounds." -foreground yellow 1770 | } 1771 | $loopNo++ 1772 | } 1773 | 1774 | if($FinalImageArray -eq $null) 1775 | { 1776 | Write-Host "INFO: Canceled Dialog - Image array equals null" -foreground "yellow" 1777 | } 1778 | else 1779 | { 1780 | try { 1781 | 1782 | $fileDialog = New-Object System.Windows.Forms.SaveFileDialog 1783 | $fileDialog.FileName = "AnimatedScreenShot.gif" 1784 | $fileDialog.Title = "Save Animated GIF" 1785 | $fileDialog.Filter = "GIF (*.gif)|*.*" 1786 | $fileDialog.CheckFileExists = $false 1787 | $Show = $fileDialog.ShowDialog() 1788 | if ($Show -eq "OK") 1789 | { 1790 | [string]$filename = $fileDialog.FileName 1791 | 1792 | #Write-Host 'INFO: Creating GifWriter object' -foreground yellow 1793 | 1794 | $infiniteloops = $InfiniteLoopsCheckBox.Checked 1795 | $fileLocation = $filename 1796 | $GifWriterObject = Import-GifWriter -FileLocation $fileLocation -InfiniteLoops $infiniteloops 1797 | 1798 | foreach ($img in $FinalImageArray) 1799 | { 1800 | Write-Host "INFO: Adding image to GIF." -foreground yellow 1801 | $GifWriterObject.WriteFrame([System.Drawing.Image]$img) 1802 | $img = $null 1803 | } 1804 | 1805 | $GifWriterObject.Dispose() 1806 | $FinalImageArray = @() 1807 | Write-Output $True 1808 | } 1809 | } 1810 | catch { 1811 | Write-Host $Error[0] -foreground red 1812 | exit -1 1813 | } 1814 | } 1815 | 1816 | }) 1817 | 1818 | 1819 | # Create the Cancel button. 1820 | $CancelButton = New-Object System.Windows.Forms.Button 1821 | $CancelButton.Location = New-Object System.Drawing.Size(450,385) 1822 | $CancelButton.Size = New-Object System.Drawing.Size(90,25) 1823 | $CancelButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left 1824 | $CancelButton.Text = "Close" 1825 | $CancelButton.tabIndex = 26 1826 | $CancelButton.Add_Click({ 1827 | Write-Host "INFO: Canceled dialog" -foreground "yellow" 1828 | $form.Tag = $null 1829 | $form.Close() 1830 | 1831 | }) 1832 | 1833 | # Create the form. 1834 | $form = New-Object System.Windows.Forms.Form 1835 | $form.Text = "GIF Editing Studio" 1836 | $form.Size = New-Object System.Drawing.Size(880,465) 1837 | $form.FormBorderStyle = 'FixedSingle' 1838 | $form.StartPosition = "CenterScreen" 1839 | $form.AutoSizeMode = 'GrowAndShrink' 1840 | [byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59) 1841 | 1842 | $ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length) 1843 | $form.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon()) 1844 | #$form.Topmost = $True 1845 | #$form.AcceptButton = $okButton 1846 | $form.ShowInTaskbar = $true 1847 | #$form.MinimizeBox = $False 1848 | $form.Tag = $null 1849 | 1850 | $form.Controls.Add($okButton) 1851 | $form.Controls.Add($CancelButton) 1852 | $form.Controls.Add($DrawShapesLabel) 1853 | $form.Controls.Add($PictureBox) 1854 | $form.Controls.Add($ShapeLabel) 1855 | $form.Controls.Add($ShapeDropDownBox) 1856 | $form.Controls.Add($ColourLabel) 1857 | $form.Controls.Add($ColourDropDownBox) 1858 | $form.Controls.Add($RightManualButton) 1859 | $form.Controls.Add($LeftManualButton) 1860 | $form.Controls.Add($FrameNumberLabel) 1861 | $form.Controls.Add($FrameNumberNumberBox) 1862 | $form.Controls.Add($FrameNumberEndNumberLabel) 1863 | $form.Controls.Add($lv) 1864 | $form.Controls.Add($EditShapeButton) 1865 | $form.Controls.Add($DeleteShapeButton) 1866 | $form.Controls.Add($StartFrameTextBox) 1867 | $form.Controls.Add($EndFrameTextBox) 1868 | $form.Controls.Add($ShapeTextBox) 1869 | $form.Controls.Add($ColourTextBox) 1870 | $form.Controls.Add($StartXTextBox) 1871 | $form.Controls.Add($StartYTextBox) 1872 | $form.Controls.Add($WidthTextBox) 1873 | $form.Controls.Add($HeightTextBox) 1874 | $form.Controls.Add($MarkupShapeLabel) 1875 | $form.Controls.Add($ImageSizeLabel) 1876 | $form.Controls.Add($ImageHeightTextBox) 1877 | $form.Controls.Add($ImageWidthTextBox) 1878 | $form.Controls.Add($ImageSizeXLabel) 1879 | $form.Controls.Add($StartFrameImageLabel) 1880 | $form.Controls.Add($StartFrameImageNumberBox) 1881 | $form.Controls.Add($EndFrameImageLabel) 1882 | $form.Controls.Add($EndFrameImageNumberBox) 1883 | $form.Controls.Add($ExportGIFButton) 1884 | $form.Controls.Add($ResetSizeButton) 1885 | $form.Controls.Add($InfiniteLoopsLabel) 1886 | $form.Controls.Add($InfiniteLoopsCheckBox) 1887 | 1888 | 1889 | # Initialize and show the form. 1890 | $form.Add_Shown({$form.Activate()}) 1891 | $form.ShowDialog() > $null # Trash the text of the button that was clicked. 1892 | 1893 | } 1894 | 1895 | function ResizeImageHeightRetainRatio([System.Drawing.Image] $img, [int] $heightInPixels) 1896 | { 1897 | Write-Host "INFO: Resizing image to height: $heightInPixels" -foreground yellow 1898 | $imgWidth = $img.Width 1899 | $imgHeight = $img.Height 1900 | $ratio = $heightInPixels / $imgHeight 1901 | [int] $widthInPixels = $imgWidth*$ratio 1902 | $imgResized = New-Object System.Drawing.Bitmap([int]($imgWidth*$ratio), $heightInPixels) 1903 | $graph = [System.Drawing.Graphics]::FromImage($imgResized) 1904 | 1905 | $graph.Clear([System.Drawing.Color]::White) 1906 | $rectangle = New-Object System.Drawing.Rectangle(0, 0, $widthInPixels, $heightInPixels) 1907 | 1908 | $graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic 1909 | $graph.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::HighQuality 1910 | $graph.CompositingQuality = [System.Drawing.Drawing2D.CompositingQuality]::HighQuality 1911 | $graph.PixelOffsetMode = [System.Drawing.Drawing2D.PixelOffsetMode]::HighQuality 1912 | $graph.DrawImage($img,$rectangle, 0,0, $imgWidth, $imgHeight, [System.Drawing.GraphicsUnit]::Pixel) 1913 | 1914 | $img.Dispose() 1915 | return $imgResized 1916 | } 1917 | 1918 | function SaveImageFile([System.Drawing.Image] $bmp) 1919 | { 1920 | 1921 | Write-Host "Saving Image..." -foreground "yellow" 1922 | #File Dialog 1923 | $objFileForm = New-Object System.Windows.Forms.SaveFileDialog 1924 | $objFileForm.FileName = "ScreenShot.jpg" 1925 | $objFileForm.Title = "Save Image" 1926 | $objFileForm.Filter = "JPG (*.jpg)|*.*" 1927 | $objFileForm.CheckFileExists = $false 1928 | $Show = $objFileForm.ShowDialog() 1929 | if ($Show -eq "OK") 1930 | { 1931 | [string]$imageTarget = $objFileForm.FileName 1932 | 1933 | Write-Host "Output File: $imageTarget" -foreground "green" 1934 | [int]$quality = 95 1935 | 1936 | #Encoder parameter for image quality 1937 | $myEncoder = [System.Drawing.Imaging.Encoder]::Quality 1938 | $encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1) 1939 | $encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($myEncoder, $quality) 1940 | # get codec 1941 | $myImageCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders()|where {$_.MimeType -eq 'image/jpeg'} 1942 | 1943 | #save to file 1944 | $bmp.Save($imageTarget,$myImageCodecInfo, $($encoderParams)) 1945 | $bmp.Dispose() 1946 | 1947 | } 1948 | else 1949 | { 1950 | Write-Host "INFO: Canceled save image dialog..." -foreground "Yellow" 1951 | return 1952 | } 1953 | } 1954 | 1955 | 1956 | function Import-GifWriter { 1957 | Param ( 1958 | [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] 1959 | [ValidateNotNullOrEmpty()] 1960 | [string] $FileLocation, 1961 | [bool] $InfiniteLoops = $true 1962 | ) 1963 | 1964 | #https://stackoverflow.com/questions/1196322/how-to-create-an-animated-gif-in-net 1965 | $GifWriter = @' 1966 | using System; 1967 | using System.Drawing; 1968 | using System.Drawing.Imaging; 1969 | using System.IO; 1970 | using System.Threading.Tasks; 1971 | 1972 | /// 1973 | /// Creates a GIF using .Net GIF encoding and additional animation headers. 1974 | /// 1975 | 1976 | public class GifWriter 1977 | { 1978 | #region Fields 1979 | const long SourceGlobalColorInfoPosition = 10, SourceImageBlockPosition = 789; 1980 | 1981 | readonly BinaryWriter _writer; 1982 | bool _firstFrame = true; 1983 | readonly object _syncLock = new object(); 1984 | #endregion 1985 | 1986 | /// 1987 | /// Creates a new instance of GifWriter. 1988 | /// 1989 | /// The to output the Gif to. 1990 | /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay. 1991 | /// No of times the Gif should repeat... -1 to repeat indefinitely. 1992 | public GifWriter(Stream OutStream, int DefaultFrameDelay = 500, int Repeat = -1) 1993 | { 1994 | if (OutStream == null) 1995 | throw new ArgumentNullException("OutStream"); 1996 | 1997 | if (DefaultFrameDelay <= 0) 1998 | throw new ArgumentOutOfRangeException("DefaultFrameDelay"); 1999 | 2000 | if (Repeat < -1) 2001 | throw new ArgumentOutOfRangeException("Repeat"); 2002 | 2003 | _writer = new BinaryWriter(OutStream); 2004 | this.DefaultFrameDelay = DefaultFrameDelay; 2005 | this.Repeat = Repeat; 2006 | } 2007 | 2008 | /// 2009 | /// Creates a new instance of GifWriter. 2010 | /// 2011 | /// The path to the file to output the Gif to. 2012 | /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay. 2013 | /// No of times the Gif should repeat... -1 to repeat indefinitely. 2014 | public GifWriter(string FileName, int DefaultFrameDelay = 500, int Repeat = -1) 2015 | : this(new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read), DefaultFrameDelay, Repeat) { } 2016 | 2017 | #region Properties 2018 | /// 2019 | /// Gets or Sets the Default Width of a Frame. Used when unspecified. 2020 | /// 2021 | public int DefaultWidth { get; set; } 2022 | 2023 | /// 2024 | /// Gets or Sets the Default Height of a Frame. Used when unspecified. 2025 | /// 2026 | public int DefaultHeight { get; set; } 2027 | 2028 | /// 2029 | /// Gets or Sets the Default Delay in Milliseconds. 2030 | /// 2031 | public int DefaultFrameDelay { get; set; } 2032 | 2033 | /// 2034 | /// The Number of Times the Animation must repeat. 2035 | /// -1 indicates no repeat. 0 indicates repeat indefinitely 2036 | /// 2037 | public int Repeat { get; set; } 2038 | #endregion 2039 | 2040 | /// 2041 | /// Adds a frame to this animation. 2042 | /// 2043 | /// The image to add 2044 | /// Delay in Milliseconds between this and last frame... 0 = 2045 | public void WriteFrame(Image Image, int Delay = 0) 2046 | { 2047 | lock (_syncLock) 2048 | using (var gifStream = new MemoryStream()) 2049 | { 2050 | Image.Save(gifStream, ImageFormat.Gif); 2051 | 2052 | // Steal the global color table info 2053 | if (_firstFrame) 2054 | InitHeader(gifStream, _writer, Image.Width, Image.Height); 2055 | 2056 | WriteGraphicControlBlock(gifStream, _writer, Delay == 0 ? DefaultFrameDelay : Delay); 2057 | WriteImageBlock(gifStream, _writer, !_firstFrame, 0, 0, Image.Width, Image.Height); 2058 | } 2059 | 2060 | if (_firstFrame) 2061 | _firstFrame = false; 2062 | } 2063 | 2064 | #region Write 2065 | void InitHeader(Stream SourceGif, BinaryWriter Writer, int Width, int Height) 2066 | { 2067 | // File Header 2068 | Writer.Write("GIF".ToCharArray()); // File type 2069 | Writer.Write("89a".ToCharArray()); // File Version 2070 | 2071 | Writer.Write((short)(DefaultWidth == 0 ? Width : DefaultWidth)); // Initial Logical Width 2072 | Writer.Write((short)(DefaultHeight == 0 ? Height : DefaultHeight)); // Initial Logical Height 2073 | 2074 | SourceGif.Position = SourceGlobalColorInfoPosition; 2075 | Writer.Write((byte)SourceGif.ReadByte()); // Global Color Table Info 2076 | Writer.Write((byte)0); // Background Color Index 2077 | Writer.Write((byte)0); // Pixel aspect ratio 2078 | WriteColorTable(SourceGif, Writer); 2079 | 2080 | // App Extension Header for Repeating 2081 | if (Repeat == -1) 2082 | return; 2083 | 2084 | Writer.Write(unchecked((short)0xff21)); // Application Extension Block Identifier 2085 | Writer.Write((byte)0x0b); // Application Block Size 2086 | Writer.Write("NETSCAPE2.0".ToCharArray()); // Application Identifier 2087 | Writer.Write((byte)3); // Application block length 2088 | Writer.Write((byte)1); 2089 | Writer.Write((short)Repeat); // Repeat count for images. 2090 | Writer.Write((byte)0); // terminator 2091 | } 2092 | 2093 | static void WriteColorTable(Stream SourceGif, BinaryWriter Writer) 2094 | { 2095 | SourceGif.Position = 13; // Locating the image color table 2096 | var colorTable = new byte[768]; 2097 | SourceGif.Read(colorTable, 0, colorTable.Length); 2098 | Writer.Write(colorTable, 0, colorTable.Length); 2099 | } 2100 | 2101 | static void WriteGraphicControlBlock(Stream SourceGif, BinaryWriter Writer, int FrameDelay) 2102 | { 2103 | SourceGif.Position = 781; // Locating the source GCE 2104 | var blockhead = new byte[8]; 2105 | SourceGif.Read(blockhead, 0, blockhead.Length); // Reading source GCE 2106 | 2107 | Writer.Write(unchecked((short)0xf921)); // Identifier 2108 | Writer.Write((byte)0x04); // Block Size 2109 | Writer.Write((byte)(blockhead[3] & 0xf7 | 0x08)); // Setting disposal flag 2110 | Writer.Write((short)(FrameDelay / 10)); // Setting frame delay 2111 | Writer.Write(blockhead[6]); // Transparent color index 2112 | Writer.Write((byte)0); // Terminator 2113 | } 2114 | 2115 | static void WriteImageBlock(Stream SourceGif, BinaryWriter Writer, bool IncludeColorTable, int X, int Y, int Width, int Height) 2116 | { 2117 | SourceGif.Position = SourceImageBlockPosition; // Locating the image block 2118 | var header = new byte[11]; 2119 | SourceGif.Read(header, 0, header.Length); 2120 | Writer.Write(header[0]); // Separator 2121 | Writer.Write((short)X); // Position X 2122 | Writer.Write((short)Y); // Position Y 2123 | Writer.Write((short)Width); // Width 2124 | Writer.Write((short)Height); // Height 2125 | 2126 | if (IncludeColorTable) // If first frame, use global color table - else use local 2127 | { 2128 | SourceGif.Position = SourceGlobalColorInfoPosition; 2129 | Writer.Write((byte)(SourceGif.ReadByte() & 0x3f | 0x80)); // Enabling local color table 2130 | WriteColorTable(SourceGif, Writer); 2131 | } 2132 | else Writer.Write((byte)(header[9] & 0x07 | 0x07)); // Disabling local color table 2133 | 2134 | Writer.Write(header[10]); // LZW Min Code Size 2135 | 2136 | // Read/Write image data 2137 | SourceGif.Position = SourceImageBlockPosition + header.Length; 2138 | 2139 | var dataLength = SourceGif.ReadByte(); 2140 | while (dataLength > 0) 2141 | { 2142 | var imgData = new byte[dataLength]; 2143 | SourceGif.Read(imgData, 0, dataLength); 2144 | 2145 | Writer.Write((byte)dataLength); 2146 | Writer.Write(imgData, 0, dataLength); 2147 | dataLength = SourceGif.ReadByte(); 2148 | } 2149 | 2150 | Writer.Write((byte)0); // Terminator 2151 | } 2152 | #endregion 2153 | 2154 | /// 2155 | /// Frees all resources used by this object. 2156 | /// 2157 | public void Dispose() 2158 | { 2159 | // Complete File 2160 | _writer.Write((byte)0x3b); // File Trailer 2161 | 2162 | _writer.BaseStream.Dispose(); 2163 | _writer.Dispose(); 2164 | } 2165 | } 2166 | '@ 2167 | 2168 | Write-Host 'INFO: Adding GifWriter Class Assembly' -foreground yellow 2169 | try { 2170 | 2171 | if($DotNetCoreCommands) 2172 | { 2173 | Add-Type $GifWriter -ReferencedAssemblies 'System.Windows.Forms', 'System.Drawing', 'System.Drawing.Common', 'System.Threading' 2174 | } 2175 | else 2176 | { 2177 | Add-Type $GifWriter -ReferencedAssemblies 'System.Windows.Forms', 'System.Drawing', 'System.Threading' 2178 | } 2179 | 2180 | Write-Host "INFO: Saving GIF to file location: $FileLocation" -foreground green 2181 | if($InfiniteLoops) 2182 | { 2183 | $GifWriterObject = [GifWriter]::new($FileLocation,500,0) 2184 | } 2185 | else 2186 | { 2187 | $GifWriterObject = [GifWriter]::new($FileLocation,500,-1) 2188 | } 2189 | 2190 | Write-Host 'INFO: Returning GifWriter object' -foreground yellow 2191 | 2192 | Write-Output $GifWriterObject 2193 | } 2194 | catch { 2195 | Write-Host $Error[0] -foreground red 2196 | } 2197 | } 2198 | 2199 | # Activate the form ============================================================ 2200 | $objForm.Add_Shown({$objForm.Activate()}) 2201 | [void] $objForm.ShowDialog() 2202 | 2203 | 2204 | # SIG # Begin signature block 2205 | # MIIjVgYJKoZIhvcNAQcCoIIjRzCCI0MCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB 2206 | # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR 2207 | # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQULXs5HFXCEPkKAYAeyk710Kfk 2208 | # //Gggh10MIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0B 2209 | # AQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD 2210 | # VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk 2211 | # IElEIFJvb3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQsw 2212 | # CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu 2213 | # ZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQg 2214 | # Q29kZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA 2215 | # +NOzHH8OEa9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ 2216 | # 1DcZ17aq8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0 2217 | # sSgmuyRpwsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6s 2218 | # cKKrzn/pfMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4Tz 2219 | # rGdOtcT3jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg 2220 | # 0A9kczyen6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIB 2221 | # ADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUH 2222 | # AQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYI 2223 | # KwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz 2224 | # c3VyZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0 2225 | # LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaG 2226 | # NGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RD 2227 | # QS5jcmwwTwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0 2228 | # dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYE 2229 | # FFrEuXsqCqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6en 2230 | # IZ3zbcgPMA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06 2231 | # GsTvMGHXfgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5j 2232 | # DhNLrddfRHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgC 2233 | # PC6Ro8AlEeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIy 2234 | # sjaKJAL+L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4Gb 2235 | # T8aTEAb8B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHvMIIFNTCC 2236 | # BB2gAwIBAgIQCjSHIb+9FkHaGapmaAdBYDANBgkqhkiG9w0BAQsFADByMQswCQYD 2237 | # VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGln 2238 | # aWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29k 2239 | # ZSBTaWduaW5nIENBMB4XDTIwMDEwNjAwMDAwMFoXDTIzMDExMDEyMDAwMFowcjEL 2240 | # MAkGA1UEBhMCQVUxDDAKBgNVBAgTA1ZJQzEQMA4GA1UEBxMHTWl0Y2hhbTEVMBMG 2241 | # A1UEChMMSmFtZXMgQ3Vzc2VuMRUwEwYDVQQLEwxKYW1lcyBDdXNzZW4xFTATBgNV 2242 | # BAMTDEphbWVzIEN1c3NlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB 2243 | # AM3q0UPJQVPnA/Y1s0Fe4trGhjc16182jZBFJFHWW3pueKrpZaRkMKegW9IcxBbD 2244 | # yGj0ne/epCL70AnW9lulTPc6eWcWY/HSIed/X6K9jVuwL/JI4/qqavoHg+wRloS1 2245 | # ynTEXX3VWYH/YYFovhTr/myR6eTAiovaTVhIvJoL2kWXdhbhie/kZWKWIRmpmDcP 2246 | # Smld9v0/bdjJu2/QLNY5bLPv2Y2vibG+UaQxX4Ul+XihtRcvE9EJ2hLyZtC469ig 2247 | # 9hPQAJgfemWpTbsIaj6HIhFH5U1Mq5kpWMPR8RWenFl7x4nXF5xVvXsR6WrFwtmo 2248 | # MMWM2LPhaqGy+nA8NufJInUCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsq 2249 | # CqOl6nEDwGD5LfZldQ5YMB0GA1UdDgQWBBT+fAtBa1j45lF9yIVym7Yzj/FB0DAO 2250 | # BgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1 2251 | # oDOgMYYvaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1n 2252 | # MS5jcmwwNaAzoDGGL2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3Vy 2253 | # ZWQtY3MtZzEuY3JsMEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYIKwYBBQUH 2254 | # AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggr 2255 | # BgEFBQcBAQR4MHYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNv 2256 | # bTBOBggrBgEFBQcwAoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lD 2257 | # ZXJ0U0hBMkFzc3VyZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAw 2258 | # DQYJKoZIhvcNAQELBQADggEBAHwUySCXpI9ILpmOBI+3G0hy52zIdIaw16wGlMRW 2259 | # nSyYCjApfDdGDrkf+VcOL6Ar4Frhb9XVTp7O5Wc7v2PU/5D6jacVc8Szuo2Qzd8x 2260 | # D5qbdhNZ6npS9wXQRdHhCvIvJhJKxXYvEIE9VYao3kTgiylJvDfdvMDN4gRIx/aR 2261 | # ckJQQzRxYIhbfR/zV4RSeSHwvMg827e2v/YVcLXFjFsoMb0ioy+qQkwFwVz1mo4l 2262 | # PnXXFelUbN0LkWLHsdAxqwATNQHA150SmTpS7tm4Ye2m23lgVlwgGgR2JghWz6bK 2263 | # VI+nm+UfACOdvpXnjBIIDyMNUl9tRx4eo6xyxfUSVASQ3kswggWNMIIEdaADAgEC 2264 | # AhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVT 2265 | # MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j 2266 | # b20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4 2267 | # MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK 2268 | # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV 2269 | # BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQAD 2270 | # ggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVir 2271 | # dprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcW 2272 | # WVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5O 2273 | # yJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7K 2274 | # e13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1 2275 | # gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn 2276 | # 3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7n 2277 | # DmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIR 2278 | # t7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEd 2279 | # slQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j 2280 | # 7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMB 2281 | # AAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzf 2282 | # Lmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNV 2283 | # HQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8v 2284 | # b2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRp 2285 | # Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4w 2286 | # PDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJl 2287 | # ZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQAD 2288 | # ggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3 2289 | # bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP 2290 | # 0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZ 2291 | # NUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPL 2292 | # ILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9 2293 | # W9FcrBjDTZ9ztwGpn1eqXijiuZQwggauMIIElqADAgECAhAHNje3JFR82Ees/Shm 2294 | # Kl5bMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdp 2295 | # Q2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERp 2296 | # Z2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIy 2297 | # MzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7 2298 | # MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1l 2299 | # U3RhbXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUG 2300 | # SbPBPXJJUVXHJQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOc 2301 | # iQt/nR+eDzMfUBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkr 2302 | # PkLcZ47qUT3w1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rw 2303 | # N3mfXazL6IRktFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSm 2304 | # xR3NNg1c1eYbqMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu 2305 | # 9Yemj052FVUmcJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirH 2306 | # kr+g3uM+onP65x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506 2307 | # o9UD4L/wojzKQtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklN 2308 | # iyDSLFc1eSuo80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGT 2309 | # yYwMO1uKIqjBJgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgA 2310 | # DoRU7s7pXcheMBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0T 2311 | # AQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYD 2312 | # VR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMG 2313 | # A1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYY 2314 | # aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2Fj 2315 | # ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNV 2316 | # HR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRU 2317 | # cnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1s 2318 | # BwEwDQYJKoZIhvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPP 2319 | # MFPOvxj7x1Bd4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKW 2320 | # b8RQTGIdDAiCqBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpP 2321 | # kWaeLJ7giqzl/Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXa 2322 | # zPByoyP6wCeCRK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKv 2323 | # xMfBwWpx2cYTgAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl6 2324 | # 3f8lY5knLD0/a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YB 2325 | # T70/O3itTK37xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4n 2326 | # LCbbbxV7HhmLNriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvt 2327 | # lUG3OtUVmDG0YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm 2328 | # 2fBldkKmKYcJRyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqh 2329 | # K/bt1nz8MIIGwDCCBKigAwIBAgIQDE1pckuU+jwqSj0pB4A9WjANBgkqhkiG9w0B 2330 | # AQsFADBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5 2331 | # BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0 2332 | # YW1waW5nIENBMB4XDTIyMDkyMTAwMDAwMFoXDTMzMTEyMTIzNTk1OVowRjELMAkG 2333 | # A1UEBhMCVVMxETAPBgNVBAoTCERpZ2lDZXJ0MSQwIgYDVQQDExtEaWdpQ2VydCBU 2334 | # aW1lc3RhbXAgMjAyMiAtIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC 2335 | # AQDP7KUmOsap8mu7jcENmtuh6BSFdDMaJqzQHFUeHjZtvJJVDGH0nQl3PRWWCC9r 2336 | # ZKT9BoMW15GSOBwxApb7crGXOlWvM+xhiummKNuQY1y9iVPgOi2Mh0KuJqTku3h4 2337 | # uXoW4VbGwLpkU7sqFudQSLuIaQyIxvG+4C99O7HKU41Agx7ny3JJKB5MgB6FVueF 2338 | # 7fJhvKo6B332q27lZt3iXPUv7Y3UTZWEaOOAy2p50dIQkUYp6z4m8rSMzUy5Zsi7 2339 | # qlA4DeWMlF0ZWr/1e0BubxaompyVR4aFeT4MXmaMGgokvpyq0py2909ueMQoP6Mc 2340 | # D1AGN7oI2TWmtR7aeFgdOej4TJEQln5N4d3CraV++C0bH+wrRhijGfY59/XBT3Eu 2341 | # iQMRoku7mL/6T+R7Nu8GRORV/zbq5Xwx5/PCUsTmFntafqUlc9vAapkhLWPlWfVN 2342 | # L5AfJ7fSqxTlOGaHUQhr+1NDOdBk+lbP4PQK5hRtZHi7mP2Uw3Mh8y/CLiDXgazT 2343 | # 8QfU4b3ZXUtuMZQpi+ZBpGWUwFjl5S4pkKa3YWT62SBsGFFguqaBDwklU/G/O+mr 2344 | # Bw5qBzliGcnWhX8T2Y15z2LF7OF7ucxnEweawXjtxojIsG4yeccLWYONxu71LHx7 2345 | # jstkifGxxLjnU15fVdJ9GSlZA076XepFcxyEftfO4tQ6dwIDAQABo4IBizCCAYcw 2346 | # DgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYB 2347 | # BQUHAwgwIAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQY 2348 | # MBaAFLoW2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBRiit7QYfyPMRTtlwvN 2349 | # PSqUFN9SnDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5j 2350 | # b20vRGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0Eu 2351 | # Y3JsMIGQBggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au 2352 | # ZGlnaWNlcnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2Vy 2353 | # dC5jb20vRGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5n 2354 | # Q0EuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBVqioa80bzeFc3MPx140/WhSPx/PmV 2355 | # OZsl5vdyipjDd9Rk/BX7NsJJUSx4iGNVCUY5APxp1MqbKfujP8DJAJsTHbCYidx4 2356 | # 8s18hc1Tna9i4mFmoxQqRYdKmEIrUPwbtZ4IMAn65C3XCYl5+QnmiM59G7hqopvB 2357 | # U2AJ6KO4ndetHxy47JhB8PYOgPvk/9+dEKfrALpfSo8aOlK06r8JSRU1NlmaD1TS 2358 | # sht/fl4JrXZUinRtytIFZyt26/+YsiaVOBmIRBTlClmia+ciPkQh0j8cwJvtfEiy 2359 | # 2JIMkU88ZpSvXQJT657inuTTH4YBZJwAwuladHUNPeF5iL8cAZfJGSOA1zZaX5YW 2360 | # sWMMxkZAO85dNdRZPkOaGK7DycvD+5sTX2q1x+DzBcNZ3ydiK95ByVO5/zQQZ/Ym 2361 | # Mph7/lxClIGUgp2sCovGSxVK05iQRWAzgOAj3vgDpPZFR+XOuANCR+hBNnF3rf2i 2362 | # 6Jd0Ti7aHh2MWsgemtXC8MYiqE+bvdgcmlHEL5r2X6cnl7qWLoVXwGDneFZ/au/C 2363 | # lZpLEQLIgpzJGgV8unG1TnqZbPTontRamMifv427GFxD9dAq6OJi7ngE273R+1sK 2364 | # qHB+8JeEeOMIA11HLGOoJTiXAdI/Otrl5fbmm9x+LMz/F0xNAKLY1gEOuIvu5uBy 2365 | # VYksJxlh9ncBjDGCBUwwggVIAgEBMIGGMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK 2366 | # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNV 2367 | # BAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0ECEAo0 2368 | # hyG/vRZB2hmqZmgHQWAwCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAIoAKA 2369 | # AKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO 2370 | # MAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFKnLiLiz5ovsU3+y4LkZN3IL 2371 | # pFugMA0GCSqGSIb3DQEBAQUABIIBAEd32ZEbtkmcep+IrWVqVZvNTnFqB2+z3dVr 2372 | # dWZAjxhCyokHElaiiuWlBem+adR0O/jSrQqoCQQSqWWl4hLE/jLIoS7ALl7CGO/U 2373 | # 4v8c9obazEihNZ0okTPjBI31aDYSLN+GrCg1qMydl5OYo+4tlKjNnC1AChzKbm9Q 2374 | # tLaFEWFMd6E4hA7bz3RwhKe9XvMwpmrNOPlvb3OcM06NLwqASysF4Ngr0DqIbQgD 2375 | # n2//n4oDecPqe7HBvT0whIE9IndTg9jbS5zJNacCsw8/fvMq6wFw+AW5DJ26j7Jm 2376 | # jfizSp5HEghBKljm4BtbBir0rHQ2cdVR0QW8evF9zi5ctgooK0+hggMgMIIDHAYJ 2377 | # KoZIhvcNAQkGMYIDDTCCAwkCAQEwdzBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO 2378 | # RGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNB 2379 | # NDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAMTWlyS5T6PCpKPSkHgD1aMA0G 2380 | # CWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG 2381 | # 9w0BCQUxDxcNMjIxMDA3MDIzNTAwWjAvBgkqhkiG9w0BCQQxIgQgnUr5aBcfMXS8 2382 | # 0drzJbnABzpA8ux4KQVsw0x1y7OzRScwDQYJKoZIhvcNAQEBBQAEggIAjSxeXv1z 2383 | # aiqDjxq5qYcDN9RIE6RqgDrjCx/6taNMih3FIGLLWAvk4sHDotEuyvCM9w9RHzKZ 2384 | # p3Og+pCSKbpj8c/c2giG4YA68eKNVh7QLfjQ4KtXcdivtmjqMDruFUn8pnOKDHQ6 2385 | # KMV5PD77oI/giAlFKHbOdluKGSA1dryFa6VEuWeFw4Lzu/TVzAr3NlN5+UIpzYNB 2386 | # +RCUGqEj4nkqAlN+jeQvDYKIWen/xVQhNqe7z0UtHFwT4dfLI67f07S1qbX0sWCk 2387 | # j4Vqxc5ZuPE+p0hNxXtCASpfSN/COt96dZOk/B87QF+Uu3yLV+LNXJO8Hy+ure31 2388 | # maF0p89uEB3EVWvmsDGEJrrRs1aM5876l53SVgUdVmjxAy/o7damMfNp7+eJPiqI 2389 | # Dc94mMZOsTfCz2j6h4oMze6i/Ae9igD/y+41XNhVCjQOvHa7AYUxo7QI1qSU/viV 2390 | # aEisWANNrgy/qRfK5VQ4zci0mZOXyTgHW/hTyXC/ESVWRjmsETrj1uNA0kSXiIBT 2391 | # YjHxRatlnpRNmMBvcX6nANfSsfQ1aofG/784Vlrq5S2p8Mw+LxFSt5HD2Q7ynNix 2392 | # X/LUkl7CZdZBvc6vCOKjlJFWPhs2A3AyKxouwebwljyX7VZTbcxaEzSbobZv+CTv 2393 | # or+UT524+myZK4uEokusZR0scGW+BsmzWMw= 2394 | # SIG # End signature block 2395 | --------------------------------------------------------------------------------