├── .clang-format ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── build ├── dwm-screen-shot.sln ├── dwm-screen-shot.vcxproj └── dwm-screen-shot.vcxproj.filters └── src ├── bitbug_favicon.ico ├── dwm-screen-shot.rc ├── dwm_symbol.cpp ├── dwm_symbol.h ├── framework.h ├── imgui_window.cpp ├── imgui_window.h ├── main.cpp ├── payload.hpp ├── resource.h └── win-url-download.hpp /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | Language: Cpp 3 | BasedOnStyle: LLVM 4 | AccessModifierOffset: -4 5 | AlignAfterOpenBracket: Align 6 | AlignConsecutiveMacros: false 7 | AlignConsecutiveAssignments: true 8 | AlignConsecutiveDeclarations: true 9 | AlignEscapedNewlines: Right 10 | AlignOperands: true 11 | AlignTrailingComments: true 12 | AllowAllArgumentsOnNextLine: true 13 | AllowAllConstructorInitializersOnNextLine: true 14 | AllowAllParametersOfDeclarationOnNextLine: true 15 | AllowShortBlocksOnASingleLine: Never 16 | AllowShortCaseLabelsOnASingleLine: false 17 | AllowShortFunctionsOnASingleLine: All 18 | AllowShortLambdasOnASingleLine: All 19 | AllowShortIfStatementsOnASingleLine: Never 20 | AllowShortLoopsOnASingleLine: false 21 | AlwaysBreakAfterDefinitionReturnType: None 22 | AlwaysBreakAfterReturnType: None 23 | AlwaysBreakBeforeMultilineStrings: false 24 | AlwaysBreakTemplateDeclarations: true 25 | BinPackArguments: true 26 | BinPackParameters: true 27 | BraceWrapping: 28 | AfterCaseLabel: false 29 | AfterClass: false 30 | AfterControlStatement: false 31 | AfterEnum: false 32 | AfterFunction: false 33 | AfterNamespace: false 34 | AfterObjCDeclaration: false 35 | AfterStruct: false 36 | AfterUnion: false 37 | AfterExternBlock: false 38 | BeforeCatch: false 39 | BeforeElse: false 40 | IndentBraces: false 41 | SplitEmptyFunction: true 42 | SplitEmptyRecord: true 43 | SplitEmptyNamespace: true 44 | BreakBeforeBinaryOperators: None 45 | BreakBeforeBraces: Attach 46 | BreakBeforeInheritanceComma: false 47 | BreakInheritanceList: BeforeColon 48 | BreakBeforeTernaryOperators: true 49 | BreakConstructorInitializersBeforeComma: false 50 | BreakConstructorInitializers: BeforeColon 51 | BreakAfterJavaFieldAnnotations: false 52 | BreakStringLiterals: true 53 | ColumnLimit: 120 54 | CommentPragmas: '^ IWYU pragma:' 55 | CompactNamespaces: false 56 | ConstructorInitializerAllOnOneLineOrOnePerLine: false 57 | ConstructorInitializerIndentWidth: 4 58 | ContinuationIndentWidth: 4 59 | Cpp11BracedListStyle: true 60 | DeriveLineEnding: true 61 | DerivePointerAlignment: false 62 | DisableFormat: false 63 | ExperimentalAutoDetectBinPacking: true 64 | FixNamespaceComments: true 65 | ForEachMacros: 66 | - foreach 67 | - Q_FOREACH 68 | - BOOST_FOREACH 69 | IncludeBlocks: Preserve 70 | IncludeCategories: 71 | - Regex: '^"(llvm|llvm-c|clang|clang-c)/' 72 | Priority: 2 73 | SortPriority: 0 74 | - Regex: '^(<|"(gtest|gmock|isl|json)/)' 75 | Priority: 3 76 | SortPriority: 0 77 | - Regex: '.*' 78 | Priority: 1 79 | SortPriority: 0 80 | IncludeIsMainRegex: '(Test)?$' 81 | IncludeIsMainSourceRegex: '' 82 | IndentCaseLabels: false 83 | IndentGotoLabels: true 84 | IndentPPDirectives: None 85 | IndentWidth: 4 86 | IndentWrappedFunctionNames: false 87 | JavaScriptQuotes: Leave 88 | JavaScriptWrapImports: true 89 | KeepEmptyLinesAtTheStartOfBlocks: true 90 | MacroBlockBegin: '' 91 | MacroBlockEnd: '' 92 | MaxEmptyLinesToKeep: 1 93 | NamespaceIndentation: None 94 | ObjCBinPackProtocolList: Auto 95 | ObjCBlockIndentWidth: 2 96 | ObjCSpaceAfterProperty: false 97 | ObjCSpaceBeforeProtocolList: true 98 | PenaltyBreakAssignment: 2 99 | PenaltyBreakBeforeFirstCallParameter: 19 100 | PenaltyBreakComment: 300 101 | PenaltyBreakFirstLessLess: 120 102 | PenaltyBreakString: 1000 103 | PenaltyBreakTemplateDeclaration: 10 104 | PenaltyExcessCharacter: 1000000 105 | PenaltyReturnTypeOnItsOwnLine: 60 106 | PointerAlignment: Right 107 | ReflowComments: true 108 | SortIncludes: true 109 | SortUsingDeclarations: true 110 | SpaceAfterCStyleCast: false 111 | SpaceAfterLogicalNot: false 112 | SpaceAfterTemplateKeyword: true 113 | SpaceBeforeAssignmentOperators: true 114 | SpaceBeforeCpp11BracedList: false 115 | SpaceBeforeCtorInitializerColon: true 116 | SpaceBeforeInheritanceColon: true 117 | SpaceBeforeParens: ControlStatements 118 | SpaceBeforeRangeBasedForLoopColon: true 119 | SpaceInEmptyBlock: false 120 | SpaceInEmptyParentheses: false 121 | SpacesBeforeTrailingComments: 1 122 | SpacesInAngles: false 123 | SpacesInConditionalStatement: false 124 | SpacesInContainerLiterals: true 125 | SpacesInCStyleCastParentheses: false 126 | SpacesInParentheses: false 127 | SpacesInSquareBrackets: false 128 | SpaceBeforeSquareBrackets: false 129 | Standard: Latest 130 | StatementMacros: 131 | - Q_UNUSED 132 | - QT_REQUIRE_VERSION 133 | TabWidth: 8 134 | UseCRLF: false 135 | UseTab: Never 136 | ... 137 | 138 | 139 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | *.ini 16 | # Mono auto generated files 17 | mono_crash.* 18 | /include/ 19 | [Tt]emp/ 20 | [Ll]ib 21 | # Build results 22 | [Dd]ebug/ 23 | [Dd]ebugPublic/ 24 | [Rr]elease/ 25 | [Rr]eleases/ 26 | x64/ 27 | x86/ 28 | [Ww][Ii][Nn]32/ 29 | [Aa][Rr][Mm]/ 30 | [Aa][Rr][Mm]64/ 31 | bld/ 32 | [Bb]in/ 33 | [Oo]bj/ 34 | [Ll]og/ 35 | [Ll]ogs/ 36 | 37 | # Visual Studio 2015/2017 cache/options directory 38 | .vs/ 39 | # Uncomment if you have tasks that create the project's static files in wwwroot 40 | #wwwroot/ 41 | 42 | # Visual Studio 2017 auto generated files 43 | Generated\ Files/ 44 | 45 | # MSTest test Results 46 | [Tt]est[Rr]esult*/ 47 | [Bb]uild[Ll]og.* 48 | 49 | # NUnit 50 | *.VisualState.xml 51 | TestResult.xml 52 | nunit-*.xml 53 | 54 | # Build Results of an ATL Project 55 | [Dd]ebugPS/ 56 | [Rr]eleasePS/ 57 | dlldata.c 58 | 59 | # Benchmark Results 60 | BenchmarkDotNet.Artifacts/ 61 | 62 | # .NET Core 63 | project.lock.json 64 | project.fragment.lock.json 65 | artifacts/ 66 | 67 | # ASP.NET Scaffolding 68 | ScaffoldingReadMe.txt 69 | 70 | # StyleCop 71 | StyleCopReport.xml 72 | 73 | # Files built by Visual Studio 74 | *_i.c 75 | *_p.c 76 | *_h.h 77 | *.ilk 78 | *.meta 79 | *.obj 80 | *.iobj 81 | *.pch 82 | *.pdb 83 | *.ipdb 84 | *.pgc 85 | *.pgd 86 | *.rsp 87 | *.sbr 88 | *.tlb 89 | *.tli 90 | *.tlh 91 | *.tmp 92 | *.tmp_proj 93 | *_wpftmp.csproj 94 | *.log 95 | *.vspscc 96 | *.vssscc 97 | .builds 98 | *.pidb 99 | *.svclog 100 | *.scc 101 | 102 | # Chutzpah Test files 103 | _Chutzpah* 104 | 105 | # Visual C++ cache files 106 | ipch/ 107 | *.aps 108 | *.ncb 109 | *.opendb 110 | *.opensdf 111 | *.sdf 112 | *.cachefile 113 | *.VC.db 114 | *.VC.VC.opendb 115 | 116 | # Visual Studio profiler 117 | *.psess 118 | *.vsp 119 | *.vspx 120 | *.sap 121 | 122 | # Visual Studio Trace Files 123 | *.e2e 124 | 125 | # TFS 2012 Local Workspace 126 | $tf/ 127 | 128 | # Guidance Automation Toolkit 129 | *.gpState 130 | 131 | # ReSharper is a .NET coding add-in 132 | _ReSharper*/ 133 | *.[Rr]e[Ss]harper 134 | *.DotSettings.user 135 | 136 | # TeamCity is a build add-in 137 | _TeamCity* 138 | 139 | # DotCover is a Code Coverage Tool 140 | *.dotCover 141 | 142 | # AxoCover is a Code Coverage Tool 143 | .axoCover/* 144 | !.axoCover/settings.json 145 | 146 | # Coverlet is a free, cross platform Code Coverage Tool 147 | coverage*[.json, .xml, .info] 148 | 149 | # Visual Studio code coverage results 150 | *.coverage 151 | *.coveragexml 152 | 153 | # NCrunch 154 | _NCrunch_* 155 | .*crunch*.local.xml 156 | nCrunchTemp_* 157 | 158 | # MightyMoose 159 | *.mm.* 160 | AutoTest.Net/ 161 | 162 | # Web workbench (sass) 163 | .sass-cache/ 164 | 165 | # Installshield output folder 166 | [Ee]xpress/ 167 | 168 | # DocProject is a documentation generator add-in 169 | DocProject/buildhelp/ 170 | DocProject/Help/*.HxT 171 | DocProject/Help/*.HxC 172 | DocProject/Help/*.hhc 173 | DocProject/Help/*.hhk 174 | DocProject/Help/*.hhp 175 | DocProject/Help/Html2 176 | DocProject/Help/html 177 | 178 | # Click-Once directory 179 | publish/ 180 | 181 | # Publish Web Output 182 | *.[Pp]ublish.xml 183 | *.azurePubxml 184 | # Note: Comment the next line if you want to checkin your web deploy settings, 185 | # but database connection strings (with potential passwords) will be unencrypted 186 | *.pubxml 187 | *.publishproj 188 | 189 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 190 | # checkin your Azure Web App publish settings, but sensitive information contained 191 | # in these scripts will be unencrypted 192 | PublishScripts/ 193 | 194 | # NuGet Packages 195 | *.nupkg 196 | # NuGet Symbol Packages 197 | *.snupkg 198 | # The packages folder can be ignored because of Package Restore 199 | **/[Pp]ackages/* 200 | # except build/, which is used as an MSBuild target. 201 | !**/[Pp]ackages/build/ 202 | # Uncomment if necessary however generally it will be regenerated when needed 203 | #!**/[Pp]ackages/repositories.config 204 | # NuGet v3's project.json files produces more ignorable files 205 | *.nuget.props 206 | *.nuget.targets 207 | 208 | # Microsoft Azure Build Output 209 | csx/ 210 | *.build.csdef 211 | 212 | # Microsoft Azure Emulator 213 | ecf/ 214 | rcf/ 215 | 216 | # Windows Store app package directories and files 217 | AppPackages/ 218 | BundleArtifacts/ 219 | Package.StoreAssociation.xml 220 | _pkginfo.txt 221 | *.appx 222 | *.appxbundle 223 | *.appxupload 224 | 225 | # Visual Studio cache files 226 | # files ending in .cache can be ignored 227 | *.[Cc]ache 228 | # but keep track of directories ending in .cache 229 | !?*.[Cc]ache/ 230 | 231 | # Others 232 | ClientBin/ 233 | ~$* 234 | *~ 235 | *.dbmdl 236 | *.dbproj.schemaview 237 | *.jfm 238 | *.pfx 239 | *.publishsettings 240 | orleans.codegen.cs 241 | 242 | # Including strong name files can present a security risk 243 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 244 | #*.snk 245 | 246 | # Since there are multiple workflows, uncomment next line to ignore bower_components 247 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 248 | #bower_components/ 249 | 250 | # RIA/Silverlight projects 251 | Generated_Code/ 252 | 253 | # Backup & report files from converting an old project file 254 | # to a newer Visual Studio version. Backup files are not needed, 255 | # because we have git ;-) 256 | _UpgradeReport_Files/ 257 | Backup*/ 258 | UpgradeLog*.XML 259 | UpgradeLog*.htm 260 | ServiceFabricBackup/ 261 | *.rptproj.bak 262 | 263 | # SQL Server files 264 | *.mdf 265 | *.ldf 266 | *.ndf 267 | 268 | # Business Intelligence projects 269 | *.rdl.data 270 | *.bim.layout 271 | *.bim_*.settings 272 | *.rptproj.rsuser 273 | *- [Bb]ackup.rdl 274 | *- [Bb]ackup ([0-9]).rdl 275 | *- [Bb]ackup ([0-9][0-9]).rdl 276 | 277 | # Microsoft Fakes 278 | FakesAssemblies/ 279 | 280 | # GhostDoc plugin setting file 281 | *.GhostDoc.xml 282 | 283 | # Node.js Tools for Visual Studio 284 | .ntvs_analysis.dat 285 | node_modules/ 286 | 287 | # Visual Studio 6 build log 288 | *.plg 289 | 290 | # Visual Studio 6 workspace options file 291 | *.opt 292 | 293 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 294 | *.vbw 295 | 296 | # Visual Studio LightSwitch build output 297 | **/*.HTMLClient/GeneratedArtifacts 298 | **/*.DesktopClient/GeneratedArtifacts 299 | **/*.DesktopClient/ModelManifest.xml 300 | **/*.Server/GeneratedArtifacts 301 | **/*.Server/ModelManifest.xml 302 | _Pvt_Extensions 303 | 304 | # Paket dependency manager 305 | .paket/paket.exe 306 | paket-files/ 307 | 308 | # FAKE - F# Make 309 | .fake/ 310 | 311 | # CodeRush personal settings 312 | .cr/personal 313 | 314 | # Python Tools for Visual Studio (PTVS) 315 | __pycache__/ 316 | *.pyc 317 | 318 | # Cake - Uncomment if you are using it 319 | # tools/** 320 | # !tools/packages.config 321 | 322 | # Tabs Studio 323 | *.tss 324 | 325 | # Telerik's JustMock configuration file 326 | *.jmconfig 327 | 328 | # BizTalk build output 329 | *.btp.cs 330 | *.btm.cs 331 | *.odx.cs 332 | *.xsd.cs 333 | 334 | # OpenCover UI analysis results 335 | OpenCover/ 336 | 337 | # Azure Stream Analytics local run output 338 | ASALocalRun/ 339 | 340 | # MSBuild Binary and Structured Log 341 | *.binlog 342 | 343 | # NVidia Nsight GPU debugger configuration file 344 | *.nvuser 345 | 346 | # MFractors (Xamarin productivity tool) working folder 347 | .mfractor/ 348 | 349 | # Local History for Visual Studio 350 | .localhistory/ 351 | 352 | # BeatPulse healthcheck temp database 353 | healthchecksdb 354 | 355 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 356 | MigrationBackup/ 357 | 358 | # Ionide (cross platform F# VS Code tools) working folder 359 | .ionide/ 360 | 361 | 362 | # Xcode 363 | # 364 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 365 | 366 | .DS_Store 367 | 368 | ## User settings 369 | xcuserdata/ 370 | 371 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 372 | *.xcscmblueprint 373 | *.xccheckout 374 | 375 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 376 | build/Xcode/build/* 377 | DerivedData/ 378 | *.moved-aside 379 | *.pbxuser 380 | !default.pbxuser 381 | *.mode1v3 382 | !default.mode1v3 383 | *.mode2v3 384 | !default.mode2v3 385 | *.perspectivev3 386 | !default.perspectivev3 387 | 388 | ## Obj-C/Swift specific 389 | *.hmap 390 | 391 | ## App packaging 392 | *.ipa 393 | *.dSYM.zip 394 | *.dSYM 395 | 396 | # CocoaPods 397 | # 398 | # We recommend against adding the Pods directory to your .gitignore. However 399 | # you should judge for yourself, the pros and cons are mentioned at: 400 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 401 | # 402 | # Pods/ 403 | # 404 | # Add this line if you want to avoid checking in source code from the Xcode workspace 405 | # *.xcworkspace 406 | 407 | # Carthage 408 | # 409 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 410 | # Carthage/Checkouts 411 | 412 | Carthage/Build/ 413 | 414 | # fastlane 415 | # 416 | # It is recommended to not store the screenshots in the git repo. 417 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 418 | # For more information about the recommended setup visit: 419 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 420 | 421 | fastlane/report.xml 422 | fastlane/Preview.html 423 | fastlane/screenshots/**/*.png 424 | fastlane/test_output 425 | 426 | # Code Injection 427 | # 428 | # After new code Injection tools there's a generated folder /iOSInjectionProject 429 | # https://github.com/johnno1962/injectionforxcode 430 | 431 | iOSInjectionProject/ 432 | 433 | # Scons 434 | *.o 435 | .sconsign.dblite -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "third_party/raw_pdb"] 2 | path = third_party/raw_pdb 3 | url = https://github.com/lainswork/raw_pdb.git 4 | [submodule "third_party/imgui"] 5 | path = third_party/imgui 6 | url = https://github.com/lainswork/imgui.git 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright 2011-2022, Molecular Matters GmbH 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [dwm-screen-shot](https://github.com/lainswork/dwm-screen-shot) 2 | ## 将shellcode注入dwm.exe 进行DXGI屏幕截取 3 | > imgui 显示部分的代码有些丑....无伤大雅 4 | ## 特点 5 | 6 | - 兼容绝大部分Windows10系统 7 | - FPS游戏反作弊(anti-cheat)杀手锏 8 | 9 | ## 使用 Use 10 | 11 | ```shell 12 | // 确保你已经安装了VS2019或以上 Make sure u have installed Visual Studio 2019 or later version 13 | // 打开PowerShell并进入一个为项目准备的文件夹,依次输入以下命令, Enter the following commands in PowerShell 14 | 15 | > git clone https://github.com/lainswork/dwm-screen-shot.git 16 | 17 | > cd dwm-screen-shot 18 | 19 | > git submodule update --init --recursive 20 | 21 | > cd ./build 22 | 23 | > devenv dwm-screen-shot.sln /build "Debug|x64" /Project dwm-screen-shot 24 | 25 | > cd ../bin/x64/Debug 26 | 27 | > .\dwm-screen-shot 28 | 29 | ``` 30 | 31 | 32 | https://user-images.githubusercontent.com/46841563/159519403-597fb25b-c353-46b6-98a6-90b68e83b263.mp4 33 | 34 | 35 | ## 注意 36 | ##### 你可能会发现源代码中存在一个 payload.hpp, 这是截屏的主要代码生成的 shellcode 37 | - 请查看 [shellcode-factory](https://github.com/lainswork/shellcode-factory) 38 | - 在 shellcode-factory/shellcode-payload/dwm-screen-shot-demo.cpp 中你会见到它是如何编写的 39 | ## 依赖 40 | - [shellcode-factory](https://github.com/lainswork/shellcode-factory) 41 | 42 | - [imgui](https://github.com/ocornut/imgui) 43 | - 请使用我的分支:[imgui](https://github.com/lainswork/imgui) 44 | - [raw_pdb](https://github.com/MolecularMatters/raw_pdb) 45 | - 请使用我的分支:[raw_pdb](https://github.com/lainswork/raw_pdb) 46 | 47 | 48 | ## 知识 knowledge 49 | > Direct3D(...Dx9 Dx10 Dx11 Dx12...)与 DXGI 50 | - Direct3D是一种底层绘图API(application programming interface,应用程序接口),它可以让我们可以通过3D硬件加速绘制3D世界。从本质上讲,Direct3D提供的是一组软件接口,我们可以通过这组接口来控制绘图硬件。 51 | [在以前图形子系统都归D3D,结果D3D8/D3D9分别有一套代码用来管理swap chain。在Vista+里,图形API越来越多,D3D9/D3D10/D3D11/D3D12,都来一套swap chain太没意义了。于是重构成所有API可以共享一份swap chain的代码,这就放在DXGI。除此之外,窗口全屏化之类的事情也都归DXGI了,你可以认为屏幕输出的部分都归DXGI。](https://www.zhihu.com/question/36501678/answer/67786884) 52 | 53 | > DWM 54 | - Desktop Window Manager (dwm.exe) 是窗口管理器的组成部分.[后来DXGI又加了一些底层的功能,用来跟DWM打交道,比如拷贝混合后的屏幕,设备旋转,跨屏幕窗口](https://www.zhihu.com/question/36501678/answer/67786884) 55 | 56 | > VEH hook 57 | - ...未完待续 58 | 59 | > 多线程下的代码注入 60 | - ...未完待续 61 | -------------------------------------------------------------------------------- /build/dwm-screen-shot.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.31025.194 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dwm-screen-shot", "dwm-screen-shot.vcxproj", "{34048859-CAFE-41DD-BB6F-96E384E55D15}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {B152F803-C0F6-40C1-AF78-96FB28802EDB} = {B152F803-C0F6-40C1-AF78-96FB28802EDB} 9 | {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910} = {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910} 10 | EndProjectSection 11 | EndProject 12 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RawPDB", "..\third_party\raw_pdb\build\RawPDB.vcxproj", "{FBE3DBFA-20A7-4F99-9326-ED82C8B7B910}" 13 | EndProject 14 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "library", "library", "{3B232514-8381-4E01-8F3C-EE9D6DE00330}" 15 | EndProject 16 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "imgui", "..\third_party\imgui\vs-project\imgui.vcxproj", "{B152F803-C0F6-40C1-AF78-96FB28802EDB}" 17 | EndProject 18 | Global 19 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 20 | Debug|x64 = Debug|x64 21 | Debug|x86 = Debug|x86 22 | Release|x64 = Release|x64 23 | Release|x86 = Release|x86 24 | EndGlobalSection 25 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 26 | {34048859-CAFE-41DD-BB6F-96E384E55D15}.Debug|x64.ActiveCfg = Debug|x64 27 | {34048859-CAFE-41DD-BB6F-96E384E55D15}.Debug|x64.Build.0 = Debug|x64 28 | {34048859-CAFE-41DD-BB6F-96E384E55D15}.Debug|x86.ActiveCfg = Debug|Win32 29 | {34048859-CAFE-41DD-BB6F-96E384E55D15}.Debug|x86.Build.0 = Debug|Win32 30 | {34048859-CAFE-41DD-BB6F-96E384E55D15}.Release|x64.ActiveCfg = Release|x64 31 | {34048859-CAFE-41DD-BB6F-96E384E55D15}.Release|x64.Build.0 = Release|x64 32 | {34048859-CAFE-41DD-BB6F-96E384E55D15}.Release|x86.ActiveCfg = Release|Win32 33 | {34048859-CAFE-41DD-BB6F-96E384E55D15}.Release|x86.Build.0 = Release|Win32 34 | {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910}.Debug|x64.ActiveCfg = Debug|x64 35 | {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910}.Debug|x64.Build.0 = Debug|x64 36 | {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910}.Debug|x86.ActiveCfg = Debug|x64 37 | {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910}.Release|x64.ActiveCfg = Release|x64 38 | {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910}.Release|x64.Build.0 = Release|x64 39 | {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910}.Release|x86.ActiveCfg = Release|x64 40 | {B152F803-C0F6-40C1-AF78-96FB28802EDB}.Debug|x64.ActiveCfg = Debug|x64 41 | {B152F803-C0F6-40C1-AF78-96FB28802EDB}.Debug|x64.Build.0 = Debug|x64 42 | {B152F803-C0F6-40C1-AF78-96FB28802EDB}.Debug|x86.ActiveCfg = Debug|Win32 43 | {B152F803-C0F6-40C1-AF78-96FB28802EDB}.Debug|x86.Build.0 = Debug|Win32 44 | {B152F803-C0F6-40C1-AF78-96FB28802EDB}.Release|x64.ActiveCfg = Release|x64 45 | {B152F803-C0F6-40C1-AF78-96FB28802EDB}.Release|x64.Build.0 = Release|x64 46 | {B152F803-C0F6-40C1-AF78-96FB28802EDB}.Release|x86.ActiveCfg = Release|Win32 47 | {B152F803-C0F6-40C1-AF78-96FB28802EDB}.Release|x86.Build.0 = Release|Win32 48 | EndGlobalSection 49 | GlobalSection(SolutionProperties) = preSolution 50 | HideSolutionNode = FALSE 51 | EndGlobalSection 52 | GlobalSection(NestedProjects) = preSolution 53 | {FBE3DBFA-20A7-4F99-9326-ED82C8B7B910} = {3B232514-8381-4E01-8F3C-EE9D6DE00330} 54 | {B152F803-C0F6-40C1-AF78-96FB28802EDB} = {3B232514-8381-4E01-8F3C-EE9D6DE00330} 55 | EndGlobalSection 56 | GlobalSection(ExtensibilityGlobals) = postSolution 57 | SolutionGuid = {2BBB1D1E-8381-46DE-9448-0A4085716376} 58 | EndGlobalSection 59 | EndGlobal 60 | -------------------------------------------------------------------------------- /build/dwm-screen-shot.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | 16.0 23 | Win32Proj 24 | {34048859-cafe-41dd-bb6f-96e384e55d15} 25 | dwmscreenshot 26 | 10.0 27 | 28 | 29 | 30 | Application 31 | true 32 | v142 33 | MultiByte 34 | false 35 | 36 | 37 | Application 38 | false 39 | v142 40 | true 41 | MultiByte 42 | false 43 | 44 | 45 | Application 46 | true 47 | v142 48 | MultiByte 49 | false 50 | 51 | 52 | Application 53 | false 54 | v142 55 | true 56 | MultiByte 57 | false 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | true 79 | $(ProjectDir)..\bin\$(PlatformName)\$(Configuration)\ 80 | $(ProjectDir)..\temp\$(PlatformName)\$(Configuration)\$(ProjectName)\ 81 | 82 | 83 | false 84 | $(ProjectDir)..\bin\$(PlatformName)\$(Configuration)\ 85 | $(ProjectDir)..\temp\$(PlatformName)\$(Configuration)\$(ProjectName)\ 86 | 87 | 88 | true 89 | $(ProjectDir)..\bin\$(PlatformName)\$(Configuration)\ 90 | $(ProjectDir)..\temp\$(PlatformName)\$(Configuration)\$(ProjectName)\ 91 | 92 | 93 | false 94 | $(ProjectDir)..\bin\$(PlatformName)\$(Configuration)\ 95 | $(ProjectDir)..\temp\$(PlatformName)\$(Configuration)\$(ProjectName)\ 96 | 97 | 98 | 99 | Level3 100 | true 101 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 102 | true 103 | $(ProjectDir)../third_party/imgui/backends;$(ProjectDir)../third_party/imgui;$(ProjectDir)../third_party/raw_pdb/include;$(ProjectDir)../src 104 | MultiThreadedDebug 105 | stdcpp17 106 | 107 | 108 | Windows 109 | true 110 | $(ProjectDir)../third_party/imgui/bin/$(PlatformName)/$(Configuration)/;$(ProjectDir)../third_party/raw_pdb/bin/$(PlatformName)/$(Configuration)/;%(AdditionalLibraryDirectories) 111 | RawPDB.lib;imgui.lib;dxgi.lib;d3d11.lib;%(AdditionalDependencies) 112 | 113 | 114 | 115 | 116 | Level3 117 | true 118 | true 119 | true 120 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 121 | true 122 | $(ProjectDir)../third_party/imgui/backends;$(ProjectDir)../third_party/imgui;$(ProjectDir)../third_party/raw_pdb/include;$(ProjectDir)../src 123 | MultiThreaded 124 | stdcpp17 125 | 126 | 127 | Windows 128 | true 129 | true 130 | true 131 | $(ProjectDir)../third_party/imgui/bin/$(PlatformName)/$(Configuration)/;$(ProjectDir)../third_party/raw_pdb/bin/$(PlatformName)/$(Configuration)/;%(AdditionalLibraryDirectories) 132 | RawPDB.lib;imgui.lib;dxgi.lib;d3d11.lib;%(AdditionalDependencies) 133 | 134 | 135 | 136 | 137 | Level3 138 | true 139 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions) 140 | true 141 | $(ProjectDir)../third_party/imgui/backends;$(ProjectDir)../third_party/imgui;$(ProjectDir)../third_party/raw_pdb/include;$(ProjectDir)../src 142 | MultiThreadedDebug 143 | stdcpp17 144 | 145 | 146 | Windows 147 | true 148 | $(ProjectDir)../third_party/imgui/bin/$(PlatformName)/$(Configuration)/;$(ProjectDir)../third_party/raw_pdb/bin/$(PlatformName)/$(Configuration)/;%(AdditionalLibraryDirectories) 149 | RawPDB.lib;imgui.lib;dxgi.lib;d3d11.lib;%(AdditionalDependencies) 150 | 151 | 152 | 153 | 154 | Level3 155 | true 156 | true 157 | true 158 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 159 | true 160 | $(ProjectDir)../third_party/imgui/backends;$(ProjectDir)../third_party/imgui;$(ProjectDir)../third_party/raw_pdb/include;$(ProjectDir)../src 161 | MultiThreaded 162 | stdcpp17 163 | 164 | 165 | Windows 166 | true 167 | true 168 | true 169 | $(ProjectDir)../third_party/imgui/bin/$(PlatformName)/$(Configuration)/;$(ProjectDir)../third_party/raw_pdb/bin/$(PlatformName)/$(Configuration)/;%(AdditionalLibraryDirectories) 170 | RawPDB.lib;imgui.lib;dxgi.lib;d3d11.lib;%(AdditionalDependencies) 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | -------------------------------------------------------------------------------- /build/dwm-screen-shot.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 头文件 20 | 21 | 22 | 头文件 23 | 24 | 25 | 头文件 26 | 27 | 28 | 头文件 29 | 30 | 31 | 头文件 32 | 33 | 34 | 35 | 36 | 资源文件 37 | 38 | 39 | 40 | 41 | 资源文件 42 | 43 | 44 | 资源文件 45 | 46 | 47 | 48 | 49 | 源文件 50 | 51 | 52 | 源文件 53 | 54 | 55 | 源文件 56 | 57 | 58 | -------------------------------------------------------------------------------- /src/bitbug_favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lainswork/dwm-screen-shot/4232385c7dbfb700fbfb27c8f3fb24d1bcab2789/src/bitbug_favicon.ico -------------------------------------------------------------------------------- /src/dwm-screen-shot.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lainswork/dwm-screen-shot/4232385c7dbfb700fbfb27c8f3fb24d1bcab2789/src/dwm-screen-shot.rc -------------------------------------------------------------------------------- /src/dwm_symbol.cpp: -------------------------------------------------------------------------------- 1 | #include "dwm_symbol.h" 2 | #include "PDB.h" 3 | #include "PDB_DBIStream.h" 4 | #include "PDB_InfoStream.h" 5 | #include "PDB_RawFile.h" 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #define PrintErro(text) MessageBoxA((HWND)0, text, "Erro", MB_OK | MB_TOPMOST) 14 | 15 | namespace dwm_symbol { 16 | 17 | size_t hook_offsets[symbol_num] = {0}; 18 | 19 | namespace { 20 | PDB_NO_DISCARD static bool IsError(PDB::ErrorCode errorCode) { 21 | 22 | switch (errorCode) { 23 | case PDB::ErrorCode::Success: 24 | return false; 25 | 26 | case PDB::ErrorCode::InvalidSuperBlock: 27 | PrintErro("Invalid Superblock\n"); 28 | return true; 29 | 30 | case PDB::ErrorCode::InvalidFreeBlockMap: 31 | PrintErro("Invalid free block map\n"); 32 | return true; 33 | 34 | case PDB::ErrorCode::InvalidSignature: 35 | PrintErro("Invalid stream signature\n"); 36 | return true; 37 | 38 | case PDB::ErrorCode::InvalidStreamIndex: 39 | PrintErro("Invalid stream index\n"); 40 | return true; 41 | 42 | case PDB::ErrorCode::UnknownVersion: 43 | PrintErro("Unknown version\n"); 44 | return true; 45 | } 46 | 47 | // only ErrorCode::Success means there wasn't an error, so all other paths 48 | // have to assume there was an error 49 | return true; 50 | } 51 | 52 | PDB_NO_DISCARD static bool HasValidDBIStreams(const PDB::RawFile &rawPdbFile, const PDB::DBIStream &dbiStream) { 53 | // check whether the DBI stream offers all sub-streams we need 54 | if (IsError(dbiStream.HasValidImageSectionStream(rawPdbFile))) { 55 | return false; 56 | } 57 | 58 | if (IsError(dbiStream.HasValidPublicSymbolStream(rawPdbFile))) { 59 | return false; 60 | } 61 | 62 | if (IsError(dbiStream.HasValidGlobalSymbolStream(rawPdbFile))) { 63 | return false; 64 | } 65 | 66 | if (IsError(dbiStream.HasValidSectionContributionStream(rawPdbFile))) { 67 | return false; 68 | } 69 | 70 | return true; 71 | } 72 | 73 | } // namespace 74 | DebugInfo *GetModuleDebugInfo(HMODULE module) { 75 | IMAGE_DOS_HEADER *pDos = (IMAGE_DOS_HEADER *)module; 76 | IMAGE_NT_HEADERS *pNt = (IMAGE_NT_HEADERS *)((CHAR *)module + pDos->e_lfanew); 77 | 78 | auto pDebug = 79 | (IMAGE_DEBUG_DIRECTORY *)(pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress + 80 | (CHAR *)module); 81 | 82 | auto pDebugInfo = (DebugInfo *)(pDebug->AddressOfRawData + (CHAR *)module); 83 | 84 | return pDebugInfo; 85 | } 86 | DebugInfo *GetModuleDebugInfo(const char *moduleName) { 87 | auto image_base = GetModuleHandleA(moduleName); 88 | if (image_base == nullptr) { 89 | return nullptr; 90 | } 91 | return GetModuleDebugInfo(image_base); 92 | } 93 | std::string pdburl(DebugInfo *pdb_info) { 94 | wchar_t w_GUID[100]{0}; 95 | if (!StringFromGUID2(pdb_info->Guid, w_GUID, 100)) { 96 | return {}; 97 | } 98 | 99 | char a_GUID[100]{0}; 100 | size_t l_GUID = 0; 101 | if (wcstombs_s(&l_GUID, a_GUID, w_GUID, sizeof(a_GUID)) || !l_GUID) { 102 | return {}; 103 | } 104 | 105 | std::string guid_filtered; 106 | for (UINT i = 0; i != l_GUID; ++i) { 107 | if ((a_GUID[i] >= '0' && a_GUID[i] <= '9') || (a_GUID[i] >= 'A' && a_GUID[i] <= 'F') || 108 | (a_GUID[i] >= 'a' && a_GUID[i] <= 'f')) { 109 | guid_filtered += a_GUID[i]; 110 | } 111 | } 112 | 113 | char age[3]{0}; 114 | _itoa_s(pdb_info->Age, age, 10); 115 | 116 | std::string url = "https://msdl.microsoft.com/download/symbols/"; 117 | url += pdb_info->PdbFileName; 118 | url += '/'; 119 | url += guid_filtered; 120 | url += age; 121 | url += '/'; 122 | url += pdb_info->PdbFileName; 123 | return url; 124 | } 125 | size_t find_sym_rva(const PDB::RawFile &rawPdbFile, const PDB::DBIStream &dbiStream, size_t symbol_hash) { 126 | 127 | const PDB::ImageSectionStream imageSectionStream = dbiStream.CreateImageSectionStream(rawPdbFile); 128 | const PDB::ModuleInfoStream moduleInfoStream = dbiStream.CreateModuleInfoStream(rawPdbFile); 129 | const PDB::ArrayView modules = moduleInfoStream.GetModules(); 130 | const PDB::PublicSymbolStream publicSymbolStream = dbiStream.CreatePublicSymbolStream(rawPdbFile); 131 | const PDB::CoalescedMSFStream symbolRecordStream = dbiStream.CreateSymbolRecordStream(rawPdbFile); 132 | const PDB::ArrayView hashRecords = publicSymbolStream.GetRecords(); 133 | 134 | std::hash strhash; 135 | 136 | for (const PDB::HashRecord &hashRecord : hashRecords) { 137 | const PDB::CodeView::DBI::Record *record = publicSymbolStream.GetRecord(symbolRecordStream, hashRecord); 138 | if ((PDB_AS_UNDERLYING(record->data.S_PUB32.flags) & 139 | PDB_AS_UNDERLYING(PDB::CodeView::DBI::PublicSymbolFlags::Function)) == 0u) 140 | continue; 141 | 142 | const uint32_t rva = 143 | imageSectionStream.ConvertSectionOffsetToRVA(record->data.S_PUB32.section, record->data.S_PUB32.offset); 144 | if (rva == 0u) 145 | continue; 146 | 147 | if (record->data.S_PUB32.name) { 148 | if (strhash(record->data.S_PUB32.name) == symbol_hash) { 149 | return static_cast(rva); 150 | } 151 | } 152 | } 153 | 154 | size_t _ret = 0; 155 | for (const PDB::ModuleInfoStream::Module &module : modules) { 156 | if (!module.HasSymbolStream()) { 157 | continue; 158 | } 159 | const PDB::ModuleSymbolStream moduleSymbolStream = module.CreateSymbolStream(rawPdbFile); 160 | moduleSymbolStream.ForEachSymbol( 161 | [symbol_hash, &_ret, &strhash, &imageSectionStream](const PDB::CodeView::DBI::Record *record) { 162 | // only grab function symbols from the module streams 163 | const char *name = nullptr; 164 | uint32_t rva = 0u; 165 | uint32_t size = 0u; 166 | if (record->header.kind == PDB::CodeView::DBI::SymbolRecordKind::S_THUNK32) { 167 | if (record->data.S_THUNK32.thunk == PDB::CodeView::DBI::ThunkOrdinal::TrampolineIncremental) { 168 | // we have never seen incremental linking thunks stored inside a 169 | // S_THUNK32 symbol, but better safe than sorry 170 | name = "ILT"; 171 | rva = imageSectionStream.ConvertSectionOffsetToRVA(record->data.S_THUNK32.section, 172 | record->data.S_THUNK32.offset); 173 | size = 5u; 174 | } 175 | } else if (record->header.kind == PDB::CodeView::DBI::SymbolRecordKind::S_TRAMPOLINE) { 176 | // incremental linking thunks are stored in the linker module 177 | name = "ILT"; 178 | rva = imageSectionStream.ConvertSectionOffsetToRVA(record->data.S_TRAMPOLINE.thunkSection, 179 | record->data.S_TRAMPOLINE.thunkOffset); 180 | size = 5u; 181 | } else if (record->header.kind == PDB::CodeView::DBI::SymbolRecordKind::S_LPROC32) { 182 | name = record->data.S_LPROC32.name; 183 | rva = imageSectionStream.ConvertSectionOffsetToRVA(record->data.S_LPROC32.section, 184 | record->data.S_LPROC32.offset); 185 | size = record->data.S_LPROC32.codeSize; 186 | } else if (record->header.kind == PDB::CodeView::DBI::SymbolRecordKind::S_GPROC32) { 187 | name = record->data.S_GPROC32.name; 188 | rva = imageSectionStream.ConvertSectionOffsetToRVA(record->data.S_GPROC32.section, 189 | record->data.S_GPROC32.offset); 190 | size = record->data.S_GPROC32.codeSize; 191 | } else if (record->header.kind == PDB::CodeView::DBI::SymbolRecordKind::S_LPROC32_ID) { 192 | name = record->data.S_LPROC32_ID.name; 193 | rva = imageSectionStream.ConvertSectionOffsetToRVA(record->data.S_LPROC32_ID.section, 194 | record->data.S_LPROC32_ID.offset); 195 | size = record->data.S_LPROC32_ID.codeSize; 196 | } else if (record->header.kind == PDB::CodeView::DBI::SymbolRecordKind::S_GPROC32_ID) { 197 | name = record->data.S_GPROC32_ID.name; 198 | rva = imageSectionStream.ConvertSectionOffsetToRVA(record->data.S_GPROC32_ID.section, 199 | record->data.S_GPROC32_ID.offset); 200 | size = record->data.S_GPROC32_ID.codeSize; 201 | } 202 | if (name) { 203 | // file << name << "\n"; 204 | if (strhash(name) == symbol_hash) { 205 | _ret = rva; 206 | } 207 | } 208 | 209 | if (rva == 0u) 210 | return; 211 | }); 212 | } 213 | return _ret; 214 | } 215 | 216 | bool init(void *pdbFile_baseAddress) { 217 | // std::hash strhash; 218 | 219 | if (IsError(PDB::ValidateFile(pdbFile_baseAddress))) { 220 | false; 221 | } 222 | 223 | const PDB::RawFile rawPdbFile = PDB::CreateRawFile(pdbFile_baseAddress); 224 | if (IsError(PDB::HasValidDBIStream(rawPdbFile))) { 225 | false; 226 | } 227 | 228 | const PDB::InfoStream infoStream(rawPdbFile); 229 | if (infoStream.UsesDebugFastLink()) { 230 | PrintErro("PDB was linked using unsupported option /DEBUG:FASTLINK\n"); 231 | 232 | false; 233 | } 234 | 235 | const PDB::DBIStream dbiStream = PDB::CreateDBIStream(rawPdbFile); 236 | if (!HasValidDBIStreams(rawPdbFile, dbiStream)) { 237 | false; 238 | } 239 | 240 | for (size_t idx = 0; idx < symbol_num; idx++) 241 | hook_offsets[idx] = find_sym_rva(rawPdbFile, dbiStream, hook_symbol_hashs[idx]); 242 | 243 | for (size_t idx = 0; idx < symbol_num; idx++) 244 | if (hook_offsets[idx] == 0) 245 | return false; 246 | 247 | return true; 248 | } 249 | 250 | } // namespace dwm_symbol -------------------------------------------------------------------------------- /src/dwm_symbol.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace dwm_symbol { 6 | struct DebugInfo { 7 | DWORD Signature; 8 | GUID Guid; 9 | DWORD Age; 10 | char PdbFileName[1]; 11 | }; 12 | 13 | template 14 | constexpr size_t ArrNum(T (&A)[N]) { 15 | return N; 16 | } 17 | constexpr char symbol_name[] = "dxgi.pdb"; 18 | constexpr char module_name[] = "dxgi.dll"; 19 | constexpr size_t hook_symbol_hashs[] = {0x3bce98f16ea51e3b, 0xc6fd225807a2924e, 0x3e7660509c419622, 0x716ad90ed8c6d72a}; 20 | constexpr size_t symbol_num = ArrNum(hook_symbol_hashs); 21 | extern size_t hook_offsets[symbol_num]; 22 | 23 | DebugInfo * GetModuleDebugInfo(HMODULE module); 24 | DebugInfo * GetModuleDebugInfo(const char *moduleName); 25 | std::string pdburl(DebugInfo *info); 26 | bool init(void *pdbFile_baseAddress); 27 | } // namespace dwm_symbol -------------------------------------------------------------------------------- /src/framework.h: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/imgui_window.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lainswork/dwm-screen-shot/4232385c7dbfb700fbfb27c8f3fb24d1bcab2789/src/imgui_window.cpp -------------------------------------------------------------------------------- /src/imgui_window.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "imgui.h" 3 | #include "imgui_impl_dx11.h" 4 | #include "imgui_impl_win32.h" 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | namespace imgui_window { 11 | bool init(); 12 | void destroy(); 13 | bool begin(); 14 | void end(); 15 | ImVec2 GetGuiWindowSize(); 16 | ID3D11ShaderResourceView *CreateDwmScreenShotShaderResourceView(void *); 17 | } // namespace imgui_window -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lainswork/dwm-screen-shot/4232385c7dbfb700fbfb27c8f3fb24d1bcab2789/src/main.cpp -------------------------------------------------------------------------------- /src/payload.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | namespace shellcode 4 | { 5 | namespace rva 6 | { 7 | const size_t CaptureBitmapPointer = 0x20; 8 | const size_t CaptureHeight = 0x2c; 9 | const size_t CaptureWidth = 0x28; 10 | const size_t DwmCaptureScreen = 0x48; 11 | const size_t ShellCodeEntryPoint = 0x298a; 12 | const size_t hook_offsets = 0x0; 13 | 14 | } 15 | 16 | unsigned char payload [] = 17 | { 18 | 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81, 20 | 0xec,0x50,0x01,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0x8b,0x05,0x34,0x04,0x00,0x00,0xff,0xc0,0x8b,0xd0,0x48,0x8d,0x0d,0x2d,0x04,0x00,0x00,0xe8,0x50,0x04,0x00,0x00,0x48,0xc7,0x45,0x00,0x00,0x00,0x00,0x00,0xeb,0x0b,0x48,0x8b,0x45,0x00,0x48,0xff,0xc0,0x48,0x89,0x45,0x00,0x48,0x8d,0x0d,0x74,0xff,0xff,0xff,0xe8,0x2f,0x0a,0x00,0x00,0x48,0x39,0x45,0x00,0x0f,0x83,0x8e,0x00,0x00,0x00,0x48,0x8d,0x05,0x5e,0xff, 21 | 0xff,0xff,0x48,0x8b,0x4d,0x00,0x48,0x83,0x3c,0xc8,0x00,0x75,0x23,0x8b,0x05,0xe1,0x03,0x00,0x00,0x83,0xc0,0x05,0x8b,0xd0,0x48,0x8d,0x0d,0x19,0x0a,0x00,0x00,0xe8,0xfc,0x03,0x00,0x00,0xb8,0xff,0xff,0xff,0xff,0xe9,0xbd,0x03,0x00,0x00,0xeb,0x54,0x48,0x8d,0x15,0x25,0x0a,0x00,0x00,0x48,0x8d,0x8d,0xa0,0x00,0x00,0x00,0xe8,0x22,0x0a,0x00,0x00,0x48,0x89,0x45,0x08,0x8b,0x05,0xa7,0x03,0x00,0x00,0x83,0xc0,0x09, 22 | 0x48,0x8d,0x0d,0x09,0xff,0xff,0xff,0x48,0x8b,0x55,0x00,0x48,0x8b,0x0c,0xd1,0x48,0x03,0x4d,0x08,0x48,0x8d,0x15,0xf6,0xfe,0xff,0xff,0x44,0x8b,0xc8,0x4c,0x8b,0xc1,0x48,0x8b,0x45,0x00,0x48,0x8b,0x14,0xc2,0x48,0x8d,0x0d,0x02,0x0b,0x00,0x00,0xe8,0x36,0x0b,0x00,0x00,0xe9,0x51,0xff,0xff,0xff,0xc7,0x85,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x4c,0x8d,0x05,0x74,0x0c,0x00,0x00,0x48,0x8d,0x95,0xa4,0x00,0x00, 23 | 0x00,0x48,0x8d,0x8d,0xa1,0x00,0x00,0x00,0xe8,0x6a,0x1c,0x00,0x00,0x48,0x89,0x45,0x10,0x48,0x83,0x7d,0x10,0x00,0x75,0x21,0x8b,0x05,0x36,0x03,0x00,0x00,0x83,0xc0,0x13,0x8b,0xd0,0x48,0x8d,0x0d,0x85,0x1d,0x00,0x00,0xe8,0x51,0x03,0x00,0x00,0xb8,0xff,0xff,0xff,0xff,0xe9,0x12,0x03,0x00,0x00,0x48,0xc7,0x45,0x18,0x00,0x00,0x00,0x00,0xeb,0x0b,0x48,0x8b,0x45,0x18,0x48,0xff,0xc0,0x48,0x89,0x45,0x18,0x48,0x8d, 24 | 0x0d,0x6b,0xfe,0xff,0xff,0xe8,0x26,0x09,0x00,0x00,0x48,0x39,0x45,0x18,0x0f,0x83,0x2a,0x02,0x00,0x00,0x48,0xc7,0x05,0x91,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0x48,0x8d,0x15,0x46,0x09,0x00,0x00,0x48,0x8d,0x8d,0xa8,0x00,0x00,0x00,0xe8,0x55,0x1d,0x00,0x00,0x48,0x89,0x45,0x20,0x48,0x8d,0x05,0x33,0xfe,0xff,0xff,0x48,0x8b,0x4d,0x18,0x48,0x8b,0x04,0xc8,0x48,0x8b,0x4d,0x20,0x48,0x03,0xc8,0x48,0x8b,0xc1,0x48, 25 | 0x89,0x05,0x5a,0xfe,0xff,0xff,0x41,0xb8,0x30,0x00,0x00,0x00,0x33,0xd2,0x48,0x8d,0x4d,0x28,0xe8,0x25,0x1e,0x00,0x00,0x48,0xc7,0x85,0xb0,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x8d,0x45,0x28,0x48,0x89,0x85,0xb8,0x00,0x00,0x00,0x48,0x8b,0x05,0x2c,0xfe,0xff,0xff,0x48,0x89,0x85,0xc0,0x00,0x00,0x00,0x4c,0x8d,0x8d,0xb0,0x00,0x00,0x00,0x4c,0x8d,0x85,0xb8,0x00,0x00,0x00,0x48,0x8d,0x95,0xc0,0x00,0x00,0x00, 26 | 0x48,0x8d,0x8d,0xa9,0x00,0x00,0x00,0xe8,0x10,0x1e,0x00,0x00,0x8b,0x45,0x4c,0x89,0x05,0xf3,0xfd,0xff,0xff,0x8b,0x05,0x49,0x02,0x00,0x00,0x83,0xc0,0x24,0x44,0x8b,0xc0,0x48,0x8b,0x15,0xe8,0xfd,0xff,0xff,0x48,0x8d,0x0d,0x5e,0x1f,0x00,0x00,0xe8,0x87,0x1f,0x00,0x00,0x48,0x8d,0x05,0xcd,0xfd,0xff,0xff,0x48,0x89,0x85,0xd0,0x00,0x00,0x00,0x8b,0x45,0x4c,0x0f,0xba,0xe8,0x08,0x89,0x85,0xd8,0x00,0x00,0x00,0xc7, 27 | 0x85,0xdc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x8b,0x05,0xb0,0xfd,0xff,0xff,0x48,0x89,0x85,0xe0,0x00,0x00,0x00,0x48,0x8d,0x85,0xd0,0x00,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x8d,0xd8,0x00,0x00,0x00,0x4c,0x8d,0x85,0xdc,0x00,0x00,0x00,0x48,0x8d,0x95,0xe0,0x00,0x00,0x00,0x48,0x8d,0x8d,0xc8,0x00,0x00,0x00,0xe8,0x22,0x20,0x00,0x00,0x48,0xc7,0x45,0x58,0x00,0x00,0x00,0x00,0xeb,0x0b,0x48,0x8b, 28 | 0x45,0x58,0x48,0xff,0xc0,0x48,0x89,0x45,0x58,0xc7,0x85,0xec,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x8d,0x95,0xec,0x00,0x00,0x00,0x48,0x8d,0x8d,0xe8,0x00,0x00,0x00,0xe8,0x4b,0x21,0x00,0x00,0x48,0x83,0x7d,0x58,0x32,0x76,0x34,0x8b,0x05,0x91,0x01,0x00,0x00,0x83,0xc0,0x2b,0x8b,0xd0,0x48,0x8d,0x0d,0x37,0x22,0x00,0x00,0xe8,0xac,0x01,0x00,0x00,0x41,0xb8,0x01,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x00,0x48, 29 | 0x8d,0x0d,0x0a,0xfd,0xff,0xff,0xe8,0x40,0x22,0x00,0x00,0x85,0xc0,0x75,0x02,0xeb,0x23,0x41,0xb8,0x01,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0xf1,0xfc,0xff,0xff,0xe8,0x23,0x22,0x00,0x00,0x83,0xf8,0x01,0x75,0x02,0xeb,0x05,0xe9,0x7a,0xff,0xff,0xff,0x48,0x8d,0x05,0xdd,0xfc,0xff,0xff,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0xc7,0x85,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x8b,0x05,0xcd, 30 | 0xfc,0xff,0xff,0x48,0x89,0x85,0x08,0x01,0x00,0x00,0x48,0x8d,0x85,0xf8,0x00,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x4d,0x4c,0x4c,0x8d,0x85,0x00,0x01,0x00,0x00,0x48,0x8d,0x95,0x08,0x01,0x00,0x00,0x48,0x8d,0x8d,0xf0,0x00,0x00,0x00,0xe8,0xf7,0x21,0x00,0x00,0x41,0xb8,0x01,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0x7a,0xfc,0xff,0xff,0xe8,0xb0,0x21,0x00,0x00,0x83,0xf8,0x01,0x75,0x04, 31 | 0xeb,0x0c,0xeb,0x05,0xe9,0xba,0xfd,0xff,0xff,0xe9,0xb5,0xfd,0xff,0xff,0x48,0x8d,0x55,0x10,0x48,0x8d,0x8d,0x10,0x01,0x00,0x00,0xe8,0x2f,0x23,0x00,0x00,0x8b,0x05,0xb0,0x00,0x00,0x00,0x83,0xc0,0x41,0x89,0x85,0x14,0x01,0x00,0x00,0x41,0xb8,0x01,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0x35,0xfc,0xff,0xff,0xe8,0x67,0x21,0x00,0x00,0x89,0x85,0x18,0x01,0x00,0x00,0x41,0xb8,0x01,0x00,0x00,0x00, 32 | 0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0x14,0xfc,0xff,0xff,0xe8,0x4a,0x21,0x00,0x00,0x89,0x85,0x1c,0x01,0x00,0x00,0x44,0x8b,0x8d,0x14,0x01,0x00,0x00,0x44,0x8b,0x85,0x18,0x01,0x00,0x00,0x8b,0x95,0x1c,0x01,0x00,0x00,0x48,0x8d,0x0d,0xea,0x23,0x00,0x00,0xe8,0x22,0x24,0x00,0x00,0x41,0xb8,0x01,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0xd7,0xfb,0xff,0xff,0xe8,0x0d,0x21,0x00,0x00,0x83,0xf8, 33 | 0x01,0x75,0x23,0x41,0xb8,0x01,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0xbf,0xfb,0xff,0xff,0xe8,0xf1,0x20,0x00,0x00,0x83,0xf8,0x01,0x75,0x07,0xb8,0x01,0x00,0x00,0x00,0xeb,0x05,0xb8,0xff,0xff,0xff,0xff,0x48,0x8d,0xa5,0x20,0x01,0x00,0x00,0x5d,0xc3,0x1c,0x00,0x00,0x00,0x5b,0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0xbd,0xd8,0xcd,0xbc,0xcf,0xdf,0xb3,0xcc,0xc6,0xf4,0xb6,0xaf,0x09, 34 | 0x20,0x2d,0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x48,0x81,0xec,0xb8,0x02,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x45,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x00,0x02,0x00,0x00,0xf3,0xaa,0x4c,0x8d,0x8d,0xb8,0x02,0x00,0x00,0x4c,0x8d,0x85,0xb0,0x02,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x80,0x02,0x00,0x00, 35 | 0xe8,0x1a,0x00,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x81,0x02,0x00,0x00,0xe8,0xa6,0x04,0x00,0x00,0x48,0x8d,0xa5,0x98,0x02,0x00,0x00,0x5f,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x80,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x4a,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00, 36 | 0xe8,0x21,0x04,0x00,0x00,0x8b,0x00,0x89,0x45,0x48,0x48,0x8b,0x8d,0x80,0x00,0x00,0x00,0xe8,0x27,0x04,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x50,0x48,0x8b,0x4d,0x78,0xe8,0x2e,0x04,0x00,0x00,0x48,0x89,0x45,0x58,0x44,0x8b,0x45,0x48,0x48,0x8b,0x55,0x50,0x48,0x8b,0x4d,0x58,0xff,0x55,0x40,0x48,0x8d,0x65,0x60,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d, 37 | 0x00,0xe8,0xb7,0x00,0x00,0x00,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0x17,0x01,0x00,0x00,0x48,0x8d,0x4d,0x08,0xe8,0x99,0x01,0x00,0x00,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0xc1,0x01,0x00,0x00,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x6b,0x65,0xa8,0xff,0xbb,0xef,0xd6, 38 | 0x89,0xe8,0xb9,0x01,0x00,0x00,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0xc5,0x01,0x00,0x00,0x48,0x89,0x45,0x68,0x48,0xb9,0x6b,0x65,0xa8,0xff,0xbb,0xef,0xd6,0x89,0xe8,0xee,0x01,0x00,0x00,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0x01,0x02,0x00,0x00,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x9c,0x02,0x00,0x00,0xeb,0x18,0xeb,0x95,0x48,0x8d, 39 | 0x4d,0x00,0xe8,0xeb,0x02,0x00,0x00,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x11,0x00,0x00,0x00,0x48,0x8b,0x4d,0x50,0x48,0x89,0x01,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x40,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x0a,0x00, 40 | 0x00,0x00,0x48,0x8b,0x40,0x10,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x40,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x0a,0x00,0x00,0x00,0x48,0x8b,0x40,0x18,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x40,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x65,0x48,0x8b,0x04,0x25,0x60,0x00,0x00,0x00,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70,0x48,0x8d,0x6c, 41 | 0x24,0x20,0x48,0x8b,0x45,0x60,0x48,0x8b,0x4d,0x68,0x48,0x89,0x08,0x48,0x8b,0x4d,0x68,0xe8,0x3e,0x00,0x00,0x00,0xb9,0x08,0x00,0x00,0x00,0x48,0x6b,0xc9,0x00,0x48,0x8b,0x84,0x08,0x88,0x00,0x00,0x00,0x48,0x89,0x45,0x00,0x8b,0x45,0x00,0x48,0x8b,0x4d,0x68,0x48,0x03,0xc8,0x48,0x8b,0xc1,0x48,0x8b,0x4d,0x60,0x48,0x89,0x41,0x08,0x48,0x8b,0x45,0x60,0x8b,0x4d,0x04,0x89,0x48,0x10,0x48,0x8b,0x45,0x60,0x48,0x8d, 42 | 0x65,0x50,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x63,0x40,0x3c,0x48,0x8b,0x4d,0x50,0x48,0x03,0xc8,0x48,0x8b,0xc1,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x50,0x48,0x8b,0xec,0x48,0x8b,0x45,0x60,0x48,0x8b,0x4d,0x60,0x48,0x8b,0x09,0x48,0x39,0x48,0x08,0x74,0x09,0xc7,0x45,0x40,0x01,0x00,0x00,0x00,0xeb,0x07, 43 | 0xc7,0x45,0x40,0x00,0x00,0x00,0x00,0x0f,0xb6,0x45,0x40,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8b,0x40,0x08,0x8b,0x40,0x18,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0xc1,0xe8,0x20,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x89,0x54,0x24,0x10,0x48,0x89, 44 | 0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8b,0x40,0x08,0x8b,0x40,0x20,0x48,0x8b,0x4d,0x50,0x48,0x8b,0x09,0x48,0x03,0xc8,0x48,0x8b,0xc1,0x8b,0x4d,0x58,0x8b,0x04,0x88,0x48,0x8b,0x4d,0x50,0x48,0x03,0x01,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0xb8,0xff,0xff,0xff,0xff,0x48,0x8b,0x4d,0x50,0x48,0x23,0xc8,0x48, 45 | 0x8b,0xc1,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70,0x48,0x8d,0x6c,0x24,0x20,0x8b,0x45,0x68,0x89,0x45,0x00,0x48,0x8b,0x45,0x60,0x0f,0xb6,0x00,0x88,0x45,0x45,0x48,0x8b,0x45,0x60,0x48,0xff,0xc0,0x48,0x89,0x45,0x60,0x0f,0xb6,0x45,0x45,0x88,0x45,0x04,0x0f,0xbe,0x45,0x04,0x85,0xc0,0x75,0x05,0x8b,0x45,0x00,0xeb,0x11,0x0f,0xb6,0x55,0x04,0x8b,0x4d, 46 | 0x00,0xe8,0x0b,0x00,0x00,0x00,0x89,0x45,0x00,0xeb,0xc6,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x88,0x54,0x24,0x10,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x50,0x48,0x8b,0xec,0x33,0xc0,0x83,0xf8,0x01,0x74,0x1e,0x0f,0xbe,0x45,0x68,0x83,0xf8,0x41,0x7c,0x15,0x0f,0xbe,0x45,0x68,0x83,0xf8,0x5a,0x7f,0x0c,0x0f,0xbe,0x45,0x68,0x83,0xc8,0x20,0x89,0x45,0x40,0xeb,0x07,0x0f,0xbe,0x45,0x68,0x89,0x45,0x40,0x8b,0x45,0x40, 47 | 0x8b,0x4d,0x60,0x33,0xc8,0x8b,0xc1,0x8b,0xc0,0x48,0x69,0xc0,0x93,0x01,0x00,0x01,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x50,0x48,0x8b,0xec,0x48,0x8b,0x45,0x60,0x48,0x8b,0x40,0x08,0x8b,0x40,0x1c,0x48,0x8b,0x4d,0x60,0x48,0x03,0x01,0x48,0x89,0x45,0x00,0x48,0x8b,0x45,0x60,0x48,0x8b,0x40,0x08,0x8b,0x40,0x24,0x48,0x8b,0x4d,0x60,0x48,0x03,0x01,0x48, 48 | 0x89,0x45,0x08,0x8b,0x45,0x68,0x48,0x8b,0x4d,0x08,0x0f,0xb7,0x04,0x41,0x48,0x8b,0x4d,0x00,0x8b,0x04,0x81,0x48,0x8b,0x4d,0x60,0x48,0x03,0x01,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8b,0x45,0x50,0x48,0x8b,0x08,0xe8,0x0f,0x00,0x00,0x00,0x48,0x8b,0x4d,0x50,0x48,0x89,0x01,0xb0,0x01,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24, 49 | 0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8b,0x00,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b, 50 | 0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x1e,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x4d,0x68,0xe8,0xc3,0xff,0xff,0xff,0x48,0x89,0x45,0x48,0x48,0x8b,0x4d,0x48,0xff,0x55,0x40,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20, 51 | 0x48,0x8d,0x4d,0x00,0xe8,0x54,0xfc,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0xb4,0xfc,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0x36,0xfd,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x5e,0xfd,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x4a,0x0a,0x99,0xbf, 52 | 0x96,0x94,0xd1,0xfc,0xe8,0x56,0xfd,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x62,0xfd,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x4a,0x0a,0x99,0xbf,0x96,0x94,0xd1,0xfc,0xe8,0x8b,0xfd,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0x9e,0xfd,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x39,0xfe,0xff,0xff,0xeb,0x18,0xeb, 53 | 0x95,0x48,0x8d,0x4d,0x00,0xe8,0x88,0xfe,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0xb8,0x04,0x00,0x00,0x00,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x5b,0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0xd3,0xd0,0xbf,0xd5,0xc6,0xab,0xd2,0xc6,0x09,0x20,0x2d,0x2d,0x6c, 54 | 0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x64,0x78,0x67,0x69,0x2e,0x64,0x6c,0x6c,0x00,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x1e,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x4d,0x68,0xe8,0xdf,0x00,0x00,0x00,0x48,0x89,0x45,0x48,0x48,0x8b,0x4d,0x48,0xff,0x55,0x40,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x40,0x55,0x48,0x81, 55 | 0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0x0a,0xfb,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0x6a,0xfb,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0xec,0xfb,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x14,0xfc,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d, 56 | 0x64,0x00,0x74,0x57,0x48,0xb9,0x05,0x76,0x2f,0x80,0xfc,0xe1,0x06,0x14,0xe8,0x0c,0xfc,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x18,0xfc,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x05,0x76,0x2f,0x80,0xfc,0xe1,0x06,0x14,0xe8,0x41,0xfc,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0x54,0xfc,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d, 57 | 0x4d,0x08,0xe8,0xef,0xfc,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0x3e,0xfd,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x5b,0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0x48,0x6f,0x6f,0x6b, 58 | 0x20,0x4f,0x66,0x66,0x73,0x65,0x74,0x20,0x30,0x78,0x25,0x70,0x20,0x61,0x64,0x64,0x72,0x65,0x73,0x73,0x20,0x30,0x78,0x25,0x70,0x09,0x20,0x2d,0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x44,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x48,0x81,0xec,0xc8,0x02,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0x48,0x8d,0x45,0x00, 59 | 0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x00,0x02,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0xc8,0x02,0x00,0x00,0x48,0x89,0x44,0x24,0x28,0x48,0x8d,0x85,0xc0,0x02,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x8d,0xb8,0x02,0x00,0x00,0x4c,0x8d,0x85,0xb0,0x02,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x80,0x02,0x00,0x00,0xe8,0x1a,0x00,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x81,0x02,0x00,0x00,0xe8,0xe9,0xfc, 60 | 0xff,0xff,0x48,0x8d,0xa5,0x98,0x02,0x00,0x00,0x5f,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0xe8,0x8d,0xf8,0xff,0xff,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa8,0x00,0x00,0x00,0xe8,0x64,0xfc,0xff,0xff,0x8b,0x00,0x89,0x45,0x48,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0x5d, 61 | 0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x50,0x48,0x8b,0x8d,0x98,0x00,0x00,0x00,0xe8,0x61,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x44,0xfc,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x60,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x48,0xfc,0xff,0xff,0x48,0x89,0x45,0x68,0x8b,0x45,0x48,0x89,0x44,0x24,0x20,0x4c,0x8b,0x4d,0x50,0x4c,0x8b,0x45,0x58,0x48, 62 | 0x8b,0x55,0x60,0x48,0x8b,0x4d,0x68,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0xb0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30, 63 | 0x48,0x8b,0x05,0x79,0xf2,0xff,0xff,0x48,0x25,0x00,0xf0,0xff,0xff,0x48,0x89,0x45,0x00,0x48,0x8b,0x45,0x00,0x48,0x05,0x00,0x10,0x00,0x00,0x48,0x89,0x45,0x08,0x48,0x8b,0x85,0x90,0x00,0x00,0x00,0x48,0x8b,0x00,0x81,0x38,0x01,0x00,0x00,0x80,0x0f,0x85,0xac,0x00,0x00,0x00,0x48,0x8b,0x85,0x90,0x00,0x00,0x00,0x48,0x8b,0x40,0x08,0x48,0x8b,0x4d,0x00,0x48,0x39,0x88,0xf8,0x00,0x00,0x00,0x0f,0x82,0x87,0x00,0x00, 64 | 0x00,0x48,0x8b,0x85,0x90,0x00,0x00,0x00,0x48,0x8b,0x40,0x08,0x48,0x8b,0x4d,0x08,0x48,0x39,0x88,0xf8,0x00,0x00,0x00,0x77,0x6f,0x48,0x8b,0x85,0x90,0x00,0x00,0x00,0x48,0x8b,0x40,0x08,0x48,0x8b,0x0d,0x05,0xf2,0xff,0xff,0x48,0x39,0x88,0xf8,0x00,0x00,0x00,0x75,0x34,0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0xe0,0xf1,0xff,0xff,0xe8,0xbf,0x00,0x00,0x00,0x48,0x8b,0x85,0x90,0x00,0x00,0x00,0x48,0x8b,0x40,0x08, 65 | 0x48,0x8d,0x0d,0xcd,0x00,0x00,0x00,0x48,0x89,0x88,0xf8,0x00,0x00,0x00,0xb8,0xff,0xff,0xff,0xff,0xe9,0x93,0x00,0x00,0x00,0x48,0x8b,0x85,0x90,0x00,0x00,0x00,0x48,0x8b,0x40,0x08,0x8b,0x40,0x44,0x0f,0xba,0xe8,0x08,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0x48,0x8b,0x49,0x08,0x89,0x41,0x44,0xc7,0x45,0x10,0xff,0xff,0xff,0xff,0xeb,0x67,0x48,0x8b,0x85,0x90,0x00,0x00,0x00,0x48,0x8b,0x00,0x81,0x38,0x04,0x00,0x00, 66 | 0x80,0x75,0x4e,0x48,0x8d,0x45,0x14,0x48,0x89,0x45,0x60,0x8b,0x05,0x77,0xf1,0xff,0xff,0x0f,0xba,0xe8,0x08,0x89,0x45,0x68,0xc7,0x45,0x6c,0x01,0x00,0x00,0x00,0x48,0x8b,0x05,0x6a,0xf1,0xff,0xff,0x48,0x89,0x45,0x70,0x48,0x8d,0x45,0x60,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x4d,0x68,0x4c,0x8d,0x45,0x6c,0x48,0x8d,0x55,0x70,0x48,0x8d,0x4d,0x58,0xe8,0x36,0x0d,0x00,0x00,0xc7,0x45,0x10,0xff,0xff,0xff,0xff,0xeb, 67 | 0x07,0xc7,0x45,0x10,0x00,0x00,0x00,0x00,0x8b,0x45,0x10,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x8b,0x45,0x58,0x48,0x8b,0x4d,0x50,0x87,0x01,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x90,0x00,0x00,0x00, 68 | 0x48,0x8d,0x6c,0x24,0x40,0x8b,0x05,0x7b,0x00,0x00,0x00,0x83,0xc0,0x02,0x44,0x8b,0xc0,0x48,0x8b,0x55,0x60,0x48,0x8d,0x0d,0x6e,0x00,0x00,0x00,0xe8,0xa5,0x00,0x00,0x00,0x48,0x8b,0x05,0xc8,0xf0,0xff,0xff,0x48,0x89,0x45,0x48,0x48,0x8b,0x85,0x98,0x00,0x00,0x00,0x48,0x89,0x44,0x24,0x38,0x48,0x8b,0x85,0x90,0x00,0x00,0x00,0x48,0x89,0x44,0x24,0x30,0x48,0x8b,0x85,0x88,0x00,0x00,0x00,0x48,0x89,0x44,0x24,0x28, 69 | 0x48,0x8b,0x85,0x80,0x00,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8b,0x4d,0x78,0x4c,0x8b,0x45,0x70,0x48,0x8b,0x55,0x68,0x48,0x8b,0x4d,0x60,0xff,0x55,0x48,0x48,0x89,0x45,0x00,0x48,0x8b,0x4d,0x60,0xe8,0x5c,0x01,0x00,0x00,0x48,0x8b,0x45,0x00,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x91,0x00,0x00,0x00,0x5b,0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0x48,0x6f,0x6f,0x6b,0x46,0x75,0x6e,0x43,0x61,0x6c,0x6c, 70 | 0x42,0x61,0x63,0x6b,0x20,0x49,0x55,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x2a,0x20,0x5b,0x30,0x78,0x25,0x70,0x5d,0x09,0x20,0x2d,0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x44,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x48,0x81,0xec,0xc8,0x02,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0x48,0x8d,0x45,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x00,0x02,0x00, 71 | 0x00,0xf3,0xaa,0x48,0x8d,0x85,0xc0,0x02,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x8d,0xb8,0x02,0x00,0x00,0x4c,0x8d,0x85,0xb0,0x02,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x80,0x02,0x00,0x00,0xe8,0x1a,0x00,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x81,0x02,0x00,0x00,0xe8,0x3e,0xf9,0xff,0xff,0x48,0x8d,0xa5,0x98,0x02,0x00,0x00,0x5f,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24, 72 | 0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x90,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0xe2,0xf4,0xff,0xff,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0xb9,0xf8,0xff,0xff,0x8b,0x00,0x89,0x45,0x48,0x48,0x8b,0x8d,0x98,0x00,0x00,0x00,0xe8,0x43,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x50,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0xac,0xf8,0xff, 73 | 0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0xb0,0xf8,0xff,0xff,0x48,0x89,0x45,0x60,0x44,0x8b,0x4d,0x48,0x4c,0x8b,0x45,0x50,0x48,0x8b,0x55,0x58,0x48,0x8b,0x4d,0x60,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x48, 74 | 0x81,0xec,0x48,0x01,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0x48,0x8d,0x4d,0x00,0xe8,0xdb,0x04,0x00,0x00,0x48,0x8d,0x4d,0x08,0xe8,0xf4,0x04,0x00,0x00,0x48,0x8d,0x4d,0x10,0xe8,0x0d,0x05,0x00,0x00,0x48,0x8d,0x4d,0x18,0xe8,0x04,0x05,0x00,0x00,0x48,0x8d,0x45,0x20,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x2c,0x00,0x00,0x00,0xf3,0xaa,0xc7,0x45,0x50,0xdb,0x6d,0x6f,0xdb,0xb8,0x77,0xac,0x00,0x00,0x66,0x89,0x45,0x54,0xb8, 75 | 0x88,0x4e,0x00,0x00,0x66,0x89,0x45,0x56,0xc6,0x45,0x58,0x82,0xc6,0x45,0x59,0x53,0xc6,0x45,0x5a,0x81,0xc6,0x45,0x5b,0x9d,0xc6,0x45,0x5c,0xf9,0xc6,0x45,0x5d,0xbb,0xc6,0x45,0x5e,0xf1,0xc6,0x45,0x5f,0x40,0x48,0x8b,0x85,0x30,0x01,0x00,0x00,0x48,0x8b,0x00,0x48,0x8b,0x40,0x38,0x48,0x89,0x85,0xf0,0x00,0x00,0x00,0x48,0x8d,0x4d,0x00,0xe8,0xbf,0x04,0x00,0x00,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0x4c,0x8b,0x85, 76 | 0xf8,0x00,0x00,0x00,0x48,0x8d,0x55,0x50,0x48,0x8b,0x8d,0x30,0x01,0x00,0x00,0xff,0x95,0xf0,0x00,0x00,0x00,0x89,0x45,0x60,0x83,0x7d,0x60,0x00,0x0f,0x85,0xd7,0x03,0x00,0x00,0xc7,0x45,0x68,0xf2,0xaa,0x15,0x6f,0xb8,0x08,0xd2,0x00,0x00,0x66,0x89,0x45,0x6c,0xb8,0x89,0x4e,0x00,0x00,0x66,0x89,0x45,0x6e,0xc6,0x45,0x70,0x9a,0xc6,0x45,0x71,0xb4,0xc6,0x45,0x72,0x48,0xc6,0x45,0x73,0x95,0xc6,0x45,0x74,0x35,0xc6, 77 | 0x45,0x75,0xd3,0xc6,0x45,0x76,0x4f,0xc6,0x45,0x77,0x9c,0x48,0x8b,0x85,0x30,0x01,0x00,0x00,0x48,0x8b,0x00,0x48,0x8b,0x40,0x48,0x48,0x89,0x85,0xf0,0x00,0x00,0x00,0x48,0x8d,0x4d,0x10,0xe8,0xab,0x04,0x00,0x00,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0x4c,0x8b,0x8d,0xf8,0x00,0x00,0x00,0x4c,0x8d,0x45,0x68,0x33,0xd2,0x48,0x8b,0x8d,0x30,0x01,0x00,0x00,0xff,0x95,0xf0,0x00,0x00,0x00,0x89,0x45,0x60,0x83,0x7d,0x60, 78 | 0x00,0x0f,0x85,0x52,0x03,0x00,0x00,0x48,0x8d,0x4d,0x10,0xe8,0xe3,0x04,0x00,0x00,0x48,0x89,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x8b,0x40,0x50,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0x48,0x8d,0x55,0x20,0x48,0x8b,0x8d,0xf0,0x00,0x00,0x00,0xff,0x95,0xf8,0x00,0x00,0x00,0xc7,0x45,0x40,0x00,0x00,0x00,0x00,0xc7,0x45,0x48,0x00,0x00,0x00,0x00,0xc7,0x45,0x44,0x00,0x00, 79 | 0x03,0x00,0xc7,0x45,0x3c,0x03,0x00,0x00,0x00,0x48,0x8d,0x4d,0x00,0xe8,0xab,0x04,0x00,0x00,0x48,0x89,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x8b,0x40,0x28,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0x48,0x8d,0x4d,0x18,0xe8,0xfd,0x03,0x00,0x00,0x48,0x89,0x85,0x00,0x01,0x00,0x00,0x4c,0x8b,0x8d,0x00,0x01,0x00,0x00,0x45,0x33,0xc0,0x48,0x8d,0x55,0x20,0x48,0x8b,0x8d,0xf0, 80 | 0x00,0x00,0x00,0xff,0x95,0xf8,0x00,0x00,0x00,0x89,0x45,0x60,0x83,0x7d,0x60,0x00,0x0f,0x85,0xa3,0x02,0x00,0x00,0x48,0x8d,0x4d,0x00,0xe8,0x4e,0x04,0x00,0x00,0x48,0x89,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x8b,0x80,0x40,0x01,0x00,0x00,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0x48,0x8d,0x4d,0x08,0xe8,0x40,0x04,0x00,0x00,0x48,0x89,0x85,0x00,0x01,0x00,0x00,0x48,0x8b, 81 | 0x95,0x00,0x01,0x00,0x00,0x48,0x8b,0x8d,0xf0,0x00,0x00,0x00,0xff,0x95,0xf8,0x00,0x00,0x00,0x48,0x8d,0x4d,0x08,0xe8,0x8b,0x04,0x00,0x00,0x48,0x89,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x8b,0x80,0x78,0x01,0x00,0x00,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0x48,0x8d,0x4d,0x10,0xe8,0x7d,0x04,0x00,0x00,0x48,0x89,0x85,0x00,0x01,0x00,0x00,0x48,0x8d,0x4d,0x18,0xe8,0x6d, 82 | 0x04,0x00,0x00,0x48,0x89,0x85,0x08,0x01,0x00,0x00,0x4c,0x8b,0x85,0x00,0x01,0x00,0x00,0x48,0x8b,0x95,0x08,0x01,0x00,0x00,0x48,0x8b,0x8d,0xf0,0x00,0x00,0x00,0xff,0x95,0xf8,0x00,0x00,0x00,0x48,0x8d,0x45,0x78,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x10,0x00,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x4d,0x08,0xe8,0x18,0x04,0x00,0x00,0x48,0x89,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x00,0x48, 83 | 0x8b,0x40,0x70,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0x48,0x8d,0x4d,0x18,0xe8,0x0d,0x04,0x00,0x00,0x48,0x89,0x85,0x00,0x01,0x00,0x00,0x48,0x8d,0x45,0x78,0x48,0x89,0x44,0x24,0x28,0xc7,0x44,0x24,0x20,0x00,0x00,0x00,0x00,0x41,0xb9,0x03,0x00,0x00,0x00,0x45,0x33,0xc0,0x48,0x8b,0x95,0x00,0x01,0x00,0x00,0x48,0x8b,0x8d,0xf0,0x00,0x00,0x00,0xff,0x95,0xf8,0x00,0x00,0x00,0x89,0x45,0x60,0x83,0x7d,0x60,0x00,0x0f, 84 | 0x85,0x74,0x01,0x00,0x00,0xc7,0x85,0xd4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xc7,0x85,0xd8,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x8b,0x45,0x24,0x0f,0xaf,0x45,0x20,0xc1,0xe0,0x02,0x8b,0xc0,0x48,0x83,0xc0,0x2c,0x48,0x89,0x85,0xe0,0x00,0x00,0x00,0x48,0xc7,0x85,0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x8d,0x85,0xd4,0x00,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x8d,0xd8,0x00,0x00,0x00,0x4c,0x8d, 85 | 0x85,0xe0,0x00,0x00,0x00,0x48,0x8d,0x95,0xe8,0x00,0x00,0x00,0x48,0x8d,0x8d,0xd0,0x00,0x00,0x00,0xe8,0x82,0x03,0x00,0x00,0x48,0x89,0x85,0x88,0x00,0x00,0x00,0x41,0xb8,0x2c,0x00,0x00,0x00,0x48,0x8d,0x55,0x20,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x00,0x05,0x00,0x00,0x8b,0x45,0x24,0x0f,0xaf,0x45,0x20,0xc1,0xe0,0x02,0x8b,0xc0,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0x48,0x83,0xc1,0x2c,0x44,0x8b,0xc0,0x48, 86 | 0x8b,0x55,0x78,0xe8,0xdd,0x04,0x00,0x00,0x48,0x8b,0x85,0x88,0x00,0x00,0x00,0x48,0x89,0x05,0x1a,0xeb,0xff,0xff,0x8b,0x45,0x20,0x89,0x05,0x19,0xeb,0xff,0xff,0x8b,0x45,0x24,0x89,0x05,0x14,0xeb,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0xe5,0x02,0x00,0x00,0x48,0x89,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x85,0xf0,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x8b,0x40,0x78,0x48,0x89,0x85,0xf8,0x00,0x00,0x00,0x48,0x8d,0x4d, 87 | 0x18,0xe8,0xda,0x02,0x00,0x00,0x48,0x89,0x85,0x00,0x01,0x00,0x00,0x45,0x33,0xc0,0x48,0x8b,0x95,0x00,0x01,0x00,0x00,0x48,0x8b,0x8d,0xf0,0x00,0x00,0x00,0xff,0x95,0xf8,0x00,0x00,0x00,0x8b,0x05,0x9e,0x04,0x00,0x00,0x83,0xc0,0x33,0x89,0x44,0x24,0x20,0x44,0x8b,0x0d,0xb4,0xea,0xff,0xff,0x44,0x8b,0x05,0xa9,0xea,0xff,0xff,0x48,0x8b,0x15,0x9a,0xea,0xff,0xff,0x48,0x8d,0x0d,0x7f,0x04,0x00,0x00,0xe8,0xb1,0x04, 88 | 0x00,0x00,0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0x96,0xea,0xff,0xff,0xe8,0x71,0xf9,0xff,0xff,0x48,0x8d,0x4d,0x18,0xe8,0xf6,0x05,0x00,0x00,0x48,0x8d,0x4d,0x10,0xe8,0xed,0x05,0x00,0x00,0x48,0x8d,0x4d,0x08,0xe8,0x02,0x06,0x00,0x00,0x48,0x8d,0x4d,0x00,0xe8,0x17,0x06,0x00,0x00,0xeb,0x4c,0x8b,0x05,0x39,0x04,0x00,0x00,0x83,0xc0,0x46,0x8b,0xd0,0x48,0x8d,0x0d,0x21,0x06,0x00,0x00,0xe8,0xe0,0xee,0xff,0xff, 89 | 0xba,0x01,0x00,0x00,0x00,0x48,0x8d,0x0d,0x48,0xea,0xff,0xff,0xe8,0x23,0xf9,0xff,0xff,0x48,0x8d,0x4d,0x18,0xe8,0xa8,0x05,0x00,0x00,0x48,0x8d,0x4d,0x10,0xe8,0x9f,0x05,0x00,0x00,0x48,0x8d,0x4d,0x08,0xe8,0xb4,0x05,0x00,0x00,0x48,0x8d,0x4d,0x00,0xe8,0xc9,0x05,0x00,0x00,0x48,0x8d,0xa5,0x18,0x01,0x00,0x00,0x5f,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50, 90 | 0x48,0xc7,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0xc7,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0xc7,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x50,0x48, 91 | 0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8b,0x4d,0x50,0xe8,0x0a,0x00,0x00,0x00,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70,0x48,0x8d,0x6c,0x24,0x20,0xc7,0x45,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x60,0x48,0x8b,0x00,0x48,0x89,0x45,0x08,0x48,0x83,0x7d,0x08,0x00,0x74,0x1c,0x48, 92 | 0x8b,0x45,0x60,0x48,0xc7,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x08,0x48,0x8b,0x00,0x48,0x8b,0x4d,0x08,0xff,0x50,0x10,0x89,0x45,0x00,0x8b,0x45,0x00,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8b,0x4d,0x50,0xe8,0x0a,0x00,0x00,0x00,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70, 93 | 0x48,0x8d,0x6c,0x24,0x20,0xc7,0x45,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x60,0x48,0x8b,0x00,0x48,0x89,0x45,0x08,0x48,0x83,0x7d,0x08,0x00,0x74,0x1c,0x48,0x8b,0x45,0x60,0x48,0xc7,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x08,0x48,0x8b,0x00,0x48,0x8b,0x4d,0x08,0xff,0x50,0x10,0x89,0x45,0x00,0x8b,0x45,0x00,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec, 94 | 0x48,0x8b,0x45,0x50,0x48,0x8b,0x00,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8b,0x00,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8b,0x4d,0x50,0xe8,0x0a,0x00,0x00,0x00,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48, 95 | 0x83,0xec,0x70,0x48,0x8d,0x6c,0x24,0x20,0xc7,0x45,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x60,0x48,0x8b,0x00,0x48,0x89,0x45,0x08,0x48,0x83,0x7d,0x08,0x00,0x74,0x1c,0x48,0x8b,0x45,0x60,0x48,0xc7,0x00,0x00,0x00,0x00,0x00,0x48,0x8b,0x45,0x08,0x48,0x8b,0x00,0x48,0x8b,0x4d,0x08,0xff,0x50,0x10,0x89,0x45,0x00,0x8b,0x45,0x00,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40, 96 | 0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8b,0x00,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8b,0x00,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x80,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x62,0x00,0x00,0x00, 97 | 0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x20,0x01,0x00,0x00,0x8b,0x00,0x89,0x45,0x48,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x0f,0x01,0x00,0x00,0x8b,0x00,0x89,0x45,0x4c,0x48,0x8b,0x8d,0x80,0x00,0x00,0x00,0xe8,0x15,0x01,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x50,0x48,0x8b,0x4d,0x78,0xe8,0x1c,0x01,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x58,0x44,0x8b,0x4d,0x48,0x44,0x8b,0x45, 98 | 0x4c,0x48,0x8b,0x55,0x50,0x48,0x8b,0x4d,0x58,0xff,0x55,0x40,0x48,0x8d,0x65,0x60,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0x84,0xed,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0xe4,0xed,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0x66,0xee,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x8e, 99 | 0xee,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x9d,0xf1,0xcc,0x87,0xd9,0xc4,0x61,0x53,0xe8,0x86,0xee,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x92,0xee,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x9d,0xf1,0xcc,0x87,0xd9,0xc4,0x61,0x53,0xe8,0xbb,0xee,0xff,0xff,0x89,0x45,0x70,0x8b,0x55, 100 | 0x64,0x48,0x8b,0x4d,0x68,0xe8,0xce,0xee,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x69,0xef,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0xb8,0xef,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45, 101 | 0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x56,0x57,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b, 102 | 0x7d,0x60,0x48,0x8b,0x75,0x68,0x48,0x8b,0x4d,0x70,0xf3,0xa4,0x48,0x8b,0x45,0x60,0x48,0x8d,0x65,0x40,0x5f,0x5e,0x5d,0xc3,0x9d,0x00,0x00,0x00,0x5b,0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0x53,0x75,0x63,0x63,0x65,0x73,0x73,0x20,0x61,0x74,0x20,0x30,0x78,0x25,0x70,0x20,0x5b,0x20,0x25,0x64,0x20,0x2a,0x20,0x25,0x64,0x20,0x5d,0x09,0x20,0x2d,0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64, 103 | 0x20,0x0a,0x00,0x44,0x89,0x4c,0x24,0x20,0x44,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x48,0x81,0xec,0xd8,0x02,0x00,0x00,0x48,0x8d,0x6c,0x24,0x40,0x48,0x8d,0x45,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x00,0x02,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0xd0,0x02,0x00,0x00,0x48,0x89,0x44,0x24,0x30,0x48,0x8d,0x85,0xc8,0x02,0x00,0x00,0x48,0x89,0x44,0x24,0x28,0x48,0x8d,0x85, 104 | 0xc0,0x02,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x8d,0xb8,0x02,0x00,0x00,0x4c,0x8d,0x85,0xb0,0x02,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x80,0x02,0x00,0x00,0xe8,0x1a,0x00,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x81,0x02,0x00,0x00,0xe8,0xf4,0xee,0xff,0xff,0x48,0x8d,0xa5,0x98,0x02,0x00,0x00,0x5f,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10, 105 | 0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0xe8,0x98,0xea,0xff,0xff,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xb0,0x00,0x00,0x00,0xe8,0x6f,0xee,0xff,0xff,0x8b,0x00,0x89,0x45,0x48,0x48,0x8b,0x8d,0xa8,0x00,0x00,0x00,0xe8,0x73,0x00,0x00,0x00,0x8b,0x00,0x89,0x45,0x4c,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0x62,0x00,0x00,0x00,0x8b,0x00,0x89,0x45,0x50,0x48,0x8b, 106 | 0x8d,0x98,0x00,0x00,0x00,0xe8,0x5d,0xf2,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x40,0xee,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x60,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x44,0xee,0xff,0xff,0x48,0x89,0x45,0x68,0x8b,0x45,0x48,0x89,0x44,0x24,0x28,0x8b,0x45,0x4c,0x89,0x44,0x24,0x20,0x44,0x8b,0x4d,0x50,0x4c,0x8b,0x45,0x58,0x48,0x8b,0x55,0x60,0x48,0x8b, 107 | 0x4d,0x68,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8b,0x4d,0x50,0xe8,0x5c,0xfb,0xff,0xff,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0x48, 108 | 0x8b,0x4d,0x50,0xe8,0xe1,0xfb,0xff,0xff,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x60,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8b,0x4d,0x50,0xe8,0xb1,0xfa,0xff,0xff,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x5b,0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0x54,0x61,0x6b,0x65,0x44,0x78,0x67,0x69,0x43,0x61,0x70,0x74,0x75,0x72,0x65,0x20,0x46,0x61,0x69,0x6c,0x20,0x21,0x09,0x20,0x2d, 109 | 0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x90,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x67,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0x25,0x01,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x48,0x48,0x8b,0x8d,0x98,0x00, 110 | 0x00,0x00,0xe8,0x29,0x01,0x00,0x00,0x8b,0x00,0x89,0x45,0x50,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x08,0xfd,0xff,0xff,0x48,0x63,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x23,0xfd,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x60,0x4c,0x8b,0x4d,0x48,0x44,0x8b,0x45,0x50,0x48,0x8b,0x55,0x58,0x48,0x8b,0x4d,0x60,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec, 111 | 0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0x8b,0xe9,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0xeb,0xe9,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0x6d,0xea,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x95,0xea,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64, 112 | 0x00,0x74,0x57,0x48,0xb9,0xff,0x01,0xda,0x5c,0xb1,0x67,0xa8,0xe3,0xe8,0x8d,0xea,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x99,0xea,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0xff,0x01,0xda,0x5c,0xb1,0x67,0xa8,0xe3,0xe8,0xc2,0xea,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0xd5,0xea,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d, 113 | 0x08,0xe8,0x70,0xeb,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0xbf,0xeb,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45, 114 | 0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x80,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x32,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0x80,0x00,0x00,0x00,0xe8,0xf0,0x00,0x00,0x00,0x48,0x89,0x45,0x48,0x48,0x8b,0x4d,0x78,0xe8,0x9b,0xfb,0xff,0xff,0x8b,0x00,0x89,0x45,0x50,0x48,0x8b,0x55,0x48,0x8b,0x4d, 115 | 0x50,0xff,0x55,0x40,0x48,0x8d,0x65,0x60,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0x3c,0xe8,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0x9c,0xe8,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0x1e,0xe9,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x46,0xe9,0xff,0xff,0x89,0x45,0x20,0x8b,0x45, 116 | 0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x4d,0x3f,0x4a,0x57,0x5d,0xb5,0x7b,0x38,0xe8,0x3e,0xe9,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x4a,0xe9,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x4d,0x3f,0x4a,0x57,0x5d,0xb5,0x7b,0x38,0xe8,0x73,0xe9,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0x86,0xe9, 117 | 0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x21,0xea,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0x70,0xea,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x5b, 118 | 0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0x56,0x45,0x48,0x20,0xcc,0xed,0xbc,0xd3,0xca,0xa7,0xb0,0xdc,0x09,0x20,0x2d,0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x1e,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x4d,0x68,0xe8,0xcd,0xec,0xff,0xff,0x48,0x89,0x45, 119 | 0x48,0x48,0x8b,0x4d,0x48,0xff,0x55,0x40,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0xf8,0xe6,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0x58,0xe7,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0xda,0xe7,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x02,0xe8,0xff,0xff,0x89, 120 | 0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x7a,0x82,0x5d,0x7a,0xcf,0xf1,0x24,0xb7,0xe8,0xfa,0xe7,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x06,0xe8,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x7a,0x82,0x5d,0x7a,0xcf,0xf1,0x24,0xb7,0xe8,0x2f,0xe8,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d, 121 | 0x68,0xe8,0x42,0xe8,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0xdd,0xe8,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0x2c,0xe9,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x4c,0x89,0x44,0x24,0x18,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x48,0x83,0xec,0x48, 122 | 0x48,0x8b,0xec,0x48,0x8b,0x7d,0x60,0x0f,0xb6,0x45,0x68,0x48,0x8b,0x4d,0x70,0xf3,0xaa,0x48,0x8b,0x45,0x60,0x48,0x8d,0x65,0x48,0x5f,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x80,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x4f,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x25,0xf9, 123 | 0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x48,0x48,0x8b,0x8d,0x80,0x00,0x00,0x00,0xe8,0xfa,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x50,0x48,0x8b,0x4d,0x78,0xe8,0x01,0x01,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x58,0x4c,0x8b,0x45,0x48,0x48,0x8b,0x55,0x50,0x48,0x8b,0x4d,0x58,0xff,0x55,0x40,0x48,0x8d,0x65,0x60,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48, 124 | 0x8d,0x4d,0x00,0xe8,0x85,0xe5,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0xe5,0xe5,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0x67,0xe6,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x8f,0xe6,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0xd4,0xd4,0x56,0x63,0x91, 125 | 0x0e,0x55,0x5c,0xe8,0x87,0xe6,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x93,0xe6,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0xd4,0xd4,0x56,0x63,0x91,0x0e,0x55,0x5c,0xe8,0xbc,0xe6,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0xcf,0xe6,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x6a,0xe7,0xff,0xff,0xeb,0x18,0xeb,0x95, 126 | 0x48,0x8d,0x4d,0x00,0xe8,0xb9,0xe7,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x5b,0x20,0x70, 127 | 0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0x73,0x65,0x74,0x20,0x68,0x6f,0x6f,0x6b,0x20,0x61,0x74,0x20,0x30,0x78,0x25,0x70,0x09,0x20,0x09,0x20,0x2d,0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x44,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x48,0x81,0xec,0xc8,0x02,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0x48,0x8d,0x45,0x00,0x48,0x8b,0xf8,0x33, 128 | 0xc0,0xb9,0x00,0x02,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0xc0,0x02,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x8d,0xb8,0x02,0x00,0x00,0x4c,0x8d,0x85,0xb0,0x02,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x80,0x02,0x00,0x00,0xe8,0x1a,0x00,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x81,0x02,0x00,0x00,0xe8,0x69,0xe7,0xff,0xff,0x48,0x8d,0xa5,0x98,0x02,0x00,0x00,0x5f,0x5d,0xc3,0x4c,0x89,0x4c,0x24, 129 | 0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x90,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x0d,0xe3,0xff,0xff,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0xe4,0xe6,0xff,0xff,0x8b,0x00,0x89,0x45,0x48,0x48,0x8b,0x8d,0x98,0x00,0x00,0x00,0xe8,0xdd,0xea,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x50,0x48,0x8b,0x8d,0x90,0x00,0x00, 130 | 0x00,0xe8,0xd7,0xe6,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0xdb,0xe6,0xff,0xff,0x48,0x89,0x45,0x60,0x44,0x8b,0x4d,0x48,0x4c,0x8b,0x45,0x50,0x48,0x8b,0x55,0x58,0x48,0x8b,0x4d,0x60,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x90,0x00, 131 | 0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x67,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0x6d,0xfa,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x48,0x48,0x8b,0x8d,0x98,0x00,0x00,0x00,0xe8,0x71,0xfa,0xff,0xff,0x8b,0x00,0x89,0x45,0x50,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x50,0xf6,0xff,0xff,0x48,0x63,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x6b, 132 | 0xf6,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x60,0x4c,0x8b,0x4d,0x48,0x44,0x8b,0x45,0x50,0x48,0x8b,0x55,0x58,0x48,0x8b,0x4d,0x60,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0xd3,0xe2,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0x33,0xe3,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8, 133 | 0xb5,0xe3,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0xdd,0xe3,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x7d,0x14,0x70,0xd0,0x13,0x79,0x5c,0xcb,0xe8,0xd5,0xe3,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0xe1,0xe3,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x7d, 134 | 0x14,0x70,0xd0,0x13,0x79,0x5c,0xcb,0xe8,0x0a,0xe4,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0x1d,0xe4,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0xb8,0xe4,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0x07,0xe5,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d, 135 | 0xc3,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x1e,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x4d,0x68,0xe8,0x29,0xf5,0xff,0xff,0x8b,0x00,0x89,0x45,0x48,0x8b,0x4d,0x48,0xff,0x55,0x40,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0xce,0xe1,0xff,0xff,0x48, 136 | 0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0x2e,0xe2,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0xb0,0xe2,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0xd8,0xe2,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x06,0x98,0x18,0x02,0x83,0x6a,0x41,0x4a,0xe8,0xd0,0xe2,0xff,0xff,0x89, 137 | 0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0xdc,0xe2,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x06,0x98,0x18,0x02,0x83,0x6a,0x41,0x4a,0xe8,0x05,0xe3,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0x18,0xe3,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0xb3,0xe3,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0x02,0xe4,0xff,0xff, 138 | 0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x5b,0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0x74,0x69,0x6d,0x65,0x20,0x6f,0x75,0x74,0x20,0x09,0x20,0x2d,0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x44,0x89,0x44,0x24,0x18,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x50,0x48,0x8b, 139 | 0xec,0x8b,0x45,0x68,0x89,0x45,0x40,0x48,0x8b,0x4d,0x60,0x8b,0x45,0x70,0x8b,0x55,0x40,0xf0,0x0f,0xb1,0x11,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x90,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x67,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0xb8,0xf7,0xff, 140 | 0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x48,0x48,0x8b,0x8d,0x98,0x00,0x00,0x00,0xe8,0x12,0x01,0x00,0x00,0x8b,0x00,0x89,0x45,0x50,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x9b,0xf3,0xff,0xff,0x48,0x63,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0xb6,0xf3,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x60,0x4c,0x8b,0x4d,0x48,0x44,0x8b,0x45,0x50,0x48,0x8b,0x55,0x58,0x48,0x8b,0x4d,0x60,0xff, 141 | 0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0x1e,0xe0,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0x7e,0xe0,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0x00,0xe1,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x28,0xe1,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89, 142 | 0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x3e,0x3d,0xe2,0x50,0xbc,0x6c,0x26,0x7a,0xe8,0x20,0xe1,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x2c,0xe1,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x3e,0x3d,0xe2,0x50,0xbc,0x6c,0x26,0x7a,0xe8,0x55,0xe1,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0x68,0xe1,0xff,0xff, 143 | 0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x03,0xe2,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0x52,0xe2,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x54, 144 | 0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x70,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x21,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x4d,0x68,0xe8,0xe2,0x00,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x48,0x48,0x8b,0x4d,0x48,0xff,0x55,0x40,0x48,0x8d,0x65,0x50,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0xff,0xde,0xff,0xff,0x48,0x8b, 145 | 0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0x5f,0xdf,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0xe1,0xdf,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x09,0xe0,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x12,0xd2,0xb4,0x77,0x87,0xbf,0x3a,0xfb,0xe8,0x01,0xe0,0xff,0xff,0x89,0x45, 146 | 0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x0d,0xe0,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x12,0xd2,0xb4,0x77,0x87,0xbf,0x3a,0xfb,0xe8,0x36,0xe0,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0x49,0xe0,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0xe4,0xe0,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0x33,0xe1,0xff,0xff,0x0f, 147 | 0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x5b,0x20,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64,0x20,0x5d,0x66,0x75,0x6e,0x5f,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x3a,0x5b,0x25,0x64,0x5d,0x09,0x20,0x66,0x75,0x6e,0x5f,0x64,0x6f,0x6e, 148 | 0x65,0x3a,0x5b,0x25,0x64,0x5d,0x09,0x20,0x09,0x20,0x2d,0x2d,0x6c,0x69,0x6e,0x65,0x3a,0x20,0x25,0x30,0x35,0x64,0x20,0x0a,0x00,0x44,0x89,0x4c,0x24,0x20,0x44,0x89,0x44,0x24,0x18,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x48,0x81,0xec,0xc8,0x02,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0x48,0x8d,0x45,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x00,0x02,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0xc8,0x02,0x00, 149 | 0x00,0x48,0x89,0x44,0x24,0x28,0x48,0x8d,0x85,0xc0,0x02,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x8d,0xb8,0x02,0x00,0x00,0x4c,0x8d,0x85,0xb0,0x02,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x80,0x02,0x00,0x00,0xe8,0x1a,0x00,0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x81,0x02,0x00,0x00,0xe8,0xdb,0xe0,0xff,0xff,0x48,0x8d,0xa5,0x98,0x02,0x00,0x00,0x5f,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c, 150 | 0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0xe8,0x7f,0xdc,0xff,0xff,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa8,0x00,0x00,0x00,0xe8,0x56,0xe0,0xff,0xff,0x8b,0x00,0x89,0x45,0x48,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0xc5,0xfd,0xff,0xff,0x8b,0x00,0x89,0x45,0x4c,0x48,0x8b,0x8d,0x98,0x00,0x00,0x00,0xe8,0xb4,0xfd, 151 | 0xff,0xff,0x8b,0x00,0x89,0x45,0x50,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x3a,0xe0,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x3e,0xe0,0xff,0xff,0x48,0x89,0x45,0x60,0x8b,0x45,0x48,0x89,0x44,0x24,0x20,0x44,0x8b,0x4d,0x4c,0x44,0x8b,0x45,0x50,0x48,0x8b,0x55,0x58,0x48,0x8b,0x4d,0x60,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55, 152 | 0x57,0x48,0x81,0xec,0xe8,0x01,0x00,0x00,0x48,0x8d,0x6c,0x24,0x30,0x48,0x8d,0x45,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x00,0x01,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0x70,0x01,0x00,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x01,0x00,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0x71,0x01,0x00,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x01,0x00,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0x72,0x01,0x00,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9, 153 | 0x01,0x00,0x00,0x00,0xf3,0xaa,0x44,0x0f,0xb6,0x8d,0x70,0x01,0x00,0x00,0x44,0x0f,0xb6,0x85,0x71,0x01,0x00,0x00,0x0f,0xb6,0x95,0x72,0x01,0x00,0x00,0x48,0x8d,0x8d,0x50,0x01,0x00,0x00,0xe8,0xef,0x00,0x00,0x00,0x48,0x8b,0xc8,0xe8,0x53,0x01,0x00,0x00,0x48,0x89,0x85,0x48,0x01,0x00,0x00,0x48,0x8d,0x85,0xd0,0x01,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d,0x0d,0xfa,0x02,0x00,0x00,0x4c,0x8d,0x85,0x48,0x01, 154 | 0x00,0x00,0x48,0x8d,0x55,0x00,0x48,0x8d,0x8d,0x40,0x01,0x00,0x00,0xe8,0xf7,0x02,0x00,0x00,0xc7,0x85,0x74,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x8d,0x85,0xa0,0x01,0x00,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x01,0x00,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0xa1,0x01,0x00,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x01,0x00,0x00,0x00,0xf3,0xaa,0x48,0x8d,0x85,0xa2,0x01,0x00,0x00,0x48,0x8b,0xf8,0x33,0xc0,0xb9,0x01, 155 | 0x00,0x00,0x00,0xf3,0xaa,0x44,0x0f,0xb6,0x8d,0xa0,0x01,0x00,0x00,0x44,0x0f,0xb6,0x85,0xa1,0x01,0x00,0x00,0x0f,0xb6,0x95,0xa2,0x01,0x00,0x00,0x48,0x8d,0x8d,0x80,0x01,0x00,0x00,0xe8,0x2d,0x04,0x00,0x00,0x48,0x8b,0xc8,0xe8,0xb4,0x00,0x00,0x00,0x48,0x89,0x85,0x78,0x01,0x00,0x00,0x48,0xc7,0x85,0xa8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x8d,0x85,0x74,0x01,0x00,0x00,0x48,0x89,0x44,0x24,0x20,0x4c,0x8d, 156 | 0x8d,0x78,0x01,0x00,0x00,0x4c,0x8d,0x45,0x00,0x48,0x8d,0x95,0xa8,0x01,0x00,0x00,0x48,0x8d,0x8d,0x73,0x01,0x00,0x00,0xe8,0x55,0x04,0x00,0x00,0x33,0xc0,0x48,0x8d,0xa5,0xb8,0x01,0x00,0x00,0x5f,0x5d,0xc3,0x44,0x88,0x4c,0x24,0x20,0x44,0x88,0x44,0x24,0x18,0x88,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0xb9,0x6f,0xba,0x3f,0x6e,0x6e,0x7e,0x7c, 157 | 0x9e,0x48,0x89,0x08,0x48,0x8b,0x45,0x50,0x48,0xb9,0xb9,0xee,0x56,0x2c,0xb0,0x2b,0x1a,0xfd,0x48,0x89,0x48,0x08,0x48,0x8b,0x45,0x50,0x48,0xb9,0x4f,0x96,0x3d,0x52,0x59,0xfe,0xe5,0xea,0x48,0x89,0x48,0x10,0x48,0x8b,0x45,0x50,0x48,0xb9,0x68,0x65,0x30,0x3d,0xf4,0x9a,0xa5,0x3e,0x48,0x89,0x48,0x18,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x30,0x01,0x00, 158 | 0x00,0x48,0x8b,0xec,0x48,0xb8,0xd5,0x15,0xf5,0x93,0x4b,0x0d,0x5c,0x51,0x48,0x89,0x45,0x00,0x48,0xb8,0x66,0x5d,0x9a,0x9e,0x7e,0xe1,0xe7,0xcd,0x48,0x89,0x45,0x08,0x48,0xb8,0x37,0xb3,0x4d,0x52,0x59,0xfe,0xe5,0xea,0x48,0x89,0x45,0x10,0x48,0xb8,0x68,0x65,0x30,0x3d,0xf4,0x9a,0xa5,0x3e,0x48,0x89,0x45,0x18,0x33,0xc0,0x85,0xc0,0x74,0x02,0xeb,0x45,0x66,0x0f,0x6f,0x45,0x00,0x66,0x0f,0x7f,0x85,0x80,0x00,0x00, 159 | 0x00,0x48,0x8b,0x85,0x40,0x01,0x00,0x00,0xf3,0x0f,0x6f,0x00,0x66,0x0f,0x7f,0x85,0x90,0x00,0x00,0x00,0x66,0x0f,0x6f,0x85,0x90,0x00,0x00,0x00,0x66,0x0f,0xef,0x85,0x80,0x00,0x00,0x00,0x66,0x0f,0x7f,0x45,0x70,0x48,0x8b,0x85,0x40,0x01,0x00,0x00,0x66,0x0f,0x6f,0x45,0x70,0xf3,0x0f,0x7f,0x00,0x33,0xc0,0x85,0xc0,0x74,0x02,0xeb,0x56,0x48,0x8d,0x45,0x10,0xf3,0x0f,0x6f,0x00,0x66,0x0f,0x7f,0x85,0xb0,0x00,0x00, 160 | 0x00,0x48,0x8b,0x85,0x40,0x01,0x00,0x00,0x48,0x83,0xc0,0x10,0xf3,0x0f,0x6f,0x00,0x66,0x0f,0x7f,0x85,0xc0,0x00,0x00,0x00,0x66,0x0f,0x6f,0x85,0xc0,0x00,0x00,0x00,0x66,0x0f,0xef,0x85,0xb0,0x00,0x00,0x00,0x66,0x0f,0x7f,0x85,0xa0,0x00,0x00,0x00,0x48,0x8b,0x85,0x40,0x01,0x00,0x00,0x48,0x83,0xc0,0x10,0x66,0x0f,0x6f,0x85,0xa0,0x00,0x00,0x00,0xf3,0x0f,0x7f,0x00,0x33,0xc0,0x83,0xf8,0x01,0x74,0x02,0xeb,0x56, 161 | 0x48,0x8d,0x45,0x20,0xf3,0x0f,0x6f,0x00,0x66,0x0f,0x7f,0x85,0xe0,0x00,0x00,0x00,0x48,0x8b,0x85,0x40,0x01,0x00,0x00,0x48,0x83,0xc0,0x20,0xf3,0x0f,0x6f,0x00,0x66,0x0f,0x7f,0x85,0xf0,0x00,0x00,0x00,0x66,0x0f,0x6f,0x85,0xf0,0x00,0x00,0x00,0x66,0x0f,0xef,0x85,0xe0,0x00,0x00,0x00,0x66,0x0f,0x7f,0x85,0xd0,0x00,0x00,0x00,0x48,0x8b,0x85,0x40,0x01,0x00,0x00,0x48,0x83,0xc0,0x20,0x66,0x0f,0x6f,0x85,0xd0,0x00, 162 | 0x00,0x00,0xf3,0x0f,0x7f,0x00,0x33,0xc0,0x83,0xf8,0x01,0x74,0x02,0xeb,0x56,0x48,0x8d,0x45,0x30,0xf3,0x0f,0x6f,0x00,0x66,0x0f,0x7f,0x85,0x10,0x01,0x00,0x00,0x48,0x8b,0x85,0x40,0x01,0x00,0x00,0x48,0x83,0xc0,0x30,0xf3,0x0f,0x6f,0x00,0x66,0x0f,0x7f,0x85,0x20,0x01,0x00,0x00,0x66,0x0f,0x6f,0x85,0x20,0x01,0x00,0x00,0x66,0x0f,0xef,0x85,0x10,0x01,0x00,0x00,0x66,0x0f,0x7f,0x85,0x00,0x01,0x00,0x00,0x48,0x8b, 163 | 0x85,0x40,0x01,0x00,0x00,0x48,0x83,0xc0,0x30,0x66,0x0f,0x6f,0x85,0x00,0x01,0x00,0x00,0xf3,0x0f,0x7f,0x00,0x48,0x8b,0x85,0x40,0x01,0x00,0x00,0x48,0x8d,0xa5,0x30,0x01,0x00,0x00,0x5d,0xc3,0x53,0x68,0x65,0x6c,0x6c,0x43,0x6f,0x64,0x65,0x45,0x6e,0x74,0x72,0x79,0x50,0x6f,0x69,0x6e,0x74,0x00,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81, 164 | 0xec,0x90,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x63,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0xa6,0xfa,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x48,0x48,0x8b,0x8d,0x98,0x00,0x00,0x00,0xe8,0x0e,0x01,0x00,0x00,0x48,0x89,0x45,0x50,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x15,0x01,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00, 165 | 0xe8,0x19,0x01,0x00,0x00,0x48,0x89,0x45,0x60,0x4c,0x8b,0x4d,0x48,0x4c,0x8b,0x45,0x50,0x48,0x8b,0x55,0x58,0x48,0x8b,0x4d,0x60,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec,0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0x84,0xd8,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0xe4,0xd8,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0x66, 166 | 0xd9,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x8e,0xd9,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64,0x00,0x74,0x57,0x48,0xb9,0x7d,0x60,0xb7,0x25,0x39,0x99,0x77,0x2e,0xe8,0x86,0xd9,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x92,0xd9,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0x7d,0x60, 167 | 0xb7,0x25,0x39,0x99,0x77,0x2e,0xe8,0xbb,0xd9,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0xce,0xd9,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x69,0xda,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0xb8,0xda,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3, 168 | 0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x44,0x88,0x4c,0x24,0x20,0x44,0x88,0x44,0x24,0x18,0x88, 169 | 0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0xb9,0x15,0xa1,0x22,0x47,0x38,0x65,0x39,0x3d,0x48,0x89,0x08,0x48,0x8b,0x45,0x50,0x48,0xb9,0x0a,0x3e,0xf5,0xfa,0x1b,0x54,0x23,0x18,0x48,0x89,0x48,0x08,0x48,0x8b,0x45,0x50,0x48,0xb9,0x8e,0x79,0xf3,0x52,0x59,0xfe,0xe5,0xea,0x48,0x89,0x48,0x10,0x48,0x8b,0x45,0x50,0x48,0xb9,0x68,0x65,0x30,0x3d,0xf4, 170 | 0x9a,0xa5,0x3e,0x48,0x89,0x48,0x18,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x4c,0x89,0x4c,0x24,0x20,0x4c,0x89,0x44,0x24,0x18,0x48,0x89,0x54,0x24,0x10,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x81,0xec,0x90,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0xe8,0x64,0x00,0x00,0x00,0x48,0x89,0x45,0x40,0x48,0x8b,0x8d,0xa0,0x00,0x00,0x00,0xe8,0x22,0x01,0x00,0x00,0x8b,0x00,0x89,0x45,0x48,0x48,0x8b,0x8d,0x98, 171 | 0x00,0x00,0x00,0xe8,0x1f,0xff,0xff,0xff,0x48,0x8b,0x00,0x48,0x89,0x45,0x50,0x48,0x8b,0x8d,0x90,0x00,0x00,0x00,0xe8,0x23,0xff,0xff,0xff,0x48,0x89,0x45,0x58,0x48,0x8b,0x8d,0x88,0x00,0x00,0x00,0xe8,0x05,0x01,0x00,0x00,0x48,0x8b,0x00,0x48,0x89,0x45,0x60,0x44,0x8b,0x4d,0x48,0x4c,0x8b,0x45,0x50,0x48,0x8b,0x55,0x58,0x48,0x8b,0x4d,0x60,0xff,0x55,0x40,0x48,0x8d,0x65,0x70,0x5d,0xc3,0x40,0x55,0x48,0x81,0xec, 172 | 0xa0,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x20,0x48,0x8d,0x4d,0x00,0xe8,0x7b,0xd6,0xff,0xff,0x48,0x8b,0x45,0x00,0x48,0x8b,0x50,0x30,0x48,0x8d,0x4d,0x08,0xe8,0xdb,0xd6,0xff,0xff,0x48,0x8d,0x4d,0x08,0xe8,0x5d,0xd7,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x74,0x77,0x48,0x8d,0x4d,0x08,0xe8,0x85,0xd7,0xff,0xff,0x89,0x45,0x20,0x8b,0x45,0x20,0x89,0x45,0x64,0x8b,0x45,0x20,0xff,0xc8,0x89,0x45,0x20,0x83,0x7d,0x64, 173 | 0x00,0x74,0x57,0x48,0xb9,0xdf,0x28,0x31,0xda,0xe4,0xb2,0x68,0x45,0xe8,0x7d,0xd7,0xff,0xff,0x89,0x45,0x64,0x8b,0x55,0x20,0x48,0x8d,0x4d,0x08,0xe8,0x89,0xd7,0xff,0xff,0x48,0x89,0x45,0x68,0x48,0xb9,0xdf,0x28,0x31,0xda,0xe4,0xb2,0x68,0x45,0xe8,0xb2,0xd7,0xff,0xff,0x89,0x45,0x70,0x8b,0x55,0x64,0x48,0x8b,0x4d,0x68,0xe8,0xc5,0xd7,0xff,0xff,0x8b,0x4d,0x70,0x3b,0xc1,0x75,0x0e,0x8b,0x55,0x20,0x48,0x8d,0x4d, 174 | 0x08,0xe8,0x60,0xd8,0xff,0xff,0xeb,0x18,0xeb,0x95,0x48,0x8d,0x4d,0x00,0xe8,0xaf,0xd8,0xff,0xff,0x0f,0xb6,0xc0,0x85,0xc0,0x0f,0x85,0x54,0xff,0xff,0xff,0x33,0xc0,0x48,0x8d,0xa5,0x80,0x00,0x00,0x00,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45,0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3,0x48,0x89,0x4c,0x24,0x08,0x55,0x48,0x83,0xec,0x40,0x48,0x8b,0xec,0x48,0x8b,0x45, 175 | 0x50,0x48,0x8d,0x65,0x40,0x5d,0xc3, }; 176 | 177 | }; 178 | 179 | -------------------------------------------------------------------------------- /src/resource.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lainswork/dwm-screen-shot/4232385c7dbfb700fbfb27c8f3fb24d1bcab2789/src/resource.h -------------------------------------------------------------------------------- /src/win-url-download.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #pragma comment(lib, "urlmon.lib") 9 | #include 10 | #include 11 | 12 | class CBindStatusCallback : public IBindStatusCallback { 13 | using OnProgressCallBack_T = std::function; 14 | CBindStatusCallback() {} 15 | virtual ~CBindStatusCallback() {} 16 | 17 | public: 18 | inline static CBindStatusCallback *GenerateAnInstance() { return new CBindStatusCallback(); } 19 | 20 | void OnProgressCallBack(OnProgressCallBack_T callback) { _OnProgressCallBack = callback; } 21 | 22 | private: 23 | ULONG m_uRefCount = 1; 24 | OnProgressCallBack_T _OnProgressCallBack; 25 | // std::vector data; 26 | 27 | public: 28 | // std::vector &GetData() { return data; } 29 | STDMETHOD_(ULONG, Release)() { 30 | ULONG uRet = --m_uRefCount; 31 | if (0 == m_uRefCount) 32 | delete this; 33 | return uRet; 34 | } 35 | STDMETHOD(OnProgress) 36 | (ULONG ulProgress, // 37 | ULONG ulProgressMax, // 38 | ULONG ulStatusCode, 39 | LPCWSTR szStatusText) { 40 | if (ulProgressMax != 0 && _OnProgressCallBack) { 41 | _OnProgressCallBack(ulProgress * 100.0 / ulProgressMax); 42 | } 43 | return S_OK; 44 | } 45 | 46 | STDMETHOD(OnDataAvailable) 47 | (DWORD grfBSCF, DWORD dwSize, FORMATETC __RPC_FAR *pformatetc, STGMEDIUM __RPC_FAR *pstgmed) { 48 | /*size_t old_size = data.size(); 49 | data.resize(old_size + dwSize); 50 | ULONG mSize = 0; 51 | pstgmed->pstm->Read(data.data() + old_size, dwSize, &mSize); 52 | if (mSize == dwSize) 53 | return S_OK; 54 | else 55 | return S_FALSE;*/ 56 | return S_OK; 57 | } 58 | 59 | STDMETHOD(OnStartBinding)(DWORD dwReserved, IBinding __RPC_FAR *pib) { return E_NOTIMPL; } 60 | STDMETHOD(GetPriority)(LONG __RPC_FAR *pnPriority) { return E_NOTIMPL; } 61 | STDMETHOD(OnLowResource)(DWORD reserved) { return E_NOTIMPL; } 62 | STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR szError) { return E_NOTIMPL; } 63 | STDMETHOD(GetBindInfo)(DWORD __RPC_FAR *grfBINDF, BINDINFO __RPC_FAR *pbindinfo) { return E_NOTIMPL; } 64 | STDMETHOD(OnObjectAvailable)(REFIID riid, IUnknown __RPC_FAR *punk) { return E_NOTIMPL; } 65 | STDMETHOD(QueryInterface)(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject) { return E_NOTIMPL; } 66 | STDMETHOD_(ULONG, AddRef)() { return m_uRefCount++; } 67 | }; 68 | --------------------------------------------------------------------------------