-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.pb
506 lines (457 loc) · 33.3 KB
/
main.pb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
; ////////////////////////////////////////////////////////////////
; // ASIO Link Pro Patcher by Radical Raccoon ~ 2018.03.24 //
; // //
; // This is free code. You may do with it what you wish. //
; // Please retain credit included for the canvasbutton module. //
; ////////////////////////////////////////////////////////////////
XIncludeFile "constants.pb"
XIncludeFile "typeface.pb"
XIncludeFile "canvasbutton.pb"
XIncludeFile "drawing.pb"
Global DefaultPath.s
Global PatchCompleted = #False
Structure MessageStruct
Title.s
Message.s
EndStructure
Structure MemoryPointer
StructureUnion
a.a
b.b
w.w
l.l
q.q
f.f
d.d
i.i
u.u
EndStructureUnion
EndStructure
Macro FileExists(Filename)
; 0 = File or Folder does not exist
; 1 = File Exists
; -1 = Folder Exists
; Since FileSize() returns:
; -1 = File Not found.
; -2 = File is a directory.
; 0 = Empty File, > 1 = File Exists
; FileSize() respects '*' wildcards and reports results accordingly.
FileSize(Filename) + 1
EndMacro
Macro Is64BitOS()
; Windows 64-bit OS Info
; ---------------------- ----------------------------------
; C:\Windows\System32 System directory for 64-bit files
; C:\Windows\SysWOW64 System directory for 32-bit files
; C:\Program Files Apps directory for 64-bit files
; C:\Program Files (x86) Apps directory for 32-bit files
; -------------------------------- -------------------------------------------------------------------
; WoW64 uses 3 DLLs Description
; -------------------------------- -------------------------------------------------------------------
; C:\Windows\System32\Wow64.dll core interface to Windows NT kernel that translates between
; 32-bit & 64-bit calls including pointer & call stack manipulations
; C:\Windows\System32\Wow64win.dll provide appropriate entry-points for 32-bit apps
; C:\Windows\System32\Wow64cpu.dll switch processor from 32-bit to 64-bit mode
; 32-bit apps runnning on 64-bit OS are redirected, so query the existence of C:\Windows\SysWOW64\*.dll's
FileExists(GetEnvironmentVariable("WinDir")+"\SysWow64\*.dll")
EndMacro
Procedure Quit()
FreeArray(Palette())
StopMusic(#Music)
FreeMusic(#Music)
FreeSprite(#SpriteHeader)
FreeSprite(#SpriteFont)
FreeMap(Font())
End
EndProcedure
Procedure Error(Message.s)
MessageRequester(#Error, Message, #PB_MessageRequester_Error)
If ArraySize(Palette()) <> -1
FreeArray(Palette())
EndIf
If IsMusic(#Music)
StopMusic(#Music)
FreeMusic(#Music)
EndIf
If IsSprite(#SpriteHeader)
FreeSprite(#SpriteHeader)
EndIf
If IsSprite(#SpriteFont)
FreeSprite(#SpriteFont)
EndIf
If MapSize(Font()) <> 0
FreeMap(Font())
EndIf
End
EndProcedure
Procedure DisplayMessage(*Parameters.MessageStruct)
MessageRequester(*Parameters\Title, *Parameters\Message)
FreeMemory(*Parameters)
EndProcedure
Procedure ThreadedMessageRequester(Title.s, Message.s)
; One can only pass a single parameter when creating a thread
; so we'll just use a struct.
*Temp.MessageStruct = AllocateMemory(SizeOf(MessageStruct))
*Temp\Title = Title : *Temp\Message = Message
CreateThread(@DisplayMessage(), *Temp)
EndProcedure
Procedure GetDefaultPath()
If Is64BitOS()
DefaultPath = GetEnvironmentVariable("SystemDrive") + "\" + #DefaultPath64
Else
DefaultPath = GetEnvironmentVariable("SystemDrive") + "\" + #DefaultPath32
EndIf
EndProcedure
Procedure VerifyPatch(TargetFile.s, Architecture.i)
Protected TargetHash.s = UCase(FileFingerprint(TargetFile, #PB_Cipher_SHA1))
If Architecture = 64
If TargetHash = #Patched64
ThreadedMessageRequester("Success!", "ASIO Link Pro (x64) has been patched successfully! Enjoy!")
Else
If FileExists(TargetFile + ".bak")
DeleteFile(TargetFile) : RenameFile(TargetFile + ".bak", TargetFile)
ThreadedMessageRequester("Restored Backup", "ASIO Link Pro (x64) does not appear to have been patched correctly. Restored original file.")
Else
ThreadedMessageRequester("Failed", "ASIO Link Pro (x64) does not appear to have been patched correctly and no backup file was found.")
EndIf
EndIf
Else
If TargetHash = #Patched32
ThreadedMessageRequester("Success!", "ASIO Link Pro (x86) has been patched successfully! Enjoy!")
Else
If FileExists(TargetFile + ".bak")
DeleteFile(TargetFile) : RenameFile(TargetFile + ".bak", TargetFile)
ThreadedMessageRequester("Restored Backup", "ASIO Link Pro (x86) does not appear to have been patched correctly. Restored original file.")
Else
ThreadedMessageRequester("Failed", "ASIO Link Pro (x86) does not appear to have been patched correctly and no backup file was found.")
EndIf
EndIf
EndIf
EndProcedure
Procedure PatchFile(TargetFile.s, Architecture.i)
Protected Truncate, Length
If FileExists(TargetFile + ".bak")
DeleteFile(TargetFile + ".bak")
EndIf
CopyFile(TargetFile, TargetFile + ".bak")
If Architecture = 64
*PatchStart = ?PatchData64
*PatchEnd = ?PatchData64End
Else
*PatchStart = ?PatchData32
*PatchEnd = ?PatchData32End
EndIf
If OpenFile(0, TargetFile, #PB_File_SharedRead|#PB_File_SharedWrite)
*Pointer.MemoryPointer = *PatchStart
Truncate = *Pointer\b : *Pointer + SizeOf(Byte)
While *Pointer <> (*PatchEnd)
FileSeek(0, *Pointer\l) : *Pointer + SizeOf(Long)
Length = *Pointer\l : *Pointer + SizeOf(Long)
For i=1 To Length
WriteByte(0, *Pointer\b) : *Pointer + SizeOf(Byte)
Next
Wend
CloseFile(0)
VerifyPatch(TargetFile, Architecture)
Else
ThreadedMessageRequester("Failed", "Could not open the file for patching. A team of penguins has been dispatched to your location.")
EndIf
EndProcedure
Procedure IsValidFile(TargetFile.s, Architecture.i)
Protected TargetHash.s = UCase(FileFingerprint(TargetFile, #PB_Cipher_SHA1))
If Architecture = 64
If TargetHash = #Unpatched64
ProcedureReturn #True
ElseIf TargetHash = #Patched64
ThreadedMessageRequester("Already Patched", "The supplied file appears to have already been patched.")
ProcedureReturn #False
ElseIf TargetHash = #Unpatched32 Or TargetHash = #Patched32
ThreadedMessageRequester("Incorrect Architecture", "The supplied file is the 32-bit library, but you're attempting to apply the patch for the 64-bit library.")
ProcedureReturn #False
Else
ThreadedMessageRequester("Unsupported File", "The suppplied file is not suitable for patching.")
ProcedureReturn #False
EndIf
Else
If TargetHash = #Unpatched32
ProcedureReturn #True
ElseIf TargetHash = #Patched32
ThreadedMessageRequester("Already Patched", "The supplied file appears to have already been patched.")
ProcedureReturn #False
ElseIf TargetHash = #Unpatched64 Or TargetHash = #Patched64
ThreadedMessageRequester("Incorrect Architecture", "The supplied file is the 64-bit library, but you're attempting to apply the patch for the 32-bit library.")
ProcedureReturn #False
Else
ThreadedMessageRequester("Unsupported File", "The suppplied file is not suitable for patching.")
ProcedureReturn #False
EndIf
EndIf
EndProcedure
Procedure PatchButtonClick()
Protected TargetFile.s, Architecture.i
If MyButton::GetProperty(#Option64, MyButton::#Prop_Checked)
Architecture = 64
TargetFile = DefaultPath + "x64\asiolink.dll"
Else
Architecture = 32
TargetFile = DefaultPath + "asiolink.dll"
EndIf
If FileExists(TargetFile)
If IsValidFile(TargetFile, Architecture)
PatchFile(TargetFile, Architecture)
EndIf
Else
TargetFile = GetCurrentDirectory() + "asiolink.dll"
If FileExists(TargetFile)
If IsValidFile(TargetFile, Architecture)
PatchFile(TargetFile, Architecture)
EndIf
Else
TargetFile = OpenFileRequester("Please find and open your " + Str(Architecture) + "-bit asiolink DLL file...", "asiolink.dll", "ASIO Link Pro DLL | asiolink.dll", 0)
If TargetFile <> #Empty$
If IsValidFile(TargetFile, Architecture)
PatchFile(TargetFile, Architecture)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure Toggle32()
If MyButton::GetProperty(#Option32, MyButton::#Prop_Checked) <> #True
MyButton::SetProperty(#Option32, MyButton::#Prop_Checked, #True)
MyButton::SetProperty(#Option64, MyButton::#Prop_Checked, #False)
EndIf
EndProcedure
Procedure Toggle64()
If MyButton::GetProperty(#Option64, MyButton::#Prop_Checked) <> #True
MyButton::SetProperty(#Option64, MyButton::#Prop_Checked, #True)
MyButton::SetProperty(#Option32, MyButton::#Prop_Checked, #False)
EndIf
EndProcedure
Procedure InitWindow()
SetWindowColor(#WindowMain, $1C1C1C)
LoadFont(#FontUI, "Consolas", 10)
MyButton::SetTemplate(MyButton::#Prop_Font, #FontUI)
MyButton::SetTemplate(MyButton::#Prop_BorderColor, $1C1C1C)
MyButton::New(#Option32, 10, 184, 50, 25, "32-bit")
MyButton::New(#Option64, 59, 184, 50, 25, "64-bit")
MyButton::New(#ButtonPatch, 119, 184, 398, 25, "Apply Patch")
MyButton::SetProperty(#Option32, MyButton::#Prop_Type, MyButton::#Type_Toggle)
MyButton::SetProperty(#Option32, MyButton::#Prop_ClickBackColor, $FFAD25)
MyButton::SetProperty(#Option32, MyButton::#Prop_ClickTextColor, $1C1C1C)
MyButton::SetProperty(#Option32, MyButton::#Prop_Checked, #True)
MyButton::SetProperty(#Option32, MyButton::#Prop_OnClick, @Toggle32())
MyButton::SetProperty(#Option64, MyButton::#Prop_Type, MyButton::#Type_Toggle)
MyButton::SetProperty(#Option64, MyButton::#Prop_ClickBackColor, $FFAD25)
MyButton::SetProperty(#Option64, MyButton::#Prop_ClickTextColor, $1C1C1C)
MyButton::SetProperty(#Option64, MyButton::#Prop_Checked, #False)
MyButton::SetProperty(#Option64, MyButton::#Prop_OnClick, @Toggle64())
MyButton::SetProperty(#ButtonPatch, MyButton::#Prop_OnClick, @PatchButtonClick())
EndProcedure
Procedure InitResources()
; These resources are compressed. Let's uncompress them and prepare them for use.
; Font Sprite
*Buffer = AllocateMemory(2606)
UncompressMemory(?FontBitmap, ?FontBitmapEnd - ?FontBitmap, *Buffer, 2606, #PB_PackerPlugin_BriefLZ)
If CatchSprite(#SpriteFont, *Buffer) <> #Null
FreeMemory(*Buffer)
TransparentSpriteColor(#SpriteFont, FastRGB(255, 0, 255))
CreateHeader() ; Create our header text sprite.
Else
FreeMemory(*Buffer)
Error(#LoadFontError)
EndIf
; Palette Sprite
*Buffer = AllocateMemory(214)
UncompressMemory(?Palette, ?PaletteEnd - ?Palette, *Buffer, 214, #PB_PackerPlugin_BriefLZ)
If CatchSprite(#SpritePalette, *Buffer) <> #Null
FreeMemory(*Buffer)
StartDrawing(SpriteOutput(#SpritePalette))
For i = 0 To 127 ; Populate our color palette using the colors from our palette sprite.
Palette(i) = Point(i, 0)
Next
StopDrawing()
FreeSprite(#SpritePalette) ; We won't be needing this anymore.
Else
FreeMemory(*Buffer)
Error(#LoadPaletteError)
EndIf
; Music
*Buffer = AllocateMemory(47213)
UncompressMemory(?Music, ?MusicEnd - ?Music, *Buffer, 47213, #PB_PackerPlugin_BriefLZ)
If CatchMusic(#Music, *Buffer, 47213) <> #Null
FreeMemory(*Buffer)
PlayMusic(#Music)
Else
FreeMemory(*Buffer)
Error(#LoadMusicError)
EndIf
EndProcedure
Procedure EventLoop()
Define Event
Repeat
ClearScreen(FastRGB(28, 28, 28))
DrawBackground()
DrawHeader()
FlipBuffers()
; We want our music to loop...
If GetMusicPosition(#Music) = 255 And GetMusicRow(#Music) = 0
SetMusicPosition(#Music, 0)
EndIf
Event = WindowEvent()
Until Event = #PB_Event_CloseWindow
Quit()
EndProcedure
;==========================================================================================================================================================
;-- Initialization
;==========================================================================================================================================================
UseBriefLZPacker()
UseSHA1Fingerprint()
If InitSprite() = #Null
Error(#InitSpriteError)
EndIf
If InitSound() = #Null
Error(#InitSoundError)
EndIf
;==========================================================================================================================================================
;-- Main
;==========================================================================================================================================================
If OpenWindow(#WindowMain, #Null, #Null, #Width, #Height, #Title, #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
If OpenWindowedScreen(WindowID(#WindowMain), 0, 0, #ScreenWidth, #ScreenHeight) = #Null
Error(#InitScreenError)
EndIf
InitWindow()
InitFontIndex()
InitResources()
GetDefaultPath()
EventLoop()
EndIf
DataSection
Music: ; compressed size : 8142 bytes // original size : 47213 bytes
Data.q $73617274626C7A31,$000000000000B86D,$0000000000080000,$646E657478000045,$6C75646F4D206465,$6465460000203A65,$6874695720705520,$41000053494C4520,$747361461A202020,$0072656B63617254
Data.q $2030302E32762000,$0000011401042020,$000C000000000014,$0008000100100013,$0403020000010078,$0D0B0A0908070605,$110FBA0F0E070C05,$040900C200001210,$3A000A83048F0040,$03359B8004358306
Data.q $3C9B00815880040A,$808005368301D00F,$0438831D0011389B,$801787083A838025,$002362BC3C11419B,$043683063A6D497C,$289113369B2B1080,$113A353A030F3D56,$429125A141043A83,$49232BC73D117876
Data.q $0B33ED063A6DC0C2,$8A35B5C63B9113B1,$113F910BC3FFD91F,$6D493E1D23B15E3F,$0E8F23558E91F0EC,$777D47C62FC521C7,$10848047E41D271F,$1030083A20460FC0,$25B850A08E930E3E,$25E16CD847B8437C
Data.q $93808004E4000497,$F304033C9B370141,$0F98808080170000,$371F024197808008,$041310F404218598,$84120F1884138218,$230028000C3B0850,$3803418337300235,$3F834B1508131086,$272A10132762B813
Data.q $47014207C09C1344,$1F3E1002429C3A9B,$01429CEC08139C47,$023623000C428047,$F0C53774477C2130,$200A46277054139C,$1D38834701449C13,$4D86084044261284,$3D3926BC613C8312,$9C158E3826125082
Data.q $26BA103A4DE15888,$37F93A27D4AA5060,$0C0F0C9C3B16213A,$ABD2550146932300,$2B374AAD8B0FAB46,$6F4D2250883AE884,$9AE142FB9AF84B35,$ADC42E3C27F10A13,$139D287671F27425,$9E12F836719E223E
Data.q $2743B1139E50BCFD,$D470B87392B29E3C,$AC2A1327B2431D4D,$399E1310893A13D7,$75D6BB1026B15884,$60B10F39ECEC6212,$C9ECF33B73AE8926,$639B6074FE207CEA,$CA1411F504034408,$42897CBE27392787
Data.q $7C8944C1D8AB7CC0,$9AFDBE1017AA3436,$31605D169AEC7D13,$0C3A084225000D84,$379084D62219E800,$083A8325064E0010,$261D0E4C75843E72,$007305F4EC613439,$3004418740043522,$220A0A2108C30241
Data.q $A544800BAA442E24,$481705C13A041509,$0849384034500817,$58033C9330044D01,$849280041A219018,$08081620943C2710,$1243B81084494994,$8E6F22175E58EC14,$300442876402E158,$46802FC008851B42
Data.q $491717086115C286,$84493A8361180217,$1610A159033D9310,$209480B41078BE18,$467C3175084F2815,$D8DB175BF8B114BD,$089DD6EBF26AF18B,$20175E042A1826BA,$3C503E835E174B5C,$87D1B911033F9346
Data.q $043FBCA060300444,$5815BDF842108448,$7EBD8EEC78175EA8,$610138C00AF05F85,$2278BE02442AC493,$AAB859F1D015365D,$57003B37013AFF80,$2E30024697043883,$F853AABEA2BB4F26,$5D762ED6FA890CED
Data.q $FAFC961EFAC994BC,$21FCDF3AF2FCE5F5,$3BF8764E083AF8EE,$201DFA743184FAF7,$650028706E660C96,$C862494883285813,$0B334678B883F7AB,$0A0060850A4AF995,$2985E44983135E1C,$92F1B417148621F5
Data.q $215515410B1E2B65,$DE4EB3ED92F1576B,$0010F2155BC70AEF,$625300102B421029,$133A2610A000CAB5,$DFF256504B5C2A83,$C2E14483E1832F21,$0A855E0042876017,$42145DB162107413,$2F412BE10CB417C5
Data.q $3C74D5B25407D79F,$EED7F75EA1135799,$A22C00B10BCE57B1,$001087BDC855ABFA,$E4D0501342123C28,$4416C8B890133C87,$C21513842FC61887,$F857ABB108135A87,$FBC0AC5128171462,$1513BE2421510058
Data.q $BC2A0C94A451E3A1,$BAB25BEA53002843,$5141838C9E8C9F38,$D25F003C28505FB9,$8941F2842EB213E1,$579252EF5321C5BF,$72C92A1785B179C7,$135E381500600A14,$2A5DB3290F105083,$0E2BB41708171486
Data.q $1518FB4D83CF4151,$57874AE4D1256357,$DB10FFD3F7192B60,$92CC44AD90757F16,$48412BB10BCC907F,$55CC5755C4E2151E,$C2845BCC12F19CF1,$5CF118293C910015,$214200BFCAC42A6F,$97AE7DB10A133C28
Data.q $E21CCC642B89CCBC,$505E00602842894A,$86D70465CB9C13A1,$0819115C165FB510,$D0B278BA2FAA187C,$B5D02E1DBA87F96F,$B82B57C43B34C5EE,$7091350605A6D025,$D94687498895043A,$0F8868424D62086D
Data.q $033A931361C50000,$04AC3D838EE8C537,$7F32345083614946,$A08D1084DF21593A,$4B620A846A411994,$2C033A9764312C0A,$1094170A892F4984,$E563E2A92AF24737,$033693135F78162F,$E621E2BE2A182843
Data.q $E7BC2E10C9172094,$E6C962422E6852C2,$E8A1605B2C856300,$3AE8475C08209418,$0335AD4975220A06,$41084931F399418C,$15601550C1138C31,$41832C4650811084,$BE300822784662F1,$6430044BF808423D
Data.q $4E0444351B183119,$67C054508CF305CB,$334F216038034193,$1513384218209418,$44A13393FDA885C6,$619428A692B330BE,$1077591915150C5F,$1484231216462D42,$3381023803130B2C,$6F44972F6B990203
Data.q $3F321718601C4834,$D560107627948090,$46DDB7300144520B,$6F942C025E6ADC02,$212814041546845E,$97024651AACD2C16,$15041A1088323850,$C2026E8533C55617,$2BAB7B10941983C6,$2E58BCD0023788C2
Data.q $30542C005B766F18,$5E183AB3699E4A2F,$7F0013579B108415,$21601400E68409A2,$385C3F2094163116,$ECA25F430037C465,$482D856210029BCB,$D1AA2C1412842116,$0234202F7E390F02,$083C831E6E041513
Data.q $7100083C5E81E600,$D9B4D70D46DACCA9,$0790840D4B2B0ACD,$29137A642188000D,$0844D5428DEB06DD,$04CD3CD519170865,$1504684280EDA55C,$07A29E175F162B17,$4129218800ED7284,$21F916142F908413
Data.q $9551B602B1F1B858,$0AF8E0FE2A158000,$E4A1698001A3C918,$FFD8AF158AED5EB1,$FA254280FC22BAB8,$FBB7711865162B4B,$15440A1598B3EBC9,$B2F4593CBDF953A1,$5B15F25421596FD8,$42EAF5DDE4F4E4FB
Data.q $17EC15C4485C63A9,$30EA92A55A161443,$1513215DECBE8F24,$DF1962AEBCEA13A1,$2C5CCAEA93C4EF77,$3D42B05721711859,$8E9D55C9E4B226E8,$A855E8F279155CA1,$58894CE8C4F1B62D,$EF6316140842E863
Data.q $A8C0A618E8E316C4,$283290942AA4E895,$A619152B2648BD26,$12439F1646602108,$8DB243EC1BD51214,$15279C13EE8908DA,$CD3ADF452E73B504,$0435EDB000A2DFB9,$0A370141F304109C,$00FC0A4683192108
Data.q $48F40498806A0004,$13103181080A3702,$112D0862441884C6,$2AC022D4C311FE14,$D3A421080A230141,$034183B00080311B,$0A2C40230248324D,$040C213C83608808,$0860374437033F83,$0363104183661917
Data.q $806B198405173467,$5F334D3307434483,$823742C29E3C0436,$38154049CF6E0FD0,$163346788418846C,$329A6C216B182135,$C44ED5BAE3823242,$83F154183449340B,$173446421034033F,$6803418367C0C719
Data.q $330E86461933430A,$0338836740AA334E,$188480803501AA3F,$D0803B3C66B0A507,$3D525E83043CCF30,$033FD03530213F3D,$4B1BD705A890354B,$433A6B1AA95E3884,$3610846C3D6C0761,$334B9F6C38211917
Data.q $32CEA6D218160858,$A796316D36D43178,$886B171508626C38,$6A18164314337BC9,$D3AC7841D37D4AB0,$065F898108456AB7,$210A343E225AC463,$7D378B58AA661B19,$4A50B3620435D406,$807080BF4CE8DF39
Data.q $D7426E16ABF30498,$D1D980DBC1C256AC,$568C328BF6EA56BC,$1734EE6210F30498,$84043A836C803119,$F99444585C653418,$F12FCC246AB24158,$D46133A1573A583D,$80575E6510848058,$8E579C97C655D1B2
Data.q $10B664843936EDA1,$D0842C1917343D62,$AACA54D37D9D0E35,$5D601AF15C606C5D,$775BE31F60778E35,$366C3850C460FF66,$9F17926C1917210E,$D45CB18BD2C6D530,$884338A96DC4B136,$79616B15E617156C
Data.q $8A3CD363A0AC1885,$D606B95AFCB7D378,$193421083E22634A,$5053378B6652C51B,$DF395835336235D4,$5F57D4708BF158E8,$9368D1558B0E349E,$E2A5CD7B7AA1B4B2,$7090AE5CD08535B1,$1063A184083A335D
Data.q $D85FF7AA6519C832,$9E4D1A8780043535,$806C1F46806E415E,$33855E44805F1A46,$803A197C8D612C57,$C85EE32601366A37,$0DE75115132E2108,$30A1D12D802F9766,$8A2D2C575EC43876,$2FF18F4C80231993
Data.q $2B1EBB195BC6BBED,$11A827FD48C97947,$61ED2C621B328D56,$3A25081513108631,$8B182FBDC317452C,$781513843E5F3261,$2521A3F10CBE5EC7,$A35C5C21055A2E76,$92AE5F77BD2F8AA1,$5BEC422E03CA50FA
Data.q $2F1D0B175CB8432E,$95E8FF8EFF72DDBE,$9E9EABABFD95B7DB,$7B527EB57CD71D2E,$151E21412BE10B44,$45A7594335B6576B,$4BC7B37D971D74B8,$9F2900150A105B1D,$BA90CFF72B2E30C9,$0A15280068D621B0
Data.q $5D1752C31FA1133C,$48E74C4D851D4A84,$0060C28572C46A85,$869AB52A135E0E15,$B4172A17145DB310,$3F1974F6412B0859,$4387198BA557A9A6,$5D2FF7604A1457E4,$52EA5F1E5715D619,$CCEC9E4157272863
Data.q $60A28B85CCF93A27,$40132A185E000A1C,$412B6216CCFA25B6,$54CC591EB6153A15,$2AF15859CC303FC8,$1820782900A10F15,$BFE5622A5C838080,$1342503C2810E800,$121015FC973CD250,$2A13C8E8901816CA
Data.q $8B135A8550831584,$55428900E2E508AE,$512127004215C6B0,$2E1070150DD413C4,$3B00C2C94240AA53,$F596C025B9295384,$9B778EBACE966EAF,$2118ECA3BEF1E25E,$5C4315055A4AB82E,$FAA885BD43EA2FA3
Data.q $97803A2C0EC81084,$E858C495E4AC38AC,$4D081513210C2F5C,$B880E7CA18372C74,$348621305FB84A2F,$D01060170FB11561,$C0A8786040083ABC,$C12D43A15EBEC5A7,$DFB2BDFDCCFD6E6E,$0F1084CA45F05D77
Data.q $4BA22C345D7343A1,$D65FE245E55087E9,$E3583897DFC529D1,$F2E77122CA9F2F6D,$D6B8C5F96513A162,$E5C951DAE394EACB,$13E7210B59862859,$BD432A2B4A2EE415,$0DD4B573992A5870,$83D4E95B851454B2
Data.q $2C72F3240A190946,$210813C7D11E005E,$F2363044FC1917EB,$2D00ED50A117EB90,$1715210BEB5E6324,$C9B2FEE9171DC42D,$F1150CBB682FC470,$182312A1152F44D0,$98F10508BE2E0879,$F5BE324388190202
Data.q $F9C82B1C4456BF83,$5F182E1621418380,$80F941782E008874,$28636FB2792F3F83,$084449F542155EB3,$EEFEBC5E4B2E74F1,$3618168421E862C5,$151302D0866563A8,$EA308A20E4C22EDD,$A0029832FB805920
Data.q $17AC621917320742,$0BDC00164818C52F,$093D9B050C80EA2C,$380631551A1C4003,$3C5C3F8380EC3215,$00B30A80ECDCBFF1,$48331918A8F20498,$4B623158A3BC02DE,$A3061911BCA7045E,$31190858A1C21763
Data.q $15D52C64807791D1,$C6566B2E18F10831,$995AC6329C508708,$109B08AA8C244908,$0C301AB003094B0A,$1E300043E3611AB1,$9B774AE2604D0A2B,$BC2C0014210AA475,$213362F3000879B1,$633536794E830616
Data.q $0A317892D0EF0863,$4E15F4A274324B83,$43462BF3131015AA,$460008A3622A14B8,$5CA8CBF5DB042DC5,$18B33C71187CD7B3,$F9EAAB1EF81547CD,$15992642C6FF72A3,$CF14D1AA1A126E89,$54601435624C3419
Data.q $6BC5622D2A1412B3,$8ECD121988D56312,$3F18C2D5EA191231,$9A5E37C978155F7D,$42C032A18F10C287,$3B850CB3545D0E35,$2F375D188E845F2C,$B766F24892CE0EBE,$058817608E94310C,$2F105E5E6A16488D
Data.q $7862103563BE3086,$AE1665A8513410B3,$01981018231C6710,$0A12699CC6514876,$8A127D1B0ABFEF3D,$589812CCA3C5DED9,$991512F37059B3BB,$0712194210125B87,$28D631125E1E6918,$1B8E150866A2BF17
Data.q $332B00081B10F150,$5CCF067BB113B886,$4606C0151B06D1BA,$2CDE5CE2560617C7,$6C4319366A840662,$2A3604E3792F0006,$F5412B00210C0477,$BE5A087934291364,$02E37ABC1902BC50,$5F153E1502BCDE34
Data.q $025D0B5818492A85,$02312E3602BCDEBC,$157594452D00210C,$FEF262BA49A9620F,$629563FC5C1D9300,$6358C900FC262861,$64ADBE4CEE87FA16,$54E310847E164BFA,$B147178E6843F9F2,$00F95931C0001618
Data.q $2A008E1DF7580AC9,$A80535EAC63F88ED,$580A00A3BF00BB58,$314232B1518316DE,$2CF85FC5132E00FA,$59F61777122D0014,$9369156B21E48AF3,$BF2E18C4212515F1,$ECBFDD5438FA512A,$B8FE32544C22FC9E
Data.q $86A2617B682E0050,$2E0021F15F182E58,$C56DE4F2B4FA2E6D,$2A48AB1D155EB350,$BC2E217974FC1384,$00021B1462FE2F1D,$00009B1065362C75,$30003851FEAA262C,$1762D3849DE7275C,$4886312F17E4EE18
Data.q $46BFD62C42250016,$31002C5517F9E601,$31197AB6230046EC,$8304718BBE62027B,$7358873119143242,$0F002B138C982D00,$8900003628BE2AA1,$2E008B15FEBC2E43,$C0C209489BFC106A,$ACED62499B5F30C5
Data.q $F002BA1661F1F11A,$288F9C762E6F4AE2,$B1BE2C42F3000236,$A30079BF35DB0079,$356F047A851AC810,$C8BDEC76061888DE,$2AF2C4E82D086BD9,$462BF1262115A89C,$000646C52A147087,$01130276F02D8AB3
Data.q $1813CE1C18A1FB01,$32124A8B031251F1,$CD227F5668731845,$D7267A940E159758,$93340CA710462CD5,$0B1059AA60109AB1,$6A631235C2622D15,$90123187C61219C6,$4B5F81C9F8C20EE3,$0CC25EC43C3B15C6
Data.q $9A14C071AB3214D5,$2C742CA1DC145D15,$B890BE5D2179185F,$368579B25DBE6312,$14D50C3FC6BC8DAD,$62C74614BE5E6A30,$106528D734A85412,$CE10BDD818670B11,$CDB9F5F310ECD7C6,$C31B56FCF12A2D13
Data.q $4E030298E7C82817,$2B17346E422FA596,$5B5C366E6610A427,$19109C38708114F1,$6B85621AC2166199,$93700B4508703005,$0F9800000FFB28E1,$AC22200000010704,$110000022922C6DE,$30007FE028280001
Data.q $0800400004000000,$180008000E002C00,$0800200000001600,$0000460000003C00,$5A00400000005000,$6E00000064000000,$000A00000020002E,$00320018001E0028,$00000020003C0020,$0020005000200046
Data.q $002000640020005A,$00780020006E0000,$0606002000820020,$0503020503043A02,$0000002200803039,$D1400000AF005B02,$0000042000FFE001,$0512020300000006,$0000003502170100,$0FEF5000095D04C3
Data.q $5068012950D3AD00,$020201140002012D,$0000000C00850401,$50030900024004BA,$7400106C55203A3A,$53412F6479736172,$506AE8EEB9192146,$1807040C0021600D,$DE50EE40011768D0,$15709A6849002510
Data.q $743B3A2265047673,$7C0061683AAA5D00,$2700000176007036,$043A8000F0800114,$06050603060D0009,$064F7C0009020007,$9020010102815E9D,$00021B0EF504FC46,$FFFFFE8101000480,$FE0021FEFFFFFDFF
Data.q $FEFFFEFFFFFF00FE,$0000FE00D80817F9,$0000FF05075005FF,$203A3A36B000FAFF,$1F322E34302E3631,$3220202032303000,$C6AA7D2433333A30,$8000002C00042C02,$F81800A0AAED000C,$08FC0C0000FA1604
Data.q $FDFEFDFEFCFDFD2B,$FB3120F9FCFDFDFD,$200000FFFF7D00FF,$FCFBFCFFFF007400,$DC0802F100F9FBFB,$0404000058FDFEED,$FAFBFEFF9F401087,$00C0001291FAFBFA,$EE0608F602087901,$FD98100211F6FE06
Data.q $0196B06014F7FCFC,$9F48041104000301,$40F7F6F7F6F7F7E2,$FE70E301021E0408,$0100FA01887050FE,$FBC4F4F4F4F4F900,$0B18174E0F0E0101,$FDF3D7F6F6260044,$6B616D23F490003E,$1F2E736C632F3174
Data.q $6561732E74737300,$BAF477A46361732E,$48000040002852C0,$0000001416008017,$D212EC1E1EDC0200,$FC3EF6EE1EF20A04,$F216449A2E0000D2,$CC0100FF017F24D0,$16D8E200018276FE,$7C01FF0100FFAAC4
Data.q $2C500000364A8084,$0000AA56000000D4,$C820500008F6A06A,$CE482EA06620A678,$001FE1001B5D803F,$40ACB21EA5021700,$B8362E0050000DA0,$0421D5002034F64E,$C62EA70000010D47,$04D2F214EAAC00F8
Data.q $10040000001D12FB,$2CF02C1400240EF6,$24F80A06CA26FA12,$F4F500FC0095040A,$140000F60ED90017,$D4F80AD602FAF2DA,$0002E806FCF8DC34,$02F208F008F2F200,$F8FC04F80EDE04F0,$3C002CF60A21D800
Data.q $0004F42804F80830,$F018F800080C97C0,$00060EF20C080006,$EC14FAF80E00FE00,$10EE1EEA0AFA0C08,$F01CF204F40000F6,$0002020402EE12F6,$0EF8FA000014F204,$0EE616F00EF80000,$F8000012EE1EF404
Data.q $04F418F008F812F6,$3010EA06FC0406FA,$000C06EA97EC0E2A,$FCF40AFEF008EC00,$F4FCFEF4FA06F60A,$F6F40808EA000010,$F216F00404EA0804,$06F60E0000F004FE,$F806F60EFCFC06FA,$FA00000EF416F20A
Data.q $F20E000AF40AF20C,$00020CF602000604,$16000AF616F20000,$18F60800F40C00F0,$04F01600F40000FC,$EC0C00FC08F4FC10,$0008F4000002060C,$0CEE10F402FA0EF8,$000000FE02FE04F8,$04000AFAFA0002FA
Data.q $00EEFC0EFCEE1CEC,$FE08EC0A00EE1E00,$10FCF8020602EE0A,$08F604FE080000F2,$FE06F606000402F8,$FA0AF4000002FE02,$0CF20AFEF410F806,$E8CC00F80CFA02F8,$2F6563694E203A3A,$DDE60031724B8746
Data.q $DDDD2BF400F82EE8,$F62E7A7300A1F72E,$00330000000F6017,$2B000043CD818000,$FE02013B3400AAAA,$BC008548F99E6602,$38D82800009C63FC,$25C70895B7008000,$0C6F890873FFE767,$C15AE80000000F80
Data.q $0800FF003501FAFE,$814505043E73FFF8,$84F6000085080E25,$0100780008EBF2AB,$30B63BA9E9E91C10,$00101EE299824A04,$9F9F61847E0000FE,$643D22E5B6E03B03,$0AC1010067479687,$AB0002FDE51BDCDD
Data.q $42A0D1182F0B0006,$3EC200D5B9DBD200,$2FA100A0041116EA,$01B21F00CB9A8448,$220022070F000036,$55AB7E82C63DF2D1,$22DE3EFC96CB40C0,$6FBD200008AF6799,$721D4CDA52B37AD8,$B12D2600F45700FA
Data.q $A1293DBBB6021E23,$0033CD00000E0D5F,$0015FBBBEBB45065,$09E82BFA077CAD1F,$442891A707D06C00,$5C00001BE50004FF,$AF36E71EC309F718,$01CAD592E44CD053,$E71BD2E4B7FC6A00,$FE03FFCD111FD32C
Data.q $FFF7030600350C00,$E02CD100006FC046,$F000245389BB6989,$380000C800001000,$D5FE0001FF19E700,$004F4C6FF6D9AC2D,$06F2F413BE20A500,$FEE41BEA18FFFB01,$14FCEF17C900003D,$C6FF48AB391DF9EB
Data.q $DF23F7000052D54F,$0D687E152A24BD62,$500000FFB10040CD,$FFB30058CA19CCF9,$00FAC63EBEAF454E,$73DBB115EE17DE00,$1E0101E7BE53C69C,$27FA05F80708B0E4,$EB161B00000BFF02,$847274FAE36AAF4C
Data.q $AC0000679F59DEED,$0DF300004EB20A4A,$000ACD2FD60DEE00,$FFFA738CC3FD1500,$77E7FCA05AA6706E,$A670BF1D15000094,$43F9A65405B940F9,$38E0FA00001413C3,$478E61DA5FC436FB,$CB000025DB869145
Data.q $25EFEC30D02CD435,$00FA748C0C4CA800,$BFE80C0BE227AA00,$57832AEF31A21D13,$0216DC29D30000CD,$16FD01D42F0100E3,$00FB0A000019F9F4,$7E7297E937903644,$DC00003E4E7460CB,$940052AE0AF635EF
Data.q $0049D211D4200844,$E2CF3ABB040CBE00,$EBC426BA4ABF0105,$0A0FF1CE2400000C,$11EE0314C83ADB11,$EE40220000DBEC2B,$0EE351DE070644CF,$F30000589C5ACF20,$28B3F84CDCEF2CED,$00E449C32ED2E82D
Data.q $E1C254AB35DE0200,$C4DC549CCB6B9437,$CFEA53D2B9000057,$FBB23DF30AF91EF5,$CB3E1D0000C01729,$450CEF47B6510308,$ED000029F72006CF,$3EC31DF7ED6A943E,$00E93CBD44D304DB,$FEF22EB60228C000
Data.q $CA29EB0406D9EA11,$B82102D71C0000F3,$D7D23BFFE122AD65,$48C5240000F13FFE,$2DF103C98C9D50C2,$09000048944CE607,$F00A080C12E608F9,$00B53BC12128D81D,$0A5AA21BEA132500,$FEC419FAE024CDE2
Data.q $EC05D810E1000012,$EDF12AA0629E46F1,$CA22FD0000E140F6,$1611F41139C92C1D,$DD00001917C663C4,$DB2ECE3719AF2C21,$00160604D230ED14,$D61BE525C842C300,$061ACE0127C51D09,$F31FF2DE040000EA
Data.q $DF06299C40E72BCF,$9D53E6000001DD28,$DD5DBC5D9334063B,$150000FD20DE29EE,$67E00514E31B1BD8,$00132DE526C95394,$24E009E340F5CA00,$17C423E010F7FDF4,$E1D52711C5000001,$D70EFEF40DDB0A15
Data.q $0D0507000002D527,$DF100A0BEF1602E5,$00000055C60D1520,$1606EDED2A1FFDD1,$00BE41C747CD28E8,$0EE036B252BA4400,$1907D61EF2FC0203,$11EE0204E10000EE,$1017EFF0F307EBF4,$10E71300000AF2E9
Data.q $D248E408060BE8F0,$FA0000142BC81D08,$1409F7FBF62504EA,$0024DE1E0EF10C02,$0BEAF4290DD80900,$13E1FF26E2FDF60F,$21BE3BC605000006,$06E7EA30C8EE1EDC,$21E20400000CF8F7,$DE36DE17DF27FFD5
Data.q $EE0000111FF2F516,$F00D25C227050315,$0007FAF430DD0719,$FC03F125F0F71400,$1AE902FEFA06FA04,$10E029D413008AEF,$6F53244580F318E2,$B6A3A265726F6D20,$292414A25237752C,$70BE1800001D2083
Data.q $0014000824280003,$00000022000D0016,$003D0020002E0013,$CA5300310049002D,$2400365F002D000E,$0800050202000903,$00000480C7215603,$0003F80000268000,$22002A0000228800,$6C61440601800200
Data.q $0000189708797A65,$04040606080A03AC,$4286FE654C900202,$00B001047E000358,$00020202028CFEFE,$045E105600030F08,$C2BA00BC5504AA00,$50230AEB24E15723,$570A24EFB1232485,$15235C2E24EB8523
Data.q $24B1572370EF24BA,$B823248558230AEB,$24BAC2232455C2AE,$3A155400041704AC,$24BC542370BA0004,$0485C1AE1E232A2C,$FD8A00040EC75200,$7824D8AB23B87724,$D0AB25FC5F242385,$D724C2AE23857524
Data.q $23575C240AB82315,$87245D7023242AE1,$24C76225E2FE23AB,$509F04B024E82123,$24BF1D0051550A00,$044E2421F8238ABC,$5D420004B242A100,$23242AE125E87624,$7D8A23AB87245D70,$252463E123B87D24
Data.q $5C2A23B85724F50A,$552462AE23E1DF24,$23575C248AB82317,$D024F70E23242AE1,$0004B443C22425C5,$24FBC2000415434C,$3C5DB600041F844A,$24855C230AEB0004,$5523570A24233AB1,$24157023C2AF24BC
Data.q $57235C2A24ABC523,$241555230AEA24F1,$C723247770238ABC,$24A85523770E24AB,$C52324157023C2AF,$24F157235C2A24AB,$17232455C2230ABC,$24085823C2BA24AF,$D0044842B80004B8,$E2F823B855240077
Data.q $83B57824235E2724,$0AE85E5D55ACFE00,$25AE85242577D824,$E3AE25A85524750E,$25242BA125855E24,$78AE25EE1524578A,$252462E125E1DF24,$42E125A15D24578E,$25A15D24578E2524,$0424D562252442E1
Data.q $00042821BC0023AE,$24FC55005E2A0444,$044224821523C2EE,$00157004BE00E10A,$1524578A23ABE124,$23E1572478AB23BE,$B124231578248ABE,$23FEB122558A23AB,$8AC423E1572450AB,$476749AE75802324
Data.q $2C634100012C4D2F,$205342502C44504F,$5805DF4721212121,$23001000150007AE,$1D6003E1D7969D6B,$03067501000904AE,$00AEAF8105080005,$490000F635400C3D,$020037000001D40B,$00004FAE75A80980
Data.q $FEFCFCFAFAF8F6F2,$7AEC7AFE0054506F,$79D6B1820023AD54,$7C10046200AC21B0,$50FA00BF1F049E00,$633A3EB83987D63A,$58FA39EA1F3A397D,$583AC3EA39E1773A,$F58F39FAE13A391F,$0485F05EC9A7A83A
Data.q $00770F04A242FC00,$047508A439AE083A,$A600843A8FFF5D00,$3AFAC73900875804,$045F8AA80039D408,$D000C3F3C6E3AD00,$D43B3AFA8700F3AD,$D7A295393A870B39,$BE2E001C75AF9D6F,$72F2E900639D8AB8
Data.q $3E2E3A1F5C0063EA,$E4A7E600959F0B39,$D6000D7E3A003A7F,$3910EA3A3EB839C7,$6E9A0017ED04B400,$39AC7D0057D56330,$6AE13985CD3A63EB,$10B8BDEAD45C003E,$8BAF39A1F5005C3E,$00F72BC73915973A
Data.q $740085950F3197B9,$F0FB2D002B7D177D,$1FAFC03A391D8800,$6F0008206B636953,$6C6C612074692066,$1100180DF42E2E2E,$600000202E856B00,$206C6C41203A3A20,$796220002F706D53,$00646E6120656D20
Data.q $646C6F20796D2000,$5C65202C35375020,$0400407470657808,$4130203439302320,$1D6D6F21D0726620,$6154222CFBA78020,$206E6F206501176B
Data.b $6D,$65,$C0,$52,$37,$20
MusicEnd:
PatchData64:
Data.q $000003000193B700,$000198CE9000B100,$019E62EB00000001,$A609EB0000000100,$C8EB000000010002
Data.q $0000000001000384,$0000000300039804,$040004E1FD9000B1,$E1FFFED0E9000000,$000000000100053B
Data.q $0000000F00098B88,$6C6F43202E412E47,$986576697463656C,$320000000400098B,$0300098BF0383130
Data.q $8BF4746150000000,$6568000000060009,$00098BFB79622064,$2E412E4700000009,$098C056C6C6F4320
Data.q $6974630000000600,$1A00098C0C2E6576,$796F6A6E45000000,$0000000000000021,$0000000000000000
Data.b $00,$00,$00,$00,$00
PatchData64End:
PatchData32:
Data.q $00000200017A3000,$0300017A4483C600,$808D9000B1000000,$F6EB000000010001,$EB00000001000184
Data.q $0000000100028790,$000002000287F0EB,$060002880F000000,$90909024EB000000,$0000030003547290
Data.q $000491A89000B100,$AD00CAE900000003,$9000000001000491,$00000001000497DD,$0000010004B98300
Data.q $000F0008EC5C0000,$43202E412E470000,$76697463656C6C6F,$0000040008EC6C65,$08ECC43831303200
Data.q $7461500000000300,$000000060008ECC8,$ECCF796220646568,$2E47000000090008,$D96C6C6F43202E41
Data.q $63000000060008EC,$08ECE02E65766974,$6A6E450000001A00,$000000000021796F,$0000000000000000
Data.b $00,$00,$00,$00,$00,$00,$00
PatchData32End:
EndDataSection
; IDE Options = PureBasic 6.12 LTS (Windows - x64)
; CursorPosition = 318
; FirstLine = 59
; Folding = AA1
; EnableXP