Jump to content

Recommended Posts

Posted

Just wanted to let everyone know out there that my script still works on RPG-CLUB. (After being casted aside from the WPF script...)

 

I honestly haven't tested it, some users report it broken (probably retarded), but others report it working 100%(the smart ones who can follow instructions).

 

I don't really plan on updating anything. The script was made for the previous chronicle, but should work on the current. The code is all there, feel free to update it as needed.

 

 

L2.NET only. Although you could replicate something similar in WPF or something.

//credit to obce for half the code :P
//finished by mpj123
//v1.2
Define_Global int step 0
Define_Global int ok 0
////////////////////////////////

define_global int pak_tar 0
define_global int pak_atk 0
define_global int move 0
define_global int validate 0
define_global int use_it 0
define_global int open_inv 0
define_global int save_inv2 0
define_global int save_inv1 0
define_global int open_skill 0
define_global int open_skill2 0
define_global int use_skill 0
//
for a 0 255 1
SET_EVENT "<&SCRIPTEVENT_CLIENTPACKET&>" "<&SYSTEM_CURRENTFILE&>" opc "<&a&>"
SET_EVENT "<&SCRIPTEVENT_CLIENTPACKETEX&>" "<&SYSTEM_CURRENTFILE&>" opc "<&a&>"
next

step = 1
print_text "Target something ..."
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Target something ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 2

print_text "Move ..."
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Move ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 3

print_text "Move again ..."
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Move again ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 4

print_text "Use any item ... "
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Use any item ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 5

print_text "Open inventory ... "
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Open inventory ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 6

print_text "Open skills ..."
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Open skills ..."
do
sleep 1000
loop ok != 1
ok = 0
step = 7

print_text "Use a skill ... (any one of them, even if you cant use it)"
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Use a skill ... (any one of them, even if you cant use it)"
do
sleep 1000
loop ok != 1
ok = 0
step = 8

print_text "FORCE attack something using the CONTROL key!"
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "FORCE attack something using the CONTROL key!"
do
sleep 1000
loop ok != 1
ok = 0


print_text "Stop attacking and stay still somewhere to finish the last step, waiting 3 seconds"
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Stop attacking and stay still somewhere to finish the last step, waiting  3 seconds"
sleep 3000
step = 9

print_text "Close inventory ... "
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Close inventory ... "
do
sleep 1000
loop ok == 0

call block_packets
step = 10

print_text " rdy - target <&pak_tar&>"
print_text " rdy - target <&pak_atk&>"
print_text " rdy - move <&move&> i validate <&validate&>"
print_text " rdy - use _it <&use_it&>"
print_text " rdy  - open inv <&open_inv&>"
print_text " rdy  - save_inv2 <&save_inv2&>"
print_text " rdy  - open_skill <&open_skill&>"
print_text " rdy  - open_skill2 <&open_skill2&>"
print_text " rdy  - use_skill <&use_skill&>"
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "All Ready!"

for a 0 255 1
SET_EVENT "<&SCRIPTEVENT_SELFPACKET&>" "<&SYSTEM_CURRENTFILE&>" opc "<&a&>"
SET_EVENT "<&SCRIPTEVENT_SELFPACKETEX&>" "<&SYSTEM_CURRENTFILE&>" opc "<&a&>"
next

do
sleep 10000
loop 1 == 1
END_SCRIPT






function opc
lock opc
define int temp_ex 0
define int pak 0
//print_text " pakiet dlugosc <&packet.LENGTH&>"
if step == 1
     if packet.LENGTH == 18
        packet.read_byte pak_tar
        Print_text " id stored <&pak_tar&>"
        ok = 1
        unlock opc
        return void
    endif

endif

if step == 2
     if packet.LENGTH == 29
        packet.read_byte move
        Print_text " id stored <&move&>"
        ok = 1
        unlock opc
        return void
    endif   

endif

if step == 3
     if packet.LENGTH == 21
        packet.read_byte validate
        Print_text " id stored <&validate&>"
        ok = 1
        unlock opc
        return void
    endif   

endif



if step == 4
    if packet.LENGTH == 9
        packet.read_byte use_it
        Print_text " id stored <&use_it&>"
        ok = 1
        unlock opc
        return void
    endif   

endif


if step == 5
    if packet.LENGTH == 1
        packet.read_byte open_inv
        Print_text " id stored <&open_inv&>"
        ok = 1
        unlock opc
        return void
    endif   

endif


if step == 6
    if ok == 0
        if packet.LENGTH == 1
            packet.read_byte open_skill
            Print_text " id stored <&open_skill&>"
            ok = 2
            unlock opc
            return void
        endif   
    endif

    if ok == 2
        if packet.LENGTH == 1
        packet.read_byte open_skill2
            if open_skill2 != open_inv
                if open_skill2 != open_skill
                    Print_text " id stored <&open_skill2&>"
                    ok = 1
                    unlock opc
                    return void
                endif
            endif
        endif
    endif

endif

if step == 7
     if packet.LENGTH == 10
        packet.read_byte use_skill
        Print_text " id stored <&use_skill&>"
        ok = 1
        unlock opc
        return void
    endif   

endif

if step == 8
    if packet.LENGTH == 18
        packet.read_byte pak_atk
        if pak_atk != pak_tar
            Print_text " id stored <&pak_atk&>"
            ok = 1
            unlock opc
            return void
        endif
    endif   

endif

if step == 9
    if packet.LENGTH != 15
        packet.read_byte save_inv1
        packet.read_int16 save_inv2
        if save_inv2 <= 0
            SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "You need to stop attacking to be able to capture the close inventory  packet!"
            print_text "You need to stop attacking to be able to capture the close inventory packet!"
            unlock opc
            return void
        endif
        if save_inv2 >= 257
            SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "You need to stop attacking to be able to capture the close inventory  packet!"
            print_text "You need to stop attacking to be able to capture the close inventory packet!"
            unlock opc
            return void
        endif
        Print_text " id stored <&save_inv1&> i 2 byte <&save_inv2&>"
        ok = 1
        unlock opc
        return void
    endif   

endif

if step == 10
packet.read_byte pak
    if pak == 31
        packet.RESET_INDEX
        packet.write_byte pak_tar
        injectbb packet
        unlock opc
        return void
    endif
    if pak == 1
        packet.RESET_INDEX
        packet.write_byte pak_atk
        injectbb packet
        unlock opc
        return void
    endif
    if pak == 15
        packet.RESET_INDEX
        packet.write_byte move
        injectbb packet
        unlock opc
        return void
    endif

    if pak == 89
        packet.RESET_INDEX
        packet.write_byte validate
        injectbb packet
        unlock opc
        return void
    endif

    if pak == 25
        packet.RESET_INDEX
        packet.write_byte use_it
        injectbb packet
        unlock opc
        return void
    endif
    if pak == 20
        packet.RESET_INDEX
        packet.write_byte open_inv
        injectbb packet
        unlock opc
        return void
    endif

    if pak == 80
        packet.RESET_INDEX
        packet.write_byte open_skill
        injectbb packet
        unlock opc
        return void
    endif

    if pak == 166
        packet.RESET_INDEX
        packet.write_byte open_skill2
        injectbb packet
        unlock opc
        return void
    endif

    if pak == 57
        packet.RESET_INDEX
        packet.write_byte use_skill
        injectbb packet
        unlock opc
        return void
    endif


    if pak == 208
        packet.read_int16 temp_ex
        if temp_ex == 36
            packet.RESET_INDEX
            packet.write_byte save_inv1
            packet.write_int16 save_inv2
            injectbb packet
            unlock opc
            return void
        endif
    endif

endif
unlock opc
return void

function block_packets
print_text " blocked"
BLOCK_SELF_ALL
BLOCKEX_SELF_ALL
block_SELF 31 // target
block_SELF 15 // move
block_SELF 89 // vaidate
block_SELF 25 // use item
block_SELF 20 // open inv
block_SELF 36 // save inv
block_SELF 80 // open skill1
block_SELF 166 // open skill2
block_SELF 1 // force attack
block_SELF 57 // force spell
return void

Posted

This works and I am 100% sure since I tested it. Botting works perfectly, except for buffing, which is delayed by some seconds.

Posted

Whoever was having trouble with the buffing, could you try this script?

//credit to obce for half the code :P
//finished by mpj123
//v1.2
Define_Global int step 0
Define_Global int ok 0
////////////////////////////////

define_global int pak_tar 0
define_global int pak_atk 0
define_global int move 0
define_global int validate 0
define_global int use_it 0
define_global int open_inv 0
define_global int save_inv2 0
define_global int save_inv1 0
define_global int open_skill 0
define_global int open_skill2 0
define_global int use_skill 0
//
for a 0 255 1
SET_EVENT "<&SCRIPTEVENT_CLIENTPACKET&>" "<&SYSTEM_CURRENTFILE&>" opc "<&a&>"
SET_EVENT "<&SCRIPTEVENT_CLIENTPACKETEX&>" "<&SYSTEM_CURRENTFILE&>" opc "<&a&>"
next

step = 1
print_text "Target something ..."
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Target something ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 2

print_text "Move ..."
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Move ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 3

print_text "Move again ..."
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Move again ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 4

print_text "Use any item ... "
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Use any item ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 5

print_text "Open inventory ... "
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Open inventory ..."
do
sleep 1000
loop ok == 0
ok = 0
step = 6

print_text "Open skills ..."
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Open skills ..."
do
sleep 1000
loop ok != 1
ok = 0
step = 7

print_text "Use a skill ... (any one of them, even if you cant use it)"
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Use a skill ... (any one of them, even if you cant use it)"
do
sleep 1000
loop ok != 1
ok = 0
step = 8

print_text "FORCE attack something using the CONTROL key!"
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "FORCE attack something using the CONTROL key!"
do
sleep 1000
loop ok != 1
ok = 0


print_text "Stop attacking and stay still somewhere to finish the last step, waiting 3 seconds"
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Stop attacking and stay still somewhere to finish the last step, waiting  3 seconds"
sleep 3000
step = 9

print_text "Close inventory ... "
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "Close inventory ... "
do
sleep 1000
loop ok == 0

call block_packets
step = 10

print_text " rdy - target <&pak_tar&>"
print_text " rdy - target <&pak_atk&>"
print_text " rdy - move <&move&> i validate <&validate&>"
print_text " rdy - use _it <&use_it&>"
print_text " rdy  - open inv <&open_inv&>"
print_text " rdy  - save_inv2 <&save_inv2&>"
print_text " rdy  - open_skill <&open_skill&>"
print_text " rdy  - open_skill2 <&open_skill2&>"
print_text " rdy  - use_skill <&use_skill&>"
SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "All Ready!"

for a 0 255 1
SET_EVENT "<&SCRIPTEVENT_SELFPACKET&>" "<&SYSTEM_CURRENTFILE&>" opc "<&a&>"
SET_EVENT "<&SCRIPTEVENT_SELFPACKETEX&>" "<&SYSTEM_CURRENTFILE&>" opc "<&a&>"
next

do
sleep 10000
loop 1 == 1
END_SCRIPT






function opc
define int temp_ex 0
define int pak 0
//print_text " pakiet dlugosc <&packet.LENGTH&>"
if step == 1
     if packet.LENGTH == 18
        packet.read_byte pak_tar
        Print_text " id stored <&pak_tar&>"
        ok = 1
        return void
    endif

endif

if step == 2
     if packet.LENGTH == 29
        packet.read_byte move
        Print_text " id stored <&move&>"
        ok = 1
        return void
    endif   

endif

if step == 3
     if packet.LENGTH == 21
        packet.read_byte validate
        Print_text " id stored <&validate&>"
        ok = 1
        return void
    endif   

endif



if step == 4
    if packet.LENGTH == 9
        packet.read_byte use_it
        Print_text " id stored <&use_it&>"
        ok = 1

        return void
    endif   

endif


if step == 5
    if packet.LENGTH == 1
        packet.read_byte open_inv
        Print_text " id stored <&open_inv&>"
        ok = 1

        return void
    endif   

endif


if step == 6
    if ok == 0
        if packet.LENGTH == 1
            packet.read_byte open_skill
            Print_text " id stored <&open_skill&>"
            ok = 2

            return void
        endif   
    endif

    if ok == 2
        if packet.LENGTH == 1
        packet.read_byte open_skill2
            if open_skill2 != open_inv
                if open_skill2 != open_skill
                    Print_text " id stored <&open_skill2&>"
                    ok = 1

                    return void
                endif
            endif
        endif
    endif

endif

if step == 7
     if packet.LENGTH == 10
        packet.read_byte use_skill
        Print_text " id stored <&use_skill&>"
        ok = 1

        return void
    endif   

endif

if step == 8
    if packet.LENGTH == 18
        packet.read_byte pak_atk
        if pak_atk != pak_tar
            Print_text " id stored <&pak_atk&>"
            ok = 1

            return void
        endif
    endif   

endif

if step == 9
    if packet.LENGTH != 15
        packet.read_byte save_inv1
        packet.read_int16 save_inv2
        if save_inv2 <= 0
            SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "You need to stop attacking to be able to capture the close inventory  packet!"
            print_text "You need to stop attacking to be able to capture the close inventory packet!"
            return void
        endif
        if save_inv2 >= 257
            SAY_TO_CLIENT "<&CHANNEL_PRIVATE&>" "You need to stop attacking to be able to capture the close inventory  packet!"
            print_text "You need to stop attacking to be able to capture the close inventory packet!"
            return void
        endif
        Print_text " id stored <&save_inv1&> i 2 byte <&save_inv2&>"
        ok = 1
        return void
    endif   

endif

if step == 10
packet.read_byte pak
    if pak == 31
        packet.RESET_INDEX
        packet.write_byte pak_tar
        injectbb packet
        return void
    endif
    if pak == 1
        packet.RESET_INDEX
        packet.write_byte pak_atk
        injectbb packet
        return void
    endif
    if pak == 15
        packet.RESET_INDEX
        packet.write_byte move
        injectbb packet
        return void
    endif

    if pak == 89
        packet.RESET_INDEX
        packet.write_byte validate
        injectbb packet
        return void
    endif

    if pak == 25
        packet.RESET_INDEX
        packet.write_byte use_it
        injectbb packet
        return void
    endif
    if pak == 20
        packet.RESET_INDEX
        packet.write_byte open_inv
        injectbb packet
        return void
    endif

    if pak == 80
        packet.RESET_INDEX
        packet.write_byte open_skill
        injectbb packet
        return void
    endif

    if pak == 166
        packet.RESET_INDEX
        packet.write_byte open_skill2
        injectbb packet
        return void
    endif

    if pak == 57
        packet.RESET_INDEX
        packet.write_byte use_skill
        injectbb packet
        return void
    endif


    if pak == 208
        packet.read_int16 temp_ex
        if temp_ex == 36
            packet.RESET_INDEX
            packet.write_byte save_inv1
            packet.write_int16 save_inv2
            injectbb packet
            return void
        endif
    endif

endif
return void

function block_packets
print_text " blocked"
BLOCK_SELF_ALL
BLOCKEX_SELF_ALL
block_SELF 31 // target
block_SELF 15 // move
block_SELF 89 // vaidate
block_SELF 25 // use item
block_SELF 20 // open inv
block_SELF 36 // save inv
block_SELF 80 // open skill1
block_SELF 166 // open skill2
block_SELF 1 // force attack
block_SELF 57 // force spell
return void

Posted

I tried the new script and I counted that delay of buffing is like 6 seconds.

 

I set in L2.Net to buff himself and he started buffing after 6 seconds after I have set it. So I think it's the same as the previous one.

Posted

I tried the new script and I counted that delay of buffing is like 6 seconds.

 

I set in L2.Net to buff himself and he started buffing after 6 seconds after I have set it. So I think it's the same as the previous one.

 

Confirm

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



  • Posts

    • Reconstructed the MSNP8 client/server chain in Lineage 2 (from C4 to HFp5) with full protocol capabilities + added Discord integration    Clean MSNP8:       MSNP8 + Discord Bridge:   
    • I'm looking for the GVE code for Luecera2.
    • Recommended seller, I'm using his services. Good luck @Ave
    • https://l2.gamedream.pl/ Update #2 — GameDream Interlude (C6)     This update focuses on Epic bosses, quest chains and overall QoL :cool Highlights: Frintezza access follows a full retail-like chain: Four Goblets → Last Imperial Prince → Journey to a Settlement Retail-like entry requirements restored (scroll + Command Channel) Four Goblets quest is now available in-game Shot visuals synced with attack/skill usage Community Board Premium Shop refreshed with classic Interlude buttons and cleaner tables Epic Raidboss access: Frintezza — 4–5 party Command Channel + scroll + Antique Brooch Antharas — Portal Stone Baium — Bloody Fabric Valakas — Floating Stone Queen Ant / Core / Orfen / Zaken — no quest gates Bug Fixes & QoL: Frintezza quest chain fully fixed TvT rewards — single reward + anti-abuse protection Shots — no double triggering Premium Shop — no blank tabs Mammon NPCs in Giran working correctly Cancel works retail-like (up to 5 buffs removed) Summon Friend fixed with anti-exploit guards YetiBuffer — Saved Buff Profiles (Save / Clear / Restore) PvE — increased aggro range + balance tweaks EXP toggle commands: expoff / expon / expblock Thanks for testing and feedback — more updates coming soon ❤️
    • Hello I would like to offer You my NEW 2026 Updater / Launcher with custom skins.   - UPDATER FEATURES -   1. Performance and Intelligent Resource Management: Smart Disk Detection (SSD/HDD): The updater automatically detects the user's drive type. For SSD/NVMe drives: Launches up to 8-12 concurrent threads, utilizing the full yet optimized connection speed. For HDD drives: Limits the thread count (to 2-3) to prevent computer slowdowns and avoid overloading the drive head. Multi-threaded Downloading: Instead of downloading file by file, the updater downloads multiple files simultaneously, drastically reducing update time. ZSTD Compression: Support for the modern Zstandard compression algorithm (.zst). Files are downloaded in compressed form and decompressed on the fly, saving bandwidth and accelerating downloads. HTTP/2 and Keep-Alive Support: Utilizing the HTTP/2 protocol and persistent connections allows for the instant download of thousands of small files without establishing a new connection for each one.   2. Modern User Interface (UI/UX): Transparency and PNG Graphics: Support for irregular window shapes, allowing for the creation of a unique, modern launcher look. Taskbar Integration: The progress bar is displayed not only in the window but also on the Windows taskbar icon. Built-in News Browser (Optional): The updater features a built-in browser module that displays news/changelogs directly within the launcher (without opening an external browser). Multi-language Support (Optional): Built-in language switching system (e.g., EN/PL/RU, etc.) with dynamic loading of button graphics and text. Animated Buttons (Optional): Dedicated, animated buttons redirecting to Discord, Facebook, YouTube, Instagram, and the website.   3. Technical Features and Application Security: Anti-Dual Run (Optional): The updater checks if the game is already running to prevent file conflicts during updates. Error Diagnostics: Built-in logging system (debug_log.txt) and hardware exception handling (SEH), facilitating the diagnosis of problems for players who cannot run the game. Internal Configuration: Updater settings are stored inside the .exe file, eliminating publicly accessible configuration files.   4. File Categorization (Normal vs. Critical vs. Once): Critical Files: Critical files are verified more thoroughly (via MD5 Hash) even in quick check mode to guarantee stability. Normal Files: Standard game files (textures, models, sounds) are checked depending on the selected mode (Quick vs. Full). Once Files (Overwrite Exclusions): Applies to user configuration files (e.g., Option.ini, User.ini).   5. Check Modes (Verification Algorithms): Self-Update: The updater can update itself before checking game files, allowing for easy deployment of launcher fixes. The updater supports two main operating modes that switch intelligently based on user action: Smart Check (Startup Quick Check): Runs automatically upon updater startup or pressing the START button (unless a full check is forced). Full Check (Full MD5 Verification): Manually triggered by the player via the "Full Check" button. Automatic Update Detection: If a newer version of a file appears on the server, it is automatically detected and downloaded without player interaction. Atomic Updates: Files are downloaded and verified first, and only then saved to the disk. This prevents game client corruption in case of internet connection loss. The entire process takes seconds, even with clients weighing 30GB+. - PATCH BUILDER FEATURES -   1. Professional File Structure Management (Tree-List Hybrid): Directory Tree Visualization: Instead of a flat file list, the Builder displays a clear structure of folders and subfolders. You can collapse and expand entire tree branches, facilitating work with thousands of files. Normal and Critical Division: A clear window division into two main zones: Normal Files and Critical Files. Ghost and Excluded Files Division: The interface visually informs about the status of unchanged files (existing in the previous patch version) and files excluded from the update. Show/Hide Ghosts: With one click, you can hide unchanged files to focus solely on what you are actually sending to players in this update.   2. Intuitive Interaction: Drag & Drop: Full Drag & Drop support. You can grab files or entire folders and drag them between the "Normal" and "Critical" lists. Transfer is intelligent – it moves the entire content of selected folders. Keyboard Shortcuts: Fast workflow thanks to keyboard support: Delete, Enter, Ctrl+A / Ctrl+C (select and copy paths).   3. Advanced Filtering and Searching: Context Search: The search bar works in real-time, filtering the file tree. Type /folder: Searches only within folder names. Type *ex: Shows only excluded files. Standard Typing: Searches files by name.   4. Automation and Security: Auto Self-Update: The Builder automatically detects the updater executable file. Real-Time Statistics: The status bar continuously shows the file count (Normal/Critical), total patch weight (in Bytes/MB/GB), and the last update date. System File Protection: Files marked as "Critical" cannot be accidentally added to the exclusion list – the program blocks such actions.   5. Performance (Backend): ZSTD Compression: The Builder uses the latest Zstandard algorithm to compress files before sending, ensuring a significantly smaller patch size than standard ZIP, saving server bandwidth and player time. Multi-threading: The packing and MD5 checksum generation process utilizes multiple CPU threads, drastically reducing patch building time.   - PRICING - NEW Updater standard price: 79 euro (if You ask for mods, price will change).   - CONTACT - Discord: ave7309   CLICK HERE TO CHECK LATEST TEMPLATES!                         * I have right to REFUSE to take an order. * Supported games: Lineage 2 / Black Desert / MU Online / Tantra / Rohan / Aion / Cabal / Fiesta any more...  
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..