diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 9d52f04..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,6 +0,0 @@
-[submodule "Dobby"]
- path = Dobby
- url = https://github.com/jmpews/Dobby
-[submodule "deps/Dobby"]
- path = deps/Dobby
- url = https://github.com/jmpews/Dobby
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 58a67c2..7ade1f0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,19 +1,6 @@
cmake_minimum_required(VERSION 3.20)
-project(Configurer64)
-
-set(DOBBY_GENERATE_SHARED OFF CACHE BOOL "" FORCE)
-set(DOBBY_DEBUG OFF CACHE BOOL "" FORCE)
-set(NearBranch ON CACHE BOOL "" FORCE)
-set(DynamicBinaryInstrument OFF CACHE BOOL "" FORCE)
-set(FullFloatingPointRegisterPack OFF CACHE BOOL "" FORCE)
-set(EnableObfuscation OFF CACHE BOOL "" FORCE)
-set(Plugin.SymbolResolver OFF CACHE BOOL "" FORCE)
-set(Plugin.GlobalOffsetTableHook ON CACHE BOOL "" FORCE)
-set(Plugin.LinkerLoadCallback OFF CACHE BOOL "" FORCE)
-set(Plugin.ApplicationEventMonitor OFF CACHE BOOL "" FORCE)
-set(Plugin.Android.BionicLinkerRestriction OFF CACHE BOOL "" FORCE)
-add_subdirectory(deps/Dobby)
+project(UIWarp)
add_library(${PROJECT_NAME} SHARED
src/main.cpp
@@ -28,9 +15,12 @@ target_compile_options(${PROJECT_NAME} PRIVATE
-fvisibility-inlines-hidden
)
-target_compile_options(${PROJECT_NAME} PRIVATE
- -fpass-plugin=${CMAKE_SOURCE_DIR}/ollvm.dylib
-)
+# Add OLLVM plugin if exists
+if (EXISTS ${CMAKE_SOURCE_DIR}/ollvm.dylib)
+ target_compile_options(${PROJECT_NAME} PRIVATE
+ -fpass-plugin=${CMAKE_SOURCE_DIR}/ollvm.dylib
+ )
+endif()
target_link_libraries(${PROJECT_NAME} PRIVATE
"-framework Foundation"
@@ -41,9 +31,4 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
target_link_libraries(${PROJECT_NAME} PRIVATE
objc
- dobby
-)
-
-target_include_directories(${PROJECT_NAME} PRIVATE
- ${CMAKE_SOURCE_DIR}/Dobby/include
)
diff --git a/assets/PDFM.background.png b/assets/PDFM.background.png
index 981fe08..a920f12 100644
Binary files a/assets/PDFM.background.png and b/assets/PDFM.background.png differ
diff --git a/crack/pdfm-18.0.1.53056/prl_client_app b/crack/pdfm-18.0.1.53056/prl_client_app
new file mode 100644
index 0000000..699b311
Binary files /dev/null and b/crack/pdfm-18.0.1.53056/prl_client_app differ
diff --git a/crack/pdfm-18.0.1.53056/prl_client_app.md b/crack/pdfm-18.0.1.53056/prl_client_app.md
new file mode 100644
index 0000000..fae08af
--- /dev/null
+++ b/crack/pdfm-18.0.1.53056/prl_client_app.md
@@ -0,0 +1,96 @@
+# patch prl_client_app
+
+## 1. patch /usr/bin/codesign verify
+
+find string xref to "/usr/bin/codesign"
+
+### x86_64
+
+```
+__text:000000010093B8D0 55 push rbp
+__text:000000010093B8D1 48 89 E5 mov rbp, rsp
+__text:000000010093B8D4 41 57 push r15
+__text:000000010093B8D6 41 56 push r14
+__text:000000010093B8D8 41 55 push r13
+__text:000000010093B8DA 41 54 push r12
+__text:000000010093B8DC 53 push rbx
+__text:000000010093B8DD 48 81 EC 38 04 00 00 sub rsp, 438h
+__text:000000010093B8E4 4C 89 85 B8 FB FF FF mov [rbp+var_448], r8
+__text:000000010093B8EB 48 89 8D B0 FB FF FF mov [rbp+var_450], rcx
+__text:000000010093B8F2 48 89 95 A8 FB FF FF mov [rbp+var_458], rdx
+__text:000000010093B8F9 41 89 F4 mov r12d, esi
+__text:000000010093B8FC 48 89 FB mov rbx, rdi
+__text:000000010093B8FF 48 8B 05 F2 91 B7 01 mov rax, cs:___stack_chk_guard_ptr
+__text:000000010093B906 48 8B 00 mov rax, [rax]
+__text:000000010093B909 48 89 45 D0 mov [rbp+var_30], rax
+__text:000000010093B90D 48 8B 0D AC D9 C6 01 mov rcx, cs:off_1025A92C0 ; "4C6364ACXT"
+__text:000000010093B914 48 8D 15 AC F2 18 00 lea rdx, aAnchorAppleGen_0 ; "=anchor apple generic and certificate l"...
+__text:000000010093B91B 45 31 F6 xor r14d, r14d
+__text:000000010093B91E 48 8D BD D0 FB FF FF lea rdi, [rbp+__str] ; __str
+__text:000000010093B925 BE 00 04 00 00 mov esi, 400h ; __size
+__text:000000010093B92A 31 C0 xor eax, eax
+__text:000000010093B92C E8 11 A0 01 00 call _snprintf
+__text:000000010093B931 48 C7 85 C0 FB FF FF 00+ mov [rbp+staticCode], 0
+__text:000000010093B931 00 00 00
+__text:000000010093B93C 48 8D 3D 72 F2 18 00 lea rdi, __file ; "/usr/bin/codesign"
+__text:000000010093B943 BE 01 00 00 00 mov esi, 1 ; int
+__text:000000010093B948 E8 73 9A 01 00 call _access
+__text:000000010093B94D 85 C0 test eax, eax
+__text:000000010093B94F 74 29 jz short loc_10093B97A
+```
+
+after
+
+
+```
+__text:000000010093B8D0 sub_10093B8D0 proc near ; CODE XREF: sub_10093B890+11↑j
+__text:000000010093B8D0 ; sub_10093B8B0+C↑j
+__text:000000010093B8D0 6A 01 push 1
+__text:000000010093B8D2 58 pop rax
+__text:000000010093B8D3 C3 retn
+__text:000000010093B8D3 sub_10093B8D0 endp
+```
+
+### arm64
+
+```
+__text:0000000100977800 FA 67 BB A9 STP X26, X25, [SP,#-0x10+var_40]!
+__text:0000000100977804 F8 5F 01 A9 STP X24, X23, [SP,#0x40+var_30]
+__text:0000000100977808 F6 57 02 A9 STP X22, X21, [SP,#0x40+var_20]
+__text:000000010097780C F4 4F 03 A9 STP X20, X19, [SP,#0x40+var_10]
+__text:0000000100977810 FD 7B 04 A9 STP X29, X30, [SP,#0x40+var_s0]
+__text:0000000100977814 FD 03 01 91 ADD X29, SP, #0x40
+__text:0000000100977818 FF 43 11 D1 SUB SP, SP, #0x450
+__text:000000010097781C F6 03 04 AA MOV X22, X4
+__text:0000000100977820 F7 03 03 AA MOV X23, X3
+__text:0000000100977824 F4 03 02 AA MOV X20, X2
+__text:0000000100977828 F5 03 01 AA MOV X21, X1
+__text:000000010097782C F3 03 00 AA MOV X19, X0
+__text:0000000100977830 48 DB 00 B0 ADRP X8, #___stack_chk_guard_ptr@PAGE
+__text:0000000100977834 08 69 45 F9 LDR X8, [X8,#___stack_chk_guard_ptr@PAGEOFF]
+__text:0000000100977838 08 01 40 F9 LDR X8, [X8]
+__text:000000010097783C A8 83 1B F8 STUR X8, [X29,#var_48]
+__text:0000000100977840 E8 E2 00 D0 ADRP X8, #off_1025D5358@PAGE ; "4C6364ACXT"
+__text:0000000100977844 08 AD 41 F9 LDR X8, [X8,#off_1025D5358@PAGEOFF] ; "4C6364ACXT"
+__text:0000000100977848 E8 03 00 F9 STR X8, [SP,#0x490+var_490]
+__text:000000010097784C C2 D9 00 F0 42 4C 3C 91 ADRL X2, aAnchorAppleGen_0 ; "=anchor apple generic and certificate l"...
+__text:0000000100977854 E0 23 01 91 ADD X0, SP, #0x490+__str ; __str
+__text:0000000100977858 01 80 80 52 MOV W1, #0x400 ; __size
+__text:000000010097785C E1 7D 00 94 BL _snprintf
+__text:0000000100977860 FF 1F 00 F9 STR XZR, [SP,#0x490+staticCode]
+__text:0000000100977864 C0 D9 00 F0 00 04 3C 91 ADRL X0, aUsrBinCodesign ; "/usr/bin/codesign"
+__text:000000010097786C 21 00 80 52 MOV W1, #1 ; int
+__text:0000000100977870 1B 7B 00 94 BL _access
+__text:0000000100977874 E0 01 00 34 CBZ W0, loc_1009778B0
+```
+
+after
+
+```
+__text:0000000100977800 sub_100977800 ; CODE XREF: sub_1009777DC+10↑j
+__text:0000000100977800 ; sub_1009777F0+C↑j
+__text:0000000100977800 20 00 80 D2 MOV X0, #1
+__text:0000000100977804 C0 03 5F D6 RET
+__text:0000000100977804 ; End of function sub_100977800
+```
+
diff --git a/crack/pdfm-18.0.1.53056/prl_disp_service b/crack/pdfm-18.0.1.53056/prl_disp_service
new file mode 100644
index 0000000..432d434
Binary files /dev/null and b/crack/pdfm-18.0.1.53056/prl_disp_service differ
diff --git a/crack/pdfm-18.0.1.53056/prl_disp_service.md b/crack/pdfm-18.0.1.53056/prl_disp_service.md
new file mode 100644
index 0000000..e1cdac8
--- /dev/null
+++ b/crack/pdfm-18.0.1.53056/prl_disp_service.md
@@ -0,0 +1,202 @@
+# patch prl_disp_app
+
+## 1. patch /usr/bin/codesign verify
+
+find string xref to "/usr/bin/codesign"
+
+### x86_64
+
+```
+__text:00000001007C9280 55 push rbp
+__text:00000001007C9281 48 89 E5 mov rbp, rsp
+__text:00000001007C9284 41 57 push r15
+__text:00000001007C9286 41 56 push r14
+__text:00000001007C9288 41 55 push r13
+__text:00000001007C928A 41 54 push r12
+__text:00000001007C928C 53 push rbx
+__text:00000001007C928D 48 81 EC 38 04 00 00 sub rsp, 438h
+__text:00000001007C9294 4C 89 85 B8 FB FF FF mov [rbp+var_448], r8
+__text:00000001007C929B 48 89 8D B0 FB FF FF mov [rbp+var_450], rcx
+__text:00000001007C92A2 48 89 95 A8 FB FF FF mov [rbp+var_458], rdx
+__text:00000001007C92A9 41 89 F4 mov r12d, esi
+__text:00000001007C92AC 48 89 FB mov rbx, rdi
+__text:00000001007C92AF 48 8B 05 7A 70 1C 00 mov rax, cs:___stack_chk_guard_ptr
+__text:00000001007C92B6 48 8B 00 mov rax, [rax]
+__text:00000001007C92B9 48 89 45 D0 mov [rbp+var_30], rax
+__text:00000001007C92BD 48 8B 0D B4 83 27 00 mov rcx, cs:off_100A41678 ; "4C6364ACXT"
+__text:00000001007C92C4 48 8D 15 C4 2A 15 00 lea rdx, aAnchorAppleGen_0 ; "=anchor apple generic and certificate l"...
+__text:00000001007C92CB 45 31 F6 xor r14d, r14d
+__text:00000001007C92CE 48 8D BD D0 FB FF FF lea rdi, [rbp+__str] ; __str
+__text:00000001007C92D5 BE 00 04 00 00 mov esi, 400h ; __size
+__text:00000001007C92DA 31 C0 xor eax, eax
+__text:00000001007C92DC E8 73 CA 01 00 call _snprintf
+__text:00000001007C92E1 48 C7 85 C0 FB FF FF 00+ mov [rbp+staticCode], 0
+__text:00000001007C92E1 00 00 00
+__text:00000001007C92EC 48 8D 3D 8A 2A 15 00 lea rdi, __file ; "/usr/bin/codesign"
+__text:00000001007C92F3 BE 01 00 00 00 mov esi, 1 ; int
+__text:00000001007C92F8 E8 3F C4 01 00 call _access
+__text:00000001007C92FD 85 C0 test eax, eax
+__text:00000001007C92FF 74 29 jz short loc_1007C932A
+```
+
+after
+
+```
+__text:00000001007C9280 sub_1007C9280 proc near ; CODE XREF: sub_100175930+28F↑p
+__text:00000001007C9280 6A 01 push 1
+__text:00000001007C9282 58 pop rax
+__text:00000001007C9283 C3 retn
+__text:00000001007C9283 sub_1007C9280 endp
+```
+
+### arm64
+
+```
+__text:00000001007B3A14 FA 67 BB A9 STP X26, X25, [SP,#-0x10+var_40]!
+__text:00000001007B3A18 F8 5F 01 A9 STP X24, X23, [SP,#0x40+var_30]
+__text:00000001007B3A1C F6 57 02 A9 STP X22, X21, [SP,#0x40+var_20]
+__text:00000001007B3A20 F4 4F 03 A9 STP X20, X19, [SP,#0x40+var_10]
+__text:00000001007B3A24 FD 7B 04 A9 STP X29, X30, [SP,#0x40+var_s0]
+__text:00000001007B3A28 FD 03 01 91 ADD X29, SP, #0x40
+__text:00000001007B3A2C FF 43 11 D1 SUB SP, SP, #0x450
+__text:00000001007B3A30 F6 03 04 AA MOV X22, X4
+__text:00000001007B3A34 F7 03 03 AA MOV X23, X3
+__text:00000001007B3A38 F4 03 02 AA MOV X20, X2
+__text:00000001007B3A3C F5 03 01 AA MOV X21, X1
+__text:00000001007B3A40 F3 03 00 AA MOV X19, X0
+__text:00000001007B3A44 C8 0D 00 B0 ADRP X8, #___stack_chk_guard_ptr@PAGE
+__text:00000001007B3A48 08 6D 41 F9 LDR X8, [X8,#___stack_chk_guard_ptr@PAGEOFF]
+__text:00000001007B3A4C 08 01 40 F9 LDR X8, [X8]
+__text:00000001007B3A50 A8 83 1B F8 STUR X8, [X29,#var_48]
+__text:00000001007B3A54 48 13 00 D0 ADRP X8, #off_100A1DB18@PAGE ; "4C6364ACXT"
+__text:00000001007B3A58 08 8D 45 F9 LDR X8, [X8,#off_100A1DB18@PAGEOFF] ; "4C6364ACXT"
+__text:00000001007B3A5C E8 03 00 F9 STR X8, [SP,#0x490+var_490]
+__text:00000001007B3A60 C2 0C 00 90 42 18 34 91 ADRL X2, aAnchorAppleGen_0 ; "=anchor apple generic and certificate l"...
+__text:00000001007B3A68 E0 23 01 91 ADD X0, SP, #0x490+__str ; __str
+__text:00000001007B3A6C 01 80 80 52 MOV W1, #0x400 ; __size
+__text:00000001007B3A70 AA 76 00 94 BL _snprintf
+__text:00000001007B3A74 FF 1F 00 F9 STR XZR, [SP,#0x490+staticCode]
+__text:00000001007B3A78 C0 0C 00 90 00 D0 33 91 ADRL X0, aUsrBinCodesign ; "/usr/bin/codesign"
+__text:00000001007B3A80 21 00 80 52 MOV W1, #1 ; int
+__text:00000001007B3A84 93 73 00 94 BL _access
+__text:00000001007B3A88 E0 01 00 34 CBZ W0, loc_1007B3AC4
+__text:00000001007B3A8C
+```
+
+after
+
+```
+__text:00000001007B3A14 sub_1007B3A14 ; CODE XREF: sub_10018297C+2D4↑p
+__text:00000001007B3A14 20 00 80 D2 MOV X0, #1
+__text:00000001007B3A18 C0 03 5F D6 RET
+__text:00000001007B3A18 ; End of function sub_1007B3A14
+```
+
+## 2. patch Signature::SignCheckerImpl
+
+### 2.1 find vtable
+
+x86_64
+
+```
+__const:00000001009B2A70 ; `vtable for'Signature::SignCheckerImpl
+__const:00000001009B2A70 00 00 00 00 00 00 00 00 _ZTVN9Signature15SignCheckerImplE dq 0 ; DATA XREF: sub_100349A00+28↑o
+__const:00000001009B2A70 ; offset to this
+__const:00000001009B2A78 A8 2A 9B 00 01 00 00 00 dq offset _ZTIN9Signature15SignCheckerImplE ; `typeinfo for'Signature::SignCheckerImpl
+__const:00000001009B2A80 00 0B 5B 00 01 00 00 00 dq offset sub_1005B0B00
+__const:00000001009B2A88 10 0B 5B 00 01 00 00 00 dq offset sub_1005B0B10
+__const:00000001009B2A90 80 07 5B 00 01 00 00 00 dq offset sub_1005B0780
+```
+
+arm64
+
+```
+
+```
+
+### 2.2 patch function `sub_1005B0780`
+
+x86_64
+
+```
+__text:00000001005B0780 55 push rbp
+__text:00000001005B0781 48 89 E5 mov rbp, rsp
+__text:00000001005B0784 41 57 push r15
+__text:00000001005B0786 41 56 push r14
+__text:00000001005B0788 41 54 push r12
+__text:00000001005B078A 53 push rbx
+__text:00000001005B078B 48 81 EC A0 00 00 00 sub rsp, 0A0h
+__text:00000001005B0792 49 89 CE mov r14, rcx
+__text:00000001005B0795 49 89 D7 mov r15, rdx
+__text:00000001005B0798 49 89 F4 mov r12, rsi
+__text:00000001005B079B BF D0 0A 00 00 mov edi, 0AD0h ; unsigned __int64
+__text:00000001005B07A0 E8 D7 4E 23 00 call __Znwm ; operator new(ulong)
+__text:00000001005B07A5 48 89 C3 mov rbx, rax
+__text:00000001005B07A8 48 89 45 A0 mov [rbp+var_60], rax
+__text:00000001005B07AC 0F 28 05 DD 8F 38 00 movaps xmm0, cs:xmmword_100939790
+__text:00000001005B07B3 0F 29 45 90 movaps [rbp+var_70], xmm0
+__text:00000001005B07B7 48 8D 35 58 8F 31 00 lea rsi, aBeginCertifica ; "-----BEGIN CERTIFICATE-----\nMIIHzTCCBb"...
+__text:00000001005B07BE BA CC 0A 00 00 mov edx, 0ACCh ; __n
+__text:00000001005B07C3 48 89 C7 mov rdi, rax ; __dst
+__text:00000001005B07C6 E8 3D 53 23 00 call _memcpy
+__text:00000001005B07CB C6 83 CC 0A 00 00 00 mov byte ptr [rbx+0ACCh], 0
+__text:00000001005B07D2 48 8D BD 48 FF FF FF lea rdi, [rbp+var_B8]
+__text:00000001005B07D9 48 8D 75 90 lea rsi, [rbp+var_70]
+__text:00000001005B07DD E8 CE 07 00 00 call sub_1005B0FB0
+__text:00000001005B07E2 F6 45 90 01 test byte ptr [rbp+var_70], 1
+__text:00000001005B07E6 74 09 jz short loc_1005B07F1
+__text:00000001005B07E8 48 8B 7D A0 mov rdi, [rbp+var_60] ; void *
+__text:00000001005B07EC E8 61 4E 23 00 call __ZdlPv ; operator delete(void *)
+__text:00000001005B07F1
+```
+
+after
+
+```
+__text:00000001005B0780 sub_1005B0780 proc near ; DATA XREF: __const:00000001009B2A90↓o
+__text:00000001005B0780 6A 01 push 1
+__text:00000001005B0782 58 pop rax
+__text:00000001005B0783 C3 retn
+__text:00000001005B0783 sub_1005B0780 endp
+```
+
+arm64
+
+```
+__text:00000001005DE584 FF 03 03 D1 SUB SP, SP, #0xC0
+__text:00000001005DE588 F6 57 09 A9 STP X22, X21, [SP,#0xB0+var_20]
+__text:00000001005DE58C F4 4F 0A A9 STP X20, X19, [SP,#0xB0+var_10]
+__text:00000001005DE590 FD 7B 0B A9 STP X29, X30, [SP,#0xB0+var_s0]
+__text:00000001005DE594 FD C3 02 91 ADD X29, SP, #0xB0
+__text:00000001005DE598 F3 03 03 AA MOV X19, X3
+__text:00000001005DE59C F4 03 02 AA MOV X20, X2
+__text:00000001005DE5A0 F5 03 01 AA MOV X21, X1
+__text:00000001005DE5A4 00 5A 81 52 MOV W0, #0xAD0 ; unsigned __int64
+__text:00000001005DE5A8 70 C8 07 94 BL __Znwm ; operator new(ulong)
+__text:00000001005DE5AC F6 03 00 AA MOV X22, X0
+__text:00000001005DE5B0 E0 2B 00 F9 STR X0, [SP,#0xB0+var_60]
+__text:00000001005DE5B4 E8 10 00 B0 ADRP X8, #xmmword_1007FB2D0@PAGE
+__text:00000001005DE5B8 00 B5 C0 3D LDR Q0, [X8,#xmmword_1007FB2D0@PAGEOFF]
+__text:00000001005DE5BC E0 83 85 3C STUR Q0, [SP,#0xB0+var_58]
+__text:00000001005DE5C0 C1 18 00 F0 21 84 25 91 ADRL X1, aBeginCertifica ; "-----BEGIN CERTIFICATE-----\nMIIHzTCCBb"...
+__text:00000001005DE5C8 82 59 81 52 MOV W2, #0xACC ; __n
+__text:00000001005DE5CC A7 CA 07 94 BL _memcpy
+__text:00000001005DE5D0 DF 32 2B 39 STRB WZR, [X22,#0xACC]
+__text:00000001005DE5D4 A0 23 01 D1 SUB X0, X29, #-var_48
+__text:00000001005DE5D8 E1 43 01 91 ADD X1, SP, #0xB0+var_60
+__text:00000001005DE5DC 00 02 00 94 BL j___ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_ ; std::string::basic_string(std::string const&)
+__text:00000001005DE5E0 E8 9F C1 39 LDRSB W8, [SP,#0xB0+var_58+0xF]
+__text:00000001005DE5E4 68 00 F8 36 TBZ W8, #0x1F, loc_1005DE5F0
+__text:00000001005DE5E8 E0 2B 40 F9 LDR X0, [SP,#0xB0+var_60] ; void *
+__text:00000001005DE5EC 4A C8 07 94 BL __ZdlPv ; operator delete(void *)
+__text:00000001005DE5F0
+```
+
+after
+
+```
+__text:00000001005DE584 sub_1005DE584 ; DATA XREF: __const:0000000100988540↓o
+__text:00000001005DE584 20 00 80 D2 MOV X0, #1
+__text:00000001005DE588 C0 03 5F D6 RET
+__text:00000001005DE588 ; End of function sub_1005DE584
+```
diff --git a/deps/Dobby b/deps/Dobby
deleted file mode 160000
index 223aabc..0000000
--- a/deps/Dobby
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 223aabced0431525c7d45196f9409fc505d58ac8
diff --git a/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements b/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements
new file mode 100644
index 0000000..ba165b6
--- /dev/null
+++ b/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements
@@ -0,0 +1,33 @@
+
+
+
+
+
+ com.apple.security.automation.apple-events
+
+ com.apple.security.device.audio-input
+
+ com.apple.security.device.camera
+
+
+
diff --git a/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements b/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements
new file mode 100644
index 0000000..4838721
--- /dev/null
+++ b/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements
@@ -0,0 +1,14 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.virtualization
+
+
+
+
diff --git a/entitlements/ParallelsDesktop/ParallelsService.entitlements b/entitlements/ParallelsDesktop/ParallelsService.entitlements
new file mode 100644
index 0000000..7205e03
--- /dev/null
+++ b/entitlements/ParallelsDesktop/ParallelsService.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ com.apple.security.smartcard
+
+
+
diff --git a/entitlements/ParallelsDesktop/ParallelsVM.entitlements b/entitlements/ParallelsDesktop/ParallelsVM.entitlements
new file mode 100644
index 0000000..310f693
--- /dev/null
+++ b/entitlements/ParallelsDesktop/ParallelsVM.entitlements
@@ -0,0 +1,20 @@
+
+
+
+
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.hypervisor
+
+ com.apple.vm.device-access
+
+
+
diff --git a/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements b/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements
new file mode 100644
index 0000000..a1c430a
--- /dev/null
+++ b/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+
+
diff --git a/entitlements/ParallelsDesktop/gen.sh b/entitlements/ParallelsDesktop/gen.sh
new file mode 100644
index 0000000..9c8deaa
--- /dev/null
+++ b/entitlements/ParallelsDesktop/gen.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app/Contents/MacOS/Parallels Mac VM.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsMacVM.entitlements
+codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app/Contents/MacOS/Parallels Service.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsService.entitlements
+codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app/Contents/MacOS/Parallels VM 10.14.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsVM1014.entitlements
+codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app/Contents/MacOS/Parallels VM.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsVM.entitlements
+codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsDesktop.entitlements
diff --git a/entitlements/ParallelsDesktop/pd.provisionprofile b/entitlements/ParallelsDesktop/pd.provisionprofile
new file mode 100644
index 0000000..45bc1ba
Binary files /dev/null and b/entitlements/ParallelsDesktop/pd.provisionprofile differ
diff --git a/readme.md b/readme.md
index 9438a85..7960b41 100644
--- a/readme.md
+++ b/readme.md
@@ -1,10 +1,28 @@
# Parallels Desktop Crack
-Crack for Parallels Desktop 17.1.4 51567 & Toolbox 5.5.1 4410.
+Crack for Parallels Desktop.
-Only work for Intel macOS.
+[x] Support Intel & Apple Silicon (M1)
+[ ] Network problem
+[ ] USB problem
+
+
+# Network & USB problem
+
+Parallels Desktop new version use Apple's hypervisor framework vmnet API need a paid Developer ID and request to Apple enable vmnet access permission.
+
+So i don't know how to bypass it.
+
+Here have a temp solution:
+
+```
+killall -9 prl_client_app
+sudo sed -i '' 's|.*|0|' /Library/Preferences/Parallels/network.desktop.xml
+sudo sed -i '' 's|.*|1|' /Library/Preferences/Parallels/dispatcher.desktop.xml
+```
+
+After this, network will work, USB only work with storage device.
-I write some arm64 version patch code but i don't have arm64 macOS test, you can continue this work if you interested.
# Build
@@ -14,24 +32,22 @@ git submodule update --init --recursive
./scripts/build.bat
```
+
# Install & Test
```
sudo ./scripts/install.sh
```
+
# Publish DMG
```
+brew install create-dmg
./scripts/publish.sh
```
You can found packaged dmg file in `publish` folder.
-```
-ParallelsDesktop-17.1.4-51567_Crack.dmg
-ParallelsToolbox-5.5.1-4410_Crack.dmg
-```
-
Good Luck!
diff --git a/scripts/build.sh b/scripts/build.sh
index 40c093b..ddaab63 100644
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -19,7 +19,6 @@ cmake -S "${ROOT_PATH}" -B "${ROOT_PATH}/build" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="11.0" \
- -DLOGGING_DISABLE=1 \
&& \
-cmake --build "${ROOT_PATH}/build" --target Configurer64 -j8 \
+cmake --build "${ROOT_PATH}/build" --target UIWarp -j8 \
&& echo "[*] Build Success"
diff --git a/scripts/install.sh b/scripts/install.sh
index 0f423da..361a21c 100644
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -4,12 +4,17 @@ CUR_PATH=$(cd "$(dirname $(readlink -f "$0"))" && pwd)
ROOT_PATH=$(cd "${CUR_PATH}/../" && pwd)
PTFM_APP_DIR="/Applications/Parallels Toolbox.app"
PDFM_APP_DIR="/Applications/Parallels Desktop.app"
-CRACK_LIB="${ROOT_PATH}/build/libConfigurer64.dylib"
-# CODESIGN_CERT=B8474E27C322DFB3D4A0168127EB02DB877C3F81
+CRACK_LIB="${ROOT_PATH}/build/libUIWarp.dylib"
+CRACK_LIB_DST_NAME="libUIWarp"
+
CODESIGN_CERT=-
+if [ -n "$(security find-identity -v -p codesigning | grep B8474E27C322DFB3D4A0168127EB02DB877C3F81)" ]; then
+ CODESIGN_CERT=B8474E27C322DFB3D4A0168127EB02DB877C3F81
+fi
+
function sign_cmd() {
- codesign -f -s ${CODESIGN_CERT} --all-architectures --deep "$1"
+ codesign -f -s ${CODESIGN_CERT} -o runtime --all-architectures --deep "$@"
}
function kill_ptfm_app() {
@@ -27,8 +32,8 @@ function apply_ptfm_crack() {
/usr/local/opt/llvm/bin/llvm-strip -s "${CRACK_LIB}" > /dev/null
fi
- RPATH="@rpath/libConfigurer64.dylib"
- DST="${PTFM_APP_DIR}/Contents/Frameworks/libConfigurer64.dylib"
+ RPATH="@rpath/${CRACK_LIB_DST_NAME}.dylib"
+ DST="${PTFM_APP_DIR}/Contents/Frameworks/${CRACK_LIB_DST_NAME}.dylib"
LOADER="${PTFM_APP_DIR}/Contents/Frameworks/libLogging.dylib"
if ! grep -q "${RPATH}" "${LOADER}"; then
@@ -47,8 +52,8 @@ function apply_pdfm_crack() {
/usr/local/opt/llvm/bin/llvm-strip -s "${CRACK_LIB}" > /dev/null
fi
- RPATH="@rpath/libConfigurer64.dylib"
- DST="${PDFM_APP_DIR}/Contents/Frameworks/libConfigurer64.dylib"
+ RPATH="@rpath/${CRACK_LIB_DST_NAME}.dylib"
+ DST="${PDFM_APP_DIR}/Contents/Frameworks/${CRACK_LIB_DST_NAME}.dylib"
LOADER="${PDFM_APP_DIR}/Contents/Frameworks/QtXml.framework/Versions/5/QtXml"
if ! grep -q "${RPATH}" "${LOADER}"; then
@@ -121,14 +126,23 @@ function sign_ptfm() {
function sign_pdfm() {
echo "[*] Sign Parallels Desktop App"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Library/QuickLook/ExeQL.qlgenerator"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Library/QuickLook/ParallelsQL.qlgenerator"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Resources/launchd_wrapper"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Resources/libprl_shared_apps.dylib"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/ssl.so"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/mime/core.so"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/socket/core.so"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/socket/serial.so"
+ sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/socket/unix.so"
sign_cmd "${PDFM_APP_DIR}/Contents/Applications/Parallels Link.app"
sign_cmd "${PDFM_APP_DIR}/Contents/Applications/Parallels Mounter.app"
sign_cmd "${PDFM_APP_DIR}/Contents/Applications/Parallels Technical Data Reporter.app"
- sign_cmd "${PDFM_APP_DIR}/Contents/MacOS/Parallels Mac VM.app"
- sign_cmd "${PDFM_APP_DIR}/Contents/MacOS/Parallels Service.app"
- sign_cmd "${PDFM_APP_DIR}/Contents/MacOS/Parallels VM 10.14.app"
- sign_cmd "${PDFM_APP_DIR}/Contents/MacOS/Parallels VM.app"
- sign_cmd "${PDFM_APP_DIR}"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements" "${PDFM_APP_DIR}/Contents/MacOS/Parallels Mac VM.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsService.entitlements" "${PDFM_APP_DIR}/Contents/MacOS/Parallels Service.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements" "${PDFM_APP_DIR}/Contents/MacOS/Parallels VM 10.14.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsVM.entitlements" "${PDFM_APP_DIR}/Contents/MacOS/Parallels VM.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements" "${PDFM_APP_DIR}"
}
if [ -d "${PTFM_APP_DIR}" ]; then
diff --git a/scripts/publish.sh b/scripts/publish.sh
index 9828e4a..ead4074 100644
--- a/scripts/publish.sh
+++ b/scripts/publish.sh
@@ -6,13 +6,13 @@ TEMP_PATH="${ROOT_PATH}/tmp"
PUBLISH_PATH="${ROOT_PATH}/publish"
PTFM_VERSION="5.5.1-4410"
-PDFM_VERSION="17.1.4-51567"
+PDFM_VERSION="18.0.1-53056"
PTFM_SHA256SUM="412bddebac28e229c7973dad6d702c67d1b42195b99b009af26ef036f5631349"
-PDFM_SHA256SUM="8232f140e4c5b95821bf5063fb37db356f7bab520ddabbab4a73d08b5de0cd10"
+PDFM_SHA256SUM="8a021158b29b814f2942bb0afa5ca33fc6a87729578d1ad194e95a3f929b1e6f"
PTFM_DMG_DOWNLOAD_URL="https://download.parallels.com/toolbox/v5/${PTFM_VERSION}/ParallelsToolbox-${PTFM_VERSION}.dmg"
-PDFM_DMG_DOWNLOAD_URL="https://download.parallels.com/desktop/v17/${PDFM_VERSION}/ParallelsDesktop-${PDFM_VERSION}.dmg"
+PDFM_DMG_DOWNLOAD_URL="https://download.parallels.com/desktop/v18/${PDFM_VERSION}/ParallelsDesktop-${PDFM_VERSION}.dmg"
PTFM_DMG_FILE="${TEMP_PATH}/download/ParallelsToolbox-${PTFM_VERSION}.dmg"
PDFM_DMG_FILE="${TEMP_PATH}/download/ParallelsDesktop-${PDFM_VERSION}.dmg"
@@ -20,16 +20,20 @@ PDFM_DMG_FILE="${TEMP_PATH}/download/ParallelsDesktop-${PDFM_VERSION}.dmg"
PTFM_PUBLISH_FILE="${PUBLISH_PATH}/ParallelsToolbox-${PTFM_VERSION}_Crack.dmg"
PDFM_PUBLISH_FILE="${PUBLISH_PATH}/ParallelsDesktop-${PDFM_VERSION}_Crack.dmg"
-# CODESIGN_CERT=B8474E27C322DFB3D4A0168127EB02DB877C3F81
CODESIGN_CERT=-
-CRACK_LIB="${ROOT_PATH}/build/libConfigurer64.dylib"
+if [ -n "$(security find-identity -v -p codesigning | grep B8474E27C322DFB3D4A0168127EB02DB877C3F81)" ]; then
+ CODESIGN_CERT=B8474E27C322DFB3D4A0168127EB02DB877C3F81
+fi
+
+CRACK_LIB_DST_NAME="libUIWarp"
+CRACK_LIB="${ROOT_PATH}/build/${CRACK_LIB_DST_NAME}.dylib"
PTFM_TMP_DIR="${TEMP_PATH}/ptfm_files"
PDFM_TMP_DIR="${TEMP_PATH}/pdfm_files"
function sign_cmd() {
- codesign -f -s ${CODESIGN_CERT} --all-architectures --deep "$1"
+ codesign -f -s ${CODESIGN_CERT} -o runtime --all-architectures --deep "$@"
}
function ensure_download_ptfm_dmg() {
@@ -90,9 +94,9 @@ function copy_pdfm_files() {
mkdir -p "${PDFM_TMP_DIR}" > /dev/null
hdiutil attach -noverify -noautofsck -noautoopen "${PDFM_DMG_FILE}"
- cp -R -X "/Volumes/Parallels Desktop 17/Install.app" "${PDFM_TMP_DIR}/" > /dev/null
- cp -R -X "/Volumes/Parallels Desktop 17/Parallels Desktop.app" "${PDFM_TMP_DIR}/" > /dev/null
- hdiutil detach "/Volumes/Parallels Desktop 17"
+ cp -R -X "/Volumes/Parallels Desktop 18/Install.app" "${PDFM_TMP_DIR}/" > /dev/null
+ cp -R -X "/Volumes/Parallels Desktop 18/Parallels Desktop.app" "${PDFM_TMP_DIR}/" > /dev/null
+ hdiutil detach "/Volumes/Parallels Desktop 18"
rm -f "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/embedded.provisionprofile" > /dev/null
chflags -R 0 "${PDFM_TMP_DIR}" > /dev/null
@@ -106,8 +110,8 @@ function apply_ptfm_crack() {
/usr/local/opt/llvm/bin/llvm-strip -s "${CRACK_LIB}" > /dev/null
fi
- RPATH="@rpath/libConfigurer64.dylib"
- DST="${PTFM_TMP_DIR}/Install Parallels Toolbox.app/Contents/Frameworks/libConfigurer64.dylib"
+ RPATH="@rpath/${CRACK_LIB_DST_NAME}.dylib"
+ DST="${PTFM_TMP_DIR}/Install Parallels Toolbox.app/Contents/Frameworks/${CRACK_LIB_DST_NAME}.dylib"
LOADER="${PTFM_TMP_DIR}/Install Parallels Toolbox.app/Contents/Frameworks/libLogging.dylib"
"${CUR_PATH}/insert_dylib" --inplace --overwrite --no-strip-codesig --all-yes \
@@ -123,14 +127,22 @@ function apply_pdfm_crack() {
/usr/local/opt/llvm/bin/llvm-strip -s "${CRACK_LIB}" > /dev/null
fi
- RPATH="@rpath/libConfigurer64.dylib"
- DST="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Frameworks/libConfigurer64.dylib"
+ RPATH="@rpath/${CRACK_LIB_DST_NAME}.dylib"
+ DST="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Frameworks/${CRACK_LIB_DST_NAME}.dylib"
LOADER="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Frameworks/QtXml.framework/Versions/5/QtXml"
"${CUR_PATH}/insert_dylib" --inplace --overwrite --no-strip-codesig --all-yes \
"${RPATH}" "${LOADER}" > /dev/null
cp -f -X "${CRACK_LIB}" "${DST}" > /dev/null
+
+ SRC="${ROOT_PATH}/crack/pdfm-18.0.1.53056/prl_client_app"
+ DST="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/prl_client_app"
+ cp -f -X "${SRC}" "${DST}" > /dev/null
+
+ SRC="${ROOT_PATH}/crack/pdfm-18.0.1.53056/prl_disp_service"
+ DST="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Service.app/Contents/MacOS/prl_disp_service"
+ cp -f -X "${SRC}" "${DST}" > /dev/null
}
function sign_ptfm() {
@@ -195,15 +207,23 @@ function sign_ptfm() {
function sign_pdfm() {
echo "[*] Sign Parallels Desktop App"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Library/QuickLook/ExeQL.qlgenerator"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Library/QuickLook/ParallelsQL.qlgenerator"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/launchd_wrapper"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/libprl_shared_apps.dylib"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/ssl.so"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/mime/core.so"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/socket/core.so"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/socket/serial.so"
+ sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/socket/unix.so"
sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Applications/Parallels Link.app"
sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Applications/Parallels Mounter.app"
sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Applications/Parallels Technical Data Reporter.app"
- sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Mac VM.app"
- sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Service.app"
- sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels VM 10.14.app"
- sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels VM.app"
- sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app"
- sign_cmd "${PDFM_TMP_DIR}/Install.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Mac VM.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsService.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Service.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels VM 10.14.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsVM.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels VM.app"
+ sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app"
}
function set_pdfm_app_hide() {
@@ -240,7 +260,7 @@ function create_pdfm_dmg() {
fi
create-dmg \
- --volname "Parallels Desktop 17" \
+ --volname "Parallels Desktop 18" \
--volicon "${ROOT_PATH}/assets/PDFM.VolumeIcon.icns" \
--background "${ROOT_PATH}/assets/PDFM.background.png" \
--window-pos 0 0 \
@@ -269,5 +289,5 @@ function publish_pdfm_crack_dmg() {
create_pdfm_dmg
}
-publish_ptfm_crack_dmg
+# publish_ptfm_crack_dmg
publish_pdfm_crack_dmg
diff --git a/src/main.cpp b/src/main.cpp
index 3adf925..80ecc9b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -26,9 +26,6 @@
#include
#include
-#define LOGGING_DISABLE
-#include
-
#define JM_XORSTR_DISABLE_AVX_INTRINSICS
#include "xorstr.hpp"
@@ -46,35 +43,6 @@ objc_msgSend(id _Nullable self, SEL _Nonnull op, ...)
#error unsupported arch
#endif
-#if !defined(TARGET_ARCH_X64)
-__attribute__((constructor))
-void func_load() {
- const char* header = "Error";
- const char* message = "This crack version only support intel CPU!";
- CFStringRef header_ref = CFStringCreateWithCString(NULL, header, strlen(header));
- CFStringRef message_ref = CFStringCreateWithCString(NULL,message,strlen(message));
-
- CFOptionFlags result;
- CFUserNotificationDisplayAlert(
- 0, //timeout
- kCFUserNotificationNoDefaultButtonFlag, //flags
- NULL, //iconURL
- NULL, // soundURL
- NULL, // localizationURL
- header_ref, // alertHeader
- message_ref, // alertMessage
- NULL, // defaultButtonTitle just "ok"
- NULL, // alternateButtonTitle
- NULL, // otherButtonTitle
- &result // responseFlags
- );
- exit(0);
-}
-#endif
-
-
-#ifdef TARGET_ARCH_X64
-
// #define ENABLE_DLOG 1
#if defined(ENABLE_DLOG)
@@ -83,70 +51,8 @@ void func_load() {
#define dlog(format, ...)
#endif
-
-#ifdef TARGET_ARCH_X64
-#define OPCODE_RETURN_0 { 0x48, 0x31, 0xC0, 0xC3 }
-#define OPCODE_RETURN_1 { 0x6A, 0x01, 0x58, 0xC3 }
-#endif
-
-#ifdef TARGET_ARCH_ARM64
-#define OPCODE_RETURN_0 { 0x00, 0x00, 0x80, 0xd2, 0xc0, 0x03, 0x5f, 0xd6 }
-#define OPCODE_RETURN_1 { 0x20, 0x00, 0x80, 0xd2, 0xc0, 0x03, 0x5f, 0xd6 }
-#endif
-
-
id vars_g_static_class = nullptr;
-typedef uint64_t (*type_AppDelegate_checkForUpdates_t)(uint64_t, uint64_t, int);
-type_AppDelegate_checkForUpdates_t vars_g_old_AppDelegate_checkForUpdates;
-
-uint64_t func_hook_AppDelegate_checkForUpdates(uint64_t a1, uint64_t a2, int a3)
-{
- if (a3 == 1)
- return vars_g_old_AppDelegate_checkForUpdates(a1, a2, 1LL);
- return 0;
-}
-
-int func_return_0() {
- return 0;
-}
-
-int func_return_1() {
- return 1;
-}
-
-typedef void (*type_objc_void_bool_t)(void*, void*, bool);
-
-type_objc_void_bool_t vars_g_CEPLog_setCEPDisabled;
-
-void func_hook_CEPLog_setCEPDisabled(void* a1, void* a2, bool disbale)
-{
- if (!disbale)
- {
- dlog("[*] hook [CEPLog setCEPDisabled: true] hook to false");
- }
- else
- {
- dlog("[*] hook [CEPLog setCEPDisabled: false]");
- }
- vars_g_CEPLog_setCEPDisabled(a1, a2, 1);
-}
-
-type_objc_void_bool_t vars_g_CEPLog_setCEPSentAfterDisabling;
-
-void func_hook_CEPLog_setCEPSentAfterDisabling(void* a1, void* a2, bool disable)
-{
- if (!disable)
- {
- dlog("[*] enter [CEPLog setCEPSentAfterDisabling: true] hook to false");
- }
- else
- {
- dlog("[*] enter [CEPLog setCEPSentAfterDisabling: false]");
- }
- vars_g_CEPLog_setCEPSentAfterDisabling(a1, a2, 1);
-}
-
bool str_ends_with(const char* a1, const char* a2) {
auto a1_len = strlen(a1);
auto a2_len = strlen(a2);
@@ -154,1181 +60,64 @@ bool str_ends_with(const char* a1, const char* a2) {
return 0 == strcmp(a1 + a1_len - a2_len, a2);
}
-IMP func_getObjcMethod(const char *className, const char *methodName)
-{
- auto c = objc_getClass(className);
- auto s = sel_registerName(methodName);
- auto m = class_getInstanceMethod(c, s);
- return method_getImplementation(m);
-}
-
-void func_patch_objc(const char* className, const char* methodName, void *replace, int replace_size)
-{
- auto addr = (void *)func_getObjcMethod(className, methodName);
- if (!addr)
- {
- dlog("[-] can not found [%s %s].", className, methodName)
- return;
- }
- if (kMemoryOperationSuccess == CodePatch(addr, (uint8_t*)replace, replace_size))
- {
- dlog("[+] patch success [%s %s].", className, methodName)
- }
- else
- {
- dlog("[-] patch fail [%s %s].", className, methodName)
- }
-}
-
-void func_hook_objc(const char* className, const char* methodName, void* replace, void** original)
-{
- auto addr = (void *)func_getObjcMethod(className, methodName);
- if (!addr)
- {
- dlog("[-] can not found [%s %s].", className, methodName)
- return;
- }
- if (RS_SUCCESS == DobbyHook(addr, replace, original))
- {
- dlog("[+] patch success [%s %s].", className, methodName)
- }
- else
- {
- dlog("[-] patch fail [%s %s].", className, methodName)
- }
-}
-
-bool func_patch_data(void* addr, void *replace, int replace_size)
-{
- auto ret = CodePatch(addr, (uint8_t*)replace, replace_size);
- return kMemoryOperationSuccess == ret;
-}
-
-bool func_check_version(const char *func_check_version)
-{
- // @autoreleasepool {
- // NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
- // return 0 == strcmp([version UTF8String], func_check_version);
- // }
-
- auto cls_NSBundle = (id)objc_getClass(xorstr_("NSBundle"));
- if (!cls_NSBundle) {
- dlog("[-] get NSBundle fail");
- return false;
- }
- auto sel_mainBundle = sel_registerName(xorstr_("mainBundle"));
- auto mainBundle = (id)objc_msgSend(cls_NSBundle, sel_mainBundle);
- if (!mainBundle) {
- dlog("[-] get mainBundle fail");
- return false;
- }
- auto cls_NSString = (id)objc_getClass(xorstr_("NSString"));
- auto sel_stringWithUTF8String = sel_registerName(xorstr_("stringWithUTF8String:"));
- auto cls_kCFBundleVersionKey = (id)objc_msgSend(cls_NSString, sel_stringWithUTF8String, xorstr_("CFBundleVersion"));
- auto sel_objectForInfoDictionaryKey = sel_registerName(xorstr_("objectForInfoDictionaryKey:"));
- auto build_nsstring = objc_msgSend(mainBundle, sel_objectForInfoDictionaryKey, cls_kCFBundleVersionKey);
- if (!build_nsstring) {
- dlog("[-] get build_nsstring fail");
- return false;
- }
- auto sel_UTF8String = sel_registerName(xorstr_("UTF8String"));
- char* pCFBundleVersion = (char*)objc_msgSend(build_nsstring, sel_UTF8String);
- dlog("[*] version: %s", pCFBundleVersion);
- return 0 == strcmp(pCFBundleVersion, func_check_version);
-}
-
-void func_patch_libprl_shared_apps_dylib(char* image_base)
-{
- if (image_base)
- {
- #ifdef TARGET_ARCH_X64
- {
- // __text:000000000002ADA0 55 push rbp ; <--- patch return 0;
- // __text:000000000002ADA1 48 89 E5 mov rbp, rsp
- // __text:000000000002ADA4 41 57 push r15
- // __text:000000000002ADA6 41 56 push r14
- // __text:000000000002ADA8 41 55 push r13
- // __text:000000000002ADAA 41 54 push r12
- // __text:000000000002ADAC 53 push rbx
- // __text:000000000002ADAD 48 81 EC D8 05 00 00 sub rsp, 5D8h
- // __text:000000000002ADB4 48 8B 05 75 54 09 00 mov rax, cs:___stack_chk_guard_ptr
- // __text:000000000002ADBB 48 8B 00 mov rax, [rax]
- // __text:000000000002ADBE 48 89 45 D0 mov [rbp+var_30], rax
- // __text:000000000002ADC2 E8 79 06 00 00 call sub_2B440
- // __text:000000000002ADC7 E8 B4 99 03 00 call sub_64780
- // __text:000000000002ADCC 85 C0 test eax, eax
- // __text:000000000002ADCE 0F 84 AA 04 00 00 jz loc_2B27E
- // __text:000000000002ADD4 C7 85 28 FA FF FF 90 01 00 00 mov [rbp+var_5D8], 190h
- // __text:000000000002ADDE C7 85 2C FA FF FF E8 03 00 00 mov [rbp+var_5D4], 3E8h
- // __text:000000000002ADE8 4C 8D 35 89 58 0A 00 lea r14, qword_D0678
- // __text:000000000002ADEF 4C 8D BD 40 FE FF FF lea r15, [rbp+var_1C0]
- // __text:000000000002ADF6 4C 8D 85 28 FA FF FF lea r8, [rbp+var_5D8]
- // __text:000000000002ADFD BF 79 10 01 80 mov edi, 80011079h
- // __text:000000000002AE02 BE 01 00 00 00 mov esi, 1
- // __text:000000000002AE07 BA 01 00 00 00 mov edx, 1
- // __text:000000000002AE0C 4C 89 F9 mov rcx, r15
- // __text:000000000002AE0F 41 FF 16 call qword ptr [r14]
- // __text:000000000002AE12 48 8D 9D 50 FA FF FF lea rbx, [rbp+var_5B0]
- // __text:000000000002AE19 4C 8D 85 2C FA FF FF lea r8, [rbp+var_5D4]
- // __text:000000000002AE20 BF 79 10 01 80 mov edi, 80011079h
- // __text:000000000002AE25 31 F6 xor esi, esi
- // __text:000000000002AE27 BA 01 00 00 00 mov edx, 1
- // __text:000000000002AE2C 48 89 D9 mov rcx, rbx
- // __text:000000000002AE2F 41 FF 16 call qword ptr [r14]
- // __text:000000000002AE32 48 8B 3D 3F 2A 0A 00 mov rdi, cs:classRef_NSString ; id
- // __text:000000000002AE39 4C 8B 35 78 15 0A 00 mov r14, cs:selRef_stringWithUTF8String_
- // __text:000000000002AE40 4C 8B 2D 41 54 09 00 mov r13, cs:_objc_msgSend_ptr
- // __text:000000000002AE47 4C 89 F6 mov rsi, r14 ; SEL
- // __text:000000000002AE4A 48 89 DA mov rdx, rbx
-
- uint8_t replace[] = OPCODE_RETURN_1;
- if (func_patch_data(image_base + 0x2ada0, replace, sizeof(replace)))
- {
- dlog("[+] patch libprl_shared_apps.dylib 1 success.");
- }
- else
- {
- dlog("[-] patch libprl_shared_apps.dylib 1 fail.");
- }
- }
- #endif
- #ifdef TARGET_ARCH_ARM64
- {
- uint8_t replace[] = OPCODE_RETURN_1;
- if (func_patch_data(image_base + 0x29308, replace, sizeof(replace)))
- {
- dlog("[+] patch libprl_shared_apps.dylib 1 success.");
- }
- else
- {
- dlog("[-] patch libprl_shared_apps.dylib 1 fail.");
- }
- }
- #endif
- }
-
-}
-
-int hook_PrlSrv_HasRestriction(
- void* hServer,
- int nRestrictionKey,
- uint32_t* pbHasRestriction) {
- if (*pbHasRestriction) {
- *pbHasRestriction = 1;
- return 1;
- }
- return 0;
-}
-
-int hook_PrlLic_IsValid(
- void* hLicense,
- uint32_t* pbValue) {
- if (*pbValue) {
- *pbValue = 1;
- return 1;
- }
- return 0;
-}
-
-int hook_PrlLic_GetUserName(
- void* hLicense,
- char* sUserName,
- uint32_t* pnUserNameBufLength) {
- if (pnUserNameBufLength) {
- if (!sUserName) {
- *pnUserNameBufLength = 4;
- return 6;
- }
- if (*pnUserNameBufLength >= 4) {
- strcpy(sUserName, "Day");
- return 0;
- }
- }
- return 3;
-}
-
-void func_patch_ParallelsVirtualizationSDK(char* image_base, int i)
-{
- if (image_base)
- {
- char* image_name = (char*)_dyld_get_image_name(i);
- // if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_IsFeatureSupported"), (void*)hook_PrlSrv_IsFeatureSupported, nullptr)) {
- // dlog("[+] hook PrlSrv_IsFeatureSupported success");
- // } else {
- // dlog("[+] hook PrlSrv_IsFeatureSupported fail");
- // }
- // if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrvCfg_IsUsbSupported"), (void*)func_return_1, nullptr)) {
- // dlog("[+] hook PrlSrvCfg_IsUsbSupported success");
- // } else {
- // dlog("[+] hook PrlSrvCfg_IsUsbSupported fail");
- // }
- // if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrvCfg_IsVtdSupported"), (void*)func_return_1, nullptr)) {
- // dlog("[+] hook PrlSrvCfg_IsVtdSupported success");
- // } else {
- // dlog("[+] hook PrlSrvCfg_IsVtdSupported fail");
- // }
- if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_HasRestriction"), (void*)hook_PrlSrv_HasRestriction, nullptr)) {
- dlog("[+] hook PrlSrv_HasRestriction success");
- } else {
- dlog("[+] hook PrlSrv_HasRestriction fail");
- }
- if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_SendProblemReport "), (void*)func_return_0, nullptr)) {
- dlog("[+] hook PrlSrv_SendProblemReport success");
- } else {
- dlog("[+] hook PrlSrv_SendProblemReport fail");
- }
- if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_GetProblemReport"), (void*)func_return_0, nullptr)) {
- dlog("[+] hook PrlSrv_GetProblemReport success");
- } else {
- dlog("[+] hook PrlSrv_GetProblemReport fail");
- }
- if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_GetPackedProblemReport"), (void*)func_return_0, nullptr)) {
- dlog("[+] hook PrlSrv_GetPackedProblemReport success");
- } else {
- dlog("[+] hook PrlSrv_GetPackedProblemReport fail");
- }
- if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlReport_Send"), (void*)func_return_0, nullptr)) {
- dlog("[+] hook PrlReport_Send success");
- } else {
- dlog("[+] hook PrlReport_Send fail");
- }
- if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlLic_GetUserName"), (void*)hook_PrlLic_GetUserName, nullptr)) {
- dlog("[+] hook PrlLic_GetUserName success");
- } else {
- dlog("[+] hook PrlLic_GetUserName fail");
- }
- if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlLic_GetCompanyName"), (void*)hook_PrlLic_GetUserName, nullptr)) {
- dlog("[+] hook PrlLic_GetCompanyName success");
- } else {
- dlog("[+] hook PrlLic_GetCompanyName fail");
- }
-
- }
-}
-
-void func_patch_dylibs()
-{
- for (int i = 0; i < _dyld_image_count(); ++i)
- {
- const char *name = _dyld_get_image_name(i);
-
- if (str_ends_with(name, xorstr_("libprl_shared_apps.dylib")))
- {
- dlog("[*] patch %s start.", name);
- func_patch_libprl_shared_apps_dylib((char*)_dyld_get_image_header(i));
- dlog("[*] patch %s over.", name);
- }
- else if (str_ends_with(name, xorstr_("ParallelsVirtualizationSDK")))
- {
- dlog("[*] patch %s start.", name);
- func_patch_ParallelsVirtualizationSDK((char*)_dyld_get_image_header(i), i);
- dlog("[*] patch %s over.", name);
- }
- else if (str_ends_with(name, xorstr_("LicenseServices")))
- {
- dlog("[*] patch %s start.", name);
- uint8_t replace0[] = OPCODE_RETURN_0;
- uint8_t replace1[] = OPCODE_RETURN_1;
- func_patch_objc(xorstr_("LocalPdInfo"), xorstr_("isLicenseValid"), replace1, sizeof(replace1));
- func_patch_objc(xorstr_("LocalPdInfo"), xorstr_("isBusinessEdition"), replace1, sizeof(replace1));
- func_patch_objc(xorstr_("LICLicenseInfo"), xorstr_("isBusiness"), replace1, sizeof(replace1));
- func_patch_objc(xorstr_("LICLicenseInfo"), xorstr_("rawStatus"), replace0, sizeof(replace0));
- func_patch_objc(xorstr_("LICLicenseInfo"), xorstr_("toolset"), replace1, sizeof(replace1));
- func_patch_objc(xorstr_("LocalPdInfo"), xorstr_("reinit"), replace0, sizeof(replace0));
-
- // func_hook_objc(xorstr_("LocalPdInfo"), xorstr_("isLicenseValid"), (void *)func_return_1, nullptr);
- // func_hook_objc(xorstr_("LocalPdInfo"), xorstr_("isBusinessEdition"), (void *)func_return_1, nullptr);
- // func_hook_objc(xorstr_("LICLicenseInfo"), xorstr_("isBusiness"), (void *)func_return_1, nullptr);
- // func_hook_objc(xorstr_("LICLicenseInfo"), xorstr_("rawStatus"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("LICLicenseInfo"), xorstr_("toolset"), (void *)func_return_1, nullptr);
- // func_hook_objc(xorstr_("LocalPdInfo"), xorstr_("reinit"), (void *)func_return_0, nullptr);
- dlog("[*] patch %s over.", name);
- }
- else if (str_ends_with(name, xorstr_("LicenseViews")))
- {
- dlog("[*] patch %s start.", name);
- uint8_t replace0[] = OPCODE_RETURN_0;
- func_patch_objc(xorstr_("GeoIPLocator"), xorstr_("locate:"), replace0, sizeof(replace0));
- // func_hook_objc(xorstr_("GeoIPLocator"), xorstr_("locate:"), (void *)func_return_0, nullptr);
- dlog("[*] patch %s over.", name);
- }
- else if (str_ends_with(name, xorstr_("ToolboxCommon")))
- {
- dlog("[*] patch %s start.", name);
- uint8_t replace0[] = OPCODE_RETURN_0;
- uint8_t replace1[] = OPCODE_RETURN_1;
- func_patch_objc(xorstr_("LocalPdInfo"), xorstr_("sendCEP"), replace0, sizeof(replace0));
- func_hook_objc(xorstr_("CEPLog"), xorstr_("setCEPDisabled:"), (void *)func_hook_CEPLog_setCEPDisabled, (void**)&vars_g_CEPLog_setCEPDisabled);
- func_hook_objc(xorstr_("CEPLog"), xorstr_("setCEPSentAfterDisabling:"), (void *)func_hook_CEPLog_setCEPSentAfterDisabling, (void**)&vars_g_CEPLog_setCEPSentAfterDisabling);
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isTrial"), replace0, sizeof(replace0));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isBonus"), replace0, sizeof(replace0));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isReferralBonus"), replace0, sizeof(replace0));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isPDSubscription"), replace0, sizeof(replace0));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isBusiness"), replace1, sizeof(replace1));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLocalPDBusiness"), replace0, sizeof(replace0));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLocalPD"), replace0, sizeof(replace0));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isAutoRenewable"), replace0, sizeof(replace0));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLicenseExpired"), replace0, sizeof(replace0));
- // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isNoLicensePresented"), replace1, sizeof(replace1));
-
- // func_hook_objc(xorstr_("CEPLog"), xorstr_("sendCEP"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLog"), xorstr_("setCEPDisabled:"), (void *)func_hook_CEPLog_setCEPDisabled, (void**)&vars_g_CEPLog_setCEPDisabled);
- // func_hook_objc(xorstr_("CEPLog"), xorstr_("setCEPSentAfterDisabling:"), (void *)func_hook_CEPLog_setCEPSentAfterDisabling, (void**)&vars_g_CEPLog_setCEPSentAfterDisabling);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isTrial"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isBonus"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isReferralBonus"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isPDSubscription"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isBusiness"), (void *)func_return_1, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLocalPDBusiness"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLocalPD"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isAutoRenewable"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLicenseExpired"), (void *)func_return_0, nullptr);
- // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isNoLicensePresented"), (void *)func_return_1, nullptr);
- // func_hook_objc("CEPLicenseInfo", "expirationDate", (void *)func_return_0, nullptr);
- dlog("[*] patch %s over.", name);
- }
- }
-}
-
-void func_patch_Parallels_Toolbox()
-{
- if (!func_check_version(xorstr_("4410")))
- {
- dlog("[-] unsupport version.");
- exit(0);
- }
-
- uint8_t replace[] = OPCODE_RETURN_1;
- func_hook_objc(xorstr_("ReportCollectorWithUI"), xorstr_("sendReport:parent:"), (void *)func_return_0, nullptr);
- func_hook_objc(xorstr_("ReportCollector"), xorstr_("grabScreenshots"), (void *)func_return_0, nullptr);
- func_hook_objc(xorstr_("ReportContactInfoWindowController"), xorstr_("onSendPress:"), (void *)func_return_0, nullptr);
-}
-
-void func_patch_prl_vm_app()
-{
- auto image_base = (char*)_dyld_get_image_header(0);
- if (image_base)
- {
- #ifdef TARGET_ARCH_X64
- {
- // __text:000000010000CD70 E8 8B 9C 9A 00 call sub_1009B6A00
- // __text:000000010000CD75 45 84 E4 test r12b, r12b
- // __text:000000010000CD78 74 5B jz short loc_10000CDD5 ; <--- patch
- // __text:000000010000CD7A 48 8D 05 EF FA 03 01 lea rax, qword_10104C870
- // __text:000000010000CD81 48 8B 18 mov rbx, [rax]
- // __text:000000010000CD84 0F 57 C0 xorps xmm0, xmm0
- // __text:000000010000CD87 0F 29 45 A0 movaps xmmword ptr [rbp+var_60], xmm0
- // __text:000000010000CD8B 48 C7 45 B0 00 00 00 00 mov [rbp+var_50], 0
- // __text:000000010000CD93 48 8D BD 78 FF FF FF lea rdi, [rbp+var_88]
- // __text:000000010000CD9A E8 31 B3 03 00 call sub_1000480D0
- // __text:000000010000CD9F 48 8D 55 A0 lea rdx, [rbp+var_60]
- // __text:000000010000CDA3 48 8D 8D 78 FF FF FF lea rcx, [rbp+var_88]
- // __text:000000010000CDAA 48 89 DF mov rdi, rbx
- // __text:000000010000CDAD BE 79 10 01 80 mov esi, 80011079h ; <--- find
-
- uint8_t replace[] = { 0xEB };
- if (func_patch_data(image_base + 0xCD78, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_vm_app 1 success.");
- }
- else
- {
- dlog("[-] patch prl_vm_app 1 fail.");
- }
- }
- // patch dlopen bGliQ29uZmlndXJlcjY0LmR5bGli -> libConfigurer64.dylib
- {
- uint8_t replace[] = OPCODE_RETURN_0;
- if (func_patch_data(image_base + 0x12780, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_vm_app 2 success.");
- }
- else
- {
- dlog("[-] patch prl_vm_app 2 fail.");
- }
- }
- #endif
-
- #ifdef TARGET_ARCH_ARM64
- {
- // __text:000000010000E2C8 6B 66 22 94 BL sub_1008A7C74
- // __text:000000010000E2CC 97 02 00 34 CBZ W23, loc_10000E31C ; <--- patch
- // __text:000000010000E2D0 08 65 00 D0 ADRP X8, #qword_100CB0020@PAGE
- // __text:000000010000E2D4 1F 20 03 D5 NOP
- // __text:000000010000E2D8 15 11 40 F9 LDR X21, [X8,#qword_100CB0020@PAGEOFF]
- // __text:000000010000E2DC FF 7F 03 A9 STP XZR, XZR, [SP,#0x90+var_60]
- // __text:000000010000E2E0 FF 23 00 F9 STR XZR, [SP,#0x90+var_50]
- // __text:000000010000E2E4 E0 03 00 91 MOV X0, SP
- // __text:000000010000E2E8 06 EE 00 94 BL sub_100049B00
- // __text:000000010000E2EC E2 C3 00 91 ADD X2, SP, #0x90+var_60
- // __text:000000010000E2F0 E3 03 00 91 MOV X3, SP
- // __text:000000010000E2F4 E0 03 15 AA MOV X0, X21
- // __text:000000010000E2F8 21 0F 82 52 21 00 B0 72 MOV W1, #0x80011079 ; <--- find
- uint8_t replace[] = {0x14, 0x00, 0x00, 0x14};
- if (func_patch_data(image_base + 0xE2CC, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_vm_app 1 success.");
- }
- else
- {
- dlog("[-] patch prl_vm_app 1 fail.");
- }
- }
- // patch dlopen bGliQ29uZmlndXJlcjY0LmR5bGli -> libConfigurer64.dylib
- {
- uint8_t replace[] = OPCODE_RETURN_0;
- if (func_patch_data(image_base + 0x14014, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_vm_app 2 success.");
- }
- else
- {
- dlog("[-] patch prl_vm_app 2 fail.");
- }
- }
- #endif
- }
-}
-
void func_write_fake_license()
{
- unsigned char fake_license_data[11699] = {
+ unsigned char fake_license_data[829] = {
0xA1, 0xD0, 0xFA, 0xFA, 0xFA, 0xFA, 0xF8, 0xB6, 0xB3, 0xB9, 0xBF, 0xB4, 0xA9, 0xBF, 0xF8, 0xE0,
- 0xFA, 0xF8, 0xA1, 0x86, 0xF8, 0xB4, 0xBB, 0xB7, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x8A,
- 0xA8, 0xB6, 0x8A, 0xA8, 0xB5, 0xEB, 0xED, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xAF, 0xAF, 0xB3,
- 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB6, 0xB3, 0xB9,
- 0x85, 0xB1, 0xBF, 0xA3, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8,
- 0xAA, 0xA8, 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x85, 0xAC, 0xBF, 0xA8, 0xA9, 0xB3, 0xB5, 0xB4, 0x86,
- 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xEB, 0xED, 0xF4, 0xF0, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB3,
- 0xA9, 0x85, 0xAF, 0xAA, 0xBD, 0xA8, 0xBB, 0xBE, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6,
- 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xA9, 0xAF, 0xB8, 0xB6, 0xB3, 0xB9, 0xBF,
- 0xB4, 0xA9, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8,
- 0xAA, 0xBB, 0xA8, 0xBF, 0xB4, 0xAE, 0x85, 0xB1, 0xBF, 0xA3, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF,
- 0xB6, 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xBB, 0xA8, 0xBF, 0xB4, 0xAE, 0x85, 0xAF, 0xAF, 0xB3,
- 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, 0xB6, 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xB7, 0xBB, 0xB3,
- 0xB4, 0x85, 0xAA, 0xBF, 0xA8, 0xB3, 0xB5, 0xBE, 0x85, 0xBF, 0xB4, 0xBE, 0xA9, 0x85, 0xBB, 0xAE,
- 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xE8, 0xEA, 0xEE, 0xEF, 0xF7, 0xEA, 0xEF, 0xF7, 0xEA, 0xE3,
- 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xBD,
- 0xA8, 0xBB, 0xB9, 0xBF, 0x85, 0xAA, 0xBF, 0xA8, 0xB3, 0xB5, 0xBE, 0x85, 0xBF, 0xB4, 0xBE, 0xA9,
- 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xE8, 0xEA, 0xEE, 0xEF, 0xF7, 0xEA, 0xEF,
- 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xF6, 0xFA,
- 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBB, 0xAF, 0xAE, 0xB5, 0x85, 0xA8, 0xBF, 0xB4, 0xBF, 0xAD, 0xBB,
- 0xB8, 0xB6, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8,
- 0xB3, 0xA9, 0x85, 0xB4, 0xBC, 0xA8, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6,
- 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xB8, 0xBF, 0xAE, 0xBB, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB,
- 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xB9, 0xB2, 0xB3, 0xB4, 0xBB, 0x86,
- 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xA9,
- 0xAF, 0xA9, 0xAA, 0xBF, 0xB4, 0xBE, 0xBF, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9,
- 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBF, 0xA2, 0xAA, 0xB3, 0xA8, 0xBF, 0xBE, 0x86,
- 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBD,
- 0xA8, 0xBB, 0xB9, 0xBF, 0x85, 0xAA, 0xBF, 0xA8, 0xB3, 0xB5, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xBC,
- 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xAA, 0xAF, 0xA8, 0xB9, 0xB2,
- 0xBB, 0xA9, 0xBF, 0xBE, 0x85, 0xB5, 0xB4, 0xB6, 0xB3, 0xB4, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC,
- 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0,
- 0xFA, 0xEB, 0xEA, 0xF6, 0xFA, 0x86, 0xF8, 0xAF, 0xA9, 0xBB, 0xBD, 0xBF, 0x86, 0xF8, 0xE0, 0xFA,
- 0xEB, 0xF6, 0xFA, 0x86, 0xF8, 0xBF, 0xBE, 0xB3, 0xAE, 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA,
- 0xE8, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xB6, 0xBB, 0xAE, 0xBC, 0xB5, 0xA8, 0xB7, 0x86, 0xF8, 0xE0,
- 0xFA, 0xE9, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x86, 0xF8, 0xE0,
- 0xFA, 0xED, 0xF6, 0xFA, 0x86, 0xF8, 0xB5, 0xBC, 0xBC, 0xB6, 0xB3, 0xB4, 0xBF, 0x86, 0xF8, 0xE0,
- 0xFA, 0xAE, 0xA8, 0xAF, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB9, 0xAA, 0xAF, 0x85, 0xB6, 0xB3, 0xB7,
- 0xB3, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xE9, 0xE8, 0xF6, 0xFA, 0x86, 0xF8, 0xA8, 0xBB, 0xB7, 0x85,
- 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xEB, 0xE9, 0xEB, 0xEA, 0xED, 0xE8, 0xF6,
- 0xFA, 0x86, 0xF8, 0xB2, 0xB5, 0xA9, 0xAE, 0xA9, 0x86, 0xF8, 0xE0, 0xFA, 0x81, 0xA1, 0x86, 0xF8,
- 0xB4, 0xBB, 0xB7, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x9D, 0x9E, 0x8A, 0x88, 0x85, 0x92,
- 0x93, 0x9E, 0x9E, 0x9F, 0x94, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB2, 0xAD, 0x85, 0xB3, 0xBE,
- 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, 0xB5, 0xBE,
- 0xAF, 0xB9, 0xAE, 0x85, 0xAC, 0xBF, 0xA8, 0xA9, 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, 0x86,
- 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xBB, 0xB9, 0xAE, 0xB3, 0xAC, 0xBB, 0xAE, 0xBF, 0xBE,
- 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xE8, 0xEA, 0xE8, 0xEB, 0xF7, 0xEA, 0xEF,
- 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xA7, 0x87,
- 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xAE, 0xA8, 0xB3, 0xBB, 0xB6, 0x86, 0xF8, 0xE0, 0xFA,
- 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xA7, 0xF8, 0xF6, 0xD0, 0xFA, 0xFA, 0xFA, 0xFA, 0xF8, 0xAA, 0xAF,
- 0xB8, 0xB6, 0xB3, 0xB9, 0x99, 0xBF, 0xA8, 0xAE, 0xA9, 0xF8, 0xE0, 0xFA, 0xF8, 0xF7, 0xF7, 0xF7,
- 0xF7, 0xF7, 0x98, 0x9F, 0x9D, 0x93, 0x94, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, 0x93, 0x99,
- 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0x97, 0x93, 0x93, 0x9D, 0xAA, 0x9E,
- 0x99, 0x99, 0x98, 0x93, 0xA3, 0xBD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0xBD, 0x93, 0x99, 0x9F, 0x9B,
- 0x9B, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B,
- 0x9F, 0x96, 0x98, 0x8B, 0x9B, 0xAD, 0xBE, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB,
- 0x8F, 0x9F, 0x98, 0xB2, 0x97, 0x99, 0x8F, 0xB6, 0x8F, 0xA2, 0x86, 0xB4, 0x9E, 0xA0, 0x9B, 0x94,
- 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0xB9, 0x97, 0x98, 0xB1, 0xEB, 0xAC, 0xB9, 0xE8, 0x94, 0xAC,
- 0xBE, 0xA0, 0x9F, 0xB0, 0x97, 0x99, 0x9F, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xBD, 0xAD, 0xBB,
- 0x8F, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB6, 0x8B,
- 0x93, 0x9F, 0xB2, 0xAC, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x86, 0xB4, 0x93, 0x9F,
- 0xBE, 0xAE, 0x83, 0xB1, 0xBD, 0xA2, 0x9F, 0x9E, 0x9B, 0x95, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B,
- 0xA9, 0x97, 0x98, 0xEA, 0x88, 0xB6, 0xB9, 0xE8, 0xAE, 0xEA, 0xB8, 0xE9, 0x9B, 0xA2, 0x92, 0x8E,
- 0x9B, 0xB8, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9C, 0x9C, 0x98, 0xB2, 0xB9, 0xB7,
- 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9F, 0x80, 0x82, 0x94, 0xA8, 0x86, 0xB4,
- 0xBE, 0x9D, 0xE3, 0xAD, 0x93, 0x9F, 0x94, 0x98, 0x97, 0x98, 0xEE, 0x82, 0x9E, 0x8E, 0x9F, 0xEE,
- 0x97, 0x8E, 0x93, 0xA3, 0x94, 0x9E, 0x9B, 0xEF, 0x97, 0x9E, 0x97, 0xEB, 0x94, 0xEB, 0xB5, 0x82,
- 0x9E, 0x8E, 0x93, 0xEE, 0x97, 0x8E, 0x9F, 0xAD, 0x94, 0xB0, 0x9B, 0xEF, 0x97, 0x9E, 0x97, 0xEB,
- 0x94, 0xEB, 0xB5, 0xAD, 0xBE, 0xA0, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F,
- 0x86, 0xB4, 0x98, 0xB2, 0x97, 0x99, 0x8F, 0xB6, 0x8F, 0xA2, 0x9E, 0xA0, 0x9B, 0x94, 0x98, 0xBD,
- 0x94, 0x8C, 0x98, 0x9B, 0xB9, 0x8E, 0x98, 0xB1, 0xEB, 0xAC, 0xB9, 0xE8, 0x94, 0xAC, 0xBE, 0xA0,
- 0x9F, 0xB6, 0x97, 0x99, 0x97, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xB2, 0x97, 0xB9, 0x8F, 0x9D,
- 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB6, 0xAF, 0xBE, 0x9D,
- 0x8C, 0xA3, 0x86, 0xB4, 0xB8, 0xB7, 0x9C, 0xEA, 0xBB, 0x8D, 0xE3, 0xAF, 0x83, 0x8D, 0xAD, 0xBD,
- 0x88, 0xE8, 0xEB, 0xB3, 0x89, 0x9E, 0x9F, 0x8B, 0x97, 0x9B, 0xEE, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F,
- 0x99, 0xA2, 0x97, 0x92, 0x88, 0x9D, 0x8C, 0xA0, 0xBB, 0xE9, 0x88, 0xAC, 0xB9, 0x9E, 0x9F, 0xBF,
- 0x97, 0x98, 0xAD, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x9B, 0xA2, 0x97, 0x8C, 0x80, 0x9D, 0x8C, 0xA0,
- 0xBB, 0xE9, 0x88, 0xAC, 0x86, 0xB4, 0xB9, 0x99, 0xEF, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D,
- 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xAF, 0x83, 0xE8, 0xE3, 0xAE, 0x97, 0x93, 0x93, 0x98, 0x93, 0xB0,
- 0x9B, 0x94, 0x98, 0xBD, 0xB1, 0xAB, 0xB2, 0xB1, 0xB3, 0x9D, 0xE3, 0xAD, 0xEA, 0x98, 0x9B, 0x8B,
- 0x9F, 0x9C, 0x9B, 0x9B, 0x95, 0x99, 0x9B, 0x8B, 0xE2, 0x9B, 0x97, 0x93, 0x93, 0x98, 0x99, 0xBD,
- 0x91, 0x99, 0x9B, 0x8B, 0x9F, 0x9B, 0x86, 0xB4, 0xA0, 0xB5, 0x8C, 0x8A, 0x8A, 0xEC, 0xEA, 0xB5,
- 0x83, 0x8E, 0xB0, 0xA9, 0xAD, 0x97, 0xE2, 0xAC, 0xA9, 0x8D, 0xBD, 0xAA, 0x94, 0x95, 0x9C, 0xE3,
- 0x80, 0xA3, 0x98, 0xE9, 0xAD, 0x8F, 0xF5, 0xA9, 0x90, 0xBF, 0x83, 0xAE, 0xB7, 0xBF, 0x99, 0xF1,
- 0xEA, 0xBF, 0x8E, 0x8C, 0x9E, 0xAB, 0x83, 0xBC, 0x93, 0xE2, 0x8B, 0xAB, 0xE8, 0xF5, 0x9B, 0xB5,
- 0x9E, 0x96, 0xB2, 0x9F, 0x93, 0xBD, 0xEC, 0xB9, 0x86, 0xB4, 0xAC, 0xBE, 0xE2, 0xAC, 0x9D, 0x9E,
- 0x8F, 0xB7, 0x82, 0x8E, 0xAC, 0xB1, 0x82, 0xF1, 0xA8, 0xF5, 0xB8, 0x80, 0x99, 0x89, 0xE3, 0xB5,
- 0x88, 0xEC, 0xB5, 0xE9, 0x97, 0xE8, 0xB5, 0xAE, 0xA9, 0xBD, 0xAD, 0x97, 0xA0, 0xA9, 0x88, 0x8B,
- 0x8B, 0xBD, 0x95, 0x8D, 0xBC, 0xB4, 0xBD, 0xA3, 0x98, 0xE9, 0x8A, 0x8C, 0xB2, 0xEA, 0x8C, 0xF1,
- 0x9C, 0x97, 0xEC, 0xE2, 0x9E, 0xB5, 0x99, 0x80, 0x80, 0x9C, 0x86, 0xB4, 0x96, 0x89, 0x83, 0x8B,
- 0xE9, 0x9D, 0xB2, 0xAC, 0xED, 0x9B, 0x91, 0xE8, 0xEB, 0x97, 0xF5, 0xBD, 0xEE, 0x8E, 0xB9, 0x91,
- 0x9C, 0x83, 0xE9, 0xEA, 0xB4, 0xBD, 0xB9, 0xE3, 0xBB, 0xAC, 0x97, 0x90, 0xBF, 0x90, 0xEC, 0xB6,
- 0x89, 0x96, 0xA0, 0xAA, 0x9F, 0xA3, 0x8C, 0xEC, 0x83, 0xB1, 0x9E, 0xB8, 0x98, 0xEA, 0x8C, 0x98,
- 0xB9, 0x9B, 0x95, 0x89, 0xBF, 0xEA, 0x9B, 0xA3, 0x9B, 0x8F, 0x94, 0xEE, 0x86, 0xB4, 0xBB, 0xE3,
- 0xEF, 0xED, 0x8F, 0xAD, 0x88, 0xAE, 0xE8, 0xB2, 0x8C, 0xB4, 0xEF, 0xB1, 0x99, 0xA8, 0xEF, 0x9E,
- 0x8A, 0xB0, 0xBF, 0xEE, 0xAD, 0xEB, 0xA2, 0x82, 0xB4, 0x92, 0x93, 0xA2, 0xF1, 0x97, 0xB2, 0xA8,
- 0xB2, 0x9D, 0xBD, 0x8F, 0xA0, 0xEA, 0xA9, 0xAE, 0x8B, 0x82, 0xE8, 0x83, 0xAF, 0xEE, 0xBF, 0xE8,
- 0xF1, 0xB6, 0xAA, 0xA3, 0xEA, 0xA8, 0x98, 0x9F, 0x8F, 0xED, 0x92, 0x93, 0xAB, 0xBF, 0x86, 0xB4,
- 0xAA, 0x99, 0xAB, 0x8C, 0x89, 0xAD, 0x89, 0xBF, 0x9B, 0xBC, 0xA8, 0xBD, 0xB5, 0xB4, 0xAD, 0x8F,
- 0x9B, 0x98, 0xEB, 0xBE, 0x8E, 0x8A, 0x89, 0x80, 0xEF, 0xAD, 0x92, 0x98, 0x83, 0xB3, 0x82, 0xE9,
- 0xEA, 0xA2, 0xF1, 0x8F, 0xBB, 0x97, 0x89, 0xB9, 0x92, 0xB6, 0x92, 0xAF, 0x8A, 0x95, 0xA8, 0x8F,
- 0xA3, 0xEE, 0xB8, 0x89, 0xE8, 0xBF, 0xEF, 0xB7, 0x97, 0x88, 0xF1, 0x9C, 0x8D, 0x9D, 0xB2, 0xE3,
- 0x86, 0xB4, 0xAC, 0xE9, 0xB5, 0x94, 0x98, 0x88, 0x97, 0xB2, 0x96, 0x8A, 0x90, 0x9D, 0xE3, 0x83,
- 0x93, 0xAB, 0xAF, 0x9D, 0x9F, 0xEE, 0xAE, 0xAD, 0x93, 0x9E, 0x9B, 0x8B, 0x9B, 0x98, 0xB5, 0xEE,
- 0x93, 0x99, 0x95, 0xA0, 0x99, 0x99, 0x9B, 0xB0, 0xB9, 0xAD, 0x9E, 0x9B, 0x83, 0x9E, 0x8C, 0x88,
- 0xEA, 0x8E, 0x9B, 0x8B, 0x92, 0xF5, 0x98, 0x9B, 0x93, 0xAD, 0x9B, 0x9E, 0x9B, 0x95, 0x98, 0xBD,
- 0x94, 0x8C, 0x86, 0xB4, 0x92, 0x8B, 0xE2, 0x98, 0x9B, 0xBC, 0xE2, 0x9F, 0x98, 0x9B, 0x97, 0x99,
- 0x98, 0xEE, 0x9B, 0xAD, 0x92, 0x8B, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0x95, 0x98, 0x98, 0x83, 0x9F,
- 0x9C, 0x9D, 0xEB, 0xB8, 0xB3, 0x82, 0xAD, 0x89, 0xB5, 0x9E, 0xEE, 0x90, 0xAD, 0xB0, 0x99, 0xB4,
- 0xAB, 0xED, 0xB1, 0xAB, 0x8F, 0xE2, 0xBC, 0xBD, 0x82, 0x94, 0xAC, 0xE8, 0x97, 0x98, 0xE2, 0x9D,
- 0x9B, 0xEB, 0x8F, 0xBE, 0x86, 0xB4, 0x93, 0xAD, 0x8B, 0x83, 0x97, 0x98, 0xBB, 0x9B, 0x9C, 0x9B,
- 0x96, 0xB1, 0xA0, 0xBC, 0x96, 0xEB, 0x9D, 0xB2, 0x8D, 0x9E, 0xB8, 0xBC, 0x99, 0xA8, 0xA8, 0xAD,
- 0x8B, 0x88, 0xA2, 0x88, 0xBC, 0xEF, 0xE8, 0x9F, 0xA3, 0x8A, 0x97, 0x9F, 0x9F, 0x9D, 0x99, 0x99,
- 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x9F, 0x98, 0x98, 0x9E, 0x8F, 0xAD, 0x97, 0xA0,
- 0x9B, 0xA2, 0x98, 0xBD, 0xBD, 0xA8, 0x86, 0xB4, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B, 0xB9, 0xAD,
- 0x9B, 0xB5, 0x83, 0xB6, 0xBB, 0x92, 0x88, 0xEA, 0xB9, 0x9E, 0xB5, 0xAC, 0x96, 0xE9, 0xBE, 0xE9,
- 0xBE, 0xA3, 0xEF, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xAF,
- 0x83, 0xE8, 0xE3, 0xAE, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xE9, 0x98, 0xB1, 0x82, 0xE8, 0x94, 0xB2,
- 0x96, 0xB4, 0x98, 0xB6, 0xB8, 0x8E, 0x9B, 0xE8, 0x86, 0xB4, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x88,
- 0xE2, 0x9F, 0x96, 0xA0, 0x9B, 0xAE, 0x97, 0x99, 0xAF, 0xBD, 0x91, 0xBB, 0x9B, 0xB4, 0xB2, 0xB3,
- 0x8C, 0xB5, 0xBE, 0x92, 0x88, 0xAD, 0x95, 0xB3, 0xE2, 0xAC, 0xBE, 0xE9, 0xBE, 0xE9, 0x96, 0xB4,
- 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0xEF, 0xB0, 0xB8, 0xE8,
- 0xEA, 0xAC, 0x83, 0xE8, 0x9F, 0xAC, 0xB9, 0x9D, 0x88, 0xBC, 0x86, 0xB4, 0x83, 0xE8, 0x9F, 0xAF,
- 0x83, 0xE9, 0x90, 0xA9, 0x97, 0x93, 0x93, 0x98, 0x90, 0xBD, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0xBD,
- 0x98, 0x93, 0x93, 0x98, 0x92, 0x8E, 0x99, 0x99, 0x9B, 0x88, 0xB1, 0xAD, 0xBD, 0xBB, 0xEA, 0x9D,
- 0x9E, 0xB3, 0xA9, 0x9D, 0x9B, 0x8B, 0x8B, 0x98, 0xBD, 0xB9, 0xAD, 0xED, 0xBD, 0xE9, 0xEA, 0x99,
- 0x9B, 0xBD, 0x9F, 0x98, 0x97, 0x93, 0x9D, 0xBB, 0x97, 0x9E, 0xB1, 0x9D, 0x86, 0xB4, 0x99, 0x99,
- 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x93, 0x98, 0x9C, 0xB3, 0xEB, 0xB5, 0xBE, 0x92,
- 0x88, 0xAD, 0x95, 0xB3, 0xE2, 0xAC, 0x83, 0xE8, 0x9F, 0xAF, 0xB9, 0x9D, 0x9C, 0xA3, 0x83, 0x8D,
- 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0xEF, 0xB6, 0xBE, 0x99, 0xE3, 0xB0, 0x83, 0x89,
- 0xE3, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x94, 0xBC, 0x86, 0xB4,
- 0x83, 0xE9, 0x98, 0xA0, 0x96, 0xB7, 0xB2, 0xEA, 0xB8, 0x8D, 0xAD, 0xAD, 0x82, 0x8B, 0x83, 0x93,
- 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92, 0x9B, 0xBD, 0x93, 0xAD, 0x8F, 0x8E, 0x9B, 0xBC,
- 0x9D, 0xB2, 0xB2, 0x8B, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xBD,
- 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF, 0x80, 0xE9, 0x97, 0xA9, 0x93, 0x9D, 0xA2, 0xEA,
- 0x86, 0xB4, 0x80, 0x99, 0xEE, 0xAD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0x88, 0xB5, 0xAF, 0x88, 0x82,
- 0xB2, 0xEA, 0x80, 0x82, 0x90, 0xAF, 0x83, 0x8D, 0xAD, 0xBD, 0x8B, 0xB7, 0x9C, 0xA0, 0xBB, 0x8D,
- 0x97, 0xBD, 0x8B, 0xE8, 0x8C, 0xA3, 0xBE, 0x9D, 0xB6, 0xB7, 0xBB, 0x8D, 0x94, 0xB2, 0xBE, 0x9D,
- 0xE3, 0xAF, 0x93, 0x9C, 0x98, 0xA3, 0x83, 0x8D, 0x94, 0xEA, 0xBB, 0x8D, 0x94, 0xB6, 0x93, 0x9C,
- 0x94, 0xEA, 0x86, 0xB4, 0x83, 0x82, 0x88, 0xB6, 0xB8, 0x8D, 0x8C, 0xAF, 0xBE, 0x9E, 0x98, 0xB4,
- 0x98, 0xBD, 0xEE, 0xA8, 0x98, 0xBD, 0x9F, 0x9F, 0x9B, 0x83, 0x92, 0x97, 0x95, 0xEE, 0x94, 0xE3,
- 0x9B, 0xBD, 0x90, 0xB7, 0x9B, 0xA0, 0x98, 0x8C, 0x97, 0x9C, 0x97, 0x9D, 0x99, 0x99, 0xA9, 0x9D,
- 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x93, 0x99, 0x97, 0x9F, 0xB9, 0xAD, 0x92, 0xA2, 0xB5, 0x83,
- 0x8F, 0x9D, 0x9C, 0xA3, 0x86, 0xB4, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F,
- 0xB2, 0xAC, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x96, 0x99, 0x98, 0xA9, 0xBE, 0x9D,
- 0x8B, 0xAF, 0x97, 0x9B, 0x97, 0x99, 0x9B, 0x8B, 0x9F, 0xBB, 0x90, 0x9C, 0x98, 0xB2, 0xB9, 0xB7,
- 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9F, 0x80, 0x82, 0x94, 0xA8, 0xBE, 0x9D,
- 0xE3, 0xAD, 0x93, 0x9F, 0x94, 0xB6, 0x86, 0xB4, 0xB9, 0xB4, 0x88, 0xAA, 0x80, 0xB7, 0xB6, 0xB0,
- 0x83, 0x82, 0x88, 0xB6, 0x93, 0x9C, 0x98, 0xAC, 0xB8, 0x9D, 0xB6, 0xB0, 0xBF, 0x8E, 0x9B, 0xA3,
- 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x88, 0x9F, 0x9F, 0x91, 0xA0, 0x9B, 0xAA, 0xBD, 0xB2, 0x8C, 0xB1,
- 0x80, 0x82, 0x94, 0xA8, 0xBE, 0x9D, 0xE3, 0xAD, 0x96, 0xB4, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9,
- 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0xEF, 0xB0, 0x86, 0xB4, 0xB8, 0xE8, 0xE8, 0x99, 0x9F, 0x9D,
- 0xEB, 0xEF, 0x96, 0xB4, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3,
- 0xEF, 0xB0, 0xB8, 0xE8, 0xEA, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC,
- 0xB9, 0x94, 0x9B, 0x8B, 0x9F, 0x96, 0x98, 0x8B, 0x9B, 0x9E, 0xBD, 0xBD, 0x93, 0x98, 0x9B, 0x93,
- 0x8C, 0xB5, 0x8C, 0xAC, 0xA2, 0xAD, 0x97, 0x90, 0x96, 0xBB, 0x86, 0xB4, 0xAE, 0xA9, 0xB2, 0xB5,
- 0xBB, 0xBF, 0xBB, 0xEB, 0xB8, 0xAB, 0xA9, 0xB4, 0x9E, 0xE8, 0x9C, 0x8F, 0xEB, 0xA8, 0xF5, 0x9C,
- 0xB5, 0x8B, 0xA3, 0xEB, 0xB4, 0xAA, 0xEF, 0xB3, 0xBC, 0x91, 0x8B, 0xED, 0xBC, 0xAC, 0x9E, 0xA8,
- 0xF1, 0xA0, 0xE2, 0xBD, 0x83, 0xEA, 0xB5, 0x91, 0x9E, 0xA8, 0x95, 0xB8, 0x88, 0xB9, 0x83, 0x8E,
- 0xBF, 0xB3, 0x88, 0xBC, 0x89, 0x9D, 0x9D, 0xEB, 0x8E, 0xA3, 0x82, 0x8D, 0x86, 0xB4, 0x94, 0xBC,
- 0x83, 0xE3, 0xB4, 0xB6, 0xBD, 0xB8, 0x96, 0x90, 0x95, 0xED, 0xBC, 0x97, 0xEF, 0xAC, 0xAA, 0xAB,
- 0xAC, 0xB0, 0xEF, 0x8D, 0x8B, 0x90, 0x94, 0xBB, 0x8F, 0xB0, 0x93, 0xA0, 0xA2, 0x94, 0xB9, 0xB3,
- 0xAE, 0x94, 0xB4, 0xED, 0xAE, 0xBF, 0x9D, 0xEF, 0xB9, 0xEF, 0xF5, 0x99, 0xEA, 0xBC, 0xB1, 0xB3,
- 0x8D, 0xBF, 0x9E, 0x92, 0xE3, 0xAE, 0xEA, 0xEB, 0xBD, 0x96, 0x88, 0xAA, 0xAC, 0x95, 0x86, 0xB4,
- 0xB1, 0xEF, 0x98, 0xEE, 0xA0, 0x9E, 0xBC, 0xE2, 0x9B, 0x92, 0xB8, 0xB1, 0xB0, 0xA8, 0xBC, 0xED,
- 0xE9, 0xAD, 0xB2, 0x80, 0xA0, 0xB3, 0xAF, 0x8A, 0xB2, 0xB8, 0xA3, 0x99, 0xA3, 0xA2, 0xB0, 0xAC,
- 0xBE, 0xB4, 0x8C, 0xB5, 0xAF, 0x8A, 0xEF, 0xB5, 0x8A, 0xAD, 0x98, 0xE3, 0x97, 0x83, 0x8B, 0x96,
- 0xA3, 0xA2, 0x8B, 0x97, 0xB6, 0x8C, 0xAC, 0x83, 0xB6, 0xEA, 0x98, 0x99, 0xEE, 0xAD, 0x98, 0xB3,
- 0x86, 0xB4, 0xB1, 0xB1, 0xBB, 0xA3, 0xB7, 0xAB, 0x8D, 0x98, 0x93, 0xA2, 0xBF, 0x91, 0x98, 0x8D,
- 0x9E, 0x9F, 0x8B, 0xA3, 0x9D, 0xAC, 0x8C, 0xBB, 0xB8, 0xA9, 0x95, 0xB5, 0xEB, 0x91, 0xA8, 0xB5,
- 0xEC, 0xA2, 0xB1, 0xEF, 0xA9, 0xEC, 0x89, 0xAF, 0xAF, 0xAE, 0x97, 0x9F, 0xEC, 0x96, 0xE3, 0xED,
- 0xB1, 0xB7, 0x8B, 0xBB, 0x88, 0x9D, 0xB8, 0x95, 0xAC, 0xB8, 0x99, 0x80, 0xE3, 0xEF, 0xB4, 0xB3,
- 0x9F, 0x92, 0x86, 0xB4, 0xBF, 0x91, 0xAF, 0xBB, 0xF5, 0xEB, 0x94, 0xBD, 0xAE, 0xE3, 0x8F, 0xE9,
- 0x83, 0xEC, 0xBC, 0x8A, 0xAD, 0x8A, 0xEC, 0xBD, 0x8C, 0xBB, 0x8B, 0xBD, 0xB6, 0x80, 0x98, 0xB9,
- 0x8A, 0xBD, 0xA9, 0xEF, 0xF1, 0xEE, 0xBB, 0xF1, 0xB2, 0xBE, 0xF5, 0xE2, 0xBD, 0x8A, 0x80, 0xF1,
- 0x82, 0xB8, 0x8C, 0x82, 0xA9, 0x91, 0xEC, 0xE2, 0xB0, 0xE3, 0xBF, 0x8F, 0x97, 0xAF, 0xB2, 0x97,
- 0xB5, 0x9C, 0xBE, 0x91, 0x86, 0xB4, 0xB9, 0xBB, 0x94, 0xBF, 0xB0, 0xB4, 0x8B, 0xAE, 0xE9, 0x99,
- 0xAC, 0xA9, 0xB4, 0xAA, 0xED, 0xB5, 0xB2, 0x89, 0xB5, 0x88, 0x83, 0xE9, 0xA8, 0x91, 0xBE, 0xBC,
- 0x9D, 0xEA, 0x93, 0xBE, 0xA3, 0xF5, 0xEE, 0x92, 0x90, 0x99, 0xB3, 0x99, 0x99, 0x95, 0xB4, 0x9E,
- 0x9E, 0xAA, 0x8A, 0x82, 0xAC, 0xAB, 0x8B, 0xAB, 0x9B, 0xB5, 0xEA, 0xB9, 0xAD, 0x9F, 0xB2, 0xB8,
- 0x89, 0xB0, 0x93, 0xEC, 0xEC, 0x83, 0x86, 0xB4, 0xA0, 0xBE, 0xAE, 0x9F, 0xB1, 0x99, 0x9C, 0xAA,
- 0x8D, 0xA0, 0xE8, 0xE9, 0xA8, 0x9D, 0x9F, 0xB6, 0x8B, 0x97, 0xA2, 0x93, 0xA9, 0xEC, 0xB5, 0xB0,
- 0xAD, 0x91, 0xF5, 0xBD, 0xAF, 0xEF, 0xF1, 0xA9, 0x90, 0xAA, 0x9F, 0xF1, 0xB6, 0xED, 0x8B, 0xAA,
- 0x82, 0xBC, 0x99, 0x93, 0xB2, 0xA8, 0xA3, 0xAB, 0x9D, 0xAB, 0x88, 0x92, 0xAA, 0xBE, 0xB1, 0x89,
- 0x9E, 0xAA, 0xED, 0x8A, 0xB9, 0xEB, 0x90, 0xA8, 0x86, 0xB4, 0x90, 0x97, 0xAA, 0xA3, 0x94, 0xB2,
- 0x9E, 0x9F, 0x93, 0xEA, 0x8B, 0xB0, 0x8A, 0x82, 0xB1, 0x89, 0xB4, 0x97, 0x8C, 0xA2, 0x97, 0x8B,
- 0xAF, 0x92, 0x8F, 0xB3, 0xBE, 0x9B, 0x88, 0xA8, 0xEE, 0xE9, 0x95, 0xE9, 0xE8, 0xA3, 0xAE, 0xEA,
- 0x8C, 0x9E, 0xF5, 0x80, 0xA3, 0xAE, 0xEC, 0xA9, 0xB8, 0xE8, 0xBD, 0xB7, 0x93, 0xB4, 0x9C, 0xEC,
- 0x82, 0x90, 0xA8, 0xB6, 0x83, 0x99, 0x9E, 0xAC, 0x95, 0xA0, 0x86, 0xB4, 0xAA, 0xAF, 0x91, 0x8A,
- 0xB5, 0x95, 0x9F, 0xE3, 0x9F, 0x97, 0x93, 0xED, 0xEE, 0x82, 0xA0, 0x91, 0xAD, 0xEF, 0x9C, 0xA9,
- 0x8C, 0xB2, 0x8C, 0x8F, 0xAA, 0xE2, 0x8D, 0xBF, 0xB7, 0xE2, 0x93, 0xA8, 0xED, 0xBF, 0x8A, 0xEC,
- 0x9D, 0x80, 0xED, 0xB2, 0x8A, 0xE8, 0xEB, 0x90, 0xED, 0x99, 0xE3, 0xAE, 0x8A, 0xB1, 0xB3, 0x83,
- 0xB0, 0x90, 0xAB, 0x82, 0xEC, 0xB0, 0x90, 0xAC, 0xAC, 0x96, 0x9F, 0xEC, 0x86, 0xB4, 0xB8, 0x8A,
- 0x9F, 0x8E, 0xB6, 0x96, 0xEE, 0xE2, 0xBF, 0xA9, 0x8D, 0xEF, 0xEF, 0x80, 0xB7, 0x9F, 0xEF, 0xED,
- 0x89, 0x9F, 0xF1, 0x9C, 0xEB, 0xB5, 0xAB, 0x91, 0xF5, 0xB2, 0x8B, 0xEF, 0xAE, 0x9E, 0x90, 0xAD,
- 0xB4, 0xBF, 0x9F, 0xA8, 0xA3, 0x90, 0x80, 0xF1, 0xE2, 0x91, 0xB5, 0xB3, 0x9E, 0xEE, 0xE8, 0x89,
- 0x91, 0xBB, 0xBC, 0xEA, 0xB1, 0xE8, 0xE3, 0xB3, 0x8B, 0xBC, 0x82, 0x92, 0xEB, 0x9C, 0x86, 0xB4,
- 0x83, 0x89, 0xB9, 0x9D, 0xB6, 0x92, 0xEF, 0xE2, 0xA8, 0x82, 0x82, 0xB0, 0x9B, 0x80, 0xAC, 0xF1,
- 0xB1, 0x92, 0x94, 0x8E, 0xA9, 0x90, 0xF1, 0xA0, 0x96, 0x82, 0xF5, 0xF5, 0x91, 0xAA, 0xA0, 0x8E,
- 0x86, 0xB4, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x9F, 0x94, 0x9E, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93,
- 0x9C, 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0xF7, 0xF7, 0xF7,
- 0xF7, 0xF7, 0x98, 0x9F, 0x9D, 0x93, 0x94, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, 0x93, 0x99,
- 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0x97, 0x93, 0x93, 0x92, 0xE3, 0x8E,
- 0x99, 0x99, 0x98, 0xBE, 0xE8, 0xBD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0xBD, 0x93, 0x99, 0x9F, 0x9B,
- 0x97, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B,
- 0x9F, 0x96, 0x98, 0x8B, 0x9B, 0xAD, 0xBE, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB,
- 0x8F, 0x9F, 0x98, 0xB2, 0x97, 0x99, 0x8F, 0xB6, 0x8F, 0xA2, 0x86, 0xB4, 0x9E, 0xA0, 0x9B, 0x94,
- 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0xB9, 0x97, 0x98, 0xB1, 0xEB, 0xAC, 0xBE, 0xE8, 0x94, 0xAC,
- 0xBE, 0xA0, 0x9F, 0xB0, 0x97, 0x99, 0x9F, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xBD, 0xAD, 0xBB,
- 0x8F, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB6, 0x8B,
- 0x93, 0x9F, 0xB2, 0xAC, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x86, 0xB4, 0x93, 0x9F,
- 0xBE, 0xAE, 0x83, 0xB1, 0xBD, 0xA2, 0x9E, 0xB0, 0x9B, 0x97, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B,
- 0xA9, 0x97, 0x98, 0x8F, 0x94, 0xA9, 0xB8, 0xE9, 0x8C, 0xB1, 0x97, 0x88, 0xE2, 0xAD, 0x92, 0x8B,
- 0x83, 0x9E, 0x8C, 0x8B, 0x8B, 0x9E, 0x9E, 0x98, 0x80, 0x8B, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D,
- 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x90, 0xB9, 0xE9, 0x94, 0xEB, 0xBB, 0x8D, 0xEF, 0xB4, 0x86, 0xB4,
- 0x93, 0x9F, 0x94, 0x98, 0x93, 0x99, 0x97, 0xA2, 0x97, 0x98, 0xEE, 0x82, 0x9E, 0x8E, 0x9F, 0xEE,
- 0x97, 0x8E, 0x93, 0xA3, 0x94, 0x9E, 0x9B, 0xEF, 0x97, 0x9E, 0x9F, 0xEB, 0x97, 0x9C, 0xB5, 0x82,
- 0x9E, 0x8E, 0x97, 0xA2, 0x97, 0x9E, 0x9F, 0xA3, 0x97, 0xA0, 0x9B, 0xEF, 0x97, 0x9E, 0x9F, 0xEB,
- 0x97, 0x9C, 0xB5, 0xAD, 0xBE, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F,
- 0x86, 0xB4, 0x98, 0xB2, 0x97, 0x99, 0x8F, 0xB6, 0x8F, 0xA2, 0x9E, 0xA0, 0x9B, 0x94, 0x98, 0xBD,
- 0x94, 0x8C, 0x98, 0x9B, 0xB9, 0x97, 0x98, 0xB1, 0xEB, 0xAC, 0xB9, 0xE8, 0x94, 0xAC, 0xBE, 0xA0,
- 0x9F, 0xB0, 0x97, 0x99, 0x9F, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xBD, 0xAD, 0xBB, 0x8F, 0x9D,
- 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB6, 0x8B, 0x93, 0x9F,
- 0xB2, 0xAC, 0x86, 0xB4, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x93, 0x9F, 0xBE, 0xAE,
- 0x83, 0xB1, 0xBD, 0xA2, 0x9F, 0x9E, 0x9B, 0x95, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0xA9, 0x97,
- 0x98, 0xEA, 0x88, 0xB6, 0xB9, 0xE8, 0xAE, 0xEA, 0xB8, 0xE9, 0x9B, 0xA2, 0x92, 0x8E, 0x9B, 0xB8,
- 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9C, 0x9C, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9,
- 0xB8, 0x9D, 0x8C, 0xA9, 0x86, 0xB4, 0xB9, 0xA3, 0x98, 0x9F, 0x80, 0x82, 0x94, 0xA8, 0xBE, 0x9D,
- 0xE3, 0xAD, 0x93, 0x9F, 0x94, 0x98, 0x97, 0x93, 0x93, 0x99, 0x93, 0xB0, 0x9B, 0x94, 0x98, 0xBD,
- 0xB1, 0xAB, 0xB2, 0xB1, 0xB3, 0x9D, 0xE3, 0xAD, 0xEA, 0x98, 0x9B, 0x8B, 0x9F, 0x9C, 0x9B, 0x9B,
- 0x95, 0x99, 0x9B, 0xBD, 0xE2, 0x9B, 0x97, 0x93, 0x93, 0x99, 0x99, 0xBD, 0x91, 0x99, 0x9B, 0xBD,
- 0x9F, 0x9B, 0xE8, 0xA8, 0xEC, 0x8A, 0x86, 0xB4, 0xA0, 0xF5, 0xBC, 0x9F, 0xEE, 0x8D, 0x9F, 0x89,
- 0x82, 0xB1, 0xAF, 0xBE, 0x8E, 0xE2, 0xEA, 0xB1, 0xB1, 0xF1, 0xBE, 0xB1, 0x91, 0xF5, 0x91, 0x9C,
- 0x97, 0xE3, 0x9B, 0xAB, 0xB7, 0xB7, 0x92, 0x98, 0xBE, 0xA2, 0xE8, 0x91, 0x88, 0x98, 0x91, 0x82,
- 0x8A, 0xAF, 0x95, 0x90, 0xB4, 0x8B, 0xB5, 0xAA, 0xEC, 0xBE, 0x89, 0xF1, 0x80, 0x88, 0x88, 0x83,
- 0xBD, 0xA3, 0xA0, 0xAB, 0xAC, 0x9C, 0x83, 0xB6, 0x86, 0xB4, 0x95, 0x8C, 0xA3, 0xE3, 0xB5, 0x80,
- 0xB2, 0x90, 0xE2, 0xAB, 0xAE, 0xA8, 0x8B, 0x92, 0xED, 0xEB, 0xB5, 0xA8, 0xB4, 0x96, 0xF5, 0x80,
- 0x94, 0x93, 0x8F, 0x98, 0x97, 0x95, 0xB5, 0x8B, 0xEB, 0x92, 0xBD, 0xE3, 0x95, 0xAB, 0xBB, 0xAB,
- 0xAD, 0xA8, 0xE8, 0xB8, 0xEA, 0xEE, 0xAB, 0x8D, 0x8C, 0xED, 0x88, 0x93, 0xB0, 0x8D, 0xEF, 0xB8,
- 0x9D, 0xEA, 0x8B, 0x98, 0xBD, 0x9B, 0x83, 0xAF, 0x9E, 0x82, 0x86, 0xB4, 0xAF, 0xAB, 0xEF, 0xBE,
- 0xB4, 0xEB, 0x9B, 0xE2, 0xAF, 0x9E, 0x8D, 0xB5, 0x8A, 0x83, 0xBE, 0xB7, 0x8F, 0xA8, 0xA9, 0xF1,
- 0xB5, 0xB3, 0xA8, 0xEA, 0xB1, 0xA2, 0x8F, 0xAF, 0xBD, 0xAF, 0xB7, 0x8D, 0x89, 0x83, 0x83, 0xA0,
- 0xB2, 0x9D, 0x95, 0xB5, 0x9E, 0xA2, 0xAA, 0x99, 0x89, 0xAA, 0x82, 0xAB, 0x89, 0xB5, 0xAC, 0x83,
- 0x95, 0xB9, 0xA3, 0x9F, 0x94, 0xB3, 0xB4, 0x9E, 0xE8, 0x94, 0x9C, 0xA9, 0x86, 0xB4, 0xEC, 0x8E,
- 0xEC, 0x99, 0x90, 0xEB, 0x97, 0x99, 0xF5, 0xA3, 0x8E, 0x8F, 0xA3, 0xAF, 0xE2, 0xB5, 0x96, 0x99,
- 0x97, 0xA9, 0x82, 0xB3, 0xB7, 0xA3, 0x92, 0xBC, 0xBF, 0xF1, 0xAA, 0xB1, 0xB4, 0x90, 0xEB, 0xB9,
- 0x89, 0x89, 0xEE, 0xB3, 0xE9, 0xA0, 0x8B, 0xED, 0xAE, 0x88, 0x8C, 0xBE, 0x9C, 0x97, 0xAC, 0xB8,
- 0x96, 0xBE, 0x8A, 0xB8, 0x95, 0xB1, 0x9E, 0xBB, 0x8E, 0xF5, 0x80, 0x9C, 0xA3, 0xB2, 0x86, 0xB4,
- 0xBF, 0x92, 0x95, 0xA8, 0xAA, 0x98, 0x91, 0xBB, 0xBF, 0x93, 0xB4, 0xA9, 0x94, 0xB5, 0x99, 0xB5,
- 0x82, 0xB5, 0x95, 0x89, 0xAB, 0xE3, 0x91, 0xE2, 0x99, 0xA0, 0x83, 0xAB, 0xE9, 0xB7, 0x9F, 0xB3,
- 0xB1, 0x9F, 0xF5, 0xAE, 0xE9, 0x8A, 0x98, 0xF1, 0xE2, 0x90, 0xB8, 0x99, 0x97, 0xB1, 0xBC, 0xEF,
- 0xBD, 0xF1, 0x9F, 0xAF, 0xAA, 0xEE, 0x88, 0xB0, 0xB6, 0x8B, 0xBF, 0x93, 0x96, 0xAF, 0xF5, 0x80,
- 0x86, 0xB4, 0xAB, 0x9F, 0xB1, 0x9D, 0xA3, 0x90, 0xAE, 0xB5, 0xAC, 0xAF, 0x88, 0xB4, 0x8A, 0xB2,
- 0xBB, 0xEB, 0x89, 0x8F, 0xAD, 0xEF, 0x8B, 0xB3, 0xA0, 0xEC, 0x9F, 0xA3, 0x96, 0x9E, 0xBB, 0x96,
- 0xAF, 0xBD, 0xEC, 0x88, 0xBF, 0xB0, 0x8A, 0xB3, 0x8B, 0x80, 0x92, 0xB3, 0xB5, 0xEB, 0xEA, 0xF5,
- 0xA0, 0xB5, 0xAC, 0xB6, 0xBB, 0x94, 0xE3, 0xBB, 0x9C, 0xED, 0xEE, 0x99, 0x9D, 0x98, 0xED, 0x93,
- 0xB0, 0xB0, 0x86, 0xB4, 0x8E, 0x9B, 0x97, 0xB2, 0xA2, 0x94, 0xEE, 0xE8, 0xE9, 0xA2, 0x91, 0x8B,
- 0xBF, 0xAA, 0x9C, 0x8A, 0xB3, 0x8A, 0x8B, 0xAE, 0xB4, 0x80, 0x9D, 0xB1, 0xBF, 0xEB, 0xEB, 0xAF,
- 0xA8, 0x9E, 0xED, 0xAA, 0xA3, 0x93, 0x88, 0x90, 0x8B, 0xB2, 0x8B, 0xB8, 0x8A, 0x90, 0xBF, 0xA3,
- 0x92, 0x8A, 0x80, 0x96, 0xB5, 0x9B, 0x83, 0xF5, 0x80, 0xB4, 0xE9, 0x96, 0xAF, 0xEA, 0xE9, 0xAD,
- 0xAA, 0xAB, 0xB4, 0xEE, 0x86, 0xB4, 0xAF, 0x8C, 0xB6, 0x9F, 0xBC, 0xA8, 0xAC, 0x8C, 0xE9, 0xAA,
- 0xAC, 0xE3, 0xBD, 0xB4, 0xB7, 0xB7, 0xBF, 0xF5, 0x97, 0x8F, 0x8D, 0xA3, 0xBF, 0xBD, 0xB3, 0x95,
- 0xA2, 0x94, 0xEA, 0xA2, 0xB6, 0xBD, 0x98, 0xB1, 0xBD, 0xB0, 0xBE, 0x99, 0xB5, 0xF5, 0xBE, 0xED,
- 0xEE, 0x91, 0x94, 0xB0, 0xBC, 0xB9, 0x9E, 0xF5, 0x8A, 0xEE, 0xAB, 0x88, 0xBB, 0xF1, 0xAC, 0xEF,
- 0xEA, 0xBE, 0xBE, 0xB6, 0x95, 0x82, 0x86, 0xB4, 0xB2, 0xAF, 0x89, 0x9B, 0xB3, 0xB9, 0xE9, 0x96,
- 0xB5, 0xAD, 0xAB, 0xB3, 0xA0, 0x93, 0xE3, 0xF1, 0xB0, 0xA9, 0x8F, 0xEB, 0x94, 0x89, 0x99, 0x83,
- 0xF5, 0xA9, 0xA9, 0x97, 0xB4, 0xBB, 0x9C, 0x8E, 0x8C, 0x99, 0x9D, 0xB0, 0xAE, 0xB9, 0x8A, 0xAB,
- 0xE8, 0x80, 0xB5, 0x9F, 0xEC, 0xB4, 0xE2, 0x94, 0x9D, 0xEB, 0xBE, 0x8D, 0x94, 0x9F, 0xAC, 0x9C,
- 0x90, 0x8B, 0xEB, 0xBF, 0xB6, 0x80, 0x9E, 0xBC, 0x86, 0xB4, 0x80, 0x8F, 0x8B, 0x8A, 0xF5, 0xEF,
- 0xA8, 0xEF, 0xB5, 0xB2, 0xBF, 0x9F, 0xA3, 0x98, 0xB4, 0x95, 0xAF, 0xAE, 0x90, 0xB7, 0xA8, 0x97,
- 0x8C, 0xBB, 0xB2, 0x99, 0xB3, 0xEC, 0xB3, 0xAA, 0xA2, 0xAC, 0xED, 0xEE, 0x9E, 0x8A, 0xA0, 0x9D,
- 0xAB, 0x90, 0x99, 0x82, 0xE2, 0x82, 0xED, 0x8C, 0x92, 0xA8, 0xF1, 0x9E, 0xE8, 0xA0, 0xBF, 0x9F,
- 0xBD, 0x94, 0xA8, 0xB5, 0xBE, 0x9E, 0xE9, 0xB3, 0x9C, 0xF5, 0x86, 0xB4, 0xAB, 0xE8, 0xA3, 0x91,
- 0xEB, 0xAB, 0x8A, 0xE3, 0xF5, 0xBC, 0xBE, 0x95, 0xB1, 0xEF, 0x99, 0xBB, 0xB0, 0x80, 0x8C, 0xB9,
- 0x91, 0xBF, 0xA2, 0xAE, 0x8D, 0xBE, 0x83, 0x98, 0xA9, 0xE3, 0xA8, 0x97, 0xF1, 0xEA, 0x83, 0x9C,
- 0xF1, 0xA9, 0x9F, 0x99, 0x9B, 0xAD, 0x9F, 0x9B, 0x9B, 0xBB, 0x95, 0x99, 0x9B, 0xB5, 0xE2, 0xAD,
- 0xBD, 0xBD, 0x91, 0x96, 0x97, 0x98, 0x93, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, 0x86, 0xB4, 0x9F, 0xAD,
- 0x9F, 0x98, 0xF5, 0xAD, 0x8B, 0x93, 0x97, 0x9B, 0x83, 0x98, 0x9B, 0xBC, 0xE2, 0x99, 0x9B, 0x8B,
- 0x9B, 0xAD, 0x9E, 0xAD, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0xB1, 0x9B, 0x8B, 0x92, 0xF5, 0x98, 0x9B,
- 0x8F, 0xAD, 0x9B, 0xEE, 0x9B, 0x98, 0x9B, 0x9E, 0x9B, 0x91, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x8E,
- 0x83, 0x9F, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0x9E, 0x9B, 0x95, 0x98, 0xBD, 0x94, 0x8C, 0x86, 0xB4,
- 0x92, 0x8B, 0xE2, 0x98, 0x9B, 0xBC, 0xE2, 0x9F, 0x98, 0x9B, 0x97, 0x99, 0x9B, 0x8B, 0x83, 0xAD,
- 0x92, 0x8B, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0x95, 0x98, 0x98, 0x83, 0x9F, 0x9C, 0x9B, 0x96, 0xB1,
- 0xA0, 0xBC, 0x96, 0xEB, 0x9D, 0xB2, 0x8D, 0x9E, 0xB8, 0xBC, 0x99, 0xA8, 0xA8, 0xAD, 0x8B, 0x88,
- 0xA2, 0x88, 0xBC, 0xEF, 0xE8, 0x9F, 0xA3, 0x8A, 0x97, 0x98, 0xE2, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE,
- 0x86, 0xB4, 0x93, 0xAD, 0x8B, 0x83, 0x97, 0x98, 0xBB, 0x9B, 0x9C, 0x9E, 0xAF, 0x8E, 0x9F, 0xBC,
- 0xA9, 0xBC, 0xEF, 0xE3, 0x9C, 0xF1, 0x89, 0x99, 0xAD, 0xED, 0xB7, 0xA2, 0x8B, 0xE3, 0x91, 0xAB,
- 0x8C, 0x8A, 0xBD, 0xF5, 0xEB, 0x91, 0x97, 0x9E, 0xE2, 0x9D, 0x99, 0x99, 0xA9, 0x9D, 0x9B, 0x8B,
- 0x8F, 0x9C, 0x98, 0xAD, 0x9F, 0x98, 0x98, 0x9E, 0x97, 0xAD, 0x97, 0x8E, 0x9B, 0xAC, 0x98, 0xBD,
- 0xBD, 0xA8, 0x86, 0xB4, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B, 0xB9, 0xAD, 0x9B, 0xB5, 0x83, 0xB0,
- 0xBB, 0x92, 0x88, 0xEA, 0xB9, 0x9E, 0xB5, 0xAC, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xB4, 0x98, 0xB2,
- 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0xEF, 0xAF, 0x80, 0x82, 0x8B, 0xAC,
- 0x83, 0xE8, 0x9F, 0xAC, 0xB9, 0xB7, 0xE3, 0xAC, 0xBE, 0x99, 0xEF, 0xAD, 0x80, 0x8D, 0xEA, 0xAD,
- 0x94, 0xAD, 0x83, 0x9E, 0x86, 0xB4, 0x8C, 0x88, 0xEA, 0xBC, 0x98, 0x9E, 0x9B, 0xAD, 0x96, 0xB0,
- 0x9B, 0xA9, 0xB5, 0x99, 0xAB, 0xBD, 0x91, 0x93, 0x83, 0xB7, 0xBB, 0x92, 0x88, 0xEA, 0xB9, 0x9E,
- 0xB5, 0xAC, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xB4, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D,
- 0x8C, 0xA9, 0xB9, 0xA3, 0xEF, 0xAF, 0x80, 0x82, 0x8B, 0xAC, 0x83, 0xE8, 0x9F, 0xAC, 0xB9, 0xB7,
- 0xE3, 0xAC, 0xBE, 0x9C, 0xE3, 0xB0, 0x86, 0xB4, 0x83, 0x89, 0xEF, 0xB0, 0xB9, 0xB7, 0xAD, 0xAD,
- 0xBD, 0xBD, 0x9D, 0x97, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x89, 0x9B, 0x9F, 0xBD, 0xBD, 0x9D, 0x9E,
- 0x97, 0x93, 0x93, 0x98, 0xBC, 0xA0, 0x99, 0x98, 0xA8, 0x8B, 0x83, 0x95, 0x91, 0xAD, 0x83, 0x98,
- 0x98, 0x9B, 0x9D, 0x98, 0xA0, 0x9E, 0xAF, 0x9E, 0xBC, 0x8B, 0x93, 0x99, 0x9B, 0x8B, 0x9F, 0xAD,
- 0xBD, 0x80, 0xB5, 0xAD, 0x95, 0x8B, 0x83, 0x93, 0x86, 0xB4, 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B,
- 0x8F, 0x92, 0x9B, 0xBD, 0x9F, 0x8D, 0x96, 0x8D, 0xB2, 0xEA, 0xBE, 0x92, 0x9B, 0xEC, 0x96, 0xA3,
- 0xE3, 0xB0, 0x83, 0x89, 0xEF, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92,
- 0x97, 0xAF, 0xB8, 0xB7, 0x8C, 0xEA, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xE9, 0x98, 0xB2, 0xB9, 0xB7,
- 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xEB, 0xE3, 0xB0, 0x86, 0xB4, 0xB9, 0x92, 0x97, 0xAF,
- 0xBB, 0x92, 0x88, 0xAE, 0xB8, 0x9E, 0x98, 0xBE, 0x98, 0xBD, 0xBD, 0xA8, 0x98, 0xBD, 0x9F, 0x9C,
- 0x98, 0x8B, 0xB9, 0x99, 0x9B, 0xB0, 0x98, 0x88, 0x97, 0x98, 0xE2, 0xBB, 0x9D, 0x9C, 0x98, 0xB2,
- 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x93, 0xB8, 0xE8, 0xA2, 0xB1,
- 0xBB, 0x8D, 0xEF, 0xB4, 0xB9, 0xA3, 0xAD, 0xBD, 0xB8, 0x92, 0x88, 0xB1, 0x86, 0xB4, 0x96, 0xB0,
- 0x9B, 0x9E, 0x9B, 0xBD, 0x9F, 0x98, 0x9D, 0xB3, 0xEF, 0x9C, 0xBF, 0x92, 0x88, 0xB6, 0xB9, 0xB7,
- 0xEF, 0xB2, 0xB8, 0x99, 0x98, 0x99, 0x83, 0x82, 0x94, 0xAA, 0x83, 0xA3, 0x98, 0x9E, 0x80, 0x82,
- 0x90, 0xEA, 0xBB, 0x8D, 0x80, 0xAA, 0x83, 0xE8, 0x9C, 0xEA, 0xB8, 0xE8, 0xEE, 0xBD, 0x8F, 0x92,
- 0x90, 0xB2, 0x83, 0xE9, 0x88, 0xAA, 0x83, 0xE8, 0x8F, 0xBD, 0x8F, 0xE9, 0x88, 0xB2, 0x86, 0xB4,
- 0xBE, 0x9D, 0x8C, 0xAE, 0x80, 0x8D, 0xEF, 0xEA, 0x97, 0x9D, 0x8B, 0x9D, 0x9E, 0xB3, 0xA9, 0x9D,
- 0x9B, 0x8B, 0x8B, 0x98, 0xBD, 0xB9, 0xAD, 0xED, 0xBD, 0xE9, 0xEA, 0x99, 0x9B, 0xBD, 0x9F, 0x99,
- 0x97, 0x9C, 0x93, 0xAD, 0x8F, 0x9B, 0x83, 0x93, 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92,
- 0x9B, 0xBD, 0x93, 0xAD, 0x88, 0x9E, 0x9B, 0xBC, 0x9D, 0xB2, 0xB2, 0x8B, 0x83, 0x82, 0x90, 0xB2,
- 0x86, 0xB4, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D,
- 0xB6, 0xAF, 0x80, 0xE9, 0x97, 0xA9, 0x93, 0x9D, 0xA2, 0xEA, 0x80, 0x99, 0xEE, 0xAD, 0x9B, 0xAD,
- 0x93, 0x98, 0x9B, 0x88, 0xB5, 0xB2, 0x88, 0x82, 0xB2, 0xEA, 0x80, 0x82, 0x90, 0xAF, 0x83, 0x8D,
- 0xAD, 0xBD, 0x8B, 0xB7, 0x9C, 0xA0, 0xBB, 0x8D, 0x97, 0xBD, 0x8B, 0xE8, 0x8C, 0xA3, 0xBE, 0x9D,
- 0xB6, 0xB7, 0x86, 0xB4, 0xBB, 0x8D, 0x94, 0xB2, 0xBE, 0x9D, 0x8F, 0xBD, 0x8F, 0x9D, 0xE3, 0xA9,
- 0xBB, 0x8D, 0x94, 0xEF, 0x97, 0x9D, 0xB9, 0x9D, 0x9E, 0xB3, 0xA9, 0x9D, 0x9B, 0x8B, 0x8B, 0x98,
- 0xBD, 0xB9, 0xAD, 0xED, 0xBD, 0xE9, 0xEA, 0x99, 0x9B, 0xB7, 0x83, 0x9E, 0x97, 0x9C, 0x8F, 0xAD,
- 0x8F, 0xAD, 0x83, 0x93, 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92, 0x9B, 0xBD, 0x93, 0xAD,
- 0x88, 0xA0, 0x9B, 0xBC, 0x86, 0xB4, 0x9D, 0xB2, 0xB2, 0x8B, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D,
- 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF, 0x80, 0xE9,
- 0x97, 0xA9, 0x93, 0x9D, 0xA2, 0xEA, 0x80, 0x99, 0xEE, 0xAD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0x88,
- 0xB5, 0xB1, 0x8F, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F,
- 0x88, 0xB6, 0xB9, 0xE8, 0xAE, 0xEA, 0x86, 0xB4, 0xB8, 0xE9, 0x9B, 0xBD, 0x8B, 0xE8, 0x8C, 0xA3,
- 0xBE, 0x9D, 0xB6, 0xB7, 0xBB, 0x8D, 0x94, 0xB2, 0xBE, 0x9D, 0x8F, 0xBD, 0x8F, 0x9D, 0xE3, 0xA9,
- 0xBB, 0x8D, 0x94, 0xEF, 0x97, 0x9B, 0xEA, 0x9D, 0x99, 0x89, 0xAB, 0x9D, 0x89, 0x93, 0xB8, 0xE9,
- 0x9E, 0x8B, 0x9F, 0x98, 0x99, 0xAD, 0x8F, 0x9B, 0x9B, 0xEE, 0x93, 0x99, 0x9B, 0x8B, 0x9B, 0xAA,
- 0x98, 0xE3, 0x90, 0x80, 0x8E, 0xF1, 0xB9, 0xAD, 0x86, 0xB4, 0x91, 0x89, 0x9D, 0x80, 0xAF, 0x88,
- 0xEF, 0x96, 0xB0, 0xBF, 0xEB, 0xB6, 0xBD, 0xA2, 0xAF, 0xBF, 0x97, 0x9F, 0xB1, 0xAB, 0xEA, 0x8B,
- 0xA8, 0x98, 0x8F, 0xBD, 0x93, 0xBB, 0xB3, 0xB0, 0x93, 0xB7, 0x8E, 0xB5, 0xEF, 0xB4, 0xAD, 0x9E,
- 0xE9, 0xB0, 0x89, 0xAA, 0x92, 0x82, 0xE9, 0xB3, 0xAD, 0x82, 0xEB, 0xEB, 0x9E, 0x9B, 0xEA, 0xAD,
- 0xAC, 0x9E, 0x9E, 0xB2, 0x89, 0xE8, 0xB8, 0x8A, 0x95, 0x83, 0x86, 0xB4, 0x99, 0xAC, 0x95, 0xB4,
- 0xE3, 0x91, 0x9C, 0xA3, 0xF1, 0xB3, 0x93, 0xB6, 0xB3, 0xEA, 0xB9, 0xB9, 0xEB, 0xF5, 0xEE, 0xB1,
- 0x98, 0x92, 0xF5, 0x9E, 0x83, 0xA9, 0x9B, 0xB2, 0xF1, 0x89, 0x8F, 0xBE, 0x80, 0xA9, 0xF5, 0xAD,
- 0xE9, 0x9D, 0xF5, 0xEA, 0x90, 0xA9, 0xAF, 0xB9, 0x8B, 0x9E, 0xEF, 0x9B, 0xBB, 0x96, 0xE9, 0xAA,
- 0xBF, 0xB2, 0xA9, 0xBC, 0xE9, 0xBE, 0x80, 0xBC, 0x88, 0xED, 0xB9, 0xAB, 0x86, 0xB4, 0xE9, 0xAB,
- 0xE2, 0x9E, 0xEC, 0xB3, 0xBB, 0xF5, 0x89, 0xB5, 0x97, 0xA8, 0x9E, 0x96, 0xAA, 0x8B, 0x99, 0x90,
- 0xB0, 0xB7, 0xED, 0xE3, 0xE2, 0xA3, 0x8F, 0xBF, 0xAC, 0xB3, 0xEE, 0x80, 0x94, 0x90, 0xAD, 0x9F,
- 0x92, 0x93, 0x95, 0x92, 0xEF, 0xBD, 0x94, 0xAC, 0xED, 0xEC, 0xBF, 0x99, 0xA2, 0xF1, 0xB4, 0x94,
- 0x90, 0x92, 0xAC, 0xB4, 0xAD, 0xEA, 0xA3, 0x91, 0x91, 0xBC, 0xAB, 0xEF, 0xE8, 0x97, 0x86, 0xB4,
- 0xB2, 0xEC, 0xBB, 0x8C, 0x88, 0x98, 0xB3, 0x9C, 0xED, 0xE9, 0x96, 0xB9, 0xAC, 0x99, 0xB7, 0x94,
- 0xAE, 0xBD, 0xBF, 0x9E, 0x90, 0xA2, 0x8A, 0x8F, 0x9B, 0xBE, 0xB8, 0x8C, 0x83, 0xBD, 0xAC, 0xED,
- 0xB8, 0xEA, 0xA0, 0xAA, 0xBD, 0xA3, 0xAA, 0xB1, 0xAA, 0xB2, 0xEA, 0xBB, 0x8D, 0x8B, 0x8A, 0xE3,
- 0xEA, 0xAE, 0xAB, 0x8A, 0x9B, 0x8D, 0xB4, 0xAA, 0xB0, 0x92, 0x8B, 0xE8, 0x8A, 0xED, 0xF5, 0xB5,
- 0x86, 0xB4, 0x8A, 0xF1, 0xA3, 0xB4, 0x91, 0x98, 0xE9, 0xBE, 0x82, 0xEC, 0x80, 0xB9, 0x9B, 0xEF,
- 0x99, 0x90, 0xEF, 0xB5, 0xEE, 0xB0, 0x82, 0x90, 0x82, 0xF5, 0xF1, 0xAC, 0x89, 0xEB, 0x92, 0x8B,
- 0x8D, 0xAF, 0x8E, 0x8F, 0xE2, 0x99, 0xB2, 0x83, 0x98, 0xA2, 0x9C, 0x98, 0xEC, 0xED, 0xBF, 0x99,
- 0x8A, 0x9E, 0xAE, 0xB8, 0xAD, 0xAE, 0x88, 0xAD, 0x96, 0xB7, 0x89, 0xEE, 0x8E, 0x8E, 0x96, 0x98,
- 0xAA, 0x82, 0x86, 0xB4, 0xBD, 0x9F, 0x8D, 0x8D, 0xE2, 0xB0, 0xBB, 0x90, 0x99, 0xB7, 0xEE, 0xA9,
- 0x83, 0x96, 0x97, 0xB7, 0xB0, 0xF5, 0xAF, 0xAD, 0xE9, 0x9B, 0xAB, 0xA8, 0x82, 0x92, 0xE9, 0x8E,
- 0x9C, 0x80, 0x9F, 0xBE, 0xBB, 0xAB, 0xB2, 0x82, 0x8E, 0xE3, 0xA9, 0xEC, 0xB3, 0xBD, 0x98, 0x96,
- 0xED, 0x8C, 0xEA, 0x94, 0xA8, 0x99, 0xE8, 0xA8, 0x93, 0xAA, 0xAB, 0xB0, 0xBD, 0xE3, 0xB8, 0xEB,
- 0x80, 0xA3, 0xB8, 0x83, 0x86, 0xB4, 0x80, 0xBB, 0xF5, 0xBD, 0x99, 0xBC, 0x8A, 0x90, 0xED, 0xE9,
- 0xA9, 0x93, 0x8F, 0xB1, 0x9C, 0xB5, 0xB6, 0xBB, 0xEB, 0x91, 0xA8, 0xEF, 0xEA, 0x89, 0xB0, 0xBB,
- 0xA8, 0xEC, 0xBB, 0x9C, 0xBC, 0x8B, 0x9E, 0xB0, 0x83, 0x99, 0xBC, 0x80, 0xBF, 0x99, 0xEC, 0xA9,
- 0xEE, 0x8C, 0xBD, 0x88, 0xEC, 0xAA, 0xEA, 0xB8, 0xA9, 0xED, 0xB0, 0xA8, 0xEC, 0xEB, 0xA0, 0xAD,
- 0xA9, 0x8A, 0x8F, 0xB6, 0x99, 0xAF, 0x86, 0xB4, 0x9B, 0x80, 0x8D, 0x9B, 0xB3, 0x97, 0xAE, 0xAA,
- 0xA0, 0x9B, 0xAB, 0xEC, 0x83, 0x90, 0x83, 0xE9, 0xB4, 0xB0, 0x82, 0x8E, 0x80, 0x8B, 0xB4, 0xB6,
- 0x9C, 0x80, 0xE8, 0xBF, 0x9B, 0xB7, 0xBD, 0xA2, 0x83, 0x9E, 0xBB, 0x99, 0x88, 0xBD, 0xB0, 0x9E,
- 0xB4, 0x80, 0xAE, 0x92, 0x8C, 0x94, 0xE2, 0xA9, 0x8C, 0xA9, 0xB9, 0xEC, 0xAC, 0x98, 0x90, 0xB2,
- 0xEC, 0x82, 0xBB, 0x88, 0xE2, 0xEE, 0xAE, 0xF1, 0x86, 0xB4, 0xB3, 0xAE, 0x9E, 0x9D, 0x90, 0xBC,
- 0xAA, 0xB7, 0xEA, 0x88, 0x82, 0x95, 0xA3, 0xE8, 0xB8, 0xB8, 0xB6, 0xB7, 0xB6, 0xBF, 0x8C, 0x8A,
- 0x98, 0x9E, 0xB8, 0x9D, 0x9E, 0xA8, 0xAF, 0x95, 0xA0, 0x94, 0x90, 0xAC, 0x98, 0xF1, 0xEA, 0x92,
- 0xEC, 0x8A, 0xB8, 0x97, 0xAB, 0x83, 0xEB, 0x88, 0x95, 0xA3, 0xEE, 0x80, 0xB9, 0x96, 0x91, 0x8C,
- 0xBC, 0xAE, 0x8B, 0xA0, 0x89, 0xB9, 0x83, 0x98, 0x8F, 0x8B, 0x86, 0xB4, 0xBE, 0x9E, 0xBE, 0x8E,
- 0xF1, 0xEE, 0xBD, 0x8A, 0xB1, 0x93, 0xAF, 0xEB, 0x83, 0xB2, 0xA0, 0x98, 0x8B, 0xB0, 0x97, 0x94,
- 0x9C, 0xF5, 0xB1, 0x8A, 0xAD, 0x8F, 0x8A, 0x9F, 0xE2, 0x8D, 0xAC, 0x8C, 0xAA, 0xBF, 0xEF, 0xB8,
- 0x8E, 0xF1, 0x8C, 0x97, 0xB0, 0xED, 0xAE, 0x93, 0x82, 0xE8, 0xAD, 0x8B, 0x93, 0x90, 0xB9, 0xBE,
- 0x94, 0x9D, 0x93, 0xAC, 0xA3, 0x99, 0x8B, 0xEF, 0xBB, 0x8D, 0xB5, 0xAB, 0x86, 0xB4, 0xBF, 0xB5,
- 0xEC, 0x8B, 0xB2, 0x8D, 0xB7, 0x94, 0xB6, 0xB9, 0xE9, 0xB1, 0xF5, 0xB1, 0xEC, 0xE9, 0x97, 0xB2,
- 0xA2, 0x88, 0x94, 0xBF, 0xEF, 0xEF, 0xB9, 0xAB, 0xEC, 0xEE, 0x8C, 0xA3, 0xA9, 0xB1, 0x9C, 0x9B,
- 0xE7, 0xE7, 0x86, 0xB4, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x9F, 0x94, 0x9E, 0xFA, 0x99, 0x9F, 0x88,
- 0x8E, 0x93, 0x9C, 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0xF7,
- 0xF7, 0xF7, 0xF7, 0xF7, 0x98, 0x9F, 0x9D, 0x93, 0x94, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C,
- 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0x97, 0x93, 0x93, 0x92,
- 0xAC, 0x8E, 0x99, 0x99, 0x98, 0xBB, 0x8D, 0xBD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0xBD, 0x93, 0x90,
- 0x9B, 0x91, 0xBC, 0x9F, 0xE3, 0xAB, 0xED, 0xB3, 0xB1, 0xAB, 0xED, 0xB7, 0x97, 0x9B, 0xEA, 0x9D,
- 0x99, 0x89, 0xAB, 0x9D, 0x89, 0x93, 0xB8, 0xE9, 0x9E, 0x8B, 0x9F, 0x98, 0x99, 0xAD, 0x8F, 0x9B,
- 0x97, 0x93, 0x9D, 0xBD, 0x97, 0x8B, 0xA9, 0xAD, 0x99, 0x8B, 0x83, 0x9E, 0x86, 0xB4, 0x8C, 0x8B,
- 0x8B, 0x9D, 0x9F, 0xAD, 0x90, 0x9E, 0x89, 0x9E, 0x9F, 0x8C, 0x97, 0x98, 0x97, 0x9D, 0x9B, 0xEB,
- 0x8F, 0x9F, 0x98, 0xAD, 0xAD, 0x97, 0x8F, 0xE8, 0x94, 0xB5, 0x83, 0x8D, 0x80, 0xB7, 0xBB, 0x9D,
- 0x9C, 0xEB, 0xB9, 0xE8, 0x8C, 0xAF, 0x97, 0x89, 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x9E, 0x8C, 0x8B,
- 0x8B, 0x91, 0x9E, 0x98, 0xAA, 0x8B, 0x8B, 0x8C, 0x90, 0x98, 0x8E, 0x9F, 0xA2, 0x9C, 0x86, 0xB4,
- 0x8E, 0x9C, 0x97, 0xBD, 0x89, 0x8C, 0x9B, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF,
- 0x80, 0xE9, 0x97, 0xBD, 0x88, 0xE8, 0xEB, 0xB3, 0x89, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D,
- 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xAD, 0xAD, 0x99, 0x89, 0x8C, 0x8B, 0xA2, 0x93, 0xA0, 0x9B, 0xB2,
- 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9D, 0xB6, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9,
- 0x86, 0xB4, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9C, 0xBF, 0x92, 0x88, 0xB6, 0xB9, 0xB7,
- 0xEF, 0xB2, 0xB8, 0x99, 0x98, 0xA3, 0xB8, 0xE8, 0xE3, 0xEA, 0x93, 0x9F, 0x94, 0x98, 0x97, 0x89,
- 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B,
- 0xB1, 0x98, 0x9C, 0xB2, 0x88, 0xB2, 0x80, 0x9D, 0xEB, 0xAA, 0xB8, 0xB4, 0x94, 0x9B, 0xB9, 0x9D,
- 0x9C, 0xA3, 0x86, 0xB4, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0x94, 0xAC,
- 0xB8, 0x8E, 0x9B, 0xBF, 0x9C, 0xAD, 0xEA, 0xA2, 0x94, 0xB0, 0x9F, 0xAD, 0x97, 0x9E, 0xB9, 0xA2,
- 0x94, 0x9E, 0x9F, 0xA3, 0x97, 0xB0, 0x8C, 0xBB, 0x9C, 0xAD, 0xEA, 0xA3, 0x95, 0x9E, 0x9F, 0xA2,
- 0x97, 0x9E, 0x83, 0xA2, 0x94, 0x9E, 0x9F, 0xA3, 0x97, 0xB0, 0x8C, 0xBB, 0x97, 0x92, 0x8B, 0xA2,
- 0x99, 0xA0, 0x9B, 0x90, 0x86, 0xB4, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x83, 0x8E, 0x9B, 0xB6,
- 0x90, 0x8C, 0x97, 0x8B, 0xE2, 0xAD, 0x9E, 0x8B, 0x83, 0x9E, 0x8C, 0x8B, 0x8B, 0x92, 0x9E, 0x9B,
- 0x80, 0x94, 0xB8, 0xE9, 0xBE, 0xB0, 0xB8, 0xE9, 0xB9, 0xA2, 0x93, 0xA0, 0x9B, 0xB2, 0x98, 0xBD,
- 0x94, 0x8C, 0x98, 0x9B, 0xB5, 0x97, 0x9D, 0xB6, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D,
- 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x90, 0x86, 0xB4, 0x8F, 0x99, 0x98, 0x93, 0xB8, 0xE8, 0xA2, 0xB1,
- 0xBB, 0x8D, 0xEF, 0xB4, 0xB9, 0xA3, 0x98, 0x92, 0xB8, 0x8D, 0x90, 0x93, 0x97, 0x8B, 0xEE, 0xAD,
- 0x9E, 0x9B, 0x83, 0x9E, 0x8C, 0x8B, 0x8B, 0x96, 0x9E, 0x9B, 0x8C, 0x9E, 0xB8, 0x9D, 0xE3, 0xEB,
- 0x80, 0x9E, 0x9F, 0xBC, 0x97, 0x98, 0xEA, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x9B, 0xAD, 0xAD, 0x8D,
- 0x8F, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xB6, 0x86, 0xB4, 0xB8, 0x92, 0x97, 0xBD, 0x89, 0x82,
- 0x94, 0xA0, 0xBE, 0x8D, 0xB6, 0xAF, 0x80, 0xA3, 0x98, 0x9E, 0x8B, 0x89, 0x9B, 0xB0, 0x97, 0x8E,
- 0x99, 0x99, 0x9B, 0xB3, 0x93, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC,
- 0xB9, 0x94, 0x9B, 0x8B, 0x9F, 0x98, 0x98, 0x8B, 0x9B, 0x9E, 0xBD, 0xBD, 0x93, 0x8A, 0x9B, 0x9E,
- 0x99, 0x99, 0x9B, 0xBD, 0xB5, 0x99, 0xBD, 0xBD, 0x93, 0x98, 0x86, 0xB4, 0x9B, 0x96, 0xB4, 0xA2,
- 0x93, 0xB9, 0x9D, 0xA9, 0xB2, 0xE3, 0xB5, 0xA0, 0xB2, 0x8F, 0x8C, 0xB8, 0xA3, 0xE2, 0xB7, 0xB6,
- 0x99, 0xB9, 0xEF, 0x82, 0x8B, 0xA2, 0x91, 0x94, 0xBC, 0x8D, 0xEC, 0xBE, 0x9D, 0x8D, 0xF5, 0x89,
- 0xB4, 0x91, 0xB8, 0xA2, 0xAA, 0xAB, 0xA8, 0x82, 0xBC, 0xAA, 0x8B, 0xEA, 0xBD, 0x94, 0x95, 0xEC,
- 0x8D, 0xB5, 0x96, 0x93, 0xF5, 0x9F, 0x95, 0x89, 0xAD, 0xB1, 0xED, 0x99, 0x86, 0xB4, 0x80, 0xB8,
- 0xB5, 0xF5, 0x91, 0xB9, 0xF5, 0xEA, 0xBB, 0xB8, 0xB7, 0xAF, 0xE8, 0xEC, 0x83, 0xBF, 0xA2, 0xB3,
- 0xB3, 0x92, 0x9F, 0xBC, 0xEA, 0x9C, 0xBE, 0xB0, 0x89, 0xF1, 0xE3, 0xA3, 0x89, 0x92, 0xAB, 0x90,
- 0x95, 0xBD, 0xBC, 0xEC, 0xB1, 0x91, 0xB9, 0xB6, 0x99, 0xE3, 0x90, 0x99, 0xEE, 0x9E, 0xA8, 0xF1,
- 0x9C, 0x9D, 0x80, 0x93, 0x89, 0x9D, 0xE3, 0x9D, 0xE8, 0xBC, 0xB1, 0xA0, 0x8E, 0xB4, 0x86, 0xB4,
- 0x94, 0xB9, 0xA9, 0xA8, 0x92, 0xB1, 0xE3, 0xB8, 0xAE, 0xB3, 0xB3, 0xEE, 0xAD, 0x9E, 0x80, 0xE3,
- 0x91, 0xB0, 0xA0, 0xF1, 0xE9, 0xE3, 0xE2, 0x99, 0xE9, 0xA3, 0xA9, 0xA2, 0x91, 0xE8, 0xEB, 0xA2,
- 0xB0, 0xB1, 0xB1, 0xF1, 0x88, 0xBF, 0xEB, 0x95, 0x82, 0xB6, 0xE2, 0x9F, 0xF1, 0x8F, 0xB2, 0xB9,
- 0xEC, 0xED, 0xB0, 0xB8, 0xA0, 0xEA, 0xF5, 0xEA, 0x8E, 0xB0, 0xBE, 0xEA, 0xBE, 0xED, 0x90, 0xA9,
- 0x86, 0xB4, 0xB0, 0x8C, 0xB0, 0xAE, 0x91, 0x80, 0xA2, 0x8B, 0xAE, 0xA9, 0xE3, 0x89, 0x8C, 0xE9,
- 0x91, 0xA0, 0xA8, 0xAF, 0xAD, 0xBC, 0x8E, 0xA3, 0xB2, 0xBD, 0xB1, 0x8D, 0xF5, 0xEE, 0x8C, 0xA2,
- 0xB7, 0x8A, 0xEE, 0x88, 0x99, 0x90, 0xAB, 0xBB, 0xEB, 0x8E, 0xBD, 0x9E, 0x96, 0x8C, 0x96, 0xE3,
- 0xE2, 0xBC, 0x80, 0xB0, 0x8E, 0x8B, 0x98, 0x9D, 0xE3, 0xB9, 0x95, 0xB0, 0xE9, 0xAE, 0x9D, 0x88,
- 0x91, 0xBE, 0x86, 0xB4, 0x80, 0xAE, 0xE9, 0x9F, 0x8C, 0xE9, 0x8B, 0xBE, 0x9E, 0x82, 0x9C, 0x8A,
- 0xEA, 0xE2, 0x89, 0xEC, 0xE8, 0x99, 0xB1, 0x97, 0x95, 0xA2, 0x8D, 0xB4, 0xF1, 0x9C, 0xBE, 0xBB,
- 0xE3, 0x98, 0x8A, 0xBD, 0xEC, 0xA0, 0xE2, 0xE9, 0xB4, 0xBF, 0xF1, 0x8E, 0xA0, 0xB7, 0x88, 0x9F,
- 0x90, 0xEE, 0xB2, 0xB6, 0xBB, 0xBC, 0xB0, 0xE8, 0xB1, 0x88, 0xBD, 0xF1, 0xEB, 0xBE, 0x91, 0xA9,
- 0x99, 0x94, 0x8F, 0xA0, 0x86, 0xB4, 0x80, 0x94, 0xF1, 0xB4, 0x92, 0x83, 0x8C, 0xB1, 0xA2, 0x94,
- 0x96, 0xB6, 0xE3, 0xB0, 0x94, 0xF5, 0xEE, 0xEB, 0xEF, 0x99, 0xBE, 0x82, 0x9B, 0x8A, 0x94, 0xBC,
- 0x8D, 0x83, 0xB5, 0xB3, 0xB8, 0xAD, 0xBF, 0x9D, 0xEA, 0x8B, 0xB0, 0x93, 0xEE, 0x96, 0xBE, 0xE9,
- 0xF5, 0xAF, 0xBF, 0xEA, 0x9E, 0x8F, 0x9F, 0xB7, 0x95, 0x83, 0xEE, 0xAE, 0xAF, 0xED, 0xB5, 0xBC,
- 0x8B, 0x95, 0x9E, 0xB4, 0x97, 0x9F, 0x86, 0xB4, 0xE8, 0x8E, 0xB2, 0x8D, 0xA8, 0x91, 0x9C, 0xE2,
- 0x92, 0x89, 0xB4, 0xA2, 0xB2, 0xE2, 0xB5, 0x9C, 0x94, 0x8E, 0x98, 0xB7, 0xE2, 0x90, 0xEF, 0x90,
- 0xB2, 0xE9, 0xAA, 0x8E, 0xAC, 0x91, 0xAD, 0xF1, 0xAE, 0x90, 0xBE, 0xAB, 0xB8, 0x9B, 0x8F, 0xB3,
- 0xE3, 0xA3, 0xB1, 0x9B, 0x94, 0xED, 0xF5, 0x97, 0xF1, 0x94, 0xAD, 0xA2, 0xB4, 0x83, 0xEF, 0xB8,
- 0xEB, 0xAD, 0xBD, 0xBE, 0xBE, 0x92, 0xBB, 0x8B, 0x86, 0xB4, 0xB1, 0xA2, 0xBB, 0xBF, 0xBE, 0xBB,
- 0xA8, 0xB4, 0xAD, 0x8B, 0xBC, 0x88, 0x93, 0x9C, 0xBB, 0x8C, 0xAC, 0x94, 0x99, 0x88, 0xB9, 0xB5,
- 0x80, 0x8C, 0x9E, 0xE3, 0xAB, 0xAE, 0xEC, 0xAC, 0xF5, 0xB0, 0xB4, 0x93, 0xE2, 0xA2, 0x9F, 0x8E,
- 0xA2, 0xBC, 0x95, 0xB0, 0xBE, 0xEC, 0x8D, 0x95, 0xBC, 0xBD, 0xE9, 0xEE, 0x80, 0xAB, 0xBE, 0xA3,
- 0x82, 0x96, 0x82, 0xEE, 0xAE, 0xAE, 0xAB, 0x91, 0xEA, 0x97, 0x86, 0xB4, 0x9F, 0xBD, 0x93, 0xE8,
- 0x92, 0xA2, 0xAD, 0x88, 0xB2, 0x8D, 0x9B, 0xAC, 0x92, 0xB6, 0xEF, 0xB5, 0x88, 0xED, 0x92, 0x89,
- 0xE3, 0xBD, 0x99, 0xA2, 0x97, 0x83, 0xEF, 0x90, 0xAC, 0x8A, 0x8B, 0xE2, 0x89, 0xF1, 0xBB, 0xAF,
- 0xEB, 0x82, 0x89, 0xF5, 0xA2, 0xAD, 0xF5, 0x96, 0xEE, 0x95, 0x90, 0x8C, 0x83, 0x8E, 0xA8, 0x95,
- 0x8C, 0x8D, 0xAF, 0xAC, 0xA0, 0x92, 0xEF, 0xEA, 0x94, 0xA9, 0xA8, 0x92, 0x86, 0xB4, 0xB7, 0xB9,
- 0x88, 0xEE, 0x94, 0xEC, 0x9E, 0xEF, 0xF1, 0x9F, 0x83, 0x89, 0xA8, 0xA3, 0xAF, 0x96, 0xB2, 0x96,
- 0xF1, 0x94, 0xAF, 0xB0, 0xF5, 0x9C, 0x8F, 0xE9, 0xED, 0xF1, 0xA0, 0xB8, 0x91, 0xB9, 0x80, 0x91,
- 0x9E, 0xEB, 0xAB, 0x93, 0x92, 0x97, 0xB4, 0xE9, 0xBC, 0xB8, 0xBC, 0xB5, 0xA3, 0xA9, 0xAA, 0x9C,
- 0xE9, 0xED, 0x91, 0x98, 0xB1, 0xB8, 0xBD, 0xBC, 0xE2, 0x91, 0xF1, 0xEB, 0x99, 0xAB, 0x86, 0xB4,
- 0x96, 0xB9, 0xE8, 0x8F, 0x8F, 0xA9, 0x89, 0xB7, 0x80, 0x96, 0x9E, 0xB4, 0x88, 0xF1, 0xB0, 0x9E,
- 0xEA, 0x8E, 0xE2, 0xA0, 0x9F, 0xA3, 0x98, 0x8E, 0x88, 0xEB, 0xBB, 0xE3, 0xB3, 0x99, 0x9B, 0x9B,
- 0xA3, 0xE2, 0xAC, 0xEF, 0xEA, 0x95, 0xB1, 0xF1, 0x93, 0x90, 0x92, 0x80, 0x9B, 0xBD, 0x97, 0x98,
- 0x9B, 0x9B, 0x9D, 0xB0, 0xBD, 0xBD, 0x93, 0xB0, 0x97, 0x93, 0x93, 0x99, 0x92, 0xA0, 0x9B, 0x8A,
- 0x86, 0xB4, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x88, 0x97, 0x98, 0x9B, 0xBC, 0xE2, 0x9F, 0x98, 0x8E,
- 0x9B, 0x9E, 0x9B, 0x8B, 0x92, 0xF5, 0x97, 0x9B, 0xE2, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, 0x90, 0x9B,
- 0x9F, 0x98, 0xF5, 0xAD, 0x8B, 0x9C, 0x97, 0x9B, 0x95, 0x9B, 0x9B, 0x8B, 0x9B, 0xAD, 0x99, 0xBD,
- 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0xE8, 0x98, 0x9B, 0x97, 0x99, 0x9B, 0x8B, 0x9B, 0xAD, 0x9E, 0xBD,
- 0x83, 0x9E, 0x86, 0xB4, 0x8C, 0x88, 0xEA, 0x8A, 0x9B, 0x8B, 0x92, 0xF5, 0x98, 0x9B, 0x8B, 0x9E,
- 0x9B, 0xBD, 0x9F, 0x9D, 0x97, 0x98, 0xEA, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, 0x9E, 0xBD, 0x8B, 0x8D,
- 0x98, 0x98, 0x8B, 0xED, 0xB1, 0xA2, 0x92, 0xED, 0x92, 0xF1, 0xBC, 0x88, 0xBC, 0xB1, 0xBD, 0xA9,
- 0x95, 0xEF, 0xA9, 0x8F, 0x8A, 0x89, 0xAB, 0xB6, 0x8E, 0xEE, 0x8A, 0xE3, 0x89, 0xB0, 0x9B, 0xBC,
- 0x98, 0xBD, 0x94, 0x8C, 0x86, 0xB4, 0x92, 0x89, 0x97, 0x9F, 0x9D, 0x9E, 0x9B, 0x8D, 0xBD, 0x98,
- 0x8B, 0xEF, 0x8A, 0x95, 0xB9, 0xBE, 0xB3, 0x8E, 0xAE, 0xA3, 0xEF, 0xF5, 0xB8, 0xBB, 0xEC, 0xA3,
- 0xA3, 0x9C, 0xEB, 0x96, 0x83, 0x97, 0x88, 0xAB, 0xB6, 0x9B, 0x9F, 0x8E, 0x9B, 0xF5, 0x98, 0xBD,
- 0xBD, 0xA8, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B, 0xB9, 0x98, 0x9B, 0x8B, 0x8B, 0xA0, 0x97, 0x9E,
- 0x9F, 0xAD, 0x96, 0xAD, 0x83, 0x93, 0x86, 0xB4, 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92,
- 0x97, 0x9B, 0x91, 0x9D, 0x93, 0xE8, 0xB2, 0xEA, 0xBE, 0x92, 0x9B, 0xEC, 0x96, 0xA3, 0xE3, 0xB0,
- 0x83, 0x89, 0xEF, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xAF,
- 0xB8, 0xB7, 0x8C, 0xEA, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xE9, 0x90, 0xAC, 0xB8, 0xE9, 0x8B, 0xAF,
- 0xB9, 0x9D, 0x8C, 0xAE, 0x97, 0x9E, 0xB9, 0x9D, 0x86, 0xB4, 0x9B, 0xEB, 0x8F, 0xBE, 0x92, 0xAD,
- 0x8B, 0xAD, 0x97, 0x99, 0xEE, 0xAD, 0x96, 0x91, 0x9B, 0xAB, 0xB5, 0x99, 0xB3, 0x9D, 0x90, 0xB7,
- 0xB2, 0xEA, 0xBE, 0x92, 0x9B, 0xEC, 0x96, 0xA3, 0xE3, 0xB0, 0x83, 0x89, 0xEF, 0xAD, 0x83, 0x82,
- 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xAF, 0xB8, 0xB7, 0x8C, 0xEA, 0x96, 0xE8,
- 0x94, 0xB2, 0x96, 0xE9, 0x90, 0xAC, 0xB8, 0xE9, 0x88, 0xBC, 0x86, 0xB4, 0x83, 0xE8, 0x9F, 0xAF,
- 0x83, 0xE9, 0x90, 0xA9, 0x97, 0x93, 0x93, 0x98, 0x93, 0xAD, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0xBD,
- 0x98, 0x93, 0x93, 0x98, 0x9D, 0xB0, 0x99, 0x99, 0x9B, 0x88, 0x83, 0xAD, 0xBD, 0xBB, 0xEA, 0x9D,
- 0x9E, 0xB3, 0xA9, 0x9D, 0x9B, 0x8B, 0x8B, 0x98, 0xBD, 0xB9, 0xAD, 0xED, 0xBD, 0xE9, 0xEA, 0x99,
- 0x9B, 0xBD, 0x9F, 0x98, 0x97, 0x93, 0x9D, 0xBB, 0x97, 0x9E, 0xB1, 0x9D, 0x86, 0xB4, 0x99, 0x99,
- 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x93, 0x98, 0x9C, 0xB3, 0xEB, 0xB5, 0xBE, 0x92,
- 0x88, 0xAD, 0x95, 0xB3, 0xE2, 0xAC, 0x83, 0xE8, 0x9F, 0xAF, 0xB9, 0x9D, 0x9C, 0xA3, 0x83, 0x8D,
- 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0xEF, 0xB6, 0xBE, 0x99, 0xE3, 0xB0, 0x83, 0x89,
- 0xE3, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x94, 0xBC, 0x86, 0xB4,
- 0x83, 0xE9, 0x98, 0xA0, 0x96, 0xB7, 0xB2, 0xEA, 0xB8, 0x8D, 0xAD, 0xAD, 0x82, 0x8B, 0x83, 0x93,
- 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92, 0x9B, 0xBD, 0x93, 0xAD, 0x8F, 0x8E, 0x9B, 0xBC,
- 0x9D, 0xB2, 0xB2, 0x8B, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xBD,
- 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF, 0x80, 0xE9, 0x97, 0xA9, 0x93, 0x9D, 0xA2, 0xEA,
- 0x86, 0xB4, 0x80, 0x99, 0xEE, 0xAD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0x88, 0xB5, 0xAF, 0x88, 0x82,
- 0xB2, 0xEA, 0x80, 0x82, 0x90, 0xAF, 0x83, 0x8D, 0xAD, 0xBD, 0x8B, 0xB7, 0x9C, 0xA0, 0xBB, 0x8D,
- 0x97, 0xBD, 0x8B, 0xE8, 0x8C, 0xA3, 0xBE, 0x9D, 0xB6, 0xB7, 0xBB, 0x8D, 0x94, 0xB2, 0xBE, 0x9D,
- 0xE3, 0xAF, 0x93, 0x9C, 0x98, 0xA3, 0x83, 0x8D, 0x94, 0xEA, 0xBB, 0x8D, 0x94, 0xB6, 0x93, 0x9C,
- 0x94, 0xEA, 0x86, 0xB4, 0x83, 0x82, 0x88, 0xB6, 0xB8, 0x8D, 0x8C, 0xAF, 0xBE, 0x9E, 0x98, 0xB1,
- 0x98, 0xBD, 0xEE, 0xA8, 0x98, 0xBD, 0x9F, 0x9F, 0x9B, 0x83, 0x92, 0x97, 0x95, 0xEE, 0x94, 0xE3,
- 0x9B, 0xBD, 0x93, 0x98, 0x9B, 0xB0, 0x98, 0x89, 0x97, 0x9C, 0x9B, 0x9D, 0x99, 0x99, 0xA9, 0x9D,
- 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x93, 0x99, 0x97, 0x9F, 0x8B, 0xAD, 0x92, 0xA2, 0xB5, 0x83,
- 0x8F, 0x9D, 0x9C, 0xA3, 0x86, 0xB4, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F,
- 0xB2, 0xAC, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x96, 0x99, 0x98, 0xA9, 0xBE, 0x9D,
- 0x8B, 0xAF, 0x97, 0x9B, 0x97, 0x99, 0x9B, 0x8B, 0x9F, 0xBB, 0x93, 0x8F, 0x8C, 0xEE, 0xBE, 0x9D,
- 0x8C, 0xA3, 0xB8, 0xB7, 0x9C, 0xA9, 0x93, 0x9F, 0x90, 0xB2, 0xB9, 0xE8, 0xB6, 0xB0, 0x93, 0x9F,
- 0x94, 0xB6, 0xB9, 0xB4, 0x88, 0xAA, 0x86, 0xB4, 0x80, 0xB7, 0xB6, 0xB0, 0x83, 0x82, 0x88, 0xB6,
- 0x93, 0x9C, 0x98, 0xAC, 0xB8, 0x9D, 0xB6, 0xB0, 0xBF, 0x8E, 0x9B, 0x94, 0x98, 0xBD, 0xB1, 0xAB,
- 0xB2, 0xB1, 0xB3, 0x9D, 0xE3, 0xAD, 0xEA, 0x98, 0x9B, 0x8B, 0xA9, 0x9C, 0x9B, 0x9B, 0x95, 0x99,
- 0x9B, 0xBD, 0x9F, 0x9B, 0xB0, 0x99, 0xBE, 0x9C, 0xB8, 0x8D, 0xB4, 0xBE, 0xA0, 0x9D, 0xB4, 0xAF,
- 0xAD, 0xAA, 0xE2, 0xB7, 0xA8, 0xA3, 0xF5, 0xA3, 0x86, 0xB4, 0xB1, 0x95, 0x89, 0x95, 0xEB, 0xEF,
- 0x94, 0xA3, 0x8F, 0xBC, 0xAF, 0xB2, 0x89, 0xAB, 0x80, 0xEE, 0xB3, 0x89, 0x88, 0xEC, 0xAE, 0xB7,
- 0xA3, 0x8D, 0xA8, 0xB5, 0xE2, 0x88, 0x92, 0xBB, 0xA8, 0xE3, 0xEE, 0xE3, 0xA2, 0xA0, 0x8D, 0xA0,
- 0xAF, 0x9C, 0xBE, 0xF1, 0xB1, 0xA2, 0xE3, 0xEB, 0x96, 0x93, 0x92, 0xEA, 0x90, 0x9B, 0xB5, 0xEC,
- 0xB0, 0xED, 0x98, 0x80, 0x90, 0xBB, 0xE3, 0x80, 0xBB, 0xF5, 0x86, 0xB4, 0x9C, 0x9C, 0x9E, 0xEA,
- 0xE3, 0xB7, 0x8D, 0x96, 0xEE, 0xAD, 0xED, 0x90, 0xBE, 0xE9, 0xB9, 0xBE, 0xAA, 0x93, 0x9B, 0xA8,
- 0x92, 0x89, 0xF1, 0xA2, 0xBB, 0x92, 0x8C, 0xAC, 0x92, 0x92, 0xA2, 0xB9, 0xE3, 0x91, 0xA0, 0xF1,
- 0xBE, 0xE9, 0xA3, 0x9B, 0xB4, 0xA2, 0x97, 0xB4, 0x95, 0x80, 0xB9, 0xB4, 0xB9, 0xAB, 0xB0, 0x8A,
- 0x82, 0x9B, 0xA2, 0xA0, 0xB8, 0xE8, 0xB2, 0x9B, 0x8A, 0xEC, 0xEE, 0xAD, 0x86, 0xB4, 0xAD, 0x8A,
- 0x9D, 0x83, 0x98, 0xA8, 0xB5, 0xEC, 0xBD, 0x83, 0xBE, 0xAC, 0xBD, 0x8E, 0x94, 0x93, 0xA9, 0xE9,
- 0x92, 0x80, 0x9F, 0xB1, 0xBB, 0xB8, 0x94, 0xE8, 0xBF, 0x98, 0xB8, 0x9C, 0x9D, 0xBC, 0xAF, 0x97,
- 0xE8, 0xE9, 0x99, 0x99, 0x94, 0x93, 0x99, 0x9F, 0xB8, 0xEB, 0x83, 0xB0, 0x80, 0x9D, 0x8C, 0xAC,
- 0xEE, 0x96, 0x88, 0xAD, 0x98, 0xAD, 0xBD, 0xA9, 0x89, 0xB3, 0xEE, 0xB5, 0xAF, 0xEF, 0x86, 0xB4,
- 0x8C, 0x88, 0xBE, 0xED, 0xA0, 0x94, 0x90, 0xEA, 0xB5, 0x8B, 0xB4, 0x89, 0x89, 0xA2, 0xB6, 0xE9,
- 0x8C, 0xBE, 0x97, 0x83, 0xB8, 0xB6, 0xF5, 0x9B, 0xEE, 0xE2, 0x92, 0x89, 0xE3, 0xBE, 0x9B, 0xB0,
- 0x89, 0xB1, 0xBD, 0xB3, 0xB4, 0x8B, 0xB0, 0xA9, 0xBC, 0xED, 0xBD, 0xBF, 0x99, 0xAB, 0x91, 0xEE,
- 0xAF, 0x9E, 0xAC, 0x8C, 0xA9, 0x80, 0xBC, 0xB8, 0x8F, 0xAE, 0xEC, 0x9B, 0xE9, 0x95, 0x8E, 0xA3,
- 0x86, 0xB4, 0xB7, 0xBF, 0xB6, 0x91, 0xE2, 0x8B, 0x9B, 0x8C, 0xB1, 0xE9, 0x82, 0x9E, 0x9B, 0x9D,
- 0xB5, 0xB7, 0x99, 0x9E, 0x9E, 0x80, 0xB0, 0x89, 0x95, 0xB7, 0xA0, 0xB6, 0xAD, 0xB0, 0x9D, 0xB0,
- 0xAD, 0xAF, 0x98, 0x94, 0x82, 0x8F, 0x97, 0xAA, 0xEC, 0x98, 0xAA, 0xA3, 0x9E, 0xAC, 0xEC, 0xB5,
- 0x8E, 0x8E, 0xF1, 0xB5, 0xB1, 0x9B, 0xB7, 0x8B, 0xBD, 0xBB, 0xEB, 0xBD, 0x92, 0xB9, 0xA8, 0x97,
- 0xB4, 0xBF, 0x86, 0xB4, 0x8F, 0xB5, 0xE9, 0xEE, 0xA3, 0x91, 0xEF, 0xBC, 0xE3, 0x93, 0xB5, 0xF1,
- 0xAA, 0xE8, 0xBB, 0x8A, 0x96, 0x80, 0x8D, 0x8E, 0xEB, 0x92, 0x92, 0xB3, 0xB0, 0x92, 0x92, 0x8A,
- 0x8C, 0xEC, 0xA8, 0x8F, 0xBF, 0xBE, 0x9C, 0xE3, 0x88, 0x8C, 0xB1, 0xAF, 0xB4, 0x96, 0x9E, 0x9D,
- 0x95, 0xB9, 0x97, 0x8B, 0xB6, 0x95, 0x99, 0xB9, 0x82, 0x9B, 0xB1, 0x8D, 0x9E, 0x8F, 0xBB, 0xB1,
- 0x8C, 0xE3, 0xA3, 0x89, 0x86, 0xB4, 0x99, 0xB9, 0xAC, 0x8C, 0xB2, 0xB8, 0xB2, 0x9B, 0xBF, 0xBD,
- 0xB8, 0x80, 0xA2, 0x8C, 0x9D, 0x8F, 0xA2, 0xB3, 0xAF, 0x9C, 0x83, 0x8A, 0x9B, 0xB2, 0xBE, 0x89,
- 0x90, 0xAD, 0x97, 0xB9, 0xEE, 0xB0, 0xAD, 0x8A, 0x90, 0xE8, 0x8A, 0xEC, 0xB0, 0xBB, 0xAC, 0xBC,
- 0x99, 0xBC, 0x89, 0x96, 0xEE, 0x94, 0xBC, 0xBC, 0xAF, 0x91, 0xE3, 0x96, 0xF5, 0xB3, 0xB3, 0xA8,
- 0x80, 0xBD, 0xB4, 0xBD, 0xEB, 0x99, 0x86, 0xB4, 0xF5, 0x91, 0xAF, 0xB0, 0xEC, 0x9F, 0xE2, 0x9F,
- 0xA3, 0x9B, 0x95, 0xED, 0xB1, 0xEB, 0x94, 0x89, 0x97, 0x95, 0x9E, 0x9D, 0xEF, 0x96, 0x98, 0xEB,
- 0x8C, 0xBD, 0xEF, 0x8B, 0x97, 0xAE, 0x8E, 0xB9, 0xAA, 0xA3, 0x89, 0x8A, 0x8D, 0xB0, 0x83, 0xEA,
- 0xA2, 0xAF, 0xA9, 0xE3, 0xB2, 0xB8, 0x8F, 0x88, 0x8C, 0xE3, 0x91, 0xA8, 0xBE, 0xBE, 0x97, 0xB4,
- 0x93, 0x8C, 0xB4, 0xB7, 0xA8, 0xEC, 0x82, 0xB5, 0x86, 0xB4, 0x9B, 0xEE, 0xE2, 0xBC, 0xB6, 0xA2,
- 0xE9, 0x89, 0x83, 0xAB, 0x82, 0xF5, 0x98, 0x93, 0xB1, 0xB2, 0xEF, 0xAE, 0xA9, 0xF1, 0x9D, 0xE8,
- 0x95, 0xEA, 0xAF, 0xBC, 0x88, 0xB2, 0xB7, 0xE8, 0x82, 0x93, 0xA8, 0xB1, 0xE2, 0x8F, 0xF1, 0xF1,
- 0xB9, 0xF1, 0x82, 0x96, 0xAD, 0x98, 0xAA, 0x8A, 0x93, 0x95, 0x94, 0xB5, 0xB8, 0xE3, 0xE2, 0xBF,
- 0xA2, 0x83, 0x91, 0x9C, 0xEA, 0x93, 0xB1, 0xB0, 0xA8, 0xAE, 0x86, 0xB4, 0xAB, 0xAE, 0x93, 0x97,
- 0xB0, 0x94, 0x9F, 0xA2, 0x9F, 0x8B, 0xE3, 0x88, 0x90, 0xBF, 0xAE, 0xB1, 0xB1, 0xB7, 0x83, 0xF1,
- 0x80, 0x8E, 0xE8, 0xB8, 0x80, 0x96, 0xA8, 0xB5, 0x9E, 0xBC, 0x9D, 0xB3, 0x82, 0x93, 0xA0, 0xAE,
- 0xA2, 0x8B, 0xAC, 0xB9, 0xAF, 0xA0, 0xE8, 0x95, 0xBC, 0xB2, 0xEE, 0xB4, 0x96, 0xEA, 0xEC, 0x97,
- 0x95, 0x8D, 0x92, 0x89, 0xBC, 0xF5, 0x9B, 0x8C, 0xBD, 0x8D, 0xB9, 0x91, 0x86, 0xB4, 0x99, 0xB7,
- 0xAA, 0x8D, 0xAB, 0xBE, 0x9D, 0x82, 0xB0, 0xA3, 0xAD, 0xA0, 0x97, 0x8E, 0x96, 0xAA, 0x94, 0xA0,
- 0xB2, 0xAA, 0xB4, 0xF5, 0x97, 0xE7, 0x86, 0xB4, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x9F, 0x94, 0x9E,
- 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7,
- 0xF7, 0x86, 0xB4, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x98, 0x9F, 0x9D, 0x93, 0x94, 0xFA, 0x99, 0x9F,
- 0x88, 0x8E, 0x93, 0x9C, 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4,
- 0x97, 0x93, 0x93, 0x92, 0xA0, 0x8E, 0x99, 0x99, 0x98, 0xB8, 0x8D, 0xBD, 0x9B, 0xAD, 0x93, 0x98,
- 0x9B, 0xBD, 0x93, 0x90, 0x9B, 0x91, 0x9D, 0xEA, 0xAE, 0xAC, 0xBB, 0xB3, 0x97, 0xA9, 0xB6, 0xF1,
- 0x97, 0x9B, 0xEA, 0x9D, 0x99, 0x89, 0xAB, 0x9D, 0x89, 0x93, 0xB8, 0xE9, 0x9E, 0x8B, 0x9F, 0x98,
- 0x99, 0xAD, 0x8F, 0x9B, 0x97, 0x93, 0x9D, 0xBD, 0x97, 0x8B, 0xA9, 0xAD, 0x99, 0x8B, 0x83, 0x9E,
- 0x86, 0xB4, 0x8C, 0x8B, 0x8B, 0x9D, 0x9F, 0xAD, 0x90, 0x9E, 0x89, 0x9E, 0x9F, 0x8C, 0x97, 0x98,
- 0x97, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x98, 0xAD, 0xAD, 0x97, 0x8F, 0xE8, 0x94, 0xB5, 0x83, 0x8D,
- 0x80, 0xB7, 0xBB, 0x9D, 0x9C, 0xEB, 0xB9, 0xE8, 0x8C, 0xAF, 0x97, 0x89, 0x97, 0xAD, 0x93, 0x8B,
- 0x83, 0x9E, 0x8C, 0x8B, 0x8B, 0x91, 0x9E, 0x98, 0xAA, 0x8B, 0x8B, 0x8C, 0x90, 0x98, 0x8E, 0x9F,
- 0xA2, 0x9C, 0x86, 0xB4, 0x8E, 0x9C, 0x97, 0xBD, 0x89, 0x8C, 0x9B, 0xBD, 0x89, 0x9D, 0xE3, 0xA9,
- 0x80, 0x9D, 0xB6, 0xAF, 0x80, 0xE9, 0x97, 0xBD, 0x88, 0xE8, 0xEB, 0xB3, 0x89, 0x9E, 0x9F, 0x96,
- 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xAD, 0xAD, 0x99, 0x89, 0x8C, 0x8B, 0xA2,
- 0x93, 0xA0, 0x9B, 0xB2, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9D, 0xB6, 0x98, 0xB2,
- 0xB9, 0xB7, 0x9C, 0xA9, 0x86, 0xB4, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9C, 0xBF, 0x92,
- 0x88, 0xB6, 0xB9, 0xB7, 0xEF, 0xB2, 0xB8, 0x99, 0x98, 0xA3, 0xB8, 0xE8, 0xE3, 0xEA, 0x93, 0x9F,
- 0x94, 0x98, 0x97, 0x89, 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC,
- 0xB9, 0x94, 0x9B, 0x8B, 0xB1, 0x98, 0x9C, 0xB2, 0x88, 0xB2, 0x80, 0x9D, 0xEB, 0xAA, 0xB8, 0xB4,
- 0x94, 0x9B, 0xB9, 0x9D, 0x9C, 0xA3, 0x86, 0xB4, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0,
- 0x96, 0xB7, 0x94, 0xAC, 0xB8, 0x8E, 0x9B, 0xBF, 0x9C, 0xAD, 0xEA, 0xA2, 0x97, 0xA0, 0x9B, 0xE9,
- 0x97, 0x8E, 0x83, 0xA2, 0x94, 0x9E, 0x8F, 0xEA, 0x97, 0xB0, 0x88, 0xBB, 0x9C, 0xAD, 0xEA, 0xA3,
- 0x95, 0x9E, 0x9B, 0xE9, 0x97, 0x8E, 0x93, 0xA2, 0x94, 0x9E, 0x8F, 0xEA, 0x97, 0xB0, 0x88, 0xBB,
- 0x97, 0x93, 0x9D, 0xBD, 0x97, 0x8B, 0xA9, 0xAD, 0x86, 0xB4, 0x99, 0x8B, 0x83, 0x9E, 0x8C, 0x8B,
- 0x8B, 0x9D, 0x9F, 0xAD, 0x90, 0x9E, 0x89, 0x9E, 0x9F, 0x8C, 0x97, 0x98, 0x97, 0x9D, 0x9B, 0xEB,
- 0x8F, 0x9F, 0x98, 0xAD, 0xAD, 0x97, 0x8F, 0xE8, 0x94, 0xB5, 0x83, 0x8D, 0x80, 0xB7, 0xBB, 0x9D,
- 0x9C, 0xEB, 0xB9, 0xE8, 0x8C, 0xAF, 0x97, 0x89, 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x9E, 0x8C, 0x8B,
- 0x8B, 0x91, 0x9E, 0x98, 0xAA, 0x8B, 0x8B, 0x8C, 0x90, 0x98, 0x86, 0xB4, 0x8E, 0x9F, 0xA2, 0x9C,
- 0x8E, 0x9C, 0x97, 0xBD, 0x89, 0x8C, 0x9B, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF,
- 0x80, 0xE9, 0x97, 0xBD, 0x88, 0xE8, 0xEB, 0xB3, 0x89, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D,
- 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xAD, 0xAD, 0x99, 0x89, 0x8C, 0x8B, 0xA2, 0x93, 0xA0, 0x9B, 0xB2,
- 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9D, 0xB6, 0x98, 0xB2, 0x86, 0xB4, 0xB9, 0xB7,
- 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9C, 0xBF, 0x92, 0x88, 0xB6, 0xB9, 0xB7,
- 0xEF, 0xB2, 0xB8, 0x99, 0x98, 0xA3, 0xB8, 0xE8, 0xE3, 0xEA, 0x93, 0x9F, 0x94, 0x98, 0x97, 0x89,
- 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B,
- 0xB1, 0x98, 0x9C, 0xB2, 0x88, 0xB2, 0x80, 0x9D, 0xEB, 0xAA, 0xB8, 0xB4, 0x94, 0x9B, 0x86, 0xB4,
- 0xB9, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0x94, 0xAC,
- 0xB8, 0x8E, 0x99, 0x99, 0x9B, 0xB3, 0x93, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93,
- 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B, 0x9F, 0x98, 0x98, 0x8B, 0x9B, 0x9E, 0xBD, 0xBD, 0x93, 0x8A,
- 0x9B, 0x9E, 0x99, 0x99, 0x9B, 0xBD, 0xB5, 0x99, 0xBD, 0xBD, 0x93, 0x98, 0x9B, 0x94, 0x8A, 0x9C,
- 0x86, 0xB4, 0x8E, 0x91, 0x88, 0xE8, 0xAC, 0xB3, 0xAF, 0xEA, 0xB7, 0xA0, 0x91, 0x9F, 0xEF, 0xA9,
- 0x9D, 0xBB, 0x97, 0xB9, 0x96, 0x93, 0xEC, 0x95, 0xA0, 0x90, 0x88, 0xEA, 0x8A, 0xB0, 0xEF, 0x96,
- 0xAB, 0x9C, 0x8A, 0xE9, 0x9F, 0xA9, 0xB7, 0x9D, 0x8D, 0x8F, 0x8B, 0xB0, 0xB5, 0x99, 0xB8, 0x94,
- 0xAF, 0x9F, 0x9D, 0x80, 0xB7, 0xA0, 0xB0, 0xF5, 0xAA, 0xA3, 0xE8, 0xB5, 0xE9, 0x8C, 0x9D, 0xAB,
- 0xEB, 0xE2, 0x86, 0xB4, 0xEC, 0x8F, 0x95, 0x8F, 0x9C, 0x8A, 0xE2, 0xE2, 0x83, 0x94, 0xE9, 0xED,
- 0x93, 0x9F, 0x82, 0x8F, 0xBC, 0x8B, 0x82, 0xB1, 0xBC, 0x97, 0xF5, 0x83, 0xE3, 0x97, 0xED, 0xB7,
- 0xA3, 0xEE, 0xE3, 0x9E, 0xEE, 0xE3, 0x9B, 0xB8, 0x9E, 0xB8, 0xB8, 0xB8, 0x9F, 0x90, 0x9E, 0xA9,
- 0xA8, 0xB8, 0xA2, 0xEF, 0x83, 0x97, 0xF1, 0xB0, 0x8D, 0xB8, 0x95, 0xB4, 0x83, 0xE9, 0x9B, 0xBC,
- 0xAF, 0x8D, 0xAF, 0x8A, 0x86, 0xB4, 0xBC, 0xAE, 0xA2, 0xB8, 0xE2, 0xB4, 0x9E, 0x93, 0xAC, 0x8F,
- 0xB5, 0xE9, 0xEA, 0x98, 0x94, 0xAD, 0x93, 0xE2, 0xE2, 0x95, 0x8F, 0x9D, 0xB9, 0xAE, 0xE8, 0xA3,
- 0xAA, 0xAE, 0x97, 0x83, 0xBD, 0xA0, 0xEF, 0xA3, 0x94, 0xA2, 0xA2, 0xB8, 0xA8, 0xB0, 0xBE, 0xBE,
- 0x91, 0xAB, 0x8C, 0x93, 0xEA, 0xAA, 0xEB, 0xB3, 0xB9, 0xF1, 0x97, 0xE9, 0x92, 0xA0, 0x8E, 0x90,
- 0xB3, 0xAF, 0xAF, 0xAB, 0xBF, 0x92, 0x86, 0xB4, 0xBC, 0x8F, 0x89, 0xE3, 0xF1, 0xE9, 0x83, 0xA9,
- 0x97, 0xB1, 0x90, 0x99, 0x9C, 0x8B, 0xEE, 0xF1, 0xA9, 0xE3, 0x96, 0xA0, 0xB6, 0xED, 0xAE, 0xF5,
- 0x93, 0xEC, 0xA0, 0xB6, 0xBE, 0xAD, 0x99, 0xAB, 0x8F, 0xB3, 0xB9, 0x8C, 0xB0, 0x83, 0x91, 0xEA,
- 0xA0, 0x9E, 0xA2, 0xE9, 0xB8, 0xED, 0xEE, 0xB3, 0x80, 0x97, 0x8A, 0xEA, 0x91, 0x9E, 0x80, 0x99,
- 0xAA, 0xEE, 0xB7, 0xB8, 0xAC, 0xBE, 0xED, 0xBE, 0x86, 0xB4, 0xE3, 0xE8, 0xAB, 0x88, 0x80, 0x91,
- 0x88, 0xEA, 0xA2, 0x89, 0xEA, 0x9B, 0xB3, 0x90, 0xBE, 0xB1, 0xE2, 0xEE, 0xED, 0xEE, 0xB3, 0xA2,
- 0xEC, 0xE9, 0xAC, 0x95, 0x80, 0xA9, 0xA2, 0xAC, 0xEE, 0x90, 0xB7, 0xAF, 0xB4, 0x8F, 0xAB, 0xBC,
- 0xEB, 0xF1, 0xA9, 0x9D, 0xA9, 0xBF, 0x80, 0xBD, 0xBD, 0x9C, 0x83, 0xEB, 0x8A, 0xAB, 0xB0, 0xBC,
- 0xB3, 0x8E, 0xB4, 0xE3, 0xE2, 0xAB, 0x95, 0xB7, 0x92, 0xB6, 0x86, 0xB4, 0xBE, 0x82, 0xBE, 0x90,
- 0xB7, 0xB0, 0x9D, 0x96, 0xEE, 0xBB, 0x95, 0x8D, 0xF5, 0xEF, 0xB7, 0xAC, 0xBC, 0x8B, 0xB3, 0x93,
- 0x91, 0xAE, 0xF1, 0xE2, 0x83, 0xB8, 0xA8, 0x9F, 0xEA, 0x98, 0x80, 0xAE, 0xAE, 0xB2, 0xA9, 0x8A,
- 0x9D, 0x96, 0xEB, 0xBE, 0xB6, 0xEA, 0x98, 0x8F, 0xA8, 0xE2, 0x9C, 0x9C, 0xB0, 0xA0, 0xA9, 0xEB,
- 0xEC, 0x9D, 0xA2, 0x97, 0xEC, 0x8F, 0xEB, 0xED, 0xAB, 0xA3, 0xE8, 0x96, 0x86, 0xB4, 0xAD, 0xEB,
- 0x89, 0x8B, 0xAE, 0x80, 0xBB, 0xB7, 0xF5, 0xB9, 0x8A, 0xE2, 0xBB, 0xB9, 0xEB, 0xAD, 0x96, 0x9E,
- 0xB4, 0x91, 0xF1, 0xA3, 0x80, 0xBB, 0x95, 0x9B, 0x9C, 0xA8, 0xE2, 0xEB, 0x82, 0x83, 0xBB, 0x98,
- 0xA8, 0xAB, 0xEF, 0xAE, 0xBF, 0xA0, 0x99, 0xEB, 0xB8, 0x99, 0xE8, 0xB2, 0x91, 0xEF, 0xBF, 0x83,
- 0xBC, 0x97, 0xB9, 0xEC, 0x97, 0xB6, 0xED, 0xAF, 0x92, 0xB1, 0x9D, 0xF5, 0x96, 0xF1, 0x86, 0xB4,
- 0x8B, 0xB6, 0xEE, 0x8E, 0x8C, 0xBB, 0xB1, 0x8F, 0xB2, 0x96, 0xA9, 0xBB, 0xA3, 0x9B, 0x8E, 0xAB,
- 0xAC, 0x9D, 0xE2, 0xAC, 0xBC, 0xAF, 0xB3, 0xED, 0xB3, 0x95, 0xEF, 0xB3, 0x98, 0xEC, 0xB2, 0xF1,
- 0xB1, 0xEF, 0xED, 0xE9, 0x9F, 0x8A, 0xB6, 0xB4, 0x8A, 0xEB, 0x98, 0xBC, 0xBB, 0x9F, 0xA9, 0xA3,
- 0x9E, 0xEB, 0xA0, 0x9D, 0xBC, 0xB2, 0xEC, 0xA3, 0x96, 0x9E, 0xEB, 0xAE, 0xA0, 0xED, 0xBB, 0xB4,
- 0x86, 0xB4, 0xBE, 0xEF, 0xE9, 0xB7, 0xA2, 0x9F, 0x9B, 0xA3, 0x9E, 0xB9, 0xB8, 0x99, 0xA0, 0xA0,
- 0x94, 0xB1, 0xA9, 0x9F, 0x8C, 0x89, 0xB8, 0xF5, 0xBD, 0xB0, 0x8D, 0xB0, 0x8B, 0xB1, 0xB4, 0x88,
- 0xBF, 0xA0, 0xA0, 0xE9, 0x9B, 0xB4, 0x89, 0x8D, 0x89, 0x99, 0x88, 0x9B, 0xEF, 0x99, 0xAF, 0x94,
- 0xE3, 0xB2, 0x8C, 0xEB, 0x9E, 0xB9, 0xEE, 0xEC, 0xB2, 0x91, 0xEB, 0x93, 0xAF, 0x94, 0x9F, 0xEA,
- 0x9B, 0x99, 0x86, 0xB4, 0xA2, 0x9F, 0x97, 0xEC, 0xAE, 0xB0, 0x8E, 0xED, 0xEC, 0x83, 0x9C, 0xAF,
- 0x8B, 0xA2, 0x94, 0xAF, 0x82, 0xF5, 0x99, 0xAE, 0x8E, 0x9C, 0xB4, 0x97, 0x93, 0x9E, 0x83, 0xB8,
- 0x9D, 0x98, 0xAA, 0x94, 0xB6, 0xA2, 0x93, 0xB3, 0xBC, 0x90, 0xE2, 0xB5, 0xE3, 0xB0, 0xAB, 0x89,
- 0x96, 0x8F, 0xBE, 0x9C, 0xBE, 0xA3, 0xEE, 0x94, 0x91, 0x8F, 0x9F, 0xB6, 0xB6, 0x82, 0xA2, 0xED,
- 0xAB, 0x94, 0xB2, 0x9E, 0x86, 0xB4, 0x91, 0x9C, 0xB4, 0x91, 0xE8, 0x91, 0xAA, 0x8F, 0xEC, 0x96,
- 0xB9, 0x96, 0xB3, 0xB4, 0x91, 0xB4, 0xA2, 0x98, 0x8B, 0x82, 0xEA, 0x8A, 0xB0, 0x9E, 0xB8, 0xBD,
- 0xE3, 0xAE, 0xE3, 0x88, 0x98, 0x82, 0xAD, 0x93, 0xBF, 0xEF, 0xA0, 0xF1, 0xAA, 0xF5, 0x9B, 0xBD,
- 0x97, 0x98, 0x9B, 0x9B, 0x9D, 0xB0, 0xBD, 0xBD, 0x93, 0x9D, 0x97, 0x93, 0x93, 0x99, 0x9B, 0xB0,
- 0x9B, 0x8A, 0x98, 0xBD, 0x94, 0x8C, 0x86, 0xB4, 0x92, 0x88, 0x97, 0x98, 0x9B, 0xBC, 0xE2, 0x9F,
- 0x98, 0x8E, 0x9B, 0x9E, 0x9B, 0x8B, 0x92, 0xF5, 0x97, 0x9B, 0xEE, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE,
- 0x9E, 0xAD, 0x9F, 0x98, 0xF5, 0xAD, 0x8B, 0x9F, 0x9B, 0xAD, 0x93, 0x98, 0x98, 0xB0, 0x9B, 0xBE,
- 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x8B, 0xEE, 0x9F, 0x9C, 0xBD, 0x8B, 0x8F, 0x95, 0x8E, 0xA0, 0xB4,
- 0x92, 0x83, 0xB1, 0xED, 0xB9, 0xAF, 0xBC, 0xE8, 0x86, 0xB4, 0xE8, 0xAF, 0xA9, 0xA9, 0xB2, 0xBE,
- 0x89, 0xE8, 0x9E, 0x9F, 0xBB, 0xAA, 0x8B, 0x98, 0x9F, 0xAD, 0x92, 0xAD, 0x83, 0x9E, 0x8C, 0x88,
- 0xEA, 0xB0, 0x98, 0x98, 0xBD, 0xAD, 0x9C, 0xB5, 0x9B, 0x8F, 0x95, 0x8E, 0xA0, 0xB4, 0x92, 0x83,
- 0xB1, 0xED, 0xB9, 0xAF, 0xBC, 0xE8, 0xE8, 0xAF, 0xA9, 0xA9, 0xB2, 0xBE, 0x89, 0xE8, 0x9E, 0x9F,
- 0xBB, 0xAA, 0x8B, 0x98, 0x9F, 0xAD, 0x8A, 0xAD, 0x83, 0x93, 0x86, 0xB4, 0x91, 0xAD, 0x83, 0x98,
- 0x98, 0x8B, 0x8F, 0x92, 0x9B, 0x8B, 0x9F, 0x9F, 0x97, 0xA0, 0x9B, 0xA2, 0x97, 0x99, 0xE2, 0x9D,
- 0x99, 0x99, 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xA0, 0x9B, 0x99, 0xB2, 0xB3, 0x94, 0xB5,
- 0xBE, 0x92, 0x88, 0xAD, 0x95, 0xB3, 0xE2, 0xAC, 0x83, 0xE8, 0x9F, 0xAF, 0xB9, 0x9D, 0x9C, 0xA3,
- 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0xEF, 0xB6, 0x86, 0xB4, 0xBE, 0x99,
- 0xE3, 0xB0, 0x83, 0x89, 0xE3, 0xA3, 0xB8, 0xE8, 0xE3, 0xEA, 0x96, 0xB4, 0x98, 0xB6, 0xB8, 0x8E,
- 0x9B, 0xE9, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x88, 0xE2, 0x9F, 0x97, 0x9E, 0x9B, 0xAF, 0x97, 0x99,
- 0xA3, 0xBD, 0x91, 0xAB, 0x9B, 0xB5, 0xB2, 0xB3, 0x80, 0xB5, 0xBE, 0x92, 0x88, 0xAD, 0x95, 0xB3,
- 0xE2, 0xAC, 0x83, 0xE8, 0x9F, 0xAF, 0xB9, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x86, 0xB4,
- 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0xEF, 0xB6, 0xBE, 0x99, 0xE3, 0xB0, 0x83, 0x89, 0xE3, 0xA3,
- 0xB8, 0xE8, 0xE3, 0xEA, 0x82, 0xE8, 0x94, 0xB2, 0x96, 0xB7, 0x94, 0xA3, 0xB8, 0x9E, 0x99, 0x99,
- 0x9B, 0x89, 0x97, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, 0x93, 0x9B, 0x89, 0x99, 0x9B, 0x88, 0xB5, 0xAD,
- 0xBD, 0xBD, 0x9F, 0x8D, 0x97, 0x93, 0x9D, 0xAE, 0x98, 0xBD, 0xEE, 0xA8, 0x98, 0xBD, 0x9F, 0x9F,
- 0x86, 0xB4, 0x9B, 0x83, 0x92, 0x97, 0x95, 0xEE, 0x94, 0xE3, 0x9B, 0xBD, 0x93, 0x98, 0x9B, 0x8E,
- 0x99, 0x98, 0xB7, 0xB0, 0x9B, 0xEF, 0x98, 0xBD, 0xBD, 0xA8, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B,
- 0xB9, 0x99, 0x9B, 0x88, 0x83, 0xAE, 0xBB, 0x92, 0x88, 0xEA, 0xB9, 0x9E, 0xB5, 0xAC, 0x96, 0xE8,
- 0x94, 0xB2, 0x96, 0xB4, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3,
- 0xEF, 0xAF, 0x86, 0xB4, 0x80, 0x82, 0x8B, 0xAC, 0x83, 0xE8, 0x9F, 0xAC, 0xB9, 0x9D, 0x9C, 0xA3,
- 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x82, 0xE8, 0x94, 0xAD, 0xB9, 0xA3, 0xEF, 0xB5,
- 0xBE, 0x9D, 0xEB, 0xA9, 0x97, 0x9C, 0xEA, 0x9D, 0x99, 0x99, 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C,
- 0x98, 0xAD, 0x93, 0x99, 0x97, 0x9C, 0x9F, 0xAD, 0x92, 0xA2, 0xB5, 0x83, 0x8F, 0x9D, 0x9C, 0xA3,
- 0x83, 0x8D, 0xA2, 0xA9, 0x86, 0xB4, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB2, 0xAC, 0xB8, 0x9D,
- 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x96, 0x99, 0x98, 0xA9, 0xBE, 0x9D, 0x8B, 0xAF, 0x97, 0x9B,
- 0x97, 0x99, 0x9B, 0x8B, 0x9F, 0xBB, 0x96, 0xB1, 0x8C, 0xEE, 0xBE, 0x9D, 0x8C, 0xA3, 0xB8, 0xB7,
- 0x9C, 0xA9, 0x93, 0x9F, 0x90, 0xB2, 0xB9, 0xE8, 0xB6, 0xB0, 0x93, 0x9F, 0x94, 0xB6, 0xB9, 0xB4,
- 0x88, 0xAA, 0x80, 0xB7, 0xB6, 0xB0, 0x86, 0xB4, 0x83, 0x82, 0x88, 0xAC, 0xB8, 0xB3, 0x98, 0x8B,
- 0xB9, 0xB7, 0x9C, 0xB0, 0xBE, 0x9D, 0xB6, 0xB0, 0x80, 0x89, 0x98, 0x8E, 0xBE, 0x9D, 0x9C, 0xEA,
- 0x80, 0x8D, 0xEB, 0xB6, 0xB8, 0xB4, 0x8B, 0xAD, 0x80, 0x9B, 0x83, 0x95, 0x91, 0xAD, 0x83, 0x98,
- 0x98, 0x9B, 0x9D, 0x98, 0xA0, 0x9E, 0xAF, 0x9E, 0xBC, 0x8B, 0x93, 0x99, 0x9B, 0x8B, 0x93, 0xAD,
- 0x8F, 0xB0, 0x98, 0x8B, 0x98, 0xBD, 0xBD, 0xA8, 0x86, 0xB4, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B,
- 0xB9, 0x99, 0x9B, 0xB0, 0x98, 0x9F, 0x97, 0x98, 0xE2, 0xBB, 0x9D, 0x9C, 0x98, 0xB2, 0xB9, 0xB7,
- 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x93, 0xB8, 0xE8, 0xA2, 0xB1, 0xBB, 0x8D,
- 0xEF, 0xB4, 0xB9, 0xA3, 0xAD, 0xBD, 0xB8, 0x92, 0x88, 0xB1, 0x96, 0xB0, 0x9B, 0x9E, 0x9B, 0xBD,
- 0x9F, 0x98, 0x9D, 0xB3, 0x9C, 0x9C, 0xBF, 0x92, 0x88, 0xB6, 0x86, 0xB4, 0xB9, 0xB7, 0xEF, 0xB2,
- 0xB8, 0x99, 0x98, 0x99, 0x83, 0x82, 0x94, 0xAA, 0x83, 0xA3, 0x98, 0x9E, 0x80, 0x82, 0x90, 0xEA,
- 0xBB, 0x8D, 0x80, 0xAA, 0x83, 0xE8, 0x9C, 0xEA, 0x80, 0x89, 0x98, 0x8B, 0xB8, 0xE8, 0xA2, 0xAA,
- 0x83, 0xE9, 0xB1, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94,
- 0x9B, 0x8B, 0x9F, 0x96, 0x98, 0x8B, 0x9B, 0x9E, 0xBD, 0xBD, 0x93, 0x98, 0x86, 0xB4, 0x9B, 0x9F,
- 0xF1, 0x80, 0x94, 0xA9, 0xB9, 0xEE, 0xE3, 0x88, 0x90, 0xEC, 0x80, 0xAE, 0xB4, 0x8A, 0x9E, 0x8B,
- 0xEF, 0x88, 0xE3, 0xB4, 0x8D, 0x91, 0x8C, 0xB5, 0x8B, 0x8B, 0x92, 0xAA, 0x90, 0x80, 0xB5, 0xA8,
- 0xAD, 0xB5, 0x8F, 0x9D, 0xA3, 0xF1, 0x99, 0x8F, 0x89, 0xBC, 0x96, 0xE2, 0xAF, 0xA2, 0xE9, 0xEF,
- 0xAD, 0xB2, 0xB7, 0xB8, 0xBE, 0xB3, 0x9D, 0x8B, 0x90, 0xE8, 0xED, 0x97, 0xB7, 0xE3, 0x86, 0xB4,
- 0x80, 0x90, 0x8C, 0xA8, 0xBC, 0x9E, 0x92, 0x91, 0xAE, 0xB7, 0x8A, 0xED, 0xBD, 0x9D, 0xB9, 0x8C,
- 0xED, 0x8C, 0xF1, 0x97, 0x8D, 0x8C, 0x8A, 0xBF, 0xB4, 0x88, 0xBB, 0x9E, 0xAA, 0xEA, 0xAC, 0xB6,
- 0xBE, 0xEC, 0xB1, 0xEF, 0xB3, 0x8D, 0xEE, 0x80, 0xB0, 0xA0, 0xE3, 0x93, 0x88, 0xB4, 0x8F, 0x8B,
- 0xEE, 0xAF, 0xEE, 0xEA, 0xAC, 0xB4, 0x8F, 0xB0, 0xEF, 0xEF, 0xAF, 0xA9, 0xB7, 0x91, 0xEE, 0x8C,
- 0x86, 0xB4, 0xB9, 0xAC, 0xB9, 0x98, 0xBC, 0x9E, 0xF5, 0x98, 0xB2, 0x9E, 0xEF, 0xED, 0x8B, 0xB0,
- 0x8B, 0xB8, 0xAE, 0xEB, 0xBD, 0x92, 0x83, 0xEE, 0x88, 0x9E, 0x96, 0xAB, 0x97, 0xB6, 0x94, 0x80,
- 0xAE, 0x89, 0xA9, 0xA2, 0x97, 0x83, 0xB7, 0xBB, 0xAC, 0xF5, 0x8D, 0x91, 0x93, 0xBC, 0xED, 0xAB,
- 0xEC, 0x92, 0xB0, 0x8E, 0xB7, 0x97, 0xAE, 0x80, 0x91, 0x98, 0xF1, 0xF5, 0x94, 0xAD, 0x8C, 0xAE,
- 0xE3, 0xEA, 0x86, 0xB4, 0xEE, 0xA0, 0xAE, 0x97, 0x9D, 0x9E, 0x9B, 0xB8, 0xE3, 0xB6, 0x9F, 0xB0,
- 0x9D, 0xE9, 0x9E, 0xAB, 0xEE, 0xB1, 0xB6, 0x89, 0xA0, 0x8C, 0xBC, 0x9D, 0x97, 0xEC, 0x9C, 0x96,
- 0xB8, 0x97, 0xA2, 0xF5, 0x8B, 0xEC, 0xAD, 0xA3, 0xB2, 0xF1, 0xAC, 0x8C, 0xE2, 0x95, 0xB2, 0xE9,
- 0x8B, 0x8A, 0xF5, 0xE8, 0x9B, 0xEF, 0xF5, 0xE2, 0x93, 0x88, 0x99, 0xEE, 0xA9, 0xAA, 0x8F, 0xAA,
- 0x88, 0x97, 0xB8, 0x8D, 0x86, 0xB4, 0xAD, 0x9E, 0xBE, 0xAD, 0xA9, 0xAB, 0xBC, 0xB6, 0x99, 0xB8,
- 0xA8, 0x9E, 0xAA, 0xB5, 0x97, 0x95, 0xA2, 0xED, 0xAA, 0xB4, 0x8C, 0x9B, 0xF1, 0x9B, 0xB6, 0xE3,
- 0x82, 0xBF, 0x90, 0x83, 0x8F, 0xBE, 0xA8, 0x96, 0xEB, 0x9D, 0xAC, 0xEC, 0x88, 0xBB, 0x80, 0x89,
- 0x97, 0xEA, 0xB6, 0xF1, 0x83, 0x98, 0x8C, 0x9C, 0x97, 0x9B, 0x93, 0xED, 0x98, 0xEE, 0x89, 0x8B,
- 0x91, 0xAD, 0xB0, 0xB9, 0x98, 0xED, 0x86, 0xB4, 0x96, 0xAF, 0x8D, 0x8B, 0x9D, 0x94, 0xED, 0x8D,
- 0x90, 0x8E, 0x92, 0xB9, 0xB8, 0x8F, 0xB7, 0xB3, 0x97, 0xB4, 0xBE, 0xB3, 0xA2, 0xEE, 0xBD, 0xAD,
- 0x88, 0xAA, 0x98, 0xAE, 0xBE, 0xB8, 0xBB, 0xED, 0x9E, 0xEF, 0xAD, 0x91, 0x96, 0xA2, 0xB9, 0xBF,
- 0x9B, 0xA0, 0x82, 0xB2, 0x95, 0xA8, 0x9B, 0x96, 0xED, 0xB6, 0x9B, 0xEB, 0xAB, 0x8A, 0xBF, 0x94,
- 0xB2, 0xE2, 0x94, 0x98, 0xEB, 0x93, 0x99, 0x8E, 0x86, 0xB4, 0xA8, 0xE2, 0xE2, 0x95, 0xE2, 0xED,
- 0xAF, 0x96, 0xB9, 0x93, 0x90, 0xAA, 0xB5, 0xB0, 0xBF, 0xEC, 0x94, 0xBD, 0xA3, 0xAF, 0xB2, 0xE2,
- 0xBE, 0xBE, 0x92, 0xBC, 0xF5, 0xAA, 0x89, 0xB1, 0xAB, 0xF5, 0xB1, 0x98, 0x83, 0xB6, 0x8A, 0xEC,
- 0x89, 0x9B, 0xAC, 0xBD, 0xED, 0xA2, 0xAF, 0xA9, 0xB8, 0x89, 0x9E, 0xBE, 0xAB, 0xAD, 0xB2, 0x8B,
- 0xBB, 0xB9, 0x80, 0x83, 0xA2, 0xF5, 0x9D, 0x97, 0xA9, 0x9D, 0x86, 0xB4, 0x90, 0xB9, 0xB8, 0xA2,
- 0xEF, 0xA2, 0x9B, 0xB4, 0xB7, 0xB8, 0xB7, 0xAE, 0xED, 0xE2, 0x89, 0x99, 0xBF, 0xE8, 0xAC, 0xA9,
- 0x9F, 0xB5, 0x95, 0x9F, 0xB7, 0xA9, 0xF1, 0xB8, 0xE8, 0x8D, 0x99, 0x97, 0xB8, 0xA9, 0x93, 0xB1,
- 0xB8, 0x98, 0x8C, 0xAE, 0xEB, 0x98, 0xF5, 0xA8, 0xE9, 0xE3, 0xBE, 0xA8, 0xBB, 0x8A, 0x91, 0xED,
- 0xF5, 0xB7, 0xE2, 0x90, 0x90, 0x83, 0xAA, 0x8B, 0x8A, 0xAD, 0x8D, 0xA3, 0x86, 0xB4, 0xBB, 0x94,
- 0xF5, 0x9D, 0xEE, 0xBD, 0x95, 0x98, 0x92, 0xAD, 0x91, 0xB8, 0xAE, 0x9B, 0xB4, 0xF1, 0xE3, 0xA2,
- 0x82, 0x80, 0xA8, 0xB5, 0x94, 0xAB, 0xB6, 0xB0, 0x9B, 0x89, 0x8D, 0x94, 0x83, 0xA9, 0xA2, 0xBF,
- 0x96, 0x95, 0x80, 0x82, 0xF1, 0xB1, 0xB1, 0x9D, 0xEB, 0xAE, 0xAD, 0xE8, 0xA0, 0x8E, 0xAD, 0x8E,
- 0x82, 0x9E, 0x95, 0x8E, 0xEB, 0xAE, 0x95, 0xBB, 0x91, 0x95, 0xA2, 0x97, 0x8A, 0x95, 0x86, 0xB4,
- 0xB3, 0xAB, 0xEE, 0x92, 0xEE, 0x9D, 0x93, 0x90, 0xB9, 0xEC, 0x80, 0x83, 0xEB, 0x80, 0xEB, 0x80,
- 0xF5, 0x8B, 0xAF, 0xB6, 0xB4, 0x93, 0xAD, 0xEA, 0x8D, 0xEB, 0x8F, 0xE2, 0xA8, 0xBF, 0x8D, 0x97,
- 0xBF, 0xAF, 0xB0, 0xBB, 0x82, 0x9D, 0xAD, 0xB2, 0xA3, 0xAB, 0x80, 0xB2, 0x99, 0xF1, 0x95, 0xA0,
- 0xB9, 0xB4, 0xE3, 0xBC, 0x8F, 0x96, 0x8E, 0xF1, 0x8E, 0x83, 0x92, 0x8B, 0x8F, 0x99, 0xA8, 0xB5,
- 0x86, 0xB4, 0x88, 0x91, 0xA2, 0xF1, 0xAD, 0xF1, 0x8C, 0x97, 0x93, 0x82, 0xAA, 0x93, 0x8D, 0xAC,
- 0x8D, 0x98, 0xF1, 0xB0, 0xA2, 0xE2, 0xB8, 0xE3, 0xEF, 0xB4, 0x9D, 0xAB, 0xAD, 0xAF, 0xEC, 0xF1,
- 0xB6, 0xAE, 0xE9, 0x80, 0xE9, 0xA3, 0x9B, 0xAE, 0x83, 0xBB, 0x8F, 0xB8, 0x96, 0xBE, 0x86, 0xB4,
- 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x9F, 0x94, 0x9E, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, 0x93,
- 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0xF8, 0xF6, 0xD0, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xF8, 0xA9, 0xB3, 0xBD, 0xB4, 0xBB, 0xAE, 0xAF, 0xA8, 0xBF, 0xF8, 0xE0, 0xFA, 0xF8,
- 0xF8, 0xD0, 0xA7
- };
-
- // const char* fake_license_data = "{\n \"license\": \"{\\\"name\\\": \\\"PrlPro17\\\", \\\"uuid\\\": \\\"\\\", \\\"lic_key\\\": \\\"\\\", \\\"product_version\\\": \\\"17.*\\\", \\\"is_upgrade\\\": false, \\\"is_sublicense\\\": false, \\\"parent_key\\\": null, \\\"parent_uuid\\\": null, \\\"main_period_ends_at\\\": \\\"2045-05-09 00:00:00\\\", \\\"grace_period_ends_at\\\": \\\"2045-05-09 00:00:00\\\", \\\"is_auto_renewable\\\": false, \\\"is_nfr\\\": false, \\\"is_beta\\\": false, \\\"is_china\\\": false, \\\"is_suspended\\\": false, \\\"is_expired\\\": false, \\\"is_grace_period\\\": false, \\\"is_purchased_online\\\": false, \\\"limit\\\": 10, \\\"usage\\\": 1, \\\"edition\\\": 2, \\\"platform\\\": 3, \\\"product\\\": 7, \\\"offline\\\": true, \\\"cpu_limit\\\": 32, \\\"ram_limit\\\": 131072, \\\"hosts\\\": [{\\\"name\\\": \\\"GDPR_HIDDEN\\\", \\\"hw_id\\\": \\\"\\\", \\\"product_version\\\": \\\"\\\", \\\"activated_at\\\": \\\"2021-05-09 00:00:00\\\"}], \\\"is_trial\\\": false}\",\n \"publicCerts\": \"-----BEGIN CERTIFICATE-----\\nMIIGpDCCBIygAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwdDELMAkGA1UEBhMCUlUx\\nDzANBgNVBAcMBk1vc2NvdzEjMCEGA1UECgwaUGFyYWxsZWxzIElQIEhvbGRpbmdz\\nIEdtYkgxEDAOBgNVBAsMB0Rlc2t0b3AxHTAbBgNVBAMMFFBhcmFsbGVscyBEZXNr\\ndG9wIENBMB4XDTE4MTIyNDA5MDM1N1oXDTI4MTEwNjA5MDM1N1owdzELMAkGA1UE\\nBhMCUlUxDzANBgNVBAcTBk1vc2NvdzElMCMGA1UEChMcUGFyYWxsZWxzIEludGVy\\nbmF0aW9uYWwgR21iSDEQMA4GA1UECxMHRGVza3RvcDEeMBwGA1UEAxMVZGVza3Rv\\ncC5wYXJhbGxlbHMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\nzoVPP60oYTjswM8vsWgpNOF9ZyB3wU/sJeYtmeC+0eTVDqYfI8Qq2/AoDLhEIg6c\\nvd8vGDUmXTvkX+r/bZCS9oR6o3M2otsgwMzsRQQgOWfngyB3PVh0V+FM68DoCZZF\\nLSYQ3Ghv7AK21M/g4TcKFY30ngc9avMJeJ6lSLzpEyV6YkDbB0VBcAOSe0AyAUN4\\na957UwRt2hVn5kCr5DPje4w1xXnHIx+MhrhGgUz0stQX2Yu4e2+lpy0rBEU7HIqe\\npCqVSwSeAfrgonwUAB1dTPSZ5wHBYiX30x+UaMScHlHuPOrUy4bS2e5mMR+FWGh9\\nv3oNBRMhLPJG9YIquGE4twIDAQABo4ICOzCCAjcwDAYDVR0TAQH/BAIwADAOBgNV\\nHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFG1biXwSoD4JwjCnq7kqU8fgXNv2MB8GA1Ud\\nIwQYMBaAFALkzfL1GhWDbfCrrwQRxRf52EyPMEEGCCsGAQUFBwEBBDUwMzAxBggr\\nBgEFBQcwAoYlaHR0cDovL3d3dy5wYXJhbGxlbHMuY29tL2NhL3BkX2NhLnBlbTA2\\nBgNVHR8ELzAtMCugKaAnhiVodHRwOi8vd3d3LnBhcmFsbGVscy5jb20vY2EvcGRf\\nY2EuY3JsMIIBJgYDVR0gBIIBHTCCARkwga0GDisGAQQBgcw7g30CAgEBMIGaMDkG\\nCCsGAQUFBwIBFi1odHRwOi8vY2EucGFyYWxsZWxzLm5ldC9jYS9wYXJhbGxlbHNf\\nY3BzLmh0bWwwXQYIKwYBBQUHAgIwUTAfGhhQYXJhbGxlbHMgSG9sZGluZ3MsIGx0\\nZC4wAwIBARouRXh0ZXJuYWwgQmFzaWMgQ2VydGlmaWNhdG9uIFByYWN0aWNlIFN0\\nYXRlbWVudDBnBg4rBgEEAYHMO4N9AgJmAzBVMFMGCCsGAQUFBwICMEcwHxoYUGFy\\nYWxsZWxzIEhvbGRpbmdzLCBsdGQuMAMCAQEaJFBhcmFsbGVscyBEZXNrdG9wIENl\\ncnRpZmljYXRlIFBvbGljeTAyBgNVHREEKzApghVkZXNrdG9wLnBhcmFsbGVscy5j\\nb22CEG15LnBhcmFsbGVscy5jb20wDQYJKoZIhvcNAQELBQADggIBAIVoVvxwMJLa\\ntshoaea1bqsnD2FU1r/FoQy1np5ifKQ7fvDr+z8gY0oKDrObRcYTeiRfSGG1TyXW\\nNfY9nlgbLJO7fM5vpqvj5WQJNaUjIzxNcitNn7teG5c5/C0fkiWeDH9t01gLRpvO\\nk5B4zDf8AHbkjrf73whZziuPhbyCyxjvdnVouP5oPwB9MYQLyxQMlVvYl0BC4wBi\\nkkaymqWBIxeKBWDEQyGvVabsOo1Kro6xk5s6SuutME6L97kmQaRGbOvbCZ95niEH\\neKua/1Ngt9U3Y6fPwP6gVaQglZBcPgs5+4a+hd/8gPZ+XbVXsK68j9eUMuhMoFdK\\ncaNejnQt3Cvsnp7ohSoRY3rKdfG0Idy/4HJCiCCOnDDpPXvqQqAo0cwEhbSjI66Y\\nzdtEkCFpWz23rGElQMxIs6ojwK/gu5+sJpE+l7QpXfCIhryqGqRHpdkSDp7Pc1Jr\\nJMpyNhDEI0QjPXkSnMVxMQuHUidARr43O32yt0VD/Zyt6sb2gmInF6XJrlYCDvOz\\npuKPoOE9EMI74XzKw5FsVhVUp8Wem8Ir7eP6GZ7hP21J7C9tPkiYjJqX6jJvvLE6\\nbPETlL48esW55ZmE57SE+F1oqK/hQ5tDJwneEryJZ+8KoiD42SKaf0k29iQfXH1F\\nYScGlH58rXXjAZv+kHNTsJ+zLX//KpzT\\n-----END CERTIFICATE-----\\n-----BEGIN CERTIFICATE-----\\nMIIH9TCCBd2gAwIBAgICEAMwDQYJKoZIhvcNAQELBQAwdDELMAkGA1UEBhMCUlUx\\nDzANBgNVBAcMBk1vd2NvdzEjMCEGA1UECgwaUGFyYWxsZWxzIElQIEhvbGRpbmdz\\nIEdtYkgxDjAMBgNVBAsMBUNsb3VkMR8wHQYDVQQDDBZQYXJhbGVscyBJc3N1aW5n\\nIENBICMxMB4XDTE4MTIyNDA5MDE1MFoXDTMxMDEyMzA5MDE1MFowdDELMAkGA1UE\\nBhMCUlUxDzANBgNVBAcMBk1vc2NvdzEjMCEGA1UECgwaUGFyYWxsZWxzIElQIEhv\\nbGRpbmdzIEdtYkgxEDAOBgNVBAsMB0Rlc2t0b3AxHTAbBgNVBAMMFFBhcmFsbGVs\\ncyBEZXNrdG9wIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2r6P\\nz/fE4WESXkudT80kk+dkK/KFM9AqmmHBdx2KRBKXPuOJnQop6dS+ZRRYgyzqvFYl\\nOVy9oZhJ8qtrQH71ornL/ZNIUBMOoQ1Hg9Oqaqwr2b04qWV7RIjW5bG0QBgAYuDX\\nuq5dn1A8uDWoPYdmUrs+oir0kxUugumWSYYzhGOoDxpCSpXqSovYOcyENinD2NFs\\n6T6CJ1MC/yTUyu8oLCMsXimyHfe+pknJ1cSS4i3zQ7tRVdFMvbLdPbOkDaT/ZFyh\\neHOrpBKaeInsNoCoXoOSq9K8CzYq3mEikE/t3PB+8JbCMkf5g+Eup4RjlQeILu/Z\\nqEkGyJtovuRnPha1SUw5Qiz6EyLDaLug6RejPiQZHio10/zovlaN9aF74CGB7Ijj\\nTAMhxN423xKQepFPiPQtnZGke11urD7pyIRJQhQbPJeyHPZLoAY/Zn3Lu03wpqn4\\nuVlEfrvV3pv9gnmme/MUWyegiOxN0xlgBkgjdCo/d74KNjfcD/P4qRa+v50ddlOX\\nhuSAic3LowqizI9+jsU1NSCY/ssMnaFTVCGjtcPq2ZoE6n8NG1dWNEvFJQ1elZDf\\nZUQP/5r5oheEyBnOutJmrMVahCi6ipxv74DPzGqJCX8X7VHr+D2zeEgNrodD3iF/\\nq2yK1qP9/fdOk5CajZVcKextWdYBs9rM+0YF+sECAwEAAaOCAo8wggKLMBIGA1Ud\\nEwEB/wQIMAYBAf8CAQAwDwYDVR0kAQH/BAUwA4ABADAKBgNVHTYEAwIBADAOBgNV\\nHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFALkzfL1GhWDbfCrrwQRxRf52EyPMB8GA1Ud\\nIwQYMBaAFDuTEfsf59F+SCw7mxQ9KqVPg/1KMD8GCCsGAQUFBwEBBDMwMTAvBggr\\nBgEFBQcwAoYjaHR0cDovL2NhLnBhcmFsbGVscy5uZXQvY2Evcm9vdC5wZW0wNwYD\\nVR0fBDAwLjAsoCqgKIYmaHR0cDovL2NhLnBhcmFsbGVscy5uZXQvY2Evcm9vdF9j\\nYS5jcmwwggGMBgNVHSAEggGDMIIBfzCBrQYOKwYBBAGBzDuDfQICAQEwgZowOQYI\\nKwYBBQUHAgEWLWh0dHA6Ly9jYS5wYXJhbGxlbHMubmV0L2NhL3BhcmFsbGVsc19j\\ncHMuaHRtbDBdBggrBgEFBQcCAjBRMB8aGFBhcmFsbGVscyBIb2xkaW5ncywgbHRk\\nLjADAgEBGi5FeHRlcm5hbCBCYXNpYyBDZXJ0aWZpY2F0b24gUHJhY3RpY2UgU3Rh\\ndGVtZW50MGQGDisGAQQBgcw7g30CAgECMFIwUAYIKwYBBQUHAgIwRDAfGhhQYXJh\\nbGxlbHMgSG9sZGluZ3MsIGx0ZC4wAwIBARohRXh0ZXJuYWwgQmFzaWMgQ2VydGlm\\naWNhdGUgUG9saWN5MGcGDisGAQQBgcw7g30CAmYDMFUwUwYIKwYBBQUHAgIwRzAf\\nGhhQYXJhbGxlbHMgSG9sZGluZ3MsIGx0ZC4wAwIBARokUGFyYWxsZWxzIERlc2t0\\nb3AgQ2VydGlmaWNhdGUgUG9saWN5MA0GCSqGSIb3DQEBCwUAA4ICAQApB9JZT+cw\\nKSGZuR5Lje1lgxueMEkq0QrBUgIaijImTo5nwD3jSpHX3iwX11DA0wvDDhS2bPOY\\nCvOn9KFy+iIli0cc1/4kBH/DYsAh+SUdZs/w3G/0JsucQD5AaL3pehsf3dZfR7cq\\n3q8D6ia/SoMrDLpQCJjm798yUevi4ZNJwEHIOH5gNv76eCx+nNJHvnw0yKKfq52M\\nh6aVRBiF73LcvCmNtgeDJxPUAdbVYgv7b0zpgypkph0aWQP90tqPAWnpjHQ2P7/o\\nP+ynKB3dX6ZcA5CJ5o4jXJX/+vS1HQWuTU8ChYBxFB67eCPDtbwtRwLmS4TTLBpX\\ngEWW8jaJCm4sYLMmj/uw3AqrXH3TFZEdaqhXT9s6igBL7V0NrC2rIpqjg9b1ZybY\\nZa/gCfPJ73sIUkFola1Kr50Sjar6aFfQDjYCfZeC6s4VgR6p0bs7jr61zwsPUlCu\\nAZWAiMtpzAq6YJY3njXTZQnlFZ2eAmgxYDaCRgjDnZtHVN8sVsc6vBJh6XaR84t+\\nitDGJfpm0RXOy2bblmleVPBDbGDruOzNJvB+0H6PbMqY1ROy4ZcLKVftQzScYBUQ\\ndDdT+4gPkIu1YhzBQjMNF/kPwUPE8WvVpe5bT+VMj7tIX2wQIJcdNGIvyCQ5aWoq\\neo6QhWmNlc3k/k63MhxRNe55cq64VyskFA==\\n-----END CERTIFICATE-----\\n-----BEGIN CERTIFICATE-----\\nMIIHvTCCBaWgAwIBAgIJAKfE9q7ikq7mMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYD\\nVQQGEwJDSDEVMBMGA1UEBwwMU2NoYWZmaGF1c2VuMSMwIQYDVQQKDBpQQVJBTExF\\nTFMgSVAgSG9sZGluZ3MgR21iSDELMAkGA1UECwwCSVQxIzAhBgNVBAMMGlBhcmFs\\nbGVscyBFeHRlcm5hbCByb290IENBMSMwIQYJKoZIhvcNAQkBFhRhZG1pbnNAcGFy\\nYWxsZWxzLmNvbTAeFw0xNjEwMDcxNDEyMjVaFw0yODExMDYxNDEyMjVaMHQxCzAJ\\nBgNVBAYTAlJVMQ8wDQYDVQQHDAZNb3djb3cxIzAhBgNVBAoMGlBhcmFsbGVscyBJ\\nUCBIb2xkaW5ncyBHbWJIMQ4wDAYDVQQLDAVDbG91ZDEfMB0GA1UEAwwWUGFyYWxl\\nbHMgSXNzdWluZyBDQSAjMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB\\nALnxIcGsh9ozhUVby8mlCc5XQxKNfW6dGW/SnKbxpqrXfpQ0gNO6WoLI/EOSwk7C\\nZbo/Kc/0abmu26YexiiHEf0FdjS+9ySHqJOgf6kKclC9JC4Dr+FGZISG9G2fkzTn\\nNcsrHk9btii4wDZ9Kjz+398C3ysxK21xjkk+Re1OXl8E+Uhc67jbz0/0Tjd0d7Js\\njVjtKZxQts9SV3KzruwfTyhgkW/4VxmP4RCJqa1TgDLVL98fZjTQBG9cOj3tGRKd\\nZt3EV3QdDXFP08S62CkMOxWn+Fda9BPg6z83ne+TzmREJ4hlafj2kRg+1dKsCNUz\\nZN+nHYVkxNLl9jN/415CdXAPNfWYoibweG0QjI4Ld3/ue0DUEmOY4tu7ofQODnME\\n2ThWrKF8HSnxh8oFNTBm8J5Jh3pTvKw+tJdqbAUi9ykAN7/M+NwxnY5b1wgddHaQ\\nkxaedarnwQfRIFaVvNCRcoZVD9qt6v/jnI8xETxfOjd6WOfg34ZqdyXLX4ttqK0M\\nEgI2HxwRhWAvHl5oR7HS9gCxMY5JvPQ8S+au1XS/xw/L4OJVYTrOVWuvzH50NsrH\\nmcR4N6D5+EYSryuLhL+Nuj/FU37+zbKcZKD1qIHMn3fbfoyspF37KBkbgf8K+1Cq\\nLc2UUsSmZLDnR+jD0T8zEyBTR1a9iCAAy8v50Ok+IJHZAgMBAAGjggIjMIICHzAP\\nBgNVHRMBAf8EBTADAQH/MA8GA1UdJAEB/wQFMAOAAQAwCgYDVR02BAMCAQAwDgYD\\nVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQ7kxH7H+fRfkgsO5sUPSqlT4P9SjAfBgNV\\nHSMEGDAWgBQ5POcdiTty5/ba6yyF1LYMRqlAETA/BggrBgEFBQcBAQQzMDEwLwYI\\nKwYBBQUHMAKGI2h0dHA6Ly9jYS5wYXJhbGxlbHMubmV0L2NhL3Jvb3QucGVtMDcG\\nA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jYS5wYXJhbGxlbHMubmV0L2NhL3Jvb3Rf\\nY2EuY3JsMIIBIwYDVR0gBIIBGjCCARYwga0GDisGAQQBgcw7g30CAgEBMIGaMDkG\\nCCsGAQUFBwIBFi1odHRwOi8vY2EucGFyYWxsZWxzLm5ldC9jYS9wYXJhbGxlbHNf\\nY3BzLmh0bWwwXQYIKwYBBQUHAgIwUTAfGhhQYXJhbGxlbHMgSG9sZGluZ3MsIGx0\\nZC4wAwIBARouRXh0ZXJuYWwgQmFzaWMgQ2VydGlmaWNhdG9uIFByYWN0aWNlIFN0\\nYXRlbWVudDBkBg4rBgEEAYHMO4N9AgIBAjBSMFAGCCsGAQUFBwICMEQwHxoYUGFy\\nYWxsZWxzIEhvbGRpbmdzLCBsdGQuMAMCAQEaIUV4dGVybmFsIEJhc2ljIENlcnRp\\nZmljYXRlIFBvbGljeTANBgkqhkiG9w0BAQsFAAOCAgEAjCdFbWndzGnuwp8mry/y\\nkOSO15NyUfuhSqZ4iSR6tmyWro8RHar949xzWzuFd+kx91LIH0JAo6j7BZJa9Za/\\nFFD09mWL4w7Jd3cdpIArHS+xaHVvHHxc9Kz+d3yAnxMnOZcncqjPXAxzb2hAP64w\\nwPGYBro6gYdvgTNIs3HZEkabN2eBbFGfuM23CCNICEb1YjZGVv4LRwBwgsSi4ou5\\nVRd7zNJ0oQnSSxl3VdMYbl/A48HS9dAjSkginQjsf7geCqK4uDvVsZfbUt6A3OTy\\nmelK8QAVk3XDAGomCDDZjSOmzlwjGjwuBNXUMp6BpyDv6oTT+okAmQga1gHcrMne\\nUo34yK5f9Io+p2aPLZWT1HHijHHPV6rUedF9RVkunLDGOcMQlOCcXAkWDUakV9yS\\nCcvVhbhAegbZxVGUxiuFYPAhdSJwMc4jwPJ2P6javfCfSL4NffuK9L/iirZgng1C\\n/Kuj6E8EyAO7k1NSMODG5LB1Vg5QMtTcpySPWjY0xus9hbURV9KrddMnIVnmr6Xo\\nA48flx3SYqX/BIkh5ts+G2O0ufRhm2XIrk8U++c+XLwBpPIONob98exYKF0Ikjrt\\nqtIMjNExEQ9RJetkkmY+ZT2bZLroDfGiXIztxQvcuz2Ofh4nL06MOWHSf/AVgWcK\\nCmpWqdGXjywzMTLpNzhpn/M=\\n-----END CERTIFICATE-----\\n-----BEGIN CERTIFICATE-----\\nMIIHzTCCBbWgAwIBAgIJAKG0tvaiMsl+MA0GCSqGSIb3DQEBCwUAMIGgMQswCQYD\\nVQQGEwJDSDEVMBMGA1UEBwwMU2NoYWZmaGF1c2VuMSMwIQYDVQQKDBpQQVJBTExF\\nTFMgSVAgSG9sZGluZ3MgR21iSDELMAkGA1UECwwCSVQxIzAhBgNVBAMMGlBhcmFs\\nbGVscyBFeHRlcm5hbCByb290IENBMSMwIQYJKoZIhvcNAQkBFhRhZG1pbnNAcGFy\\nYWxsZWxzLmNvbTAeFw0xMzA3MTYxNDU0MjRaFw0yODA3MTIxNDU0MjRaMIGgMQsw\\nCQYDVQQGEwJDSDEVMBMGA1UEBwwMU2NoYWZmaGF1c2VuMSMwIQYDVQQKDBpQQVJB\\nTExFTFMgSVAgSG9sZGluZ3MgR21iSDELMAkGA1UECwwCSVQxIzAhBgNVBAMMGlBh\\ncmFsbGVscyBFeHRlcm5hbCByb290IENBMSMwIQYJKoZIhvcNAQkBFhRhZG1pbnNA\\ncGFyYWxsZWxzLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANPF\\nTKR2viu0mzKE5sGaMcLI6OzJR0Pj5LqFP3EsmGWUQjoCbNuEGZmzj/py2o3VGq18\\n6UOUFP88YN37IEXUfQXkfM/Y9M7my49D49AbDbbbEJDsrbx5YM+jWbOnY3AfuWuP\\nftxb8nDIvUo30BNwI88OUGct2yptMYgz5yNxxbrjddKqVI0p1ic+M3HzTJiuuqeH\\nfUS9+3YsMkJCFQ4+s9Lzl7t/I6zldwCqUicVjYK0zDx3b74iZMP0KDZCp4mbvd7d\\n92qRZKR0xS0AiJdk8474ix63vOZsxv4JmunUqf1+sGseZggFY1PqjfiTn98qOmHl\\ndXdJmjGL4aOW/5mvfQiIKt+8YbrE0BZtthsPGL1dl0BUr8FFjzs16GxM6U17qy2L\\nw1SQtZam/cP8ac1wLDnK+yZaOAFr81XYaBrq5tezC1bC2hK5eYfMc6Ml7uHkG/L+\\nQl4TVakUhLsayATqvG8vfui7iO5iB6h+k573EPlnP1BfaEsyD1zGfh6yLD1tz7an\\nd53mxEAyDcbCzzNksEVSb/gjWjQknRezz3AnSWSCRA5CuN9hV1Dc46hK1IuNE0AC\\nxEM6tjT76YFuQxNuX/CtTFnMIDYbGBpNlxIifJ8o9jqSLUdFdy4NKUEllXx7qNhD\\nKFnK2KpU6LcLinKnxBQX0PjDbg9t9RBXwIe5z+p/AgMBAAGjggIGMIICAjAPBgNV\\nHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUOTznHYk7cuf2\\n2usshdS2DEapQBEwHwYDVR0jBBgwFoAUOTznHYk7cuf22usshdS2DEapQBEwPwYI\\nKwYBBQUHAQEEMzAxMC8GCCsGAQUFBzAChiNodHRwOi8vY2EucGFyYWxsZWxzLm5l\\ndC9jYS9yb290LnBlbTA3BgNVHR8EMDAuMCygKqAohiZodHRwOi8vY2EucGFyYWxs\\nZWxzLm5ldC9jYS9yb290X2NhLmNybDCCASMGA1UdIASCARowggEWMIGtBg4rBgEE\\nAYHMO4N9AgIBATCBmjA5BggrBgEFBQcCARYtaHR0cDovL2NhLnBhcmFsbGVscy5u\\nZXQvY2EvcGFyYWxsZWxzX2Nwcy5odG1sMF0GCCsGAQUFBwICMFEwHxoYUGFyYWxs\\nZWxzIEhvbGRpbmdzLCBsdGQuMAMCAQEaLkV4dGVybmFsIEJhc2ljIENlcnRpZmlj\\nYXRvbiBQcmFjdGljZSBTdGF0ZW1lbnQwZAYOKwYBBAGBzDuDfQICAQIwUjBQBggr\\nBgEFBQcCAjBEMB8aGFBhcmFsbGVscyBIb2xkaW5ncywgbHRkLjADAgEBGiFFeHRl\\ncm5hbCBCYXNpYyBDZXJ0aWZpY2F0ZSBQb2xpY3kwDQYJKoZIhvcNAQELBQADggIB\\nAE+ZNsc49RJ6ZtnPDQ5R9nWKVoQQHpJZorwoUGy+CUSfL8ux35whmbdiGQJ27Mm9\\nZJVrfDHKtmP7gGcV7V+MWVPenRaDp0vld6k5iW4Zjz9IRnUQ4u40vnUj55usmK4V\\ncvcBfD/BhD57QjQbt1gHY4RDLqMlNZtSsxMYmav/WKIf7q6HjTmMtZKB+/NwVt90\\n4ztMGDAb9lEjG3Dq4klSzVfGM6FLbMx/Q6wyh+vV8Oh3QP/2A5/8IRC4spUpRMbW\\nwDdwsqflCbrDpoMOx7pnVA+Al9XeJYUdrL1Gv6RaZSM0l+YBVFMAI7B4SQKwjcB7\\nLuWQGN7WJTHcbUmiMndix4gwRpBtdba7D5wKLxceAzXhOrAL7lA1qPeNh8NB1ICT\\nr88O87uLcIJpoje6Ngyuh8ddHf/pSkq/kBYlP6SAvg7xusbSDdqwhQacZYx/GMsG\\nJcbx5xAnmbmt78SCe2vsEoOEms+b2WCMbsIkbBVt1B/r39draPK7/m8JJYpQPwWy\\naN/G4gOBHwKbtAn+9xXZroNqljASWNYsxeLOZX+kkG1tw2zTwTXDOT1tOaKOxMPO\\niq4H4GIJc6ZY1Z1Z/QulnIw0W1U8reWMeujaXGwhyqZhC+Ozcn9fULT+TYHQUCro\\nRKx+w+VMIXpIWvWB+jx8b95nGqwu6+lt3Z3yAtYaUbLd\\n-----END CERTIFICATE-----\\n\",\n \"signature\": \"\"\n}";
+ 0xFA, 0xF8, 0xA1, 0x86, 0xF8, 0xB4, 0xBB, 0xB7, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, 0xB6,
+ 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xAF, 0xAF, 0xB3, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86,
+ 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB6, 0xB3, 0xB9, 0x85, 0xB1, 0xBF, 0xA3, 0x86, 0xF8, 0xE0, 0xFA,
+ 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x85,
+ 0xAC, 0xBF, 0xA8, 0xA9, 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xEB, 0xE2, 0xF4,
+ 0xF0, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xAF, 0xAA, 0xBD, 0xA8, 0xBB, 0xBE,
+ 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9,
+ 0x85, 0xA9, 0xAF, 0xB8, 0xB6, 0xB3, 0xB9, 0xBF, 0xB4, 0xA9, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC,
+ 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xBB, 0xA8, 0xBF, 0xB4, 0xAE, 0x85, 0xB1,
+ 0xBF, 0xA3, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, 0xB6, 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xBB,
+ 0xA8, 0xBF, 0xB4, 0xAE, 0x85, 0xAF, 0xAF, 0xB3, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, 0xB6,
+ 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xB7, 0xBB, 0xB3, 0xB4, 0x85, 0xAA, 0xBF, 0xA8, 0xB3, 0xB5, 0xBE,
+ 0x85, 0xBF, 0xB4, 0xBE, 0xA9, 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xE8, 0xEA,
+ 0xE3, 0xE3, 0xF7, 0xEA, 0xE3, 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0xE0, 0xEA,
+ 0xEA, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xBD, 0xA8, 0xBB, 0xB9, 0xBF, 0x85, 0xAA, 0xBF, 0xA8,
+ 0xB3, 0xB5, 0xBE, 0x85, 0xBF, 0xB4, 0xBE, 0xA9, 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86,
+ 0xF8, 0xE8, 0xEA, 0xE3, 0xE3, 0xF7, 0xEA, 0xE3, 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA,
+ 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBB, 0xAF, 0xAE,
+ 0xB5, 0x85, 0xA8, 0xBF, 0xB4, 0xBF, 0xAD, 0xBB, 0xB8, 0xB6, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC,
+ 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xB4, 0xBC, 0xA8, 0x86, 0xF8,
+ 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xB8, 0xBF,
+ 0xAE, 0xBB, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3,
+ 0xA9, 0x85, 0xB9, 0xB2, 0xB3, 0xB4, 0xBB, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF,
+ 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xA9, 0xAF, 0xA9, 0xAA, 0xBF, 0xB4, 0xBE, 0xBF, 0xBE,
+ 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85,
+ 0xBF, 0xA2, 0xAA, 0xB3, 0xA8, 0xBF, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF,
+ 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBD, 0xA8, 0xBB, 0xB9, 0xBF, 0x85, 0xAA, 0xBF, 0xA8,
+ 0xB3, 0xB5, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8,
+ 0xB3, 0xA9, 0x85, 0xAA, 0xAF, 0xA8, 0xB9, 0xB2, 0xBB, 0xA9, 0xBF, 0xBE, 0x85, 0xB5, 0xB4, 0xB6,
+ 0xB3, 0xB4, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8,
+ 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xEB, 0xEA, 0xF6, 0xFA, 0x86, 0xF8, 0xAF,
+ 0xA9, 0xBB, 0xBD, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xEB, 0xF6, 0xFA, 0x86, 0xF8, 0xBF, 0xBE, 0xB3,
+ 0xAE, 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, 0xE8, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xB6, 0xBB,
+ 0xAE, 0xBC, 0xB5, 0xA8, 0xB7, 0x86, 0xF8, 0xE0, 0xFA, 0xE9, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8,
+ 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xED, 0xF6, 0xFA, 0x86, 0xF8, 0xB5, 0xBC,
+ 0xBC, 0xB6, 0xB3, 0xB4, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xAE, 0xA8, 0xAF, 0xBF, 0xF6, 0xFA, 0x86,
+ 0xF8, 0xB9, 0xAA, 0xAF, 0x85, 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xE9, 0xE8,
+ 0xF6, 0xFA, 0x86, 0xF8, 0xA8, 0xBB, 0xB7, 0x85, 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0,
+ 0xFA, 0xEB, 0xE9, 0xEB, 0xEA, 0xED, 0xE8, 0xF6, 0xFA, 0x86, 0xF8, 0xB2, 0xB5, 0xA9, 0xAE, 0xA9,
+ 0x86, 0xF8, 0xE0, 0xFA, 0x81, 0xA1, 0x86, 0xF8, 0xB4, 0xBB, 0xB7, 0xBF, 0x86, 0xF8, 0xE0, 0xFA,
+ 0x86, 0xF8, 0x9D, 0x9E, 0x8A, 0x88, 0x85, 0x92, 0x93, 0x9E, 0x9E, 0x9F, 0x94, 0x86, 0xF8, 0xF6,
+ 0xFA, 0x86, 0xF8, 0xB2, 0xAD, 0x85, 0xB3, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8,
+ 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x85, 0xAC, 0xBF, 0xA8, 0xA9,
+ 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xBB,
+ 0xB9, 0xAE, 0xB3, 0xAC, 0xBB, 0xAE, 0xBF, 0xBE, 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86,
+ 0xF8, 0xE8, 0xEA, 0xE8, 0xEB, 0xF7, 0xEA, 0xEF, 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA,
+ 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xA7, 0x87, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xAE,
+ 0xA8, 0xB3, 0xBB, 0xB6, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xA7, 0xF8, 0xF6,
+ 0xD0, 0xFA, 0xFA, 0xFA, 0xFA, 0xF8, 0xAA, 0xAF, 0xB8, 0xB6, 0xB3, 0xB9, 0x99, 0xBF, 0xA8, 0xAE,
+ 0xA9, 0xF8, 0xE0, 0xFA, 0xF8, 0xF8, 0xF6, 0xD0, 0xFA, 0xFA, 0xFA, 0xFA, 0xF8, 0xA9, 0xB3, 0xBD,
+ 0xB4, 0xBB, 0xAE, 0xAF, 0xA8, 0xBF, 0xF8, 0xE0, 0xFA, 0xF8, 0xF8, 0xD0, 0xA7
+};
+
+ // const char* fake_license_data = "{\n "license": "{\\"name\\": null, \\"uuid\\": \\"\\", \\"lic_key\\": \\"\\", \\"product_version\\": \\"18.*\\", \\"is_upgrade\\": false, \\"is_sublicense\\": false, \\"parent_key\\": null, \\"parent_uuid\\": null, \\"main_period_ends_at\\": \\"2099-09-09 00:00:00\\", \\"grace_period_ends_at\\": \\"2099-09-09 00:00:00\\", \\"is_auto_renewable\\": false, \\"is_nfr\\": false, \\"is_beta\\": false, \\"is_china\\": false, \\"is_suspended\\": false, \\"is_expired\\": false, \\"is_grace_period\\": false, \\"is_purchased_online\\": false, \\"limit\\": 10, \\"usage\\": 1, \\"edition\\": 2, \\"platform\\": 3, \\"product\\": 7, \\"offline\\": true, \\"cpu_limit\\": 32, \\"ram_limit\\": 131072, \\"hosts\\": [{\\"name\\": \\"GDPR_HIDDEN\\", \\"hw_id\\": \\"\\", \\"product_version\\": \\"\\", \\"activated_at\\": \\"2021-05-09 00:00:00\\"}], \\"is_trial\\": false}",\n "publicCerts": "",\n "signature": ""\n}";
auto file = fopen(xorstr_("/Library/Preferences/Parallels/licenses.json"), xorstr_("wb"));
if (file)
@@ -1352,266 +141,6 @@ void func_write_fake_license()
void func_patch_prl_disp_service()
{
func_write_fake_license();
-
- auto image_base = (char*)_dyld_get_image_header(0);
- if (image_base)
- {
- #ifdef TARGET_ARCH_X64
- {
- // license verify
- {
- // __const:0000000100976548 ; `vtable for'DspLic::SignCheckerImpl
- // __const:0000000100976548 _ZTVN6DspLic15SignCheckerImplE dq 0 ; DATA XREF: sub_10033E970+31↑o
- // __const:0000000100976548 ; offset to this
- // __const:0000000100976550 dq offset _ZTIN6DspLic15SignCheckerImplE ; `typeinfo for'DspLic::SignCheckerImpl
- // __const:0000000100976558 dq offset sub_10058F8F0
- // __const:0000000100976560 dq offset sub_10058F900
- // __const:0000000100976568 dq offset sub_10058F570 ; <--- patch sign verify
-
- // __text:000000010058F570 55 push rbp ; <---- patch
- // __text:000000010058F571 48 89 E5 mov rbp, rsp
- // __text:000000010058F574 41 57 push r15
- // __text:000000010058F576 41 56 push r14
- // __text:000000010058F578 41 54 push r12
- // __text:000000010058F57A 53 push rbx
- // __text:000000010058F57B 48 81 EC A0 00 00 00 sub rsp, 0A0h ; <---- find
- // __text:000000010058F582 49 89 CE mov r14, rcx
- // __text:000000010058F585 49 89 D7 mov r15, rdx
- // __text:000000010058F588 49 89 F4 mov r12, rsi
- // __text:000000010058F58B BF D0 0A 00 00 mov edi, 0AD0h ; unsigned __int64
- // __text:000000010058F590 E8 BD FB 22 00 call __Znwm ; operator new(ulong)
- // __text:000000010058F595 48 89 C3 mov rbx, rax
- // __text:000000010058F598 48 89 45 A0 mov [rbp+var_60], rax
- // __text:000000010058F59C 0F 28 05 DD 17 37 00 movaps xmm0, cs:xmmword_100900D80
- // __text:000000010058F5A3 0F 29 45 90 movaps [rbp+var_70], xmm0
- // __text:000000010058F5A7 48 8D 35 96 83 30 00 lea rsi, aBeginCertifica ; "-----BEGIN CERTIFICATE-----\nMIIHzTCCBb"...
- // __text:000000010058F5AE BA CC 0A 00 00 mov edx, 0ACCh ; __n
- // __text:000000010058F5B3 48 89 C7 mov rdi, rax ; __dst
- // __text:000000010058F5B6 E8 17 00 23 00 call _memcpy
-
- {
- uint8_t replace[] = OPCODE_RETURN_1;
- if (func_patch_data(image_base + 0x58F570, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_disp_service 1 success.");
- }
- else
- {
- dlog("[-] patch prl_disp_service 1 fail.");
- }
- }
- }
- // scheduleToSendReport
- {
- // __text:000000010029D4E8 0F 8C E5 04 00 00 jl loc_10029D9D3
- // __text:000000010029D4EE 48 8D 35 F5 97 5B 00 lea rsi, aObjcGetclass ; "objc_getClass"
- // __text:000000010029D4F5 48 C7 C7 FE FF FF FF mov rdi, 0FFFFFFFFFFFFFFFEh ; __handle
- // __text:000000010029D4FC E8 37 1E 52 00 call _dlsym
- // __text:000000010029D501 48 8D 3D F0 97 5B 00 lea rdi, asc_100856CF8 ; "�"
- // __text:000000010029D508 FF D0 call rax
- // __text:000000010029D50A 49 89 C7 mov r15, rax
- // __text:000000010029D50D 48 85 C0 test rax, rax
- // __text:000000010029D510 4C 89 B5 E0 FC FF FF mov [rbp+var_320], r14
-
- // __text:000000010029D517 0F 84 19 02 00 00 jz loc_10029D736 ; <---- patch jmp loc_10029D736
-
- // __text:000000010029D517 90 nop
- // __text:000000010029D518 E9 19 02 00 00 jmp loc_10029D736
-
- // __text:000000010029D51D 48 8B 05 44 6B 6B 00 mov rax, cs:__ZN10QArrayData11shared_nullE_ptr
- // __text:000000010029D524 48 89 85 00 FD FF FF mov [rbp+var_300], rax
- // __text:000000010029D52B 48 8D 3D DE 94 5F 00 lea rdi, stru_100896A10 ; this
- // __text:000000010029D532 31 F6 xor esi, esi ; char *
- // __text:000000010029D534 E8 49 FE 51 00 call __ZN7QString16fromAscii_helperEPKci ; QString::fromAscii_helper(char const*,int)
- // __text:000000010029D539 48 89 85 08 FD FF FF mov [rbp+var_2F8], rax
- // __text:000000010029D540 48 8D 85 08 FD FF FF lea rax, [rbp+var_2F8]
- // __text:000000010029D547 48 89 04 24 mov [rsp+330h+var_330], rax
- // __text:000000010029D54B C7 44 24 08 00 00 00 00 mov [rsp+330h+var_328], 0
- // __text:000000010029D553 48 8D BD 38 FD FF FF lea rdi, [rbp+var_2C8]
- // __text:000000010029D55A 48 8D 95 00 FD FF FF lea rdx, [rbp+var_300]
- // __text:000000010029D561 BE 97 88 01 00 mov esi, 18897h
- // __text:000000010029D566 B9 01 00 00 00 mov ecx, 1
- // __text:000000010029D56B 41 B8 79 10 01 80 mov r8d, 80011079h ; <---- find
- // __text:000000010029D571 45 31 C9 xor r9d, r9d
- // __text:000000010029D574 E8 7D FF 51 00 call __ZN8CVmEventC1E15_PRL_EVENT_TYPE7QString22_PRL_EVENT_ISSUER_TYPEiN3PVE17VmEventRespOptionES1_NS3_12VmEventLevelE ; CVmEvent::CVmEvent(_PRL_EVENT_TYPE,QString,_PRL_EVENT_ISSUER_TYPE,int,PVE::VmEventRespOption,QString,PVE::VmEventLevel)
- // __text:000000010029D579 48 8B BD 08 FD FF FF mov rdi, [rbp+var_2F8]
- // __text:000000010029D580 8B 07 mov eax, [rdi]
- // __text:000000010029D582 83 F8 FF cmp eax, 0FFFFFFFFh
- // __text:000000010029D585 74 1F jz short loc_10029D5A6
- // __text:000000010029D587 85 C0 test eax, eax
-
- uint8_t replace[] = { 0x90, 0xE9 };
- if (func_patch_data(image_base + 0x29D517, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_disp_service 2 success.");
- }
- else
- {
- dlog("[-] patch prl_disp_service 2 fail.");
- }
- }
- // /usr/bin/codesign
- {
- uint8_t replace[] = OPCODE_RETURN_1;
- if (func_patch_data(image_base + 0x7a2d50, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_disp_service 3 success.");
- }
- else
- {
- dlog("[-] patch prl_disp_service 3 fail.");
- }
- }
- }
- #endif
- #ifdef TARGET_ARCH_ARM64
- {
- // license verify
- {
- // __text:00000001005CF6C4 FF 03 03 D1 SUB SP, SP, #0xC0
- // __text:00000001005CF6C8 F6 57 09 A9 STP X22, X21, [SP,#0xB0+var_20]
- // __text:00000001005CF6CC F4 4F 0A A9 STP X20, X19, [SP,#0xB0+var_10]
- // __text:00000001005CF6D0 FD 7B 0B A9 STP X29, X30, [SP,#0xB0+var_s0]
- // __text:00000001005CF6D4 FD C3 02 91 ADD X29, SP, #0xB0
- // __text:00000001005CF6D8 F3 03 03 AA MOV X19, X3
- // __text:00000001005CF6DC F4 03 02 AA MOV X20, X2
- // __text:00000001005CF6E0 F5 03 01 AA MOV X21, X1
- // __text:00000001005CF6E4 00 5A 81 52 MOV W0, #0xAD0 ; unsigned __int64
- // __text:00000001005CF6E8 68 C4 07 94 BL __Znwm ; operator new(ulong)
- // __text:00000001005CF6EC F6 03 00 AA MOV X22, X0
- // __text:00000001005CF6F0 E0 2B 00 F9 STR X0, [SP,#0xB0+var_60]
- // __text:00000001005CF6F4 C8 10 00 90 ADRP X8, #xmmword_1007E7760@PAGE
- // __text:00000001005CF6F8 00 D9 C1 3D LDR Q0, [X8,#xmmword_1007E7760@PAGEOFF]
- // __text:00000001005CF6FC E0 83 85 3C STUR Q0, [SP,#0xB0+var_58]
- // __text:00000001005CF700 41 18 00 F0 21 58 03 91 ADRL X1, aBeginCertifica ; "-----BEGIN CERTIFICATE-----\nMIIHzTCCBb"...
- // __text:00000001005CF708 82 59 81 52 MOV W2, #0xACC ; __n
- // __text:00000001005CF70C 9C C6 07 94 BL _memcpy
- uint8_t replace[] = OPCODE_RETURN_1;
- if (func_patch_data(image_base + 0x5CF6C4, replace, sizeof(replace)))
- // if (func_hook_func(image_base + 0x5CF6C4, (void *)func_return_1, nullptr))
- {
- dlog("[+] patch prl_disp_service 1 success.");
- }
- else
- {
- dlog("[-] patch prl_disp_service 1 fail.");
- }
- }
- // scheduleToSendReport
- {
- // __text:00000001002BF0B8 C0 2E 00 D0 00 D0 15 91 ADRL X0, asc_100899574 ; "�"
- // __text:00000001002BF0C0 00 01 3F D6 BLR X8
- // __text:00000001002BF0C4 F4 03 00 AA MOV X20, X0
- // __text:00000001002BF0C8 60 0F 00 B4 CBZ X0, loc_1002BF2B4 ; <--- patch jmp
- // __text:00000001002BF0CC F8 13 00 F9 STR X24, [SP,#0x330+var_310]
- // __text:00000001002BF0D0 E0 2D 00 F0 00 80 3A 91 ADRL X0, asc_10087EEA0 ; ""
- // __text:00000001002BF0D8 01 00 80 52 MOV W1, #0 ; char *
-
- uint8_t replace[] = { 0x7B, 0x00, 0x00, 0x14 };
- if (func_patch_data(image_base + 0x2BF0C8, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_disp_service 2 success.");
- }
- else
- {
- dlog("[-] patch prl_disp_service 2 fail.");
- }
- }
- // /usr/bin/codesign
- {
- uint8_t replace[] = OPCODE_RETURN_1;
- if (func_patch_data(image_base + 0x7a3c14, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_disp_service 3 success.");
- }
- else
- {
- dlog("[-] patch prl_disp_service 3 fail.");
- }
- }
- }
- #endif
- }
-
-}
-
-void func_patch_prl_client_app()
-{
- if (!func_check_version(xorstr_("51567")))
- {
- dlog("[-] unsupport version.");
- exit(0);
- }
-
- auto image_base = (char*)_dyld_get_image_header(0);
- if (image_base)
- {
- #ifdef TARGET_ARCH_X64
- {
- {
- // __text:000000010027A286 83 CB 01 or ebx, 1
- // __text:000000010027A289 81 FB 07 00 00 30 cmp ebx, 30000007h ; <--- find
- // __text:000000010027A28F 0F 85 E3 08 00 00 jnz loc_10027AB78 ; <--- patch
- // __text:000000010027A295 41 81 FE 04 00 00 30 cmp r14d, 30000004h
- // __text:000000010027A29C 0F 85 D6 08 00 00 jnz loc_10027AB78
-
- uint8_t replace[] = { 0x90, 0xE9 };
- if (func_patch_data(image_base + 0x27a28f, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_client_app 1 success.");
- }
- else
- {
- dlog("[-] patch prl_client_app 1 fail.");
- }
- }
- // /usr/bin/codesign
- {
- uint8_t replace[] = OPCODE_RETURN_1;
- if (func_patch_data(image_base + 0x915dd0, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_client_app 2 success.");
- }
- else
- {
- dlog("[-] patch prl_client_app 2 fail.");
- }
- }
- }
- #endif
- #ifdef TARGET_ARCH_ARM64
- {
- {
- // __text:000000010029BDC0 97 00 80 52 17 00 A6 72 MOV W23, #0x30000004 ; <--- find
- // __text:000000010029BDC8 A8 02 00 32 ORR W8, W21, #1
- // __text:000000010029BDCC E9 06 00 32 ORR W9, W23, #3
- // __text:000000010029BDD0 1F 01 09 6B CMP W8, W9
- // __text:000000010029BDD4 41 40 00 54 B.NE loc_10029C5DC ; <--- patch
- uint8_t replace[] = { 0x02, 0x02, 0x00, 0x14 };
- if (func_patch_data(image_base + 0x29bdd4, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_client_app 1 success.");
- }
- else
- {
- dlog("[-] patch prl_client_app 1 fail.");
- }
- }
- // /usr/bin/codesign
- {
- uint8_t replace[] = OPCODE_RETURN_1;
- if (func_patch_data(image_base + 0x95b59c, replace, sizeof(replace)))
- {
- dlog("[+] patch prl_client_app 2 success.");
- }
- else
- {
- dlog("[-] patch prl_client_app 2 fail.");
- }
- }
- }
- #endif
- }
}
void func_hook_applicationDidBecomeActive(id, SEL)
@@ -1796,33 +325,12 @@ void func_load()
const char *moduleName = _dyld_get_image_name(0);
dlog("[*] load %s", moduleName);
- if (str_ends_with(moduleName, xorstr_("prl_client_app")))
- {
- dlog("patch prl_client_app start");
- func_patch_prl_client_app();
- dlog("patch prl_client_app over");
- }
- else if (str_ends_with(moduleName, xorstr_("prl_disp_service")))
+ if (str_ends_with(moduleName, xorstr_("prl_disp_service")))
{
dlog("patch prl_disp_service start");
func_patch_prl_disp_service();
dlog("patch prl_disp_service over");
}
- else if (str_ends_with(moduleName, xorstr_("prl_vm_app")))
- {
- dlog("patch prl_vm_app start");
- func_patch_prl_vm_app();
- dlog("patch prl_vm_app over");
- }
- else if (str_ends_with(moduleName, xorstr_("Parallels Toolbox")))
- {
- dlog("patch Parallels Toolbox start");
- func_patch_Parallels_Toolbox();
- dlog("patch Parallels Toolbox over");
- }
- func_patch_dylibs();
func_hook_menu();
}
-
-#endif
\ No newline at end of file